Factuarea APIDevelopers

API de Factuarea

La API REST de Factuarea para automatizar tu SaaS de facturación multi-tenant para empresas españolas.

La API REST de Factuarea expone recursos de facturación (contactos, productos, facturas, presupuestos, facturas proforma, albaranes, facturas recurrentes, gastos) sobre HTTPS con autenticación por API key. Toda la superficie pública vive en https://api.factuarea.com/v1 y devuelve principalmente JSON. Las descargas usan el formato XML, CSV o binario declarado por cada endpoint; las respuestas 204 y 304 no tienen cuerpo. Los recursos exponen un id opaco, generalmente un UUID v7; los identificadores del proveedor se documentan por separado.

Inicio rápido

La API viene con tu plan

La API pública está incluida en todos los planes de Factuarea — sin programa beta ni add-on aparte. Durante el trial de 10 días ya tienes acceso a la API con el tier free; los planes de pago suben el tier de rate limit. Consulta Límites de peticiones.

Crea tu primera API key

Abre Dashboard → Developers → API Keys y crea una clave con los scopes que necesites (por ejemplo invoices:read,contacts:read para empezar). Copia el secreto una sola vez — no podrás volver a verlo.

Elige el entorno Test para obtener una clave fact_test_ que opera sobre un sandbox aislado sin efectos en el mundo real. Crea contra él primero y luego crea una clave fact_live_ para pasar a producción. Consulta Modo de prueba y sandbox.

Verifica tu clave

Antes que nada, confirma que la clave funciona. GET /v1/me introspecciona la credencial y no necesita ningún scope: cualquier clave válida puede consultarse a sí misma. Devuelve la cuenta a la que pertenece la clave (su entorno, si es proveedor de cuentas y los scopes privilegiados que Factuarea le concedió), los scopes y el tier de límite de peticiones de la propia clave, los NIF que alcanza y, con una clave de proveedor, las cuentas de tus clientes a las que llega tu cuenta. El id de cada NIF es el segmento {company} de toda ruta del eje de empresa:

curl https://api.factuarea.com/v1/me \
  -H "Authorization: Bearer fact_test_xxxxxxxxxxxxxxxxxxxxxxxx"

Deberías ver un 200 con una instantánea de me. Esta es la de una clave live de un proveedor de cuentas, así que todos los bloques vienen rellenos:

{
  "data": {
    "object": "me",
    "account": {
      "id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a00",
      "name": "Asesoría Martínez",
      "environment": "live",
      "is_provider": true,
      "privileged_scopes": [
        "accounts:read",
        "accounts:write"
      ]
    },
    "api_key": {
      "id": "019e81ef-e1d4-7208-a51d-94c2c2a54a84",
      "name": "Producción",
      "prefix": "fact_live_1OSf9KdP",
      "scopes": [
        "account:read",
        "series:read",
        "series:write"
      ],
      "tier": "scale",
      "environment": "live",
      "created_at": "2026-01-15T09:30:00Z",
      "last_used_at": "2026-05-25T18:00:00Z",
      "expires_at": null
    },
    "scope": [
      {
        "id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a01",
        "tax_id": "B12345674",
        "name": "Acme Corporation"
      },
      {
        "id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a02",
        "tax_id": "B87654323",
        "name": "Acme Logística S.L."
      }
    ],
    "client_accounts": [
      {
        "id": "0199a1f0-1c22-7a10-b111-5a5b5c5d5e5f",
        "name": "Construcciones Ruiz",
        "origin": "granted",
        "access_level": "view",
        "status": "active",
        "paid_by_provider": false,
        "environment": "live"
      },
      {
        "id": "0199a1f0-1c22-7a10-b111-6a6b6c6d6e6f",
        "name": "Talleres García",
        "origin": "provisioned",
        "access_level": "operate",
        "status": "provisioned",
        "paid_by_provider": true,
        "environment": "live"
      }
    ],
    "client_accounts_visible": true,
    "client_accounts_has_more": false
  }
}
  • account es la cuenta de la clave. Su id es el segmento {account} de las rutas de cuenta, e is_provider indica si aprovisiona cuentas gestionadas para sus clientes.
  • scope lista los NIF que alcanza la clave, cada uno con su id, su tax_id y su name. Siempre se enumeran, también cuando solo hay uno.
  • client_accounts lista las cuentas de tus clientes que tu cuenta alcanza: granted cuando te cedieron acceso, provisioned cuando las aprovisionaste y las sigues gestionando. Solo se rellena cuando la clave lleva el scope privilegiado accounts:read; si no, vuelve vacía y client_accounts_visible es false.

Si obtienes 401 invalid_api_key, vuelve a comprobar el valor. El array scopes te dice exactamente qué puede hacer esta clave — una llamada posterior que falle con 403 insufficient_scope carece de alguno de ellos. Cada campo está descrito en Cuentas y NIF.

