La facturación que cumple la ley
mientras tú construyes tu negocio

Automatiza tus facturas, envíalas a la AEAT con Verifactu y olvídate del cumplimiento legal. Preparado para 2026 desde el primer día.

Sin tarjeta de crédito · Plan Starter gratis · Cancela cuando quieras

100%
Cumplimiento Verifactu
< 2min
Primera factura
2026
Listo para la ley
0€
Para empezar
Producto

Todo lo que necesitas, nada de lo que no

Diseñado para autónomos que valoran su tiempo y necesitan cumplir con la ley sin convertirse en expertos contables.

Facturación Chiklin

Crea facturas profesionales en segundos. Numeración automática, series personalizables y PDF conforme a la normativa española.

Verifactu Automático

Cada factura se registra y envía a la AEAT con firma electrónica y código QR de verificación. Cero esfuerzo de tu parte.

Gestión de Gastos

Registra tus gastos, categorízalos y obtén un resumen trimestral listo para tu gestor. Con soporte de ticket digital.

Facturas en PDF con QR AEAT
Series de facturación múltiples
Clientes y proveedores ilimitados
Exportación a CSV / Excel
Facturas rectificativas
Presupuestos y proformas
Recordatorios de cobro automáticos
Historial de versiones
Integraciones

Conecta con Stripe

Cuando cobras con Stripe, la factura ya está emitida y enviada a la AEAT.

stripe

Stripe

Cobros automáticos con facturación instantánea

Disponible ahora

Más integraciones próximamente: Woocommerce · Shopify · PayPal

Para Developers

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
factura.json
1// POST /api/v1/invoices
2// Crea y envía una factura a la AEAT vía Verifactu
3
4{
5 "serie": "A",
6 "numero": "2024-0042",
7 "emisor": {
8 "nif": "12345678Z",
9 "nombre": "Carlos García Freelance SL",
10 "direccion": "Calle Mayor 1, 28001 Madrid"
11 },
12 "receptor": {
13 "nif": "B98765432",
14 "nombre": "Acme Corp SL",
15 "email": "contabilidad@acme.es"
16 },
17 "lineas": [
18 {
19 "descripcion": "Desarrollo web - Sprint Q1",
20 "cantidad": 1,
21 "precio_unitario": 3500.00,
22 "iva": 21
23 }
24 ],
25 "verifactu": {
26 "envio_automatico": true,
27 "qr_incluido": true,
28 "firma_electronica": true
29 }
30}
31
32// Respuesta:
33{
34 "id": "inv_8f3kA9mNp2qR",
35 "estado": "enviada_aeat",
36 "pdf_url": "https://api.Chiklin.es/pdf/inv_8f3kA9mNp2qR",
37 "qr_verificacion": "https://sede.agenciatributaria.gob.es/...",
38 "timestamp_aeat": "2024-10-15T09:22:11Z",
39 "numero_registro": "VERI-2024-XJ7P9K"
40}
Recursos

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).

Base URL
https://chiklin.com/api/v1
Autenticación
Authorization: Bearer <api_key>
Rate limits
300 lecturas / 5 min · 20 escrituras / min
Idempotencia
Cabecera Idempotency-Key en POST de facturas

Ejemplos de uso

GET/api/v1/healthz

Autenticació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.

python — /api/v1/healthz
import requests

API_KEY = "chk_test_xxxxxxxxxxxxxxxxxxxx"
BASE_URL = "https://chiklin.com/api/v1"

response = requests.get(
    f"{BASE_URL}/healthz",
    headers={"Authorization": f"Bearer {API_KEY}"},
)
print(response.status_code, response.json())
POST/api/v1/invoices

Crear 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.

python — /api/v1/invoices
import requests, uuid

API_KEY = "chk_test_xxxxxxxxxxxxxxxxxxxx"
BASE_URL = "https://chiklin.com/api/v1"

payload = {
    "series_id": "b3f1a2e0-4c1a-4e7a-9c1a-3f6a8e2d9c11",
    "issue_date": "2026-07-27",
    "invoice_type": "STANDARD",
    "contact_id": "9d2f1a3b-5c6d-4e7f-8a9b-0c1d2e3f4a5b",
    "items": [
        {"description": "Desarrollo web - Sprint 3", "quantity": 1, "unit_price": 1500.00, "tax_rate": 21, "irpf_rate": 15}
    ],
}

response = requests.post(
    f"{BASE_URL}/invoices",
    headers={
        "Authorization": f"Bearer {API_KEY}",
        "Idempotency-Key": str(uuid.uuid4()),
    },
    json=payload,
)
response.raise_for_status()
print(response.json())  # { "invoice_id": "...", "invoice_number": "2026/0001" }
POST/api/v1/invoices/{id}/void

