Skip to content
All connectors
Odoo logo

Odoo

ERP & business operations

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.

  1. Ready to connect: doneEvery listed action is built in.
  2. 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.
Odoo with Nexra

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 refundbill_postings.createApproval by rule
  • Create draft vendor billbills.createApproval by rule
  • List chart of accounts entriesaccounts.listRead

Example flow

  1. Odoo · List chart of accounts entriesaccounts.listDone
  2. Odoo · Post vendor bill or refundbill_postings.createMaker-checker
  3. 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

  1. Create the Odoo S.A. credentials described above with the narrowest permissions your flows need.
  2. 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
  3. 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.