Reseller API
One endpoint, in the shape your tools already speak
We use the standard SMM panel v2 contract, so most reseller software works after changing a URL and a key. Prices come back in Naira.
The basics
Endpoint
https://9jaboost.com/api/v2
Authentication
A key field on every request. Create and revoke your keys here.
Rate limit
60 requests a minute per key by default. Ask us if you need more — we would rather raise it than have you retry in a loop.
This endpoint is live
curl -X POST https://9jaboost.com/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=balance"
# {"balance":"18430.00","currency":"NGN"}Actions
Every call goes to the same URL. The action field decides what happens.
List everything you can order
Returns the full active catalogue with your prices. Call it on a schedule rather than before every order — the catalogue changes a few times a day, not a few times a minute.
Fields
- key requiredYour API key. Create one in Settings → API keys.
- action requiredAlways
servicesfor this call.
[
{
"service": "1024",
"name": "Instagram likes",
"type": "Default",
"category": "Instagram — Likes",
"rate": "182.00",
"min": "50",
"max": "50000",
"refill": true,
"cancel": true,
"dripfeed": true
}
]curl -X POST https://9jaboost.com/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=services"Place an order
Charges your wallet and sends the order. If your balance will not cover it, nothing is charged and you get an error back.
Fields
- key requiredYour API key. Create one in Settings → API keys.
- action requiredAlways
addfor this call. - service requiredThe service id from
services. - link requiredThe public link the order is for.
- quantity requiredBetween the service min and max.
- runs Drip-feed only: how many runs.
- interval Drip-feed only: minutes between runs.
{ "order": "48291" }curl -X POST https://9jaboost.com/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=add" \
-d "service=1024" \
-d "link=https://instagram.com/p/Cxyz123" \
-d "quantity=1000"Check one order
Returns the live state of an order, what it cost, where the count started and how much is left to deliver.
Fields
- key requiredYour API key. Create one in Settings → API keys.
- action requiredAlways
statusfor this call. - order requiredThe order id returned by
add.
{
"charge": "182.00",
"start_count": "1204",
"status": "In progress",
"remains": "412",
"currency": "NGN"
}curl -X POST https://9jaboost.com/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=status" \
-d "order=ORD-8F2K"Check up to 100 orders at once
The same call with a comma-separated list. Use this rather than looping — it is one request instead of a hundred.
Fields
- key requiredYour API key. Create one in Settings → API keys.
- action requiredAlways
statusfor this call. - orders requiredComma-separated order ids, up to 100.
{
"48291": { "charge": "182.00", "start_count": "1204", "status": "Completed", "remains": "0", "currency": "NGN" },
"48292": { "error": "Incorrect order ID" }
}curl -X POST https://9jaboost.com/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=status" \
-d "orders=ORD-8F2K,ORD-9P3M"Ask for a refill
Only for services where refill is true, and only inside the refill window shown on the service.
Fields
- key requiredYour API key. Create one in Settings → API keys.
- action requiredAlways
refillfor this call. - order requiredThe order to refill.
{ "refill": "9032" }curl -X POST https://9jaboost.com/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=refill" \
-d "order=ORD-8F2K"Check a refill
Where a refill request has got to.
Fields
- key requiredYour API key. Create one in Settings → API keys.
- action requiredAlways
refill_statusfor this call. - refill requiredThe refill id.
{ "status": "Completed" }curl -X POST https://9jaboost.com/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=refill_status" \
-d "refill=9032"Cancel an order
Only for services where cancel is true. Anything not yet delivered is refunded to your wallet.
Fields
- key requiredYour API key. Create one in Settings → API keys.
- action requiredAlways
cancelfor this call. - orders requiredComma-separated order ids, up to 100.
[{ "order": 48291, "cancel": 1 }]curl -X POST https://9jaboost.com/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=cancel" \
-d "orders=ORD-8F2K,ORD-9P3M"Check your wallet
Your current balance, in Naira.
Fields
- key requiredYour API key. Create one in Settings → API keys.
- action requiredAlways
balancefor this call.
{ "balance": "18430.00", "currency": "NGN" }curl -X POST https://9jaboost.com/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=balance"Try it against your own account
This runs the real endpoint with your own data — your catalogue, your balance, your orders. No key needed here, because you are already signed in.
Sign in to run these against your own account
What each status means
These are the words the status action returns. They are the standard set, so tools that already understand them need no changes.
- PendingWe have taken the order and are sending it to the provider.
- ProcessingThe provider has it and has not started delivering yet.
- In progressDelivery has started. `remains` counts down as it goes.
- CompletedEverything ordered was delivered.
- PartialSome arrived and the rest could not. The share that did not arrive has already been refunded to your wallet.
- CanceledThe order was stopped, or the provider refused it. Anything undelivered is back in your wallet.
- RefundedThe whole charge went back to your wallet.
Errors
Errors come back with HTTP 200 and an error field, which is what the standard contract does and what existing tooling expects.
{ "error": "Not enough funds" }- Incorrect requestA required field is missing or the action is unknown.
- Invalid API keyThe key is wrong, or it has been revoked.
- Incorrect service IDThat service does not exist, or is switched off.
- Incorrect link formatThe link does not match what this service needs.
- Quantity out of rangeBelow the service minimum or above its maximum.
- Not enough fundsYour wallet cannot cover the order. Nothing was charged.
- Incorrect order IDNo order with that id belongs to you.
- Rate limit exceededToo many requests. The response says when to retry.
A note on money
Every amount in this API is Naira, as a decimal string with two places. There is no currency conversion anywhere in it.
Internally we store money as whole kobo and never as a decimal number, which is why a charge is always exact. If you are building on top of us, we would suggest doing the same — see the blog for the reasoning.