Skip to content
Sections

Published storefronts

Read a storefront for a selected actual venue

GET/public/storefronts/{publicHandle}/venues/{venueId}

Selects an actual venue through the active brand connection and its explicit current outlet resource attachment, or verifies the venue of a venue-only connection. A nullable ordering entry identifies only an attached active native preorder channel. It preserves the selected native venue and does not combine tenant, currency or transaction authority. Nullable reservation discovery identifies only the attached active native booking channel for that same venue and connection.

Authentication

A Hallify account session is not required. Follow this operation’s prerequisites and restrictions.

Connection guide

Parameters

publicHandlePath · Required

Globally reserved hosted handle.

string
Full definition
{
  "type": "string",
  "minLength": 1,
  "maxLength": 48,
  "example": "example"
}
venueIdPath · Required

Actual selected native venue UUID.

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

Responses

200Published presentation with the selected venue public profile.
StorefrontPublicPresentationDto
Full definition
{
  "$ref": "#/components/schemas/StorefrontPublicPresentationDto"
}
Example response · 200 · application/json
{
  "connectionId": "2fde64d5-54a3-47d0-800f-a015f92a8878",
  "publicHandle": "example",
  "kind": "BRAND",
  "canonicalUrl": "https://example.test/resource",
  "publication": {
    "publicationId": "6df588a1-7850-4942-8bce-1d836572d66f",
    "sourceRevision": 1,
    "schemaVersion": 1,
    "contentHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
    "publishedAt": "2026-01-15T12:00:00.000Z"
  },
  "document": {
    "schemaVersion": 1,
    "defaultLocale": "en",
    "theme": {
      "colorScheme": "LIGHT",
      "accent": "AMBER",
      "density": "COMFORTABLE"
    },
    "seo": {
      "title": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      },
      "description": {
        "en": "Synthetic example",
        "ka": "Synthetic example",
        "ru": "Synthetic example"
      }
    },
    "blocks": [
      {
        "id": "example-id",
        "kind": "HERO",
        "title": {
          "en": "example",
          "ka": "example",
          "ru": "example"
        },
        "body": null,
        "image": null
      }
    ]
  },
  "venue": null,
  "ordering": null,
  "reservations": null
}
400The handle or selected venue identifier is malformed.
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"
}
404The venue is not currently attached and publicly available through this connection.
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"
}
503Persisted publication or scoped native ordering discovery cannot be safely projected. Ordering projection failures use STOREFRONT_ORDERING_UNAVAILABLE. Invalid scoped reservation discovery uses STOREFRONT_RESERVATIONS_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

StorefrontPublicPresentationDto

Current public hosted presentation containing a nonsecret connection locator, canonical address, immutable publication, typed document, nullable venue profile and nullable native ordering and reservation discovery. Discovery grants no guest or financial authority.

connectionIdRequired

Published presentation connection UUID; a nonsecret locator.

string · uuid
Full definition
{
  "type": "string",
  "description": "Published presentation connection UUID; a nonsecret locator.",
  "format": "uuid",
  "example": "2fde64d5-54a3-47d0-800f-a015f92a8878"
}
publicHandleRequired

Globally reserved hosted presentation handle.

string
Full definition
{
  "type": "string",
  "description": "Globally reserved hosted presentation handle.",
  "minLength": 1,
  "maxLength": 48,
  "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$",
  "example": "example"
}
kindRequired

Presentation target discriminator. Brand presentations select an actual venue through the separate outlet directory.

string
Full definition
{
  "type": "string",
  "description": "Presentation target discriminator. Brand presentations select an actual venue through the separate outlet directory.",
  "enum": [
    "BRAND",
    "VENUE"
  ],
  "example": "BRAND"
}
canonicalUrlRequired

Canonical hosted address derived from current verified binding authority.

string · uri
Full definition
{
  "type": "string",
  "description": "Canonical hosted address derived from current verified binding authority.",
  "format": "uri",
  "maxLength": 2048,
  "example": "https://example.test/resource"
}
publicationRequired

Current immutable presentation publication evidence.

allOf
Full definition
{
  "description": "Current immutable presentation publication evidence.",
  "allOf": [
    {
      "$ref": "#/components/schemas/StorefrontPublicationDto"
    }
  ],
  "example": {
    "publicationId": "6df588a1-7850-4942-8bce-1d836572d66f",
    "sourceRevision": 1,
    "schemaVersion": 1,
    "contentHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
    "publishedAt": "2026-01-15T12:00:00.000Z"
  }
}
documentRequired

Exact typed presentation document from the immutable publication.

allOf
Full definition
{
  "description": "Exact typed presentation document from the immutable publication.",
  "allOf": [
    {
      "$ref": "#/components/schemas/StorefrontDocumentDto"
    }
  ],
  "example": {
    "schemaVersion": 1,
    "defaultLocale": "en",
    "theme": {
      "colorScheme": "LIGHT",
      "accent": "AMBER",
      "density": "COMFORTABLE"
    },
    "seo": {
      "title": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      },
      "description": {
        "en": "Synthetic example",
        "ka": "Synthetic example",
        "ru": "Synthetic example"
      }
    },
    "blocks": [
      {
        "id": "example-id",
        "kind": "HERO",
        "title": {
          "en": "example",
          "ka": "example",
          "ru": "example"
        },
        "body": null,
        "image": null
      }
    ]
  }
}
venueRequired

Safe native venue projection for a venue presentation, or null for brand outlet selection.

object · null
Full definition
{
  "description": "Safe native venue projection for a venue presentation, or null for brand outlet selection.",
  "nullable": true,
  "type": "object",
  "properties": {
    "venueId": {
      "type": "string",
      "description": "Actual native venue UUID.",
      "format": "uuid",
      "example": "0604de3a-da74-4ad5-89f6-2dfe000d5391"
    },
    "name": {
      "type": "string",
      "description": "Public venue display name.",
      "minLength": 1,
      "maxLength": 255,
      "example": "Example name"
    },
    "currency": {
      "type": "string",
      "description": "Native venue currency code; presentation does not convert it.",
      "minLength": 3,
      "maxLength": 3,
      "example": "GEL"
    },
    "timeZone": {
      "type": "string",
      "description": "Native venue time-zone identifier.",
      "minLength": 1,
      "maxLength": 64,
      "example": "Asia/Tbilisi"
    },
    "countryCode": {
      "type": "string",
      "description": "Configured venue country code, or null when unavailable.",
      "nullable": true,
      "minLength": 2,
      "maxLength": 2,
      "example": "GE"
    },
    "city": {
      "type": "string",
      "description": "Public venue city, or null when unavailable.",
      "nullable": true,
      "maxLength": 120,
      "example": "example"
    },
    "region": {
      "type": "string",
      "description": "Public venue region, or null when unavailable.",
      "nullable": true,
      "maxLength": 120,
      "example": "example"
    }
  },
  "required": [
    "venueId",
    "name",
    "currency",
    "timeZone",
    "countryCode",
    "city",
    "region"
  ],
  "example": {
    "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
    "name": "Example name",
    "currency": "GEL",
    "timeZone": "Asia/Tbilisi",
    "countryCode": null,
    "city": null,
    "region": null
  }
}
orderingRequired

