maesn

Odoo API Integration

Odoo is an open-source ERP used by companies of every size in more than 100 countries, cloud-hosted on Odoo.sh or self-hosted on a customer's own infrastructure. Connect it through Maesn and you reach it with the same REST API and the same data model as every other supported system.

YOUR PRODUCT+26
Trusted by winning software teams
HubSpotTipaltiPaywiseRallyQredNordhealthFindityFintoClockinHEROHolviLanes & PlanesAgicapHubSpotTipaltiPaywiseRallyQredNordhealthFindityFintoClockinHEROHolviLanes & PlanesAgicap
Why it is fast

An Odoo integration in days

Odoo is not a difficult system, it is an unfamiliar one: no REST, a different instance behind every customer and a session that ends when it feels like it. Those three land on your engineers first. Here is what Maesn does with them.

Odoo: There is no REST API

RPC in, REST out

Odoo runs on XML-RPC and JSON-RPC through a single endpoint that wants model names, method calls and credentials in the request body. Maesn talks JSON-RPC to it and answers you as REST, so no RPC knowledge reaches your team.

Odoo: Every customer is a different instance

URL and database per tenant

Cloud or self-hosted, each customer brings their own base URL and database name, and both are required on every request. Maesn collects them at onboarding and injects them, so one code path serves every deployment.

Odoo: Sessions expire without warning

Re-authenticated before you notice

Odoo authenticates per session rather than with a long-lived key, and a session can be invalidated at any point. Maesn owns the whole lifecycle, from login through storage to re-authentication, so an expiry is not an outage.

What reaches your code is a REST call and an account key. Teams go live in days, and the system after Odoo is a configuration step rather than a second project.

A short call is usually enough to tell whether Maesn fits your use case.

Customer voice
40.000
tradespeople on HERO Software's platform

HERO Software builds against clear docs and real sandboxes

HERO Software digitises the back office for craft businesses, from the quote through to the invoice.

The support provided is truly first class, with impressively quick response times. The documentation is thorough and easy to follow, which made integration a smooth process for me.
Ricardas Kauneckas
Full Stack Engineer, HERO Software
Why companies choose Maesn

Three reasons to reach the Odoo API through Maesn

Connecting one Odoo instance is a project you can finish. Connecting the next customer's instance, on a different host and a different version, is where a direct integration starts to cost every quarter.

01

No RPC, just REST

The RPC layer stays on our side of the line. Your team writes the same request here as for every other system, with no model names and no method calls in the body.

02

Every deployment, one code path

Base URL, database name and the session behind them are held per tenant. Whether a customer runs Odoo.sh or their own server changes nothing in your integration.

03

The next system costs nothing

Once Odoo runs, every other supported accounting and ERP system answers on the same interface. Your second integration is a configuration step.

App marketplace and partnership

Listed in the Odoo Apps store, one of the largest there is

Most providers stop at the API. Maesn does the technical enablement and the relationship, and Odoo's marketplace is one of the largest ERP ecosystems there is, with Community and Enterprise deployments behind it.

Technical enablement

One integration against the Unified API and one data model, identical to every other system Maesn supports. Your engineers meet the same interface here as they will for the next system.

Listing support

Maesn takes you through the technical preparation and the guideline compliance, so the listing goes live without a round of corrections rather than after one.

How an Odoo listing works

Self-service, through GitHub

The listing runs via a GitHub repository connected to your Odoo account. Nothing waits on an approval queue before you can start.

Presentation decides visibility

App pages are ranked on description quality, screenshots and completeness. On this marketplace the write-up is not packaging, it is placement.

Compliance prepared with us

The guidelines are where self-service listings usually stall. Maesn goes through them with you before you publish rather than after a rejection.

The listing runs under your brand, not Maesn's. Your name is what the customer sees when they connect.

Maesn prepares the listing alongside your integration.

Authentication

Four fields from your customer, the Odoo session from us

