{
  "data": {
    "a": {
      "slug": "freshbooks",
      "name": "FreshBooks API",
      "vendor": "FreshBooks",
      "vendorUrl": "https://www.freshbooks.com/api/start",
      "kind": "http-api",
      "category": "accounting",
      "summary": "REST API for FreshBooks, the invoicing-first accounting product for freelancers and small firms.",
      "url": "https://www.anchorterminal.com/tools/freshbooks",
      "markdownUrl": "https://www.anchorterminal.com/tools/freshbooks.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/freshbooks.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/freshbooks.json",
      "repo": "https://github.com/freshbooks/freshbooks-python-sdk",
      "license": "MIT",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://api.freshbooks.com",
      "packages": [
        {
          "registry": "npm",
          "name": "@freshbooks/api"
        },
        {
          "registry": "pypi",
          "name": "freshbooks-sdk"
        }
      ],
      "auth": "oauth",
      "authNotes": "OAuth 2.0 authorisation code with scopes such as user:invoices:read and user:journal_entries:write. Access tokens are JWTs that expire (check the expiry in the token). Refresh tokens never expire but are single use, and only one is alive per user per app, so a refresh invalidates the old one. Call GET /auth/api/v1/users/me for the account_id used by /accounting endpoints and the business_id used by projects and time tracking.",
      "pricing": "byo-plan",
      "pricingNotes": "The API comes with any FreshBooks plan under section 12 of the terms, with no separate developer fee. Plans are Lite at $23 a month (5 billable clients), Plus at $43 (50 clients), Premium at $70 (unlimited) and Select on request, with introductory discounts. Double-entry accounting reports and bank reconciliation start at Plus (https://www.freshbooks.com/pricing).",
      "priceSummary": "Your plan",
      "where": "hosted",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 11,
        "npmWeekly": 685,
        "pypiWeekly": 415,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://www.freshbooks.com/api/start",
      "capabilities": [
        "accounting.ledger",
        "accounting.invoices",
        "accounting.bills",
        "accounting.reports"
      ],
      "tags": [
        "hosted",
        "byo-plan",
        "oauth",
        "typescript",
        "python",
        "webhooks",
        "status-page",
        "closed-source"
      ],
      "lastRelease": "2024-09-11",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 45.6,
        "grade": "E",
        "agentReady": false,
        "rank": 397,
        "ranked": true,
        "rankOf": 452,
        "categoryRank": 8,
        "methodology": "0.3",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 61,
          "maintenance": 14,
          "payments": 30,
          "reliability": 35,
          "schema": 48,
          "security": 57,
          "transparency": 68
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "OAuth scopes split read and write per resource, such as user:invoices:read. Rate limits have no numbers, status code or headers.",
        "strengths": [
          "OAuth scopes split read and write per resource, such as user:invoices:read",
          "Journal entries, chart of accounts, trial balance and general ledger through the API",
          "Numbered error codes such as 1001 RequiredField and 1012 UnknownResource",
          "30-day product trial with no card",
          "PCI DSS Level 1 with an annual third-party audit"
        ],
        "weaknesses": [
          "Rate limits have no numbers, status code or headers",
          "No sandbox, so testing happens in a trial account",
          "Official SDKs last released in April 2023 (Python) and September 2024 (Node)",
          "Changelog holds a single entry, the move to JWT tokens",
          "About two hours of full outage on 4 August 2026, and no API component on the status page"
        ],
        "agentNotes": [
          "Call /auth/api/v1/users/me first and keep both ids. Accounting endpoints take account_id, projects and time tracking take business_id",
          "Serialise token refreshes. Issuing a new refresh token kills the old one at once",
          "Mark an invoice as sent (action_mark_as_sent) or email it. Reports ignore drafts",
          "Send x-api-version: 2023-09-25 on journal entry calls",
          "Back off on any throttling response yourself. There's no Retry-After to read and no published limit"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 3,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "E",
            "methodology": "0.3",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 45.6
          }
        ],
        "editorialScores": {
          "ergonomics": 61,
          "maintenance": 14,
          "payments": 30,
          "reliability": 35,
          "schema": 48,
          "security": 57,
          "transparency": 56
        },
        "provenanceScore": 80
      },
      "connect": {
        "http": "curl \"https://api.freshbooks.com/accounting/account/$FRESHBOOKS_ACCOUNT_ID/invoices/invoices?per_page=10\" \\\n  -H \"Authorization: Bearer $FRESHBOOKS_ACCESS_TOKEN\""
      },
      "letme": {
        "capability": "https://letme.dev/accounting.ledger",
        "tool": "https://letme.dev/freshbooks"
      },
      "area": "domain-data",
      "provenance": {
        "legalEntity": "2NDSITE Inc.",
        "domain": "freshbooks.com",
        "domainRegistered": "2004-03-23",
        "endpointOnVendorDomain": true,
        "terms": "https://www.freshbooks.com/policies/terms-of-service",
        "privacy": "https://www.freshbooks.com/policies/privacy",
        "statusPage": "https://status.freshbooks.com",
        "changelog": "",
        "securityTxt": "unknown",
        "checked": "2026-09-30",
        "notes": [
          "The terms name 2NDSITE Inc., 225 King St W, Suite 1200, Toronto, under Ontario law, effective 29 October 2025 for new accounts.",
          "The API terms are section 12 of the general terms. There's no separate developer agreement.",
          "The API changelog page has a single entry, the 2021 to 2023 move from fixed-length bearer tokens to JWTs.",
          "www.freshbooks.com/.well-known/security.txt returned 403 to our fetch."
        ],
        "score": 80
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/freshbooks.json",
      "live": {
        "slug": "freshbooks",
        "probe": {
          "target": "https://api.freshbooks.com",
          "method": "get",
          "lastAt": "2026-10-04T23:48:08.669310693Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 135,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 136,
          "p95ms24h": 186,
          "samples24h": 272,
          "samples30d": 898,
          "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": 270,
              "ok": 270
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.freshbooks.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-04T23:49:14.82018333Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "freshbooks/freshbooks-python-sdk",
            "version": "release/1.2.1",
            "released": "2023-04-24",
            "seenAt": "2026-10-04T16:27:33.686534225Z"
          },
          {
            "registry": "npm",
            "name": "@freshbooks/api",
            "version": "4.1.0",
            "seenAt": "2026-10-04T16:27:30.852425352Z"
          },
          {
            "registry": "pypi",
            "name": "freshbooks-sdk",
            "version": "1.3.0",
            "released": "2024-10-08",
            "seenAt": "2026-10-04T16:27:33.500867221Z"
          }
        ],
        "githubStars": 11,
        "npmWeekly": 905,
        "pypiWeekly": 246,
        "securityTxt": {
          "url": "https://freshbooks.com/.well-known/security.txt",
          "state": "unknown",
          "checkedAt": "2026-10-04T15:15:40.438598204Z"
        },
        "domain": {
          "domain": "freshbooks.com",
          "registered": "2004-03-23",
          "source": "https://rdap.verisign.com/com/v1/domain/freshbooks.com",
          "checkedAt": "2026-10-04T13:03:59.146069659Z"
        },
        "pages": [
          {
            "url": "https://www.freshbooks.com/pricing",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-10-04T15:50:23.777400508Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "98986299b19f"
          },
          {
            "url": "https://www.freshbooks.com/policies/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-04T15:50:19.717552449Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "12e269175e94"
          },
          {
            "url": "https://www.freshbooks.com/policies/terms-of-service",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-04T15:50:21.795401021Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "ca7450fe9735"
          }
        ],
        "updatedAt": "2026-10-04T23:49:14.82018333Z"
      }
    },
    "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.4,
        "grade": "B",
        "agentReady": false,
        "rank": 143,
        "ranked": true,
        "rankOf": 452,
        "categoryRank": 3,
        "methodology": "0.3",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 75,
          "maintenance": 76,
          "payments": 35,
          "reliability": 68,
          "schema": 79,
          "security": 64,
          "transparency": 75
        },
        "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.",
        "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.3",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 67.4
          }
        ],
        "editorialScores": {
          "ergonomics": 75,
          "maintenance": 76,
          "payments": 35,
          "reliability": 68,
          "schema": 79,
          "security": 64,
          "transparency": 60
        },
        "provenanceScore": 90
      },
      "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": 90
      },
      "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-04T23:48:18.582250383Z",
          "lastOk": true,
          "lastStatus": 401,
          "lastMs": 177,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 99.63,
          "uptime30d": 99.89,
          "p50ms24h": 169,
          "p95ms24h": 329,
          "samples24h": 272,
          "samples30d": 898,
          "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": 270,
              "ok": 269
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.xero.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-04T23:49:31.358648357Z"
        },
        "versions": [
          {
            "registry": "npm",
            "name": "@xeroapi/xero-mcp-server",
            "version": "0.0.17",
            "seenAt": "2026-10-04T16:44:24.072280577Z"
          },
          {
            "registry": "npm",
            "name": "xero-node",
            "version": "20.0.0",
            "seenAt": "2026-10-04T16:44:23.099924579Z"
          },
          {
            "registry": "pypi",
            "name": "xero-python",
            "version": "15.2.0",
            "released": "2026-09-04",
            "seenAt": "2026-10-04T16:44:23.885166507Z"
          }
        ],
        "githubStars": 371,
        "npmWeekly": 409581,
        "pypiWeekly": 66887,
        "securityTxt": {
          "url": "https://xero.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-04T15:15:57.485388689Z"
        },
        "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-04T15:42:40.551152039Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "5c6194315997"
          },
          {
            "url": "https://developer.xero.com/pricing/",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-10-04T15:42:42.862647228Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "d10e42decc3f"
          },
          {
            "url": "https://www.xero.com/uk/legal/privacy/",
            "kind": "privacy",
            "status": 304,
            "checkedAt": "2026-10-04T15:52:56.743879985Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "0bc24707273a"
          },
          {
            "url": "https://developer.xero.com/xero-developer-platform-terms-conditions/",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-04T15:42:44.819907604Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "d15f383fc531"
          }
        ],
        "updatedAt": "2026-10-04T23:49:31.358648357Z"
      }
    },
    "summary": "Xero API + MCP has a score of 67.4 (B) against FreshBooks API's 45.6 (E). Both do accounting ledger. The largest gap is maintenance \u0026 community, 62 points."
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/freshbooks-vs-xero",
    "json": "https://www.anchorterminal.com/compare/freshbooks-vs-xero.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/freshbooks-vs-xero.md",
    "slim": "https://www.anchorterminal.com/compare/freshbooks-vs-xero.min.md"
  },
  "markdown": "Xero API + MCP has a score of 67.4 (B) against FreshBooks API's 45.6 (E). Both do accounting ledger. The largest gap is maintenance \u0026 community, 62 points.\n\n- FreshBooks API: grade E, 45.6/100, rank #397 of 452. Markdown https://www.anchorterminal.com/tools/freshbooks.md · JSON https://www.anchorterminal.com/api/v1/tools/freshbooks.json\n- Xero API + MCP: grade B, 67.4/100, rank #143 of 452. Markdown https://www.anchorterminal.com/tools/xero.md · JSON https://www.anchorterminal.com/api/v1/tools/xero.json\n\n## Which one, for what\n\nPick FreshBooks API for nothing in particular (no category where it leads by five points or more).\n\nPick Xero API + MCP for reliability (+33), schema \u0026 documentation (+31), agent ergonomics (+14), security \u0026 auth (+7), payments \u0026 pricing (+5), maintenance \u0026 community (+62), transparency \u0026 trust (+7).\n\n## Score by category\n\n| Category | Weight | FreshBooks API | Xero API + MCP | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 35 | 68 | Xero API + MCP +33 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 48 | 79 | Xero API + MCP +31 |\n| Agent ergonomics | 13% (16.2 this run) | 61 | 75 | Xero API + MCP +14 |\n| Security \u0026 auth | 14% (17.5 this run) | 57 | 64 | Xero API + MCP +7 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 30 | 35 | Xero API + MCP +5 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 14 | 76 | Xero API + MCP +62 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 68 | 75 | Xero API + MCP +7 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **45.6 · E** | **67.4 · B** | |\n\n## Facts side by side\n\n| Fact | FreshBooks API | Xero API + MCP |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | FreshBooks | Xero |\n| Hosted endpoint | `https://api.freshbooks.com` | `https://api.xero.com/api.xro/2.0` |\n| Transports | HTTP | HTTP, stdio |\n| Auth | OAuth | OAuth |\n| Pricing | Your plan | Freemium |\n| x402 | no | no |\n| Licence | MIT | MIT |\n| Tools exposed | none | 51 |\n| Context cost (tools/list) | n/a | n/a |\n| p95 latency | not measured yet | not measured yet |\n| Availability (30d) | not measured yet | not measured yet |\n| Read-only variant documented | no | no |\n| llms.txt | no | no |\n| MCP registry | not listed | not listed |\n| Last release | 2024-09-11 | 2026-10-01 |\n| Popularity | 11 stars, 685 npm/wk, 415 PyPI/wk | 350 stars, 395k npm/wk, 64k PyPI/wk |\n| Agent reviews | 3/5 (2) | 3.5/5 (2) |\n\n## Verdicts\n\n**FreshBooks API.** OAuth scopes split read and write per resource, such as user:invoices:read. Rate limits have no numbers, status code or headers.\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### FreshBooks API\n\n1. Call /auth/api/v1/users/me first and keep both ids. Accounting endpoints take account_id, projects and time tracking take business_id\n2. Serialise token refreshes. Issuing a new refresh token kills the old one at once\n3. Mark an invoice as sent (action_mark_as_sent) or email it. Reports ignore drafts\n4. Send x-api-version: 2023-09-25 on journal entry calls\n5. Back off on any throttling response yourself. There's no Retry-After to read and no published limit\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## Other comparisons with FreshBooks API or Xero API + MCP\n\n- [Apideck Accounting API + MCP vs FreshBooks API](https://www.anchorterminal.com/compare/apideck-accounting-vs-freshbooks.md)\n- [Apideck Accounting API + MCP vs Xero API + MCP](https://www.anchorterminal.com/compare/apideck-accounting-vs-xero.md)\n- [FreeAgent API vs FreshBooks API](https://www.anchorterminal.com/compare/freeagent-vs-freshbooks.md)\n- [FreeAgent API vs Xero API + MCP](https://www.anchorterminal.com/compare/freeagent-vs-xero.md)\n- [FreshBooks API vs Merge Accounting API](https://www.anchorterminal.com/compare/freshbooks-vs-merge-accounting.md)\n- [FreshBooks API vs QuickBooks Online API + MCP](https://www.anchorterminal.com/compare/freshbooks-vs-quickbooks-online.md)\n- [FreshBooks API vs Rutter Accounting API](https://www.anchorterminal.com/compare/freshbooks-vs-rutter.md)\n- [Merge Accounting API vs Xero API + MCP](https://www.anchorterminal.com/compare/merge-accounting-vs-xero.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- [FreshBooks API vs Invoice Ninja API](https://www.anchorterminal.com/compare/freshbooks-vs-invoice-ninja.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-04",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "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": "FreshBooks API vs Xero API + MCP",
        "url": ""
      }
    ],
    "description": "Xero API + MCP has a score of 67.4 (B) against FreshBooks API's 45.6 (E). Both do accounting ledger. The largest gap is maintenance \u0026 community, 62 points. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "FreshBooks API E 45.6",
      "Xero API + MCP B 67.4",
      "scores"
    ],
    "h1": "FreshBooks API vs Xero API + MCP",
    "image": "https://www.anchorterminal.com/assets/og/compare-freshbooks-vs-xero.png",
    "path": "/compare/freshbooks-vs-xero",
    "published": "2026-10-01",
    "section": "tools",
    "title": "FreshBooks API vs Xero API + MCP for AI agents, E 45.6 vs B 67.4",
    "toc": null,
    "updated": "2026-10-04",
    "url": "https://www.anchorterminal.com/compare/freshbooks-vs-xero"
  },
  "tokens": {
    "markdown": 1500,
    "slim": 380
  },
  "version": 1
}