Current attached active native preorder channel for the selected venue, or null when no eligible attachment exists or the brand has no selected venue. Native catalog, quote and request-origin authorization remain authoritative.

object · null
Full definition
{
  "description": "Current attached active native preorder channel for the selected venue, or null when no eligible attachment exists or the brand has no selected venue. Native catalog, quote and request-origin authorization remain authoritative.",
  "nullable": true,
  "type": "object",
  "properties": {
    "connectionId": {
      "type": "string",
      "description": "Presentation connection UUID to retain as the nonsecret connection locator on native public draft requests. This does not replace current request-origin authorization.",
      "format": "uuid",
      "example": "2fde64d5-54a3-47d0-800f-a015f92a8878"
    },
    "resourceId": {
      "type": "string",
      "description": "Current attached PREORDER resource UUID within the presentation connection and selected venue. This is a discovery locator, not a capability.",
      "format": "uuid",
      "example": "d5b5eb29-9b8d-4d6f-8f4f-6f0e58f32568"
    },
    "venueId": {
      "type": "string",
      "description": "Actual native venue UUID owning this attachment and preorder channel. Orders remain scoped to this venue.",
      "format": "uuid",
      "example": "0604de3a-da74-4ad5-89f6-2dfe000d5391"
    },
    "publicChannelId": {
      "type": "string",
      "description": "Active native preorder public channel UUID belonging to the selected venue.",
      "format": "uuid",
      "example": "9bee613d-3322-4a03-8b9f-8a6259984eee"
    },
    "publicChannelHandle": {
      "type": "string",
      "description": "Native preorder channel discovery handle used by the public catalog. This is distinct from the enclosing storefront presentation handle.",
      "minLength": 1,
      "maxLength": 48,
      "example": "example"
    }
  },
  "required": [
    "connectionId",
    "resourceId",
    "venueId",
    "publicChannelId",
    "publicChannelHandle"
  ],
  "example": {
    "connectionId": "2fde64d5-54a3-47d0-800f-a015f92a8878",
    "resourceId": "d5b5eb29-9b8d-4d6f-8f4f-6f0e58f32568",
    "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
    "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
    "publicChannelHandle": "example"
  }
}
reservationsRequired

Current attached active native reservation channel for the selected venue, or null when no eligible attachment exists or the brand has no selected venue. Native availability, booking, waitlist and request-origin authorization remain authoritative.

