API Reference

Один HTTP-префикс /api/v2: мобильные пополнения, подарочные карты, ключи, кошелёк и подарки Steam, Telegram Stars и Premium, ручная выдача, баланс и биллинг.

Базовый URLhttps://api.fzr.cards/api/v2
АутентификацияX-API-Key: YOUR_API_KEY

Храните ключи в секрете. Каждый запрос выполняется от вашего аккаунта реселлера.

Тот же ключ можно передать в заголовке Authorization: Bearer YOUR_API_KEY (альтернатива X-API-Key).

Рецепты
Открыть API Cookbook — готовые сниппеты на curl, Node.js, Python и Go для первого заказа, webhooks, миграции с других платформ и других типовых задач.
Официальные SDK

Python: pip install fazercards GitHub

Node.js / TypeScript: npm install fazercards GitHub

Официальные клиенты (MIT): сами ставят X-Api-Key, Idempotency-Key и проверяют подпись webhook. Любой другой язык — напрямую через REST.

OpenAPI (Swagger) — полная схема

Здесь обзор типовых сценариев. Точные поля и коды ответов — в публичной спецификации (те же пути, что в проде).

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

Создайте ключ в панели (Профиль). Вызовите /me с этим ключом:

bash
curl -s "https://api.fzr.cards/api/v2/me" \
  -H "X-API-Key: YOUR_API_KEY"

Ответ:

json
{
  "ok": true,
  "login": "partner1",
  "email": "you@example.com",
  "plan": "gold",
  "planExpiresAt": "2026-06-01T00:00:00.000Z",
  "planAutoRenew": true,
  "subscriptionActive": true,
  "summary": {
    "totalSpent": "1234.5678",
    "totalOrders": 42
  },
  "createdAt": "2025-01-10T12:00:00.000Z",
  "lastActiveAt": "2026-05-03T08:00:00.000Z"
}

Соглашения

Успешные ответы содержат "ok": true. Ошибки: "ok": false, поле "error" и иногда "code". В каталогах часто snake_case от провайдеров (category_id, price_usd), в профиле и подписке — camelCase (planExpiresAt). Пагинация: /orders и /transactions — page и limit; /topups и /giftcards — курсор в meta. Доступ к продуктам зависит от тарифа и включённых услуг — иначе 403. Публичные id заказов: ord-123 (не ord_123). Транзакции: tx + цифры. Идемпотентность: любой эндпоинт создания заказа — POST /giftcards/order, /topups/order, /gamekeys/order, /steam-gifts/order, /steam-topup/order и /manual-services/order — принимает необязательный заголовок Idempotency-Key (любая уникальная строка, например UUID, до 255 символов). Повтор того же запроса с тем же ключом вернёт исходный заказ, без повторного списания и выдачи; без заголовка поведение прежнее. См. рецепт Idempotency-Key в API Cookbook.

Типичное тело ошибки

json
{
  "ok": false,
  "error": "message for humans",
  "code": "optional_machine_code"
}

Группы методов

Аккаунт

Профиль и кошелёк: GET /me, GET /balance, GET /transactions и GET /transactions/:transactionId (tx + цифры).

GET/me

Профиль: login, email, plan, planExpiresAt, planAutoRenew, subscriptionActive, summary, метки времени.

Запрос

curl -s "https://api.fzr.cards/api/v2/me" \
  -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "login": "partner1",
  "email": "you@example.com",
  "plan": "gold",
  "planExpiresAt": "2026-06-01T00:00:00.000Z",
  "planAutoRenew": true,
  "subscriptionActive": true,
  "summary": {
    "totalSpent": "1234.5678",
    "totalOrders": 42
  },
  "createdAt": "2025-01-10T12:00:00.000Z",
  "lastActiveAt": "2026-05-03T08:00:00.000Z"
}
GET/balance

Баланс кошелька строкой в USD.

Запрос

curl -s "https://api.fzr.cards/api/v2/balance" \
  -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "balance": "100.0000",
  "currency": "USD"
}
GET/transactions

Леджер с пагинацией (кредит/дебет, id tx…).

Запрос

