API reference

Business setup and members

The business, outlets, brands, channels, devices, members, storefront keys, the storefront page, targets and AI policy.

get

/v1/ai/policy

Per-role investigation-mode ceilings and the owner's monthly AI cap

operationId getAiPolicy

Auth

Member token+Tenant header

Response 200

V1AiPolicycontract v1.ai.policy
  • ceilingsarray of objectrequired
    min items 5max items 5
    • roleenum (5)required
      ownermanagerstaffadvisorjudge
    • mode_ceilingenum (3)required
      stepplanauto
    • sourceenum (2)required
      defaultset
  • capobject | nullrequired
    • monthly_cap_minorintegerrequired
      ≥ 0≤ 9007199254740991
    • currencystringrequired
      pattern ^[A-Z]{3}$

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/ai/policy/ceiling

ai_policy.ceiling.set.v1 — set the highest investigation mode a role may pick (owner only)

operationId setAiModeCeiling

Auth

Member token+Tenant header

Request body

object
  • command_idUuid7required
  • idempotency_keystringrequired
    pattern ^[A-Za-z0-9_.:-]{8,100}$
  • typeconst "ai_policy.ceiling.set.v1"required
  • payloadAiPolicyCeilingSetV1required

Response 200

CommandResultcontract command-result
  • command_idUuid7required
  • typestringrequired
    pattern ^[a-z][a-z_]*(\.[a-z][a-z_]*)+\.v[1-9][0-9]*$
  • entity_idUuid7required
  • committed_atIsoDatetimerequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/ai/policy/cap

ai_policy.cap.set.v1 — set the monthly AI spend cap, never above the operator's limit (owner only)

operationId setAiMonthlyCap

Auth

Member token+Tenant header

Request body

object
  • command_idUuid7required
  • idempotency_keystringrequired
    pattern ^[A-Za-z0-9_.:-]{8,100}$
  • typeconst "ai_policy.cap.set.v1"required
  • payloadAiPolicyCapSetV1required

Response 200

CommandResultcontract command-result
  • command_idUuid7required
  • typestringrequired
    pattern ^[a-z][a-z_]*(\.[a-z][a-z_]*)+\.v[1-9][0-9]*$
  • entity_idUuid7required
  • committed_atIsoDatetimerequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

get

/v1/storefront-pages

The storefront page's saved versions and the live one

operationId listStorefrontPages

Auth

Member token+Tenant header

Response 200

V1StorefrontPagescontract v1.storefront-pages
  • versionsarray of objectrequired
    • page_idUuid7required
    • versionintegerrequired
      ≥ 1≤ 9007199254740991
    • created_atIsoDatetimerequired
    • created_byUuid7required
    • created_by_namestringrequired
  • liveobject | nullrequired
    • page_idUuid7required
    • versionintegerrequired
      ≥ 1≤ 9007199254740991
    • published_atIsoDatetimerequired
    • published_byUuid7required
    • published_by_namestringrequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/storefront-pages

storefront.page.save.v1 — save the next version of the storefront page (owner; all-outlet manager)

operationId saveStorefrontPage

Auth

Member token+Tenant header

Request body

object
  • command_idUuid7required
  • idempotency_keystringrequired
    pattern ^[A-Za-z0-9_.:-]{8,100}$
  • typeconst "storefront.page.save.v1"required
  • payloadStorefrontPageSaveV1required

Response 201

CommandResultcontract command-result
  • command_idUuid7required
  • typestringrequired
    pattern ^[a-z][a-z_]*(\.[a-z][a-z_]*)+\.v[1-9][0-9]*$
  • entity_idUuid7required
  • committed_atIsoDatetimerequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

get

/v1/storefront-pages/{id}

One saved version of the storefront page with its theme and sections

operationId getStorefrontPage

Auth

Member token+Tenant header

Parameters

  • idin pathstringrequired
    pattern ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$

Response 200

V1StorefrontPagecontract v1.storefront-page

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/storefront-pages/{id}:publish

