Выпуск подарочных карт/API выпуска и токены

API выпуска подарочных карт

Токен выпуска позволяет вашему магазину или скриптам автоматически создавать подарочные карты, выполнять прямые пополнения и аннулировать карты — без ручной работы на сайте.

Токен выпуска может только создавать, запрашивать и аннулировать подарочные карты, а также выполнять прямые пополнения. Он не может вызывать модели и не взаимозаменяем с API-ключами на странице API. Чтобы создавать подарочные карты вручную на сайте, токен не нужен. К подарочным картам →

На этой страницеexpand_more

Создание токена выпускаlink

  1. 1

    Откройте вкладку «Токены выпуска»

    Войдите в аккаунт, откройте страницу «Подарочные карты и прямое пополнение», перейдите на вкладку «Токены выпуска» и нажмите «Новый токен выпуска».

  2. 2

    Укажите название и необязательные ограничения

    Название — до 60 символов, например «Магазин цифровых товаров». Белый список IP и дневной лимит необязательны; если оставить их пустыми, ограничений нет. Платформа не задаёт значений по умолчанию.

  3. 3

    Сразу сохраните токен

    Токен начинается с wkt_ и показывается только один раз. Если потеряете его — отзовите и создайте новый. При создании токена приходят уведомление на сайте и письмо.

Base URL
https://wokey.ai/api/issuer/v1
Авторизация
Передавайте Authorization: Bearer wkt_… в каждом запросе. Сессия входа на сайте не может вызывать эти эндпоинты, а токен выпуска не может вызывать никакие другие.
Запросы и ответы
Тела запросов и ответов — JSON. Суммы в ответах — строки с двумя знаками после точки (например, "10.00"), время — ISO 8601 в UTC.

Быстрый стартlink

Каждый раз, когда ваш магазин завершает заказ, вызывайте эндпоинт создания с count = 1 и ID заказа в качестве ключа идемпотентности. Заранее запасать коды не нужно, а повторный вызов для того же заказа создаст коды только один раз.

cURL
curl -X POST https://wokey.ai/api/issuer/v1/codes \
  -H "Authorization: Bearer wkt_YOUR_ISSUING_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-20261017-0001" \
  -d '{ "sourceType": "provider", "amountUsd": 10, "count": 1, "label": "order-20261017-0001" }'
Ответ на создание карт
{
  "batch": {
    "id": "icb_…",
    "sourceType": "provider",
    "amountUsd": "10.00",
    "count": 1,
    "totalUsd": "10.00",
    "label": "order-20261017-0001",
    "createdAt": "2026-10-17T08:00:00.000Z"
  },
  "replayed": false,
  "codes": [
    {
      "id": "ic_…",
      "batchId": "icb_…",
      "kind": "code",
      "sourceType": "provider",
      "amountUsd": "10.00",
      "codeHint": "7K2M",
      "status": "active",
      "label": "order-20261017-0001",
      "createdAt": "2026-10-17T08:00:00.000Z",
      "redeemedAt": null,
      "redeemedByMaskedEmail": null,
      "voidRequestedAt": null,
      "voidEffectiveAt": null,
      "voidedAt": null,
      "frozenAt": null,
      "code": "WK-4F9Q-T3XA-8HRB-7K2M",
      "redeemUrl": "https://wokey.ai/redeem#WK-4F9Q-T3XA-8HRB-7K2M"
    }
  ]
}

code — код активации, redeemUrl — ссылка для активации; отправьте покупателю любой из них. Покупатель активирует карту после входа в Wokey, и номинал зачисляется на его API-кредиты.

Эндпоинтыlink

Все пути начинаются с https://wokey.ai.

GET/api/issuer/v1/balanceБаланс

Возвращает доступный для вывода баланс каждого источника: provider (null, если у вас нет аккаунта провайдера), referrer, а для источника api — его переключатель, соответствие условиям и доступный баланс. Заодно возвращает средства за аннулированные карты, у которых закончился 72-часовой период ожидания.

POST/api/issuer/v1/codesСоздание подарочных карт

Списывает средства с выбранного источника и создаёт пачку карт одного номинала. Возвращает batch, replayed (был ли это повтор по ключу идемпотентности) и codes (каждая карта с code и redeemUrl). Номинал списывается сразу при создании.

