Skip to content
Sections

Guest ordering

Create an encrypted public preorder draft

POST/public/preorders/{publicHandle}/drafts

Creates a short-lived encrypted cart and contact-verification workflow under the published venue policy, without creating an order. Scheduled requests retain the supplied fulfillment time; explicit ASAP requests omit it and defer the bounded native promise to quote creation. Isolated widget-frame creation requires signed widget context and freezes the exact Storefront provenance. Proof renewal preserves the semantic idempotency identity; an original widget bootstrap replay uses its retained draft authority. The returned draft capability protects subsequent access. A required Idempotency-Key makes retries with the same payload return the stored status and body; reusing the key with a different payload returns 409.

Authentication

x-hallify-widget-context: <HALLIFY_STOREFRONT_WIDGET_CONTEXT>

Short-lived server-authenticated widget presentation proof. It binds the configured frame origin to the exact verified parent binding and connection authority. Widget new demand requires this proof; existing native capabilities remain separate and retain their original authority and deadlines.

Connection guide

Parameters

publicHandlePath · Required

Opaque public channel handle used to resolve one venue’s published guest-facing configuration; it is not a credential.

string
Full definition
{
  "type": "string",
  "example": "example"
}
idempotency-keyHeader · Required

Required idempotency key, up to 128 characters

string
Full definition
{
  "type": "string",
  "minLength": 1,
  "maxLength": 128,
  "example": "example"
}
originHeader · Required

Actual browser Origin required for new draft issuance. The server authorizes the canonical Hallify origin or exact Storefront presentation. Widgets use their isolated frame Origin; the parent Origin never replaces it.

string
Full definition
{
  "type": "string",
  "maxLength": 2048,
  "example": "example"
}
x-hallify-connection-idHeader · Optional

Nonsecret Storefront connection locator for initial draft issuance. When supplied, the server resolves that exact authorized native Resource even on the canonical Hallify origin; the locator does not grant access.

string
Full definition
{
  "type": "string",
  "minLength": 1,
  "maxLength": 64,
  "pattern": "^[A-Za-z0-9_-]{1,64}$",
  "example": "example"
}

Request body

Required

Native public ordering input. Scheduled requests require scheduledFor and may omit timingMode for legacy compatibility. ASAP requests require timingMode=ASAP and forbid scheduledFor; the native quote freezes the server-selected promise.

application/json

oneOf
Full definition
{
  "oneOf": [
    {
      "$ref": "#/components/schemas/PublicPreorderScheduledDraftBodyDto"
    },
    {
      "allOf": [
        {
          "$ref": "#/components/schemas/PublicPreorderAsapDraftBodyDto"
        }
      ],
      "not": {
        "required": [
          "scheduledFor"
        ],
        "example": {
          "scheduledFor": "example"
        }
      },
      "example": {
        "partySize": 1,
        "contactName": "Example name",
        "salesChannelId": "ff0fa725-ba44-4e7a-82bb-a15650e0a0cc",
        "clientMenuVersionId": "cd2f2c2a-ba73-4579-8e32-52da8388fd05",
        "clientGraphHash": "menu-cost-v1.graph.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
        "items": [
          {
            "clientLineId": "example-id",
            "quantity": 1
          }
        ],
        "termsVersion": "example",
        "privacyVersion": "example",
        "serviceMode": "PICKUP",
        "timingMode": "ASAP"
      }
    }
  ],
  "example": {
    "serviceMode": "DINE_IN",
    "partySize": 1,
    "contactName": "Example name",
    "salesChannelId": "ff0fa725-ba44-4e7a-82bb-a15650e0a0cc",
    "clientMenuVersionId": "cd2f2c2a-ba73-4579-8e32-52da8388fd05",
    "clientGraphHash": "menu-cost-v1.graph.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
    "items": [
      {
        "clientLineId": "example-id",
        "quantity": 1
      }
    ],
    "termsVersion": "example",
    "privacyVersion": "example",
    "scheduledFor": "2026-01-15T12:00:00.000Z"
  }
}

Responses

201Returns the draft reference, expiry, redacted verification state, and draft capability token.
PreorderPublicCreateDraftResultDto
Full definition
{
  "$ref": "#/components/schemas/PreorderPublicCreateDraftResultDto"
}
Example response · 201 · application/json
{
  "draftReference": "example-reference",
  "resumeToken": "synthetic-example-credential",
  "status": "PENDING_VERIFICATION",
  "verificationId": "904a18d4-c890-4387-8e14-bc52c879c7ff",
  "verificationExpiresAt": "2026-12-31T18:00:00.000Z",
  "expiresAt": "2026-12-31T18:00:00.000Z"
}
402Commercial coverage is required for new demand, or this operation has no original commercial admission evidence. Existing authorized reads and financial recovery remain available.
TranslatedErrorDto
Full definition
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Example response · 402 · application/json
{
  "statusCode": 402,
  "error": "errors:http.failure",
  "code": "HTTP_402",
  "message": "errors:http.failure",
  "translationKey": "errors:http.failure"
}
404The public channel, original bootstrap source, widget proof or exact presentation is unavailable. Error codes: PREORDER_PUBLIC_RESOURCE_NOT_FOUND, STOREFRONT_PRESENTATION_UNAVAILABLE.
TranslatedErrorDto
Full definition
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Example response · 404 · application/json
{
  "statusCode": 404,
  "error": "errors:http.notFound",
  "code": "HTTP_NOT_FOUND",
  "message": "errors:http.notFound",
  "translationKey": "errors:http.notFound"
}
409Idempotency key is already in progress or was reused with a different payload
IdempotencyConflictError
Full definition
{
  "$ref": "#/components/schemas/IdempotencyConflictError"
}
Example response · 409 · application/json
{
  "statusCode": 409,
  "error": "errors:http.conflict",
  "code": "IDEMPOTENCY_REQUEST_IN_PROGRESS",
  "message": "errors:idempotency.inProgress",
  "translationKey": "errors:idempotency.inProgress"
}
503Authoritative commercial state is unavailable or cannot be read within its bounded source contract. Retry the same operation after recovery. Authoritative commercial state is unavailable or cannot be read within its bounded source contract, or widget authority configuration is unavailable. Widget configuration failure uses STOREFRONT_WIDGET_UNAVAILABLE. Retry the same operation after recovery.
TranslatedErrorDto
Full definition
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Example response · 503 · application/json
{
  "statusCode": 503,
  "error": "errors:http.serviceUnavailable",
  "code": "HTTP_SERVICE_UNAVAILABLE",
  "message": "errors:http.serviceUnavailable",
  "translationKey": "errors:http.serviceUnavailable"
}

Schemas

PublicPreorderScheduledDraftBodyDto

Scheduled public ordering draft input. An omitted timingMode preserves the existing scheduled request format. The caller supplies the exact scheduledFor instant; all native policy, menu and capacity rules remain authoritative.

serviceModeRequired

Allowed service mode for public preorder draft: DINE_IN, PICKUP, DELIVERY, CATERING.

string
Full definition
{
  "type": "string",
  "enum": [
    "DINE_IN",
    "PICKUP",
    "DELIVERY",
    "CATERING"
  ],
  "description": "Allowed service mode for public preorder draft: DINE_IN, PICKUP, DELIVERY, CATERING.",
  "example": "DINE_IN"
}
partySizeRequired

Whole-number party size recorded for public preorder draft. Accepted values enforce minimum 1 and maximum 10000.

integer
Full definition
{
  "type": "integer",
  "minimum": 1,
  "maximum": 10000,
  "description": "Whole-number party size recorded for public preorder draft. Accepted values enforce minimum 1 and maximum 10000.",
  "example": 1
}
contactNameRequired

Human-readable contact name for public preorder draft.

string
Full definition
{
  "type": "string",
  "description": "Human-readable contact name for public preorder draft.",
  "example": "Example name"
}
contactPhoneOptional

Telephone number recorded for contact phone in public preorder draft. Null means no value is recorded for this representation.

string · null
Full definition
{
  "type": "string",
  "nullable": true,
  "description": "Telephone number recorded for contact phone in public preorder draft. Null means no value is recorded for this representation.",
  "example": "+995555000000"
}
contactEmailOptional

