API de Facturación Electrónica

Sistema Integrado de Facturación Electrónica Nacional (SIFEN)

Documentación Técnica v1.0

Introducción

Esta API permite emitir documentos electrónicos válidos ante la SET (Subsecretaría de Estado de Tributación) de Paraguay a través del sistema SIFEN.

Cumplimiento Legal

100% conforme a normativas de la DNIT (Dirección Nacional de Ingresos Tributarios)

Integración Simple

API REST con JSON, fácil de integrar en cualquier sistema

Seguridad

Firma digital con certificado válido, encriptación SSL

Tiempo Real

Emisión y validación instantánea con SIFEN

¿Qué es SIFEN?

SIFEN (Sistema Integrado de Facturación Electrónica Nacional) es el sistema oficial de la SET para la emisión de documentos electrónicos en Paraguay.

Documentos Soportados

Tipo Código Descripción Uso
Factura Electrónica 1 Documento de venta Ventas de productos o servicios
Nota de Crédito 5 Anulación o devolución Devoluciones, descuentos
Nota de Débito 6 Ajuste adicional Intereses, gastos adicionales
Nota de Remisión 7 Traslado de mercadería Movimiento de stock

Componentes del Documento Electrónico

Estructura de un Documento Electrónico:
  • XML: Documento estructurado según especificaciones SIFEN v150
  • Firma Digital: Certificado digital válido (.pfx)
  • CDC: Código de Control del Documento (44 dígitos único)
  • QR: Código QR para validación pública
  • Protocolo: Número de autorización de SIFEN

Endpoints de la API

Base URL: https://tu-dominio.com/invoicing

GET/companies

Obtiene la lista de empresas configuradas para facturación.

Respuesta:

[
  {
    "id": "abc-123-def",
    "name": "Mi Empresa SRL",
    "ruc": "80012345-6",
    "business_name": "MI EMPRESA SOCIEDAD DE RESPONSABILIDAD LIMITADA"
  }
]

POST/emit/invoice

Emite una factura electrónica y la envía a SIFEN.

Parámetros Query:

Parámetro Tipo Descripción
company_id string Requerido ID de la empresa emisora

Body (JSON):

{
  "cliente": {
    "ruc": "80009735-1",
    "razonSocial": "ANDE",
    "direccion": "Av. España",
    "numeroCasa": "1234",
    "tipoContribuyente": 2,
    "tipoOperacion": 3,
    "email": "cliente@ande.gov.py"
  },
  "items": [
    {
      "codigo": "PROD-001",
      "descripcion": "Silla de Oficina",
      "cantidad": 1.0,
      "precioUnitario": 150000,
      "ivaTipo": 10,
      "unidadMedida": 77
    }
  ],
  "condicion": {
    "tipo": 1,
    "entregas": [
      {
        "tipo": 1,
        "monto": 150000,
        "moneda": "PYG"
      }
    ]
  },
  "moneda": "PYG",
  "observacion": "Factura de prueba"
}

Respuesta Exitosa:

{
  "ns2:rRetEnviDe": {
    "ns2:rProtDe": {
      "ns2:dEstRes": "Aprobado",
      "ns2:dProtAut": "12345678901234567890",
      "ns2:gResProc": {
        "ns2:dCodRes": "0260",
        "ns2:dMsgRes": "Aprobado"
      }
    }
  },
  "cdc": "01800123456001001000104720241201000000011234567890",
  "qr_url": "https://ekuatia.set.gov.py/consultas/qr?nVersion=150&Id=...",
  "xml_signed": "..."
}
Campos Importantes de la Respuesta:
  • cdc: Código único del documento (guárdalo en tu base de datos)
  • qr_url: URL del QR para validación pública
  • xml_signed: XML completo firmado (para imprimir o almacenar)
  • dEstRes: Estado del documento ("Aprobado", "Rechazado")

POST/emit/credit-note

Emite una nota de crédito asociada a una factura.

Campos Adicionales Requeridos:

{
  "motivo": 2,
  "documentoAsociado": {
    "cdc": "01800123456001001000104720241201000000011234567890",
    "tipo": 1
  },
  ...resto de campos igual que factura
}

Motivos de Nota de Crédito:

