Meet us at Rethink! Accounting / CFO on 20.-21. April in Frankfurt

How to Integrate Holded API

Holded is a cloud ERP and accounting platform widely used by SMEs in Spain, serving over 80,000 companies with invoicing, accounting, inventory, CRM, and HR in one platform.

This article covers the key technical challenges when building a Holded integration, including API key authentication, a shared document endpoint model, multi-module architecture, and Spanish IVA VAT logic, and how Maesn abstracts them.

Author Image

Dr. Themo Voswinckel

March 30, 2026

Holded API Integration with Maesn

Key Takeaways

  • Holded uses API key authentication. A static API key is passed in the key header on every request.
  • All documents, invoices, orders, credit notes, receipts, purchases, share a single endpoint. The docType parameter determines which document type is created or retrieved.
  • The API is split across multiple modules with separate base paths. Invoice API, CRM API, Projects API, Team API, and Accounting API each have their own URL structure. A sync that only targets one module misses data in the others.
  • Spanish IVA VAT rates and tax codes are tenant-specific. Tax IDs must be fetched per tenant before creating documents. The Spanish IVA system with 21%, 10%, 4%, and 0% rates maps to tenant-configured tax objects, not simple percentage values.
  • The API is only available on paid Holded plans. Free plan customers cannot use the API
  • Maesn handles all of the above. One unified API: API key management, docType routing, module normalization, and IVA tax mapping are all abstracted in the Maesn backend.

Holded API Integration Uses API Key Authentication

Most modern accounting APIs use OAuth 2.0, which provides per-user authorization, token expiry, and revocation flows. The Holded API integration takes a simpler approach: a static API key that is generated in the Holded account settings and passed in the key header on every request.

GET https://api.holded.com/api/invoicing/v1/contacts
Headers:  
      key: your_api_key  
      Content-Type: application/json

For the integration, this is straightforward, but it creates some challenges:

  • Each customer must generate an API key in their Holded account and provide it to your system — there is no OAuth flow that automates this
  • There is no token expiry or automatic rotation, a compromised key requires manual replacement
  • The API key provides full access to the account, there is no scope-based access control to limit what your Holded API integration can read or write
  • Only account Owners or Administrators can generate API keys; users with custom roles cannot

Maesn's Unified Auth Abstracts Holded API Key Management: No Raw Key Handling Required

Maesn handles API key management for the Holded API integration as part of its unified authentication layer. Your customers connect their Holded account once through Maesn's onboarding flow — which guides them through key generation and securely stores it per tenant. You never handle raw API keys or build custom key collection UIs yourself.

The Holded API Integration Document Model - docType Controls What You Create or Retrieve

In most accounting APIs, invoices, credit notes, purchase orders, and sales receipts have separate endpoints. In the Holded API integration, all of these document types share a single endpoint, with the document type controlled by a docType path parameter:

GET  https://api.holded.com/api/invoicing/v1/documents/{docType}
POST https://api.holded.com/api/invoicing/v1/documents/{docType}

The valid docType values are:

docType Document Type
invoiceSales invoice
salesreceiptSales receipt
creditnoteCredit note
salesorderSales order
proformProforma invoice
waybillDelivery note
estimateEstimate / quote
purchasePurchase invoice
purchaseorderPurchase order
purchaserefundPurchase refund

Using the wrong docType when creating a document produces the wrong document type without an error.

Maesn Maps Document Types to Holded's docType Model - Correct Routing Without Configuration

Maesn's Holded API integration normalizes the document type model into its common data model. You work with unified document concepts - invoices, credit notes, purchases - and Maesn maps these to the correct docType for each operation. You never manage docType routing directly.

The Holded API Integration Is Split Across Five Separate Modules With Different Base Paths

The Holded API integration is not a single API, it is a collection of module-specific APIs, each with its own base path and its own set of endpoints:

Module Base Path Covers
Invoice API/api/invoicing/v1/Contacts, documents, products, taxes, payments, warehouses, numbering series
Accounting API/api/accounting/v1/Daily ledger entries, chart of accounts
CRM API/api/crm/v1/Funnels, leads, events, bookings
Projects API/api/projects/v1/Projects, tasks, time tracking
Team API/api/team/v1/Employees, employee time tracking

For a product that needs to sync financial data across invoicing and accounting, or integrate projects with invoicing, you must build and maintain requests across multiple module paths. There is no single root endpoint in the Holded API integration that gives you a unified view of all data. Each module also has its own endpoint structure and response format conventions.

Maesn Unifies All Holded API Modules Behind One Surface - No Module Path Management

All Holded API module paths are handled in the Maesn backend. Your integration makes standard calls to Maesn's unified endpoints — Maesn resolves the correct module and path for each operation automatically.

