Mcp Holded

io.github.nubiia-dev由 GitHub 账号 nubiia-dev 发布v2.0.3更新于 Oct 29, 2026

Complete Holded Invoice API integration with 72 MCP tools for invoices, contacts, products, and more

概览

AI 生成的概览

面向 Holded ERP API v2 的 MCP 服务器,让助手在 Holded 账户中管理发票、联系人、产品、资金、账簿和人事数据。

可以做什么
  • 创建、列出、读取、更新、删除发票、报价、贷项通知、订单等单据,并支持付款、邮件发送、导出 PDF、发货与物流跟踪
  • 管理联系人及其附件、联系人分组和销售渠道
  • 管理产品、图片与库存数量,以及仓库、服务和单据编号系列
  • 处理资金账户、银行账户、银行与现金流水、付款及付款方式
  • 读写会计账簿分录、会计科目表、日记账、税种和汇款数据
  • 处理团队与人事数据:员工、薪资记录、工时记录与上下班打卡
适用场景
适合需要助手直接在 Holded 账户内查询或处理日常事务的场景,例如拉取发票清单、起草并发送单据、查看库存,或查询账簿与薪资数据,而无需切换到 Holded 界面。
运行要求
通过 npx 在本机运行,需要 Node.js 22.14 或更高版本。需要开通 API 访问的 Holded 账户,以及以 pat_ 或 sk_live_ 开头的 v2 API 密钥,通过环境变量 HOLDED_API_KEY 提供;多租户场景使用 TENANT_N_NAME 和 TENANT_N_API_KEY。需要访问 Holded API 的网络连接。
安装前请注意
创建、更新和删除类工具会改动 Holded 中的真实会计数据,发送单据会向客户发出邮件,登记付款可能导致单据被自动审批。该 API 密钥可访问公司财务与人事数据,请勿提交到版本库。资金账户的余额字段是静态期初值而非实时余额,不可用于对账。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Mcp Holded,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

MCP Holded

[CI] [npm version] [License: MIT] [codecov] [by Nubiia]

A Model Context Protocol (MCP) server for the Holded API. This server lets AI assistants like Claude interact with Holded's invoicing, accounting, contacts, products, treasury, HR, time tracking and more.

Built and maintained by Nubiia — automatización e integraciones con IA para negocios (MCP, Holded, Pipedrive y más). ¿Quieres algo así para tu empresa? Escríbenos en nubiia.es.

Features

This MCP server provides access to the Holded API v2 across all supported modules:

  • Documents (16 tools): Create, list, update, delete invoices, estimates, credit notes, etc. Also pay, send, get PDF, ship items, and more.
  • Contacts (7 tools): Manage clients and suppliers with attachments.
  • Products (9 tools): Full product management including images and stock.
  • Treasuries (3 tools): Manage legacy treasury accounts.
  • Treasury v2 (15 tools): Bank accounts, bank movements, cash movements, invoicing forecasts and reconciliation.
  • Expenses Accounts (5 tools): Handle expense account categories.
  • Numbering Series (4 tools): Configure document numbering.
  • Sales Channels (5 tools): Manage sales channels.
  • Warehouses (6 tools): Warehouse management.
  • Payments (5 tools): Payment method configuration.
  • Taxes (1 tool): Get available taxes.
  • Contact Groups (5 tools): Organize contacts into groups.
  • Remittances (2 tools): Access remittance data.
  • Services (5 tools): Manage services.
  • Time Tracking (3 tools): List time-tracking entries and project times (read and write).
  • Accounting (2 tools, read-only): Get the chart of accounts and the daily ledger.
  • Ledger (4 tools): List and create accounting/ledger entries.
  • Team/HR (22 tools): Employee management, payroll records, employee time entries and clock in/out.

Total: 119 tools — all registered unconditionally once a valid v2 key is configured.

Installation

Prerequisites

  • Node.js 22.14 or higher
  • A Holded account with API access
  • A Holded API v2 key (pat_… or sk_live_…) — generate it in Holded → Settings → API

Install from npm

bash
npm install -g @nubiia/mcp-holded

Install from source

bash
git clone https://github.com/nubiia-dev/mcp-holded.gitcd mcp-holdednpm installnpm run build

Configuration

Environment Variables

All tools call the Holded API v2 (Bearer auth, cursor pagination). You need a single v2 key:

bash
# Recommended — primary key nameexport HOLDED_API_KEY=pat_your_v2_key_here
# Alternative — accepted as an alias; wins over HOLDED_API_KEY if both are setexport HOLDED_API_KEY_V2=sk_live_your_v2_key_here

