Códigos de Error

Código HTTPTypeMensajeDescripción
400Bad RequestDatos inválidosEl body de la petición tiene campos faltantes o con formato incorrecto
401UnauthorizedAPI Key requeridaNo se proporcionó el header X-Api-Key
401UnauthorizedAPI Key inválidaLa API Key no existe, fue revocada o está inactiva
403ForbiddenCupo agotadoSe alcanzó el límite de documentos de la suscripción
404Not FoundRecurso no encontradoEl documento, cliente o empresa solicitado no existe
409ConflictReferencia duplicadaYa existe un documento con la misma referencia_externa para esta empresa
429Too Many RequestsRate limit excedidoSe superó el número máximo de peticiones por minuto
500Internal Server ErrorError internoError inesperado del servidor

Códigos de Error Específicos (DIAN)

Código InternoHTTPDescripción
VALIDATION_ERROR400Datos proporcionados no son válidos (campos faltantes, formato incorrecto).
DIAN_VALIDATION_FAILED502La DIAN rechazó el documento. El campo details.dian_errors contiene la lista de errores específicos.
DIAN_TRANSMISSION_ERROR502No fue posible conectar con la DIAN. Retryable = true.
DIAN_TIMEOUT502La DIAN no respondió en 30 segundos. Retryable = true.
DIAN_SIGNATURE_ERROR502La firma digital fue rechazada por la DIAN.
CERT_NOT_FOUND400El archivo del certificado digital .p12 no fue encontrado en el servidor.
CERT_EXPIRED400El certificado digital ha vencido. Renuévelo con su autoridad certificadora.
CERT_INVALID_PASSWORD400La contraseña del certificado digital es incorrecta.
QUOTA_EXCEEDED403Se alcanzó el límite de documentos de la suscripción. Actualice su plan.
DUPLICATE_RECORD409Ya existe un documento con la misma referencia_externa o valor único.
CONFLICT409Operación en conflicto (duplicado concurrente o idempotencia de payload).
DB_CONNECTION_TIMEOUT503No se pudo conectar con la base de datos. Retryable = true.

Formato de Respuesta de Error

JSON
{
  "success": false,
  "error": {
    "code": "DIAN_VALIDATION_FAILED",
    "message": "La DIAN rechazó el documento por errores de validación.",
    "details": {
      "dian_errors": ["Regla FAJ42: NIT del emisor no coincide"],
      "document_id": 7,
      "suggestion": "Verifique que el NIT de la empresa coincida con el configurado en la DIAN."
    },
    "retryable": false
  }
}

Siempre verifica el campo 'success' antes de procesar la respuesta

Los errores 5xx son temporales. Implementa un retry con backoff exponencial

Los errores 4xx indican problemas con la petición. Verifica los datos enviados

Rate Limiting

Cada API Key tiene un límite de peticiones configurado (por defecto: 100 req/min).

Headers

HTTP
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1714000000
HeaderDescripción
X-RateLimit-LimitNúmero máximo de peticiones por ventana
X-RateLimit-RemainingPeticiones restantes en la ventana actual
X-RateLimit-ResetTimestamp UNIX cuando se resetea la ventana

Best Practices

  • Implementa un sistema de colas para envíos masivos
  • Usa caching para evitar consultas repetitivas
  • Contacta soporte si necesitas un límite mayor