curl -s "https://api.fzr.cards/api/v2/transactions?page=1&limit=20" \
  -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "items": [
    {
      "id": "tx1001",
      "type": "debit",
      "status": "completed",
      "amount": "-5.0000",
      "balanceBefore": "105.0000",
      "balanceAfter": "100.0000",
      "note": "Order ord-9001",
      "createdAt": "2026-05-02T10:00:00.000Z"
    }
  ],
  "total": 1,
  "page": 1,
  "limit": 20
}
GET/transactions/:transactionId

Одна транзакция по id из списка.

Запрос

curl -s "https://api.fzr.cards/api/v2/transactions/tx1001" \
    -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "transaction": {
    "id": "tx1001",
    "type": "debit",
    "status": "completed",
    "amount": "-5.0000",
    "balanceBefore": "105.0000",
    "balanceAfter": "100.0000",
    "note": "Order ord-9001",
    "createdAt": "2026-05-02T10:00:00.000Z"
  }
}

Пополнение баланса (крипто)

GET /payments/methods — коды методов и лимиты в USD. POST /payments/create — счёт (method + amount в USD). Статус: GET /payments/:paymentId; для binancepay — POST …/verify с binanceOrderId после оплаты в приложении.

GET/payments/methods

Включённые крипто-методы: code, label, minAmountUsd, maxAmountUsd.

Запрос

curl -s "https://api.fzr.cards/api/v2/payments/methods" \
    -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "items": [
    {
      "code": "trc20",
      "label": "USDT TRC20",
      "minAmountUsd": 10,
      "maxAmountUsd": 50000
    }
  ]
}
POST/payments/create

Создать счёт: method (trc20, bep20, ton, aptos, binancepay) и amount в USD. В ответе инструкции и id платежа.

Запрос

curl -s -X POST "https://api.fzr.cards/api/v2/payments/create" \
    -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"method":"trc20","amount":100}'

Ответ

{
  "ok": true,
  "payment": {
    "id": "tx2001",
    "network": "TRC20",
    "amount": "100.0000",
    "uniqueAmount": null,
    "address": "TExample…",
    "memo": null,
    "binanceId": null,
    "displayName": null,
    "status": "pending",
    "verifyAttempts": 0,
    "expiresAt": "2026-05-03T12:00:00.000Z",
    "completedAt": null,
    "cancelledAt": null,
    "createdAt": "2026-05-03T10:00:00.000Z"
  }
}
GET/payments/:paymentId

Статус платежа по id из create.

Запрос

curl -s "https://api.fzr.cards/api/v2/payments/tx2001" \
    -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "payment": {
    "id": "tx2001",
    "network": "TRC20",
    "amount": "100.0000",
    "uniqueAmount": null,
    "address": "TExample…",
    "memo": null,
    "binanceId": null,
    "displayName": null,
    "status": "pending",
    "verifyAttempts": 0,
    "expiresAt": "2026-05-03T12:00:00.000Z",
    "completedAt": null,
    "cancelledAt": null,
    "createdAt": "2026-05-03T10:00:00.000Z"
  }
}
POST/payments/:paymentId/verify

Только Binance Pay: передать binanceOrderId после оплаты; лимит попыток.

Запрос

curl -s -X POST "https://api.fzr.cards/api/v2/payments/tx2001/verify" \
    -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"binanceOrderId":"BP_ORDER_REF"}'

Ответ

{
  "ok": true,
  "payment": {
    "id": "tx2001",
    "network": "BINANCEPAY",
    "amount": "100.0000",
    "uniqueAmount": null,
    "address": "",
    "memo": null,
    "binanceId": null,
    "displayName": null,
    "status": "completed",
    "verifyAttempts": 1,
    "expiresAt": "2026-05-03T12:00:00.000Z",
    "completedAt": "2026-05-03T11:30:00.000Z",
    "cancelledAt": null,
    "createdAt": "2026-05-03T10:00:00.000Z"
  },
  "verifySuccess": true,
  "message": "OK"
}

Подписка

GET /subscription и GET /subscription/plans. Если период не активен: GET /subscription/activation-quote?plan=…, затем POST /subscription/activate-from-balance. PATCH /subscription/auto-renew и PATCH /subscription/plan — продление и смена тарифа.