Email address recorded for contact email in public preorder draft. Null means no value is recorded for this representation.

string · email · null
Full definition
{
  "type": "string",
  "nullable": true,
  "description": "Email address recorded for contact email in public preorder draft. Null means no value is recorded for this representation.",
  "format": "email",
  "example": "user@example.test"
}
addressLine1Optional

Primary street-address line for public preorder draft. Null means no value is recorded for this representation.

string · null
Full definition
{
  "type": "string",
  "nullable": true,
  "description": "Primary street-address line for public preorder draft. Null means no value is recorded for this representation.",
  "example": "example"
}
addressLine2Optional

Optional secondary address details such as unit, floor, or building for public preorder draft. Null means no value is recorded for this representation.

string · null
Full definition
{
  "type": "string",
  "nullable": true,
  "description": "Optional secondary address details such as unit, floor, or building for public preorder draft. Null means no value is recorded for this representation.",
  "example": "example"
}
cityOptional

City or locality recorded for the address represented by public preorder draft. Null means no value is recorded for this representation.

string · null
Full definition
{
  "type": "string",
  "nullable": true,
  "description": "City or locality recorded for the address represented by public preorder draft. Null means no value is recorded for this representation.",
  "example": "example"
}
regionOptional

Region, state, or administrative subdivision recorded for public preorder draft. Null means no value is recorded for this representation.

string · null
Full definition
{
  "type": "string",
  "nullable": true,
  "description": "Region, state, or administrative subdivision recorded for public preorder draft. Null means no value is recorded for this representation.",
  "example": "example"
}
postalCodeOptional

Stable postal code used to classify or address public preorder draft. Null means no value is recorded for this representation.

string · null
Full definition
{
  "type": "string",
  "nullable": true,
  "description": "Stable postal code used to classify or address public preorder draft. Null means no value is recorded for this representation.",
  "example": "EXAMPLE"
}
countryCodeOptional

Stable country code used to classify or address public preorder draft. Null means no value is recorded for this representation.

string · null
Full definition
{
  "type": "string",
  "nullable": true,
  "description": "Stable country code used to classify or address public preorder draft. Null means no value is recorded for this representation.",
  "example": "GE"
}
administrativeDivisionIdOptional

Hallify UUID identifying administrative division associated with public preorder draft. Null means no value is recorded for this representation.

string · uuid · null
Full definition
{
  "type": "string",
  "format": "uuid",
  "nullable": true,
  "description": "Hallify UUID identifying administrative division associated with public preorder draft. Null means no value is recorded for this representation.",
  "example": "c8efbc76-614d-4a79-8f15-db6d48283d46"
}
localityIdOptional

Hallify UUID identifying locality associated with public preorder draft. Null means no value is recorded for this representation.

string · uuid · null
Full definition
{
  "type": "string",
  "format": "uuid",
  "nullable": true,
  "description": "Hallify UUID identifying locality associated with public preorder draft. Null means no value is recorded for this representation.",
  "example": "1bfa5864-39f3-4647-8093-42aea5d9d046"
}
postalCodeIdOptional

Hallify UUID identifying postal code associated with public preorder draft. Null means no value is recorded for this representation.

string · uuid · null
Full definition
{
  "type": "string",
  "format": "uuid",
  "nullable": true,
  "description": "Hallify UUID identifying postal code associated with public preorder draft. Null means no value is recorded for this representation.",
  "example": "7424d59b-d459-4e7b-8cbc-7f5222274f26"
}
latitudeOptional

Fraction-capable numeric latitude recorded for public preorder draft. Accepted values enforce minimum -90 and maximum 90. Null means no value is recorded for this representation.

number · null
Full definition
{
  "type": "number",
  "minimum": -90,
  "maximum": 90,
  "nullable": true,
  "description": "Fraction-capable numeric latitude recorded for public preorder draft. Accepted values enforce minimum -90 and maximum 90. Null means no value is recorded for this representation.",
  "example": 41.7151
}
longitudeOptional

Fraction-capable numeric longitude recorded for public preorder draft. Accepted values enforce minimum -180 and maximum 180. Null means no value is recorded for this representation.

number · null
Full definition
{
  "type": "number",
  "minimum": -180,
  "maximum": 180,
  "nullable": true,
  "description": "Fraction-capable numeric longitude recorded for public preorder draft. Accepted values enforce minimum -180 and maximum 180. Null means no value is recorded for this representation.",
  "example": 44.8271
}
deliveryInstructionsOptional

Delivery instructions for public preorder draft. Null means no value is recorded for this representation.

string · null
Full definition
{
  "type": "string",
  "nullable": true,
  "description": "Delivery instructions for public preorder draft. Null means no value is recorded for this representation.",
  "example": "example"
}
noteOptional

Human-entered note retained with public preorder draft. Null means no value is recorded for this representation.

string · null
Full definition
{
  "type": "string",
  "nullable": true,
  "description": "Human-entered note retained with public preorder draft. Null means no value is recorded for this representation.",
  "example": "Synthetic example"
}
deliveryMethodOptional

Requested delivery method. Omission preserves venue SELF delivery; other service modes must omit it.

string
Full definition
{
  "type": "string",
  "enum": [
    "SELF",
    "UBER_DIRECT",
    "WOLT_DRIVE"
  ],
  "description": "Requested delivery method. Omission preserves venue SELF delivery; other service modes must omit it.",
  "example": "SELF"
}
deliveryQuoteIdOptional

Native prepared delivery quote selected for this exact demand. Historical SELF acceptance may retain null or omission.

string · uuid · null
Full definition
{
  "type": "string",
  "format": "uuid",
  "nullable": true,
  "description": "Native prepared delivery quote selected for this exact demand. Historical SELF acceptance may retain null or omission.",
  "example": "6cd7f319-5499-46ba-88b6-d3c97f979668"
}
salesChannelIdRequired

Hallify UUID identifying sales channel associated with public preorder draft.

string · uuid
Full definition
{
  "type": "string",
  "format": "uuid",
  "description": "Hallify UUID identifying sales channel associated with public preorder draft.",
  "example": "ff0fa725-ba44-4e7a-82bb-a15650e0a0cc"
}
clientMenuVersionIdRequired

Hallify UUID identifying client menu version associated with public preorder draft.

string · uuid
Full definition
{
  "type": "string",
  "format": "uuid",
  "description": "Hallify UUID identifying client menu version associated with public preorder draft.",
  "example": "cd2f2c2a-ba73-4579-8e32-52da8388fd05"
}
clientGraphHashRequired

Opaque graph token returned by the published menu endpoint.

string
Full definition
{
  "type": "string",
  "description": "Opaque graph token returned by the published menu endpoint.",
  "pattern": "^menu-cost-v1\\.graph\\.[A-Za-z0-9_-]{43}$",
  "example": "menu-cost-v1.graph.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
itemsRequired

Preorder cart line returned in the public preorder draft collection.

array
Full definition
{
  "minItems": 1,
  "maxItems": 100,
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/PublicPreorderCartLineDto"
  },
  "description": "Preorder cart line returned in the public preorder draft collection.",
  "example": [
    {
      "clientLineId": "example-id",
      "quantity": 1
    }
  ]
}
termsVersionRequired

Terms version for public preorder draft. Accepted values enforce minimum length 1 and maximum length 64.

string
Full definition
{
  "type": "string",
  "minLength": 1,
  "maxLength": 64,
  "description": "Terms version for public preorder draft. Accepted values enforce minimum length 1 and maximum length 64.",
  "example": "example"
}
privacyVersionRequired

Privacy version for public preorder draft. Accepted values enforce minimum length 1 and maximum length 64.

string
Full definition
{
  "type": "string",
  "minLength": 1,
  "maxLength": 64,
  "description": "Privacy version for public preorder draft. Accepted values enforce minimum length 1 and maximum length 64.",
  "example": "example"
}
timingModeOptional

Explicit scheduled timing intent. Existing clients may omit this property; omission is retained rather than inserted into the original request fingerprint.

string
Full definition
{
  "type": "string",
  "enum": [
    "SCHEDULED"
  ],
  "description": "Explicit scheduled timing intent. Existing clients may omit this property; omission is retained rather than inserted into the original request fingerprint.",
  "example": "SCHEDULED"
}
scheduledForRequired

