Endpoints de la API de Holded: el mapa por áreas

Referencia 2026 · Holded

Endpoints de la API de Holded: el mapa por áreas.

Qué recurso pedir para cada dato, con las rutas reales de la v2 verificadas contra la API, los parámetros que importan y las excepciones que no vienen en la documentación.

API de Holded v2 referencia
Áreas10
Endpoints305
Integraciones◷ 9 min de lecturaPublicado Actualizado Por

Los endpoints de la API de Holded son las rutas HTTP a las que una aplicación externa llama para leer o escribir cada tipo de dato del programa: facturas, contactos, asientos, productos, tesorería. Cada uno admite unos métodos, unos filtros y una paginación propios, y la documentación oficial no siempre dice cuál devuelve el dato que se necesita.

La documentación oficial de Holded lista los endpoints, pero no te dice cuál necesitas para lo que quieres construir. Si tu objetivo es montar un informe financiero, no necesitas 305 endpoints: necesitas seis o siete, y saber cuál devuelve qué.

Esta es una referencia práctica organizada por área de negocio, con las rutas reales de la v2, los parámetros que de verdad usarás y un par de excepciones que descubrimos probando contra la API y que no aparecen en el catálogo oficial.

El patrón: cómo se construye cualquier llamada

Todas las llamadas de la v2 comparten la misma forma. Una vez la tienes clara, cambiar de recurso es cambiar una palabra en la URL.

1
Una única URL base

Todo cuelga de https://api.holded.com/api/v2. Se acabaron los prefijos por módulo de la v1 (/api/invoicing/v1/, /api/crm/v1/…).

2
Una clave nueva, con permisos

Aquí está el cambio que más sorprende: no basta con la clave que usabas en la v1. En la v2 cada clave se genera con permisos concretos y solo puede llamar a los endpoints que esos permisos autorizan. La creas en Ajustes → API → «Generar nueva clave» y se muestra una sola vez: si no la copias, hay que generar otra.

3
Autenticación por Bearer

La clave viaja en la cabecera Authorization: Bearer TU_CLAVE, el estándar de la industria, en lugar de la cabecera propia key de la v1.

4
Paginación por cursor

Cada respuesta es un sobre con items, cursor y has_more. Pides la siguiente página pasando el cursor recibido, hasta que has_more sea falso. El límite máximo por página es de 100 registros.

El error que más tiempo hace perder: los permisos En la v1 la clave era global: si la tenías, podías con todo. En la v2 cada clave lleva permisos por recurso —del estilo sales:invoices.read o contacts.write— y la documentación indica cuál exige cada endpoint. Si a tu clave le falta uno, la respuesta es 403 Forbidden, no un error de autenticación. Es fácil confundirlo con una clave mal copiada y perder horas buscando donde no es.

Por eso, si vienes de una integración v1, el camino fiable no es reutilizar la clave antigua sino generar una nueva marcando los permisos de lectura que tu integración necesita: contabilidad, ventas, compras, contactos y tesorería, según los recursos que vayas a pedir. Antes de dar la migración por buena, prueba una llamada por área: la que devuelva 403 te dice exactamente qué permiso falta. El resto de cambios —rutas, paginación y formatos— está en la guía de migración a la v2.

Contabilidad: la base de cualquier informe

Si tu objetivo es un balance o una cuenta de resultados, estos dos recursos son el 90 % de lo que necesitas:

RecursoQué devuelvePara qué sirve
ledger-entriesLos apuntes del libro diario, con fecha, cuenta, debe y haberConstruir la cuenta de resultados y el balance por periodo
accounting-accountsEl plan de cuentas de la empresa, con nombre y grupoMapear cada apunte a su epígrafe del PGC

El orden correcto es traer primero el plan de cuentas y después los asientos, porque sin el plan no puedes agrupar: un apunte a la cuenta 705 no significa nada hasta que sabes que pertenece a la cifra de negocio. Es el mismo mapeo del que depende cualquier cuadro de mando.

Ventas y compras: cada tipo tiene su ruta

En la v2, cada tipo documental es un recurso propio. Estas son las rutas reales, verificadas contra la API:

Tipo de documentoRuta v2Área
Factura de ventainvoicesVentas
Recibo de ventasales-receiptsVentas
Factura rectificativacredit-notesVentas
PresupuestoestimatesVentas
ProformaproformasVentas
Pedido de ventasales-ordersVentas
AlbaránwaybillsVentas
ComprapurchasesCompras
Pedido de comprapurchase-ordersCompras
Albarán de recepciónreceipt-notesCompras
La excepción que no está en la documentación La rectificativa de compra (purchase refund) no tiene colección de listado en la v2. Lo comprobamos probando más de quince variantes de ruta: todas devuelven 404 No route found, y el catálogo oficial tampoco la incluye. El tipo solo existe en numbering-series/{tipo} y para creación o descarga de PDF por id. Si tu integración itera todos los tipos documentales, tienes que excluirlo o fallará.

