Invovate ← Volver al Generador de Facturas

API de Facturación — Documentación

Genera facturas PDF profesionales mediante una sencilla API REST

v1.0

Descripción General

La API de facturación de Invovate permite a los desarrolladores generar facturas profesionales mediante una sola llamada HTTP POST. Puedes elegir entre una respuesta JSON estructurada con todos los cálculos o una descarga directa en PDF. La API admite 11 idiomas, más de 20 divisas y 5 plantillas de diseño — perfecta para autónomos, empresas SaaS y aplicaciones de contabilidad en España y Latinoamérica.

Gratis para empezar

40 solicitudes/hora, sin tarjeta de crédito

JSON o PDF

Elige tu formato de salida

IVA automático

Por línea o global (21%/10%/4%)

Multilingüe

es, en, fr, de, pt y más

URL base:
https://invovate.com/api

Inicio Rápido

Tu primera factura en tres pasos:

Paso 1 — Crear cuenta
Regístrate gratis en invovate.com y verifica tu correo electrónico.
Paso 2 — Obtener clave API
Ve al panel de control y haz clic en "Generar clave API". Tu clave comenzará con inv_.
Paso 3 — Primera llamada
curl -X POST https://invovate.com/api/generate-invoice \ -H "Content-Type: application/json" \ -H "Authorization: Bearer inv_tuClaveApi" \ -d '{ "from": {"name": "Mi Empresa S.L."}, "to": {"name": "Cliente S.A."}, "items": [{"description": "Desarrollo web", "quantity": 1, "unit_price": 2500, "tax_rate": 21}], "invoice": {"currency": "EUR", "language": "es"} }'

Autenticación

La API admite tres métodos de autenticación:

1. Clave API (recomendado para uso en servidor)

Authorization: Bearer inv_tuClaveApiAqui

2. Cookie de sesión (para aplicaciones web)

Si estás autenticado mediante el navegador, la cookie inv_session se envía automáticamente.

3. Anónimo (sin autenticación)

Las llamadas sin autenticación están limitadas a salida JSON y se restringen por IP. Útil para pruebas.

Seguridad: Nunca incluyas tu clave API en código del lado del cliente ni la guardes en un repositorio Git. Usa variables de entorno en tu servidor.

Límites y Planes

PlanPrecioPor horaPor semana
Gratuito0 €40400
Starter9 €/mes2004.000
Pro29 €/mes1.00040.000
EnterpriseConsultarIlimitadoIlimitado

Los límites se devuelven en los encabezados de respuesta:

X-RateLimit-Limit-Hourly: 40 X-RateLimit-Remaining-Hourly: 39 X-RateLimit-Reset-Hourly: 1712123456 X-RateLimit-Limit-Weekly: 400 X-RateLimit-Remaining-Weekly: 399 X-RateLimit-Reset-Weekly: 1712345678

Generar Factura

POST
/api/generate-invoice

Genera una factura y devuelve JSON con todos los cálculos o un archivo PDF binario.

Formato de Solicitud

Emisor (from)

CampoTipoRequeridoDescripción
from.namestringNombre de tu empresa
from.addressstringNoDirección de tu empresa
from.emailstringNoTu correo electrónico
from.tax_idstringNoNIF/CIF (ej. B12345678)

Receptor (to)

CampoTipoRequeridoDescripción
to.namestringNombre del cliente o empresa
to.addressstringNoDirección del cliente
to.emailstringNoCorreo del cliente

Datos de la factura (invoice)

CampoTipoPredeterminadoDescripción
invoice.numberstringAutoNúmero de factura
invoice.datestringHoyFecha de la factura (AAAA-MM-DD)
invoice.due_datestringFecha de vencimiento (AAAA-MM-DD)
invoice.currencystringUSDCódigo de divisa (ej. EUR)
invoice.languagestringenCódigo de idioma (ej. es)
invoice.termsstringCondiciones de pago
invoice.po_numberstringNúmero de pedido

Líneas (items array)

CampoTipoRequeridoDescripción
descriptionstringDescripción del producto o servicio
quantitynumberCantidad de unidades
unit_pricenumberPrecio unitario (sin IVA)
discountnumberNoDescuento (porcentaje o importe)
discount_typestringpercent"percent" o "amount"
tax_ratenumberNoTipo de IVA por línea (ej. 21)

Otros campos

CampoTipoDescripción
global_taxnumberIVA global (se aplica si no hay IVA por línea)
global_discountnumberDescuento sobre el total
global_discount_typestring"percent" o "amount"
amount_paidnumberImporte ya pagado (para pagos parciales)
notesstringNotas al pie de la factura
refund_policystringPolítica de devoluciones
templatestringNombre de plantilla: classic, modern, bold, minimal, navy
outputstring"json" (predeterminado) o "pdf"

Formato de Respuesta

Respuesta JSON (output: "json")