object · null
Full definition
{
  "description": "Current attached active native reservation channel for the selected venue, or null when no eligible attachment exists or the brand has no selected venue. Native availability, booking, waitlist and request-origin authorization remain authoritative.",
  "nullable": true,
  "type": "object",
  "properties": {
    "connectionId": {
      "type": "string",
      "description": "Presentation connection UUID used only as the nonsecret connection locator for native public reservation requests. This does not replace current request-origin authorization.",
      "format": "uuid",
      "example": "2fde64d5-54a3-47d0-800f-a015f92a8878"
    },
    "resourceId": {
      "type": "string",
      "description": "Current attached RESERVATION resource UUID within this presentation connection and venue. This is a discovery locator, not a capability.",
      "format": "uuid",
      "example": "d5b5eb29-9b8d-4d6f-8f4f-6f0e58f32568"
    },
    "venueId": {
      "type": "string",
      "description": "Actual native venue UUID owning this attachment and reservation channel. Booking and waitlist demand remain scoped to this venue.",
      "format": "uuid",
      "example": "0604de3a-da74-4ad5-89f6-2dfe000d5391"
    },
    "publicChannelId": {
      "type": "string",
      "description": "Active native reservation public channel UUID belonging to the selected venue.",
      "format": "uuid",
      "example": "9bee613d-3322-4a03-8b9f-8a6259984eee"
    },
    "publicChannelHandle": {
      "type": "string",
      "description": "Native reservation channel discovery handle used by public booking configuration and availability. This is distinct from the enclosing storefront presentation handle.",
      "minLength": 1,
      "maxLength": 48,
      "example": "1.000"
    }
  },
  "required": [
    "connectionId",
    "resourceId",
    "venueId",
    "publicChannelId",
    "publicChannelHandle"
  ],
  "example": {
    "connectionId": "2fde64d5-54a3-47d0-800f-a015f92a8878",
    "resourceId": "d5b5eb29-9b8d-4d6f-8f4f-6f0e58f32568",
    "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
    "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
    "publicChannelHandle": "1.000"
  }
}
Full definition
{
  "type": "object",
  "properties": {
    "connectionId": {
      "type": "string",
      "description": "Published presentation connection UUID; a nonsecret locator.",
      "format": "uuid",
      "example": "2fde64d5-54a3-47d0-800f-a015f92a8878"
    },
    "publicHandle": {
      "type": "string",
      "description": "Globally reserved hosted presentation handle.",
      "minLength": 1,
      "maxLength": 48,
      "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$",
      "example": "example"
    },
    "kind": {
      "type": "string",
      "description": "Presentation target discriminator. Brand presentations select an actual venue through the separate outlet directory.",
      "enum": [
        "BRAND",
        "VENUE"
      ],
      "example": "BRAND"
    },
    "canonicalUrl": {
      "type": "string",
      "description": "Canonical hosted address derived from current verified binding authority.",
      "format": "uri",
      "maxLength": 2048,
      "example": "https://example.test/resource"
    },
    "publication": {
      "description": "Current immutable presentation publication evidence.",
      "allOf": [
        {
          "$ref": "#/components/schemas/StorefrontPublicationDto"
        }
      ],
      "example": {
        "publicationId": "6df588a1-7850-4942-8bce-1d836572d66f",
        "sourceRevision": 1,
        "schemaVersion": 1,
        "contentHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
        "publishedAt": "2026-01-15T12:00:00.000Z"
      }
    },
    "document": {
      "description": "Exact typed presentation document from the immutable publication.",
      "allOf": [
        {
          "$ref": "#/components/schemas/StorefrontDocumentDto"
        }
      ],
      "example": {
        "schemaVersion": 1,
        "defaultLocale": "en",
        "theme": {
          "colorScheme": "LIGHT",
          "accent": "AMBER",
          "density": "COMFORTABLE"
        },
        "seo": {
          "title": {
            "en": "example",
            "ka": "example",
            "ru": "example"
          },
          "description": {
            "en": "Synthetic example",
            "ka": "Synthetic example",
            "ru": "Synthetic example"
          }
        },
        "blocks": [
          {
            "id": "example-id",
            "kind": "HERO",
            "title": {
              "en": "example",
              "ka": "example",
              "ru": "example"
            },
            "body": null,
            "image": null
          }
        ]
      }
    },
    "venue": {
      "description": "Safe native venue projection for a venue presentation, or null for brand outlet selection.",
      "nullable": true,
      "type": "object",
      "properties": {
        "venueId": {
          "type": "string",
          "description": "Actual native venue UUID.",
          "format": "uuid",
          "example": "0604de3a-da74-4ad5-89f6-2dfe000d5391"
        },
        "name": {
          "type": "string",
          "description": "Public venue display name.",
          "minLength": 1,
          "maxLength": 255,
          "example": "Example name"
        },
        "currency": {
          "type": "string",
          "description": "Native venue currency code; presentation does not convert it.",
          "minLength": 3,
          "maxLength": 3,
          "example": "GEL"
        },
        "timeZone": {
          "type": "string",
          "description": "Native venue time-zone identifier.",
          "minLength": 1,
          "maxLength": 64,
          "example": "Asia/Tbilisi"
        },
        "countryCode": {
          "type": "string",
          "description": "Configured venue country code, or null when unavailable.",
          "nullable": true,
          "minLength": 2,
          "maxLength": 2,
          "example": "GE"
        },
        "city": {
          "type": "string",
          "description": "Public venue city, or null when unavailable.",
          "nullable": true,
          "maxLength": 120,
          "example": "example"
        },
        "region": {
          "type": "string",
          "description": "Public venue region, or null when unavailable.",
          "nullable": true,
          "maxLength": 120,
          "example": "example"
        }
      },
      "required": [
        "venueId",
        "name",
        "currency",
        "timeZone",
        "countryCode",
        "city",
        "region"
      ],
      "example": {
        "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
        "name": "Example name",
        "currency": "GEL",
        "timeZone": "Asia/Tbilisi",
        "countryCode": null,
        "city": null,
        "region": null
      }
    },
    "ordering": {
      "description": "Current attached active native preorder channel for the selected venue, or null when no eligible attachment exists or the brand has no selected venue. Native catalog, quote and request-origin authorization remain authoritative.",
      "nullable": true,
      "type": "object",
      "properties": {
        "connectionId": {
          "type": "string",
          "description": "Presentation connection UUID to retain as the nonsecret connection locator on native public draft requests. This does not replace current request-origin authorization.",
          "format": "uuid",
          "example": "2fde64d5-54a3-47d0-800f-a015f92a8878"
        },
        "resourceId": {
          "type": "string",
          "description": "Current attached PREORDER resource UUID within the presentation connection and selected venue. This is a discovery locator, not a capability.",
          "format": "uuid",
          "example": "d5b5eb29-9b8d-4d6f-8f4f-6f0e58f32568"
        },
        "venueId": {
          "type": "string",
          "description": "Actual native venue UUID owning this attachment and preorder channel. Orders remain scoped to this venue.",
          "format": "uuid",
          "example": "0604de3a-da74-4ad5-89f6-2dfe000d5391"
        },
        "publicChannelId": {
          "type": "string",
          "description": "Active native preorder public channel UUID belonging to the selected venue.",
          "format": "uuid",
          "example": "9bee613d-3322-4a03-8b9f-8a6259984eee"
        },
        "publicChannelHandle": {
          "type": "string",
          "description": "Native preorder channel discovery handle used by the public catalog. This is distinct from the enclosing storefront presentation handle.",
          "minLength": 1,
          "maxLength": 48,
          "example": "example"
        }
      },
      "required": [
        "connectionId",
        "resourceId",
        "venueId",
        "publicChannelId",
        "publicChannelHandle"
      ],
      "example": {
        "connectionId": "2fde64d5-54a3-47d0-800f-a015f92a8878",
        "resourceId": "d5b5eb29-9b8d-4d6f-8f4f-6f0e58f32568",
        "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
        "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
        "publicChannelHandle": "example"
      }
    },
    "reservations": {
      "description": "Current attached active native reservation channel for the selected venue, or null when no eligible attachment exists or the brand has no selected venue. Native availability, booking, waitlist and request-origin authorization remain authoritative.",
      "nullable": true,
      "type": "object",
      "properties": {
        "connectionId": {
          "type": "string",
          "description": "Presentation connection UUID used only as the nonsecret connection locator for native public reservation requests. This does not replace current request-origin authorization.",
          "format": "uuid",
          "example": "2fde64d5-54a3-47d0-800f-a015f92a8878"
        },
        "resourceId": {
          "type": "string",
          "description": "Current attached RESERVATION resource UUID within this presentation connection and venue. This is a discovery locator, not a capability.",
          "format": "uuid",
          "example": "d5b5eb29-9b8d-4d6f-8f4f-6f0e58f32568"
        },
        "venueId": {
          "type": "string",
          "description": "Actual native venue UUID owning this attachment and reservation channel. Booking and waitlist demand remain scoped to this venue.",
          "format": "uuid",
          "example": "0604de3a-da74-4ad5-89f6-2dfe000d5391"
        },
        "publicChannelId": {
          "type": "string",
          "description": "Active native reservation public channel UUID belonging to the selected venue.",
          "format": "uuid",
          "example": "9bee613d-3322-4a03-8b9f-8a6259984eee"
        },
        "publicChannelHandle": {
          "type": "string",
          "description": "Native reservation channel discovery handle used by public booking configuration and availability. This is distinct from the enclosing storefront presentation handle.",
          "minLength": 1,
          "maxLength": 48,
          "example": "1.000"
        }
      },
      "required": [
        "connectionId",
        "resourceId",
        "venueId",
        "publicChannelId",
        "publicChannelHandle"
      ],
      "example": {
        "connectionId": "2fde64d5-54a3-47d0-800f-a015f92a8878",
        "resourceId": "d5b5eb29-9b8d-4d6f-8f4f-6f0e58f32568",
        "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
        "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
        "publicChannelHandle": "1.000"
      }
    }
  },
  "description": "Current public hosted presentation containing a nonsecret connection locator, canonical address, immutable publication, typed document, nullable venue profile and nullable native ordering and reservation discovery. Discovery grants no guest or financial authority.",
  "required": [
    "connectionId",
    "publicHandle",
    "kind",
    "canonicalUrl",
    "publication",
    "document",
    "venue",
    "ordering",
    "reservations"
  ],
  "example": {
    "connectionId": "2fde64d5-54a3-47d0-800f-a015f92a8878",
    "publicHandle": "example",
    "kind": "BRAND",
    "canonicalUrl": "https://example.test/resource",
    "publication": {
      "publicationId": "6df588a1-7850-4942-8bce-1d836572d66f",
      "sourceRevision": 1,
      "schemaVersion": 1,
      "contentHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
      "publishedAt": "2026-01-15T12:00:00.000Z"
    },
    "document": {
      "schemaVersion": 1,
      "defaultLocale": "en",
      "theme": {
        "colorScheme": "LIGHT",
        "accent": "AMBER",
        "density": "COMFORTABLE"
      },
      "seo": {
        "title": {
          "en": "example",
          "ka": "example",
          "ru": "example"
        },
        "description": {
          "en": "Synthetic example",
          "ka": "Synthetic example",
          "ru": "Synthetic example"
        }
      },
      "blocks": [
        {
          "id": "example-id",
          "kind": "HERO",
          "title": {
            "en": "example",
            "ka": "example",
            "ru": "example"
          },
          "body": null,
          "image": null
        }
      ]
    },
    "venue": null,
    "ordering": null,
    "reservations": null
  }
}
StorefrontPublicationDto

