API de Facturación Electrónica

Documentación completa para la integración con SIFEN Paraguay

Información General

URL Base
https://tu-dominio.com/fact_elect/
Método
POST
Content-Type
application/x-www-form-urlencoded
Autenticación
API Key por empresa

Endpoints Disponibles

POST index.php Emisión de Factura Electrónica
POST remision.php Emisión de Nota de Remisión Electrónica
GET kude.php?cdc={CDC} Visualización del KUDE
POST consultar_estado.php Consultar estado de un DE
POST consultar_ruc.php Consultar datos de un RUC en SIFEN
POST cancelar_api.php Cancelar una Factura Electrónica emitida

1. Emisión de Factura Electrónica

Parámetros POST (form-data)

Campo Tipo Obligatorio Descripción
apiKey string Clave API de la empresa
tenantId string Identificador del tenant/empresa (ej: puchi)
tenantPunto string Condicional Establecimiento-Punto de expedición (ej: 001-001). Puede omitirse si data[0].establecimiento y data[0].punto vienen dentro del JSON.
cliente string Condicional Nombre del cliente. Puede omitirse si viene en data[0].cliente.razonSocial.
email string Condicional Email del cliente (para envío del KUDE). Puede omitirse si viene en data[0].cliente.email.
data string (JSON) Datos de la factura en formato JSON (ver estructura abajo)
Nota: Los campos tenantPunto, cliente y email son condicionales: son requeridos sólo si no están presentes dentro del JSON data. Esto permite integrar sistemas que ya envían todos los datos en el JSON sin necesidad de duplicarlos en los parámetros POST.

Respuesta

Texto plano con formato:

Respuesta exitosa
Cliente: NOMBRE DEL CLIENTE
Estado: ok
Mensaje: Factura creada exitosamente...
NUM: 59-CDC: 01042287731001001000005912026041314432884104
Respuesta con error
Cliente: NOMBRE DEL CLIENTE
Estado: error
Mensaje: Error de SIFEN: [descripción del error]
NUM: 59-CDC: No disponible

2. Estructura del JSON (data)

El campo data es un array JSON con un solo elemento [{...}].

Ejemplo: Cliente Contribuyente (B2B)

JSON
[
  {
    "tipoDocumento": 1,
    "tipoTransaccion": 1,
    "tipoImpuesto": 1,
    "moneda": "PYG",

    "cliente": {
      "contribuyente": true,
      "ruc": "80000004-2",
      "razonSocial": "EMPRESA IMPORTADORA S.A.",
      "tipoContribuyente": 2,
      "tipoOperacion": 1,
      "direccion": "AV. MARISCAL LOPEZ 1234",
      "numeroCasa": "1234",
      "departamento": 11,
      "departamentoDescripcion": "CENTRAL",
      "distrito": 1,
      "distritoDescripcion": "ASUNCION (DISTRITO)",
      "ciudad": 1,
      "ciudadDescripcion": "ASUNCION (DISTRITO)",
      "telefono": "021555123",
      "email": "[email protected]",
      "pais": "PRY",
      "paisDescripcion": "Paraguay",
      "codigo": "CLI001"
    },

    "items": [
      {
        "codigo": "0000001",
        "descripcion": "Jabón en Pan Cuñataí 180g",
        "unidadMedida": 77,
        "cantidad": 2,
        "precioUnitario": 1986,
        "iva": 5,
        "ivaTipo": 1,
        "ivaBase": 100
      },
      {
        "codigo": "0000002",
        "descripcion": "Arroz Paquete 1Kg",
        "unidadMedida": 77,
        "cantidad": 3,
        "precioUnitario": 8500,
        "iva": 10,
        "ivaTipo": 1,
        "ivaBase": 100
      }
    ],

    "condicion": {
      "tipo": 1,
      "entregas": [
        {
          "tipo": 1,
          "monto": 29472,
          "moneda": "PYG",
          "monedaDescripcion": "Guarani"
        }
      ]
    },

    "factura": {
      "presencia": 1
    }
  }
]

Ejemplo: Cliente No Contribuyente (B2C)

