Odoo integration

How togrant.com talks to Odoo.

100% standard Odoo API. The same XML-RPC interface that ships with every Odoo install since version 8, used exactly the way the Odoo docs say to use it. Your Odoo stays as Odoo Inc. designed it; togrant.com is simply a well-behaved API client sitting next to it.

▶ See the full sync in action — the 3-minute walkthrough shows every read and write between togrant.com and Odoo.

What syncs into Odoo

togrant.com writes into three standard Odoo models — the ones already designed for project work and analytic accounting. Everything else in your Odoo keeps doing what it was doing.

We never write to res.partner, account.move, account.move.line, or anything in the chart of accounts. That's finance's territory.

The three analytic plans

Odoo 17 introduced multi-plan analytic accounting, and that's the mechanism togrant.com leans on. Each plan slices analytic lines by a different axis; combined, they give you per-project + per-donor + per-line-item drill-down.

PlanAxisExample accounts
Plan 1 — Project Which togrant.com project PRJ-001 Civic Voices Uganda
PRJ-002 Civic Voices Burundi
Plan 2 — Donor budget line Which donor category HR
TRV
EQP
IND
Plan 3 — Donor budget detail Which specific budget line 1.1.1.a Project Director
2.1 International flights

A single bill in Odoo can be tagged with one analytic account from each plan. Sum across one axis to get per-project actuals; sum across another to get per-donor-line actuals. Same data, different views.

How we write

Every write goes through an idempotency key shaped like tenant_id:entity_type:entity_id:operation. Before any mutation, we check whether the operation has already succeeded. If it has, we skip and reuse the existing Odoo ID. This means:

my.togrant.com/admin/tenants/acme/odoo
Sync log with idempotency keys, timestamps and per-call response status

The sync log

Every call writes a sync_log row: timestamp, tenant, entity, operation, idempotency key, HTTP status, response size, latency, error message (if any). Read the sync log chapter in the manual for a tour of the columns + how to read a failed sync. The log is:

Connection health

A 5-minute cron pings each tenant's Odoo with a no-op call and records the result. The admin dashboard shows a green / amber / red pill per tenant. Integration health is its own manual chapter with what each state means and the steps to recover. Red for more than 15 minutes triggers an alert to the support team — usually before the customer notices.

Laptop screen showing financial analytics and time-series graphs

Compatibility

Older Odoo? The three-plan analytic structure landed in Odoo 17. Earlier versions used a single analytic axis, which works for some donor reporting but not for combined per-project + per-donor drill-down. If you're on Odoo 16 or older, we recommend planning an upgrade before deploying togrant.com — let's talk about timing.

Where Odoo stays in charge

Some parts of your Odoo are the parts your finance team built their workflow around. togrant.com respects those boundaries so the people doing the books keep doing what they were doing:

Clean boundaries mean an Odoo upgrade rarely needs anything from us, and a togrant.com release rarely needs anything from your finance team.


Start 30-day free trial Walk through your Odoo setup with us