Immutable presentation publication identity, source revision, schema version, normalized content hash and original publication time.

publicationIdRequired

Immutable presentation publication UUID.

string · uuid
Full definition
{
  "type": "string",
  "description": "Immutable presentation publication UUID.",
  "format": "uuid",
  "example": "6df588a1-7850-4942-8bce-1d836572d66f"
}
sourceRevisionRequired

Target draft revision frozen in this publication.

integer
Full definition
{
  "type": "integer",
  "description": "Target draft revision frozen in this publication.",
  "minimum": 1,
  "example": 1
}
schemaVersionRequired

Frozen typed document schema version.

integer
Full definition
{
  "type": "integer",
  "description": "Frozen typed document schema version.",
  "enum": [
    1
  ],
  "minimum": 1,
  "maximum": 1,
  "example": 1
}
contentHashRequired

SHA-256 hash of the immutable normalized presentation evidence.

string
Full definition
{
  "type": "string",
  "description": "SHA-256 hash of the immutable normalized presentation evidence.",
  "minLength": 64,
  "maxLength": 64,
  "pattern": "^[a-f0-9]{64}$",
  "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
}
publishedAtRequired

Original publication time.

string · date-time
Full definition
{
  "type": "string",
  "description": "Original publication time.",
  "format": "date-time",
  "example": "2026-01-15T12:00:00.000Z"
}
Full definition
{
  "type": "object",
  "properties": {
    "publicationId": {
      "type": "string",
      "description": "Immutable presentation publication UUID.",
      "format": "uuid",
      "example": "6df588a1-7850-4942-8bce-1d836572d66f"
    },
    "sourceRevision": {
      "type": "integer",
      "description": "Target draft revision frozen in this publication.",
      "minimum": 1,
      "example": 1
    },
    "schemaVersion": {
      "type": "integer",
      "description": "Frozen typed document schema version.",
      "enum": [
        1
      ],
      "minimum": 1,
      "maximum": 1,
      "example": 1
    },
    "contentHash": {
      "type": "string",
      "description": "SHA-256 hash of the immutable normalized presentation evidence.",
      "minLength": 64,
      "maxLength": 64,
      "pattern": "^[a-f0-9]{64}$",
      "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
    },
    "publishedAt": {
      "type": "string",
      "description": "Original publication time.",
      "format": "date-time",
      "example": "2026-01-15T12:00:00.000Z"
    }
  },
  "description": "Immutable presentation publication identity, source revision, schema version, normalized content hash and original publication time.",
  "required": [
    "publicationId",
    "sourceRevision",
    "schemaVersion",
    "contentHash",
    "publishedAt"
  ],
  "example": {
    "publicationId": "6df588a1-7850-4942-8bce-1d836572d66f",
    "sourceRevision": 1,
    "schemaVersion": 1,
    "contentHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
    "publishedAt": "2026-01-15T12:00:00.000Z"
  }
}
StorefrontDocumentDto

Exact schema-version-one multilingual presentation document containing safe theme tokens, search metadata and ordered typed content blocks within the normalized UTF-8 size budget.

schemaVersionRequired

Exact typed presentation schema version.

integer
Full definition
{
  "type": "integer",
  "description": "Exact typed presentation schema version.",
  "enum": [
    1
  ],
  "minimum": 1,
  "maximum": 1,
  "example": 1
}
defaultLocaleRequired

Default presentation locale; every text value also includes EN, KA and RU.

string
Full definition
{
  "type": "string",
  "description": "Default presentation locale; every text value also includes EN, KA and RU.",
  "enum": [
    "en",
    "ka",
    "ru"
  ],
  "example": "en"
}
themeRequired

Safe hosted theme tokens.

allOf
Full definition
{
  "description": "Safe hosted theme tokens.",
  "allOf": [
    {
      "$ref": "#/components/schemas/StorefrontThemeDto"
    }
  ],
  "example": {
    "colorScheme": "LIGHT",
    "accent": "AMBER",
    "density": "COMFORTABLE"
  }
}
seoRequired

Localized public metadata.

allOf
Full definition
{
  "description": "Localized public metadata.",
  "allOf": [
    {
      "$ref": "#/components/schemas/StorefrontSeoDto"
    }
  ],
  "example": {
    "title": {
      "en": "example",
      "ka": "example",
      "ru": "example"
    },
    "description": {
      "en": "Synthetic example",
      "ka": "Synthetic example",
      "ru": "Synthetic example"
    }
  }
}
blocksRequired

Ordered typed content blocks with unique identities. The complete normalized document is capped at 65536 UTF-8 bytes.

array
Full definition
{
  "type": "array",
  "description": "Ordered typed content blocks with unique identities. The complete normalized document is capped at 65536 UTF-8 bytes.",
  "minItems": 1,
  "maxItems": 24,
  "items": {
    "oneOf": [
      {
        "$ref": "#/components/schemas/StorefrontHeroBlockDto"
      },
      {
        "$ref": "#/components/schemas/StorefrontTextBlockDto"
      },
      {
        "$ref": "#/components/schemas/StorefrontGalleryBlockDto"
      },
      {
        "$ref": "#/components/schemas/StorefrontLinksBlockDto"
      }
    ],
    "discriminator": {
      "propertyName": "kind"
    },
    "example": {
      "id": "example-id",
      "kind": "HERO",
      "title": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      },
      "body": null,
      "image": null
    }
  },
  "example": [
    {
      "id": "example-id",
      "kind": "HERO",
      "title": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      },
      "body": null,
      "image": null
    }
  ]
}
Full definition
{
  "type": "object",
  "properties": {
    "schemaVersion": {
      "type": "integer",
      "description": "Exact typed presentation schema version.",
      "enum": [
        1
      ],
      "minimum": 1,
      "maximum": 1,
      "example": 1
    },
    "defaultLocale": {
      "type": "string",
      "description": "Default presentation locale; every text value also includes EN, KA and RU.",
      "enum": [
        "en",
        "ka",
        "ru"
      ],
      "example": "en"
    },
    "theme": {
      "description": "Safe hosted theme tokens.",
      "allOf": [
        {
          "$ref": "#/components/schemas/StorefrontThemeDto"
        }
      ],
      "example": {
        "colorScheme": "LIGHT",
        "accent": "AMBER",
        "density": "COMFORTABLE"
      }
    },
    "seo": {
      "description": "Localized public metadata.",
      "allOf": [
        {
          "$ref": "#/components/schemas/StorefrontSeoDto"
        }
      ],
      "example": {
        "title": {
          "en": "example",
          "ka": "example",
          "ru": "example"
        },
        "description": {
          "en": "Synthetic example",
          "ka": "Synthetic example",
          "ru": "Synthetic example"
        }
      }
    },
    "blocks": {
      "type": "array",
      "description": "Ordered typed content blocks with unique identities. The complete normalized document is capped at 65536 UTF-8 bytes.",
      "minItems": 1,
      "maxItems": 24,
      "items": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/StorefrontHeroBlockDto"
          },
          {
            "$ref": "#/components/schemas/StorefrontTextBlockDto"
          },
          {
            "$ref": "#/components/schemas/StorefrontGalleryBlockDto"
          },
          {
            "$ref": "#/components/schemas/StorefrontLinksBlockDto"
          }
        ],
        "discriminator": {
          "propertyName": "kind"
        },
        "example": {
          "id": "example-id",
          "kind": "HERO",
          "title": {
            "en": "example",
            "ka": "example",
            "ru": "example"
          },
          "body": null,
          "image": null
        }
      },
      "example": [
        {
          "id": "example-id",
          "kind": "HERO",
          "title": {
            "en": "example",
            "ka": "example",
            "ru": "example"
          },
          "body": null,
          "image": null
        }
      ]
    }
  },
  "description": "Exact schema-version-one multilingual presentation document containing safe theme tokens, search metadata and ordered typed content blocks within the normalized UTF-8 size budget.",
  "required": [
    "schemaVersion",
    "defaultLocale",
    "theme",
    "seo",
    "blocks"
  ],
  "example": {
    "schemaVersion": 1,
    "defaultLocale": "en",
    "theme": {
      "colorScheme": "LIGHT",
      "accent": "AMBER",
      "density": "COMFORTABLE"
    },
    "seo": {
      "title": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      },
      "description": {
        "en": "Synthetic example",
        "ka": "Synthetic example",
        "ru": "Synthetic example"
      }
    },
    "blocks": [
      {
        "id": "example-id",
        "kind": "HERO",
        "title": {
          "en": "example",
          "ka": "example",
          "ru": "example"
        },
        "body": null,
        "image": null
      }
    ]
  }
}
StorefrontThemeDto

