Centro de ayudaGitHub

Errores

La API de atoship usa los códigos de respuesta HTTP convencionales para indicar si una solicitud fue exitosa o falló. Los códigos del rango 2xx indican éxito, los 4xx indican errores del cliente y los 5xx indican errores del servidor.

Códigos de estado HTTP

Códigos de éxito

200
OK

La solicitud se completó correctamente

201
Created

El recurso se creó correctamente

Errores del cliente

400
Bad Request

Parámetros de la solicitud no válidos

401
Unauthorized

Clave de API no válida o ausente

402
Payment Required

Saldo insuficiente o pago rechazado

403
Forbidden

La clave de API no tiene los permisos necesarios

404
Not Found

El recurso no existe

422
Unprocessable Entity

Error de validación en los datos de la solicitud

429
Too Many Requests

Se superó el límite de velocidad

Errores del servidor

500
Internal Server Error

Algo salió mal de nuestro lado

503
Service Unavailable

La API no está disponible temporalmente

Objeto de error

Cada error devuelve un JSON con un objeto error. Ramifica según el código de estado HTTP y error.code: ambos están en toda respuesta de error.

error.codestring

Código legible por máquina en MAYÚSCULAS_CON_GUION_BAJO (p. ej. "RATE_LIMIT_EXCEEDED"). Este es el campo por el que ramificar.

error.messagestring

Descripción legible por personas. Puedes mostrarla al usuario; no la parsees, la redacción cambia.

error.detailsarray (opcional)

Salida del validador en un 400. Cada entrada trae path y message; la forma depende del campo que falló.

error.paramstring (opcional)

El campo culpable, cuando puede nombrarse uno solo (p. ej. "to_address.phone").

error.retryAfternumber (opcional)

Segundos de espera, solo en un 429. El mismo valor va en la cabecera Retry-After.

Las respuestas también llevan object, y algunas mode. Ninguno está garantizado en todos los endpoints, así que no ramifiques por ellos. No existe un campo type ni request_id.

Manejo de errores

Revisa el código de estado HTTP

Usa el código de estado para determinar la categoría del error

Ramifica por error.code

El código en MAYÚSCULAS_CON_GUION_BAJO es el identificador estable: compara contra él, no contra el texto del mensaje

Muestra el mensaje

Muestra el message a los usuarios para darles información útil

Haz backoff en un 429

Espera error.retryAfter segundos (o lee la cabecera Retry-After) antes de reintentar

ERROR
Ejemplos de respuesta
1{
2 "object": "Error",
3 "error": {
4 "code": "VALIDATION_ERROR",
5 "message": "Invalid request data",
6 "details": [
7 {
8 "code": "custom",
9 "path": ["parcel"],
10 "message": "Send `parcel` for a single box, or `parcels` for a multi-piece shipment."
11 }
12 ]
13 }
14}
Códigos de error comunes
VALIDATION_ERRORLa petición no pasó la validación
UNAUTHORIZEDClave de API ausente o inválida
FORBIDDENLa clave no tiene acceso a este recurso
NOT_FOUNDNo existe ese recurso
INSUFFICIENT_FUNDSSaldo insuficiente en la cartera
RATE_LIMIT_EXCEEDEDDemasiadas peticiones
INTERNAL_SERVER_ERRORAlgo falló de nuestro lado

Cada endpoint añade los suyos: una compra de etiqueta puede devolver DESTINATION_PHONE_REQUIRED o CUSTOMS_REQUIRED. Trata un código desconocido según su clase de estado HTTP.

Límites de tasa
Por minuto5 solicitudes
Por día300 solicitudes

El presupuesto pertenece a su organización, no a una clave: todas las claves de API y usuarios de la cuenta comparten el mismo.

Se cuenta en ventanas fijas. El presupuesto diario se reinicia a las 00:00 UTC y un 429 incluye la cabecera Retry-After.

¿Necesita un límite mayor? Escriba a [email protected]: los límites se amplían por cuenta.