Requested scheduled fulfillment instant with an explicit UTC offset. The native owner validates its lead time, venue timezone, service window and capacity.

string · date-time
Full definition
{
  "type": "string",
  "format": "date-time",
  "pattern": "(?:Z|[+-]\\d{2}:\\d{2})$",
  "description": "Requested scheduled fulfillment instant with an explicit UTC offset. The native owner validates its lead time, venue timezone, service window and capacity.",
  "example": "2026-01-15T12:00:00.000Z"
}
Full definition
{
  "type": "object",
  "properties": {
    "serviceMode": {
      "type": "string",
      "enum": [
        "DINE_IN",
        "PICKUP",
        "DELIVERY",
        "CATERING"
      ],
      "description": "Allowed service mode for public preorder draft: DINE_IN, PICKUP, DELIVERY, CATERING.",
      "example": "DINE_IN"
    },
    "partySize": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10000,
      "description": "Whole-number party size recorded for public preorder draft. Accepted values enforce minimum 1 and maximum 10000.",
      "example": 1
    },
    "contactName": {
      "type": "string",
      "description": "Human-readable contact name for public preorder draft.",
      "example": "Example name"
    },
    "contactPhone": {
      "type": "string",
      "nullable": true,
      "description": "Telephone number recorded for contact phone in public preorder draft. Null means no value is recorded for this representation.",
      "example": "+995555000000"
    },
    "contactEmail": {
      "type": "string",
      "nullable": true,
      "description": "Email address recorded for contact email in public preorder draft. Null means no value is recorded for this representation.",
      "format": "email",
      "example": "user@example.test"
    },
    "addressLine1": {
      "type": "string",
      "nullable": true,
      "description": "Primary street-address line for public preorder draft. Null means no value is recorded for this representation.",
      "example": "example"
    },
    "addressLine2": {
      "type": "string",
      "nullable": true,
      "description": "Optional secondary address details such as unit, floor, or building for public preorder draft. Null means no value is recorded for this representation.",
      "example": "example"
    },
    "city": {
      "type": "string",
      "nullable": true,
      "description": "City or locality recorded for the address represented by public preorder draft. Null means no value is recorded for this representation.",
      "example": "example"
    },
    "region": {
      "type": "string",
      "nullable": true,
      "description": "Region, state, or administrative subdivision recorded for public preorder draft. Null means no value is recorded for this representation.",
      "example": "example"
    },
    "postalCode": {
      "type": "string",
      "nullable": true,
      "description": "Stable postal code used to classify or address public preorder draft. Null means no value is recorded for this representation.",
      "example": "EXAMPLE"
    },
    "countryCode": {
      "type": "string",
      "nullable": true,
      "description": "Stable country code used to classify or address public preorder draft. Null means no value is recorded for this representation.",
      "example": "GE"
    },
    "administrativeDivisionId": {
      "type": "string",
      "format": "uuid",
      "nullable": true,
      "description": "Hallify UUID identifying administrative division associated with public preorder draft. Null means no value is recorded for this representation.",
      "example": "c8efbc76-614d-4a79-8f15-db6d48283d46"
    },
    "localityId": {
      "type": "string",
      "format": "uuid",
      "nullable": true,
      "description": "Hallify UUID identifying locality associated with public preorder draft. Null means no value is recorded for this representation.",
      "example": "1bfa5864-39f3-4647-8093-42aea5d9d046"
    },
    "postalCodeId": {
      "type": "string",
      "format": "uuid",
      "nullable": true,
      "description": "Hallify UUID identifying postal code associated with public preorder draft. Null means no value is recorded for this representation.",
      "example": "7424d59b-d459-4e7b-8cbc-7f5222274f26"
    },
    "latitude": {
      "type": "number",
      "minimum": -90,
      "maximum": 90,
      "nullable": true,
      "description": "Fraction-capable numeric latitude recorded for public preorder draft. Accepted values enforce minimum -90 and maximum 90. Null means no value is recorded for this representation.",
      "example": 41.7151
    },
    "longitude": {
      "type": "number",
      "minimum": -180,
      "maximum": 180,
      "nullable": true,
      "description": "Fraction-capable numeric longitude recorded for public preorder draft. Accepted values enforce minimum -180 and maximum 180. Null means no value is recorded for this representation.",
      "example": 44.8271
    },
    "deliveryInstructions": {
      "type": "string",
      "nullable": true,
      "description": "Delivery instructions for public preorder draft. Null means no value is recorded for this representation.",
      "example": "example"
    },
    "note": {
      "type": "string",
      "nullable": true,
      "description": "Human-entered note retained with public preorder draft. Null means no value is recorded for this representation.",
      "example": "Synthetic example"
    },
    "deliveryMethod": {
      "type": "string",
      "enum": [
        "SELF",
        "UBER_DIRECT",
        "WOLT_DRIVE"
      ],
      "description": "Requested delivery method. Omission preserves venue SELF delivery; other service modes must omit it.",
      "example": "SELF"
    },
    "deliveryQuoteId": {
      "type": "string",
      "format": "uuid",
      "nullable": true,
      "description": "Native prepared delivery quote selected for this exact demand. Historical SELF acceptance may retain null or omission.",
      "example": "6cd7f319-5499-46ba-88b6-d3c97f979668"
    },
    "salesChannelId": {
      "type": "string",
      "format": "uuid",
      "description": "Hallify UUID identifying sales channel associated with public preorder draft.",
      "example": "ff0fa725-ba44-4e7a-82bb-a15650e0a0cc"
    },
    "clientMenuVersionId": {
      "type": "string",
      "format": "uuid",
      "description": "Hallify UUID identifying client menu version associated with public preorder draft.",
      "example": "cd2f2c2a-ba73-4579-8e32-52da8388fd05"
    },
    "clientGraphHash": {
      "type": "string",
      "description": "Opaque graph token returned by the published menu endpoint.",
      "pattern": "^menu-cost-v1\\.graph\\.[A-Za-z0-9_-]{43}$",
      "example": "menu-cost-v1.graph.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    },
    "items": {
      "minItems": 1,
      "maxItems": 100,
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/PublicPreorderCartLineDto"
      },
      "description": "Preorder cart line returned in the public preorder draft collection.",
      "example": [
        {
          "clientLineId": "example-id",
          "quantity": 1
        }
      ]
    },
    "termsVersion": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "description": "Terms version for public preorder draft. Accepted values enforce minimum length 1 and maximum length 64.",
      "example": "example"
    },
    "privacyVersion": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "description": "Privacy version for public preorder draft. Accepted values enforce minimum length 1 and maximum length 64.",
      "example": "example"
    },
    "timingMode": {
      "type": "string",
      "enum": [
        "SCHEDULED"
      ],
      "description": "Explicit scheduled timing intent. Existing clients may omit this property; omission is retained rather than inserted into the original request fingerprint.",
      "example": "SCHEDULED"
    },
    "scheduledFor": {
      "type": "string",
      "format": "date-time",
      "pattern": "(?:Z|[+-]\\d{2}:\\d{2})$",
      "description": "Requested scheduled fulfillment instant with an explicit UTC offset. The native owner validates its lead time, venue timezone, service window and capacity.",
      "example": "2026-01-15T12:00:00.000Z"
    }
  },
  "description": "Scheduled public ordering draft input. An omitted timingMode preserves the existing scheduled request format. The caller supplies the exact scheduledFor instant; all native policy, menu and capacity rules remain authoritative.",
  "required": [
    "serviceMode",
    "partySize",
    "contactName",
    "salesChannelId",
    "clientMenuVersionId",
    "clientGraphHash",
    "items",
    "termsVersion",
    "privacyVersion",
    "scheduledFor"
  ],
  "example": {
    "serviceMode": "DINE_IN",
    "partySize": 1,
    "contactName": "Example name",
    "salesChannelId": "ff0fa725-ba44-4e7a-82bb-a15650e0a0cc",
    "clientMenuVersionId": "cd2f2c2a-ba73-4579-8e32-52da8388fd05",
    "clientGraphHash": "menu-cost-v1.graph.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
    "items": [
      {
        "clientLineId": "example-id",
        "quantity": 1
      }
    ],
    "termsVersion": "example",
    "privacyVersion": "example",
    "scheduledFor": "2026-01-15T12:00:00.000Z"
  }
}
PublicPreorderCartLineDto