Bounded hosted appearance tokens selecting a supported color scheme, accent and content density.

colorSchemeRequired

Hosted color scheme from the supported token set.

string
Full definition
{
  "type": "string",
  "description": "Hosted color scheme from the supported token set.",
  "enum": [
    "LIGHT",
    "DARK",
    "PURPLE"
  ],
  "example": "LIGHT"
}
accentRequired

Hosted accent token; arbitrary CSS values are not accepted.

string
Full definition
{
  "type": "string",
  "description": "Hosted accent token; arbitrary CSS values are not accepted.",
  "enum": [
    "AMBER",
    "CORAL",
    "EMERALD",
    "INDIGO"
  ],
  "example": "AMBER"
}
densityRequired

Supported content density.

string
Full definition
{
  "type": "string",
  "description": "Supported content density.",
  "enum": [
    "COMFORTABLE",
    "COMPACT"
  ],
  "example": "COMFORTABLE"
}
Full definition
{
  "type": "object",
  "properties": {
    "colorScheme": {
      "type": "string",
      "description": "Hosted color scheme from the supported token set.",
      "enum": [
        "LIGHT",
        "DARK",
        "PURPLE"
      ],
      "example": "LIGHT"
    },
    "accent": {
      "type": "string",
      "description": "Hosted accent token; arbitrary CSS values are not accepted.",
      "enum": [
        "AMBER",
        "CORAL",
        "EMERALD",
        "INDIGO"
      ],
      "example": "AMBER"
    },
    "density": {
      "type": "string",
      "description": "Supported content density.",
      "enum": [
        "COMFORTABLE",
        "COMPACT"
      ],
      "example": "COMFORTABLE"
    }
  },
  "description": "Bounded hosted appearance tokens selecting a supported color scheme, accent and content density.",
  "required": [
    "colorScheme",
    "accent",
    "density"
  ],
  "example": {
    "colorScheme": "LIGHT",
    "accent": "AMBER",
    "density": "COMFORTABLE"
  }
}
StorefrontSeoDto

Public search metadata containing required English, Georgian and Russian title and description text.

titleRequired

Localized public document title.

allOf
Full definition
{
  "description": "Localized public document title.",
  "allOf": [
    {
      "$ref": "#/components/schemas/StorefrontHeadingTextDto"
    }
  ],
  "example": {
    "en": "example",
    "ka": "example",
    "ru": "example"
  }
}
descriptionRequired

Localized public search description.

allOf
Full definition
{
  "description": "Localized public search description.",
  "allOf": [
    {
      "$ref": "#/components/schemas/StorefrontDescriptionTextDto"
    }
  ],
  "example": {
    "en": "Synthetic example",
    "ka": "Synthetic example",
    "ru": "Synthetic example"
  }
}
Full definition
{
  "type": "object",
  "properties": {
    "title": {
      "description": "Localized public document title.",
      "allOf": [
        {
          "$ref": "#/components/schemas/StorefrontHeadingTextDto"
        }
      ],
      "example": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      }
    },
    "description": {
      "description": "Localized public search description.",
      "allOf": [
        {
          "$ref": "#/components/schemas/StorefrontDescriptionTextDto"
        }
      ],
      "example": {
        "en": "Synthetic example",
        "ka": "Synthetic example",
        "ru": "Synthetic example"
      }
    }
  },
  "description": "Public search metadata containing required English, Georgian and Russian title and description text.",
  "required": [
    "title",
    "description"
  ],
  "example": {
    "title": {
      "en": "example",
      "ka": "example",
      "ru": "example"
    },
    "description": {
      "en": "Synthetic example",
      "ka": "Synthetic example",
      "ru": "Synthetic example"
    }
  }
}
StorefrontHeadingTextDto

Required plain-text heading in English, Georgian and Russian, with one to 160 characters per language.

enRequired

English plain-text heading.

string
Full definition
{
  "type": "string",
  "description": "English plain-text heading.",
  "minLength": 1,
  "maxLength": 160,
  "example": "example"
}
kaRequired

Georgian plain-text heading.

string
Full definition
{
  "type": "string",
  "description": "Georgian plain-text heading.",
  "minLength": 1,
  "maxLength": 160,
  "example": "example"
}
ruRequired

Russian plain-text heading.

string
Full definition
{
  "type": "string",
  "description": "Russian plain-text heading.",
  "minLength": 1,
  "maxLength": 160,
  "example": "example"
}
Full definition
{
  "type": "object",
  "properties": {
    "en": {
      "type": "string",
      "description": "English plain-text heading.",
      "minLength": 1,
      "maxLength": 160,
      "example": "example"
    },
    "ka": {
      "type": "string",
      "description": "Georgian plain-text heading.",
      "minLength": 1,
      "maxLength": 160,
      "example": "example"
    },
    "ru": {
      "type": "string",
      "description": "Russian plain-text heading.",
      "minLength": 1,
      "maxLength": 160,
      "example": "example"
    }
  },
  "description": "Required plain-text heading in English, Georgian and Russian, with one to 160 characters per language.",
  "required": [
    "en",
    "ka",
    "ru"
  ],
  "example": {
    "en": "example",
    "ka": "example",
    "ru": "example"
  }
}
StorefrontDescriptionTextDto

Required public search description in English, Georgian and Russian, with one to 320 characters per language.

enRequired

English search description.

string
Full definition
{
  "type": "string",
  "description": "English search description.",
  "minLength": 1,
  "maxLength": 320,
  "example": "Synthetic example"
}
kaRequired

