Skip to content
Sections

Reservations & waitlist

Verify and atomically convert a public intent

POST/public/reservations/{publicHandle}/intents/{intentId}/verify

Validates the contact code and atomically converts the unexpired intent into its reservation or waitlist record, consuming any capacity hold. A required Idempotency-Key makes retries with the same payload return the stored status and body; reusing the key with a different payload returns 409.

Authentication

A personal credential is supplied in body: reservation-verification-code.

Connection guide

Parameters

publicHandlePath · Required

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

string
Full definition
{
  "type": "string",
  "example": "example"
}
intentIdPath · Required

Hallify UUID whose ownership is validated against every parent tenant and aggregate in this route before the selected resource is exposed or changed.

string · uuid
Full definition
{
  "type": "string",
  "format": "uuid",
  "example": "9b6163a8-afea-4877-818b-8e2ae28a2845"
}
idempotency-keyHeader · Required

Required idempotency key, up to 128 characters

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

Browser Origin evaluated against the public channel allowlist; a missing or disallowed origin is rejected without exposing private venue configuration.

string
Full definition
{
  "type": "string",
  "example": "example"
}

Request body

Required

Validates the contact code and atomically converts the unexpired intent into its reservation or waitlist record, consuming any capacity hold.

application/json

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

Responses

200Returns the committed guest-owned reservation or waitlist receipt and manage capability.
ReservationPublicVerifyIntentResultDto
Full definition
{
  "$ref": "#/components/schemas/ReservationPublicVerifyIntentResultDto"
}
Example response · 200 · application/json
{
  "kind": "RESERVATION",
  "entityId": "6b288694-8b6d-49cd-8007-264ca7224921",
  "referenceCode": "EXAMPLE",
  "revision": 1,
  "status": "REQUESTED",
  "eventIds": [
    "6825b43e-93d6-4f3b-8171-c1661099fae8"
  ],
  "manageToken": "synthetic-example-credential",
  "manageTokenExpiresAt": "2026-12-31T18:00:00.000Z"
}
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

VerifyPublicIntentDto

Validates the contact code and atomically converts the unexpired intent into its reservation or waitlist record, consuming any capacity hold.

codeRequired

Stable code used to classify or address verify public intent.

string
Full definition
{
  "type": "string",
  "pattern": "^\\d{6}$",
  "description": "Stable code used to classify or address verify public intent.",
  "example": "000001"
}
Full definition
{
  "type": "object",
  "properties": {
    "code": {
      "type": "string",
      "pattern": "^\\d{6}$",
      "description": "Stable code used to classify or address verify public intent.",
      "example": "000001"
    }
  },
  "required": [
    "code"
  ],
  "description": "Validates the contact code and atomically converts the unexpired intent into its reservation or waitlist record, consuming any capacity hold.",
  "example": {
    "code": "000001"
  }
}
ReservationPublicVerifyIntentResultDto

Verified booking or waitlist result and its guest management capability.

