Перейти к содержимому
Разделы

Гостевой кабинет

Получить собственные сохранённые платёжные квитанции

GET/guest-portal/payment-receipts

Определяет текущую сессию Guest Portal и свежее подтверждение контакта в одной согласованной транзакции чтения, затем возвращает не более 25 исходных квитанций использованного согласия по точному владению при нативном создании или QR-связи. Обычное истечение срока нативного управления не стирает историю. Подписанные PAYMENT_RECEIPTS cursors связывают область гостя, ревизию истории и правила читаемости proof. Исходные подтверждения остаются отделены от сохранённых текущих средств и прогресса применения. Чтение не выполняет действий провайдера или нативного жизненного цикла и не выдаёт capability управления или оплаты.

Авторизация

x-guest-portal-token: <HALLIFY_GUEST_PORTAL_TOKEN>

Гостевой токен сессии своего кабинета.

Руководство по подключению

Параметры

cursorПараметр запроса · Необязательно

Непрозрачное PAYMENT_RECEIPTS-продолжение с предыдущей страницы. Связано с точной областью гостя, ревизией истории, правилами читаемости proof и границей использованных согласий. Опустите для первой страницы фиксированного размера, не более 25 квитанций.

string
Полное определение
{
  "minLength": 1,
  "maxLength": 2048,
  "type": "string",
  "example": "example"
}

Ответы

200Проверенная страница собственных сохранённых финансовых сводок с подписанным продолжением и отдельно обозначенными исходными и текущими значениями.

Заголовки ответа

Cache-Control

Приватные ответы с квитанциями нельзя сохранять в кэшах.

string
Полное определение
{
  "type": "string",
  "enum": [
    "private, no-store, max-age=0"
  ],
  "example": "private, no-store, max-age=0"
}
GuestPortalPaymentReceiptsPage
Полное определение
{
  "$ref": "#/components/schemas/GuestPortalPaymentReceiptsPage"
}
Пример ответа · 200 · application/json
{
  "items": [
    {
      "id": "example-id",
      "acceptedAt": "2026-01-15T12:00:00.000Z",
      "consumedAt": "2026-01-15T12:00:00.000Z",
      "payee": {
        "venueName": "example",
        "legalName": "Example name"
      },
      "purpose": "ORDER_BILL",
      "provider": "STRIPE_CONNECT",
      "mode": "TEST",
      "original": {
        "schema": "hallify.restaurant-payment.command-result",
        "version": 1,
        "checkoutId": "f5ef2bdc-76ae-45b6-851a-399882860529",
        "operationId": "44352441-86e0-4a70-8642-d5863bea459a",
        "action": "CREATE_CHECKOUT",
        "state": "PREPARED",
        "currency": "USD",
        "principalAmount": "12.50",
        "tipAmount": "0.00",
        "totalAmount": "12.50"
      },
      "current": {
        "fundsState": "NOT_STARTED",
        "applicationState": "PENDING",
        "applicationBlockedReason": null,
        "checkoutRevision": 1
      }
    }
  ],
  "nextCursor": null,
  "hasMore": true
}
400Cursor платёжных квитанций имеет неверный формат, недействительную подпись или назначение либо превышает поддерживаемый предел.
TranslatedErrorDto
Полное определение
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Пример ответа · 400 · application/json
{
  "statusCode": 400,
  "error": "errors:http.badRequest",
  "code": "HTTP_BAD_REQUEST",
  "message": "errors:http.badRequest",
  "translationKey": "errors:http.badRequest"
}
401Текущая сессия Guest Portal или субъект недоступны.
TranslatedErrorDto
Полное определение
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Пример ответа · 401 · application/json
{
  "statusCode": 401,
  "error": "errors:http.unauthorized",
  "code": "HTTP_UNAUTHORIZED",
  "message": "errors:http.unauthorized",
  "translationKey": "errors:http.unauthorized"
}
403Текущая сессия требует свежую проверку контакта до чтения приватной финансовой истории.
TranslatedErrorDto
Полное определение
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Пример ответа · 403 · application/json
{
  "statusCode": 403,
  "error": "errors:http.forbidden",
  "code": "HTTP_FORBIDDEN",
  "message": "errors:http.forbidden",
  "translationKey": "errors:http.forbidden"
}
404Подписанный cursor принадлежит другой организации, заведению, личности гостя или профилю гостя.
TranslatedErrorDto
Полное определение
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Пример ответа · 404 · application/json
{
  "statusCode": 404,
  "error": "errors:http.notFound",
  "code": "HTTP_NOT_FOUND",
  "message": "errors:http.notFound",
  "translationKey": "errors:http.notFound"
}
409Ревизия истории гостя или правила читаемости proof изменились; начните пагинацию платёжных квитанций заново.
TranslatedErrorDto
Полное определение
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Пример ответа · 409 · application/json
{
  "statusCode": 409,
  "error": "errors:http.conflict",
  "code": "HTTP_CONFLICT",
  "message": "errors:http.conflict",
  "translationKey": "errors:http.conflict"
}
503Необходимая политика защищённых данных или выбранные сохранённые финансовые подтверждения недоступны либо несогласованы.
TranslatedErrorDto
Полное определение
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Пример ответа · 503 · application/json
{
  "statusCode": 503,
  "error": "errors:http.serviceUnavailable",
  "code": "HTTP_SERVICE_UNAVAILABLE",
  "message": "errors:http.serviceUnavailable",
  "translationKey": "errors:http.serviceUnavailable"
}