Spanish IVA in the Holded API Integration: Tax IDs Are Tenant-Configured and Must Be Resolved Before Every Write

Holded is built primarily for the Spanish market, where VAT is called IVA (Impuesto sobre el Valor Añadido). Spain operates a four-tier IVA system:

Rate Applies To
21%Standard rate — most goods and services
10%Reduced rate — food, hospitality, transport, some cultural services
4%Super-reduced rate — basic food, books, medicines, newspapers
0%Exports, intra-EU B2B supplies

In the Holded API integration, taxes are not passed as plain percentage values when creating documents. Instead, you reference a tax object ID — fetched via GET /api/invoicing/v1/taxes — that represents the configured tax in the tenant's account. Each tax object contains the rate, the tax name, and any additional configuration the company has set up.

This means: before creating any invoice or document with tax, your Holded API integration must first fetch the available taxes for that tenant and resolve the correct tax ID. The tax objects available differ per tenant — a company that only operates domestically may have different tax configurations than one that handles intra-EU or export transactions.

Additionally, the numSerieId — the numbering series identifier — must also be resolved per tenant before creating invoices. Spanish businesses typically have separate numbering series for different document types, and these are tenant-configured in Holded.

Maesn Resolves IVA Tax IDs and Numbering Series Per Tenant

Via Maesn, tax configurations and numbering series are mapped during onboarding and applied automatically in all subsequent Holded API operations. Your integration expresses tax intent once in Maesn's common data model — Maesn handles tenant-specific IVA resolution automatically.

The Holded API Integration Requires a Paid Plan and Administrator Access

This is a practical constraint that affects how you design your Holded API integration onboarding flow: the Holded API is not available on the free plan. Only customers on active paid Holded plans can generate API keys and connect to the API.

Additionally, within paid plans, only users with Owner or Administrator roles can generate or view API keys. Users with custom roles cannot access the API key management interface — even if they are on a paid plan.

For SaaS products onboarding Holded customers, this means your connection flow must account for these constraints. A customer on a free plan who attempts to connect will be unable to generate an API key. A customer on a paid plan with a custom role faces the same limitation.

Maesn Guides Your Customers Through Holded's Plan and Role Requirements - No Onboarding Surprises

Maesn's onboarding flow accounts for Holded's paid plan and admin role requirements, so your customers are guided correctly from the start of the Holded API integration setup.

Why Teams Use Maesn for Their Holded API Integration

Building a direct Holded API integration means managing per-tenant API keys, routing every document request through the correct docType, navigating five separate module paths, resolving tenant-specific IVA tax IDs and numbering series before every write operation, and handling plan and role constraints during onboarding — all before you ship your first feature.

Maesn abstracts this entire surface into a single unified API. You integrate once to Maesn and your product automatically works with Holded and every other accounting and ERP system in the Maesn portfolio, without system-specific branches in your code.

Check the Maesn documentation for Holded or talk to the Maesn team to get started.

About the author

Themo is CEO and Co-Founder of Maesn. With years in strategy consulting — spanning requirements engineering for complex software landscapes, ERP and accounting software selections, and end-to-end integration projects — he holds a Dr.-Ing. with a focus on ERP-to-SaaS transformation. He co-founded Maesn to make system integration effortless.

Dr. Themo Voswinckel

Co-Founder

Frequently asked
questions

You have more questions? We are looking forward hearing from you - book a meeting now!

How does authentication work in the Holded API?

Holded uses a static API key instead of OAuth 2.0. Each customer must generate a key in their account settings and share it manually. There is no token expiry, no scope-based access control, and only Owners or Administrators can generate keys. Maesn handles API key collection and storage securely as part of its onboarding flow, so you never manage raw keys yourself.

What is the docType model and why does it matter?

All sales and purchase documents in Holded share a single endpoint, with the document type controlled by a docType parameter. Using the wrong value creates the wrong document type without returning an error. Maesn maps unified document concepts like invoices and credit notes to the correct docType automatically.

Why does the Holded API have multiple base paths?

Holded is split across five separate module APIs, each with its own base path and endpoint structure. Syncing data across modules requires managing multiple request paths. Maesn resolves the correct module and path for every operation behind the scenes.

How does Spanish IVA tax handling work in Holded?

Tax values are not passed as plain percentages. Instead, you must fetch tenant-specific tax object IDs before every write operation. Numbering series IDs must also be resolved per tenant. Maesn handles both during onboarding and applies them automatically to all subsequent operations.

Are there plan or role requirements to use the Holded API?

Yes. The API is only available on paid Holded plans, and only users with Owner or Administrator roles can generate API keys. Maesn's onboarding flow accounts for these constraints and guides your customers through the setup correctly from the start.

Kickstart your Integration Journey now