Full definition
{
  "description": "Verified booking or waitlist result and its guest management capability.",
  "oneOf": [
    {
      "type": "object",
      "description": "Verified reservation intent result.",
      "required": [
        "kind",
        "entityId",
        "referenceCode",
        "revision",
        "status",
        "eventIds",
        "manageToken",
        "manageTokenExpiresAt"
      ],
      "properties": {
        "kind": {
          "type": "string",
          "description": "Kind of the created guest-managed entity.",
          "enum": [
            "RESERVATION"
          ],
          "example": "RESERVATION"
        },
        "entityId": {
          "type": "string",
          "description": "Created reservation or waitlist entry identifier.",
          "format": "uuid",
          "example": "6b288694-8b6d-49cd-8007-264ca7224921"
        },
        "referenceCode": {
          "type": "string",
          "description": "Guest-facing reference code.",
          "example": "EXAMPLE"
        },
        "revision": {
          "type": "integer",
          "description": "Current entity revision.",
          "example": 1
        },
        "status": {
          "type": "string",
          "description": "Resulting booking or waitlist status.",
          "enum": [
            "REQUESTED",
            "BOOKED",
            "CONFIRMED",
            "ARRIVED",
            "SEATED",
            "CANCELED",
            "NO_SHOW",
            "DECLINED",
            "EXPIRED"
          ],
          "example": "REQUESTED"
        },
        "eventIds": {
          "type": "array",
          "description": "Events emitted by this command.",
          "items": {
            "type": "string",
            "description": "Reservation activity event identifier.",
            "format": "uuid",
            "example": "6825b43e-93d6-4f3b-8171-c1661099fae8"
          },
          "example": [
            "6825b43e-93d6-4f3b-8171-c1661099fae8"
          ]
        },
        "manageToken": {
          "type": "string",
          "description": "Sensitive guest capability for subsequent management requests. Use the documented guest authorization header; never log it.",
          "example": "synthetic-example-credential"
        },
        "manageTokenExpiresAt": {
          "type": "string",
          "description": "Expiry of the guest management capability.",
          "format": "date-time",
          "example": "2026-12-31T18:00:00.000Z"
        }
      },
      "example": {
        "kind": "RESERVATION",
        "entityId": "6b288694-8b6d-49cd-8007-264ca7224921",
        "referenceCode": "EXAMPLE",
        "revision": 1,
        "status": "REQUESTED",
        "eventIds": [
          "6825b43e-93d6-4f3b-8171-c1661099fae8"
        ],
        "manageToken": "synthetic-example-credential",
        "manageTokenExpiresAt": "2026-12-31T18:00:00.000Z"
      }
    },
    {
      "type": "object",
      "description": "Verified waitlist intent result.",
      "required": [
        "kind",
        "entityId",
        "referenceCode",
        "revision",
        "status",
        "eventIds",
        "manageToken",
        "manageTokenExpiresAt"
      ],
      "properties": {
        "kind": {
          "type": "string",
          "description": "Kind of the created guest-managed entity.",
          "enum": [
            "WAITLIST"
          ],
          "example": "WAITLIST"
        },
        "entityId": {
          "type": "string",
          "description": "Created reservation or waitlist entry identifier.",
          "format": "uuid",
          "example": "6b288694-8b6d-49cd-8007-264ca7224921"
        },
        "referenceCode": {
          "type": "string",
          "description": "Guest-facing reference code.",
          "example": "EXAMPLE"
        },
        "revision": {
          "type": "integer",
          "description": "Current entity revision.",
          "example": 1
        },
        "status": {
          "type": "string",
          "description": "Resulting booking or waitlist status.",
          "enum": [
            "WAITING",
            "NOTIFIED",
            "CLAIMED",
            "SKIPPED",
            "SEATED",
            "CANCELED",
            "NO_SHOW"
          ],
          "example": "WAITING"
        },
        "eventIds": {
          "type": "array",
          "description": "Events emitted by this command.",
          "items": {
            "type": "string",
            "description": "Reservation activity event identifier.",
            "format": "uuid",
            "example": "6825b43e-93d6-4f3b-8171-c1661099fae8"
          },
          "example": [
            "6825b43e-93d6-4f3b-8171-c1661099fae8"
          ]
        },
        "manageToken": {
          "type": "string",
          "description": "Sensitive guest capability for subsequent management requests. Use the documented guest authorization header; never log it.",
          "example": "synthetic-example-credential"
        },
        "manageTokenExpiresAt": {
          "type": "string",
          "description": "Expiry of the guest management capability.",
          "format": "date-time",
          "example": "2026-12-31T18:00:00.000Z"
        }
      },
      "example": {
        "kind": "WAITLIST",
        "entityId": "6b288694-8b6d-49cd-8007-264ca7224921",
        "referenceCode": "EXAMPLE",
        "revision": 1,
        "status": "WAITING",
        "eventIds": [
          "6825b43e-93d6-4f3b-8171-c1661099fae8"
        ],
        "manageToken": "synthetic-example-credential",
        "manageTokenExpiresAt": "2026-12-31T18:00:00.000Z"
      }
    }
  ],
  "example": {
    "kind": "RESERVATION",
    "entityId": "6b288694-8b6d-49cd-8007-264ca7224921",
    "referenceCode": "EXAMPLE",
    "revision": 1,
    "status": "REQUESTED",
    "eventIds": [
      "6825b43e-93d6-4f3b-8171-c1661099fae8"
    ],
    "manageToken": "synthetic-example-credential",
    "manageTokenExpiresAt": "2026-12-31T18:00:00.000Z"
  }
}
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."
}
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"
}

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.