Rest · JSON · Key auth

Inventory, priced and delivered, over HTTP.

Six endpoints against your bot wallet. Edit and run a request below — the figures move because the order really executed.

Base URL
https://api.warzoneshop.in
Wallet
$42.75
Stock
4552
Orders
0
Calls
0

Sandbox figures — this ledger lives in your browser. Your real balance is in the bot.

Console Simulated
3 req/s per key · 3/s per IP
Live mode. Requests go to api.warzoneshop.in with the key you enter below. Your key is kept in memory only — it is never saved, never put in the URL, and never included in Copy as curl. A reload will ask for it again, on purpose: this key can spend your balance.
Wallet
Orders
Spent (all time)
Calls

Open the bot, tap API Key, paste it here.

Choose an endpoint and press Send Request.

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.

Header
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:

CodeMeaningWhat to do
400Bad parameters, out of stock, or insufficient balanceRead error; do not retry blindly
401Key missing or unknownCheck the header
403Key revokedIssue a new one in the bot
404No such order or endpointCheck the id
405Wrong method for that pathCheck the verb; the path itself exists
413Body larger than 64 KBSend only service_id and quantity
429Rate limitedBack off, then retry
500Internal error — already logged on our sideSafe to retry on GET. On POST /order, check GET /orders first — the order may exist
503At capacity, shop in maintenance, or that service stopped sellingSafe 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

GET

Your account

GET/api/v1/me
Request
curl "$BASE/api/v1/me" -H "X-API-Key: $KEY"
200
{
  "chat_id": 1000000000,
  "first_name": "Alex",
  "wallet_balance": 42.75
}
401
{
  "error": "Missing X-API-Key header"
}
GET

Products & stock

GET/api/v1/products

Stock moves constantly, so read this before ordering.

Request
curl "$BASE/api/v1/products" -H "X-API-Key: $KEY"
200
{
  "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 }
      ]
    }
  ]
}
FieldTypeNotes
service_idstringThe id you order with. Stable; store it.
namestringDisplay name, plain text
pricenumber | nullYour unit price at quantity 1. null when pricing is "unavailable".
stocknumberUnits available right now
in_stockbooleanFalse when we have paused selling this service
pricingstring"tiered", "custom" or "unavailable"
price_tiersarray | nullnull on a negotiated flat rate
orderablebooleanGate 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

POST

Place an order

POST/api/v1/order

Buys immediately, returning activation links inline. Store products on receipt — and if you lose the response, re-fetch them from GET /order/{order_id}.

FieldTypeNotes
service_idstringrequiredFrom /products, e.g. S_01
quantitynumberrequiredWhole number, 1 to 10000
Request
curl -X POST "$BASE/api/v1/order" \
  -H "X-API-Key: $KEY" \
  -H "Content-Type: application/json" \
  -d '{"service_id":"S_01","quantity":2}'
200
{
  "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…"
  ]
}
400 · not enough stock
{
  "error": "Only 3 accounts available. Requested 10."
}
400 · wallet short
{
  "error": "Insufficient Wallet Balance! You need $6.05 but have $2.10."
}
GET

Order history

GET/api/v1/orders

Your 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.

QueryTypeNotes
pagenumberoptionalDefaults to 1
limitnumberoptionalDefaults to 50. Maximum 200 — a larger value returns 400, it is not silently reduced
Request
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.

200
{
  "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://…"]
    }
  ]
}
GET

One order

GET/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.

Request
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.

200
{
  "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://…"]
  }
}
404
{
  "error": "No such order"
}
GET

Statistics

GET/api/v1/stats

Account 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.

Request
curl "$BASE/api/v1/stats" -H "X-API-Key: $KEY"
200
{
  "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
    }
  ]
}