Guest preorder cart line containing published item or variant identity, quantity, modifiers, component selections, and a kitchen request.

clientLineIdRequired

Stable cart line identifier generated by the guest client and retained across quote and acceptance.

string
Full definition
{
  "type": "string",
  "description": "Stable cart line identifier generated by the guest client and retained across quote and acceptance.",
  "pattern": "^[A-Za-z0-9][A-Za-z0-9:_-]{0,79}$",
  "example": "example-id"
}
menuItemIdOptional

Hallify UUID of the published menu item selected when the line does not select a menu variant.

string · uuid
Full definition
{
  "type": "string",
  "format": "uuid",
  "description": "Hallify UUID of the published menu item selected when the line does not select a menu variant.",
  "example": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd"
}
menuVariantIdOptional

Hallify UUID of the published menu variant selected instead of a menu item identity.

string · uuid
Full definition
{
  "type": "string",
  "format": "uuid",
  "description": "Hallify UUID of the published menu variant selected instead of a menu item identity.",
  "example": "94389946-e5d8-4fba-8358-e3a9c8a04b11"
}
quantityRequired

Requested whole-number line quantity from 1 through 999, subject to the published preorder eligibility rules.

integer
Full definition
{
  "type": "integer",
  "minimum": 1,
  "maximum": 999,
  "description": "Requested whole-number line quantity from 1 through 999, subject to the published preorder eligibility rules.",
  "example": 1
}
modifierOptionIdsOptional

Up to 20 distinct published modifier option UUIDs selected for the cart line.

array
Full definition
{
  "maxItems": 20,
  "type": "array",
  "items": {
    "type": "string",
    "format": "uuid",
    "example": "d251fdb0-274c-4e59-8e7e-b1d90e1433bc"
  },
  "description": "Up to 20 distinct published modifier option UUIDs selected for the cart line.",
  "example": [
    "d251fdb0-274c-4e59-8e7e-b1d90e1433bc"
  ]
}
specialRequestOptional

Optional guest request shown to the kitchen, limited to 500 characters.

string
Full definition
{
  "type": "string",
  "maxLength": 500,
  "description": "Optional guest request shown to the kitchen, limited to 500 characters.",
  "example": "example"
}
componentSelectionsOptional

Up to 50 guest component selections validated against the published item structure.

array
Full definition
{
  "maxItems": 50,
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/PublicPreorderComponentSelectionDto"
  },
  "description": "Up to 50 guest component selections validated against the published item structure.",
  "example": [
    {
      "groupId": "example-id",
      "choiceId": "example-id"
    }
  ]
}
Full definition
{
  "type": "object",
  "properties": {
    "clientLineId": {
      "type": "string",
      "description": "Stable cart line identifier generated by the guest client and retained across quote and acceptance.",
      "pattern": "^[A-Za-z0-9][A-Za-z0-9:_-]{0,79}$",
      "example": "example-id"
    },
    "menuItemId": {
      "type": "string",
      "format": "uuid",
      "description": "Hallify UUID of the published menu item selected when the line does not select a menu variant.",
      "example": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd"
    },
    "menuVariantId": {
      "type": "string",
      "format": "uuid",
      "description": "Hallify UUID of the published menu variant selected instead of a menu item identity.",
      "example": "94389946-e5d8-4fba-8358-e3a9c8a04b11"
    },
    "quantity": {
      "type": "integer",
      "minimum": 1,
      "maximum": 999,
      "description": "Requested whole-number line quantity from 1 through 999, subject to the published preorder eligibility rules.",
      "example": 1
    },
    "modifierOptionIds": {
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "string",
        "format": "uuid",
        "example": "d251fdb0-274c-4e59-8e7e-b1d90e1433bc"
      },
      "description": "Up to 20 distinct published modifier option UUIDs selected for the cart line.",
      "example": [
        "d251fdb0-274c-4e59-8e7e-b1d90e1433bc"
      ]
    },
    "specialRequest": {
      "type": "string",
      "maxLength": 500,
      "description": "Optional guest request shown to the kitchen, limited to 500 characters.",
      "example": "example"
    },
    "componentSelections": {
      "maxItems": 50,
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/PublicPreorderComponentSelectionDto"
      },
      "description": "Up to 50 guest component selections validated against the published item structure.",
      "example": [
        {
          "groupId": "example-id",
          "choiceId": "example-id"
        }
      ]
    }
  },
  "required": [
    "clientLineId",
    "quantity"
  ],
  "description": "Guest preorder cart line containing published item or variant identity, quantity, modifiers, component selections, and a kitchen request.",
  "example": {
    "clientLineId": "example-id",
    "quantity": 1
  }
}
PublicPreorderComponentSelectionDto

Guest-selected component group, choice, sellable version, and modifiers from the published preorder menu.

groupIdRequired

Stable component group identifier from the published item structure.

string
Full definition
{
  "type": "string",
  "description": "Stable component group identifier from the published item structure.",
  "maxLength": 96,
  "example": "example-id"
}
choiceIdRequired

Stable selected choice identifier within the published component group.

string
Full definition
{
  "type": "string",
  "description": "Stable selected choice identifier within the published component group.",
  "maxLength": 160,
  "example": "example-id"
}
menuVariantIdOptional

Hallify UUID of the selected sellable version when the component offers variants.

string · uuid
Full definition
{
  "type": "string",
  "description": "Hallify UUID of the selected sellable version when the component offers variants.",
  "format": "uuid",
  "example": "94389946-e5d8-4fba-8358-e3a9c8a04b11"
}
modifierOptionIdsOptional

Up to 20 distinct published modifier option UUIDs selected for this component.

array
Full definition
{
  "description": "Up to 20 distinct published modifier option UUIDs selected for this component.",
  "type": "array",
  "items": {
    "type": "string",
    "format": "uuid",
    "example": "d251fdb0-274c-4e59-8e7e-b1d90e1433bc"
  },
  "example": [
    "d251fdb0-274c-4e59-8e7e-b1d90e1433bc"
  ]
}
Full definition
{
  "type": "object",
  "properties": {
    "groupId": {
      "type": "string",
      "description": "Stable component group identifier from the published item structure.",
      "maxLength": 96,
      "example": "example-id"
    },
    "choiceId": {
      "type": "string",
      "description": "Stable selected choice identifier within the published component group.",
      "maxLength": 160,
      "example": "example-id"
    },
    "menuVariantId": {
      "type": "string",
      "description": "Hallify UUID of the selected sellable version when the component offers variants.",
      "format": "uuid",
      "example": "94389946-e5d8-4fba-8358-e3a9c8a04b11"
    },
    "modifierOptionIds": {
      "description": "Up to 20 distinct published modifier option UUIDs selected for this component.",
      "type": "array",
      "items": {
        "type": "string",
        "format": "uuid",
        "example": "d251fdb0-274c-4e59-8e7e-b1d90e1433bc"
      },
      "example": [
        "d251fdb0-274c-4e59-8e7e-b1d90e1433bc"
      ]
    }
  },
  "required": [
    "groupId",
    "choiceId"
  ],
  "description": "Guest-selected component group, choice, sellable version, and modifiers from the published preorder menu.",
  "example": {
    "groupId": "example-id",
    "choiceId": "example-id"
  }
}
PublicPreorderAsapDraftBodyDto

Explicit ASAP public ordering draft input. The caller must omit scheduledFor. At quote creation the server resolves a bounded native fulfillment interval and freezes that promise for original acceptance and recovery; requesting ASAP does not guarantee availability.

partySizeRequired

Whole-number party size recorded for public preorder draft. Accepted values enforce minimum 1 and maximum 10000.

integer
Full definition
{
  "type": "integer",
  "minimum": 1,
  "maximum": 10000,
  "description": "Whole-number party size recorded for public preorder draft. Accepted values enforce minimum 1 and maximum 10000.",
  "example": 1
}
contactNameRequired

Human-readable contact name for public preorder draft.