GET/subscription

Текущий тариф, окончание, авто-продление, флаг активности, валюта.

Запрос

curl -s "https://api.fzr.cards/api/v2/subscription" \
    -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "plan": "gold",
  "planExpiresAt": "2026-06-01T00:00:00.000Z",
  "planAutoRenew": true,
  "subscriptionActive": true,
  "currency": "USD"
}
GET/subscription/plans

bronze/silver/gold и priceUsd за 30 дней.

Запрос

curl -s "https://api.fzr.cards/api/v2/subscription/plans" \
    -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "currency": "USD",
  "plans": [
    { "plan": "bronze", "priceUsd": "29.0000" },
    { "plan": "silver", "priceUsd": "49.0000" },
    { "plan": "gold", "priceUsd": "99.0000" }
  ]
}
GET/subscription/activation-quote

Котировка перед первой активацией: listPriceUsd, chargedAmountUsd, firstPurchase. promo_code — когда разрешено.

Запрос

curl -s "https://api.fzr.cards/api/v2/subscription/activation-quote?plan=gold" \
    -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "plan": "gold",
  "listPriceUsd": "99.0000",
  "chargedAmountUsd": "89.1000",
  "firstPurchase": true,
  "currency": "USD"
}
POST/subscription/activate-from-balance

Списание USD с баланса и старт 30 дней (plan). Сначала пополните кошелёк через payments.

Запрос

curl -s -X POST "https://api.fzr.cards/api/v2/subscription/activate-from-balance" \
    -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"plan":"gold"}'

Ответ

{
  "ok": true,
  "plan": "gold",
  "planExpiresAt": "2026-06-01T00:00:00.000Z",
  "planAutoRenew": true,
  "subscriptionActive": true,
  "currency": "USD"
}
PATCH/subscription/auto-renew

Тело JSON: поле planAutoRenew — логическое значение (true или false).

Запрос

curl -s -X PATCH "https://api.fzr.cards/api/v2/subscription/auto-renew" \
    -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"planAutoRenew":false}'

Ответ

{
  "ok": true,
  "plan": "gold",
  "planExpiresAt": "2026-06-01T00:00:00.000Z",
  "planAutoRenew": true,
  "subscriptionActive": true,
  "currency": "USD"
}
PATCH/subscription/plan

Тело JSON: поле plan — bronze, silver или gold. Правила смены тарифа — в OpenAPI.

Запрос

curl -s -X PATCH "https://api.fzr.cards/api/v2/subscription/plan" \
    -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"plan":"silver"}'

Ответ

{
  "ok": true,
  "plan": "gold",
  "planExpiresAt": "2026-06-01T00:00:00.000Z",
  "planAutoRenew": true,
  "subscriptionActive": true,
  "currency": "USD"
}

Заказы

GET /orders — список (page, limit). GET /orders/:orderId — один заказ; id вида ord-[цифры].

GET/orders

Постраничный список ваших заказов.

Запрос

curl -s "https://api.fzr.cards/api/v2/orders?page=1&limit=20" \
    -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "items": [
    {
      "id": "ord-9001",
      "kind": "gift_card",
      "status": "completed",
      "created_at": "2026-05-02T10:00:00.000Z"
    }
  ],
  "total": 1,
  "page": 1,
  "limit": 20
}
GET/orders/:orderId

Полный JSON заказа; структура зависит от kind и статуса.

Запрос

curl -s "https://api.fzr.cards/api/v2/orders/ord-9001" \
    -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "order": {
    "id": "ord-9001",
    "kind": "gift_card",
    "status": "completed",
    "payload": {}
  }
}

Игровые пополнения

GET /topups — категории, GET /topups/offers?category_id=… — офферы и поля ввода, POST /topups/order — category_id, offer_id и объект fields.

GET/topups

Категории пополнений с category_id; include_ui — обложки.

Запрос

curl -s "https://api.fzr.cards/api/v2/topups?limit=50" \
    -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "kind": "topup",
  "items": [
    {
      "category_id": "cat_pubgm_1",
      "name": "PUBG Mobile",
      "note": ""
    }
  ],
  "meta": {
    "total": 120,
    "limit": 50,
    "next_cursor": null,
    "has_more": false
  }
}
GET/topups/offers