Generate the key in Holded → Settings → API. The key must start with pat_ or sk_live_. A 403 response means the key is missing a required scope.

For multi-tenant setups use the same logic per tenant:

bash
export TENANT_1_NAME=company-aexport TENANT_1_API_KEY=pat_key_for_company_aexport TENANT_2_NAME=company-bexport TENANT_2_API_KEY=sk_live_key_for_company_b

TENANT_N_API_KEY_V2 is accepted as an alias for TENANT_N_API_KEY (wins if both are set).

Claude Desktop Configuration

Add to your Claude Desktop config file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

json
{  "mcpServers": {    "holded": {      "command": "npx",      "args": ["-y", "@nubiia/mcp-holded"],      "env": {        "HOLDED_API_KEY": "pat_your_v2_key_here"      }    }  }}

Or if installed from source:

json
{  "mcpServers": {    "holded": {      "command": "node",      "args": ["/path/to/mcp-holded/dist/index.js"],      "env": {        "HOLDED_API_KEY": "pat_your_v2_key_here"      }    }  }}

Migrating from 1.x

API key

The server now calls the Holded API v2 exclusively. Your 1.x API key (a plain hex string like abc123…) no longer works. Generate a v2 key in Holded → Settings → API; the key will start with pat_ or sk_live_.

Set it as HOLDED_API_KEY (or the alias HOLDED_API_KEY_V2). The separate HOLDED_API_KEY_V2 variable used in 1.x to opt-in to HR/Ledger/Treasury tools is no longer needed — all 119 tools are always registered.

Pagination

List tools changed from page-based to cursor-based pagination:

1.x argument2.x argumentNotes
page(removed)Server no longer accepts offset pages
pageSizelimitServer-paginated; use limit to control page size
(none)cursorPass the nextCursor from the previous response

Responses now follow this envelope:

json
{  "items": [...],  "nextCursor": "opaque-string-or-null",  "hasMore": true}

Iterate by passing nextCursor as cursor until hasMore is false.

Response format

  • Field names are snake_case throughout (e.g. contact_id, created_at).
  • Monetary amounts are strings with a decimal comma (e.g. "1.234,56") — parse with your locale-aware number parser before doing arithmetic.

Removed or changed operations

Operation1.x behaviour2.x behaviour
purchaserefund list/get/update/delete/paySupportedRemoved — create only via /purchases/refund
update_document trackingAll document typesOnly salesorder and waybill
Ship operationsAll document typesOnly salesorder and purchaseorder
Experimental banking (reconcile_bank_transaction)Opt-in via env flagRemoved — use reconcile_bank_movement (treasury v2)
get_daily_ledger datesUnix timestamps (starttmp/endtmp)ISO 8601 strings (start_date/end_date); legacy Unix args still accepted as a convenience
get_taxesPaginatedReturns all taxes in one call (no pagination args)
update_product_stockOptional warehousewarehouse_id is now required
List tools field projectionsReduced default set of fieldsFull v2 payload returned; use fields argument to filter

Contact attachments

Attachments are now fetched by filename instead of attachment ID. Use get_contact_attachment with the filename field returned by list_contact_attachments.

Usage Examples

Once configured, you can ask Claude to:

Documents

  • "List all my invoices from Holded"
  • "Create an invoice for client X with 2 items"
  • "Send invoice #123 to the client by email"
  • "Get the PDF of invoice #456"
  • "Mark invoice #789 as paid"

Contacts

  • "List all my clients in Holded"
  • "Create a new client named Acme Corp"
  • "Update the email for contact #123"

Products

  • "Show me all products"
  • "Create a new product called Widget with price 50 EUR"
  • "Update stock for product #123 adding 10 units in warehouse W1"

HR & Payroll

  • "List all employees"
  • "Clock in employee #456"
  • "Get the salary record for employee #789 for June 2025"

Reports

  • "Get all my taxes"
  • "List all treasury bank accounts"
  • "Show me the daily ledger for January 2025"
  • "Get the chart of accounts"

Document Types

The API supports these document types:

TypeDescription
invoiceSales invoices
salesreceiptSales receipts
creditnoteCredit notes (refunds)
receiptnoteReceipt notes
estimateEstimates/Quotes
salesorderSales orders
waybillPacking lists
proformProforma invoices
purchasePurchases
purchaserefundPurchase refunds (create only in v2)
purchaseorderPurchase orders

API Reference

Base URL

https://api.holded.com/api/

The server routes each tool to the appropriate v2 sub-path (e.g. /invoicing/v2/, /team/v2/, /accounting/v2/).

Authentication

All requests use Bearer authentication with your v2 key:

