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 分