Objetivo
No todos los errores deben tratarse igual. Esta guia separa:- errores que conviene corregir en origen
- errores que admiten retry controlado
- errores donde primero debes verificar estado antes de repetir
Regla general
4xx: el problema suele estar en request, permisos, ownership o estado de negocio5xx: el problema suele estar en el backend o en una dependencia externa
Tabla rapida
Politica de retry
Para consultas sin efectos, reintenta solo en estos casos:429500502503504401solo despues de iniciar una nueva sesion
500 o timeout.
No reintentes automaticamente:
400403404409422
Operaciones que NO deberias repetir a ciegas
Aunque recibas un error transitorio, verifica primero si la accion ya produjo efectos cuando la operacion:- crea recursos comerciales o financieros
- cambia estado de invoices o DTE
- registra pagos
- emite emails o WhatsApp
- sube archivos o evidencia de visitas
POST /api/v1/billing/invoices/{id}/publishPOST /api/v1/billing/invoices/{id}/emit-dtePOST /api/v1/billing/invoices/{id}/send-emailPOST /api/v1/billing/invoices/{id}/register-paymentPOST /api/omnichannel/sendPOST /api/v1/visit_detail/upload/{visitDetailId}
Backoff recomendado
- 3 a 4 intentos
Payload de error
El shape puede variar segun modulo o stack legacy. Usa esta heuristica:- leer
statusCode - leer
message - leer
errorsi existe
Casos frecuentes por dominio
Auth y sesion
401 suele indicar:
- token vencido
- token mal formateado
- falta prefijo
Bearer
- no hay refresh: exige un nuevo
POST /api/better-auth/sign-in/email
Portal cliente
403 puede significar:
- el contacto no tiene rol funcional para
invoicesosupport - el recurso no pertenece al
clientIddel token portal
- valida el rol funcional del contacto
- confirma que el documento o ticket pertenece al cliente correcto
Billing y DTE
409 o 422 suelen aparecer cuando:
- intentas publicar una invoice fuera de secuencia
- intentas emitir DTE sin precondiciones cumplidas
- registras un pago con estado o monto incompatible
- consulta la invoice actual
- revisa el DTE asociado, su folio, TrackID y
local_status, además de referencias y pagos - si
local_statusesSII_UPLOAD_UNCERTAIN, conserva el folio y concilia con el SII antes de repetir la emisión; no hay un endpoint público que resuelva ese caso automáticamente - si hay TrackID y
SII_PENDING, sincroniza conPOST /api/v1/dte/documents/{dteId}/sync; la ausencia de aceptación aún no autoriza una nueva emisión - solo repite la mutación cuando se haya comprobado que no produjo el efecto esperado
Omnichannel
Los fallos mas delicados son:- mensajes duplicados por retry sin control
- assignment/reply sobre threads cerrados o reasignados
- problemas de Microsoft/WhatsApp que terminan como
5xxo estados externos inconsistentes
- reconsulta thread y mensajes antes de reenviar
- usa retries solo cuando el backend o el canal fallen de forma transitoria
Visitas y archivos
Errores frecuentes:404porvisitDetailIdoimageIdinexistente400por archivo invalido- timeouts o errores de upload
- valida existencia de la visita antes del upload
- si el upload falla, revisa si la imagen ya quedo asociada antes de reintentar
Observabilidad minima
Para cualquier integracion registra:- endpoint
- metodo HTTP
- status code
- correlation id si existe
- mensaje de error
- payload resumido sin secretos
- identificador funcional del recurso si existe:
clientId,invoiceId,threadId,visitDetailId