⚡ Facturación electrónica en Paraguay

No cambies tu sistema. Poné un Botón Mágico.

Emití facturación electrónica sin rehacer tu software: agregamos un botón mágico que arma el JSON, envía a SIFEN y devuelve el CDC.

✓ API✓ Factura y nota de crédito✓ CDC y lote SIFEN
Ingresar
Botón Mágico facturación electrónica

Tu sistema sigue funcionando

Si tenés un sistema que funciona súper bien, no hace falta cambiarlo. Nosotros te integramos un Botón Mágico: al presionarlo, tu sistema manda los datos de la venta, el servicio arma el JSON correcto, crea el documento electrónico, crea el lote, lo envía a SIFEN y devuelve el CDC para que tu software continúe trabajando normalmente.

📤

1. Tu sistema envía JSON

Desde tu POS, ecommerce o sistema administrativo llamás a /ws-enviar con cliente, ítems y pagos.

🪄

2. Botón Mágico procesa

Validamos empresa, freepys, token API, documento, lote y comunicación con el servidor SIFEN.

3. Recibís CDC

Tu sistema recibe document_id, batch_id, estado y CDC para guardar en tu factura local.

Planes mensuales

Cada factura o nota de crédito emitida descuenta 1 freepy. Los freepys se restauran cuando se registra el pago mensual del plan.

Básico
150.000 Gs
100 freepys

Ideal para iniciar con facturación electrónica.

Starter
220.000 Gs
200 freepys

Para negocios con más movimiento mensual.

Estandar
330.000 Gs
1.000 freepys

Más freepys para operaciones frecuentes.

Empresarial
600.000 Gs
3.000 freepys

Volumen alto para empresas y desarrolladores.

Ilimitado
2.200.000 Gs
Ilimitado

Uso ilimitado mensual para grandes integraciones.

Últimas noticias

Guías, novedades y ejemplos sobre facturación electrónica, SIFEN e integración de sistemas en Paraguay.

Ver todas las noticias

API para integrar fácil

Pensado para programadores: desde tu POS, ERP, ecommerce o sistema administrativo enviás JSON a Botón Mágico y recibís document_id, batch_id, estado, CDC y freepys restantes. Cada emisión exitosa descuenta 1 freepy.

📤 Enviar documento

POST https://boton.innoven.com.py/ws-enviar

Tipos aceptados: factura y nota_credito. Usá el Token API de la empresa.

Si el timbrado con ese tipo no existe, se crea; si existe, actualiza est., punto y nro. actual.

🔎 Consultar estado

POST https://boton.innoven.com.py/ws-consultar

Podés consultar por document_id, batch_id o CDC para actualizar el estado en tu sistema local.

🚫 Cancelar factura

POST https://boton.innoven.com.py/ws-cancelar

Enviá el CDC y un motivo. El servicio crea un evento fiscal de cancelación para una factura aprobada y devuelve si quedó aprobada, pendiente o con error.

🧾 Consultar RUC

GET https://boton.innoven.com.py/ws-ruc?buscar=4272381

Buscá clientes por RUC, razón social, email, celular, teléfono o dirección, sin token. Devuelve datos enriquecidos para automatizar la carga en tu sistema.

Ver documentación RUC

Esto es lo que debés mandar por PHPCopiar y adaptar
<?php
$token = 'TU_TOKEN_API';
$url = 'https://boton.innoven.com.py/ws-enviar';

$payload = [
  'tipo_documento' => 'factura',
  'enviar_sifen' => true,
  'timbrado' => '80078258',
  'est' => '001',
  'punto' => '001',
  'nro_actual' => '0001000',
  'vigencia_desde' => '2026-01-01',
  'cliente' => [
    'ruc' => '4272381-7',
    'razon_social' => 'CLIENTE DE PRUEBA',
    'direccion' => 'Asunción',
    'email' => 'cliente@email.com'
  ],
  'items' => [
    [
      'codigo' => 'P001',
      'descripcion' => 'Producto de prueba',
      'cantidad' => 1,
      'precio' => 150000,
      'iva' => 10
    ]
  ],
  'pagos' => [
    ['tipo' => 'efectivo', 'monto' => 150000]
  ]
];

$ch = curl_init($url);
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_POST => true,
  CURLOPT_HTTPHEADER => [
    'Content-Type: application/json',
    'Authorization: Bearer '.$token
  ],
  CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE)
]);
$respuesta = curl_exec($ch);
$http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);

if ($error) {
  die('Error CURL: '.$error);
}

$data = json_decode($respuesta, true);
echo '<pre>HTTP: '.$http."
";
print_r($data);
echo '</pre>';
?>
Respuesta OK esperadaGuardá estos datos en tu sistema
{
  "status": "ok",
  "mensaje": "Documento creado, lote generado y enviado a SIFEN.",
  "id_documento": 10,
  "id_empresa": 1,
  "id_timbrado": 3,
  "tipo_documento": "factura",
  "document_id": "019...",
  "cdc": "01800...",
  "estado_documento": "XML_GENERATED",
  "batch_id": "019...",
  "estado_lote": "CREATED",
  "numero_documento": "0001000",
  "timbrado": "80078258",
  "est": "001",
  "punto": "001",
  "nro_actual": 1000,
  "nro_actual_formateado": "0001000",
  "vigencia_desde": "2026-01-01",
  "freepys_restantes": 99,
  "envio_sifen": {
    "status": "ok",
    "estado": "SENT"
  }
}
Consultar documento o loteUsá document_id o batch_id
<?php
$token = 'TU_TOKEN_API';
$url = 'https://boton.innoven.com.py/ws-consultar';