Офферы и динамические поля для одной category_id.

Запрос

curl -s "https://api.fzr.cards/api/v2/topups/offers?category_id=cat_pubgm_1" \
    -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "kind": "topup",
  "category_id": "cat_pubgm_1",
  "name": "PUBG Mobile",
  "offers": [
    { "offer_id": "offer_60uc", "name": "60 UC", "price_usd": "0.9900" }
  ],
  "fields": [
    {
      "key": "player_id",
      "label": "Player ID",
      "type": "text"
    }
  ]
}
POST/topups/order

Обязательно: category_id, offer_id, fields по ключам из offers.

Запрос

curl -s -X POST "https://api.fzr.cards/api/v2/topups/order" \
    -H "X-API-Key: YOUR_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"category_id":"cat_pubgm_1","offer_id":"offer_60uc","fields":{"player_id":"123456789"}}'

Ответ

{
  "ok": true,
  "order": {
    "id": "ord-9002",
    "kind": "topup",
    "status": "processing"
  }
}
GET/topups/validate-id

Игры с проверкой Player ID и поля для отправки (напр. PUBG Mobile, Free Fire). Список динамический — полученный category_id используйте в POST /topups/validate-id.

Запрос

curl -s "https://api.fzr.cards/api/v2/topups/validate-id" \
    -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "kind": "topup",
  "items": [
    {
      "category_id": "pubg_mobile",
      "name": "PUBG Mobile",
      "fields": [
        { "key": "player_id", "label": "Player ID", "type": "text" }
      ]
    }
  ]
}
POST/topups/validate-id

Проверка Player ID перед заказом. Тело: category_id (из списка выше) и fields по ключам этой игры. Возвращает valid, player_name и, если игра отдаёт, region.

Запрос

curl -s -X POST "https://api.fzr.cards/api/v2/topups/validate-id" \
    -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"category_id":"pubg_mobile","fields":{"player_id":"123456789"}}'

Ответ

{
  "ok": true,
  "category_id": "pubg_mobile",
  "valid": true,
  "player_name": "PlayerNick"
}

Подарочные карты

GET /giftcards → GET /giftcards/cards?category_id=… → POST /giftcards/order с category_id, card_id и quantity.

GET/giftcards

Категории подарочных карт; курсор как у topups.

Запрос

curl -s "https://api.fzr.cards/api/v2/giftcards?limit=50" \
    -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "kind": "gift_card",
  "items": [
    { "category_id": "gc_steam_1", "name": "Steam USD" }
  ],
  "meta": {
    "total": 40,
    "limit": 50,
    "next_cursor": null,
    "has_more": false
  }
}
GET/giftcards/cards

Офферы в категории: card_id, price_usd, stock, лимиты quantity.

Запрос

curl -s "https://api.fzr.cards/api/v2/giftcards/cards?category_id=gc_steam_1" \
    -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "kind": "gift_card",
  "category_id": "gc_steam_1",
  "name": "Steam USD",
  "offers": [
    {
      "card_id": "card_10usd",
      "name": "Steam — $10",
      "price_usd": "10.5000",
      "stock": 100,
      "min_order_quantity": 1,
      "max_order_quantity": 10
    }
  ]
}
POST/giftcards/order

category_id и card_id из списка cards, quantity 1–100.

Запрос

curl -s -X POST "https://api.fzr.cards/api/v2/giftcards/order" \
    -H "X-API-Key: YOUR_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"category_id":"gc_steam_1","card_id":"card_10usd","quantity":1}'

Ответ

{
  "ok": true,
  "order": {
    "id": "ord-9001",
    "kind": "gift_card",
    "status": "processing"
  }
}

Ключи игр

GET /gamekeys → GET /gamekeys/keys?game_id=… → при необходимости GET /gamekeys/region-restriction?game_id=… → POST /gamekeys/order с game_id, key_id и quantity. Поле GameName в ответе с большой буквы по историческим причинам.

GET/gamekeys

Категории ключей: game_id, region, platform, флаг region_restriction.

