Can an AI agent use FreshBooks?
As of 6 Oct 2026, an AI agent can't use FreshBooks on its own: reCAPTCHA image puzzle on sign-up.
- Find: Some docs for agents: An MCP server.
- Access: Can't sign up.
- Use: Work not reached.
- Pay: Payment not reached.
- Leave: Leaving not reached.
To reach L2 · Gets in: let an agent sign up on its own.
With an account set up by a person: not measured yet.
What the levels meanDriven 6 Oct 2026Same level in 2 drives in a rowRules of 15 Oct 2026Claim this page
Written and checked by our agents from this drive's record. How we write.
Who gets in
- Agents on a serverStopped by a CAPTCHA on the sign-up form.
- Signed agentsThe sign-up page opens. The CAPTCHA on the form stops them too.
- Agents in a person's browserNot measured yet.
Sign-up page checked 13 Oct 2026. Signed agents: the ones Cloudflare verifies. Where agents come from
What an agent can do in FreshBooks.
On its own
- Read the public help pages, software guides and webhook documentation
- Find the official connection point for AI assistants and its security settings
- Register itself as a developer app without needing an account first
What it can't, and why
- Create an accountA picture puzzle (CAPTCHA) blocks sign-up and only a person can solve it
- Create invoices, track expenses, log time, or run reportsAll of these need a logged-in account, which could not be created
- Pay for or cancel a subscriptionBuying also goes through the same blocked sign-up page
1 more
- Delete an accountNo account was ever created, and FreshBooks only deletes accounts by email request
Can an AI agent sign up for FreshBooks on its own?
No. Sign-up: needs a human. Visible Google reCAPTCHA image puzzle on the auth.freshbooks.com 'Checking your browser' page.
Does FreshBooks have an MCP server, and can an agent connect to it?
Yes. FreshBooks has an official MCP server. The server is hosted and signs an agent in with OAuth.
A new agent can't get in on its own: in the drive of 6 Oct 2026, our agent stopped at sign up (it needs a person). Through the MCP server, 0 of our agent's 1 attempt worked.
What the drive found
API–OpenAPIMCP · official–CLISDK–llms.txtWebhooks–SandboxNot reached in this drive: the API key, deleting the account and paying. Every checkpoint, in detail
For the team behind FreshBooks.
Where agents stop in FreshBooks today, and the fixes that get them further, highest impact first.
The fixes, highest impact first
- Let signed agents past the sign-up challengeStep-by-step guide
- Offer an agent sign-up and claim flowStep-by-step guide
- Support MCP (the 28 Jul 2026 spec) and server/discover
4 more fixes
- Advertise CIMD in the AS metadata Step-by-step guide
- Publish OpenAPI, llms.txt and markdown docs Step-by-step guide
- Add an account delete route
- Expose a billing API for plan changes Step-by-step guide
- Claim it free and reply next to the result.
- A Drive, $49: your private report, with where agents stop, the evidence and the fixes that move your level.
- Fixed something? Order a Drive ($49) any time, or the Monthly drive ($29/month).
Details
Your API, MCP server or CLI is the product? An Audit ($299) also checks every documented route, MCP tool and CLI command against your docs. Compare plans.
Already claimed it? Open it in your dashboard.
Rather not be driven? Block AgentDrivesAgent in robots.txt or write to us. We stop driving it ourselves; this page stays, with its date.
Embed the badge on your site
Behind the level.
Our agent couldn't get into FreshBooks, so the work, its reliability and the crash test aren't measured. The part scores are what it could judge from the outside.
Part scores · level history
Part scores
Agent-ready setup
- llms.txt: not found
- OpenAPI: not found
- MCP server: found
- CLI: not found
Not measured in this drive: Holds up, Docs match (part of an Audit).
Security: reported privately to the owner
Level history
- 2 Oct 2026L1Needs a person
- 6 Oct 2026L1Needs a person
For agents and builders.
The drive as data, every checkpoint and all 28 attempts.
How an agent connects · 3 tips
/api/tools/freshbooks.json/tools/freshbooks.mdMCP get_tool {"slug":"freshbooks"}
- MCP endpoint is https://mcp.freshbooks.com/v1; request tokens with resource=https://mcp.freshbooks.com/v1 or the gateway rejects the audience. It is session-based: use initialize.
- DCR at https://auth.freshbooks.com/service/auth/oauth/registration works without an account; a human must still sign up and consent.
- The 30-day trial needs no card; after human sign-up and consent the whole API is open.
Every checkpoint, in detail · 9 checkpoints
- DocsHeadlessPublic HTML docs at /api/start (59 /api/ pages), SDKs, Postman collection, webhooks. No llms.txt, no markdown, no OpenAPI found.
- Sign upNeeds a humanVisible Google reCAPTCHA image puzzle on the auth.freshbooks.com 'Checking your browser' page.
- VerifyNot reachedNo sign-up went through, so no verification mail.
- KeyNot reachedDocumented route is an OAuth app on the developer page plus a logged-in user's consent; no account. DCR registered a client headless (201).
- First callNot reachedNo user token; GET /auth/api/v1/users/me answers 401 with a clear JSON error.
- First actionNot reachedNo user token or account id.
- PayNot reachedNo 402, x402, MPP or UCP; not in x402 Bazaar or mpp.dev. 30-day trial needs no card, but trial and Buy Now both go through the reCAPTCHA-gated sign-up, so a human is needed before any purchase. Checkout not reached.
- CancelNot reachedNothing started. Docs: cancel in a web browser under Billing and Upgrade; no billing API.
- DeleteNot reachedNo account made. Docs: deletion by email to privacy@freshbooks.com from the account address.
The attempt log · 28 attempts
| Capability | Route | Result | Evidence |
|---|---|---|---|
| MCP server discovery: POST server/discover to https://mcp.freshbooks.com/v1 (endpoint from Claude connector listing) | api | partial ✓ | HTTP 401 WWW-Authenticate: Bearer resource_metadata="https://mcp.freshbooks.com/.well-known/oauth-protected-resource/v1", scope="mcp:all:read offline_access mcp:revenue:write mcp:payables:write mcp:operations:write mcp:books:write" |
| Protected Resource Metadata: GET /.well-known/oauth-protected-resource/v1 | api | done ✓ | 200 application/json resource=https://mcp.freshbooks.com/v1, authorization_servers=[https://auth.freshbooks.com/] |
| Authorization server metadata: GET auth.freshbooks.com/.well-known/oauth-authorization-server | api | done ✓ | 200 JSON; registration_endpoint https://auth.freshbooks.com/service/auth/oauth/registration; no client_id_metadata_document_supported; no device_authorization_endpoint; grant_types include password, implicit; code_challenge_methods plain,S256; no agent_auth block |
| Cards and well-knowns: GET /.well-known/ai-catalog.json, agent-card.json, agent.json, mcp/server-card.json, ucp on www.freshbooks.com; <mcp>/server-card | api | failed ✓ | all 403 nginx text/html on www; mcp.freshbooks.com/v1/server-card 404 |
| robots.txt and aipref: GET /robots.txt | api | done ✓ | 200 text/plain; no Content-Usage or Content-signal lines; User-Agent: * group disallows only paths like /wp-admin/; ClaudeBot/Amazonbot/YandexBot Crawl-delay: 10 |
| llms.txt and markdown docs: GET /llms.txt, /api/llms.txt, Accept: text/markdown on /api/invoices, /api/invoices.md, /api/start.md | api | failed ✓ | llms.txt 404; Accept: text/markdown returned text/html, Vary: Accept-Encoding only; .md URLs 404 |
| auth.md / SKILL.md: GET /auth.md, /SKILL.md | api | failed ✓ | /auth.md 404; /SKILL.md 301 to /skill.md which 404s |
| Find API docs: Fetch https://www.freshbooks.com/api/start | api | done ✓ | 200 HTML docs: OAuth2 bearer tokens; create an app on the developer page after sign-up; Postman docs; SDK page |
| Sign up: Open sign-up (my.freshbooks.com/#/signup -> auth.freshbooks.com/oauth/authorize?type=sign_up) in the browser | browser | blocked | Page title 'Checking your browser - reCAPTCHA' on auth.freshbooks.com; visible reCAPTCHA image puzzle ('Select all images with a bus'), screenshot browser/shots/002.png; did not clear after 15 s. |
| OAuth client registration (DCR): POST https://auth.freshbooks.com/service/auth/oauth/registration (registration_endpoint from AS metadata) with client_name, redirect_uris, grant_types [authorization_code, refresh_token] | api | done ✓ | 201 JSON client_id + client_secret, application_type web; X-RateLimit-Limit 600 |
| MCP server/discover and initialize: Token via client_credentials with resource=https://mcp.freshbooks.com/v1 (aud matches), then POST server/discover; fallback initialize offering 2026-07-28 then 2025-11-25 | mcp | failed | server/discover -> 400 text/plain 'missing session ID' (legacy, session-based server); initialize 2026-07-28 and 2025-11-25 -> 500 text/plain 'failed to create new session: failed to create MCP session to any backend'. Token without resource param -> 403 'Audiences in Jwt are not allowed'. |
| Verify email: Verify the sign-up email at the agent's inbox | none | blocked | No sign-up submitted, so no mail to wait for |
| Get API credentials: Create an OAuth app on the developer page (documented route) / authorize the DCR client as a user | none | blocked | Docs (/api/start): create an app on the developer page after logging in; authorization code flow needs a logged-in user. DCR client registered headless (201) but user consent impossible without an account. |
| First authenticated API call: GET https://api.freshbooks.com/auth/api/v1/users/me | api | blocked | 401 application/json {"error":"unauthenticated","error_description":"This action requires authentication to continue."} WWW-Authenticate: Bearer realm="FreshBooks" |
| First create action: Create a client via POST /accounting/account/{id}/users/clients | none | blocked | No user token and no account_id |
| Create and send an invoice: Create and send an invoice via POST /accounting/account/{id}/invoices/invoices | none | blocked | No account or user OAuth token; sign-up wall |
| Accept online payment (card, ACH, Apple Pay, Google Pay, BNPL): Accept online payment (card, ACH, Apple Pay, Google Pay, BNPL) via POST /payments/account/{id}/online_payments | none | blocked | No account or user OAuth token; sign-up wall |
| Set up recurring billing / automated invoices: Set up recurring billing / automated invoices via POST /accounting/account/{id}/recurring_invoices/recurring_invoices | none | blocked | No account or user OAuth token; sign-up wall |
| Track and categorize an expense: Track and categorize an expense via POST /accounting/account/{id}/expenses/expenses | none | blocked | No account or user OAuth token; sign-up wall |
| Scan a receipt to create an expense (mobile): Scan a receipt to create an expense (mobile) via UI | none | blocked | No account or user OAuth token; sign-up wall |
| Track time against a client/project: Track time against a client/project via POST /timetracking/business/{id}/time_entries | none | blocked | No account or user OAuth token; sign-up wall |
| Bill tracked time and expenses onto an invoice: Bill tracked time and expenses onto an invoice via PUT /accounting/account/{id}/invoices/invoices/{id} (lines with modern_time_entries/expenseid) | none | blocked | No account or user OAuth token; sign-up wall |
| Create and send an estimate: Create and send an estimate via POST /accounting/account/{id}/estimates/estimates | none | blocked | No account or user OAuth token; sign-up wall |
| Convert an estimate into an invoice: Convert an estimate into an invoice via POST /accounting/account/{id}/invoices/invoices (estimateid field) | none | blocked | No account or user OAuth token; sign-up wall |
| Run financial and accounting reports: Run financial and accounting reports via GET /accounting/account/{id}/reports/accounting/profitloss | none | blocked | No account or user OAuth token; sign-up wall |
| Pay step probe: 402 probes on api.freshbooks.com paths and x402./mpp./agents. subdomains; /.well-known/ucp; x402 Bazaar and mpp.dev registries; pricing page | api | done ✓ | api.freshbooks.com unauthenticated -> 404/401 JSON, no 402, no PAYMENT-REQUIRED or WWW-Authenticate: Payment; x402./mpp./agents.freshbooks.com 301 to www; /.well-known/ucp 403; Bazaar and mpp.dev: 0 matches for freshbooks; pricing page: '30-day free trial, with no contracts and no credit card required'; Buy Now -> my.freshbooks.com/#/signup/direct-buy (same reCAPTCHA-gated auth host) |
| Cancel plan: Check documented cancel route | none | skipped | Support article 115011044847: 'On a web browser, select your profile picture ... Billing and Upgrade'; no billing API in the 59 /api/ doc pages |
| Delete account and data: Check documented delete route | none | skipped | Support article 360031120891: 'please email privacy@freshbooks.com directly from your email address on file' |
Also in Invoicing.
Invoice NinjaL1Gets in on its ownFreshBooks vs Invoice Ninja
MoneybirdL1Can't sign up on its ownFreshBooks vs Moneybird
XeroL1Can't sign up on its ownFreshBooks vs Xero