Твой сервис.
Наш каталог.
Подключай цифровые товары к своему сайту,
боту или системе продаж через один API.
# Получить каталог аренды
curl --get "https://kodario.pro/api/v1/rental/products" \
--data-urlencode "currency=USD" \
--data-urlencode "available_only=true" \
-H "X-API-Key: $KODARIO_API_KEY"От ключа к первому запросу
Войди в аккаунт, создай ключ ниже и передавай его в заголовке каждого запроса. API предназначен для подключения с сервера — ключ не должен попадать в код публичной страницы.
https://kodario.pro/api/v1- 01Создай ключДо 5 активных ключей на аккаунт.
- 02Прочитай каталогОбрабатывай все страницы ответа.
- 03Обновляй наличиеУчитывай available и дату проверки.
Каталог всех опубликованных типов товаров, варианты и параметры, предварительный расчёт, точные котировки, покупка с баланса, история заказов и транзакций, выдача цифровых товаров, логины аренды и Steam Guard. Котировка ничего не покупает и не резервирует товар. Покупку создаёт только POST /orders.
Твои API-ключи
Отдельный ключ для каждого проекта. Полный ключ показывается только при создании. При смене пароля аккаунта все ключи отзываются. По умолчанию ключ читает только каталог. Чтобы покупать и получать данные заказов, при создании отметь «Разрешить покупки». Уже выданные ключи не получают доступ к балансу автоматически.
Проверяем вход в аккаунт…
Каталог и наличие
API возвращает опубликованные товары. Недоступные позиции остаются с available: false, чтобы ты мог скрывать их у себя. Скрытые вручную, удалённые и ожидающие модерации товары не выдаются.
GET/productsВсе цифровые товары
Параметры: currency — USD по умолчанию; остальные коды — из /currencies; limit — 1–100, по умолчанию 100; offset — с 0; q — поиск по названию; category_id — точная категория; available_only=true — только доступные.
curl --get "https://kodario.pro/api/v1/products" \
--data-urlencode "currency=RUB" \
--data-urlencode "limit=100" \
--data-urlencode "offset=0" \
-H "X-API-Key: $KODARIO_API_KEY"Ответ содержит data, total, limit и offset. Увеличивай offset на limit, пока не получишь все товары.
{
"data": [{
"id": 123,
"title": "Название игры",
"type": "rental",
"currency": "USD",
"price_from_minor": 31,
"available": true,
"rental_plans": [
{ "days": 1, "price_minor": 31 },
{ "days": 7, "price_minor": 137 },
{ "days": 30, "price_minor": 450 }
],
"inventory_checked_at": "2026-09-22T12:00:00Z"
}],
"total": 1, "limit": 100, "offset": 0,
"currency": "USD", "inventory_refresh_seconds": 600
}Денежные поля в USD передаются в центах и допускают 2 знака после запятой: 6.25 означает 0.0625 USD. При оформлении передавайте полученную цену без округления. price_from_minor — минимальная цена пакета аренды либо минимальная цена цифрового товара. Для пополнений с произвольной суммой это ориентир за единицу price_unit, а не итог к оплате. Поля kind и requires_options показывают способ оформления: rental, shop, recharge, gift, skins или digital. Полная схема полей есть в OpenAPI. Набор сроков у разных игр может отличаться.
GET/rental/productsТолько аренда аккаунтов
Те же параметры и структура ответа, что у /products. Возвращает товары с пакетами аренды.
curl "https://kodario.pro/api/v1/rental/products?available_only=true" \
-H "X-API-Key: $KODARIO_API_KEY"GET/products/{id}Один товар
Используй id из каталога. Параметр currency задаёт валюту. Ответ — объект товара. Недоступный товар возвращается с available=false, скрытый или удалённый — 404.
curl "https://kodario.pro/api/v1/products/123?currency=USD" \
-H "X-API-Key: $KODARIO_API_KEY"GET/categoriesКатегории и подкатегории
Массив data: id, parent_id, title, icon, rank, product_count (включая подкатегории) и direct_product_count. Пустые категории не возвращаются. Для фильтра товаров передавай точный id категории.
curl "https://kodario.pro/api/v1/categories" \
-H "X-API-Key: $KODARIO_API_KEY"Цена без догадок
Денежные поля USD передаются в центах с точностью до двух дробных знаков: 6.25 = 0.0625 USD; 100 = 1 USD. При покупке передавай полученную цену без округления. API возвращает итоговую цену KODARIO с действующей наценкой и настройками товара. Расчёты, баланс и списания всегда в USD; остальные валюты — только для отображения.
POST/rental/calculate-priceЦена аренды
Передай product_id, days (1, 7 или 30), quantity (1–10, по умолчанию 1) и currency (USD по умолчанию). Срок должен присутствовать в rental_plans выбранного товара.
curl "https://kodario.pro/api/v1/rental/calculate-price" \
-H "X-API-Key: $KODARIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"product_id":123,"days":7,"quantity":1,"currency":"USD"}'{
"product_id": 123, "days": 7, "quantity": 1,
"currency": "USD", "unit_price_minor": 137,
"total_minor": 137, "available": true,
"reservation": false,
"calculated_at": "2026-09-22T12:00:00Z"
}Цена актуальна на calculated_at. Запрос ничего не покупает. При недоступности товара возвращается 409 product_unavailable.
POST/calculate-priceЛюбой цифровой товар
Для обычного товара days=0, для аренды — доступный срок. У товара с вариантами передай offer из /products/{id}/options. Для произвольного пополнения: offer="quantity" и params.Quantity строкой. Параметр quantity (1–10) — число одинаковых единиц, а не сумма пополнения. Это предварительная оценка: перед оплатой обязателен /quotes.
curl "https://kodario.pro/api/v1/calculate-price" \
-H "X-API-Key: $KODARIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"product_id":123,"quantity":1,"currency":"RUB"}'От выбора до получения товара
Используй ключ с разрешением покупок. Он даёт доступ к балансу, истории и данным выдачи только владельца ключа. Все действия выполняются на твоём сервере.
GET/products/{id}/optionsНоминалы, регионы и поля получателя
options: false означает обычный товар или аренду. Иначе ответ содержит доступные offers и обязательные params. Копируй ключи полей с учётом регистра: например, Account, Quantity, invite или trade_link. Для Select используй только options[].value. Минимум пополнения приходит в minimum_quantity; сумма выражена в unit. Для Steam соблюдай steam_invite_only: в некоторых товарах нужна именно быстрая ссылка-приглашение.
POST/quotesПроверка перед покупкой
Для обычного товара передай product_id; для аренды добавь days. Для товара с параметрами добавь offer и params из options. Запрос не списывает деньги. Следующий пример условный: используй ID и параметры реального товара.
curl "https://kodario.pro/api/v1/quotes" \
-H "X-API-Key: $KODARIO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: quote-stars-00000001" \
-d '{"product_id":123,"offer":"quantity","params":{"Quantity":"100","Account":"recipient"}}'200 / ready: сохрани product_id, days, price_minor и quote_id. У простых товаров и аренды quote_id пустой. 202 / pending: проверка идёт; вызывай GET /quotes/{quote_id} через число секунд из Retry-After. До ready покупку не отправляй. Проверки с параметрами ограничены 30 новыми котировками за 15 минут на аккаунт; повтор с прежним ключом не создаёт новую. Учитывай expires_at.
POST/ordersОплатить с USD-баланса
Один запрос покупает одну позицию. Передавай точную цену из ready-котировки. У товара с параметрами quote_id обязателен; у обычного товара и аренды поле пропускается.
curl "https://kodario.pro/api/v1/orders" \
-H "X-API-Key: $KODARIO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-stars-00000001" \
-d '{"product_id":123,"days":0,"currency":"USD","price_minor":163.24,"quote_id":"QUOTE_ID_FROM_READY_RESPONSE"}'201: новый заказ. 200: повтор возвращает прежний заказ. При потере ответа повтори тот же JSON с тем же Idempotency-Key — второго списания не будет, в том числе после истечения котировки. Для новой покупки нужен новый ключ. Допустимы 16–128 латинских букв, цифр и символов _.:-; удобно использовать UUID. Цена изменилась — получи новую котировку и согласуй её перед новым запросом.
GET/orders/{id}Статус и выдача
status=paid подтверждает оплату. Выдача готова при fulfillment_status=fulfilled. Pending означает обработку, а не повод покупать повторно. Для возврата проверь refunded_at и историю транзакций. Пустой fulfillment_status возможен у товара с ручной выдачей.
Цифровые коды: /orders/{id}/delivery. У выполненного пополнения, доставки игры Steam или скина codes может быть пустым — операция уже выполнена на аккаунте получателя. Аренда: /orders/{id}/credentials возвращает steam_login и steam_password; /orders/{id}/code — Steam Guard и expires_in. Данные аренды доступны только в течение оплаченного срока. До выдачи или после возврата delivery возвращает 404: ориентируйся на статус заказа.
Список всех покупок: GET /orders?limit=100&offset=0. Ответ: purchases, total, limit, offset. Переходи по страницам до total; старые покупки сохраняются при скрытии товара.
GET/balanceКошелёк и транзакции
Ответ: currency=USD и balance_minor. /transactions?filter=all&limit=100&offset=0 возвращает пополнения, расходы и возвраты; фильтры: all, deposits, expenses, refunds. API не начисляет средства на баланс. Используй существующий способ пополнения аккаунта.
GET/service-topupsВыгодные пополнения
Популярные сервисы и сравнимые варианты в USD. Для фиксированного номинала используй product_id и key конкретного offers[]. Для Steam и Stars с произвольным количеством запроси /service-topups/estimate?product_id=123&quantity=100. Ответ выбирает предложение для указанного количества. В /quotes передай product_id из ответа и заново получи options выбранного товара.
Аккаунт и валюты
GET/accountПроверить подключение
Возвращает customer_id владельца ключа, api_version, capabilities, rental_days и purchases_enabled. Персональные данные аккаунта и ключи других проектов не выдаются.
curl "https://kodario.pro/api/v1/account" \
-H "X-API-Key: $KODARIO_API_KEY"GET/currenciesВалюты и курс
Возвращает base=USD, settlement_currency=USD и актуальный список кодов currencies. Параметр ?currency=EUR возвращает курс только выбранной валюты в поле rate. RUB берётся из ЦБ РФ, остальные справочные валюты — из ExchangeRate-API. Дата и источник — rate_date и rate_source. Без доступного курса валюта не подменяется. ЦБ РФ · ExchangeRate-API.
curl "https://kodario.pro/api/v1/currencies" \
-H "X-API-Key: $KODARIO_API_KEY"События на твой сервер
Вебхук отправляет изменения аккаунта на один HTTPS-адрес: создание и обновление заказов, результат проверки стоимости и изменения USD-баланса. Нужен ключ с разрешением покупок. События относятся ко всем операциям этого аккаунта, включая покупки на сайте. Старые операции до подключения не отправляются.
PUT/webhookПодключить уведомления
curl -X PUT "https://kodario.pro/api/v1/webhook" \
-H "X-API-Key: $KODARIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://your-app.example/hooks/kodario","enabled":true,"events":["order.created","order.updated","quote.updated","balance.updated"]}'В первом ответе сохрани secret на своём сервере: повторно он не показывается. GET /webhook возвращает настройки без секрета. active учитывает действительность управляющего ключа. Повтор одинакового PUT ничего не отменяет; изменение адреса, списка событий, enabled или управляющего ключа отменяет старую очередь. Чтобы привязать вебхук к новому ключу после отзыва прежнего, повтори PUT с новым ключом.
Разрешены только публичные HTTPS-адреса, порт 443. Перенаправления и адреса внутренних сетей заблокированы. Отзыв управляющего ключа и смена пароля прекращают новые доставки; уже отправленный запрос отозвать невозможно.
| Событие | Содержимое data |
|---|---|
| order.created | order_id, product_id, сумма, остаток баланса после покупки, статус и статус выдачи. |
| order.updated | Статус выдачи, возврат, отмена или изменение статуса заказа; для аренды — время начала и окончания. |
| quote.updated | quote_id, product_id, ready или failed, price_minor и expires_at. Только проверки с сохранённым quote_id. |
| balance.updated | currency=USD и balance_minor после пополнения, покупки или возврата. |
| webhook.test | Проверка подключения, без покупки и списания денег. |
У каждого события есть id, type, api_version, created_at и data. Денежные значения — USD-центы с двумя дробными знаками. Уведомление не содержит коды товаров, пароли и реквизиты получателя: после готовности используй защищённые методы выдачи.
HMACX-Kodario-SignatureПроверить подлинность
Заголовки: X-Kodario-Event-Id, X-Kodario-Timestamp (Unix, секунды) и X-Kodario-Signature: v1=.... Подпись: HMAC-SHA256 от timestamp + "." + исходные байты тела; ключ — вся строка secret, включая kwh_. Проверяй до разбора JSON.
import { createHmac, timingSafeEqual } from 'node:crypto';
function validSignature(rawBody, headers, secret) {
const timestamp = String(headers['x-kodario-timestamp'] || '');
const signature = String(headers['x-kodario-signature'] || '');
if (!/^\d{1,12}$/.test(timestamp) ||
Math.abs(Date.now() / 1000 - Number(timestamp)) > 300 ||
!/^v1=[a-f0-9]{64}$/.test(signature)) return false;
const expected = createHmac('sha256', secret)
.update(timestamp + '.').update(rawBody).digest();
const received = Buffer.from(signature.slice(3), 'hex');
return timingSafeEqual(expected, received);
}rawBody — Buffer исходного запроса, а не повторный JSON.stringify. После проверки сверяй event.id с заголовком и атомарно сохраняй событие с уникальным id. Повтор уже принятого события тоже подтверждай 2xx. Возвращай 2xx после надёжного сохранения, до тяжёлой обработки, в пределах 12 секунд. Порядок доставки не гарантирован: при необходимости получи текущее состояние заказа через API.
POST/webhook/testПроверить доставку
curl -X POST "https://kodario.pro/api/v1/webhook/test" \
-H "X-API-Key: $KODARIO_API_KEY" \
-H "Idempotency-Key: webhook-test-00000001"Ответ 202 содержит event_id. Это постановка в очередь, а не подтверждение доставки. Повтор с тем же ключом возвращает то же событие в пределах 30 дней и текущей конфигурации. До пяти новых тестов в минуту.
GET/webhook/deliveriesЖурнал и повторные попытки
Параметры limit (до 100) и offset. История хранится 30 дней: тело события, status, attempts, http_status, error_code и время следующей попытки. Доставленным считается ответ 2xx.
При тайм-ауте, сетевом сбое или другом HTTP-статусе выполняется до 10 попыток: первая сразу, затем через 10 с, 30 с, 1 мин, 3 мин, 10 мин, 30 мин, 1 ч, 3 ч и 6 ч. Очередь сохраняется при перезапуске. У повторов прежние id и тело, но новая подпись и timestamp. Состояние failed можно повторить через POST /webhook/deliveries/{id}/retry — ещё 10 попыток, максимум 100. Повтор отправки не повторяет покупку.
POST/webhook/rotate-secretОбновить секрет
Вызывай управляющим ключом из key_id. Новый secret показывается один раз. Ожидающие события сохраняются и получают новую подпись; уже отправленные могут иметь старую. DELETE /webhook удаляет адрес и секрет, отменяет ожидающие доставки, сохраняет журнал.
Ошибки и ограничения
Лимит — 300 запросов за 60 секунд на ключ. Остаток передаётся в X-RateLimit-Remaining, время сброса Unix — в X-RateLimit-Reset. При 429 дождись количества секунд из Retry-After.
| HTTP | Код | Что делать |
|---|---|---|
| 400 | invalid_request / invalid_duration / invalid_currency / not_rental | Проверь параметры. |
| 401 | invalid_api_key | Проверь ключ и заголовок X-API-Key. |
| 403 | commerce_permission_required | Создай ключ с разрешением покупок. |
| 404 | not_found | Обнови каталог и проверь ID. |
| 409 | product_unavailable / price_changed / insufficient_balance / conflict / quote_expired / quote_used | Проверь код. Не повторяй покупку с новым ключом, пока не установлен результат предыдущей. |
| 415 | unsupported_media_type | Передай Content-Type: application/json. |
| 429 | rate_limited | Подожди Retry-After секунд. |
| 503 | service_unavailable / exchange_rate_unavailable | Повтори позже; при проблеме курса можно запросить USD. |
{"error":{"code":"invalid_api_key","message":"API key is invalid or revoked"}}Смотри available, inventory_checked_at и prices_checked_at. Недостаток остатка или устаревшие данные ограничивают покупку так же, как на сайте. Частый опрос API не ускоряет обновление каталога. При временной сетевой ошибке повторяй запрос с задержкой; для POST /orders всегда сохраняй исходный Idempotency-Key.