Référence API pour SMM Africa. Vérifiez les soldes, récupérez les services, passez des commandes et suivez l'état à partir d'un seul point de terminaison.
Une demande de solde est le moyen le plus rapide de confirmer votre clé, le format de la demande et les allers-retours d'intégration avant de commencer à passer des commandes.
Envoyez la clé API de votre compte soit dans Autorisation : Porteur YOUR_API_KEY, soit dans le champ de demande de clé.Choisissez une méthode ;le champ clé fonctionne avec les panels de revendeurs courants.Conservez les clés dans les variables d'environnement côté serveur et faites-les pivoter à partir du compte.
Toutes les actions utilisent POST https://smm.africa/api/v3. Corps pris en charge : application/json, application/x-www-form-urlencoded et multipart/form-data avec des champs de texte uniquement. Les réponses sont JSON. Le champ d'action sélectionne l'opération.
Pourquoi les paiements de mes clients sont-ils séparés de mon portefeuille SMM.Africa ?
Votre client paie votre entreprise selon vos propres modalités. Votre portefeuille SMM.Africa paie les commandes que vous soumettez ici. L'encaissement d'un paiement client ne finance pas automatiquement ce portefeuille, et un remboursement de portefeuille ne rembourse pas automatiquement votre client. Rapprochez les deux enregistrements séparément, y compris les frais et tout remboursement client approuvé.
Ouvrir cette réponseComment dois-je passer ma première commande d'API revendeur ?
Commencez par les exemples d'authentification et d'équilibre de l'API, puis examinez le service, le format cible, les limites et le prix. Utilisez un objectif que vous contrôlez et une quantité dans les limites indiquées. L'action d'ajout dépense le solde du portefeuille. Enregistrez l'ID de commande retournée et vérifiez son statut. Lisez la documentation actuelle de l'API avant de choisir une stratégie de nouvelle tentative.
Ouvrir cette réponseDois-je envoyer une autre commande d'API si la première requête expire ?
Vérifiez d'abord si la demande d'origine a créé une commande. Un délai d'attente peut laisser le résultat incertain même si le traitement a réussi. Conservez la référence de la demande et tout ID de commande, et utilisez le mécanisme d'idempotence documenté lorsqu'il est pris en charge. Ne générez pas de nouvelle demande payante simplement parce que la première réponse manquait ; contactez l'assistance si le résultat reste incertain.
Récupérez le catalogue de services SMM Africa en direct avec les identifiants de service, les prix, les limites et les indicateurs de recharge ou d'annulation.
Votre clé API, utilisée pour authentifier la demande. Obligatoire uniquement lorsque Autorisation : Le porteur est absent.
action
string
Oui
add Utilisez la valeur d'action exacte indiquée.
service
integer
Oui
L'ID du service que vous souhaitez commander. Utilisez un identifiant de la réponse actuelle des services ; son type détermine les champs ci-dessous.
link
string
Conditionnel
L'URL du profil, de la publication ou du contenu cible. Requis pour le type de service sélectionné ; fournissez l’URL cible.
quantity
integer
Conditionnel
La quantité que vous souhaitez commander. Doit satisfaire aux exigences min et max du service sélectionné. Omettre lorsque son type n'accepte pas la quantité.
max_charge
number / decimal string
No
Optional maximum USD charge, including discounts, with up to six decimal places. PRICE_LIMIT_EXCEEDED (409) creates no order or debit. Changing a ceiling changes request intent. Montant maximal autorisé en USD, avec au plus six décimales.
idempotency_key
string
Recommandé
Use one unique value per logical order. If the request times out without a response, retry with the same value so the order cannot be charged twice. Conserver une valeur unique par ordre logique ; réutiliser uniquement avec une charge utile de nouvelle tentative identique.
Champs par type de service
Sélectionnez le type renvoyé par les services ; n’envoyez pas de champ de type distinct. Les valeurs de liste sont du texte séparé par une nouvelle ligne, y compris en JSON. L'API dérive la quantité facturable pour les commentaires, les listes personnalisées, les packages et les abonnements, puis vérifie les limites du service.
Type de service
Champs obligatoires
Champs optionnels / contraintes
Default
link, quantity
URL cible standard et quantité demandée.
Package
link
Aucune quantité.
SEO
link, quantity, keywords
Mettez un mot-clé sur chaque ligne.
Custom Comments
link, comments
Un commentaire par ligne ; le nombre de commentaires est la quantité commandée.
Custom Comments Package
link, comments
Un commentaire par ligne ; pas de quantité.
Comment Replies
link, username, comments
username est le propriétaire du commentaire ; mettez une réponse par ligne.
Comment Likes
link, username
le nom d'utilisateur est le propriétaire du commentaire ; pas de quantité.
Mentions
link, quantity, usernames
Mettez un nom d'utilisateur par ligne.
Mentions with Hashtags
link, quantity, usernames, hashtags
Mettez les noms d'utilisateur et les hashtags sur des lignes séparées.
Mentions Custom List
link, usernames
Mettez un nom d'utilisateur par ligne ; pas de quantité.
Mentions Hashtag
link, quantity, hashtags
Mettez un hashtag par ligne.
Mentions User Followers
link, quantity, username
Le nom d'utilisateur est l'URL du profil source à récupérer.
Mentions Media Likers
link, quantity, media
media est l'URL du média source à récupérer.
Poll
link, quantity, answer
La réponse est le texte exact de l'option de sondage attendu par le fournisseur.
Invites from Groups
link, quantity, groups
Mettez un groupe sur chaque ligne.
Web Traffic
link, quantity, country, device, type_of_traffic
L'appareil est mobile ou de bureau. type_of_traffic est 1 (nécessite google_keyword), 2 (nécessite Refer_url) ou 3.
Champs d’attribution facultatifs
Paramètre
Taper
Obligatoire
Description & contraintes
goal_key
string
No
Clé d'objectif facultative pour l'attribution à croissance guidée. Métadonnées d'attribution facultatives.
recommendation_tier
string
No
Niveau de recommandation facultatif. Métadonnées d'attribution facultatives.
user_intent_label
string
No
Étiquette facultative décrivant le l'intention de l'utilisateur. Métadonnées d'attribution facultatives.
source_flow
string
No
Identifiant facultatif du flux qui a créé la commande. Métadonnées d'attribution facultatives.
Votre clé API, utilisée pour authentifier la demande. Obligatoire uniquement lorsque Autorisation : Le porteur est absent.
action
string
Oui
status Utilisez la valeur d'action exacte indiquée.
order
integer / string
Oui
L'ID de commande SMM Africa renvoyé par add. Conserve l'ID de commande renvoyé par add ; ne remplacez pas un numéro de commande de fournisseur.
orders
array / string
Conditionnel
For bulk status, send 1–20 IDs as a JSON array or comma-separated form string instead of order. Inspect each item's http_status and retry_after. Utilisez order ou orders, jamais les deux. Chaque élément groupé possède son propre http_status.
Vérifiez le solde, récupérez les services, choisissez leur type, conservez un identifiant d’opération, envoyez la commande, enregistrez son identifiant, puis consultez son statut. Les prix sont en USD, pour 1 000 unités ou par forfait selon le service. Traitez les identifiants comme des chaînes opaques. Les chaînes décimales et les champs monétaires numériques conservent leurs types ; les frais utilisent une précision de six décimales en USD.
Les clients Node.js et PHP 3.3 conservent les clés d’opération et les réponses réussies, respectent Retry-After et arrêtent les mutations non résolues avant la fin du délai de rejeu de 24 heures. Gardez cet état privé, persistant et distinct pour chaque compte. Testez d’abord avec l’environnement local, sans connexion aux portefeuilles ni aux fournisseurs réels.
node sandbox.mjs
# Endpoint: http://127.0.0.1:4013/api/v3
# Key: sandbox_test_key (never use a live key)
subscription_create
Créer un abonnement plafonné sans débit. Utilisez un service pour URL de publication, une quantité entière positive, USD, spending_cap avec six décimales au maximum, max_posts (1–10000) et une clé d’idempotence conservée.
Envoyer l’URL d’une publication découverte. Le service et la quantité proviennent de l’abonnement. max_charge limite facultativement le coût de cette publication en USD. Une URL canonique répétée renvoie la commande originale, même après annulation.
Lisez les paramètres et envoyez jusqu'à 20 reçus. Passez after=next_cursor pour les pages suivantes. Interroger les ID de commande de reçu en utilisant le statut groupé.
Arrêter définitivement les futures publications. Les commandes existantes doivent être annulées individuellement si elles sont encore admissibles. Les remboursements ne reconstituent pas le plafond de dépenses de l’abonnement.
Configurez un destinataire HTTPS vérifié par compte. Cette fonction doit être activée dans le déploiement. Générez un secret base64url aléatoire de 32 à 128 caractères. Vérifiez X-SMM-Signature, puis renvoyez le défi webhook.verify en JSON. Une reconfiguration invalide les anciens événements en attente.
Lisez jusqu'à 20 diffusions, leur charge utile, leurs tentatives, le dernier statut HTTP et l'heure de la prochaine tentative. Passez after=next_cursor pour les pages suivantes. L'historique est conservé pendant 30 jours.
Remettre en file un événement livré ou échoué pour la même version du destinataire. Son identifiant est conservé. Les consommateurs doivent éliminer les doublons ; le rejeu ne répète jamais une commande ni une mutation du portefeuille.
X-SMM-Signature contient t=UNIX_SECONDS,v1=HEX_HMAC_SHA256. Horodatage du signe + "." + le corps brut exact de la requête avec votre secret. Utilisez la comparaison à temps constant et rejetez les horodatages situés à plus de cinq minutes de votre horloge. Conservez chaque ID d’événement avant de renvoyer 2xx. La livraison s'effectue au moins une fois et peut arriver en panne. Les événements couvrent l’activité des commandes du compte, y compris les commandes sur le site Web. Récupérer le statut pour les détails actuels de la livraison et du remboursement ; les sondages restent la solution de repli pour la réconciliation. Nouvelles tentatives de livraison ayant échoué jusqu'à huit fois avec interruption ; les redirections sont rejetées.
Vérifiez l'état HTTP et le champ d'erreur JSON. Les erreurs d'authentification utilisent HTTP 400 ; Les appelants d'API ne sont pas redirigés vers la connexion. Enregistrez les erreurs techniques en privé et montrez aux clients un message neutre.
Ajouter la relecture des réponses pendant 24 heures. Après expiration, la même clé peut créer une autre commande : réconcilier d'abord. REQUEST_IN_PROGRESS autorise la même demande/clé après Retry-After. IDEMPOTENCY_CONFLICT nécessite la restauration de la charge utile d'origine. ACTION_OUTCOME_UNCONFIRMED nécessite un examen du support : ne modifiez jamais les clés pour le contourner. PRICE_LIMIT_EXCEEDED signifie qu'aucun débit ou commande n'a été engagé. Enregistrez request_id (également X-Request-Id) pour obtenir de l'aide.
HTTP
Erreur / condition
Que faire
400
Invalid API key
Vérifiez la clé et les champs obligatoires. Corrigez la demande avant de réessayer.
402
Insufficient balance
Alimentez le portefeuille du compte avant de soumettre à nouveau la commande.
409
A matching API order request is already being processed
Attendez avant de réessayer la requête identique avec sa clé d'idempotence d'origine.
409
This idempotency key was already used for a different API order request
Restaurez la charge utile d'origine pour une nouvelle tentative. Utilisez une nouvelle clé uniquement pour un nouvel ordre logique.
415
Unsupported content type
Envoyez des champs de formulaire JSON, codés en URL ou des champs de texte en plusieurs parties.
423
Account suspended (message varies)
Résolvez la restriction de compte avec l'assistance ; ne réessayez pas à plusieurs reprises.
429
Too many requests. Please slow down and try again shortly.
Attendez l'intervalle Réessayer-Après, puis réessayez avec une interruption.
500 / 503
Server failure or temporary unavailability (message varies)
Reculez. Pour les soumissions de commandes, conservez la même charge utile et la même clé d’idempotence.
Réessayez une commande sans facturer deux fois
Créez et conservez une clé idempotency_key unique pour chaque commande logique avant d'envoyer l'ajout. Remplacez l'exemple de clé par votre propre valeur unique.
Attendez jusqu'à 60 secondes pour la requête du serveur. Après 20 secondes, affichez un message en attente au client pendant que la demande backend se poursuit.
Si aucune réponse n'arrive, réessayez exactement la même charge utile avec la même clé après un délai. Ne générez pas de nouvelle clé. Une nouvelle tentative terminée rejoue la réponse avec X-Idempotent-Replay : true.
Une fois que vous recevez un identifiant de commande, enregistrez-le et utilisez le statut pour suivre cette commande. Une réponse en file d’attente signifie acceptée pour exécution et non livraison terminée.
Les en-têtes Idempotency-Key et X-Idempotency-Key sont également pris en charge. Sans clé client, une commande peut toujours être soumise, mais une nouvelle tentative après un délai d'attente ne peut pas identifier en toute sécurité la tentative initiale.
Limites de débit
Les limites sont spécifiques à l'action et configurables en fonction du déploiement. Sur HTTP 429, honorez Retry-After (secondes). Sans cet en-tête, utilisez un intervalle exponentiel avec gigue, par exemple 2, 4, 8, puis 16 secondes plus un petit délai aléatoire. Nouvelles tentatives liées et signalez des échecs persistants à votre opérateur.
Mettez en cache le catalogue récupéré avec POST /api/v3 et action=services. Actualisez-le périodiquement et vérifiez les identifiants de service actuels, les tarifs et les contraintes min/max avant de commander.
Cycle de vie des commandes
Envoyez action=status avec un ID de commande par demande. En tant que politique client de départ, interrogez toutes les 30 secondes, puis augmentez l'intervalle pour les commandes de longue durée ; limites de taux d’honneur. Échelonnez les demandes sur les commandes. Les webhooks ne sont actuellement pas pris en charge.
queued → pending → processing
États actifs : continuer l'interrogation. Les commandes peuvent sauter des états intermédiaires.
completed · partial · refunded · canceled
États du terminal : arrêter l'interrogation de livraison de routine. Partielle signifie que la livraison était incomplète ; inspecter la charge et les restes. Les demandes de recharge et d’annulation sont soumises à l’éligibilité du service et de la commande.
unknown
Un Etat non reconnu ; ne le considérez pas comme un succès et ne passez pas automatiquement une commande de remplacement. Réessayez le statut avec interruption et contactez l'assistance s'il persiste.
Notes d'intégration pour une utilisation en production
Traitez l'API comme une infrastructure. Ces notes couvrent les éléments qui comptent une fois que vous exécutez des commandes automatisées, un panel de clients ou une vitrine à volume élevé.
Solde du portefeuille partagé
Les commandes directes, les commandes en vitrine et les commandes API sont toutes tirées du même solde du portefeuille. Financez-le depuis n'importe quel canal, utilisez-le depuis n'importe quel canal.
Sécurisez votre clé
N'exposez jamais la clé, le nom d'hôte de l'API, le nom du fournisseur configuré ou les erreurs de transport brut dans le code côté client ou les messages de vitrine. Appels proxy via votre backend, enregistrez les détails techniques en privé et, après 20 secondes, affichez aux clients une formulation neutre telle que : La soumission de la commande prend plus de temps que prévu. Vérifiez vos commandes avant de réessayer.
Réponses rapides
Comment obtenir une clé API ?
Connectez-vous à SMM Africa, ouvrez un compte, copiez votre clé API et faites-la pivoter à tout moment depuis le même endroit.
L'API est-elle gratuite ?
Il n'y a pas de frais API supplémentaires. Vous ne payez que les services que vous commandez. Le même portefeuille finance les commandes directes, les commandes en vitrine et les commandes API.
Quelles sont les limites de débit ?
Les limites sont spécifiques à l'action et peuvent changer. Espacez les appels en masse, les sondages d'état par lots et lorsque l'API renvoie 429, attendez l'intervalle Réessayer-Après avant de réessayer.
Comment dois-je gérer les nouvelles tentatives ?
Envoyez un en-tête Idempotency-Key unique ou un champ idempotency_key pour chaque ordre d'ajout logique. Si la demande expire, réessayez la charge utile identique avec la même clé afin qu'une tentative terminée soit rejouée sans autre frais.
Existe-t-il un webhook ?
L'interrogation d'état est le chemin pris en charge aujourd'hui. Appuyez sur l'action de statut pour les commandes que vous surveillez et mettez en cache le résultat dans votre propre système.
Quels pays sont pris en charge ?
L'API est disponible dans le monde entier, avec un fort support pour les marchés africains et le financement par portefeuille compatible M-Pesa.
Vocabulaire API
Termes que les revendeurs doivent comprendre
Revendeur API
Une interface serveur à serveur qui permet à un autre panneau ou flux de travail de passer et de suivre les commandes SMM Africa depuis son propre application.
Catalogue de services
La liste en direct des identifiants de service, des prix, des limites, du support de recharge et du support d'annulation utilisés avant de passer une commande.
Mesures
Le champ JSON qui choisit l'opération API, telle que le solde, les services, l'ajout, le statut, le rechargement ou l'annulation.
Supporté par un portefeuille ordering
Un modèle de commande dans lequel les commandes directes, en vitrine et API proviennent toutes du même solde de portefeuille SMM Africa financé.