# Odoo External API > Odoo is a business suite from Odoo SA in Belgium with accounting, invoicing, sales, stock and HR apps on one database. Outside software reaches it through the JSON-2 HTTP API with API keys and, from Odoo 20, an MCP server. - Canonical: https://www.anchorterminal.com/tools/odoo - Markdown: https://www.anchorterminal.com/tools/odoo.md (~7,200 tokens) - Slim: https://www.anchorterminal.com/tools/odoo.min.md (~1,730 tokens, same facts, less prose, for token-sensitive contexts) - JSON: https://www.anchorterminal.com/tools/odoo.json (this page as data, same URL with Accept: application/json) - Site index for agents: https://www.anchorterminal.com/llms.txt (full text: https://www.anchorterminal.com/llms-full.txt) - API: https://www.anchorterminal.com/api/v1/index.json - Updated: 2026-10-08 ## Overview **Grade C · 55.9/100 · rank #499 of 722 · #7 in Accounting & invoicing · not agent-ready · confidence medium** ## Assessment One endpoint pattern reaches every model, with field selection, filters and paging, and keys that expire within three months. On Odoo Online the external API needs the Custom plan, there is no OpenAPI file, and the acceptable use policy asks for about one call a second with no parallel calls. ## Facts | Field | Value | | --- | --- | | Vendor | Odoo SA (https://www.odoo.com) | | Kind | HTTP API | | Category | Accounting & invoicing (https://www.anchorterminal.com/categories/accounting) | | Transport | HTTP | | Auth | API key · An API key created by a user under Preferences, Account Security, New API Key, sent as `Authorization: bearer `. The key acts with that user's access rights and record rules, is shown once and expires within three months at most. Self-serve once the database is on a plan that includes the external API (Custom on Odoo Online), with no app review. The MCP server takes a key created with the MCP scope. The deprecated XML-RPC and JSON-RPC services take the database name, user id and password or key in the call. | | Pricing | Paid (Paid) · Odoo Online needs the Custom plan for the external API. On 8 October 2026 the pricing page, read from a UK address, showed Custom at £41 a user a month billed yearly or £52 billed monthly (£32 and £41 for the first 12 months), Standard at £22 or £28 without the external API, and One App Free at £0 for one app without it. A free trial needs no card. The Community edition is free to self-host under LGPLv3 and includes the JSON-2 API. We did not read US dollar prices, so the price table is empty. | | x402 | No · No x402, MPP or L402 in the external API docs, the MCP server docs or the pricing page (checked 2026-10-08). | | Licence | Community edition LGPL-3.0. The Enterprise edition (the full Accounting app and the AI app with the MCP server) is proprietary under the Odoo Enterprise Subscription Agreement | | Source | https://github.com/odoo/odoo | | Docs | https://www.odoo.com/documentation/20.0/developer/reference/external_api.html | | llms.txt | not found | | Last release | 2026-10-08 | | GitHub stars | 54,912 (as of 2026-10-08) | | Surfaces | JSON-2 API at `/json/2//` (new in Odoo 19.0, POST only, JSON body with `ids`, `context` and named arguments). MCP server at `/mcp` (Odoo 20, AI app). XML-RPC and JSON-RPC at `/xmlrpc/2` and `/jsonrpc` are deprecated | | Plan needed | Custom plan only on Odoo Online. One App Free and Standard exclude the external API. A self-hosted Community server needs no plan | | Credentials | API key per user from Preferences, Account Security, sent as a bearer token. Shown once, 160-bit, mandatory expiry of at most three months, scopes `rpc` and MCP, programmatic `res.users.apikeys/generate` and `revoke` | | Rate limits | The acceptable use policy gives about 1 call a second, no parallel calls, for unsustained use. Odoo Online audit logs allow one request every 5 minutes. No 429 behaviour documented | | Accounting objects | `account.move` (customer invoices, vendor bills, credit notes, receipts and journal entries by `move_type`), `account.move.line`, `account.account`, `account.journal`, `account.payment`, with `action_post` and `action_register_payment` | | MCP tools | Exposed by default are Get Models, Get Fields, Search, Read group and MCP Retrieve initial context. Update Records, Create Records and about 20 navigation, website and media tools are off until an administrator ticks "Available in MCP" | | Errors | 4xx or 5xx with a JSON object of `name` (the Python exception), `message`, `arguments`, `context` and `debug` (a traceback). 401 for a bad key, 404 for an unknown model or method, 422 for bad arguments | | Sandbox | Free trial database without a card, or a self-hosted Community server. Whether a trial database accepts external API calls was not established | | Versions | Odoo 20.0 released September 2026 with standard support to September 2029. Odoo Online also runs SaaS versions released every two to three months | | Capabilities | accounting.ledger, accounting.invoices, accounting.bills | | Tags | hosted, self-hosted, open-source, enterprise, mcp, status-page | | JSON | https://www.anchorterminal.com/api/v1/tools/odoo.json | ## Score breakdown (methodology v0.4, October 2026 research run) Assessed 2026-10-08 from public evidence against the published checklist (https://www.anchorterminal.com/benchmark/#checklist). Confidence: medium. Performance and Task success pending (no score, not in the total); the total is Σ(score × weight) ÷ 80 over the 7 assessed categories. "This run" is each category's share of the 100 points. | Category | Weight | This run | Score (0–100) | Points | | --- | --- | --- | --- | --- | | Reliability | 16% | 20 | 44 | 8.8 | | Performance | 10% | pending | pending | n/a | | Schema & documentation | 13% | 16.2 | 51 | 8.3 | | Agent ergonomics | 13% | 16.2 | 67 | 10.9 | | Security & auth | 14% | 17.5 | 61 | 10.7 | | Payments & pricing | 10% | 12.5 | 22 | 2.8 | | Task success | 10% | pending | pending | n/a | | Maintenance & community | 7% | 8.8 | 73 | 6.4 | | Transparency & trust (editorial 87, provenance 98) | 7% | 8.8 | 93 | 8.1 | | Negative events | up to −15 | up to −15 | none recorded | 0 | | **Total** | | | | **55.9 → C** | ### Why each score - Reliability 44: Graded as the hosted service, Odoo Online, on the hosted lines. status.odoo.com lists components for Odoo Online and Odoo.sh with their current state, but has no history page and no visible API component (10). Its only dated entry is the planned odoo.com upgrade of 4 August 2026, so the last 90 days could not be read as an incident record (5). The acceptable use policy gives about 1 call a second with no parallel calls as typically acceptable, a guide and not an enforced figure, and audit logs are limited to one request every 5 minutes (10). No 429 or Retry-After handling and no idempotency keys were found. The docs do say each call is one transaction that rolls back on error (4). The cloud SLA page sets a 99.9 per cent monthly uptime target and says its objectives are not legally binding (5). JSON-2 has been generally available since Odoo 19.0 (10). - Performance: Pending. Latency is measured per call by our probes, which haven't run yet, so this run doesn't score it. Its weight is shared across the assessed categories until the first probe window closes. - Schema & documentation 51: No OpenAPI file. Each database serves a JSON description of its models, fields and method signatures at `/doc-bearer/index.json` and `/doc-bearer/.json`, which needs a key, and the docs section on it reads "Under construction" (12). No llms.txt on www.odoo.com or under the documentation (0). The JSON-2 page explains bot users, transactions and when one method should replace two calls, and the ORM reference documents each generic method. The MCP tools have one-line descriptions (12). Method signatures are typed in the ORM reference, but arguments travel as a free JSON body and search domains are nested lists with no schema (6). Examples in Python, JavaScript and Bash, and one documented error object with 401, 403, 404 and 422 named (10). Docs are versioned by release (19.0, 20.0) with release notes and a dated removal plan for XML-RPC, but there is no API changelog of its own (11). - Agent ergonomics 67: `fields` on `read` and `search_read` and `limit` size a response, and the MCP server exposes five tools by default out of about 30 (22). Search domains, `offset`, `limit`, `order` and grouped aggregates. The default limit is every matching record (18). Errors are JSON with the Python exception name, message and arguments and a matching HTTP status, with a traceback in place of stable error codes (12). No idempotency keys. A call commits or rolls back as a whole, calls cannot share a transaction, and MCP tools carry a "Readonly Tool" flag (8). Few required parameters and plain HTTP examples in three languages, with no official SDK (7). - Security & auth 61: Per-user API keys in a header, shown once, revocable, with a mandatory expiry of at most three months, `rpc` and MCP scopes and rotation by API. Scopes are coarse, and what a key can touch follows the user's access rights (25). The docs recommend a dedicated bot user with minimum rights, and the MCP server hides write tools until an administrator exposes them. The API itself has no confirmation step (14). Records hold text written by customers and suppliers, and no prompt-injection guidance was found (3). Odoo Online admin activity logs through `get_audit_logs`, and records keep the creating and writing user. No per-call log for the operator was found (8). Signed security.txt, a disclosure policy with CVE ids and advisories, a hall of fame with no cash bounty, and CSA STAR Level 1. No SOC 2 or ISO 27001 report for Odoo itself was found (11). - Payments & pricing 22: No x402, MPP or L402 (0). Plan prices per user per month are public without a login (10). The free trial needs no card and the Community edition is free to self-host with the same API, but the free hosted plan excludes the external API and we could not confirm a trial database accepts API calls (12). A person signs up in a browser and creates the first key. The key API needs an existing key (0). - Task success: Pending. Task success needs the category task suites run through each tool, which haven't run yet, so this run doesn't score it. Its weight is shared across the assessed categories until then. A data provider's data-quality score is published on its listing now and becomes half of this category when it's scored. - Maintenance & community 73: Nightly 20.0 build dated 8 October 2026, and Odoo 20.0 released September 2026 (30). The 20.0 release plus daily nightly builds in the last 90 days (20). Commits on the 18.0, 20.0, saas-19.4 and master branches on 8 October 2026. GitHub shows about 3,800 open issues and we could not read reply times (12). No official SDK. The MCP server is built in, and we did not find it in the MCP registry (3). Public CI on runbot.odoo.com across community, enterprise, upgrade and security checks. We did not read a pass rate (8). - Transparency & trust 93: The Community edition, including the JSON-2 controller, is LGPLv3. The full Accounting app and the MCP server are proprietary Enterprise code under a published agreement (24). Privacy policy effective 24 September 2026 with retention periods (logs 12 months, a cancelled database destroyed after 3 weeks, backups at least 3 months) and data protection terms inside the subscription agreement. No stand-alone DPA was read (27). XML-RPC and JSON-RPC removal is dated to Odoo 22 in autumn 2028, and a support table gives each version's end date (18). Subprocessors (OVH, Google Cloud, Amazon and others) and production and backup locations for five hosting regions are listed (18). Fix list for a coding agent, everything this grade says the listing lacks, the biggest gain first (18 items): https://www.anchorterminal.com/fixes/odoo.md (JSON https://www.anchorterminal.com/fixes/odoo.json) ### What we couldn't check - unchecked: US dollar prices. The pricing page served GBP to our UK address, so `unitPrices` is empty - unchecked: whether a free trial database accepts external API calls before a Custom subscription starts - unchecked: the MCP tool input schemas and annotations. The AI app is Enterprise code and is not in the public repository, so only the documentation was read - unchecked: whether a profit and loss report can be read through JSON-2. The reporting engine is Enterprise code, so `accounting.reports` is left out - unchecked: issue and pull request reply times on GitHub, and the pass rate on runbot.odoo.com - unchecked: the MCP registry was not searched for an Odoo entry - status.odoo.com carries placeholder text and sample data in parts of its markup that are hidden or commented out. We scored only what a reader sees - The lead pointed at the 19.0 docs. Odoo 20.0 was released in September 2026 and is the version read here - No SOC 2 or ISO 27001 report for Odoo itself was found on the security page. Data centre certifications are listed in the privacy policy ### Sources - External JSON-2 API reference, Odoo 20.0 (plan limit, keys, errors, transactions, RPC removal dates): (seen 2026-10-08) - MCP server documentation, read from the 20.0 branch of odoo/documentation: (seen 2026-10-08) - MCP tool list: (seen 2026-10-08) - Pricing page (GBP shown): (seen 2026-10-08) - Acceptable use policy (API throttling): (seen 2026-10-08) - Cloud SLA page: (seen 2026-10-08) - Status page: (seen 2026-10-08) - Odoo Enterprise Subscription Agreement, version 13: (seen 2026-10-08) - Privacy policy: (seen 2026-10-08) - Security page and responsible disclosure policy: (seen 2026-10-08) - security.txt: (seen 2026-10-08) - Supported versions table: (seen 2026-10-08) - Odoo 20 release notes: (seen 2026-10-08) - JSON-2 controller, API key model, `account` module and `/doc-bearer` routes on the 20.0 branch (shallow clone): (seen 2026-10-08) - Odoo Online administration (database list and audit logs through JSON-2): (seen 2026-10-08) - Nightly builds for 20.0: (seen 2026-10-08) - Public CI: (seen 2026-10-08) - NVD keyword search for Odoo, 8 October 2025 to 8 October 2026: (seen 2026-10-08) ## Who's behind it (provenance 98/100, checked 2026-10-08) | Check | Finding | Points | | --- | --- | --- | | Legal entity named | Odoo SA | 20/20 | | Domain age | odoo.com, registered 2001-01-25 (25 years) | 15/15 | | Endpoint on the vendor's domain | odoo.com | 15/15 | | Terms of service | read, states 5 of the 7 things a reader expects | 8.3/10 | | Privacy policy | read, states 7 of the 8 things a reader expects | 9.3/10 | | Status page | status.odoo.com | 10/10 | | Changelog | published | 10/10 | | security.txt | valid | 10/10 | The Odoo Enterprise Subscription Agreement (version 13, 24 September 2026) is between the customer and Odoo SA and its affiliates, under Belgian law, and covers the cloud platforms and self-hosting. The Acceptable Use Policy of 7 May 2025 is incorporated into it. The privacy policy (effective 24 September 2026) gives the postal contact as Odoo SA, Chaussée de Namur 40, Belgium, and privacy@odoo.com. www.odoo.com/.well-known/security.txt is PGP-signed and gives security@odoo.com, the disclosure policy and a hall of fame. It has no Expires field, which RFC 9116 requires. Odoo Online databases answer at .odoo.com. A self-hosted server answers on the owner's own domain. status.odoo.com is a single page with component states and no history page. Its only dated entry on 8 October 2026 was the planned odoo.com upgrade of 4 August 2026. RDAP for odoo.com gives a registration date of 2001-01-25. ### Terms and privacy, as read A reading by a fixed set of rules, each answered with the vendor's own sentence. Not legal advice. **Terms of service** (https://www.odoo.com/documentation/20.0/legal/terms/enterprise.html), read 2026-10-08, gives no date, states 5 of the 7 things a reader expects. - Not found in the text. Gives the date it was last updated. - States a limit on its liability. Rules out indirect and consequential losses, with no cap named in this sentence. - Not found in the text. Says how changes to the terms are announced. - Refers to a service level or uptime commitment. Names 99.9% availability. - Also in the text (2026-10-08). The agreement renews automatically for an equal term, and on renewal charges below the current list price rise by up to 7 per cent a year. "applicable list price, these charges will increase by up to 7% per year of the previous Term." - Also in the text (2026-10-08). Each party's total liability is capped at 50 per cent of what the customer paid in the preceding 12 months. "affiliates arising out of or related to this Agreement will not exceed 50% of the total amount" - Also in the text (2026-10-08). A customer that breaches the section on software access and usage verification agrees to pay an extra fee of 300 per cent of list price for its users. "fee equal to 300% of the applicable list price for the actual number of Users and Light Users." **Privacy policy** (https://www.odoo.com/privacy), read 2026-10-08, dated 2026-09-24, states 7 of the 8 things a reader expects. - Gives the date it was last updated. Last updated 2026-09-24. - Says how long data is kept. Names a period of 2 days. - Not found in the text. Says whether personal data is sold or shared for advertising. - Gives a privacy contact. privacy@odoo.com. - Says where data is transferred or stored. Relies on standard contractual clauses. - Also in the text (2026-10-08). A cloud database is kept deactivated for three weeks after cancellation and then destroyed. "For databases hosted on the Odoo Cloud, if you cancel the service your database is kept deactivated for 3 weeks (the grace period during which you can change your mind), and then destroyed." - Also in the text (2026-10-08). Deleted personal data can remain in backups for up to 12 months. "The personal data could remain stored for up to 12 months in those backups, until they are automatically destroyed." - Also in the text (2026-10-08). Some optional In-App Purchase services may be active by default and send transaction data to third-party services. "When you use Odoo on the Odoo Cloud or on your own self-hosted deployments, some optional "In-App Purchase" services may be active by default." ## Live (updated 2026-10-08 19:38 UTC) - Vendor status page: unknown, no machine-readable status found - Always current: https://www.anchorterminal.com/api/v1/live/odoo.json ## Probe metrics Not measured yet. Our benchmark probes haven't run, so there's no availability, latency or error rate from a run and Performance is pending. Live uptime, where we poll the endpoint, is under Live and doesn't change the score. ## Strengths - `/json/2//` reaches every model the user can see, including `account.move` for invoices, bills and journal entries - API keys are per user, shown once, expire within three months at most and can be generated and revoked through the API - Odoo 20 adds an MCP server at `/mcp` that exposes five read-only tools by default, with write tools switched on one by one - The Community edition is LGPLv3 and carries the same JSON-2 controller, so a self-hosted server answers the same calls at no charge - The privacy policy of 24 September 2026 names subprocessors, hosting regions and retention periods ## Weaknesses - On Odoo Online the external API is limited to the Custom plan. One App Free and Standard exclude it - No OpenAPI file and no llms.txt. The per-database reference at `/doc` needs a login or a key, and its docs section reads "Under construction" - The acceptable use policy puts API traffic at about one call a second with no parallel calls. No 429 or Retry-After handling was found in the docs - No idempotency keys, and the JSON-2 docs say several calls cannot share one transaction - status.odoo.com has no history page, and its only dated entry is a planned upgrade on 4 August 2026 - The full Accounting app and the MCP server are in the proprietary Enterprise edition. Community has Invoicing ## Before you call it (notes for agents) 1. POST to `/json/2//` with `Authorization: bearer ` and named arguments in a JSON body. Add `X-Odoo-Database` when one host serves several databases 2. Pass `fields` and `limit` on `search_read`. The default limit is every matching record 3. Create invoices and bills on `account.move` with `move_type` set to `out_invoice` or `in_invoice`, then call `action_post`. A new move is a draft 4. Keep to about one call a second with no parallel calls on Odoo Online, and batch records into one `create` call 5. Ask the owner for a key on a dedicated bot user with the minimum access rights, and rotate it before its expiry date ## Connect First request: ```bash curl https://$DATABASE.odoo.com/json/2/res.partner/search_read \ -X POST \ --oauth2-bearer $API_KEY \ -H "X-Odoo-Database: $DATABASE" \ -H "Content-Type: application/json" \ -d '{"domain": [["is_company", "=", true]], "fields": ["name"]}' ``` Claude Code: ```bash claude mcp add --transport stdio -- npx -y mcp-remote /mcp --header "Authorization: Bearer " ``` MCP client configuration: ```json { "mcpServers": { "odoo": { "args": [ "-y", "mcp-remote", "\u003cdatabase_url\u003e/mcp", "--header", "Authorization: Bearer \u003cAPI_KEY\u003e" ], "command": "npx" } } } ``` Through letme (picks today, calling later): https://letme.dev/odoo. letme answers with the pick and how to call it direct; calling through letme (one key, the vendor's own price) comes later. How it works: https://www.anchorterminal.com/letme/index.md ## Similar tools Ranked by shared capabilities, then score. Same-category tools with no shared capability key are listed last. | Tool | Grade | Score | Rank | Shared capabilities | x402 | Markdown | | --- | --- | --- | --- | --- | --- | --- | | Apideck Accounting API + MCP | BB | 72.9 | 83 | accounting.ledger, accounting.invoices, accounting.bills | no | https://www.anchorterminal.com/tools/apideck-accounting.md | | Merge Accounting API | BB | 70 | 143 | accounting.ledger, accounting.invoices, accounting.bills | no | https://www.anchorterminal.com/tools/merge-accounting.md | | Xero API + MCP | B | 67.2 | 213 | accounting.ledger, accounting.invoices, accounting.bills | no | https://www.anchorterminal.com/tools/xero.md | | Codat | B | 64.3 | 280 | accounting.bills, accounting.ledger, accounting.invoices | no | https://www.anchorterminal.com/tools/codat.md | | Zoho Books | C | 61.1 | 377 | accounting.ledger, accounting.invoices, accounting.bills | no | https://www.anchorterminal.com/tools/zoho-books.md | | FreeAgent API | C | 57.2 | 481 | accounting.ledger, accounting.invoices, accounting.bills | no | https://www.anchorterminal.com/tools/freeagent.md | ## Panel reviews (0) Reviewed by the Anchor panel (https://www.anchorterminal.com/reviewers/index.md): . Desk reviews, written from public documentation, pricing, terms, source and status history on 1 October 2026. No calls made. For a desk review, the outcome says whether the reviewer's questions could be answered from public material: success, partial or failure. How reviews work: https://www.anchorterminal.com/reviews/how-it-works.md ## Notable - The JSON-2 docs state that access to data through the external API is only available on Custom plans and not on One App Free or Standard (source: ) - API keys cannot last more than three months, and `res.users.apikeys/generate` and `revoke` allow rotation by API, with 10 programmatic keys a user by default (source: ) - Odoo 20, released September 2026, adds an MCP server at `/mcp` with an API key in the MCP scope. The documented client set-up runs `npx -y mcp-remote` (source: ) - The XML-RPC and JSON-RPC `db` service was removed in Odoo 20, and the `common` and `object` services are scheduled for removal in Odoo 22 (autumn 2028) and Online 21.1 (winter 2027) (source: ) - The acceptable use policy names unthrottled RPC or API calls as abuse and gives 1 call a second with no parallel calls as typically acceptable (source: ) - The cloud SLA page sets a 99.9 per cent monthly uptime target and says its objectives are not legally binding guarantees (source: ) - The Community `account` module is named Invoicing in its manifest. The pricing page lists Accounting among the apps of the paid plans (source: ) ## Compare - [Apideck Accounting API + MCP vs Odoo External API](https://www.anchorterminal.com/compare/apideck-accounting-vs-odoo.md): BB 72.9 vs C 55.9 - [Codat vs Odoo External API](https://www.anchorterminal.com/compare/codat-vs-odoo.md): B 64.3 vs C 55.9 - [FreeAgent API vs Odoo External API](https://www.anchorterminal.com/compare/freeagent-vs-odoo.md): C 57.2 vs C 55.9 - [FreshBooks API vs Odoo External API](https://www.anchorterminal.com/compare/freshbooks-vs-odoo.md): E 45.4 vs C 55.9 - [Merge Accounting API vs Odoo External API](https://www.anchorterminal.com/compare/merge-accounting-vs-odoo.md): BB 70 vs C 55.9 - [Odoo External API vs QuickBooks Online API + MCP](https://www.anchorterminal.com/compare/odoo-vs-quickbooks-online.md): C 55.9 vs D 49.2 - [Odoo External API vs Rutter Accounting API](https://www.anchorterminal.com/compare/odoo-vs-rutter.md): C 55.9 vs C 55.6 - [Odoo External API vs Xero API + MCP](https://www.anchorterminal.com/compare/odoo-vs-xero.md): C 55.9 vs B 67.2 - [Odoo External API vs Zoho Books](https://www.anchorterminal.com/compare/odoo-vs-zoho-books.md): C 55.9 vs C 61.1 - [Invoice Ninja API vs Odoo External API](https://www.anchorterminal.com/compare/invoice-ninja-vs-odoo.md): D 52.1 vs C 55.9 ## Verify this listing For the vendor. The badge or a plain link to this page verifies the listing, from a page on odoo.com or one of its subdomains, or the README of github.com/odoo/odoo. It shows the listing is the vendor's and that the vendor knows it's here, and it never changes a grade, rank or review. The vendor sends the page's address to `POST https://www.anchorterminal.com/api/v1/verify` as `{"slug": "odoo", "url": "…"}`, or calls the `verify_listing` tool at https://www.anchorterminal.com/mcp. We fetch the page once, then again every week; two failed checks in a row and the verification lapses, and a later pass restores it. What we check: https://www.anchorterminal.com/builders/index.md#verify HTML badge: ```html Odoo External API on Anchor Terminal ``` Markdown badge, for a README: ```markdown [![Odoo External API on Anchor Terminal](https://www.anchorterminal.com/badges/odoo.svg)](https://www.anchorterminal.com/tools/odoo) ``` Plain link: ```html Odoo External API on Anchor Terminal ``` ## Share this listing For the vendor. Sharing assets for social media, two PNGs of 1200 × 630 that say Odoo External API is listed on Anchor Terminal, with the vendor's logo and this page's address and no grade or score. - Dark: https://www.anchorterminal.com/assets/share/odoo-dark.png - Light: https://www.anchorterminal.com/assets/share/odoo-light.png