{
 "slug": "savvycal",
 "name": "SavvyCal",
 "url": "https://savvycal.com",
 "domain": "savvycal.com",
 "category": "scheduling",
 "category_name": "Scheduling",
 "tested_at": "2026-10-06",
 "run": "20261006T091502Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261002T072605Z",
   "date": "2026-10-02",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  },
  {
   "run": "20261006T091502Z",
   "date": "2026-10-06",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  }
 ],
 "level": 1,
 "level_name": "Needs a person",
 "level_selfhost": null,
 "entry": "closed",
 "door": {
  "passed": 0,
  "tries": 2,
  "self_start": false
 },
 "badges": [],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "no",
   "text": "No llms.txt, OpenAPI or MCP server",
   "have": []
  },
  {
   "key": "access",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "person",
   "label": "A person sets it up",
   "routes": [],
   "minutes": null,
   "core": null
  }
 ],
 "minutes": null,
 "next": {
  "to": 2,
  "text": "Next: let an agent sign up on its own"
 },
 "stop": "signup",
 "core": "0/10",
 "scores": {
  "coverage": null,
  "reliability": null,
  "resilience": null,
  "setup": 30,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 30,
  "security": null,
  "standards": [
   {
    "standard": "MCP client registration",
    "state": "behind",
    "behind": null,
    "value": "dcr"
   }
  ]
 },
 "reliability_method": null,
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": null,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 2,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": null,
  "prompt_sha": "f3d0adeeb256",
  "kb_version": "2+overlay-9e43028a2c",
  "identity": null
 },
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 2,
  "signed": true,
  "inbox": [
   "agentdrives.com"
  ],
  "robots": "start"
 },
 "same_level_drives": 2,
 "drives": 2,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": {
  "rung": "signup",
  "vendor": "hCaptcha (image puzzle)",
  "visible": true,
  "type": "challenge",
  "human": null,
  "how": "Check the Web Bot Auth signature on the sign-up request (the agent's key directory is public) and skip hCaptcha for signed agents; or offer a documented sign-up API with email verification.",
  "signed": true
 },
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "captcha"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-12"
  },
  "browser": {
   "state": "captcha",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "developers.savvycal.com: REST API reference (Events, Scheduling Links, Current User, Time Zones, Webhooks, Workflows), PAT and OAuth auth, webhooks. No llms.txt, no downloadable OpenAPI, no markdown pages."
  },
  "signup": {
   "status": "human",
   "note": "Email sign-up form at savvycal.com/signup shows a visible hCaptcha image puzzle on page load; no sign-up API."
  },
  "verify": {
   "status": "",
   "note": "Not reached: sign-up did not complete.",
   "reached": false
  },
  "credentials": {
   "status": "",
   "note": "PATs are created in the web UI (Settings > Developers); OAuth consent needs a signed-in account. Needs an account.",
   "via": "",
   "reached": false
  },
  "first_call": {
   "status": "",
   "note": "Every API call without a token returns 401 text/plain 'Unauthenticated'.",
   "reached": false
  },
  "first_action": {
   "status": "",
   "note": "Not reached: no account or token.",
   "reached": false
  },
  "pay": {
   "status": "",
   "grade": "P1",
   "rails": [],
   "rail_ids": [],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "free tier",
   "note": "No 402, x402, MPP, UCP or registry listing; no billing API. Plans (Basic $10, Premium $17 /user/mo) are bought on the web Billing page after a sign-up that a human must pass (hCaptcha). Checkout itself not seen. Pricing says to try it free and upgrade later.",
   "reached": false
  },
  "cancel": {
   "status": "",
   "note": "No plan was started. Help article 32: cancel the subscription on the web Billing page; no API.",
   "docs_grade": "",
   "reached": false
  },
  "delete": {
   "status": "",
   "note": "No account to delete. Help article 32: delete from Settings in the web UI only; no API or CLI route.",
   "account": false,
   "reached": false
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-06",
  "source": "drive",
  "options": [],
  "agentic": [],
  "paid": null,
  "exercised": null,
  "detected_grade": null,
  "trial": {
   "no_card": null,
   "card_required": null,
   "free_plan": true
  },
  "owner_fixes": [
   {
    "title": "Accept x402 or MPP on your API",
    "how": "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."
   },
   {
    "title": "List your plans on Stripe Projects",
    "how": "Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev)."
   }
  ]
 },
 "surfaces": {
  "api": true,
  "openapi": false,
  "cli": false,
  "sdk": false,
  "mcp": "none",
  "llms_txt": false,
  "webhooks": true,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST at api.savvycal.com/v1: links, events, webhooks, workflows, time zones, me",
  "openapi": "reference rendered from a spec, but no spec file published",
  "webhooks": "HMAC SHA-256 in x-savvycal-signature (not Standard Webhooks)"
 },
 "can_do": [
  "Read the developer docs and API reference without an account"
 ],
 "cannot_do": [
  {
   "what": "Create an account",
   "why": "Visible hCaptcha puzzle on the sign-up form; no sign-up API"
  },
  {
   "what": "Get an API token",
   "why": "Personal access tokens are made in the web UI and OAuth consent needs a signed-in account; no device flow or agent registration"
  },
  {
   "what": "Create, book or cancel anything",
   "why": "Every API call needs a token"
  },
  {
   "what": "Pay or cancel a plan headless",
   "why": "Billing is web-only; no billing API or agent payment rail"
  },
  {
   "what": "Delete the account headless",
   "why": "Delete is a button in web Settings only"
  }
 ],
 "blockers": [
  "Visible hCaptcha puzzle on savvycal.com/signup"
 ],
 "tips_for_owner": [
  "Let signed agents sign up without a puzzle",
  "Add a headless credential path to OAuth",
  "Publish the OpenAPI spec and llms.txt",
  "Return JSON problem details on API errors",
  "Add billing and account delete to the API"
 ],
 "tips_for_agents": [
  "Use the REST API at api.savvycal.com/v1 with a personal access token (pt_secret_…) from Settings > Developers; you need a human to make the account first.",
  "Meeting polls have no API route."
 ],
 "selfhost": null,
 "summary": "SavvyCal documents a REST API, but an agent cannot get in: the sign-up form shows a visible hCaptcha puzzle. Without an account there is no token, so no core capability could be driven; billing, cancel and delete are web-only.",
 "wall": "hCaptcha puzzle on the sign-up form",
 "plan_scope": "",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "SavvyCal is a meeting-scheduling tool with a documented API, but an agent signing up on its own hit a picture puzzle it does not solve, so it never got in.",
  "can_do": [
   "Read the public developer documentation without an account"
  ],
  "cannot_do": [
   {
    "what": "Create an account",
    "why": "A picture puzzle appears on the sign-up page"
   },
   {
    "what": "Get a password-like key to use the service",
    "why": "Keys are only handed out inside the website after signing in"
   },
   {
    "what": "Book, edit, or cancel a meeting",
    "why": "Every action needs a key, and no key could be obtained"
   },
   {
    "what": "Pay for or cancel a paid plan",
    "why": "Payment only happens on the website, which needs a signed-in account"
   },
   {
    "what": "Delete the account",
    "why": "There was no account made, and deleting one is a website-only button anyway"
   }
  ]
 },
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Scheduling Links",
   "capability": "Create a scheduling link",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /links or POST /scopes/{scope}/links",
    "mcp": null,
    "cli": null,
    "ui": "Dashboard > Links > New Link"
   },
   "check": "GET /links/{id} returns the new link with matching slug/duration",
   "source": "https://developers.savvycal.com/api/create-personal-scheduling-link; https://developers.savvycal.com/api/create-scope-scheduling-link"
  },
  {
   "id": "cap-02",
   "group": "Scheduling Links",
   "capability": "Edit a scheduling link's settings (duration, availability, name)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "PATCH /links/{id}",
    "mcp": null,
    "cli": null,
    "ui": "Dashboard > Links > Edit"
   },
   "check": "GET /links/{id} reflects updated fields",
   "source": "https://developers.savvycal.com/api/update-scheduling-link"
  },
  {
   "id": "cap-04",
   "group": "Scheduling Links",
   "capability": "Delete a scheduling link",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "DELETE /links/{id}",
    "mcp": null,
    "cli": null,
    "ui": "Dashboard > Links > Delete"
   },
   "check": "GET /links/{id} returns 404 after deletion",
   "source": "https://developers.savvycal.com/api/delete-scheduling-link"
  },
  {
   "id": "cap-05",
   "group": "Booking",
   "capability": "Book a meeting on a scheduling link (as a recipient)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /links/{id}/events",
    "mcp": null,
    "cli": null,
    "ui": "Public scheduling link page"
   },
   "check": "GET /events/{id} shows the newly created event with booked time; event.created webhook fires",
   "source": "https://developers.savvycal.com/api/create-event; https://savvycal.com/ (hero: week-view booking experience)"
  },
  {
   "id": "cap-07",
   "group": "Events",
   "capability": "View and manage booked meetings",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /events, GET /events/{id}",
    "mcp": null,
    "cli": null,
    "ui": "Dashboard > Meetings"
   },
   "check": "GET /events lists the booking with attendee and time details",
   "source": "https://developers.savvycal.com/api/list-events; https://developers.savvycal.com/api/get-event"
  },
  {
   "id": "cap-08",
   "group": "Events",
   "capability": "Cancel a scheduled meeting",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /events/{id}/cancel",
    "mcp": null,
    "cli": null,
    "ui": "Dashboard > Meetings > Cancel"
   },
   "check": "GET /events/{id} shows status canceled; event.canceled webhook fires",
   "source": "https://developers.savvycal.com/api/cancel-event"
  },
  {
   "id": "cap-09",
   "group": "Team Scheduling",
   "capability": "Create a Collective scheduling link combining multiple teammates' availability",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /scopes/{team}/links with collective config",
    "mcp": null,
    "cli": null,
    "ui": "Dashboard > Links > New Link > Collective"
   },
   "check": "GET /links/{id} shows mode collective with host list; booking page shows combined free slots",
   "source": "https://savvycal.com/features (Collective Mode); https://docs.savvycal.com/article/25-collective-scheduling-links"
  },
  {
   "id": "cap-10",
   "group": "Team Scheduling",
   "capability": "Create a Round Robin scheduling link to distribute meetings across hosts",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /scopes/{team}/links with round-robin config",
    "mcp": null,
    "cli": null,
    "ui": "Dashboard > Links > New Link > Round Robin"
   },
   "check": "Repeated bookings on the link rotate the assigned organizer across the pool",
   "source": "https://savvycal.com/features (Round robin pooling); https://docs.savvycal.com/article/65-round-robin-scheduling-links"
  },
  {
   "id": "cap-11",
   "group": "Team Scheduling",
   "capability": "Create a Group scheduling link allowing multiple attendees in one time slot",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /links with group mode",
    "mcp": null,
    "cli": null,
    "ui": "Dashboard > Links > New Link > Group"
   },
   "check": "GET /events/{id} shows multiple attendees on one event instance",
   "source": "https://docs.savvycal.com/article/112-group-scheduling-mode"
  },
  {
   "id": "cap-15",
   "group": "Meeting Polls",
   "capability": "Create a meeting poll and let invitees vote on times",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Dashboard > Polls > New Poll"
   },
   "check": "poll.response.created webhook fires when an invitee votes; poll page shows vote tally",
   "source": "https://savvycal.com/polls; https://savvycal.com/features (Meeting Polls)"
  },
  {
   "id": "cap-03",
   "group": "Scheduling Links",
   "capability": "Activate or disable a scheduling link",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /links/{id}/toggle",
    "mcp": null,
    "cli": null,
    "ui": "Dashboard > Links list toggle"
   },
   "check": "GET /links/{id} shows state active/disabled",
   "source": "https://developers.savvycal.com/api/toggle-scheduling-link"
  },
  {
   "id": "cap-06",
   "group": "Booking",
   "capability": "Overlay recipient's own calendar on the booking page to spot free times",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Public scheduling link page, 'Overlay my calendar' button"
   },
   "check": "Visually confirm recipient's connected-calendar busy blocks render on the link's week view",
   "source": "https://savvycal.com/ (Calendar Overlay section)"
  },
  {
   "id": "cap-12",
   "group": "Availability",
   "capability": "Set buffers and daily/weekly/monthly meeting frequency limits",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PATCH /links/{id} (buffer/limit fields)",
    "mcp": null,
    "cli": null,
    "ui": "Link editor > Limits"
   },
   "check": "Attempt to overbook beyond the configured limit and confirm the slot is unavailable",
   "source": "https://docs.savvycal.com/article/26-configuring-buffers; https://docs.savvycal.com/article/117-frequency-limits"
  },
  {
   "id": "cap-13",
   "group": "Availability",
   "capability": "Define availability from calendar time-block events",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Link editor > Availability > Time Blocks"
   },
   "check": "Create a calendar event tagged as a time block and confirm it changes offered slots",
   "source": "https://docs.savvycal.com/article/27-time-blocks-to-define-availability"
  },
  {
   "id": "cap-14",
   "group": "Availability",
   "capability": "Rank/highlight preferred time slots to cluster meetings",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Link editor > Availability > Preferred Slots"
   },
   "check": "Booking page visibly ranks/highlights slots near existing meetings over isolated ones",
   "source": "https://docs.savvycal.com/article/95-optimized-availability"
  },
  {
   "id": "cap-16",
   "group": "Payments",
   "capability": "Require payment (via connected Stripe) before a booking is confirmed",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Link editor > Payments (Stripe product)"
   },
   "check": "event.checkout.completed webhook fires and GET /events/{id} includes a Payment object",
   "source": "https://savvycal.com/features (Payments); https://docs.savvycal.com/article/29-collecting-payments; https://savvycal.com/pricing (Paid Bookings = Premium)"
  },
  {
   "id": "cap-17",
   "group": "Workflows",
   "capability": "Automate reminder/follow-up messages via Workflows attached to links",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET/POST /workflows (3 endpoints)",
    "mcp": null,
    "cli": null,
    "ui": "Dashboard > Workflows"
   },
   "check": "workflow.action.triggered webhook fires at the scheduled offset relative to the event",
   "source": "https://developers.savvycal.com/api/workflows; https://savvycal.com/features (Workflows)"
  },
  {
   "id": "cap-18",
   "group": "Automation",
   "capability": "Register a webhook to receive real-time event/poll/workflow notifications",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "/webhooks (5 endpoints)",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Integrations > Webhooks"
   },
   "check": "Trigger a booking and confirm the registered URL receives a signed POST with matching event type",
   "source": "https://developers.savvycal.com/webhooks; https://developers.savvycal.com/api/webhooks"
  },
  {
   "id": "cap-20",
   "group": "Availability Sharing",
   "capability": "Share availability with people outside your team/organization",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Link editor > Collective/Round Robin > external participants"
   },
   "check": "External participant's connected calendar busy times factor into the combined link's slots",
   "source": "https://docs.savvycal.com/article/96-sharing-availability; https://savvycal.com/features (Factor in outside colleagues)"
  },
  {
   "id": "cap-21",
   "group": "Embedding",
   "capability": "Embed a scheduling link on an external website (inline or popover widget)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "JavaScript embed snippet; Link editor > Embed"
   },
   "check": "Load a test page with the embed script and confirm the SavvyCal widget renders and books",
   "source": "https://developers.savvycal.com/ (JavaScript Embed); https://docs.savvycal.com/article/6-embedding-links-on-your-website"
  },
  {
   "id": "cap-22",
   "group": "Browser Extension",
   "capability": "Insert scheduling links from Gmail/Chrome via browser extension",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Chrome extension toolbar button"
   },
   "check": "Install extension, open Gmail compose, confirm a SavvyCal link can be inserted",
   "source": "https://docs.savvycal.com/article/88-installing-savvycal-for-chrome"
  },
  {
   "id": "cap-23",
   "group": "Conferencing",
   "capability": "Attach a video-conferencing link (Zoom/Google Meet/Whereby/SquadCast) to booked events",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Link editor > Location > Conferencing"
   },
   "check": "GET /events/{id} includes the generated conferencing join URL",
   "source": "https://docs.savvycal.com/article/4-integrating-with-zoom; https://docs.savvycal.com/article/15-integrating-with-google-meet; https://docs.savvycal.com/article/10-integrating-with-whereby"
  },
  {
   "id": "cap-24",
   "group": "CRM Integrations",
   "capability": "Sync bookings to a connected CRM (HubSpot, Close)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Integrations > CRM"
   },
   "check": "After a booking, confirm a matching contact/activity record appears in the connected CRM",
   "source": "https://docs.savvycal.com/article/107-integrating-with-hubspot; https://docs.savvycal.com/article/78-integrating-with-close-crm"
  },
  {
   "id": "cap-25",
   "group": "Notifications",
   "capability": "Post booking notifications to Slack",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Integrations > Slack"
   },
   "check": "Book a meeting and confirm a message appears in the configured Slack channel",
   "source": "https://docs.savvycal.com/article/98-integrating-with-slack"
  },
  {
   "id": "cap-26",
   "group": "Scheduling Links",
   "capability": "Customize the booking confirmation page and event name",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PATCH /links/{id}",
    "mcp": null,
    "cli": null,
    "ui": "Link editor > Confirmation"
   },
   "check": "Completing a booking shows the customized confirmation copy; calendar invite uses the custom event name",
   "source": "https://docs.savvycal.com/article/16-customizing-the-confirmation-page; https://docs.savvycal.com/article/90-customizing-event-names"
  },
  {
   "id": "cap-27",
   "group": "Scheduling Links",
   "capability": "Add custom questions to the booking form",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PATCH /links/{id} (questions field)",
    "mcp": null,
    "cli": null,
    "ui": "Link editor > Questions"
   },
   "check": "GET /events/{id} includes the submitted answers to the custom questions",
   "source": "https://docs.savvycal.com/article/70-adding-custom-questions-to-scheduling-links"
  },
  {
   "id": "cap-28",
   "group": "Scheduling Links",
   "capability": "Require host approval before a requested event is confirmed",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Link editor > Require Approval"
   },
   "check": "event.requested webhook fires on booking; event.approved/event.declined fires on host decision",
   "source": "https://docs.savvycal.com/article/81-require-approval-for-new-events"
  },
  {
   "id": "cap-29",
   "group": "Scheduling Links",
   "capability": "Duplicate an existing scheduling link",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /links/{id}/duplicate",
    "mcp": null,
    "cli": null,
    "ui": "Dashboard > Links > Duplicate"
   },
   "check": "GET /links lists a new link with the same configuration and a distinct ID/slug",
   "source": "https://developers.savvycal.com/api/duplicate-scheduling-link"
  },
  {
   "id": "cap-30",
   "group": "Scheduling Links",
   "capability": "Query available time slots for a link programmatically",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /links/{id}/slots",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "Response slots match what the public booking page offers for the same window",
   "source": "https://developers.savvycal.com/api/get-link-slots"
  },
  {
   "id": "cap-31",
   "group": "Account",
   "capability": "Connect one or more calendars (Google/Outlook/iCloud/CalDAV)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Calendars"
   },
   "check": "Events on a newly connected calendar block availability on scheduling links",
   "source": "https://docs.savvycal.com/article/68-connecting-your-icloud-calendar; https://docs.savvycal.com/article/72-calendar-permissions"
  },
  {
   "id": "cap-32",
   "group": "Account",
   "capability": "Create sender profiles to send scheduling emails from a custom address",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Sender Profiles"
   },
   "check": "Confirmation emails arrive from the configured custom address",
   "source": "https://docs.savvycal.com/article/91-setting-up-a-sender-profile; https://docs.savvycal.com/article/93-sending-emails-from-custom-addresses"
  },
  {
   "id": "cap-33",
   "group": "Account",
   "capability": "Create a team/organization and invite members",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /me (current user/scopes)",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Teams"
   },
   "check": "GET /me lists the new team scope with invited members as teammates",
   "source": "https://developers.savvycal.com/api/current-user; https://docs.savvycal.com/category/22-teams"
  },
  {
   "id": "cap-34",
   "group": "Branding",
   "capability": "Customize link branding (colors, avatar, banner image)",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "PATCH /links/{id} (branding fields)",
    "mcp": null,
    "cli": null,
    "ui": "Link editor > Branding"
   },
   "check": "Public booking page renders the configured color/avatar/banner",
   "source": "https://savvycal.com/ (Branding section)"
  },
  {
   "id": "cap-35",
   "group": "Branding",
   "capability": "Host scheduling links on a custom domain",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Custom Domains"
   },
   "check": "Visiting the configured custom domain resolves to the SavvyCal booking page",
   "source": "https://docs.savvycal.com/article/116-custom-domains; https://savvycal.com/pricing (Custom Domains = Premium)"
  },
  {
   "id": "cap-36",
   "group": "Account",
   "capability": "Delegate scheduling-link management to an assistant",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Delegated Access"
   },
   "check": "Assistant account can create/edit links on the delegating user's behalf",
   "source": "https://savvycal.com/pricing (Delegate to an assistant = Premium; Delegated Access row)"
  }
 ],
 "attempts": [
  {
   "t": "02:07",
   "cap": "discovery",
   "capability": "agent discovery",
   "documented": true,
   "verified": true,
   "task": "robots.txt and AI preferences",
   "route": "api",
   "result": "done",
   "evidence": "GET https://savvycal.com/robots.txt 200: 'User-agent: *' 'Disallow: /events/' 'Content-Signal: ai-train=no, search=yes, ai-input=yes' (Cloudflare Content Signals scheme, key written 'Content-Signal'); named AI bot groups (GPTBot, ChatGPT-User, PerplexityBot...) Allow: /, Disallow /events/. No aipref Content-Usage line or header.",
   "notes": "Content-Signal is Cloudflare scheme, not aipref; values yes/no parse."
  },
  {
   "t": "02:07",
   "cap": "discovery",
   "capability": "agent discovery",
   "documented": true,
   "verified": true,
   "task": "llms.txt",
   "route": "api",
   "result": "failed",
   "evidence": "https://savvycal.com/llms.txt 404; https://developers.savvycal.com/llms.txt 404"
  },
  {
   "t": "02:07",
   "cap": "discovery",
   "capability": "agent discovery",
   "documented": true,
   "verified": true,
   "task": "OpenAPI spec",
   "route": "api",
   "result": "failed",
   "evidence": "Docs are Docusaurus openapi plugin (developers.savvycal.com/api/*, 'Version: 1.0.0'), but no downloadable spec found: /openapi.json, /openapi.yaml on developers., api., savvycal.com all 404"
  },
  {
   "t": "02:07",
   "cap": "discovery",
   "capability": "agent discovery",
   "documented": true,
   "verified": true,
   "task": "Markdown docs",
   "route": "api",
   "result": "failed",
   "evidence": "GET developers.savvycal.com/authentication with Accept: text/markdown -> content-type text/html, vary: Accept-Encoding; /authentication.md 404"
  },
  {
   "t": "02:07",
   "cap": "discovery",
   "capability": "agent discovery",
   "documented": true,
   "verified": true,
   "task": "Agent cards / AI catalog / pay well-knowns",
   "route": "api",
   "result": "failed",
   "evidence": "404 HTML for /.well-known/ai-catalog.json, /.well-known/agent-card.json, /.well-known/agent.json, /.well-known/mcp/server-card.json, /.well-known/ucp, /auth.md, /SKILL.md; x402./mpp./agents./mcp.savvycal.com do not resolve"
  },
  {
   "t": "03:26",
   "cap": "docs",
   "capability": "find docs",
   "task": "Find developer docs",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://developers.savvycal.com/ (Docusaurus): Authentication (PAT + OAuth2), REST API reference (Events 7, Scheduling Links 10, Current User 1, Time Zones 3, Webhooks 5, Workflows 3, Schemas 45), Webhooks page. Help center docs.savvycal.com.",
   "quality": {
    "docs_match": "match"
   }
  },
  {
   "t": "03:26",
   "cap": "signup",
   "capability": "sign up",
   "task": "Create account with email + password",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "https://savvycal.com/signup: only routes are Google/Microsoft/Fastmail OAuth or an email form (First/Last name, Email, Password). An hCaptcha image puzzle ('Click on the vehicle that could be moved by this one') pops up on page load (pw: hcaptcha true, visible_challenge true; screenshot browser/shots/002.png). No documented sign-up API. then click Sign Up') -> status unavailable.",
   "notes": "Visible hCaptcha puzzle on sign-up. Not solved or bypassed.",
   "quality": {
    "error_legibility": "n/a",
    "recoverable": "no"
   }
  },
  {
   "t": "04:29",
   "cap": "cap-01",
   "capability": "Create a scheduling link",
   "task": "Create a scheduling link",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "POST https://api.savvycal.com/v1/links without a token -> HTTP/2 401 text/plain 'Unauthenticated'. No account: sign-up is behind a visible hCaptcha puzzle; tokens (PAT/OAuth) require a signed-in account.",
   "notes": "Blocked at the access ladder (signup), not tested.",
   "quality": {
    "error_legibility": "vague"
   }
  },
  {
   "t": "04:29",
   "cap": "cap-02",
   "capability": "Edit a scheduling link's settings (duration, availability, name)",
   "task": "Edit a scheduling link",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "PATCH https://api.savvycal.com/v1/links/test without a token -> HTTP/2 401 text/plain 'Unauthenticated'. No account: sign-up is behind a visible hCaptcha puzzle; tokens (PAT/OAuth) require a signed-in account.",
   "notes": "Blocked at the access ladder (signup), not tested.",
   "quality": {
    "error_legibility": "vague"
   }
  },
  {
   "t": "04:29",
   "cap": "cap-04",
   "capability": "Delete a scheduling link",
   "task": "Delete a scheduling link",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "DELETE https://api.savvycal.com/v1/links/test without a token -> HTTP/2 401 text/plain 'Unauthenticated'. No account: sign-up is behind a visible hCaptcha puzzle; tokens (PAT/OAuth) require a signed-in account.",
   "notes": "Blocked at the access ladder (signup), not tested.",
   "quality": {
    "error_legibility": "vague"
   }
  },
  {
   "t": "04:29",
   "cap": "cap-05",
   "capability": "Book a meeting on a scheduling link (as a recipient)",
   "task": "Book a meeting on a link",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "POST https://api.savvycal.com/v1/links/test/events without a token -> HTTP/2 401 text/plain 'Unauthenticated'. No account: sign-up is behind a visible hCaptcha puzzle; tokens (PAT/OAuth) require a signed-in account.",
   "notes": "Blocked at the access ladder (signup), not tested.",
   "quality": {
    "error_legibility": "vague"
   }
  },
  {
   "t": "04:30",
   "cap": "cap-07",
   "capability": "View and manage booked meetings",
   "task": "List booked meetings",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "GET https://api.savvycal.com/v1/events without a token -> HTTP/2 401 text/plain 'Unauthenticated'. No account: sign-up is behind a visible hCaptcha puzzle; tokens (PAT/OAuth) require a signed-in account.",
   "notes": "Blocked at the access ladder (signup), not tested.",
   "quality": {
    "error_legibility": "vague"
   }
  },
  {
   "t": "04:30",
   "cap": "cap-08",
   "capability": "Cancel a scheduled meeting",
   "task": "Cancel a meeting",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "POST https://api.savvycal.com/v1/events/test/cancel without a token -> HTTP/2 401 text/plain 'Unauthenticated'. No account: sign-up is behind a visible hCaptcha puzzle; tokens (PAT/OAuth) require a signed-in account.",
   "notes": "Blocked at the access ladder (signup), not tested.",
   "quality": {
    "error_legibility": "vague"
   }
  },
  {
   "t": "04:30",
   "cap": "cap-09",
   "capability": "Create a Collective scheduling link combining multiple teammates' availability",
   "task": "Create a collective team link",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "POST https://api.savvycal.com/v1/scopes/test/links without a token -> HTTP/2 401 text/plain 'Unauthenticated'. No account: sign-up is behind a visible hCaptcha puzzle; tokens (PAT/OAuth) require a signed-in account.",
   "notes": "Blocked at the access ladder (signup), not tested.",
   "quality": {
    "error_legibility": "vague"
   }
  },
  {
   "t": "04:31",
   "cap": "cap-10",
   "capability": "Create a Round Robin scheduling link to distribute meetings across hosts",
   "task": "Create a round-robin team link",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "POST https://api.savvycal.com/v1/scopes/test/links without a token -> HTTP/2 401 text/plain 'Unauthenticated'. No account: sign-up is behind a visible hCaptcha puzzle; tokens (PAT/OAuth) require a signed-in account.",
   "notes": "Blocked at the access ladder (signup), not tested.",
   "quality": {
    "error_legibility": "vague"
   }
  },
  {
   "t": "04:31",
   "cap": "cap-11",
   "capability": "Create a Group scheduling link allowing multiple attendees in one time slot",
   "task": "Create a group link",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "POST https://api.savvycal.com/v1/links without a token -> HTTP/2 401 text/plain 'Unauthenticated'. No account: sign-up is behind a visible hCaptcha puzzle; tokens (PAT/OAuth) require a signed-in account.",
   "notes": "Blocked at the access ladder (signup), not tested.",
   "quality": {
    "error_legibility": "vague"
   }
  },
  {
   "t": "04:31",
   "cap": "cap-15",
   "capability": "Create a meeting poll and let invitees vote on times",
   "task": "Create a meeting poll",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No API/MCP route documented for polls (developers.savvycal.com REST API lists Events, Scheduling Links, Current User, Time Zones, Webhooks, Workflows only); UI route needs an account, which is behind the hCaptcha-gated sign-up.",
   "notes": "Blocked at signup."
  },
  {
   "t": "04:39",
   "cap": "pay",
   "capability": "pay step",
   "task": "Find an agent payment path",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "No 402 on api.savvycal.com (unauthenticated calls -> 401 text/plain), /v1/billing and /v1/subscription 404; no x402./mpp./agents. subdomains (DNS fail); /.well-known/ucp 404; not in mpp.dev/api/services or the CDP x402 Bazaar; no OpenAPI to carry x-payment-info. Pricing: Basic $10/user/mo, Premium $17/user/mo, 'Kick the tires for free and only upgrade when you're ready to activate.' Billing is a web page (savvycal.com/billing, per help article 32). Checkout itself not seen: the account is behind the hCaptcha sign-up."
  },
  {
   "t": "04:39",
   "cap": "cancel",
   "capability": "cancel step",
   "task": "How to cancel a subscription",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "No plan started. docs.savvycal.com/article/32: 'you can cancel your subscription (without deleting your account) on your Billing page' (web UI). No billing API."
  },
  {
   "t": "04:39",
   "cap": "delete",
   "capability": "delete step",
   "task": "Delete account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account was created (sign-up blocked). docs.savvycal.com/article/32: delete via Settings, bottom of the page (web UI only); no API route in developers.savvycal.com."
  }
 ],
 "stale": false,
 "icon": "/logos/savvycal.png",
 "monitored": false,
 "verdict": "A person has to get this one started: L1 · Needs a person. Our agent stopped at the sign-up form itself, where a visible hCaptcha image puzzle appears on page load, before it could reach verification, a token, or any endpoint. Documentation covers events, scheduling links, the current user, time zones, webhooks and workflows, with PAT and OAuth auth, but every call without a token returns an unauthenticated response, so none of that surface got exercised. Plans are bought on the web billing page, reachable only after a human clears sign-up, and both cancelling and deleting an account stay web-only with no API route either way.",
 "page": "https://agentdrives.com/tools/savvycal?via=api"
}