Skip to content
Sections

Guest ordering

Quote a guest reschedule or cart change

POST/public/preorders/manage/amendments/quotes

Revalidates a proposed capability-owned fulfillment or cart amendment and calculates its price, deposit, and availability effects without applying it. DELIVERY requires Idempotency-Key to recover the original carrier preparation without creating another quote command.

Authentication

Authorization: Bearer <HALLIFY_PREORDER_MANAGE_TOKEN>

Guest-owned capability for managing a preorder.

Connection guide

Parameters

originHeader · Optional

Actual browser Origin. Required for drafts and manage grants with classified CANONICAL or STOREFRONT issuance and must match their recorded issuance and current authority. Widget continuations retain their original frame Origin and parent binding; the draft or manage capability authorizes continuation without a fresh widget bootstrap proof. Existing records with NULL issuance metadata retain their legacy channel-origin rules.

string
Full definition
{
  "type": "string",
  "maxLength": 2048,
  "example": "example"
}
idempotency-keyHeader · Optional

Optional idempotency key, up to 128 characters

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

Request body

Required

Capability-owned proposed fulfillment, guest, address, menu, channel, and cart values plus the expected preorder revision.

application/json

QuotePublicPreorderAmendmentDto
Full definition
{
  "$ref": "#/components/schemas/QuotePublicPreorderAmendmentDto"
}

Responses

200Returns the time-limited amendment quote and protected acceptance token.
PreorderQuoteDto
Full definition
{
  "$ref": "#/components/schemas/PreorderQuoteDto"
}
Example response · 200 · application/json
{
  "quoteId": "123728f6-ac4b-43a8-8f9e-44585ec81783",
  "quoteToken": "synthetic-example-credential",
  "status": "ISSUED",
  "serviceMode": "DINE_IN",
  "scheduledFor": "2026-01-15T12:00:00.000Z",
  "lines": [
    {
      "clientLineId": "example-id",
      "sortOrder": 1,
      "quantity": 1,
      "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
      "menuVariantId": null,
      "name": "Example name",
      "unitPrice": "1.00",
      "lineTotal": "1.00",
      "policyHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
      "structurePlanHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
    }
  ],
  "financialPolicyVersionId": "b36de587-2415-41cd-8269-c8dc9aa8ee66",
  "financialPolicyHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
  "fulfillmentPolicyHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
  "adjustmentEvidenceHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
  "capacityUnits": 1,
  "quotedSubtotal": "1.00",
  "quotedDiscountTotal": "1.00",
  "quotedServiceCharge": "1.00",
  "quotedTax": "1.00",
  "quotedDeliveryFee": "1.00",
  "quotedTotal": "1.00",
  "quotedNetPaid": "1.00",
  "quotedRemaining": "1.00",
  "quotedRefundDue": "1.00",
  "quotedDepositRequired": "1.00",
  "depositDueAt": null,
  "cancellationCutoffAt": null,
  "currency": "GEL",
  "issuedAt": "2026-01-15T10:00:00.000Z",
  "expiresAt": "2026-12-31T18:00:00.000Z"
}
401Rejects a missing, malformed, expired, revoked, or invalid preorderManageToken credential at the owning domain boundary.
TranslatedErrorDto
Full definition
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Example response · 401 · application/json
{
  "statusCode": 401,
  "error": "errors:http.unauthorized",
  "code": "HTTP_UNAUTHORIZED",
  "message": "errors:http.unauthorized",
  "translationKey": "errors:http.unauthorized"
}
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"
}

Schemas

QuotePublicPreorderAmendmentDto

Capability-owned proposed fulfillment, guest, address, menu, channel, and cart values plus the expected preorder revision.

serviceModeRequired

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

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

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

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

Human-readable contact name for quote public preorder amendment.

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

Telephone number recorded for contact phone in quote public preorder amendment. 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 quote public preorder amendment. Null means no value is recorded for this representation.",
  "example": "+995555000000"
}
contactEmailOptional

Email address recorded for contact email in quote public preorder amendment. 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 quote public preorder amendment. Null means no value is recorded for this representation.",
  "format": "email",
  "example": "user@example.test"
}
addressLine1Optional

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

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

Optional secondary address details such as unit, floor, or building for quote public preorder amendment. 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 quote public preorder amendment. Null means no value is recorded for this representation.",
  "example": "example"
}
cityOptional

City or locality recorded for the address represented by quote public preorder amendment. 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 quote public preorder amendment. Null means no value is recorded for this representation.",
  "example": "example"
}
regionOptional

