Sell products from your own bot or website. Orders are paid from your Lucifer wallet and delivered in the API response.
https://api.onlinesallutions.com
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.
Authorization: Bearer YOUR_KEY (or) X-API-Key: YOUR_KEY
curl https://api.onlinesallutions.com/v2/ping -H "Authorization: Bearer YOUR_KEY"
| Method | Path | Use |
|---|---|---|
| GET | /v2/ping | Check the key |
| GET | /v2/balance | Wallet balance |
| GET | /v2/products | Orderable products, price, stock |
| POST | /v2/orders | Place an order (Idempotency-Key required) |
| GET | /v2/orders/CODE | Fetch one order and its items |
| GET | /v2/orders/by-idempotency/KEY | Recover an order after a lost response |
| GET | /v2/orders?limit=50&offset=0 | History, no items |
| POST | /v2/orders/CODE/ack | Confirm you saved the items |
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}}
/v2/orders/by-idempotency/KEY. You get the original order back and you are never charged again.409 idempotency_key_conflict.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.
completed | Paid 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. |
rejected | Not paid. Nothing was charged. |
{"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.
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 are in INR with the USDT value alongside, at the shop's current rate.