The Nitro API. One address, six actions.
The format every SMM panel already speaks. Point your panel or your code at the address below with your key, and every order is placed, priced and charged exactly as it would be on the site.
curl https://nitro.ng/api/v2 \ -d key=YOUR_API_KEY \ -d action=balance
{"balance": "124500.00", "currency": "NGN"}https://nitro.ng/api/v2POSTkey on every callQuick start
Three steps from nothing to a placed order.
- 1Copy your keyEvery verified account has one, in Settings and on the API access page.
- 2Call
balanceIf your wallet comes back, the key works. - 3Sync
services, thenaddPick a service from the list and order it with a link and a quantity.
# POST, form-encoded curl https://nitro.ng/api/v2 \ -d key=YOUR_API_KEY \ -d action=services
[
{
"service": 3879,
"name": "Instagram Worldwide Followers — 30-day refill, Instant, Worldwide",
"type": "Default",
"category": "instagram",
"rate": "9306.00",
"min": 100,
"max": 5000000,
"refill": true,
"cancel": true,
"description": ""
}
]Your key
One key per account. It is who you are on every call.
Your key identifies your account, prices every call at your rate and charges your Nitro wallet. Find it in Settings or on the API access page, and send it as key with every request.
Keep it on your server. Never put it in an app, a web page or a public repository, because anyone holding it can spend your wallet.
To replace it, press Rotate on the API access page. The old key stops working the moment the new one is issued, so update your panel straight after.
Invalid API key. Every other answer, errors included, comes back as HTTP 200.Prices
Naira per 1,000, at your rate, taken from your wallet when the order is placed.
Every account starts on retail, the same prices you see on the site. Message us on WhatsApp about your business and we switch your account to wholesale: the same key, the same calls, lower rates. Consistent volume earns a personal rate on top.
The rate in services is always what your account pays today, so you never have to work out a discount yourself.
services
action=servicesThe whole catalogue at your rate.
Returns every service you can order: Nitro picks first, then the Full list, the same lists and numbers as Catalogue on the site. Every key sees the same services under the same IDs, so a service number your customer quotes is one we can look up.
Nitro picks are the tiers we test and stand behind. Each carries Nitro's refill promise, set by its tier: Budget has none, Standard is 30 days from completion, Premium is for life.
Each service
servicenamecategoryinstagram, tiktok, youtube, webtraffic and so on.rateminmaxrefilltrue if you can call refill on it.canceltrue if you can call cancel on it.typeDefault, Custom Comments, SEO or Subscriptions. Tells your panel which extra fields to ask for.descriptionpicktrue.tierBudget, Standard or Premium, or the answer for a poll option.refill_windowlifetime, 30 days or none: how long after it completes you can ask for a refill.Service discontinued or Service not available if you order it.# POST, form-encoded curl https://nitro.ng/api/v2 \ -d key=YOUR_API_KEY \ -d action=services
[
{
"service": 86,
"name": "Instagram Followers (Premium)",
"type": "Default",
"category": "instagram",
"rate": "25500.00",
"min": 10,
"max": 2500000,
"refill": true,
"cancel": false,
"description": "Nitro pick. Refill for life.",
"pick": true,
"tier": "Premium",
"refill_window": "lifetime"
},
{
"service": 1923,
"name": "Instagram Worldwide Video Views — No refill, Instant, Worldwide",
"type": "Subscriptions",
"category": "instagram",
"rate": "205.00",
"min": 100,
"max": 10000000,
"refill": false,
"cancel": true,
"description": "Auto service: it subscribes to an account and delivers to the posts it makes from now on, so `link` must be the profile or channel, not a link to one post. Quantity is the amount delivered per post."
}
]add
action=addPlaces an order and charges your wallet.
serviceRequiredservices.linkRequireddescription says which.quantityRequiredmin and max.commentsOptionalCustom Comments: one comment per line. The quantity is the number of lines.usernamesOptionalkeywordsOptionalSEO: one search term per line.answer_numberOptionalcountryOptionalWW for worldwide, or a continent (AFR, ASI, EUR, NAM, SAM, MEA).deviceOptionalall, mobile or desktop. All if you leave it out.keywordreferrerOptionalInsufficient balance, nothing is queued and nothing is charged. Top up and send it again.# POST, form-encoded curl https://nitro.ng/api/v2 \ -d key=YOUR_API_KEY \ -d action=add \ -d service=3879 \ -d link=https://instagram.com/yourclient \ -d quantity=2500
{"order": "NTR-1792260812345"}status
action=statusWhere an order is, how many it started from, and what is left.
orderRequiredordersOptionalorder. You get one answer per ID.Statuses
start_count is where the count stood when delivery began, and remains is how many are still to come. charge is what the order cost you.
orders with up to 100 IDs. One call instead of a hundred keeps you well inside the limit.# POST, form-encoded curl https://nitro.ng/api/v2 \ -d key=YOUR_API_KEY \ -d action=status \ -d orders=NTR-1792260812345,NTR-1792260899001
{
"NTR-1792260812345": {
"charge": "23265.00",
"start_count": "1200",
"status": "In progress",
"remains": "450",
"currency": "NGN"
},
"NTR-1792260899001": {"error": "Incorrect order ID"}
}refill
action=refillAsks for a drop to be topped back up.
orderRequiredrefill: true.Refills are free inside the service's refill window. For a Nitro pick that window is its tier: Standard within 30 days of completing, Premium any time, Budget never. If the order cannot be refilled, the answer says why.
# POST, form-encoded curl https://nitro.ng/api/v2 \ -d key=YOUR_API_KEY \ -d action=refill \ -d order=NTR-1792260812345
{"refill": "1"}balance
action=balanceWhat is in your wallet right now.
No extra parameters. Check it before you accept a customer's order on your own panel, so you never sell what your wallet cannot cover.
# POST, form-encoded curl https://nitro.ng/api/v2 \ -d key=YOUR_API_KEY \ -d action=balance
{"balance": "124500.00", "currency": "NGN"}cancel
action=cancelStops orders that have not started, and refunds them.
ordersRequiredorder works for one.Only services with cancel: true, and only before work begins. A cancelled order goes back to your wallet in full. Each ID gets its own answer, so one that cannot be cancelled never blocks the rest.
# POST, form-encoded curl https://nitro.ng/api/v2 \ -d key=YOUR_API_KEY \ -d action=cancel \ -d orders=NTR-1792260812345,NTR-1792260899001
[
{"order": "NTR-1792260812345", "cancel": 1},
{"order": "NTR-1792260899001", "cancel": {"error": "This order is already processing and cannot be cancelled. Please contact support if you need help."}}
]Errors
Every error is JSON with an error field, the convention panel software already reads.
| Error | HTTP | What to do |
|---|---|---|
| Invalid API key | 401 | Check the key. It may have been rotated, or the account's email is not verified yet. |
| Incorrect action | 200 | Use one of services, add, status, refill, balance or cancel. |
| Incorrect service ID | 200 | That ID is not in the catalogue. Sync services. |
| Service discontinued | 200 | The service has been retired. Sync and move your listing to another one. |
| Service not available | 200 | It cannot be ordered right now. Sync again later; it may come back. |
| Incorrect quantity | 200 | Send a whole number above zero. |
| Quantity must be between 100 and 5,000,000 | 200 | Outside the service's min and max. The message carries the real numbers. |
| Incorrect link | 200 | The link is missing or longer than 2,000 characters. |
| This service needs a profile link, not a post link. Example: … | 200 | Wrong kind of link for the service. The message shows the right shape. |
| Insufficient balance | 200 | Top up. Nothing was queued and nothing was charged. |
| Incorrect order ID | 200 | No order with that ID on your account. |
| Too many requests. Slow down. | 429 | Wait the number of seconds in the Retry-After header, then carry on. |
Limits and retries
Room for any real panel, as long as it polls sensibly.
60 calls a minute per key. Past that you get HTTP 429 and a Retry-After header. Poll status with orders rather than one call per order, and sync services every few minutes rather than on every page view.
Order IDs are text, like NTR-1792260812345. Store them as text, not numbers.
Retrying add is safe for 60 seconds: the same service, link and quantity returns the order already placed.