Holded integration
Holded is a cloud ERP for small businesses (invoicing, inventory, CRM and projects). Create, read, update, approve, convert, email and download as PDF sales invoices, estimates, credit notes, sales orders and purchase invoices, and record payments on them; manage contacts and contact groups, products with their stock, services, warehouses and price lists, payments and payment methods, banking accounts and their movements, taxes, tags and numbering series; run the CRM (funnels, leads with notes and tasks), projects and tasks, and webhook subscriptions. Not exposed: HR and payroll (employees, time tracking, time off, payslips, salary records), account users, accounting ledger, expense accounts, proformas, waybills, receipt notes, sales receipts, purchase orders and shipments, production orders, recurring invoices (the API documents no response for them), inbox, bookings, events, forecasts, business plan, usage, bulk delete and bulk archive. Authentication is a Holded API key sent as a Bearer token; each key carries permissions and every tool names the one it needs. The API allows 100 requests per minute per key.
Say what should happen.
The workflow builds itself.
What you can do with Holded
Each of these is one operation on one endpoint, available both as a workflow step and as a tool an AI agent can call on its own. Nothing bundles several operations into one action, so what a run did stays readable afterwards.
Most endpoints run on the free plan. A few, mainly the ones that publish on your behalf, need a paid plan.
Payment, 7 operations
create_credit_note_paymentCreate credit note paymentPOSTRecords a payment against the credit note. The payment amount is deducted from the pending balance. You can record partial payments by specifying an amount less than the total outstanding. Needs the sales:invoices.write permission.create_invoice_paymentCreate invoice paymentPOSTRecords a payment against the invoice. The payment amount is deducted from the pending balance. You can record partial payments by specifying an amount less than the total outstanding. Needs the sales:invoices.write permission.create_paymentCreate paymentPOSTRecords a payment movement: type payment for money paid out (e.g. to a supplier) or collection for money received (e.g. from a customer), with amount and date. Returns the new id. Needs the accounting:payments.write permission.create_purchase_paymentCreate purchase paymentPOSTRecords a payment against the purchase invoice. The payment amount is deducted from the pending balance. You can record partial payments by specifying an amount less than the total outstanding. Needs the accounting:purchases.write permission.delete_paymentDelete paymentDELETEPermanently deletes a payment movement. Needs the accounting:payments.write permission.get_paymentGet paymentGETReturns one payment movement with amount, date, status, reconciliation status and the linked contact and document. Needs the accounting:payments.read permission.list_paymentsList paymentsGETLists payment movements (money paid out and collected), filterable by date range, linked document or banking account, up to 200 per page with a cursor. Needs the accounting:payments.read permission.
Attachment, 6 operations
attach_contact_fileAttach contact filePOSTAttaches a file to a contact. Send the file as multipart/form-data. The file name is sanitised (special characters and spaces are removed). Needs the contacts:contacts.write permission.attach_invoice_fileAttach invoice filePOSTAttaches a file to an invoice. Send the file as multipart/form-data. Maximum file size is 10 MB. Attached files are visible in the invoice detail view and can be downloaded by your team. Needs the sales:invoices.write permission.get_contact_attachmentGet contact attachmentGETDownloads a single attachment from a contact. The response body contains the raw file bytes. Use the Content-Disposition header to obtain the original file name. Needs the contacts:contacts.read permission.get_invoice_attachmentGet invoice attachmentGETDownloads a specific attachment from an invoice. The response contains the raw binary content of the file. Needs the sales:invoices.read permission.list_contact_attachmentsList contact attachmentsGETReturns the list of file names attached to a contact. Each item is a plain file name string (e.g. invoice.pdf). Use the file name to download individual files via the Get attachment endpoint. Needs the contacts:contacts.read permission.list_invoice_attachmentsList invoice attachmentsGETReturns the list of files attached to an invoice. Each attachment includes its identifier, file name, and size. Use the attachment ID to download or delete individual files. Needs the sales:invoices.read permission.
Task, 6 operations
create_lead_taskCreate lead taskPOSTCreates a new task for a lead. Needs the crm:deals.write permission.create_taskCreate taskPOSTCreates a new task. The response returns the new task id. Needs the projects:projects.write permission.delete_lead_taskDelete lead taskDELETEDeletes an existing task from a lead. Needs the crm:deals.write permission.delete_taskDelete taskDELETEDeletes an existing task. Needs the projects:projects.write permission.get_taskGet taskGETReturns a single task by its ID. Needs the projects:projects.read permission.list_tasksList tasksGETReturns a paginated list of tasks. Use status=open for the tasks still to do: not in a done status and not archived. Needs the projects:projects.read permission.
Approve, 5 operations
approve_credit_noteApprove credit notePOSTApproves a credit note by setting its approval date. Needs the sales:invoices.write permission.approve_estimateApprove estimatePOSTApproves the estimate by setting the approval date. Needs the sales:estimates.write permission.approve_invoiceApprove invoicePOSTApproves the invoice by setting the approval date. Needs the sales:invoices.write permission.approve_purchaseApprove purchasePOSTApproves the purchase by setting the approval date. Needs the accounting:purchases.write permission.approve_sales_orderApprove sales orderPOSTApproves the sales order by setting the approval date. Needs the inventory:sales-orders.write permission.
Contact, 4 operations
create_contactCreate contactPOSTCreates a new contact in your account. Contacts represent the people and companies you do business with, customers, suppliers, leads, debtors, or creditors. At minimum you must provide a name. Needs the contacts:contacts.write permission.delete_contactDelete contactDELETEPermanently deletes a contact from your account. This action cannot be undone. Needs the contacts:contacts.write permission.get_contactGet contactGETRetrieves the full details of a single contact by its unique identifier. Needs the contacts:contacts.read permission.list_contactsList contactsGETReturns a paginated list of contacts in your account. You can filter by phone, mobile, email, code, or custom_id to find specific contacts. All filters use exact matching. Needs the contacts:contacts.read permission.
Contact group, 4 operations
create_contact_groupCreate contact groupPOSTCreates a new contact group. The response returns the new contact group id. Needs the contacts:contacts.write permission.delete_contact_groupDelete contact groupDELETEDeletes an existing contact group. Needs the contacts:contacts.write permission.get_contact_groupGet contact groupGETReturns a single contact group by its ID. Needs the contacts:contacts.read permission.list_contact_groupsList contact groupsGETReturns a paginated list of contact groups. Results are cursor-paginated: the response includes a cursor value and a has_more boolean. Pass the cursor to the next request to fetch the following page. Needs the contacts:contacts.read permission.
Credit note, 4 operations
create_credit_noteCreate credit notePOSTCreates a new credit note for a contact. Credit notes reduce the balance owed by a customer, typically issued to correct an error, apply a discount, or cancel a previously issued invoice. Needs the sales:invoices.write permission.delete_credit_noteDelete credit noteDELETEPermanently deletes a credit note. This action cannot be undone. The document number will not be reused by the numbering series. Needs the sales:invoices.write permission.get_credit_noteGet credit noteGETRetrieves the full details of a single credit note by its unique identifier. Needs the sales:invoices.read permission.list_credit_notesList credit notesGETReturns a paginated list of credit notes in your account. Results are cursor-paginated: the response includes a cursor value and a has_more boolean. Needs the sales:invoices.read permission.
Estimate, 4 operations
create_estimateCreate estimatePOSTCreates a new estimate (quote) for a contact. Estimates are proposals you send to clients before confirming a sale. They can later be converted into invoices or sales orders. Needs the sales:estimates.write permission.delete_estimateDelete estimateDELETEPermanently deletes an estimate. This action cannot be undone. The document number will not be reused by the numbering series. Needs the sales:estimates.write permission.get_estimateGet estimateGETRetrieves the full details of a single estimate by its unique identifier. Needs the sales:estimates.read permission.list_estimatesList estimatesGETReturns a paginated list of estimates in your account. Results are cursor-paginated: the response includes a cursor value and a has_more boolean. Needs the sales:estimates.read permission.
Funnel, 4 operations
create_funnelCreate funnelPOSTCreates a new funnel. The response returns the new funnel id. Needs the crm:funnels.write permission.delete_funnelDelete funnelDELETEDeletes an existing funnel. Needs the crm:funnels.write permission.get_funnelGet funnelGETReturns a single funnel by its ID. Needs the crm:funnels.read permission.list_funnelsList funnelsGETReturns a paginated list of funnels. Results are paginated with limit and cursor parameters. Default page size is 50, configurable up to 200. Needs the crm:funnels.read permission.
Invoice, 4 operations
create_invoiceCreate invoicePOSTCreates a new sales invoice for an existing contact. Invoices track amounts owed to you by customers and are the primary document for revenue recognition. Needs the sales:invoices.write permission.delete_invoiceDelete invoiceDELETEPermanently deletes an invoice. This action cannot be undone. If the invoice has recorded payments, they will also be removed. Deleting an invoice does not affect the contact or any other documents. Needs the sales:invoices.write permission.get_invoiceGet invoiceGETRetrieves the full details of a single invoice by its unique identifier. Needs the sales:invoices.read permission.list_invoicesList invoicesGETReturns a paginated list of invoices in your account. Results are cursor-paginated: the response includes a cursor value and a has_more boolean. Needs the sales:invoices.read permission.
Lead, 4 operations
create_leadCreate leadPOSTCreates a new lead. The response returns the new lead id. Needs the crm:deals.write permission.delete_leadDelete leadDELETEDeletes an existing lead. Needs the crm:deals.write permission.get_leadGet leadGETReturns a single lead by its ID. Needs the crm:deals.read permission.list_leadsList leadsGETReturns a paginated list of leads. Results are paginated with limit and cursor parameters. Default page size is 50, configurable up to 200. Needs the crm:deals.read permission.
Payment method, 4 operations
create_payment_methodCreate payment methodPOSTCreates a new manual payment method. Needs the sales:invoicing-settings.write permission.delete_payment_methodDelete payment methodDELETEDeletes a manual payment method. Needs the sales:invoicing-settings.write permission.get_payment_methodGet payment methodGETReturns a single configured payment method by its ID. The ID comes from the 'id' field in the list endpoint response. Needs the sales:invoicing-settings.read permission.list_payment_methodsList payment methodsGETReturns all payment methods configured for the account, including both manual methods (bank transfer, cash on delivery, cheque) and online connected providers (Stripe, PayPal, GoCardless, Squa Needs the sales:invoicing-settings.read permission.
Pdf, 4 operations
get_credit_note_pdfGet credit note pdfGETDownloads the credit note as a PDF file. The response Content-Type is application/pdf. The PDF is generated using the template configured in your account settings. Needs the sales:invoices.read permission.get_estimate_pdfGet estimate pdfGETDownloads the estimate as a PDF file. The response Content-Type is application/pdf. Needs the sales:estimates.read permission.get_invoice_pdfGet invoice pdfGETDownloads the invoice as a PDF file. The response Content-Type is application/pdf. The PDF is generated using the template configured in your account settings. Needs the sales:invoices.read permission.get_sales_order_pdfGet sales order pdfGETDownloads the sales order as a PDF file. The response Content-Type is application/pdf. Needs the inventory:sales-orders.read permission.
Price list, 4 operations
create_price_listCreate price listPOSTCreates a new price list (rate). Price lists let you offer different prices to different customer segments, for example, Retail, Wholesale, or VIP. The response returns the new price list id. Needs the inventory:rates.write permission.delete_price_listDelete price listDELETEDeletes a price list (rate) by its unique identifier. References from products, contacts, or POS stores are not cleaned up; consumers must tolerate missing rates on read. Needs the inventory:rates.write permission.get_price_listGet price listGETRetrieves the details of a single price list (rate) by its unique identifier. The response includes the price list name and optional description. Needs the inventory:rates.read permission.list_price_listsList price listsGETLists all price lists (rates) of the authenticated account. Needs the inventory:rates.read permission.
Product, 4 operations
create_productCreate productPOSTCreates a new product in your catalog. Products track inventory, pricing, and tax configuration. They can be physical goods with stock tracking or non-stockable items. Needs the inventory:products.write permission.delete_productDelete productDELETEPermanently deletes a product from your catalog. This action cannot be undone. Products referenced in existing documents will retain the product name in line items but lose the live association. Needs the inventory:products.write permission.get_productGet productGETRetrieves the full details of a single product by its unique identifier. The response includes variants, stock levels across warehouses, custom fields, tax configuration, and pricing information. Needs the inventory:products.read permission.list_productsList productsGETReturns a cursor-paginated list of products in your catalog. Default page size is 50, configurable up to 200 with limit. Pass the returned cursor value to retrieve the next page. Needs the inventory:products.read permission.
Project, 4 operations
create_projectCreate projectPOSTCreates a new project. The response returns the new project id. Needs the projects:projects.write permission.delete_projectDelete projectDELETEDeletes an existing project. Needs the projects:projects.write permission.get_projectGet projectGETReturns a single project by its ID. Needs the projects:projects.read permission.list_projectsList projectsGETReturns a paginated list of projects. Supports filtering by status to retrieve active (in-progress), completed, cancelled, waiting, or budgeted projects. Needs the projects:projects.read permission.
Purchase, 4 operations
create_purchaseCreate purchasePOSTCreates a new purchase invoice from a supplier. Purchase invoices track amounts you owe to vendors and are the primary document for expense recognition. Needs the accounting:purchases.write permission.delete_purchaseDelete purchaseDELETEPermanently deletes a purchase invoice. This action cannot be undone. Recorded payments will also be removed. The document number will not be reused. Needs the accounting:purchases.write permission.get_purchaseGet purchaseGETRetrieves the full details of a single purchase invoice by its unique identifier. Needs the accounting:purchases.read permission.list_purchasesList purchasesGETReturns a paginated list of purchase invoices in your account. Results are cursor-paginated: the response includes a cursor value and a has_more boolean. Needs the accounting:purchases.read permission.
Sales order, 4 operations
create_sales_orderCreate sales orderPOSTCreates a new sales order for a contact. Sales orders confirm a customer's intent to purchase and are typically created after an estimate is accepted. Needs the inventory:sales-orders.write permission.delete_sales_orderDelete sales orderDELETEPermanently deletes a sales order. This action cannot be undone. The document number will not be reused. Needs the inventory:sales-orders.write permission.get_sales_orderGet sales orderGETRetrieves the full details of a single sales order by its unique identifier. Needs the inventory:sales-orders.read permission.list_sales_ordersList sales ordersGETReturns a paginated list of sales orders in your account. Results are cursor-paginated: the response includes a cursor value and a has_more boolean. Needs the inventory:sales-orders.read permission.
Service, 4 operations
create_serviceCreate servicePOSTCreates a new service in your catalog. Services represent non-physical items you sell or purchase, such as consulting hours, subscriptions, or support contracts. The response returns the new service id. Needs the sales:services.write permission.delete_serviceDelete serviceDELETEPermanently deletes a service from your catalog. This action cannot be undone. Services referenced in existing documents will retain the service name in line items but lose the live association. Needs the sales:services.write permission.get_serviceGet serviceGETRetrieves the full details of a single service by its unique identifier. The response includes pricing, tax configuration, sales channel assignment, and duration. Needs the sales:services.read permission.list_servicesList servicesGETReturns a paginated list of services in your catalog. Results are cursor-paginated. Default page size is 25, configurable up to 100 with limit. Needs the sales:services.read permission.
Warehouse, 4 operations
create_warehouseCreate warehousePOSTCreates a new warehouse in your account. Warehouses are locations where you store inventory, each product's stock is tracked per warehouse. The response returns the new warehouse id. Needs the inventory:warehouses.write permission.delete_warehouseDelete warehouseDELETEPermanently deletes a warehouse. You cannot delete a warehouse that still holds stock. Transfer all stock to another warehouse before deleting. You also cannot delete the default warehouse. Needs the inventory:warehouses.write permission.get_warehouseGet warehouseGETRetrieves the details of a single warehouse by its unique identifier. The response includes the warehouse name, contact information, address, and whether it is the default warehouse. Needs the inventory:warehouses.read permission.list_warehousesList warehousesGETReturns the list of all warehouses in your account. The response includes each warehouse's name, address, and default status. Needs the inventory:warehouses.read permission.
Webhook, 4 operations
create_webhookCreate webhookPOSTSubscribes a public HTTPS url to Holded events; it must answer 2xx or deliveries are retried. The signing secret is withheld here, so signatures cannot be checked with it. Needs the developers:webhooks.write permission.delete_webhookDelete webhookDELETEPermanently deletes a webhook subscription. Needs the developers:webhooks.write permission.get_webhookGet webhookGETRetrieves a webhook by its unique identifier. Needs the developers:webhooks.read permission.list_webhooksList webhooksGETReturns a paginated list of webhooks for the account. Needs the developers:webhooks.read permission.
Tag, 3 operations
create_tagCreate tagPOSTCreates a new tag in your account. Needs the account:tags.write permission.delete_tagDelete tagDELETEDeletes a tag from your account. Needs the account:tags.write permission.list_tagsList tagsGETReturns the complete list of tags configured in your account. Needs the account:tags.read permission.
Account, 2 operations
get_banking_accountGet banking accountGETRetrieves the full details of a single banking account by its unique identifier. The response includes the current balance, bank details (IBAN, BIC), synchronization status, and archived state. Needs the accounting:banks.read permission.list_banking_accountsList banking accountsGETReturns a cursor-paginated list of banking accounts in your account. Use archived=true to retrieve only archived accounts, archived=false for only active accounts, or omit the parameter to return both. Needs the accounting:banks.read permission.
Send, 2 operations
send_credit_noteSend credit notePOSTEmails the credit note to the addresses in emails right away, with the account's template and sender; subject, message, template, cc and bcc are optional. Needs the sales:invoices.write permission.send_estimateSend estimatePOSTEmails the estimate to the addresses in emails right away, with the account's template and sender; subject, message, template, cc and bcc are optional. Needs the sales:estimates.write permission.
Stock, 2 operations
get_product_stockGet product stockGETReturns the stock availability of a product, broken down into total, available, reserved and in-transit quantities across all warehouses, plus the physical stock stored in each warehouse. Needs the inventory:products.read permission.list_warehouse_stockList warehouse stockGETReturns the stock levels for all products stored in a specific warehouse. The response includes each product's ID, variant ID (if applicable), and current stock quantity. Needs the inventory:warehouses.read permission.
Accept, 1 operation
accept_estimateAccept estimatePOSTMarks the estimate as accepted. This changes the estimate status to accepted and records who accepted it. Once accepted, the estimate can be converted into an invoice, sales order, or other document. Needs the sales:estimates.write permission.
Bank movement, 1 operation
list_bank_movementsList bank movementsGETReturns a cursor-paginated list of raw bank movements for a banking account, with the bank-reported amount, balance after the movement, value date and reconciliation status. Needs the accounting:banks.read permission.
Cancel, 1 operation
cancel_invoiceCancel invoicePOSTCancels (voids) a sales invoice so it can no longer be edited or paid. Answers 422 when its state does not allow it (already paid or voided). Needs the sales:invoices.write permission.
Cash movement, 1 operation
list_cash_movementsList cash movementsGETReturns a cursor-paginated list of ledger entries for a cash-type banking account. Needs the accounting:banks.read permission.
Convert, 1 operation
convert_documentConvert documentPOSTConverts a document into a new one of another type (e.g. an estimate into an invoice), linked to the source, which stays unchanged. Supported pairs depend on your account. Needs the sales:invoices.write permission.
Disable, 1 operation
disable_webhookDisable webhookPOSTDisables a webhook subscription, recording who disabled it and why. Needs the developers:webhooks.write permission.
Enable, 1 operation
enable_webhookEnable webhookPOSTRe-enables a previously disabled webhook. Needs the developers:webhooks.write permission.
Event, 1 operation
list_webhook_event_typesList webhook event typesGETReturns all supported webhook event types grouped by domain. Needs the developers:webhooks.read permission.
Find by number, 1 operation
find_invoices_by_document_numberFind invoices by document numberGETReturns invoices in your account whose document number matches the given value. Needs the sales:invoices.read permission.
Keys by country, 1 operation
list_tax_keys_by_countryList tax keys by countryGETReturns the ordered list of tax keys applicable for a given country and ecommerce section. Combines default country rules with section-specific overrides. Needs the accounting:taxes.read permission.
Note, 1 operation
create_lead_noteCreate lead notePOSTCreates a new note for a lead. Needs the crm:deals.write permission.
Numbering series, 1 operation
list_numbering_seriesList numbering seriesGETReturns the list of all numbering series configured in your account, grouped by document type. Needs the sales:invoicing-settings.read permission.
Portal link, 1 operation
get_contact_portal_linkGet contact portal linkGETGenerates a link to the contact's client portal, where they can view their documents. The link expires after 2 days. Needs the contacts:contacts.read permission.
Reject, 1 operation
reject_estimateReject estimatePOSTMarks the estimate as rejected. This changes the estimate status to rejected and records who rejected it. Needs the sales:estimates.write permission.
Search, 1 operation
search_contactsSearch contactsGETSearch for contacts by name. Matches against the name field using prefix matching (autocomplete-style): name=Joh matches John Due, John Smith, etc. Token-aware, case- and diacritic-insensitive. Needs the contacts:contacts.read permission.
Shipped item, 1 operation
list_sales_order_shipped_itemsList sales order shipped itemsGETReturns the items that have already been shipped for this sales order. The response includes shipped quantities and dates for each line item, so you can track fulfillment progress. Needs the inventory:sales-orders.read permission.
Summary, 1 operation
get_project_summaryGet project summaryGETReturns the summary of a project by its ID. Needs the projects:projects.read permission.
Tax, 1 operation
list_taxesList taxesGETReturns the complete list of taxes configured in your account. Taxes define the VAT, GST, or other rates applied to document line items. Needs the accounting:taxes.read permission.
Transit, 1 operation
list_product_stock_in_transitList product stock in transitGETReturns the stock in transit for a product, including per-document movement details. Needs the inventory:products.read permission.
Showing the first 120 of 149 endpoints. The rest are in the product, searchable from the workflow builder and from chat.
Use Holded from Claude Code, Cursor or Codex
Connect Holded in LiveContext, create an API key in Settings, then add the LiveContext MCP server to your client. Its Holded operations become tools the client can call, next to every other integration you connected.
claude mcp add --transport http livecontext https://livecontext.ai/mcp --header "X-API-Key: YOUR_API_KEY"[mcp_servers.livecontext]
url = "https://livecontext.ai/mcp"
[mcp_servers.livecontext.http_headers]
"X-API-Key" = "YOUR_API_KEY"{
"mcpServers": {
"livecontext": {
"type": "http",
"url": "https://livecontext.ai/mcp",
"headers": {
"X-API-Key": "YOUR_API_KEY"
}
}
}
}How to connect Holded
- Create your workspace
Sign up free. Nothing to install.
- Connect Holded once
Add your Holded connection in Settings. Every tool from this integration reuses it, and secrets are encrypted at rest and visible only to you.
- Describe the job in chat
The workflow builds itself in front of you and picks the endpoints it needs. Drag the steps yourself on the canvas whenever you would rather be explicit.
Holded integration FAQ
What can you do with the Holded integration?
LiveContext exposes 149 operations on Holded, covering payment, attachment, task and approve.
