The Odoo REST API: A Developer Guide

An honest answer to a common question: does Odoo have a REST API, and how do you get REST-style access if you need it?

Developers searching for the Odoo REST API are usually expecting to find one, the way many modern platforms expose a REST API. The honest answer is more nuanced, and getting it right saves a lot of wasted effort. This is a developer's guide to the question.

The honest answer first

Odoo's native external API is not a REST API. Odoo's standard, documented programmatic interface works over XML-RPC and JSON-RPC. These are well-established remote-procedure-call protocols, and they are perfectly capable, but they are not REST. A developer who comes to Odoo expecting to find REST endpoints in the way some other platforms provide them will not find them as the native interface. It is far better to know this at the start than to discover it midway through a project.

Why this matters, and why it often does not

It is worth being clear about why this distinction matters and, also, why it often matters less than it first seems.

It matters because if a project, or an external system, specifically expects to talk to Odoo over REST, that expectation has to be addressed deliberately rather than assumed.

It often matters less than it seems because what most developers actually need is not "REST specifically", it is "a way to read from and write to Odoo from external code". And Odoo's XML-RPC and JSON-RPC interface provides exactly that. It lets external code, in almost any language, authenticate and then read records, create records, update records, and call methods. If the underlying need is programmatic access to Odoo, the native API meets it; the protocol is XML-RPC or JSON-RPC rather than REST. Many developers searching for a REST API simply want integration, and the native API serves that.

When you genuinely need REST

Sometimes the requirement for REST is real, not just a default expectation. The external system you are integrating may only speak REST. A mobile or web front end you are building may be designed around REST endpoints. A partner's platform may require a REST-style interface. In those cases, "use XML-RPC instead" is not an answer, and you genuinely need REST-style endpoints on Odoo.

How to get REST-style access to Odoo

The good news is that REST-style access to Odoo is entirely achievable; it is just not the out-of-the-box native interface. There are two main routes.

Build custom controllers. Odoo lets developers define web endpoints through controllers. A developer can build a module that exposes the REST-style endpoints a project needs, defining the routes, the request and response shapes, and the authentication, mapped onto Odoo's data and logic underneath. This gives you exactly the REST interface your project requires, designed to fit it.

Use a community module. There are community-developed modules that add REST API capability to Odoo. Where one fits the need, it can save building from scratch, with the usual caveats of adopting any third-party module: assess its quality, its maintenance, and its fit before relying on it.

Either way, the REST layer is something added to Odoo, built as a module, on top of Odoo's data and logic, rather than a native feature you switch on.

How to decide

For a developer, the decision is straightforward once the honest facts are clear. If you need programmatic access to Odoo and the protocol is not actually dictated, use the native XML-RPC or JSON-RPC API; it does the job and requires nothing extra. If a REST interface is genuinely required by the system you are integrating or the application you are building, plan to add REST-style endpoints, typically through custom controllers, as a deliberate piece of development. What you should not do is assume a native REST API exists and build around that assumption.

The takeaway

Odoo does not have a native REST API; its standard external API is XML-RPC and JSON-RPC, which provides full programmatic access and serves most integration needs. When REST specifically is genuinely required, it is added to Odoo, through custom controllers or a community module, as a deliberate development task. Know which case you are in before you build. For how we approach Odoo, see our ERP practice.

All posts

Got a Topic Worth Posting?

Suggest a Topic

If a question keeps coming up in your operations, it might be worth its own post.