{
  "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": 645,
        "ranked": true,
        "rankOf": 950,
        "categoryRank": 8,
        "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-10T00:50:53.617611895Z"
        },
        "githubStars": 54948,
        "securityTxt": {
          "url": "https://odoo.com/.well-known/security.txt",
          "state": "valid",
          "checkedAt": "2026-10-09T15:40:17.754646935Z"
        },
        "pages": [
          {
            "url": "https://www.odoo.com/odoo-20-release-notes",
            "kind": "changelog",
            "status": 0,
            "checkedAt": "2026-10-09T18:52:38.747527296Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "blockedByRobots": true
          },
          {
            "url": "https://www.odoo.com/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-09T18:52:38.747542804Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "62e100447c2e"
          },
          {
            "url": "https://www.odoo.com/documentation/20.0/legal/terms/enterprise.html",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-09T18:52:36.675623437Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "54b423c6a157"
          }
        ],
        "updatedAt": "2026-10-10T00:50:53.617611895Z"
      }
    },
    "answer": "Pennylane scores 66.3 (B) on agent readiness against Odoo External API's 55.9 (C), and leads in 3 of 7 scored categories. Odoo External API leads on maintenance \u0026 community and transparency \u0026 trust.",
    "b": {
      "slug": "pennylane",
      "name": "Pennylane",
      "vendor": "Pennylane SAS",
      "vendorUrl": "https://www.pennylane.com",
      "kind": "http-api",
      "category": "accounting",
      "summary": "Pennylane is a French accounting and invoicing platform for companies and accounting firms. Its Company and Firm REST APIs cover invoices, supplier invoices, ledger entries, transactions and exports. A hosted read-only MCP server exposes the same books to AI assistants.",
      "url": "https://www.anchorterminal.com/tools/pennylane",
      "markdownUrl": "https://www.anchorterminal.com/tools/pennylane.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/pennylane.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/pennylane.json",
      "license": "Proprietary service under Pennylane's API agreement and customer terms",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://app.pennylane.com/api/external/v2",
      "packages": [],
      "auth": "mixed",
      "authNotes": "Bearer token on every call. Companies generate a Company API token under Settings, Connectivity, Developers, which needs the Essentiel plan or above and an admin role. Each token is tied to one company, is read only or read and write, expires after 1, 6 or 12 months or never, and can be deleted. Firms generate Firm API tokens. Integration partners use the OAuth 2.0 authorisation code grant after the Partnerships team issues a client ID and secret, with 24-hour access tokens and rotating 90-day refresh tokens. The MCP server uses OAuth 2.1 with PKCE and dynamic client registration, and the user signs in through a browser.",
      "pricing": "paid",
      "pricingNotes": "API and MCP access for companies needs the Essentiel plan or above, listed at 24 euros a month before VAT for one user on the pricing tab for sole traders and single-shareholder companies. Premium is 79 euros. Each plan has a 15-day trial with no commitment, and a sandbox can be created inside an account. Whether the trial needs a card and the prices for other company types were not established. Accounting firms get the MCP at no extra cost (https://www.pennylane.com/fr/tarifs, checked 2026-10-09).",
      "priceSummary": "Paid",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the API docs, the MCP docs or the pricing page (checked 2026-10-09).",
        "endpoints": []
      },
      "toolCount": 31,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-10-09"
      },
      "docsUrl": "https://pennylane.readme.io/docs/api-overview",
      "llmsTxt": "https://pennylane.readme.io/llms.txt",
      "capabilities": [
        "accounting.ledger",
        "accounting.invoices",
        "accounting.bills",
        "accounting.reports"
      ],
      "tags": [
        "hosted",
        "closed-source",
        "oauth",
        "openapi",
        "mcp",
        "llms-txt",
        "webhooks",
        "status-page"
      ],
      "lastRelease": "2026-09-30",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 66.3,
        "grade": "B",
        "agentReady": false,
        "rank": 297,
        "ranked": true,
        "rankOf": 950,
        "categoryRank": 4,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 66,
          "maintenance": 65,
          "payments": 20,
          "reliability": 75,
          "schema": 85,
          "security": 68,
          "transparency": 76
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-09"
        },
        "negative": 0,
        "verdict": "The v2 API has per-resource read and write scopes, an OpenAPI definition on every reference page, llms.txt and a breaking-change process that ran over 24 weeks. Access needs a paid Essentiel plan or partner approval, creation endpoints are not idempotent, and the API agreement lets Pennylane change or revoke the API without notice.",
        "bestFor": "An agent working on the books of French companies or an accounting firm's client portfolio, with French chart of accounts, FEC export, Factur-X e-invoicing and VAT returns.",
        "strengths": [
          "Scopes split each resource into `:readonly` and `:all`, for company tokens, firm tokens and OAuth apps",
          "Hosted MCP server at `https://mcp.pennylane.com/mcp` with 31 read-only tools, OAuth 2.1 with PKCE and dynamic client registration",
          "OpenAPI 3.0.1 definitions on each reference page, an llms.txt index and Markdown twins of every docs page",
          "The 2026 breaking changes ran in three phases over 24 weeks with an opt-in header, ending 1 July 2026",
          "ISO 27001 certificate published, EU hosting on AWS in Ireland, and a dated sub-processor list with 30 days' notice of additions"
        ],
        "weaknesses": [
          "The API agreement allows changes, suspension or revocation with or without notice and supplies the API as is",
          "Creation endpoints do not enforce idempotency, except supplier invoice imports",
          "API and MCP access for companies starts at the Essentiel plan, and OAuth apps need approval from the Partnerships team",
          "No official SDK was found, and the MCP server is not in the official MCP registry",
          "No security.txt, bug bounty or published disclosure policy was found",
          "The API agreement grants Pennylane an exclusive licence over API integrations and their source code on request"
        ],
        "agentNotes": [
          "Call `GET https://app.pennylane.com/api/external/v2/me` first to confirm the token, user and company context",
          "Stay under 25 requests per 5 seconds per token and wait for the `retry-after` value on a 429",
          "Do not retry a create after a timeout without checking first. Only supplier invoice imports are deduplicated",
          "Send `filter` and `sort` again with every `cursor`. The cursor stores position only",
          "Send amounts as strings such as \"120.00\", and ask for `:readonly` scopes when the task only reads",
          "Use the MCP server for reads only. It cannot create, edit or delete, and firm connections need `company_id`"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 66.3
          }
        ],
        "editorialScores": {
          "ergonomics": 66,
          "maintenance": 65,
          "payments": 20,
          "reliability": 75,
          "schema": 85,
          "security": 68,
          "transparency": 71
        },
        "provenanceScore": 80
      },
      "connect": {
        "http": "curl https://app.pennylane.com/api/external/v2/me \\\n  -H \"Authorization: Bearer $PENNYLANE_API_TOKEN\"",
        "claudeCode": "claude mcp add --transport http pennylane https://mcp.pennylane.com/mcp",
        "config": {
          "mcpServers": {
            "pennylane": {
              "url": "https://mcp.pennylane.com/mcp"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/accounting.ledger",
        "tool": "https://letme.dev/pennylane"
      },
      "area": "domain-data",
      "provenance": {
        "legalEntity": "Pennylane SAS",
        "domain": "pennylane.com",
        "domainRegistered": "1998-09-23",
        "endpointOnVendorDomain": true,
        "terms": "https://pennylane.readme.io/page/api-contract-terms",
        "privacy": "https://www.pennylane.com/fr/legal/privacy",
        "statusPage": "https://status.pennylane.com",
        "changelog": "https://pennylane.readme.io/changelog",
        "securityTxt": "none",
        "checked": "2026-10-09",
        "notes": [
          "The legal notice (updated 8 September 2026) names Pennylane, a société par actions simplifiée, SIREN 880 265 921 RCS Paris, 2-4 rue Jules Lefebvre, 75009 Paris. Pennylane GmbH sells the product in Germany.",
          "The API agreement (API Contract terms, last updated January 2024) governs API use and is cited by clause 26.9 of the customer terms. It gives a registered office in Cherbourg-en-Cotentin, which differs from the Paris address in the customer terms and legal notice.",
          "The customer terms for companies (version of 16 December 2025) are a PDF linked from https://www.pennylane.com/fr/conditions-generales, with the data processing agreement and the SLA as annexes.",
          "The privacy policy (updated 30 January 2026) covers processing where Pennylane is controller. Processing as processor is governed by the data processing agreement annexed to the customer terms.",
          "www.pennylane.com/.well-known/security.txt returns 404.",
          "The API answers on app.pennylane.com and the MCP server on mcp.pennylane.com. The API docs are hosted on pennylane.readme.io.",
          "RDAP for pennylane.com gives a registration date of 1998-09-23."
        ],
        "score": 80
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/pennylane.json",
      "live": {
        "slug": "pennylane",
        "probe": {
          "target": "https://app.pennylane.com/api/external/v2",
          "method": "get",
          "lastAt": "2026-10-10T02:07:20.006934907Z",
          "lastOk": true,
          "lastStatus": 200,
          "lastMs": 86,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 111,
          "p95ms24h": 670,
          "samples24h": 107,
          "samples30d": 107,
          "days": [
            {
              "date": "2026-10-09",
              "probes": 85,
              "ok": 85
            },
            {
              "date": "2026-10-10",
              "probes": 22,
              "ok": 22
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.pennylane.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-10T02:06:22.892177668Z"
        },
        "pages": [
          {
            "url": "https://pennylane.readme.io/changelog",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-09T18:43:10.597188172Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "baba0cf1ecaa"
          },
          {
            "url": "https://www.pennylane.com/fr/legal/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-09T18:52:57.370338236Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "2e89b0e31f0b"
          },
          {
            "url": "https://pennylane.readme.io/page/api-contract-terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-09T18:43:13.114667877Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "7815b7f4ccf6"
          }
        ],
        "updatedAt": "2026-10-10T02:07:20.006934907Z"
      }
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Odoo SA",
        "b": "Pennylane SAS",
        "name": "Vendor"
      },
      {
        "a": "no (local only)",
        "b": "https://app.pennylane.com/api/external/v2",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP",
        "b": "HTTP",
        "name": "Transports"
      },
      {
        "a": "API key",
        "b": "OAuth or 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": "Proprietary service under Pennylane's API agreement and customer terms",
        "name": "Licence"
      },
      {
        "a": "none",
        "b": "31",
        "name": "Tools exposed"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "2026-10-08",
        "b": "2026-09-30",
        "name": "Last release"
      },
      {
        "a": "no date given",
        "b": "no date given",
        "name": "Terms last updated"
      },
      {
        "a": "2026-09-24",
        "b": "no date given",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "55k stars",
        "b": "none",
        "name": "Popularity"
      }
    ],
    "faq": [
      {
        "answer": "Pennylane scores 66.3 (B) on agent readiness against Odoo External API's 55.9 (C), and leads in 3 of 7 scored categories. Odoo External API leads on maintenance \u0026 community and transparency \u0026 trust.",
        "question": "Which is better for AI agents, Odoo External API or Pennylane?"
      },
      {
        "answer": "Odoo External API needs an API key. Pennylane takes an API key or an OAuth sign-in.",
        "question": "Do Odoo External API and Pennylane need an API key?"
      },
      {
        "answer": "No hosted endpoint is listed for Odoo External API. Pennylane has a hosted endpoint at https://app.pennylane.com/api/external/v2.",
        "question": "Can an agent call Odoo External API and Pennylane 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 Pennylane.",
        "question": "Are Odoo External API and Pennylane open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Maintenance \u0026 community, 73 against 65",
          "Transparency \u0026 trust, 93 against 76"
        ],
        "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, 75 against 44",
          "Schema \u0026 documentation, 85 against 51",
          "Security \u0026 auth, 68 against 61"
        ],
        "also": [
          "A hosted endpoint, with nothing to install"
        ],
        "goodFor": "An agent working on the books of French companies or an accounting firm's client portfolio, with French chart of accounts, FEC export, Factur-X e-invoicing and VAT returns.",
        "slug": "pennylane",
        "watchFor": "The API agreement allows changes, suspension or revocation with or without notice and supplies the API as is"
      }
    ],
    "job": {
      "capability": "accounting.ledger",
      "name": "Accounting ledgers"
    },
    "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/apideck-accounting-vs-pennylane.json",
        "title": "Apideck Accounting API + MCP vs Pennylane",
        "url": "https://www.anchorterminal.com/compare/apideck-accounting-vs-pennylane"
      },
      {
        "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/codat-vs-pennylane.json",
        "title": "Codat vs Pennylane",
        "url": "https://www.anchorterminal.com/compare/codat-vs-pennylane"
      },
      {
        "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-pennylane.json",
        "title": "FreeAgent API vs Pennylane",
        "url": "https://www.anchorterminal.com/compare/freeagent-vs-pennylane"
      },
      {
        "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-pennylane.json",
        "title": "FreshBooks API vs Pennylane",
        "url": "https://www.anchorterminal.com/compare/freshbooks-vs-pennylane"
      },
      {
        "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/merge-accounting-vs-pennylane.json",
        "title": "Merge Accounting API vs Pennylane",
        "url": "https://www.anchorterminal.com/compare/merge-accounting-vs-pennylane"
      },
      {
        "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-rutter.json",
        "title": "Odoo External API vs Rutter Accounting API",
        "url": "https://www.anchorterminal.com/compare/odoo-vs-rutter"
      },
      {
        "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/pennylane-vs-quickbooks-online.json",
        "title": "Pennylane vs QuickBooks Online API + MCP",
        "url": "https://www.anchorterminal.com/compare/pennylane-vs-quickbooks-online"
      },
      {
        "json": "https://www.anchorterminal.com/compare/pennylane-vs-rutter.json",
        "title": "Pennylane vs Rutter Accounting API",
        "url": "https://www.anchorterminal.com/compare/pennylane-vs-rutter"
      },
      {
        "json": "https://www.anchorterminal.com/compare/pennylane-vs-xero.json",
        "title": "Pennylane vs Xero API + MCP",
        "url": "https://www.anchorterminal.com/compare/pennylane-vs-xero"
      },
      {
        "json": "https://www.anchorterminal.com/compare/pennylane-vs-zoho-books.json",
        "title": "Pennylane vs Zoho Books",
        "url": "https://www.anchorterminal.com/compare/pennylane-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-pennylane.json",
        "title": "Invoice Ninja API vs Pennylane",
        "url": "https://www.anchorterminal.com/compare/invoice-ninja-vs-pennylane"
      }
    ],
    "scores": [
      {
        "by": 31,
        "edge": "pennylane",
        "key": "reliability",
        "name": "Reliability",
        "odoo": 44,
        "pennylane": 75,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 34,
        "edge": "pennylane",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "odoo": 51,
        "pennylane": 85,
        "weight": 13
      },
      {
        "by": 1,
        "edge": "odoo",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "odoo": 67,
        "pennylane": 66,
        "weight": 13
      },
      {
        "by": 7,
        "edge": "pennylane",
        "key": "security",
        "name": "Security \u0026 auth",
        "odoo": 61,
        "pennylane": 68,
        "weight": 14
      },
      {
        "by": 2,
        "edge": "odoo",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "odoo": 22,
        "pennylane": 20,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 8,
        "edge": "odoo",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "odoo": 73,
        "pennylane": 65,
        "weight": 7
      },
      {
        "by": 17,
        "edge": "odoo",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "odoo": 93,
        "pennylane": 76,
        "weight": 7
      }
    ],
    "summary": "Pennylane scores 66.3 (B) on agent readiness against Odoo External API's 55.9 (C), and leads in 3 of 7 scored categories. Odoo External API leads on maintenance \u0026 community and transparency \u0026 trust. Both do accounting ledgers.",
    "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.",
      "pennylane": "The v2 API has per-resource read and write scopes, an OpenAPI definition on every reference page, llms.txt and a breaking-change process that ran over 24 weeks. Access needs a paid Essentiel plan or partner approval, creation endpoints are not idempotent, and the API agreement lets Pennylane change or revoke the API without notice."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/odoo-vs-pennylane",
    "json": "https://www.anchorterminal.com/compare/odoo-vs-pennylane.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/odoo-vs-pennylane.md",
    "slim": "https://www.anchorterminal.com/compare/odoo-vs-pennylane.min.md"
  },
  "markdown": "Pennylane scores 66.3 (B) on agent readiness against Odoo External API's 55.9 (C), and leads in 3 of 7 scored categories. Odoo External API leads on maintenance \u0026 community and transparency \u0026 trust. Both do accounting ledgers.\n\n- Odoo External API: grade C, 55.9/100, rank #645 of 950. Markdown https://www.anchorterminal.com/tools/odoo.md · JSON https://www.anchorterminal.com/api/v1/tools/odoo.json\n- Pennylane: grade B, 66.3/100, rank #297 of 950. Markdown https://www.anchorterminal.com/tools/pennylane.md · JSON https://www.anchorterminal.com/api/v1/tools/pennylane.json\n- Best accounting and invoicing APIs for AI agents: https://www.anchorterminal.com/best/accounting/index.md\n- All 66 accounting comparisons: https://www.anchorterminal.com/compare/accounting/index.md\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- Maintenance \u0026 community, 73 against 65\n- Transparency \u0026 trust, 93 against 76\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### Pennylane (B)\n\nGood for: An agent working on the books of French companies or an accounting firm's client portfolio, with French chart of accounts, FEC export, Factur-X e-invoicing and VAT returns.\n\nAhead on:\n- Reliability, 75 against 44\n- Schema \u0026 documentation, 85 against 51\n- Security \u0026 auth, 68 against 61\n\nAlso in its favour:\n- A hosted endpoint, with nothing to install\n\nWatch for: The API agreement allows changes, suspension or revocation with or without notice and supplies the API as is\n\n\n## Score by category\n\n| Category | Weight | Odoo External API | Pennylane | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 44 | 75 | Pennylane +31 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 51 | 85 | Pennylane +34 |\n| Agent ergonomics | 13% (16.2 this run) | 67 | 66 | Odoo External API +1 |\n| Security \u0026 auth | 14% (17.5 this run) | 61 | 68 | Pennylane +7 |\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 | 65 | Odoo External API +8 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 93 | 76 | Odoo External API +17 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **55.9 · C** | **66.3 · B** | |\n\n## Facts side by side\n\n| Fact | Odoo External API | Pennylane |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Odoo SA | Pennylane SAS |\n| Hosted endpoint | no (local only) | `https://app.pennylane.com/api/external/v2` |\n| Transports | HTTP | HTTP |\n| Auth | API key | OAuth or 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 | Proprietary service under Pennylane's API agreement and customer terms |\n| Tools exposed | none | 31 |\n| Read-only variant documented | yes | yes |\n| llms.txt | no | yes |\n| Last release | 2026-10-08 | 2026-09-30 |\n| Terms last updated | no date given | no date given |\n| Privacy policy last updated | 2026-09-24 | no date given |\n| Customer content may train models | not found in the text | not found in the text |\n| Terms restrict automated access | not found in the text | not found in the text |\n| Terms restrict benchmarking | not found in the text | yes |\n| Terms or service can change without notice | not found in the text | yes |\n| Arbitration or class-action waiver | not found in the text | not found in the text |\n| Popularity | 55k stars | none |\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**Pennylane.** The v2 API has per-resource read and write scopes, an OpenAPI definition on every reference page, llms.txt and a breaking-change process that ran over 24 weeks. Access needs a paid Essentiel plan or partner approval, creation endpoints are not idempotent, and the API agreement lets Pennylane change or revoke the API without notice.\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### Pennylane\n\n1. Call `GET https://app.pennylane.com/api/external/v2/me` first to confirm the token, user and company context\n2. Stay under 25 requests per 5 seconds per token and wait for the `retry-after` value on a 429\n3. Do not retry a create after a timeout without checking first. Only supplier invoice imports are deduplicated\n4. Send `filter` and `sort` again with every `cursor`. The cursor stores position only\n5. Send amounts as strings such as \"120.00\", and ask for `:readonly` scopes when the task only reads\n6. Use the MCP server for reads only. It cannot create, edit or delete, and firm connections need `company_id`\n\n## Questions\n\n### Which is better for AI agents, Odoo External API or Pennylane?\n\nPennylane scores 66.3 (B) on agent readiness against Odoo External API's 55.9 (C), and leads in 3 of 7 scored categories. Odoo External API leads on maintenance \u0026 community and transparency \u0026 trust.\n\n### Do Odoo External API and Pennylane need an API key?\n\nOdoo External API needs an API key. Pennylane takes an API key or an OAuth sign-in.\n\n### Can an agent call Odoo External API and Pennylane without installing anything?\n\nNo hosted endpoint is listed for Odoo External API. Pennylane has a hosted endpoint at https://app.pennylane.com/api/external/v2.\n\n### Are Odoo External API and Pennylane 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 Pennylane.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/odoo-vs-pennylane.json, and with the fewest tokens: https://www.anchorterminal.com/compare/odoo-vs-pennylane.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"odoo\", \"b\": \"pennylane\"}`. From a terminal: `anchor compare odoo pennylane`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/odoo.json and https://www.anchorterminal.com/api/v1/tools/pennylane.json\n\n## Other comparisons with Odoo External API or Pennylane\n\n- [Apideck Accounting API + MCP vs Odoo External API](https://www.anchorterminal.com/compare/apideck-accounting-vs-odoo.md)\n- [Apideck Accounting API + MCP vs Pennylane](https://www.anchorterminal.com/compare/apideck-accounting-vs-pennylane.md)\n- [Codat vs Odoo External API](https://www.anchorterminal.com/compare/codat-vs-odoo.md)\n- [Codat vs Pennylane](https://www.anchorterminal.com/compare/codat-vs-pennylane.md)\n- [FreeAgent API vs Odoo External API](https://www.anchorterminal.com/compare/freeagent-vs-odoo.md)\n- [FreeAgent API vs Pennylane](https://www.anchorterminal.com/compare/freeagent-vs-pennylane.md)\n- [FreshBooks API vs Odoo External API](https://www.anchorterminal.com/compare/freshbooks-vs-odoo.md)\n- [FreshBooks API vs Pennylane](https://www.anchorterminal.com/compare/freshbooks-vs-pennylane.md)\n- [Merge Accounting API vs Odoo External API](https://www.anchorterminal.com/compare/merge-accounting-vs-odoo.md)\n- [Merge Accounting API vs Pennylane](https://www.anchorterminal.com/compare/merge-accounting-vs-pennylane.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 Rutter Accounting API](https://www.anchorterminal.com/compare/odoo-vs-rutter.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- [Pennylane vs QuickBooks Online API + MCP](https://www.anchorterminal.com/compare/pennylane-vs-quickbooks-online.md)\n- [Pennylane vs Rutter Accounting API](https://www.anchorterminal.com/compare/pennylane-vs-rutter.md)\n- [Pennylane vs Xero API + MCP](https://www.anchorterminal.com/compare/pennylane-vs-xero.md)\n- [Pennylane vs Zoho Books](https://www.anchorterminal.com/compare/pennylane-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 Pennylane](https://www.anchorterminal.com/compare/invoice-ninja-vs-pennylane.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-10",
    "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 Pennylane",
        "url": ""
      }
    ],
    "description": "Pennylane scores 66.3 (B) to Odoo External's 55.9 (C) for accounting ledgers. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Odoo External API C 55.9",
      "Pennylane B 66.3",
      "scores"
    ],
    "h1": "Odoo External API vs Pennylane",
    "image": "https://www.anchorterminal.com/assets/og/compare-odoo-vs-pennylane.png",
    "path": "/compare/odoo-vs-pennylane",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Odoo External vs Pennylane for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-10-09",
    "url": "https://www.anchorterminal.com/compare/odoo-vs-pennylane"
  },
  "tokens": {
    "markdown": 2550,
    "slim": 680
  },
  "version": 1
}
