Перейти к содержимому
API-документация

Коды подтверждения

GET/api/partner/v1/cards/{id}/otp
Scope
cards:read

Одноразовые коды, которые эмитент сейчас запрашивает у держателя: 3-D Secure при оплате или код при добавлении карты в Apple Pay и Google Pay.

Опрашивайте эндпоинт. Код живёт около двух минут, push-канала для него нет — о появлении кода ничего не сообщает, поэтому спрашивайте, пока клиент на экране подтверждения. Повторные запросы возвращают те же коды до их истечения; опрашивать одну карту чаще раза в несколько секунд не нужно. Если кодов нет, ответ — 200 с пустым списком.

Не каждая карта умеет выдавать коды: это зависит от эмитента за тарифом. Карта, у эмитента которой нет такого канала, просто никогда их не вернёт.

Коды — живые секреты. Покажите держателю и забудьте: не храните, не логируйте и не кэшируйте. По той же причине ответ помечен no-store.

Параметры пути

ПараметрТипОбяз.Описание
idstring (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

ПолеТипОбяз.Описание
itemsarray<CardOTPDTO>даАктивные коды; пусто, если их нет
items[].amountstring (decimal)нетПодтверждаемая сумма (только 3-D Secure)
items[].codestringдаЖивой одноразовый код. Покажите держателю и забудьте — не храните, не логируйте, не кэшируйте
items[].currencystringнетВалюта amount
items[].expires_atstringнетПосле этого момента код недействителен — перестаньте его показывать
items[].issued_atstringнетКогда эмитент запросил код — сортируйте по нему, чтобы найти самый свежий
items[].last4stringнетПоследние четыре цифры карты, названной в запросе кода
items[].merchant_namestringнетМерчант, запросивший подтверждение (только 3-D Secure)
items[].typestringда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КодКогда
404not_foundКарты нет или она выпущена не вашим аккаунтом.
429rate_limitedОпрос кодов чаще отдельного лимита ключа. Опрашивайте раз в несколько секунд.

Плюс общие ошибки подписи и лимитов — см. Ошибки.