Схемы

GuestPortalPaymentReceiptsPage

Страница фиксированного размера, не более 25 собственных сохранённых квитанций, с сортировкой по убыванию consumedAt, затем по убыванию id квитанции. Подписанное продолжение связано с текущей областью гостя и правилами истории.

itemsОбязательно

Полные проверенные сводки этой страницы с сохранением зафиксированного порядка финансовых записей.

array
Полное определение
{
  "type": "array",
  "maxItems": 25,
  "description": "Полные проверенные сводки этой страницы с сохранением зафиксированного порядка финансовых записей.",
  "items": {
    "type": "object",
    "description": "Принадлежащая гостю сохранённая финансовая сводка с исходными суммами, зафиксированным получателем платежа и отдельно обозначенным сохранённым текущим прогрессом. Не содержит capability управления или оплаты и редиректа в hosted checkout.",
    "required": [
      "id",
      "acceptedAt",
      "consumedAt",
      "payee",
      "purpose",
      "provider",
      "mode",
      "original",
      "current"
    ],
    "properties": {
      "id": {
        "type": "string",
        "pattern": "^[A-Za-z0-9_-]{1,191}$",
        "minLength": 1,
        "maxLength": 191,
        "description": "Неизменный идентификатор квитанции использованного согласия, задающий границу cursor платёжных квитанций.",
        "example": "example-id"
      },
      "acceptedAt": {
        "type": "string",
        "format": "date-time",
        "description": "Исходный момент UTC принятия показанных условий.",
        "example": "2026-01-15T12:00:00.000Z"
      },
      "consumedAt": {
        "type": "string",
        "format": "date-time",
        "description": "Неизменный момент UTC, когда исходная команда checkout использовала согласие; основной ключ пагинации по убыванию.",
        "example": "2026-01-15T12:00:00.000Z"
      },
      "payee": {
        "type": "object",
        "description": "Исходные данные получателя платежа из принятых подтверждающих данных; текущие наименования заведения или юридического лица не подставляются.",
        "required": [
          "venueName",
          "legalName"
        ],
        "properties": {
          "venueName": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Наименование получателя платежа, зафиксированное в исходном принятом манифесте согласия.",
            "example": "example"
          },
          "legalName": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Наименование получателя платежа, зафиксированное в исходном принятом манифесте согласия.",
            "example": "Example name"
          }
        },
        "example": {
          "venueName": "example",
          "legalName": "Example name"
        }
      },
      "purpose": {
        "type": "string",
        "enum": [
          "ORDER_BILL",
          "RESERVATION_GUARANTEE"
        ],
        "description": "Исходное зафиксированное финансовое назначение checkout.",
        "example": "ORDER_BILL"
      },
      "provider": {
        "type": "string",
        "enum": [
          "STRIPE_CONNECT",
          "BOG_PAYMENT_MANAGER",
          "TBC_CHECKOUT"
        ],
        "description": "Исходный провайдер, выбранный для этого зафиксированного checkout.",
        "example": "STRIPE_CONNECT"
      },
      "mode": {
        "type": "string",
        "enum": [
          "TEST",
          "LIVE"
        ],
        "description": "Исходный режим TEST или LIVE для checkout.",
        "example": "TEST"
      },
      "original": {
        "allOf": [
          {
            "$ref": "#/components/schemas/GuestPaymentCommandReceiptDto"
          }
        ],
        "description": "Неизменное подтверждение исходной команды checkout; текущий прогресс оплаты возвращается отдельно.",
        "example": {
          "schema": "hallify.restaurant-payment.command-result",
          "version": 1,
          "checkoutId": "f5ef2bdc-76ae-45b6-851a-399882860529",
          "operationId": "44352441-86e0-4a70-8642-d5863bea459a",
          "action": "CREATE_CHECKOUT",
          "state": "PREPARED",
          "currency": "USD",
          "principalAmount": "12.50",
          "tipAmount": "0.00",
          "totalAmount": "12.50"
        }
      },
      "current": {
        "type": "object",
        "description": "Сохранённый текущий прогресс checkout, отдельный от неизменного исходного подтверждения. Чтение этой проекции не выполняет сверку или нативное применение.",
        "required": [
          "fundsState",
          "applicationState",
          "applicationBlockedReason",
          "checkoutRevision"
        ],
        "properties": {
          "fundsState": {
            "type": "string",
            "enum": [
              "NOT_STARTED",
              "REQUIRES_ACTION",
              "PROCESSING",
              "AUTHORIZED",
              "CAPTURED",
              "PARTIALLY_REFUNDED",
              "REFUNDED",
              "CANCELED",
              "DECLINED",
              "EXPIRED",
              "UNKNOWN"
            ],
            "description": "Текущее сохранённое состояние средств, включая последующие списание, возврат, отмену или неразрешённые подтверждающие данные.",
            "example": "NOT_STARTED"
          },
          "applicationState": {
            "type": "string",
            "enum": [
              "PENDING",
              "APPLIED",
              "APPLICATION_BLOCKED",
              "RECONCILIATION_REQUIRED"
            ],
            "description": "Текущее сохранённое состояние применения к нативным финансовым данным.",
            "example": "PENDING"
          },
          "applicationBlockedReason": {
            "type": "string",
            "nullable": true,
            "minLength": 1,
            "maxLength": 64,
            "description": "Сохранённый код причины нативного применения либо null при отсутствии блокирующей причины.",
            "example": "Synthetic example"
          },
          "checkoutRevision": {
            "type": "integer",
            "minimum": 1,
            "maximum": 2147483647,
            "description": "Текущая сохранённая ревизия checkout.",
            "example": 1
          }
        },
        "example": {
          "fundsState": "NOT_STARTED",
          "applicationState": "PENDING",
          "applicationBlockedReason": null,
          "checkoutRevision": 1
        }
      }
    },
    "example": {
      "id": "example-id",
      "acceptedAt": "2026-01-15T12:00:00.000Z",
      "consumedAt": "2026-01-15T12:00:00.000Z",
      "payee": {
        "venueName": "example",
        "legalName": "Example name"
      },
      "purpose": "ORDER_BILL",
      "provider": "STRIPE_CONNECT",
      "mode": "TEST",
      "original": {
        "schema": "hallify.restaurant-payment.command-result",
        "version": 1,
        "checkoutId": "f5ef2bdc-76ae-45b6-851a-399882860529",
        "operationId": "44352441-86e0-4a70-8642-d5863bea459a",
        "action": "CREATE_CHECKOUT",
        "state": "PREPARED",
        "currency": "USD",
        "principalAmount": "12.50",
        "tipAmount": "0.00",
        "totalAmount": "12.50"
      },
      "current": {
        "fundsState": "NOT_STARTED",
        "applicationState": "PENDING",
        "applicationBlockedReason": null,
        "checkoutRevision": 1
      }
    }
  },
  "example": [
    {
      "id": "example-id",
      "acceptedAt": "2026-01-15T12:00:00.000Z",
      "consumedAt": "2026-01-15T12:00:00.000Z",
      "payee": {
        "venueName": "example",
        "legalName": "Example name"
      },
      "purpose": "ORDER_BILL",
      "provider": "STRIPE_CONNECT",
      "mode": "TEST",
      "original": {
        "schema": "hallify.restaurant-payment.command-result",
        "version": 1,
        "checkoutId": "f5ef2bdc-76ae-45b6-851a-399882860529",
        "operationId": "44352441-86e0-4a70-8642-d5863bea459a",
        "action": "CREATE_CHECKOUT",
        "state": "PREPARED",
        "currency": "USD",
        "principalAmount": "12.50",
        "tipAmount": "0.00",
        "totalAmount": "12.50"
      },
      "current": {
        "fundsState": "NOT_STARTED",
        "applicationState": "PENDING",
        "applicationBlockedReason": null,
        "checkoutRevision": 1
      }
    }
  ]
}
nextCursorОбязательно

