
Facturacion electronica: obligatorio en paraguay
¿Cuando? mañana.
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.

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.
Desde tu POS, ecommerce o sistema administrativo llamás a /ws-enviar con cliente, ítems y pagos.
Validamos empresa, freepys, token API, documento, lote y comunicación con el servidor SIFEN.
Tu sistema recibe document_id, batch_id, estado y CDC para guardar en tu factura local.
Cada factura o nota de crédito emitida descuenta 1 freepy. Los freepys se restauran cuando se registra el pago mensual del plan.
Ideal para iniciar con facturación electrónica.
Para negocios con más movimiento mensual.
Más freepys para operaciones frecuentes.
Volumen alto para empresas y desarrolladores.
Uso ilimitado mensual para grandes integraciones.
Guías, novedades y ejemplos sobre facturación electrónica, SIFEN e integración de sistemas en Paraguay.

¿Cuando? mañana.

¿Necesitás empezar a usar facturación electrónica en Paraguay de una forma fácil y rápida? probalo gratis en https://namandu…

Ponele un boton mágico me dijo mi patron! y bueno aca tenes. Facilito te explico (video)
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.
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.
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.
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.
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.
<?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>';
?>{
"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"
}
}<?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>';
?><?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.
{
"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."
}$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' ]
<?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.