Código Descripción
1Devolución y anulación de factura
2Devolución y anulación parcial
3Descuento o bonificación
4Ajuste de precio

POST/emit/debit-note

Emite una nota de débito para ajustes adicionales.

Motivos de Nota de Débito:

Código Descripción
1Interés por mora
2Ajuste de precio
3Gastos adicionales

POST/emit/remision

Emite una nota de remisión para traslado de mercadería.

Importante: Las notas de remisión NO requieren precio ni IVA en los items, solo código, descripción y cantidad.

Ejemplo:

{
  "cliente": {...},
  "items": [
    {
      "codigo": "PROD-001",
      "descripcion": "Silla de Oficina",
      "cantidad": 5,
      "unidadMedida": 77
    }
  ],
  "moneda": "PYG",
  "observacion": "Traslado a sucursal"
}

POST/consult/ruc

Valida un RUC en el sistema SIFEN.

Parámetros Query:

Parámetro Descripción
ruc RUC a consultar (formato: 80012345-6)
company_id ID de la empresa que realiza la consulta

Respuesta:

{
  "ns2:rResEnviConsRUC": {
    "ns2:xContRUC": {
      "ns2:dRUC": "80009735-1",
      "ns2:dRazSoc": "ADMINISTRACION NACIONAL DE ELECTRICIDAD",
      "ns2:dNomFan": "ANDE",
      "ns2:dEstRUC": "Activo"
    }
  }
}

POST/consult/document

Consulta el estado de un documento por su CDC.

Parámetros Query:

Parámetro Descripción
cdc CDC del documento (44 dígitos)
company_id ID de la empresa

POST/events/cancel

Cancela un documento electrónico emitido.

Body:

{
  "cdc": "01800123456001001000104720241201000000011234567890",
  "motivo": "Error en datos del cliente"
}

Generación de XML SIFEN

La API genera automáticamente el XML según las especificaciones SIFEN v150.

Proceso de Generación

1. Validación

Valida todos los datos del request contra las reglas de SIFEN

2. Generación XML

Crea el XML estructurado con todos los campos requeridos

3. Firma Digital

Firma el XML con el certificado digital de la empresa

4. QR Code

Agrega el código QR al XML firmado

5. Envío a SIFEN

Envía el documento a SIFEN para validación

6. Respuesta

Retorna CDC, QR URL y XML completo

Ejemplo de XML Generado

<?xml version="1.0" encoding="UTF-8"?>
<rDE xmlns="http://ekuatia.set.gov.py/sifen/xsd">
  <DE Id="01800123456001001000104720241201000000011234567890">
    <dVerFor>150</dVerFor>
    <gOpeDE>
      <iTipEmi>1</iTipEmi>
      <dDesTipEmi>Normal</dDesTipEmi>
      <dCodSeg>669880626</dCodSeg>
    </gOpeDE>
    <gTimb>
      <iTiDE>1</iTiDE>
      <dDesTiDE>Factura electrónica</dDesTiDE>
      <dNumTim>03970287</dNumTim>
      <dEst>001</dEst>
      <dPunExp>001</dPunExp>
      <dNumDoc>0000001</dNumDoc>
      <dFeIniT>2024-01-01</dFeIniT>
    </gTimb>
    <gDatGralOpe>
      <dFeEmiDE>2024-12-01T10:30:00</dFeEmiDE>
    </gDatGralOpe>
    <gEmis>
      <dRucEm>80012345-6</dRucEm>
      <dRazSocEm>MI EMPRESA SRL</dRazSocEm>
      ...
    </gEmis>
    <gDatRec>
      <dRucRec>80009735-1</dRucRec>
      <dRazSocRec>ANDE</dRazSocRec>
      ...
    </gDatRec>
    <gDtipDE>
      <gCamFE>
        <gCamItem>
          <dCodInt>PROD-001</dCodInt>
          <dDesProSer>Silla de Oficina</dDesProSer>
          <dCantProSer>1.0</dCantProSer>
          <dPUniProSer>150000</dPUniProSer>
          ...
        </gCamItem>
      </gCamFE>
    </gDtipDE>
  </DE>
  <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
    ...firma digital...
  </Signature>
  <dCarQR>https://ekuatia.set.gov.py/consultas/qr?...</dCarQR>