Region, state, or administrative subdivision recorded for quote public preorder amendment. 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 quote public preorder amendment. Null means no value is recorded for this representation.",
  "example": "example"
}
postalCodeOptional

Stable postal code used to classify or address quote public preorder amendment. 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 quote public preorder amendment. Null means no value is recorded for this representation.",
  "example": "EXAMPLE"
}
countryCodeOptional

Stable country code used to classify or address quote public preorder amendment. 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 quote public preorder amendment. Null means no value is recorded for this representation.",
  "example": "GE"
}
administrativeDivisionIdOptional

Hallify UUID identifying administrative division associated with quote public preorder amendment. 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 quote public preorder amendment. Null means no value is recorded for this representation.",
  "example": "c8efbc76-614d-4a79-8f15-db6d48283d46"
}
localityIdOptional

Hallify UUID identifying locality associated with quote public preorder amendment. 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 quote public preorder amendment. Null means no value is recorded for this representation.",
  "example": "1bfa5864-39f3-4647-8093-42aea5d9d046"
}
postalCodeIdOptional

Hallify UUID identifying postal code associated with quote public preorder amendment. 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 quote public preorder amendment. Null means no value is recorded for this representation.",
  "example": "7424d59b-d459-4e7b-8cbc-7f5222274f26"
}
latitudeOptional

Fraction-capable numeric latitude recorded for quote public preorder amendment. 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 quote public preorder amendment. 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 quote public preorder amendment. 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 quote public preorder amendment. Accepted values enforce minimum -180 and maximum 180. Null means no value is recorded for this representation.",
  "example": 44.8271
}
deliveryInstructionsOptional

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

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

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

string · null
Full definition
{
  "type": "string",
  "nullable": true,
  "description": "Human-entered note retained with quote public preorder amendment. 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 quote public preorder amendment.

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

Hallify UUID identifying client menu version associated with quote public preorder amendment.

string · uuid
Full definition
{
  "type": "string",
  "format": "uuid",
  "description": "Hallify UUID identifying client menu version associated with quote public preorder amendment.",
  "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 quote public preorder amendment collection.

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

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

string · date-time
Full definition
{
  "type": "string",
  "format": "date-time",
  "description": "RFC 3339 timestamp for scheduled for; offsets represent the same absolute instant.",
  "example": "2026-01-15T12:00:00.000Z"
}
expectedRevisionRequired

Current integer revision read by the caller; a stale value rejects the mutation. Accepted values enforce minimum 1.

integer
Full definition
{
  "type": "integer",
  "minimum": 1,
  "description": "Current integer revision read by the caller; a stale value rejects the mutation. Accepted values enforce minimum 1.",
  "example": 1
}
Full definition
{
  "type": "object",
  "properties": {
    "serviceMode": {
      "type": "string",
      "enum": [
        "DINE_IN",
        "PICKUP",
        "DELIVERY",
        "CATERING"
      ],
      "description": "Allowed service mode for quote public preorder amendment: DINE_IN, PICKUP, DELIVERY, CATERING.",
      "example": "DINE_IN"
    },
    "partySize": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10000,
      "description": "Whole-number party size recorded for quote public preorder amendment. Accepted values enforce minimum 1 and maximum 10000.",
      "example": 1
    },
    "contactName": {
      "type": "string",
      "description": "Human-readable contact name for quote public preorder amendment.",
      "example": "Example name"
    },
    "contactPhone": {
      "type": "string",
      "nullable": true,
      "description": "Telephone number recorded for contact phone in quote public preorder amendment. Null means no value is recorded for this representation.",
      "example": "+995555000000"
    },
    "contactEmail": {
      "type": "string",
      "nullable": true,
      "description": "Email address recorded for contact email in quote public preorder amendment. 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 quote public preorder amendment. 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 quote public preorder amendment. 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 quote public preorder amendment. Null means no value is recorded for this representation.",
      "example": "example"
    },
    "region": {
      "type": "string",
      "nullable": true,
      "description": "Region, state, or administrative subdivision recorded for quote public preorder amendment. 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 quote public preorder amendment. 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 quote public preorder amendment. 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 quote public preorder amendment. 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 quote public preorder amendment. 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 quote public preorder amendment. 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 quote public preorder amendment. 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 quote public preorder amendment. 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 quote public preorder amendment. Null means no value is recorded for this representation.",
      "example": "example"
    },
    "note": {
      "type": "string",
      "nullable": true,
      "description": "Human-entered note retained with quote public preorder amendment. 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 quote public preorder amendment.",
      "example": "ff0fa725-ba44-4e7a-82bb-a15650e0a0cc"
    },
    "clientMenuVersionId": {
      "type": "string",
      "format": "uuid",
      "description": "Hallify UUID identifying client menu version associated with quote public preorder amendment.",
      "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 quote public preorder amendment collection.",
      "example": [
        {
          "clientLineId": "example-id",
          "quantity": 1
        }
      ]
    },
    "scheduledFor": {
      "type": "string",
      "format": "date-time",
      "description": "RFC 3339 timestamp for scheduled for; offsets represent the same absolute instant.",
      "example": "2026-01-15T12:00:00.000Z"
    },
    "expectedRevision": {
      "type": "integer",
      "minimum": 1,
      "description": "Current integer revision read by the caller; a stale value rejects the mutation. Accepted values enforce minimum 1.",
      "example": 1
    }
  },
  "required": [
    "serviceMode",
    "partySize",
    "contactName",
    "salesChannelId",
    "clientMenuVersionId",
    "clientGraphHash",
    "items",
    "scheduledFor",
    "expectedRevision"
  ],
  "description": "Capability-owned proposed fulfillment, guest, address, menu, channel, and cart values plus the expected preorder revision.",
  "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
      }
    ],
    "scheduledFor": "2026-01-15T12:00:00.000Z",
    "expectedRevision": 1
  }
}
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"
  }
}
PreorderQuoteDto