Georgian search description.

string
Full definition
{
  "type": "string",
  "description": "Georgian search description.",
  "minLength": 1,
  "maxLength": 320,
  "example": "Synthetic example"
}
ruRequired

Russian search description.

string
Full definition
{
  "type": "string",
  "description": "Russian search description.",
  "minLength": 1,
  "maxLength": 320,
  "example": "Synthetic example"
}
Full definition
{
  "type": "object",
  "properties": {
    "en": {
      "type": "string",
      "description": "English search description.",
      "minLength": 1,
      "maxLength": 320,
      "example": "Synthetic example"
    },
    "ka": {
      "type": "string",
      "description": "Georgian search description.",
      "minLength": 1,
      "maxLength": 320,
      "example": "Synthetic example"
    },
    "ru": {
      "type": "string",
      "description": "Russian search description.",
      "minLength": 1,
      "maxLength": 320,
      "example": "Synthetic example"
    }
  },
  "description": "Required public search description in English, Georgian and Russian, with one to 320 characters per language.",
  "required": [
    "en",
    "ka",
    "ru"
  ],
  "example": {
    "en": "Synthetic example",
    "ka": "Synthetic example",
    "ru": "Synthetic example"
  }
}
StorefrontHeroBlockDto

Hero presentation block with a required multilingual headline, optional multilingual supporting text and an optional accessible image.

idRequired

Stable document-local block identity; unique within the document.

string
Full definition
{
  "type": "string",
  "description": "Stable document-local block identity; unique within the document.",
  "minLength": 1,
  "maxLength": 48,
  "example": "example-id"
}
kindRequired

Hero block discriminator.

string
Full definition
{
  "type": "string",
  "description": "Hero block discriminator.",
  "enum": [
    "HERO"
  ],
  "example": "HERO"
}
titleRequired

Localized hero headline.

allOf
Full definition
{
  "description": "Localized hero headline.",
  "allOf": [
    {
      "$ref": "#/components/schemas/StorefrontHeadingTextDto"
    }
  ],
  "example": {
    "en": "example",
    "ka": "example",
    "ru": "example"
  }
}
bodyRequired

Localized supporting text, or null when omitted from the presentation.

object · null
Full definition
{
  "description": "Localized supporting text, or null when omitted from the presentation.",
  "nullable": true,
  "type": "object",
  "properties": {
    "en": {
      "type": "string",
      "description": "English hero supporting text.",
      "minLength": 1,
      "maxLength": 1000,
      "example": "example"
    },
    "ka": {
      "type": "string",
      "description": "Georgian hero supporting text.",
      "minLength": 1,
      "maxLength": 1000,
      "example": "example"
    },
    "ru": {
      "type": "string",
      "description": "Russian hero supporting text.",
      "minLength": 1,
      "maxLength": 1000,
      "example": "example"
    }
  },
  "required": [
    "en",
    "ka",
    "ru"
  ],
  "example": {
    "en": "example",
    "ka": "example",
    "ru": "example"
  }
}
imageRequired

Hero image, or null for a text-only hero.

object · null
Full definition
{
  "description": "Hero image, or null for a text-only hero.",
  "nullable": true,
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Public HTTPS image address. No server-side image fetch is authorized by this value.",
      "format": "uri",
      "minLength": 1,
      "maxLength": 2048,
      "example": "https://example.test/resource"
    },
    "alt": {
      "description": "Alternative text in every supported storefront locale.",
      "allOf": [
        {
          "$ref": "#/components/schemas/StorefrontImageAltTextDto"
        }
      ],
      "example": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      }
    }
  },
  "required": [
    "url",
    "alt"
  ],
  "example": {
    "url": "https://example.test/resource",
    "alt": {
      "en": "example",
      "ka": "example",
      "ru": "example"
    }
  }
}
Full definition
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Stable document-local block identity; unique within the document.",
      "minLength": 1,
      "maxLength": 48,
      "example": "example-id"
    },
    "kind": {
      "type": "string",
      "description": "Hero block discriminator.",
      "enum": [
        "HERO"
      ],
      "example": "HERO"
    },
    "title": {
      "description": "Localized hero headline.",
      "allOf": [
        {
          "$ref": "#/components/schemas/StorefrontHeadingTextDto"
        }
      ],
      "example": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      }
    },
    "body": {
      "description": "Localized supporting text, or null when omitted from the presentation.",
      "nullable": true,
      "type": "object",
      "properties": {
        "en": {
          "type": "string",
          "description": "English hero supporting text.",
          "minLength": 1,
          "maxLength": 1000,
          "example": "example"
        },
        "ka": {
          "type": "string",
          "description": "Georgian hero supporting text.",
          "minLength": 1,
          "maxLength": 1000,
          "example": "example"
        },
        "ru": {
          "type": "string",
          "description": "Russian hero supporting text.",
          "minLength": 1,
          "maxLength": 1000,
          "example": "example"
        }
      },
      "required": [
        "en",
        "ka",
        "ru"
      ],
      "example": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      }
    },
    "image": {
      "description": "Hero image, or null for a text-only hero.",
      "nullable": true,
      "type": "object",
      "properties": {
        "url": {
          "type": "string",
          "description": "Public HTTPS image address. No server-side image fetch is authorized by this value.",
          "format": "uri",
          "minLength": 1,
          "maxLength": 2048,
          "example": "https://example.test/resource"
        },
        "alt": {
          "description": "Alternative text in every supported storefront locale.",
          "allOf": [
            {
              "$ref": "#/components/schemas/StorefrontImageAltTextDto"
            }
          ],
          "example": {
            "en": "example",
            "ka": "example",
            "ru": "example"
          }
        }
      },
      "required": [
        "url",
        "alt"
      ],
      "example": {
        "url": "https://example.test/resource",
        "alt": {
          "en": "example",
          "ka": "example",
          "ru": "example"
        }
      }
    }
  },
  "description": "Hero presentation block with a required multilingual headline, optional multilingual supporting text and an optional accessible image.",
  "required": [
    "id",
    "kind",
    "title",
    "body",
    "image"
  ],
  "example": {
    "id": "example-id",
    "kind": "HERO",
    "title": {
      "en": "example",
      "ka": "example",
      "ru": "example"
    },
    "body": null,
    "image": null
  }
}
StorefrontImageAltTextDto

Required accessible image description in English, Georgian and Russian, with one to 240 characters per language.

enRequired

English image alternative text.

string
Full definition
{
  "type": "string",
  "description": "English image alternative text.",
  "minLength": 1,
  "maxLength": 240,
  "example": "example"
}
kaRequired

Georgian image alternative text.

string
Full definition
{
  "type": "string",
  "description": "Georgian image alternative text.",
  "minLength": 1,
  "maxLength": 240,
  "example": "example"
}
ruRequired

Russian image alternative text.

