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

HTTP POST, form-encoded or JSON.

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

Everything below is generated from the same definitions the endpoint itself uses, so the documentation and the implementation cannot drift apart. Create a key in your dashboard and the examples work as they are.

A first request

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.

services

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 string requiredYour API key. Create one in Settings → API keys.
  • action string requiredAlways services for this call.

Response

[
  {
    "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"
add

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 string requiredYour API key. Create one in Settings → API keys.
  • action string requiredAlways add for this call.
  • service string requiredThe service id from services.
  • link string requiredThe public link the order is for.
  • quantity integer requiredBetween the service min and max.
  • runs integer optionalDrip-feed only: how many runs.
  • interval integer optionalDrip-feed only: minutes between runs.

Response

{ "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"
status

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 string requiredYour API key. Create one in Settings → API keys.
  • action string requiredAlways status for this call.
  • order string requiredThe order id returned by add.

Response

{
  "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"
status

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 string requiredYour API key. Create one in Settings → API keys.
  • action string requiredAlways status for this call.
  • orders string requiredComma-separated order ids, up to 100.

Response

{
  "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"
refill

Ask for a refill

Only for services where refill is true, and only inside the refill window shown on the service.

Fields

  • key string requiredYour API key. Create one in Settings → API keys.
  • action string requiredAlways refill for this call.
  • order string requiredThe order to refill.

Response

{ "refill": "9032" }
curl -X POST https://9jaboost.com/api/v2 \
  -d "key=YOUR_API_KEY" \
  -d "action=refill" \
  -d "order=ORD-8F2K"
refill_status

Check a refill

Where a refill request has got to.

Fields

  • key string requiredYour API key. Create one in Settings → API keys.
  • action string requiredAlways refill_status for this call.
  • refill string requiredThe refill id.

Response

{ "status": "Completed" }
curl -X POST https://9jaboost.com/api/v2 \
  -d "key=YOUR_API_KEY" \
  -d "action=refill_status" \
  -d "refill=9032"
cancel

Cancel an order

Only for services where cancel is true. Anything not yet delivered is refunded to your wallet.

Fields

  • key string requiredYour API key. Create one in Settings → API keys.
  • action string requiredAlways cancel for this call.
  • orders string requiredComma-separated order ids, up to 100.

Response

[{ "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"
balance

Check your wallet

Your current balance, in Naira.

Fields

  • key string requiredYour API key. Create one in Settings → API keys.
  • action string requiredAlways balance for this call.

Response

{ "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

The panel calls the real API with your own data — your catalogue, your balance, your orders. Create a free account and it appears here.

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.

A partial order is refunded for the share that did not arrive, automatically, without you asking. The refund shows in your wallet and the charge on the order drops to what you actually paid.

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.