Returns calculated pricing, availability, deposit requirements, and a time-limited protected quote token.

quoteIdRequired

Hallify UUID identifying quote associated with preorders quote.

string · uuid
Full definition
{
  "type": "string",
  "format": "uuid",
  "description": "Hallify UUID identifying quote associated with preorders quote.",
  "example": "123728f6-ac4b-43a8-8f9e-44585ec81783"
}
deliveryQuoteIdOptional

Immutable prepared delivery quote used for this accepted customer offer. Omitted for historical SELF and other service modes.

string · uuid
Full definition
{
  "type": "string",
  "format": "uuid",
  "description": "Immutable prepared delivery quote used for this accepted customer offer. Omitted for historical SELF and other service modes.",
  "example": "6cd7f319-5499-46ba-88b6-d3c97f979668"
}
quoteTokenRequired

Signed token binding the calculated quote to its preorder inputs, price snapshot, and expiry for subsequent acceptance.

string
Full definition
{
  "type": "string",
  "description": "Signed token binding the calculated quote to its preorder inputs, price snapshot, and expiry for subsequent acceptance.",
  "example": "synthetic-example-credential"
}
statusRequired

Current lifecycle status of preorders quote; allowed values are ISSUED, ACCEPTED, DECLINED, EXPIRED, SUPERSEDED.

string
Full definition
{
  "type": "string",
  "enum": [
    "ISSUED",
    "ACCEPTED",
    "DECLINED",
    "EXPIRED",
    "SUPERSEDED"
  ],
  "description": "Current lifecycle status of preorders quote; allowed values are ISSUED, ACCEPTED, DECLINED, EXPIRED, SUPERSEDED.",
  "example": "ISSUED"
}
serviceModeRequired

Allowed service mode for preorders quote: DINE_IN, PICKUP, DELIVERY, CATERING.

string
Full definition
{
  "type": "string",
  "enum": [
    "DINE_IN",
    "PICKUP",
    "DELIVERY",
    "CATERING"
  ],
  "description": "Allowed service mode for preorders quote: DINE_IN, PICKUP, DELIVERY, CATERING.",
  "example": "DINE_IN"
}
scheduledForRequired

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

string · date-time
Full definition
{
  "type": "string",
  "format": "date-time",
  "description": "RFC 3339 timestamp for scheduled for; offsets represent the same absolute instant.",
  "example": "2026-01-15T12:00:00.000Z"
}
timingModeOptional

Explicit public customer timing intent retained by this quote. Omitted for staff, amendment and legacy scheduled requests.

string
Full definition
{
  "type": "string",
  "enum": [
    "ASAP",
    "SCHEDULED"
  ],
  "description": "Explicit public customer timing intent retained by this quote. Omitted for staff, amendment and legacy scheduled requests.",
  "example": "ASAP"
}
linesRequired

Lines that compose the corresponding lines section of preorders quote.

