SIFENDE
Referencia APIDocumentos Electrónicos

Emitir Documento Electrónico

POST /api/v1/documento-electronico — emite cualquier tipo de documento electrónico (FE, AFE, NCE, NDE, NRE) y retorna una respuesta con el CDC y URLs de seguimiento.

POST /api/v1/documento-electronico

Recibe un documento electrónico para firmarlo y enviarlo a SIFEN. La respuesta es asíncrona: la API retorna inmediatamente con estado: PENDIENTE y un CDC ya calculado. La respuesta de SIFEN llega después. Usá GET /status/:cdc o el statusUrl retornado para hacer polling del estado final.

Con una clave sk_sandbox_, el documento se procesa sin envío a SIFEN. La respuesta inicial sigue siendo 202 con PENDIENTE; consultá el comportamiento de SANDBOX.

Autenticación

Authorization: Bearer {api-key} — requerido

Idempotencia

Idempotency-Key es un header opcional de 1 a 255 caracteres ASCII visibles, sin espacios al inicio ni al final. El flujo compartido está definido en Idempotencia y Reintentos Seguros.

Idempotency-Key: 7d444840-9dc0-11d1-b245-5ffdce74fad2

En emisión, el replay devuelve el mismo 202, documento, CDC, correlativo y Location; nunca reserva otro número.

Cuerpo de la solicitud

El campo tipoDocumento determina el schema completo de la solicitud. Ver los modelos:

Campos de facturas y notas de crédito o débito

La NRE tiene un contrato propio de carga y transporte, sin importes comerciales. Usá sus tablas de campos.

La AFE también tiene un contrato propio: informa vendedor, lugarOperacion y constancia, y no admite receptor. Usá sus tablas de campos.

CampoTipoReq.Descripción
tipoDocumentoenumSíTipo de documento — ver la lista de modelos arriba
fechaEmisiondatetimeNoFecha y hora de Paraguay (YYYY-MM-DDTHH:mm:ss). Si se omite, se usa la fecha y hora en que Sifende recibe la solicitud
tipoEmisionenumNoSólo NORMAL, valor por defecto. SIFEN todavía no habilita la emisión en contingencia
numeroEstablecimientointegerSíNúmero de establecimiento (1-999)
puntoExpedicionintegerSíPunto de expedición (1-999)
receptorobjectSíDatos del receptor — ver Campos del receptor
itemsarraySíLista de ítems — ver Modelo Ítem
monedaOperacionenumNoMoneda de la operación (ej: PYG, USD). Por defecto PYG
descuentoGlobalPorcentajenumberNoPorcentaje global mayor que 0 y menor o igual a 100. No se admite en Nota de Remisión
infoEmisorstringNoTexto libre adicional del emisor, de 1 a 3000 caracteres en una sola línea

Campos condicionales según el tipo de documento

Estos campos no aplican a todos los tipos de documento. Omitir el que corresponde a tu tipoDocumento devuelve 400 validation-error.

CampoTipoObligatorio cuandoDescripción
tipoTransaccionenumtipoDocumento es FACTURA_ELECTRONICA o AUTOFACTURA_ELECTRONICANaturaleza de la operación (VENTA_MERCADERIA, PRESTACION_SERVICIOS, …). En NCE, NDE y NRE no se informa
condicionOperacionenumtipoDocumento es FACTURA_ELECTRONICA o AUTOFACTURA_ELECTRONICACONTADO o CREDITO. En AFE sólo se admite CONTADO, que es el valor por defecto. No aplica a NCE ni NDE
condicionPagoobjectcondicionOperacion es CONTADO o CREDITO, salvo que uses pagos/creditoMedio de pago o modalidad de crédito — ver Modelo Condición de Pago
pagos / creditoarray / objectAlternativa de la FE a condicionPagoVarios medios de pago y crédito con entrega — ver Forma completa
motivoEmisionenumtipoDocumento es NOTA_DE_CREDITO_ELECTRONICA o NOTA_DE_DEBITO_ELECTRONICAMotivo del ajuste (DEVOLUCION, DESCUENTO, AJUSTE_DE_PRECIO, …)
documentoAsociadoobjecttipoDocumento es NOTA_DE_CREDITO_ELECTRONICA o NOTA_DE_DEBITO_ELECTRONICAEl documento que se modifica — ver Modelo Documento Asociado. La FE usa la lista documentosAsociados

