Odoo
Keep Odoo in step with your orders, stock and finance, with the right person approving every posting.
72 ways to read, 25 ways to write, each write switched on by you.
Quality checks
Built and tested with example responses.
- Ready to connect: doneEvery listed action is built in.
- Built and tested with example responses: doneEach action is built from the provider’s published API and tested against example responses, errors, rate limits and paging.
Connected, approved, proven.
The things teams do most with Odoo, an example flow with a person in the loop, and what Nexra keeps as proof.
Top actions
- Post vendor bill or refund
bill_postings.createApproval by rule - Create draft vendor bill
bills.createApproval by rule - List chart of accounts entries
accounts.listRead
Example flow
- Odoo · List chart of accounts entries
accounts.listDone - Odoo · Post vendor bill or refund
bill_postings.createMaker-checker - Nexra · Record the decision and result in the evidence chainProven
Example workflow. Routine runs go through on their own. Only a change your rules flag, such as one over a limit you set, waits for the right person, who sees the exact change and the rule before it reaches Odoo.
What gets logged
- Whether it ran on its own or who approved it, and under which rule
- A fingerprint of the exact request sent to Odoo
- Odoo's reply: what it created or changed
- One entry in the evidence chain, linked to the one before
Try this in the sandbox
Run the whole flow with test data in your sandbox, then connect your own account when you are ready to go live.
For developers
Technical detail
Adds Odoo 19 accounting (invoices, credit notes, bills, posting, payment registration, exchange rates), purchasing, receipts, stock moves, projects, timesheets, HR, CRM and partners via JSON-2.
Odoo S.A. API docs- Source actions
- 72
- Destination actions
- 25
- Data types
- 48
What you can map
Reads are always available. Writes are off until you switch them on for a connection, and governed writes follow your policies.
accounts2
- List chart of accounts entriesSourceIncremental
Chart of accounts entries (account.account) ordered by ID.
- Find chart of accounts entries by account codeSource
Exact match on code.
analytic accounts1
- List analytic accountsSourceIncremental
Analytic accounts (account.analytic.account) ordered by ID.
bank transactions1
- List bank transactionsSourceIncremental
Bank statement lines (account.bank.statement.line) ordered by ID, with whether each line is reconciled.
bill postings1
- Post vendor bill or refundDestinationProvider duplicate protectionApproval before production
Posts (confirms) a draft vendor bill or refund so it enters the ledger and gets its final number. Nothing is sent or paid.
bills5
- Create draft vendor billDestinationProvider duplicate protectionApproval before production
Creates a draft vendor bill with its lines, unless the vendor already has a bill with the same reference.
- Get vendor billSource
One vendor bill by record ID.
- List vendor bills and refundsSourceIncremental
Vendor bills and refunds (account.move) ordered by ID.
- Find vendor bills and refunds by number or vendor referenceSource
Exact match on name or ref or payment_reference.
- Update vendor billDestinationProvider duplicate protectionApproval before production
Writes supplied fields to an existing vendor bill (account.move.write).
companies1
- List companiesSourceIncremental
Companies (res.company) ordered by ID.
credit notes2
- Create draft credit noteDestinationProvider duplicate protectionApproval before production
Creates a draft customer credit note with its lines, optionally linked to the invoice it reverses, unless one with the same reference already exists.
- List credit notesSourceIncremental
Customer credit notes (account.move, move type out_refund) ordered by ID.
crm stages1
- List CRM pipeline stagesSourceIncremental
CRM pipeline stages (crm.stage) ordered by ID.
currencies1
- List active currenciesSourceIncremental
Active currencies (res.currency) ordered by ID.
currency rates4
- Add exchange rateDestinationProvider duplicate protectionApproval before production
Adds the exchange rate of a currency for a date. A rate already saved for that currency and date is returned instead of creating a second one.
- Get exchange rateSource
One exchange rate by record ID.
- List exchange ratesSourceIncremental
Exchange rates (res.currency.rate) ordered by ID.
- Update exchange rateDestinationProvider duplicate protectionApproval before production
Writes supplied fields to an existing exchange rate (res.currency.rate.write).
customer payments1
- List customer paymentsSourceIncremental
Payments received (account.payment, payment type inbound) ordered by ID.
customers2
- List CustomersSource
List operation for Customers.
- Upsert CustomersDestinationNexra idempotency keyApproval before production
Upsert operation for Customers.
deliveries2
- List DeliveriesSource
List operation for Deliveries.
- Update DeliveriesDestinationNexra idempotency keyApproval before production
Update operation for Deliveries.
departments3
- Get departmentSource
One department by record ID.
- List departmentsSourceIncremental
Departments (hr.department) ordered by ID.
- Update departmentDestinationProvider duplicate protectionApproval before production
Writes supplied fields to an existing department (hr.department.write).
employees3
- Get employeeSource
One employee by record ID.
- List employeesSourceIncremental
Employees (hr.employee) ordered by ID.
- Update employeeDestinationProvider duplicate protectionApproval before production
Writes supplied fields to an existing employee (hr.employee.write).
internal transfers3
- Get internal transferSource
One internal transfer by record ID.
- List internal transfersSourceIncremental
Internal transfers (stock.picking) ordered by ID.
- Find internal transfers by reference or source documentSource
Exact match on name or origin.
inventory1
- List InventorySource
List operation for Inventory.
invoice lines1
- List invoice and bill linesSourceIncremental
Invoice and bill lines (account.move.line) ordered by ID.
invoice postings1
- Post customer invoice or credit noteDestinationProvider duplicate protectionApproval before production
Posts (confirms) a draft customer invoice or credit note so it enters the ledger and gets its final number. Nothing is sent or paid.
invoices5
- Create draft customer invoiceDestinationProvider duplicate protectionApproval before production
Creates a draft customer invoice with its lines, unless one with the same reference already exists.
- Get customer invoiceSource
One customer invoice by record ID.
- List customer invoices and credit notesSourceIncremental
Customer invoices and credit notes (account.move) ordered by ID.
- Find customer invoices and credit notes by number or referenceSource
Exact match on name or ref or payment_reference.
- Update customer invoiceDestinationProvider duplicate protectionApproval before production
Writes supplied fields to an existing customer invoice (account.move.write).
journal entries2
- Create draft journal entryDestinationProvider duplicate protectionApproval before production
Creates a balanced draft journal entry (a miscellaneous entry) with its lines, unless one with the same reference already exists. Nothing is posted or paid.
- List journal entriesSourceIncremental
Miscellaneous journal entries (account.move, move type entry), including the entries behind payments and bank statement lines, ordered by ID.
journals1
- List accounting journalsSourceIncremental
Accounting journals (account.journal) ordered by ID.
leads4
- Get CRM lead or opportunitySource
One CRM lead or opportunity by record ID.
- List CRM leads and opportunitiesSourceIncremental
CRM leads and opportunities (crm.lead) ordered by ID.
- Find CRM leads and opportunities by email or company nameSource
Exact match on email_from or partner_name.
- Update CRM lead or opportunityDestinationProvider duplicate protectionApproval before production
Writes supplied fields to an existing CRM lead or opportunity (crm.lead.write).
orders1
- List confirmed sales ordersSourceIncremental
Confirmed sales orders (sale.order in state sale; quotations and cancelled orders excluded) ordered by ID.
partners4
- Get partnerSource
One partner by record ID.
- List partnersSourceIncremental
Partners (res.partner) ordered by ID.
- Find partners by internal reference or tax IDSource
Exact match on ref or vat.
- Update partnerDestinationProvider duplicate protectionApproval before production
Writes supplied fields to an existing partner (res.partner.write).
payment registrations1
- Register paymentDestinationProvider duplicate protectionApproval before production
Records a payment already received or made against one posted invoice or bill and marks it paid in Odoo's books. No money is collected or sent.
payment terms1
- List payment termsSourceIncremental
Payment terms (account.payment.term) ordered by ID.
payments3
- Get paymentSource
One payment by record ID.
- List customer and vendor paymentsSourceIncremental
Customer and vendor payments (account.payment) ordered by ID.
- Find customer and vendor payments by number or memoSource
Exact match on name or memo.
prices2
- List PricesSource
List operation for Prices.
- Update PricesDestinationNexra idempotency keyApproval before production
Update operation for Prices.
product categories1
- List product categoriesSourceIncremental
Product categories (product.category) ordered by ID.
products2
- List ProductsSource
List operation for Products.
- Upsert ProductsDestinationNexra idempotency keyApproval before production
Upsert operation for Products.
projects3
- Get projectSource
One project by record ID.
- List projectsSourceIncremental
Projects (project.project) ordered by ID.
- Update projectDestinationProvider duplicate protectionApproval before production
Writes supplied fields to an existing project (project.project.write).
purchase order lines1
- List purchase order linesSourceIncremental
Purchase order lines (purchase.order.line) ordered by ID.
purchase orders4
- Get purchase orderSource
One purchase order by record ID.
- List purchase ordersSourceIncremental
Purchase orders (purchase.order) ordered by ID.
- Find purchase orders by number or vendor referenceSource
Exact match on name or partner_ref or origin.
- Update purchase orderDestinationProvider duplicate protectionApproval before production
Writes supplied fields to an existing purchase order (purchase.order.write).
receipts3
- Get receiptSource
One receipt by record ID.
- List incoming receiptsSourceIncremental
Incoming receipts (stock.picking) ordered by ID.
- Find incoming receipts by reference or source documentSource
Exact match on name or origin.
sales order lines1
- List sales order linesSourceIncremental
Sales order lines (sale.order.line) ordered by ID.
sales orders5
- Create Sales OrdersDestinationNexra idempotency keyApproval before production
Create operation for Sales Orders.
- Get sales order or quotationSource
One sales order or quotation by record ID.
- List Sales OrdersSource
List operation for Sales Orders.
- Find sales orders and quotations by number or customer referenceSource
Exact match on name or client_order_ref or origin.
- Update Sales OrdersDestinationNexra idempotency keyApproval before production
Update operation for Sales Orders.
sales teams1
- List sales teamsSourceIncremental
Sales teams (crm.team) ordered by ID.
stock locations1
- List stock locationsSourceIncremental
Stock locations (stock.location) ordered by ID.
stock moves1
- List stock movesSourceIncremental
Stock moves (stock.move) ordered by ID.
task stages1
- List project task stagesSourceIncremental
Project task stages (project.task.type) ordered by ID.
tasks3
- Get taskSource
One task by record ID.
- List tasksSourceIncremental
Tasks (project.task) ordered by ID.
- Update taskDestinationProvider duplicate protectionApproval before production
Writes supplied fields to an existing task (project.task.write).
taxes1
- List taxesSourceIncremental
Taxes (account.tax) ordered by ID.
timesheets3
- Get timesheet entrySource
One timesheet entry by record ID.
- List timesheet entriesSourceIncremental
Timesheet entries (account.analytic.line) ordered by ID.
- Update timesheet entryDestinationProvider duplicate protectionApproval before production
Writes supplied fields to an existing timesheet entry (account.analytic.line.write).
vendor credit notes1
- List vendor credit notesSourceIncremental
Vendor credit notes (refunds, account.move move type in_refund) ordered by ID.
vendor payments1
- List vendor paymentsSourceIncremental
Payments sent (account.payment, payment type outbound) ordered by ID.
vendors3
- Get vendorSource
One vendor by record ID.
- List vendorsSourceIncremental
Vendors (res.partner) ordered by ID.
- Find vendors by reference, tax ID or emailSource
Exact match on ref or vat or email.
warehouses1
- List WarehousesSource
List operation for Warehouses.
Access and limits
- Authentication
- Odoo API key (same credential as the built-in adapter)
- Plans and access
- Odoo 19 or later. On odoo.com the external API requires a Custom plan; self-hosted and Odoo.sh databases are supported. Access rights, record rules and field access of the API key's user apply. API keys expire after at most three months.
- Test environment
- Odoo trial databases and Odoo.sh staging branches can be used for testing.
- Rate limits
- No published request quota; odoo.com applies fair-use throttling (HTTP 429).
- Pagination
- search_read limit/offset ordered by id.
- Provider events
- Automation rules can send webhooks on record changes. Flows run on demand, on a schedule, or when a scheduled check finds new or changed records.
Before you build a flow
- Odoo 19 JSON-2 is not enabled until a separate version-detected transport is implemented and tested.
- The added operations, including the accounting writes, use the documented JSON-2 API (/json/2), available from Odoo 19 only. Odoo 14-18 databases have only /jsonrpc, which carries the password in the request body.
- Base URLs with a path prefix are not supported by the added operations.
- JSON-2 create has no idempotency key, so the accounting creates (draft customer invoices, credit notes, vendor bills, exchange rates) and payment registration use search by external reference, then create: the reference is saved on the record (invoice ref, vendor bill number per vendor, payment memo, currency and date for rates), Nexra searches for it first and returns an existing record instead of creating another, and an uncertain create is settled by searching again, never by resending blindly. Two flows creating the same reference at the same instant could still both create it. Each JSON-2 call is its own transaction.
- Invoice and bill updates only succeed while the move is in draft. Posting is offered by record ID (invoice_postings, bill_postings) and never repeats: a posted record is returned as matched. Deletion, cancellation and reset to draft are not exposed.
- Workflow buttons called: only action_post (posting invoices, credit notes and bills) and the Register Payment wizard (account.payment.register, which records and reconciles a payment already received or made; no money moves). action_confirm, button_validate, action_cancel and manual reconciliation are never called. Receipts, internal transfers and stock moves are read only.
- Search operations match exact values passed as JSON domain data (never string-built), and only on fixed fields. Searches and lists exclude archived records, as Odoo does by default.
- Field names follow Odoo 19 standard models (for example account.payment memo and stock.move quantity, introduced in Odoo 17-18). Each database's /doc page is authoritative; installed apps and customisations can change fields, which then return a provider error.
- Reconciliation reads (credit_notes, vendor_credit_notes, customer_payments, vendor_payments, journal_entries, bank_transactions, orders) are read only filtered views: credit notes are account.move out_refund and in_refund, payments are account.payment split by payment type (inbound or outbound, so customer refunds appear under vendor payments and vendor refunds under customer payments), journal entries are moves of type entry, bank transactions are bank statement lines (amount positive for money in) and orders are confirmed sales orders only.
- Creates without a natural external reference (partners, timesheets, departments, projects, tasks) are still not exposed; updates keyed by record ID are offered instead.
Developer reference
- Create the Odoo S.A. credentials described above with the narrowest permissions your flows need.
- In Nexra, open Connect, then Connections, then New connection, choose Odoo, enter its settings and credentials, and tick only the write actions you need. Connection guide
- Test the connection, then use its actions as flow sources and destinations. Flow guide
Machine-readable detail: GET /api/public/connect/connectors/odoo and the Connections API.