Desarrolladores · Referencia
Todos los errores, en un solo lugar
Cada error de la API viene con la forma { error, message } (algunos usan mensaje en vez de message — documentado tal cual es, no lo escondemos). Hoy esta página cubre los endpoints del Informe por CUIT (/v1/reports, /v1/reports/quote, /v1/balance) — a medida que sumemos APIs nuevas al catálogo, se va a extender acá mismo. El detalle de cada endpoint vive además en su propia página.
400 — Bad Request
cuit_requeridoFalta el CUIT en el body o la query.
cuit_invalidoEl CUIT/CUIL no tiene 11 dígitos, el tipo (primeros 2 dígitos) no es válido, o el dígito verificador no cierra. Trae reason: formato | tipo | digito_verificador.
body_invalidoEl body de POST /v1/reports no es JSON válido.
401 — Unauthenticated
unauthenticatedNingún endpoint autenticado de esta sección acepta requests sin sesión ni API key.
402 — Payment Required
saldo_insuficienteSólo en POST /v1/reports, y sólo con el modelo de saldo habilitado. Trae tipo_accion, costo_unidades, saldo actual y los packs disponibles para comprar.
403 — Forbidden
account_suspendedLa cuenta está suspendida.
channel_disabledTu plan no tiene habilitado el canal API REST (plan_prices.api_rest_enabled) — requiere Ultimate, Team o Enterprise. Trae upgrade_url. NO aplica a la consola de esta doc (corre con sesión, no con API key).
forbiddenSólo en POST /v1/reports por sesión: origen no confiable (protección CSRF). No aplica si autenticás con API key.
404 — Not Found
not_foundSólo en GET /v1/reports/{id}: el informe no existe, o pertenece a otra cuenta (nunca revela cuál de las dos).
409 — Conflict
generacion_en_cursoSólo en POST /v1/reports: ya hay una generación en curso para este CUIT y esta cuenta (deduplicación de requests concurrentes). Trae el header Retry-After.
429 — Too Many Requests
rate_limitedRitmo de consultas por encima del límite del endpoint (ver Límites). Trae Retry-After.
daily_limit_exceededSólo en POST /v1/reports, sólo en el modelo SIN saldo (tope diario de producto). Trae limit con el tope del día.
500 — Internal
internalError inesperado. El mensaje siempre es genérico — nunca se propaga el detalle de la excepción.
informe_no_persistidoSólo en POST /v1/reports: el Motor corrió pero el informe no se pudo guardar. No se cobró nada.