List documents of a specific type (Holded API v2). Cursor-paginated: pass the previous response nextCursor as cursor. Response fields are snake_case; amounts are strings with decimal comma. NOTE: purchaserefund is not listable in v2 — only creation is supported (POST /purchases/refund).
ParameterslimitcursorfieldsdocTyperequiredsummary
Create a new document (invoice, estimate, purchase, etc.). By default the document is approved (finalized) so it appears in the Holded UI; pass approveDoc:false to create a draft instead. Set the expense/income account at document level via `expAccountId` (it cascades to all lines); a per-line `account` is rejected because Holded ignores it. On SALES documents an auto-incrementing numbering series may OVERRIDE the requested `invoiceNum` — the tool re-reads the created document and returns a `_warnings` note if that happened. On purchases the supplier number in `invoiceNum` is preserved. `retention` (IRPF) is accepted on sales but rejected on purchases (Holded ignores it there).
ParametersdaterequireditemsrequirednotesdocTyperequiredcurrencycontactIdrequiredretentionapproveDocinvoiceNumexpAccountIdsalesChannelId
Get a specific document by ID
ParametersdocTyperequireddocumentIdrequired
Get the payments registered against a specific document via the Holded API v2 GET endpoint. Returns `{ documentId, paymentsDetail }` when the v2 response includes a `paymentsDetail` field; otherwise returns the whole document (v2 field name may differ from v1). Unlike list_payments — which is filtered to the ACTIVE fiscal year — this surfaces payments from ANY year, so use it for cross-year payment audits. Read-only.
ParametersdocTyperequireddocumentIdrequired
Update an existing document
ParametersdateitemsnotesdocTyperequiredcurrencycontactIdretentiondocumentIdrequiredinvoiceNumexpAccountIdsalesChannelId
Delete a document
ParametersdocTyperequireddocumentIdrequired
Register a payment for a document (Holded API v2). Supported docTypes: invoice, salesreceipt, creditnote, receiptnote, purchase — others throw an unsupported error. IMPORTANT: this may AUTO-APPROVE the document as a side effect (status 0→1). `paymentmethod` is the payment-method catalog id (from list_payment_methods), NOT a bank/treasury id. To link the payment to a bank account, pass `bankId`: the /payments endpoint can't set it, so the tool performs a second step (PUT /payments/{id}) and reports the outcome in `_warnings`.
ParametersdateamountrequiredbankIddocTyperequireddocumentIdrequiredtreasuryIdpaymentmethod
Send a document by email (Holded API v2). Supported docTypes: invoice, salesreceipt, creditnote, receiptnote, estimate, proform, salesorder, waybill, purchaseorder. purchase and purchaserefund are not supported in v2.
ParametersemailsdocTyperequiredmessagesubjectdocumentIdrequired
Get the PDF of a document as base64-encoded binary (Holded API v2). Returns { contentType, base64, bytes, filename }. Supported docTypes: invoice, salesreceipt, creditnote, receiptnote, estimate, proform, salesorder, waybill, purchaseorder. purchase is NOT supported — GET /purchases/{id}/pdf returns 404 for all purchases. purchaserefund has no CRUD support in v2.
ParametersdocTyperequireddocumentIdrequired
Ship all items of a document (Holded API v2). salesorder → POST /sales-orders/{id}/ship. purchaseorder → POST /purchase-orders/{id}/receive (receive from supplier). All other docTypes are not supported in v2.
ParametersdocTyperequireddocumentIdrequired
Ship specific items by line (Holded API v2). salesorder only → POST /sales-orders/{id}/ship-by-lines. purchaseorder line-level receive is UNVERIFIED in v2 and throws unsupported. All other docTypes are not supported.
ParameterslinesrequireddocTyperequireddocumentIdrequired
Get shipped/received units for a document (Holded API v2). salesorder → GET /sales-orders/{id}/shipped-items. purchaseorder → GET /purchase-orders/{id}/received-items. All other docTypes are not supported.
ParametersdocTyperequireddocumentIdrequired
Attach a file to a document (Holded API v2). POST ${docBase}/{id}/attachments multipart. Supported for all docTypes except purchaserefund (v2 has no purchase-refund CRUD beyond creation).
ParametersdocTyperequiredfilenamerequireddocumentIdrequiredfileBase64required
Update tracking information for a document (Holded API v2). Supported docTypes: salesorder (PUT /sales-orders/{id}/tracking) and waybill (PUT /waybills/{id}/tracking). All other types have NO EQUIVALENT in v2 and will throw an unsupported error. NOTE: this is a discrepancy with the task brief (which stated "all types unsupported") — the normative annex tables show salesorder and waybill do have tracking in v2.
ParameterscarrierdocTyperequireddocumentIdrequiredtrackingNumber
Update pipeline stage for a document (Holded API v2). Uses PUT — verb changed from POST in v1. Supported for all docTypes except purchaserefund (v2 limitation). Route: PUT ${docBase}/{id}/pipeline.
ParametersdocTyperequiredstageIdrequireddocumentIdrequiredpipelineIdrequired
List available payment methods (Holded API v2). GET /payment-methods. Returns an array of {id, name, type, status, isDefault, bankingAccountId} — the v2 {items:[...]} envelope is normalized to a bare array.
Takes no parameters.
List contacts (Holded API v2). Cursor-paginated: pass the previous response nextCursor as cursor. Response fields are snake_case; amounts are strings with decimal comma.
Parameterslimitcursorfieldssummary
Create a new contact (Holded API v2)
ParameterscodenamerequirednotetypeemailphonetradenamebillAddresscontactPersons
Get a specific contact by ID (Holded API v2)
ParameterscontactIdrequired
Update an existing contact (Holded API v2)
ParameterscodenamenotetypeemailphonecontactIdrequiredtradenamebillAddresscontactPersons
Delete a contact (Holded API v2)
ParameterscontactIdrequired
Get list of attachments for a contact (Holded API v2). Use the filenames from the response with get_contact_attachment.
ParameterscontactIdrequired
Get a specific attachment from a contact by filename (Holded API v2). BREAKING CHANGE from v1: the path parameter changed from attachmentId (numeric/UUID) to filename (string). Obtain filenames from list_contact_attachments first.
ParametersfilenamerequiredcontactIdrequired
List products (Holded API v2). Cursor-paginated: pass the previous response nextCursor as cursor. Server-paginated; use limit to control page size. Response fields are snake_case; amounts are strings with decimal comma.
Parameterslimitcursorfieldssummary
Create a new product (Holded API v2)
ParametersskutaxkindnamerequiredpricestockbarcodecostPricedescription
Get a specific product by ID (Holded API v2)
ParametersproductIdrequired
Update an existing product (Holded API v2)
ParametersskutaxnamepricebarcodecostPriceproductIdrequireddescription
Delete a product (Holded API v2)
ParametersproductIdrequired
Get the main image of a product (Holded API v2)
ParametersproductIdrequired
List all images of a product (Holded API v2)
ParametersproductIdrequired
get_product_secondary_image
Get a secondary image of a product (Holded API v2)
ParametersimageIdrequiredproductIdrequired
Update stock quantity for a product (Holded API v2). BREAKING CHANGE from v1: `warehouse_id` is now required; `stock_variation` replaces `units`; optional `variant_id` and `description` added.
ParametersproductIdrequiredvariant_iddescriptionwarehouse_idrequiredstock_variationrequired
List all treasury accounts (Holded API v2). Cursor-paginated: pass the previous response nextCursor as cursor. Response fields are snake_case; amounts are strings with decimal comma. WARNING: the `balance` field is a STATIC opening figure, not a live balance derived from transactions — do NOT rely on it for reconciliation or to compute the current cash position. Overlaps with list_bank_accounts/get_bank_account/create_bank_account (official treasury tools); consolidation planned for 2.1.
Parameterslimitcursorfieldssummary
Create a new treasury account (Holded API v2). Overlaps with list_bank_accounts/get_bank_account/create_bank_account (official treasury tools); consolidation planned for 2.1.
Parametersbicibannamerequiredbalance
Get a specific treasury account by ID (Holded API v2). WARNING: the `balance` field is a STATIC opening figure set on the account, not a live balance computed from transactions — do NOT use it for reconciliation or as the current cash position. Overlaps with list_bank_accounts/get_bank_account/create_bank_account (official treasury tools); consolidation planned for 2.1.
ParameterstreasuryIdrequired
List expenses accounts (Holded API v2). Cursor-paginated: pass the previous response nextCursor as cursor. Response fields are snake_case; amounts are strings with decimal comma. Each account has `id` (Holded internal id), `name`, and `accountNum` (the PGC account number, e.g. 62900000). NOTE: this endpoint only returns expense/purchase accounts (PGC group 6). Income accounts (group 7, e.g. 700/705/759) are NOT listed here — fetch the full chart via get_chart_of_accounts, or read a known account by id via get_expenses_account.
Parameterslimitcursorfieldssummary
Create a new expenses account (Holded API v2)
Parameterscodenamerequired
Get a single account by its Holded id (Holded API v2). Despite the "expenses" name, this endpoint serves ANY account (including income/group-7 accounts that list_expenses_accounts omits) when you already know its id.
ParametersaccountIdrequired
Update an existing expenses account (Holded API v2)
ParameterscodenameaccountIdrequired
Delete an expenses account (Holded API v2)
ParametersaccountIdrequired
List numbering series for a specific document type (Holded API v2). Cursor-paginated: pass the previous response nextCursor as cursor. Response fields are snake_case; amounts are strings with decimal comma.
ParameterslimitcursorfieldsdocTyperequiredsummary
Create a new numbering serie (Holded API v2)
ParametersnamerequiredprefixdocTyperequirednextNumber
Update an existing numbering serie (Holded API v2)
ParametersnameprefixdocTyperequiredserieIdrequirednextNumber
Delete a numbering serie (Holded API v2)
ParametersdocTyperequiredserieIdrequired
List all sales channels (Holded API v2). Cursor-paginated: pass the previous response nextCursor as cursor. Response fields are snake_case; amounts are strings with decimal comma. Supports field filtering to reduce response size.
Parameterslimitcursorfieldssummary
Create a new sales channel (Holded API v2)
Parametersnamerequired
Get a specific sales channel by ID (Holded API v2)
ParameterschannelIdrequired
Update an existing sales channel (Holded API v2)
ParametersnamechannelIdrequired
Delete a sales channel (Holded API v2)
ParameterschannelIdrequired
List all payments (Holded API v2). Cursor-paginated: pass the previous response nextCursor as cursor. Response fields are snake_case; amounts are strings with decimal comma. NOTE: this endpoint is filtered to the ACTIVE fiscal year, so payments made in a prior year do NOT appear here even if they are linked to documents. For cross-year payment audits, read a document's payments via get_document_payments (the document `paymentsDetail`). Use start_date/end_date (YYYY-MM-DD) to filter by date — live-verified against v2.
Parameterslimitcursorendtmpfieldssummaryend_datestarttmpstart_date
Create a new payment (Holded API v2)
Parametersdaysnamerequired
Get a specific payment by ID (Holded API v2)
ParameterspaymentIdrequired
Update an existing payment (Holded API v2). IMPORTANT: Holded's PUT /payments/{id} REPLACES the record rather than merging, so any field omitted from the body is blanked. To prevent that, this tool first re-reads the current payment and merges your changes over it, preserving fields you did not pass (contactId, bankId, date, ...).
ParametersdatedaysnameamountbankIdcontactIdpaymentIdrequired
Delete a payment (Holded API v2)
ParameterspaymentIdrequired
Get all available taxes (Holded API v2). The v2 /taxes endpoint returns the complete tax list in one response (no cursor, no pagination). Supports `fields` to select specific fields and `summary` to return only the item count. Amounts are strings with decimal comma. Each tax has: `key` (the stable identifier, e.g. "s_iva_21"/"p_iva_21" — this is the value used in a document line's `taxes[]`), `id` (mirrors `key`), `name`, `amount` (the percentage as a string, e.g. "21"), `scope` ("sales" or "purchase"), `group` (e.g. "iva"), and `type`.
Parametersfieldssummary
List contact groups (Holded API v2). Cursor-paginated: pass the previous response nextCursor as cursor. Response fields are snake_case; amounts are strings with decimal comma.
Parameterslimitcursorfieldssummary
Create a new contact group (Holded API v2)
Parametersnamerequired
Get a specific contact group by ID (Holded API v2)
ParametersgroupIdrequired
Update an existing contact group (Holded API v2)
ParametersnamegroupIdrequired
Delete a contact group (Holded API v2)
ParametersgroupIdrequired
List all remittances (Holded API v2). Cursor-paginated: pass the previous response nextCursor as cursor. Response fields are snake_case; amounts are strings with decimal comma. NOTE: namespace relocated from /remittances to /treasury/remittances in v2.
Parameterslimitcursorfieldssummary
Get a specific remittance by ID (Holded API v2). NOTE: route relocated to /treasury/remittances/{id} in v2.
ParametersremittanceIdrequired
List all services (Holded API v2). Cursor-paginated: pass the previous response nextCursor as cursor. Response fields are snake_case; amounts are strings with decimal comma. Supports field filtering to reduce response size.
Parameterslimitcursorfieldssummary
Create a new service (Holded API v2)
Parametersskutaxnamerequiredpricedescription
Get a specific service by ID (Holded API v2)
ParametersserviceIdrequired
Update an existing service (Holded API v2)
ParametersskutaxnamepriceserviceIdrequireddescription
Delete a service (Holded API v2)
ParametersserviceIdrequired
List all warehouses (Holded API v2). All warehouses are returned in a single call (no cursor pagination). Supports field filtering and summary mode.
Parametersfieldssummary
Create a new warehouse (Holded API v2)
ParameterscitynamerequiredaddresscountryprovincepostalCode
List all products stock in a specific warehouse (Holded API v2). Cursor-paginated: pass the previous response nextCursor as cursor. Server-paginated; use limit to control page size. Supports field filtering to reduce response size.
ParameterslimitcursorfieldssummarywarehouseIdrequired
Get a specific warehouse by ID (Holded API v2)
ParameterswarehouseIdrequired
Update an existing warehouse (Holded API v2). BREAKING CHANGE from v1: HTTP verb changed from PUT to PATCH.
ParameterscitynameaddresscountryprovincepostalCodewarehouseIdrequired
Delete a warehouse (Holded API v2)
ParameterswarehouseIdrequired
List time-tracking entries across all Holded projects (Projects API v2). Returns a cursor-paginated flat list of entries; pass the previous `nextCursor` as `cursor` to fetch the next page. Each entry contains timeId, duration (seconds), date (Unix seconds), approved (0/1), projectId, and projectName. The approvedOnly, startDate, and endDate filters are applied client-side on the current page — use pagination to iterate over the full dataset. Read-only.
ParameterslimitcursorendDatestartDateapprovedOnly
list_project_times_by_project
List time-tracking entries for a single Holded project (Projects API v2). Returns a cursor-paginated flat list of entries for the given projectId. Pass the previous `nextCursor` as `cursor` to fetch the next page. The approvedOnly, startDate, and endDate filters are applied client-side on the current page. Read-only.
ParameterslimitcursorendDateprojectIdrequiredstartDateapprovedOnly
Get a single time-tracking entry by project ID and time-tracking ID (Projects API v2). Read-only.
ParametersprojectIdrequiredtimeTrackingIdrequired
Get accounting accounts (Holded API v2, GET /accounting-accounts). Returns every account with `num` (PGC number, e.g. 40000000), `name`, `group`, `debit`, `credit`, and `balance`. Unlike `list_expenses_accounts` (group-6 only), this includes all groups (assets, liabilities, income, expenses). Cursor-paginated: pass `nextCursor` from the previous response as `cursor`. Optional annex filters: `archived` (include archived accounts), `start_date`/`end_date` (ISO 8601, filter by activity period), `include_empty` (include zero-balance accounts). See also: `list_accounting_accounts` in ledger tools — both tools target the same v2 endpoint; consolidation is planned for release 2.1. Read-only.
Parameterslimitcursorarchivedend_datestart_dateinclude_empty
Get ledger entries / journal (asientos) for a date range (Holded API v2, GET /ledger-entries). Returns one row per ledger line with entryNumber, line, timestamp, type (collect/payment/purchase/…), description, account (PGC num), debit, and credit. This is the authoritative source for balance-sheet and tax-return figures.
Date arguments (at least one form of each bound is required — the v2 API returns 422 without both):
• Primary form : `start_date` / `end_date` — ISO 8601 date strings (YYYY-MM-DD)
• Legacy form : `starttmp` / `endtmp` — Unix timestamps in seconds; converted automatically to ISO
If both forms are supplied for the same bound, the ISO string takes precedence.
Cursor-paginated: pass `nextCursor` from a previous response as `cursor` to retrieve subsequent pages. Large date ranges may require multiple pages. Set `groupByEntry` to nest lines into full double-entry entries with per-entry debit/credit totals (applied page-scoped).
See also: `list_ledger_entries` in ledger tools — both tools target the same v2 endpoint. Read-only.
Parameterslimitcursorendtmpend_datestarttmpstart_dategroupByEntry
List employees (Holded API v2, section Equipo y RRHH). Cursor-paginated: pass the previous response `nextCursor` as `cursor` to fetch the next page.
Parameterslimitcursor
Get a single employee by ID (Holded API v2).
ParametersemployeeIdrequired
WRITE: creates a real employee record in Holded (API v2). `data` is sent verbatim as the request body — see https://www.holded.com/es/desarrolladores/referencia-api (Empleados → Crear) for the payload fields (name, email, etc.).
Parametersdatarequired
WRITE: updates a real employee record in Holded (API v2). `data` is sent verbatim as the request body — see https://www.holded.com/es/desarrolladores/referencia-api (Empleados → Actualizar).
ParametersdatarequiredemployeeIdrequired
DESTRUCTIVE: permanently deletes an employee record in Holded (API v2). This cannot be undone.
ParametersemployeeIdrequired
Get the contract details of an employee (Holded API v2). A 404 response means the employee has no contract configured in Holded, not that the employee ID is wrong.
ParametersemployeeIdrequired
WRITE: updates an employee's contract in Holded (API v2) — affects real HR/payroll data. `data` is sent verbatim as the request body — see https://www.holded.com/es/desarrolladores/referencia-api (Empleados → Actualizar contrato).
ParametersdatarequiredemployeeIdrequired
WRITE: registers a clock-in for an employee in Holded time tracking (API v2). Affects real working-time records.
ParametersemployeeIdrequired
WRITE: registers a clock-out for an employee in Holded time tracking (API v2).
ParametersemployeeIdrequired
WRITE: starts a pause in the current working session of an employee (Holded API v2).
ParametersemployeeIdrequired
WRITE: ends the current pause of an employee working session (Holded API v2).
ParametersemployeeIdrequired
List time-tracking records (Holded API v2). Without `employeeId` lists all records (/employee-times); with `employeeId` lists only that employee (/employees/{id}/times). Cursor-paginated.
ParameterslimitcursoremployeeId
Get a single time-tracking record by ID (Holded API v2).
ParameterstimeIdrequired
WRITE: creates a manual time-tracking record for an employee (Holded API v2). `data` is sent verbatim as the request body — see https://www.holded.com/es/desarrolladores/referencia-api (Control horario → Crear registro).
ParametersdatarequiredemployeeIdrequired
WRITE: updates a time-tracking record (Holded API v2). `data` is sent verbatim as the request body — see https://www.holded.com/es/desarrolladores/referencia-api (Control horario → Actualizar).
ParametersdatarequiredtimeIdrequired
DESTRUCTIVE: permanently deletes a time-tracking record in Holded (API v2). This cannot be undone.
ParameterstimeIdrequired
List payroll salary records (Holded API v2, requires scope accounting:payrolls.read). Each record has employee info, earnings/deductions lines, totals and payment status (PENDING, PAID, PARTIALLY_PAID). Cursor-paginated.
Parameterslimitcursor
Get a payroll salary record by ID (Holded API v2, scope accounting:payrolls.read). Returns line-by-line earnings and deductions, accounting accounts, totals and payment status.
ParameterssalaryRecordIdrequired
WRITE: creates a real payroll record in Holded (API v2) — affects accounting and HR data. Use get_salary_record_defaults first to obtain a valid base payload. `data` is sent verbatim as the request body — see https://www.holded.com/es/desarrolladores/referencia-api (Registros de nómina → Crear).
Parametersdatarequired
WRITE: updates a payroll record in Holded (API v2) — affects accounting and HR data. `data` is sent verbatim as the request body — see https://www.holded.com/es/desarrolladores/referencia-api (Registros de nómina → Actualizar).
ParametersdatarequiredsalaryRecordIdrequired
DESTRUCTIVE: permanently deletes a payroll record in Holded (API v2). This cannot be undone and affects accounting data.
ParameterssalaryRecordIdrequired
get_salary_record_defaults
Get the default data for creating a payroll record (Holded API v2). Useful as a base payload for create_salary_record.
Takes no parameters.
List journal/ledger entries (Holded API v2). Cursor-paginated: pass the previous response `nextCursor` as `cursor`. Optionally filter by `start_date`/`end_date` (ISO 8601, e.g. `2025-01-01`) — the v2 endpoint returns 422 if neither date is provided. For the read-only daily-ledger tool with groupByEntry support and Unix-timestamp backward compat see get_daily_ledger.
Parameterslimitcursorend_datestart_date
WRITE: creates a real journal entry in Holded accounting (API v2). Incorrect entries directly distort the company books — double-check accounts and amounts. `data` is sent verbatim as the request body — see https://www.holded.com/es/desarrolladores/referencia-api (Contabilidad → Crear asiento).
Parametersdatarequired
List accounting accounts (Holded API v2). Cursor-paginated. For the v1 read-only chart of accounts see get_chart_of_accounts.
Parameterslimitcursor
create_accounting_account
WRITE: creates a real accounting account in the Holded chart of accounts (API v2). `data` is sent verbatim as the request body — see https://www.holded.com/es/desarrolladores/referencia-api (Contabilidad → Crear cuenta).
Parametersdatarequired
List treasury bank accounts (Holded API v2, official endpoint). Cursor-paginated.
Parameterslimitcursor
Get a treasury bank account by ID (Holded API v2).
ParametersaccountIdrequired
WRITE: creates a real treasury bank account in Holded (API v2). `data` is sent verbatim as the request body — see https://www.holded.com/es/desarrolladores/referencia-api (Tesorería → Crear cuenta).
Parametersdatarequired
WRITE: updates a treasury bank account in Holded (API v2). `data` is sent verbatim as the request body — see https://www.holded.com/es/desarrolladores/referencia-api (Tesorería → Actualizar cuenta).
ParametersdatarequiredaccountIdrequired
DESTRUCTIVE: permanently deletes a treasury bank account in Holded (API v2). Prefer archive_bank_account to keep history. This cannot be undone.
ParametersaccountIdrequired
WRITE: archives a treasury bank account in Holded (API v2). Reversible alternative to delete_bank_account.
ParametersaccountIdrequired
List bank movements of a treasury account (Holded API v2, official endpoint — replaces the experimental internal banking tools). Cursor-paginated.
ParameterslimitcursoraccountIdrequired
WRITE: creates a real bank movement in a treasury account (Holded API v2). `data` is sent verbatim as the request body — see https://www.holded.com/es/desarrolladores/referencia-api (Tesorería → Crear movimiento).
ParametersdatarequiredaccountIdrequired
WRITE: reconciles a bank movement against documents/entries (Holded API v2, official endpoint — replaces the experimental reconcile_bank_transaction from the internal API when v2 is enabled). `data` is sent verbatim as the request body — see https://www.holded.com/es/desarrolladores/referencia-api (Tesorería → Conciliar).
ParametersdatarequiredaccountIdrequiredmovementIdrequired
List cash movements of a treasury account (Holded API v2). Cursor-paginated. This endpoint applies to cash-type treasury accounts only; bank and card account types return 404.
ParameterslimitcursoraccountIdrequired
List cashflow invoicing forecasts (Holded API v2). Cursor-paginated.
Parameterslimitcursor
Get a cashflow invoicing forecast by ID (Holded API v2).
ParametersforecastIdrequired
create_invoicing_forecast
WRITE: creates an invoicing forecast in Holded cashflow (API v2). `data` is sent verbatim as the request body — see https://www.holded.com/es/desarrolladores/referencia-api (Tesorería → Previsiones).
Parametersdatarequired
update_invoicing_forecast
WRITE: updates an invoicing forecast in Holded cashflow (API v2). `data` is sent verbatim as the request body — see https://www.holded.com/es/desarrolladores/referencia-api (Tesorería → Previsiones).
ParametersdatarequiredforecastIdrequired
delete_invoicing_forecast
DESTRUCTIVE: permanently deletes an invoicing forecast in Holded cashflow (API v2).
ParametersforecastIdrequired