Ir al contenido

API pública

CanaryFactura tiene una API REST para que conectes tus propias herramientas: un script que importa clientes, tu CRM creando borradores de factura, un panel que lee el estado de cobro. Disponible en el plan Plus (y durante la prueba).

La especificación completa (OpenAPI 3.1) está en /api/v1/openapi.json.

En Ajustes → Claves API creas una clave: le pones un nombre, marcas los permisos y la clave aparece una sola vez. Cópiala en ese momento; en nuestro lado solo se guarda un hash, así que no hay forma de recuperarla después. Solo el propietario de la cuenta puede crear y revocar claves.

Cada clave lleva un prefijo que dice de qué entorno es: cf_live_ para producción y cf_test_ para el entorno de pruebas. Una clave de un entorno no funciona en el otro.

Manda la clave como token Bearer en cada petición:

Ventana de terminal
curl https://app.canaryfactura.es/api/v1/invoices \
-H "Authorization: Bearer cf_live_TU_CLAVE"

Una clave revocada o desconocida devuelve 401; una clave sin el permiso necesario, o de un plan sin API, devuelve 403.

Cada clave lleva solo los permisos que marcaste al crearla:

PermisoQué deja hacer
invoices:readLeer facturas, con líneas y estado VERI*FACTU
invoices:draftCrear borradores de factura (nunca emitir)
customers:readLeer clientes
customers:writeCrear y editar clientes

Dale a cada integración lo mínimo que necesite: un panel de solo lectura no tiene por qué poder escribir clientes.

Método y rutaQué hace
GET /api/v1/invoicesLista facturas (paginada por cursor; filtros estado, serie, from, to)
GET /api/v1/invoices/{id}Una factura con sus líneas y el estado del registro VERI*FACTU
POST /api/v1/invoicesCrea un borrador con sus líneas en una sola llamada
GET /api/v1/customersLista clientes
POST /api/v1/customersCrea un cliente
GET /api/v1/customers/{id}Un cliente
PATCH /api/v1/customers/{id}Actualiza un cliente (se manda el objeto completo)

Crear un borrador:

Ventana de terminal
curl -X POST https://app.canaryfactura.es/api/v1/invoices \
-H "Authorization: Bearer cf_live_TU_CLAVE" \
-H "Content-Type: application/json" \
-d '{
"serieId": "…",
"tipo": "F1",
"fechaExpedicion": "2026-07-19",
"customerId": "…",
"lines": [{
"description": "Desarrollo web",
"qty": "1",
"unitPrice": "500.00",
"impuesto": "03",
"claveRegimen": "01",
"calificacion": "S1",
"tipoPct": "7"
}]
}'

Los importes van siempre como texto ("500.00"), nunca como números con coma flotante. Un cuerpo inválido devuelve 422 con el detalle de cada campo.

Cada clave puede hacer 60 peticiones por minuto de forma sostenida, con ráfagas de hasta 120. Al pasarte recibes 429 con una cabecera Retry-After que dice cuántos segundos esperar. Si tu integración necesita más ritmo de forma habitual, escríbenos antes de ponerle un bucle de reintentos.

La tabla de claves muestra el prefijo de cada una (cf_live_a1b2c3d4…), sus permisos, cuándo se creó y cuándo se usó por última vez — útil para detectar claves olvidadas que ya no usa nadie. Revocar una clave corta el acceso al momento; las peticiones con esa clave pasan a 401.