Haz tu primera petición de datos

Ahora lista un recurso real. GET /v1/companies/{company}/contacts devuelve un envoltorio estándar con data (resultados), has_more y next_cursor (paginación por cursor). Sustituye {company} por el id de uno de los NIF de scope — uno propio, uno al que otra cuenta te cedió acceso o uno de una cuenta gestionada, como explica Alcanzar un NIF — y filtra por rol. Un mismo contacto acumula los roles customer y supplier que le correspondan:

curl "https://api.factuarea.com/v1/companies/{company}/contacts?roles[]=customer" \
  -H "Authorization: Bearer fact_test_xxxxxxxxxxxxxxxxxxxxxxxx"

¿Listo para emitir tu primera factura de principio a fin? Sigue el Inicio rápido. Si recibes un error, búscalo en Errores por el code devuelto.

Configura webhooks (opcional)

Si tu integración necesita reaccionar a eventos (factura pagada, presupuesto aceptado, etc.), configura un webhook endpoint firmado con HMAC SHA256. Consulta Webhooks.

Qué cubre la API

Contactos

Una identidad, roles acumulables customer/supplier/lead, perfiles, importación y archivado/desarchivado.

Catálogo

Productos y servicios con stock decimal, unidades UNECE, presentaciones, variantes, ofertas de proveedor y tarifas por cliente.

Documentos de venta

Facturas, presupuestos, facturas proforma, albaranes, facturas recurrentes — con líneas, retenciones y recargo de equivalencia.

Acciones de documento

Enviar por email, marcar como pagada/aceptada, generar PDF, anular, crear factura rectificativa, convertir entre tipos.

Gastos

Gastos con subida del PDF del proveedor, mark_paid, mark_received.

Series de documentos

Series de numeración legal por tipo de documento, con garantías fiscales al modificarlas mediante la API.

Facturación FACe (B2G)

Descarga del XML FacturaE 3.2.2 y envíos a FACe — envía, sigue el estado de tramitación y solicita anulaciones.

Control horario

Empleados, horarios de trabajo, el registro de fichajes, cierres mensuales, ausencias, presencia y festivos — el registro de jornada del RD-ley 8/2019.

Automatizaciones

Reglas dirigidas por eventos — un evento dispara, una condición decide y se ejecuta una lista ordenada de acciones, con versiones selladas, ensayo e historial de ejecuciones.

Tareas y proyectos

Proyectos con un tablero de columnas, tareas vinculadas a tus facturas, presupuestos y contactos, tiempo imputado convertido en borradores de factura y una agenda combinada — también como 22 tools MCP de proyectos y 52 de tareas.

Servidor MCP para agentes de IA

Toda la API como 668 herramientas Model Context Protocol, con OAuth 2.1 y autenticación por API key — conecta Claude y otros agentes en segundos.

Diseño del contrato

La API sigue los patrones que esperarías de un proveedor moderno:

  • Identificadores opacos — los recursos suelen usar strings UUID v7. El borrado de datos de firmas conserva un ID de auditoría numérico, y los identificadores externos usan el formato de su proveedor. Consulta Paginación para la semántica del cursor.
  • Errores normalizados — cada error devuelve un envoltorio con type, code, message, param, doc_url y request_id. Consulta Errores.
  • Idempotency keys — soportadas en cada POST para evitar duplicados en los reintentos. Consulta Idempotencia.
  • Límites de peticiones por tier — cuotas por minuto y mensuales, con cabeceras X-RateLimit-* en cada respuesta. Consulta Límites de peticiones.
  • Versionado por URL — /v1/*. Los cambios incompatibles disparan /v2/* con una política de deprecación documentada. Consulta Versionado.
  • Webhooks con rotación de doble secreto — HMAC SHA256, reintento exponencial con hasta 8 intentos. Consulta Webhooks.

SDKs

Ofrecemos SDKs oficiales de TypeScript y PHP (@factuarea/sdk y factuarea/factuarea-php) con reintentos, idempotencia, paginación por cursor, errores tipados y verificación de webhooks integrados. Si tu lenguaje no está cubierto, cualquier cliente HTTP estándar (curl, Postman, axios, requests, Guzzle) funciona — la API es REST plano sobre JSON.

La API REST pública complementa el cliente web de Factuarea (app.factuarea.com) — no lo reemplaza. Las operaciones que la API no expone (gestión de planes, branding, configuración fiscal global de la empresa) siguen viviendo en la app.

Integraciones y flujos guiados

Conecta tiendas, configura WooCommerce o Shopify y consume eventos con n8n. Empieza por el índice de integraciones. Para el correo, consulta envío de documentos; para agentes, el protocolo MCP y los recursos fiscales y prompts.

En esta página

¿Te echamos una mano?Contactar con soporte