SIFENDE
Guías

Factura Electrónica

Guía completa para emitir una Factura Electrónica con datos del receptor B2C o B2B, ítems, condición de pago y ejemplos de request completo.

Esta guía cubre la emisión de una Factura Electrónica (FE) paso a paso, desde el armado del request hasta el seguimiento del estado en SIFEN.

Antes de empezar

Verificá que tenés los tres elementos imprescindibles configurados:

  • Timbrado activo y vigente, cargado en el panel de Sifende para tu contribuyente.
  • Certificado digital subido: .p12 válido y en vigencia.
  • API key generada desde el panel y disponible como variable de entorno.

Si te falta alguno, volvé a Inicio Rápido: Requisitos previos.

Paso 1: Armá el request

La FE usa el endpoint polimórfico POST /api/v1/documento-electronico con tipoDocumento: "FACTURA_ELECTRONICA". Los datos del emisor los completa Sifende automáticamente desde el contribuyente y el timbrado configurados. Vos solo pasás los datos del receptor, los ítems y la condición de pago.

Ejemplo de FE B2C innominada (consumo final hasta Gs. 5.000.000) con un solo ítem gravado al 10%:

{
  "tipoDocumento": "FACTURA_ELECTRONICA",
  "fechaEmision": "2026-04-27T10:30:00",
  "tipoEmision": "NORMAL",
  "numeroEstablecimiento": 1,
  "puntoExpedicion": 1,
  "tipoTransaccion": "VENTA_MERCADERIA",
  "monedaOperacion": "PYG",
  "receptor": {
    "tipoContribuyente": "INNOMINADO",
    "tipoOperacion": "B2C"
  },
  "condicionOperacion": "CONTADO",
  "condicionPago": {
    "tipo": "CONTADO",
    "tipoPago": "EFECTIVO",
    "monedaPago": "PYG",
    "montoPago": 150000
  },
  "items": [
    {
      "codigo": "PROD-A4-75",
      "descripcion": "Resma de papel A4 75g",
      "cantidad": 10,
      "unidadMedida": "UNI",
      "precioUnitario": 15000,
      "afectacionTributaria": "GRAVADO",
      "tasaIVA": 10
    }
  ]
}

Los montos en guaraníes son enteros sin decimales. 15000 representa Gs. 15.000. Ver Convenciones.

Paso 2: Enviá la solicitud

curl -X POST https://api.sifende.com.py/api/v1/documento-electronico \
  -H "Authorization: Bearer $SIFENDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d @factura.json
const response = await fetch(
  'https://api.sifende.com.py/api/v1/documento-electronico',
  {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.SIFENDE_API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(facturaPayload),
  }
);

if (!response.ok) {
  const problem = await response.json();
  throw new Error(`${problem.title}: ${problem.detail}`);
}

const { id, cdc, estado, statusUrl, kudeUrl } = await response.json();
console.log('CDC emitido:', cdc, ', estado inicial:', estado);

Paso 3: Guardá la respuesta

La respuesta exitosa es 202 Accepted con un body que incluye los identificadores del DE creado:

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "cdc": "01800123451001001000000122026042710000000006",
  "estado": "PENDIENTE",
  "tipoDocumento": "FACTURA_ELECTRONICA",
  "iTiDe": 1,
  "numeroDocumento": 1,
  "numeroFormateado": "001-001-0000001",
  "fechaCreacion": "2026-04-27T10:30:00",
  "qrUrl": "https://ekuatia.set.gov.py/consultas-test/qr?...",
  "statusUrl": "https://api.sifende.com.py/api/v1/documento-electronico/status/01800123451001001000000122026042710000000006",
  "kudeUrl": "https://api.sifende.com.py/api/v1/documento-electronico/01800123451001001000000122026042710000000006/kude"
}

estado: "PENDIENTE" es lo esperado. SIFEN procesa el documento de forma asíncrona: el CDC ya es válido, pero la aprobación llega en segundos a minutos. Pasá al Paso 4 para verificar.

Guardá id, cdc y numeroFormateado asociados a tu venta. Vas a necesitarlos para:

  • Consultar el estado de procesamiento en SIFEN (usá statusUrl o el cdc).
  • Descargar el KuDE (PDF) cuando esté aprobado (usá kudeUrl).
  • Cancelar el documento si fuera necesario.

Paso 4: Esperá el resultado de SIFEN

SIFEN procesa los documentos de forma asíncrona. Apenas recibís el CDC, el estado interno es PENDIENTE o EN_LOTE. El procesamiento tarda habitualmente entre 15 y 60 segundos, pero puede superar los 2 minutos en el ambiente de QA. Implementá polling con timeout de al menos 5 minutos.

Los detalles de la estrategia de polling están en Consultar Estado de un Documento.

Errores frecuentes en este flujo

StatusTipoCausa más comúnCómo resolverlo
400validation-errorFalta un campo obligatorio o un valor está mal formateadoRevisá errores en la respuesta
400invalid-enum-valueValor de enum no reconocido (ej: "INVOICE" en tipoDocumento)Revisá valoresAceptados en la respuesta
404timbrado-not-foundNo hay timbrado configurado para este contribuyenteCargá el timbrado en el panel
422SIFEN 1108Fecha fin de vigencia del timbrado incorrecta (timbrado vencido o mal configurado)Renová o corregí la fechaFin del timbrado en SET y actualizalo en Sifende
401(texto plano)API key inválida o revocadaRotá la credencial desde el panel, en Configuración → API Keys

Para el listado completo, ver Manejar Errores y Rechazos SIFEN.

Próximos pasos

On this page