From zero to your first successful API call in under 60 seconds. The v2 API is the same flat action-string convention every existing SMM reseller SDK already speaks — no SDK migration is required if you are coming from another panel.
Free signup via /register — email or Google OAuth. No credit card required to generate an API key, only to fund the wallet for placing live orders.
Once logged in, head to /dashboard/api. Click "Generate key" and copy the raw value — it is shown once, never again. If you lose it, regenerate (which revokes the old key). Each user can hold up to 10 keys; regeneration requires a fresh password re-prompt.
Default rate limit is whatever the admin has configured site-wide (typically 100 requests / minute / key). API tier limits stack on top — see Rate limits.
Listing the catalog is the simplest read-only call. The response is a JSON array of every active service with its rate, min, max, and capability flags. Replace YOUR_API_KEY with the key from step 2.
# 1. List available services
curl -X POST https://notpanel.com/api/v2 \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "key=YOUR_API_KEY&action=services"const res = await fetch("https://notpanel.com/api/v2", {
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/v2",
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/v2', 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";
Pick a service ID from step 3, fund the wallet via /dashboard/wallet, and call action=add with the service ID, target link, and quantity. Always pass anrequest_id — it is the idempotency key, and the API will refuse the call without it. See Place order for the complete parameter list.
Poll status for individual orders or batches up to 100 IDs. For event-driven integrations, register a webhook — you'll receive HMAC-signed POSTs on completion, refunds, cancellations, and low-balance alerts.
The action names, parameter conventions, and response shapes match the SMM v2 spec used by every major reseller panel. Most existing integrations need only a base URL change to switch over. The few differences are documented per-endpoint in the reference.