Authentication
Authorization: Bearer <HALLIFY_PREORDER_DRAFT_TOKEN>Guest-owned capability for a public preorder draft.
Parameters
draftReferencePath · RequiredOpaque reference identifying the public preorder draft; authorization still requires the separate draft capability.
stringFull definition
{ "type": "string", "example": "example" }idempotency-keyHeader · RequiredRequired idempotency key, up to 128 characters
stringFull definition
{ "type": "string", "minLength": 1, "maxLength": 128, "example": "example" }originHeader · OptionalActual 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.
stringFull definition
{ "type": "string", "maxLength": 2048, "example": "example" }
Request body
Required
Uses the draft capability token to validate the contact code, verify the current cart and fulfillment slot, and issue a time-limited single-use commercial quote.
application/json
Full definition
{
"$ref": "#/components/schemas/VerifyPublicPreorderDraftDto"
}Responses
200Returns calculated pricing, deposit requirements, availability, and the protected quote token.
Full definition
{
"$ref": "#/components/schemas/PreorderQuoteDto"
}{
"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 preorderDraftToken credential at the owning domain boundary.
Full definition
{
"$ref": "#/components/schemas/TranslatedErrorDto"
}{
"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
Full definition
{
"$ref": "#/components/schemas/IdempotencyConflictError"
}{
"statusCode": 409,
"error": "errors:http.conflict",
"code": "IDEMPOTENCY_REQUEST_IN_PROGRESS",
"message": "errors:idempotency.inProgress",
"translationKey": "errors:idempotency.inProgress"
}Schemas
VerifyPublicPreorderDraftDto
Uses the draft capability token to validate the contact code, verify the current cart and fulfillment slot, and issue a time-limited single-use commercial quote.
codeRequiredStable code used to classify or address verify public preorder draft. Accepted values enforce minimum length 6 and maximum length 6.
stringFull definition
{ "type": "string", "minLength": 6, "maxLength": 6, "description": "Stable code used to classify or address verify public preorder draft. Accepted values enforce minimum length 6 and maximum length 6.", "example": "000001" }
Full definition
{
"type": "object",
"properties": {
"code": {
"type": "string",
"minLength": 6,
"maxLength": 6,
"description": "Stable code used to classify or address verify public preorder draft. Accepted values enforce minimum length 6 and maximum length 6.",
"example": "000001"
}
},
"required": [
"code"
],
"description": "Uses the draft capability token to validate the contact code, verify the current cart and fulfillment slot, and issue a time-limited single-use commercial quote.",
"example": {
"code": "000001"
}
}PreorderQuoteDto
Returns calculated pricing, availability, deposit requirements, and a time-limited protected quote token.
quoteIdRequiredHallify UUID identifying quote associated with preorders quote.
string · uuidFull definition
{ "type": "string", "format": "uuid", "description": "Hallify UUID identifying quote associated with preorders quote.", "example": "123728f6-ac4b-43a8-8f9e-44585ec81783" }deliveryQuoteIdOptionalImmutable prepared delivery quote used for this accepted customer offer. Omitted for historical SELF and other service modes.
string · uuidFull 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" }quoteTokenRequiredSigned token binding the calculated quote to its preorder inputs, price snapshot, and expiry for subsequent acceptance.
stringFull 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" }statusRequiredCurrent lifecycle status of preorders quote; allowed values are ISSUED, ACCEPTED, DECLINED, EXPIRED, SUPERSEDED.
stringFull 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" }serviceModeRequiredAllowed service mode for preorders quote: DINE_IN, PICKUP, DELIVERY, CATERING.
stringFull definition
{ "type": "string", "enum": [ "DINE_IN", "PICKUP", "DELIVERY", "CATERING" ], "description": "Allowed service mode for preorders quote: DINE_IN, PICKUP, DELIVERY, CATERING.", "example": "DINE_IN" }scheduledForRequiredRFC 3339 timestamp for scheduled for; offsets represent the same absolute instant.
string · date-timeFull 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" }timingModeOptionalExplicit public customer timing intent retained by this quote. Omitted for staff, amendment and legacy scheduled requests.
stringFull 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" }linesRequiredLines that compose the corresponding lines section of preorders quote.
arrayFull 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" } ] }financialPolicyVersionIdRequiredHallify UUID identifying financial policy version associated with preorders quote.
string · uuidFull definition
{ "type": "string", "format": "uuid", "description": "Hallify UUID identifying financial policy version associated with preorders quote.", "example": "b36de587-2415-41cd-8269-c8dc9aa8ee66" }financialPolicyHashRequiredOpaque digest identifying the exact policy snapshot applied by preorders quote.
stringFull definition
{ "type": "string", "pattern": "^[a-f0-9]{64}$", "description": "Opaque digest identifying the exact policy snapshot applied by preorders quote.", "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef" }fulfillmentPolicyHashRequiredOpaque digest identifying the exact policy snapshot applied by preorders quote.
stringFull definition
{ "type": "string", "pattern": "^[a-f0-9]{64}$", "description": "Opaque digest identifying the exact policy snapshot applied by preorders quote.", "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef" }adjustmentEvidenceHashRequiredOpaque digest protecting the immutable evidence attached to preorders quote.
stringFull definition
{ "type": "string", "pattern": "^[a-f0-9]{64}$", "description": "Opaque digest protecting the immutable evidence attached to preorders quote.", "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef" }capacityUnitsRequiredWhole-number capacity units recorded for preorders quote. Accepted values enforce minimum 1 and maximum 10000.
integerFull 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 }quotedSubtotalRequiredDecimal monetary quoted subtotal serialized as a string in the currency identified by the
currencyfield; zero is a recorded amount, not absence.stringFull 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" }quotedDiscountTotalRequiredDecimal monetary quoted discount total serialized as a string in the currency identified by the
currencyfield; zero is a recorded amount, not absence.stringFull 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" }quotedServiceChargeRequiredDecimal monetary quoted service charge serialized as a string in the currency identified by the
currencyfield; zero is a recorded amount, not absence.stringFull 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" }quotedTaxRequiredDecimal monetary quoted tax serialized as a string in the currency identified by the
currencyfield; zero is a recorded amount, not absence.stringFull 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" }quotedDeliveryFeeRequiredDecimal monetary quoted delivery fee serialized as a string in the currency identified by the
currencyfield; zero is a recorded amount, not absence.stringFull 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" }quotedTotalRequiredDecimal monetary quoted total serialized as a string in the currency identified by the
currencyfield; zero is a recorded amount, not absence.stringFull 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" }quotedNetPaidRequiredOpaque identifier for quoted net paid associated with preorders quote; clients must not assume UUID syntax.
stringFull 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" }quotedRemainingRequiredQuoted remaining for preorders quote.
stringFull definition
{ "type": "string", "pattern": "^\\d{1,10}\\.\\d{2}$", "description": "Quoted remaining for preorders quote.", "example": "1.00" }quotedRefundDueRequiredDecimal monetary quoted refund due serialized as a string in the currency identified by the
currencyfield; zero is a recorded amount, not absence.stringFull 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" }quotedDepositRequiredRequiredQuoted deposit required for preorders quote.
stringFull definition
{ "type": "string", "pattern": "^\\d{1,10}\\.\\d{2}$", "description": "Quoted deposit required for preorders quote.", "example": "1.00" }depositDueAtRequiredRFC 3339 timestamp for deposit due at; offsets represent the same absolute instant. Null means no value is recorded for this representation.
string · date-time · nullFull 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" }cancellationCutoffAtRequiredRFC 3339 timestamp for cancellation cutoff at; offsets represent the same absolute instant. Null means no value is recorded for this representation.
string · date-time · nullFull 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" }currencyRequiredISO 4217 currency code for the monetary values carried by preorders quote.
stringFull definition
{ "type": "string", "pattern": "^[A-Z]{3}$", "description": "ISO 4217 currency code for the monetary values carried by preorders quote.", "example": "GEL" }issuedAtRequiredRFC 3339 timestamp for issued at; offsets represent the same absolute instant.
string · date-timeFull 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" }expiresAtRequiredRFC 3339 timestamp for expires at; offsets represent the same absolute instant.
string · date-timeFull 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.
statusCodeRequiredHTTP status code repeated from the response.
integerFull definition
{ "type": "integer", "description": "HTTP status code repeated from the response.", "example": 400 }errorRequiredTranslation key for the HTTP category, such as errors:http.conflict. The specific cause is identified by code and translationKey.
stringFull 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" }codeRequiredStable 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.
stringFull 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." }messageRequiredTranslation key, identical to translationKey. The API does not return localized display text. Resolve the key and translationValues in the consuming application.
stringFull 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." }translationKeyRequiredCanonical 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.
stringFull 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." }translationValuesOptionalOptional scalar values for placeholders in the translation. Treat values as data, escape them when rendering, and never use them as translation options.
objectFull 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" } }validationErrorsOptionalField validation failures with translation keys and stable validator codes. Submitted values and raw validator text are not included.
arrayFull 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" } ] }detailsOptionalOptional domain-specific blocker or validation details
oneOfFull 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.
fieldRequiredPublic field path. Nested properties and array indices are separated by dots.
stringFull definition
{ "type": "string", "example": "email", "description": "Public field path. Nested properties and array indices are separated by dots." }translationKeyRequiredTranslation key for this validator, identical to message. Resolve it using a client dictionary; see the public Developers error catalog.
stringFull 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." }codeRequiredStable validator identifier for this field failure. Custom validators may define additional identifiers.
stringFull definition
{ "type": "string", "example": "isEmail", "description": "Stable validator identifier for this field failure. Custom validators may define additional identifiers." }messageRequiredTranslation key describing this field validation failure, identical to translationKey. Submitted values and validator prose are not included.
stringFull 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." }translationValuesOptionalOptional scalar values for placeholders in the translation. Treat values as data, escape them when rendering, and never use them as translation options.
objectFull 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."
}