Can an AI agent use TidyCal?
As of 12 Oct 2026, an AI agent gets into TidyCal on its own, in a browser (the API key is paid), and does 60% of the core work.
- Find: Docs for agents: llms.txt, an OpenAPI and an MCP server.
- Access: Signs up in a browser.
- Use: 60% of the work.
- Pay: Reaches the checkout: Stopped at the card form.
- Leave: Leaves on its own: Nothing to cancel, deletes its account.
To reach L4 · Runs on its own: do 80% of the core work (now 60%).
Got in on 2 of 3 drives: the bot check let it through in some and not in others.
What the levels meanDriven 12 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 serverGet in on their own.
- Signed agentsThe sign-up page opens.
- 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 TidyCal.
On its own
- Set up a booking page and a type of meeting people can book, and publish it instantly
- Let someone see open times, book a slot, get a confirmation email, reschedule or cancel
- Set a buffer between meetings and limits on how soon or how far ahead people can book
2 more
- Make a discount coupon and see who has booked
- Delete the whole account by following an emailed confirmation link
What it can't, and why
- Connect through TidyCal's API or AI-assistant toolBoth require upgrading to a paid plan
- Create an account without a web browserSign-up is only a web form
- Take paid bookings or sell packages/productsNeeds a Stripe or PayPal account connected, which the test did not have
2 more
- Sync a Google/Microsoft/Apple calendar or import from CalendlyNeeds an outside calendar/Calendly account the test did not have
- Pay for the paid plan by itselfOnly a human credit-card checkout exists; no automated payment option
Can an AI agent sign up for TidyCal on its own?
Yes, in a browser, without a human. Only route is the web form /register with invisible reCAPTCHA; no sign-up API or agent registration. Done in the browser with the agent's inbox; the check let our agent's browser through.
Does TidyCal have an MCP server, and can an agent connect to it?
Yes. TidyCal has an official MCP server. The server signs an agent in with OAuth.
A new agent can get in on its own, in a browser: in the drive of 12 Oct 2026, our agent signed up and did its work in the web app without a person. API keys need a paid plan, so it got none. Through the MCP server, 0 of our agent's 2 attempts worked.
What the drive found
APIOpenAPIMCP · official–CLI–SDKllms.txt–Webhooks–SandboxHow does an AI agent get a TidyCal API key?
In the drive of 12 Oct 2026, our agent was blocked at this step and got no key. API tokens and the MCP server are paid-only. Integrations > API on Free: 'Unlock Integrations by upgrading'. MCP OAuth: DCR registered a client headless, but /oauth/authorize on Free answered 'For API access please upgrade to a lifetime plan!'.
Can an AI agent delete its TidyCal account?
Yes, in a browser, without a human. Settings > Account > Delete account emails a 'Data erasure request' link; opening it deleted the account ('Your account has been successfully deleted'). Login afterwards: 'These credentials do not match our records.'; the booking page /an inbox returns 404. No API route.
Can an AI agent pay for TidyCal?
Reaches the checkout: stopped at the card form.
Ways to pay found: Stripe Checkout (hosted card checkout) for Pro; AppSumo for lifetime plans.
No card needed to start.
What would let agents pay on their own
- Accept x402 or MPP on your API. Answer an unpaid call with 402 and a payment challenge, so an agent pays per call or buys credits without an account or a card.Step-by-step guide
- List your plans on Stripe Projects. Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev).Step-by-step guide
No agent rail: no 402 on any TidyCal host, not in mpp.dev, Stripe Projects or the x402 Bazaar, no /.well-known/ucp, no billing API. We paid nothing. Pro is a live Stripe Checkout session (EUR 11.16/month, 'Billed monthly') reached from the pricing page while logged in; lifetime plans are sold on appsumo.com. Not paid: no card for this drive.
Ways to pay checked 12 Oct 2026.
For the team behind TidyCal.
Where agents stop in TidyCal today, and the fixes that get them further, highest impact first.
The fixes, highest impact first
- Open read-only API access on FreeStep-by-step guide
- Make MCP authorize match its docsStep-by-step guide
- Add a documented agent sign-up routeStep-by-step guide
5 more fixes
- Fix the pricing Subscribe link
- Accept an agent payment rail for Pro Step-by-step guide
- Support CIMD next to DCR Step-by-step guide
- Add securitySchemes and serve the OpenAPI file Step-by-step guide
- Add an account delete API call
- 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.
The part scores and the measures behind them.
Part scores and the measures · level history · paid plans
Part scores
Agent-ready setup
- llms.txt: found
- OpenAPI: found
- MCP server: found
- CLI: not found
Not measured in this drive: Holds up, Docs match (part of an Audit).
The measures
- Work done60
- Reliability100
- Crash test–
Level history
- 2 Oct 2026L1Needs a person
- 6 Oct 2026sign-up variesL3Does the work
- 12 Oct 2026L3Does the work
Needs a paid plan
Not counted in the level. Our drive used free plan.
| Capability | Plan |
|---|---|
| API access (all REST endpoints, personal tokens) | Pro or lifetime |
| MCP server (read-only) | Pro |
| Auto-create meeting links | Pro |
| Group bookings | Pro |
| Multiple locations | Pro |
| Manual approval | Pro |
| Booking limits | Pro |
| Confirmation redirect | paid |
| Cancellation controls | Pro |
| Custom emails | Pro |
| SMS reminders | Pro |
| CC addresses | Pro |
| Teams | paid |
| CSV export | paid |
| Booking type stats | paid |
| Google Analytics / GTM | paid |
| Custom domain / no branding | Pro |
For agents and builders.
The drive as data, every checkpoint and all 55 attempts.
How an agent connects · 5 tips
/api/tools/tidycal.json/tools/tidycal.mdMCP get_tool {"slug":"tidycal"}
- On Free, everything is in the web app: drive it in a browser; the API and MCP need Pro or a lifetime plan.
- Booking type forms need title, URL slug and description in one go; a missing description gives 'The description field is required.'
- The public booking page has a second email field (the footer sign-up); target the one inside the booking dialog.
- Confirmation mails carry reschedule and cancel links with a booker_token; use them to change a booking as the attendee.
- Account delete needs the emailed confirmation link.
Every checkpoint, in detail · 9 checkpoints
- DocsHeadlessAPI reference at /developer/docs/ (Redoc, OpenAPI 3.0.0 embedded and downloadable, 16 operations), /llms.txt, /mcp-docs; all fetched headless.
- Sign upIn a browserOnly route is the web form /register with invisible reCAPTCHA; no sign-up API or agent registration. Done in the browser with the agent's inbox; the check let our agent's browser through.
- VerifyNot neededNo email verification: sign-up went straight to onboarding and the dashboard; no verification mail was sent.
- KeyBlockedAPI tokens and the MCP server are paid-only. Integrations > API on Free: 'Unlock Integrations by upgrading'. MCP OAuth: DCR registered a client headless, but /oauth/authorize on Free answered 'For API access please upgrade to a lifetime plan!'.
- First callBlockedGET /api/me without a token: 401 {"message":"Unauthenticated."}; no token is obtainable on the free plan.
- First actionIn a browserCreated a booking type in the web app (Dashboard > Booking types > New booking type); it went live on the public page at once.
- PayIn a browserNo agent rail: no 402 on any TidyCal host, not in mpp.dev, Stripe Projects or the x402 Bazaar, no /.well-known/ucp, no billing API. We paid nothing. Pro is a live Stripe Checkout session (EUR 11.16/month, 'Billed monthly') reached from the pricing page while logged in; lifetime plans are sold on appsumo.com. Not paid: no card for this drive.
- CancelNot neededNothing to cancel: our agent used the free plan.
- DeleteIn a browserSettings > Account > Delete account emails a 'Data erasure request' link; opening it deleted the account ('Your account has been successfully deleted'). Login afterwards: 'These credentials do not match our records.'; the booking page /an inbox returns 404. No API route.
The attempt log · 55 attempts
| Capability | Route | Result | Evidence |
|---|---|---|---|
| docs: Find API docs and spec | api | done ✓ | https://tidycal.com/developer/docs/ (Redoc, TidyCal API 0.1, openapi 3.0.0 embedded, download openapi.json); 16 operations: /me, /bookings, /bookings/{booking}, PATCH /bookings/{booking}/cancel, /booking-types GET/POST, timeslots, POST bookings, /contacts GET/POST, /teams...; servers //tidycal.com/api. Auth: personal access token or OAuth client; docs say: (API access requires a paid plan) |
| mcp: MCP server/discover 2026-07-28 | mcp | blocked ✓ | POST https://tidycal.com/mcp server/discover -> HTTP 401 {"message":"Unauthenticated."}, WWW-Authenticate: Bearer realm="MCP", resource_metadata="https://tidycal.com/.well-known/oauth-protected-resource". PRM: authorization_servers [https://tidycal.com], scopes mcp:scheduling:read. AS metadata: registration_endpoint /oauth/register (DCR), S256 PKCE, no client_id_metadata_document_supported, no device flow, no agent_auth. |
| pay public probes: 402 challenges, registries, checkout, trial | api | done ✓ | pay_probe.json: no 402 challenges (api./x402./mpp./agents. subdomains do not resolve), not in mpp.dev, Stripe Projects or x402 Bazaar, /.well-known/ucp 404, /openapi.json 404. pay_tx.json: refused, no 402 asking for USDC. Pricing page: Free $0 forever; Individual Lifetime $29 one-time via AppSumo; Pro $12/mo. Signup: Get started free No credit card required. Docs mention no billing API. |
| sign up headless: Sign up via documented route without a browser | none | blocked ✓ | Only sign-up route is the web form https://tidycal.com/register (class recaptcha-form, data-recaptcha-action=register): the reCAPTCHA token is made by JS in a browser. No sign-up API, no agent registration (no auth.md/agent_auth), no device flow. |
| sign up in browser: Create account at /register in the browser | browser | done ✓ | pw: filled name AgentDrives Test, the agent's inbox, password; Create account -> redirected to https://tidycal.com/onboarding/v3/profile (1 / 3 Add a profile photo). reCAPTCHA (invisible, v3-style, no widget) let our agent's browser through. |
| API key: Create a personal access token | browser | plan_gated ✓ | https://tidycal.com/integrations/advanced on free plan: API - Use our API endpoints for custom applications and integrations. Unlock Integrations by upgrading. Docs: (API access requires a paid plan). Pricing: API Access x on Free. No API/CLI route to create a token exists in the OpenAPI (16 ops, none for tokens). |
| MCP OAuth (DCR + PKCE): Register an MCP client and authorize it | mcp | plan_gated ✓ | POST /oauth/register -> 200 client_id 1687, scope mcp:scheduling:read, auth none (DCR works headless). GET /oauth/authorize (S256, resource=https://tidycal.com/mcp) signed in on free plan -> page text: For API access please upgrade to a lifetime plan! |
| first API call: GET /api/me | api | plan_gated ✓ | GET https://tidycal.com/api/me without token -> 401 application/json {"message":"Unauthenticated."}; no token obtainable on the free plan (Unlock Integrations by upgrading). |
| Create a booking type: Create 1:1 booking type AgentDrives Test Session | browser | done ✓ | Dashboard > Booking types > New booking type > 1:1: title, slug agentdrives-test, description; Save -> Booking type saved successfully! First Save without description: The description field is required. (clear) |
| Create a booking type: Read back the new booking type | browser | done ✓ | Booking types list shows AgentDrives Test Session Enabled 15 minutes; public https://tidycal.com/an inbox/agentdrives-test 200 with the title. |
| Publish a shareable booking page: Open the public booking page | browser | done ✓ | GET https://tidycal.com/an inbox 200 lists AgentDrives Test Session and 15 Minute Meeting; page live right after sign-up. |
| Create a booking type: Rename to v2 and change duration to 45 min | browser | done ✓ | Edit /dashboard/booking-types/2118037/edit: title AgentDrives Test Session v2, 45 min, Save -> Booking type saved successfully!; list read back: AgentDrives Test Session v2 Enabled 45 minutes |
| Buffer time between bookings: Add a 10-minute gap between bookings | browser | done ✓ | Booking type > Restrictions: Add a [10] minute gap between bookings; Save; reloaded edit page reads back 10. |
| Advance/late booking limits: Allow bookings 30 days ahead, require 4 hours notice | browser | done ✓ | Restrictions: Allow bookings [30] days ahead, Require at least [4] hours notice; Save; reload reads back 30 and 4. |
| Require manual approval: Turn it on for the test booking type | browser | plan_gated ✓ | Booking type editor on free plan: Manually approve bookings.Pro - Unlock manual booking approvals by upgrading |
| Booking limits: Turn it on for the test booking type | browser | plan_gated ✓ | Booking type editor on free plan: Set maximum bookings.Pro - Unlock booking limits by upgrading |
| Cancellation/no-show controls: Turn it on for the test booking type | browser | plan_gated ✓ | Booking type editor on free plan: Allow cancellations.Pro - Unlock cancellation controls by upgrading |
| Multiple locations: Turn it on for the test booking type | browser | plan_gated ✓ | Booking type editor on free plan: Location: Unlock multiple locations by upgrading |
| View available timeslots: See open slots for the test booking type | browser | done ✓ | Public page https://tidycal.com/an inbox/agentdrives-test listed Monday 12th 2:15 PM ... 4:15 PM UTC; first slot respects the 4-hour notice set in (page opened ~10:08 UTC). |
| Book an appointment as an attendee: Book Mon 12 Oct 3:00 PM UTC as the agent's inbox | browser | done ✓ | Public page: slot 3:00 PM, name + email, Book event (invisible reCAPTCHA passed) -> confirmation 3:00 PM - 3:45 PM UTC with Reschedule/Cancel. Dashboard > Bookings shows October 12, 2026 3:00 PM AgentDrives Test Session v2. Mail Your booking is confirmed from service@tidycal.com arrived at an inbox 10:09:43. |
| Reschedule a booking: Move the booking from 3:00 PM to 4:15 PM | browser | done ✓ | Reschedule link from the confirmation mail -> picked 4:15 PM -> Reschedule booking -> confirmation 4:15 PM - 5:00 PM UTC. Dashboard > Bookings shows 4:15 PM, Scheduled; mail Booking rescheduled ... Previous: 3:00 PM Updated: 4:15 PM. |
| Cancel a booking: Cancel the rescheduled booking | browser | done ✓ | Confirmation page (link from mail) > Cancel > Cancel booking dialog (optional reason) > Cancel -> Booking cancelled!. Dashboard > Bookings > Canceled (?show=cancelled) lists October 12, 2026 4:15 PM AgentDrives Test Session v2 Canceled. |
| Create a booking type: Delete the test booking type | browser | done ✓ | Booking types card menu > delete (confirm: Permanently delete ... Existing bookings will stay) -> list shows only the 3 default types; public https://tidycal.com/an inbox/agentdrives-test now 302 (was 200). |
| Sync calendars: Connect a calendar to block busy times | browser | blocked ✓ | Integrations > Calendars offers Add Google account / Add Microsoft 365 account / Add Apple account (Apple ID + app-specific password). Every option needs an outside calendar account; our agent has none. |
| Accept payment for a paid booking: Make a $1 per-booking type | browser | blocked ✓ | Booking type > Pricing & Subscriptions > Per booking: Charge USD 1.00; Payment platform: Required: Connect your Stripe account. Integrations > Payments: Stripe is not connected / PayPal email. Needs a Stripe or PayPal merchant account we do not have. |
| Recurring/subscription bookings: Offer a subscription booking type | browser | blocked ✓ | Dashboard > Subscriptions shows quick-start offers (1 session / mo $75 ...); Pricing tab Subscription option needs the same Stripe/PayPal connection as paid bookings (Required: Connect your Stripe account). |
| Session packages: Sell a package of sessions | browser | blocked ✓ | New booking type > Package preset (Bundle of sessions sold together) and Packages & Recurring tab exist; selling a package is a paid booking and needs Stripe/PayPal connected (Required: Connect your Stripe account). |
| Auto-create meeting links: Turn on auto Google Meet/Zoom links | browser | plan_gated ✓ | Integrations > Video conferences: Unlock Auto-Create Meeting URLs by upgrading. |
| Group bookings: Allow several attendees per slot | browser | plan_gated ✓ | Booking type > Groups & Guests: Allow group bookings.Pro - Unlock group bookings by upgrading. |
| Date polls: Open date polls | browser | failed ✓ | No Date Polls entry in the dashboard menu (Bookings, Booking types, Availability, Teams, Subscriptions, Coupons, Contacts, Emails, Reviews); https://tidycal.com/date-polls -> 404 Page not found. |
| Intake questions: Find intake questions | browser | partial | Booking type > Advanced > Questions: toggle Enable questions to attendees. (no Pro badge on the free plan); not saved with a question in this drive. |
| Coupon codes: Create coupon AGENTDRIVES10, 10% off | browser | done ✓ | Coupons > New coupon: code AGENTDRIVES10, Percent 10, Save; list reads back AGENTDRIVES10 10% off All booking types 0 uses. First try with the percent empty: Save did nothing, no message. |
| Digital products: Sell a digital product | browser | blocked ✓ | Pricing tab Add-ons: create a published product that uses the same payment provider as this booking type; needs Stripe/PayPal connected, which we cannot do. |
| Book on behalf of a guest: Send a booking invite from Bookings | browser | partial | Dashboard > Bookings has a form: Pick a booking type and time, then we'll email your guest a link to confirm the booking ... Send booking invite; it said You don't have any eligible booking types yet. with 3 enabled free types. |
| Redirect after confirmation: Check redirect setting | browser | plan_gated ✓ | Pricing page: Confirmation Redirect - Send bookers to a custom URL after booking. x on Free. |
| Custom reminder emails: Check notifications | browser | plan_gated ✓ | Capability map plan paid; Dashboard > Emails exists; booking confirmation and reschedule mails arrived at an inbox with the default templates (Your booking is confirmed; Booking rescheduled ...). |
| SMS reminders: Turn on SMS | browser | plan_gated ✓ | Integrations > SMS: Automated SMS reminders (U.S. & Canada) ... Unlock SMS Reminders by upgrading. |
| CC on notifications: Check CC setting | browser | plan_gated | Capability map lists it as paid (help.tidycal.com/article/935-how-to-add-cc-email-addresses-to-booking-notifications); not opened in the editor. |
| Ratings and reviews: Get the review link | browser | done ✓ | Dashboard > Reviews: Your review link https://tidycal.com/an inbox/review plus per-booking-type links; Visibility tab: Show reviews on booking page. |
| Teams: Create a team | browser | plan_gated ✓ | Dashboard > Teams: Unlock Teams by upgrading. API /teams is paid too. |
| CSV export: Export bookings | browser | plan_gated ✓ | Pricing: CSV export - Export booker data for use in other tools. x on Free. |
| Contacts: List contacts | browser | done ✓ | Dashboard > Contacts (1): AgentDrives Test the agent's inbox Total bookings: 1 (the booker from ), with Edit contact. API GET/POST /contacts is paid-only. |
| Booking type stats: View stats | browser | plan_gated ✓ | Pricing: Booking Type Stats - View analytics for each booking type. x on Free. |
| GA/GTM: Connect Google Analytics | browser | plan_gated ✓ | Integrations > Analytics: Unlock Google Analytics Integration by upgrading. / Unlock Google Tag Manager by upgrading. |
| Import from Calendly: Open the Calendly importer | browser | blocked ✓ | Integrations has Import from Calendly; needs a Calendly account to connect, which we do not have. /integrations/calendly redirected with The code field is required. (OAuth callback route). |
| SendFox sync: Check docs and UI | browser | done ✓ | Integrations > Automations: Email marketing - Connect SendFox account to automatically add booking attendees to your email lists. (needs a SendFox account; not connected). |
| Website builder: Check it exists | none | skipped | Not found in the dashboard menu or llms.txt during this drive; not opened. |
| Custom domain / branding: Check settings | browser | plan_gated ✓ | Settings tabs: Profile, Preferences, Bookings, Account, Trusted devices, Custom domain, Your plan, Themes; capability map plan paid; booking page footer shows Powered by TidyCal on free. |
| Public directory listing: Check the directory option | browser | done ✓ | Booking type > Visibility: Display in the public TidyCal Directory. toggle on free; https://tidycal.com/directory is public (llms.txt). Not switched on for our test type. |
| email verification: Verify the email address | browser | done ✓ | No verification step: sign-up went straight to onboarding and the dashboard; no verification mail arrived at an inbox (inbox empty after 30 s and again later). Booking features worked unverified. |
| first real action: Create a booking type | browser | done ✓ | Booking type AgentDrives Test Session created in the web app, live at tidycal.com/an inbox/agentdrives-test. No API route on the free plan. |
| pay step: Find how Pro is bought (without paying) | browser | done ✓ | Settings > Your plan: Your plan: Free, Subscribe to Pro -> /pricing; pricing Subscribe button (logged in) -> https://checkout.stripe.com/c/pay/cs_live_... Subscribe to TidyCal Pro EUR 11.16 per month (USD/EUR switch), Billed monthly. Lifetime plans are sold on appsumo.com. No 402, no billing API (pay_probe.json, pay_tx.json: refused, nothing to pay). |
| cancel step: Cancel a started plan | none | skipped | Not tested: no plan or trial was started. help.tidycal.com/article/1057: Cancel from the Stripe Customer Portal (Settings → Your plan → Manage subscription); Pro stays active to the end of the billing period. |
| API key: Revoke the token | none | blocked ✓ | No token was created (API access is paid-only: Unlock Integrations by upgrading); OAuth client 1687 from DCR never got a code (authorize: For API access please upgrade to a lifetime plan!). |
| delete account: Delete the account and its data | browser | done ✓ | Settings > Account > Delete account -> toast: An email will be sent to this account s email address with a link for removal. Mail Data erasure request for TidyCal account (service@tidycal.com, 10:19) with Confirm my account deletion link /account/gdpr/••••; opening it -> /login Your account has been successfully deleted. Login again -> These credentials do not match our records.; https://tidycal.com/an inbox -> 404. |
Also in Scheduling.
Acuity SchedulingL1Can't sign up on its ownTidyCal vs Acuity Scheduling
Cal.comL1Can't sign up on its ownTidyCal vs Cal.com
CalendlyL1Can't sign up on its ownTidyCal vs Calendly
SavvyCalL1Can't sign up on its ownTidyCal vs SavvyCal