Непрозрачное PAYMENT_RECEIPTS-продолжение точной последней возвращённой границы при hasMore = true; null в конце истории.

string · null
Полное определение
{
  "type": "string",
  "nullable": true,
  "minLength": 1,
  "maxLength": 2048,
  "description": "Непрозрачное PAYMENT_RECEIPTS-продолжение точной последней возвращённой границы при hasMore = true; null в конце истории.",
  "example": "example"
}
hasMoreОбязательно

После возвращённой страницы существует ещё одна полностью проверенная допустимая квитанция.

boolean
Полное определение
{
  "type": "boolean",
  "description": "После возвращённой страницы существует ещё одна полностью проверенная допустимая квитанция.",
  "example": true
}
Полное определение
{
  "type": "object",
  "description": "Страница фиксированного размера, не более 25 собственных сохранённых квитанций, с сортировкой по убыванию consumedAt, затем по убыванию id квитанции. Подписанное продолжение связано с текущей областью гостя и правилами истории.",
  "required": [
    "items",
    "nextCursor",
    "hasMore"
  ],
  "properties": {
    "items": {
      "type": "array",
      "maxItems": 25,
      "description": "Полные проверенные сводки этой страницы с сохранением зафиксированного порядка финансовых записей.",
      "items": {
        "type": "object",
        "description": "Принадлежащая гостю сохранённая финансовая сводка с исходными суммами, зафиксированным получателем платежа и отдельно обозначенным сохранённым текущим прогрессом. Не содержит capability управления или оплаты и редиректа в hosted checkout.",
        "required": [
          "id",
          "acceptedAt",
          "consumedAt",
          "payee",
          "purpose",
          "provider",
          "mode",
          "original",
          "current"
        ],
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9_-]{1,191}$",
            "minLength": 1,
            "maxLength": 191,
            "description": "Неизменный идентификатор квитанции использованного согласия, задающий границу cursor платёжных квитанций.",
            "example": "example-id"
          },
          "acceptedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Исходный момент UTC принятия показанных условий.",
            "example": "2026-01-15T12:00:00.000Z"
          },
          "consumedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Неизменный момент UTC, когда исходная команда checkout использовала согласие; основной ключ пагинации по убыванию.",
            "example": "2026-01-15T12:00:00.000Z"
          },
          "payee": {
            "type": "object",
            "description": "Исходные данные получателя платежа из принятых подтверждающих данных; текущие наименования заведения или юридического лица не подставляются.",
            "required": [
              "venueName",
              "legalName"
            ],
            "properties": {
              "venueName": {
                "type": "string",
                "minLength": 1,
                "maxLength": 255,
                "description": "Наименование получателя платежа, зафиксированное в исходном принятом манифесте согласия.",
                "example": "example"
              },
              "legalName": {
                "type": "string",
                "minLength": 1,
                "maxLength": 255,
                "description": "Наименование получателя платежа, зафиксированное в исходном принятом манифесте согласия.",
                "example": "Example name"
              }
            },
            "example": {
              "venueName": "example",
              "legalName": "Example name"
            }
          },
          "purpose": {
            "type": "string",
            "enum": [
              "ORDER_BILL",
              "RESERVATION_GUARANTEE"
            ],
            "description": "Исходное зафиксированное финансовое назначение checkout.",
            "example": "ORDER_BILL"
          },
          "provider": {
            "type": "string",
            "enum": [
              "STRIPE_CONNECT",
              "BOG_PAYMENT_MANAGER",
              "TBC_CHECKOUT"
            ],
            "description": "Исходный провайдер, выбранный для этого зафиксированного checkout.",
            "example": "STRIPE_CONNECT"
          },
          "mode": {
            "type": "string",
            "enum": [
              "TEST",
              "LIVE"
            ],
            "description": "Исходный режим TEST или LIVE для checkout.",
            "example": "TEST"
          },
          "original": {
            "allOf": [
              {
                "$ref": "#/components/schemas/GuestPaymentCommandReceiptDto"
              }
            ],
            "description": "Неизменное подтверждение исходной команды checkout; текущий прогресс оплаты возвращается отдельно.",
            "example": {
              "schema": "hallify.restaurant-payment.command-result",
              "version": 1,
              "checkoutId": "f5ef2bdc-76ae-45b6-851a-399882860529",
              "operationId": "44352441-86e0-4a70-8642-d5863bea459a",
              "action": "CREATE_CHECKOUT",
              "state": "PREPARED",
              "currency": "USD",
              "principalAmount": "12.50",
              "tipAmount": "0.00",
              "totalAmount": "12.50"
            }
          },
          "current": {
            "type": "object",
            "description": "Сохранённый текущий прогресс checkout, отдельный от неизменного исходного подтверждения. Чтение этой проекции не выполняет сверку или нативное применение.",
            "required": [
              "fundsState",
              "applicationState",
              "applicationBlockedReason",
              "checkoutRevision"
            ],
            "properties": {
              "fundsState": {
                "type": "string",
                "enum": [
                  "NOT_STARTED",
                  "REQUIRES_ACTION",
                  "PROCESSING",
                  "AUTHORIZED",
                  "CAPTURED",
                  "PARTIALLY_REFUNDED",
                  "REFUNDED",
                  "CANCELED",
                  "DECLINED",
                  "EXPIRED",
                  "UNKNOWN"
                ],
                "description": "Текущее сохранённое состояние средств, включая последующие списание, возврат, отмену или неразрешённые подтверждающие данные.",
                "example": "NOT_STARTED"
              },
              "applicationState": {
                "type": "string",
                "enum": [
                  "PENDING",
                  "APPLIED",
                  "APPLICATION_BLOCKED",
                  "RECONCILIATION_REQUIRED"
                ],
                "description": "Текущее сохранённое состояние применения к нативным финансовым данным.",
                "example": "PENDING"
              },
              "applicationBlockedReason": {
                "type": "string",
                "nullable": true,
                "minLength": 1,
                "maxLength": 64,
                "description": "Сохранённый код причины нативного применения либо null при отсутствии блокирующей причины.",
                "example": "Synthetic example"
              },
              "checkoutRevision": {
                "type": "integer",
                "minimum": 1,
                "maximum": 2147483647,
                "description": "Текущая сохранённая ревизия checkout.",
                "example": 1
              }
            },
            "example": {
              "fundsState": "NOT_STARTED",
              "applicationState": "PENDING",
              "applicationBlockedReason": null,
              "checkoutRevision": 1
            }
          }
        },
        "example": {
          "id": "example-id",
          "acceptedAt": "2026-01-15T12:00:00.000Z",
          "consumedAt": "2026-01-15T12:00:00.000Z",
          "payee": {
            "venueName": "example",
            "legalName": "Example name"
          },
          "purpose": "ORDER_BILL",
          "provider": "STRIPE_CONNECT",
          "mode": "TEST",
          "original": {
            "schema": "hallify.restaurant-payment.command-result",
            "version": 1,
            "checkoutId": "f5ef2bdc-76ae-45b6-851a-399882860529",
            "operationId": "44352441-86e0-4a70-8642-d5863bea459a",
            "action": "CREATE_CHECKOUT",
            "state": "PREPARED",
            "currency": "USD",
            "principalAmount": "12.50",
            "tipAmount": "0.00",
            "totalAmount": "12.50"
          },
          "current": {
            "fundsState": "NOT_STARTED",
            "applicationState": "PENDING",
            "applicationBlockedReason": null,
            "checkoutRevision": 1
          }
        }
      },
      "example": [
        {
          "id": "example-id",
          "acceptedAt": "2026-01-15T12:00:00.000Z",
          "consumedAt": "2026-01-15T12:00:00.000Z",
          "payee": {
            "venueName": "example",
            "legalName": "Example name"
          },
          "purpose": "ORDER_BILL",
          "provider": "STRIPE_CONNECT",
          "mode": "TEST",
          "original": {
            "schema": "hallify.restaurant-payment.command-result",
            "version": 1,
            "checkoutId": "f5ef2bdc-76ae-45b6-851a-399882860529",
            "operationId": "44352441-86e0-4a70-8642-d5863bea459a",
            "action": "CREATE_CHECKOUT",
            "state": "PREPARED",
            "currency": "USD",
            "principalAmount": "12.50",
            "tipAmount": "0.00",
            "totalAmount": "12.50"
          },
          "current": {
            "fundsState": "NOT_STARTED",
            "applicationState": "PENDING",
            "applicationBlockedReason": null,
            "checkoutRevision": 1
          }
        }
      ]
    },
    "nextCursor": {
      "type": "string",
      "nullable": true,
      "minLength": 1,
      "maxLength": 2048,
      "description": "Непрозрачное PAYMENT_RECEIPTS-продолжение точной последней возвращённой границы при hasMore = true; null в конце истории.",
      "example": "example"
    },
    "hasMore": {
      "type": "boolean",
      "description": "После возвращённой страницы существует ещё одна полностью проверенная допустимая квитанция.",
      "example": true
    }
  },
  "example": {
    "items": [
      {
        "id": "example-id",
        "acceptedAt": "2026-01-15T12:00:00.000Z",
        "consumedAt": "2026-01-15T12:00:00.000Z",
        "payee": {
          "venueName": "example",
          "legalName": "Example name"
        },
        "purpose": "ORDER_BILL",
        "provider": "STRIPE_CONNECT",
        "mode": "TEST",
        "original": {
          "schema": "hallify.restaurant-payment.command-result",
          "version": 1,
          "checkoutId": "f5ef2bdc-76ae-45b6-851a-399882860529",
          "operationId": "44352441-86e0-4a70-8642-d5863bea459a",
          "action": "CREATE_CHECKOUT",
          "state": "PREPARED",
          "currency": "USD",
          "principalAmount": "12.50",
          "tipAmount": "0.00",
          "totalAmount": "12.50"
        },
        "current": {
          "fundsState": "NOT_STARTED",
          "applicationState": "PENDING",
          "applicationBlockedReason": null,
          "checkoutRevision": 1
        }
      }
    ],
    "nextCursor": null,
    "hasMore": true
  }
}
GuestPaymentCommandReceiptDto

