[Cotlet](https://cotlet.dev/index.md) · [Integrations](https://cotlet.dev/integrations.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Use cases](https://cotlet.dev/use-cases.md) · [Security](https://cotlet.dev/security.md) · [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md) · [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [Contact](https://cotlet.dev/contact.md) · [Pricing](https://cotlet.dev/pricing.md) · [Sign up](https://cotlet.dev/signup)

# Draft and send Holded invoices from a job list

> Turn a list of finished jobs into draft Holded invoices with the right contact, lines and due date, then approve and email them after your OK.

Source: https://cotlet.dev/integrations/holded-api-mcp-server/draft-and-send-invoices

At the end of the week you have a spreadsheet of finished jobs, and every row still has to become a Holded invoice with the right contact, lines, tax and due date.

Cotlet does it in your own Holded account with list\_contacts, list\_products, create\_invoice and send\_invoice, called by your AI agent, an n8n workflow or a script.

[Sign up free](https://cotlet.dev/app/signup?app=holded) [All Holded tools](https://cotlet.dev/integrations/holded-api-mcp-server.md)

Hosted · nothing to install or maintain

## Can Holded do this on its own?

Holded has an API for invoices on paid plans, and Zapier has Create Sales Invoice and Send Invoice actions (checked 14 Oct 2026). Holded has no feature that builds invoices from a list of jobs, and it has no official MCP server for an agent to do it.

## How you do it in Holded today

1. In Holded you open Sales > Invoices and click New Invoice, or press N.
2. You pick the contact, or type a new name and click + Add, then set the due date yourself because only the date defaults to today.
3. In the item field you choose a product or service, add a description, set quantities and prices and select the tax. A discount is added with + Add discount, on the item or on the total.
4. You click Preview, then either Approve or Save as draft. The document number fills in by itself from your Invoicing preferences.
5. To send it, you open the invoice, click Submit, check the recipient and the message, choose email or post and click Send.
6. This repeats for every client, every week, and a missed row means a late invoice.

## How to draft and send Holded invoices from a job list

Prompt

```
Here are this week's completed jobs with client, hours and rate. Create a draft invoice in Holded for each client, due in 30 days, and send me the list. Do not approve or send anything yet.
```

1. 01  
### Match each client to a contact  
The agent searches list\_contacts for every client name in your list. A name with no match, or with two close matches, is listed for you; contacts are never created from a guess.
2. 02  
### Reuse your products and services  
list\_products gives the items you already sell, so a line like "Consulting, 10 hours" uses the product and its price rule instead of a free-text line. Rows that match no product become plain lines with the name you wrote.
3. 03  
### Build one draft per client  
create\_invoice runs with approve left at false, so each invoice lands as a draft that you can edit, and rows for the same client are merged into one invoice. The due date is today plus the days in your prompt.
4. 04  
### Show totals before anything leaves  
The agent reports the subtotal, tax and total per draft so you can compare them with your sheet. An approved invoice cannot be edited or deleted in Holded, which is why approval is a separate step.
5. 05  
### Approve and send after your OK  
When you say go, create\_invoice is called with approve true and send\_invoice emails each one. Both ask for your OK per call by default, and a failed send is reported without sending twice.

### What you get back

Example data

```
Jobs in the list: 7 across 4 clients
Drafts created: 4
- Northwind Studio: 10 h x 80 = 800.00 + tax 168.00 = 968.00, due 2026-11-14
- Lumen Dental: 6 h x 80 = 480.00 + tax 100.80 = 580.80, due 2026-11-14
Needs you: 1 client with no matching contact ("Acme" or "ACME Ltd")
Approved and sent: 0
```

### Other ways to ask

- Every Friday, draft invoices for the hours in this timesheet and email me the totals, but do not approve anything.
- Approve and send the four drafts from Monday to the contacts on file.
- Create a draft invoice for Northwind Studio with 10 hours of consulting and a 5 percent discount on the total.
- Copy last month's invoice lines for each client and draft them for this month.

## What Holded allows, and what to know first

- Holded fills the document number in automatically from your Invoicing preferences, so the agent never types a number.
- An approved Holded invoice cannot be edited or deleted, you can only void it, and a change needs a correcting invoice.
- Holded lets you add several due dates to one invoice with Multiple dates, which Cotlet leaves out: the agent sets one due date.
- Accounts that send invoices to a tax system through Verifactu, FacturaE, TicketBAI or SII fill extra fields in the Options menu, so such invoices are worth a look in draft first.
- Some Holded accounts use mandatory draft mode, in which a new invoice always starts as a draft.

create\_invoice and send\_invoice ask for your OK by default. To run it weekly without you, switch confirmation off for those tools in your dashboard.

Sources: [Holded Help: Create an invoice](https://help.holded.com/en/articles/6834950-create-an-invoice) · [Holded Help: Send your invoices by email](https://help.holded.com/en/articles/6836216-send-your-invoices-by-email) · [Holded on Zapier: triggers and actions](https://zapier.com/apps/holded/integrations)

## Call create\_invoice from a script

curl

```
curl -X POST https://cotlet.dev/api/v1/holded/contacts/c_5f2a91/invoices \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"items":[{"name":"Consulting","description":"Landing page review, week 42","units":10,"price":80,"tax":"VAT 21%"}],"due_date":"2026-11-14","approve":false}'
```

Example response

```
{
"invoice_id": "inv_7d31",
"number": "INV-0045",
"status": "draft",
"contact": "Northwind Studio",
"subtotal": 800,
"tax_total": 168,
"total": 968,
"currency": "EUR",
"due_date": "2026-11-14"
}
```

MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is holded\_write → create\_invoice. Example data.

[Schedule it in n8n, Make, Zapier or cron](https://cotlet.dev/integrations/holded-api-mcp-server.md#automations)

## Holded tools this automation uses

__Cotlet Holded tools used to draft and send Holded invoices from a job list__
| Tool | Parameters |
| --------------- | ----------------------------------------------------- |
| list\_contacts | search, type, limit, cursor |
| list\_products | search, limit, cursor |
| create\_invoice | contact\_id, items, date, due\_date, message, approve |
| send\_invoice | invoice\_id, to, method, message |

[All 12 Holded tools with descriptions](https://cotlet.dev/integrations/holded-api-mcp-server.md#tools)

## Frequently asked questions

### Is it safe to connect Holded to Cotlet?

Yes. You sign in to Holded yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get Holded once you enable it, every background request is listed, and the browser profile is stored encrypted with AES-256-GCM, the cipher 1Password uses for its vaults. The AI model never sees a login, posts and messages wait for your OK, and Disable for agents cuts access in one click. Independent scanners grade cotlet.dev A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory; live results are on https://cotlet.dev/security.

## More Holded automations

- [Record supplier bills in Holded as purchases](https://cotlet.dev/integrations/holded-api-mcp-server/record-supplier-bills.md)
- [Chase unpaid Holded invoices with a reminder](https://cotlet.dev/integrations/holded-api-mcp-server/chase-unpaid-invoices.md)
- [Holded API and MCP server: every tool](https://cotlet.dev/integrations/holded-api-mcp-server.md)
- [All use cases](https://cotlet.dev/use-cases.md)

## Give your agent access to Holded.

Free 7-day trial with 2,000 credits, no card needed. Cotlet is independent and not affiliated with Holded.

[Sign up free](https://cotlet.dev/app/signup?app=holded)

---

Give your AI agents your signed-in browser.

**Product:** [Integrations](https://cotlet.dev/integrations.md) · [Use cases](https://cotlet.dev/use-cases.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Pricing](https://cotlet.dev/pricing.md) · [Security](https://cotlet.dev/security.md)

**Resources:** [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [GitHub](https://github.com/cotletdev/cotlet)

**Solutions:** [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md)

**Company:** [About](https://cotlet.dev/about.md) · [AI info: company facts](https://cotlet.dev/ai-info.md) · [Contact](https://cotlet.dev/contact.md)

**Legal:** [Terms of service](https://cotlet.dev/terms) · [Privacy policy](https://cotlet.dev/privacy) · [Refund policy](https://cotlet.dev/refunds) · [Acceptable use](https://cotlet.dev/acceptable-use) · [Cookie policy](https://cotlet.dev/cookies) · [DPA](https://cotlet.dev/dpa) · [Subprocessors](https://cotlet.dev/subprocessors)

**Elsewhere:** [Status page](https://status.cotlet.dev) · [Cotlet on GitHub](https://github.com/cotletdev) · [Cotlet on X](https://x.com/cotletdev) · [Cotlet on LinkedIn](https://www.linkedin.com/company/cotletdev) · [Cotlet on Product Hunt](https://www.producthunt.com/products/cotlet) · [Cotlet on Crunchbase](https://www.crunchbase.com/organization/cotlet) · [Cotlet on SaaSHub](https://www.saashub.com/cotlet)

Cotlet is an independent service. It is not affiliated with, endorsed by or sponsored by any of the products listed on this site. Product names are trademarks of their respective owners.

## For AI agents: sign your user up

Is your user asking you to sign them up for Cotlet? You can do it for them, no account or key needed.

1. Read the fields and their allowed values: GET https://cotlet.dev/api/v1/access-requests
2. Ask the user for each value: email, apps, what you will do with them. If they leave the password to you, generate a strong one and show it to them.
3. Show the user what you will send, then POST it as JSON to https://cotlet.dev/api/v1/access-requests.

One call creates the account and sends the access request; we email the user when access is granted.
