Skip to content
Sections

Guest ordering

Read bounded public scheduled fulfillment slot choices

GET/public/preorders/{publicHandle}/availability

Checks the current native channel and canonical or exact Storefront presentation in the owning read transaction, then returns at most 500 guest-safe slot choices for a window of at most seven elapsed days. Isolated widget-frame requests require signed widget context and current parent-binding authority. No capacity is reserved. Delivery-area and cart eligibility are checked again by the authoritative quote. Internal capacity, stock, exceptions and override reasons are never returned.

Authentication

x-hallify-widget-context: <HALLIFY_STOREFRONT_WIDGET_CONTEXT>

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

Connection guide

Parameters

publicHandlePath · Required

Current native preorder public discovery handle.

string
Full definition
{
  "type": "string",
  "minLength": 3,
  "maxLength": 48,
  "pattern": "^[a-z0-9][a-z0-9-]{2,47}$",
  "example": "example"
}
serviceModeQuery · Required

Scheduled native fulfillment mode. Dine-in and ASAP are excluded.

string
Full definition
{
  "type": "string",
  "enum": [
    "PICKUP",
    "DELIVERY",
    "CATERING"
  ],
  "example": "PICKUP"
}
fromQuery · Required

Inclusive RFC 3339 start instant with an explicit UTC offset.

string · date-time
Full definition
{
  "maxLength": 64,
  "format": "date-time",
  "example": "2026-12-31T10:00:00.000Z",
  "type": "string"
}
toQuery · Required

Exclusive RFC 3339 upper bound for slot starts, with an explicit UTC offset, later than from and at most 7 elapsed days after it. A selected slot can end after this bound.

string · date-time
Full definition
{
  "maxLength": 64,
  "format": "date-time",
  "example": "2026-12-31T12:00:00.000Z",
  "type": "string"
}
partySizeQuery · Required

Requested party size used by the native fulfillment capacity policy.

integer
Full definition
{
  "minimum": 1,
  "maximum": 10000,
  "type": "integer",
  "example": 1
}
originHeader · Required

Actual browser Origin authorized as canonical Hallify or by the exact current Storefront PREORDER Resource. Widget requests use the isolated frame Origin and signed widget context. Missing or mismatched Origin fails closed.

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

Nonsecret Storefront connection locator. When supplied, the exact presentation is checked even on the canonical Origin; this value grants no authority.

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

Responses

200Complete bounded slot choices and server-resolved venue/channel context.
PublicPreorderAvailabilityDto
Full definition
{
  "$ref": "#/components/schemas/PublicPreorderAvailabilityDto"
}
Example response · 200 · application/json
{
  "publicHandle": "example",
  "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
  "salesChannelId": "ff0fa725-ba44-4e7a-82bb-a15650e0a0cc",
  "timeZone": "Asia/Tbilisi",
  "currency": "GEL",
  "serviceMode": "PICKUP",
  "partySize": 1,
  "from": "2026-12-31T10:00:00.000Z",
  "to": "2026-12-31T12:00:00.000Z",
  "generatedAt": "2026-12-30T10:00:00.000Z",
  "slots": [
    {
      "startsAt": "2026-12-31T10:00:00.000Z",
      "endsAt": "2026-12-31T10:30:00.000Z",
      "available": true
    }
  ]
}
400Malformed query or unsupported time window. Domain error code: PREORDER_PUBLIC_AVAILABILITY_INVALID; standard DTO validation also returns 400.
TranslatedErrorDto
Full definition
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Example response · 400 · application/json
{
  "statusCode": 400,
  "error": "errors:http.badRequest",
  "code": "HTTP_BAD_REQUEST",
  "message": "errors:http.badRequest",
  "translationKey": "errors:http.badRequest"
}
404Native channel, active sales channel or current presentation authority is unavailable. Error codes: PREORDER_PUBLIC_RESOURCE_NOT_FOUND, STOREFRONT_PRESENTATION_UNAVAILABLE.
TranslatedErrorDto
Full definition
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Example response · 404 · application/json
{
  "statusCode": 404,
  "error": "errors:http.notFound",
  "code": "HTTP_NOT_FOUND",
  "message": "errors:http.notFound",
  "translationKey": "errors:http.notFound"
}
429The public discovery rate limit was reached. Error code: RATE_LIMITED. Retry-After gives the remaining delay.

Response headers

Retry-After

Whole seconds the client must wait before retrying the rejected request.

integer
Full definition
{
  "type": "integer",
  "minimum": 1,
  "example": 60
}
TranslatedErrorDto
Full definition
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Example response · 429 · application/json
{
  "statusCode": 429,
  "error": "errors:http.tooManyRequests",
  "code": "HTTP_TOO_MANY_REQUESTS",
  "message": "errors:http.tooManyRequests",
  "translationKey": "errors:http.tooManyRequests"
}
503The native policy or bounded slot cohort cannot be safely projected, or widget authority configuration is unavailable. Error codes: PREORDER_PUBLIC_AVAILABILITY_UNAVAILABLE, STOREFRONT_WIDGET_UNAVAILABLE.
TranslatedErrorDto
Full definition
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Example response · 503 · application/json
{
  "statusCode": 503,
  "error": "errors:http.serviceUnavailable",
  "code": "HTTP_SERVICE_UNAVAILABLE",
  "message": "errors:http.serviceUnavailable",
  "translationKey": "errors:http.serviceUnavailable"
}