Неизменяемое первое PREPARED acknowledgement постоянной гостевой команды CREATE_CHECKOUT, сохраняемое при точном replay и восстановлении исходной команды.

schemaОбязательно

Дискриминатор версионированного документа исходного результата платёжной команды.

string
Полное определение
{
  "type": "string",
  "enum": [
    "hallify.restaurant-payment.command-result"
  ],
  "description": "Дискриминатор версионированного документа исходного результата платёжной команды.",
  "example": "hallify.restaurant-payment.command-result"
}
versionОбязательно

Версия схемы результата команды, сохранённая этим acknowledgement.

integer
Полное определение
{
  "type": "integer",
  "enum": [
    1
  ],
  "description": "Версия схемы результата команды, сохранённая этим acknowledgement.",
  "example": 1
}
checkoutIdОбязательно

UUID исходного checkout, выделенного один раз для этой постоянной команды.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "description": "UUID исходного checkout, выделенного один раз для этой постоянной команды.",
  "example": "f5ef2bdc-76ae-45b6-851a-399882860529"
}
operationIdОбязательно

UUID исходной provider operation CREATE_CHECKOUT; replay и восстановление сохраняют идентичность этой операции.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "description": "UUID исходной provider operation CREATE_CHECKOUT; replay и восстановление сохраняют идентичность этой операции.",
  "example": "44352441-86e0-4a70-8642-d5863bea459a"
}
actionОбязательно

