Una API que ya conoce la ley
Integra facturación compliant con Verifactu en tu producto con una sola llamada REST. Nosotros gestionamos la firma electrónica, el registro en la AEAT y la generación del PDF con QR.
- REST API con autenticación por API Key
- Webhooks para estado de facturas en tiempo real
- SDKs para Node.js, Python y PHP (próximamente)
- Entorno sandbox para pruebas sin coste
- Rate limit: 1.000 facturas/min en plan Developer
Referencia de la API
Todo lo que necesitas para integrar Chiklin desde tu propio backend: autenticación por API Key, entornos de Pruebas/Real aislados, idempotencia en operaciones fiscales irreversibles y un endpoint por cada recurso de negocio (facturas, clientes, proveedores, series, recurrentes, gastos y productos).
Ejemplos de uso
/api/v1/healthzAutenticación
Toda petición (salvo /healthz) lleva la clave en la cabecera Authorization como Bearer token. Una clave está permanentemente ligada a un entorno (chk_test_… para Pruebas, chk_live_… para Real) y a los datos de ese entorno únicamente.
/api/v1/invoicesCrear una factura
Emite una factura Ordinaria o Simplificada: calcula IVA/IRPF, numera correlativamente por serie y la registra en VeriFactu. Añade una cabecera Idempotency-Key (un UUID por intento lógico) para que un reintento de red no emita una segunda factura.
/api/v1/invoices/{id}/voidAnular una factura
No borra ni marca un flag: emite una factura rectificativa (R4/R5 según AEAT) que invierte el signo de cada línea y la registra en VeriFactu. Solo si esa rectificativa queda correctamente registrada, la original pasa a voided.
/api/v1/clientsCrear un cliente
Da de alta un contacto como cliente (is_customer=true). Valida el NIF/CIF según el país antes de guardarlo.
/api/v1/suppliersCrear un proveedor
Igual que /clients pero marca is_provider=true (is_customer queda a false). Un mismo NIF puede existir a la vez como cliente y como proveedor en dos contactos distintos.
/api/v1/seriesCrear una serie de facturación
El prefijo debe ser único dentro del entorno de la clave. Sujeto al límite de series de tu plan.
/api/v1/recurring-invoicesCrear una plantilla recurrente
Requiere plan Pro o Developer. La plantilla queda congelada al entorno de la clave; si no envías next_run_date se calcula a partir de la frecuencia.
/api/v1/expensesRegistrar un gasto
Un ticket (document_type: RECEIPT) nunca es deducible de IVA aunque envíes is_iva_deductible: true — el servidor lo fuerza a false.
/api/v1/productsCrear un producto/servicio
Alta simple en el catálogo. El producto nace activo y en el entorno de la clave usada.
Todos los endpoints
Sistema
| GET | /healthz | Comprobación de estado (sin autenticación) | curl https://chiklin.com/api/v1/healthz |
Facturas
| GET | /invoices | Listar facturas (limit, offset) | curl "https://chiklin.com/api/v1/invoices?limit=50" -H "Authorization: Bearer $API_KEY" |
| POST | /invoices | Crear factura Ordinaria o Simplificada | curl -X POST https://chiklin.com/api/v1/invoices -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d '{ "series_id": "...", "issue_date": "2026-07-27", "contact_id": "...", "items": [...] }' |
| GET | /invoices/{id} | Obtener una factura y sus líneas | curl https://chiklin.com/api/v1/invoices/{id} -H "Authorization: Bearer $API_KEY" |
| POST | /invoices/{id}/void | Anular vía rectificativa (R4/R5) | curl -X POST https://chiklin.com/api/v1/invoices/{id}/void -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d '{ "rectification_reason": "..." }' |
Clientes
| GET | /clients | Listar clientes (limit, offset) | curl "https://chiklin.com/api/v1/clients?limit=50" -H "Authorization: Bearer $API_KEY" |
| POST | /clients | Crear cliente | curl -X POST https://chiklin.com/api/v1/clients -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d '{ "person_type_code": "J", "tax_identification_number": "...", ... }' |
| GET | /clients/{id} | Obtener un cliente | curl https://chiklin.com/api/v1/clients/{id} -H "Authorization: Bearer $API_KEY" |
| PATCH | /clients/{id} | Actualizar un cliente | curl -X PATCH https://chiklin.com/api/v1/clients/{id} -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d '{ "email": "nuevo@correo.es" }' |
Proveedores
| GET | /suppliers | Listar proveedores (limit, offset) | curl "https://chiklin.com/api/v1/suppliers?limit=50" -H "Authorization: Bearer $API_KEY" |
| POST | /suppliers | Crear proveedor | curl -X POST https://chiklin.com/api/v1/suppliers -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d '{ "person_type_code": "F", "tax_identification_number": "...", ... }' |
| GET | /suppliers/{id} | Obtener un proveedor | curl https://chiklin.com/api/v1/suppliers/{id} -H "Authorization: Bearer $API_KEY" |
| PATCH | /suppliers/{id} | Actualizar un proveedor | curl -X PATCH https://chiklin.com/api/v1/suppliers/{id} -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d '{ "phone": "600000000" }' |
Series
| GET | /series | Listar series de facturación | curl https://chiklin.com/api/v1/series -H "Authorization: Bearer $API_KEY" |
| POST | /series | Crear serie (prefijo único por entorno) | curl -X POST https://chiklin.com/api/v1/series -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d '{ "name": "Serie B", "prefix": "B-2026" }' |
| GET | /series/{id} | Obtener una serie | curl https://chiklin.com/api/v1/series/{id} -H "Authorization: Bearer $API_KEY" |
Facturas recurrentes
| GET | /recurring-invoices | Listar plantillas (plan Pro/Developer) | curl https://chiklin.com/api/v1/recurring-invoices -H "Authorization: Bearer $API_KEY" |
| POST | /recurring-invoices | Crear plantilla recurrente | curl -X POST https://chiklin.com/api/v1/recurring-invoices -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d '{ "series_id": "...", "contact_id": "...", "frequency": "monthly", "items": [...] }' |
| GET | /recurring-invoices/{id} | Obtener una plantilla | curl https://chiklin.com/api/v1/recurring-invoices/{id} -H "Authorization: Bearer $API_KEY" |
| PATCH | /recurring-invoices/{id} | Activar / desactivar | curl -X PATCH https://chiklin.com/api/v1/recurring-invoices/{id} -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d '{ "active": false }' |
| DELETE | /recurring-invoices/{id} | Eliminar una plantilla | curl -X DELETE https://chiklin.com/api/v1/recurring-invoices/{id} -H "Authorization: Bearer $API_KEY" |
Gastos
| GET | /expenses | Listar gastos (limit, offset) | curl "https://chiklin.com/api/v1/expenses?limit=50" -H "Authorization: Bearer $API_KEY" |
| POST | /expenses | Registrar un gasto | curl -X POST https://chiklin.com/api/v1/expenses -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d '{ "expense_date": "2026-07-20", "document_type": "INVOICE", "total_gross_amount": 500, "tax_rate": 21 }' |
| GET | /expenses/{id} | Obtener un gasto | curl https://chiklin.com/api/v1/expenses/{id} -H "Authorization: Bearer $API_KEY" |
Productos
| GET | /products | Listar productos/servicios | curl "https://chiklin.com/api/v1/products?limit=50" -H "Authorization: Bearer $API_KEY" |
| POST | /products | Crear producto/servicio | curl -X POST https://chiklin.com/api/v1/products -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d '{ "name": "Hora de consultoria", "unit_price": 60, "tax_rate": 21 }' |
| GET | /products/{id} | Obtener un producto | curl https://chiklin.com/api/v1/products/{id} -H "Authorization: Bearer $API_KEY" |
| PATCH | /products/{id} | Actualizar precio / activo | curl -X PATCH https://chiklin.com/api/v1/products/{id} -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d '{ "active": false }' |