{ "success": true, "invoice": { "number": "FAC-2026-042", "date": "2026-04-03", "due_date": "2026-05-03", "currency": "EUR", "language": "es", "template": "classic", "from": { "name": "Mi Empresa S.L.", "tax_id": "B12345678" }, "to": { "name": "Cliente S.A." }, "items": [ { "description": "Desarrollo web", "quantity": 1, "unit_price": 2500, "discount": 0, "tax_rate": 21, "tax_amount": 525.00, "line_total": 3025.00 } ], "subtotal": 2500.00, "global_discount": 0, "total_tax": 525.00, "grand_total": 3025.00, "amount_paid": 0, "balance_due": 3025.00, "notes": "Gracias por su confianza." }, "meta": { "processing_ms": 11, "credits_remaining": { "hourly": 39, "weekly": 399 } } }

Respuesta PDF (output: "pdf")

Devuelve un archivo PDF binario con los siguientes encabezados:

Content-Type: application/pdf Content-Disposition: attachment; filename="factura.pdf"

Códigos de Error

{ "success": false, "error": { "message": "Se requiere al menos un elemento" } }
Estado HTTPSignificado
400Error de validación — revisa el formato de tu solicitud
401Autenticación requerida o clave API inválida
403Correo electrónico no verificado
429Límite de velocidad superado
500Error interno del servidor

Endpoints de Autenticación

MétodoRutaDescripción
POST/api/auth/registerCrear cuenta con correo y contraseña
POST/api/auth/loginIniciar sesión, devuelve cookie de sesión
POST/api/auth/logoutCerrar sesión
GET/api/auth/meObtener datos del usuario actual y clave API
POST/api/auth/generate-api-keyGenerar nueva clave API (requiere correo verificado)

Ejemplos de Código

cURL — Factura PDF con IVA español

curl -X POST https://invovate.com/api/generate-invoice \ -H "Content-Type: application/json" \ -H "Authorization: Bearer inv_tuClaveApi" \ -d '{ "from": { "name": "Agencia Digital Madrid S.L.", "address": "Calle Gran Via 28, 28013 Madrid", "tax_id": "B12345678", "email": "[email protected]" }, "to": { "name": "Empresa Cliente S.A.", "address": "Passeig de Gracia 10, 08007 Barcelona", "email": "[email protected]" }, "invoice": { "number": "FAC-2026-042", "date": "2026-04-03", "due_date": "2026-05-03", "currency": "EUR", "language": "es", "terms": "30 dias neto" }, "items": [ {"description": "Diseno de sitio web", "quantity": 1, "unit_price": 3000, "tax_rate": 21}, {"description": "Consultoria SEO", "quantity": 10, "unit_price": 100, "tax_rate": 21} ], "notes": "Gracias por su confianza.", "template": "navy", "output": "pdf" }' --output factura.pdf

JavaScript (Node.js)

// Generar factura con la API de Invovate const response = await fetch('https://invovate.com/api/generate-invoice', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer inv_tuClaveApi' }, body: JSON.stringify({ from: { name: 'Mi Empresa S.L.', tax_id: 'B12345678' }, to: { name: 'Cliente S.A.', email: '[email protected]' }, invoice: { number: 'FAC-001', currency: 'EUR', language: 'es', due_date: '2026-05-03' }, items: [{ description: 'Consultoria', quantity: 10, unit_price: 80, tax_rate: 21 }], output: 'json' }) }); const data = await response.json(); if (data.success) { console.log('Total (con IVA):', data.invoice.grand_total, 'EUR'); console.log('Solicitudes restantes (hora):', data.meta.credits_remaining.hourly); }

Python

import requests API_KEY = "inv_tuClaveApi" URL = "https://invovate.com/api/generate-invoice" factura = { "from": { "name": "Freelancer Barcelona", "tax_id": "12345678A" }, "to": { "name": "Empresa Cliente S.A.", "address": "C/ Mayor 1, 28001 Madrid" }, "invoice": { "number": "FAC-2026-001", "currency": "EUR", "language": "es", "terms": "30 dias neto" }, "items": [ {"description": "Diseno grafico", "quantity": 1, "unit_price": 900, "tax_rate": 21}, {"description": "Fotografia", "quantity": 2, "unit_price": 300, "tax_rate": 21} ], "output": "pdf" } response = requests.post(URL, json=factura, headers={"Authorization": f"Bearer {API_KEY}"}) if response.status_code == 200: with open("factura.pdf", "wb") as f: f.write(response.content) print("Factura guardada como factura.pdf") else: print(f"Error: {response.json()['error']['message']}")

Idiomas Admitidos

CódigoIdiomaDirección
esEspañolLTR
enInglésLTR
deAlemánLTR
frFrancésLTR
nlNeerlandésLTR
itItalianoLTR
ptPortuguésLTR
ruRusoLTR
hiHindiLTR
jaJaponésLTR
arÁrabeRTL

Plantillas PDF

NombreEstilo
classicAcento azul, filas grises alternas (predeterminado)
modernTeal/cian, diseño moderno y limpio
boldEncabezado antracita oscuro, alto contraste
minimalGris claro, sin bordes
navyEncabezado azul marino con línea de acento dorada

Divisas Admitidas

EUR, USD, GBP, JPY, CAD, AUD, CHF, CNY, INR, AED, SAR, SGD, NZD, KRW, BRL, MXN, ZAR, SEK, NOK, DKK