Действие исходной принятой команды; эта гостевая граница подтверждает CREATE_CHECKOUT.

string
Полное определение
{
  "type": "string",
  "enum": [
    "CREATE_CHECKOUT"
  ],
  "description": "Действие исходной принятой команды; эта гостевая граница подтверждает CREATE_CHECKOUT.",
  "example": "CREATE_CHECKOUT"
}
stateОбязательно

Состояние первого сохранённого acknowledgement, всегда PREPARED. Текущие состояния операции, средств и нативного применения возвращаются методом progress checkout.

string
Полное определение
{
  "type": "string",
  "enum": [
    "PREPARED"
  ],
  "description": "Состояние первого сохранённого acknowledgement, всегда PREPARED. Текущие состояния операции, средств и нативного применения возвращаются методом progress checkout.",
  "example": "PREPARED"
}
currencyОбязательно

Валюта исходных зафиксированных основной суммы, чаевых и итога.

string
Полное определение
{
  "type": "string",
  "enum": [
    "USD",
    "GEL"
  ],
  "description": "Валюта исходных зафиксированных основной суммы, чаевых и итога.",
  "example": "USD"
}
principalAmountОбязательно

Исходная зафиксированная основная сумма до отдельно принятых чаевых строкой с двумя дробными знаками в валюте результата.

