Realizar pedido
Envía un nuevo pedido contra un servicio del catálogo. La llamada es idempotente en request_id: los reintentos con el mismo valor devuelven la respuesta original, nunca un pedido duplicado.
POST
https://notpanel.com/api/v2action=addClave de API requeridaCon límite de tasa (por clave + por nivel + por IP)Cuerpo:
application/x-www-form-urlencodedrequest_id es obligatorio. Genera un UUID en el momento de realizar el pedido y pásalo en cada reintento del mismo pedido lógico. Sin él, la API rechaza la llamada con 400: no hay respaldo a claves generadas por el servidor.
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_idObligatorio | string | Clave de idempotencia proporcionada por quien llama. Hasta 128 caracteres. Mismo valor + mismo cuerpo = misma respuesta. Dos pedidos diferentes DEBEN usar dos valores diferentes. |
| linkObligatorio | string (URL) | URL de destino: perfil, publicación, video, canal, etc. Obligatorio para la mayoría de los tipos de servicio; algunos tipos (Suscripciones) aceptan un nombre de usuario en su lugar. Hasta 1000 caracteres; debe ser http(s). |
| quantityObligatorio | integer | Número de unidades a entregar. Debe cumplir los límites mín. y máx. del servicio. Para los servicios de Paquete y Suscripciones este parámetro se ignora: la facturación usa service.min. |
| runs | integer | Drip-feed: cuántas veces repetir el pedido. Solo tiene sentido para servicios donde dripfeed es true. |
| interval | integer | Drip-feed: minutos entre ejecuciones. Solo tiene sentido cuando runs > 1. |
| coupon | string | Código de cupón a aplicar. Sujeto a las restricciones del cupón por usuario, globales y de servicio. |
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/v2 \
-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/v2", {
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/v2",
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/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));
Ejemplo de respuesta
{
"order": "ord_01HG9X7KJP4N..."
}Errores comunes
| Estado | Cuerpo | Causa |
|---|---|---|
| 400 | {"error":"Missing required parameter: request_id"} | No se incluyó request_id. Pasa siempre un UUID. |
| 400 | {"error":"Service not found"} | El ID del servicio no existe o fue desactivado. Vuelve a obtener la lista de servicios. |
| 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. |