PastePanel
All articles
Article 12 min read

Guide d'intégration de l'API SMM panel (PHP, Python, Node.js)

P

PastePanel Team

Insights for panel operators

L'API SMM panel est le moteur qui transforme une simple boutique de services de croissance sociale en une véritable plateforme automatisée. Que vous vouliez synchroniser un catalogue de milliers de services, revendre auprès d'autres panels, alimenter un bot Telegram ou brancher votre propre application mobile, tout passe par l'API. Ce guide d'intégration détaillé vous montre, étape par étape et avec du code réel en PHP, Python et Node.js, comment dialoguer proprement avec l'API d'un SMM panel moderne comme celui fourni par PastePanel.

La bonne nouvelle, c'est que l'écosystème s'est standardisé. La quasi-totalité des plateformes du secteur — y compris tout panel de type perfect panel — exposent la même structure d'API : une seule URL de type /api/v2, une authentification par clé, et un paramètre action qui décrit l'opération souhaitée. Cela signifie qu'une intégration écrite pour un panel fonctionne, à quelques détails près, avec les autres. Vous investissez une fois dans votre couche d'intégration, et vous la réutilisez partout.

Dans cet article, nous couvrons l'ensemble du cycle : comprendre le protocole, sécuriser vos appels, lister le catalogue, passer des commandes (y compris drip-feed, Custom Comments et Subscriptions), suivre le statut, gérer les Refill et les annulations, puis industrialiser le tout avec des bonnes pratiques d'idempotence et de gestion d'erreurs. À la fin, vous disposerez de clients réutilisables prêts pour la production.

Comprendre l'architecture d'une API SMM panel

Le protocole d'une API SMM panel est volontairement simple. Il repose sur trois piliers :

  • Un point d'entrée unique : toutes les requêtes partent en POST vers https://votre-panel.com/api/v2. Comme PastePanel est white-label et multi-tenant, l'URL utilise votre propre domaine — vos clients et revendeurs ne voient jamais l'infrastructure sous-jacente.
  • Une authentification par clé : chaque requête embarque un paramètre key qui identifie l'utilisateur et son solde. La clé se génère depuis l'espace client du panel.
  • Un paramètre action : il indique l'opération. Les actions standard sont services, add, status, balance, refill, refill_status et cancel.

L'API accepte à la fois les corps form-encoded (le plus répandu, compatible avec les bibliothèques historiques) et le JSON (via l'en-tête Content-Type: application/json). Les réponses, elles, sont toujours en JSON. Cette double compatibilité facilite l'intégration depuis n'importe quel langage. Cette uniformité est précisément ce qui rend un panel de type perfect panel si facile à connecter à des outils tiers.

Voici la liste des actions les plus utilisées et ce qu'elles renvoient :

  • action=services : retourne la totalité du catalogue sous forme de tableau JSON. Chaque service expose service (identifiant), name, type, category, rate (prix pour 1000), min, max, ainsi que les drapeaux dripfeed, refill et cancel.
  • action=add : crée une commande et renvoie {"order": 12345}.
  • action=status : renvoie charge, start_count, status, remains et currency. On peut interroger une commande (order) ou un lot (orders séparées par des virgules).
  • action=balance : renvoie le solde disponible et la devise.
  • action=refill et action=refill_status : lancent et suivent une recharge (Refill).
  • action=cancel : demande l'annulation d'une commande éligible, avec remboursement proportionnel automatique.

Authentification et sécurité de l'intégration API SMM panel

La sécurité n'est pas une option quand des transactions financières transitent par votre API SMM panel. PastePanel applique plusieurs couches que votre code doit respecter et exploiter :

  • Clé API secrète : traitez-la comme un mot de passe. Ne la commitez jamais dans un dépôt Git, ne l'exposez jamais côté navigateur. Chargez-la depuis une variable d'environnement ou un coffre de secrets.
  • Signature HMAC-SHA256 optionnelle : pour les intégrations sensibles, vous pouvez ajouter un paramètre sign. La signature se calcule en triant les paramètres par ordre alphabétique, en les concaténant sous la forme clé=valeur séparés par &, puis en appliquant un HMAC-SHA256 avec votre clé API comme secret. Le serveur rejette toute requête dont la signature ne correspond pas, ce qui protège contre l'altération des paramètres.
  • Limites de débit : l'API tolère jusqu'à 50 requêtes par seconde et par utilisateur, et applique un plafond de commandes par minute. Un client bien conçu respecte ces limites et implémente un back-off en cas de réponse 429.
  • Protection anti-bruteforce : après plusieurs clés invalides, l'IP est temporairement bloquée. Vérifiez votre clé une bonne fois plutôt que de boucler sur des essais.

