Start here
Getting started
Connect your panel or bot to the v3 key + action API in five steps: create an account, create an API key, list services, place an order and track it.
Create an account
Sign up free with email or Google. You don't need to add funds to create an API key, only to place live orders.
Create an API key
Open your API page and select Create API key. Copy the key straight away: it is shown only once. If you lose it, revoke it and create a new one. Each account can hold up to 5 active keys.
All of your keys share the account's effective requests-per-minute limit. Lifetime successful spend earns the automatic tier; IP and action limits can also apply — see Rate limits.
Make your first request
Listing services is the simplest read-only call.
action=servicesreturns every service you can order with your own price (rate), limits, tags, extra fields and drip-feed limits. ReplaceYOUR_API_KEYwith the key from step 2.# 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";Response200 OK [ { "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 } ]Place an order
Pick a
servicefrom step 3, add funds in/dashboard/wallet, then callaction=addwith alinkand aquantity. Send your ownrequest_idso a retry can never create a second order. You can cancel any order for a full refund during its first 15 seconds.Place an order referencecurl -X POST https://notpanel.com/api/v3 \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "key=YOUR_API_KEY&action=add&service=7&link=https://instagram.com/example&quantity=1000&request_id=550e8400-e29b-41d4-a716-446655440000"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: "add", service: "7", link: "https://instagram.com/example", quantity: "1000", request_id: "550e8400-e29b-41d4-a716-446655440000", }), }); const data = await res.json(); console.log(data);import requests res = requests.post( "https://notpanel.com/api/v3", data={ "key": "YOUR_API_KEY", "action": "add", "service": "7", "link": "https://instagram.com/example", "quantity": "1000", "request_id": "550e8400-e29b-41d4-a716-446655440000", }, ) print(res.json())<?php $body = http_build_query([ 'key' => 'YOUR_API_KEY', 'action' => 'add', 'service' => '7', 'link' => 'https://instagram.com/example', 'quantity' => '1000', 'request_id' => '550e8400-e29b-41d4-a716-446655440000', ]); $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, 'ignore_errors' => true, ], ])); print_r(json_decode($response, true));Track the order
Check
action=statusfor one order or up to 100 at a time, or register a webhook to be told when an order changes.action=order_detailsshows everything about an order and can find it again by your ownrequest_id.