Authentication
API Key on the bot’s main menu creates the key on first tap; Revoke API Key, same panel, kills it instantly and for good. A new key reads the same account — balance, history and old-key orders unchanged.
X-API-Key: WAR_example_not_a_real_key
The key can spend your balance, so treat it like a password. It reaches nobody else’s wallet, stock or orders.
Top up in Telegram. Spend anywhere.
Errors & limits
3 requests per second per key, and the same again per
IP address before the key is even read. Bursts are not queued.
Every failure returns the same shape, {"error": "..."}.
Click any code to fire it in the console:
| Code | Meaning | What to do |
|---|---|---|
400 | Bad parameters, out of stock, or insufficient balance | Read error; do not retry blindly |
401 | Key missing or unknown | Check the header |
403 | Key revoked | Issue a new one in the bot |
404 | No such order or endpoint | Check the id |
405 | Wrong method for that path | Check the verb; the path itself exists |
413 | Body larger than 64 KB | Send only service_id and quantity |
429 | Rate limited | Back off, then retry |
500 | Internal error — already logged on our side | Safe to retry on GET. On POST /order, check GET /orders first — the order may exist |
503 | At capacity, shop in maintenance, or that service stopped selling | Safe to retry — nothing was charged |
An order either completes or changes nothing.
A 400 never debits your balance and never consumes stock. On
POST /order, retry only 503 and 429
— neither reached the purchase path; for 429 wait out
the Retry-After header.
Code examples
Snippets follow the console’s selected endpoint. Substitute
$BASE and $KEY.
Reads — five endpoints, none of them can change anything
Your account
/api/v1/mecurl "$BASE/api/v1/me" -H "X-API-Key: $KEY"
{
"chat_id": 1000000000,
"first_name": "Alex",
"wallet_balance": 42.75
}
{
"error": "Missing X-API-Key header"
}
Products & stock
/api/v1/productsStock moves constantly, so read this before ordering.
curl "$BASE/api/v1/products" -H "X-API-Key: $KEY"
{
"services": [
{
"service_id": "S_01",
"name": "Gemini AI Pro 18Months - 15hour Hold warranty",
"price": 0.50,
"stock": 4552,
"in_stock": true,
"pricing": "tiered",
"orderable": true,
"price_tiers": [
{ "min_qty": 1, "max_qty": 10, "unit_price": 0.50 },
{ "min_qty": 11, "max_qty": 49, "unit_price": 0.45 },
{ "min_qty": 50, "max_qty": 10000, "unit_price": 0.40 }
]
}
]
}
| Field | Type | Notes |
|---|---|---|
service_id | string | The id you order with. Stable; store it. |
name | string | Display name, plain text |
price | number | null | Your unit price at quantity 1. null when pricing is "unavailable". |
stock | number | Units available right now |
in_stock | boolean | False when we have paused selling this service |
pricing | string | "tiered", "custom" or "unavailable" |
price_tiers | array | null | null on a negotiated flat rate |
orderable | boolean | Gate your buy on this one. True only when the service is priced, selling, and has stock. |
pricing is the regime your
key is on; under "tiered" a bulk total is lower
than price × quantity. Step the console quantity
across a boundary.
Negotiated flat rate: pricing is
"custom" and price_tiers is
null. One price at every quantity:
total = price × quantity exactly — never a tier
table you were not given. Console Live mode reads your
own regime from /products.
The third state: pricing is
"unavailable", price is null,
price_tiers is [], orderable is
false. POST /order for it answers
400 “No pricing tier configured for this
quantity”. New listings start here: handle
price === null.
Spends — one endpoint, and it moves real money
Place an order
/api/v1/orderBuys immediately, returning activation links inline.
Store products on receipt — and
if you lose the response, re-fetch them from
GET /order/{order_id}.
| Field | Type | Notes | |
|---|---|---|---|
service_id | string | required | From /products, e.g. S_01 |
quantity | number | required | Whole number, 1 to 10000 |
curl -X POST "$BASE/api/v1/order" \ -H "X-API-Key: $KEY" \ -H "Content-Type: application/json" \ -d '{"service_id":"S_01","quantity":2}'
{
"success": true,
"order_id": "ORD-04621-9a84",
"service_id": "S_01",
"quantity": 2,
"unit_price": 0.50,
"total_cost": 1.20,
"new_balance": 41.55,
"products": [
"https://serviceactivation.google.com/subscription/new/AQC1x…",
"https://serviceactivation.google.com/subscription/new/AQC2y…"
]
}
{
"error": "Only 3 accounts available. Requested 10."
}
{
"error": "Insufficient Wallet Balance! You need $6.05 but have $2.10."
}
Order history
/api/v1/ordersYour account’s whole history — Telegram and API orders in
one list, newest first, with the delivered links to re-fetch.
Paginated: page and limit are optional,
and total_pages in the reply tells you how many there
are.
An out-of-range value is an error, not a
ceiling. limit=500 returns
400 limit must be between 1 and 200 rather than
quietly giving you 200 rows.
Two different totals, deliberately.
total_orders here counts every order row,
because that is what total_pages divides. The
counts object breaks it down, and
counts.paid is the one that cost money
(success plus undelivered). On
/stats, total_orders is your
account’s own lifetime purchase counter — and
counts there is identical to this one, so the two
responses can be compared directly.
| Query | Type | Notes | |
|---|---|---|---|
page | number | optional | Defaults to 1 |
limit | number | optional | Defaults to 50. Maximum 200 — a larger value returns 400, it is not silently reduced |
curl "$BASE/api/v1/orders?page=1&limit=50" \ -H "X-API-Key: $KEY"
Listed orders omit unit_price; divide
amount / quantity. created_at is IST
(UTC+05:30) as YYYY-MM-DD HH:MM:SS — parse
as Asia/Kolkata, not UTC.
{
"success": true,
"page": 1,
"limit": 50,
"total_orders": 137,
"total_pages": 3,
"orders": [
{
"order_id": "ORD-04621-9a84",
"service_id": "S_01",
"service": "Gemini AI Pro 18Months - 15hour Hold warranty",
"quantity": 11,
"amount": 6.05,
"status": "success",
"created_at": "2026-08-20 14:02:11",
"delivered_products": ["https://…"]
}
]
}
One order
/api/v1/order/{id}Any order on your account — Telegram or API. Other
people’s return 404, the same as one that does not
exist.
curl "$BASE/api/v1/order/ORD-04621-9a84" \ -H "X-API-Key: $KEY"
Order ids are
ORD-<5 digits>-<4 hex>; the delivery message omits
the ORD- — so 04621-9a84 reaches the same
order. Either form, either case. A bare sequence number matching two
of your orders returns 404 asking for the full
id.
{
"success": true,
"order": {
"order_id": "ORD-04621-9a84",
"service_id": "S_01",
"service": "Gemini AI Pro 18Months - 15hour Hold warranty",
"quantity": 11,
"amount": 6.05,
"status": "success",
"created_at": "2026-08-20 14:02:11",
"delivered_products": ["https://…"]
}
}
{
"error": "No such order"
}
Statistics
/api/v1/statsAccount totals plus a per-service breakdown. Telegram and API purchases count together.
Lifetime only. No date range or
time bucketing. Per day: page /orders, group
by created_at.
curl "$BASE/api/v1/stats" -H "X-API-Key: $KEY"
{
"success": true,
"wallet_balance": 42.75,
"total_orders": 137,
"total_spent": 391.05,
"products_breakdown": [
{
"service_id": "S_01",
"name": "Gemini AI Pro 18Months - 15hour Hold warranty",
"quantity_sold": 318,
"revenue": 174.90
}
]
}