Запрос

curl -s "https://api.fzr.cards/api/v2/gamekeys?limit=50" \
    -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "kind": "game_key",
  "items": [
    {
      "name": "Example Game",
      "game_id": "gk_example_1",
      "region": "GLOBAL",
      "platform": "steam",
      "region_restriction": false
    }
  ],
  "meta": {
    "total": 500,
    "limit": 50,
    "next_cursor": "opaque…",
    "has_more": true
  }
}
GET/gamekeys/keys

SKU для game_id: keys[].key_id, цены, остаток.

Запрос

curl -s "https://api.fzr.cards/api/v2/gamekeys/keys?game_id=gk_example_1" \
    -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "kind": "game_key",
  "game_id": "gk_example_1",
  "GameName": "Example Game",
  "region": "GLOBAL",
  "platform": "steam",
  "region_restriction": false,
  "keys": [
    {
      "key_id": "key_sku_1",
      "name": "Standard edition",
      "price_usd": "19.9900",
      "stock": 5,
      "min_order_quantity": 1,
      "max_order_quantity": 5
    }
  ]
}
GET/gamekeys/region-restriction

Если region_restriction — доступность по странам для game_id.

Запрос

curl -s "https://api.fzr.cards/api/v2/gamekeys/region-restriction?game_id=gk_example_1" \
    -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "kind": "game_key",
  "game_id": "gk_example_1",
  "region_type": "CIS",
  "has_availability": true,
  "available": [{ "code": "RU", "name": "Russia" }],
  "unavailable": [{ "code": "US", "name": "United States" }]
}
POST/gamekeys/order

game_id из каталога и key_id из keys для этого game_id, плюс quantity в пределах min/max и склада.

Запрос

curl -s -X POST "https://api.fzr.cards/api/v2/gamekeys/order" \
    -H "X-API-Key: YOUR_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"game_id":"gk_example_1","key_id":"key_sku_1","quantity":1}'

Ответ

{
  "ok": true,
  "order": {
    "id": "ord-9001",
    "kind": "gift_card",
    "status": "processing"
  }
}

Steam

Кошелёк: GET /steam-topup/rates, POST /steam-topup/check-login (тело steamLogin), POST /steam-topup/order. Подарки: GET /steam-gifts/games, GET /steam-gifts/games/:appid, POST /steam-gifts/order — invite_url, sub_id, app_id, region.

GET/steam-topup/rates

База USD и курсы RUB/UAH/KZT за 1 USD, updated_at.

Запрос

curl -s "https://api.fzr.cards/api/v2/steam-topup/rates" \
    -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "base": "USD",
  "rates": { "USD": 1, "RUB": 92.5, "UAH": 41.2, "KZT": 520 },
  "updated_at": "2026-05-03T00:00:00.000Z"
}
GET/steam-topup/public-rates

Тот же ответ, что у rates, только чтение и без API key — для серверной витрины (тот же кэш, что у биллинга).

Запрос

curl -s "https://api.fzr.cards/api/v2/steam-topup/public-rates"

Ответ

{
  "ok": true,
  "base": "USD",
  "rates": { "USD": 1, "RUB": 92.5, "UAH": 41.2, "KZT": 520 },
  "updated_at": "2026-05-03T00:00:00.000Z"
}
POST/steam-topup/check-login

Тело JSON: поле steamLogin — логин Steam. В ответе поле can_refill (boolean).

Запрос

curl -s -X POST "https://api.fzr.cards/api/v2/steam-topup/check-login" \
    -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"steamLogin":"partner_steam_login"}'

Ответ

{
  "ok": true,
  "can_refill": true
}
POST/steam-topup/order

steamLogin, currency (USD, RUB, UAH, KZT), amount числом или строкой; в ответе обёртка с заказом.

Запрос

curl -s -X POST "https://api.fzr.cards/api/v2/steam-topup/order" \
    -H "X-API-Key: YOUR_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"steamLogin":"partner_steam_login","currency":"USD","amount":5}'

Ответ

{
  "ok": true,
  "order": {
    "id": "ord-9001",
    "kind": "gift_card",
    "status": "processing"
  }
}
GET/steam-gifts/games