storefront.page.publish.v1 — put a saved version live; an older one restores it (owner)

operationId publishStorefrontPage

Auth

Member token+Tenant header

Parameters

  • idin pathstringrequired
    pattern ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$

Request body

object
  • command_idUuid7required
  • idempotency_keystringrequired
    pattern ^[A-Za-z0-9_.:-]{8,100}$
  • typeconst "storefront.page.publish.v1"required

Response 200

CommandResultcontract command-result
  • command_idUuid7required
  • typestringrequired
    pattern ^[a-z][a-z_]*(\.[a-z][a-z_]*)+\.v[1-9][0-9]*$
  • entity_idUuid7required
  • committed_atIsoDatetimerequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

get

/v1/outlets/{id}/calendar

An outlet's weekly hours and dated overrides (holidays), in the outlet's own zone; an outlet outside the caller's scope is 404

operationId getOutletCalendar

Auth

Member token+Tenant header

Parameters

  • idin pathstringrequired
    pattern ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$

Response 200

V1OutletCalendarcontract v1.outlet.calendar
  • outlet_idUuid7required
  • tzstringrequired
    pattern ^[A-Za-z]+\/[A-Za-z_]+$
  • rowsarray of objectrequired
    • calendar_idUuid7required
    • kindenum (2)required
      weeklyoverride
    • weekdayinteger | nullrequired
      ≥ 0≤ 6
    • on_datestring (date) | nullrequired
      pattern ^(?:(?:[0-9][0-9][2468][048]|[0-9][0-9][13579][26]|[0-9][0-9]0[48]|[02468][048]00|[13579][26]00)-02-29|[0-9]{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01])|(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30)|(?:02)-(?:0[1-9]|1[0-9]|2[0-8])))$
    • opens_atstring | nullrequired
      pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
    • closes_atstring | nullrequired
      pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
    • closedbooleanrequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

get

/v1/outlets

Outlets in the caller's scope

operationId listOutlets

Auth

Member token+Tenant header

Response 200

V1Outletscontract v1.outlets
  • outletsarray of objectrequired
    • idUuid7required
    • namestringrequired
      min length 1max length 200
    • kindenum (3)required
      restaurantcloud_kitchenstore
    • tzstringrequired
      pattern ^[A-Za-z]+\/[A-Za-z_]+$
    • addressstringrequired
    • tax_idsmap of stringrequired
    • accepting_ordersenum (3)required
      openbusypaused
    • busy_extra_minintegerrequired
      ≥ 0≤ 240
    • default_prep_minintegerrequired
      ≥ 0≤ 240
    • cancel_window_minintegerrequired
      ≥ 0≤ 1440
    • reschedule_window_minintegerrequired
      ≥ 0≤ 1440
    • pickup_slot_minintegerrequired
      ≥ 5≤ 120
    • pickup_lead_minintegerrequired
      ≥ 0≤ 1440
    • upi_vpastring | nullrequired
    • business_day_cutoffstringrequired
      pattern ^[0-9]{2}:[0-9]{2}(:[0-9]{2})?$
    • phonestring | nullrequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/outlets

tenancy.outlet.create.v1 — add an outlet (owner)

operationId createOutlet

Auth

Member token+Tenant header

Request body

object
  • command_idUuid7required
  • idempotency_keystringrequired
    pattern ^[A-Za-z0-9_.:-]{8,100}$
  • typeconst "tenancy.outlet.create.v1"required
  • payloadTenancyOutletCreateV1required

Response 200

CommandResultcontract command-result
  • command_idUuid7required
  • typestringrequired
    pattern ^[a-z][a-z_]*(\.[a-z][a-z_]*)+\.v[1-9][0-9]*$
  • entity_idUuid7required
  • committed_atIsoDatetimerequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/outlets/{id}:update

tenancy.outlet.update.v1 — outlet settings (owner; manager of that outlet)

operationId updateOutlet

Auth

Member token+Tenant header

Parameters

  • idin pathstringrequired
    pattern ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$

Request body

