Realizar pedido
Envía un pedido con la forma conocida de panel reseller. Los clientes antiguos pueden omitir idempotencia; el mismo payload de la misma cuenta se asigna al mismo pedido durante 60 segundos. Para reintentos exactos, reutiliza request_id o su alias idempotency_key. Los pedidos normales se retienen 15 segundos antes del envío.
POST
https://notpanel.com/api/v3action=addClave de API requeridaCon límite de tasa (cuenta compartida + IP + acción)Cuerpo:
application/x-www-form-urlencodedrequest_id e idempotency_key son opcionales. Sin ellos, la misma cuenta y el mismo payload reciben protección de 60 segundos; un duplicado intencional dentro de esa ventana devuelve el primer pedido. Espera 60 segundos o envía un request_id único para duplicarlo inmediatamente.
Parámetros
| Nombre | Tipo | Descripción |
|---|---|---|
| keyObligatorio | string | Tu clave de API. |
| actionObligatorio | string | Debe ser la cadena literal "add". |
| serviceObligatorio | integer | ID del servicio de la lista de servicios. El servicio debe estar activo en el momento del envío. |
| request_id | string | Clave opcional preferida, única por pedido lógico y de hasta 128 caracteres. Reutilízala para reintentos exactos; request_id prevalece si se envían ambos alias. |
| idempotency_key | string | Alias opcional de request_id. Si faltan ambos campos, el servidor aplica 60 segundos de protección para payloads idénticos. |
| linkCondicional | string (URL) | URL de destino: perfil, publicación, vídeo o canal. Obligatoria cuando el servicio seleccionado requiere un enlace. Hasta 1000 caracteres; debe usar http(s). |
| quantityCondicional | integer | Número de unidades que se entregarán, dentro del mínimo y máximo del servicio. |
| runsCondicional | integer | Obligatorio junto con interval solo si dripfeed=true. Usa un entero positivo dentro del límite configurado efectivo devuelto por la validación; el máximo absoluto es 1000. quantity × runs no puede superar el máximo del servicio. |
| intervalCondicional | integer | Obligatorio junto con runs solo si dripfeed=true. Usa minutos enteros positivos dentro del límite configurado efectivo devuelto por la validación; el máximo absoluto es 2880 minutos. Los servicios sin drip-feed rechazan ambos campos. Programación gradual: máximo 48 horas (ejecuciones × intervalo). |
| coupon | string | Código de cupón que se aplicará, sujeto a los límites del cupón por usuario, globales y por servicio. |
| delay | integer | Retraso inicial opcional. Use un entero de 1 a 86400 segundos si el servicio seleccionado admite este campo. |
| lpost_count | integer | Número opcional de últimas publicaciones para servicios compatibles. Usa un entero de 1 a 500, salvo que el servicio lo defina como campo canónico propio. |
| reactions | string (map) | Mapa de emojis opcional para servicios compatibles. Envía JSON o el formato PHP admitido con comillas simples, con hasta 50 emojis. Los valores deben ser todos R o todos enteros positivos de hasta 1000000; no mezcles modos. En conteos exactos, la suma determina la cantidad efectiva y el cargo confirmado. |
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=add&service=1&request_id=550e8400-e29b-41d4-a716-446655440000&link=https://instagram.com/example&quantity=1000"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: "1",
request_id: "550e8400-e29b-41d4-a716-446655440000",
link: "https://instagram.com/example",
quantity: "1000",
}),
});
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": "1",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"link": "https://instagram.com/example",
"quantity": "1000",
},
)
print(res.json())<?php
$body = http_build_query([
'key' => 'YOUR_API_KEY',
'action' => 'add',
'service' => '1',
'request_id' => '550e8400-e29b-41d4-a716-446655440000',
'link' => 'https://instagram.com/example',
'quantity' => '1000',
]);
$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
{
"order": 7001,
"status": "Pending",
"status_key": "pending",
"charge": "0.50",
"currency": "USD",
"cancel_available": true,
"cancel_window_seconds": 15,
"cancel_before": "2026-08-25T10:30:15.000Z"
}Errores comunes
| Estado | Cuerpo | Causa |
|---|---|---|
| 400 | {"error":"Service not found"} | El ID del servicio no existe. Vuelve a obtener la lista de servicios y usa un ID actual. |
| 400 | {"error":"Service has been discontinued and is no longer available"} | El servicio existe, pero está desactivado, archivado o ya no admite pedidos. Actualiza el catálogo y elige un servicio disponible. |
| 400 | {"error":"Insufficient balance"} | El saldo de la cuenta es inferior al cargo total del pedido. Recarga desde el panel. |
| 400 | {"error":"Quantity must be a positive integer"} | La cantidad fue cero, negativa o no entera. Valídala antes del envío. |
| 409 | {"error":"request_id was already used with different parameters"} | La solicitud entra en conflicto con el estado existente, por ejemplo al reutilizar un request_id de add para otro pedido lógico. Usa la solicitud original o un identificador único nuevo, según corresponda. |