array
Full definition
{
  "type": "array",
  "minItems": 1,
  "items": {
    "type": "object",
    "properties": {
      "clientLineId": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100,
        "description": "Opaque identifier for client line associated with preorders quote lines item; clients must not assume UUID syntax. Accepted values enforce minimum length 1 and maximum length 100.",
        "example": "example-id"
      },
      "sortOrder": {
        "type": "integer",
        "minimum": 0,
        "description": "Whole-number ordering position for sort order in preorders quote lines item; smaller values sort first. Accepted values enforce minimum 0.",
        "example": 1
      },
      "quantity": {
        "type": "integer",
        "minimum": 1,
        "description": "Whole-number quantity measured in the unit established by the item or line that embeds preorders quote lines item. Accepted values enforce minimum 1.",
        "example": 1
      },
      "menuItemId": {
        "type": "string",
        "format": "uuid",
        "description": "Hallify UUID identifying menu item associated with preorders quote lines item.",
        "example": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd"
      },
      "menuVariantId": {
        "type": "string",
        "format": "uuid",
        "nullable": true,
        "description": "Hallify UUID identifying menu variant associated with preorders quote lines item. Null means no value is recorded for this representation.",
        "example": "94389946-e5d8-4fba-8358-e3a9c8a04b11"
      },
      "name": {
        "type": "string",
        "description": "Human-readable name for preorders quote lines item.",
        "example": "Example name"
      },
      "unitPrice": {
        "type": "string",
        "pattern": "^\\d{1,10}\\.\\d{2}$",
        "description": "Decimal monetary unit price serialized as a string in the currency identified by the `currency` field; zero is a recorded amount, not absence.",
        "example": "1.00"
      },
      "lineTotal": {
        "type": "string",
        "pattern": "^\\d{1,10}\\.\\d{2}$",
        "description": "Decimal monetary line total serialized as a string in the currency identified by the `currency` field; zero is a recorded amount, not absence.",
        "example": "1.00"
      },
      "policyHash": {
        "type": "string",
        "pattern": "^[a-f0-9]{64}$",
        "description": "Opaque digest identifying the exact policy snapshot applied by preorders quote lines item.",
        "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
      },
      "structurePlanHash": {
        "type": "string",
        "pattern": "^[a-f0-9]{64}$",
        "description": "Opaque digest of the order-item structure plan captured when preorders quote lines item was priced.",
        "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
      }
    },
    "required": [
      "clientLineId",
      "sortOrder",
      "quantity",
      "menuItemId",
      "menuVariantId",
      "name",
      "unitPrice",
      "lineTotal",
      "policyHash",
      "structurePlanHash"
    ],
    "example": {
      "clientLineId": "example-id",
      "sortOrder": 1,
      "quantity": 1,
      "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
      "menuVariantId": null,
      "name": "Example name",
      "unitPrice": "1.00",
      "lineTotal": "1.00",
      "policyHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
      "structurePlanHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
    }
  },
  "description": "Lines that compose the corresponding lines section of preorders quote.",
  "example": [
    {
      "clientLineId": "example-id",
      "sortOrder": 1,
      "quantity": 1,
      "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
      "menuVariantId": null,
      "name": "Example name",
      "unitPrice": "1.00",
      "lineTotal": "1.00",
      "policyHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
      "structurePlanHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
    }
  ]
}
financialPolicyVersionIdRequired

Hallify UUID identifying financial policy version associated with preorders quote.

string · uuid
Full definition
{
  "type": "string",
  "format": "uuid",
  "description": "Hallify UUID identifying financial policy version associated with preorders quote.",
  "example": "b36de587-2415-41cd-8269-c8dc9aa8ee66"
}
financialPolicyHashRequired

Opaque digest identifying the exact policy snapshot applied by preorders quote.

string
Full definition
{
  "type": "string",
  "pattern": "^[a-f0-9]{64}$",
  "description": "Opaque digest identifying the exact policy snapshot applied by preorders quote.",
  "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
}
fulfillmentPolicyHashRequired

Opaque digest identifying the exact policy snapshot applied by preorders quote.

string
Full definition
{
  "type": "string",
  "pattern": "^[a-f0-9]{64}$",
  "description": "Opaque digest identifying the exact policy snapshot applied by preorders quote.",
  "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
}
adjustmentEvidenceHashRequired

Opaque digest protecting the immutable evidence attached to preorders quote.