string
Полное определение
{
  "type": "string",
  "example": "12.50",
  "description": "Исходная зафиксированная основная сумма до отдельно принятых чаевых строкой с двумя дробными знаками в валюте результата."
}
tipAmountОбязательно

Исходные зафиксированные чаевые, принятые с командой, неотрицательной строкой с двумя дробными знаками в валюте результата.

string
Полное определение
{
  "type": "string",
  "example": "0.00",
  "description": "Исходные зафиксированные чаевые, принятые с командой, неотрицательной строкой с двумя дробными знаками в валюте результата."
}
totalAmountОбязательно

Исходная сумма зафиксированных основной суммы и принятых чаевых строкой с двумя дробными знаками в валюте результата.

string
Полное определение
{
  "type": "string",
  "example": "12.50",
  "description": "Исходная сумма зафиксированных основной суммы и принятых чаевых строкой с двумя дробными знаками в валюте результата."
}
Полное определение
{
  "type": "object",
  "properties": {
    "schema": {
      "type": "string",
      "enum": [
        "hallify.restaurant-payment.command-result"
      ],
      "description": "Дискриминатор версионированного документа исходного результата платёжной команды.",
      "example": "hallify.restaurant-payment.command-result"
    },
    "version": {
      "type": "integer",
      "enum": [
        1
      ],
      "description": "Версия схемы результата команды, сохранённая этим acknowledgement.",
      "example": 1
    },
    "checkoutId": {
      "type": "string",
      "format": "uuid",
      "description": "UUID исходного checkout, выделенного один раз для этой постоянной команды.",
      "example": "f5ef2bdc-76ae-45b6-851a-399882860529"
    },
    "operationId": {
      "type": "string",
      "format": "uuid",
      "description": "UUID исходной provider operation CREATE_CHECKOUT; replay и восстановление сохраняют идентичность этой операции.",
      "example": "44352441-86e0-4a70-8642-d5863bea459a"
    },
    "action": {
      "type": "string",
      "enum": [
        "CREATE_CHECKOUT"
      ],
      "description": "Действие исходной принятой команды; эта гостевая граница подтверждает CREATE_CHECKOUT.",
      "example": "CREATE_CHECKOUT"
    },
    "state": {
      "type": "string",
      "enum": [
        "PREPARED"
      ],
      "description": "Состояние первого сохранённого acknowledgement, всегда PREPARED. Текущие состояния операции, средств и нативного применения возвращаются методом progress checkout.",
      "example": "PREPARED"
    },
    "currency": {
      "type": "string",
      "enum": [
        "USD",
        "GEL"
      ],
      "description": "Валюта исходных зафиксированных основной суммы, чаевых и итога.",
      "example": "USD"
    },
    "principalAmount": {
      "type": "string",
      "example": "12.50",
      "description": "Исходная зафиксированная основная сумма до отдельно принятых чаевых строкой с двумя дробными знаками в валюте результата."
    },
    "tipAmount": {
      "type": "string",
      "example": "0.00",
      "description": "Исходные зафиксированные чаевые, принятые с командой, неотрицательной строкой с двумя дробными знаками в валюте результата."
    },
    "totalAmount": {
      "type": "string",
      "example": "12.50",
      "description": "Исходная сумма зафиксированных основной суммы и принятых чаевых строкой с двумя дробными знаками в валюте результата."
    }
  },
  "description": "Неизменяемое первое PREPARED acknowledgement постоянной гостевой команды CREATE_CHECKOUT, сохраняемое при точном replay и восстановлении исходной команды.",
  "required": [
    "schema",
    "version",
    "checkoutId",
    "operationId",
    "action",
    "state",
    "currency",
    "principalAmount",
    "tipAmount",
    "totalAmount"
  ],
  "example": {
    "schema": "hallify.restaurant-payment.command-result",
    "version": 1,
    "checkoutId": "f5ef2bdc-76ae-45b6-851a-399882860529",
    "operationId": "44352441-86e0-4a70-8642-d5863bea459a",
    "action": "CREATE_CHECKOUT",
    "state": "PREPARED",
    "currency": "USD",
    "principalAmount": "12.50",
    "tipAmount": "0.00",
    "totalAmount": "12.50"
  }
}
TranslatedErrorDto

Стабильная оболочка ошибки общего обработчика HTTP-исключений. Дополнительные машинные данные домена вложены в details.

statusCodeОбязательно

HTTP-статус, повторённый из ответа.

integer
Полное определение
{
  "type": "integer",
  "description": "HTTP-статус, повторённый из ответа.",
  "example": 400
}
errorОбязательно

Ключ перевода HTTP-категории, например errors:http.conflict. Конкретную причину определяют code и translationKey.

string
Полное определение
{
  "type": "string",
  "description": "Ключ перевода HTTP-категории, например errors:http.conflict. Конкретную причину определяют code и translationKey.",
  "example": "errors.request.invalid"
}
codeОбязательно

Стабильный машинный код домена либо стандартный HTTP_*, если доменный код не задан. Используйте это поле и HTTP-статус для программной логики; локализованная формулировка не управляет повторами или бизнес-решениями.

