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

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

Обменять начальный токен гостевого кабинета

POST/guest-portal/exchange

Атомарно использует исходную bootstrap capability из URL-фрагмента. С exchangeId та же пара токена и nonce может восстановить зашифрованные исходные continuation и необязательный контекст восстановления только пока актуальны точные исходные субъект, сессия, хеш токена и первоначальный срок. Восстановление не продлевает и не возвращает утраченные полномочия. Без exchangeId обмен остаётся одноразовым.

Авторизация

Персональный доступ передаётся в body: guest-portal-bootstrap-token.

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

Параметры

Параметров пути, запроса и обычных заголовков нет. Проверьте авторизацию и тело запроса ниже.

Тело запроса

Обязательно

Исходный bootstrap token из URL-фрагмента и необязательный постоянный exchangeId UUID, созданный клиентом.

application/json

ExchangeGuestPortalTokenDto
Полное определение
{
  "$ref": "#/components/schemas/ExchangeGuestPortalTokenDto"
}

Ответы

200Исходное краткосрочное continuation Guest Portal, абсолютный срок и необязательный контекст восстановления без права чтения; восстановление с точным nonce возвращает те же значения.
GuestPortalBootstrapExchangeResultDto
Полное определение
{
  "$ref": "#/components/schemas/GuestPortalBootstrapExchangeResultDto"
}
Пример ответа · 200 · application/json
{
  "token": "synthetic-example-credentialxxxx",
  "expiresAt": "2026-12-31T18:00:00.000Z"
}
400Неверный формат bootstrap token или необязательного exchangeId UUID.
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Недоступны исходный bootstrap, nonce обмена либо текущие исходные сессия и субъект; восстановление не возвращает истёкшие, ротированные или отозванные полномочия.
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"
}
503Для нового восстанавливаемого обмена недоступен необходимый защищённый материал шифрования Guests.
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"
}

Схемы

ExchangeGuestPortalTokenDto

Исходный bootstrap token Guest Portal и необязательный nonce клиента для ограниченного восстановления первого обмена.

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

Начальный токен, извлечённый из фрагмента URL.

string
Полное определение
{
  "type": "string",
  "minLength": 48,
  "maxLength": 48,
  "pattern": "^gpb2_[A-Za-z0-9_-]{43}$",
  "example": "gpb2_synthetic-example-credentialxxxxxxxxxxxxxxx",
  "description": "Начальный токен, извлечённый из фрагмента URL."
}
exchangeIdНеобязательно

Nonce обмена, созданный клиентом. Сохраните и повторите его с исходным bootstrap token после неопределённого ответа. Без него обмен остаётся одноразовым.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "minLength": 36,
  "maxLength": 36,
  "example": "a0c17f9c-e25d-4b6f-8d22-f5e4f955cd8f",
  "description": "Nonce обмена, созданный клиентом. Сохраните и повторите его с исходным bootstrap token после неопределённого ответа. Без него обмен остаётся одноразовым."
}
Полное определение
{
  "type": "object",
  "properties": {
    "token": {
      "type": "string",
      "minLength": 48,
      "maxLength": 48,
      "pattern": "^gpb2_[A-Za-z0-9_-]{43}$",
      "example": "gpb2_synthetic-example-credentialxxxxxxxxxxxxxxx",
      "description": "Начальный токен, извлечённый из фрагмента URL."
    },
    "exchangeId": {
      "type": "string",
      "format": "uuid",
      "minLength": 36,
      "maxLength": 36,
      "example": "a0c17f9c-e25d-4b6f-8d22-f5e4f955cd8f",
      "description": "Nonce обмена, созданный клиентом. Сохраните и повторите его с исходным bootstrap token после неопределённого ответа. Без него обмен остаётся одноразовым."
    }
  },
  "required": [
    "token"
  ],
  "description": "Исходный bootstrap token Guest Portal и необязательный nonce клиента для ограниченного восстановления первого обмена.",
  "example": {
    "token": "gpb2_synthetic-example-credentialxxxxxxxxxxxxxxx",
    "exchangeId": "a0c17f9c-e25d-4b6f-8d22-f5e4f955cd8f"
  }
}
GuestPortalBootstrapExchangeResultDto

Кратковременный токен продолжения после однократного использования начального токена.

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

Заменённый токен продолжения гостевого кабинета.

string
Полное определение
{
  "type": "string",
  "minLength": 32,
  "description": "Заменённый токен продолжения гостевого кабинета.",
  "example": "synthetic-example-credentialxxxx"
}
expiresAtОбязательно

Абсолютный срок действия токена продолжения.

string · date-time
Полное определение
{
  "type": "string",
  "format": "date-time",
  "description": "Абсолютный срок действия токена продолжения.",
  "example": "2026-12-31T18:00:00.000Z"
}
reentryContextНеобязательно

