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:
.p12vá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.jsonconst 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á
statusUrlo elcdc). - 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
| Status | Tipo | Causa más común | Cómo resolverlo |
|---|---|---|---|
| 400 | validation-error | Falta un campo obligatorio o un valor está mal formateado | Revisá errores en la respuesta |
| 400 | invalid-enum-value | Valor de enum no reconocido (ej: "INVOICE" en tipoDocumento) | Revisá valoresAceptados en la respuesta |
| 404 | timbrado-not-found | No hay timbrado configurado para este contribuyente | Cargá el timbrado en el panel |
| 422 | SIFEN 1108 | Fecha 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 revocada | Rotá la credencial desde el panel, en Configuración → API Keys |
Para el listado completo, ver Manejar Errores y Rechazos SIFEN.
Próximos pasos
- ¿Estás facturando a una empresa con RUC? → Receptor B2B y B2C.
- ¿Necesitás anular o ajustar una FE aprobada? → Nota de Crédito.
- ¿Querés entregar el comprobante al cliente? → Descargar KuDE.