Skip to content

API Calls

Base: https://api.g3nretailstack.com/ofm

Source of truth: /internal-docs/ofm-openapi.yaml/ofm/openapi.yaml

Notes: samples are schema-derived placeholders. Replace placeholder values (ORGCODE, SESSION_GUID, etc.) with real values.

Inventory

MethodPathSummaryRequest schemaResponse schema
POST/cost-centre/createCreate Cost CentreNoneEnvelope
POST/cost-centre/getGet Cost CentreNoneEnvelope
POST/cost-centre/listList Cost CentreNoneEnvelope
POST/cost-centre/status/setSet Cost Centre StatusNoneEnvelope
POST/cost-centre/updateUpdate Cost CentreNoneEnvelope
POST/facility/legal/createCreate Facility LegalNoneEnvelope
POST/facility/legal/getGet Facility LegalNoneEnvelope
POST/facility/legal/listList Facility LegalNoneEnvelope
POST/facility/legal/statusStatus Facility LegalNoneEnvelope
POST/facility/legal/updateUpdate Facility LegalNoneEnvelope
POST/facility/logical/createCreate Facility LogicalNoneEnvelope
POST/facility/logical/getGet Facility LogicalNoneEnvelope
POST/facility/logical/listList Facility LogicalNoneEnvelope
POST/facility/logical/statusStatus Facility LogicalNoneEnvelope
POST/facility/logical/updateUpdate Facility LogicalNoneEnvelope
POST/facility/physical/createCreate Facility PhysicalNoneEnvelope
POST/facility/physical/getGet Facility PhysicalNoneEnvelope
POST/facility/physical/listList Facility PhysicalNoneEnvelope
POST/facility/physical/statusStatus Facility PhysicalNoneEnvelope
POST/facility/physical/updateUpdate Facility PhysicalNoneEnvelope
POST/member/addDirect Add Member (owner-only)NoneEnvelope
POST/member/assign-logicalCall Member Assign LogicalNoneEnvelope
POST/member/assignmentsCall Member AssignmentsNoneEnvelope
POST/member/detach-logicalCall Member Detach LogicalNoneEnvelope
POST/member/invite/acceptCall Member Invite AcceptNoneEnvelope
POST/member/invite/createCreate Member InviteNoneEnvelope
POST/member/invite/listList Member InviteNoneEnvelope
POST/member/invite/revokeRevoke Member InviteNoneEnvelope
POST/member/listList MemberNoneEnvelope
POST/member/namesBatch-resolve member display namesNoneEnvelope
POST/member/resolveResolve MemberNoneEnvelope
POST/member/state/setSet Member StateNoneEnvelope
POST/org/createCreate OrgNoneEnvelope
POST/org/getGet OrgNoneEnvelope
POST/org/listList OrgNoneEnvelope
POST/org/status/setSet Org StatusNoneEnvelope
POST/org/updateUpdate OrgNoneEnvelope
POST/override-code/generateGenerate Override CodeNoneOkResponse
POST/override-code/listList Override CodesNoneOkResponse
POST/override-code/revokeRevoke Override CodeNoneOkResponse
POST/override-code/validateValidate Override CodeNoneOkResponse
POST/owner/listList OwnerNoneEnvelope
POST/owner/primary/setSet Owner PrimaryNoneEnvelope
POST/owner/secondary/addCall Owner Secondary AddNoneEnvelope
POST/owner/secondary/removeCall Owner Secondary RemoveNoneEnvelope
POST/owner/state/setSet Owner StateNoneEnvelope
POST/profile/assignAssign ProfileNoneOkResponse
POST/profile/createCreate POS Operator ProfileNoneOkResponse
POST/profile/getGet POS Operator ProfileNoneOkResponse
POST/profile/listList POS Operator ProfilesNoneOkResponse
POST/profile/resolveResolve Effective ProfileNoneOkResponse
POST/profile/statusSet Profile StatusNoneOkResponse
POST/profile/unassignUnassign ProfileNoneOkResponse
POST/profile/updateUpdate POS Operator ProfileNoneOkResponse
POST/resolve/cost-centreCall Resolve Cost CentreNoneEnvelope
POST/resolve/facilityCall Resolve FacilityNoneEnvelope
POST/resolve/orgcodeCall Resolve OrgcodeNoneEnvelope
POST/resolve/zoneCall Resolve ZoneNoneEnvelope
POST/sales-channel/config/completeCall Sales Channel Config CompleteNoneEnvelope
POST/sales-channel/config/presignCall Sales Channel Config PresignNoneEnvelope
POST/sales-channel/createCreate Sales ChannelNoneEnvelope
POST/sales-channel/getGet Sales ChannelNoneEnvelope
POST/sales-channel/inventory-sources/getGet Sales Channel Inventory SourcesNoneEnvelope
POST/sales-channel/inventory-sources/setSet Sales Channel Inventory SourcesNoneEnvelope
POST/sales-channel/listList Sales ChannelNoneEnvelope
POST/sales-channel/resolveResolve Sales ChannelNoneEnvelope
POST/sales-channel/statusStatus Sales ChannelNoneEnvelope
POST/sales-channel/updateUpdate Sales ChannelNoneEnvelope
POST/service-account/assign-logicalCall Service Account Assign LogicalNoneEnvelope
POST/service-account/assignmentsCall Service Account AssignmentsNoneEnvelope
POST/service-account/detach-logicalCall Service Account Detach LogicalNoneEnvelope
POST/shift/createCreate ShiftNoneEnvelope
POST/shift/getGet ShiftNoneEnvelope
POST/shift/listList ShiftsNoneEnvelope
POST/shift/statusSet Shift StatusNoneEnvelope
POST/shift/updateUpdate ShiftNoneEnvelope
GET/statHealth check (session required)NoneEnvelope
POST/station/createCreate StationNoneEnvelope
POST/station/getGet StationNoneEnvelope
POST/station/listList StationsNoneEnvelope
POST/station/statusSet Station StatusNoneEnvelope
POST/station/updateUpdate StationNoneEnvelope
POST/team/by-memberCall Team By MemberNoneEnvelope
POST/team/createCreate TeamNoneEnvelope
POST/team/getGet TeamNoneEnvelope
POST/team/listList TeamNoneEnvelope
POST/team/member/addCall Team Member AddNoneEnvelope
POST/team/member/removeCall Team Member RemoveNoneEnvelope
POST/team/membersCall Team MembersNoneEnvelope
POST/team/statusStatus TeamNoneEnvelope
POST/team/updateUpdate TeamNoneEnvelope
POST/timesheet/clock-inClock InNoneEnvelope
POST/timesheet/clock-outClock OutNoneEnvelope
POST/timesheet/getGet Timesheet EntryNoneEnvelope
POST/timesheet/listList Timesheet EntriesNoneEnvelope
POST/timesheet/voidVoid Timesheet EntryNoneEnvelope
POST/zone/createCreate ZoneNoneEnvelope
POST/zone/getGet ZoneNoneEnvelope
POST/zone/listList ZoneNoneEnvelope
POST/zone/statusStatus ZoneNoneEnvelope