string
Full definition
{
  "type": "string",
  "pattern": "^[a-f0-9]{64}$",
  "description": "Opaque digest protecting the immutable evidence attached to preorders quote.",
  "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
}
capacityUnitsRequired

Whole-number capacity units recorded for preorders quote. Accepted values enforce minimum 1 and maximum 10000.

integer
Full definition
{
  "type": "integer",
  "minimum": 1,
  "maximum": 10000,
  "description": "Whole-number capacity units recorded for preorders quote. Accepted values enforce minimum 1 and maximum 10000.",
  "example": 1
}
quotedSubtotalRequired

Decimal monetary quoted subtotal serialized as a string in the currency identified by the currency field; zero is a recorded amount, not absence.

string
Full definition
{
  "type": "string",
  "pattern": "^\\d{1,10}\\.\\d{2}$",
  "description": "Decimal monetary quoted subtotal serialized as a string in the currency identified by the `currency` field; zero is a recorded amount, not absence.",
  "example": "1.00"
}
quotedDiscountTotalRequired

Decimal monetary quoted discount total serialized as a string in the currency identified by the currency field; zero is a recorded amount, not absence.

string
Full definition
{
  "type": "string",
  "pattern": "^\\d{1,10}\\.\\d{2}$",
  "description": "Decimal monetary quoted discount total serialized as a string in the currency identified by the `currency` field; zero is a recorded amount, not absence.",
  "example": "1.00"
}
quotedServiceChargeRequired

Decimal monetary quoted service charge serialized as a string in the currency identified by the currency field; zero is a recorded amount, not absence.

string
Full definition
{
  "type": "string",
  "pattern": "^\\d{1,10}\\.\\d{2}$",
  "description": "Decimal monetary quoted service charge serialized as a string in the currency identified by the `currency` field; zero is a recorded amount, not absence.",
  "example": "1.00"
}
quotedTaxRequired

Decimal monetary quoted tax serialized as a string in the currency identified by the currency field; zero is a recorded amount, not absence.

string
Full definition
{
  "type": "string",
  "pattern": "^\\d{1,10}\\.\\d{2}$",
  "description": "Decimal monetary quoted tax serialized as a string in the currency identified by the `currency` field; zero is a recorded amount, not absence.",
  "example": "1.00"
}
quotedDeliveryFeeRequired

Decimal monetary quoted delivery fee serialized as a string in the currency identified by the currency field; zero is a recorded amount, not absence.

string
Full definition
{
  "type": "string",
  "pattern": "^\\d{1,10}\\.\\d{2}$",
  "description": "Decimal monetary quoted delivery fee serialized as a string in the currency identified by the `currency` field; zero is a recorded amount, not absence.",
  "example": "1.00"
}
quotedTotalRequired

Decimal monetary quoted total serialized as a string in the currency identified by the currency field; zero is a recorded amount, not absence.

string
Full definition
{
  "type": "string",
  "pattern": "^\\d{1,10}\\.\\d{2}$",
  "description": "Decimal monetary quoted total serialized as a string in the currency identified by the `currency` field; zero is a recorded amount, not absence.",
  "example": "1.00"
}
quotedNetPaidRequired

Opaque identifier for quoted net paid associated with preorders quote; clients must not assume UUID syntax.

string
Full definition
{
  "type": "string",
  "pattern": "^\\d{1,10}\\.\\d{2}$",
  "description": "Opaque identifier for quoted net paid associated with preorders quote; clients must not assume UUID syntax.",
  "example": "1.00"
}
quotedRemainingRequired

Quoted remaining for preorders quote.

string
Full definition
{
  "type": "string",
  "pattern": "^\\d{1,10}\\.\\d{2}$",
  "description": "Quoted remaining for preorders quote.",
  "example": "1.00"
}
quotedRefundDueRequired

Decimal monetary quoted refund due serialized as a string in the currency identified by the currency field; zero is a recorded amount, not absence.

string
Full definition
{
  "type": "string",
  "pattern": "^\\d{1,10}\\.\\d{2}$",
  "description": "Decimal monetary quoted refund due serialized as a string in the currency identified by the `currency` field; zero is a recorded amount, not absence.",
  "example": "1.00"
}
quotedDepositRequiredRequired

Quoted deposit required for preorders quote.

string
Full definition
{
  "type": "string",
  "pattern": "^\\d{1,10}\\.\\d{2}$",
  "description": "Quoted deposit required for preorders quote.",
  "example": "1.00"
}
depositDueAtRequired