JSON
[
  {
    "tipoDocumento": 1,
    "tipoTransaccion": 1,
    "tipoImpuesto": 1,
    "moneda": "PYG",

    "cliente": {
      "contribuyente": false,
      "tipoOperacion": 2,
      "documentoTipo": 1,
      "documentoNumero": "3456789",
      "razonSocial": "HECTOR ANTONIO BENITEZ VALDEZ",
      "direccion": "CALLE PRINCIPAL C/ SEGUNDA",
      "numeroCasa": "456",
      "departamento": 8,
      "departamentoDescripcion": "ITAPUA",
      "distrito": 89,
      "distritoDescripcion": "CAMBYRETA",
      "ciudad": 2600,
      "ciudadDescripcion": "CAMBYRETA",
      "telefono": "0975123456",
      "email": "[email protected]",
      "pais": "PRY",
      "paisDescripcion": "Paraguay",
      "codigo": "00180"
    },

    "items": [
      {
        "codigo": "0000001",
        "descripcion": "Jabón en Pan Cuñataí 180g",
        "unidadMedida": 77,
        "cantidad": 1,
        "precioUnitario": 1986,
        "iva": 5,
        "ivaTipo": 1,
        "ivaBase": 100
      },
      {
        "codigo": "0000002",
        "descripcion": "Jabón en Pan Cuñataí 270g",
        "unidadMedida": 77,
        "cantidad": 1,
        "precioUnitario": 2900,
        "iva": 0,
        "ivaTipo": 1,
        "ivaBase": 100
      },
      {
        "codigo": "0000003",
        "descripcion": "Bandera Paraguaya C/Mastil",
        "unidadMedida": 77,
        "cantidad": 1,
        "precioUnitario": 8500,
        "iva": 10,
        "ivaTipo": 1,
        "ivaBase": 100
      }
    ],

    "condicion": {
      "tipo": 1,
      "entregas": [
        {
          "tipo": 1,
          "monto": 13386,
          "moneda": "PYG",
          "monedaDescripcion": "Guarani"
        }
      ]
    },

    "factura": {
      "presencia": 1
    }
  }
]
ℹ️
Para no contribuyentes: usar documentoTipo + documentoNumero en lugar de ruc. El tipoOperacion debe ser 2 (B2C).

Ejemplo: Venta a Crédito

JSON
[
  {
    "tipoDocumento": 1,
    "tipoTransaccion": 1,
    "tipoImpuesto": 1,
    "moneda": "PYG",

    "cliente": {
      "contribuyente": true,
      "ruc": "80000004-2",
      "razonSocial": "EMPRESA IMPORTADORA S.A.",
      "tipoContribuyente": 2,
      "tipoOperacion": 1,
      "direccion": "AV. MARISCAL LOPEZ 1234",
      "numeroCasa": "1234",
      "departamento": 11,
      "departamentoDescripcion": "CENTRAL",
      "distrito": 1,
      "distritoDescripcion": "ASUNCION (DISTRITO)",
      "ciudad": 1,
      "ciudadDescripcion": "ASUNCION (DISTRITO)",
      "email": "[email protected]",
      "pais": "PRY",
      "paisDescripcion": "Paraguay",
      "codigo": "CLI001"
    },

    "items": [
      {
        "codigo": "0000001",
        "descripcion": "Producto Ejemplo",
        "unidadMedida": 77,
        "cantidad": 10,
        "precioUnitario": 50000,
        "iva": 10,
        "ivaTipo": 1,
        "ivaBase": 100
      }
    ],

    "condicion": {
      "tipo": 2,
      "credito": {
        "tipo": 1,
        "plazo": "30 días",
        "cuotas": 1,
        "infoCuotas": [
          {
            "moneda": "PYG",
            "monedaDescripcion": "Guarani",
            "monto": 500000,
            "vencimiento": "2026-05-13"
          }
        ]
      }
    },

    "factura": {
      "presencia": 1
    }
  }
]

Ejemplos prácticos por tipo de cliente y condición de pago

Los siguientes ejemplos reflejan los casos reales de uso. La diferencia clave entre ellos está en los campos contribuyente, tipoContribuyente, tipoOperacion y la sección condicion.

