Errori e limiti d’uso
Gli errori usano codici HTTP standard e un corpo JSON con il messaggio in detail. Quasi sempre dicono esattamente cosa fare dopo.
Cosa significa un 409 dalla API di SMS Nitro?
Il 409 indica che al momento non c’è un numero disponibile per quell’app e quel paese. Prova un altro paese, oppure indica l’altro server in server, e acquista di nuovo. Non viene addebitato nulla.
Codici di stato
| HTTP | Significato | Cosa fare |
|---|---|---|
| 400 | Richiesta non possibile ora: paese non venduto per l’app, ordine già chiuso, numero scaduto, annullamento troppo presto | Leggi detail e correggi. Annullamento presto: attendi 2 minuti |
| 401 | Chiave API assente, non valida o revocata | Controlla l’intestazione e la chiave nella dashboard |
| 402 | Saldo insufficiente | Ricarica e riprova |
| 404 | Ordine non trovato, oppure app non disponibile su quel server | Controlla id, product e server |
| 409 | Nessun numero disponibile in questo momento | Prova un altro paese o server |
| 422 | Corpo o parametro non valido. Qui detail è un elenco di errori per campo | Correggi i campi elencati in detail |
| 429 | Limite di richieste raggiunto | Attendi e riprova con intervalli crescenti |
| 502 | Fornitura momentaneamente non disponibile | Riprova tra qualche secondo |
HTTP/1.1 402 Payment Required
Content-Type: application/json
{ "detail": "Insufficient balance" }Limiti d’uso
- POST /v1/orders: 500 acquisti al minuto per account e per IP.
- POST /v1/orders/{id}/resend: 30 richieste al minuto.
- Controllo dello stato: basta un GET per ordine ogni 3-5 secondi. Interrogare più spesso non fa arrivare prima l’SMS.
Strategia di nuovi tentativi
Ripeti 429 e 502 con intervalli esponenziali. Non ripetere 400, 401, 402 o 404 senza modificare la richiesta. Un acquisto fallito con 409 o 502 non è stato addebitato, quindi puoi riacquistare senza rischi.
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 rDomande frequenti
Mi viene addebitato qualcosa se una richiesta fallisce?
No. Gli acquisti con errore non generano mai addebiti, e gli ordini senza SMS vengono rimborsati.