Campos del receptor

El bloque receptor usa los mismos nombres de campo en toda operación, pero cuáles son obligatorios depende de tipoContribuyente. Schema completo en Modelo Receptor.

CampoTipoReq.Descripción
tipoContribuyenteenumSíCONTRIBUYENTE (receptor con RUC) o NO_CONTRIBUYENTE. Siempre se envía
tipoOperacionenumSíB2B, B2C, B2G, B2F
numeroDocumentostringSíRUC sin DV, cédula o pasaporte según el caso. Para el receptor innominado, el literal "0"
nombreRazonSocialstringSíNombre o razón social. Para el receptor innominado, el literal "Sin Nombre"
tipoContribuyenteReceptorenumCondicionalObligatorio cuando tipoContribuyente = CONTRIBUYENTE. PERSONA_FISICA o PERSONA_JURIDICA. No se envía para NO_CONTRIBUYENTE: SIFEN lo rechaza con el código 1303
digitoVerificadorstringCondicionalObligatorio cuando tipoContribuyente = CONTRIBUYENTE. Un solo dígito — el DV del RUC del receptor
tipoDocumentoenumCondicionalObligatorio cuando tipoContribuyente = NO_CONTRIBUYENTE. CEDULA_PARAGUAYA, PASAPORTE, INNOMINADO, etc. No se envía para CONTRIBUYENTE
direccionstringCondicionalObligatoria para tipoOperacion = B2F y para la Nota de Remisión. Opcional en el resto
emailstringNoSi está configurado el envío automático, Sifende manda el KuDE a esta dirección

tipoContribuyente decide tres campos a la vez, y es el motivo de rechazo más frecuente al integrar. Si el receptor es CONTRIBUYENTE, tipoContribuyenteReceptor y digitoVerificador van sí o sí, y tipoDocumento no se envía. Si es NO_CONTRIBUYENTE, es exactamente al revés. La guía Receptor B2B y B2C cubre cada caso con su ejemplo.

Respuesta exitosa

Status: 202 Accepted

La respuesta incluye el CDC, el ambiente efectivo y URLs auxiliares para seguimiento.

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "cdc": "01800123451001001000000122026042710000000006",
  "estado": "PENDIENTE",
  "ambiente": "DEV",
  "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"
}

Headers de respuesta

HeaderValorDescripción
Location{statusUrl}URL absoluta para consultar el estado del documento

Campos de la respuesta

CampoTipoDescripción
iduuidIdentificador público del documento en Sifende. No es una clave de idempotencia
cdcstring(44)Código de Control del Documento Electrónico — identificador único en SIFEN
estadoenumEstado inicial: siempre PENDIENTE en la respuesta de emisión
ambientestringAmbiente de la emisión: DEV, PROD o SANDBOX, determinado por la API key. No cambia para este documento
tipoDocumentoenumTipo del documento creado (eco de la solicitud)
iTiDeintegerCódigo numérico SIFEN del tipo (1=FE, 4=AFE, 5=NCE, 6=NDE, 7=NRE)
numeroDocumentointegerNúmero correlativo asignado dentro del punto de expedición
numeroFormateadostringNúmero en formato establecimiento-puntoExpedicion-secuencia (ej: 001-001-0000001)
fechaCreaciondatetimeTimestamp de creación del registro
qrUrlstringURL del QR oficial de SIFEN para el KuDE
statusUrlstringURL absoluta para consultar el estado
kudeUrlstringURL absoluta para descargar el KuDE en PDF en estado APROBADO o APROBADO_OBSERVACION. En SANDBOX, el PDF indica que no tiene validez fiscal

