Erreurs et limites d’utilisation
Les erreurs utilisent les codes HTTP standard et un corps JSON avec le message dans detail. La plupart indiquent précisément quoi faire ensuite.
Que signifie un 409 de l’API SMS Nitro ?
Un 409 indique qu’aucun numéro n’est disponible pour l’instant pour cette application et ce pays. Essayez un autre pays, ou indiquez l’autre serveur dans server, puis achetez à nouveau. Rien n’est débité.
Codes de statut
| HTTP | Signification | Que faire |
|---|---|---|
| 400 | Demande impossible pour l’instant : pays non proposé pour l’application, commande déjà clôturée, numéro expiré, annulation trop tôt | Lisez detail et corrigez. Annulation trop tôt : attendez 2 minutes |
| 401 | Clé d’API absente, invalide ou révoquée | Vérifiez l’en-tête et la clé dans le tableau de bord |
| 402 | Solde insuffisant | Rechargez puis réessayez |
| 404 | Commande introuvable, ou application indisponible sur ce serveur | Vérifiez l’id, le product et le server |
| 409 | Aucun numéro disponible pour l’instant | Essayez un autre pays ou serveur |
| 422 | Corps ou paramètre invalide. Ici, detail est une liste d’erreurs par champ | Corrigez les champs listés dans detail |
| 429 | Limite de requêtes atteinte | Patientez et réessayez avec des délais croissants |
| 502 | Approvisionnement momentanément indisponible | Réessayez dans quelques secondes |
HTTP/1.1 402 Payment Required
Content-Type: application/json
{ "detail": "Insufficient balance" }Limites d’utilisation
- POST /v1/orders : 500 achats par minute par compte et par IP.
- POST /v1/orders/{id}/resend : 30 requêtes par minute.
- Suivi du statut : un GET par commande toutes les 3 à 5 secondes suffit. Interroger plus vite ne fait pas arriver le SMS plus tôt.
Stratégie de nouvelles tentatives
Réessayez les 429 et 502 avec des délais exponentiels. Ne répétez pas un 400, 401, 402 ou 404 sans modifier la requête. Un achat qui a échoué en 409 ou 502 n’a pas été débité : vous pouvez racheter sans risque.
import random, time, requests
def call(method, url, **kw):
for attempt in range(5):
r = requests.request(method, url, timeout=30, **kw)
if r.status_code == 429:
time.sleep(float(r.headers.get("Retry-After", 2 ** attempt)))
continue
if r.status_code in (502, 503, 504):
time.sleep(2 ** attempt + random.random())
continue
return r
r.raise_for_status()
return rQuestions fréquentes
Suis-je débité quand une requête échoue ?
Non. Les achats en erreur ne génèrent jamais de débit, et les commandes sans SMS sont remboursées.