ℹ️
contribuyente: false · tipoOperacion: 2 (B2C) · tipoContribuyente: 0 · identificar con documentoTipo: 1 (Cédula) y documentoNumero
JSON — No Contribuyente (Solo Cédula)
[{
  "tipoDocumento": 1,
  "establecimiento": 1,
  "punto": "1",
  "numero": 12,
  "descripcion": "Aparece en el documento",
  "observacion": "...",
  "fecha": "2026-04-22T10:20:49",
  "tipoEmision": 1,
  "tipoTransaccion": 3,
  "tipoImpuesto": 1,
  "moneda": "PYG",

  "cliente": {
    "contribuyente": false,
    "ruc": "2830501",
    "razonSocial": "MARCIAL ESTECHE",
    "nombreFantasia": "MARCIAL ESTECHE",
    "tipoOperacion": 2,
    "direccion": "Itapua, Encarnacion, 14 de mayo 1500",
    "numeroCasa": "",
    "departamento": 0,
    "departamentoDescripcion": "",
    "distrito": 0,
    "distritoDescripcion": "",
    "ciudad": 0,
    "ciudadDescripcion": "",
    "pais": "PRY",
    "paisDescripcion": "Paraguay",
    "tipoContribuyente": 0,
    "documentoTipo": 1,
    "documentoNumero": "2830501",
    "telefono": "0994850808",
    "celular": "0994850808",
    "email": "[email protected]",
    "codigo": "0001"
  },

  "usuario": {
    "documentoTipo": 1,
    "documentoNumero": "",
    "nombre": "",
    "cargo": "Vendedor"
  },

  "factura": { "presencia": 1 },

  "condicion": {
    "tipo": 1,
    "entregas": [{
      "tipo": 1,
      "monto": "22400",
      "moneda": "PYG",
      "monedaDescripcion": "Guarani",
      "cambio": 0
    }]
  },

  "items": [{
    "codigo": "0000001",
    "descripcion": "Martillo",
    "unidadMedida": 77,
    "cantidad": 2,
    "precioUnitario": 11200.00,
    "ivaTipo": 1,
    "ivaBase": 100,
    "iva": 10
  }]
}]
ℹ️
contribuyente: true · tipoOperacion: 1 (B2B) · tipoContribuyente: 1 (Unipersonal) · documentoTipo: 0 (RUC) · condicion.tipo: 1 (Contado)
JSON — Contribuyente Unipersonal · Contado
[{
  "tipoDocumento": 1,
  "establecimiento": 1,
  "punto": "1",
  "numero": 12,
  "descripcion": "Aparece en el documento",
  "observacion": "...",
  "fecha": "2026-04-22T10:21:19",
  "tipoEmision": 1,
  "tipoTransaccion": 3,
  "tipoImpuesto": 1,
  "moneda": "PYG",

  "cliente": {
    "contribuyente": true,
    "ruc": "2830501-9",
    "razonSocial": "MARCIAL ESTECHE",
    "nombreFantasia": "MARCIAL ESTECHE",
    "tipoOperacion": 1,
    "direccion": "Itapua, Encarnacion, 14 de mayo 1500",
    "numeroCasa": "",
    "departamento": 0,
    "departamentoDescripcion": "",
    "distrito": 0,
    "distritoDescripcion": "",
    "ciudad": 0,
    "ciudadDescripcion": "",
    "pais": "PRY",
    "paisDescripcion": "Paraguay",
    "tipoContribuyente": 1,
    "documentoTipo": 0,
    "documentoNumero": "2830501-9",
    "telefono": "0994850808",
    "celular": "0994850808",
    "email": "[email protected]",
    "codigo": "0001"
  },

  "usuario": {
    "documentoTipo": 1,
    "documentoNumero": "",
    "nombre": "",
    "cargo": "Vendedor"
  },

  "factura": { "presencia": 1 },

  "condicion": {
    "tipo": 1,
    "entregas": [{
      "tipo": 1,
      "monto": "22400",
      "moneda": "PYG",
      "monedaDescripcion": "Guarani",
      "cambio": 0
    }]
  },

  "items": [{
    "codigo": "0000001",
    "descripcion": "Martillo",
    "unidadMedida": 77,
    "cantidad": 2,
    "precioUnitario": 11200.00,
    "ivaTipo": 1,
    "ivaBase": 100,
    "iva": 10
  }]
}]
ℹ️
contribuyente: true · tipoContribuyente: 1 (Unipersonal) · condicion.tipo: 2 (Crédito) · el nodo credito reemplaza a entregas
JSON — Contribuyente Unipersonal · Crédito
[{
  "tipoDocumento": 1,
  "establecimiento": 1,
  "punto": "1",
  "numero": 12,
  "descripcion": "Aparece en el documento",
  "observacion": "...",
  "fecha": "2026-04-22T10:21:39",
  "tipoEmision": 1,
  "tipoTransaccion": 3,
  "tipoImpuesto": 1,
  "moneda": "PYG",

  "cliente": {
    "contribuyente": true,
    "ruc": "2830501-9",
    "razonSocial": "MARCIAL ESTECHE",
    "nombreFantasia": "MARCIAL ESTECHE",
    "tipoOperacion": 1,
    "direccion": "Itapua, Encarnacion, 14 de mayo 1500",
    "numeroCasa": "",
    "departamento": 0,
    "departamentoDescripcion": "",
    "distrito": 0,
    "distritoDescripcion": "",
    "ciudad": 0,
    "ciudadDescripcion": "",
    "pais": "PRY",
    "paisDescripcion": "Paraguay",
    "tipoContribuyente": 1,
    "documentoTipo": 0,
    "documentoNumero": "2830501-9",
    "telefono": "0994850808",
    "celular": "0994850808",
    "email": "[email protected]",
    "codigo": "0001"
  },

  "usuario": {
    "documentoTipo": 1,
    "documentoNumero": "",
    "nombre": "",
    "cargo": "Vendedor"
  },

  "factura": { "presencia": 1 },

  "condicion": {
    "tipo": 2,
    "credito": {
      "tipo": 1,
      "plazo": "30"
    }
  },

  "items": [{
    "codigo": "0000001",
    "descripcion": "Martillo",
    "unidadMedida": 77,
    "cantidad": 2,
    "precioUnitario": 11200.00,
    "ivaTipo": 1,
    "ivaBase": 100,
    "iva": 10
  }]
}]
ℹ️
contribuyente: true · tipoOperacion: 1 (B2B) · tipoContribuyente: 2 (Persona Jurídica) · condicion.tipo: 1 (Contado)
JSON — Persona Jurídica · Contado
[{
  "tipoDocumento": 1,
  "establecimiento": 1,
  "punto": "1",
  "numero": 12,
  "descripcion": "Aparece en el documento",
  "observacion": "...",
  "fecha": "2026-04-22T10:22:19",
  "tipoEmision": 1,
  "tipoTransaccion": 3,
  "tipoImpuesto": 1,
  "moneda": "PYG",

  "cliente": {
    "contribuyente": true,
    "ruc": "2830501-9",
    "razonSocial": "MARCIAL ESTECHE S.A.",
    "nombreFantasia": "MARCIAL ESTECHE S.A.",
    "tipoOperacion": 1,
    "direccion": "Itapua, Encarnacion, 14 de mayo 1500",
    "numeroCasa": "",
    "departamento": 0,
    "departamentoDescripcion": "",
    "distrito": 0,
    "distritoDescripcion": "",
    "ciudad": 0,
    "ciudadDescripcion": "",
    "pais": "PRY",
    "paisDescripcion": "Paraguay",
    "tipoContribuyente": 2,
    "documentoTipo": 0,
    "documentoNumero": "2830501-9",
    "telefono": "0994850808",
    "celular": "0994850808",
    "email": "[email protected]",
    "codigo": "0001"
  },

  "usuario": {
    "documentoTipo": 1,
    "documentoNumero": "",
    "nombre": "",
    "cargo": "Vendedor"
  },

  "factura": { "presencia": 1 },

  "condicion": {
    "tipo": 1,
    "entregas": [{
      "tipo": 1,
      "monto": "22400",
      "moneda": "PYG",
      "monedaDescripcion": "Guarani",
      "cambio": 0
    }]
  },

  "items": [{
    "codigo": "0000001",
    "descripcion": "Martillo",
    "unidadMedida": 77,
    "cantidad": 2,
    "precioUnitario": 11200.00,
    "ivaTipo": 1,
    "ivaBase": 100,
    "iva": 10
  }]
}]
ℹ️
contribuyente: true · tipoContribuyente: 2 (Persona Jurídica) · condicion.tipo: 2 (Crédito)
JSON — Persona Jurídica · Crédito
[{
  "tipoDocumento": 1,
  "establecimiento": 1,
  "punto": "1",
  "numero": 12,
  "descripcion": "Aparece en el documento",
  "observacion": "...",
  "fecha": "2026-04-22T10:22:38",
  "tipoEmision": 1,
  "tipoTransaccion": 3,
  "tipoImpuesto": 1,
  "moneda": "PYG",

  "cliente": {
    "contribuyente": true,
    "ruc": "2830501-9",
    "razonSocial": "MARCIAL ESTECHE S.A.",
    "nombreFantasia": "MARCIAL ESTECHE S.A.",
    "tipoOperacion": 1,
    "direccion": "Itapua, Encarnacion, 14 de mayo 1500",
    "numeroCasa": "",
    "departamento": 0,
    "departamentoDescripcion": "",
    "distrito": 0,
    "distritoDescripcion": "",
    "ciudad": 0,
    "ciudadDescripcion": "",
    "pais": "PRY",
    "paisDescripcion": "Paraguay",
    "tipoContribuyente": 2,
    "documentoTipo": 0,
    "documentoNumero": "2830501-9",
    "telefono": "0994850808",
    "celular": "0994850808",
    "email": "[email protected]",
    "codigo": "0001"
  },

  "usuario": {
    "documentoTipo": 1,
    "documentoNumero": "",
    "nombre": "",
    "cargo": "Vendedor"
  },

  "factura": { "presencia": 1 },

  "condicion": {
    "tipo": 2,
    "credito": {
      "tipo": 1,
      "plazo": "30"
    }
  },

  "items": [{
    "codigo": "0000001",
    "descripcion": "Martillo",
    "unidadMedida": 77,
    "cantidad": 2,
    "precioUnitario": 11200.00,
    "ivaTipo": 1,
    "ivaBase": 100,
    "iva": 10
  }]
}]
ℹ️
contribuyente: true · tipoOperacion: 3 (B2G — Entidad de Gobierno) · tipoContribuyente: 2 · condicion.tipo: 1 (Contado)
JSON — Entidad de Gobierno · Contado
[{
  "tipoDocumento": 1,
  "establecimiento": 1,
  "punto": "1",
  "numero": 12,
  "descripcion": "Aparece en el documento",
  "observacion": "...",
  "fecha": "2026-04-22T10:23:01",
  "tipoEmision": 1,
  "tipoTransaccion": 3,
  "tipoImpuesto": 1,
  "moneda": "PYG",

  "cliente": {
    "contribuyente": true,
    "ruc": "2830501-9",
    "razonSocial": "MINISTERIO DE HACIENDA",
    "nombreFantasia": "MINISTERIO DE HACIENDA",
    "tipoOperacion": 3,
    "direccion": "Itapua, Encarnacion, 14 de mayo 1500",
    "numeroCasa": "",
    "departamento": 0,
    "departamentoDescripcion": "",
    "distrito": 0,
    "distritoDescripcion": "",
    "ciudad": 0,
    "ciudadDescripcion": "",
    "pais": "PRY",
    "paisDescripcion": "Paraguay",
    "tipoContribuyente": 2,
    "documentoTipo": 0,
    "documentoNumero": "2830501-9",
    "telefono": "0994850808",
    "celular": "0994850808",
    "email": "[email protected]",
    "codigo": "0001"
  },

  "usuario": {
    "documentoTipo": 1,
    "documentoNumero": "",
    "nombre": "",
    "cargo": "Vendedor"
  },

  "factura": { "presencia": 1 },

  "condicion": {
    "tipo": 1,
    "entregas": [{
      "tipo": 1,
      "monto": "22400",
      "moneda": "PYG",
      "monedaDescripcion": "Guarani",
      "cambio": 0
    }]
  },

  "items": [{
    "codigo": "0000001",
    "descripcion": "Martillo",
    "unidadMedida": 77,
    "cantidad": 2,
    "precioUnitario": 11200.00,
    "ivaTipo": 1,
    "ivaBase": 100,
    "iva": 10
  }]
}]
ℹ️
contribuyente: true · tipoOperacion: 3 (B2G) · tipoContribuyente: 2 · condicion.tipo: 2 (Crédito)
JSON — Entidad de Gobierno · Crédito
[{
  "tipoDocumento": 1,
  "establecimiento": 1,
  "punto": "1",
  "numero": 12,
  "descripcion": "Aparece en el documento",
  "observacion": "...",
  "fecha": "2026-04-22T10:23:22",
  "tipoEmision": 1,
  "tipoTransaccion": 3,
  "tipoImpuesto": 1,
  "moneda": "PYG",

  "cliente": {
    "contribuyente": true,
    "ruc": "2830501-9",
    "razonSocial": "MINISTERIO DE HACIENDA",
    "nombreFantasia": "MINISTERIO DE HACIENDA",
    "tipoOperacion": 3,
    "direccion": "Itapua, Encarnacion, 14 de mayo 1500",
    "numeroCasa": "",
    "departamento": 0,
    "departamentoDescripcion": "",
    "distrito": 0,
    "distritoDescripcion": "",
    "ciudad": 0,
    "ciudadDescripcion": "",
    "pais": "PRY",
    "paisDescripcion": "Paraguay",
    "tipoContribuyente": 2,
    "documentoTipo": 0,
    "documentoNumero": "2830501-9",
    "telefono": "0994850808",
    "celular": "0994850808",
    "email": "[email protected]",
    "codigo": "0001"
  },

  "usuario": {
    "documentoTipo": 1,
    "documentoNumero": "",
    "nombre": "",
    "cargo": "Vendedor"
  },

  "factura": { "presencia": 1 },

  "condicion": {
    "tipo": 2,
    "credito": {
      "tipo": 1,
      "plazo": "30"
    }
  },

  "items": [{
    "codigo": "0000001",
    "descripcion": "Martillo",
    "unidadMedida": 77,
    "cantidad": 2,
    "precioUnitario": 11200.00,
    "ivaTipo": 1,
    "ivaBase": 100,
    "iva": 10
  }]
}]

