Pedidos
Crear un pedido
Crea un pedido y cobra el dinero en un solo paso. La respuesta es inmediata: el pedido queda Pendiente y se puede cancelar gratis durante sus primeros 15 segundos. Envía tu propio request_id para que un reintento nunca cree un segundo pedido.
https://notpanel.com/api/v3action=add- Clave de API requerida
- Límite de solicitudes superado
- Cuerpo:
application/x-www-form-urlencoded
Parámetros
Siempre se envía
keystringObligatorio- Tu clave de API.
actionstringObligatorioaddDebe ser la cadena literal "add".
Pedido
serviceintegerObligatorio- ID del servicio de la lista de servicios.
linkstringObligatorio- El enlace al que entregar. Lo que se considera válido depende del servicio.
quantityintegerSegún el tipo de servicio- Cantidad total. Con
runseintervales la cantidad por ejecución. Las listas y las reacciones exactas cuentan su propia cantidad, y los paquetes tienen una fija.
Reintentos
request_idstringOpcional- Tu propio ID para este pedido, de hasta 128 caracteres. Repetirlo con los mismos parámetros devuelve el pedido original. Usarlo con parámetros distintos devuelve
REQUEST_ID_CONFLICT. idempotency_keystringOpcional- Alias de
request_id. Si se envían ambos, prevalecerequest_id.
Drip Feed
runsintegerOpcional- Drip feed clásico: el número de ejecuciones, de 2 a 100.
runs=1es un pedido normal. intervalintegerOpcional- Drip feed clásico: minutos entre ejecuciones, de 1 a 1440.
drip_feed_total_minutesintegerOpcional- Drip feed simple: completa toda la
quantityen esta cantidad de minutos, de 1 a 2880. No lo combines conrunseinterval.
Campos del servicio
reactionsstringOpcional- Reacciones de Telegram, por ejemplo
👍,❤️,🔥o👍:60,❤️:40. comments, usernames, answer_number, …Según el tipo de servicio- Otros campos adicionales por su nombre de campo, como
comments,usernamesoanswer_number. La listafieldsdel servicio indica cuáles admite.
curl -X POST https://notpanel.com/api/v3 \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "key=YOUR_API_KEY&action=add&service=7&link=https://instagram.com/example&quantity=1000&request_id=550e8400-e29b-41d4-a716-446655440000"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: "7",
link: "https://instagram.com/example",
quantity: "1000",
request_id: "550e8400-e29b-41d4-a716-446655440000",
}),
});
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": "7",
"link": "https://instagram.com/example",
"quantity": "1000",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
},
)
print(res.json())<?php
$body = http_build_query([
'key' => 'YOUR_API_KEY',
'action' => 'add',
'service' => '7',
'link' => 'https://instagram.com/example',
'quantity' => '1000',
'request_id' => '550e8400-e29b-41d4-a716-446655440000',
]);
$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));
Sustituye YOUR_API_KEY por la clave de tu página de API.
{
"order": 1234567,
"status": "Pending",
"status_key": "pending",
"charge": "1.20",
"currency": "USD",
"instant_cancel_until": "2026-10-03T10:00:15Z",
"cancel_available": true,
"cancel_window_seconds": 15,
"cancel_before": "2026-10-03T10:00:15Z"
}Errores
- 400
{"error":"Minimum quantity is 100","error_code":"MINIMUM_QUANTITY","retryable":false,"details":{"n":100}}La cantidad es inferior al mínimo del servicio. La misma estructura cubre el máximo, el paso y las demás comprobaciones.
- 402
{"error":"Insufficient balance","error_code":"INSUFFICIENT_BALANCE","retryable":false}La billetera no cubre el cargo. No se cobró nada y no existe ningún pedido. Añade fondos en
/dashboard/wallet. - 409
{"error":"request_id was already used with different parameters","error_code":"REQUEST_ID_CONFLICT","retryable":false}Ese
request_idya creó un pedido con parámetros distintos. Usa unrequest_idnuevo para un pedido diferente.
Respuesta
Cada add correcto devuelve el nuevo pedido de inmediato. Nunca aparecen datos internos de entrega; los cambios posteriores se ven en status y en los webhooks.
Campos de la respuesta
orderinteger- El número de pedido. Es el mismo número en el panel, en soporte y en cualquier otra acción.
statusstringPendingpara un pedido nuevo. Unrequest_idrepetido devuelve el estado actual del pedido.status_keystringpendingpara un pedido nuevo; si no, la clave del estado actual.chargestring- Lo que se te cobró, en USD, como cadena de texto.
currencystring- Siempre
USD. instant_cancel_untilstring (UTC time)- Fin de la ventana de cancelación gratuita: 15 segundos después de crear el pedido.
cancel_availablebooleantruemientras el pedido aún se puede cancelar con reembolso completo. Se mantiene para scripts anteriores.cancel_window_secondsinteger- Duración de la ventana de cancelación gratuita en segundos: 15. Se mantiene para scripts anteriores.
cancel_beforestring (UTC time)- La misma hora que
instant_cancel_until. Se mantiene para scripts anteriores. replayedboolean- Presente y true solo cuando este es el pedido original de un
request_idrepetido.
Reintentos y request_id
request_id (o su alias idempotency_key, de hasta 128 caracteres) se busca antes que nada. La misma solicitud devuelve el pedido original y no se cobra dos veces. Una solicitud distinta con el mismo ID devuelve REQUEST_ID_CONFLICT. Si llegan dos copias a la vez, una gana y la otra recibe el mismo pedido.
key=YOUR_API_KEY&action=add&service=7&link=https://instagram.com/example&quantity=1000&request_id=550e8400-e29b-41d4-a716-446655440000{
"order": 1234567,
"status": "In progress",
"status_key": "in_progress",
"charge": "1.20",
"currency": "USD",
"instant_cancel_until": "2026-10-03T10:00:15Z",
"cancel_available": false,
"cancel_window_seconds": 15,
"cancel_before": "2026-10-03T10:00:15Z",
"replayed": true
}key=YOUR_API_KEY&action=add&service=7&link=https://instagram.com/example&quantity=2000&request_id=550e8400-e29b-41d4-a716-446655440000{
"error": "request_id was already used with different parameters",
"error_code": "REQUEST_ID_CONFLICT",
"retryable": false
}Después de hacer un pedido
El pedido queda Pending y puedes cancelarlo con reembolso completo durante sus primeros 15 segundos. Los problemas detectados después, como un enlace incorrecto o un enlace ocupado, llegan como un pedido Canceled con un reason_code y un reembolso automático. Nunca son errores de add.
Qué se comprueba, en orden
Se devuelve el primer problema encontrado y no se cobra nada.
- El servicio existe y puede aceptar pedidos:
SERVICE_NOT_FOUND,SERVICE_DISCONTINUED,SERVICE_PAUSED. - La cantidad está dentro del mínimo y el máximo:
MINIMUM_QUANTITY,MAXIMUM_QUANTITY. - La cantidad encaja con el paso:
QUANTITY_STEP. - Listas y reacciones exactas: la cantidad coincide con el número de elementos,
QUANTITY_MISMATCH. - Los campos adicionales se ofrecen y son válidos:
OPTION_NOT_SUPPORTED,MISSING_PARAMETER,INVALID_OPTION. - Los valores de drip feed encajan:
DRIP_FEED_NOT_AVAILABLE,DRIP_FEED_CONFLICT,DRIP_FEED_INVALID. - El enlace encaja con el servicio:
INVALID_LINK,LINK_BLOCKED. - Un pedido activo por enlace, cuando el servicio tiene esa regla:
LINK_BUSY. - El saldo cubre el cargo:
INSUFFICIENT_BALANCE.
Errores de add
Todos usan la estructura de error común. Ramifica por error_code; el texto del mensaje es para las personas.
- 400
MISSING_PARAMETER
Missing required parameter: {param}Falta un parámetro obligatorio. details.param lo indica. Corrige primero la solicitud.
- 400
INVALID_PARAMETER
Invalid {param}: {rule}Un parámetro tiene un valor no válido. details.param y details.rule indican cuál y por qué. Corrige primero la solicitud.
- 404
SERVICE_NOT_FOUND
Service not foundNingún servicio tiene este ID o no está disponible para ti. Corrige primero la solicitud.
- 410
SERVICE_DISCONTINUED
Service has been discontinuedEl servicio se ha descontinuado. Corrige primero la solicitud.
- 409
SERVICE_PAUSED
Service is temporarily unavailableEl servicio está en pausa por ahora. Inténtalo más tarde. Reintentar puede servir.
- 503
ORDER_PLACEMENT_PAUSED
Ordering is temporarily pausedLos pedidos están en pausa para todos durante un breve tiempo. Retry-After indica cuándo volver a intentarlo. Reintentar puede servir.
- 400
MINIMUM_QUANTITY
Minimum quantity is {n}La cantidad es inferior al mínimo del servicio. Corrige primero la solicitud.
- 400
MAXIMUM_QUANTITY
Maximum quantity is {n}La cantidad supera el máximo del servicio. Corrige primero la solicitud.
- 400
QUANTITY_STEP
Quantity must be a multiple of {step}La cantidad no es múltiplo del paso del servicio. Corrige primero la solicitud.
- 400
QUANTITY_MISMATCH
quantity must equal the number of items in {param} ({count})La cantidad no coincide con el número de elementos de una lista o de un campo de reacciones. Corrige primero la solicitud.
- 400
MINIMUM_ORDER_AMOUNT
Minimum order amount is ${amount}El pedido vale menos que el importe mínimo de pedido. Corrige primero la solicitud.
- 400
OPTION_NOT_SUPPORTED
This service does not accept {param}El servicio no admite un campo que enviaste. Corrige primero la solicitud.
- 400
INVALID_OPTION
Invalid {param}: {rule}Un campo adicional tiene un valor no válido. details.param y details.rule indican cuál y por qué. Corrige primero la solicitud.
- 400
DRIP_FEED_NOT_AVAILABLE
Drip-feed is not available for this serviceEl servicio no tiene drip feed, o no lo tiene para esta cantidad. Corrige primero la solicitud.
- 400
DRIP_FEED_CONFLICT
Send runs and interval, or drip_feed_total_minutes, not bothSe enviaron las dos formas de drip feed en una misma solicitud. Corrige primero la solicitud.
- 400
DRIP_FEED_INVALID
{rule}Los valores de drip feed no encajan con los límites. El mensaje indica qué límite. Corrige primero la solicitud.
- 400
INVALID_LINK
Link is invalid for this serviceEl enlace no encaja con este servicio. Corrige primero la solicitud.
- 400
LINK_BLOCKED
This link is blocked. Contact support if this is a mistake.El enlace está bloqueado. Contacta con soporte si crees que es un error. Corrige primero la solicitud.
- 409
LINK_BUSY
An order for this link is still running. Wait until it finishes.Un pedido anterior para este enlace sigue en curso. Espera a que termine. Reintentar puede servir.
- 402
INSUFFICIENT_BALANCE
Insufficient balanceEl saldo de la billetera es inferior al cargo. Corrige primero la solicitud.
- 429
ORDER_LIMIT_REACHED
Too many orders. Try again later.Se hicieron o están abiertos demasiados pedidos a la vez. Inténtalo de nuevo más tarde. Reintentar puede servir.
- 409
SERVICE_CHANGED
Service settings changed while placing the order. Retry.La configuración del servicio cambió mientras se hacía el pedido. Envía la solicitud de nuevo. Reintentar puede servir.
- 409
REQUEST_ID_CONFLICT
request_id was already used with different parametersEste request_id ya creó un pedido con parámetros distintos. Corrige primero la solicitud.
- 500
INTERNAL_ERROR
Internal server errorAlgo falló por nuestra parte. Repetir un add con el mismo request_id es seguro. Reintentar puede servir.