string
Full definition
{
  "type": "string",
  "description": "Human-readable contact name for public preorder draft.",
  "example": "Example name"
}
contactPhoneOptional

Telephone number recorded for contact phone in public preorder draft. Null means no value is recorded for this representation.

string · null
Full definition
{
  "type": "string",
  "nullable": true,
  "description": "Telephone number recorded for contact phone in public preorder draft. Null means no value is recorded for this representation.",
  "example": "+995555000000"
}
contactEmailOptional

Email address recorded for contact email in public preorder draft. Null means no value is recorded for this representation.

string · email · null
Full definition
{
  "type": "string",
  "nullable": true,
  "description": "Email address recorded for contact email in public preorder draft. Null means no value is recorded for this representation.",
  "format": "email",
  "example": "user@example.test"
}
addressLine1Optional

Primary street-address line for public preorder draft. Null means no value is recorded for this representation.

string · null
Full definition
{
  "type": "string",
  "nullable": true,
  "description": "Primary street-address line for public preorder draft. Null means no value is recorded for this representation.",
  "example": "example"
}
addressLine2Optional

Optional secondary address details such as unit, floor, or building for public preorder draft. Null means no value is recorded for this representation.

string · null
Full definition
{
  "type": "string",
  "nullable": true,
  "description": "Optional secondary address details such as unit, floor, or building for public preorder draft. Null means no value is recorded for this representation.",
  "example": "example"
}
cityOptional

City or locality recorded for the address represented by public preorder draft. Null means no value is recorded for this representation.

string · null
Full definition
{
  "type": "string",
  "nullable": true,
  "description": "City or locality recorded for the address represented by public preorder draft. Null means no value is recorded for this representation.",
  "example": "example"
}
regionOptional

Region, state, or administrative subdivision recorded for public preorder draft. Null means no value is recorded for this representation.

string · null
Full definition
{
  "type": "string",
  "nullable": true,
  "description": "Region, state, or administrative subdivision recorded for public preorder draft. Null means no value is recorded for this representation.",
  "example": "example"
}
postalCodeOptional

Stable postal code used to classify or address public preorder draft. Null means no value is recorded for this representation.

string · null
Full definition
{
  "type": "string",
  "nullable": true,
  "description": "Stable postal code used to classify or address public preorder draft. Null means no value is recorded for this representation.",
  "example": "EXAMPLE"
}
countryCodeOptional

Stable country code used to classify or address public preorder draft. Null means no value is recorded for this representation.

string · null
Full definition
{
  "type": "string",
  "nullable": true,
  "description": "Stable country code used to classify or address public preorder draft. Null means no value is recorded for this representation.",
  "example": "GE"
}
administrativeDivisionIdOptional

Hallify UUID identifying administrative division associated with public preorder draft. Null means no value is recorded for this representation.

string · uuid · null
Full definition
{
  "type": "string",
  "format": "uuid",
  "nullable": true,
  "description": "Hallify UUID identifying administrative division associated with public preorder draft. Null means no value is recorded for this representation.",
  "example": "c8efbc76-614d-4a79-8f15-db6d48283d46"
}
localityIdOptional

Hallify UUID identifying locality associated with public preorder draft. Null means no value is recorded for this representation.

string · uuid · null
Full definition
{
  "type": "string",
  "format": "uuid",
  "nullable": true,
  "description": "Hallify UUID identifying locality associated with public preorder draft. Null means no value is recorded for this representation.",
  "example": "1bfa5864-39f3-4647-8093-42aea5d9d046"
}
postalCodeIdOptional

Hallify UUID identifying postal code associated with public preorder draft. Null means no value is recorded for this representation.

string · uuid · null
Full definition
{
  "type": "string",
  "format": "uuid",
  "nullable": true,
  "description": "Hallify UUID identifying postal code associated with public preorder draft. Null means no value is recorded for this representation.",
  "example": "7424d59b-d459-4e7b-8cbc-7f5222274f26"
}
latitudeOptional

Fraction-capable numeric latitude recorded for public preorder draft. Accepted values enforce minimum -90 and maximum 90. Null means no value is recorded for this representation.

number · null
Full definition
{
  "type": "number",
  "minimum": -90,
  "maximum": 90,
  "nullable": true,
  "description": "Fraction-capable numeric latitude recorded for public preorder draft. Accepted values enforce minimum -90 and maximum 90. Null means no value is recorded for this representation.",
  "example": 41.7151
}
longitudeOptional

Fraction-capable numeric longitude recorded for public preorder draft. Accepted values enforce minimum -180 and maximum 180. Null means no value is recorded for this representation.

number · null
Full definition
{
  "type": "number",
  "minimum": -180,
  "maximum": 180,
  "nullable": true,
  "description": "Fraction-capable numeric longitude recorded for public preorder draft. Accepted values enforce minimum -180 and maximum 180. Null means no value is recorded for this representation.",
  "example": 44.8271
}
deliveryInstructionsOptional

Delivery instructions for public preorder draft. Null means no value is recorded for this representation.

string · null
Full definition
{
  "type": "string",
  "nullable": true,
  "description": "Delivery instructions for public preorder draft. Null means no value is recorded for this representation.",
  "example": "example"
}
noteOptional

Human-entered note retained with public preorder draft. Null means no value is recorded for this representation.

string · null
Full definition
{
  "type": "string",
  "nullable": true,
  "description": "Human-entered note retained with public preorder draft. Null means no value is recorded for this representation.",
  "example": "Synthetic example"
}
deliveryMethodOptional

Requested delivery method. Omission preserves venue SELF delivery; other service modes must omit it.

string
Full definition
{
  "type": "string",
  "enum": [
    "SELF",
    "UBER_DIRECT",
    "WOLT_DRIVE"
  ],
  "description": "Requested delivery method. Omission preserves venue SELF delivery; other service modes must omit it.",
  "example": "SELF"
}
deliveryQuoteIdOptional

Native prepared delivery quote selected for this exact demand. Historical SELF acceptance may retain null or omission.

string · uuid · null
Full definition
{
  "type": "string",
  "format": "uuid",
  "nullable": true,
  "description": "Native prepared delivery quote selected for this exact demand. Historical SELF acceptance may retain null or omission.",
  "example": "6cd7f319-5499-46ba-88b6-d3c97f979668"
}
salesChannelIdRequired

Hallify UUID identifying sales channel associated with public preorder draft.

string · uuid
Full definition
{
  "type": "string",
  "format": "uuid",
  "description": "Hallify UUID identifying sales channel associated with public preorder draft.",
  "example": "ff0fa725-ba44-4e7a-82bb-a15650e0a0cc"
}
clientMenuVersionIdRequired

Hallify UUID identifying client menu version associated with public preorder draft.

string · uuid
Full definition
{
  "type": "string",
  "format": "uuid",
  "description": "Hallify UUID identifying client menu version associated with public preorder draft.",
  "example": "cd2f2c2a-ba73-4579-8e32-52da8388fd05"
}
clientGraphHashRequired

Opaque graph token returned by the published menu endpoint.

string
Full definition
{
  "type": "string",
  "description": "Opaque graph token returned by the published menu endpoint.",
  "pattern": "^menu-cost-v1\\.graph\\.[A-Za-z0-9_-]{43}$",
  "example": "menu-cost-v1.graph.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
itemsRequired

Preorder cart line returned in the public preorder draft collection.

array
Full definition
{
  "minItems": 1,
  "maxItems": 100,
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/PublicPreorderCartLineDto"
  },
  "description": "Preorder cart line returned in the public preorder draft collection.",
  "example": [
    {
      "clientLineId": "example-id",
      "quantity": 1
    }
  ]
}
termsVersionRequired

Terms version for public preorder draft. Accepted values enforce minimum length 1 and maximum length 64.

string
Full definition
{
  "type": "string",
  "minLength": 1,
  "maxLength": 64,
  "description": "Terms version for public preorder draft. Accepted values enforce minimum length 1 and maximum length 64.",
  "example": "example"
}
privacyVersionRequired

Privacy version for public preorder draft. Accepted values enforce minimum length 1 and maximum length 64.

string
Full definition
{
  "type": "string",
  "minLength": 1,
  "maxLength": 64,
  "description": "Privacy version for public preorder draft. Accepted values enforce minimum length 1 and maximum length 64.",
  "example": "example"
}
serviceModeRequired