object
  • command_idUuid7required
  • idempotency_keystringrequired
    pattern ^[A-Za-z0-9_.:-]{8,100}$
  • typeconst "tenancy.outlet.update.v1"required
  • payloadTenancyOutletUpdateV1required

Response 200

CommandResultcontract command-result
  • command_idUuid7required
  • typestringrequired
    pattern ^[a-z][a-z_]*(\.[a-z][a-z_]*)+\.v[1-9][0-9]*$
  • entity_idUuid7required
  • committed_atIsoDatetimerequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

get

/v1/brands

Brands

operationId listBrands

Auth

Member token+Tenant header

Response 200

V1Brandscontract v1.brands
  • brandsarray of objectrequired
    • idUuid7required
    • namestringrequired
      min length 1max length 200
    • outlet_idsarray of Uuid7required
    • activebooleanrequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/brands

tenancy.brand.create.v1 — add a brand (owner)

operationId createBrand

Auth

Member token+Tenant header

Request body

object
  • command_idUuid7required
  • idempotency_keystringrequired
    pattern ^[A-Za-z0-9_.:-]{8,100}$
  • typeconst "tenancy.brand.create.v1"required
  • payloadTenancyBrandCreateV1required

Response 200

CommandResultcontract command-result
  • command_idUuid7required
  • typestringrequired
    pattern ^[a-z][a-z_]*(\.[a-z][a-z_]*)+\.v[1-9][0-9]*$
  • entity_idUuid7required
  • committed_atIsoDatetimerequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

get

/v1/channels

Sales channels

operationId listChannels

Auth

Member token+Tenant header

Response 200

V1Channelscontract v1.channels
  • channelsarray of objectrequired
    • idUuid7required
    • namestringrequired
      min length 1max length 200
    • kindone of 2required
    • activebooleanrequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/channels

tenancy.channel.create.v1 — add a sales channel (owner)

operationId createChannel

Auth

Member token+Tenant header

Request body

object
  • command_idUuid7required
  • idempotency_keystringrequired
    pattern ^[A-Za-z0-9_.:-]{8,100}$
  • typeconst "tenancy.channel.create.v1"required
  • payloadTenancyChannelCreateV1required

Response 200

CommandResultcontract command-result
  • command_idUuid7required
  • typestringrequired
    pattern ^[a-z][a-z_]*(\.[a-z][a-z_]*)+\.v[1-9][0-9]*$
  • entity_idUuid7required
  • committed_atIsoDatetimerequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

get

/v1/devices

POS and KDS devices

operationId listDevices

Auth

Member token+Tenant header

Response 200

V1Devicescontract v1.devices
  • devicesarray of objectrequired
    • idUuid7required
    • outlet_idUuid7required
    • kindenum (2)required
      poskds
    • invoice_seriesstring | nullrequired
    • last_seen_atIsoDatetime | nullrequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/devices

tenancy.device.register.v1 — register a POS or KDS device (owner; manager of that outlet)

operationId registerDevice

Auth

Member token+Tenant header

Request body

object
  • command_idUuid7required
  • idempotency_keystringrequired
    pattern ^[A-Za-z0-9_.:-]{8,100}$
  • typeconst "tenancy.device.register.v1"required

Response 200

CommandResultcontract command-result
  • command_idUuid7required
  • typestringrequired
    pattern ^[a-z][a-z_]*(\.[a-z][a-z_]*)+\.v[1-9][0-9]*$
  • entity_idUuid7required
  • committed_atIsoDatetimerequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/members:invite

tenancy.member.invite.v1 — invite a member by email (owner)

operationId inviteMember

Auth

Member token+Tenant header

Request body

object
  • command_idUuid7required
  • idempotency_keystringrequired
    pattern ^[A-Za-z0-9_.:-]{8,100}$
  • typeconst "tenancy.member.invite.v1"required
  • payloadTenancyMemberInviteV1required

Response 200