Côté opérateur, les clés API des providers upstream que vous connectez sont chiffrées au repos (chiffrement Fernet). Vos secrets et ceux de vos revendeurs restent isolés grâce à l'architecture multi-tenant.

Intégration en PHP

PHP reste le langage roi des intégrations SMM, notamment parce que la majorité des scripts et thèmes historiques du secteur sont écrits dans ce langage. Voici une classe cliente complète, basée sur cURL, directement réutilisable :

<?php
class SmmPanelApi {
    private $apiUrl;
    private $apiKey;

    public function __construct($apiUrl, $apiKey) {
        $this->apiUrl = $apiUrl;   // ex: https://votre-panel.com/api/v2
        $this->apiKey = $apiKey;
    }

    private function request(array $params) {
        $params['key'] = $this->apiKey;
        $ch = curl_init($this->apiUrl);
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_POST           => true,
            CURLOPT_POSTFIELDS     => http_build_query($params),
            CURLOPT_TIMEOUT        => 30,
            CURLOPT_HTTPHEADER     => ['Content-Type: application/x-www-form-urlencoded'],
        ]);
        $response = curl_exec($ch);
        if ($response === false) {
            throw new Exception('Erreur reseau: ' . curl_error($ch));
        }
        curl_close($ch);
        return json_decode($response, true);
    }

    public function services() {
        return $this->request(['action' => 'services']);
    }

    public function balance() {
        return $this->request(['action' => 'balance']);
    }

    public function addOrder($service, $link, $quantity, array $extra = []) {
        return $this->request(array_merge([
            'action'   => 'add',
            'service'  => $service,
            'link'     => $link,
            'quantity' => $quantity,
        ], $extra));
    }

    public function status($orderId) {
        return $this->request(['action' => 'status', 'order' => $orderId]);
    }

    public function refill($orderId) {
        return $this->request(['action' => 'refill', 'order' => $orderId]);
    }

    public function cancel($orderIds) {
        return $this->request(['action' => 'cancel', 'orders' => $orderIds]);
    }
}

// Utilisation
$api = new SmmPanelApi('https://votre-panel.com/api/v2', getenv('SMM_API_KEY'));
$order = $api->addOrder(101, 'https://instagram.com/mon_compte', 1000);
echo "Commande creee : #" . $order['order'];
?>

Remarquez le tableau $extra : il permet de passer les champs avancés (runs, interval, comments, usernames, etc.) sans alourdir la signature de la méthode. C'est ce qui rend la classe compatible avec tous les types de commande d'un panel de type perfect panel.

Intégration en Python

Python brille pour les scripts d'automatisation, les tâches planifiées de synchronisation de catalogue et les bots. La bibliothèque requests rend le code particulièrement lisible :

import os
import requests

class SmmPanelApi:
    def __init__(self, api_url: str, api_key: str):
        self.api_url = api_url
        self.api_key = api_key
        self.session = requests.Session()

    def _request(self, params: dict) -> dict:
        params["key"] = self.api_key
        resp = self.session.post(self.api_url, data=params, timeout=30)
        resp.raise_for_status()
        return resp.json()

    def services(self) -> list:
        return self._request({"action": "services"})

    def balance(self) -> dict:
        return self._request({"action": "balance"})

    def add_order(self, service, link, quantity, **extra) -> dict:
        return self._request({
            "action": "add",
            "service": service,
            "link": link,
            "quantity": quantity,
            **extra,
        })

    def status(self, order_id) -> dict:
        return self._request({"action": "status", "order": order_id})

    def multi_status(self, order_ids: list) -> dict:
        return self._request({"action": "status",
                              "orders": ",".join(map(str, order_ids))})

    def refill(self, order_id) -> dict:
        return self._request({"action": "refill", "order": order_id})


