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).
输入参数limitcursorfieldsdocType必填summary
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).
输入参数date必填items必填notesdocType必填currencycontactId必填retentionapproveDocinvoiceNumexpAccountIdsalesChannelId
Get a specific document by ID
输入参数docType必填documentId必填
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.
输入参数docType必填documentId必填
Update an existing document
输入参数dateitemsnotesdocType必填currencycontactIdretentiondocumentId必填invoiceNumexpAccountIdsalesChannelId
Delete a document
输入参数docType必填documentId必填
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`.
输入参数dateamount必填bankIddocType必填documentId必填treasuryIdpaymentmethod
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.
输入参数emailsdocType必填messagesubjectdocumentId必填
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.
输入参数docType必填documentId必填
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.
输入参数docType必填documentId必填
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.
输入参数lines必填docType必填documentId必填
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.
输入参数docType必填documentId必填
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).
输入参数docType必填filename必填documentId必填fileBase64必填
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.
输入参数carrierdocType必填documentId必填trackingNumber
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.
输入参数docType必填stageId必填documentId必填pipelineId必填
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.
无需输入参数。
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.
输入参数limitcursorfieldssummary
Create a new contact (Holded API v2)
输入参数codename必填notetypeemailphonetradenamebillAddresscontactPersons
Get a specific contact by ID (Holded API v2)
输入参数contactId必填
Update an existing contact (Holded API v2)
输入参数codenamenotetypeemailphonecontactId必填tradenamebillAddresscontactPersons
Delete a contact (Holded API v2)
输入参数contactId必填
Get list of attachments for a contact (Holded API v2). Use the filenames from the response with get_contact_attachment.
输入参数contactId必填
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.
输入参数filename必填contactId必填
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.
输入参数limitcursorfieldssummary
Create a new product (Holded API v2)
输入参数skutaxkindname必填pricestockbarcodecostPricedescription
Get a specific product by ID (Holded API v2)
输入参数productId必填
Update an existing product (Holded API v2)
输入参数skutaxnamepricebarcodecostPriceproductId必填description
Delete a product (Holded API v2)
输入参数productId必填
Get the main image of a product (Holded API v2)
输入参数productId必填
List all images of a product (Holded API v2)
输入参数productId必填
get_product_secondary_image
Get a secondary image of a product (Holded API v2)
输入参数imageId必填productId必填
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.
输入参数productId必填variant_iddescriptionwarehouse_id必填stock_variation必填
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.
输入参数limitcursorfieldssummary
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.
输入参数bicibanname必填balance
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.
输入参数treasuryId必填
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.
输入参数limitcursorfieldssummary
Create a new expenses account (Holded API v2)
输入参数codename必填
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.
输入参数accountId必填
Update an existing expenses account (Holded API v2)
输入参数codenameaccountId必填
Delete an expenses account (Holded API v2)
输入参数accountId必填
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.
输入参数limitcursorfieldsdocType必填summary
Create a new numbering serie (Holded API v2)
输入参数name必填prefixdocType必填nextNumber
Update an existing numbering serie (Holded API v2)
输入参数nameprefixdocType必填serieId必填nextNumber
Delete a numbering serie (Holded API v2)
输入参数docType必填serieId必填
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.
输入参数limitcursorfieldssummary
Create a new sales channel (Holded API v2)
输入参数name必填
Get a specific sales channel by ID (Holded API v2)
输入参数channelId必填
Update an existing sales channel (Holded API v2)
输入参数namechannelId必填
Delete a sales channel (Holded API v2)
输入参数channelId必填
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.
输入参数limitcursorendtmpfieldssummaryend_datestarttmpstart_date
Create a new payment (Holded API v2)
输入参数daysname必填
Get a specific payment by ID (Holded API v2)
输入参数paymentId必填
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, ...).
输入参数datedaysnameamountbankIdcontactIdpaymentId必填
Delete a payment (Holded API v2)
输入参数paymentId必填
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`.
输入参数fieldssummary
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.
输入参数limitcursorfieldssummary
Create a new contact group (Holded API v2)
输入参数name必填
Get a specific contact group by ID (Holded API v2)
输入参数groupId必填
Update an existing contact group (Holded API v2)
输入参数namegroupId必填
Delete a contact group (Holded API v2)
输入参数groupId必填
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.
输入参数limitcursorfieldssummary
Get a specific remittance by ID (Holded API v2). NOTE: route relocated to /treasury/remittances/{id} in v2.
输入参数remittanceId必填
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.
输入参数limitcursorfieldssummary
Create a new service (Holded API v2)
输入参数skutaxname必填pricedescription
Get a specific service by ID (Holded API v2)
输入参数serviceId必填
Update an existing service (Holded API v2)
输入参数skutaxnamepriceserviceId必填description
Delete a service (Holded API v2)
输入参数serviceId必填
List all warehouses (Holded API v2). All warehouses are returned in a single call (no cursor pagination). Supports field filtering and summary mode.
输入参数fieldssummary
Create a new warehouse (Holded API v2)
输入参数cityname必填addresscountryprovincepostalCode
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.
输入参数limitcursorfieldssummarywarehouseId必填
Get a specific warehouse by ID (Holded API v2)
输入参数warehouseId必填
Update an existing warehouse (Holded API v2). BREAKING CHANGE from v1: HTTP verb changed from PUT to PATCH.
输入参数citynameaddresscountryprovincepostalCodewarehouseId必填
Delete a warehouse (Holded API v2)
输入参数warehouseId必填
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.
输入参数limitcursorendDatestartDateapprovedOnly
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.
输入参数limitcursorendDateprojectId必填startDateapprovedOnly
Get a single time-tracking entry by project ID and time-tracking ID (Projects API v2). Read-only.
输入参数projectId必填timeTrackingId必填
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.
输入参数limitcursorarchivedend_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.
输入参数limitcursorendtmpend_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.
输入参数limitcursor
Get a single employee by ID (Holded API v2).
输入参数employeeId必填
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.).
输入参数data必填
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).
输入参数data必填employeeId必填
DESTRUCTIVE: permanently deletes an employee record in Holded (API v2). This cannot be undone.
输入参数employeeId必填
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.
输入参数employeeId必填
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).
输入参数data必填employeeId必填
WRITE: registers a clock-in for an employee in Holded time tracking (API v2). Affects real working-time records.
输入参数employeeId必填
WRITE: registers a clock-out for an employee in Holded time tracking (API v2).
输入参数employeeId必填
WRITE: starts a pause in the current working session of an employee (Holded API v2).
输入参数employeeId必填
WRITE: ends the current pause of an employee working session (Holded API v2).
输入参数employeeId必填
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.
输入参数limitcursoremployeeId
Get a single time-tracking record by ID (Holded API v2).
输入参数timeId必填
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).
输入参数data必填employeeId必填
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).
输入参数data必填timeId必填
DESTRUCTIVE: permanently deletes a time-tracking record in Holded (API v2). This cannot be undone.
输入参数timeId必填
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.
输入参数limitcursor
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.
输入参数salaryRecordId必填
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).
输入参数data必填
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).
输入参数data必填salaryRecordId必填
DESTRUCTIVE: permanently deletes a payroll record in Holded (API v2). This cannot be undone and affects accounting data.
输入参数salaryRecordId必填
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.
无需输入参数。
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.
输入参数limitcursorend_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).
输入参数data必填
List accounting accounts (Holded API v2). Cursor-paginated. For the v1 read-only chart of accounts see get_chart_of_accounts.
输入参数limitcursor
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).
输入参数data必填
List treasury bank accounts (Holded API v2, official endpoint). Cursor-paginated.
输入参数limitcursor
Get a treasury bank account by ID (Holded API v2).
输入参数accountId必填
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).
输入参数data必填
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).
输入参数data必填accountId必填
DESTRUCTIVE: permanently deletes a treasury bank account in Holded (API v2). Prefer archive_bank_account to keep history. This cannot be undone.
输入参数accountId必填
WRITE: archives a treasury bank account in Holded (API v2). Reversible alternative to delete_bank_account.
输入参数accountId必填
List bank movements of a treasury account (Holded API v2, official endpoint — replaces the experimental internal banking tools). Cursor-paginated.
输入参数limitcursoraccountId必填
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).
输入参数data必填accountId必填
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).
输入参数data必填accountId必填movementId必填
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.
输入参数limitcursoraccountId必填
List cashflow invoicing forecasts (Holded API v2). Cursor-paginated.
输入参数limitcursor
Get a cashflow invoicing forecast by ID (Holded API v2).
输入参数forecastId必填
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).
输入参数data必填
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).
输入参数data必填forecastId必填
delete_invoicing_forecast
DESTRUCTIVE: permanently deletes an invoicing forecast in Holded cashflow (API v2).
输入参数forecastId必填