{
  "data": {
    "a": {
      "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-10T03:53:37.679578065Z",
          "lastOk": true,
          "lastStatus": 200,
          "lastMs": 66,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 106,
          "p95ms24h": 605,
          "samples24h": 125,
          "samples30d": 125,
          "days": [
            {
              "date": "2026-10-09",
              "probes": 85,
              "ok": 85
            },
            {
              "date": "2026-10-10",
              "probes": 40,
              "ok": 40
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.pennylane.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-10T03:58:41.816495556Z"
        },
        "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-10T03:58:41.816495556Z"
      }
    },
    "answer": "Xero API + MCP and Pennylane score within a point of each other on agent readiness, 67.2 (B) and 66.3 (B). Pennylane leads on reliability and schema \u0026 documentation.",
    "b": {
      "slug": "xero",
      "name": "Xero API + MCP",
      "vendor": "Xero",
      "vendorUrl": "https://developer.xero.com",
      "kind": "http-api",
      "category": "accounting",
      "summary": "Accounting API for Xero organisations, with contacts, invoices, bills, payments, bank transactions, manual journals, the balance sheet, profit and loss and trial balance, plus payroll in some regions.",
      "url": "https://www.anchorterminal.com/tools/xero",
      "markdownUrl": "https://www.anchorterminal.com/tools/xero.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/xero.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/xero.json",
      "repo": "https://github.com/XeroAPI/xero-mcp-server",
      "license": "MIT",
      "transports": [
        "http",
        "stdio"
      ],
      "remoteUrl": "https://api.xero.com/api.xro/2.0",
      "packages": [
        {
          "registry": "npm",
          "name": "xero-node"
        },
        {
          "registry": "pypi",
          "name": "xero-python"
        },
        {
          "registry": "npm",
          "name": "@xeroapi/xero-mcp-server"
        }
      ],
      "auth": "oauth",
      "authNotes": "OAuth 2.0 authorisation code (PKCE for public clients), or client credentials through a \"custom connection\" that is tied to one organisation. Access tokens last 1,800 seconds and refresh tokens up to 60 days. Every call carries a Bearer token and an `xero-tenant-id` header naming the organisation. Apps created from 29 April 2026 must use the granular scopes (accounting.invoices, accounting.reports.profitandloss.read and so on) rather than the old bundled ones. The MCP server takes a client id and secret for a custom connection, or a ready-made bearer token.",
      "pricing": "freemium",
      "pricingNotes": "Developer Platform plans are priced in Australian dollars and billed monthly on connected organisations. Starter is free with 5 connections and 1,000 API calls a day per organisation. Core is AUD 35 a month for 50 connections, Plus AUD 245 for 1,000 and Advanced AUD 1,445 for 10,000, each with 5,000 calls a day per organisation and an egress allowance of 10, 50 or 250 GB (AUD 2.40 a GB over). Plus and above need App Certification, Advanced and Enterprise a security assessment. Enterprise is priced on application. The model took effect on 2 March 2026 for existing developers and 4 December 2025 for new ones (https://developer.xero.com/pricing/).",
      "priceSummary": "Freemium",
      "where": "both",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": 51,
      "popularity": {
        "githubStars": 350,
        "npmWeekly": 394967,
        "pypiWeekly": 63610,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://developer.xero.com/documentation/",
      "openapi": "https://github.com/XeroAPI/Xero-OpenAPI",
      "capabilities": [
        "accounting.ledger",
        "accounting.invoices",
        "accounting.bills",
        "accounting.reports"
      ],
      "tags": [
        "hosted",
        "freemium",
        "free-tier",
        "oauth",
        "mcp",
        "openapi",
        "typescript",
        "python",
        "webhooks",
        "status-page"
      ],
      "lastRelease": "2026-10-01",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 67.2,
        "grade": "B",
        "agentReady": false,
        "rank": 258,
        "ranked": true,
        "rankOf": 950,
        "categoryRank": 3,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 75,
          "maintenance": 76,
          "payments": 35,
          "reliability": 68,
          "schema": 79,
          "security": 64,
          "transparency": 72
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "Granular OAuth scopes, such as accounting.reports.profitandloss.read, required for apps created from 29 April 2026. Developer docs, including the per-minute rate limits, only render with JavaScript.",
        "bestFor": "An agent keeping the books for UK, Australian or New Zealand businesses, or any team that wants read-only scopes and long deprecation notice.",
        "strengths": [
          "Granular OAuth scopes, such as accounting.reports.profitandloss.read, required for apps created from 29 April 2026",
          "Deprecations announced with 12 to 13 months' notice on a dated changelog",
          "Public OpenAPI specs, with an Idempotency-Key parameter on 101 accounting operations",
          "Free Starter tier for 5 connections and a Demo Company with sample data",
          "ISO 27001:2022, SOC 2 reports and a vulnerability disclosure programme"
        ],
        "weaknesses": [
          "Developer docs, including the per-minute rate limits, only render with JavaScript",
          "1,000 calls a day per organisation on the free tier, 5,000 on paid",
          "Official MCP server idle since 5 June 2026, with no CI, no annotations and no registry entry",
          "Prices in AUD only, and App Certification is needed above 50 connections",
          "No security.txt and no public subprocessor list"
        ],
        "agentNotes": [
          "Send xero-tenant-id on every call. The token alone doesn't name the organisation",
          "A bill is an Invoice with Type ACCPAY, a sales invoice is ACCREC. There's no separate bills endpoint",
          "Send an Idempotency-Key on creates so a retry after a timeout doesn't post twice",
          "Use If-Modified-Since and pageSize up to 100 to stay inside 1,000 calls a day on Starter",
          "Set XERO_SCOPES to read scopes only when the agent shouldn't write. The MCP still lists its write and delete tools"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 3.5,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 67.2
          }
        ],
        "editorialScores": {
          "ergonomics": 75,
          "maintenance": 76,
          "payments": 35,
          "reliability": 68,
          "schema": 79,
          "security": 64,
          "transparency": 60
        },
        "provenanceScore": 84
      },
      "connect": {
        "http": "curl \"https://api.xero.com/api.xro/2.0/Invoices?Statuses=AUTHORISED\u0026page=1\" \\\n  -H \"Authorization: Bearer $XERO_ACCESS_TOKEN\" -H \"xero-tenant-id: $XERO_TENANT_ID\" -H \"Accept: application/json\"",
        "claudeCode": "claude mcp add xero -e XERO_CLIENT_ID=$XERO_CLIENT_ID -e XERO_CLIENT_SECRET=$XERO_CLIENT_SECRET -- npx -y @xeroapi/xero-mcp-server@latest",
        "config": {
          "mcpServers": {
            "xero": {
              "args": [
                "-y",
                "@xeroapi/xero-mcp-server@latest"
              ],
              "command": "npx",
              "env": {
                "XERO_CLIENT_ID": "${XERO_CLIENT_ID}",
                "XERO_CLIENT_SECRET": "${XERO_CLIENT_SECRET}",
                "XERO_SCOPES": "accounting.invoices accounting.contacts accounting.settings"
              }
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/accounting.ledger",
        "tool": "https://letme.dev/xero"
      },
      "area": "domain-data",
      "provenance": {
        "legalEntity": "Xero Limited",
        "domain": "xero.com",
        "domainRegistered": "1997-06-03",
        "endpointOnVendorDomain": true,
        "terms": "https://developer.xero.com/xero-developer-platform-terms-conditions/",
        "privacy": "https://www.xero.com/uk/legal/privacy/",
        "statusPage": "https://status.xero.com",
        "changelog": "https://developer.xero.com/changelog/",
        "securityTxt": "none",
        "checked": "2026-09-30",
        "notes": [
          "The developer terms name Xero Limited, New Zealand company 1830488. UK customers contract with Xero (UK) Limited, company 06071722, per the UK terms of use.",
          "The pricing page lists prices in AUD only. Overages are invoiced in arrears each calendar month under the commercial terms.",
          "Developer documentation pages return only metadata without JavaScript, so an agent can't read the rate limits or OAuth guides by fetching them. The OpenAPI specs on GitHub are the readable alternative."
        ],
        "score": 84
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/xero.json",
      "live": {
        "slug": "xero",
        "probe": {
          "target": "https://api.xero.com/api.xro/2.0",
          "method": "get",
          "lastAt": "2026-10-10T03:53:50.217836413Z",
          "lastOk": true,
          "lastStatus": 401,
          "lastMs": 137,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 100,
          "uptime30d": 99.96,
          "p50ms24h": 171,
          "p95ms24h": 349,
          "samples24h": 249,
          "samples30d": 2274,
          "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": 271
            },
            {
              "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": 268,
              "ok": 268
            },
            {
              "date": "2026-10-09",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-10",
              "probes": 40,
              "ok": 40
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.xero.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-10T03:58:52.441465677Z"
        },
        "versions": [
          {
            "registry": "npm",
            "name": "@xeroapi/xero-mcp-server",
            "version": "0.0.17",
            "seenAt": "2026-10-09T17:29:06.616087852Z"
          },
          {
            "registry": "npm",
            "name": "xero-node",
            "version": "20.0.0",
            "seenAt": "2026-10-09T17:29:05.618190958Z"
          },
          {
            "registry": "pypi",
            "name": "xero-python",
            "version": "15.2.0",
            "released": "2026-09-04",
            "seenAt": "2026-10-09T17:29:06.430176895Z"
          }
        ],
        "githubStars": 374,
        "npmWeekly": 342917,
        "pypiWeekly": 70889,
        "securityTxt": {
          "url": "https://xero.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-09T15:39:13.819430129Z"
        },
        "domain": {
          "domain": "xero.com",
          "registered": "1997-06-03",
          "source": "https://rdap.verisign.com/com/v1/domain/xero.com",
          "checkedAt": "2026-10-04T13:09:35.716650808Z"
        },
        "pages": [
          {
            "url": "https://developer.xero.com/changelog/",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-09T18:35:27.313463807Z",
            "changedAt": "2026-10-09T18:35:27.313463807Z",
            "fingerprint": "4cc33b8fead1"
          },
          {
            "url": "https://developer.xero.com/pricing/",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-10-09T18:35:29.915307149Z",
            "changedAt": "2026-10-07T18:04:10.37666473Z",
            "fingerprint": "10b42d8abb1a"
          },
          {
            "url": "https://www.xero.com/uk/legal/privacy/",
            "kind": "privacy",
            "status": 304,
            "checkedAt": "2026-10-09T18:55:54.529447813Z",
            "changedAt": "2026-10-07T18:14:36.070598475Z",
            "fingerprint": "657febf361be"
          },
          {
            "url": "https://developer.xero.com/xero-developer-platform-terms-conditions/",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-09T18:35:31.771931189Z",
            "changedAt": "2026-10-05T15:55:00.303495189Z",
            "fingerprint": "f6af5803e050"
          }
        ],
        "updatedAt": "2026-10-10T03:58:52.441465677Z"
      }
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Pennylane SAS",
        "b": "Xero",
        "name": "Vendor"
      },
      {
        "a": "https://app.pennylane.com/api/external/v2",
        "b": "https://api.xero.com/api.xro/2.0",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP",
        "b": "HTTP, stdio",
        "name": "Transports"
      },
      {
        "a": "OAuth or key",
        "b": "OAuth",
        "name": "Auth"
      },
      {
        "a": "Paid",
        "b": "Freemium",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "Proprietary service under Pennylane's API agreement and customer terms",
        "b": "MIT",
        "name": "Licence"
      },
      {
        "a": "31",
        "b": "51",
        "name": "Tools exposed"
      },
      {
        "a": "yes",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "no",
        "name": "llms.txt"
      },
      {
        "a": "2026-09-30",
        "b": "2026-10-01",
        "name": "Last release"
      },
      {
        "a": "no date given",
        "b": "2025-12-04",
        "name": "Terms last updated"
      },
      {
        "a": "no date given",
        "b": "2025-02-11",
        "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": "yes",
        "name": "Terms restrict automated access"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "yes",
        "b": "not found in the text",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "none",
        "b": "350 stars, 395k npm/wk, 64k PyPI/wk",
        "name": "Popularity"
      },
      {
        "a": "none",
        "b": "3.5/5 (2)",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "Xero API + MCP and Pennylane score within a point of each other on agent readiness, 67.2 (B) and 66.3 (B). Pennylane leads on reliability and schema \u0026 documentation.",
        "question": "Which is better for AI agents, Pennylane or Xero API + MCP?"
      },
      {
        "answer": "Pennylane takes an API key or an OAuth sign-in. Xero API + MCP uses an OAuth sign-in.",
        "question": "Do Pennylane and Xero API + MCP need an API key?"
      },
      {
        "answer": "Yes. Pennylane has a hosted endpoint at https://app.pennylane.com/api/external/v2 and Xero API + MCP at https://api.xero.com/api.xro/2.0.",
        "question": "Can an agent call Pennylane and Xero API + MCP without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 75 against 68",
          "Schema \u0026 documentation, 85 against 79"
        ],
        "also": null,
        "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"
      },
      {
        "aheadOn": [
          "Agent ergonomics, 75 against 66",
          "Payments \u0026 pricing, 35 against 20",
          "Maintenance \u0026 community, 76 against 65"
        ],
        "also": [
          "Runs on your own machine"
        ],
        "goodFor": "An agent keeping the books for UK, Australian or New Zealand businesses, or any team that wants read-only scopes and long deprecation notice.",
        "slug": "xero",
        "watchFor": "Developer docs, including the per-minute rate limits, only render with JavaScript"
      }
    ],
    "job": {
      "capability": "accounting.ledger",
      "name": "Accounting ledgers"
    },
    "others": [
      {
        "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/apideck-accounting-vs-xero.json",
        "title": "Apideck Accounting API + MCP vs Xero API + MCP",
        "url": "https://www.anchorterminal.com/compare/apideck-accounting-vs-xero"
      },
      {
        "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/codat-vs-xero.json",
        "title": "Codat vs Xero API + MCP",
        "url": "https://www.anchorterminal.com/compare/codat-vs-xero"
      },
      {
        "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/freeagent-vs-xero.json",
        "title": "FreeAgent API vs Xero API + MCP",
        "url": "https://www.anchorterminal.com/compare/freeagent-vs-xero"
      },
      {
        "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/freshbooks-vs-xero.json",
        "title": "FreshBooks API vs Xero API + MCP",
        "url": "https://www.anchorterminal.com/compare/freshbooks-vs-xero"
      },
      {
        "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/merge-accounting-vs-xero.json",
        "title": "Merge Accounting API vs Xero API + MCP",
        "url": "https://www.anchorterminal.com/compare/merge-accounting-vs-xero"
      },
      {
        "json": "https://www.anchorterminal.com/compare/odoo-vs-pennylane.json",
        "title": "Odoo External API vs Pennylane",
        "url": "https://www.anchorterminal.com/compare/odoo-vs-pennylane"
      },
      {
        "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/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-zoho-books.json",
        "title": "Pennylane vs Zoho Books",
        "url": "https://www.anchorterminal.com/compare/pennylane-vs-zoho-books"
      },
      {
        "json": "https://www.anchorterminal.com/compare/quickbooks-online-vs-xero.json",
        "title": "QuickBooks Online API + MCP vs Xero API + MCP",
        "url": "https://www.anchorterminal.com/compare/quickbooks-online-vs-xero"
      },
      {
        "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/xero-vs-zoho-books.json",
        "title": "Xero API + MCP vs Zoho Books",
        "url": "https://www.anchorterminal.com/compare/xero-vs-zoho-books"
      },
      {
        "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"
      },
      {
        "json": "https://www.anchorterminal.com/compare/invoice-ninja-vs-xero.json",
        "title": "Invoice Ninja API vs Xero API + MCP",
        "url": "https://www.anchorterminal.com/compare/invoice-ninja-vs-xero"
      }
    ],
    "scores": [
      {
        "by": 7,
        "edge": "pennylane",
        "key": "reliability",
        "name": "Reliability",
        "pennylane": 75,
        "weight": 16,
        "xero": 68
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 6,
        "edge": "pennylane",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "pennylane": 85,
        "weight": 13,
        "xero": 79
      },
      {
        "by": 9,
        "edge": "xero",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "pennylane": 66,
        "weight": 13,
        "xero": 75
      },
      {
        "by": 4,
        "edge": "pennylane",
        "key": "security",
        "name": "Security \u0026 auth",
        "pennylane": 68,
        "weight": 14,
        "xero": 64
      },
      {
        "by": 15,
        "edge": "xero",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "pennylane": 20,
        "weight": 10,
        "xero": 35
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 11,
        "edge": "xero",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "pennylane": 65,
        "weight": 7,
        "xero": 76
      },
      {
        "by": 4,
        "edge": "pennylane",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "pennylane": 76,
        "weight": 7,
        "xero": 72
      }
    ],
    "summary": "Xero API + MCP and Pennylane score within a point of each other on agent readiness, 67.2 (B) and 66.3 (B). Pennylane leads on reliability and schema \u0026 documentation. Both do accounting ledgers.",
    "verdicts": {
      "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.",
      "xero": "Granular OAuth scopes, such as accounting.reports.profitandloss.read, required for apps created from 29 April 2026. Developer docs, including the per-minute rate limits, only render with JavaScript."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/pennylane-vs-xero",
    "json": "https://www.anchorterminal.com/compare/pennylane-vs-xero.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/pennylane-vs-xero.md",
    "slim": "https://www.anchorterminal.com/compare/pennylane-vs-xero.min.md"
  },
  "markdown": "Xero API + MCP and Pennylane score within a point of each other on agent readiness, 67.2 (B) and 66.3 (B). Pennylane leads on reliability and schema \u0026 documentation. Both do accounting ledgers.\n\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- Xero API + MCP: grade B, 67.2/100, rank #258 of 950. Markdown https://www.anchorterminal.com/tools/xero.md · JSON https://www.anchorterminal.com/api/v1/tools/xero.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### 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 68\n- Schema \u0026 documentation, 85 against 79\n\nWatch for: The API agreement allows changes, suspension or revocation with or without notice and supplies the API as is\n\n### Xero API + MCP (B)\n\nGood for: An agent keeping the books for UK, Australian or New Zealand businesses, or any team that wants read-only scopes and long deprecation notice.\n\nAhead on:\n- Agent ergonomics, 75 against 66\n- Payments \u0026 pricing, 35 against 20\n- Maintenance \u0026 community, 76 against 65\n\nAlso in its favour:\n- Runs on your own machine\n\nWatch for: Developer docs, including the per-minute rate limits, only render with JavaScript\n\n\n## Score by category\n\n| Category | Weight | Pennylane | Xero API + MCP | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 75 | 68 | Pennylane +7 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 85 | 79 | Pennylane +6 |\n| Agent ergonomics | 13% (16.2 this run) | 66 | 75 | Xero API + MCP +9 |\n| Security \u0026 auth | 14% (17.5 this run) | 68 | 64 | Pennylane +4 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 20 | 35 | Xero API + MCP +15 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 65 | 76 | Xero API + MCP +11 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 76 | 72 | Pennylane +4 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **66.3 · B** | **67.2 · B** | |\n\n## Facts side by side\n\n| Fact | Pennylane | Xero API + MCP |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Pennylane SAS | Xero |\n| Hosted endpoint | `https://app.pennylane.com/api/external/v2` | `https://api.xero.com/api.xro/2.0` |\n| Transports | HTTP | HTTP, stdio |\n| Auth | OAuth or key | OAuth |\n| Pricing | Paid | Freemium |\n| x402 | no | no |\n| Licence | Proprietary service under Pennylane's API agreement and customer terms | MIT |\n| Tools exposed | 31 | 51 |\n| Read-only variant documented | yes | no |\n| llms.txt | yes | no |\n| Last release | 2026-09-30 | 2026-10-01 |\n| Terms last updated | no date given | 2025-12-04 |\n| Privacy policy last updated | no date given | 2025-02-11 |\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 | yes |\n| Terms restrict benchmarking | yes | yes |\n| Terms or service can change without notice | yes | not found in the text |\n| Arbitration or class-action waiver | not found in the text | yes |\n| Popularity | none | 350 stars, 395k npm/wk, 64k PyPI/wk |\n| Agent reviews | none | 3.5/5 (2) |\n\n## Verdicts\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**Xero API + MCP.** Granular OAuth scopes, such as accounting.reports.profitandloss.read, required for apps created from 29 April 2026. Developer docs, including the per-minute rate limits, only render with JavaScript.\n\n## Before you call either\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### Xero API + MCP\n\n1. Send xero-tenant-id on every call. The token alone doesn't name the organisation\n2. A bill is an Invoice with Type ACCPAY, a sales invoice is ACCREC. There's no separate bills endpoint\n3. Send an Idempotency-Key on creates so a retry after a timeout doesn't post twice\n4. Use If-Modified-Since and pageSize up to 100 to stay inside 1,000 calls a day on Starter\n5. Set XERO_SCOPES to read scopes only when the agent shouldn't write. The MCP still lists its write and delete tools\n\n## Questions\n\n### Which is better for AI agents, Pennylane or Xero API + MCP?\n\nXero API + MCP and Pennylane score within a point of each other on agent readiness, 67.2 (B) and 66.3 (B). Pennylane leads on reliability and schema \u0026 documentation.\n\n### Do Pennylane and Xero API + MCP need an API key?\n\nPennylane takes an API key or an OAuth sign-in. Xero API + MCP uses an OAuth sign-in.\n\n### Can an agent call Pennylane and Xero API + MCP without installing anything?\n\nYes. Pennylane has a hosted endpoint at https://app.pennylane.com/api/external/v2 and Xero API + MCP at https://api.xero.com/api.xro/2.0.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/pennylane-vs-xero.json, and with the fewest tokens: https://www.anchorterminal.com/compare/pennylane-vs-xero.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"pennylane\", \"b\": \"xero\"}`. From a terminal: `anchor compare pennylane xero`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/pennylane.json and https://www.anchorterminal.com/api/v1/tools/xero.json\n\n## Other comparisons with Pennylane or Xero API + MCP\n\n- [Apideck Accounting API + MCP vs Pennylane](https://www.anchorterminal.com/compare/apideck-accounting-vs-pennylane.md)\n- [Apideck Accounting API + MCP vs Xero API + MCP](https://www.anchorterminal.com/compare/apideck-accounting-vs-xero.md)\n- [Codat vs Pennylane](https://www.anchorterminal.com/compare/codat-vs-pennylane.md)\n- [Codat vs Xero API + MCP](https://www.anchorterminal.com/compare/codat-vs-xero.md)\n- [FreeAgent API vs Pennylane](https://www.anchorterminal.com/compare/freeagent-vs-pennylane.md)\n- [FreeAgent API vs Xero API + MCP](https://www.anchorterminal.com/compare/freeagent-vs-xero.md)\n- [FreshBooks API vs Pennylane](https://www.anchorterminal.com/compare/freshbooks-vs-pennylane.md)\n- [FreshBooks API vs Xero API + MCP](https://www.anchorterminal.com/compare/freshbooks-vs-xero.md)\n- [Merge Accounting API vs Pennylane](https://www.anchorterminal.com/compare/merge-accounting-vs-pennylane.md)\n- [Merge Accounting API vs Xero API + MCP](https://www.anchorterminal.com/compare/merge-accounting-vs-xero.md)\n- [Odoo External API vs Pennylane](https://www.anchorterminal.com/compare/odoo-vs-pennylane.md)\n- [Odoo External API vs Xero API + MCP](https://www.anchorterminal.com/compare/odoo-vs-xero.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 Zoho Books](https://www.anchorterminal.com/compare/pennylane-vs-zoho-books.md)\n- [QuickBooks Online API + MCP vs Xero API + MCP](https://www.anchorterminal.com/compare/quickbooks-online-vs-xero.md)\n- [Rutter Accounting API vs Xero API + MCP](https://www.anchorterminal.com/compare/rutter-vs-xero.md)\n- [Xero API + MCP vs Zoho Books](https://www.anchorterminal.com/compare/xero-vs-zoho-books.md)\n- [Invoice Ninja API vs Pennylane](https://www.anchorterminal.com/compare/invoice-ninja-vs-pennylane.md)\n- [Invoice Ninja API vs Xero API + MCP](https://www.anchorterminal.com/compare/invoice-ninja-vs-xero.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": "Pennylane vs Xero API + MCP",
        "url": ""
      }
    ],
    "description": "Xero and Pennylane score within a point of each other for accounting ledgers, 67.2 and 66.3 out of 100. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Pennylane B 66.3",
      "Xero API + MCP B 67.2",
      "scores"
    ],
    "h1": "Pennylane vs Xero API + MCP",
    "image": "https://www.anchorterminal.com/assets/og/compare-pennylane-vs-xero.png",
    "path": "/compare/pennylane-vs-xero",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Pennylane vs Xero for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-10-09",
    "url": "https://www.anchorterminal.com/compare/pennylane-vs-xero"
  },
  "tokens": {
    "markdown": 2300,
    "slim": 680
  },
  "version": 1
}
