Вход клиента
После успешного входа Gigma возвращает профиль клиента и Bearer. Все способы авторизации дают один и тот же результат: дальше приложение отправляет Bearer в заголовке Authorization и работает с личными данными клиента.
Перед подключением подготовьте приложение и получите App Token.
Выберите способ входа
| Способ | Когда использовать | Сколько запросов |
|---|---|---|
| Одноразовый код | сайт или мобильное приложение; клиент может получить код на телефон или email | два |
| Подписанный контакт | приложение в MAX уже получило подтверждённый контакт пользователя | один |
| Callback-звонок | клиенту удобнее подтвердить номер звонком без ввода кода | три |
Не создавайте отдельную учётную запись заранее. При первом успешном входе Gigma создаст клиента внутри проекта приложения.
Перед началом
- Передавайте App Token в заголовке
Token. - Передавайте осмысленное значение
device, напримерstorefront-webилиios-app. - Сохраняйте Bearer целиком, включая разделитель
|. - Не добавляйте Bearer,
client_nonceиsession_tokenв URL, аналитику и обычные логи. - Для продукта с собственным backend храните Bearer на сервере и выдавайте браузеру локальную HttpOnly cookie.
Вход по одноразовому коду
Порядок работы:
- отправьте код на телефон или email;
- получите код от клиента;
- обменяйте код на Bearer;
- сохраните
counterparty.access_token.value.
Шаг 1. Отправьте одноразовый код
- Метод
- POST
- URL
https://api.gigma.ru/api/counterparty/send_password- Авторизация
- App Token
- Headers
Token: {application_token}
Gigma найдёт клиента внутри проекта текущего приложения или создаст нового, а затем отправит одноразовый код: звонком на телефон или письмом на email.
Параметры запроса
phone(string, обязательно) — телефон или email клиента. Для телефона используйте формат7XXXXXXXXXX.
Пример запроса
{
"phone": "79999999990"
} Поле называется phone исторически, но принимает и email.
Ответ
При успешном действии возвращается HTTP 200.
{
"message": "Password successfully send"
} Код действует 5 минут и погашается после успешного входа.
Возможные ошибки
401 Application token is missing— не передан заголовокToken.401 Application token is invalid— App Token неизвестен или выключен.422— полеphoneотсутствует или имеет неверный формат.429— превышен лимит: до 3 запросов в час на контакт внутри проекта и до 20 запросов в час с одного IP.500 Internal server error— код не удалось отправить.
Шаг 2. Обменяйте код на Bearer
- Метод
- POST
- URL
https://api.gigma.ru/api/counterparty/login- Авторизация
- App Token
- Headers
Token: {application_token}
Передайте тот же телефон или email и одноразовый код. В ответе Gigma вернёт профиль клиента и Bearer.
Параметры запроса
phone(string, обязательно) — телефон в цифровом формате или email, на который запрашивался код.password(обязательно) — одноразовый код из звонка или письма.device(string, необязательно, 3–50 символов) — название устройства, напримерstorefront-web.
Пример запроса
{
"phone": "79999999990",
"password": "1111",
"device": "storefront-web"
} Ответ
При успешном действии возвращается HTTP 200 с объектом клиента и Bearer.
{
"counterparty": {
"id": 1,
"type": {
"id": 2,
"name": "Розница",
"created_at": "2024-03-23T10:27:06.000000Z"
},
"manager": {
"id": 1,
"first_name": "Иван",
"last_name": "Иванов",
"middle_name": "Иванович",
"name": "Иванов Иван"
},
"avatar": null,
"first_name": "Алексей",
"last_name": "Петров",
"middle_name": "Викторович",
"birthday": "1980-04-02",
"address": "630000, Новосибирск, ул. Примерная, д. 1",
"phone_1": "79999999990",
"phone_2": "78888888888",
"email": "client@example.com",
"created_at": "2024-03-22T14:01:37.000000Z",
"updated_at": "2024-03-23T10:48:33.000000Z",
"favourite_products": [],
"access_token": {
"value": "2|exampleCounterpartyToken"
}
}
} Используйте counterparty.access_token.value как Bearer клиента. Полный состав профиля описан на странице «Профиль клиента».
Возможные ошибки
400 Send password before login. Password TTL is 5 minutes.— код не запрашивался, уже использован или истёк.401 Application token is missing/Application token is invalid— проверьте App Token.401 Указан неправильный пароль— одноразовый код неверный.422— параметры не прошли валидацию, например в системе нет указанного телефона или email.429— превышен лимит: до 5 попыток в минуту на контакт внутри проекта и до 30 попыток в минуту с одного IP.
Готово: клиент вошёл. Перейдите к разделу «Использование Bearer».
Вход по подписанному контакту
Используйте этот способ, когда приложение в MAX уже получило подписанный контакт клиента. Gigma проверит подпись провайдера и сразу вернёт обычный Bearer клиента.
Получите Bearer по подписанному контакту
- Метод
- POST
- URL
https://api.gigma.ru/api/counterparty/miniapps/{provider}/contact_auth- Авторизация
- App Token
- Headers
Token: {application_token}
Канонический маршрут находится в counterparty-части API. Не используйте alias вида /api/miniapps/.../auth/....
Параметры пути
provider— маршрут принимаетmaxилиtelegram. Безопасный вход по подписанному контакту сейчас поддерживаетmax; для Telegram без подтверждения владения телефоном backend возвращает422.
Параметры запроса
phone(string, обязательно, до 32 символов) — телефон из подписанного contact payload. Backend нормализует его к7XXXXXXXXXX.auth_date(integer, обязательно) — Unix-время подписи в секундах, миллисекундах или микросекундах. Значение не должно быть из будущего или старше настроенного TTL.hash(string, обязательно) — подпись contact payload, 64 hex-символа.init_data(string, обязательно, до 8192 символов) — подписанные init data приложения.device(string, необязательно, до 255 символов) — название устройства, напримерmax-app.
Пример запроса
{
"phone": "+79139277802",
"auth_date": 1780000000,
"hash": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
"init_data": "auth_date=1780000000&user=%7B%22id%22%3A123456%7D&hash=...",
"device": "max-app"
} Ответ
При успешном действии возвращается HTTP 200 с полным объектом клиента и access_token. Ниже ответ сокращён:
{
"counterparty": {
"id": 1,
"phone_1": "79139277802",
"access_token": {
"value": "2|exampleCounterpartyToken"
}
}
} Возможные ошибки
401 Application token is missing/Application token is invalid— проверьте App Token.401 miniapp_contact_auth_invalid— подпись,init_dataили срок действия не прошли проверку.422— параметры запроса не прошли валидацию.422 miniapp_contact_auth_not_supported— провайдер не поддерживает безопасный вход по подписанному контакту.429— превышен лимит 5 запросов в минуту.503 miniapp_contact_auth_not_configured— на backend не настроен токен провайдера.
Готово: используйте counterparty.access_token.value как обычный Bearer клиента.
Вход по callback-звонку
Callback-вход состоит из трёх шагов:
- создайте сессию и получите номер для звонка;
- проверяйте статус, пока звонок не будет подтверждён;
- обменяйте подтверждённую сессию на Bearer.
Перед первым запросом сгенерируйте client_nonce — криптографически случайную строку из 32–128 символов base64url: A–Z, a–z, 0–9, -, _. Для каждой попытки используйте новое значение и передавайте его неизменным во всех трёх запросах.
Если у продукта есть backend или BFF, генерируйте и храните client_nonce и session_token на сервере. При прямой frontend-интеграции держите их только в памяти текущей вкладки.
Шаг 1. Начните callback-вход
- Метод
- POST
- URL
https://api.gigma.ru/api/counterparty/callback_auth/init- Авторизация
- App Token
- Headers
Token: {application_token}; Content-Type: application/json- Успешный ответ
200
Gigma создаст временную сессию и вернёт номер, на который клиент должен позвонить со своего телефона.
Параметры запроса
phone(string, обязательно) — телефон клиента. Backend нормализует значение к7XXXXXXXXXX.client_nonce(string, обязательно) — секрет текущей попытки входа, 32–128 символов base64url.
Пример запроса
{
"phone": "+7 (900) 123-45-67",
"client_nonce": "R2xvYmFsTm9uY2VFeGFtcGxlMTIzNDU2Nzg5MA"
} Ответ
При успешном действии возвращается HTTP 200.
{
"session_token": "opaque-session-token",
"callback_number": "79001000011",
"expires_at": "2026-07-03T01:23:45+00:00"
} session_token— временный токен callback-сессии, а не Bearer клиента.callback_number— номер, на который клиент должен позвонить с указанного телефона.expires_at— время окончания сессии. TTL составляет 5 минут.
IP не участвует в авторизации сессии: переход между Wi-Fi и мобильной сетью не прерывает вход.
Возможные ошибки
401 Application token is missing/Application token is invalid— проверьте App Token.409 callback_auth_session_already_started— этотclient_nonceуже использован. Создайте новое значение.409 callback_auth_challenge_already_active— для телефона уже создаётся звонок. Дождитесь окончания cooldown и повторите запрос с новымclient_nonce.422— проверьте телефон и форматclient_nonce.429 callback_auth_rate_limited— повторите запрос через число секунд из заголовкаRetry-After.503 UCaller service unavailable.— сервис callback-звонков временно недоступен.
Покажите клиенту callback_number и попросите позвонить с номера, переданного в phone.
Шаг 2. Проверьте статус
- Метод
- POST
- URL
https://api.gigma.ru/api/counterparty/callback_auth/status- Авторизация
- App Token
- Headers
Token: {application_token}; Content-Type: application/json- Успешный ответ
200
Метод возвращает состояние callback-сессии и никогда не возвращает Bearer.
Параметры запроса
session_token(string, обязательно, до 128 символов) — значение из ответаcallback_auth/init.client_nonce(string, обязательно) — значение, переданное вcallback_auth/init.
Пример запроса
{
"session_token": "opaque-session-token",
"client_nonce": "R2xvYmFsTm9uY2VFeGFtcGxlMTIzNDU2Nzg5MA"
} Ответ
При успешном запросе API вернёт HTTP 200 OK.
{
"status": "pending",
"expires_at": "2026-07-03T01:23:45+00:00",
"server_time": "2026-07-03T01:20:10+00:00",
"remaining_seconds": 215
} status | Что делать |
|---|---|
pending | повторите запрос через 3–5 секунд; таймер считайте по server_time и remaining_seconds |
verified | вызовите POST /api/counterparty/callback_auth/exchange до expires_at; после звонка окно обмена составляет не менее 120 секунд |
expired | очистите данные сессии и начните новую попытку с новым client_nonce |
Возможные ошибки
401 Application token is missing/Application token is invalid— проверьте App Token.404 Session not found— проверьтеsession_token,client_nonceи App Token. Если восстановить значения нельзя, начните вход заново.422— проверьте обязательные поля и их длину.429— уменьшите частоту polling и повторите запрос после паузы.
session_token привязан к проекту и Application, но не к IP. Он не заменяет Bearer клиента.
Шаг 3. Получите Bearer
- Метод
- POST
- URL
https://api.gigma.ru/api/counterparty/callback_auth/exchange- Авторизация
- App Token
- Headers
Token: {application_token}; Content-Type: application/json- Успешный ответ
200
Обменяйте подтверждённую callback-сессию на Bearer клиента.
Параметры запроса
session_token(string, обязательно, до 128 символов) — значение из ответаcallback_auth/init.client_nonce(string, обязательно) — значение, переданное вcallback_auth/init.device(string, опционально, до 255 символов) — название устройства или приложения для журнала сессий.
Пример запроса
{
"session_token": "opaque-session-token",
"client_nonce": "R2xvYmFsTm9uY2VFeGFtcGxlMTIzNDU2Nzg5MA",
"device": "web"
} Ответ
При успешном запросе API вернёт HTTP 200 OK.
{
"access_token": "12|plainSanctumToken"
} Сохраните access_token целиком, включая разделитель |.
Возможные ошибки
401 Application token is missing/Application token is invalid— проверьте App Token.404 Session not found—session_token,client_nonceили App Token не относятся к одной сессии.409 callback_auth_not_verified— звонок ещё не подтверждён. Вернитесь к проверке статуса.410 callback_auth_expired— сессия истекла. Начните вход заново.410 callback_auth_exchange_window_closed— окно повторной выдачи закрыто. Начните вход заново.422— проверьте обязательные поля и их длину.429— повторите запрос после паузы. Не используйте повторныйexchangeкак способ создать второй активный токен.
Повторный exchange нужен только для восстановления после потерянного ответа. В течение 60 секунд API отзывает предыдущий Bearer и выдаёт новый; после этого возвращает 410.
Готово: callback-сессия подтверждена, Bearer получен.
Использование Bearer
Передавайте App Token и Bearer клиента вместе:
GET /api/counterparty/orders HTTP/1.1
Host: api.gigma.ru
Token: <application_token>
Authorization: Bearer <counterparty_token>
Accept: application/json App Token выбирает приложение, Bearer подтверждает клиента. Для собственного backend используйте схему из раздела «Интеграция через backend».
Выход клиента
При выходе отзовите текущий Bearer или все Bearer клиента.
Завершите вход клиента
- Метод
- POST
- URL
https://api.gigma.ru/api/counterparty/logout- Авторизация
- Bearer token клиента
- Headers
Authorization: Bearer {access_token}
Параметры запроса
from_all_devices(boolean, обязательно) —true, чтобы удалить все токены клиента;false, чтобы удалить только текущий.
Пример запроса
{
"from_all_devices": true
} Ответ
Для выхода со всех устройств:
{
"message": "User successfully logout from all devices"
} Для выхода только с текущего устройства:
{
"message": "User successfully logout"
} Возможные ошибки
401 Unauthenticated— Bearer отсутствует или недействителен.422—from_all_devicesотсутствует или не является boolean.
После успешного ответа удалите локальную сессию и сохранённый Bearer.
Что дальше
- Сессии клиента — срок действия Bearer, устройства, heartbeat и причины завершения.
- Профиль клиента — проверить, от имени кого выполняется запрос.
- Заказы, оплаты и подписки — перейти к личным операциям клиента.