3. Referencia de Campos

Objeto cliente

Campo Tipo Obligatorio Descripción Valores
contribuyente boolean ¿Es contribuyente? true / false
ruc string Solo contribuyente RUC con dígito verificador "80000004-2"
tipoContribuyente integer Solo contribuyente Tipo de contribuyente 1=Persona Física, 2=Persona Jurídica
tipoOperacion integer Tipo de operación 1=B2B, 2=B2C, 3=B2G, 4=B2F
documentoTipo integer Solo no contribuyente Tipo de documento de identidad Ver tabla abajo
documentoNumero string Solo no contribuyente Número de documento "3456789"
razonSocial string Nombre o razón social del cliente
direccion string Dirección del cliente
numeroCasa string Recomendado Número de casa "1234", "0" si no aplica
departamento integer Recomendado Código de departamento SIFEN Ver tabla de departamentos
departamentoDescripcion string Recomendado Nombre del departamento "ITAPUA", "CENTRAL"
distrito integer Recomendado Código de distrito SIFEN
distritoDescripcion string Recomendado Nombre del distrito
ciudad integer Recomendado Código de ciudad SIFEN
ciudadDescripcion string Recomendado Nombre de la ciudad
telefono string Opcional Teléfono
email string Recomendado Email del receptor
pais string Opcional Código ISO país "PRY" (defecto)
paisDescripcion string Opcional Nombre del país "Paraguay" (defecto)
codigo string Opcional Código interno de cliente (VB6) "00180"