Schemas

PublicPreorderAvailabilityDto

Bounded public slot choices under the actual native preorder channel and current presentation authority.

deliveryMethodsOptional

Currently usable venue delivery methods for DELIVERY; empty for other service modes. A method choice does not reserve a provider quote.

array
Full definition
{
  "type": "array",
  "maxItems": 3,
  "description": "Currently usable venue delivery methods for DELIVERY; empty for other service modes. A method choice does not reserve a provider quote.",
  "items": {
    "type": "string",
    "enum": [
      "SELF",
      "UBER_DIRECT",
      "WOLT_DRIVE"
    ],
    "example": "SELF"
  },
  "example": [
    "SELF"
  ]
}
publicHandleRequired

Current native preorder public discovery handle.

string
Full definition
{
  "type": "string",
  "minLength": 3,
  "maxLength": 48,
  "description": "Current native preorder public discovery handle.",
  "example": "example"
}
venueIdRequired

Server-resolved venue UUID owning the channel.

string · uuid
Full definition
{
  "type": "string",
  "format": "uuid",
  "description": "Server-resolved venue UUID owning the channel.",
  "example": "0604de3a-da74-4ad5-89f6-2dfe000d5391"
}
salesChannelIdRequired

Server-resolved active sales channel UUID.

string · uuid
Full definition
{
  "type": "string",
  "format": "uuid",
  "description": "Server-resolved active sales channel UUID.",
  "example": "ff0fa725-ba44-4e7a-82bb-a15650e0a0cc"
}
timeZoneRequired

Venue IANA timezone used for all slot calculations.

string
Full definition
{
  "type": "string",
  "description": "Venue IANA timezone used for all slot calculations.",
  "example": "Asia/Tbilisi"
}
currencyRequired

Server-resolved venue currency. This response contains no prices.

string
Full definition
{
  "type": "string",
  "pattern": "^[A-Z]{3}$",
  "description": "Server-resolved venue currency. This response contains no prices.",
  "example": "GEL"
}
serviceModeRequired

Scheduled fulfillment mode evaluated by the native owner.

string
Full definition
{
  "type": "string",
  "enum": [
    "PICKUP",
    "DELIVERY",
    "CATERING"
  ],
  "description": "Scheduled fulfillment mode evaluated by the native owner.",
  "example": "PICKUP"
}
partySizeRequired

Requested party size evaluated by the native owner.

integer
Full definition
{
  "type": "integer",
  "minimum": 1,
  "maximum": 10000,
  "description": "Requested party size evaluated by the native owner.",
  "example": 1
}
fromRequired

Inclusive UTC lower bound for slot starts.

string · date-time
Full definition
{
  "type": "string",
  "format": "date-time",
  "description": "Inclusive UTC lower bound for slot starts.",
  "example": "2026-12-31T10:00:00.000Z"
}
toRequired

Exclusive UTC upper bound for slot starts. A selected slot can end later.

string · date-time
Full definition
{
  "type": "string",
  "format": "date-time",
  "description": "Exclusive UTC upper bound for slot starts. A selected slot can end later.",
  "example": "2026-12-31T12:00:00.000Z"
}
generatedAtRequired

Single server instant used to evaluate expiry and minimum lead time.

string · date-time
Full definition
{
  "type": "string",
  "format": "date-time",
  "description": "Single server instant used to evaluate expiry and minimum lead time.",
  "example": "2026-12-30T10:00:00.000Z"
}
slotsRequired

Complete chronological slot choices for this bounded window. Oversized source or choice cohorts fail closed rather than returning a truncated list.