Odoo has neither a redirect nor a long-lived API token. Your customer hands over four values once, and what runs against Odoo afterwards is a session that Maesn opens, stores and renews.

Auth method
Instance credentials
Four fields per customer

Maesn keeps the session behind those fields alive, so an expiry never becomes your incident.

The four fields your customer brings
Instance URL and database
The base URL of their Odoo, without /web or any path, plus the database name behind it.
User and API key
Their login email plus an API key from Settings, Users, Security. A password works, a key is the better habit.

Two layers are worth separating here. What your customer hands over is a set of credentials. What talks to Odoo afterwards is a session, and sessions expire and can be invalidated without notice. Maesn logs in again rather than passing you a failure.

How your customer connects
  1. 1

    Your customer collects the four values

    Two of them they already know, the database name is the one that occasionally needs their Odoo admin. Odoo Online usually carries it as the subdomain of the URL they use every day.

  2. 2

    The fields reach Maesn

    Through Maesn Connect, a branded form in your own look and feel: your customer pastes the values and submits. The credentials land with Maesn and never pass through your product.

  3. 3

    You work with one account key

    Maesn stores the connection and returns an account key. From there every request carries your API key plus that account key, the same two headers you already send for every other system in the catalogue.

Every system in the catalogue authenticates differently, and Odoo sits at the end of the range that has no redirect at all: credentials, an instance address and a session that ages. Unified authentication is what keeps that off your side, so the flow you build for an OAuth system is the flow you reuse here. A step-by-step walkthrough of the Odoo side lives in the guide below.

Staying in sync

No events from Odoo, events either way

No object here carries a native event, which is normally the point where an integration grows a polling loop, a change-detection table and a backlog of edge cases. Through Maesn that work does not appear on your side at all.

What Odoo sends

No events. Nothing in the coverage matrix carries a native webhook, so a change inside a customer's instance stays invisible until something goes and looks.

What reaches your endpoint

A unified event with the same body, the same vocabulary and the same signature a native one would carry. Maesn does the polling and the change detection, so your handler cannot tell the difference.

Because the detection is a poll and not a push, freshness is a question of interval rather than of milliseconds. For reconciliation or for catching up after downtime, a scheduled delta read is the better instrument, and the same REST call serves it.

A system that pushes nothing is the reason one event model exists across the whole catalogue: the handler you write for an Odoo invoice is the same handler that takes a native event from a system that does push. Reading works the same way, down to the pagination, which Odoo ties to its RPC layer and Maesn normalises to the shared limit and page model.

Before you start

What Odoo asks for up front

Odoo asks for four things before an integration starts, and all of them are easier to plan for than to discover halfway through a build.

An Odoo account with administrator rights
Needed to reach the user settings where the key is generated. A free trial account is enough if you do not run Odoo yourself.
Instance URL and database name, per customer
The base URL only, without /web or any path. On Odoo Online the database is usually the subdomain; a self-hosted customer gets it from whoever runs their instance. Both differ for every customer you connect.
A user and, better than a password, an API key
The login email plus a credential. Odoo lets you use the account password, but a key generated under Settings, Users, Security is the better choice: it is scoped to that user and can be rotated without changing a login.
Somewhere to build that is not a customer's live instance
Odoo publishes no public sandbox, so a first integration otherwise points at a production system with real bookkeeping in it. A free Odoo trial account of your own is the usual answer, and where that is not possible we set one up for you.

We walk through the fields and the sandbox with you.

The data model

One shape for Odoo, and for the system after it

Odoo is an ERP with an accounting module rather than an accounting product, so what you read has a wider surface behind it than on a pure ledger system.

Six objects are enabled today

Accounts, contacts, invoices, journals, journal entries and payments are readable, and accounts, contacts and journal entries writable. That is the default set, and it is the one to plan against rather than the length of the table.

Most of the surface sits behind on demand

That is the ERP surface. The objects exist in Odoo and most of them are available on request rather than by default, so which ones a connection carries follows from your use case.