Call details

POST /cost-centre/create

Purpose: Create Cost Centre

Notes: Create Cost Centre. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "cc_guid": "string",
    "cccode": "ABCD-1234-EFGH",
    "status": "active",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /cost-centre/create",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /cost-centre/get

Purpose: Get Cost Centre

Notes: Get Cost Centre. Auth is via headers; org identity lives in the JSON body (org_guid + cc_guid). Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "cc_guid": "string",
    "cccode": "ABCD-1234-EFGH",
    "caption": "Example caption"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /cost-centre/get",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /cost-centre/list

Purpose: List Cost Centre

Notes: List Cost Centre. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "cost_centres": [
      {
        "cc_guid": "string",
        "cccode": "ABCD-1234-EFGH",
        "caption": "Example caption"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /cost-centre/list",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /cost-centre/status/set

Purpose: Set Cost Centre Status

Notes: Set Cost Centre Status. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "cc_guid": "string",
    "status": "active",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /cost-centre/status/set",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /cost-centre/update

Purpose: Update Cost Centre

Notes: Update Cost Centre. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "cc_guid": "string",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /cost-centre/update",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /facility/legal/create

Purpose: Create Facility Legal

Notes: Create Facility Legal. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "legal_guid": "string",
    "code": "CODE1",
    "status": "active",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /facility/legal/create",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /facility/legal/get

Purpose: Get Facility Legal

Notes: Get Facility Legal. Auth is via headers; org identity lives in the JSON body (org_guid + legal_guid). Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "code": "CODE1",
    "caption": "Example caption",
    "status": "active"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /facility/legal/get",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /facility/legal/list

Purpose: List Facility Legal

Notes: List Facility Legal. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "facilities": [
      {
        "code": "CODE1",
        "caption": "Example caption",
        "status": "active"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /facility/legal/list",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /facility/legal/status

Purpose: Status Facility Legal

Notes: Status Facility Legal. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Org-scoped reads may return 404 for non-associated callers (anti-enumeration). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "legal_guid": "string",
    "status": "active",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /facility/legal/status",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /facility/legal/update

Purpose: Update Facility Legal

Notes: Update Facility Legal. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "legal_guid": "string",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /facility/legal/update",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /facility/logical/create

Purpose: Create Facility Logical

Notes: Create Facility Logical. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "logical_guid": "LOGICAL_GUID",
    "code": "CODE1",
    "status": "active",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /facility/logical/create",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /facility/logical/get

Purpose: Get Facility Logical

Notes: Get Facility Logical. Auth is via headers; org identity lives in the JSON body (org_guid + logical_guid). Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "code": "CODE1",
    "caption": "Example caption",
    "status": "active"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /facility/logical/get",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /facility/logical/list

Purpose: List Facility Logical

Notes: List Facility Logical. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "facilities": [
      {
        "code": "CODE1",
        "caption": "Example caption",
        "status": "active"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /facility/logical/list",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /facility/logical/status

Purpose: Status Facility Logical

Notes: Status Facility Logical. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Org-scoped reads may return 404 for non-associated callers (anti-enumeration). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "logical_guid": "LOGICAL_GUID",
    "status": "active",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /facility/logical/status",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /facility/logical/update

Purpose: Update Facility Logical

Notes: Update Facility Logical. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "logical_guid": "LOGICAL_GUID",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /facility/logical/update",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /facility/physical/create

Purpose: Create Facility Physical

Notes: Create Facility Physical. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "pf_guid": "33333333-3333-3333-3333-333333333333",
    "code": "PH_MAIN",
    "status": "active",
    "revision": "44444444-4444-4444-4444-444444444444"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /facility/physical/create",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /facility/physical/get

Purpose: Get Facility Physical

Notes: Get Facility Physical. Auth is via headers; org identity lives in the JSON body (org_guid + pf_guid). Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "code": "CODE1",
    "caption": "Example caption",
    "status": "active"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /facility/physical/get",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /facility/physical/list

Purpose: List Facility Physical

Notes: List Facility Physical. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "facilities": [
      {
        "code": "CODE1",
        "caption": "Example caption",
        "status": "active"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /facility/physical/list",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /facility/physical/status

Purpose: Status Facility Physical

Notes: Status Facility Physical. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Org-scoped reads may return 404 for non-associated callers (anti-enumeration). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "pf_guid": "string",
    "status": "active",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /facility/physical/status",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /facility/physical/update

Purpose: Update Facility Physical

Notes: Update Facility Physical. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "pf_guid": "string",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /facility/physical/update",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /member/add

Purpose: Direct Add Member (owner-only)

Notes: Direct Add Member (owner-only). Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Route class Tier C (p95 150ms, p99 400ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /member/add",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /member/assign-logical

Purpose: Call Member Assign Logical

Notes: Call Member Assign Logical. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "user_guid": "USER_GUID",
    "logical_guid": "LOGICAL_GUID",
    "state": "string",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /member/assign-logical",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /member/assignments

Purpose: Call Member Assignments

Notes: Call Member Assignments. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "assignments": [
      {
        "user_guid": "USER_GUID",
        "logical_guid": "LOGICAL_GUID",
        "state": "string"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /member/assignments",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /member/detach-logical

Purpose: Call Member Detach Logical

Notes: Call Member Detach Logical. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "user_guid": "USER_GUID",
    "logical_guid": "LOGICAL_GUID",
    "detached": false
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /member/detach-logical",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /member/invite/accept

Purpose: Call Member Invite Accept

Notes: Call Member Invite Accept. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "user_guid": "USER_GUID",
    "state": "string",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /member/invite/accept",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /member/invite/create

Purpose: Create Member Invite

Notes: Create Member Invite. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "invite_guid": "string",
    "code": "CODE1",
    "status": "active",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /member/invite/create",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /member/invite/list

Purpose: List Member Invite

Notes: List Member Invite. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "invites": [
      {
        "org_guid": "ORG_GUID",
        "invite_guid": "string",
        "code": "CODE1"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /member/invite/list",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /member/invite/revoke

Purpose: Revoke Member Invite

Notes: Revoke Member Invite. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "invite_guid": "string",
    "status": "active",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /member/invite/revoke",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /member/list

Purpose: List Member

Notes: List Member. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "members": [
      {
        "user_guid": "USER_GUID",
        "state": "string",
        "role_profile_id": "string"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /member/list",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /member/names

Purpose: Batch-resolve member display names

Notes: Returns user_guid → display_name for all members and owners in the org. Any authenticated org member can call this (not owner-only). Lightweight DDB projection. Route class Tier B (p95 300ms, p99 600ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{ "org_guid": "ORG_GUID" }

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "names": [
      { "user_guid": "USER_GUID_1", "display_name": "Jane Smith" },
      { "user_guid": "USER_GUID_2", "display_name": "Bob Jones" }
    ]
  },
  "stats": {
    "call": "POST /member/names",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /member/resolve

Purpose: Resolve Member

Notes: Resolve Member. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier C (p95 150ms, p99 400ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "user_guid": "USER_GUID",
    "is_owner": false,
    "roles": [
      "string"
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /member/resolve",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /member/state/set

Purpose: Set Member State

Notes: Set Member State. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "user_guid": "USER_GUID",
    "state": "string",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /member/state/set",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /org/create

Purpose: Create Org

Notes: Create Org. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "00000000-0000-0000-0000-000000000000",
    "orgcode": "ACME",
    "status": "unverified",
    "invitation": {
      "code": "INV123456"
    },
    "owners": {
      "create_owner_user_guid": "11111111-1111-1111-1111-111111111111",
      "primary_owner_user_guid": "11111111-1111-1111-1111-111111111111"
    },
    "cost_centre": {
      "cc_guid": "22222222-2222-2222-2222-222222222222",
      "cccode": "ABCD-EFGH-IJKL"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /org/create",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /org/get

Purpose: Get Org

Notes: Get Org. Auth is via headers; org identity lives in the JSON body (org_guid). Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "orgcode": "ACME",
    "status": "verified",
    "caption": "Acme Inc",
    "timezone": "America/Los_Angeles",
    "fiscal_calendar": {
      "code": "retail-454",
      "start_month": 2,
      "start_day": 1,
      "week_start": "sun"
    },
    "cost_centre_guid": "22222222-2222-2222-2222-222222222222",
    "cost_centre": {
      "cc_guid": "22222222-2222-2222-2222-222222222222",
      "cccode": "ABCD-EFGH-IJKL",
      "caption": "Master cost centre",
      "status": "active"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /org/get",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /org/list

Purpose: List Org

Notes: List Org. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "orgs": [
      {
        "orgcode": "ORGCODE",
        "status": "unverified",
        "caption": "Example caption"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /org/list",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /org/status/set

Purpose: Set Org Status

Notes: Set Org Status. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "status": "unverified",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /org/status/set",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /org/update

Purpose: Update Org

Notes: Update Org. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /org/update",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /override-code/generate

Purpose: Generate Override Code

Notes: Generate 6-digit crypto-random code. Issuer profile validated — cannot exceed own limits.

Request schema: None Response schema: OkResponse

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": "value",
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /override-code/generate",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /override-code/list

Purpose: List Override Codes

Notes: Paginated list with optional status and facility filters.

Request schema: None Response schema: OkResponse

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": "value",
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /override-code/list",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /override-code/revoke

Purpose: Revoke Override Code

Notes: Immediately invalidate an active override code.

Request schema: None Response schema: OkResponse

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": "value",
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /override-code/revoke",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /override-code/validate

Purpose: Validate Override Code

Notes: 7-step validation (exists, active, facility match, type match, limit check, usage check, expiry).

Request schema: None Response schema: OkResponse

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": "value",
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /override-code/validate",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /owner/list

Purpose: List Owner

Notes: List Owner. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "owners": [
      {
        "user_guid": "USER_GUID",
        "create_owner": false,
        "primary_owner": false
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /owner/list",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /owner/primary/set

Purpose: Set Owner Primary

Notes: Set Owner Primary. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "user_guid": "USER_GUID",
    "primary_owner": false,
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /owner/primary/set",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /owner/secondary/add

Purpose: Call Owner Secondary Add

Notes: Call Owner Secondary Add. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "user_guid": "USER_GUID",
    "secondary_owner": false,
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /owner/secondary/add",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /owner/secondary/remove

Purpose: Call Owner Secondary Remove

Notes: Call Owner Secondary Remove. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "user_guid": "USER_GUID",
    "secondary_owner": false,
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /owner/secondary/remove",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /owner/state/set

Purpose: Set Owner State

Notes: Set Owner State. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "user_guid": "USER_GUID",
    "state": "string",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /owner/state/set",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /profile/assign

Purpose: Assign Profile

Notes: Assign profile to member+facility, facility default, or org default. 3-level cascade.

Request schema: None Response schema: OkResponse

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": "value",
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /profile/assign",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /profile/create

Purpose: Create POS Operator Profile

Notes: Create a named profile with 30+ cashier controls (discount limits, tender restrictions, department gating, transaction controls, cash management). Requires owner.

Request schema: None Response schema: OkResponse

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": "value",
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /profile/create",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /profile/get

Purpose: Get POS Operator Profile

Notes: Fetch profile by ID.

Request schema: None Response schema: OkResponse

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": "value",
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /profile/get",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /profile/list

Purpose: List POS Operator Profiles

Notes: Paginated list by status (active/inactive/doomed).

Request schema: None Response schema: OkResponse

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": "value",
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /profile/list",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /profile/resolve

Purpose: Resolve Effective Profile

Notes: 3-level cascade (member→facility→org) to resolve effective profile for a member at a facility.

Request schema: None Response schema: OkResponse

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": "value",
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /profile/resolve",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /profile/status

Purpose: Set Profile Status

Notes: Activate, deactivate, or doom a profile. FSM enforced.

Request schema: None Response schema: OkResponse

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": "value",
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /profile/status",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /profile/unassign

Purpose: Unassign Profile

Notes: Remove member or facility assignment. Org default cannot be unassigned.

Request schema: None Response schema: OkResponse

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": "value",
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /profile/unassign",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /profile/update

Purpose: Update POS Operator Profile

Notes: Partial merge of profile controls. Requires expected_revision.

Request schema: None Response schema: OkResponse

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": "value",
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /profile/update",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /resolve/cost-centre

Purpose: Call Resolve Cost Centre

Notes: Call Resolve Cost Centre. Owner-only. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "cc_guid": "string",
    "cccode": "ABCD-1234-EFGH"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /resolve/cost-centre",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /resolve/facility

Purpose: Call Resolve Facility

Notes: Call Resolve Facility. Owner-only. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "guid": "string",
    "org_guid": "ORG_GUID",
    "code": "CODE1",
    "kind": "physical"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /resolve/facility",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /resolve/orgcode

Purpose: Call Resolve Orgcode

Notes: Call Resolve Orgcode. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /resolve/orgcode",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /resolve/zone

Purpose: Call Resolve Zone

Notes: Call Resolve Zone. Requires facility grant for the logical (or owner). Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "logical_guid": "LOGICAL_GUID",
    "zone_guid": "string",
    "code": "CODE1"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /resolve/zone",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /sales-channel/config/complete

Purpose: Call Sales Channel Config Complete

Notes: Call Sales Channel Config Complete. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "00000000-0000-0000-0000-000000000000",
    "channel_guid": "77777777-7777-7777-7777-777777777777",
    "config": {
      "config_s3_bucket": "ofm-sales-channel-config",
      "config_s3_key": "sales-channel-config/orgcode=ACME/channel_guid=77777777-7777-7777-7777-777777777777/config/1700000000000-aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa.json",
      "config_s3_version_id": "3HL4kqtJlcpXrof3y7Yv9ZVY0fFeiF6o",
      "config_etag": "9e107d9d372bb6826bd81d3542a419d6",
      "config_size_bytes": 1234
    },
    "revision": "99999999-9999-9999-9999-999999999999"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /sales-channel/config/complete",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /sales-channel/config/presign

Purpose: Call Sales Channel Config Presign

Notes: Call Sales Channel Config Presign. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "00000000-0000-0000-0000-000000000000",
    "channel_guid": "77777777-7777-7777-7777-777777777777",
    "expected_revision": "88888888-8888-8888-8888-888888888888",
    "presign": {
      "upload_url": "https://example.com/presigned-upload",
      "method": "PUT",
      "headers": {
        "Content-Type": "application/json"
      },
      "expires_at": "2026-01-01T00:00:00Z"
    },
    "config_s3_bucket": "ofm-sales-channel-config",
    "config_s3_key": "sales-channel-config/orgcode=ACME/channel_guid=77777777-7777-7777-7777-777777777777/config/1700000000000-aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa.json"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /sales-channel/config/presign",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /sales-channel/create

Purpose: Create Sales Channel

Notes: Create Sales Channel. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "00000000-0000-0000-0000-000000000000",
    "channel_guid": "77777777-7777-7777-7777-777777777777",
    "status": "draft",
    "revision": "88888888-8888-8888-8888-888888888888"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /sales-channel/create",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /sales-channel/get

Purpose: Get Sales Channel

Notes: Get Sales Channel. Requires facility grant for the channel logical (or owner). Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "channel_guid": "CHANNEL_GUID",
    "logical_guid": "LOGICAL_GUID",
    "channel_code": "pos_generic"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /sales-channel/get",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /sales-channel/inventory-sources/get

Purpose: Get Sales Channel Inventory Sources

Notes: Retrieve inventory source configuration for a sales channel. Requires facility grant (read) on the channel's primary logical facility. Route class Tier C (p95 400ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "channel_guid": "CHANNEL_GUID",
    "primary": {
      "logical_guid": "LOGICAL_GUID"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /sales-channel/inventory-sources/get",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /sales-channel/inventory-sources/set

Purpose: Set Sales Channel Inventory Sources

Notes: Replace inventory source configuration for a sales channel. Owner-only. Sources define which logical facilities supply inventory (with priority) for this channel. Route class Tier D (p95 800ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "channel_guid": "CHANNEL_GUID",
    "sources": [
      {}
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /sales-channel/inventory-sources/set",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /sales-channel/list

Purpose: List Sales Channel

Notes: List Sales Channel. Org-wide list is owner-only; when logical_guid is provided, requires facility grant for that logical (or owner). Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "sales_channels": [
      {
        "channel_guid": "CHANNEL_GUID",
        "logical_guid": "LOGICAL_GUID",
        "channel_code": "pos_generic"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /sales-channel/list",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /sales-channel/resolve

Purpose: Resolve Sales Channel

Notes: Resolve a sales channel declaration by external identifier. Requires facility grant for the channel logical (or owner). Behavior: - If an active binding exists for the external id, it is returned. - If no active binding exists, the call succeeds only when exactly one non-doomed channel matches; otherwise returns 409 with tag ambiguous.

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "channel_guid": "CHANNEL_GUID",
    "logical_guid": "LOGICAL_GUID",
    "channel_code": "pos_generic"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /sales-channel/resolve",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /sales-channel/status

Purpose: Status Sales Channel

Notes: Status Sales Channel. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Org-scoped reads may return 404 for non-associated callers (anti-enumeration). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "channel_guid": "CHANNEL_GUID",
    "status": "active",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /sales-channel/status",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /sales-channel/update

Purpose: Update Sales Channel

Notes: Update Sales Channel. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "channel_guid": "CHANNEL_GUID",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /sales-channel/update",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /service-account/assign-logical

Purpose: Call Service Account Assign Logical

Notes: Call Service Account Assign Logical. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "service_account_guid": "string",
    "logical_guid": "LOGICAL_GUID",
    "state": "string",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /service-account/assign-logical",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /service-account/assignments

Purpose: Call Service Account Assignments

Notes: Call Service Account Assignments. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "assignments": [
      {
        "service_account_guid": "string",
        "logical_guid": "LOGICAL_GUID",
        "state": "string"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /service-account/assignments",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /service-account/detach-logical

Purpose: Call Service Account Detach Logical

Notes: Call Service Account Detach Logical. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "service_account_guid": "string",
    "logical_guid": "LOGICAL_GUID",
    "detached": false
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /service-account/detach-logical",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /shift/create

Purpose: Create Shift

Notes: Create a scheduled shift assigning a member to a logical facility for a role/position. Requires schedule:write grant. Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "shift_guid": "string",
    "shift_date": "string",
    "start_time": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /shift/create",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /shift/get

Purpose: Get Shift

Notes: Get shift by shift_guid. Requires session + org association. Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "shift_guid": "string",
    "org_guid": "ORG_GUID",
    "logical_guid": "LOGICAL_GUID"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /shift/get",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /shift/list

Purpose: List Shifts

Notes: List shifts by facility+date or member+date. Requires session + org association. Paginated with limit/next_token. Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "items": [
      {}
    ],
    "next_token": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /shift/list",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /shift/status

Purpose: Set Shift Status

Notes: Transition shift status. Allowed: scheduled→active, scheduled→cancelled, active→completed, active→cancelled. Requires schedule:write grant. expected_revision required. Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "shift_guid": "string",
    "status": "active"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /shift/status",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /shift/update

Purpose: Update Shift

Notes: Update mutable fields of a shift (start_time, end_time, role_label, station_guid, notes, user_guid). Requires schedule:write grant. expected_revision required. Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "shift_guid": "string",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /shift/update",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

GET /stat

Purpose: Health check (session required)

Notes: Health check. Requires valid session_guid or api_key. Returns service name and status.

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "note": "See Envelope"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "GET /stat",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /station/create

Purpose: Create Station

Notes: Create a POS station within a logical facility. Requires facility:write or station:write grant. station_code must be unique within the logical facility. Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "station_guid": "string",
    "station_code": "CODE1",
    "station_type": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /station/create",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /station/get

Purpose: Get Station

Notes: Get station by station_guid. Requires facility grant (read) on the station's logical facility. Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "station_guid": "string",
    "org_guid": "ORG_GUID",
    "logical_guid": "LOGICAL_GUID"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /station/get",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /station/list

Purpose: List Stations

Notes: List stations within a logical facility. Requires facility grant (read). Optional status filter. Paginated with limit/next_token. Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "items": [
      {}
    ],
    "next_token": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /station/list",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /station/status

Purpose: Set Station Status

Notes: Transition station status. Allowed transitions: active <-> inactive, active <-> maintenance, inactive <-> maintenance. Requires facility:write or station:write grant. expected_revision required. Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "station_guid": "string",
    "status": "active"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /station/status",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /station/update

Purpose: Update Station

Notes: Update mutable fields of a station (caption, station_type, channel_guid, hardware_profile). Immutable: station_code, logical_guid. Requires facility:write or station:write grant. expected_revision required. Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "station_guid": "string",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /station/update",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /team/by-member

Purpose: Call Team By Member

Notes: Call Team By Member. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "teams": [
      {
        "team_guid": "string",
        "user_guid": "USER_GUID",
        "code": "CODE1"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /team/by-member",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /team/create

Purpose: Create Team

Notes: Create Team. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "team_guid": "string",
    "status": "active",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /team/create",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /team/get

Purpose: Get Team

Notes: Get Team. Auth is via headers; org identity lives in the JSON body (org_guid + team_guid). Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "team_guid": "string",
    "logical_guid": "LOGICAL_GUID",
    "code": "CODE1"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /team/get",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /team/list

Purpose: List Team

Notes: List Team. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "teams": [
      {
        "team_guid": "string",
        "logical_guid": "LOGICAL_GUID",
        "code": "CODE1"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /team/list",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /team/member/add

Purpose: Call Team Member Add

Notes: Call Team Member Add. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "team_guid": "string",
    "user_guid": "USER_GUID",
    "state": "string",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /team/member/add",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /team/member/remove

Purpose: Call Team Member Remove

Notes: Call Team Member Remove. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "team_guid": "string",
    "user_guid": "USER_GUID",
    "removed": false
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /team/member/remove",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /team/members

Purpose: Call Team Members

Notes: Call Team Members. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "members": [
      {
        "team_guid": "string",
        "user_guid": "USER_GUID",
        "state": "string"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /team/members",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /team/status

Purpose: Status Team

Notes: Status Team. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Org-scoped reads may return 404 for non-associated callers (anti-enumeration). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "team_guid": "string",
    "status": "active",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /team/status",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /team/update

Purpose: Update Team

Notes: Update Team. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "team_guid": "string",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /team/update",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /timesheet/clock-in

Purpose: Clock In

Notes: Start a timesheet entry (clock in) for a member at a facility. Only one open entry per member. Requires timesheet:write grant. Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "entry_guid": "string",
    "clock_in": "2026-01-01T00:00:00Z",
    "status": "active"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /timesheet/clock-in",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /timesheet/clock-out

Purpose: Clock Out

Notes: Close an open timesheet entry (clock out). Computes duration_minutes. Requires timesheet:write grant. expected_revision required. Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "entry_guid": "string",
    "clock_out": "2026-01-01T00:00:00Z",
    "duration_minutes": 0
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /timesheet/clock-out",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /timesheet/get

Purpose: Get Timesheet Entry

Notes: Get timesheet entry by entry_guid. Requires session + org association. Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "entry_guid": "string",
    "org_guid": "ORG_GUID",
    "logical_guid": "LOGICAL_GUID"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /timesheet/get",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /timesheet/list

Purpose: List Timesheet Entries

Notes: List timesheet entries by facility+date range or member+date range. Requires session + org association. Paginated with limit/next_token. Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "items": [
      {}
    ],
    "next_token": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /timesheet/list",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /timesheet/void

Purpose: Void Timesheet Entry

Notes: Void an open or closed timesheet entry (manager correction). Requires timesheet:write grant. expected_revision + reason required. Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "entry_guid": "string",
    "status": "active",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /timesheet/void",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /zone/create

Purpose: Create Zone

Notes: Create Zone. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "zone_guid": "55555555-5555-5555-5555-555555555555",
    "code": "AISLE_1",
    "status": "active",
    "depth": 2,
    "revision": "66666666-6666-6666-6666-666666666666"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /zone/create",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /zone/get

Purpose: Get Zone

Notes: Get Zone. Auth is via headers; org identity lives in the JSON body (org_guid + logical_guid + zone_guid). Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "zone_guid": "string",
    "code": "CODE1",
    "caption": "Example caption"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /zone/get",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /zone/list

Purpose: List Zone

Notes: List Zone. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "zones": [
      {
        "zone_guid": "string",
        "code": "CODE1",
        "caption": "Example caption"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /zone/list",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /zone/status

Purpose: Status Zone

Notes: Status Zone. Auth is via headers; org identity lives in the JSON body (org_guid/orgcode/logical_guid). Org-scoped reads may return 404 for non-associated callers (anti-enumeration). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "org_guid": "ORG_GUID",
    "logical_guid": "LOGICAL_GUID",
    "zone_guid": "string",
    "status": "active",
    "revision": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /zone/status",
    "service": "ofm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}