Authorization: Bearer pat_your_v2_key_here

Pagination

List endpoints use cursor-based pagination via limit and cursor arguments (see Migrating from 1.x).

Development

bash
# Install dependenciesnpm install
# Buildnpm run build
# Watch modenpm run dev

Write Safety

Create/update/delete tools modify real data in Holded. The server applies per-tool rate limits (stricter for destructive operations) to prevent accidental bulk mutations. Destructive operations are capped at 10 requests/minute by default; update operations at 30 requests/minute.

Privacy Policy

Data Collection: This MCP server requires your Holded API key to function. The API key is read from your local environment variable (HOLDED_API_KEY) and is never stored by this server. All API requests and responses are passed through in real-time to facilitate communication between your AI assistant and the Holded API.

Data Usage & Sharing: Your API key and all data processed through this server are used exclusively to interact with the Holded API on your behalf. The server acts as a pass-through proxy - it does not store, log, or retain any data. Your Holded API key and data are transmitted only to Holded's official API endpoints (api.holded.com). No data is shared with any third parties beyond Holded.

Your Security: We recommend following security best practices: store your API key in environment variables (never commit it to version control), regularly update to the latest version, and review the permissions granted to this MCP server in your AI assistant. For more information, see our full Privacy Policy.

Support

For questions, issues, or feature requests:

About Nubiia

This MCP server is built and maintained by Nubiia.

Nubiia ayuda a empresas a automatizar procesos e integrar sus herramientas con IA: servidores MCP a medida, integraciones con Holded, Pipedrive y otros ERPs/CRMs, y agentes que conectan tus datos de negocio con asistentes como Claude. Este @nubiia/mcp-holded es un ejemplo open source de lo que hacemos.

👉 ¿Quieres una integración o automatización con IA para tu negocio? nubiia.es · ✉️ [email protected]

License

MIT - See LICENSE file for details.

Author

Built by Nubiia — nubiia.es · [email protected]

Maintainer: Samuel Fraga — GitHub · LinkedIn

Links

来源:README.md,提交 e6cbae6

工具

119

list_documents

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_document

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_document

Get a specific document by ID

输入参数docType必填documentId必填

get_document_payments

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_document

Update an existing document

输入参数dateitemsnotesdocType必填currencycontactIdretentiondocumentId必填invoiceNumexpAccountIdsalesChannelId

delete_document

Delete a document

输入参数docType必填documentId必填

pay_document

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_document

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_document_pdf

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

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_items_by_line

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_units

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_file_to_document

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_document_tracking

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_document_pipeline

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_payment_methods

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

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_contact

Create a new contact (Holded API v2)

输入参数codename必填notetypeemailphonetradenamebillAddresscontactPersons

get_contact

Get a specific contact by ID (Holded API v2)

输入参数contactId必填

update_contact

Update an existing contact (Holded API v2)

输入参数codenamenotetypeemailphonecontactId必填tradenamebillAddresscontactPersons

delete_contact

Delete a contact (Holded API v2)

输入参数contactId必填

list_contact_attachments

Get list of attachments for a contact (Holded API v2). Use the filenames from the response with get_contact_attachment.

输入参数contactId必填

get_contact_attachment

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

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_product

Create a new product (Holded API v2)

输入参数skutaxkindname必填pricestockbarcodecostPricedescription

get_product

Get a specific product by ID (Holded API v2)

输入参数productId必填

update_product

Update an existing product (Holded API v2)

输入参数skutaxnamepricebarcodecostPriceproductId必填description

delete_product

Delete a product (Holded API v2)

输入参数productId必填

get_product_main_image

Get the main image of a product (Holded API v2)

输入参数productId必填

list_product_images

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_product_stock

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_treasuries

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_treasury

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_treasury

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

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_expenses_account

Create a new expenses account (Holded API v2)

输入参数codename必填

get_expenses_account

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_expenses_account

Update an existing expenses account (Holded API v2)

输入参数codenameaccountId必填

delete_expenses_account

Delete an expenses account (Holded API v2)

输入参数accountId必填

get_numbering_series

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_numbering_serie

Create a new numbering serie (Holded API v2)

输入参数name必填prefixdocType必填nextNumber

update_numbering_serie

Update an existing numbering serie (Holded API v2)

输入参数nameprefixdocType必填serieId必填nextNumber

delete_numbering_serie

Delete a numbering serie (Holded API v2)

输入参数docType必填serieId必填

list_sales_channels

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_sales_channel

Create a new sales channel (Holded API v2)

输入参数name必填

get_sales_channel

Get a specific sales channel by ID (Holded API v2)

