Passer une commande
Envoie une commande avec la forme familière des panels reseller. Les anciens clients peuvent omettre l'idempotence ; le même payload du même compte est associé à la même commande pendant 60 secondes. Pour des retries exacts, réutilisez request_id ou idempotency_key. Les commandes ordinaires attendent 15 secondes avant envoi.
POST
https://notpanel.com/api/v3action=addClé d'API requiseDébit limité (compte partagé + IP + action)Corps :
application/x-www-form-urlencodedrequest_id et idempotency_key sont facultatifs. Sans eux, le même compte et payload sont protégés 60 secondes ; un doublon volontaire dans cette fenêtre renvoie la première commande. Attendez 60 secondes ou envoyez un request_id unique pour le créer immédiatement.
Paramètres
| Nom | Type | Description |
|---|---|---|
| keyRequis | string | Votre clé API. |
| actionRequis | string | Doit être la chaîne littérale « add ». |
| serviceRequis | integer | ID du service issu de la liste services. Le service doit être actif au moment de la soumission. |
| request_id | string | Clé facultative recommandée, unique par commande logique et limitée à 128 caractères. Réutilisez-la pour des retries exacts ; request_id prévaut si les deux alias sont envoyés. |
| idempotency_key | string | Alias facultatif de request_id. Sans les deux champs, le serveur applique 60 secondes de protection pour un payload identique. |
| linkConditionnel | string (URL) | URL cible : profil, publication, vidéo ou canal. Requise lorsque le service choisi demande un lien. Jusqu'à 1000 caractères ; doit utiliser http(s). |
| quantityConditionnel | integer | Nombre d'unités à livrer, dans les limites minimale et maximale du service. |
| runsConditionnel | integer | Requis avec interval uniquement si dripfeed=true. Utilisez un entier positif dans la limite effective configurée ; le plafond absolu est 1000. quantity × runs ne peut pas dépasser le maximum du service. |
| intervalConditionnel | integer | Requis avec runs uniquement si dripfeed=true. Utilisez un nombre entier positif de minutes dans la limite effective configurée ; le plafond absolu est 2880 minutes. Les services sans drip-feed rejettent les deux champs. Livraison progressive : 48 heures maximum (nombre de passages × intervalle). |
| coupon | string | Code de réduction à appliquer, sous réserve des limites du coupon par utilisateur, globales et par service. |
| delay | integer | Délai de démarrage facultatif. Utilisez un entier de 1 à 86400 secondes si le service choisi prend en charge ce champ. |
| lpost_count | integer | Nombre facultatif de dernières publications pour les services ordinaires compatibles. Utilisez un entier de 1 à 500, sauf si le service le définit comme son propre champ canonique. |
| reactions | string (map) | Carte d’emojis facultative pour les services ordinaires compatibles. Envoyez du JSON ou le format PHP à apostrophes pris en charge, avec au plus 50 emojis. Les valeurs doivent être toutes R pour une allocation aléatoire ou toutes des entiers positifs jusqu’à 1000000 ; ne mélangez pas les modes. Pour des comptes exacts, leur somme devient la quantité effective et fixe le montant validé. |
Exemple de requête
Remplacez YOUR_API_KEY par la clé générée sur la page API de votre tableau de bord.
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));
Exemple de réponse
{
"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"
}Erreurs courantes
| Statut | Corps | Cause |
|---|---|---|
| 400 | {"error":"Service not found"} | L'ID du service n'existe pas. Rechargez la liste des services et utilisez un ID actuel. |
| 400 | {"error":"Service has been discontinued and is no longer available"} | Le service existe, mais il est désactivé, archivé ou ne peut plus recevoir de commandes. Actualisez le catalogue et choisissez un service disponible. |
| 400 | {"error":"Insufficient balance"} | Le solde du compte est inférieur au montant total de la commande. Rechargez via le tableau de bord. |
| 400 | {"error":"Quantity must be a positive integer"} | La quantité était nulle, négative ou non entière. Validez avant la soumission. |
| 409 | {"error":"request_id was already used with different parameters"} | La requête entre en conflit avec l’état existant, par exemple si un request_id de add est réutilisé pour une autre commande logique. Utilisez la requête d’origine ou un nouvel identifiant unique selon le cas. |