Catalog
List services
Lists every service you can order, with your own price, limits, tags, extra fields, drip-feed limits and availability. Each service is one object, and all fields from earlier versions are still there.
https://notpanel.com/api/v3action=services- API key required
- Rate limited
- Body:
application/x-www-form-urlencoded
Parameters
Always sent
keystringRequired- Your API key.
actionstringRequiredservicesMust be the literal string "services".
Action parameters
languagestringOptional- Language of the names. Leave it out for English. The English name is always in canonical_name.en · es · pt · ru · tr · ar · hi · id · fr · zh
servicestring (CSV)Optional- Only return these services. Up to 100 comma-separated service ids.
curl -X POST https://notpanel.com/api/v3 \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "key=YOUR_API_KEY&action=services&service=7,12"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",
service: "7,12",
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://notpanel.com/api/v3",
data={
"key": "YOUR_API_KEY",
"action": "services",
"service": "7,12",
},
)
print(res.json())<?php
$body = http_build_query([
'key' => 'YOUR_API_KEY',
'action' => 'services',
'service' => '7,12',
]);
$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));
Replace YOUR_API_KEY with the key from your API page.
[
{
"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
},
{
"service": "12",
"name": "Telegram Post Reactions",
"type": "Default",
"category": "Telegram Reactions",
"rate": "0.90",
"min": "10",
"max": "50000",
"refill": false,
"cancel": false,
"dripfeed": false,
"type_key": "default",
"canonical_name": "Telegram Post Reactions",
"name_language": "en",
"platform": "telegram",
"tags": ["reactions"],
"fields": [
{
"key": "reactions",
"kind": "reactions",
"required": false,
"label": "Reactions",
"allowed": ["👍", "👎", "❤️", "🔥", "🥰", "👏", "😁", "🤔", "🤯", "😱", "🤬", "😢", "🎉", "🤩", "🤮", "💩", "🙏", "👌", "🕊️", "🤡", "🥱", "🥴", "😍", "🐳", "❤️🔥", "🌚", "🌭", "💯", "🤣", "⚡", "🍌", "🏆", "💔", "🤨", "😐", "🍓", "🍾", "💋", "🖕", "😈", "😴", "😭", "🤓", "👻", "👨💻", "👀", "🎃", "🙈", "😇", "😨", "🤝", "✍️", "🤗", "🫡", "🎅", "🎄", "☃️", "💅", "🤪", "🗿", "🆒", "💘", "🙉", "🦄", "😘", "💊", "🙊", "😎", "👾", "🤷♂️", "🤷", "🤷♀️", "😡"],
"max_distinct": 11,
"modes": ["mix", "exact"]
}
],
"drip_feed": null,
"step": 1,
"availability": "available",
"average_time_minutes": null
}
]Errors
- 400
{"error":"Invalid language: not_allowed","error_code":"INVALID_PARAMETER","retryable":false,"details":{"param":"language","rule":"not_allowed"}}The language is not one of the supported language codes.
- 400
{"error":"Maximum 100 IDs per request","error_code":"TOO_MANY_IDS","retryable":false}The service list holds more than 100 ids.
- 429
{"error":"Rate limit exceeded","error_code":"API_RATE_LIMITED","retryable":true,"retry_after":12}More than 10 requests in a minute. Wait for the Retry-After seconds.
Response fields
The reply is an array with one object per service. Every field from earlier versions is unchanged; tags, fields, drip_feed, step, availability and average_time_minutes are new, and cancel now means what it says.
Response fields
serviceinteger- Stable numeric service id. Use it as
serviceinadd. namestring- Service name in the requested language.
typestring- Service type name. For logic, use
type_key. categorystring- Category name.
ratestring- Your own price per 1,000 units in USD, as a string. It already includes your account discount.
mininteger- Smallest quantity for one order.
maxinteger- Largest quantity for one order.
refillbooleantruewhen refill works for this service through the API.cancelbooleantruewhen cancel requests are supported after the first 15 seconds. The instant cancel at the start works on every order and is not shown here.dripfeedbooleantruewhen the service accepts drip-feed, eitherrunswithintervalordrip_feed_total_minutes.type_keystring- Stable type key such as
defaultorcustom_comments. It tells you which extra fields to expect. canonical_namestring- The English name, even when
languageis set. name_languagestring- Language of
name. platformstring | null- Platform key such as
instagram, ornullwhen the service has none. tagsstring[]- Short labels for what the service offers. See the list below.
fieldsobject[]- Extra inputs the service takes, with their limits. Empty when only link and quantity are needed.
drip_feedobject | null- Drip-feed limits, or
nullwhen the service has none. stepinteger- Quantity must be a multiple of this number.
availabilitystringavailableorpaused. See Availability below.average_time_minutesinteger | null- Average minutes until delivery starts, or
nullwhen too few orders are known.
Tags
tags lets you filter the list without reading every field. A service has a tag for each thing it offers.
Tags
refill- Refill works through the API.
cancel- Cancel requests are supported, not only the instant cancel.
drip_feed- The service accepts drip-feed.
reactions- The service takes a
reactionsfield. last_posts- The service takes a
last_postsfield. poll_answer- The service takes an
answer_numberfield. Every other extra field adds a tag with its own name, for examplecomments.
Extra fields
fields describes each extra input a service accepts: its key, kind, whether it is required and its limits. Send every field by its key in add. Reactions list the allowed emoji and the modes. The next page explains each field and its rules.
Drip-feed limits
drip_feed is null or one of two shapes. batches services take a number of runs and the minutes between them. unit_delay services spread the whole order over a total time. Either way the whole order can take at most 48 hours (2880 minutes).
{
"mode": "batches",
"min_runs": 2,
"max_runs": 100,
"min_interval_minutes": 1,
"max_interval_minutes": 1440,
"max_total_minutes": 2880
}{
"mode": "unit_delay",
"max_total_minutes": 2880
}Availability
Service errors when ordering
add returns these when the service you chose cannot take an order.
- 404
SERVICE_NOT_FOUND
Service not foundNo service has this id, or it is not available to you. Fix the request first.
- 410
SERVICE_DISCONTINUED
Service has been discontinuedThe service has been discontinued. Fix the request first.
- 409
SERVICE_PAUSED
Service is temporarily unavailableThe service is paused for now. Try again later. Retrying can help.
Other read actions
action=catalog returns the services as a paged list with their platform, category, average time and order fields. Optional filters: page, limit, search, platform, category, type, refill, dripfeed, available, min_rate, max_rate, sort and language. catalog is limited to 30 requests per minute per account.
action=account_status returns your lifetime spend, your API rate tier and your discount.