API Reference
Один HTTP-префикс /api/v2: мобильные пополнения, подарочные карты, ключи, кошелёк и подарки Steam, Telegram Stars и Premium, ручная выдача, баланс и биллинг.
https://api.fzr.cards/api/v2X-API-Key: YOUR_API_KEYХраните ключи в секрете. Каждый запрос выполняется от вашего аккаунта реселлера.
Тот же ключ можно передать в заголовке Authorization: Bearer YOUR_API_KEY (альтернатива X-API-Key).
Здесь обзор типовых сценариев. Точные поля и коды ответов — в публичной спецификации (те же пути, что в проде).
Быстрый старт
Создайте ключ в панели (Профиль). Вызовите /me с этим ключом:
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"
}Соглашения
Успешные ответы содержат "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.
Типичное тело ошибки
{
"ok": false,
"error": "message for humans",
"code": "optional_machine_code"
}Группы методов
Аккаунт
Профиль и кошелёк: GET /me, GET /balance, GET /transactions и GET /transactions/:transactionId (tx + цифры).
/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"
}/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"
}/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
}/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 после оплаты в приложении.
/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
}
]
}/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"
}
}/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"
}
}/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 — продление и смена тарифа.
/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"
}/subscription/plansbronze/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" }
]
}/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"
}/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"
}/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"
}/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-[цифры].
/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
}/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.
/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
}
}/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"
}
]
}/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"
}
}/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" }
]
}
]
}/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.
/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
}
}/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
}
]
}/giftcards/ordercategory_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 в ответе с большой буквы по историческим причинам.
/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
}
}/gamekeys/keysSKU для 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
}
]
}/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" }]
}/gamekeys/ordergame_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.
/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"
}/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"
}/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
}/steam-topup/ordersteamLogin, 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"
}
}/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 }
}/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" }]
}
]
}/steam-gifts/orderinvite_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).
/telegram/starsprice_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"
}/telegram/premiumplans[] с 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"
}/telegram/stars/buytelegram_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"
}
}/telegram/premium/buytelegram_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).
/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": ""
}
]
}/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": ""
}/manual-services/ordermanual_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 для встройки сайта — для автоматизации каталога не обязательны.
/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, /skus | 120 / min |
| Создание заказа | POST /order, /topup, /gift-cards, /game-keys, /steam-gifts/order | 60 / min |
| Статус заказа | GET /order/{id}, /orders/{id} (polling) | 120 / min |
| Аккаунт | GET /me, /balance, /subscription, /transactions | 30 / min |
| Платежи | POST /payments (создание / верификация) | 15 / min |
| Прочие | всё, что не подошло выше | 120 / min |
| Логин | POST /partner/login | 10 / 15 min |
Все счётчики ключуются по API-ключу при его наличии, иначе по IP отправителя (для login). Login-попытки используют отдельное 15-минутное окно и считаются только по IP.
При HTTP 429 в ответе приходит Retry-After в секундах. Воспринимайте это как подсказку, а не как фиксированный sleep — рекомендуемый паттерн:
- Спите не менее Retry-After секунд перед повтором.
- Добавляйте небольшой случайный джиттер (±15 %), чтобы воркеры не выстроились в следующее окно лимита одновременно.
- Если 429 приходят систематически — очередь / throttle на исходящих, а не плотные ретраи. Каталог кешируйте локально (TTL 5–15 минут), а не перетягивайте перед каждым заказом.
HTTP-коды
Распространённые ответы (полный список по маршрутам — в OpenAPI).
| Код | Значение |
|---|---|
| 400 | Валидация или бизнес-правило; детали в теле. |
| 401 | Нет или неверный API-ключ. |
| 403 | Аккаунт заблокирован или продукт/метод недоступен ключу. |
| 404 | Неизвестный ресурс или маршрут. |
| 409 | Конфликт (дубликат, недопустимое состояние). |
| 429 | Слишком много запросов — снизьте частоту. |
| 5xx | Ошибка инфраструктуры или провайдера — осторожные повторы; поддержка или статус. |