CommandResultcontract command-result
  • command_idUuid7required
  • typestringrequired
    pattern ^[a-z][a-z_]*(\.[a-z][a-z_]*)+\.v[1-9][0-9]*$
  • entity_idUuid7required
  • committed_atIsoDatetimerequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/tenant:update

tenancy.tenant.update.v1 — business settings; country is locked after onboarding (R30)

operationId updateTenant

Auth

Member token+Tenant header

Request body

object
  • command_idUuid7required
  • idempotency_keystringrequired
    pattern ^[A-Za-z0-9_.:-]{8,100}$
  • typeconst "tenancy.tenant.update.v1"required
  • payloadTenancyTenantUpdateV1required

Response 200

CommandResultcontract command-result
  • command_idUuid7required
  • typestringrequired
    pattern ^[a-z][a-z_]*(\.[a-z][a-z_]*)+\.v[1-9][0-9]*$
  • entity_idUuid7required
  • committed_atIsoDatetimerequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/policy

tenancy.policy.set.v1 — the owner's labour and margin targets, as a new dated version (owner)

operationId setBusinessPolicy

Auth

Member token+Tenant header

Request body

object
  • command_idUuid7required
  • idempotency_keystringrequired
    pattern ^[A-Za-z0-9_.:-]{8,100}$
  • typeconst "tenancy.policy.set.v1"required
  • payloadTenancyPolicySetV1required

Response 200

CommandResultcontract command-result
  • command_idUuid7required
  • typestringrequired
    pattern ^[a-z][a-z_]*(\.[a-z][a-z_]*)+\.v[1-9][0-9]*$
  • entity_idUuid7required
  • committed_atIsoDatetimerequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

get

/v1/storefront-keys

Storefront keys (no key material)

operationId listStorefrontKeys

Auth

Member token+Tenant header

Response 200

TenancyStorefrontKeyListcontract tenancy.storefront-key.list
  • keysarray of objectrequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/storefront-keys

Create a storefront key; the raw key is returned once (owner)

operationId createStorefrontKey

Auth

Member token+Tenant header

Request body

TenancyStorefrontKeyCreatecontract tenancy.storefront-key.create
  • key_idUuid7required
  • channel_idUuid7required
  • allowed_originsarray of stringrequired
    max items 20

Response 201

TenancyStorefrontKeyCreatedcontract tenancy.storefront-key.created
  • key_idUuid7required
  • channel_idUuid7required
  • keystringrequired
    min length 16max length 256
  • created_atIsoDatetimerequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/onboarding

tenancy.onboard.v1 — a signed-in person with no tenant creates one: tenant, first outlet, owner membership, pack defaults. The owner's email is the verified IdP email; the same envelope twice makes one tenant

operationId onboard

Auth

Member token

Request body

object
  • command_idUuid7required
  • idempotency_keystringrequired
    pattern ^[A-Za-z0-9_.:-]{8,100}$
  • typeconst "tenancy.onboard.v1"required
  • payloadTenancyOnboardV1required

Response 201

CommandResultcontract command-result
  • command_idUuid7required
  • typestringrequired
    pattern ^[a-z][a-z_]*(\.[a-z][a-z_]*)+\.v[1-9][0-9]*$
  • entity_idUuid7required
  • committed_atIsoDatetimerequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

get

/v1/me/tenants

Where this sign-in is an active member

operationId listMyTenants

Auth

Member token

Response 200

TenancyMeTenantscontract tenancy.me.tenants
  • tenantsarray of objectrequired
    • tenant_idUuid7required
    • tenant_namestringrequired
      min length 1max length 200
    • roleenum (5)required
      ownermanagerstaffadvisorjudge

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/members:bind

tenancy.member.bind.v1 — the invitee's first sign-in binds the IdP subject to the invited member, once. Tenant from the invite link (X-Munim-Tenant); the email must match the invite AND be verified by the IdP, else 404

operationId bindMember

Auth

Member token+Tenant header

Request body

object
  • command_idUuid7required
  • idempotency_keystringrequired
    pattern ^[A-Za-z0-9_.:-]{8,100}$
  • typeconst "tenancy.member.bind.v1"required
  • payloadTenancyMemberBindV1required