El estado inicial es siempre PENDIENTE. Hacé polling a statusUrl o GET /status/:cdc cada 5 segundos, durante un máximo de 5 minutos, hasta llegar a un estado terminal: APROBADO, APROBADO_OBSERVACION, RECHAZADO, CANCELADO o ERROR. APROBADO_OBSERVACION es un resultado exitoso: el DE quedó registrado, con observaciones en mensajeRechazo. Ver Polling de resultados.

Errores comunes

StatusTipoCuándo ocurreAcción
400validation-errorCampos inválidos, faltantes o ramas de pago incompatibles; en CONTADO, pagos que no cubren exactamente el totalCorregí las rutas incluidas en errores y reenviá la solicitud
400validation-errorEn CREDITO: falta condicionCredito, se mezclan PLAZO/CUOTA, no coincide cuotas con detalleCuotas, las cuotas no suman el saldo financiado o la entrega es inválidaAjustá condicionPago según la referencia
400invalid-enum-valueValor de enumeración no reconocidoUsá un valor publicado por GET /api/v1/public/enums
422configuracion-incompletaFalta el timbrado u otro dato del emisorCompletá el dato indicado por campo
404certificate-not-foundFalta certificado activo o CSC del ambienteRevisá ambos desde el panel
422documento-electronico-generation-errorEl documento no cumple una regla fiscal; revisá el detailRevisá el detalle y contactá soporte si la solicitud cumple OpenAPI

La API ejecuta la validación 400 antes de reservar la secuencia. Un payload inválido no consume numeración ni crea un registro de documento electrónico.

Ejemplos

Los dos casos de receptor que cubren la mayoría de las integraciones. Copiá el que corresponda a tu operación — lo que los diferencia es el bloque receptor.

Factura B2C — consumidor final identificado

Factura a crédito por cuotas

Ejemplo de 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 '{
  "tipoDocumento": "FACTURA_ELECTRONICA",
  "fechaEmision": "2026-09-18T10:30:00",
  "tipoEmision": "NORMAL",
  "numeroEstablecimiento": 1,
  "puntoExpedicion": 1,
  "tipoTransaccion": "VENTA_MERCADERIA",
  "monedaOperacion": "PYG",
  "receptor": {
    "tipoContribuyente": "CONTRIBUYENTE",
    "tipoOperacion": "B2B",
    "tipoContribuyenteReceptor": "PERSONA_JURIDICA",
    "numeroDocumento": "80012345",
    "digitoVerificador": "0",
    "nombreRazonSocial": "Comercial San Roque S.A."
  },
  "condicionOperacion": "CREDITO",
  "condicionPago": {
    "tipo": "CREDITO",
    "condicionCredito": "CUOTA",
    "cuotas": 3,
    "detalleCuotas": [
      {
        "monto": 40000,
        "fechaVencimiento": "2026-09-18"
      },
      {
        "monto": 40000,
        "fechaVencimiento": "2026-10-18"
      },
      {
        "monto": 40000,
        "fechaVencimiento": "2026-11-18"
      }
    ]
  },
  "items": [
    {
      "codigo": "PROD-001",
      "descripcion": "Resma de papel A4 75g",
      "cantidad": 10,
      "unidadMedida": "UNI",
      "precioUnitario": 12000,
      "afectacionTributaria": "GRAVADO",
      "tasaIVA": 10
    }
  ]
}'

Para crédito a plazo, reemplazá la rama por condicionCredito: "PLAZO" y plazoCredito; no envíes cuotas ni detalleCuotas.

Factura B2B — receptor contribuyente con RUC

Respecto del ejemplo anterior, en el bloque receptor: tipoContribuyente pasa a CONTRIBUYENTE y tipoOperacion a B2B, se agregan tipoContribuyenteReceptor y digitoVerificador, y se saca tipoDocumento. El numeroDocumento es el RUC sin el dígito verificador.

Próximos pasos

On this page