REST API · RUB · JSON

Build your own boost integration

Use one API key to read your balance and live stock, create orders safely, and track delivery status.

Quick start

Generate your API key in the Telegram bot under API. The full key is displayed once. Send it with every request.

Base URL

https://api.relaxo.dev

Rate limit

60 requests / minute / API key

Authentication

Use either X-API-Key or a Bearer token. Never expose your API key in frontend code, screenshots, or public repositories.

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"

Endpoints

GET/v1/me

Account profile and RUB balance

Request
curl https://api.relaxo.dev/v1/me \
  -H "X-API-Key: bs_live_YOUR_API_KEY"
Response
{
  "user_id": 123456789,
  "username": "reseller",
  "balance_rub": 2500,
  "total_deposited_rub": 5000,
  "language": "en",
  "api_rate_limit_per_minute": 60
}
GET/v1/stock

Live stock and current selling prices

Request
curl https://api.relaxo.dev/v1/stock -H "X-API-Key: bs_live_YOUR_API_KEY"
Response
{
  "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

List your own recent orders

Optional query parameter limit: 1–100, default 50.

Response
{
  "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}

Read one of your own orders

Response
{
  "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

Create a new order

Idempotency is required

Every POST /v1/orders request must include a unique Idempotency-Key. Reuse the same key only when retrying the exact same request after a timeout. This prevents duplicate charges and duplicate orders.

Request
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}'
Response
{
  "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"
}

Order statuses

StatusDescription
creatingLocal order is being prepared.
processingDelivery is running.
retryingA second delivery attempt is running for the missing quantity.
completedAll boosts were delivered.
partialPartially delivered; the missing quantity was refunded.
failedNothing was delivered; the order was refunded.
manual_reviewThe provider response was uncertain and an administrator must review it.

Error responses

Errors always include a stable code and a human-readable message. Use the code in your integration logic.

Response
{
  "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

Security and privacy

Responses contain only your account, selling prices, public order IDs, and delivery status. Internal supplier data, internal pricing, credentials, and other users are never exposed.

Copy-paste examples

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)