Response 200

CommandResultcontract command-result
  • command_idUuid7required
  • typestringrequired
    pattern ^[a-z][a-z_]*(\.[a-z][a-z_]*)+\.v[1-9][0-9]*$
  • entity_idUuid7required
  • committed_atIsoDatetimerequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

get

/v1/me

The caller's own member id, name, role and outlet scope in this tenant (read-only)

operationId getMe

Auth

Member token+Tenant header

Response 200

V1Mecontract v1.me
  • member_idUuid7required
  • tenant_idUuid7required
  • namestringrequired
    min length 1max length 200
  • roleenum (5)required
    ownermanagerstaffadvisorjudge
  • outlet_idsone of 2required

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

get

/v1/tenant

The business's settings row

operationId getTenant

Auth

Member token+Tenant header

Response 200

V1Tenantcontract v1.tenant
  • tenant_idUuid7required
  • namestringrequired
    min length 1max length 200
  • country_codestringrequired
    pattern ^[A-Z]{2}$
  • base_currencystringrequired
    pattern ^[A-Z]{3}$
  • fy_start_monthintegerrequired
    ≥ 1≤ 12
  • statusenum (2)required
    activeretired
  • is_demobooleanrequired
  • onboarded_atIsoDatetime | nullrequired
  • home_tzstring | nullrequired
    pattern ^[A-Za-z]+\/[A-Za-z_]+$

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

get

/v1/members

Members and their roles (owner only)

operationId listMembers

Auth

Member token+Tenant header

Response 200

V1Memberscontract v1.members
  • membersarray of objectrequired
    • idUuid7required
    • namestringrequired
      min length 1max length 200
    • emailstringrequired
      max length 254pattern ^[^\s@]+@[^\s@]+\.[^\s@]+$
    • activebooleanrequired
    • signed_inbooleanrequired
    • roleenum (5)required
      ownermanagerstaffadvisorjudge
    • outlet_idsarray of Uuid7required

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/members/{id}:set-role

tenancy.member.role.set.v1 — change another member's role and outlet scope (owner)

operationId setMemberRole

Auth

Member token+Tenant header

Parameters

  • idin pathstringrequired
    pattern ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$

Request body

object
  • command_idUuid7required
  • idempotency_keystringrequired
    pattern ^[A-Za-z0-9_.:-]{8,100}$
  • typeconst "tenancy.member.role.set.v1"required
  • payloadTenancyMemberRoleSetV1required

Response 200

CommandResultcontract command-result
  • command_idUuid7required
  • typestringrequired
    pattern ^[a-z][a-z_]*(\.[a-z][a-z_]*)+\.v[1-9][0-9]*$
  • entity_idUuid7required
  • committed_atIsoDatetimerequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/members/{id}:deactivate

tenancy.member.deactivate.v1 — deactivate another member; their sign-in stops resolving, their records stay (owner)

operationId deactivateMember

Auth

Member token+Tenant header

Parameters

  • idin pathstringrequired
    pattern ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$

Request body

object
  • command_idUuid7required
  • idempotency_keystringrequired
    pattern ^[A-Za-z0-9_.:-]{8,100}$
  • typeconst "tenancy.member.deactivate.v1"required

Response 200

CommandResultcontract command-result
  • command_idUuid7required
  • typestringrequired
    pattern ^[a-z][a-z_]*(\.[a-z][a-z_]*)+\.v[1-9][0-9]*$
  • entity_idUuid7required
  • committed_atIsoDatetimerequired

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.

post

/v1/storefront-keys/{id}:revoke

Revoke a storefront key; it stops resolving at once (owner)

operationId revokeStorefrontKey

Auth

Member token+Tenant header

Parameters

  • idin pathstringrequired
    pattern ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$

Response 200

TenancyStorefrontKeyRevokedcontract tenancy.storefront-key.revoked

Errors

Every error body carries a code, a message and, where it applies, a reason_code. All error and reason codes.