Tipos de Documento de Identidad (documentoTipo)

CódigoDescripción
1Cédula paraguaya
2Pasaporte
3Cédula extranjera
4Carnet de residencia
5Innominado (ventas menores)
9Otro

Reglas Importantes del Cliente

⚠️
Contribuyente (contribuyente: true): Requiere ruc, tipoContribuyente y tipoOperacion: 1 (B2B).
No contribuyente (contribuyente: false): Requiere documentoTipo, documentoNumero y tipoOperacion: 2 (B2C). No enviar ruc.
Si se omite departamento/distrito/ciudad, el servidor intenta autocompletar a partir de direccion.

Objeto items[]

Campo Tipo Obligatorio Descripción Valores
codigo string Código interno del producto "0000001"
descripcion string Descripción del producto/servicio
unidadMedida integer Recomendado Código unidad de medida SIFEN 77=Unidad (defecto)
cantidad number Cantidad vendida
precioUnitario number Precio unitario con IVA incluido
iva number Tasa de IVA 0, 5 o 10
ivaTipo integer Tipo de afectación IVA 1=Gravado, 2=Exonerado, 3=Exento
ivaBase number Recomendado Proporción gravada (%) 100 (defecto)

Reglas del IVA

Escenario iva ivaTipo ivaBase Resultado SIFEN
Gravado 10% 10 1 100 IVA 10% sobre el total
Gravado 5% 5 1 100 IVA 5% sobre el total
Exento 0 1 100 Se convierte a Exento (afecIVA=3)
Exonerado 0 2 0 Exonerado - Art. 100 Ley 6380/2019
Parcialmente gravado 10 1 60 60% gravado al 10%, 40% exento
ℹ️
El precioUnitario siempre es con IVA incluido. El servidor calcula automáticamente la base gravada y la liquidación de IVA según las fórmulas NT13 del SIFEN.

