[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)

# Create Invoice Ninja invoices from a billing list

> Turn a list of clients, hours and rates into draft Invoice Ninja invoices, check each total against your list, then send them after your OK.

Source: https://cotlet.dev/integrations/invoice-ninja-api-mcp-server/create-invoices-from-billing-list

The hours differ for every client each month, so a recurring invoice does not fit, and you retype the same list into one invoice form per client.

Cotlet does it in your own Invoice Ninja account with list\_clients, 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=invoice-ninja) [All Invoice Ninja tools](https://cotlet.dev/integrations/invoice-ninja-api-mcp-server.md)

Hosted · nothing to install or maintain

## Can Invoice Ninja do this on its own?

Invoice Ninja bills fixed lines on a schedule with Recurring Invoices, and invoices can bill tasks from tracked time and expenses (checked 14 Oct 2026). Hours or amounts that come from a list in an email or spreadsheet are typed into one invoice per client. The REST API can create invoices, on Pro and above, and Invoice Ninja has no official MCP server.

## How you do it in Invoice Ninja today

1. Open Invoices and create a new invoice, then pick the client. The client drives the currency, tax rules, language, payment terms and email templates.
2. Add one line per item with Product, Description, Unit Cost and Quantity. Quantity takes up to six decimals, so 12.5 hours works.
3. Set the Invoice Date and the Due Date, then save. The invoice stays a draft: the client cannot see it and the client balance does not change.
4. Choose More Actions > Email Invoice to send it to the contacts checked to receive it. Contacts with Add to Invoices enabled on the client are pre-selected.
5. Repeat for every client on the list. Invoice Ninja bills the same lines every cycle with a Recurring Invoice, but nothing fills in hours that change each month.

## How to create Invoice Ninja invoices from a billing list

Prompt

```
Here is the billing list: client, hours and rate. Create one draft invoice per client in Invoice Ninja, show me the totals, and send them after I say OK. Stop on any client name that matches nothing or two clients.
```

1. 01  
### Match every name to a client  
Your agent looks each name up with list\_clients. A name that matches no client or two clients stops the run for that line and is reported, so no duplicate client is created and no invoice goes to the wrong one.
2. 02  
### Take prices from the right place  
When a line names a product, list\_products supplies its description and price, as the invoice form does. The rate in your list wins over the product price, and the agent says which one it used.
3. 03  
### Create the drafts  
create\_invoice builds one draft per client with the invoice date and a due date from your terms, and returns the invoice number. Drafts reach nobody, so this step needs no OK.
4. 04  
### Check every total  
The agent adds up quantity times unit cost per line and compares the sum to the amount Invoice Ninja returned and to the total on your list. Any difference is shown before anything is sent.
5. 05  
### Send after your OK  
send\_invoice emails each invoice and moves it from Draft to Sent, which raises the client balance and starts the reminder schedule. Each send waits for your OK by default.

### What you get back

Example data

```
Billing list: 5 clients
Created 4 drafts, total 4,635.00 USD, none sent yet:
- INV-0043 Northwind Studio, 1,050.00 (10 h design sprint at 90.00, hosting setup 150.00)
- INV-0044 Brightwave Ltd, 1,700.00 (20 h at 85.00)
- INV-0045 Kestrel Labs, 1,125.00 (12.5 h at 90.00)
- INV-0046 Orchard & Finch, 760.00 (8 h at 95.00)
Needs you: "Fenwick" matches Fenwick Ltd and Fenwick Group
```

### Other ways to ask

- Bill the billable tasks of last month for each client on this list, one invoice per client, and show me the totals before sending.
- Create the drafts and email me only the ones above 1,000.00; send the rest without asking.
- Add a 20 percent deposit as the Partial/Deposit amount on every invoice over 2,000.00.
- Create the invoices with a PO number from the third column of my list.

## What Invoice Ninja allows, and what to know first

- Invoice Ninja keeps a draft invisible to the client and out of the client balance until it is emailed, marked as sent or marked as paid.
- Once an invoice is emailed or marked as sent it cannot go back to draft, so a mistake is fixed by cloning the invoice and cancelling or deleting the original.
- Invoice Ninja numbers invoices from the pattern set under Settings > Generated Numbers, so the agent reads the number back instead of choosing one.
- The client record sets the invoice currency, so a client billed in another currency gets the totals in that currency.
- The Free plan allows up to 5 clients with unlimited invoices, and Ninja Pro and above remove the client limit.

send\_invoice asks for your OK by default. To run it weekly without you, switch confirmation off for that tool in your dashboard.

Sources: [Invoice Ninja Docs: Invoices](https://invoiceninja.github.io/docs/user-guide/invoices) · [Invoice Ninja Docs: Recurring Invoices](https://invoiceninja.github.io/docs/user-guide/recurring-invoices) · [Invoice Ninja Docs: Clients](https://invoiceninja.github.io/docs/user-guide/clients) · [Invoice Ninja: Pricing and plan comparison](https://invoiceninja.com/pricing-plans/)

## Call create\_invoice from a script

curl

```
curl -X POST https://cotlet.dev/api/v1/invoice-ninja/clients/Wp3xq8Rnd5/invoices \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"items":[{"product":"Design sprint","description":"Design sprint, 10 hours","unit_cost":90,"quantity":10},{"product":"Hosting setup","description":"Hosting setup","unit_cost":150,"quantity":1}],"invoice_date":"2026-10-14","due_date":"2026-11-13"}'
```

Example response

```
{
"invoice_number": "INV-0043",
"client": "Northwind Studio",
"status": "draft",
"invoice_date": "2026-10-14",
"due_date": "2026-11-13",
"currency": "USD",
"items": [
{
"product": "Design sprint",
"description": "Design sprint, 10 hours",
"unit_cost": 90,
"quantity": 10,
"line_total": 900
},
{
"product": "Hosting setup",
"description": "Hosting setup",
"unit_cost": 150,
"quantity": 1,
"line_total": 150
}
],
"amount": 1050,
"balance": 1050
}
```

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

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

## Invoice Ninja tools this automation uses

__Cotlet Invoice Ninja tools used to create Invoice Ninja invoices from a billing list__
| Tool | Parameters |
| --------------- | ------------------------------------------------------------------------------- |
| list\_clients | company, search, limit, cursor |
| list\_products | company, search, limit, cursor |
| create\_invoice | company, client\_id, items, invoice\_date, due\_date, po\_number, public\_notes |
| send\_invoice | company, invoice\_number, template |

[All 14 Invoice Ninja tools with descriptions](https://cotlet.dev/integrations/invoice-ninja-api-mcp-server.md#tools)

## Frequently asked questions

### Is it safe to connect Invoice Ninja to Cotlet?

Yes. You sign in to Invoice Ninja yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get Invoice Ninja 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 Invoice Ninja automations

- [Chase overdue Invoice Ninja invoices](https://cotlet.dev/integrations/invoice-ninja-api-mcp-server/chase-overdue-invoices.md)
- [Record bank transfers as Invoice Ninja payments](https://cotlet.dev/integrations/invoice-ninja-api-mcp-server/record-bank-transfers-as-payments.md)
- [Invoice Ninja API and MCP server: every tool](https://cotlet.dev/integrations/invoice-ninja-api-mcp-server.md)
- [All use cases](https://cotlet.dev/use-cases.md)

## Give your agent access to Invoice Ninja.

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

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

---

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.
