ALL SYSTEMS OPERATIONAL/3500+ SERVICES/LAB MEDIAN START 20mMIN DEPOSIT $1/API v2
HOME/API
Developer Resources

SMM Panel API

Build powerful integrations with our RESTful API. Automate order placement, track delivery status, manage refills, and access all 3000+ services programmatically. Perfect for resellers running their own panels, agencies managing multiple clients, or developers building custom solutions.

REST
API Type
JSON
Response Format
99.9%
Uptime
Free
API Access
YOUR FIRST CALL
# every action is one POST to the same URL
curl -X POST https://nlosmm.com/api/v2 \
  -d "key=YOUR_API_KEY" \
  -d "action=balance"
200 OKRESPONSE
{
  "balance": "100.84",
  "currency": "USD"
}
Connection details120 REQ/MIN PER KEYPOST
HTTP METHOD
POST
GET is also accepted
API URL
https://nlosmm.com/api/v2
Content type: application/x-www-form-urlencoded (JSON body also accepted)
API KEY
From your account
Create an account, then get your key on the Account page
RESPONSE FORMAT
JSON
Errors come as {"error": "message"}: HTTP 401 for a bad key, 404 for an unknown action, 200 otherwise
01POST

Service list

action=services
PARAMETERS2 FIELDS
keyYour API key
actionservices
EXAMPLE RESPONSEJSON
[
    {
        "service": 4567,
        "name": "TikTok Followers [Exclusive] | 30 Days Refill",
        "type": "Default",
        "category": "TikTok - Followers",
        "rate": "9.00",
        "min": "10",
        "max": "150000",
        "refill": true,
        "cancel": false,
        "dripfeed": true
    },
    {
        "service": 3311,
        "name": "Instagram Comments [Custom]",
        "type": "Custom Comments",
        "category": "Instagram - Comments",
        "rate": "8.00",
        "min": "10",
        "max": "1500",
        "refill": false,
        "cancel": true,
        "dripfeed": false
    }
]
Rates are per 1000 in USD, with your personal discount and custom rates already applied.
02POST

Add order

action=add
SERVICE TYPE
PARAMETERS7 FIELDS
keyYour API key
actionadd
serviceService ID
linkLink to page
quantityNeeded quantity
runsOPTIONALRuns to deliver (drip-feed): the same order is placed this many times
intervalOPTIONALInterval in minutes between drip-feed runs
EXAMPLE RESPONSEJSON
{
    "order": 23501
}
The service type of every service is returned by action=services. Orders are validated against the service's min, max and increment; the charge is rate × quantity / 1000 with your personal discount and custom rates applied.
03POST

Order status

action=status
PARAMETERS3 FIELDS
keyYour API key
actionstatus
orderOrder ID
EXAMPLE RESPONSEJSON
{
    "charge": "0.27",
    "start_count": "3572",
    "status": "Partial",
    "remains": "157",
    "currency": "USD"
}
Possible statuses: Pending, In progress, Processing, Completed, Partial, Canceled, Fail, Error. Canceled, failed and partial orders are refunded to your balance automatically.
04POST

Multiple orders status

action=status
PARAMETERS3 FIELDS
keyYour API key
actionstatus
ordersOrder IDs separated by comma (up to 100)
EXAMPLE RESPONSEJSON
{
    "1": {
        "charge": "0.27",
        "start_count": "3572",
        "status": "Partial",
        "remains": "157",
        "currency": "USD"
    },
    "10": {
        "error": "Incorrect order ID"
    },
    "100": {
        "charge": "1.44",
        "start_count": "234",
        "status": "In progress",
        "remains": "10",
        "currency": "USD"
    }
}
05POST

Create refill

action=refill
PARAMETERS3 FIELDS
keyYour API key
actionrefill
orderOrder ID
EXAMPLE RESPONSEJSON
{
    "refill": "1"
}
06POST

Create multiple refills

