Developers
API documentation
Place and track orders from your own software. The API uses the standard SMM panel format: one endpoint, form-encoded POST parameters, JSON answers.
Endpoint and authentication
| API URL | https://qa-live-b-20261024.panels.smmpaneldesk.com/api/v2 |
|---|---|
| HTTP method | POST (GET with the same parameters is also accepted) |
| Body | application/x-www-form-urlencoded or JSON |
| Authentication | Send your API key in the key parameter of every request. |
| Response | JSON |
| Version 1 | https://qa-live-b-20261024.panels.smmpaneldesk.com/api/v1 is the same handler and stays supported. |
Your key is shown in your account after you sign in. It is never displayed on public pages. Keep it secret: anyone with it can spend your balance.
Example request
Place an order of 1,000 units on service 1. The same call in three languages:
cURL
curl -X POST https://qa-live-b-20261024.panels.smmpaneldesk.com/api/v2 \
-H 'Idempotency-Key: 7b1f0c2e-order-1' \
-d key=YOUR_API_KEY \
-d action=add \
-d service=1 \
-d link='https://www.instagram.com/p/example/' \
-d quantity=1000
PHP
<?php
$ch = curl_init('https://qa-live-b-20261024.panels.smmpaneldesk.com/api/v2');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Idempotency-Key: 7b1f0c2e-order-1'],
CURLOPT_POSTFIELDS => http_build_query([
'key' => 'YOUR_API_KEY',
'action' => 'add',
'service' => 1,
'link' => 'https://www.instagram.com/p/example/',
'quantity' => 1000,
]),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
if (isset($response['error'])) {
throw new RuntimeException($response['error']);
}
echo $response['order'];
Python
import requests
response = requests.post(
'https://qa-live-b-20261024.panels.smmpaneldesk.com/api/v2',
headers={'Idempotency-Key': '7b1f0c2e-order-1'},
data={
'key': 'YOUR_API_KEY',
'action': 'add',
'service': 1,
'link': 'https://www.instagram.com/p/example/',
'quantity': 1000,
},
timeout=30,
).json()
if 'error' in response:
raise RuntimeError(response['error'])
print(response['order'])
Response
{
"status": "success",
"order": 23501
}
Service list action=services
Every service you can order, with the rate YOU pay per 1,000 units (or per package). Your own custom rates and discounts are already applied.
| Parameter | Description |
|---|---|
key | Your API key |
action | services |
Request
curl -X POST https://qa-live-b-20261024.panels.smmpaneldesk.com/api/v2 \
-d key=YOUR_API_KEY \
-d action=services
Example response
[
{
"service": 1,
"name": "Instagram Followers",
"type": "default",
"category": "Instagram Followers",
"rate": "0.9000",
"min": 50,
"max": 10000,
"dripfeed": 1,
"refill": true,
"cancel": false
}
]
Add order action=add
Creates an order and charges your balance. Which extra fields are required depends on the service type returned by action=services (see the table of order types). Send an Idempotency-Key header to make retries safe.
| Parameter | Description |
|---|---|
key | Your API key |
action | add |
service | Service ID |
link | Link to the page or post (all types except Subscriptions) |
quantity | Quantity (types with a quantity) |
runs | Drip-feed only: number of runs (optional) |
interval | Drip-feed only: minutes between runs, 1–1440 (optional) |
auto_refill | 1 or 0: opt this order in or out of auto-refill when the panel offers it; omitted = your account default; ignored for services without refill (optional) |
Request
curl -X POST https://qa-live-b-20261024.panels.smmpaneldesk.com/api/v2 \
-d key=YOUR_API_KEY \
-d action=add \
-d service=SERVICE \
-d link=LINK \
-d quantity=QUANTITY \
-d runs=RUNS \
-d interval=INTERVAL \
-d auto_refill=AUTO_REFILL
Example response
{
"status": "success",
"order": 23501
}
Order status action=status
Status of one order (order=ID). Drip-feed orders return their runs and the ids of the orders created so far. refill_until (end of the refill window, ISO 8601, null when unknown or not a refill service) and auto_refill are extra fields after the standard ones.
| Parameter | Description |
|---|---|
key | Your API key |
action | status |
order | Order ID |
Request
curl -X POST https://qa-live-b-20261024.panels.smmpaneldesk.com/api/v2 \
-d key=YOUR_API_KEY \
-d action=status \
-d order=ORDER
Example response status
{
"charge": "0.2782",
"start_count": 3572,
"status": "Partial",
"remains": 157,
"currency": "USD",
"refill_until": "2026-12-01T10:00:00+00:00",
"auto_refill": false
}
Example response status_dripfeed
{
"status": "In progress",
"runs": 10,
"orders": [
23502,
23503
]
}
Multiple orders status action=status
Up to 100 comma-separated order ids (orders=ID,ID). The answer is keyed by order id; an unknown id gets an error entry instead of failing the whole call.
| Parameter | Description |
|---|---|
key | Your API key |
action | status |
orders | 1,10,100 |
Request
curl -X POST https://qa-live-b-20261024.panels.smmpaneldesk.com/api/v2 \
-d key=YOUR_API_KEY \
-d action=status \
-d orders=1,10,100
Example response
{
"1": {
"charge": "0.2782",
"start_count": 3572,
"status": "Partial",
"remains": 157,
"currency": "USD",
"refill_until": "2026-12-01T10:00:00+00:00",
"auto_refill": false
},
"10": {
"error": "Incorrect order ID"
}
}
Create refill action=refill
Requests a refill for a refill-eligible order (order=ID), or for up to 100 orders (orders=ID,ID) — the multi form answers one entry per order.
| Parameter | Description |
|---|---|
key | Your API key |
action | refill |
order | Order ID |
Request
curl -X POST https://qa-live-b-20261024.panels.smmpaneldesk.com/api/v2 \
-d key=YOUR_API_KEY \
-d action=refill \
-d order=ORDER
Example response refill
{
"refill": 1
}
Example response multi_refill
[
{
"order": 1,
"refill": 1
},
{
"order": 2,
"error": "Incorrect order ID"
}
]
Refill status action=refill_status
Status of one refill (refill=ID), or of up to 100 refills (refills=ID,ID) keyed by refill id. Statuses: Pending, In progress, Completed, Error.
| Parameter | Description |
|---|---|
key | Your API key |
action | refill_status |
refill | Refill ID |
Request
curl -X POST https://qa-live-b-20261024.panels.smmpaneldesk.com/api/v2 \
-d key=YOUR_API_KEY \
-d action=refill_status \
-d refill=REFILL
Example response refill_status
{
"status": "Completed"
}
Example response multi_refill_status
{
"1": {
"refill": 1,
"status": "Completed"
},
"2": {
"error": "Refill not found"
}
}
Cancel orders action=cancel
Asks the supplier to cancel an order (order=ID) or up to 100 orders (orders=ID,ID). The answer is the cancel request id; the order changes status once the supplier confirms.
| Parameter | Description |
|---|---|
key | Your API key |
action | cancel |
orders | 1,10 |
Request
curl -X POST https://qa-live-b-20261024.panels.smmpaneldesk.com/api/v2 \
-d key=YOUR_API_KEY \
-d action=cancel \
-d orders=1,10
Example response cancel
{
"cancel": 1
}
Example response multi_cancel
[
{
"order": 9,
"cancel": 2
},
{
"order": 10,
"error": "Incorrect order ID"
}
]
Balance action=balance
Your wallet balance, in your account's base currency.
| Parameter | Description |
|---|---|
key | Your API key |
action | balance |
Request
curl -X POST https://qa-live-b-20261024.panels.smmpaneldesk.com/api/v2 \
-d key=YOUR_API_KEY \
-d action=balance
Example response
{
"balance": "100.8400",
"currency": "USD"
}
Order types
The type field of action=services tells you which fields action=add needs. Lists (comments, usernames, hashtags, groups) are one entry per line.
| type | Required fields | Notes |
|---|---|---|
defaultDefault |
service, link, quantity |
Add runs + interval for drip-feed when the service has dripfeed = 1. |
packagePackage |
service, link |
Flat price; quantity is always 1. |
custom_commentsCustom comments |
service, link, comments |
One comment per line; quantity = number of lines. |
custom_comments_packageCustom comments package |
service, link, comments |
Flat price; one comment per line. |
mentions_custom_listMentions custom list |
service, link, usernames |
One username per line; quantity = number of usernames. |
mentions_hashtagMentions hashtag |
service, link, quantity, hashtag |
|
mentions_user_followersMentions user followers |
service, link, quantity, username |
|
mentions_media_likersMentions media likers |
service, link, quantity, media |
media must be an http(s) URL. |
mentions_with_hashtagsMentions with hashtags |
service, link, quantity, usernames, hashtags |
One entry per line in each list. |
comment_likesComment likes |
service, link, quantity, username |
username = the author of the comment. |
subscriptionsSubscriptions |
service, username, min, max, posts |
Optional: old_posts, delay, expiry. No link. Charged as max × posts. |
seoSEO |
service, link, quantity, keywords |
|
seo2SEO 2 |
service, link, quantity, keywords, email |
|
web_trafficWeb traffic |
service, link, quantity, country, device, type_of_traffic |
device 1–5; type_of_traffic 1 needs google_keyword, 2 needs referring_url. |
invites_from_groupsInvites from groups |
service, link, quantity, groups |
One group per line. |
Errors
A failed call answers with a single error field. Following the SMM convention the HTTP status is 200, except when the rate limit is hit (429). Always check for the error key.
{
"error": "Incorrect order ID"
}
| Message | When | HTTP |
|---|---|---|
API is disabled for this user or the key is invalid. Please check your API details. |
Missing, wrong or revoked key, or a suspended account. | 200 |
The API is currently disabled. Please contact support. |
The API is switched off for this store. | 200 |
This action is invalid |
Unknown action value. | 200 |
Incorrect order ID |
The order does not exist or is not yours. | 200 |
Refill not found |
The refill does not exist or is not yours. | 200 |
You do not have enough funds |
Your balance does not cover the order. | 200 |
This service does not exist. |
Unknown or unavailable service id. | 200 |
A request with this Idempotency-Key is already being processed. |
A second request reused a key while the first is still running. | 200 |
Rate limit exceeded. Please retry in N seconds. |
Too many requests for this key in one minute (Retry-After header set). | 429 |
Order validation messages (quantity limits, missing link, unsupported drip-feed and similar) are returned the same way, in the language of the request.
Rate limits and idempotency
- 300 requests per minute per API key. Above that the API answers HTTP 429 with a Retry-After header.
- After 30 requests with an invalid key in one minute, the address is refused for the rest of that minute.
- Multi-order calls (orders, refills) accept up to 100 ids; extra ids are ignored.
- Idempotency-Key header on action=add: repeating a request with the same key within 24 hours returns the first answer instead of creating a second order. Use a new unique value for every new order.