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.
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)
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=servicesPARAMETERS2 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=addSERVICE 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=statusPARAMETERS3 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=statusPARAMETERS3 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=refillPARAMETERS3 FIELDS
keyYour API key
actionrefill
orderOrder ID
EXAMPLE RESPONSEJSON
{
"refill": "1"
}06POST
Create multiple refills
action=refillPARAMETERS3 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_statusPARAMETERS3 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=cancelPARAMETERS3 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=balancePARAMETERS2 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"} bodyERRORMEANING
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