Errores
Referencia completa de errores de la API de Sifende — formato Problem Details, tipos de error y códigos de rechazo de SIFEN.
Formato de respuesta de error
La API de Sifende usa RFC 9457 Problem Details para todos los errores (excepto errores de autenticación):
{
"type": "https://sifende.com.py/docs/solucion-problemas/validation-error",
"title": "Error de validación",
"status": 400,
"detail": "La solicitud contiene 2 error(es) de validación",
"errores": {
"receptor.numeroDocumento": "Número de documento es obligatorio",
"items[0].precioUnitario": "El precio no puede ser negativo"
}
}Los endpoints de sesión (/api/v1/contribuyentes/...) usan un envelope ApiResponse diferente. Ver API de Sesión.
Error de autenticación (formato especial)
El filtro de API key retorna un JSON simple, no Problem Details:
{"error": "Invalid or expired API key"}Tipos de error de Sifende
Tipo (slug) | Status | Descripción |
|---|---|---|
validation-error | 400 | Campos inválidos en el body, o falta un query param / header obligatorio — ver errores o campo |
invalid-enum-value | 400 | Valor de enumeración no reconocido — ver valoresAceptados |
invalid-format | 400 | Tipo o formato de campo incorrecto — ver campo, valorRecibido y tipoEsperado |
resource-not-found | 404 | La ruta solicitada no existe |
contribuyente-not-found | 404 | Contribuyente no encontrado por ID |
documento-electronico-not-found | 404 | DE no encontrado por ID o CDC |
timbrado-not-found | 404 | Timbrado no encontrado |
api-key-not-found | 404 | API key inexistente o revocado |
certificate-not-found | 404 | No hay certificado digital subido |
ruc-not-found | 404 | RUC o cédula no encontrado en el padrón de la SET ni en el registro de SIFEN |
evento-not-found | 404 | Evento SIFEN no encontrado |
access-denied | 403 | Usuario sin acceso al contribuyente |
document-quota-exceeded | 403 | El plan no permite adicionales y la ocupación alcanzó el cupo; la solicitud no se ejecutó |
rate-limit-exceeded | 429 | Se superó el límite de consultas por minuto; Retry-After indica cuántos segundos esperar |
document-archived | 403 | El período de acceso del plan actual finalizó; el contenido y las acciones del documento no están disponibles |
duplicate-ruc | 409 | RUC ya registrado para este usuario |
duplicate-timbrado | 409 | Número de timbrado ya existe |
evento-cancelacion-error | 400/409 | Error al enviar evento de cancelación |
evento-inutilizacion-error | 400/409 | Error al enviar evento de inutilización |
method-not-allowed | 405 | Método HTTP incorrecto para ese endpoint |
unsupported-media-type | 415 | Content-Type no soportado — usá application/json |
configuracion-incompleta | 422 | Falta configuración del contribuyente (timbrado, dirección, actividades, certificado) |
documento-electronico-generation-error | 422 | Error al generar el DE (problema de compliance SIFEN) |
kude-generation-error | 500 | Error técnico interno al preparar u obtener el KuDE PDF |
kude-unavailable | 503 | El KuDE no está disponible temporalmente por una causa técnica identificada |
timbrado-no-vigente | 422 | La fecha de emisión cae fuera de la vigencia del timbrado |
kude-not-supported | 501 | KuDE no disponible para este tipo de documento |
idempotency-in-progress | 409 | La misma clave y solicitud todavía están en proceso. Incluye Retry-After: 2 |
idempotency-outcome-unknown | 409 | Resultado terminal indeterminado; no reenvíes. No incluye Retry-After |
idempotency-key-expired | 409 | Venció el replay de 7 días; la clave permanece reservada permanentemente |
idempotency-key-reused | 422 | La clave ya identifica otro payload u otra operación del contribuyente |
idempotency-upstream-unknown | 503 | SIFEN no confirmó el resultado. Incluye Retry-After: 2; reintentá con la misma clave |
idempotency-unavailable | 503 | La operación no se ejecutó porque la idempotencia está deshabilitada |
padron-no-disponible | 502 | El padrón de la SET no respondió; reintentar en unos minutos |
idempotency-fingerprint-unsupported | 503 | La operación no se ejecutó porque el fingerprint persistido no es compatible |
internal-error | 500 | Error inesperado — ver resultadoIndeterminado antes de reintentar |
Documento archivado
Estado, KuDE y cancelación devuelven este Problem Detail cuando el documento se conserva, pero quedó fuera del período de acceso del plan actual:
{
"type": "https://api.sifende.com.py/problems/document-archived",
"title": "Documento archivado",
"status": 403,
"detail": "El período de acceso incluido en el plan actual ha finalizado."
}El 403 document-archived indica que el documento existe y está archivado. Un documento inexistente, ajeno o cuyo período de conservación física ya venció responde 404 documento-electronico-not-found. Un upgrade puede restaurar el acceso a un documento archivado mientras todavía se conserve; no existe un bypass para descargarlo o ejecutar acciones durante el archivo.
KuDE pendiente y errores técnicos
La descarga de KuDE puede responder 202 application/json cuando el PDF todavía está en preparación. Ese cuerpo usa ApiResponse, no Problem Details, y no debe guardarse como PDF. Seguí el header Location, que apunta a la misma ruta con soloConsulta=true, y respetá Retry-After: 5.
soloConsulta=true sólo observa: no reencola, no repara, no crea otra identidad y no confirma entrega al broker. El límite de 60 segundos es del panel web; no es un plazo garantizado para clientes externos ni para el worker.
Los fallos técnicos se reclasifican así:
| Status | Tipo | Cuándo aparece |
|---|---|---|
| 500 | kude-generation-error | Fallo técnico interno o falta de diagnóstico temporal seguro |
| 503 | kude-unavailable | Indisponibilidad temporal identificada, sin copia legible disponible |
| 501 | kude-not-supported | Tipo de documento sin KuDE implementado |
HTTP/1.1 503 Service Unavailable
Content-Type: application/problem+json
{
"type": "https://sifende.com.py/docs/solucion-problemas/kude-unavailable",
"title": "KuDE temporalmente no disponible",
"status": 503,
"detail": "El KuDE no está disponible temporalmente.",
"traceId": "f2f0333f78bfb6a4184cb5a5374685a5"
}La extensión estado: "FALLIDO" puede aparecer cuando existe un cierre terminal de preparación; no debe usarse para inferir la causa HTTP por sí sola. Ver KuDE temporalmente no disponible y Referencia: Descargar KuDE.
Cupo mensual agotado
Compará el valor completo de type con https://sifende.com.py/docs/solucion-problemas/document-quota-exceeded. Este 403 confirma que la emisión no se ejecutó y no incluye Retry-After; no lo reintentes inmediatamente en un loop.
consumoConfirmado contiene documentos definitivos. reservasActivas contiene documentos que conservan capacidad mientras siguen en proceso, tienen resultado desconocido o todavía pueden reintentarse; esas reservas no son consumo cobrado y no generan adicionales.
Volvé a enviar la intención solo después de que un rechazo libere capacidad, comience otro período o el contribuyente cambie a un plan que permita documentos adicionales. Ver el contrato completo en Cupo mensual de documentos agotado.
Errores de idempotencia
Las reglas de retry, Retry-After, replay, reserva permanente y diferencias entre operaciones están centralizadas en Idempotencia y Reintentos Seguros. Esta referencia conserva los Problem Details exactos.
HTTP/1.1 503 Service Unavailable
Retry-After: 2
Content-Type: application/problem+json
{
"type": "https://sifende.com.py/docs/solucion-problemas/idempotency-upstream-unknown",
"title": "Resultado SIFEN no confirmado",
"status": 503,
"detail": "No se pudo confirmar el resultado en SIFEN; reintentá con la misma Idempotency-Key después del intervalo indicado"
}HTTP/1.1 409 Conflict
Content-Type: application/problem+json
{
"type": "https://sifende.com.py/docs/solucion-problemas/idempotency-key-expired",
"title": "Clave de idempotencia expirada",
"status": 409,
"detail": "El resultado asociado a la clave de idempotencia expiró y ya no puede reproducirse; la clave no puede reutilizarse"
}Error de validación con detalle por campo
{
"type": "https://sifende.com.py/docs/solucion-problemas/validation-error",
"title": "Error de validación",
"status": 400,
"detail": "La solicitud contiene 1 error(es) de validación",
"errores": {
"items[0].tasaIVA": "La tasa de IVA debe ser 5, 10 o null para exentos"
}
}Error de enumeración con valores aceptados
{
"type": "https://sifende.com.py/docs/solucion-problemas/invalid-enum-value",
"title": "Valor de enumeración inválido",
"status": 400,
"detail": "El campo 'tipoDocumento' recibió 'INVOICE', que no es un valor permitido.",
"campo": "tipoDocumento",
"valorRecibido": "INVOICE",
"valoresAceptados": [
{"codigo": "FACTURA_ELECTRONICA", "descripcion": "Factura electrónica"},
{"codigo": "NOTA_DE_CREDITO_ELECTRONICA", "descripcion": "Nota de crédito electrónica"},
{"codigo": "NOTA_DE_DEBITO_ELECTRONICA", "descripcion": "Nota de débito electrónica"}
]
}Error de tipo de campo
Cuando un campo llega con el tipo equivocado, la respuesta nombra el campo, devuelve lo que se mandó y dice qué se esperaba:
{
"type": "https://sifende.com.py/docs/solucion-problemas/invalid-format",
"title": "Formato de campo inválido",
"status": 400,
"detail": "El campo 'numeroEstablecimiento' recibió un valor con formato inválido: 'establecimiento-uno'. Se esperaba un número entero",
"campo": "numeroEstablecimiento",
"valorRecibido": "establecimiento-uno",
"tipoEsperado": "número entero",
"traceId": "f2f0333f78bfb6a4184cb5a5374685a5"
}Un string numérico en un campo entero ("001") no es un error: se coacciona a 1. El 400 aparece cuando el valor no representa un número, o cuando llega un objeto/array donde va un escalar.
Configuración incompleta del contribuyente
campo señala qué falta y accion dice cómo resolverlo. Reintentar el mismo request no cambia el resultado:
{
"type": "https://sifende.com.py/docs/solucion-problemas/configuracion-incompleta",
"title": "Configuración del contribuyente incompleta",
"status": 422,
"detail": "El contribuyente no tiene un timbrado configurado (contribuyente 42). Cargá el timbrado en Configuración → Timbrado antes de emitir.",
"campo": "contribuyente.timbrado",
"configuracion": "TIMBRADO_VIGENTE",
"accion": "Cargá el timbrado en Configuración → Timbrado antes de emitir.",
"traceId": "f2f0333f78bfb6a4184cb5a5374685a5"
}Valores posibles de configuracion: TIMBRADO_VIGENTE, DIRECCION_EMISOR, ACTIVIDAD_ECONOMICA, CERTIFICADO_DIGITAL.
Error interno (500)
Un 500 incluye resultadoIndeterminado, que dice si la operación pudo haberse aplicado:
{
"type": "https://sifende.com.py/docs/solucion-problemas/internal-error",
"title": "Error interno del servidor",
"status": 500,
"detail": "Ocurrió un error inesperado y el resultado de la operación es indeterminado: puede haberse aplicado o no. No reintentes el envío sin antes consultar el estado, porque un reintento a ciegas puede duplicar el documento.",
"resultadoIndeterminado": true,
"accion": "Consultá el estado del recurso antes de reenviar. Si no podés determinarlo, contactá a soporte con el traceId.",
"traceId": "f2f0333f78bfb6a4184cb5a5374685a5"
}resultadoIndeterminado es true en métodos que modifican estado (POST, PUT, PATCH, DELETE) y false en consultas (GET), donde el reintento es seguro. Ver Manejar Errores.
Códigos de respuesta SIFEN
Cuando SIFEN procesa un lote, retorna un código que Sifende interpreta:
| Código SIFEN | Significado | Estado resultante |
|---|---|---|
0360 | Lote procesado correctamente | DE → APROBADO o APROBADO_OBSERVACION según el resultado de cada documento |
0361 | Lote no existe en SIFEN | Reintento automático |
0362 | Lote aún en procesamiento | Sifende reintenta más tarde |
0363 | Lote con errores de validación | DE → RECHAZADO |
0364 | Lote rechazado por SIFEN | DE → RECHAZADO |
0320 | Evento procesado correctamente | Evento → APROBADO |
0340 | Evento rechazado | Evento → RECHAZADO |
Códigos de rechazo de documentos individuales
Para ver el significado de los códigos de rechazo específicos (ej: 1108, 1302-1306) y cómo corregirlos, consultá Rechazos SIFEN.
Convenciones
Convenciones específicas de Paraguay en la API de Sifende — formato de RUC, montos en guaraníes, fechas, CDC y numeración de documentos.
Enumeraciones
Todos los valores válidos de las enumeraciones SIFEN usadas en la API de Sifende — tipoDocumento, afectacionTributaria, condicionPago y más.