Catálogo avanzado de servicios
Devuelve una instantánea paginada de servicios activos con tarifas aplicables a la cuenta y metadatos estructurados de descubrimiento. Usa la acción services heredada cuando un SDK existente necesite el array original en caché.
https://notpanel.com/api/v3action=catalogapplication/x-www-form-urlencodedaction=catalog es una instantánea de descubrimiento. catalog_updated_at indica la actualización más reciente de metadatos en el resultado filtrado, no una marca de precio garantizada ni una cotización. El cargo de la respuesta confirmada de action=add es definitivo.Parámetros
| Nombre | Tipo | Descripción |
|---|---|---|
| keyObligatorio | string | Tu clave de API. |
| actionObligatorio | string | Debe ser la cadena literal "catalog". |
| page | integer | Número de página de 1 a 100000. Predeterminado: 1. |
| limit | integer | Filas por página de 1 a 200. Predeterminado: 100. |
| language | language code | Idioma opcional para el nombre: en, es, pt, ru, tr, ar, hi, id, fr o zh. pt es portugués de Brasil y zh es chino simplificado. Omítelo para mantener la estructura antigua en inglés. Los administradores pueden revisar o ajustar cada nombre. |
| search | string | Búsqueda sin distinguir mayúsculas en el nombre, o ID numérico exacto. Máximo 100 caracteres. |
| platform | integer | slug | ID numérico o slug de plataforma. |
| category | integer | slug | ID numérico o slug de categoría. El slug requiere platform; un ID numérico puede usarse sin platform. |
| type | string | Tipo de servicio admitido exacto, como default, custom_comments, package o web_traffic. |
| sort | string | Uno de popular, price_asc, price_desc, time_asc, time_desc, name_asc o newest. Predeterminado: popular. |
| refill | boolean | Filtra por capacidad de reposición. Acepta 1, 0, true o false. |
| dripfeed | boolean | Filtra por capacidad drip-feed. Acepta 1, 0, true o false. |
| available | boolean | Filtra por disponibilidad actual. Acepta 1, 0, true o false; action=add vuelve a comprobarla al confirmar. |
| min_rate | USD decimal | Tarifa mínima no negativa en USD por 1.000 unidades para la cuenta. Usa un decimal canónico de 0 a 999999999999.99999999, con un máximo de 12 dígitos enteros y 8 decimales; no se admiten signos ni exponentes. |
| max_rate | USD decimal | Tarifa máxima no negativa en USD por 1.000 unidades. No puede ser menor que min_rate. Usa un decimal canónico de 0 a 999999999999.99999999, con un máximo de 12 dígitos enteros y 8 decimales; no se admiten signos ni exponentes. |
Ejemplo de petición
Reemplaza YOUR_API_KEY por la clave generada en la página de API de tu panel.
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));
Ejemplo de respuesta
{
"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"
}
]
}Errores comunes
| Estado | Cuerpo | Causa |
|---|---|---|
| 400 | {"error":"A platform is required when category is a slug"} | Un slug de categoría es ambiguo sin plataforma. Indica platform o usa el ID numérico de categoría. |
| 400 | {"error":"Invalid catalog sort"} | El valor sort no pertenece a los modos documentados. |
| 400 | {"error":"language must be one of en, es, pt, ru, tr, ar, hi, id, fr, zh","error_code":"INVALID_LANGUAGE"} | El valor de idioma no es compatible. Usa uno de los diez códigos de idioma documentados para nombres de servicios. |