Off-premise service requested for ASAP. Native policy, delivery-zone and capacity checks still determine whether it can be quoted.

string
Full definition
{
  "type": "string",
  "enum": [
    "PICKUP",
    "DELIVERY"
  ],
  "description": "Off-premise service requested for ASAP. Native policy, delivery-zone and capacity checks still determine whether it can be quoted.",
  "example": "PICKUP"
}
timingModeRequired

Explicit request for the earliest server-admitted fulfillment interval within the supported ASAP horizon. The client supplies no fulfillment timestamp.

string
Full definition
{
  "type": "string",
  "enum": [
    "ASAP"
  ],
  "description": "Explicit request for the earliest server-admitted fulfillment interval within the supported ASAP horizon. The client supplies no fulfillment timestamp.",
  "example": "ASAP"
}
Full definition
{
  "type": "object",
  "properties": {
    "partySize": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10000,
      "description": "Whole-number party size recorded for public preorder draft. Accepted values enforce minimum 1 and maximum 10000.",
      "example": 1
    },
    "contactName": {
      "type": "string",
      "description": "Human-readable contact name for public preorder draft.",
      "example": "Example name"
    },
    "contactPhone": {
      "type": "string",
      "nullable": true,
      "description": "Telephone number recorded for contact phone in public preorder draft. Null means no value is recorded for this representation.",
      "example": "+995555000000"
    },
    "contactEmail": {
      "type": "string",
      "nullable": true,
      "description": "Email address recorded for contact email in public preorder draft. Null means no value is recorded for this representation.",
      "format": "email",
      "example": "user@example.test"
    },
    "addressLine1": {
      "type": "string",
      "nullable": true,
      "description": "Primary street-address line for public preorder draft. Null means no value is recorded for this representation.",
      "example": "example"
    },
    "addressLine2": {
      "type": "string",
      "nullable": true,
      "description": "Optional secondary address details such as unit, floor, or building for public preorder draft. Null means no value is recorded for this representation.",
      "example": "example"
    },
    "city": {
      "type": "string",
      "nullable": true,
      "description": "City or locality recorded for the address represented by public preorder draft. Null means no value is recorded for this representation.",
      "example": "example"
    },
    "region": {
      "type": "string",
      "nullable": true,
      "description": "Region, state, or administrative subdivision recorded for public preorder draft. Null means no value is recorded for this representation.",
      "example": "example"
    },
    "postalCode": {
      "type": "string",
      "nullable": true,
      "description": "Stable postal code used to classify or address public preorder draft. Null means no value is recorded for this representation.",
      "example": "EXAMPLE"
    },
    "countryCode": {
      "type": "string",
      "nullable": true,
      "description": "Stable country code used to classify or address public preorder draft. Null means no value is recorded for this representation.",
      "example": "GE"
    },
    "administrativeDivisionId": {
      "type": "string",
      "format": "uuid",
      "nullable": true,
      "description": "Hallify UUID identifying administrative division associated with public preorder draft. Null means no value is recorded for this representation.",
      "example": "c8efbc76-614d-4a79-8f15-db6d48283d46"
    },
    "localityId": {
      "type": "string",
      "format": "uuid",
      "nullable": true,
      "description": "Hallify UUID identifying locality associated with public preorder draft. Null means no value is recorded for this representation.",
      "example": "1bfa5864-39f3-4647-8093-42aea5d9d046"
    },
    "postalCodeId": {
      "type": "string",
      "format": "uuid",
      "nullable": true,
      "description": "Hallify UUID identifying postal code associated with public preorder draft. Null means no value is recorded for this representation.",
      "example": "7424d59b-d459-4e7b-8cbc-7f5222274f26"
    },
    "latitude": {
      "type": "number",
      "minimum": -90,
      "maximum": 90,
      "nullable": true,
      "description": "Fraction-capable numeric latitude recorded for public preorder draft. Accepted values enforce minimum -90 and maximum 90. Null means no value is recorded for this representation.",
      "example": 41.7151
    },
    "longitude": {
      "type": "number",
      "minimum": -180,
      "maximum": 180,
      "nullable": true,
      "description": "Fraction-capable numeric longitude recorded for public preorder draft. Accepted values enforce minimum -180 and maximum 180. Null means no value is recorded for this representation.",
      "example": 44.8271
    },
    "deliveryInstructions": {
      "type": "string",
      "nullable": true,
      "description": "Delivery instructions for public preorder draft. Null means no value is recorded for this representation.",
      "example": "example"
    },
    "note": {
      "type": "string",
      "nullable": true,
      "description": "Human-entered note retained with public preorder draft. Null means no value is recorded for this representation.",
      "example": "Synthetic example"
    },
    "deliveryMethod": {
      "type": "string",
      "enum": [
        "SELF",
        "UBER_DIRECT",
        "WOLT_DRIVE"
      ],
      "description": "Requested delivery method. Omission preserves venue SELF delivery; other service modes must omit it.",
      "example": "SELF"
    },
    "deliveryQuoteId": {
      "type": "string",
      "format": "uuid",
      "nullable": true,
      "description": "Native prepared delivery quote selected for this exact demand. Historical SELF acceptance may retain null or omission.",
      "example": "6cd7f319-5499-46ba-88b6-d3c97f979668"
    },
    "salesChannelId": {
      "type": "string",
      "format": "uuid",
      "description": "Hallify UUID identifying sales channel associated with public preorder draft.",
      "example": "ff0fa725-ba44-4e7a-82bb-a15650e0a0cc"
    },
    "clientMenuVersionId": {
      "type": "string",
      "format": "uuid",
      "description": "Hallify UUID identifying client menu version associated with public preorder draft.",
      "example": "cd2f2c2a-ba73-4579-8e32-52da8388fd05"
    },
    "clientGraphHash": {
      "type": "string",
      "description": "Opaque graph token returned by the published menu endpoint.",
      "pattern": "^menu-cost-v1\\.graph\\.[A-Za-z0-9_-]{43}$",
      "example": "menu-cost-v1.graph.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    },
    "items": {
      "minItems": 1,
      "maxItems": 100,
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/PublicPreorderCartLineDto"
      },
      "description": "Preorder cart line returned in the public preorder draft collection.",
      "example": [
        {
          "clientLineId": "example-id",
          "quantity": 1
        }
      ]
    },
    "termsVersion": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "description": "Terms version for public preorder draft. Accepted values enforce minimum length 1 and maximum length 64.",
      "example": "example"
    },
    "privacyVersion": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "description": "Privacy version for public preorder draft. Accepted values enforce minimum length 1 and maximum length 64.",
      "example": "example"
    },
    "serviceMode": {
      "type": "string",
      "enum": [
        "PICKUP",
        "DELIVERY"
      ],
      "description": "Off-premise service requested for ASAP. Native policy, delivery-zone and capacity checks still determine whether it can be quoted.",
      "example": "PICKUP"
    },
    "timingMode": {
      "type": "string",
      "enum": [
        "ASAP"
      ],
      "description": "Explicit request for the earliest server-admitted fulfillment interval within the supported ASAP horizon. The client supplies no fulfillment timestamp.",
      "example": "ASAP"
    }
  },
  "description": "Explicit ASAP public ordering draft input. The caller must omit scheduledFor. At quote creation the server resolves a bounded native fulfillment interval and freezes that promise for original acceptance and recovery; requesting ASAP does not guarantee availability.",
  "required": [
    "partySize",
    "contactName",
    "salesChannelId",
    "clientMenuVersionId",
    "clientGraphHash",
    "items",
    "termsVersion",
    "privacyVersion",
    "serviceMode",
    "timingMode"
  ],
  "example": {
    "partySize": 1,
    "contactName": "Example name",
    "salesChannelId": "ff0fa725-ba44-4e7a-82bb-a15650e0a0cc",
    "clientMenuVersionId": "cd2f2c2a-ba73-4579-8e32-52da8388fd05",
    "clientGraphHash": "menu-cost-v1.graph.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
    "items": [
      {
        "clientLineId": "example-id",
        "quantity": 1
      }
    ],
    "termsVersion": "example",
    "privacyVersion": "example",
    "serviceMode": "PICKUP",
    "timingMode": "ASAP"
  }
}
PreorderPublicCreateDraftResultDto