Anular 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.

python — /api/v1/invoices/{id}/void
import requests, uuid

API_KEY = "chk_test_xxxxxxxxxxxxxxxxxxxx"
BASE_URL = "https://chiklin.com/api/v1"
invoice_id = "3a1b2c3d-4e5f-6789-abcd-ef0123456789"

response = requests.post(
    f"{BASE_URL}/invoices/{invoice_id}/void",
    headers={
        "Authorization": f"Bearer {API_KEY}",
        "Idempotency-Key": str(uuid.uuid4()),
    },
    json={"rectification_reason": "Error en el importe de la línea 2"},
)
response.raise_for_status()
print(response.json())  # { "original_invoice_id", "corrective_invoice_id", "corrective_invoice_number" }
POST/api/v1/clients

Crear un cliente

Da de alta un contacto como cliente (is_customer=true). Valida el NIF/CIF según el país antes de guardarlo.

python — /api/v1/clients
import requests

API_KEY = "chk_test_xxxxxxxxxxxxxxxxxxxx"
BASE_URL = "https://chiklin.com/api/v1"

payload = {
    "person_type_code": "J",
    "tax_identification_number": "B12345674",
    "corporate_name": "Acme Soluciones SL",
    "address": "Calle Mayor 1",
    "post_code": "28001",
    "town": "Madrid",
    "province": "Madrid",
    "email": "facturacion@acme.es",
}

response = requests.post(f"{BASE_URL}/clients", headers={"Authorization": f"Bearer {API_KEY}"}, json=payload)
response.raise_for_status()
print(response.json())
POST/api/v1/suppliers

Crear 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.

python — /api/v1/suppliers
import requests

API_KEY = "chk_test_xxxxxxxxxxxxxxxxxxxx"
BASE_URL = "https://chiklin.com/api/v1"

payload = {
    "person_type_code": "F",
    "tax_identification_number": "12345678Z",
    "first_name": "Laura",
    "first_surname": "Gomez",
    "address": "Av. Diagonal 200",
    "post_code": "08018",
    "town": "Barcelona",
    "province": "Barcelona",
}

response = requests.post(f"{BASE_URL}/suppliers", headers={"Authorization": f"Bearer {API_KEY}"}, json=payload)
response.raise_for_status()
print(response.json())
POST/api/v1/series

Crear 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.

python — /api/v1/series
import requests

API_KEY = "chk_test_xxxxxxxxxxxxxxxxxxxx"
BASE_URL = "https://chiklin.com/api/v1"

payload = {"name": "Serie B", "prefix": "B-2026"}

response = requests.post(f"{BASE_URL}/series", headers={"Authorization": f"Bearer {API_KEY}"}, json=payload)
response.raise_for_status()
print(response.json())
POST/api/v1/recurring-invoices

Crear 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.

python — /api/v1/recurring-invoices
import requests

API_KEY = "chk_test_xxxxxxxxxxxxxxxxxxxx"
BASE_URL = "https://chiklin.com/api/v1"

payload = {
    "series_id": "b3f1a2e0-4c1a-4e7a-9c1a-3f6a8e2d9c11",
    "contact_id": "9d2f1a3b-5c6d-4e7f-8a9b-0c1d2e3f4a5b",
    "frequency": "monthly",
    "items": [
        {"description": "Mantenimiento mensual", "quantity": 1, "unit_price": 250.00, "tax_rate": 21, "irpf_rate": 15}
    ],
}

response = requests.post(f"{BASE_URL}/recurring-invoices", headers={"Authorization": f"Bearer {API_KEY}"}, json=payload)
response.raise_for_status()
print(response.json())
POST/api/v1/expenses

Registrar 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.

python — /api/v1/expenses
import requests

API_KEY = "chk_test_xxxxxxxxxxxxxxxxxxxx"
BASE_URL = "https://chiklin.com/api/v1"

payload = {
    "provider_id": "6a7b8c9d-0e1f-2a3b-4c5d-6e7f8a9b0c1d",
    "expense_date": "2026-07-20",
    "document_type": "INVOICE",
    "total_gross_amount": 500.00,
    "tax_rate": 21,
    "irpf_rate": 15,
    "category": "Suministros",
}

response = requests.post(f"{BASE_URL}/expenses", headers={"Authorization": f"Bearer {API_KEY}"}, json=payload)
response.raise_for_status()
print(response.json())
POST/api/v1/products

Crear un producto/servicio