输入参数channelId必填

update_sales_channel

Update an existing sales channel (Holded API v2)

输入参数namechannelId必填

delete_sales_channel

Delete a sales channel (Holded API v2)

输入参数channelId必填

list_payments

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_payment

Create a new payment (Holded API v2)

输入参数daysname必填

get_payment

Get a specific payment by ID (Holded API v2)

输入参数paymentId必填

update_payment

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_payment

Delete a payment (Holded API v2)

输入参数paymentId必填

get_taxes

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

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_contact_group

Create a new contact group (Holded API v2)

输入参数name必填

get_contact_group

Get a specific contact group by ID (Holded API v2)

输入参数groupId必填

update_contact_group

Update an existing contact group (Holded API v2)

输入参数namegroupId必填

delete_contact_group

Delete a contact group (Holded API v2)

输入参数groupId必填

list_remittances

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_remittance

Get a specific remittance by ID (Holded API v2). NOTE: route relocated to /treasury/remittances/{id} in v2.

输入参数remittanceId必填

list_services

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_service

Create a new service (Holded API v2)

输入参数skutaxname必填pricedescription

get_service

Get a specific service by ID (Holded API v2)

输入参数serviceId必填

update_service

Update an existing service (Holded API v2)

输入参数skutaxnamepriceserviceId必填description

delete_service

Delete a service (Holded API v2)

输入参数serviceId必填

list_warehouses

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_warehouse

Create a new warehouse (Holded API v2)

输入参数cityname必填addresscountryprovincepostalCode

list_warehouse_stock

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_warehouse

Get a specific warehouse by ID (Holded API v2)

输入参数warehouseId必填

update_warehouse

Update an existing warehouse (Holded API v2). BREAKING CHANGE from v1: HTTP verb changed from PUT to PATCH.

输入参数citynameaddresscountryprovincepostalCodewarehouseId必填

delete_warehouse

Delete a warehouse (Holded API v2)

输入参数warehouseId必填

list_project_times

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_project_time

Get a single time-tracking entry by project ID and time-tracking ID (Projects API v2). Read-only.

输入参数projectId必填timeTrackingId必填

get_chart_of_accounts

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_daily_ledger

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

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_employee

Get a single employee by ID (Holded API v2).

输入参数employeeId必填

create_employee

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必填

update_employee

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必填

delete_employee

DESTRUCTIVE: permanently deletes an employee record in Holded (API v2). This cannot be undone.

输入参数employeeId必填

get_employee_contract

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必填

update_employee_contract

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必填

clock_in_employee

WRITE: registers a clock-in for an employee in Holded time tracking (API v2). Affects real working-time records.

输入参数employeeId必填

clock_out_employee

WRITE: registers a clock-out for an employee in Holded time tracking (API v2).

输入参数employeeId必填

pause_employee

WRITE: starts a pause in the current working session of an employee (Holded API v2).

输入参数employeeId必填

unpause_employee

WRITE: ends the current pause of an employee working session (Holded API v2).

输入参数employeeId必填

list_employee_times

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_employee_time

Get a single time-tracking record by ID (Holded API v2).

输入参数timeId必填

create_employee_time

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必填

update_employee_time

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必填

delete_employee_time

DESTRUCTIVE: permanently deletes a time-tracking record in Holded (API v2). This cannot be undone.

输入参数timeId必填

list_salary_records

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_salary_record

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必填

create_salary_record

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必填

update_salary_record

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必填

delete_salary_record

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_ledger_entries

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

create_ledger_entry

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

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_bank_accounts

List treasury bank accounts (Holded API v2, official endpoint). Cursor-paginated.

输入参数limitcursor

get_bank_account

Get a treasury bank account by ID (Holded API v2).

输入参数accountId必填

create_bank_account

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必填

update_bank_account

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必填

delete_bank_account

DESTRUCTIVE: permanently deletes a treasury bank account in Holded (API v2). Prefer archive_bank_account to keep history. This cannot be undone.

输入参数accountId必填

archive_bank_account

WRITE: archives a treasury bank account in Holded (API v2). Reversible alternative to delete_bank_account.

输入参数accountId必填

list_bank_movements

List bank movements of a treasury account (Holded API v2, official endpoint — replaces the experimental internal banking tools). Cursor-paginated.

输入参数limitcursoraccountId必填

create_bank_movement

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必填

reconcile_bank_movement

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

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_invoicing_forecasts

List cashflow invoicing forecasts (Holded API v2). Cursor-paginated.

输入参数limitcursor

get_invoicing_forecast

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必填

版本历史

1
  1. v2.0.3最新Oct 22, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分