Returns the draft reference, expiry, redacted verification state, and draft capability token.

draftReferenceRequired

Human- or provider-assigned reference used to reconcile preorder public draft with its source record.

string
Full definition
{
  "type": "string",
  "description": "Human- or provider-assigned reference used to reconcile preorder public draft with its source record.",
  "example": "example-reference"
}
resumeTokenRequired

Draft capability returned to resume the newly created public preorder draft. It is scoped to that draft and expires with it.

string
Full definition
{
  "type": "string",
  "description": "Draft capability returned to resume the newly created public preorder draft. It is scoped to that draft and expires with it.",
  "example": "synthetic-example-credential"
}
statusRequired

Current lifecycle status of preorder public draft; allowed values are PENDING_VERIFICATION.

string
Full definition
{
  "type": "string",
  "enum": [
    "PENDING_VERIFICATION"
  ],
  "description": "Current lifecycle status of preorder public draft; allowed values are PENDING_VERIFICATION.",
  "example": "PENDING_VERIFICATION"
}
verificationIdRequired

Hallify UUID identifying verification associated with preorder public draft.

string · uuid
Full definition
{
  "type": "string",
  "format": "uuid",
  "description": "Hallify UUID identifying verification associated with preorder public draft.",
  "example": "904a18d4-c890-4387-8e14-bc52c879c7ff"
}
verificationExpiresAtRequired

RFC 3339 timestamp for verification expires at; offsets represent the same absolute instant.

string · date-time
Full definition
{
  "type": "string",
  "format": "date-time",
  "description": "RFC 3339 timestamp for verification expires at; offsets represent the same absolute instant.",
  "example": "2026-12-31T18:00:00.000Z"
}
expiresAtRequired

RFC 3339 timestamp for expires at; offsets represent the same absolute instant.

string · date-time
Full definition
{
  "type": "string",
  "format": "date-time",
  "description": "RFC 3339 timestamp for expires at; offsets represent the same absolute instant.",
  "example": "2026-12-31T18:00:00.000Z"
}
testCodeOptional

Stable test code used to classify or address preorder public draft. Null means no value is recorded for this representation.

string · null
Full definition
{
  "type": "string",
  "nullable": true,
  "description": "Stable test code used to classify or address preorder public draft. Null means no value is recorded for this representation.",
  "example": "EXAMPLE"
}
Full definition
{
  "type": "object",
  "properties": {
    "draftReference": {
      "type": "string",
      "description": "Human- or provider-assigned reference used to reconcile preorder public draft with its source record.",
      "example": "example-reference"
    },
    "resumeToken": {
      "type": "string",
      "description": "Draft capability returned to resume the newly created public preorder draft. It is scoped to that draft and expires with it.",
      "example": "synthetic-example-credential"
    },
    "status": {
      "type": "string",
      "enum": [
        "PENDING_VERIFICATION"
      ],
      "description": "Current lifecycle status of preorder public draft; allowed values are PENDING_VERIFICATION.",
      "example": "PENDING_VERIFICATION"
    },
    "verificationId": {
      "type": "string",
      "format": "uuid",
      "description": "Hallify UUID identifying verification associated with preorder public draft.",
      "example": "904a18d4-c890-4387-8e14-bc52c879c7ff"
    },
    "verificationExpiresAt": {
      "type": "string",
      "format": "date-time",
      "description": "RFC 3339 timestamp for verification expires at; offsets represent the same absolute instant.",
      "example": "2026-12-31T18:00:00.000Z"
    },
    "expiresAt": {
      "type": "string",
      "format": "date-time",
      "description": "RFC 3339 timestamp for expires at; offsets represent the same absolute instant.",
      "example": "2026-12-31T18:00:00.000Z"
    },
    "testCode": {
      "type": "string",
      "nullable": true,
      "description": "Stable test code used to classify or address preorder public draft. Null means no value is recorded for this representation.",
      "example": "EXAMPLE"
    }
  },
  "required": [
    "draftReference",
    "resumeToken",
    "status",
    "verificationId",
    "verificationExpiresAt",
    "expiresAt"
  ],
  "description": "Returns the draft reference, expiry, redacted verification state, and draft capability token.",
  "example": {
    "draftReference": "example-reference",
    "resumeToken": "synthetic-example-credential",
    "status": "PENDING_VERIFICATION",
    "verificationId": "904a18d4-c890-4387-8e14-bc52c879c7ff",
    "verificationExpiresAt": "2026-12-31T18:00:00.000Z",
    "expiresAt": "2026-12-31T18:00:00.000Z"
  }
}
TranslatedErrorDto

Stable error envelope emitted by the global HTTP exception boundary. Domain-specific machine data, when present, is nested under details.

statusCodeRequired

HTTP status code repeated from the response.

integer
Full definition
{
  "type": "integer",
  "description": "HTTP status code repeated from the response.",
  "example": 400
}
errorRequired

Translation key for the HTTP category, such as errors:http.conflict. The specific cause is identified by code and translationKey.

string
Full definition
{
  "type": "string",
  "description": "Translation key for the HTTP category, such as errors:http.conflict. The specific cause is identified by code and translationKey.",
  "example": "errors.request.invalid"
}
codeRequired

Stable machine-readable domain code, or an HTTP_* fallback when no domain code is provided. Branch on this field and the HTTP status; localized wording never controls retries or business decisions.

string
Full definition
{
  "type": "string",
  "example": "HTTP_BAD_REQUEST",
  "description": "Stable machine-readable domain code, or an HTTP_* fallback when no domain code is provided. Branch on this field and the HTTP status; localized wording never controls retries or business decisions."
}
messageRequired

Translation key, identical to translationKey. The API does not return localized display text. Resolve the key and translationValues in the consuming application.

string
Full definition
{
  "type": "string",
  "example": "errors:http.badRequest",
  "description": "Translation key, identical to translationKey. The API does not return localized display text. Resolve the key and translationValues in the consuming application."
}
translationKeyRequired

Canonical translation key, identical to message. Status-specific errors:http.* keys cover unspecified failures. Public keys and EN/RU explanations are listed in Developers; unknown keys require a localized client fallback.

string
Full definition
{
  "type": "string",
  "example": "errors:http.badRequest",
  "description": "Canonical translation key, identical to message. Status-specific errors:http.* keys cover unspecified failures. Public keys and EN/RU explanations are listed in Developers; unknown keys require a localized client fallback."
}
translationValuesOptional

Optional scalar values for placeholders in the translation. Treat values as data, escape them when rendering, and never use them as translation options.

object
Full definition
{
  "type": "object",
  "additionalProperties": {
    "oneOf": [
      {
        "type": "string",
        "example": "example"
      },
      {
        "type": "number",
        "example": 0
      },
      {
        "type": "boolean",
        "example": true
      }
    ],
    "example": "example"
  },
  "description": "Optional scalar values for placeholders in the translation. Treat values as data, escape them when rendering, and never use them as translation options.",
  "example": {
    "exampleKey": "example"
  }
}
validationErrorsOptional

Field validation failures with translation keys and stable validator codes. Submitted values and raw validator text are not included.

array
Full definition
{
  "description": "Field validation failures with translation keys and stable validator codes. Submitted values and raw validator text are not included.",
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/ValidationErrorDto"
  },
  "example": [
    {
      "field": "email",
      "translationKey": "validation:isEmail",
      "code": "isEmail",
      "message": "validation:isEmail"
    }
  ]
}
detailsOptional

Optional domain-specific blocker or validation details

