Коды подтверждения
/api/partner/v1/cards/{id}/otp- Scope
cards:read
Одноразовые коды, которые эмитент сейчас запрашивает у держателя: 3-D Secure при оплате или код при добавлении карты в Apple Pay и Google Pay.
Опрашивайте эндпоинт. Код живёт около двух минут, push-канала для него нет — о появлении кода ничего не сообщает, поэтому спрашивайте, пока клиент на экране подтверждения. Повторные запросы возвращают те же коды до их истечения; опрашивать одну карту чаще раза в несколько секунд не нужно. Если кодов нет, ответ — 200 с пустым списком.
Не каждая карта умеет выдавать коды: это зависит от эмитента за тарифом. Карта, у эмитента которой нет такого канала, просто никогда их не вернёт.
Коды — живые секреты. Покажите держателю и забудьте: не храните, не логируйте и не кэшируйте. По той же причине ответ помечен no-store.
Параметры пути
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
id | string (uuid) | да | Идентификатор карты |
Пример запроса
TS=$(date +%s)
SIG=$(printf '%s\n%s\n%s\n%s' "$TS" "GET" "/api/partner/v1/cards/9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d/otp" "" \
| openssl dgst -sha256 -hmac "$PP_SECRET" -hex | awk '{print $NF}')
curl -sS -X GET "https://api.plativputi.com/api/partner/v1/cards/9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d/otp" \
-H "X-Key-Id: $PP_KEY_ID" \
-H "X-Timestamp: $TS" \
-H "X-Signature: $SIG"const res = await pp("GET", "/cards/9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d/otp");res = pp("GET", "/cards/9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d/otp")$res = pp('GET', '/cards/9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d/otp');pp() — функция-обёртка с подписью из раздела Аутентификация и подпись.
Ответ
200 OK — CardOTPOutputBody
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
items | array<CardOTPDTO> | да | Активные коды; пусто, если их нет |
items[].amount | string (decimal) | нет | Подтверждаемая сумма (только 3-D Secure) |
items[].code | string | да | Живой одноразовый код. Покажите держателю и забудьте — не храните, не логируйте, не кэшируйте |
items[].currency | string | нет | Валюта amount |
items[].expires_at | string | нет | После этого момента код недействителен — перестаньте его показывать |
items[].issued_at | string | нет | Когда эмитент запросил код — сортируйте по нему, чтобы найти самый свежий |
items[].last4 | string | нет | Последние четыре цифры карты, названной в запросе кода |
items[].merchant_name | string | нет | Мерчант, запросивший подтверждение (только 3-D Secure) |
items[].type | string | да | 3ds (оплата, которую держатель должен подтвердить) | tokenization (добавление карты в Apple Pay / Google Pay) |
Примеры ответа
{
"items": [
{
"type": "3ds",
"code": "482913",
"amount": "12.99",
"currency": "USD",
"merchant_name": "SPOTIFY",
"last4": "4821",
"issued_at": "2026-10-07T18:43:52Z",
"expires_at": "2026-10-07T18:45:52Z"
}
]
}Ошибки
| HTTP | Код | Когда |
|---|---|---|
| 404 | not_found | Карты нет или она выпущена не вашим аккаунтом. |
| 429 | rate_limited | Опрос кодов чаще отдельного лимита ключа. Опрашивайте раз в несколько секунд. |
Плюс общие ошибки подписи и лимитов — см. Ошибки.