$payload = [
  'batch_id' => 'ID_LOTE_DEVUELTO'
];

$ch = curl_init($url);
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_POST => true,
  CURLOPT_HTTPHEADER => [
    'Content-Type: application/json',
    'Authorization: Bearer '.$token
  ],
  CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE)
]);
$respuesta = curl_exec($ch);
$http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$data = json_decode($respuesta, true);
echo '<pre>HTTP: '.$http."
";
print_r($data);
echo '</pre>';
?>
Cancelar una factura aprobadaEnviá CDC y motivo
<?php
$token = 'TU_TOKEN_API';
$url = 'https://boton.innoven.com.py/ws-cancelar';

$payload = [
  'cdc' => 'CDC_DE_44_DIGITOS',
  'motivo' => 'Operación anulada por error en los datos del comprobante'
];

$ch = curl_init($url);
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_POST => true,
  CURLOPT_HTTPHEADER => [
    'Content-Type: application/json',
    'Authorization: Bearer '.$token
  ],
  CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE)
]);
$respuesta = curl_exec($ch);
$http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);

if ($error) {
  die('Error CURL: '.$error);
}

$data = json_decode($respuesta, true);
echo '<pre>HTTP: '.$http."
";
print_r($data);
echo '</pre>';
?>

Importante: cancelar no borra la factura. Botón Mágico localiza el documento por CDC, crea el evento fiscal cancellation y lo envía a SIFEN. Si el evento sigue procesándose, puede devolver HTTP 202 con status: pending; si no puede cancelarse, devuelve status: error con el motivo.

Respuesta de cancelación aprobadaEjemplo resumido
{
  "status": "ok",
  "cancelado": true,
  "cdc": "CDC_DE_44_DIGITOS",
  "document_id": "019...",
  "event_id": "019...",
  "estado_evento": "APPROVED",
  "mensaje": "La factura fue cancelada correctamente mediante un evento fiscal aprobado por SIFEN."
}
Nota de créditoDebe ir asociada a una factura
$payload = [
  'tipo_documento' => 'nota_credito',
  'enviar_sifen' => true,
  'cdc_asociado' => 'CDC_DE_LA_FACTURA_ORIGINAL',
  'timbrado' => '80078258',
  'est' => '001',
  'punto' => '001',
  'nro_actual' => '0001001',
  'vigencia_desde' => '2026-01-01',
  'cliente' => [
    'ruc' => '4272381-7',
    'razon_social' => 'CLIENTE DE PRUEBA'
  ],
  'items' => [
    [
      'codigo' => 'NC001',
      'descripcion' => 'Devolución / ajuste',
      'cantidad' => 1,
      'precio' => 50000,
      'iva' => 10
    ]
  ],
  'pagos' => [
    ['tipo' => 'efectivo', 'monto' => 50000]
  ]
];

Si el receptor NO es contribuyente, identificá la Nota de Crédito con su documento de identidad y no como RUC tributario:

Compatibilidad v107: el sistema cliente puede seguir enviando el mismo JSON. Para una Nota de Crédito, Botón Mágico consulta primero el cdc_asociado y copia automáticamente el receptor real de la factura aprobada. Si la factura original fue emitida a contribuyente, reutiliza su RUC; si fue emitida a no contribuyente identificado, reutiliza exactamente su documento. Si la factura original fue aprobada como NON_TAXPAYER + UNIDENTIFIED, la NC no se genera y la API recomienda cancelar la factura original mediante /ws-cancelar.

'cliente' => [
  'naturaleza' => 'no_contribuyente',
  'tipo_documento' => 'cedula',
  'documento' => '5177508',
  'razon_social' => 'CECILIO RAMON'
]
Consultar RUC / clienteRUC, nombre, email, celular o dirección
<?php
$url = 'https://boton.innoven.com.py/ws-ruc?buscar=4272381';

$ch = curl_init($url);
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true
]);
$respuesta = curl_exec($ch);
$http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

print_r(json_decode($respuesta, true));
?>

También podés usar ?buscar=0981638966, ?buscar=CARLOS, ?buscar=cliente@email.com o ?buscar=YTA YBATE. Un solo parámetro te sirve para automatizar la carga de clientes en tu sistema.

Para programadores y empresas en Paraguay: si a tu cliente le obligaron a usar facturación electrónica, podés integrar Botón Mágico sin cambiar su sistema completo. Ideal para sistemas antiguos, POS, ERP, ecommerce, ventas, servicios, carnicerías, farmacias, ferreterías, estudios contables y desarrolladores que necesitan emitir documentos electrónicos SIFEN con API.