Contactos, catálogo y tesorería

RecursoQué devuelveNota
contactsClientes y proveedoresNecesario para el análisis de ingresos por cliente
productsCatálogo de productos y serviciosBase del margen por línea
treasury/accountsCuentas de tesorería y bancosDevuelve el listado de cuentas
treasury/accounts/{id}/bank-movementsMovimientos de una cuenta concretaAnidado: primero pides las cuentas, luego los movimientos de cada una

La tesorería es el único bloque con estructura anidada: no hay un endpoint global de movimientos. Tienes que listar las cuentas y después recorrer los movimientos de cada una filtrando por rango de fechas. Es la vía para construir la previsión de tesorería sobre datos reales.

Equipo y proyectos

RecursoQué devuelvePara qué
employeesPersonas del equipoCoste de estructura y análisis por persona
employee-timesFichajesControl de jornada
projectsProyectos abiertosRentabilidad por proyecto
tasksTareas dentro de proyectosDesglose del trabajo
project-timesHoras imputadas a proyectosEl coste real de cada proyecto

El cruce de project-times con el coste por hora de employees es lo que permite calcular la rentabilidad real de un proyecto — y de ahí, el coste variable que necesitas para el punto de equilibrio.

Los tres errores que más tiempo cuestan

Iterar todos los tipos documentales. Si recorres la lista completa sin excluir la rectificativa de compra, tu integración fallará con un 404 que parece un problema de permisos y no lo es.
No filtrar por fecha en origen. Descargar el histórico completo en cada sincronización agota la cuota de peticiones sin necesidad. Filtra el rango en la propia llamada.
Ignorar el sobre de la respuesta. La v2 no devuelve una lista pelada. Si tu código espera un array directo, romperá en la primera llamada.

A esos tres se suma el clásico: no controlar los límites de uso. La v2 los aplica por ventanas deslizantes y responde 429 con una cabecera Retry-After — el manejo correcto está detallado en la guía de la API de Holded.

Preguntas frecuentes

¿Dónde está la documentación oficial?
Holded publica el catálogo de endpoints y la especificación OpenAPI en su portal de desarrolladores. Esta página es un mapa práctico por área, no un sustituto del catálogo.
¿Me sirve la API Key que usaba en la v1?
No cuentes con ello. La v2 no solo cambia cómo se envía la clave —de la cabecera key a Authorization: Bearer— sino el modelo de permisos: cada clave se genera con permisos concretos por recurso, mientras que en la v1 eran globales. Lo fiable es generar una clave nueva desde Ajustes → API marcando los permisos que tu integración necesita.
Me devuelve 403 y estoy seguro de que la clave es correcta
Entonces el problema son los permisos, no la clave. Un 403 Forbidden en la v2 significa que la clave es válida pero no tiene autorizado ese recurso. Revisa qué permiso exige el endpoint y regenera la clave incluyéndolo. Un 401, en cambio, sí sería una clave inválida o revocada.
¿Puedo ver la clave otra vez si la pierdo?
No. Holded la muestra una sola vez al generarla. Si no la guardaste, hay que crear otra y actualizar la integración.
¿Cuántos registros devuelve cada página?
El máximo es 100. Si pides más, la API lo limita a ese tope; hay que recorrer con el cursor.
¿Hay endpoint para los movimientos bancarios de todas las cuentas?
No. Tienes que listar primero treasury/accounts y después pedir los movimientos de cada cuenta por su id.
¿Puedo escribir además de leer?
Sí, la API permite crear y modificar registros en muchas áreas. Para análisis financiero, sin embargo, lo recomendable es usar una clave de solo lectura.
¿Y si no quiero programar nada de esto?
Es exactamente lo que resuelve una capa ya construida: conectas la clave una vez y los estados financieros llegan hechos, sin mantener integraciones.

Conclusión

La API de Holded cubre prácticamente toda la plataforma, pero para análisis financiero el mapa es pequeño: plan de cuentas, asientos, documentos, contactos y tesorería. Con esos cinco bloques tienes balance, cuenta de resultados, ratios y previsión de caja.

El resto de los 305 endpoints existen y son útiles, pero no los necesitas para empezar. Lo que sí necesitas es controlar la paginación, los límites y las excepciones — que es donde se va el tiempo de cualquier integración.

Todo lo anterior, calculado sobre tu ERP y con cada partida desglosada hasta la subcuenta: así lo resuelve Numio.

La integración con Holded, ya construida

Numio se conecta a la API de Holded, mantiene la sincronización y convierte tus asientos en balance, cuenta de resultados, ratios y tesorería. Sin endpoints ni mantenimiento.

Prueba Numio 30 días gratis

Sin tarjeta y sin permanencia, desde 39€/mes. ¿Llevas la contabilidad de clientes? Reserva una demo para asesorías.

Scroll al inicio