string
Full definition
{
  "type": "string",
  "description": "Russian image alternative text.",
  "minLength": 1,
  "maxLength": 240,
  "example": "example"
}
Full definition
{
  "type": "object",
  "properties": {
    "en": {
      "type": "string",
      "description": "English image alternative text.",
      "minLength": 1,
      "maxLength": 240,
      "example": "example"
    },
    "ka": {
      "type": "string",
      "description": "Georgian image alternative text.",
      "minLength": 1,
      "maxLength": 240,
      "example": "example"
    },
    "ru": {
      "type": "string",
      "description": "Russian image alternative text.",
      "minLength": 1,
      "maxLength": 240,
      "example": "example"
    }
  },
  "description": "Required accessible image description in English, Georgian and Russian, with one to 240 characters per language.",
  "required": [
    "en",
    "ka",
    "ru"
  ],
  "example": {
    "en": "example",
    "ka": "example",
    "ru": "example"
  }
}
StorefrontTextBlockDto

Plain-text presentation block with required multilingual paragraph content and an explicit nullable multilingual heading.

idRequired

Stable document-local block identity; unique within the document.

string
Full definition
{
  "type": "string",
  "description": "Stable document-local block identity; unique within the document.",
  "minLength": 1,
  "maxLength": 48,
  "example": "example-id"
}
kindRequired

Plain-text block discriminator.

string
Full definition
{
  "type": "string",
  "description": "Plain-text block discriminator.",
  "enum": [
    "TEXT"
  ],
  "example": "TEXT"
}
headingRequired

Localized heading, or null for an unheaded paragraph.

object · null
Full definition
{
  "description": "Localized heading, or null for an unheaded paragraph.",
  "nullable": true,
  "type": "object",
  "properties": {
    "en": {
      "type": "string",
      "description": "English plain-text heading.",
      "minLength": 1,
      "maxLength": 160,
      "example": "example"
    },
    "ka": {
      "type": "string",
      "description": "Georgian plain-text heading.",
      "minLength": 1,
      "maxLength": 160,
      "example": "example"
    },
    "ru": {
      "type": "string",
      "description": "Russian plain-text heading.",
      "minLength": 1,
      "maxLength": 160,
      "example": "example"
    }
  },
  "required": [
    "en",
    "ka",
    "ru"
  ],
  "example": {
    "en": "example",
    "ka": "example",
    "ru": "example"
  }
}
bodyRequired

Localized plain text; it is not executable HTML.

allOf
Full definition
{
  "description": "Localized plain text; it is not executable HTML.",
  "allOf": [
    {
      "$ref": "#/components/schemas/StorefrontParagraphTextDto"
    }
  ],
  "example": {
    "en": "example",
    "ka": "example",
    "ru": "example"
  }
}
Full definition
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Stable document-local block identity; unique within the document.",
      "minLength": 1,
      "maxLength": 48,
      "example": "example-id"
    },
    "kind": {
      "type": "string",
      "description": "Plain-text block discriminator.",
      "enum": [
        "TEXT"
      ],
      "example": "TEXT"
    },
    "heading": {
      "description": "Localized heading, or null for an unheaded paragraph.",
      "nullable": true,
      "type": "object",
      "properties": {
        "en": {
          "type": "string",
          "description": "English plain-text heading.",
          "minLength": 1,
          "maxLength": 160,
          "example": "example"
        },
        "ka": {
          "type": "string",
          "description": "Georgian plain-text heading.",
          "minLength": 1,
          "maxLength": 160,
          "example": "example"
        },
        "ru": {
          "type": "string",
          "description": "Russian plain-text heading.",
          "minLength": 1,
          "maxLength": 160,
          "example": "example"
        }
      },
      "required": [
        "en",
        "ka",
        "ru"
      ],
      "example": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      }
    },
    "body": {
      "description": "Localized plain text; it is not executable HTML.",
      "allOf": [
        {
          "$ref": "#/components/schemas/StorefrontParagraphTextDto"
        }
      ],
      "example": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      }
    }
  },
  "description": "Plain-text presentation block with required multilingual paragraph content and an explicit nullable multilingual heading.",
  "required": [
    "id",
    "kind",
    "heading",
    "body"
  ],
  "example": {
    "id": "example-id",
    "kind": "TEXT",
    "heading": null,
    "body": {
      "en": "example",
      "ka": "example",
      "ru": "example"
    }
  }
}
StorefrontParagraphTextDto

Required plain-text paragraph in English, Georgian and Russian, with one to 4000 characters per language.

enRequired

English plain-text paragraph.

string
Full definition
{
  "type": "string",
  "description": "English plain-text paragraph.",
  "minLength": 1,
  "maxLength": 4000,
  "example": "example"
}
kaRequired

Georgian plain-text paragraph.

string
Full definition
{
  "type": "string",
  "description": "Georgian plain-text paragraph.",
  "minLength": 1,
  "maxLength": 4000,
  "example": "example"
}
ruRequired

Russian plain-text paragraph.

string
Full definition
{
  "type": "string",
  "description": "Russian plain-text paragraph.",
  "minLength": 1,
  "maxLength": 4000,
  "example": "example"
}
Full definition
{
  "type": "object",
  "properties": {
    "en": {
      "type": "string",
      "description": "English plain-text paragraph.",
      "minLength": 1,
      "maxLength": 4000,
      "example": "example"
    },
    "ka": {
      "type": "string",
      "description": "Georgian plain-text paragraph.",
      "minLength": 1,
      "maxLength": 4000,
      "example": "example"
    },
    "ru": {
      "type": "string",
      "description": "Russian plain-text paragraph.",
      "minLength": 1,
      "maxLength": 4000,
      "example": "example"
    }
  },
  "description": "Required plain-text paragraph in English, Georgian and Russian, with one to 4000 characters per language.",
  "required": [
    "en",
    "ka",
    "ru"
  ],
  "example": {
    "en": "example",
    "ka": "example",
    "ru": "example"
  }
}
StorefrontGalleryBlockDto

Ordered presentation gallery containing one to twelve public HTTPS images with multilingual alternative text.

idRequired

Stable document-local block identity; unique within the document.

string
Full definition
{
  "type": "string",
  "description": "Stable document-local block identity; unique within the document.",
  "minLength": 1,
  "maxLength": 48,
  "example": "example-id"
}
kindRequired

Gallery block discriminator.

string
Full definition
{
  "type": "string",
  "description": "Gallery block discriminator.",
  "enum": [
    "GALLERY"
  ],
  "example": "GALLERY"
}
imagesRequired

Ordered gallery images with localized alternative text.

array
Full definition
{
  "description": "Ordered gallery images with localized alternative text.",
  "minItems": 1,
  "maxItems": 12,
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/StorefrontImageDto"
  },
  "example": [
    {
      "url": "https://example.test/resource",
      "alt": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      }
    }
  ]
}
Full definition
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Stable document-local block identity; unique within the document.",
      "minLength": 1,
      "maxLength": 48,
      "example": "example-id"
    },
    "kind": {
      "type": "string",
      "description": "Gallery block discriminator.",
      "enum": [
        "GALLERY"
      ],
      "example": "GALLERY"
    },
    "images": {
      "description": "Ordered gallery images with localized alternative text.",
      "minItems": 1,
      "maxItems": 12,
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/StorefrontImageDto"
      },
      "example": [
        {
          "url": "https://example.test/resource",
          "alt": {
            "en": "example",
            "ka": "example",
            "ru": "example"
          }
        }
      ]
    }
  },
  "description": "Ordered presentation gallery containing one to twelve public HTTPS images with multilingual alternative text.",
  "required": [
    "id",
    "kind",
    "images"
  ],
  "example": {
    "id": "example-id",
    "kind": "GALLERY",
    "images": [
      {
        "url": "https://example.test/resource",
        "alt": {
          "en": "example",
          "ka": "example",
          "ru": "example"
        }
      }
    ]
  }
}
StorefrontImageDto