ПараметрОбязательныйОписание
sourceTypeДаprovider, referrer или api; см. «Источники средств».
amountUsdДаНоминал одной карты в USD, от 1 до 1 000 000, не более двух знаков после точки.
countНетКоличество карт, от 1 до 500. По умолчанию 1.
labelНетЗаметка до 120 символов, например ID заказа или канал. По ней можно искать в списке.
idempotencyKeyДаКлюч идемпотентности до 100 символов. Можно передать и в заголовке Idempotency-Key.
GET/api/issuer/v1/codesСписок карт

Возвращает { items, nextCursor }, новые сначала. Список не содержит сами коды, только последние 4 символа в codeHint; у активированных карт есть замаскированный email получателя в redeemedByMaskedEmail.

ПараметрОбязательныйОписание
statusНетactive, voiding, voided, redeemed или frozen.
sourceTypeНетФильтр по источнику средств.
batchIdНетТолько одна пачка.
searchНетПоиск по заметке или последним 4 символам кода.
codeНетПолный код, точное совпадение. Помогает при спорах с покупателями.
cursorНетnextCursor из предыдущей страницы.
limitНетРазмер страницы, по умолчанию 50, максимум 200.
GET/api/issuer/v1/codes/:idДанные карты

Возвращает одну карту вместе с code и redeemUrl. Каждое чтение кода записывается в журнал аудита.

POST/api/issuer/v1/codes/:id/voidАннулирование карты

Аннулировать можно только неактивированные (active) карты. Аннулированная карта сразу перестаёт работать, а номинал возвращается на исходный источник через 72 часа. Если карты нет или она не active, возвращается issued_credit_not_found.

POST/api/issuer/v1/codes/:id/void/cancelОтмена аннулирования

Отменяет аннулирование в течение 72-часового периода ожидания, карта снова становится active. Если карта не аннулируется, возвращается issued_credit_not_voiding.

POST/api/issuer/v1/direct-topupsПрямое пополнение

Зачисляет сумму прямо на API-кредиты другого аккаунта без создания кода; получатель получает уведомление. Возвращает { direct, replayed }.

ПараметрОбязательныйОписание
sourceTypeДаprovider или referrer. Источник API-кредитов для прямых пополнений не поддерживается.
recipientIdentifierДаКод получения (PAY-XXXX-XXXX) или email аккаунта получателя. Нельзя указать себя.
amountUsdДаСумма в USD, от 1 до 1 000 000, не более двух знаков после точки.
labelНетЗаметка до 120 символов.
idempotencyKeyДаКлюч идемпотентности до 100 символов. Можно передать и в заголовке Idempotency-Key.

Источники средствlink

sourceTypeИсточник средствПримечания
providerДоход провайдераВаш доход провайдера, доступный для вывода. Нужен аккаунт провайдера, расчёты которого не заморожены.
referrerРеферальное вознаграждениеРеферальное вознаграждение, доступное для вывода.
apiAPI-кредитыТолько подарочные карты, без прямых пополнений. Доступно только подходящим аккаунтам: каждый API-кредит должен прийти из пополнения в блокчейне или из вашего собственного дохода провайдера либо реферального вознаграждения. Проверьте api.enabled и api.eligible в ответе balance.

Ключи идемпотентностиlink

  • Для создания карт и прямых пополнений ключ идемпотентности обязателен. Удобно использовать ID заказа.
  • Ключи уникальны в пределах аккаунта и общие для сайта и API выпуска, независимо от того, какой токен отправил запрос.
  • Повтор запроса с тем же ключом и теми же параметрами ничего не списывает и возвращает первый результат с replayed = true; повтор создания снова возвращает те же коды.
  • Тот же ключ с другими параметрами (sourceType, amountUsd, count, а для прямого пополнения — получатель) возвращает 409 idempotency_key_conflict.
  • После сетевого таймаута или ответа 5xx повторите запрос с тем же ключом — двойного списания не будет.

Статусы и аннулирование картlink