No updates or deletes in place

Nothing is enabled for update or delete today. Plan corrections as new documents, the way accounting practice expects anyway, and tell us early if your product needs to edit records rather than post them.

Whatever you read comes back in the shared common data model, so an invoice from Odoo has the same shape as an invoice from a pure accounting system, and the code you write here is the code you reuse for the next one.

Tell us which objects your use case needs and we will confirm what is possible.

Odoo FAQ

Odoo API questions

What is Odoo?

Odoo is an open-source ERP platform used across Europe and globally for accounting, invoicing, inventory and CRM. It comes in two editions, Community and Enterprise, and runs either cloud-hosted on Odoo.sh or self-hosted on a customer's own infrastructure. For a software team that means every customer brings their own base URL, database name and possibly a different Odoo version.

Does Odoo have a REST API?

No. Odoo exposes XML-RPC and JSON-RPC through a single endpoint that expects model names, method calls and credentials in the request body. Maesn talks JSON-RPC to Odoo and answers you as REST, so no RPC construction is required on your end.

What is XML-RPC and JSON-RPC in Odoo?

They are the two remote procedure call protocols Odoo exposes in place of a REST API. Both run through a single endpoint that expects a model name, a method call and credentials in the request body, so you address Odoo's internal models directly instead of named resources. That is a different mental model from every REST integration your team has already written, and it is the part Maesn takes over: your requests arrive here as REST, we speak whichever protocol the customer's Odoo wants, and what comes back is the same common data model as every other system on the platform.

Is the Odoo API free to use?

Two answers, because there are two sides to it. On Odoo's side there is no separate price tag but there is a gate: Odoo's own developer documentation states that access to data through the external API is only available on Custom Odoo pricing plans, and not on the One App Free or Standard plans. That is a contract between your customer and Odoo, and no integration layer changes it, which is why the plan question belongs in qualification rather than in the sprint. On the Maesn side there is no second bill at all: access to every integration is included, and pricing is a flat fee per connected customer rather than per API call, so reaching Odoo costs you no more than reaching any other system on the platform. What you stop paying for is the work behind the gate: the RPC layer, the instance URL and database that differ per customer, and the version differences between one customer and the next.

How does Odoo authentication work?

Your customer provides four values: the instance URL, the database name, their login email and a credential, ideally an API key generated under Settings, Users, Security rather than the account password. Odoo then authenticates per session, and Maesn owns that session, including re-authentication when it expires.

How does Maesn handle different Odoo instances?

Base URL and database name are stored per connected customer and added to every request. Whether a customer runs Odoo.sh or their own server makes no difference to your integration code.

Does Odoo support webhooks?

No Odoo object carries a native event, so change detection here is a read you schedule rather than a subscription you register. Through Maesn that read is the same delta call you already run against every other connected system, so it is one loop and not one per system.

Is there an Odoo sandbox?

Odoo publishes no public sandbox, so the usual route is a free Odoo trial account of your own to build against. Where that is not possible, we set one up for you, so the first integration never points at a customer's production instance.

Which data can I read and write in Odoo?

Accounts, contacts, invoices, journals, journal entries and payments are enabled today, with accounts, contacts and journal entries writable. Odoo also carries the largest number of on demand objects of any system in the catalogue, so the coverage is a starting point rather than a ceiling.

Can I get listed in the Odoo app marketplace?

Yes. Listing is self-service through a GitHub repository connected to your Odoo account, and app pages are ranked on description quality, screenshots and completeness. Maesn supports the technical preparation and the guideline compliance.

Why integrate Odoo through Maesn instead of directly?

Because the work does not stop at Odoo. Direct means owning the RPC layer, a base URL and database per customer, a session that expires without warning, behaviour that shifts between annual major versions and change detection with no events to build on. Through Maesn you build once against one data model, and every other supported accounting and ERP system is then reachable on the same interface.
Ship your ERP and accounting integrations. Connect once.
Book a demo