array
Full definition
{
  "maxItems": 500,
  "description": "Complete chronological slot choices for this bounded window. Oversized source or choice cohorts fail closed rather than returning a truncated list.",
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/PublicPreorderSlotChoiceDto"
  },
  "example": [
    {
      "startsAt": "2026-12-31T10:00:00.000Z",
      "endsAt": "2026-12-31T10:30:00.000Z",
      "available": true
    }
  ]
}
Full definition
{
  "type": "object",
  "properties": {
    "deliveryMethods": {
      "type": "array",
      "maxItems": 3,
      "description": "Currently usable venue delivery methods for DELIVERY; empty for other service modes. A method choice does not reserve a provider quote.",
      "items": {
        "type": "string",
        "enum": [
          "SELF",
          "UBER_DIRECT",
          "WOLT_DRIVE"
        ],
        "example": "SELF"
      },
      "example": [
        "SELF"
      ]
    },
    "publicHandle": {
      "type": "string",
      "minLength": 3,
      "maxLength": 48,
      "description": "Current native preorder public discovery handle.",
      "example": "example"
    },
    "venueId": {
      "type": "string",
      "format": "uuid",
      "description": "Server-resolved venue UUID owning the channel.",
      "example": "0604de3a-da74-4ad5-89f6-2dfe000d5391"
    },
    "salesChannelId": {
      "type": "string",
      "format": "uuid",
      "description": "Server-resolved active sales channel UUID.",
      "example": "ff0fa725-ba44-4e7a-82bb-a15650e0a0cc"
    },
    "timeZone": {
      "type": "string",
      "description": "Venue IANA timezone used for all slot calculations.",
      "example": "Asia/Tbilisi"
    },
    "currency": {
      "type": "string",
      "pattern": "^[A-Z]{3}$",
      "description": "Server-resolved venue currency. This response contains no prices.",
      "example": "GEL"
    },
    "serviceMode": {
      "type": "string",
      "enum": [
        "PICKUP",
        "DELIVERY",
        "CATERING"
      ],
      "description": "Scheduled fulfillment mode evaluated by the native owner.",
      "example": "PICKUP"
    },
    "partySize": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10000,
      "description": "Requested party size evaluated by the native owner.",
      "example": 1
    },
    "from": {
      "type": "string",
      "format": "date-time",
      "description": "Inclusive UTC lower bound for slot starts.",
      "example": "2026-12-31T10:00:00.000Z"
    },
    "to": {
      "type": "string",
      "format": "date-time",
      "description": "Exclusive UTC upper bound for slot starts. A selected slot can end later.",
      "example": "2026-12-31T12:00:00.000Z"
    },
    "generatedAt": {
      "type": "string",
      "format": "date-time",
      "description": "Single server instant used to evaluate expiry and minimum lead time.",
      "example": "2026-12-30T10:00:00.000Z"
    },
    "slots": {
      "maxItems": 500,
      "description": "Complete chronological slot choices for this bounded window. Oversized source or choice cohorts fail closed rather than returning a truncated list.",
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/PublicPreorderSlotChoiceDto"
      },
      "example": [
        {
          "startsAt": "2026-12-31T10:00:00.000Z",
          "endsAt": "2026-12-31T10:30:00.000Z",
          "available": true
        }
      ]
    }
  },
  "description": "Bounded public slot choices under the actual native preorder channel and current presentation authority.",
  "required": [
    "publicHandle",
    "venueId",
    "salesChannelId",
    "timeZone",
    "currency",
    "serviceMode",
    "partySize",
    "from",
    "to",
    "generatedAt",
    "slots"
  ],
  "example": {
    "publicHandle": "example",
    "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
    "salesChannelId": "ff0fa725-ba44-4e7a-82bb-a15650e0a0cc",
    "timeZone": "Asia/Tbilisi",
    "currency": "GEL",
    "serviceMode": "PICKUP",
    "partySize": 1,
    "from": "2026-12-31T10:00:00.000Z",
    "to": "2026-12-31T12:00:00.000Z",
    "generatedAt": "2026-12-30T10:00:00.000Z",
    "slots": [
      {
        "startsAt": "2026-12-31T10:00:00.000Z",
        "endsAt": "2026-12-31T10:30:00.000Z",
        "available": true
      }
    ]
  }
}
PublicPreorderSlotChoiceDto

A scheduled fulfillment slot choice without internal capacity data.

startsAtRequired

Inclusive UTC start of the native slot.

string · date-time
Full definition
{
  "type": "string",
  "format": "date-time",
  "description": "Inclusive UTC start of the native slot.",
  "example": "2026-12-31T10:00:00.000Z"
}
endsAtRequired

Exclusive UTC end of the native slot.

string · date-time
Full definition
{
  "type": "string",
  "format": "date-time",
  "description": "Exclusive UTC end of the native slot.",
  "example": "2026-12-31T10:30:00.000Z"
}
availableRequired

Whether venue-wide capacity currently admits the requested party. This read reserves no capacity; the quote additionally validates the cart and delivery area.

boolean
Full definition
{
  "type": "boolean",
  "description": "Whether venue-wide capacity currently admits the requested party. This read reserves no capacity; the quote additionally validates the cart and delivery area.",
  "example": true
}
Full definition
{
  "type": "object",
  "properties": {
    "startsAt": {
      "type": "string",
      "format": "date-time",
      "description": "Inclusive UTC start of the native slot.",
      "example": "2026-12-31T10:00:00.000Z"
    },
    "endsAt": {
      "type": "string",
      "format": "date-time",
      "description": "Exclusive UTC end of the native slot.",
      "example": "2026-12-31T10:30:00.000Z"
    },
    "available": {
      "type": "boolean",
      "description": "Whether venue-wide capacity currently admits the requested party. This read reserves no capacity; the quote additionally validates the cart and delivery area.",
      "example": true
    }
  },
  "description": "A scheduled fulfillment slot choice without internal capacity data.",
  "required": [
    "startsAt",
    "endsAt",
    "available"
  ],
  "example": {
    "startsAt": "2026-12-31T10:00:00.000Z",
    "endsAt": "2026-12-31T10:30:00.000Z",
    "available": true
  }
}
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.