RFC 3339 timestamp for deposit due at; offsets represent the same absolute instant. Null means no value is recorded for this representation.

string · date-time · null
Full definition
{
  "type": "string",
  "format": "date-time",
  "nullable": true,
  "description": "RFC 3339 timestamp for deposit due at; offsets represent the same absolute instant. Null means no value is recorded for this representation.",
  "example": "2026-12-31T18:00:00.000Z"
}
cancellationCutoffAtRequired

RFC 3339 timestamp for cancellation cutoff at; offsets represent the same absolute instant. Null means no value is recorded for this representation.

string · date-time · null
Full definition
{
  "type": "string",
  "format": "date-time",
  "nullable": true,
  "description": "RFC 3339 timestamp for cancellation cutoff at; offsets represent the same absolute instant. Null means no value is recorded for this representation.",
  "example": "2026-01-15T12:00:00.000Z"
}
currencyRequired

ISO 4217 currency code for the monetary values carried by preorders quote.

string
Full definition
{
  "type": "string",
  "pattern": "^[A-Z]{3}$",
  "description": "ISO 4217 currency code for the monetary values carried by preorders quote.",
  "example": "GEL"
}
issuedAtRequired

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

string · date-time
Full definition
{
  "type": "string",
  "format": "date-time",
  "description": "RFC 3339 timestamp for issued at; offsets represent the same absolute instant.",
  "example": "2026-01-15T10: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"
}
Full definition
{
  "type": "object",
  "properties": {
    "quoteId": {
      "type": "string",
      "format": "uuid",
      "description": "Hallify UUID identifying quote associated with preorders quote.",
      "example": "123728f6-ac4b-43a8-8f9e-44585ec81783"
    },
    "deliveryQuoteId": {
      "type": "string",
      "format": "uuid",
      "description": "Immutable prepared delivery quote used for this accepted customer offer. Omitted for historical SELF and other service modes.",
      "example": "6cd7f319-5499-46ba-88b6-d3c97f979668"
    },
    "quoteToken": {
      "type": "string",
      "description": "Signed token binding the calculated quote to its preorder inputs, price snapshot, and expiry for subsequent acceptance.",
      "example": "synthetic-example-credential"
    },
    "status": {
      "type": "string",
      "enum": [
        "ISSUED",
        "ACCEPTED",
        "DECLINED",
        "EXPIRED",
        "SUPERSEDED"
      ],
      "description": "Current lifecycle status of preorders quote; allowed values are ISSUED, ACCEPTED, DECLINED, EXPIRED, SUPERSEDED.",
      "example": "ISSUED"
    },
    "serviceMode": {
      "type": "string",
      "enum": [
        "DINE_IN",
        "PICKUP",
        "DELIVERY",
        "CATERING"
      ],
      "description": "Allowed service mode for preorders quote: DINE_IN, PICKUP, DELIVERY, CATERING.",
      "example": "DINE_IN"
    },
    "scheduledFor": {
      "type": "string",
      "format": "date-time",
      "description": "RFC 3339 timestamp for scheduled for; offsets represent the same absolute instant.",
      "example": "2026-01-15T12:00:00.000Z"
    },
    "timingMode": {
      "type": "string",
      "enum": [
        "ASAP",
        "SCHEDULED"
      ],
      "description": "Explicit public customer timing intent retained by this quote. Omitted for staff, amendment and legacy scheduled requests.",
      "example": "ASAP"
    },
    "lines": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "properties": {
          "clientLineId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "description": "Opaque identifier for client line associated with preorders quote lines item; clients must not assume UUID syntax. Accepted values enforce minimum length 1 and maximum length 100.",
            "example": "example-id"
          },
          "sortOrder": {
            "type": "integer",
            "minimum": 0,
            "description": "Whole-number ordering position for sort order in preorders quote lines item; smaller values sort first. Accepted values enforce minimum 0.",
            "example": 1
          },
          "quantity": {
            "type": "integer",
            "minimum": 1,
            "description": "Whole-number quantity measured in the unit established by the item or line that embeds preorders quote lines item. Accepted values enforce minimum 1.",
            "example": 1
          },
          "menuItemId": {
            "type": "string",
            "format": "uuid",
            "description": "Hallify UUID identifying menu item associated with preorders quote lines item.",
            "example": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd"
          },
          "menuVariantId": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "Hallify UUID identifying menu variant associated with preorders quote lines item. Null means no value is recorded for this representation.",
            "example": "94389946-e5d8-4fba-8358-e3a9c8a04b11"
          },
          "name": {
            "type": "string",
            "description": "Human-readable name for preorders quote lines item.",
            "example": "Example name"
          },
          "unitPrice": {
            "type": "string",
            "pattern": "^\\d{1,10}\\.\\d{2}$",
            "description": "Decimal monetary unit price serialized as a string in the currency identified by the `currency` field; zero is a recorded amount, not absence.",
            "example": "1.00"
          },
          "lineTotal": {
            "type": "string",
            "pattern": "^\\d{1,10}\\.\\d{2}$",
            "description": "Decimal monetary line total serialized as a string in the currency identified by the `currency` field; zero is a recorded amount, not absence.",
            "example": "1.00"
          },
          "policyHash": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$",
            "description": "Opaque digest identifying the exact policy snapshot applied by preorders quote lines item.",
            "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
          },
          "structurePlanHash": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$",
            "description": "Opaque digest of the order-item structure plan captured when preorders quote lines item was priced.",
            "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
          }
        },
        "required": [
          "clientLineId",
          "sortOrder",
          "quantity",
          "menuItemId",
          "menuVariantId",
          "name",
          "unitPrice",
          "lineTotal",
          "policyHash",
          "structurePlanHash"
        ],
        "example": {
          "clientLineId": "example-id",
          "sortOrder": 1,
          "quantity": 1,
          "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
          "menuVariantId": null,
          "name": "Example name",
          "unitPrice": "1.00",
          "lineTotal": "1.00",
          "policyHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
          "structurePlanHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
        }
      },
      "description": "Lines that compose the corresponding lines section of preorders quote.",
      "example": [
        {
          "clientLineId": "example-id",
          "sortOrder": 1,
          "quantity": 1,
          "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
          "menuVariantId": null,
          "name": "Example name",
          "unitPrice": "1.00",
          "lineTotal": "1.00",
          "policyHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
          "structurePlanHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
        }
      ]
    },
    "financialPolicyVersionId": {
      "type": "string",
      "format": "uuid",
      "description": "Hallify UUID identifying financial policy version associated with preorders quote.",
      "example": "b36de587-2415-41cd-8269-c8dc9aa8ee66"
    },
    "financialPolicyHash": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$",
      "description": "Opaque digest identifying the exact policy snapshot applied by preorders quote.",
      "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
    },
    "fulfillmentPolicyHash": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$",
      "description": "Opaque digest identifying the exact policy snapshot applied by preorders quote.",
      "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
    },
    "adjustmentEvidenceHash": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$",
      "description": "Opaque digest protecting the immutable evidence attached to preorders quote.",
      "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
    },
    "capacityUnits": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10000,
      "description": "Whole-number capacity units recorded for preorders quote. Accepted values enforce minimum 1 and maximum 10000.",
      "example": 1
    },
    "quotedSubtotal": {
      "type": "string",
      "pattern": "^\\d{1,10}\\.\\d{2}$",
      "description": "Decimal monetary quoted subtotal serialized as a string in the currency identified by the `currency` field; zero is a recorded amount, not absence.",
      "example": "1.00"
    },
    "quotedDiscountTotal": {
      "type": "string",
      "pattern": "^\\d{1,10}\\.\\d{2}$",
      "description": "Decimal monetary quoted discount total serialized as a string in the currency identified by the `currency` field; zero is a recorded amount, not absence.",
      "example": "1.00"
    },
    "quotedServiceCharge": {
      "type": "string",
      "pattern": "^\\d{1,10}\\.\\d{2}$",
      "description": "Decimal monetary quoted service charge serialized as a string in the currency identified by the `currency` field; zero is a recorded amount, not absence.",
      "example": "1.00"
    },
    "quotedTax": {
      "type": "string",
      "pattern": "^\\d{1,10}\\.\\d{2}$",
      "description": "Decimal monetary quoted tax serialized as a string in the currency identified by the `currency` field; zero is a recorded amount, not absence.",
      "example": "1.00"
    },
    "quotedDeliveryFee": {
      "type": "string",
      "pattern": "^\\d{1,10}\\.\\d{2}$",
      "description": "Decimal monetary quoted delivery fee serialized as a string in the currency identified by the `currency` field; zero is a recorded amount, not absence.",
      "example": "1.00"
    },
    "quotedTotal": {
      "type": "string",
      "pattern": "^\\d{1,10}\\.\\d{2}$",
      "description": "Decimal monetary quoted total serialized as a string in the currency identified by the `currency` field; zero is a recorded amount, not absence.",
      "example": "1.00"
    },
    "quotedNetPaid": {
      "type": "string",
      "pattern": "^\\d{1,10}\\.\\d{2}$",
      "description": "Opaque identifier for quoted net paid associated with preorders quote; clients must not assume UUID syntax.",
      "example": "1.00"
    },
    "quotedRemaining": {
      "type": "string",
      "pattern": "^\\d{1,10}\\.\\d{2}$",
      "description": "Quoted remaining for preorders quote.",
      "example": "1.00"
    },
    "quotedRefundDue": {
      "type": "string",
      "pattern": "^\\d{1,10}\\.\\d{2}$",
      "description": "Decimal monetary quoted refund due serialized as a string in the currency identified by the `currency` field; zero is a recorded amount, not absence.",
      "example": "1.00"
    },
    "quotedDepositRequired": {
      "type": "string",
      "pattern": "^\\d{1,10}\\.\\d{2}$",
      "description": "Quoted deposit required for preorders quote.",
      "example": "1.00"
    },
    "depositDueAt": {
      "type": "string",
      "format": "date-time",
      "nullable": true,
      "description": "RFC 3339 timestamp for deposit due at; offsets represent the same absolute instant. Null means no value is recorded for this representation.",
      "example": "2026-12-31T18:00:00.000Z"
    },
    "cancellationCutoffAt": {
      "type": "string",
      "format": "date-time",
      "nullable": true,
      "description": "RFC 3339 timestamp for cancellation cutoff at; offsets represent the same absolute instant. Null means no value is recorded for this representation.",
      "example": "2026-01-15T12:00:00.000Z"
    },
    "currency": {
      "type": "string",
      "pattern": "^[A-Z]{3}$",
      "description": "ISO 4217 currency code for the monetary values carried by preorders quote.",
      "example": "GEL"
    },
    "issuedAt": {
      "type": "string",
      "format": "date-time",
      "description": "RFC 3339 timestamp for issued at; offsets represent the same absolute instant.",
      "example": "2026-01-15T10: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"
    }
  },
  "required": [
    "quoteId",
    "quoteToken",
    "status",
    "serviceMode",
    "scheduledFor",
    "lines",
    "financialPolicyVersionId",
    "financialPolicyHash",
    "fulfillmentPolicyHash",
    "adjustmentEvidenceHash",
    "capacityUnits",
    "quotedSubtotal",
    "quotedDiscountTotal",
    "quotedServiceCharge",
    "quotedTax",
    "quotedDeliveryFee",
    "quotedTotal",
    "quotedNetPaid",
    "quotedRemaining",
    "quotedRefundDue",
    "quotedDepositRequired",
    "depositDueAt",
    "cancellationCutoffAt",
    "currency",
    "issuedAt",
    "expiresAt"
  ],
  "description": "Returns calculated pricing, availability, deposit requirements, and a time-limited protected quote token.",
  "example": {
    "quoteId": "123728f6-ac4b-43a8-8f9e-44585ec81783",
    "quoteToken": "synthetic-example-credential",
    "status": "ISSUED",
    "serviceMode": "DINE_IN",
    "scheduledFor": "2026-01-15T12:00:00.000Z",
    "lines": [
      {
        "clientLineId": "example-id",
        "sortOrder": 1,
        "quantity": 1,
        "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
        "menuVariantId": null,
        "name": "Example name",
        "unitPrice": "1.00",
        "lineTotal": "1.00",
        "policyHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
        "structurePlanHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
      }
    ],
    "financialPolicyVersionId": "b36de587-2415-41cd-8269-c8dc9aa8ee66",
    "financialPolicyHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
    "fulfillmentPolicyHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
    "adjustmentEvidenceHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
    "capacityUnits": 1,
    "quotedSubtotal": "1.00",
    "quotedDiscountTotal": "1.00",
    "quotedServiceCharge": "1.00",
    "quotedTax": "1.00",
    "quotedDeliveryFee": "1.00",
    "quotedTotal": "1.00",
    "quotedNetPaid": "1.00",
    "quotedRemaining": "1.00",
    "quotedRefundDue": "1.00",
    "quotedDepositRequired": "1.00",
    "depositDueAt": null,
    "cancellationCutoffAt": null,
    "currency": "GEL",
    "issuedAt": "2026-01-15T10: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.