Description
@mikiguillamon/n8n-nodes-holded
Community node de n8n para trabajar con la API v2 de Holded.
Qué incluye
- Autenticación por API key de Holded.
- Activación mediante licencia.
- Operaciones guiadas para recursos habituales:
- Operación
Custom API Requestpara cubrir cualquier endpoint de Holded sin esperar a que exista una acción dedicada en el nodo. - Compatible con el uso como herramienta en agentes de IA de n8n.
- Controles tipo nodos oficiales de n8n:
- Creación guiada de documentos comerciales:
– Contacts
– Products
– Services
– Documents
– Payments
– Projects
– Tasks
– Leads
– Bookings
– Accounting Accounts
– Return All y Limit en operaciones Get Many.
– Filtros guiados por recurso.
– Additional Query Parameters para parámetros no modelados.
– Fields para cuerpos simples sin escribir JSON.
– JSON avanzado opcional para casos con estructuras anidadas.
– Facturas, presupuestos, pedidos, albaranes, compras y abonos.
– Contacto, fechas, moneda, numeración, método de pago, etiquetas y líneas de documento.
Enfoque
La API de Holded es amplia y cambia con el tiempo. Este paquete combina dos capas:
1. Operaciones guiadas para los flujos más frecuentes.
2. Una petición API personalizada para cubrir el resto de endpoints y casos avanzados.
Con esto el nodo es usable desde el primer momento y, a la vez, no se queda corto cuando Holded añade o ajusta endpoints.
Credenciales
La versión 2 del nodo autentica las peticiones con Authorization: Bearer . Genera una clave en Settings > API de Holded con los permisos necesarios para los recursos que utilices. El test de credenciales consulta un contacto como máximo y requiere permiso de lectura de contactos.
Los nodos guardados como versión 1 conservan la cabecera key y las rutas de la API antigua. El test de credenciales comprueba siempre el acceso a v2.
Además, este nodo requiere una licencia. En la versión actual, cualquier clave de licencia con 10 o más caracteres se considera válida. La validación está preparada para cambiarse más adelante a una comprobación contra un servidor externo.
Instalación en n8n
En una instancia self-hosted de n8n:
1. Ve a Settings > Community Nodes.
2. Selecciona Install.
3. Introduce el paquete @mikiguillamon/n8n-nodes-holded.
4. Acepta el aviso de instalación de código no verificado.
5. Reinicia n8n si tu despliegue lo requiere.
Después, busca el nodo Holded en el editor de workflows.
Desarrollo local
npm install
npm test
npm run lint
npm run build
npm run dev
Notas
https://api.holded.com.usableAsTool, por lo que puede usarse como herramienta en agentes de IA dentro de n8n.Fields para payloads simples y Advanced Body JSON para no limitar los campos que expone Holded en cada recurso.Advanced Body JSON.Get Many recorre las páginas por cursor y devuelve cada registro como un item de n8n. Return All recupera todos los resultados; Limit se aplica al total, aunque requiera varias páginas. Pagination Options permite indicar el cursor inicial y un tamaño de página de hasta 100 registros.Custom API Request.Pasar de v1 a v2
Los nodos nuevos usan la versión 2. Los workflows existentes conservan su versión 1 para evitar cambios automáticos en sus rutas, payloads y resultados. Para migrar un workflow, actualiza la versión del nodo desde el editor de n8n o añade un nodo Holded nuevo y revisa sus campos y las expresiones que consumen su salida.
/api/v2/invoices, /api/v2/estimates, /api/v2/purchases, etc.contactid, duedate y start_date. Los campos guiados hacen la conversión; Fields y Advanced Body/Query JSON deben usar directamente los nombres y tipos de v2.Contact ID y al menos una línea; los tickets (Sales Receipt) permiten omitir el contacto. Ya no se crea un contacto a partir de sus datos de facturación.siva21, en lugar de porcentajes. Usa las claves de compra correspondientes en documentos de compra. Consulta las claves disponibles con GET /api/v2/taxes mediante Custom API Request.Approve guarda primero el documento y solicita después su aprobación. Si la aprobación falla, el error incluye el ID guardado para poder continuar sin crear un duplicado./api/v2/purchase-refunds y se crean o consultan en /api/v2/purchases/refund. La documentación actual no ofrece actualización ni borrado para ellos.Custom API Request acepta rutas desde /api/v2/, admite cuerpos en DELETE y conserva la respuesta completa, incluidos items, cursor y has_more. La paginación de las peticiones personalizadas es manual.Ejemplo de Advanced Body JSON para crear una factura:
{
"contactid": "IDDEL_CONTACTO",
"date": "2026-10-15",
"items": [
{ "name": "Consultoría", "price": 100, "units": 1, "taxes": ["siva21"] }
]
}
npm test compila el paquete y ejecuta pruebas locales de peticiones y respuestas simuladas. Estas pruebas no realizan operaciones contra una cuenta real de Holded.