string
Полное определение
{
  "type": "string",
  "example": "HTTP_BAD_REQUEST",
  "description": "Стабильный машинный код домена либо стандартный HTTP_*, если доменный код не задан. Используйте это поле и HTTP-статус для программной логики; локализованная формулировка не управляет повторами или бизнес-решениями."
}
messageОбязательно

Ключ перевода, идентичный translationKey. API не возвращает локализованный текст интерфейса. Найдите перевод ключа и подставьте translationValues в приложении-потребителе.

string
Полное определение
{
  "type": "string",
  "example": "errors:http.badRequest",
  "description": "Ключ перевода, идентичный translationKey. API не возвращает локализованный текст интерфейса. Найдите перевод ключа и подставьте translationValues в приложении-потребителе."
}
translationKeyОбязательно

Канонический ключ перевода, идентичный message. Ключи errors:http.* соответствующего статуса описывают неуточнённые ошибки. Публичные ключи и пояснения EN/RU перечислены в Developers; неизвестный ключ требует локализованного запасного сообщения в клиенте.

string
Полное определение
{
  "type": "string",
  "example": "errors:http.badRequest",
  "description": "Канонический ключ перевода, идентичный message. Ключи errors:http.* соответствующего статуса описывают неуточнённые ошибки. Публичные ключи и пояснения EN/RU перечислены в Developers; неизвестный ключ требует локализованного запасного сообщения в клиенте."
}
translationValuesНеобязательно

Необязательные скалярные значения параметров шаблона перевода. Обрабатывайте их как данные, экранируйте при отображении и никогда не используйте как настройки переводчика.

object
Полное определение
{
  "type": "object",
  "additionalProperties": {
    "oneOf": [
      {
        "type": "string",
        "example": "example"
      },
      {
        "type": "number",
        "example": 0
      },
      {
        "type": "boolean",
        "example": true
      }
    ],
    "example": "example"
  },
  "description": "Необязательные скалярные значения параметров шаблона перевода. Обрабатывайте их как данные, экранируйте при отображении и никогда не используйте как настройки переводчика.",
  "example": {
    "exampleKey": "example"
  }
}
validationErrorsНеобязательно

Ошибки проверки полей с ключами переводов и стабильными кодами валидаторов. Введённые значения и исходные тексты валидаторов не включаются.

array
Полное определение
{
  "description": "Ошибки проверки полей с ключами переводов и стабильными кодами валидаторов. Введённые значения и исходные тексты валидаторов не включаются.",
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/ValidationErrorDto"
  },
  "example": [
    {
      "field": "email",
      "translationKey": "validation:isEmail",
      "code": "isEmail",
      "message": "validation:isEmail"
    }
  ]
}
detailsНеобязательно

Необязательные сведения о доменных препятствиях или ошибках валидации.