api = SmmPanelApi("https://votre-panel.com/api/v2", os.environ["SMM_API_KEY"])

# Synchroniser le catalogue
for svc in api.services():
    print(svc["service"], svc["name"], svc["rate"], svc["min"], svc["max"])

# Passer une commande drip-feed
order = api.add_order(
    service=205, link="https://tiktok.com/@compte/video/123",
    quantity=5000, runs=10, interval=60,
)
print("Order:", order["order"])

La méthode multi_status illustre un point crucial pour la performance : au lieu d'interroger vos commandes une par une, envoyez jusqu'à 100 identifiants séparés par des virgules dans un seul appel. Le panel renvoie un dictionnaire indexé par identifiant. Vous divisez ainsi par cent le nombre de requêtes lors de vos boucles de suivi.

Intégration en Node.js

Pour les applications temps réel, les webhooks et les back-ends JavaScript, Node.js est un choix naturel. Voici un client basé sur fetch, natif depuis les versions récentes de Node :

class SmmPanelApi {
  constructor(apiUrl, apiKey) {
    this.apiUrl = apiUrl;
    this.apiKey = apiKey;
  }

  async request(params) {
    const body = new URLSearchParams({ ...params, key: this.apiKey });
    const res = await fetch(this.apiUrl, {
      method: 'POST',
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
      body,
    });
    if (!res.ok && res.status !== 400) {
      throw new Error(`Erreur HTTP ${res.status}`);
    }
    return res.json();
  }

  services()            { return this.request({ action: 'services' }); }
  balance()             { return this.request({ action: 'balance' }); }
  status(order)         { return this.request({ action: 'status', order }); }
  refill(order)         { return this.request({ action: 'refill', order }); }

  addOrder(service, link, quantity, extra = {}) {
    return this.request({ action: 'add', service, link, quantity, ...extra });
  }
}

// Utilisation
const api = new SmmPanelApi('https://votre-panel.com/api/v2', process.env.SMM_API_KEY);

(async () => {
  const { balance, currency } = await api.balance();
  console.log(`Solde : ${balance} ${currency}`);

  const order = await api.addOrder(310, 'https://youtube.com/watch?v=abc', 2000);
  console.log('Commande :', order.order);
})();

Vous préférez le JSON au form-encoded ? Il suffit de passer Content-Type: application/json et d'envoyer JSON.stringify(params) comme corps. L'API SMM panel de PastePanel accepte les deux formats de manière transparente.

Gérer les types de commandes avancés via l'API

La force d'un panel moderne réside dans la richesse de ses types de commande. Chacun se pilote via des paramètres supplémentaires de l'action add :

  • Default : la commande classique. Paramètres service, link, quantity.
  • Drip-Feed : livraison échelonnée. Ajoutez runs (nombre de passages) et interval (minutes entre chaque passage). Idéal pour simuler une croissance naturelle de followers ou de views.
  • Custom Comments : fournissez la liste des commentaires dans comments, un par ligne.
  • Mentions : passez les cibles via usernames ou hashtags selon le service.
  • Subscriptions : abonnements sur nouveaux posts, pilotés par min, max, posts, old_posts, delay et expiry.
  • Poll : envoyez answer_number pour cibler l'option d'un sondage.
  • Package : services à prix fixe qui ne requièrent pas de quantity.

Pour les Mass Orders, il n'existe pas d'action dédiée : vous bouclez simplement sur l'action add côté client, en respectant la limite de commandes par minute. Le back-end asynchrone (Python/FastAPI) dispatche ensuite chaque commande vers le provider upstream en tâche de fond, ce qui garantit des temps de réponse rapides même sous forte charge.

Suivi des commandes, Refill et annulations

Une intégration robuste ne se contente pas de créer des commandes : elle en suit le cycle de vie. La bonne pratique consiste à interroger périodiquement action=status (par lots) et à mettre à jour votre base de données locale en fonction du champ status, qui prend les valeurs Pending, In progress, Completed, Partial, Processing, Canceled. Le champ remains indique la quantité restant à livrer, et start_count le compteur initial.

