REST API · RUB · JSON

Создайте собственную интеграцию

Один API-ключ позволяет получать баланс и остатки, безопасно создавать заказы и отслеживать выдачу.

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

Создайте API-ключ в Telegram-боте в разделе API. Полный ключ показывается один раз. Передавайте его в каждом запросе.

Базовый URL

https://api.relaxo.dev

Rate limit

60 requests / minute / API key

Авторизация

Используйте X-API-Key или Bearer-токен. Не размещайте ключ во frontend-коде, скриншотах или публичных репозиториях.

X-API-Key
curl https://api.relaxo.dev/v1/me \
  -H "X-API-Key: bs_live_YOUR_API_KEY"
Bearer
curl https://api.relaxo.dev/v1/me \
  -H "Authorization: Bearer bs_live_YOUR_API_KEY"

Методы

GET/v1/me

Профиль и баланс в RUB

Запрос
curl https://api.relaxo.dev/v1/me \
  -H "X-API-Key: bs_live_YOUR_API_KEY"
Ответ
{
  "user_id": 123456789,
  "username": "reseller",
  "balance_rub": 2500,
  "total_deposited_rub": 5000,
  "language": "ru",
  "api_rate_limit_per_minute": 60
}
GET/v1/stock

Актуальные остатки и цены продажи

Запрос
curl https://api.relaxo.dev/v1/stock -H "X-API-Key: bs_live_YOUR_API_KEY"
Ответ
{
  "currency": "RUB",
  "month_1": {
    "stock": 120,
    "price_per_boost_rub": 85
  },
  "month_3": {
    "stock": 64,
    "price_per_boost_rub": 210
  },
  "updated_at": "2026-07-12T14:30:00.000Z"
}
GET/v1/orders?limit=20

Список ваших последних заказов

Необязательный параметр limit: 1–100, по умолчанию 50.

Ответ
{
  "count": 1,
  "orders": [
    {
      "order_id": "BLY4F6D4A91C2",
      "months": 1,
      "quantity": 10,
      "delivered": 0,
      "status": "processing",
      "invite": "https://discord.gg/example",
      "total_rub": 850,
      "refunded_rub": 0,
      "error_code": null,
      "error": null,
      "created_at": "2026-07-12T14:30:00.000Z",
      "updated_at": "2026-07-12T14:30:02.000Z"
    }
  ]
}
GET/v1/orders/{order_id}

Получить один из ваших заказов

Ответ
{
  "order_id": "BLY4F6D4A91C2",
  "months": 1,
  "quantity": 10,
  "delivered": 0,
  "status": "processing",
  "invite": "https://discord.gg/example",
  "total_rub": 850,
  "refunded_rub": 0,
  "error_code": null,
  "error": null,
  "created_at": "2026-07-12T14:30:00.000Z",
  "updated_at": "2026-07-12T14:30:02.000Z"
}
POST/v1/orders

Создать новый заказ

Idempotency-Key обязателен

Каждый запрос POST /v1/orders должен содержать уникальный Idempotency-Key. Повторно используйте ключ только при повторе точно такого же запроса после тайм-аута. Это защищает от двойного списания и создания дубликатов.

Запрос
curl -X POST https://api.relaxo.dev/v1/orders \
  -H "Content-Type: application/json" \
  -H "X-API-Key: bs_live_YOUR_API_KEY" \
  -H "Idempotency-Key: order-2026-0001" \
  -d '{"invite":"https://discord.gg/example","months":1,"quantity":10}'
Ответ
{
  "order_id": "BLY4F6D4A91C2",
  "months": 1,
  "quantity": 10,
  "delivered": 0,
  "status": "processing",
  "invite": "https://discord.gg/example",
  "total_rub": 850,
  "refunded_rub": 0,
  "error_code": null,
  "error": null,
  "created_at": "2026-07-12T14:30:00.000Z",
  "updated_at": "2026-07-12T14:30:02.000Z"
}

Статусы заказа

StatusDescription
creatingЛокальный заказ подготавливается.
processingИдёт выдача.
retryingВыполняется вторая попытка для недостающего количества.
completedВсе бусты выданы.
partialЧастичная выдача; недостающее количество возвращено на баланс.
failedНичего не выдано; сумма возвращена.
manual_reviewОтвет был неопределённым, требуется проверка администратора.

Ответы с ошибками

Ошибка всегда содержит стабильный код и понятное сообщение. Используйте код в логике интеграции.

Ответ
{
  "code": "INSUFFICIENT_BALANCE",
  "error": "Insufficient balance",
  "required_rub": 850,
  "balance_rub": 300,
  "request_id": "b28abf23-0f7d-4a3a-8a90-60d42d77514a"
}
CodeHTTP
INVALID_API_KEY401
API_DISABLED503
ORDERS_DISABLED503
RATE_LIMITED429
IDEMPOTENCY_KEY_REQUIRED400
IDEMPOTENCY_CONFLICT409
REQUEST_IN_PROGRESS409
INVALID_DURATION400
INVALID_QUANTITY400
INVALID_INVITE400
MEMBERSHIP_SCREENING_ENABLED400
INSUFFICIENT_STOCK409
INSUFFICIENT_BALANCE402
ORDER_NOT_FOUND404
ENDPOINT_NOT_FOUND404
REQUEST_RESERVATION_FAILED500
INTERNAL_ERROR500

Безопасность и приватность

Ответы содержат только данные вашего аккаунта, цены продажи, публичные ID заказов и статус выдачи. Внутренние данные поставщика, закупочные цены, ключи и данные других пользователей не раскрываются.

Готовые примеры

cURL
curl -X POST https://api.relaxo.dev/v1/orders \
  -H "Content-Type: application/json" \
  -H "X-API-Key: bs_live_YOUR_API_KEY" \
  -H "Idempotency-Key: order-2026-0001" \
  -d '{"invite":"https://discord.gg/example","months":1,"quantity":10}'
Node.js
import { randomUUID } from 'node:crypto';

const response = await fetch('https://api.relaxo.dev/v1/orders', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-API-Key': process.env.BOOST_API_KEY,
    'Idempotency-Key': randomUUID()
  },
  body: JSON.stringify({
    invite: 'https://discord.gg/example',
    months: 1,
    quantity: 10
  })
});

const data = await response.json();
if (!response.ok) throw new Error(data.code + ': ' + data.error);
console.log(data);
Python
import os, uuid, requests

response = requests.post(
    'https://api.relaxo.dev/v1/orders',
    headers={
        'X-API-Key': os.environ['BOOST_API_KEY'],
        'Idempotency-Key': str(uuid.uuid4()),
    },
    json={
        'invite': 'https://discord.gg/example',
        'months': 1,
        'quantity': 10,
    },
    timeout=30,
)

data = response.json()
response.raise_for_status()
print(data)