Invoice Ninja automation · runs weekly
Record bank transfers as Invoice Ninja payments
Clients pay by bank transfer, the money lands in your bank account, and the invoice in Invoice Ninja stays Sent until you type the payment in by hand.
Cotlet does it in your own Invoice Ninja account with list_invoices, list_payments and record_payment, called by your AI agent, an n8n workflow or a script.
Hosted · nothing to install or maintain
Can Invoice Ninja do this on its own?
Invoice Ninja matches bank transactions to payments in Banking and Transactions, and bank account sync is listed on Enterprise and Premium only, not on Free or Ninja Pro (checked 14 Oct 2026). The REST API can create payments, on Pro and above. Invoice Ninja has no official MCP server, and nothing reads a list of transfers you paste in.
How you do it in Invoice Ninja today
- Open Payments and create a new payment, or open the invoice and choose More Actions > Mark Paid, which records a payment labelled Manual Entry for the full amount.
- Pick the client first, because every payment belongs to one, then add the invoices it covers. The amount owing is pre-filled for each invoice and you can lower it for a partial payment.
- Set Payment Date to the day the money arrived, since reports use that date, then choose a Payment Type and put the bank reference in Transaction Reference.
- Leave Send Email on if the client should get a payment confirmation, or switch it off.
- A lump sum for several invoices goes in as one payment with each invoice added in the Invoices section. Repeating this for every transfer is the slow part of Friday afternoon.
How to record bank transfers as Invoice Ninja payments
Here are this week's incoming bank transfers. Match each one to an open Invoice Ninja invoice by the reference or the exact amount, record the payment with the bank date, and list the lines you could not match. - 01
Read your list
Your agent takes the bank lines you paste, with date, amount, payer name and reference, and ignores outgoing lines and anything dated before your cutoff.
- 02
Find the open invoices
list_invoices runs with status sent and partial, so the agent sees every invoice with a balance, and list_payments shows what was already recorded for a client so a transfer is never entered twice.
- 03
Match in a fixed order
An invoice number in the reference wins, then an exact balance for the named client. Two invoices with the same balance, or a payer name that fits two clients, goes to the unmatched list instead of a guess.
- 04
Record each payment
record_payment uses the bank date as Payment Date, sets the Payment Type and Transaction Reference, and applies the amount to the invoice. A smaller amount leaves the invoice in Partial; a larger one leaves the extra as an unapplied balance. Each call asks for your OK by default.
- 05
Report what is left
Unmatched lines come back with the best candidate invoice and why it failed, so you can decide in one pass.
What you get back
Bank lines: 5, total 5,580.00 USD
Recorded 4 (4,500.00):
- INV-0034 Northwind Studio, 1,200.00, ref "INV-0034 Oct"
- INV-0039 Kestrel Labs, 2,100.00, exact balance
- INV-0037 Orchard & Finch, 300.00, ref "0037"
- INV-0032 Brightwave Ltd, 900.00, partial, 900.00 still owing
Left for you 1:
- 1,080.00 "J FENWICK": two open invoices could fit Other ways to ask
- Record only transfers that name an invoice number in the reference and list the rest.
- Record the payments but switch off the confirmation email to clients.
- Show me open invoices that no transfer in this list pays, sorted by due date.
- Apply one lump-sum transfer from Kestrel Labs across their three oldest open invoices.
What Invoice Ninja allows, and what to know first
- Invoice Ninja uses the Payment Date in reports, so a payment recorded with today's date instead of the bank date lands in the wrong period.
- A payment smaller than the invoice balance leaves the invoice in Partial status, and the rest is recorded as a second payment later.
- An Amount Received larger than the invoices it is applied to leaves the extra on the payment, and the payment status becomes Partially Unapplied.
- Send Email is on by default when you enter a payment by hand, and it sends the client a payment confirmation.
- Invoice Ninja only lets you refund amounts that were applied to an invoice, so a mistaken entry on the wrong invoice is fixed by editing or deleting the payment.
record_payment 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: Payments · Invoice Ninja Docs: Invoices · Invoice Ninja: Pricing and plan comparison · Invoice Ninja API Reference
Call record_payment from a script
curl -X POST https://cotlet.dev/api/v1/invoice-ninja/invoices/INV-0034/payments \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"amount":1200,"payment_date":"2026-10-12","payment_type":"Bank Transfer","transaction_reference":"INV-0034 Oct"}' {
"payment_number": "0021",
"client": "Northwind Studio",
"payment_date": "2026-10-12",
"payment_type": "Bank Transfer",
"transaction_reference": "INV-0034 Oct",
"amount": 1200,
"status": "Paid",
"applied_to": [
{
"invoice_number": "INV-0034",
"amount": 1200
}
],
"invoice_status": "paid",
"invoice_balance": 0,
"confirmation_email": true
} MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is invoice_ninja_write → record_payment. Example data.
Schedule it in n8n, Make, Zapier or cronInvoice Ninja tools this automation uses
| Tool | Parameters |
|---|---|
| list_invoices | company, status, overdue, client_id, date_from, date_to, limit, cursor |
| list_payments | company, client_id, date_from, date_to, limit, cursor |
| record_payment | company, invoice_number, amount, payment_date, payment_type, transaction_reference, private_notes, send_email |
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.
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.