Odoo automation · runs daily
Register payments on Odoo invoices
When customers pay by bank transfer, someone matches each receipt to an open invoice in Odoo and registers the payment, one invoice window at a time.
Cotlet does it in your own Odoo account with get_invoice, list_payment_journals and register_payment, called by your AI agent, an n8n workflow or a script.
Hosted · nothing to install or maintain
Can Odoo do this on its own?
Odoo registers payments in the app through the Pay window (checked 14 Oct 2026), and it can also reconcile bank transactions. From outside the app, the external API is Custom-plan only on Odoo Online, and the development-version MCP server offers generic Create Records and Update Records but no payment tool. A script has to drive the payment wizard itself.
How you do it in Odoo today
- Open the posted customer invoice from Accounting > Customers > Invoices and click Pay.
- In the window, choose the Journal and the Payment Date, then check the Payment Method; if the contact has a preferred method, Odoo selects it.
- Check the Amount. With payment terms, Odoo sets it to the current installment; click full amount to pay the whole balance. Edit the Memo if you want a reference such as a check number.
- Click Create Payment. The invoice shows In payment, and becomes Paid after the payment is reconciled with a bank transaction.
How to register payments on Odoo invoices
Here are today's bank receipts: Northwind Studio 3,200.00 EUR for INV/2026/00412 and Harbor Print 2,150.00 EUR for INV/2026/00398. Find each invoice in Odoo and register the payment on my Bank journal, dated today. - 01
Find the invoice
For each receipt the agent calls get_invoice by number and checks that the invoice is posted and not already Paid. A receipt for a draft or paid invoice is parked in the report, not booked.
- 02
Compare the amounts
The amount in your message is compared with the amount due on the invoice. An equal amount is booked in full; a smaller amount is booked as a partial payment only if your prompt says partial payments are fine.
- 03
Pick the journal
list_payment_journals returns the bank and cash journals you can pay into. The agent uses the journal you named, and stops to ask when the name matches more than one.
- 04
Register with your OK
register_payment records money against your books, so each call waits for your OK until you switch confirmation off for register_payment. The agent never edits the invoice lines.
- 05
Report the status
The agent reports each invoice as In payment or Paid, as Odoo shows it, plus every receipt it could not match.
What you get back
Receipts received: 2
Registered: 2 on Bank journal, dated 14 Oct 2026
- INV/2026/00412 Northwind Studio, 3,200.00 EUR, now In payment
- INV/2026/00398 Harbor Print, 2,150.00 EUR, now In payment
Not matched: 0 Other ways to ask
- Register payments from this CSV of bank lines only where the memo contains an invoice number, and list the rest.
- Each evening, list invoices marked In payment so I can reconcile them in the bank screen.
- Register the full amount on every invoice I name in this message, on the Cash journal.
What Odoo allows, and what to know first
- Odoo's Pay window has the fields Journal, Payment Date, Payment Method, Amount and Memo, and the button that books the payment is Create Payment.
- After a payment is created Odoo shows the invoice as In payment; it becomes Paid once the payment is reconciled with a bank transaction.
- When the main bank account is set as the outstanding account on the journal's payment method, a full payment marks the invoice as Paid at once, without reconciliation.
- With payment terms on the invoice, Odoo proposes the amount of the current installment, and the full amount button pays the whole balance.
register_payment asks for your OK by default. To run it daily without you, switch confirmation off for that tool in your dashboard.
Sources: Odoo documentation: Payments · Odoo documentation: Customer invoices · Odoo documentation: Available MCP tools
Call register_payment from a script
curl -X POST https://cotlet.dev/api/v1/odoo/invoices/4182/payments \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"journal":"Bank","amount":3200,"payment_date":"2026-10-14","memo":"Bank transfer Northwind"}' {
"payment_id": 5120,
"invoice_id": 4182,
"number": "INV/2026/00412",
"journal": "Bank",
"amount": 3200,
"payment_date": "2026-10-14",
"memo": "Bank transfer Northwind",
"payment_status": "in_payment"
} MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is odoo_write → register_payment. Example data.
Schedule it in n8n, Make, Zapier or cronOdoo tools this automation uses
| Tool | Parameters |
|---|---|
| get_invoice | invoice_id, number |
| list_payment_journals | none |
| register_payment | invoice_id, journal, amount, payment_date, memo |
Frequently asked questions
Is it safe to connect Odoo to Cotlet?
Yes. You sign in to Odoo yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get Odoo 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 Odoo.
Free 7-day trial with 2,000 credits, no card needed. Cotlet is independent and not affiliated with Odoo.