Alta simple en el catálogo. El producto nace activo y en el entorno de la clave usada.

python — /api/v1/products
import requests

API_KEY = "chk_test_xxxxxxxxxxxxxxxxxxxx"
BASE_URL = "https://chiklin.com/api/v1"

payload = {"name": "Hora de consultoria", "unit_price": 60.00, "tax_rate": 21}

response = requests.post(f"{BASE_URL}/products", headers={"Authorization": f"Bearer {API_KEY}"}, json=payload)
response.raise_for_status()
print(response.json())

Todos los endpoints

Sistema

GET/healthzComprobación de estado (sin autenticación)curl https://chiklin.com/api/v1/healthz

Facturas

GET/invoicesListar facturas (limit, offset)curl "https://chiklin.com/api/v1/invoices?limit=50" -H "Authorization: Bearer $API_KEY"
POST/invoicesCrear factura Ordinaria o Simplificadacurl -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íneascurl https://chiklin.com/api/v1/invoices/{id} -H "Authorization: Bearer $API_KEY"
POST/invoices/{id}/voidAnular 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/clientsListar clientes (limit, offset)curl "https://chiklin.com/api/v1/clients?limit=50" -H "Authorization: Bearer $API_KEY"
POST/clientsCrear clientecurl -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 clientecurl https://chiklin.com/api/v1/clients/{id} -H "Authorization: Bearer $API_KEY"
PATCH/clients/{id}Actualizar un clientecurl -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/suppliersListar proveedores (limit, offset)curl "https://chiklin.com/api/v1/suppliers?limit=50" -H "Authorization: Bearer $API_KEY"
POST/suppliersCrear proveedorcurl -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 proveedorcurl https://chiklin.com/api/v1/suppliers/{id} -H "Authorization: Bearer $API_KEY"
PATCH/suppliers/{id}Actualizar un proveedorcurl -X PATCH https://chiklin.com/api/v1/suppliers/{id} -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d '{ "phone": "600000000" }'

Series

GET/seriesListar series de facturacióncurl https://chiklin.com/api/v1/series -H "Authorization: Bearer $API_KEY"
POST/seriesCrear 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 seriecurl https://chiklin.com/api/v1/series/{id} -H "Authorization: Bearer $API_KEY"

Facturas recurrentes

GET/recurring-invoicesListar plantillas (plan Pro/Developer)curl https://chiklin.com/api/v1/recurring-invoices -H "Authorization: Bearer $API_KEY"
POST/recurring-invoicesCrear plantilla recurrentecurl -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 plantillacurl https://chiklin.com/api/v1/recurring-invoices/{id} -H "Authorization: Bearer $API_KEY"
PATCH/recurring-invoices/{id}Activar / desactivarcurl -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 plantillacurl -X DELETE https://chiklin.com/api/v1/recurring-invoices/{id} -H "Authorization: Bearer $API_KEY"

Gastos

GET/expensesListar gastos (limit, offset)curl "https://chiklin.com/api/v1/expenses?limit=50" -H "Authorization: Bearer $API_KEY"
POST/expensesRegistrar un gastocurl -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 gastocurl https://chiklin.com/api/v1/expenses/{id} -H "Authorization: Bearer $API_KEY"

Productos

GET/productsListar productos/servicioscurl "https://chiklin.com/api/v1/products?limit=50" -H "Authorization: Bearer $API_KEY"
POST/productsCrear producto/serviciocurl -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 productocurl https://chiklin.com/api/v1/products/{id} -H "Authorization: Bearer $API_KEY"
PATCH/products/{id}Actualizar precio / activocurl -X PATCH https://chiklin.com/api/v1/products/{id} -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d '{ "active": false }'
Precio

Precios honestos,
sin letra pequeña

Empieza gratis. Escala cuando tu negocio crezca.

Starter

Gratis

Para empezar a facturar sin compromiso.

  • Hasta 25 facturas/mes
  • Cumplimiento Verifactu
  • Exportación e Importación contable (CSV/Excel)
  • 1 serie de facturación
  • Sandbox para testing
Empieza gratis
Más popular

Pro

8€/mes (sin IVA)

Para autónomos activos que necesitan más.

  • Todo lo de Starter
  • Facturas ilimitadas
  • Series ilimitadas
  • Facturas Automáticas
Elige Pro

Developer

14€/mes (sin IVA)

Para equipos e integración avanzada.

  • Todo lo de Pro
  • Integraciones Stripe
  • Acceso API REST completo
  • Webhooks en tiempo real
Empieza a desarrollar

Todos los planes incluyen cumplimiento legal Verifactu · Sin permanencia · Cancela en 1 clic