SIFENDE
Inicio Rápido

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

EstadoSignificado
PENDIENTEEl documento fue recibido pero aún no se asignó a un lote
EN_LOTEIncluido en un lote, esperando envío a SIFEN
ENVIADOEl lote fue enviado a SIFEN, esperando respuesta
APROBADOSIFEN lo aprobó. El documento es válido
RECHAZADOSIFEN lo rechazó. Ver mensajeRechazo en la respuesta
ERRORError técnico durante el procesamiento (ver mensajeRechazo)
CANCELADOEl 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.

On this page