Public HTTPS presentation image with required English, Georgian and Russian alternative text for accessible rendering.

urlRequired

Public HTTPS image address. No server-side image fetch is authorized by this value.

string · uri
Full definition
{
  "type": "string",
  "description": "Public HTTPS image address. No server-side image fetch is authorized by this value.",
  "format": "uri",
  "minLength": 1,
  "maxLength": 2048,
  "example": "https://example.test/resource"
}
altRequired

Alternative text in every supported storefront locale.

allOf
Full definition
{
  "description": "Alternative text in every supported storefront locale.",
  "allOf": [
    {
      "$ref": "#/components/schemas/StorefrontImageAltTextDto"
    }
  ],
  "example": {
    "en": "example",
    "ka": "example",
    "ru": "example"
  }
}
Full definition
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Public HTTPS image address. No server-side image fetch is authorized by this value.",
      "format": "uri",
      "minLength": 1,
      "maxLength": 2048,
      "example": "https://example.test/resource"
    },
    "alt": {
      "description": "Alternative text in every supported storefront locale.",
      "allOf": [
        {
          "$ref": "#/components/schemas/StorefrontImageAltTextDto"
        }
      ],
      "example": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      }
    }
  },
  "description": "Public HTTPS presentation image with required English, Georgian and Russian alternative text for accessible rendering.",
  "required": [
    "url",
    "alt"
  ],
  "example": {
    "url": "https://example.test/resource",
    "alt": {
      "en": "example",
      "ka": "example",
      "ru": "example"
    }
  }
}
StorefrontLinksBlockDto

Ordered presentation links block containing one to twelve explicitly labeled public HTTPS destinations.

idRequired

Stable document-local block identity; unique within the document.

string
Full definition
{
  "type": "string",
  "description": "Stable document-local block identity; unique within the document.",
  "minLength": 1,
  "maxLength": 48,
  "example": "example-id"
}
kindRequired

Link-group block discriminator.

string
Full definition
{
  "type": "string",
  "description": "Link-group block discriminator.",
  "enum": [
    "LINKS"
  ],
  "example": "LINKS"
}
linksRequired

Ordered external links.

array
Full definition
{
  "description": "Ordered external links.",
  "minItems": 1,
  "maxItems": 12,
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/StorefrontLinkDto"
  },
  "example": [
    {
      "label": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      },
      "url": "https://example.test/resource"
    }
  ]
}
Full definition
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Stable document-local block identity; unique within the document.",
      "minLength": 1,
      "maxLength": 48,
      "example": "example-id"
    },
    "kind": {
      "type": "string",
      "description": "Link-group block discriminator.",
      "enum": [
        "LINKS"
      ],
      "example": "LINKS"
    },
    "links": {
      "description": "Ordered external links.",
      "minItems": 1,
      "maxItems": 12,
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/StorefrontLinkDto"
      },
      "example": [
        {
          "label": {
            "en": "example",
            "ka": "example",
            "ru": "example"
          },
          "url": "https://example.test/resource"
        }
      ]
    }
  },
  "description": "Ordered presentation links block containing one to twelve explicitly labeled public HTTPS destinations.",
  "required": [
    "id",
    "kind",
    "links"
  ],
  "example": {
    "id": "example-id",
    "kind": "LINKS",
    "links": [
      {
        "label": {
          "en": "example",
          "ka": "example",
          "ru": "example"
        },
        "url": "https://example.test/resource"
      }
    ]
  }
}
StorefrontLinkDto

Public HTTPS presentation destination with required English, Georgian and Russian link labels.

labelRequired

Localized external-link label.

allOf
Full definition
{
  "description": "Localized external-link label.",
  "allOf": [
    {
      "$ref": "#/components/schemas/StorefrontLinkLabelTextDto"
    }
  ],
  "example": {
    "en": "example",
    "ka": "example",
    "ru": "example"
  }
}
urlRequired

Public HTTPS destination; credentials and nonstandard ports are rejected.

string · uri
Full definition
{
  "type": "string",
  "description": "Public HTTPS destination; credentials and nonstandard ports are rejected.",
  "format": "uri",
  "minLength": 1,
  "maxLength": 2048,
  "example": "https://example.test/resource"
}
Full definition
{
  "type": "object",
  "properties": {
    "label": {
      "description": "Localized external-link label.",
      "allOf": [
        {
          "$ref": "#/components/schemas/StorefrontLinkLabelTextDto"
        }
      ],
      "example": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      }
    },
    "url": {
      "type": "string",
      "description": "Public HTTPS destination; credentials and nonstandard ports are rejected.",
      "format": "uri",
      "minLength": 1,
      "maxLength": 2048,
      "example": "https://example.test/resource"
    }
  },
  "description": "Public HTTPS presentation destination with required English, Georgian and Russian link labels.",
  "required": [
    "label",
    "url"
  ],
  "example": {
    "label": {
      "en": "example",
      "ka": "example",
      "ru": "example"
    },
    "url": "https://example.test/resource"
  }
}
StorefrontLinkLabelTextDto

Required presentation link label in English, Georgian and Russian, with one to 120 characters per language.

enRequired

English link label.

string
Full definition
{
  "type": "string",
  "description": "English link label.",
  "minLength": 1,
  "maxLength": 120,
  "example": "example"
}
kaRequired

Georgian link label.

string
Full definition
{
  "type": "string",
  "description": "Georgian link label.",
  "minLength": 1,
  "maxLength": 120,
  "example": "example"
}
ruRequired

Russian link label.

string
Full definition
{
  "type": "string",
  "description": "Russian link label.",
  "minLength": 1,
  "maxLength": 120,
  "example": "example"
}
Full definition
{
  "type": "object",
  "properties": {
    "en": {
      "type": "string",
      "description": "English link label.",
      "minLength": 1,
      "maxLength": 120,
      "example": "example"
    },
    "ka": {
      "type": "string",
      "description": "Georgian link label.",
      "minLength": 1,
      "maxLength": 120,
      "example": "example"
    },
    "ru": {
      "type": "string",
      "description": "Russian link label.",
      "minLength": 1,
      "maxLength": 120,
      "example": "example"
    }
  },
  "description": "Required presentation link label in English, Georgian and Russian, with one to 120 characters per language.",
  "required": [
    "en",
    "ka",
    "ru"
  ],
  "example": {
    "en": "example",
    "ka": "example",
    "ru": "example"
  }
}
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.