action=refill
PARAMETERS3 FIELDS
keyYour API key
actionrefill
ordersOrder IDs separated by comma (up to 100)
EXAMPLE RESPONSEJSON
[
    {
        "order": 1,
        "refill": 1
    },
    {
        "order": 2,
        "refill": {
            "error": "Refill is not available for this order"
        }
    }
]
07POST

Get refill status

action=refill_status
PARAMETERS3 FIELDS
keyYour API key
actionrefill_status
refillRefill ID
EXAMPLE RESPONSEJSON
{
    "status": "Completed"
}
Possible statuses: Pending, In progress, Completed, Rejected. Multiple: pass refills with comma-separated IDs and an array is returned.
08POST

Cancel orders

action=cancel
PARAMETERS3 FIELDS
keyYour API key
actioncancel
ordersOrder IDs separated by comma (up to 100)
EXAMPLE RESPONSEJSON
[
    {
        "order": 9,
        "cancel": 1
    },
    {
        "order": 2,
        "cancel": {
            "error": "Cancel is not available for this order"
        }
    }
]
Only services with cancel enabled accept the request. When the cancel completes, the order status changes to Canceled and the unspent amount is refunded.
09POST

User balance

action=balance
PARAMETERS2 FIELDS
keyYour API key
actionbalance
EXAMPLE RESPONSEJSON
{
    "balance": "100.84",
    "currency": "USD"
}
Before you go live

Never send more quantity than the service maximum, and never set an interval below the service start time. Both cause the order to fail. Every service exposes its own min, max, start time and refill policy through action=services.

Errors

{"error"} body
ERRORMEANING
Invalid API keyHTTP 401. The key is missing, wrong, or the account is suspended
Incorrect requestHTTP 404. The action parameter is missing or unknown
Incorrect service IDThe service does not exist or is disabled
Incorrect order IDThe order does not exist or belongs to another account
Not enough fundsYour balance does not cover the order charge
Minimum quantity is X / Maximum quantity is XQuantity outside the service limits
You already have an active order for this linkThe service does not accept duplicate links while an order is running
Too many requests, slow downRate limit exceeded, retry after a minute

Example code

LANGUAGE
<?php
// NLO SMM API client - https://nlosmm.com/api
class NloApi
{
    public $api_url = 'https://nlosmm.com/api/v2';
    public $api_key = 'YOUR_API_KEY';

    public function services()                 { return $this->connect(['action' => 'services']); }
    public function balance()                  { return $this->connect(['action' => 'balance']); }
    public function order($data)               { return $this->connect(array_merge(['action' => 'add'], $data)); }
    public function status($order_id)          { return $this->connect(['action' => 'status', 'order' => $order_id]); }
    public function multiStatus($order_ids)    { return $this->connect(['action' => 'status', 'orders' => implode(',', (array)$order_ids)]); }
    public function refill($order_id)          { return $this->connect(['action' => 'refill', 'order' => $order_id]); }
    public function refillStatus($refill_id)   { return $this->connect(['action' => 'refill_status', 'refill' => $refill_id]); }
    public function cancel($order_ids)         { return $this->connect(['action' => 'cancel', 'orders' => implode(',', (array)$order_ids)]); }

    private function connect($post)
    {
        $post['key'] = $this->api_key;
        $ch = curl_init($this->api_url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $result = curl_exec($ch);
        curl_close($ch);
        return json_decode($result, true);
    }
}

$api = new NloApi();
$order = $api->order(['service' => 4567, 'link' => 'https://www.tiktok.com/@user', 'quantity' => 1000]);
$status = $api->status($order['order']);
print_r($status);
Resellers & Panel Owners

Wire your panel straight into ours.

Most panel scripts work out of the box: Perfect Panel, Starter Panel, whatever you are running. Rates are wholesale, so your markup is yours. API access is free with any account.

3,500+Services
99.9%Uptime
FreeAPI access
24/7Support