Objeto condicion

CampoTipoObligatorioDescripciónValores
tipo integer Tipo de condición 1=Contado, 2=Crédito
entregas array Solo contado Detalle de pagos Ver abajo
credito object Solo crédito Datos del crédito Ver abajo

Entregas (pagos en contado)

CampoTipoObligatorioDescripciónValores
tipo integer Forma de pago 1=Efectivo, 2=Cheque, 3=Tarjeta crédito, 4=Tarjeta débito
monto number Monto del pago Si es 0, se completa automáticamente con el total
moneda string Opcional Moneda "PYG" (defecto)
monedaDescripcion string Opcional Descripción moneda "Guarani" (defecto)

Crédito

CampoTipoObligatorioDescripción
tipo integer 1=Plazo, 2=Cuota
plazo string Descripción del plazo ("30 días")
cuotas integer Si tipo=2 Cantidad de cuotas
infoCuotas array Si tipo=2 Detalle de cada cuota

Objeto factura

CampoTipoObligatorioDescripciónValores
presencia integer Opcional Indicador de presencia 1=Presencial (defecto), 2=No presencial, 3=Internet, 9=No corresponde

4. Ejemplo de Envío desde VB6

Visual Basic 6
' ============================================
' Ejemplo de envío de Factura Electrónica
' desde Visual Basic 6 (VB6)
' ============================================