Большой каталог — limit и лимиты частоты (см. OpenAPI).

Запрос

curl -s "https://api.fzr.cards/api/v2/steam-gifts/games?limit=100" \
    -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "games": [{ "name": "Counter-Strike 2", "appid": 730 }],
  "meta": { "total": 12000, "returned": 100, "truncated": true }
}
GET/steam-gifts/games/:appid

Офферы с sub_id и ценами по регионам для appid.

Запрос

curl -s "https://api.fzr.cards/api/v2/steam-gifts/games/730" \
    -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "appid": 730,
  "offers": [
    {
      "sub_id": 54029,
      "name": "Counter-Strike 2",
      "regions": [{ "region": "CIS", "price": "0.0000" }]
    }
  ]
}
POST/steam-gifts/order

invite_url, sub_id, app_id, region из каталога.

Запрос

curl -s -X POST "https://api.fzr.cards/api/v2/steam-gifts/order" \
    -H "X-API-Key: YOUR_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"invite_url":"https://s.team/p/xxx/yyy","sub_id":54029,"app_id":730,"region":"CIS"}'

Ответ

{
  "ok": true,
  "order": {
    "id": "ord-9001",
    "kind": "gift_card",
    "status": "processing"
  }
}

Telegram

GET /telegram/stars и GET /telegram/premium — котировки. Покупки: POST /telegram/stars/buy (telegram_username, quantity) и POST /telegram/premium/buy (telegram_username, months: 3, 6 или 12).

GET/telegram/stars

price_per_star, min/max quantity, время котировки.

Запрос

curl -s "https://api.fzr.cards/api/v2/telegram/stars" \
    -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "kind": "telegram_stars",
  "price_per_star": "0.0150000",
  "min_amount": 50,
  "max_amount": 10000,
  "rates_updated_at": "2026-05-03T00:00:00.000Z"
}
GET/telegram/premium

plans[] с months 3, 6 или 12 и price_usd.

Запрос

curl -s "https://api.fzr.cards/api/v2/telegram/premium" \
    -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "kind": "telegram_premium",
  "plans": [
    { "months": 3, "price_usd": "12.0000" },
    { "months": 6, "price_usd": "22.0000" },
    { "months": 12, "price_usd": "40.0000" }
  ],
  "rates_updated_at": "2026-05-03T00:00:00.000Z"
}
POST/telegram/stars/buy

telegram_username, quantity (50–10000).

Запрос

curl -s -X POST "https://api.fzr.cards/api/v2/telegram/stars/buy" \
    -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"telegram_username":"@durov","quantity":100}'

Ответ

{
  "ok": true,
  "order": {
    "id": "ord-9001",
    "kind": "gift_card",
    "status": "processing"
  }
}
POST/telegram/premium/buy

telegram_username, months (3, 6 или 12).

Запрос

curl -s -X POST "https://api.fzr.cards/api/v2/telegram/premium/buy" \
    -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"telegram_username":"@durov","months":12}'

Ответ

{
  "ok": true,
  "order": {
    "id": "ord-9001",
    "kind": "gift_card",
    "status": "processing"
  }
}

Ручные услуги

Выдача оператором: GET /manual-services, GET /manual-services/:id/offers, POST /manual-services/order. Чат: GET/POST /manual-services/orders/:orderId/chat (POST — multipart, см. OpenAPI).

GET/manual-services

Категории для вашего ключа (id — manualServiceId в пути offers).

Запрос

curl -s "https://api.fzr.cards/api/v2/manual-services" \
    -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "items": [
    {
      "id": "ms_cat_1",
      "name": "Custom service",
      "kind": "manual_transfer",
      "chat": false,
      "info": ""
    }
  ]
}
GET/manual-services/:manualServiceId/offers

Позиции: id, price_usd, delivery_minutes; для replenishment могут быть fields.

Запрос

curl -s "https://api.fzr.cards/api/v2/manual-services/ms_cat_1/offers" \
    -H "X-API-Key: YOUR_API_KEY"

Ответ

