Skip to Content

Introducing Odoo Python Client Libraries for Modern and Legacy Odoo Integrations

Make Odoo integrations feel more like modern Python development and less like wrestling transport layers.
8 May 2026 by
Introducing Odoo Python Client Libraries for Modern and Legacy Odoo Integrations
PyStrap Technologies Ltd, Oluwatumbi Joseph

If you’ve worked with Odoo integrations long enough, you’ve probably experienced one of these situations:

  • Writing repetitive XML-RPC boilerplate
  • Fighting inconsistent payloads
  • Wrapping raw API calls in your own abstractions
  • Debugging cryptic RPC errors at 2AM
  • Maintaining different integrations across multiple Odoo versions

We ran into the same problems.

So we built two lightweight Python libraries designed to make Odoo integrations cleaner, faster, and far more maintainable for developers.

Both libraries were designed around a simple goal:

Make Odoo integrations feel more like modern Python development and less like wrestling transport layers.

Why Another Odoo Client?

The Odoo ecosystem has always had powerful APIs, but developer experience has often lagged behind modern standards.

Many developers still end up writing raw XML-RPC calls manually or building custom wrappers around existing tools. Even within the Odoo community, developers regularly mention frustrations around older RPC tooling, lack of typing, verbose integrations, and outdated patterns.

As Odoo evolves toward newer JSON-2 APIs and gradually moves away from legacy RPC patterns, integrations are also changing.

We wanted libraries that:

  • feel clean and Pythonic
  • simplify model interactions
  • reduce repetitive code
  • support modern workflows
  • provide safer debugging behavior
  • work naturally with real production integrations

pyodoo-client — Built for Odoo 18/19+ JSON APIs

Modern Odoo versions are moving toward the /json/2 API architecture, and pyodoo-client is built specifically for that future.

Instead of juggling raw payloads and repetitive request logic, you get a cleaner ORM-style experience.

Quick Example

from pyodoo_client import OdooClient

odoo = OdooClient(
url="https://your-company.odoo.com",
db="production",
api_key="YOUR_API_KEY",
)

partners = odoo.model("res.partner").search_read({
"domain": [
["is_company", "=", True]
],
"fields": ["name", "email"]
})

print(partners)

Simple. Predictable. Readable.

What Makes It Useful?

ORM-Like Access

Instead of manually crafting transport requests everywhere:

client.model("sale.order")

This keeps integrations closer to how Odoo developers already think.

Context Handling That Doesn’t Hurt

Odoo integrations often become messy when context handling spreads across requests.

pyodoo-client supports:

  • default contexts
  • layered contexts
  • per-call overrides
  • with_context() patterns

without turning every integration into nested dictionaries.

Better Error Management

Production integrations should not crash unpredictably because of one malformed response.

The client supports:

  • safe fallback behavior
  • captured error states
  • optional exception raising with debug=True

which makes debugging cleaner during development while keeping production integrations stable.

pyodoo-rpc-client — For Legacy Odoo Systems That Still Matter

Let’s be realistic:

A huge number of production Odoo deployments still run on versions using XML-RPC.

And many businesses are not migrating overnight.

That’s where pyodoo-rpc-client comes in.

It provides a much cleaner interface around Odoo’s older RPC architecture while remaining lightweight and easy to use.

Legacy Doesn’t Have to Mean Ugly

Example

from pyodoo_rpc_client import OdooRpcClient

odoo = OdooRpcClient(
url="https://mycompany.example.com",
db="production",
username="[email protected]",
password="password",
)

partners = odoo.model("res.partner").search_read(
[["customer_rank", ">", 0]],
fields=["name", "email"]
)

print(partners)

No massive XML-RPC boilerplate.

No repetitive execute_kw wrappers.

No transport-layer chaos.

Built Around Real Integration Problems

These libraries were designed from practical integration work:

  • ERP integrations
  • external APIs
  • reporting systems
  • automation pipelines
  • synchronization services
  • customer portals
  • AI workflows
  • business intelligence tooling

The goal was not to create “yet another wrapper.”

The goal was to reduce friction.

Designed for Modern Python Developers

Both libraries support:

  • Python 3.9+
  • ORM-style model access
  • context management
  • clean abstraction layers
  • debug/runtime control
  • lightweight dependency footprint

And most importantly:

they stay out of your way.

Odoo Integrations Are Evolving

The Odoo ecosystem is moving quickly:

  • JSON-2 APIs
  • AI integrations
  • MCP tooling
  • external automation platforms
  • modern cloud deployments
  • hybrid ERP ecosystems

Developers are increasingly expecting:

  • cleaner APIs
  • better abstractions
  • maintainable integrations
  • typed workflows
  • scalable tooling

You can already see the broader developer community building modern RPC tooling around these expectations.

The old “just use raw XML-RPC” approach is slowly disappearing.

Which Library Should You Use?

Use pyodoo-client if:

  • you’re targeting Odoo 18/19+
  • you’re using /json/2
  • you want modern API workflows
  • you’re building future-proof integrations

Use pyodoo-rpc-client if:

  • you support Odoo 17 or below
  • you rely on XML-RPC
  • you maintain older production deployments
  • you need backward compatibility

Installation

Modern JSON Client

pip install pyodoo-client

Legacy RPC Client

pip install pyodoo-rpc-client

Final Thoughts

Good integration tooling matters.

Developers should spend time building business logic — not rewriting transport wrappers for the hundredth time.

Whether you’re integrating modern Odoo JSON APIs or maintaining legacy ERP systems still running XML-RPC, these libraries aim to make the experience cleaner, more maintainable, and more enjoyable.

Explore the projects:

Built by developers who got tired of rewriting the same Odoo integration layer over and over again.