Erros e limites de uso
Os erros usam códigos HTTP padrão e um corpo JSON com a mensagem em detail. Quase sempre eles dizem exatamente o que fazer a seguir.
O que significa um 409 na API da SMS Nitro?
O 409 indica que não há número disponível agora para aquele app e país. Tente outro país, ou informe o outro servidor em server, e compre de novo. Nada é cobrado.
Códigos de status
| HTTP | Significado | O que fazer |
|---|---|---|
| 400 | Pedido impossível agora: país não vendido para o app, pedido já encerrado, número expirado, cancelamento cedo demais | Leia detail e ajuste. Cancelamento cedo: espere 2 minutos |
| 401 | Chave de API ausente, inválida ou revogada | Confira o cabeçalho e a chave no painel |
| 402 | Saldo insuficiente | Recarregue e tente de novo |
| 404 | Pedido não encontrado, ou app indisponível naquele servidor | Confira o id, o product e o server |
| 409 | Nenhum número disponível agora | Tente outro país ou servidor |
| 422 | Corpo ou parâmetro inválido. Aqui detail é uma lista de erros por campo | Corrija os campos listados em detail |
| 429 | Limite de requisições atingido | Espere e tente de novo com intervalo crescente |
| 502 | Fornecimento temporariamente indisponível | Tente de novo em alguns segundos |
HTTP/1.1 402 Payment Required
Content-Type: application/json
{ "detail": "Insufficient balance" }Limites de uso
- POST /v1/orders: 500 compras por minuto por conta e por IP.
- POST /v1/orders/{id}/resend: 30 pedidos por minuto.
- Consulta de status: um GET por pedido a cada 3 a 5 segundos basta. Consultar mais rápido não faz o SMS chegar antes.
Estratégia de nova tentativa
Repita 429 e 502 com intervalo exponencial. Não repita 400, 401, 402 ou 404 sem mudar a requisição. Uma compra que falhou com 409 ou 502 não foi cobrada, então pode comprar de novo com segurança.
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 rPerguntas frequentes
Sou cobrado quando uma requisição falha?
Não. Compras com erro nunca geram cobrança, e pedidos sem SMS são estornados.