{
  "ok": true,
  "manual_service_id": "ms_cat_1",
  "category": { "id": "ms_cat_1", "name": "Custom service", "kind": "manual_transfer", "chat": false },
  "items": [
    {
      "id": "ms_offer_1",
      "name": "Express",
      "price_usd": "25.0000",
      "delivery_minutes": 60
    }
  ],
  "info": ""
}
POST/manual-services/order

manual_service_id и product_id из списков; для replenishment — fields.

Запрос

curl -s -X POST "https://api.fzr.cards/api/v2/manual-services/order" \
    -H "X-API-Key: YOUR_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"manual_service_id":"ms_cat_1","product_id":"ms_offer_1"}'

Ответ

{
  "ok": true,
  "order_id": "ord-9003",
  "kind": "manual_transfer",
  "status": "created",
  "category_id": "ms_cat_1",
  "category_name": "Custom service",
  "product_id": "ms_offer_1",
  "product_name": "Express",
  "price_usd": "25.0000",
  "deadline_at": null,
  "chat_required": false,
  "chat_status": "not_required"
}

Публичные методы сайта (без ключа)

Те же /api/v2 для маркетинга и регистрации. Пример: GET /website/subscription-prices — публичные цены в USD. Регистрация, OTP, сброс пароля и рефералы описаны в OpenAPI для встройки сайта — для автоматизации каталога не обязательны.

GET/website/subscription-prices

Публичные цены для сайта — без авторизации.

Запрос

curl -s "https://api.fzr.cards/api/v2/website/subscription-prices"

Ответ

{
  "ok": true,
  "prices": { "bronze": 29, "silver": 49, "gold": 99 }
}

Исходящие вебхуки

Уведомления об изменении статуса заказа настраиваются в панели реселлера — не через публичный /me/webhook. Формат тела, заголовок подписи и примеры проверки — на отдельной странице ниже.

Руководство по вебхукам

Лимиты частоты запросов

Лимиты применяются по категории операции (чтение каталога, создание заказа, статус заказа, аккаунт, платежи) — чтобы polling статуса не съедал бюджет создания новых заказов и наоборот. Каждая категория имеет собственный sliding-window счётчик, ключом которого служит ваш API-ключ (или IP, если ключа ещё нет — например на логине). При превышении лимита одной категории только она возвращает HTTP 429, остальные остаются доступны.

КатегорияМаршрутыЛимит
Чтение каталогаGET /catalog, /catalog-categories, /prices, /skus120 / min
Создание заказаPOST /order, /topup, /gift-cards, /game-keys, /steam-gifts/order60 / min
Статус заказаGET /order/{id}, /orders/{id} (polling)120 / min
АккаунтGET /me, /balance, /subscription, /transactions30 / min
ПлатежиPOST /payments (создание / верификация)15 / min
Прочиевсё, что не подошло выше120 / min
ЛогинPOST /partner/login10 / 15 min

Все счётчики ключуются по API-ключу при его наличии, иначе по IP отправителя (для login). Login-попытки используют отдельное 15-минутное окно и считаются только по IP.

При HTTP 429 в ответе приходит Retry-After в секундах. Воспринимайте это как подсказку, а не как фиксированный sleep — рекомендуемый паттерн:

  • Спите не менее Retry-After секунд перед повтором.
  • Добавляйте небольшой случайный джиттер (±15 %), чтобы воркеры не выстроились в следующее окно лимита одновременно.
  • Если 429 приходят систематически — очередь / throttle на исходящих, а не плотные ретраи. Каталог кешируйте локально (TTL 5–15 минут), а не перетягивайте перед каждым заказом.
Готовый retry-loop в API Cookbook

HTTP-коды

Распространённые ответы (полный список по маршрутам — в OpenAPI).

КодЗначение
400Валидация или бизнес-правило; детали в теле.
401Нет или неверный API-ключ.
403Аккаунт заблокирован или продукт/метод недоступен ключу.
404Неизвестный ресурс или маршрут.
409Конфликт (дубликат, недопустимое состояние).
429Слишком много запросов — снизьте частоту.
5xxОшибка инфраструктуры или провайдера — осторожные повторы; поддержка или статус.

Начать

Откройте бесплатный триал и получите ключ в панели.