Como developer, probablemente has integrado alguna API de facturación tradicional. Y sabes que después de generar la factura, tu trabajo apenas comienza:
// Generas la factura (lo "fácil")
const invoice = await pac.createInvoice(data);
// Ahora viene lo difícil:
// ❌ Manualmente enviar email con PDF + XML
// ❌ Guardar el UUID en tu base de datos
// ❌ Conciliar con facturas recibidas del SAT
// ❌ Implementar recordatorios de pago
// ❌ Manejar complementos de pago (PPD)
// ❌ Generar reportes para cierre fiscal
// ❌ Validar cancelaciones y relaciones
// 200+ líneas de código adicional
// 3-4 semanas de desarrollo
// Mantenimiento constanteLa realidad brutal: La mayoría de APIs de facturación solo resuelven el 20% del problema (timbrar el CFDI). El otro 80% lo programas tú.
¿El costo? 3-6 semanas de desarrollo inicial + 10-15 horas mensuales de mantenimiento + riesgo constante de errores fiscales.
Con gigstack, registras un pago y el sistema automatiza todo el flujo fiscal:
// Un solo request REST API - sin SDKs inventados
curl -X POST https://api.gigstack.io/v2/payments/register \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"client": {
"id": "client_abc123"
},
"automation_type": "pue_invoice",
"currency": "MXN",
"payment_form": "03",
"items": [
{
"id": "service_xyz789",
"quantity": 1,
"unit_price": 1500
}
]
}'Eso es todo. gigstack automáticamente:
Cero líneas de código adicional. Cero mantenimiento. Cero drama fiscal.
// 1. Generar factura
const cfdi = await pac.createInvoice({
tipo_comprobante: "I",
metodo_pago: payment.method === 'stripe' ? 'PUE' : 'PPD',
forma_pago: getFormaPago(payment.method), // función custom
uso_cfdi: "G03", // ¿o es D10? ¿P01?
receptor: {
rfc: customer.rfc,
nombre: customer.name,
regimen: customer.tax_system,
domicilio: customer.address,
codigo_postal: customer.zip
},
conceptos: payment.items.map(item => ({
clave_prod_serv: getSATCode(item), // función custom
clave_unidad: "E48", // o "H87"? depende...
descripcion: item.description,
cantidad: item.quantity,
valor_unitario: item.price,
impuestos: calculateTaxes(item) // función custom compleja
}))
});
// 2. Enviar email (implementar servicio completo)
const pdf = await pac.downloadPDF(cfdi.uuid);
const xml = await pac.downloadXML(cfdi.uuid);
await emailService.send({
to: customer.email,
subject: 'Tu factura',
attachments: [pdf, xml]
});
// 3. Guardar en DB
await db.invoices.create({
uuid: cfdi.uuid,
customer_id: customer.id,
payment_id: payment.id,
xml_url: uploadToS3(xml),
pdf_url: uploadToS3(pdf)
});
// 4. Conciliación SAT (proceso separado, cron job)
// 5. Complementos de pago (si aplica, lógica compleja)
// 6. Reportes fiscales (queries custom)
// 7. Manejo de errores y reintentos
// ... 150+ líneas más// Un solo request hace todo - REST API puro
const response = await fetch('https://api.gigstack.io/v2/payments/register', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
client: { id: 'client_abc123' },
automation_type: 'pue_invoice',
currency: 'MXN',
payment_form: '03',
items: [{
id: 'service_xyz',
quantity: 1,
unit_price: 1500
}]
})
});
const result = await response.json();
// Resultado automático:
// ✅ Factura timbrada
// ✅ Email enviado al cliente
// ✅ RFC validado con SAT
// ✅ Complemento PPD si aplica
// ✅ Reportes actualizados
// Todo en 1 request REST. Cero mantenimiento.De 200+ líneas y 3 semanas de desarrollo → 1 request REST y 10 minutos de integración.
El problema tradicional:
Cliente paga en parcialidades. Necesitas generar complemento de pago por cada pago parcial, relacionándolo con la factura original. Complejidad técnica alta, fácil de romper.
Con gigstack:
// 1. Factura original PPD (método pago en parcialidades)
const invoice = await fetch('https://api.gigstack.io/v2/invoices/income', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
automation_type: 'none', // Sin pago inmediato
client: { id: 'client_abc' },
currency: 'MXN',
payment_method: 'PPD', // Pago en parcialidades
payment_form: '99', // Por definir
use: 'G03',
items: [{
description: 'Proyecto grande',
quantity: 1,
unit_price: 10000,
product_key: '80141503',
unit_key: 'E48',
taxes: [{ type: 'IVA', rate: 0.16 }]
}]
})
});
// 2. Cliente paga parcial semanas después
const payment = await fetch('https://api.gigstack.io/v2/payments/register', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
client: { id: 'client_abc' },
automation_type: 'ppd_invoice_and_complement',
currency: 'MXN',
payment_form: '03',
items: [{
description: 'Pago parcial',
quantity: 1,
unit_price: 5000,
product_key: '80141503',
unit_key: 'E48',
taxes: [{ type: 'IVA', rate: 0.16 }]
}]
})
});
// gigstack automáticamente:
// ✅ Detecta que es pago parcial
// ✅ Genera complemento de pago
// ✅ Relaciona UUID con factura original
// ✅ Timbra y envía al cliente
// ✅ Actualiza balance pendienteResultado: Complementos PPD 100% automatizados y correctos según CFDI 4.0.
// 1. Conecta Stripe (OAuth, 2 clics en dashboard)
// 2. gigstack detecta cada payment_intent.succeeded
// Automáticamente:
// ✅ Extrae customer, amount, items
// ✅ Genera factura CFDI 4.0
// ✅ Envía al cliente
// ✅ Valida RFC con SAT
// Tu código (solo configuración normal de Stripe):
const checkout = await stripe.checkout.sessions.create({
customer: customer.id,
line_items: items,
success_url: 'https://...',
// ... configuración normal de Stripe
});
// gigstack hace el resto. Cero código adicional.// 1. Instala plugin gigstack (5 minutos)
// 2. Autoriza conexión
// 3. Cada venta automáticamente:
// ✅ Factura CFDI 4.0 generada
// ✅ Cliente recibe email con factura
// ✅ Portal de autofacturación disponible
// ✅ Validación RFC con SAT
// Sin modificar una línea de código de tu tema.// Tu sistema custom/legacy
app.post('/payment-confirmed', async (req, res) => {
const payment = req.body;
// Un webhook a gigstack:
await fetch('https://api.gigstack.io/v2/payments/register', {
method: 'POST',
headers: {
'Authorization': `Bearer ${GIGSTACK_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
client: {
search: {
on_key: 'tax_id',
on_value: payment.customer.rfc,
auto_create: true
},
name: payment.customer.name,
email: payment.customer.email,
tax_id: payment.customer.rfc,
tax_system: '601'
},
automation_type: 'pue_invoice',
currency: 'MXN',
payment_form: '03',
items: payment.items.map(item => ({
description: item.description,
quantity: item.quantity,
unit_price: item.price,
product_key: '80141503',
unit_key: 'E48',
taxes: [{ type: 'IVA', rate: 0.16 }]
}))
})
});
// gigstack automáticamente:
// ✅ Valida o crea cliente
// ✅ Factura
// ✅ Timbra
// ✅ Envía email
res.json({ success: true });
});Compatible con cualquier stack: Node.js, Python, PHP, Ruby, Go, Java, .NET
// server.js (Node.js + Express) - REST API directo
const express = require('express');
const app = express();
const GIGSTACK_API_KEY = process.env.GIGSTACK_API_KEY;
const API_BASE = 'https://api.gigstack.io/v2';
// 1. Webhook de Stripe (facturación automática)
app.post('/stripe-webhook', async (req, res) => {
const event = req.body;
if (event.type === 'payment_intent.succeeded') {
// gigstack factura automáticamente via REST API
const response = await fetch(`${API_BASE}/payments/register`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${GIGSTACK_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
client: { id: event.data.object.customer },
automation_type: 'pue_invoice',
currency: 'MXN',
payment_form: '04', // Tarjeta de crédito
items: [{
id: 'service_stripe_item',
quantity: 1,
unit_price: event.data.object.amount / 100
}],
metadata: {
stripe_payment_intent: event.data.object.id
}
})
});
// ✅ Factura + validación + email automáticos
}
res.json({ received: true });
});
// 2. Consulta estado de cualquier factura
app.get('/invoices/:id', async (req, res) => {
const response = await fetch(`${API_BASE}/invoices/income/${req.params.id}`, {
headers: { 'Authorization': `Bearer ${GIGSTACK_API_KEY}` }
});
const invoice = await response.json();
res.json(invoice);
});
// 3. Portal de cliente (acceso token)
app.get('/customer-portal', async (req, res) => {
const response = await fetch(`${API_BASE}/clients/customerportal`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${GIGSTACK_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
client_id: req.user.client_id
})
});
const portal = await response.json();
res.redirect(portal.data.url);
});
// 4. Listar pagos con filtros
app.get('/payments', async (req, res) => {
const response = await fetch(`${API_BASE}/payments?limit=50`, {
headers: { 'Authorization': `Bearer ${GIGSTACK_API_KEY}` }
});
const payments = await response.json();
res.json(payments);
});
app.listen(3000);
// Eso es TODA la integración.
// Facturación + validación + emails + reportes.
// En 60 líneas usando REST API directo.gigstack tiene API REST completa con 35+ endpoints documentados en docs.gigstack.io:
Sí. gigstack es REST API estándar. Funciona con cualquier lenguaje que haga HTTP requests. Ejemplos disponibles en docs para múltiples lenguajes.
99.9% uptime SLA con infraestructura redundante. Status page: status.gigstack.io
Sí. gigstack importa facturas históricas y clientes. Migración típica: 1-2 días sin downtime.
Setup real (sin exagerar):
Total: 5 minutos de tu primera factura CFDI 4.0 válida.
Sin aprender qué es "uso de CFDI". Sin googlear "clave producto SAT". Sin leer PDFs del SAT.
Solo REST API. Solo funciona.
Como developer, tu tiempo vale. Cada hora que pasas aprendiendo fiscalidad mexicana es una hora que no estás construyendo tu producto.
Los números no mienten:
Pero el ROI real no es solo dinero:
La facturación es infraestructura, no tu core business. Usa gigstack y enfócate en lo que importa.
👉 Prueba gratis 12 días: app.gigstack.pro/register
📖 Docs técnicos: docs.gigstack.io
