← Back to all docs

Odoo API

Odoo is an open-source ERP and CRM platform delivering integrated business apps—accounting, CRM, sales, inventory, manufacturing, HR, and more—to roughly 15 million users worldwide. An API lets you programmatically read and write records across Odoo models like partners, sales orders, invoices, products, and employees—and push updates such as new orders, invoices, and stock moves back into Odoo across its modular suite.

By Alex KlarfeldMay 30, 2026
Odoo API

What is Odoo?

Odoo is an open-source ERP and CRM platform offering a fully integrated suite of business applications for companies of all sizes, serving roughly 15 million users globally. Customers run accounting and document processing, sales pipeline and quoting, inventory and manufacturing, project delivery, HR, and eCommerce on a single connected platform—replacing disconnected point tools with modules that share one data model.

Core product areas include:

  • Finance (Accounting, Invoicing, Expenses, Spreadsheet/BI, Documents, Sign)
  • Sales (CRM, Sales, POS Shop, POS Restaurant, Subscriptions, Rental)
  • Supply Chain (Inventory, Manufacturing, PLM, Purchase, Maintenance, Quality)
  • Human Resources (Employees, Recruitment, Time Off, Appraisals, Referrals, Fleet)
  • Services (Project, Timesheets, Field Service, Helpdesk, Planning, Appointments)
  • Websites & Marketing (Website Builder, eCommerce, Email/SMS/Social Marketing, Events)

Common data entities:

  • Partners/Contacts (res.partner), Leads & Opportunities (crm.lead)
  • Sales Orders (sale.order), Quotations, Subscriptions
  • Invoices & Bills (account.move), Payments, Journal Entries
  • Products & Variants (product.template, product.product), Pricelists
  • Stock Moves, Quants, Deliveries, Manufacturing Orders
  • Employees (hr.employee), Time Off, Timesheets, Projects & Tasks

The Odoo Integration Challenge

Odoo exposes a powerful external API, but building durable integrations against real customer deployments is non-trivial:

  • Self-hosted vs. Odoo Online vs. Odoo.sh: each deployment model differs in URL, database naming, and which endpoints and ports are reachable
  • Version drift: Community and Enterprise editions across versions 13–19 differ in models, fields, and method signatures
  • Protocol churn: the legacy XML-RPC and JSON-RPC endpoints (/xmlrpc/2, /jsonrpc) are slated for removal in Odoo 22, with a newer JSON-2 (/json/2) surface replacing them
  • Custom modules and fields: heavily customized installs add bespoke models and fields that generic connectors don't anticipate
  • Authentication variety: database password authenticate(), API keys, and /web/session/authenticate session cookies each behave differently for headless automation
  • Access rules and record rules: model-level ACLs and per-record rules silently filter results unless the integration respects the user's entitlements

How Supergood Creates Odoo APIs

Supergood delivers a resilient, normalized API layer over your Odoo instance—whether Community or Enterprise, self-hosted, Odoo Online, or Odoo.sh—abstracting away the underlying XML-RPC, JSON-RPC, and JSON-2 transport so you integrate once against stable objects.

  • Handles database authenticate(), API keys, and session-cookie auth securely in a managed session
  • Maintains session continuity with automatic refresh and version-aware transport selection
  • Normalizes responses across partners, orders, invoices, products, stock, and HR models so you rely on consistent objects
  • Respects model ACLs, record rules, and custom fields so access stays compliant with your Odoo configuration

Use Odoo with AI agents: Odoo MCP Server →

Getting Started

  • Schedule Integration Assessment

Book a 30-minute session to confirm your Odoo edition, version, deployment model, and the modules you need.

  • Supergood Generates and Validates Your API

We deliver a production-ready Odoo adapter tailored to your models, custom fields, and entitlements.

  • Deploy with Monitoring

Go live with continuous monitoring and automatic adjustments as Odoo evolves and deprecates legacy endpoints.

odoo

API Endpoints

Authentication

POST/authenticate

Authenticate against an Odoo database with username/password or API key and obtain a uid/session for downstream calls.

Contacts

GET/partners

List partners and contacts (res.partner) with filters for company, customer/vendor type, and country.

Sales

GET/sale_orders

Retrieve sales orders and quotations (sale.order) with status, customer, and date filters, including order lines.

Sales

POST/create_sale_order

Create a new quotation or sales order with order lines against existing products and a customer.

Accounting

GET/invoices

Pull customer invoices and vendor bills (account.move) with payment status, journal, and period filters.

Inventory

GET/products

List products and variants (product.template/product.product) with on-hand quantities, pricelists, and categories.

Use Cases

Sync Odoo orders and invoices into your data stack

- Pull sales orders, quotations, and order lines from sale.order into a warehouse - Stream customer invoices and payments from account.move to BI and finance tools - Reconcile partner records so customer 360 stays consistent across systems

Automate order and quote creation from external systems

- Push new quotations and sales orders into Odoo from your CRM or storefront - Attach order lines against existing products and pricelists - Trigger downstream confirmation and delivery workflows without portal clicks

Keep inventory and product catalog in sync

- Sync products, variants, and on-hand quantities from Inventory into commerce channels - Push stock adjustments and receipts back as stock moves - Surface low-stock and reorder events to procurement workflows

Integrate HR and project data across tools

- Pull employees, time off, and timesheets from HR modules into payroll and reporting - Sync projects and tasks for unified delivery dashboards - Keep employee and contact records aligned across Odoo and downstream systems

Technical Specifications

Authentication

Database authenticate() (username/password), API keys, or /web/session/authenticate session cookies, handled in a managed session

Connectivity

Odoo external API over XML-RPC (/xmlrpc/2), JSON-RPC (/jsonrpc), and the newer JSON-2 (/json/2) surface, version-selected automatically

Response format

Normalized JSON across partners, orders, invoices, products, stock, and HR models

Rate limits

Adaptive throttling tuned to your Odoo Online, Odoo.sh, or self-hosted instance to avoid server-side limits

Session management

Automatic session refresh, API-key rotation, and version-aware transport selection

Data freshness

Near real-time reads for orders, invoices, and stock with optional scheduled batch syncs

Security

Encrypted credential vault, scoped API keys, ACL/record-rule awareness, and audit logging

Webhooks

Event-style callbacks for order confirmation, invoice posting, payment, and stock changes via automated actions

Latency

Sub-second reads on cached models; multi-second writes when posting through accounting and inventory workflows

Throughput

Horizontally scaled workers sized to multi-module volume across Sales, Accounting, Inventory, and HR

Reliability

Retry, backoff, and idempotency handling for order, invoice, and stock-move writes

Adaptation

Continuous monitoring of Odoo version upgrades and the XML-RPC/JSON-RPC deprecation toward JSON-2

Frequently asked questions

Yes. Supergood works across both Community and Enterprise editions and across versions, profiling your specific models and fields rather than assuming a fixed schema.

Yes. Supergood adapts to your deployment model, tuning URLs, database naming, and reachable endpoints for self-hosted, Odoo Online, and Odoo.sh instances.

Odoo plans to remove the legacy /xmlrpc/2 and /jsonrpc endpoints in Odoo 22. Supergood abstracts the transport, selecting XML-RPC, JSON-RPC, or the newer JSON-2 surface automatically so your integration keeps working through the migration.

Supergood profiles your instance against its actual installed models and fields, preserving custom modules, fields, and entitlements rather than forcing a generic schema.

Yes. Calls run under your authenticated user's entitlements, so model ACLs and per-record rules are honored and the API only returns data that user is permitted to see.

Ready to get a real API?