Private Sub EnviarFactura()
    Dim http As New MSXML2.XMLHTTP60
    Dim url As String
    Dim postData As String
    Dim jsonData As String
    
    url = "https://tu-dominio.com/fact_elect/index.php"
    
    ' Construir el JSON con los datos de la factura
    jsonData = "[{" & _
        """tipoDocumento"":1," & _
        """tipoTransaccion"":1," & _
        """tipoImpuesto"":1," & _
        """moneda"":""PYG""," & _
        """cliente"":{" & _
            """contribuyente"":true," & _
            """ruc"":""80000004-2""," & _
            """razonSocial"":""EMPRESA IMPORTADORA S.A.""," & _
            """tipoContribuyente"":2," & _
            """tipoOperacion"":1," & _
            """direccion"":""AV. MARISCAL LOPEZ 1234""," & _
            """numeroCasa"":""1234""," & _
            """departamento"":11," & _
            """departamentoDescripcion"":""CENTRAL""," & _
            """distrito"":1," & _
            """distritoDescripcion"":""ASUNCION (DISTRITO)""," & _
            """ciudad"":1," & _
            """ciudadDescripcion"":""ASUNCION (DISTRITO)""," & _
            """email"":""[email protected]""," & _
            """pais"":""PRY""," & _
            """paisDescripcion"":""Paraguay""," & _
            """codigo"":""CLI001""" & _
        "}," & _
        """items"":[" & _
            "{""codigo"":""0000001""," & _
             """descripcion"":""Producto Ejemplo""," & _
             """unidadMedida"":77," & _
             """cantidad"":2," & _
             """precioUnitario"":15000," & _
             """iva"":10," & _
             """ivaTipo"":1," & _
             """ivaBase"":100}" & _
        "]," & _
        """condicion"":{""tipo"":1,""entregas"":[{""tipo"":1,""monto"":30000,""moneda"":""PYG"",""monedaDescripcion"":""Guarani""}]}," & _
        """factura"":{""presencia"":1}" & _
    "}]"
    
    ' Construir datos POST
    postData = "apiKey=" & API_KEY & _
               "&tenantId=" & TENANT_ID & _
               "&tenantPunto=001-001" & _
               "&cliente=" & UrlEncode("EMPRESA IMPORTADORA S.A.") & _
               "&email=" & UrlEncode("[email protected]") & _
               "&data=" & UrlEncode(jsonData)
    
    ' Enviar POST
    http.Open "POST", url, False
    http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    http.send postData
    
    ' Procesar respuesta
    Dim respuesta As String
    respuesta = http.responseText
    
    ' Parsear respuesta
    ' Formato: "Cliente: ...\nEstado: ok\nMensaje: ...\nNUM: 59-CDC: 0104..."
    If InStr(respuesta, "Estado: ok") > 0 Then
        MsgBox "Factura enviada correctamente"
        ' Extraer CDC para consultas posteriores
        Dim cdc As String
        cdc = Mid(respuesta, InStr(respuesta, "CDC: ") + 5)
    Else
        MsgBox "Error: " & respuesta
    End If
End Sub

5. Cancelación de Factura Electrónica

Permite cancelar una factura previamente emitida enviando el evento de cancelación a SIFEN.

Parámetros POST

Campo Tipo Obligatorio Descripción
apiKey string Clave API de la empresa
tenantId string Identificador del tenant (ej: puchi)
cdc string CDC de 44 dígitos de la factura a cancelar
motivo string Texto libre con el motivo de la cancelación

Ejemplo PHP (cliente que llama al servidor)

PHP
<?php
$url      = 'https://tu-dominio.com/fact_elect/cancelar_api.php';
$apiKey   = 'MiClaveSecreta';
$tenantId = 'puchi';
$cdc      = '01800292774001001000005422026031919322167553';
$motivo   = 'Error en el monto facturado';

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => http_build_query([
        'apiKey'   => $apiKey,
        'tenantId' => $tenantId,
        'cdc'      => $cdc,
        'motivo'   => $motivo,
    ]),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 30,
]);

$respuesta = curl_exec($ch);
$error     = curl_error($ch);
curl_close($ch);

if ($error) {
    echo "Error cURL: $error";
} else {
    $json = json_decode($respuesta, true);
    // $json['status']   => 'ok' o 'error'
    // $json['message']  => descripción
    // $json['protocolo'] => número de protocolo SIFEN (si ok)
    print_r($json);
}

Respuesta JSON

Respuesta exitosa
{
  "status": "ok",
  "message": "Cancelación procesada exitosamente",
  "protocolo": "123456789"
}
Respuesta con error
{
  "status": "error",
  "message": "CDC inválido: debe contener exactamente 44 dígitos numéricos."
}
⚠️
Solo se pueden cancelar facturas en estado Aprobado. El motivo de cancelación debe tener al menos 5 caracteres.

6. Ejemplo con cURL

bash
curl -X POST https://tu-dominio.com/fact_elect/index.php \
  -d "apiKey=TU_API_KEY" \
  -d "tenantId=puchi" \
  -d "tenantPunto=001-001" \
  -d "cliente=EMPRESA IMPORTADORA S.A." \
  -d "[email protected]" \
  --data-urlencode 'data=[{"tipoDocumento":1,...}]'

7. Departamentos de Paraguay

CódigoDepartamento
1CONCEPCION
2SAN PEDRO
3CORDILLERA
4GUAIRA
5CAAGUAZU
6CAAZAPA
7ITAPUA
8MISIONES
9PARAGUARI
10ALTO PARANA
11CENTRAL
12ÑEEMBUCU
13AMAMBAY
14CANINDEYU
15PRESIDENTE HAYES
16BOQUERON
17ALTO PARAGUAY
18CAPITAL
ℹ️
Si no se envían departamento/distrito/ciudad, el servidor intentará autocompletarlos a partir del campo direccion.

8. Unidades de Medida Comunes

CódigoDescripción
77Unidad (UNI)
83Kilogramo (KG)
79Litro (LT)
80Metro (MT)
81Metro cuadrado (M2)
82Metro cúbico (M3)
85Pieza
86Docena

9. Tipos de Transacción

CódigoDescripción
1Venta de mercadería
2Prestación de servicios
3Mixto (mercadería y servicios)
4Venta de activo fijo
5Venta de divisas
6Compra de divisas
7Promoción o entrega de muestras
8Donación
9Anticipo
10Compra de productos
11Compra de servicios
13Otro

10. Notas Importantes

  1. El número de factura se asigna automáticamente por el servidor. No se envía en el JSON.
  2. El precio unitario es siempre con IVA incluido. El servidor calcula la base gravada y el IVA.
  3. Si iva=0 con ivaTipo=1, el servidor asume automáticamente que es Exento (afecIVA=3).
  4. Para no contribuyentes, no enviar campo ruc. Usar documentoTipo + documentoNumero.
  5. El campo data debe ir URL-encoded ya que se envía como form-data.
  6. La dirección es autoconciliada: si no se envían códigos de departamento/distrito/ciudad, el servidor busca coincidencias automáticas.
  7. Si el monto de la entrega es 0 en condición contado, se autocompletará con el total de la factura.
  8. Los reintentos por duplicado son automáticos: si SIFEN rechaza por número duplicado, el servidor incrementa y reintenta (hasta 3 veces).

11. Configuración Previa (Admin)

Antes de usar la API, la empresa debe estar configurada en el panel de administración (/admin/):

  1. Empresa registrada con RUC, certificado digital (.p12) y CSC.
  2. Punto de expedición creado (ej: 001-001).
  3. API Key generada para la empresa.
  4. Numeración inicializada en la tabla numero_fact.