oneOf
Full definition
{
  "description": "Optional domain-specific blocker or validation details",
  "oneOf": [
    {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/JsonValue"
      },
      "example": [
        "example"
      ]
    },
    {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/components/schemas/JsonValue"
      },
      "example": {
        "exampleKey": "example"
      }
    }
  ],
  "example": [
    "example"
  ]
}
Full definition
{
  "type": "object",
  "properties": {
    "statusCode": {
      "type": "integer",
      "description": "HTTP status code repeated from the response.",
      "example": 400
    },
    "error": {
      "type": "string",
      "description": "Translation key for the HTTP category, such as errors:http.conflict. The specific cause is identified by code and translationKey.",
      "example": "errors.request.invalid"
    },
    "code": {
      "type": "string",
      "example": "HTTP_BAD_REQUEST",
      "description": "Stable machine-readable domain code, or an HTTP_* fallback when no domain code is provided. Branch on this field and the HTTP status; localized wording never controls retries or business decisions."
    },
    "message": {
      "type": "string",
      "example": "errors:http.badRequest",
      "description": "Translation key, identical to translationKey. The API does not return localized display text. Resolve the key and translationValues in the consuming application."
    },
    "translationKey": {
      "type": "string",
      "example": "errors:http.badRequest",
      "description": "Canonical translation key, identical to message. Status-specific errors:http.* keys cover unspecified failures. Public keys and EN/RU explanations are listed in Developers; unknown keys require a localized client fallback."
    },
    "translationValues": {
      "type": "object",
      "additionalProperties": {
        "oneOf": [
          {
            "type": "string",
            "example": "example"
          },
          {
            "type": "number",
            "example": 0
          },
          {
            "type": "boolean",
            "example": true
          }
        ],
        "example": "example"
      },
      "description": "Optional scalar values for placeholders in the translation. Treat values as data, escape them when rendering, and never use them as translation options.",
      "example": {
        "exampleKey": "example"
      }
    },
    "validationErrors": {
      "description": "Field validation failures with translation keys and stable validator codes. Submitted values and raw validator text are not included.",
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/ValidationErrorDto"
      },
      "example": [
        {
          "field": "email",
          "translationKey": "validation:isEmail",
          "code": "isEmail",
          "message": "validation:isEmail"
        }
      ]
    },
    "details": {
      "description": "Optional domain-specific blocker or validation details",
      "oneOf": [
        {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/JsonValue"
          },
          "example": [
            "example"
          ]
        },
        {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/components/schemas/JsonValue"
          },
          "example": {
            "exampleKey": "example"
          }
        }
      ],
      "example": [
        "example"
      ]
    }
  },
  "required": [
    "statusCode",
    "error",
    "code",
    "message",
    "translationKey"
  ],
  "description": "Stable error envelope emitted by the global HTTP exception boundary. Domain-specific machine data, when present, is nested under details.",
  "example": {
    "statusCode": 400,
    "error": "errors:http.badRequest",
    "code": "HTTP_BAD_REQUEST",
    "message": "errors:http.badRequest",
    "translationKey": "errors:http.badRequest"
  }
}
ValidationErrorDto

Field validation failure with a field path, stable validator code and a translation key. Human-readable text belongs to the consuming application.

fieldRequired

Public field path. Nested properties and array indices are separated by dots.

string
Full definition
{
  "type": "string",
  "example": "email",
  "description": "Public field path. Nested properties and array indices are separated by dots."
}
translationKeyRequired

Translation key for this validator, identical to message. Resolve it using a client dictionary; see the public Developers error catalog.

string
Full definition
{
  "type": "string",
  "example": "validation:isEmail",
  "description": "Translation key for this validator, identical to message. Resolve it using a client dictionary; see the public Developers error catalog."
}
codeRequired

Stable validator identifier for this field failure. Custom validators may define additional identifiers.

string
Full definition
{
  "type": "string",
  "example": "isEmail",
  "description": "Stable validator identifier for this field failure. Custom validators may define additional identifiers."
}
messageRequired

Translation key describing this field validation failure, identical to translationKey. Submitted values and validator prose are not included.

string
Full definition
{
  "type": "string",
  "example": "validation:isEmail",
  "description": "Translation key describing this field validation failure, identical to translationKey. Submitted values and validator prose are not included."
}
translationValuesOptional

Optional scalar values for placeholders in the translation. Treat values as data, escape them when rendering, and never use them as translation options.

object
Full definition
{
  "type": "object",
  "additionalProperties": {
    "oneOf": [
      {
        "type": "string",
        "example": "example"
      },
      {
        "type": "number",
        "example": 0
      },
      {
        "type": "boolean",
        "example": true
      }
    ],
    "example": "example"
  },
  "description": "Optional scalar values for placeholders in the translation. Treat values as data, escape them when rendering, and never use them as translation options.",
  "example": {
    "exampleKey": "example"
  }
}
Full definition
{
  "type": "object",
  "properties": {
    "field": {
      "type": "string",
      "example": "email",
      "description": "Public field path. Nested properties and array indices are separated by dots."
    },
    "translationKey": {
      "type": "string",
      "example": "validation:isEmail",
      "description": "Translation key for this validator, identical to message. Resolve it using a client dictionary; see the public Developers error catalog."
    },
    "code": {
      "type": "string",
      "example": "isEmail",
      "description": "Stable validator identifier for this field failure. Custom validators may define additional identifiers."
    },
    "message": {
      "type": "string",
      "example": "validation:isEmail",
      "description": "Translation key describing this field validation failure, identical to translationKey. Submitted values and validator prose are not included."
    },
    "translationValues": {
      "type": "object",
      "additionalProperties": {
        "oneOf": [
          {
            "type": "string",
            "example": "example"
          },
          {
            "type": "number",
            "example": 0
          },
          {
            "type": "boolean",
            "example": true
          }
        ],
        "example": "example"
      },
      "description": "Optional scalar values for placeholders in the translation. Treat values as data, escape them when rendering, and never use them as translation options.",
      "example": {
        "exampleKey": "example"
      }
    }
  },
  "required": [
    "field",
    "translationKey",
    "code",
    "message"
  ],
  "description": "Field validation failure with a field path, stable validator code and a translation key. Human-readable text belongs to the consuming application.",
  "example": {
    "field": "email",
    "translationKey": "validation:isEmail",
    "code": "isEmail",
    "message": "validation:isEmail"
  }
}
JsonValue

Recursively JSON-safe value used only where the owning contract intentionally allows free-form structured data.

Full definition
{
  "oneOf": [
    {
      "type": "string",
      "nullable": true,
      "example": "example"
    },
    {
      "type": "number",
      "example": 0
    },
    {
      "type": "boolean",
      "example": true
    },
    {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/JsonValue"
      },
      "example": [
        "example"
      ]
    },
    {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/components/schemas/JsonValue"
      },
      "example": {
        "exampleKey": "example"
      }
    }
  ],
  "description": "Recursively JSON-safe value used only where the owning contract intentionally allows free-form structured data.",
  "example": "example"
}
IdempotencyConflictError

Idempotency key is already in progress or was reused with a different payload.

Full definition
{
  "example": {
    "statusCode": 409,
    "error": "errors:http.conflict",
    "code": "IDEMPOTENCY_REQUEST_IN_PROGRESS",
    "message": "errors:idempotency.inProgress",
    "translationKey": "errors:idempotency.inProgress"
  },
  "allOf": [
    {
      "$ref": "#/components/schemas/TranslatedErrorDto"
    },
    {
      "type": "object",
      "required": [
        "code"
      ],
      "properties": {
        "statusCode": {
          "type": "integer",
          "enum": [
            409
          ],
          "description": "HTTP 409 conflict status.",
          "example": 409
        },
        "code": {
          "type": "string",
          "enum": [
            "IDEMPOTENCY_REQUEST_NOT_READY",
            "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
            "IDEMPOTENCY_REQUEST_IN_PROGRESS",
            "IDEMPOTENCY_SCOPE_INCOMPLETE"
          ],
          "description": "Allowed code for idempotency conflict error: IDEMPOTENCY_REQUEST_NOT_READY, IDEMPOTENCY_KEY_PAYLOAD_MISMATCH, IDEMPOTENCY_REQUEST_IN_PROGRESS, IDEMPOTENCY_SCOPE_INCOMPLETE.",
          "example": "IDEMPOTENCY_REQUEST_NOT_READY"
        }
      },
      "example": {
        "code": "IDEMPOTENCY_REQUEST_NOT_READY"
      }
    }
  ],
  "description": "Idempotency key is already in progress or was reused with a different payload."
}

Hallify uses essential cookies and optional analytics.

Essential cookies keep sign-in, locale, and theme preferences working. Analytics is off until you choose to allow it.