</rDE>

Campos Automáticos

La API genera automáticamente los siguientes campos:

Campo Descripción
CDC Código de Control del Documento (44 dígitos único)
Código de Seguridad Número aleatorio de 9 dígitos
Número de Documento Secuencial automático si no se especifica
Fecha de Emisión Fecha/hora actual si no se especifica
Totales Cálculo automático de subtotales, IVA y total

Ejemplos de Uso

Python

import requests

url = "https://api.ejemplo.com/invoicing/emit/invoice"
params = {"company_id": "abc-123"}

factura = {
    "cliente": {
        "ruc": "80009735-1",
        "razonSocial": "ANDE",
        "direccion": "Av. España",
        "numeroCasa": "1234",
        "tipoContribuyente": 2,
        "email": "cliente@ande.gov.py"
    },
    "items": [{
        "codigo": "PROD-001",
        "descripcion": "Producto",
        "cantidad": 1,
        "precioUnitario": 100000,
        "ivaTipo": 10
    }],
    "condicion": {
        "tipo": 1,
        "entregas": [{"tipo": 1, "monto": 100000, "moneda": "PYG"}]
    },
    "moneda": "PYG"
}

response = requests.post(url, params=params, json=factura)
result = response.json()

print(f"CDC: {result['cdc']}")
print(f"QR: {result['qr_url']}")

cURL

curl -X POST "https://api.ejemplo.com/invoicing/emit/invoice?company_id=abc-123" \
  -H "Content-Type: application/json" \
  -d '{
    "cliente": {
      "ruc": "80009735-1",
      "razonSocial": "ANDE",
      "direccion": "Av. España",
      "numeroCasa": "1234",
      "tipoContribuyente": 2,
      "email": "cliente@ande.gov.py"
    },
    "items": [{
      "codigo": "PROD-001",
      "descripcion": "Producto",
      "cantidad": 1,
      "precioUnitario": 100000,
      "ivaTipo": 10
    }],
    "condicion": {
      "tipo": 1,
      "entregas": [{"tipo": 1, "monto": 100000, "moneda": "PYG"}]
    },
    "moneda": "PYG"
  }'

Códigos de Error

Errores Comunes

Error Causa Solución
Empresa no tiene certificado activo Certificado digital no configurado Cargar certificado .pfx válido
RUC inválido Formato incorrecto de RUC Usar formato: 80012345-6 (con DV)
Timbrado vencido Timbrado fuera de vigencia Renovar timbrado en la SET
Items sin precio Falta precioUnitario o ivaTipo Agregar precio e IVA a todos los items
Documento rechazado por SIFEN Datos inválidos según SIFEN Revisar mensaje de error de SIFEN

Códigos de Respuesta SIFEN

Código Estado Descripción
0260 Aprobado Documento aprobado correctamente
0261 Pendiente En proceso de validación
0300-0399 Rechazado Error en datos del documento

Esquema de Datos Completo

Cliente (ClientSchema)

Campo Tipo Requerido Descripción
ruc string Requerido RUC con DV (ej: 80012345-6)
razonSocial string Requerido Razón social o nombre completo
direccion string Requerido Dirección del cliente
numeroCasa string Requerido Número de casa
tipoContribuyente int Requerido 1: Físico, 2: Jurídico
tipoOperacion int Requerido 1: B2B, 2: B2C, 3: B2G
email string Requerido Email del cliente
documentoTipo int Requerido Tipo de documento (si no tiene RUC)
documentoNumero string Requerido Número de documento (si no tiene RUC)

Item (ItemSchema)

Campo Tipo Requerido Descripción
codigo string Requerido Código del producto/servicio
descripcion string Requerido Descripción del item
cantidad float Requerido Cantidad
precioUnitario float Requerido* Precio unitario
ivaTipo int Requerido* 10, 5, o 0 (exento)
unidadMedida int Opcional Código de unidad (default: 77)
descuento float Opcional Descuento unitario

* No requerido para notas de remisión

Tipos de IVA

Código Descripción Uso
10 IVA 10% Productos/servicios gravados al 10%
5 IVA 5% Productos/servicios gravados al 5%
0 Exento Productos/servicios exentos de IVA