Quand un service porte le drapeau refill: true, vos utilisateurs peuvent demander une recharge après une baisse. L'API impose des garde-fous que votre code doit anticiper : un Refill n'est possible que sur une commande Completed ou Partial, un seul refill peut être en cours à la fois, et un délai de 24 heures s'applique après un refill terminé. Interrogez ensuite action=refill_status pour connaître l'avancement.

Pour l'annulation, l'action cancel n'est disponible que sur les services marqués cancel: true et sur des commandes non terminées. Le remboursement est proportionnel au champ remains : si la moitié de la commande a déjà été livrée, seule la moitié est recréditée. Ce calcul est exécuté de manière atomique côté serveur, ce qui élimine tout risque de double remboursement.

Bonnes pratiques pour une intégration API de production

Passer du prototype à la production demande de la rigueur. Voici les pratiques qui font la différence :

  • Idempotence : envoyez un en-tête Idempotency-Key unique (8 à 128 caractères) sur chaque action add. Si un timeout réseau vous fait rejouer la requête, le panel renvoie la réponse originale au lieu de créer une commande en double et de débiter deux fois le solde. C'est indispensable pour tout système de facturation fiable.
  • Gestion des erreurs : une réponse d'erreur contient toujours une clé error avec un message lisible. Vérifiez sa présence avant de lire order. Ne considérez jamais un code HTTP 200 comme une garantie de succès métier.
  • Back-off sur 429 : en cas de dépassement de débit, respectez l'en-tête Retry-After et espacez vos requêtes de façon exponentielle.
  • Synchronisation de catalogue : ne rappelez pas services à chaque page vue. Mettez le catalogue en cache côté client (le serveur le met déjà en cache 30 secondes) et rafraîchissez-le périodiquement.
  • Revente et white-label : parce que PastePanel connecte plusieurs providers upstream et supervise leurs soldes, vous pouvez bâtir une chaîne de revente (reseller) où votre propre API SMM panel devient le provider d'un autre panel. La cohérence des statuts et des remboursements est garantie à chaque maillon.

Pourquoi intégrer votre SMM panel avec PastePanel

  • API standardisée compatible avec l'écosystème existant : si votre code cible un perfect panel, il fonctionne ici sans réécriture.
  • Trois langages, une seule logique : clients PHP, Python et Node.js interchangeables.
  • Sécurité de niveau production : signatures HMAC, idempotence, limites de débit, protection anti-bruteforce, clés de provider chiffrées.
  • Back-end asynchrone Python/FastAPI rapide et résilient, avec dispatch en tâche de fond.
  • Tous les types de commande : Default, Package, Custom Comments, Subscriptions, Drip-Feed, Mentions, Poll, Mass Orders.
  • White-label multi-tenant : votre domaine, votre marque, vos revendeurs isolés.
  • Paiements mondiaux : USDT, Binance, Cryptomus, NOWPayments, CoinPayments, Payeer, Stripe, bKash, ABA et paiement manuel.
  • Croissance multi-réseaux pour Instagram, TikTok, YouTube, Telegram et Facebook.
  • 30 modules d'administration et une documentation d'API claire pour vos développeurs.

Lancez votre propre SMM panel dès aujourd'hui

Vous avez désormais tout le nécessaire pour intégrer une API SMM panel de bout en bout : le protocole, l'authentification, les clients PHP/Python/Node.js, les commandes avancées et les bonnes pratiques de production. La prochaine étape logique est de disposer d'un panel puissant, fiable et entièrement white-label derrière cette API.

Créez votre SMM panel gratuitement sur PastePanel (pastepanel.com), connectez vos providers, générez votre clé API et passez votre première commande automatisée en quelques minutes. Que vous démarriez une activité de revente ou que vous industrialisiez une plateforme existante, PastePanel vous donne l'infrastructure — à vous de construire la croissance.

Your brand, your revenue

Stop reading, start building.

The best lessons come from doing. Launch your own panel in five minutes.

Launch your panel