Online Sallutions Reseller API

Sell products from your own bot or website. Orders are paid from your Lucifer wallet and delivered in the API response.

Base URL

https://api.onlinesallutions.com

1. Get your key

Open the Lucifer bot, tap Reseller API, then Create API key. The bot gives you a private one-time link. Open it and press the button to see your key. It is shown once. Tap Regenerate for a new key; your old key keeps working until you press the reveal button on the new page, then it stops. Keep the key on your server, never in a public app.

2. Send it with every request

Authorization: Bearer YOUR_KEY
(or)  X-API-Key: YOUR_KEY

3. Check it works

curl https://api.onlinesallutions.com/v2/ping -H "Authorization: Bearer YOUR_KEY"

What can be ordered

Only products the shop delivers automatically from its own stock appear in the product list and can be ordered. Manual or supplier products are not orderable here, and an order for one is refused before your wallet is touched. Nothing is called "instant" unless it is.

Endpoints

MethodPathUse
GET/v2/pingCheck the key
GET/v2/balanceWallet balance
GET/v2/productsOrderable products, price, stock
POST/v2/ordersPlace an order (Idempotency-Key required)
GET/v2/orders/CODEFetch one order and its items
GET/v2/orders/by-idempotency/KEYRecover an order after a lost response
GET/v2/orders?limit=50&offset=0History, no items
POST/v2/orders/CODE/ackConfirm you saved the items

Place an order

Base for all paths below: https://api.onlinesallutions.com/v2

curl -X POST https://api.onlinesallutions.com/v2/orders \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Idempotency-Key: invoice-2026-0001" \
  -H "Content-Type: application/json" \
  -d '{"product_id": 3, "qty": 1}'
{"ok":true,"order":{"code":"RA-1A2B3C4D5E","status":"completed","qty":1,
 "total_inr":"1030.00","total_usdt":"10.0000","balance_inr":"250.00",
 "items_available":true,"items":[{"type":"text","content":"..."}],"replayed":false}}

Never pay twice

Items

Each item is {"type":"text","content":...} or {"type":"file","filename":...,"sha256":...,"content_base64":...}. Save them, then call /ack to mark the order as received. Items are never deleted: they stay retrievable with your key by order code or idempotency key. Treat them as secrets.

Statuses

completedPaid and delivered.
held (HTTP 202)Paid, but delivery needs the shop to check. Not delivered. Do not retry with a new key. Contact the shop with the order code.
rejectedNot paid. Nothing was charged.

Errors

{"ok":false,"error":{"code":"insufficient_balance","message":"..."}}

Codes: missing_key, invalid_key (401); bad_request, idempotency_key_required, qty_not_allowed (400); insufficient_balance (402); order_not_found (404); not_available_via_api, out_of_stock, idempotency_key_conflict, price_unavailable (409); rate_limited, locked_out (429). Money errors (402, 409) never charge. Limits: 120 requests/min and 20 order attempts/min per key.

Older routes

The earlier /v1 GET routes still answer with their old format. POST /v1/order is retired and returns 409 without charging anything. Use /v2.

Amounts

Amounts are in INR with the USDT value alongside, at the shop's current rate.