NotPanel API · v3
API documentation
Connect NotPanel to your SMM panel, website, or bot. Use the API to get services, place orders, and check order status.
Send every request as a POST with a form-encoded body that includes key and action. Responses are JSON.
Start in three steps
Create an account
Sign up free. You only add funds when you place live orders.
Create free accountCreate an API key
Open the API page in your dashboard. The key is shown once, so copy it straight away.
Open the API pageSend your first request
List services to get their IDs, prices and limits.
See the example
Your first request
action=services only reads data, so it is safe to try. Replace YOUR_API_KEY with the key from your API page.
- Method
- POST
- Body
- application/x-www-form-urlencoded
- Response
- JSON array of services
# List the services you can order
curl -X POST https://notpanel.com/api/v3 \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "key=YOUR_API_KEY&action=services"const res = await fetch("https://notpanel.com/api/v3", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({
key: "YOUR_API_KEY",
action: "services",
}),
});
const services = await res.json();
console.log(`Found ${services.length} services`);import requests
res = requests.post(
"https://notpanel.com/api/v3",
data={"key": "YOUR_API_KEY", "action": "services"},
)
services = res.json()
print(f"Found {len(services)} services")<?php
$body = http_build_query([
'key' => 'YOUR_API_KEY',
'action' => 'services',
]);
$response = file_get_contents('https://notpanel.com/api/v3', false, stream_context_create([
'http' => [
'method' => 'POST',
'header' => "Content-Type: application/x-www-form-urlencoded\r\n",
'content' => $body,
],
]));
$services = json_decode($response, true);
echo "Found " . count($services) . " services\n";
[
{
"service": "7",
"name": "Instagram Followers",
"type": "Default",
"category": "Instagram Followers",
"rate": "1.20",
"min": "100",
"max": "10000",
"refill": true,
"cancel": true,
"dripfeed": true,
"type_key": "default",
"canonical_name": "Instagram Followers",
"name_language": "en",
"platform": "instagram",
"tags": ["refill", "cancel", "drip_feed"],
"fields": [],
"drip_feed": {
"mode": "batches",
"min_runs": 2,
"max_runs": 100,
"min_interval_minutes": 1,
"max_interval_minutes": 1440,
"max_total_minutes": 2880
},
"step": 1,
"availability": "available",
"average_time_minutes": 30
}
]API reference
Every action is a POST to the API URL with its own action value.
Catalog
Find services and prices
Orders
Place and manage orders
Account
Balance and account limits
Webhooks
Get notified about order changes
Guides
What the API includes
API key authentication
One account-scoped secret per key. All your keys share the account's requests-per-minute limit, and any key can be revoked from the dashboard.
Clear rate limits
One limit per account that grows with your spend, plus a few narrow limits on heavy actions. Every reply carries X-RateLimit headers.
Signed webhooks
One signed event per call when an order completes, is partly delivered or is canceled, and when a refill finishes. Delivery is at least once, with retries.
Retry-safe orders
Send your own
request_idand repeating a request never creates a second order. Without it, an identical add within 60 seconds returns the first order.Free cancel at the start
Every order can be canceled for a full refund during its first 15 seconds. Later, cancel requests work where the service supports them.
Direct panel compatibility
Panels that speak the standard key + action API can switch the base URL. The /api/v1, /api/v2 and /api/v3 addresses behave identically.