notpanel
ServicesPricingFAQGiveaway
notpanel

The fastest and most affordable SMM panel. Trusted by 1M+ users worldwide.

Product

  • Services
  • Pricing
  • Why NotPanel
  • About
  • Developers
  • Blog
  • FAQ

Legal

  • Terms of Service
  • Privacy Policy
  • Refund Policy

Connect

  • Contact Us
  • support@notpanel.com

© © 2026 NotPanel. All rights reserved.

API documentation
+
API Documentation

Introduction

  • Overview
  • Getting started
  • Authentication
  • Rate limits
  • Errors

Catalog

  • List services

Orders

  • Place order
  • Order status
  • Refill
  • Cancel

Account

  • Balance

Webhooks

  • Manage webhooks

Reference

  • Changelog
  • SDKs & libraries

Need help?

support@notpanel.com →

List services

Returns every active service in the catalog with rates customised for the calling account. The response is cached for 5 minutes per user, so high-frequency polling is safe.

POSThttps://notpanel.com/api/v2action=services
API key requiredRate limited (per-key + per-tier + per-IP)Body: application/x-www-form-urlencoded

Parameters

NameTypeDescription
keyRequiredstringYour API key. Required on every request.
actionRequiredstringMust be the literal string "services".

Example request

Replace YOUR_API_KEYwith the key generated under your dashboard’s API page.

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 data = await res.json();
console.log(data);
import requests

res = requests.post(
  "https://notpanel.com/api/v2",
  data={
    "key": "YOUR_API_KEY",
    "action": "services",
},
)
print(res.json())
<?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,
        'ignore_errors' => true,
    ],
]));

print_r(json_decode($response, true));

Example response

[
  {
    "service": "1",
    "name": "Instagram Followers — Real",
    "type": "Default",
    "rate": "0.50",
    "min": "100",
    "max": "100000",
    "category": "Instagram Followers",
    "refill": true,
    "cancel": true,
    "dripfeed": true
  },
  {
    "service": "2",
    "name": "TikTok Views — High Retention",
    "type": "Default",
    "rate": "0.05",
    "min": "1000",
    "max": "10000000",
    "category": "TikTok Views",
    "refill": false,
    "cancel": true,
    "dripfeed": false
  }
]

Common errors

StatusBodyCause
400{"error":"Invalid API key"}Missing or unrecognised key.
403{"error":"Account suspended"}Account is not in active status.

Field reference

  • service — Stable numeric ID. Use this when placing an order.
  • type — Service type: "Default", "Custom Comments", "Mentions", "Package", "Subscriptions", "Poll Votes". Affects which extra parameters action=add requires.
  • rate — USD per 1,000 units, formatted as a string. Includes any per-user discount already applied — what you see is what you pay.
  • min, max — Order quantity bounds, inclusive.
  • refill — Whether action=refill is supported on completed orders for this service.
  • cancel — Whether action=cancel can short-circuit a processing order. Pending orders can always be cancelled regardless.
  • dripfeed — Whether the service accepts the optional runs / interval parameters for paced delivery.