Paso 3: Verificar el Estado
Consultá el estado de procesamiento de tu documento en SIFEN usando el CDC.
El procesamiento en SIFEN es asíncrono: tu documento se envía en un lote y SIFEN lo procesa en segundos o minutos. Este paso te muestra cómo verificar si fue aprobado o rechazado.
Consultar el estado por CDC
curl https://api.sifende.com.py/api/v1/documento-electronico/status/01800123451001001000000122026042710000000006 \
-H "Authorization: Bearer $SIFENDE_API_KEY"Reemplazá el CDC del ejemplo por el que recibiste en el Paso 2.
Respuesta
{
"cdc": "01800123451001001000000122026042710000000006",
"estado": "APROBADO",
"iTiDe": 1,
"numeroDocumento": 1,
"fechaCreacion": "2026-04-27T10:30:00",
"protocoloAutorizacion": "01234567890123",
"mensajeRechazo": null
}Estados posibles
| Estado | Significado |
|---|---|
PENDIENTE | El documento fue recibido pero aún no se asignó a un lote |
EN_LOTE | Incluido en un lote, esperando envío a SIFEN |
ENVIADO | El lote fue enviado a SIFEN, esperando respuesta |
APROBADO | SIFEN lo aprobó. El documento es válido |
RECHAZADO | SIFEN lo rechazó. Ver mensajeRechazo en la respuesta |
ERROR | Error técnico durante el procesamiento (ver mensajeRechazo) |
CANCELADO | El documento fue cancelado después de su aprobación |
Polling recomendado
Si el estado es PENDIENTE, EN_LOTE o ENVIADO, esperá unos segundos y consultá de nuevo. El procesamiento típico tarda entre 15 y 60 segundos, pero en el ambiente de QA puede demorarse hasta 2 minutos o más. Configurá un timeout de al menos 5 minutos y un intervalo de polling razonable (5-10 s) para no saturar la API.
async function esperarAprobacion(cdc: string, timeoutMs = 5 * 60 * 1000): Promise<void> {
const inicio = Date.now();
const intervaloMs = 5000; // 5 segundos entre intentos
while (Date.now() - inicio < timeoutMs) {
const res = await fetch(
`https://api.sifende.com.py/api/v1/documento-electronico/status/${cdc}`,
{ headers: { Authorization: `Bearer ${process.env.SIFENDE_API_KEY}` } }
);
const data = await res.json();
if (data.estado === 'APROBADO') return;
if (data.estado === 'RECHAZADO' || data.estado === 'ERROR') {
throw new Error(data.mensajeRechazo ?? 'Documento rechazado por SIFEN');
}
await new Promise(r => setTimeout(r, intervaloMs));
}
throw new Error('Timeout esperando aprobación SIFEN (5 minutos)');
}No uses timeouts cortos (menos de 2 minutos). En QA es habitual ver documentos que se quedan en EN_LOTE más de 2 minutos antes de aprobarse. Un timeout corto te va a generar falsos negativos.
Documento APROBADO
Si el estado es APROBADO, podés:
- Descargar el KuDE (PDF para el cliente):
GET /:cdc/kude. - Descargar el XML firmado.
Documento RECHAZADO
Consultá Rechazos SIFEN para entender el código de error y cómo corregirlo. El mensaje que devuelve SIFEN viene en el campo mensajeRechazo.
¡Felicitaciones! Si llegaste hasta acá con un estado APROBADO, tu integración básica está funcionando. Seguí con Paso 4: Ir a Producción.