Данное API предназначено для подтверждения номера телефона пользователя.
| Этап | Способ | Примечание |
|---|---|---|
| 1 | SIM-Push уведомление + SMS | SMS отправляется, если уведомление не доставлено или отклонено; оба через одного провайдера |
| 2 | Звонок | Если SIM-Push не сработал |
| 3 | SMS (другой провайдер) | Если звонок не сработал |
| 4 | Тех. поддержка | Если ни один из каналов подтверждения не сработал, обращение в тех поддержку для подтверждения номера телефона |
API подразумевает доступ только аутентифицированного пользователя (возможно, анонимного), пользующегося авторизованным приложением.
Вследствие чего данное API должно быть доступно только по HTTPS. Формат запроса:
https://<path_to_api>/<api_version>/<method>
Где:
path_to_api — путь до API, полученный в Регистратуреapi_version — мажорная версия API (должна быть равна 2)method — метод, который производится над элементомКоды ответов сервера должны соответствовать стандартным кодам HTTP-ответов для соответствующих ситуаций.
| HTTP-код | Описание |
|---|---|
| 200 | Успешный запрос. Ответ содержит ожидаемые данные |
| 400 | Неверный запрос. Ошибка в синтаксисе запроса или отсутствуют обязательные параметры |
| 404 | Ресурс не найден |
| 401 | Пользователь не авторизован. Нужно получить действующий токен |
| 422 | Ошибка валидации. Невалидны параметры запроса |
| 500 | Внутренняя ошибка сервера. Что-то пошло не так на стороне бэкенда |
| 503 | Сервис временно недоступен (например, из-за технических работ) |
Для аутентификации пользователя клиент должен передать полученный ранее токен доступа, выданный Auth API контрагента, по схеме аутентификации в соответствии с типом токена.
Для авторизации по типу токена “Bearer” рекомендуется использовать HTTP заголовок Authorization, пример:
Authorization: Bearer 18dasd81230dah12032
Параметры:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
phone |
строка | Да | Номер телефона пользователя |
request_id |
строка | опциональный | ID запроса подтверждения. Используется для смены канала подтверждения |
Замечание:
- phone должен содержать 11 цифр и первые две цифры должны начинаться с 79, +79, 89. То есть только сотовые российские номера
✅ Допустимый формат phone:
- +79xxxxxxxx
- 79xxxxxxxx
- 89xxxxxxxx
Запрос
POST /phoneconfirm/2/confirm
Authorization: Bearer 18dasd81230dah12032
Content-Type: application/json
Host: api.peers.tv
{
"phone": "79997772222"
}
Ответ*
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
{
"result": "ok",
"request_id": "bded3728-3ddc-4db9-ab7f-16612f3e3494",
"type": "sim-push",
"code_input_required": "4_digit_code",
"ttl": 900,
"timeout": 60
}
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
result |
строка | Да | Статус выполнения: ok при успехе, error при ошибке |
request_id |
строка | Да | ID запроса подтверждения. |
type |
строка | Да | Тип канала подтверждения |
code_input_required |
строка | Да | информация о том, нужно ли пользователю вводить код |
ttl |
число | Да | Время жизни ID запроса подтверждения секундах. При истечении времени нужно выполнить повторный запрос на подтверждение номера телефона и подтверждение произойдет заново с sim-push |
timeout |
число | Да | Это интервал времени между запросами на подтверждение в секундах. |
error |
строка | опциональный | Ошибка. Список ошибок смотреть ниже |
Возможные значения параметра type:
sim-push — верификация через sim-push.call — верификация через звонокsms — верификация через смсHTTP/1.1 200
Content-Type: application/json; charset=UTF-8
{
"result": "error",
"error": "delivery_failed"
}
Параметры:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
request_id |
integer | Да | ID запроса подтверждения из метода confirm |
Запрос
POST /phoneconfirm/2/verify
Authorization: Bearer 18dasd81230dah12032
Content-Type: application/json
Host: api.peers.tv
{
"request_id": "bded3728-3ddc-4db9-ab7f-16612f3e3494"
}
Успешный Ответ
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"result": "ok",
"status": "confirmed",
"code_input_required": "no_code",
"error_attempts": 0,
"max_attempts": 3,
"ttl": 90
}
HTTP/1.1 200
Content-Type: application/json; charset=UTF-8
{
"result": "error",
"error": "request_id_expired"
}
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
result |
строка | Да | Статус выполнения: ok при успехе, error при ошибке |
status |
строка | Да | Статус выполнения |
code_input_required |
строка | Да | информация о том, нужно ли пользователю вводить код |
error_attempts |
число | Да | Количество неверных попыток ввода кода |
max_attempts |
число | Да | Максимальное количество попыток ввода кода |
ttl |
число | Да | Оставшееся время в секундах для проверки статуса. Счетчик уменьшается на бэкенде |
error |
строка | опциональный | Ошибка. Список ошибок смотреть ниже |
! Клиент обязан сохранять предыдущий ответ API при status: "unconfirmed" !
Это требуется для корректной обработки сценариев:
- Сравнения изменений между последовательными запросами verify
- Отслеживания динамики параметров (error_attempts, code_input_required)
- Принятия решений о переходе между экранами приложения
verifyПараметры ответа:
{
"result": "ok",
"status": "confirmed",
"code_input_required": "no_code",
"error_attempts": 0,
"max_attempts": 3,
"ttl": 90
}
Действия от клиента:
Параметры ответа:
{
"result": "ok",
"status": "unconfirmed",
"code_input_required": "no_code",
"error_attempts": 0,
"max_attempts": 3,
"ttl": 90,
}
Действия от клиента:
verifyttlconfirmed4_digit_codeПараметры ответа:
{
"result": "ok",
"status": "unconfirmed",
"code_input_required": "4_digit_code",
"error_attempts": 0,
"max_attempts": 3,
"ttl": 90
}
Действия от клиента:
checkCodeПараметры ответа:
{
"result": "ok",
"status": "unconfirmed",
"code_input_required": "4_digit_code",
"error_attempts": 0,
"max_attempts": 3,
"ttl": 90
}
Действия от клиента:
verifyerror_attempts увеличилсяПараметры ответа:
{
"result": "ok",
"status": "unconfirmed",
"code_input_required": "4_digit_code",
"error_attempts": 1, // увеличилось. Приложению нужно запомнить предыдущий ответ и сравнивать с новым. При увелечении приложению нужно уведомить пользователю о невалидном коде и предложить ввести код заново
"max_attempts": 3,
"ttl": 90
}
Действия клиента:
Параметры:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
request_id |
строка | Да | ID запроса подтверждения из метода confirm |
code |
строка | Да | код введенный пользователем |
Запрос
POST /phoneconfirm/2/checkCode
Authorization: Bearer 18dasd81230dah12032
Content-Type: application/json
Host: api.peers.tv
{
"request_id": "bded3728-3ddc-4db9-ab7f-16612f3e3494",
"code": "1234"
}
Успешный Ответ
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"result": "ok"
}
HTTP/1.1 200
Content-Type: application/json; charset=UTF-8
{
"result": "error",
"error": "max_attempts_check_code"
}
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
result |
строка | Да | Статус выполнения: ok при успехе, error при ошибке |
error |
строка | опциональный | Ошибка. Список ошибок смотреть ниже |
| status | Описание |
|---|---|
| confirmed | номер телефона успешно подтвержден |
| unconfirmed | номер телефона не подтвержден |
| result | Описание |
|---|---|
| ok | Успешный ответ. |
| error | негативный ответ. Действия приложения определяются ошибкой указанного в параметре error |
| code_input_required | Описание |
|---|---|
| 4_digit_code | используется, если пользователю отправлен код 4-х значный |
| no_code | используется, если пользователю отправлено уведомление на телефон через sim-push |
| Ошибка | Описание |
|---|---|
| delivery_failed | Не удалось доставить запрос подтверждения ни по одному из доступных способов (SIM-Push, звонок, SMS). Возможно подтверждение через тех. поддержку |
| request_id_expired | Время жизни (ttl) ID запроса подтверждения истекло. Нужно выполнить новый запрос на подтверждение без request_id для повторной попытки подтверждения |
| request_id_not_found | Не найден ID запроса подтверждения. Нужно выполнить новый запрос на подтверждение без request_id для повторной попытки подтверждения |
| many_requests | Слишком частые запросы на подтверждение номера телефона. Приложению необходимо дождаться истечения timeout. |
| max_attempts_check_code | Достигнуто максимальное количество попыток ввода кода. Нужно сменить канал подтверждения в методе confirm'. Счетчик error_attempts обнулится, так как весь процесс подтверждения номера телефона начнется сначала
| verify_expired | ttl в методеverifyистек. Нужно сменить канал подтверждения в методеconfirm’. Счетчик error_attempts обнулится |
| check_code_failed | Не удалось проверить код в методе checkCode. Нужно сменить канал подтверждения номера телефона |