statusЗначение
activeНе активирована, её можно активировать.
redeemedАктивирована; номинал зачислен на API-кредиты получателя.
voidingАннулируется и больше не может быть активирована. В течение 72-часового периода ожидания аннулирование можно отменить.
voidedАннулирована; номинал возвращён на исходный источник.
frozenЗаморожена платформой. Её нельзя активировать или аннулировать самостоятельно. С вопросами обращайтесь в поддержку.
  • Номинал списывается при создании карты. Карты в статусах active, voiding, redeemed и frozen считаются оплаченными; баланс возвращается только для voided.
  • Если карта уже продана или подарена, после аннулирования получатель не сможет её активировать.
  • Возврат после периода ожидания проводится автоматически, с уведомлением на сайте; вызов balance тоже проводит наступившие возвраты.

Коды ошибокlink

Ошибки имеют вид { "error": { "code": "…", "message": "…", "type": "invalid_request_error" } }. Ориентируйтесь на code, а не на текст message.

codeHTTPЗначение и что делать
invalid_issuer_token401Токена нет, у него неверный формат, его не существует или он отозван.
issuer_token_ip_not_allowed403IP запроса не входит в белый список этого токена.
issuer_token_daily_limit_exceeded429Сумма карт и прямых пополнений через этот токен за сегодня (UTC) превысит его дневной лимит.
rate_limited429Слишком много запросов. Повторите позже с тем же ключом идемпотентности.
issued_credits_disabled403Платформа приостановила новый выпуск. Выпущенные карты по-прежнему активируются, а запросы, аннулирование и его отмена работают.
issuer_not_eligible403Этот аккаунт не может выпускать подарочные карты.
invalid_source_type400sourceType не равен provider, referrer или api.
invalid_amount400Сумма вне диапазона от 1 до 1 000 000 или содержит больше двух знаков после точки.
invalid_count400count — не целое число от 1 до 500.
invalid_label400label не строка или длиннее 120 символов.
invalid_idempotency_key400Ключ идемпотентности отсутствует или длиннее 100 символов.
insufficient_withdrawable_balance400Недостаточно дохода провайдера или реферального вознаграждения, доступного для вывода.
insufficient_balance400Недостаточно API-кредитов.
api_source_not_eligible403Аккаунт не может выпускать карты из API-кредитов; причина — в api.disqualifiedBy ответа balance.
api_source_direct_not_supported400Источник API-кредитов нельзя использовать для прямых пополнений.
provider_profile_not_found404Выбран источник provider, но у аккаунта нет аккаунта провайдера.
provider_settlement_frozen403Расчёты провайдера заморожены, доход провайдера использовать нельзя.
withdrawable_balance_mismatch409Ошибка сверки баланса. Обратитесь в поддержку.
recipient_required400В прямом пополнении не указан получатель.
recipient_not_found404Аккаунт с таким кодом получения или email не найден.
recipient_not_eligible403Этот аккаунт сейчас не может получать кредиты.
cannot_transfer_to_self400Нельзя пополнить собственный аккаунт.
idempotency_key_conflict409Этот ключ идемпотентности уже использован для запроса с другими параметрами.
issued_credit_not_found404Карты нет, она не ваша или (при аннулировании) не в статусе active.
issued_credit_not_voiding409Карта не аннулируется или период ожидания истёк, отменить аннулирование нельзя.
code_generation_failed503Сейчас не удалось создать коды, средства не списаны. Повторите с тем же ключом идемпотентности.

Ограничения и безопасностьlink

  • Создание карт и прямые пополнения: не более 60 в минуту на аккаунт (сайт и API выпуска вместе).
  • Чтение данных карты (с кодом): не более 120 в минуту на аккаунт.
  • Не более 500 карт в пачке; номинал одной карты — от 1 до 1 000 000 USD.
  • Не более 20 неотозванных токенов выпуска на аккаунт и не более 20 IP в белом списке каждого токена.

Рекомендации по безопасности

  • Храните токен только на сервере (в бэкенде магазина или на своём сервере). Не размещайте его во фронтенде сайта, в приложении или в публичном репозитории.
  • Если у вас фиксированный исходящий IP, задайте белый список. Записи сравниваются с IP точно; диапазоны не поддерживаются.
  • Задайте дневной лимит, чтобы ограничить потери при утечке токена. Лимит считает карты и прямые пополнения вместе за сутки UTC.
  • Смена пароля или выход из всех сессий не отзывает токены выпуска. Если подозреваете утечку, отзовите токен на вкладке «Токены выпуска» — он сразу перестанет работать.
  • На вкладке «Токены выпуска» видно, когда и с какого IP каждый токен использовался последний раз. Проверяйте это время от времени.