Reseller API
HTTP API, чтобы заказывать выдачу Flash-токенов из своего бота или сайта. После оплаты в магазин токены уходят на адрес получателя.
Саморегистрации нет. Ключ выдаёт администратор магазина и присылает его вам лично.
Базовый адрес
Все методы реселлера живут на домене магазина в /api/v1.
https://flashcryptoshop.com/api/v1
Доступ
Все методы кроме GET /api/v1 требуют ключ. Заголовок Authorization: Bearer fcs_… или X-Api-Key: fcs_…. CORS: * для GET, POST, OPTIONS. Тела — JSON, Content-Type: application/json. Цены в каталоге — те, что заданы для ключа (discount_percent и wholesaleTiers). Authorization: Bearer fcs_…
Как проходит продажа
- GET catalog — product, flash_token, minTokens, wholesaleTiers, payMethods.
- POST orders с address клиента и token_amount. Можно сразу pay_currency.
- Клиенту показываете оплату у себя. В магазин платите wallet+amount (ончейн) или invoice_url.
- TON / USDT (TON): memo = order_id, иначе платёж не засчитается.
- POST …/check после оплаты. Токены уходят на address. Дальше GET заказа или webhook.
Общие ошибки
Тело ошибки всегда { "error": "…" }. Ниже — коды, которые бывают на любом защищённом методе.
401 Missing or invalid API key — Нет ключа, не fcs_… или неверный секрет.
401 Invalid API key — Хеш ключа не найден.
403 API key is disabled — Ключ выключен в админке.
429 Too many requests — Лимит: каталог/чтение 120/мин, создание и pay/invoice 30/мин, check 40/мин.
{ "error": "Missing or invalid API key" }Объект заказа
Так выглядит заказ в create/get/pay/invoice/check (плюс invoice_url на create/pay/invoice).
| Поле | Тип | Нужн. | Описание |
|---|---|---|---|
order_id | string | да | ID заказа, он же memo для TON. |
status | string | да | waiting | on_hold | sending | paid | completed | expired | cancelled | send_failed |
product | string | нет | trust, metamask, safepal, binance, bybit, okx… |
flash_token | string | нет | id из каталога, если у продукта несколько токенов. |
address | string | да | Адрес выдачи клиента. |
token_amount | number | да | Сколько Flash-токенов отправить. |
usd_value | number | да | Оптовая сумма к оплате в магазин (после скидки ключа). |
retail_usd_value | number | да | Витринная цена без скидки реселлера. |
discount_percent | number | да | Скидка ключа, 0 если нет. |
pay_currency | string|null | нет | Способ оплаты: ton, usdt, bnb, usdt_bsc, eth, usdt_erc20, usdt_base, sol, usdt_sol, trx, usdt_trx, cryptobot, stars, lzt, xrocket. null пока не выбран. |
payment_selected | boolean | да | Выбрана ли валюта оплаты. |
wallet | string|null | нет | Кошелёк магазина для ончейн-оплаты. null у инвойсов. |
amount | number|null | нет | Сколько отправить в pay_currency (TON/USDT/BNB/…). |
amount_stars | number|null | нет | Сумма в Stars, если pay_currency=stars. |
amount_rub | number|null | нет | Сумма в ₽ для LZT. |
memo | string | да | Всегда равен order_id. Для TON и USDT (TON) в комментарий платежа. |
tx_hash | string|null | нет | Хеш выдачи клиенту после оплаты. |
send_error | string|null | нет | Текст ошибки выдачи. |
client_order_id | string|null | нет | Ваш id продажи, если передавали. |
invoice_url | string|null | нет | Ссылка CryptoBot / Stars / LZT / xRocket. |
invoice | object|null | нет | Сырой ответ инвойса (pay_url, stars_amount…). |
created_at | string | нет | ISO-время создания. |
Методы
GET
/api/v1
Карта API. Ключ не нужен.
GET
/api/v1/catalog
Товары, flash-токены, пакеты и оптовые цены для вашего ключа.
POST
/api/v1/orders
Создать заказ. Можно сразу передать pay_currency — тогда в ответе уже wallet/amount или invoice_url.
GET
/api/v1/orders
Последние 50 заказов этого ключа, новые сверху.
GET
/api/v1/orders/{order_id}
Один заказ. {order_id} — как FT-…. Чужой заказ этого ключа не отдаётся.
POST
/api/v1/orders/{order_id}/pay
Выбрать или сменить валюту, пока заказ ещё можно оплатить.
POST
/api/v1/orders/{order_id}/invoice
Повторно получить ссылку инвойса. Тела нет. Сначала нужен pay_currency из {cryptobot, stars, lzt, xrocket}.
POST
/api/v1/orders/{order_id}/check
Проверить оплату на сети/инвойсе и запустить выдачу. Тела и query нет.
Методы подробно
GET
/api/v1
без ключа
Карта API. Ключ не нужен.
Query
нет
Тело JSON
нет
Успех 200
JSON с version, docs, auth и списком path.
Ошибки
GET
/api/v1/catalog
Товары, flash-токены, пакеты и оптовые цены для вашего ключа.
Query
нет
Тело JSON
нет
Успех 200
discount_percent, products[], payMethods[]. У flash-токена: id, addressType, minTokens, tiers и wholesaleTiers (цена для этого ключа).
Пример ответа
{
"discount_percent": 25,
"products": [
{
"productKey": "trust",
"slug": "trust",
"name": "Trust Wallet USDT",
"shortName": "Trust Wallet",
"network": "BNB Smart Chain",
"addressType": "bsc",
"placeholder": "0x...",
"needsFlash": true,
"flashTokens": [
{
"id": "usdt_sol_2",
"label": "USDT SOL",
"ticker": "USDT",
"addressType": "solana",
"networkShort": "Solana",
"chain": "solana",
"minTokens": 500,
"minUsd": 7.5,
"wholesaleMinUsd": 5.625,
"tiers": [{ "tokenAmount": 1000, "priceUsd": 15, "label": null }],
"wholesaleTiers": [{ "tokenAmount": 1000, "priceUsd": 11.25, "label": null }],
"percentBands": null,
"unavailable": false
}
]
}
],
"payMethods": [
{ "id": "ton", "label": "TON", "network": "TON", "invoice": false },
{ "id": "cryptobot", "label": "CryptoBot", "network": "CryptoBot", "invoice": true }
]
}Ошибки
401 Missing or invalid API key
403 API key is disabled
429 Too many requests
POST
/api/v1/orders
Создать заказ. Можно сразу передать pay_currency — тогда в ответе уже wallet/amount или invoice_url.
Query
нет
Тело JSON
| Поле | Тип | Нужн. | Описание |
|---|---|---|---|
product | string | да | Ключ из каталога: trust, metamask, safepal, binance, bybit, okx… |
address | string | да | Кошелёк клиента под addressType товара/токена. Синоним: bsc_address. |
token_amount | number | да | Целое число токенов, не меньше minTokens из каталога. |
flash_token | string | нет | Обязателен, если needsFlash=true (Trust / MetaMask / SafePal). id из catalog.flashTokens. |
pay_currency | string | нет | Сразу выбрать оплату: ton, usdt, bnb, usdt_bsc, eth, usdt_erc20, usdt_base, sol, usdt_sol, trx, usdt_trx, cryptobot, stars, lzt, xrocket. Если нет — заказ waiting без wallet, потом POST …/pay. |
client_order_id | string | нет | Ваш уникальный id, до 64 символов. Повтор с тем же ключом → 409. |
callback_url | string | нет | HTTPS webhook только на этот заказ. Иначе берётся URL с ключа. |
lang | string | нет | ru | en — язык уведомлений, если есть. |
amount | number | нет | Альтернатива token_amount: сумма в USD витрины (редко нужно). |
Успех 201
Объект заказа. Если pay_currency инвойсный — invoice_url. Для TON/USDT(TON) платите на wallet с memo=order_id.
Пример ответа
{
"order_id": "FT-XXXXEXAMPLE",
"status": "waiting",
"product": "trust",
"flash_token": "usdt_sol_2",
"address": "CLIENT_WALLET",
"token_amount": 1000,
"usd_value": 11.25,
"retail_usd_value": 15,
"discount_percent": 25,
"pay_currency": "ton",
"pay_network": "ton",
"payment_selected": true,
"wallet": "UQ…",
"amount": 7.5,
"amount_stars": null,
"amount_rub": null,
"memo": "FT-XXXXEXAMPLE",
"tx_hash": null,
"send_error": null,
"client_order_id": "my-sale-1",
"created_at": "2026-09-22T00:00:00.000Z",
"invoice_url": null,
"invoice": null
}Ошибки
400 Invalid flash_token
400 Invalid BSC address / Invalid Solana address / Invalid TON address / Invalid Tron address
400 Minimum order is N tokens
400 Invalid or disabled pay_currency — Заказ при этом уже создан, в теле есть order_id.
403 Token temporarily unavailable
409 client_order_id already used — В теле order_id старого заказа.
429 Too many requests
GET
/api/v1/orders
Последние 50 заказов этого ключа, новые сверху.
Query
нет
Тело JSON
нет
Успех 200
{ "orders": [ …объект заказа ] }. Query-параметров нет, пагинации нет.
Ошибки
401 Missing or invalid API key
429 Too many requests
GET
/api/v1/orders/{order_id}
Один заказ. {order_id} — как FT-…. Чужой заказ этого ключа не отдаётся.
Query
нет
Тело JSON
нет
Успех 200
Объект заказа без обёртки.
Пример ответа
{
"order_id": "FT-XXXXEXAMPLE",
"status": "waiting",
"product": "trust",
"flash_token": "usdt_sol_2",
"address": "CLIENT_WALLET",
"token_amount": 1000,
"usd_value": 11.25,
"retail_usd_value": 15,
"discount_percent": 25,
"pay_currency": "ton",
"pay_network": "ton",
"payment_selected": true,
"wallet": "UQ…",
"amount": 7.5,
"amount_stars": null,
"amount_rub": null,
"memo": "FT-XXXXEXAMPLE",
"tx_hash": null,
"send_error": null,
"client_order_id": "my-sale-1",
"created_at": "2026-09-22T00:00:00.000Z",
"invoice_url": null,
"invoice": null
}Ошибки
404 Order not found
429 Too many requests
POST
/api/v1/orders/{order_id}/pay
Выбрать или сменить валюту, пока заказ ещё можно оплатить.
Query
нет
Тело JSON
| Поле | Тип | Нужн. | Описание |
|---|---|---|---|
pay_currency | string | да | Один из: ton, usdt, bnb, usdt_bsc, eth, usdt_erc20, usdt_base, sol, usdt_sol, trx, usdt_trx, cryptobot, stars, lzt, xrocket. Должен быть включён в магазине. |
Успех 200
Обновлённый заказ + invoice_url для cryptobot/stars/lzt/xrocket.
Ошибки
400 Missing pay_currency
400 Invalid or disabled pay_currency
400 Order is not payable
404 Order not found
429 Too many requests
POST
/api/v1/orders/{order_id}/invoice
Повторно получить ссылку инвойса. Тела нет. Сначала нужен pay_currency из {cryptobot, stars, lzt, xrocket}.
Query
нет
Тело JSON
нет
Успех 200
Заказ + invoice_url + invoice (например { pay_url, stars_amount }).
Ошибки
400 Order is not payable
400 Select an invoice pay_currency first (cryptobot, stars, lzt, xrocket)
400 Invoice failed / CryptoPay is not configured / …
404 Order not found
POST
/api/v1/orders/{order_id}/check
Проверить оплату на сети/инвойсе и запустить выдачу. Тела и query нет.
Query
нет
Тело JSON
нет
Успех 200
Объект заказа + verification (служебный статус проверки). Если paid — токены уходят на address, придёт webhook order.paid.
Ошибки
404 Order not found
429 Too many requests
4xx/5xx код проверки, если платёж не найден — смотрите status заказа (waiting / expired).
Примеры curl
Каталог
curl -s https://flashcryptoshop.com/api/v1/catalog \ -H "Authorization: Bearer fcs_YOUR_KEY"
Создать заказ
curl -s -X POST https://flashcryptoshop.com/api/v1/orders \
-H "Authorization: Bearer fcs_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"product": "trust",
"flash_token": "usdt_sol_2",
"token_amount": 1000,
"address": "CLIENT_WALLET_ADDRESS",
"pay_currency": "ton",
"client_order_id": "my-sale-1"
}'Список заказов
curl -s https://flashcryptoshop.com/api/v1/orders \ -H "Authorization: Bearer fcs_YOUR_KEY"
Один заказ
curl -s https://flashcryptoshop.com/api/v1/orders/FT-XXXX \ -H "Authorization: Bearer fcs_YOUR_KEY"
Выбрать оплату
curl -s -X POST https://flashcryptoshop.com/api/v1/orders/FT-XXXX/pay \
-H "Authorization: Bearer fcs_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"pay_currency": "cryptobot"}'Инвойс
curl -s -X POST https://flashcryptoshop.com/api/v1/orders/FT-XXXX/invoice \ -H "Authorization: Bearer fcs_YOUR_KEY"
Проверить оплату
curl -s -X POST https://flashcryptoshop.com/api/v1/orders/FT-XXXX/check \ -H "Authorization: Bearer fcs_YOUR_KEY"
Webhook
После смены статуса магазин шлёт POST JSON на callback_url заказа или ключа (https). Повтор той же пары order_id+event не шлётся. Таймаут 8 с.
Заголовки
| Поле | Тип | Нужн. | Описание |
|---|---|---|---|
Content-Type | application/json | да | Тело — JSON без пробелов как при подписи. |
X-Reseller-Signature | hex | да | HMAC-SHA256(webhook_secret, raw body), hex. |
X-Reseller-Event | string | да | order.paid | order.send_failed | order.expired |
Тело JSON
| Поле | Тип | Нужн. | Описание |
|---|---|---|---|
event | string | да | order.paid — оплата/выдача; order.send_failed — платёж есть, выдача упала; order.expired — слот истёк. |
order_id | string | да | ID заказа. |
status | string | да | Текущий статус. |
product | string | нет | Товар. |
flash_token | string | нет | Flash id. |
token_amount | number | нет | Сколько токенов. |
usd_value | number | нет | Оптовая сумма. |
tx_hash | string|null | нет | Хеш выдачи. |
send_error | string|null | нет | Ошибка выдачи. |
client_order_id | string|null | нет | Ваш id. |
address | string | нет | Адрес клиента. |
{
"event": "order.paid",
"order_id": "FT-XXXXEXAMPLE",
"status": "paid",
"product": "trust",
"flash_token": "usdt_sol_2",
"token_amount": 1000,
"usd_value": 11.25,
"tx_hash": "…",
"send_error": null,
"client_order_id": "my-sale-1",
"address": "CLIENT_WALLET"
}Нужен ключ?
Напишите в поддержку магазина и попросите ключ реселлера. Ключ держите в секрете: им можно создавать выдачи от вашего имени.