Необязательный зашифрованный контекст и срок его действия для повторного входа в портал гостя на основе исходной сессии и подтверждённого контакта.

allOf
Полное определение
{
  "allOf": [
    {
      "$ref": "#/components/schemas/GuestPortalReentryContextDto"
    }
  ],
  "description": "Необязательный зашифрованный контекст и срок его действия для повторного входа в портал гостя на основе исходной сессии и подтверждённого контакта.",
  "example": {
    "hint": "gpr1_synthetic_recovery_context_example_not_a_runtime_credential_0000000000",
    "expiresAt": "2026-12-31T18:00:00.000Z"
  }
}
Полное определение
{
  "type": "object",
  "description": "Кратковременный токен продолжения после однократного использования начального токена.",
  "required": [
    "token",
    "expiresAt"
  ],
  "properties": {
    "token": {
      "type": "string",
      "minLength": 32,
      "description": "Заменённый токен продолжения гостевого кабинета.",
      "example": "synthetic-example-credentialxxxx"
    },
    "expiresAt": {
      "type": "string",
      "format": "date-time",
      "description": "Абсолютный срок действия токена продолжения.",
      "example": "2026-12-31T18:00:00.000Z"
    },
    "reentryContext": {
      "allOf": [
        {
          "$ref": "#/components/schemas/GuestPortalReentryContextDto"
        }
      ],
      "description": "Необязательный зашифрованный контекст и срок его действия для повторного входа в портал гостя на основе исходной сессии и подтверждённого контакта.",
      "example": {
        "hint": "gpr1_synthetic_recovery_context_example_not_a_runtime_credential_0000000000",
        "expiresAt": "2026-12-31T18:00:00.000Z"
      }
    }
  },
  "example": {
    "token": "synthetic-example-credentialxxxx",
    "expiresAt": "2026-12-31T18:00:00.000Z"
  }
}
GuestPortalReentryContextDto

Контекст восстановления исходного существующего контакта гостя и области кабинета не предоставляет права чтения. Для непроверенного кандидата по-прежнему требуется успешное подтверждение OTP. Контекст разрешает только целевой сценарий повторного входа, но не доступ к кабинету, входящим сообщениям или push.

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

Непрозрачная подсказка для восстановления с проверкой подлинности. Храните её только для выбора исходного контекста: она не является токеном доступа к порталу гостя или разрешением на push.

string
Полное определение
{
  "type": "string",
  "description": "Непрозрачная подсказка для восстановления с проверкой подлинности. Храните её только для выбора исходного контекста: она не является токеном доступа к порталу гостя или разрешением на push.",
  "minLength": 64,
  "maxLength": 2048,
  "pattern": "^gpr1_[A-Za-z0-9_-]+$",
  "example": "gpr1_synthetic_recovery_context_example_not_a_runtime_credential_0000000000",
  "readOnly": true
}
expiresAtОбязательно

Абсолютный срок действия контекста восстановления. Перед каждым запросом кода и подтверждением сервер проверяет текущего гостя, исходный контакт и область доступа портала.

string · date-time
Полное определение
{
  "type": "string",
  "description": "Абсолютный срок действия контекста восстановления. Перед каждым запросом кода и подтверждением сервер проверяет текущего гостя, исходный контакт и область доступа портала.",
  "format": "date-time",
  "readOnly": true,
  "example": "2026-12-31T18:00:00.000Z"
}
Полное определение
{
  "type": "object",
  "properties": {
    "hint": {
      "type": "string",
      "description": "Непрозрачная подсказка для восстановления с проверкой подлинности. Храните её только для выбора исходного контекста: она не является токеном доступа к порталу гостя или разрешением на push.",
      "minLength": 64,
      "maxLength": 2048,
      "pattern": "^gpr1_[A-Za-z0-9_-]+$",
      "example": "gpr1_synthetic_recovery_context_example_not_a_runtime_credential_0000000000",
      "readOnly": true
    },
    "expiresAt": {
      "type": "string",
      "description": "Абсолютный срок действия контекста восстановления. Перед каждым запросом кода и подтверждением сервер проверяет текущего гостя, исходный контакт и область доступа портала.",
      "format": "date-time",
      "readOnly": true,
      "example": "2026-12-31T18:00:00.000Z"
    }
  },
  "description": "Контекст восстановления исходного существующего контакта гостя и области кабинета не предоставляет права чтения. Для непроверенного кандидата по-прежнему требуется успешное подтверждение OTP. Контекст разрешает только целевой сценарий повторного входа, но не доступ к кабинету, входящим сообщениям или push.",
  "required": [
    "hint",
    "expiresAt"
  ],
  "example": {
    "hint": "gpr1_synthetic_recovery_context_example_not_a_runtime_credential_0000000000",
    "expiresAt": "2026-12-31T18:00:00.000Z"
  }
}
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 поддерживают вход, язык и тему. Аналитика выключена, пока вы явно ее не разрешите.