Endpoints de Facturación
El módulo de facturación expone endpoints bajo /billing/api/ diseñados
para integrarse fácilmente con sistemas ERP/CRM. Todos los campos
económicos (tax_id, subtotal, tax_amount, total, currency,
line_items) siguen un formato estándar parseable por cualquier sistema externo.
Facturas — /billing/api/invoices/
El endpoint principal para consultar y gestionar facturas. Cada factura incluye datos fiscales completos e inmutables (snapshot al momento de generación).
Método |
Endpoint |
Descripción |
|---|---|---|
|
|
Listar facturas (paginado) |
|
|
Crear factura (admin) |
|
|
Detalle de factura con líneas |
|
|
Actualizar factura (solo borrador) |
|
|
Anular factura |
|
|
Marcar como pagada (admin) |
|
|
Crear sesión de pago Stripe |
|
|
Crear orden de pago PayPal |
Filtros disponibles
?status=pending— Filtrar por estado (draft, pending, paid, overdue, cancelled, refunded)?tenant=1— Filtrar por ID de tenant?date_from=2026-01-01— Facturas desde una fecha?date_to=2026-01-31— Facturas hasta una fecha
Ejemplo — Listar facturas pendientes:
curl -X GET "https://panel.example.com/billing/api/invoices/?status=pending" \
-H "Authorization: Bearer $TOKEN"
Respuesta (lista):
{
"count": 3,
"next": null,
"previous": null,
"results": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"number": "INV-2026-0015",
"tenant": 1,
"status": "pending",
"issue_date": "2026-02-01",
"due_date": "2026-02-15",
"subtotal": "49.90",
"tax_rate": "21.00",
"tax_amount": "10.48",
"total": "60.38",
"currency": "EUR"
}
]
}
Respuesta (detalle con line_items):
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"number": "INV-2026-0015",
"tenant": 1,
"status": "pending",
"issue_date": "2026-02-01",
"due_date": "2026-02-15",
"paid_date": null,
"period_start": "2026-01-01",
"period_end": "2026-01-31",
"subtotal": "49.90",
"tax_rate": "21.00",
"tax_amount": "10.48",
"total": "60.38",
"currency": "EUR",
"billing_name": "Empresa Ejemplo S.L.",
"billing_tax_id": "B12345678",
"billing_address": "Calle Mayor 1, 08001 Barcelona, ES",
"notes": "",
"items": [
{
"id": 1,
"description": "Hosting Plan M - Enero 2026",
"quantity": "1.0000",
"unit_price": "29.9500",
"total": "29.95",
"resource_type": "hosting_site",
"resource_id": 1,
"period_start": "2026-01-01",
"period_end": "2026-01-31"
},
{
"id": 2,
"description": "Base de datos adicional",
"quantity": "1.0000",
"unit_price": "9.9500",
"total": "9.95",
"resource_type": "addon",
"resource_id": null,
"period_start": "2026-01-01",
"period_end": "2026-01-31"
},
{
"id": 3,
"description": "VPS Basic - 720 horas",
"quantity": "720.0000",
"unit_price": "0.0139",
"total": "10.00",
"resource_type": "vps",
"resource_id": 5,
"period_start": "2026-01-01",
"period_end": "2026-01-31"
}
],
"payments": [],
"stripe_invoice_id": "",
"paypal_invoice_id": "",
"created_at": "2026-02-01T00:05:00Z",
"updated_at": "2026-02-01T00:05:00Z"
}
Note
Los campos billing_name, billing_tax_id y billing_address son
snapshots inmutables tomados del perfil de facturación al momento de generar
la factura. Esto garantiza que la factura sea legalmente válida incluso si
el cliente cambia sus datos fiscales posteriormente.
Suscripciones — /billing/api/subscriptions/
Gestión de suscripciones activas que enlazan tenants con planes de precios.
Método |
Endpoint |
Descripción |
|---|---|---|
|
|
Listar suscripciones |
|
|
Crear suscripción |
|
|
Detalle de suscripción |
|
|
Cancelar suscripción |
|
|
Pausar suscripción |
|
|
Reanudar suscripción |
Respuesta de suscripción:
{
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"tenant": 1,
"plan": 2,
"status": "active",
"custom_price": null,
"resource_type": "hosting_site",
"resource_id": 1,
"resource_name": "example.com - Plan M",
"started_at": "2026-01-01T00:00:00Z",
"current_period_start": "2026-02-01T00:00:00Z",
"current_period_end": "2026-02-28T23:59:59Z",
"cancelled_at": null,
"stripe_subscription_id": "",
"paypal_subscription_id": ""
}
Registros de Uso — /billing/api/usage/
Endpoint de solo lectura para consultar registros de consumo (VPS por horas, almacenamiento adicional, etc.).
Método |
Endpoint |
Descripción |
|---|---|---|
|
|
Listar registros de uso |
|
|
Detalle de un registro |
Respuesta:
{
"id": 100,
"subscription": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"resource_type": "vm",
"resource_id": 5,
"resource_name": "vps-basic-01",
"period_start": "2026-02-01T00:00:00Z",
"period_end": "2026-02-01T01:00:00Z",
"quantity": "1.0000",
"unit": "hours",
"unit_price": "0.0139",
"total": "0.0139",
"invoiced": false
}
Planes de Precios — /billing/api/plans/
Catálogo de planes de precios configurables. Lectura para todos los autenticados, escritura solo para administradores.
Método |
Endpoint |
Descripción |
|---|---|---|
|
|
Listar planes activos |
|
|
Detalle de un plan (por slug) |
|
|
Crear plan (admin) |
|
|
Actualizar plan (admin) |
|
|
Desactivar plan (admin) |
Respuesta de plan:
{
"id": 2,
"name": "Hosting Plan M",
"slug": "hosting-plan-m",
"description": "Hosting compartido con 10 sitios, 5 BBDDs, 10GB",
"resource_type": "hosting",
"billing_period": "monthly",
"price": "29.9500",
"setup_fee": "0.00",
"currency": "EUR",
"hosting_package": 2,
"tax_rate": "21.00",
"is_active": true
}
Pagos — /billing/api/payments/
Registro de pagos recibidos (Stripe, PayPal, transferencia, manual). Solo lectura.
Método |
Endpoint |
Descripción |
|---|---|---|
|
|
Listar pagos |
|
|
Detalle de un pago |
Respuesta de pago:
{
"id": "c8d9e0f1-2345-6789-abcd-ef0123456789",
"invoice": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"tenant": 1,
"amount": "60.38",
"currency": "EUR",
"gateway": "stripe",
"status": "completed",
"gateway_payment_id": "pi_3Abc123Def456Ghi",
"paid_at": "2026-02-05T15:30:00Z",
"notes": ""
}
Integración ERP/CRM
El formato JSON de las facturas está diseñado para importación directa en sistemas ERP y CRM. Campos clave para la integración:
Campo |
Uso en ERP |
|---|---|
|
Número de factura único (INV-YYYY-NNNN) |
|
NIF/CIF/VAT del cliente |
|
Razón social del cliente |
|
Dirección fiscal completa |
|
Base imponible |
|
Porcentaje de IVA aplicado |
|
Cuota de IVA |
|
Total factura (subtotal + IVA) |
|
Moneda ISO 4217 (EUR, USD, etc.) |
|
Líneas de factura con desglose |