notpanel
ServicesPricingFAQGiveawayAPI
notpanel

Followers, likes and views for every platform.

The catalog combines directly operated services with capacity from vetted partners. Current availability, timing, refill, and drip-feed support are shown per service; routing and partner identities remain confidential.

Product

  • Services
  • Pricing
  • Price Index
  • Affiliate Program

Resources

  • API
  • Blog
  • FAQ
  • Status

Company

  • About
  • Why NotPanel
  • Contact Us

Legal

  • Terms of Service
  • Privacy Policy
  • Refund Policy

© 2026 NotPanel. All rights reserved.

support@notpanel.com
notpanel
API documentation
+
API documentation

Introduction

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

Catalog

  • List services
  • Advanced catalog
  • Service types

Orders

  • Place order
  • Order status
  • Refund quote
  • Refill
  • Cancel

Account

  • Account status
  • Balance

Webhooks

  • Manage webhooks

Reference

  • Changelog
  • SDKs & libraries

Need help?

support@notpanel.com →

Advanced service catalog

Returns a paginated snapshot of active services with account-priced rates and structured discovery metadata. Use the legacy services action when an existing reseller SDK requires the original cached array shape.

POSThttps://notpanel.com/api/v3action=catalog
API key requiredRate limited (shared account + IP + action)Body: application/x-www-form-urlencoded
action=catalog is a discovery snapshot. catalog_updated_at describes the newest catalog metadata in the filtered result, not a guaranteed price timestamp or quote. The charge returned by the committed action=add response is authoritative.

Parameters

NameTypeDescription
keyRequiredstringYour API key.
actionRequiredstringMust be the literal string "catalog".
pageintegerPage number from 1 to 100000. Defaults to 1.
limitintegerRows per page from 1 to 200. Defaults to 100.
languagelanguage codeOptional service-name language: en, es, pt, ru, tr, ar, hi, id, fr, or zh. pt is Brazilian Portuguese and zh is Simplified Chinese. Curated market terminology preserves recognizable brands and product identifiers. Omit it for the legacy English response shape. Admins can review or refine individual names.
searchstringCase-insensitive service-name search, or an exact numeric service ID. Maximum 100 characters.
platforminteger | slugPlatform numeric ID or slug.
categoryinteger | slugCategory numeric ID or slug. A slug requires platform; a numeric category ID can be used without platform.
typestringExact supported service type, such as default, custom_comments, subscriptions, or web_traffic.
sortstringOne of popular, price_asc, price_desc, time_asc, time_desc, name_asc, or newest. Defaults to popular.
refillbooleanFilter by refill capability. Accepts 1, 0, true, or false.
dripfeedbooleanFilter by drip-feed capability. Accepts 1, 0, true, or false.
availablebooleanFilter by current order availability. Accepts 1, 0, true, or false; action=add still re-checks availability when committing an order.
min_rateUSD decimalMinimum non-negative account-priced USD rate per 1,000 units. Use a canonical decimal from 0 to 999999999999.99999999, with at most 12 whole-number and 8 fractional digits; signs and exponents are rejected.
max_rateUSD decimalMaximum non-negative account-priced USD rate per 1,000 units. It cannot be lower than min_rate. Use a canonical decimal from 0 to 999999999999.99999999, with at most 12 whole-number and 8 fractional digits; signs and exponents are rejected.

Example request

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

curl -X POST https://notpanel.com/api/v3 \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "key=YOUR_API_KEY&action=catalog&platform=instagram&available=true&sort=price_asc&limit=2&language=hi"
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: "catalog",
    platform: "instagram",
    available: "true",
    sort: "price_asc",
    limit: "2",
    language: "hi",
  }),
});

const data = await res.json();
console.log(data);
import requests

res = requests.post(
  "https://notpanel.com/api/v3",
  data={
    "key": "YOUR_API_KEY",
    "action": "catalog",
    "platform": "instagram",
    "available": "true",
    "sort": "price_asc",
    "limit": "2",
    "language": "hi",
},
)
print(res.json())
<?php
$body = http_build_query([
    'key' => 'YOUR_API_KEY',
    'action' => 'catalog',
    'platform' => 'instagram',
    'available' => 'true',
    'sort' => 'price_asc',
    'limit' => '2',
    'language' => 'hi',
]);

$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));

Example response

{
  "as_of": "2026-08-25T10:30:00.000Z",
  "requested_language": "hi",
  "catalog_updated_at": "2026-08-25T09:45:12.000Z",
  "total": 1,
  "page": 1,
  "per_page": 2,
  "total_pages": 1,
  "lowest_rate_per_1000": "0.50",
  "currency": "USD",
  "items": [
    {
      "service": "42547",
      "name": "Instagram कस्टम कमेंट्स",
      "canonical_name": "Instagram Custom Comments",
      "name_language": "hi",
      "description": "Custom comments for a public post",
      "type": "custom_comments",
      "rate": "0.50",
      "min": "10",
      "max": "5000",
      "platform": {
        "id": 1,
        "slug": "instagram",
        "name": "Instagram"
      },
      "category": {
        "id": 12,
        "slug": "comments",
        "name": "Comments"
      },
      "refill": true,
      "dripfeed": false,
      "available": true,
      "cancel": true,
      "cancel_mode": "grace_window",
      "cancel_window_seconds": 15,
      "average_time": "0-30 minutes",
      "average_time_minutes": 18,
      "average_time_sample_size": 24,
      "average_time_basis": "measured",
      "input_fields": [
        {
          "key": "comments",
          "label": "Comments",
          "type": "textarea",
          "required": true,
          "placeholder": "One comment per line. Each line is a separate comment."
        }
      ],
      "updated_at": "2026-08-25T09:45:12.000Z"
    }
  ]
}

Common errors

StatusBodyCause
400{"error":"A platform is required when category is a slug"}A category slug is ambiguous without a platform slug or ID. Supply platform, or use the category's numeric ID.
400{"error":"Invalid catalog sort"}The sort value is not one of the documented catalog sort modes.
400{"error":"language must be one of en, es, pt, ru, tr, ar, hi, id, fr, zh","error_code":"INVALID_LANGUAGE"}The language value is not supported. Use one of the ten documented service-name language codes.

Filtering and availability

Combine search, platform, category, type, capability, availability, and rate filters. A category slug is scoped by platform; a numeric category ID is globally unambiguous. The available field is a current discovery signal, while action=add remains the final acceptance check.

Response and freshness

The response includes as_of, pagination totals, account-priced lowest_rate_per_1000, and service rows. catalog_updated_at is the latest catalog-metadata update in the filtered set, not a price quote. input_fields lists only extra service-specific fields; common add fields and the service-type rules still apply. Timing fields state whether an average is measured, estimated, or unknown. Cancellation mode and window are discovery metadata; the committed add result controls the actual charge and cancellation timestamps. Average time measures placement to the first observed positive delivery, including active and drip-feed orders. It estimates the start, not completion. Generic provider averages are not used.

Localized discovery

Supply language to search and sort by a localized market-native service name using curated market terminology while still searching the canonical English name. Curated terminology preserves recognizable brands and product identifiers. The response then includes top-level requested_language and per-item canonical_name plus name_language. name_language reports the language actually returned; en means the requested translation was missing or stale and the canonical English name was used. The canonical English name remains the source reference; the numeric service ID remains the stable integration key. Admins can review or refine individual names.