SIFENDE
Referencia API

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)StatusDescripción
validation-error400Campos inválidos en el body, o falta un query param / header obligatorio — ver errores o campo
invalid-enum-value400Valor de enumeración no reconocido — ver valoresAceptados
invalid-format400Tipo o formato de campo incorrecto — ver campo, valorRecibido y tipoEsperado
resource-not-found404La ruta solicitada no existe
contribuyente-not-found404Contribuyente no encontrado por ID
documento-electronico-not-found404DE no encontrado por ID o CDC
timbrado-not-found404Timbrado no encontrado
api-key-not-found404API key inexistente o revocado
certificate-not-found404No hay certificado digital subido
ruc-not-found404RUC o cédula no encontrado en el padrón de la SET ni en el registro de SIFEN
evento-not-found404Evento SIFEN no encontrado
access-denied403Usuario sin acceso al contribuyente
document-quota-exceeded403El plan no permite adicionales y la ocupación alcanzó el cupo; la solicitud no se ejecutó
rate-limit-exceeded429Se superó el límite de consultas por minuto; Retry-After indica cuántos segundos esperar
document-archived403El período de acceso del plan actual finalizó; el contenido y las acciones del documento no están disponibles
duplicate-ruc409RUC ya registrado para este usuario
duplicate-timbrado409Número de timbrado ya existe
evento-cancelacion-error400/409Error al enviar evento de cancelación
evento-inutilizacion-error400/409Error al enviar evento de inutilización
method-not-allowed405Método HTTP incorrecto para ese endpoint
unsupported-media-type415Content-Type no soportado — usá application/json
configuracion-incompleta422Falta configuración del contribuyente (timbrado, dirección, actividades, certificado)
documento-electronico-generation-error422Error al generar el DE (problema de compliance SIFEN)
kude-generation-error500Error técnico interno al preparar u obtener el KuDE PDF
kude-unavailable503El KuDE no está disponible temporalmente por una causa técnica identificada
timbrado-no-vigente422La fecha de emisión cae fuera de la vigencia del timbrado
kude-not-supported501KuDE no disponible para este tipo de documento
idempotency-in-progress409La misma clave y solicitud todavía están en proceso. Incluye Retry-After: 2
idempotency-outcome-unknown409Resultado terminal indeterminado; no reenvíes. No incluye Retry-After
idempotency-key-expired409Venció el replay de 7 días; la clave permanece reservada permanentemente
idempotency-key-reused422La clave ya identifica otro payload u otra operación del contribuyente
idempotency-upstream-unknown503SIFEN no confirmó el resultado. Incluye Retry-After: 2; reintentá con la misma clave
idempotency-unavailable503La operación no se ejecutó porque la idempotencia está deshabilitada
padron-no-disponible502El padrón de la SET no respondió; reintentar en unos minutos
idempotency-fingerprint-unsupported503La operación no se ejecutó porque el fingerprint persistido no es compatible
internal-error500Error 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í:

StatusTipoCuándo aparece
500kude-generation-errorFallo técnico interno o falta de diagnóstico temporal seguro
503kude-unavailableIndisponibilidad temporal identificada, sin copia legible disponible
501kude-not-supportedTipo 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 SIFENSignificadoEstado resultante
0360Lote procesado correctamenteDE → APROBADO o APROBADO_OBSERVACION según el resultado de cada documento
0361Lote no existe en SIFENReintento automático
0362Lote aún en procesamientoSifende reintenta más tarde
0363Lote con errores de validaciónDE → RECHAZADO
0364Lote rechazado por SIFENDE → RECHAZADO
0320Evento procesado correctamenteEvento → APROBADO
0340Evento rechazadoEvento → 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.

On this page