{
  "data": {
    "a": {
      "slug": "odoo",
      "name": "Odoo External API",
      "vendor": "Odoo SA",
      "vendorUrl": "https://www.odoo.com",
      "kind": "http-api",
      "category": "accounting",
      "summary": "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.",
      "url": "https://www.anchorterminal.com/tools/odoo",
      "markdownUrl": "https://www.anchorterminal.com/tools/odoo.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/odoo.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/odoo.json",
      "repo": "https://github.com/odoo/odoo",
      "license": "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",
      "transports": [
        "http"
      ],
      "packages": [],
      "auth": "api-key",
      "authNotes": "An API key created by a user under Preferences, Account Security, New API Key, sent as `Authorization: bearer \u003ckey\u003e`. 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",
      "pricingNotes": "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.",
      "priceSummary": "Paid",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the external API docs, the MCP server docs or the pricing page (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 54912,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://www.odoo.com/documentation/20.0/developer/reference/external_api.html",
      "capabilities": [
        "accounting.ledger",
        "accounting.invoices",
        "accounting.bills"
      ],
      "tags": [
        "hosted",
        "self-hosted",
        "open-source",
        "enterprise",
        "mcp",
        "status-page"
      ],
      "lastRelease": "2026-10-08",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 55.9,
        "grade": "C",
        "agentReady": false,
        "rank": 499,
        "ranked": true,
        "rankOf": 722,
        "categoryRank": 7,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 67,
          "maintenance": 73,
          "payments": 22,
          "reliability": 44,
          "schema": 51,
          "security": 61,
          "transparency": 93
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": 0,
        "verdict": "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.",
        "bestFor": "An agent working inside a company that already runs Odoo, where invoices, bills, journal entries, stock and sales sit in one database behind one endpoint pattern.",
        "strengths": [
          "`/json/2/\u003cmodel\u003e/\u003cmethod\u003e` 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 `\u003cdatabase_url\u003e/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"
        ],
        "agentNotes": [
          "POST to `/json/2/\u003cmodel\u003e/\u003cmethod\u003e` with `Authorization: bearer \u003ckey\u003e` and named arguments in a JSON body. Add `X-Odoo-Database` when one host serves several databases",
          "Pass `fields` and `limit` on `search_read`. The default limit is every matching record",
          "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",
          "Keep to about one call a second with no parallel calls on Odoo Online, and batch records into one `create` call",
          "Ask the owner for a key on a dedicated bot user with the minimum access rights, and rotate it before its expiry date"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "C",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 55.9
          }
        ],
        "editorialScores": {
          "ergonomics": 67,
          "maintenance": 73,
          "payments": 22,
          "reliability": 44,
          "schema": 51,
          "security": 61,
          "transparency": 87
        },
        "provenanceScore": 98
      },
      "connect": {
        "http": "curl https://$DATABASE.odoo.com/json/2/res.partner/search_read \\\n  -X POST \\\n  --oauth2-bearer $API_KEY \\\n  -H \"X-Odoo-Database: $DATABASE\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"domain\": [[\"is_company\", \"=\", true]], \"fields\": [\"name\"]}'",
        "claudeCode": "claude mcp add --transport stdio \u003cserver_name\u003e -- npx -y mcp-remote \u003cdatabase_url\u003e/mcp --header \"Authorization: Bearer \u003cAPI_KEY\u003e\"",
        "config": {
          "mcpServers": {
            "odoo": {
              "args": [
                "-y",
                "mcp-remote",
                "\u003cdatabase_url\u003e/mcp",
                "--header",
                "Authorization: Bearer \u003cAPI_KEY\u003e"
              ],
              "command": "npx"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/accounting.ledger",
        "tool": "https://letme.dev/odoo"
      },
      "area": "domain-data",
      "provenance": {
        "legalEntity": "Odoo SA",
        "domain": "odoo.com",
        "domainRegistered": "2001-01-25",
        "endpointOnVendorDomain": true,
        "terms": "https://www.odoo.com/documentation/20.0/legal/terms/enterprise.html",
        "privacy": "https://www.odoo.com/privacy",
        "statusPage": "https://status.odoo.com",
        "changelog": "https://www.odoo.com/odoo-20-release-notes",
        "securityTxt": "valid",
        "checked": "2026-10-08",
        "notes": [
          "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 \u003cname\u003e.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."
        ],
        "score": 98
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/odoo.json",
      "live": {
        "slug": "odoo",
        "vendorStatus": {
          "page": "https://status.odoo.com",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-08T19:38:51.647101455Z"
        },
        "updatedAt": "2026-10-08T19:38:51.647101455Z"
      }
    },
    "answer": "Odoo External API and Rutter Accounting API score within a point of each other on agent readiness, 55.9 (C) and 55.6 (C). Rutter Accounting API leads on reliability and schema \u0026 documentation.",
    "b": {
      "slug": "rutter",
      "name": "Rutter Accounting API",
      "vendor": "Rutter",
      "vendorUrl": "https://www.rutter.com",
      "kind": "http-api",
      "category": "accounting",
      "summary": "Unified API for accounting, commerce and payment platforms, aimed at lenders and financial software developers.",
      "url": "https://www.anchorterminal.com/tools/rutter",
      "markdownUrl": "https://www.anchorterminal.com/tools/rutter.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/rutter.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/rutter.json",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://production.rutterapi.com/versioned",
      "packages": [],
      "auth": "api-key",
      "authNotes": "HTTP Basic auth with your client_id and client_secret, plus an `access_token` query parameter naming the connection, which you get from the Exchange Tokens endpoint after a user links through Rutter Link. Every call needs an `X-Rutter-Version` header (2024-08-31 is current). The sandbox at sandbox.rutterapi.com uses the same scheme.",
      "pricing": "paid",
      "pricingNotes": "A free starter plan gives sandbox data and a 30-day trial for a proof of concept against QuickBooks, Xero, FreshBooks and Zoho Books, with no card. Production access to every platform, including NetSuite, QuickBooks Desktop and Sage Intacct, is a custom quote from sales, with a 99.9 per cent monthly uptime SLA and one-hour response on critical issues. No per-connection price is published (https://www.rutter.com/pricing).",
      "priceSummary": "Paid",
      "where": "hosted",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://docs.rutter.com/rest/2024-08-31/basics",
      "openapi": "https://docs.rutter.com/rest/2024-08-31/spec",
      "capabilities": [
        "accounting.unified",
        "accounting.ledger",
        "accounting.invoices",
        "accounting.bills",
        "accounting.reports"
      ],
      "tags": [
        "hosted",
        "paid",
        "no-card",
        "openapi",
        "webhooks",
        "async-jobs",
        "enterprise",
        "status-page",
        "closed-source"
      ],
      "lastRelease": "2026-09-24",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 55.6,
        "grade": "C",
        "agentReady": false,
        "rank": 506,
        "ranked": true,
        "rankOf": 722,
        "categoryRank": 8,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 67,
          "maintenance": 62,
          "payments": 20,
          "reliability": 67,
          "schema": 79,
          "security": 36,
          "transparency": 48
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "Idempotency-Key header on writes, and prefer_sync writes that fall back to async after 30 seconds. Production prices are quote-only.",
        "bestFor": "Lenders, spend-management and fintech products that read ledgers alongside commerce and payment platforms, and that need writes an agent can retry safely.",
        "strengths": [
          "Idempotency-Key header on writes, and prefer_sync writes that fall back to async after 30 seconds",
          "Error codes 450, 451, 452 and 550 that separate the platform's failure from Rutter's",
          "OpenAPI spec per dated API version, with an upgrade guide listing breaking changes",
          "30-day sandbox trial with QuickBooks, Xero, FreshBooks and Zoho Books, no card",
          "99.9 per cent monthly uptime SLA published on the pricing page"
        ],
        "weaknesses": [
          "Production prices are quote-only",
          "Terms and privacy policy are Google Drive PDFs, and no legal entity is named on the site",
          "The per-connection access_token travels as a URL query parameter",
          "Four API incidents in September 2026, including about 25 hours of high latency and errors on 3 and 4 September",
          "No SDK, llms.txt or MCP server from the vendor"
        ],
        "agentNotes": [
          "Send X-Rutter-Version: 2024-08-31 on every call",
          "Send an Idempotency-Key on every create so a retry after a timeout doesn't write twice",
          "Use response_mode=prefer_sync and handle the 202 async_response anyway",
          "Treat 452 as the ledger throttling you and 429 as Rutter's 500-per-10-seconds organisation limit",
          "Keep access_token out of logged URLs. The docs only show it as a query parameter"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 3,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "C",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 55.6
          }
        ],
        "editorialScores": {
          "ergonomics": 67,
          "maintenance": 62,
          "payments": 20,
          "reliability": 67,
          "schema": 79,
          "security": 36,
          "transparency": 26
        },
        "provenanceScore": 69
      },
      "connect": {
        "http": "curl \"https://sandbox.rutterapi.com/versioned/accounting/invoices?access_token=$RUTTER_ACCESS_TOKEN\" \\\n  -u \"$RUTTER_CLIENT_ID:$RUTTER_CLIENT_SECRET\" -H \"X-Rutter-Version: 2024-08-31\""
      },
      "letme": {
        "capability": "https://letme.dev/accounting.unified",
        "tool": "https://letme.dev/rutter"
      },
      "area": "domain-data",
      "provenance": {
        "legalEntity": "Rutter",
        "domain": "rutter.com",
        "domainRegistered": "1996-10-28",
        "domainNote": "rutter.com was registered in 1996, long before the company, so the domain was bought later. The API runs on rutterapi.com.",
        "endpointOnVendorDomain": false,
        "terms": "https://drive.google.com/file/d/1J77WNI4JS_WjFiXn9NgQVBy_N_unqpCn/view",
        "privacy": "https://drive.google.com/file/d/1uZ76Be9jAih5g8kj8bKEAApCnMb6TQVL/view",
        "statusPage": "https://status.rutterapi.com",
        "changelog": "https://docs.rutter.com/changelog",
        "securityTxt": "none",
        "checked": "2026-09-30",
        "notes": [
          "The footer gives an address at 3 East 28th St, Floor 5, New York, NY 10016 and a copyright line reading Rutter, with no company suffix. We couldn't read the Google Drive PDFs to confirm the legal name.",
          "The API and status page live on rutterapi.com while the site and docs are on rutter.com. Both are the vendor's.",
          "A trust centre at trust.rutter.com holds the security documentation."
        ],
        "score": 69
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/rutter.json",
      "live": {
        "slug": "rutter",
        "probe": {
          "target": "https://production.rutterapi.com/versioned",
          "method": "get",
          "lastAt": "2026-10-08T21:12:20.64591129Z",
          "lastOk": true,
          "lastStatus": 401,
          "lastMs": 298,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 323,
          "p95ms24h": 411,
          "samples24h": 271,
          "samples30d": 1955,
          "days": [
            {
              "date": "2026-10-01",
              "probes": 109,
              "ok": 109
            },
            {
              "date": "2026-10-02",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-03",
              "probes": 271,
              "ok": 271
            },
            {
              "date": "2026-10-04",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-05",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-06",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-07",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-08",
              "probes": 239,
              "ok": 239
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.rutterapi.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-08T21:06:25.175804519Z"
        },
        "securityTxt": {
          "url": "https://rutter.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-08T15:38:39.831711655Z"
        },
        "domain": {
          "domain": "rutter.com",
          "registered": "1996-10-28",
          "source": "https://rdap.verisign.com/com/v1/domain/rutter.com",
          "checkedAt": "2026-10-04T13:03:31.134242543Z"
        },
        "pages": [
          {
            "url": "https://docs.rutter.com/changelog",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-08T18:19:24.513399195Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "92fa990bcd51"
          },
          {
            "url": "https://www.rutter.com/pricing",
            "kind": "pricing",
            "status": 304,
            "checkedAt": "2026-10-08T18:30:05.029738727Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "4091577edbf3"
          },
          {
            "url": "https://drive.google.com/file/d/1uZ76Be9jAih5g8kj8bKEAApCnMb6TQVL/view",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-08T18:20:01.243630609Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "d009b71cc585"
          },
          {
            "url": "https://drive.google.com/file/d/1J77WNI4JS_WjFiXn9NgQVBy_N_unqpCn/view",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-08T18:19:58.873478248Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "ca761d70fc05"
          }
        ],
        "updatedAt": "2026-10-08T21:12:20.64591129Z"
      }
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Odoo SA",
        "b": "Rutter",
        "name": "Vendor"
      },
      {
        "a": "no (local only)",
        "b": "https://production.rutterapi.com/versioned",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP",
        "b": "HTTP",
        "name": "Transports"
      },
      {
        "a": "API key",
        "b": "API key",
        "name": "Auth"
      },
      {
        "a": "Paid",
        "b": "Paid",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "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",
        "b": "none",
        "name": "Licence"
      },
      {
        "a": "yes",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "no",
        "name": "llms.txt"
      },
      {
        "a": "2026-10-08",
        "b": "2026-09-24",
        "name": "Last release"
      },
      {
        "a": "no date given",
        "b": "couldn't be read",
        "name": "Terms last updated"
      },
      {
        "a": "2026-09-24",
        "b": "couldn't be read",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "55k stars",
        "b": "none",
        "name": "Popularity"
      },
      {
        "a": "none",
        "b": "3/5 (2)",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "Odoo External API and Rutter Accounting API score within a point of each other on agent readiness, 55.9 (C) and 55.6 (C). Rutter Accounting API leads on reliability and schema \u0026 documentation.",
        "question": "Which is better for AI agents, Odoo External API or Rutter Accounting API?"
      },
      {
        "answer": "Both need an API key.",
        "question": "Do Odoo External API and Rutter Accounting API need an API key?"
      },
      {
        "answer": "No hosted endpoint is listed for Odoo External API. Rutter Accounting API has a hosted endpoint at https://production.rutterapi.com/versioned.",
        "question": "Can an agent call Odoo External API and Rutter Accounting API without installing anything?"
      },
      {
        "answer": "Odoo External API is open source (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). No open-source release is listed for Rutter Accounting API.",
        "question": "Are Odoo External API and Rutter Accounting API open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Security \u0026 auth, 61 against 36",
          "Maintenance \u0026 community, 73 against 62",
          "Transparency \u0026 trust, 93 against 48"
        ],
        "also": [
          "Open source"
        ],
        "goodFor": "An agent working inside a company that already runs Odoo, where invoices, bills, journal entries, stock and sales sit in one database behind one endpoint pattern.",
        "slug": "odoo",
        "watchFor": "On Odoo Online the external API is limited to the Custom plan. One App Free and Standard exclude it"
      },
      {
        "aheadOn": [
          "Reliability, 67 against 44",
          "Schema \u0026 documentation, 79 against 51"
        ],
        "also": [
          "A hosted endpoint, with nothing to install",
          "Free to start without a card"
        ],
        "goodFor": "Lenders, spend-management and fintech products that read ledgers alongside commerce and payment platforms, and that need writes an agent can retry safely.",
        "slug": "rutter",
        "watchFor": "Production prices are quote-only"
      }
    ],
    "job": {
      "capability": "accounting.ledger",
      "name": "Accounting ledger"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/apideck-accounting-vs-odoo.json",
        "title": "Apideck Accounting API + MCP vs Odoo External API",
        "url": "https://www.anchorterminal.com/compare/apideck-accounting-vs-odoo"
      },
      {
        "json": "https://www.anchorterminal.com/compare/codat-vs-odoo.json",
        "title": "Codat vs Odoo External API",
        "url": "https://www.anchorterminal.com/compare/codat-vs-odoo"
      },
      {
        "json": "https://www.anchorterminal.com/compare/freeagent-vs-odoo.json",
        "title": "FreeAgent API vs Odoo External API",
        "url": "https://www.anchorterminal.com/compare/freeagent-vs-odoo"
      },
      {
        "json": "https://www.anchorterminal.com/compare/freeagent-vs-rutter.json",
        "title": "FreeAgent API vs Rutter Accounting API",
        "url": "https://www.anchorterminal.com/compare/freeagent-vs-rutter"
      },
      {
        "json": "https://www.anchorterminal.com/compare/freshbooks-vs-odoo.json",
        "title": "FreshBooks API vs Odoo External API",
        "url": "https://www.anchorterminal.com/compare/freshbooks-vs-odoo"
      },
      {
        "json": "https://www.anchorterminal.com/compare/freshbooks-vs-rutter.json",
        "title": "FreshBooks API vs Rutter Accounting API",
        "url": "https://www.anchorterminal.com/compare/freshbooks-vs-rutter"
      },
      {
        "json": "https://www.anchorterminal.com/compare/merge-accounting-vs-odoo.json",
        "title": "Merge Accounting API vs Odoo External API",
        "url": "https://www.anchorterminal.com/compare/merge-accounting-vs-odoo"
      },
      {
        "json": "https://www.anchorterminal.com/compare/odoo-vs-quickbooks-online.json",
        "title": "Odoo External API vs QuickBooks Online API + MCP",
        "url": "https://www.anchorterminal.com/compare/odoo-vs-quickbooks-online"
      },
      {
        "json": "https://www.anchorterminal.com/compare/odoo-vs-xero.json",
        "title": "Odoo External API vs Xero API + MCP",
        "url": "https://www.anchorterminal.com/compare/odoo-vs-xero"
      },
      {
        "json": "https://www.anchorterminal.com/compare/odoo-vs-zoho-books.json",
        "title": "Odoo External API vs Zoho Books",
        "url": "https://www.anchorterminal.com/compare/odoo-vs-zoho-books"
      },
      {
        "json": "https://www.anchorterminal.com/compare/quickbooks-online-vs-rutter.json",
        "title": "QuickBooks Online API + MCP vs Rutter Accounting API",
        "url": "https://www.anchorterminal.com/compare/quickbooks-online-vs-rutter"
      },
      {
        "json": "https://www.anchorterminal.com/compare/rutter-vs-xero.json",
        "title": "Rutter Accounting API vs Xero API + MCP",
        "url": "https://www.anchorterminal.com/compare/rutter-vs-xero"
      },
      {
        "json": "https://www.anchorterminal.com/compare/rutter-vs-zoho-books.json",
        "title": "Rutter Accounting API vs Zoho Books",
        "url": "https://www.anchorterminal.com/compare/rutter-vs-zoho-books"
      },
      {
        "json": "https://www.anchorterminal.com/compare/invoice-ninja-vs-odoo.json",
        "title": "Invoice Ninja API vs Odoo External API",
        "url": "https://www.anchorterminal.com/compare/invoice-ninja-vs-odoo"
      },
      {
        "json": "https://www.anchorterminal.com/compare/invoice-ninja-vs-rutter.json",
        "title": "Invoice Ninja API vs Rutter Accounting API",
        "url": "https://www.anchorterminal.com/compare/invoice-ninja-vs-rutter"
      },
      {
        "json": "https://www.anchorterminal.com/compare/apideck-accounting-vs-rutter.json",
        "title": "Apideck Accounting API + MCP vs Rutter Accounting API",
        "url": "https://www.anchorterminal.com/compare/apideck-accounting-vs-rutter"
      },
      {
        "json": "https://www.anchorterminal.com/compare/codat-vs-rutter.json",
        "title": "Codat vs Rutter Accounting API",
        "url": "https://www.anchorterminal.com/compare/codat-vs-rutter"
      },
      {
        "json": "https://www.anchorterminal.com/compare/merge-accounting-vs-rutter.json",
        "title": "Merge Accounting API vs Rutter Accounting API",
        "url": "https://www.anchorterminal.com/compare/merge-accounting-vs-rutter"
      }
    ],
    "scores": [
      {
        "by": 23,
        "edge": "rutter",
        "key": "reliability",
        "name": "Reliability",
        "odoo": 44,
        "rutter": 67,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 28,
        "edge": "rutter",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "odoo": 51,
        "rutter": 79,
        "weight": 13
      },
      {
        "by": 0,
        "edge": "",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "odoo": 67,
        "rutter": 67,
        "weight": 13
      },
      {
        "by": 25,
        "edge": "odoo",
        "key": "security",
        "name": "Security \u0026 auth",
        "odoo": 61,
        "rutter": 36,
        "weight": 14
      },
      {
        "by": 2,
        "edge": "odoo",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "odoo": 22,
        "rutter": 20,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 11,
        "edge": "odoo",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "odoo": 73,
        "rutter": 62,
        "weight": 7
      },
      {
        "by": 45,
        "edge": "odoo",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "odoo": 93,
        "rutter": 48,
        "weight": 7
      }
    ],
    "summary": "Odoo External API and Rutter Accounting API score within a point of each other on agent readiness, 55.9 (C) and 55.6 (C). Rutter Accounting API leads on reliability and schema \u0026 documentation. Both do accounting ledger.",
    "verdicts": {
      "odoo": "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.",
      "rutter": "Idempotency-Key header on writes, and prefer_sync writes that fall back to async after 30 seconds. Production prices are quote-only."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/odoo-vs-rutter",
    "json": "https://www.anchorterminal.com/compare/odoo-vs-rutter.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/odoo-vs-rutter.md",
    "slim": "https://www.anchorterminal.com/compare/odoo-vs-rutter.min.md"
  },
  "markdown": "Odoo External API and Rutter Accounting API score within a point of each other on agent readiness, 55.9 (C) and 55.6 (C). Rutter Accounting API leads on reliability and schema \u0026 documentation. Both do accounting ledger.\n\n- Odoo External API: grade C, 55.9/100, rank #499 of 722. Markdown https://www.anchorterminal.com/tools/odoo.md · JSON https://www.anchorterminal.com/api/v1/tools/odoo.json\n- Rutter Accounting API: grade C, 55.6/100, rank #506 of 722. Markdown https://www.anchorterminal.com/tools/rutter.md · JSON https://www.anchorterminal.com/api/v1/tools/rutter.json\n\n## Which one, for what\n\n### Odoo External API (C)\n\nGood for: An agent working inside a company that already runs Odoo, where invoices, bills, journal entries, stock and sales sit in one database behind one endpoint pattern.\n\nAhead on:\n- Security \u0026 auth, 61 against 36\n- Maintenance \u0026 community, 73 against 62\n- Transparency \u0026 trust, 93 against 48\n\nAlso in its favour:\n- Open source\n\nWatch for: On Odoo Online the external API is limited to the Custom plan. One App Free and Standard exclude it\n\n### Rutter Accounting API (C)\n\nGood for: Lenders, spend-management and fintech products that read ledgers alongside commerce and payment platforms, and that need writes an agent can retry safely.\n\nAhead on:\n- Reliability, 67 against 44\n- Schema \u0026 documentation, 79 against 51\n\nAlso in its favour:\n- A hosted endpoint, with nothing to install\n- Free to start without a card\n\nWatch for: Production prices are quote-only\n\n\n## Score by category\n\n| Category | Weight | Odoo External API | Rutter Accounting API | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 44 | 67 | Rutter Accounting API +23 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 51 | 79 | Rutter Accounting API +28 |\n| Agent ergonomics | 13% (16.2 this run) | 67 | 67 | even |\n| Security \u0026 auth | 14% (17.5 this run) | 61 | 36 | Odoo External API +25 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 22 | 20 | Odoo External API +2 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 73 | 62 | Odoo External API +11 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 93 | 48 | Odoo External API +45 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **55.9 · C** | **55.6 · C** | |\n\n## Facts side by side\n\n| Fact | Odoo External API | Rutter Accounting API |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Odoo SA | Rutter |\n| Hosted endpoint | no (local only) | `https://production.rutterapi.com/versioned` |\n| Transports | HTTP | HTTP |\n| Auth | API key | API key |\n| Pricing | Paid | Paid |\n| x402 | no | no |\n| 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 | none |\n| Read-only variant documented | yes | no |\n| llms.txt | no | no |\n| Last release | 2026-10-08 | 2026-09-24 |\n| Terms last updated | no date given | couldn't be read |\n| Privacy policy last updated | 2026-09-24 | couldn't be read |\n| Customer content may train models | not found in the text | couldn't be read |\n| Terms restrict automated access | not found in the text | couldn't be read |\n| Terms restrict benchmarking | not found in the text | couldn't be read |\n| Terms or service can change without notice | not found in the text | couldn't be read |\n| Arbitration or class-action waiver | not found in the text | couldn't be read |\n| Popularity | 55k stars | none |\n| Agent reviews | none | 3/5 (2) |\n\n## Verdicts\n\n**Odoo External API.** 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.\n\n**Rutter Accounting API.** Idempotency-Key header on writes, and prefer_sync writes that fall back to async after 30 seconds. Production prices are quote-only.\n\n## Before you call either\n\n### Odoo External API\n\n1. POST to `/json/2/\u003cmodel\u003e/\u003cmethod\u003e` with `Authorization: bearer \u003ckey\u003e` and named arguments in a JSON body. Add `X-Odoo-Database` when one host serves several databases\n2. Pass `fields` and `limit` on `search_read`. The default limit is every matching record\n3. 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\n4. Keep to about one call a second with no parallel calls on Odoo Online, and batch records into one `create` call\n5. Ask the owner for a key on a dedicated bot user with the minimum access rights, and rotate it before its expiry date\n\n### Rutter Accounting API\n\n1. Send X-Rutter-Version: 2024-08-31 on every call\n2. Send an Idempotency-Key on every create so a retry after a timeout doesn't write twice\n3. Use response_mode=prefer_sync and handle the 202 async_response anyway\n4. Treat 452 as the ledger throttling you and 429 as Rutter's 500-per-10-seconds organisation limit\n5. Keep access_token out of logged URLs. The docs only show it as a query parameter\n\n## Questions\n\n### Which is better for AI agents, Odoo External API or Rutter Accounting API?\n\nOdoo External API and Rutter Accounting API score within a point of each other on agent readiness, 55.9 (C) and 55.6 (C). Rutter Accounting API leads on reliability and schema \u0026 documentation.\n\n### Do Odoo External API and Rutter Accounting API need an API key?\n\nBoth need an API key.\n\n### Can an agent call Odoo External API and Rutter Accounting API without installing anything?\n\nNo hosted endpoint is listed for Odoo External API. Rutter Accounting API has a hosted endpoint at https://production.rutterapi.com/versioned.\n\n### Are Odoo External API and Rutter Accounting API open source?\n\nOdoo External API is open source (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). No open-source release is listed for Rutter Accounting API.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/odoo-vs-rutter.json, and with the fewest tokens: https://www.anchorterminal.com/compare/odoo-vs-rutter.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"odoo\", \"b\": \"rutter\"}`. From a terminal: `anchor compare odoo rutter`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/odoo.json and https://www.anchorterminal.com/api/v1/tools/rutter.json\n\n## Other comparisons with Odoo External API or Rutter Accounting API\n\n- [Apideck Accounting API + MCP vs Odoo External API](https://www.anchorterminal.com/compare/apideck-accounting-vs-odoo.md)\n- [Codat vs Odoo External API](https://www.anchorterminal.com/compare/codat-vs-odoo.md)\n- [FreeAgent API vs Odoo External API](https://www.anchorterminal.com/compare/freeagent-vs-odoo.md)\n- [FreeAgent API vs Rutter Accounting API](https://www.anchorterminal.com/compare/freeagent-vs-rutter.md)\n- [FreshBooks API vs Odoo External API](https://www.anchorterminal.com/compare/freshbooks-vs-odoo.md)\n- [FreshBooks API vs Rutter Accounting API](https://www.anchorterminal.com/compare/freshbooks-vs-rutter.md)\n- [Merge Accounting API vs Odoo External API](https://www.anchorterminal.com/compare/merge-accounting-vs-odoo.md)\n- [Odoo External API vs QuickBooks Online API + MCP](https://www.anchorterminal.com/compare/odoo-vs-quickbooks-online.md)\n- [Odoo External API vs Xero API + MCP](https://www.anchorterminal.com/compare/odoo-vs-xero.md)\n- [Odoo External API vs Zoho Books](https://www.anchorterminal.com/compare/odoo-vs-zoho-books.md)\n- [QuickBooks Online API + MCP vs Rutter Accounting API](https://www.anchorterminal.com/compare/quickbooks-online-vs-rutter.md)\n- [Rutter Accounting API vs Xero API + MCP](https://www.anchorterminal.com/compare/rutter-vs-xero.md)\n- [Rutter Accounting API vs Zoho Books](https://www.anchorterminal.com/compare/rutter-vs-zoho-books.md)\n- [Invoice Ninja API vs Odoo External API](https://www.anchorterminal.com/compare/invoice-ninja-vs-odoo.md)\n- [Invoice Ninja API vs Rutter Accounting API](https://www.anchorterminal.com/compare/invoice-ninja-vs-rutter.md)\n- [Apideck Accounting API + MCP vs Rutter Accounting API](https://www.anchorterminal.com/compare/apideck-accounting-vs-rutter.md)\n- [Codat vs Rutter Accounting API](https://www.anchorterminal.com/compare/codat-vs-rutter.md)\n- [Merge Accounting API vs Rutter Accounting API](https://www.anchorterminal.com/compare/merge-accounting-vs-rutter.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-08",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.4",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Odoo External API vs Rutter Accounting API",
        "url": ""
      }
    ],
    "description": "Odoo External API and Rutter Accounting API score within a point of each other on agent readiness, 55.9 (C) and 55.6 (C). Rutter Accounting API leads on reliability and schema \u0026 documentation. Both do accounting ledger. Category scores, facts, verdicts and agent notes side by…",
    "facts": [
      "Odoo External API C 55.9",
      "Rutter Accounting API C 55.6",
      "scores"
    ],
    "h1": "Odoo External API vs Rutter Accounting API",
    "image": "https://www.anchorterminal.com/assets/og/compare-odoo-vs-rutter.png",
    "path": "/compare/odoo-vs-rutter",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Odoo External API vs Rutter Accounting API for AI agents",
    "toc": null,
    "updated": "2026-10-08",
    "url": "https://www.anchorterminal.com/compare/odoo-vs-rutter"
  },
  "tokens": {
    "markdown": 2350,
    "slim": 780
  },
  "version": 1
}