oneOf
Полное определение
{
  "description": "Необязательные сведения о доменных препятствиях или ошибках валидации.",
  "oneOf": [
    {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/JsonValue"
      },
      "example": [
        "example"
      ]
    },
    {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/components/schemas/JsonValue"
      },
      "example": {
        "exampleKey": "example"
      }
    }
  ],
  "example": [
    "example"
  ]
}
Полное определение
{
  "type": "object",
  "properties": {
    "statusCode": {
      "type": "integer",
      "description": "HTTP-статус, повторённый из ответа.",
      "example": 400
    },
    "error": {
      "type": "string",
      "description": "Ключ перевода HTTP-категории, например errors:http.conflict. Конкретную причину определяют code и translationKey.",
      "example": "errors.request.invalid"
    },
    "code": {
      "type": "string",
      "example": "HTTP_BAD_REQUEST",
      "description": "Стабильный машинный код домена либо стандартный HTTP_*, если доменный код не задан. Используйте это поле и HTTP-статус для программной логики; локализованная формулировка не управляет повторами или бизнес-решениями."
    },
    "message": {
      "type": "string",
      "example": "errors:http.badRequest",
      "description": "Ключ перевода, идентичный translationKey. API не возвращает локализованный текст интерфейса. Найдите перевод ключа и подставьте translationValues в приложении-потребителе."
    },
    "translationKey": {
      "type": "string",
      "example": "errors:http.badRequest",
      "description": "Канонический ключ перевода, идентичный message. Ключи errors:http.* соответствующего статуса описывают неуточнённые ошибки. Публичные ключи и пояснения EN/RU перечислены в Developers; неизвестный ключ требует локализованного запасного сообщения в клиенте."
    },
    "translationValues": {
      "type": "object",
      "additionalProperties": {
        "oneOf": [
          {
            "type": "string",
            "example": "example"
          },
          {
            "type": "number",
            "example": 0
          },
          {
            "type": "boolean",
            "example": true
          }
        ],
        "example": "example"
      },
      "description": "Необязательные скалярные значения параметров шаблона перевода. Обрабатывайте их как данные, экранируйте при отображении и никогда не используйте как настройки переводчика.",
      "example": {
        "exampleKey": "example"
      }
    },
    "validationErrors": {
      "description": "Ошибки проверки полей с ключами переводов и стабильными кодами валидаторов. Введённые значения и исходные тексты валидаторов не включаются.",
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/ValidationErrorDto"
      },
      "example": [
        {
          "field": "email",
          "translationKey": "validation:isEmail",
          "code": "isEmail",
          "message": "validation:isEmail"
        }
      ]
    },
    "details": {
      "description": "Необязательные сведения о доменных препятствиях или ошибках валидации.",
      "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": "Стабильная оболочка ошибки общего обработчика HTTP-исключений. Дополнительные машинные данные домена вложены в details.",
  "example": {
    "statusCode": 400,
    "error": "errors:http.badRequest",
    "code": "HTTP_BAD_REQUEST",
    "message": "errors:http.badRequest",
    "translationKey": "errors:http.badRequest"
  }
}
ValidationErrorDto

Ошибка проверки поля с путём поля, стабильным кодом валидатора и ключом перевода. Человекочитаемый текст принадлежит приложению-потребителю.

fieldОбязательно

Публичный путь поля. Вложенные свойства и индексы массива разделены точками.

string
Полное определение
{
  "type": "string",
  "example": "email",
  "description": "Публичный путь поля. Вложенные свойства и индексы массива разделены точками."
}
translationKeyОбязательно

Ключ перевода этого валидатора, идентичный message. Найдите его в клиентском словаре; см. публичный каталог ошибок Developers.

string
Полное определение
{
  "type": "string",
  "example": "validation:isEmail",
  "description": "Ключ перевода этого валидатора, идентичный message. Найдите его в клиентском словаре; см. публичный каталог ошибок Developers."
}
codeОбязательно

Стабильный идентификатор валидатора для ошибки поля. Пользовательские валидаторы могут определять дополнительные идентификаторы.

string
Полное определение
{
  "type": "string",
  "example": "isEmail",
  "description": "Стабильный идентификатор валидатора для ошибки поля. Пользовательские валидаторы могут определять дополнительные идентификаторы."
}
messageОбязательно

Ключ перевода, описывающий ошибку проверки поля, идентичный translationKey. Введённые значения и тексты валидаторов не включаются.

string
Полное определение
{
  "type": "string",
  "example": "validation:isEmail",
  "description": "Ключ перевода, описывающий ошибку проверки поля, идентичный translationKey. Введённые значения и тексты валидаторов не включаются."
}
translationValuesНеобязательно

Необязательные скалярные значения параметров шаблона перевода. Обрабатывайте их как данные, экранируйте при отображении и никогда не используйте как настройки переводчика.

object
Полное определение
{
  "type": "object",
  "additionalProperties": {
    "oneOf": [
      {
        "type": "string",
        "example": "example"
      },
      {
        "type": "number",
        "example": 0
      },
      {
        "type": "boolean",
        "example": true
      }
    ],
    "example": "example"
  },
  "description": "Необязательные скалярные значения параметров шаблона перевода. Обрабатывайте их как данные, экранируйте при отображении и никогда не используйте как настройки переводчика.",
  "example": {
    "exampleKey": "example"
  }
}
Полное определение
{
  "type": "object",
  "properties": {
    "field": {
      "type": "string",
      "example": "email",
      "description": "Публичный путь поля. Вложенные свойства и индексы массива разделены точками."
    },
    "translationKey": {
      "type": "string",
      "example": "validation:isEmail",
      "description": "Ключ перевода этого валидатора, идентичный message. Найдите его в клиентском словаре; см. публичный каталог ошибок Developers."
    },
    "code": {
      "type": "string",
      "example": "isEmail",
      "description": "Стабильный идентификатор валидатора для ошибки поля. Пользовательские валидаторы могут определять дополнительные идентификаторы."
    },
    "message": {
      "type": "string",
      "example": "validation:isEmail",
      "description": "Ключ перевода, описывающий ошибку проверки поля, идентичный translationKey. Введённые значения и тексты валидаторов не включаются."
    },
    "translationValues": {
      "type": "object",
      "additionalProperties": {
        "oneOf": [
          {
            "type": "string",
            "example": "example"
          },
          {
            "type": "number",
            "example": 0
          },
          {
            "type": "boolean",
            "example": true
          }
        ],
        "example": "example"
      },
      "description": "Необязательные скалярные значения параметров шаблона перевода. Обрабатывайте их как данные, экранируйте при отображении и никогда не используйте как настройки переводчика.",
      "example": {
        "exampleKey": "example"
      }
    }
  },
  "required": [
    "field",
    "translationKey",
    "code",
    "message"
  ],
  "description": "Ошибка проверки поля с путём поля, стабильным кодом валидатора и ключом перевода. Человекочитаемый текст принадлежит приложению-потребителю.",
  "example": {
    "field": "email",
    "translationKey": "validation:isEmail",
    "code": "isEmail",
    "message": "validation:isEmail"
  }
}
JsonValue

Рекурсивно допустимое JSON-значение. Используется только там, где контракт явно разрешает произвольные структурированные данные.

Полное определение
{
  "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": "Рекурсивно допустимое JSON-значение. Используется только там, где контракт явно разрешает произвольные структурированные данные.",
  "example": "example"
}

Hallify использует обязательные cookies и опциональную аналитику.

Обязательные cookies поддерживают вход, язык и тему. Аналитика выключена, пока вы явно ее не разрешите.