Skip to main content
API v2 for resellers and developers

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.

Your first call200 OK
curl https://nitro.ng/api/v2 \
  -d key=YOUR_API_KEY \
  -d action=balance
Answer
{"balance": "124500.00", "currency": "NGN"}
Base URLhttps://nitro.ng/api/v2
MethodPOST
BodyForm or JSON
Your keykey on every call
AnswersJSON
MoneyNaira, from your wallet
Limit60 calls a minute

Quick start

Three steps from nothing to a placed order.

  1. 1
    Copy your keyEvery verified account has one, in Settings and on the API access page.
  2. 2
    Call balanceIf your wallet comes back, the key works.
  3. 3
    Sync services, then addPick a service from the list and order it with a link and a quantity.
Running panel software? Add Nitro as a provider: paste the base URL and your key into its provider settings and press sync. You can skip the rest of this page and go straight to setting your prices.
Sync the catalogue
# POST, form-encoded
curl https://nitro.ng/api/v2 \
  -d key=YOUR_API_KEY \
  -d action=services
Answer
[
  {
    "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.

A wrong key, a rotated key or an account whose email is not verified gets HTTP 401 with 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.

₦9,306.00 rate×2,500 quantity÷1,000=₦23,265.00

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=services

The 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

service
The ID you order with, the number shown in Catalogue on the site.
name
What it is, with its refill, speed and audience.
category
The platform, in lower case: instagram, tiktok, youtube, webtraffic and so on.
rate
Naira per 1,000, at your rate.
minmax
The smallest and largest quantity one order can be.
refill
true if you can call refill on it.
cancel
true if you can call cancel on it.
type
Default, Custom Comments, SEO or Subscriptions. Tells your panel which extra fields to ask for.
description
What the buyer has to do first, or how the link must look. Empty when there is nothing to say. Show it on your order page.
Only on Nitro picks
pick
true.
tier
Budget, Standard or Premium, or the answer for a poll option.
refill_window
lifetime, 30 days or none: how long after it completes you can ask for a refill.
Sync it every few minutes, not on every page view. Prices and availability move. A service that leaves the list answers Service discontinued or Service not available if you order it.
Example request
# POST, form-encoded
curl https://nitro.ng/api/v2 \
  -d key=YOUR_API_KEY \
  -d action=services
Answer
[
  {
    "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=add

Places an order and charges your wallet.

serviceRequired
The ID from services.
linkRequired
The profile, post, video or username. Some services want a profile and some a post; description says which.
quantityRequired
A whole number between the service's min and max.
Only for some services
commentsOptional
Custom Comments: one comment per line. The quantity is the number of lines.
usernamesOptional
Mentions: one username per line.
keywordsOptional
SEO: one search term per line.
answer_numberOptional
Poll votes: which answer the votes go to.
countryOptional
Website traffic: a 2-letter country code, WW for worldwide, or a continent (AFR, ASI, EUR, NAM, SAM, MEA).
deviceOptional
Website traffic: all, mobile or desktop. All if you leave it out.
keywordreferrerOptional
Website traffic: the search term or the site the visits appear to come from. Leave both out for direct visits.
Safe to retry. Send the same service, link and quantity again within 60 seconds and you get back the order already placed, not a second one. A timeout never costs you twice.
Wallet too low? You get Insufficient balance, nothing is queued and nothing is charged. Top up and send it again.
Example request
# 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
Answer
{"order": "NTR-1792260812345"}

status

action=status

Where an order is, how many it started from, and what is left.

orderRequired
One order ID.
ordersOptional
Up to 100 IDs, comma separated, instead of order. You get one answer per ID.

Statuses

PendingIn progressCompletedPartialCanceled

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.

Polling a lot of orders? Use orders with up to 100 IDs. One call instead of a hundred keeps you well inside the limit.
Example request
# POST, form-encoded
curl https://nitro.ng/api/v2 \
  -d key=YOUR_API_KEY \
  -d action=status \
  -d orders=NTR-1792260812345,NTR-1792260899001
Answer
{
  "NTR-1792260812345": {
    "charge": "23265.00",
    "start_count": "1200",
    "status": "In progress",
    "remains": "450",
    "currency": "NGN"
  },
  "NTR-1792260899001": {"error": "Incorrect order ID"}
}

refill

action=refill

Asks for a drop to be topped back up.

orderRequired
The order to refill. Its service must have refill: 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.

Example request
# POST, form-encoded
curl https://nitro.ng/api/v2 \
  -d key=YOUR_API_KEY \
  -d action=refill \
  -d order=NTR-1792260812345
Answer
{"refill": "1"}

balance

action=balance

What 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.

Example request
# POST, form-encoded
curl https://nitro.ng/api/v2 \
  -d key=YOUR_API_KEY \
  -d action=balance
Answer
{"balance": "124500.00", "currency": "NGN"}

cancel

action=cancel

Stops orders that have not started, and refunds them.

ordersRequired
Up to 100 IDs, comma separated. order 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.

Example request
# POST, form-encoded
curl https://nitro.ng/api/v2 \
  -d key=YOUR_API_KEY \
  -d action=cancel \
  -d orders=NTR-1792260812345,NTR-1792260899001
Answer
[
  {"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.

ErrorHTTPWhat to do
Invalid API key401Check the key. It may have been rotated, or the account's email is not verified yet.
Incorrect action200Use one of services, add, status, refill, balance or cancel.
Incorrect service ID200That ID is not in the catalogue. Sync services.
Service discontinued200The service has been retired. Sync and move your listing to another one.
Service not available200It cannot be ordered right now. Sync again later; it may come back.
Incorrect quantity200Send a whole number above zero.
Quantity must be between 100 and 5,000,000200Outside the service's min and max. The message carries the real numbers.
Incorrect link200The link is missing or longer than 2,000 characters.
This service needs a profile link, not a post link. Example: …200Wrong kind of link for the service. The message shows the right shape.
Insufficient balance200Top up. Nothing was queued and nothing was charged.
Incorrect order ID200No order with that ID on your account.
Too many requests. Slow down.429Wait 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.

Need more than 60 a minute? Message us on WhatsApp with what you are running and we will look at it with you.
Start where you are.Make a free account and your key is waiting in Settings. Wholesale is one message away.