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

Реквизиты карты

GET/api/partner/v1/cards/{id}/secret
Scope
cards:secret

Возвращает полный номер карты (PAN), CVV и срок действия.

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

Нужны оба условия: ключ со scope cards:secret и открытый аккаунту доступ к реквизитам. Без любого из них — 403 card_secret_not_allowed.

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

У эндпоинта свой, гораздо более строгий лимит запросов, и каждый вызов записывается.

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

ПараметрТипОбяз.Описание
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/secret" "" \
  | 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/secret" \
  -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/secret");
res = pp("GET", "/cards/9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d/secret")
$res = pp('GET', '/cards/9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d/secret');

pp() — функция-обёртка с подписью из раздела Аутентификация и подпись.

Ответ

200 OK — SecretOutputBody

ПолеТипОбяз.Описание
cvvstringдаКод безопасности карты
expiry_monthstringдаМесяц окончания, две цифры
expiry_yearstringдаГод окончания, четыре цифры
masked_numberstringнетМаскированный номер, можно хранить
panstringдаПолный номер карты. Не храните и не логируйте

Примеры ответа

{
  "pan": "4000001234564821",
  "cvv": "123",
  "expiry_month": "10",
  "expiry_year": "2029",
  "masked_number": "**** **** **** 4821"
}
{
  "title": "Forbidden",
  "status": 403,
  "detail": "partner_secret_not_allowed",
  "errors": [
    {
      "message": "card_secret_not_allowed",
      "location": "error.code",
      "value": "card_secret_not_allowed"
    }
  ]
}

Ошибки

HTTPКодКогда
403card_secret_not_allowedУ ключа нет scope cards:secret или аккаунту не открыт доступ к реквизитам.
404not_foundКарты нет или она выпущена не вашим аккаунтом.
429card_secret_rate_limitedПревышен отдельный лимит запросов реквизитов.
503card_secret_reveal_disabledВыдача реквизитов временно выключена. Повторите позже.

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