{
  "data": {
    "a": {
      "slug": "freeagent",
      "name": "FreeAgent API",
      "vendor": "FreeAgent",
      "vendorUrl": "https://dev.freeagent.com",
      "kind": "http-api",
      "category": "accounting",
      "summary": "REST API for FreeAgent, the UK small-business accounting product owned by NatWest Group.",
      "url": "https://www.anchorterminal.com/tools/freeagent",
      "markdownUrl": "https://www.anchorterminal.com/tools/freeagent.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/freeagent.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/freeagent.json",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://api.freeagent.com/v2",
      "packages": [],
      "auth": "oauth",
      "authNotes": "OAuth 2.0 authorisation code. Register an app in the developer dashboard for an OAuth identifier and secret. Access tokens last one hour, and each refresh returns a new access token and a new refresh token, so store the replacement. One token per FreeAgent user who authorised the app. The same flow works against the sandbox at api.sandbox.freeagent.com.",
      "pricing": "byo-plan",
      "pricingNotes": "The API is free under section 4.1 of the API terms, with 30 days' notice before any fee is introduced. A live company needs a FreeAgent subscription, listed at £33 a month for a limited company on freeagent.com, or free with a NatWest, Royal Bank of Scotland, Ulster Bank or Mettle business account. The sandbox is a free temporary account at signup.sandbox.freeagent.com (https://dev.freeagent.com/docs/api_terms).",
      "priceSummary": "Your plan",
      "where": "hosted",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://dev.freeagent.com/docs",
      "capabilities": [
        "accounting.ledger",
        "accounting.invoices",
        "accounting.bills",
        "accounting.reports"
      ],
      "tags": [
        "hosted",
        "byo-plan",
        "free-tier",
        "oauth",
        "uk",
        "status-page",
        "closed-source"
      ],
      "lastRelease": "2026-09-01",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 57.2,
        "grade": "C",
        "agentReady": false,
        "rank": 619,
        "ranked": true,
        "rankOf": 950,
        "categoryRank": 7,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 55,
          "maintenance": 60,
          "payments": 30,
          "reliability": 85,
          "schema": 50,
          "security": 44,
          "transparency": 74
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "Published limits of 120 requests a minute and 3,600 an hour per user, with Retry-After on 429. No OAuth scopes, so a token can do anything the authorising user can.",
        "bestFor": "An agent doing the books for a UK freelancer or small limited company, especially one already banking with NatWest.",
        "strengths": [
          "Published limits of 120 requests a minute and 3,600 an hour per user, with Retry-After on 429",
          "X-RateLimit-Test header that lowers the sandbox to 5 requests a minute for testing back-off",
          "API free under section 4.1 of the terms, with 30 days' notice before any fee",
          "Free sandbox with its own sign-up and API host",
          "Valid security.txt, a disclosure policy and Cyber Essentials Plus"
        ],
        "weaknesses": [
          "No OAuth scopes, so a token can do anything the authorising user can",
          "No OpenAPI spec, SDK, llms.txt or official MCP server",
          "Error responses aren't documented beyond the 429",
          "UK only, so VAT, MTD and HMRC filings are the tax model",
          "API terms bar migrating data to a competitor and using the API for benchmarking or comparison"
        ],
        "agentNotes": [
          "Store the new refresh token from every refresh response. The old one stops working",
          "Create the invoice, then PUT /v2/invoices/:id/transitions/mark_as_sent. A draft isn't visible to the customer",
          "Record a customer payment by explaining the bank transaction against the invoice. There's no invoice payments endpoint",
          "Send X-RateLimit-Test: true in the sandbox to see the 429 and Retry-After path before production does it to you",
          "Use view= and updated_since= on list calls and per_page up to 100 to stay under 120 requests a minute"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 2.5,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "C",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 57.2
          }
        ],
        "editorialScores": {
          "ergonomics": 55,
          "maintenance": 60,
          "payments": 30,
          "reliability": 85,
          "schema": 50,
          "security": 44,
          "transparency": 55
        },
        "provenanceScore": 92
      },
      "connect": {
        "http": "curl \"https://api.freeagent.com/v2/invoices?view=open\" \\\n  -H \"Authorization: Bearer $FREEAGENT_ACCESS_TOKEN\" -H \"Accept: application/json\""
      },
      "letme": {
        "capability": "https://letme.dev/accounting.ledger",
        "tool": "https://letme.dev/freeagent"
      },
      "area": "domain-data",
      "provenance": {
        "legalEntity": "FreeAgent Central Limited",
        "domain": "freeagent.com",
        "domainRegistered": "1999-04-15",
        "endpointOnVendorDomain": true,
        "terms": "https://dev.freeagent.com/docs/api_terms",
        "privacy": "https://www.freeagent.com/privacy/",
        "statusPage": "https://status.freeagent.com",
        "changelog": "https://dev.freeagent.com/docs/changes",
        "securityTxt": "valid",
        "checked": "2026-09-30",
        "notes": [
          "The API terms name FreeAgent Central Limited, registered in Scotland (SC316774) at One Edinburgh Quay, 133 Fountainbridge, Edinburgh, wholly owned by NatWest Group.",
          "security.txt at www.freeagent.com expires 2027-04-17 and points to a disclosure policy.",
          "The terms let FreeAgent introduce API fees on 30 days' notice."
        ],
        "score": 92
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/freeagent.json",
      "live": {
        "slug": "freeagent",
        "probe": {
          "target": "https://api.freeagent.com/v2",
          "method": "get",
          "lastAt": "2026-10-10T02:07:09.375883361Z",
          "lastOk": true,
          "lastStatus": 400,
          "lastMs": 71,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 65,
          "p95ms24h": 142,
          "samples24h": 250,
          "samples30d": 2256,
          "days": [
            {
              "date": "2026-10-01",
              "probes": 109,
              "ok": 109
            },
            {
              "date": "2026-10-02",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-03",
              "probes": 271,
              "ok": 271
            },
            {
              "date": "2026-10-04",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-05",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-06",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-07",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-08",
              "probes": 268,
              "ok": 268
            },
            {
              "date": "2026-10-09",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-10",
              "probes": 22,
              "ok": 22
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.freeagent.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-10T02:06:00.915677631Z"
        },
        "securityTxt": {
          "url": "https://freeagent.com/.well-known/security.txt",
          "state": "valid",
          "expires": "2027-04-17T12:00:00.000Z",
          "checkedAt": "2026-10-09T15:40:09.074258681Z"
        },
        "domain": {
          "domain": "freeagent.com",
          "registered": "1999-04-15",
          "source": "https://rdap.verisign.com/com/v1/domain/freeagent.com",
          "checkedAt": "2026-10-04T13:09:45.721300128Z"
        },
        "pages": [
          {
            "url": "https://dev.freeagent.com/docs/changes",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-09T18:34:51.736234653Z",
            "changedAt": "2026-10-07T18:03:52.701375992Z",
            "fingerprint": "56e6cd1faf4a"
          },
          {
            "url": "https://www.freeagent.com/privacy/",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-09T18:50:15.009529277Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "12e01f7684e7"
          },
          {
            "url": "https://dev.freeagent.com/docs/api_terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-09T18:34:49.66644265Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "ca4e227eec74"
          }
        ],
        "updatedAt": "2026-10-10T02:07:09.375883361Z"
      }
    },
    "answer": "Pennylane scores 66.3 (B) on agent readiness against FreeAgent API's 57.2 (C), and leads in 5 of 7 scored categories. FreeAgent API leads on reliability and payments \u0026 pricing.",
    "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": "FreeAgent",
        "b": "Pennylane SAS",
        "name": "Vendor"
      },
      {
        "a": "https://api.freeagent.com/v2",
        "b": "https://app.pennylane.com/api/external/v2",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP",
        "b": "HTTP",
        "name": "Transports"
      },
      {
        "a": "OAuth",
        "b": "OAuth or key",
        "name": "Auth"
      },
      {
        "a": "Your plan",
        "b": "Paid",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "none",
        "b": "Proprietary service under Pennylane's API agreement and customer terms",
        "name": "Licence"
      },
      {
        "a": "none",
        "b": "31",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "2026-09-01",
        "b": "2026-09-30",
        "name": "Last release"
      },
      {
        "a": "2025-02-28",
        "b": "no date given",
        "name": "Terms last updated"
      },
      {
        "a": "couldn't be read",
        "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": "yes",
        "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": "2.5/5 (2)",
        "b": "none",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "Pennylane scores 66.3 (B) on agent readiness against FreeAgent API's 57.2 (C), and leads in 5 of 7 scored categories. FreeAgent API leads on reliability and payments \u0026 pricing.",
        "question": "Which is better for AI agents, FreeAgent API or Pennylane?"
      },
      {
        "answer": "FreeAgent API uses an OAuth sign-in. Pennylane takes an API key or an OAuth sign-in.",
        "question": "Do FreeAgent API and Pennylane need an API key?"
      },
      {
        "answer": "Yes. FreeAgent API has a hosted endpoint at https://api.freeagent.com/v2 and Pennylane at https://app.pennylane.com/api/external/v2.",
        "question": "Can an agent call FreeAgent API and Pennylane without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 85 against 75",
          "Payments \u0026 pricing, 30 against 20"
        ],
        "also": null,
        "goodFor": "An agent doing the books for a UK freelancer or small limited company, especially one already banking with NatWest.",
        "slug": "freeagent",
        "watchFor": "No OAuth scopes, so a token can do anything the authorising user can"
      },
      {
        "aheadOn": [
          "Schema \u0026 documentation, 85 against 50",
          "Agent ergonomics, 66 against 55",
          "Security \u0026 auth, 68 against 44",
          "Maintenance \u0026 community, 65 against 60"
        ],
        "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"
      }
    ],
    "job": {
      "capability": "accounting.ledger",
      "name": "Accounting ledgers"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/apideck-accounting-vs-freeagent.json",
        "title": "Apideck Accounting API + MCP vs FreeAgent API",
        "url": "https://www.anchorterminal.com/compare/apideck-accounting-vs-freeagent"
      },
      {
        "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-freeagent.json",
        "title": "Codat vs FreeAgent API",
        "url": "https://www.anchorterminal.com/compare/codat-vs-freeagent"
      },
      {
        "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-freshbooks.json",
        "title": "FreeAgent API vs FreshBooks API",
        "url": "https://www.anchorterminal.com/compare/freeagent-vs-freshbooks"
      },
      {
        "json": "https://www.anchorterminal.com/compare/freeagent-vs-merge-accounting.json",
        "title": "FreeAgent API vs Merge Accounting API",
        "url": "https://www.anchorterminal.com/compare/freeagent-vs-merge-accounting"
      },
      {
        "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-quickbooks-online.json",
        "title": "FreeAgent API vs QuickBooks Online API + MCP",
        "url": "https://www.anchorterminal.com/compare/freeagent-vs-quickbooks-online"
      },
      {
        "json": "https://www.anchorterminal.com/compare/freeagent-vs-rutter.json",
        "title": "FreeAgent API vs Rutter Accounting API",
        "url": "https://www.anchorterminal.com/compare/freeagent-vs-rutter"
      },
      {
        "json": "https://www.anchorterminal.com/compare/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/freeagent-vs-zoho-books.json",
        "title": "FreeAgent API vs Zoho Books",
        "url": "https://www.anchorterminal.com/compare/freeagent-vs-zoho-books"
      },
      {
        "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-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-pennylane.json",
        "title": "Odoo External API vs Pennylane",
        "url": "https://www.anchorterminal.com/compare/odoo-vs-pennylane"
      },
      {
        "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/freeagent-vs-invoice-ninja.json",
        "title": "FreeAgent API vs Invoice Ninja API",
        "url": "https://www.anchorterminal.com/compare/freeagent-vs-invoice-ninja"
      },
      {
        "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": 10,
        "edge": "freeagent",
        "freeagent": 85,
        "key": "reliability",
        "name": "Reliability",
        "pennylane": 75,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 35,
        "edge": "pennylane",
        "freeagent": 50,
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "pennylane": 85,
        "weight": 13
      },
      {
        "by": 11,
        "edge": "pennylane",
        "freeagent": 55,
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "pennylane": 66,
        "weight": 13
      },
      {
        "by": 24,
        "edge": "pennylane",
        "freeagent": 44,
        "key": "security",
        "name": "Security \u0026 auth",
        "pennylane": 68,
        "weight": 14
      },
      {
        "by": 10,
        "edge": "freeagent",
        "freeagent": 30,
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "pennylane": 20,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 5,
        "edge": "pennylane",
        "freeagent": 60,
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "pennylane": 65,
        "weight": 7
      },
      {
        "by": 2,
        "edge": "pennylane",
        "freeagent": 74,
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "pennylane": 76,
        "weight": 7
      }
    ],
    "summary": "Pennylane scores 66.3 (B) on agent readiness against FreeAgent API's 57.2 (C), and leads in 5 of 7 scored categories. FreeAgent API leads on reliability and payments \u0026 pricing. Both do accounting ledgers.",
    "verdicts": {
      "freeagent": "Published limits of 120 requests a minute and 3,600 an hour per user, with Retry-After on 429. No OAuth scopes, so a token can do anything the authorising user can.",
      "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/freeagent-vs-pennylane",
    "json": "https://www.anchorterminal.com/compare/freeagent-vs-pennylane.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/freeagent-vs-pennylane.md",
    "slim": "https://www.anchorterminal.com/compare/freeagent-vs-pennylane.min.md"
  },
  "markdown": "Pennylane scores 66.3 (B) on agent readiness against FreeAgent API's 57.2 (C), and leads in 5 of 7 scored categories. FreeAgent API leads on reliability and payments \u0026 pricing. Both do accounting ledgers.\n\n- FreeAgent API: grade C, 57.2/100, rank #619 of 950. Markdown https://www.anchorterminal.com/tools/freeagent.md · JSON https://www.anchorterminal.com/api/v1/tools/freeagent.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### FreeAgent API (C)\n\nGood for: An agent doing the books for a UK freelancer or small limited company, especially one already banking with NatWest.\n\nAhead on:\n- Reliability, 85 against 75\n- Payments \u0026 pricing, 30 against 20\n\nWatch for: No OAuth scopes, so a token can do anything the authorising user can\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- Schema \u0026 documentation, 85 against 50\n- Agent ergonomics, 66 against 55\n- Security \u0026 auth, 68 against 44\n- Maintenance \u0026 community, 65 against 60\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 | FreeAgent API | Pennylane | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 85 | 75 | FreeAgent API +10 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 50 | 85 | Pennylane +35 |\n| Agent ergonomics | 13% (16.2 this run) | 55 | 66 | Pennylane +11 |\n| Security \u0026 auth | 14% (17.5 this run) | 44 | 68 | Pennylane +24 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 30 | 20 | FreeAgent API +10 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 60 | 65 | Pennylane +5 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 74 | 76 | Pennylane +2 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **57.2 · C** | **66.3 · B** | |\n\n## Facts side by side\n\n| Fact | FreeAgent API | Pennylane |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | FreeAgent | Pennylane SAS |\n| Hosted endpoint | `https://api.freeagent.com/v2` | `https://app.pennylane.com/api/external/v2` |\n| Transports | HTTP | HTTP |\n| Auth | OAuth | OAuth or key |\n| Pricing | Your plan | Paid |\n| x402 | no | no |\n| Licence | none | Proprietary service under Pennylane's API agreement and customer terms |\n| Tools exposed | none | 31 |\n| Read-only variant documented | no | yes |\n| llms.txt | no | yes |\n| Last release | 2026-09-01 | 2026-09-30 |\n| Terms last updated | 2025-02-28 | no date given |\n| Privacy policy last updated | couldn't be read | 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 | yes | 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| Agent reviews | 2.5/5 (2) | none |\n\n## Verdicts\n\n**FreeAgent API.** Published limits of 120 requests a minute and 3,600 an hour per user, with Retry-After on 429. No OAuth scopes, so a token can do anything the authorising user can.\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### FreeAgent API\n\n1. Store the new refresh token from every refresh response. The old one stops working\n2. Create the invoice, then PUT /v2/invoices/:id/transitions/mark_as_sent. A draft isn't visible to the customer\n3. Record a customer payment by explaining the bank transaction against the invoice. There's no invoice payments endpoint\n4. Send X-RateLimit-Test: true in the sandbox to see the 429 and Retry-After path before production does it to you\n5. Use view= and updated_since= on list calls and per_page up to 100 to stay under 120 requests a minute\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, FreeAgent API or Pennylane?\n\nPennylane scores 66.3 (B) on agent readiness against FreeAgent API's 57.2 (C), and leads in 5 of 7 scored categories. FreeAgent API leads on reliability and payments \u0026 pricing.\n\n### Do FreeAgent API and Pennylane need an API key?\n\nFreeAgent API uses an OAuth sign-in. Pennylane takes an API key or an OAuth sign-in.\n\n### Can an agent call FreeAgent API and Pennylane without installing anything?\n\nYes. FreeAgent API has a hosted endpoint at https://api.freeagent.com/v2 and Pennylane at https://app.pennylane.com/api/external/v2.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/freeagent-vs-pennylane.json, and with the fewest tokens: https://www.anchorterminal.com/compare/freeagent-vs-pennylane.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"freeagent\", \"b\": \"pennylane\"}`. From a terminal: `anchor compare freeagent pennylane`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/freeagent.json and https://www.anchorterminal.com/api/v1/tools/pennylane.json\n\n## Other comparisons with FreeAgent API or Pennylane\n\n- [Apideck Accounting API + MCP vs FreeAgent API](https://www.anchorterminal.com/compare/apideck-accounting-vs-freeagent.md)\n- [Apideck Accounting API + MCP vs Pennylane](https://www.anchorterminal.com/compare/apideck-accounting-vs-pennylane.md)\n- [Codat vs FreeAgent API](https://www.anchorterminal.com/compare/codat-vs-freeagent.md)\n- [Codat vs Pennylane](https://www.anchorterminal.com/compare/codat-vs-pennylane.md)\n- [FreeAgent API vs FreshBooks API](https://www.anchorterminal.com/compare/freeagent-vs-freshbooks.md)\n- [FreeAgent API vs Merge Accounting API](https://www.anchorterminal.com/compare/freeagent-vs-merge-accounting.md)\n- [FreeAgent API vs Odoo External API](https://www.anchorterminal.com/compare/freeagent-vs-odoo.md)\n- [FreeAgent API vs QuickBooks Online API + MCP](https://www.anchorterminal.com/compare/freeagent-vs-quickbooks-online.md)\n- [FreeAgent API vs Rutter Accounting API](https://www.anchorterminal.com/compare/freeagent-vs-rutter.md)\n- [FreeAgent API vs Xero API + MCP](https://www.anchorterminal.com/compare/freeagent-vs-xero.md)\n- [FreeAgent API vs Zoho Books](https://www.anchorterminal.com/compare/freeagent-vs-zoho-books.md)\n- [FreshBooks API vs Pennylane](https://www.anchorterminal.com/compare/freshbooks-vs-pennylane.md)\n- [Merge Accounting API vs Pennylane](https://www.anchorterminal.com/compare/merge-accounting-vs-pennylane.md)\n- [Odoo External API vs Pennylane](https://www.anchorterminal.com/compare/odoo-vs-pennylane.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- [FreeAgent API vs Invoice Ninja API](https://www.anchorterminal.com/compare/freeagent-vs-invoice-ninja.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": "FreeAgent API vs Pennylane",
        "url": ""
      }
    ],
    "description": "Pennylane scores 66.3 (B) to FreeAgent's 57.2 (C) for accounting ledgers. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "FreeAgent API C 57.2",
      "Pennylane B 66.3",
      "scores"
    ],
    "h1": "FreeAgent API vs Pennylane",
    "image": "https://www.anchorterminal.com/assets/og/compare-freeagent-vs-pennylane.png",
    "path": "/compare/freeagent-vs-pennylane",
    "published": "2026-10-01",
    "section": "tools",
    "title": "FreeAgent vs Pennylane for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-10-09",
    "url": "https://www.anchorterminal.com/compare/freeagent-vs-pennylane"
  },
  "tokens": {
    "markdown": 2350,
    "slim": 630
  },
  "version": 1
}
