{
  "data": {
    "a": {
      "slug": "cronofy",
      "name": "Cronofy API",
      "vendor": "Cronofy",
      "vendorUrl": "https://www.cronofy.com",
      "kind": "http-api",
      "category": "scheduling",
      "summary": "Calendar sync and scheduling API from a UK company.",
      "url": "https://www.anchorterminal.com/tools/cronofy",
      "markdownUrl": "https://www.anchorterminal.com/tools/cronofy.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/cronofy.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/cronofy.json",
      "dns": "cronofy.grade.anchorterminal.com",
      "repo": "https://github.com/cronofy/cronofy-node",
      "license": "MIT (SDKs)",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://api.cronofy.com",
      "packages": [
        {
          "registry": "npm",
          "name": "cronofy"
        },
        {
          "registry": "pypi",
          "name": "pycronofy"
        }
      ],
      "auth": "mixed",
      "authNotes": "Each user connects through Cronofy's OAuth flow and gets an access token. Application-level calls such as Availability take the application's key as a Bearer token. The MCP server takes the `client_secret` of an internal application as a Bearer token for single-tenant use, or OAuth 2.0 for multi-tenant use.",
      "pricing": "paid",
      "pricingNotes": "Free developer account for building and testing. Emerging $819 a month billed yearly for up to 500 synced accounts, then $1.39 each a month. Growth $2,399 a month billed yearly for up to 3,000, then $0.69 each. Strategic is custom with priority support. The Meeting Agents add-on costs $0.79 an hour for 25 to 4,000 hours, with a $99 monthly minimum on its own and the first 24 hours free (https://www.cronofy.com/pricing).",
      "priceSummary": "$819 / mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 51,
        "npmWeekly": 10797,
        "pypiWeekly": 10097,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://docs.cronofy.com/developers/",
      "llmsTxt": "https://docs.cronofy.com/llms.txt",
      "capabilities": [
        "calendar.read",
        "calendar.write",
        "calendar.availability",
        "calendar.booking",
        "calendar.webhooks"
      ],
      "tags": [
        "hosted",
        "mcp",
        "llms-txt",
        "webhooks",
        "typescript",
        "python",
        "enterprise",
        "eu",
        "closed-source"
      ],
      "lastRelease": "2026-10-30",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 67.5,
        "grade": "B",
        "agentReady": false,
        "rank": 291,
        "ranked": true,
        "rankOf": 1349,
        "categoryRank": 4,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 76,
          "maintenance": 71,
          "payments": 30,
          "reliability": 95,
          "schema": 58,
          "security": 60,
          "transparency": 72
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-02"
        },
        "negative": 0,
        "verdict": "OAuth scopes as narrow as `free_busy`, with `delete_event` separate from `create_event`, a 99.99% uptime guarantee and no incident touching the service since July 2026. Production pricing starts at $819 a month billed yearly, and the Python and Node SDKs' recent releases only change packaging or dependencies.",
        "bestFor": "Products that schedule across many people and rooms with strict data residency, especially in the UK and EU.",
        "strengths": [
          "OAuth scopes as narrow as `free_busy`, with `delete_event` separate from `create_event`",
          "Event writes keyed on your `event_id`, so a retried create updates instead of duplicating",
          "99.99% uptime guarantee on Emerging and Growth, and no incident touching the service in the 90 days to 2 November 2026",
          "Retention published per data type, such as 30 days for third-party events after disconnection",
          "ISO 27001, 27018 and 27701, SOC 2 Type 2 and a public bug bounty"
        ],
        "weaknesses": [
          "Production pricing starts at $819 a month billed yearly",
          "No OpenAPI spec or security.txt",
          "The Python and Node SDKs' releases since March 2024 only change packaging or dependencies, and the API changelog host disallows automated readers",
          "MCP server has no published tool list, Cronofy warns its standard is likely to change, and single-tenant mode takes the application secret",
          "429 guidance says only to pause, with no Retry-After"
        ],
        "agentNotes": [
          "Call the data centre host the account was created in (api-uk, api-de and so on), since data never crosses regions",
          "Reuse the same `event_id` when retrying an event write, since Cronofy upserts on it",
          "Ask for `response_format` slots when you want bookable times rather than free periods",
          "On 423, ask the user to relink, since Cronofy has already emailed them",
          "Keep under 50 requests a second and 500 a minute, and pause on 429"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 4,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 67.5
          }
        ],
        "editorialScores": {
          "ergonomics": 76,
          "maintenance": 71,
          "payments": 30,
          "reliability": 95,
          "schema": 58,
          "security": 60,
          "transparency": 58
        },
        "provenanceScore": 86,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-02",
            "maintenance": "2026-11-02",
            "payments": "2026-11-02",
            "reliability": "2026-11-02",
            "schema": "2026-11-02",
            "security": "2026-11-02",
            "transparency": "2026-11-02"
          },
          "last": "2026-11-02",
          "lastMoved": "2026-11-02",
          "oldest": "2026-11-02",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "http": "curl -X POST https://api.cronofy.com/v1/availability \\\n  -H \"Authorization: Bearer $CRONOFY_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"participants\":[{\"members\":[{\"sub\":\"acc_5ba21743f408617d1269ea1e\"}],\"required\":\"all\"}],\"required_duration\":{\"minutes\":30},\"query_periods\":[{\"start\":\"2026-10-01T09:00:00Z\",\"end\":\"2026-10-01T17:00:00Z\"}],\"response_format\":\"slots\"}'",
        "claudeCode": "claude mcp add --transport http cronofy https://api.cronofy.com/v1/mcp_server --header \"Authorization: Bearer $CRONOFY_CLIENT_SECRET\"",
        "config": {
          "mcpServers": {
            "cronofy": {
              "headers": {
                "Authorization": "Bearer ${CRONOFY_CLIENT_SECRET}"
              },
              "url": "https://api.cronofy.com/v1/mcp_server"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/calendar.read",
        "tool": "https://letme.dev/cronofy"
      },
      "area": "everyday",
      "unitPrices": [
        {
          "item": "Emerging",
          "unit": "month",
          "usd": 819,
          "note": "Up to 500 synced accounts, billed yearly"
        },
        {
          "item": "Growth",
          "unit": "month",
          "usd": 2399,
          "note": "Up to 3,000 synced accounts, billed yearly"
        },
        {
          "item": "Extra synced account on Emerging",
          "unit": "account-month",
          "usd": 1.39
        },
        {
          "item": "Extra synced account on Growth",
          "unit": "account-month",
          "usd": 0.69
        }
      ],
      "provenance": {
        "legalEntity": "Cronofy Limited",
        "domain": "cronofy.com",
        "domainRegistered": "2014-10-06",
        "endpointOnVendorDomain": true,
        "terms": "https://docs.cronofy.com/policies/terms-of-service/",
        "privacy": "https://docs.cronofy.com/policies/privacy-notice/",
        "statusPage": "https://status.cronofy.com",
        "changelog": "https://changelog.cronofy.com",
        "securityTxt": "none",
        "checked": "2026-11-02",
        "notes": [
          "The terms name Cronofy Limited, company number 07878590, under the laws of England and Wales, re-read on 2 November 2026.",
          "www.cronofy.com/.well-known/security.txt returned 404 on 2 November 2026.",
          "The status page lists the API, Scheduler, Meeting Agents, conferencing services and each major calendar provider as separate components. Its robots.txt disallows /api/ and /embed/; history.atom is read.",
          "changelog.cronofy.com's robots.txt allows a list of search crawlers by name and disallows every other agent, so the changelog wasn't read on 2 November 2026."
        ],
        "score": 86
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/cronofy.json",
      "live": {
        "slug": "cronofy",
        "probe": {
          "target": "https://api.cronofy.com",
          "method": "get",
          "lastAt": "2026-11-04T21:39:19.867259951Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 267,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 303,
          "p95ms24h": 366,
          "samples24h": 247,
          "samples30d": 8090,
          "days": [
            {
              "date": "2026-10-04",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-05",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-06",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-07",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-08",
              "probes": 268,
              "ok": 268
            },
            {
              "date": "2026-10-09",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-10",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-11",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-12",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-13",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-14",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-15",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-16",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-17",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-18",
              "probes": 256,
              "ok": 256
            },
            {
              "date": "2026-10-19",
              "probes": 255,
              "ok": 255
            },
            {
              "date": "2026-10-20",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-21",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-22",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-23",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-24",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-10-25",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-26",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-27",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-28",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-10-29",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-30",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-31",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-11-01",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-11-02",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-11-03",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-11-04",
              "probes": 223,
              "ok": 223
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.cronofy.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-11-04T21:38:07.239382853Z"
        },
        "versions": [
          {
            "registry": "npm",
            "name": "cronofy",
            "version": "3.8.4",
            "seenAt": "2026-11-04T20:09:32.841547158Z"
          },
          {
            "registry": "pypi",
            "name": "pycronofy",
            "version": "2.1.2",
            "released": "2026-10-30",
            "seenAt": "2026-11-04T20:09:34.705949362Z"
          }
        ],
        "githubStars": 51,
        "npmWeekly": 16493,
        "pypiWeekly": 16871,
        "securityTxt": {
          "url": "https://cronofy.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-04T15:54:22.958123785Z"
        },
        "llmsTxt": {
          "url": "https://docs.cronofy.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-04T15:22:41.926792341Z"
        },
        "domain": {
          "domain": "cronofy.com",
          "registered": "2014-10-06",
          "source": "https://rdap.verisign.com/com/v1/domain/cronofy.com",
          "checkedAt": "2026-11-01T14:08:36.018957442Z"
        },
        "pages": [
          {
            "url": "https://changelog.cronofy.com",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-11-04T08:16:21.61606763Z",
            "changedAt": "2026-10-06T16:06:18.545064584Z",
            "fingerprint": "aa435e15e7d5"
          },
          {
            "url": "https://www.cronofy.com/pricing",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-11-04T08:39:07.866797118Z",
            "changedAt": "2026-10-18T23:42:35.053101837Z",
            "fingerprint": "356800870c4c"
          },
          {
            "url": "https://docs.cronofy.com/policies/privacy-notice/",
            "kind": "privacy",
            "status": 304,
            "checkedAt": "2026-11-04T08:20:43.923389546Z",
            "changedAt": "2026-10-19T23:56:11.410231314Z",
            "fingerprint": "41bafa9ab779"
          },
          {
            "url": "https://docs.cronofy.com/policies/terms-of-service/",
            "kind": "terms",
            "status": 304,
            "checkedAt": "2026-11-04T08:20:46.143698968Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "7298fc93e38a"
          }
        ],
        "github": {
          "repo": "cronofy/cronofy-node",
          "checkedAt": "2026-11-02T08:42:04.255532408Z",
          "stars": 51,
          "archived": false,
          "issuesEnabled": true,
          "pushedAt": "2026-10-07T14:01:58Z",
          "openIssues": 5,
          "openPRs": 1,
          "issuesOpened90d": 0,
          "issuesClosed90d": 1,
          "prsMerged90d": 1,
          "ci": {
            "branch": "master",
            "runs": 2,
            "success": 2,
            "failure": 0,
            "other": 0,
            "latest": "success",
            "latestAt": "2026-10-07T14:02:35Z"
          },
          "replies": {
            "sampled": 25,
            "unanswered": 4,
            "medianDays": 1.5
          }
        },
        "updatedAt": "2026-11-04T21:39:19.867259951Z"
      }
    },
    "answer": "Cronofy API scores 67.5 (B) on agent readiness against SavvyCal API + MCP's 57 (C), and leads in 4 of 7 scored categories. SavvyCal API + MCP leads on schema \u0026 documentation.",
    "b": {
      "slug": "savvycal",
      "name": "SavvyCal API + MCP",
      "vendor": "SavvyCal, Inc.",
      "vendorUrl": "https://savvycal.com",
      "kind": "http-api",
      "category": "scheduling",
      "summary": "SavvyCal's scheduling API lists and books events on scheduling links, reads open time slots and manages links, webhooks and workflows, with a hosted MCP server that lets an assistant book, move and cancel meetings.",
      "url": "https://www.anchorterminal.com/tools/savvycal",
      "markdownUrl": "https://www.anchorterminal.com/tools/savvycal.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/savvycal.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/savvycal.json",
      "dns": "savvycal.grade.anchorterminal.com",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://api.savvycal.com/v1",
      "packages": [],
      "auth": "mixed",
      "authNotes": "Personal access tokens (`pt_secret_...`) made in Settings \u003e Developers, or OAuth 2 authorisation code apps registered there, both sent as `Authorization: Bearer`. OAuth access tokens last 2 hours with a refresh token, and the spec declares no scopes for either. The MCP server at https://savvycal.com/mcp signs in with OAuth 2.1 (PKCE S256, dynamic client registration, scopes `mcp:read` and `mcp:write`, a revocation endpoint) and needs no key.",
      "pricing": "freemium",
      "pricingNotes": "The API, webhooks and the MCP server are on every plan including Free, per the plans page. Free accounts connect calendars, make links and run polls, but people can only book a link on Basic ($12 a user a month, $120 a year) or Premium ($20 a user a month, $200 a year). No self-serve trial, a 30-day money-back guarantee instead, and no card is mentioned for Free. 25 per cent off for students, educators and nonprofits.",
      "priceSummary": "$12 / seat-mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the developer docs, the OpenAPI spec at api.savvycal.com/v1/spec or the pricing page (checked 2026-11-03). The spec has no 402 response.",
        "endpoints": []
      },
      "toolCount": 63,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-11-03"
      },
      "docsUrl": "https://docs.savvycal.com/developers",
      "llmsTxt": "https://docs.savvycal.com/llms.txt",
      "openapi": "https://api.savvycal.com/v1/spec",
      "capabilities": [
        "calendar.booking",
        "calendar.availability",
        "calendar.read",
        "calendar.webhooks"
      ],
      "tags": [
        "hosted",
        "freemium",
        "free-tier",
        "no-card",
        "mcp",
        "remote-mcp",
        "oauth",
        "llms-txt",
        "openapi",
        "webhooks",
        "status-page",
        "security-txt",
        "closed-source"
      ],
      "lastRelease": "2026-10-27",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 57,
        "grade": "C",
        "agentReady": false,
        "rank": 724,
        "ranked": true,
        "rankOf": 1349,
        "categoryRank": 6,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 53,
          "maintenance": 40,
          "payments": 30,
          "reliability": 70,
          "schema": 74,
          "security": 50,
          "transparency": 73
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-03"
        },
        "negative": 0,
        "verdict": "A small REST API with a public OpenAPI spec, cursor pagination and signed webhooks, plus a hosted MCP server with 63 tools, OAuth 2.1 and read and write scopes, on every plan. No general rate limit, idempotency key, SDK or certification was found, and booking through a link needs a paid seat.",
        "bestFor": "An agent booking on a person's SavvyCal links or driving their account through the MCP server.",
        "strengths": [
          "OpenAPI 3.0.0 spec at api.savvycal.com/v1/spec, llms.txt and a Markdown twin of every docs page",
          "Hosted MCP server with OAuth 2.1, PKCE, dynamic client registration and `mcp:read` and `mcp:write` scopes, included on every plan",
          "Webhooks signed with HMAC-SHA256, retried up to 20 times with exponential backoff, over 16 event types",
          "Status page with calendar connection components and no notices from June to November 2026",
          "The MCP docs say the assistant asks for confirmation before cancelling meetings, deleting links or inviting teammates"
        ],
        "weaknesses": [
          "No general rate limit documented. The spec names one 429, on creating events (10 a minute per link)",
          "No idempotency keys, Retry-After header or official SDK",
          "No SOC 2 or ISO 27001 certification and no bug bounty, per the security page",
          "OAuth apps and personal access tokens carry no scopes, so a REST token reaches everything the user can",
          "Only one dated product update in the 90 days to 3 November 2026, and no API changelog"
        ],
        "agentNotes": [
          "Call GET /v1/links/{link_id}/slots with `from` and `until` (at most 31 days apart) and book only a returned slot; POST /v1/links/{link_id}/events refuses other times with 422",
          "Keep event creation under 10 requests a minute per link, failed attempts included, or expect 429 with no Retry-After",
          "Page with the `after` and `before` cursors from `metadata` and `limit` up to 100; an invalid filter value resets every filter to its default",
          "Connect the MCP server with a client that supports dynamic client registration, and request `mcp:read` when the task only reads",
          "Verify webhooks with HMAC-SHA256 over the raw body against `x-savvycal-signature` and answer 2xx quickly"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "C",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 57
          }
        ],
        "editorialScores": {
          "ergonomics": 53,
          "maintenance": 40,
          "payments": 30,
          "reliability": 70,
          "schema": 74,
          "security": 50,
          "transparency": 57
        },
        "provenanceScore": 89,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-03",
            "maintenance": "2026-11-03",
            "payments": "2026-11-03",
            "reliability": "2026-11-03",
            "schema": "2026-11-03",
            "security": "2026-11-03",
            "transparency": "2026-11-03"
          },
          "last": "2026-11-03",
          "oldest": "2026-11-03",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "http": "curl https://api.savvycal.com/v1/me -H \"Authorization: Bearer $SAVVYCAL_TOKEN\"",
        "claudeCode": "claude mcp add --transport http savvycal https://savvycal.com/mcp",
        "config": {
          "mcpServers": {
            "savvycal": {
              "url": "https://savvycal.com/mcp"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/calendar.booking",
        "tool": "https://letme.dev/savvycal"
      },
      "area": "everyday",
      "unitPrices": [
        {
          "item": "Basic",
          "unit": "seat-month",
          "usd": 12,
          "note": "$120 a user a year billed annually"
        },
        {
          "item": "Premium",
          "unit": "seat-month",
          "usd": 20,
          "note": "$200 a user a year billed annually"
        }
      ],
      "provenance": {
        "legalEntity": "SavvyCal, Inc.",
        "domain": "savvycal.com",
        "domainRegistered": "2020-08-12",
        "endpointOnVendorDomain": true,
        "terms": "https://savvycal.com/terms",
        "privacy": "https://savvycal.com/privacy",
        "statusPage": "https://savvycal.instatus.com",
        "changelog": "https://feedback.savvycal.com/updates",
        "securityTxt": "valid",
        "checked": "2026-11-03",
        "notes": [
          "The terms (last updated 21 January 2026) name SavvyCal, Inc. under Minnesota law with AAA arbitration. They forbid access through automated or non-human means and the use of bots, scrapers or data-extraction tools, and do not mention the API, which the separate developer docs cover. Recorded as a fact; the public pages were read.",
          "savvycal.com/robots.txt disallows /events/ for every crawler, names ClaudeBot and anthropic-ai among twelve AI crawlers with the same rule, and sets Content-Signal ai-train=no, search=yes, ai-input=yes. docs.savvycal.com allows all with ai-train=yes. Nothing under /events/ was fetched.",
          "The privacy policy (17 October 2026) names SavvyCal, Inc., US servers, Stripe, OpenAI for advertising measurement, and a DPA with Standard Contractual Clauses. The DPA page is dated 16 January 2023.",
          "RDAP gives savvycal.com a registration date of 12 August 2020.",
          "security.txt at savvycal.com/.well-known/security.txt names security@savvycal.com, expires 2 May 2027 and points to savvycal.com/security.",
          "The status page is savvycal.instatus.com (Instatus), linked from the site footer. The What's New board at feedback.savvycal.com/updates is the product changelog."
        ],
        "score": 89
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/savvycal.json",
      "live": {
        "slug": "savvycal",
        "probe": {
          "target": "https://api.savvycal.com/v1",
          "method": "get",
          "lastAt": "2026-11-04T21:39:45.046752337Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 130,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 166,
          "p95ms24h": 237,
          "samples24h": 64,
          "samples30d": 64,
          "days": [
            {
              "date": "2026-11-04",
              "probes": 64,
              "ok": 64
            }
          ]
        },
        "vendorStatus": {
          "page": "https://savvycal.instatus.com",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-11-04T21:26:44.192765993Z"
        },
        "securityTxt": {
          "url": "https://savvycal.com/.well-known/security.txt",
          "state": "valid",
          "expires": "2027-05-03T00:00:00.000Z",
          "checkedAt": "2026-11-04T15:54:05.808454415Z"
        },
        "updatedAt": "2026-11-04T21:39:45.046752337Z"
      }
    },
    "edges": [
      {
        "by": 31,
        "category": "maintenance",
        "leads": "cronofy",
        "name": "Maintenance \u0026 community",
        "reasons": {
          "a": "Cronofy's UI Elements, the JavaScript components it publishes for its API, carry a dated changelog in the docs with three code releases in October 2026, 1.68.0 (15 October, Romanian language support), 1.68.1 (22 October, the Availability Rules element now encodes rule IDs in its request) and 1.68.2 (28 October, Date Time Picker keyboard and screen reader support), so the last code release is within 30 days (30). pycronofy 2.1.2 (30 October) and 2.1.1 (25 September) change only packaging, 2.1.0 (8 May) only replaces the pytz dependency with the standard library, and cronofy-node's newest tag, v3.8.4 (15 September 2025), bumps axios. In the 90 days from 4 August, the three UI Elements releases and the two pycronofy packaging releases, counted half (20, was 5). Support through the docs, support pages and support@cronofy.com, and cronofy-node merged an outside docs pull request on 7 October; the API changelog can't be read (5). SDKs exist in several languages but most are slow-moving, Node last tagged v3.8.4 on 15 September 2025 and Ruby last tagged in 2023 (8). CI on the Node and Python SDKs, with Python 3.15 added on 30 October 2026 (8). 30+20+5+8+8 = 71.",
          "b": "Read as a closed service. The newest dated change is the MCP integration of 27 October 2026 on the updates board (30). It is the only dated entry since 7 July, so fewer than three in 90 days (0 of 20). A public updates board, a feature request board and a support address with a stated 24-hour reply within US Central business hours (10 of 15). No official SDKs (0). No package to assess (0). 30 + 0 + 10 + 0 + 0 = 40."
        },
        "scores": {
          "a": 71,
          "b": 40
        }
      },
      {
        "by": 25,
        "category": "reliability",
        "leads": "cronofy",
        "name": "Reliability",
        "reasons": {
          "a": "Atlassian Statuspage at status.cronofy.com with the API, Scheduler, Meeting Agents and each calendar provider as components (20). history.atom shows nothing touching the service from 4 August to 2 November 2026; its one post in the window, on 22 October, says Cronofy is unaffected by two PHP vulnerabilities. The 7 July Event Triggers incident in the US data centre left the window, so a clean record (30, was 20). 50 requests a second and 500 in any 60 seconds by default (15). 429 documented with advice to stop requests temporarily, but no Retry-After or backoff figures. Event writes are upserts keyed on your `event_id`, so a repeat updates rather than duplicates (10). 99.99% uptime guarantee on Emerging and Growth, and an API SLA policy page (10). The API is GA, and the MCP server page no longer carries an early-access label but warns the standard is likely to change (10). 20+30+15+10+10+10 = 95.",
          "b": "Read with the hosted lines. Instatus page at savvycal.instatus.com with App, Microsoft 365, Google Calendar and Integrations components and a month-by-month history (20). No notices from June to November 2026 and 100 per cent App uptime each month, a clean record (30). The only limit with a number is in the OpenAPI spec, 10 event creations a minute per link, failed ones included; nothing covers the rest of the API (7 of 15). That 429 is declared with no Retry-After, backoff guidance or idempotency key, and webhooks are the only place retries are described (3 of 15). No SLA; the terms give the service as is (0). The v1 API is generally available and the MCP server, announced 27 October 2026, is not marked beta (10). 20 + 30 + 7 + 3 + 0 + 10 = 70."
        },
        "scores": {
          "a": 95,
          "b": 70
        }
      },
      {
        "by": 23,
        "category": "ergonomics",
        "leads": "cronofy",
        "name": "Agent ergonomics",
        "reasons": {
          "a": "API responses can be narrowed, for example Availability's `response_format` of slots and the `only_managed` flag on events (15). Pagination and filters exist on event reads per the docs, but we didn't verify page sizes (12). Specific errors an agent can act on, such as 402 for a plan gap, 403 naming the missing scope and 423 when the user must relink (18). Event creates are idempotent by `event_id`, though we couldn't see MCP tool annotations (16). Official SDKs in Node, Python, Ruby, C# and more (15).",
          "b": "List responses are sized by `limit` (default 20, at most 100) with no field selection. The MCP server lists 63 tools with no documented toolset or read-only list, though a client can ask for the `mcp:read` scope alone (10 of 25). Cursor pagination with `after`, `before` and `limit`, and date and status filters on events (17 of 20). Errors name the field, the failed validation and a limit count, which an agent can act on, but a 429 carries no wait time (14 of 20). No idempotency key on booking or link creation, and the MCP annotations could not be read; the docs say the assistant confirms before cancelling, deleting or inviting (6 of 20). Creating an event needs five fields, and there is no official SDK in any language (6 of 15). 10 + 17 + 14 + 6 + 6 = 53."
        },
        "scores": {
          "a": 76,
          "b": 53
        }
      },
      {
        "by": 16,
        "category": "schema",
        "leads": "savvycal",
        "name": "Schema \u0026 documentation",
        "reasons": {
          "a": "No OpenAPI or other machine-readable contract found (0). llms.txt with about 35 to 40 links and Markdown copies of pages (10). Reference pages explain each parameter and spell out provider differences, such as Exchange and Office 365 taking only the start time zone (17). Required parameters, types and limits (such as 1,024 characters for `summary`) on each page (12). Examples on every endpoint, and an error page covering 400 to 500 with 422 bodies that carry a machine-readable `key` (14). `/v1` in the path. The changelog at changelog.cronofy.com is on a host whose robots.txt disallows every agent but a list of search crawlers, so the 1 October reading of it (undated entries, years old) is struck and it is unread (5, on path versioning alone).",
          "b": "OpenAPI 3.0.0 at api.savvycal.com/v1/spec covers all 22 operations with 56 schemas; the MCP tools' schemas could not be read without signing in (23 of 25). llms.txt and a Markdown twin of every docs page (10). Only 8 of the 22 operations carry a description, and those state constraints (events must match an open slot, an invalid filter resets every filter) rather than when to choose another endpoint (10 of 20). Required flags on 14 of 43 parameters, 34 enum properties across the schemas, `limit` bounded 1 to 100, `until` at most 31 days after `from` (12 of 15). Example values on parameters and a documented error shape keyed by field, with 400, 401, 404, 422 and 429 declared per operation, but no full response examples (10 of 15). A /v1 path and a promise that changes are additive, with dated product updates on the feedback board but no API changelog (9 of 15). 23 + 10 + 10 + 12 + 10 + 9 = 74."
        },
        "scores": {
          "a": 58,
          "b": 74
        }
      },
      {
        "by": 10,
        "category": "security",
        "leads": "cronofy",
        "name": "Security \u0026 auth",
        "reasons": {
          "a": "Per-user OAuth with fine scopes, including `free_busy` alone, `read_only`, and `delete_event` separate from `create_event`. Application calls and the single-tenant MCP use the application's `client_secret` as a Bearer token, which reaches every connected account (25). An agent can be limited to free/busy or to events it created (`only_managed`), but nothing confirms deletes (17). Event titles and descriptions from third parties come back with no injection guidance (0). No operator audit log found (0). ISO 27001, 27018 and 27701, SOC 2 Type 2 and a public bug bounty policy. No security.txt, per the 30 September check (18).",
          "b": "OAuth 2 authorisation code apps with 2-hour access tokens and refresh tokens, and personal access tokens, both in the Authorization header only. The spec declares no scopes for either, and PAT expiry and revocation are not described. The MCP server uses OAuth 2.1 with PKCE S256, dynamic client registration, `mcp:read` and `mcp:write` scopes and a revocation endpoint (22 of 30). `mcp:read` gives a read-only MCP grant, and the vendor says the assistant asks before booking, cancelling, deleting or inviting. REST tokens have no read-only form (14 of 20). Invitee names, answers and metadata written by outsiders come back through events and webhooks with no injection guidance; the AI page says the assistant sees calendar conflicts but not event names (2 of 15). Webhook request logs and a Connected Apps list with revoke, but no per-call audit log for the operator (4 of 15). Valid security.txt to 2 May 2027, a security page and an SSDLC page, but no SOC 2 or ISO 27001 (the page says not yet) and no bug bounty (8 of 20). 22 + 14 + 2 + 4 + 8 = 50."
        },
        "scores": {
          "a": 60,
          "b": 50
        }
      }
    ],
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Cronofy",
        "b": "SavvyCal, Inc.",
        "name": "Vendor"
      },
      {
        "a": "https://api.cronofy.com",
        "b": "https://api.savvycal.com/v1",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP, Streamable HTTP",
        "b": "HTTP, Streamable HTTP",
        "name": "Transports"
      },
      {
        "a": "OAuth or key",
        "b": "OAuth or key",
        "name": "Auth"
      },
      {
        "a": "Paid",
        "b": "Freemium",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "MIT (SDKs)",
        "b": "none",
        "name": "Licence"
      },
      {
        "a": "none",
        "b": "63",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "2026-10-30",
        "b": "2026-10-27",
        "name": "Last release"
      },
      {
        "a": "no date given",
        "b": "2026-01-21",
        "name": "Terms last updated"
      },
      {
        "a": "no date given",
        "b": "2026-10-17",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Terms restrict automated access"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "51 stars, 11k npm/wk, 10k PyPI/wk",
        "b": "none",
        "name": "Popularity"
      },
      {
        "a": "4/5 (2)",
        "b": "none",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "Cronofy API scores 67.5 (B) on agent readiness against SavvyCal API + MCP's 57 (C), and leads in 4 of 7 scored categories. SavvyCal API + MCP leads on schema \u0026 documentation.",
        "question": "Which is better for AI agents, Cronofy API or SavvyCal API + MCP?"
      },
      {
        "answer": "Both take an API key or an OAuth sign-in.",
        "question": "Do Cronofy API and SavvyCal API + MCP need an API key?"
      },
      {
        "answer": "Yes. Cronofy API has a hosted endpoint at https://api.cronofy.com and SavvyCal API + MCP at https://api.savvycal.com/v1.",
        "question": "Can an agent call Cronofy API and SavvyCal API + MCP without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 95 against 70",
          "Agent ergonomics, 76 against 53",
          "Security \u0026 auth, 60 against 50",
          "Maintenance \u0026 community, 71 against 40"
        ],
        "also": null,
        "goodFor": "Products that schedule across many people and rooms with strict data residency, especially in the UK and EU.",
        "slug": "cronofy",
        "watchFor": "Production pricing starts at $819 a month billed yearly"
      },
      {
        "aheadOn": [
          "Schema \u0026 documentation, 74 against 58"
        ],
        "also": [
          "Free to start without a card"
        ],
        "goodFor": "An agent booking on a person's SavvyCal links or driving their account through the MCP server.",
        "slug": "savvycal",
        "watchFor": "No general rate limit documented. The spec names one 429, on creating events (10 a minute per link)"
      }
    ],
    "history": {
      "cronofy": [
        {
          "causes": [
            "product",
            "time"
          ],
          "date": "2026-11-02",
          "delta": 3.3,
          "from": 64.2,
          "fromGrade": "B",
          "to": 67.5,
          "toGrade": "B"
        },
        {
          "causes": [
            "method"
          ],
          "date": "2026-10-08",
          "delta": -0.2,
          "from": 64.4,
          "fromGrade": "B",
          "to": 64.2,
          "toGrade": "B"
        }
      ],
      "savvycal": null
    },
    "job": {
      "capability": "calendar.read",
      "name": "Calendar access"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/acuity-scheduling-vs-cronofy.json",
        "title": "Acuity Scheduling API vs Cronofy API",
        "url": "https://www.anchorterminal.com/compare/acuity-scheduling-vs-cronofy"
      },
      {
        "json": "https://www.anchorterminal.com/compare/acuity-scheduling-vs-savvycal.json",
        "title": "Acuity Scheduling API vs SavvyCal API + MCP",
        "url": "https://www.anchorterminal.com/compare/acuity-scheduling-vs-savvycal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/agenda-hero-vs-cronofy.json",
        "title": "Agenda Hero vs Cronofy API",
        "url": "https://www.anchorterminal.com/compare/agenda-hero-vs-cronofy"
      },
      {
        "json": "https://www.anchorterminal.com/compare/agenda-hero-vs-savvycal.json",
        "title": "Agenda Hero vs SavvyCal API + MCP",
        "url": "https://www.anchorterminal.com/compare/agenda-hero-vs-savvycal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/apiroc-vs-cronofy.json",
        "title": "Apiroc Unified Calendar API vs Cronofy API",
        "url": "https://www.anchorterminal.com/compare/apiroc-vs-cronofy"
      },
      {
        "json": "https://www.anchorterminal.com/compare/apiroc-vs-savvycal.json",
        "title": "Apiroc Unified Calendar API vs SavvyCal API + MCP",
        "url": "https://www.anchorterminal.com/compare/apiroc-vs-savvycal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/aurinko-calendar-vs-cronofy.json",
        "title": "Aurinko Calendar API vs Cronofy API",
        "url": "https://www.anchorterminal.com/compare/aurinko-calendar-vs-cronofy"
      },
      {
        "json": "https://www.anchorterminal.com/compare/aurinko-calendar-vs-savvycal.json",
        "title": "Aurinko Calendar API vs SavvyCal API + MCP",
        "url": "https://www.anchorterminal.com/compare/aurinko-calendar-vs-savvycal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cal-com-vs-cronofy.json",
        "title": "Cal.com API v2 + MCP vs Cronofy API",
        "url": "https://www.anchorterminal.com/compare/cal-com-vs-cronofy"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cal-com-vs-savvycal.json",
        "title": "Cal.com API v2 + MCP vs SavvyCal API + MCP",
        "url": "https://www.anchorterminal.com/compare/cal-com-vs-savvycal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/calendly-vs-cronofy.json",
        "title": "Calendly API + MCP vs Cronofy API",
        "url": "https://www.anchorterminal.com/compare/calendly-vs-cronofy"
      },
      {
        "json": "https://www.anchorterminal.com/compare/calendly-vs-savvycal.json",
        "title": "Calendly API + MCP vs SavvyCal API + MCP",
        "url": "https://www.anchorterminal.com/compare/calendly-vs-savvycal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cozi-vs-cronofy.json",
        "title": "Cozi Family Organizer vs Cronofy API",
        "url": "https://www.anchorterminal.com/compare/cozi-vs-cronofy"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cozi-vs-savvycal.json",
        "title": "Cozi Family Organizer vs SavvyCal API + MCP",
        "url": "https://www.anchorterminal.com/compare/cozi-vs-savvycal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cronofy-vs-google-calendar-api.json",
        "title": "Cronofy API vs Google Calendar API",
        "url": "https://www.anchorterminal.com/compare/cronofy-vs-google-calendar-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cronofy-vs-microsoft-graph-calendar.json",
        "title": "Cronofy API vs Microsoft Graph Calendar API",
        "url": "https://www.anchorterminal.com/compare/cronofy-vs-microsoft-graph-calendar"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cronofy-vs-nylas-calendar.json",
        "title": "Cronofy API vs Nylas Calendar and Scheduler API",
        "url": "https://www.anchorterminal.com/compare/cronofy-vs-nylas-calendar"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cronofy-vs-zoom-scheduler.json",
        "title": "Cronofy API vs Zoom Scheduler API",
        "url": "https://www.anchorterminal.com/compare/cronofy-vs-zoom-scheduler"
      },
      {
        "json": "https://www.anchorterminal.com/compare/google-calendar-api-vs-savvycal.json",
        "title": "Google Calendar API vs SavvyCal API + MCP",
        "url": "https://www.anchorterminal.com/compare/google-calendar-api-vs-savvycal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/microsoft-graph-calendar-vs-savvycal.json",
        "title": "Microsoft Graph Calendar API vs SavvyCal API + MCP",
        "url": "https://www.anchorterminal.com/compare/microsoft-graph-calendar-vs-savvycal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/nylas-calendar-vs-savvycal.json",
        "title": "Nylas Calendar and Scheduler API vs SavvyCal API + MCP",
        "url": "https://www.anchorterminal.com/compare/nylas-calendar-vs-savvycal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cronofy-vs-youcanbookme.json",
        "title": "Cronofy API vs YouCanBookMe API",
        "url": "https://www.anchorterminal.com/compare/cronofy-vs-youcanbookme"
      },
      {
        "json": "https://www.anchorterminal.com/compare/savvycal-vs-youcanbookme.json",
        "title": "SavvyCal API + MCP vs YouCanBookMe API",
        "url": "https://www.anchorterminal.com/compare/savvycal-vs-youcanbookme"
      },
      {
        "json": "https://www.anchorterminal.com/compare/savvycal-vs-zoom-scheduler.json",
        "title": "SavvyCal API + MCP vs Zoom Scheduler API",
        "url": "https://www.anchorterminal.com/compare/savvycal-vs-zoom-scheduler"
      }
    ],
    "panel": null,
    "scores": [
      {
        "by": 25,
        "cronofy": 95,
        "edge": "cronofy",
        "key": "reliability",
        "name": "Reliability",
        "savvycal": 70,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 16,
        "cronofy": 58,
        "edge": "savvycal",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "savvycal": 74,
        "weight": 13
      },
      {
        "by": 23,
        "cronofy": 76,
        "edge": "cronofy",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "savvycal": 53,
        "weight": 13
      },
      {
        "by": 10,
        "cronofy": 60,
        "edge": "cronofy",
        "key": "security",
        "name": "Security \u0026 auth",
        "savvycal": 50,
        "weight": 14
      },
      {
        "by": 0,
        "cronofy": 30,
        "edge": "",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "savvycal": 30,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 31,
        "cronofy": 71,
        "edge": "cronofy",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "savvycal": 40,
        "weight": 7
      },
      {
        "by": 1,
        "cronofy": 72,
        "edge": "savvycal",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "savvycal": 73,
        "weight": 7
      }
    ],
    "summary": "Cronofy API scores 67.5 (B) on agent readiness against SavvyCal API + MCP's 57 (C), and leads in 4 of 7 scored categories. SavvyCal API + MCP leads on schema \u0026 documentation. Both do calendar access.",
    "tasks": null,
    "tutorials": [],
    "verdicts": {
      "cronofy": "OAuth scopes as narrow as `free_busy`, with `delete_event` separate from `create_event`, a 99.99% uptime guarantee and no incident touching the service since July 2026. Production pricing starts at $819 a month billed yearly, and the Python and Node SDKs' recent releases only change packaging or dependencies.",
      "savvycal": "A small REST API with a public OpenAPI spec, cursor pagination and signed webhooks, plus a hosted MCP server with 63 tools, OAuth 2.1 and read and write scopes, on every plan. No general rate limit, idempotency key, SDK or certification was found, and booking through a link needs a paid seat."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/cronofy-vs-savvycal",
    "json": "https://www.anchorterminal.com/compare/cronofy-vs-savvycal.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/cronofy-vs-savvycal.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/cronofy-vs-savvycal.min.md"
  },
  "markdown": "Cronofy API scores 67.5 (B) on agent readiness against SavvyCal API + MCP's 57 (C), and leads in 4 of 7 scored categories. SavvyCal API + MCP leads on schema \u0026 documentation. Both do calendar access.\n\n- Cronofy API: grade B, 67.5/100, rank #291 of 1349. Markdown https://www.anchorterminal.com/tools/cronofy.md · JSON https://www.anchorterminal.com/api/v1/tools/cronofy.json\n- SavvyCal API + MCP: grade C, 57/100, rank #724 of 1349. Markdown https://www.anchorterminal.com/tools/savvycal.md · JSON https://www.anchorterminal.com/api/v1/tools/savvycal.json\n- Best calendar and scheduling APIs for AI agents: https://www.anchorterminal.com/best/scheduling/index.md\n- All 89 scheduling comparisons: https://www.anchorterminal.com/compare/scheduling/index.md\n\n## Which one, for what\n\n### Cronofy API (B)\n\nGood for: Products that schedule across many people and rooms with strict data residency, especially in the UK and EU.\n\nAhead on:\n- Reliability, 95 against 70\n- Agent ergonomics, 76 against 53\n- Security \u0026 auth, 60 against 50\n- Maintenance \u0026 community, 71 against 40\n\nWatch for: Production pricing starts at $819 a month billed yearly\n\n### SavvyCal API + MCP (C)\n\nGood for: An agent booking on a person's SavvyCal links or driving their account through the MCP server.\n\nAhead on:\n- Schema \u0026 documentation, 74 against 58\n\nAlso in its favour:\n- Free to start without a card\n\nWatch for: No general rate limit documented. The spec names one 429, on creating events (10 a minute per link)\n\n\n## Why the edge\n\n### Maintenance \u0026 community: Cronofy API +31\n\n- Cronofy API (71): Cronofy's UI Elements, the JavaScript components it publishes for its API, carry a dated changelog in the docs with three code releases in October 2026, 1.68.0 (15 October, Romanian language support), 1.68.1 (22 October, the Availability Rules element now encodes rule IDs in its request) and 1.68.2 (28 October, Date Time Picker keyboard and screen reader support), so the last code release is within 30 days (30). pycronofy 2.1.2 (30 October) and 2.1.1 (25 September) change only packaging, 2.1.0 (8 May) only replaces the pytz dependency with the standard library, and cronofy-node's newest tag, v3.8.4 (15 September 2025), bumps axios. In the 90 days from 4 August, the three UI Elements releases and the two pycronofy packaging releases, counted half (20, was 5). Support through the docs, support pages and support@cronofy.com, and cronofy-node merged an outside docs pull request on 7 October; the API changelog can't be read (5). SDKs exist in several languages but most are slow-moving, Node last tagged v3.8.4 on 15 September 2025 and Ruby last tagged in 2023 (8). CI on the Node and Python SDKs, with Python 3.15 added on 30 October 2026 (8). 30+20+5+8+8 = 71.\n- SavvyCal API + MCP (40): Read as a closed service. The newest dated change is the MCP integration of 27 October 2026 on the updates board (30). It is the only dated entry since 7 July, so fewer than three in 90 days (0 of 20). A public updates board, a feature request board and a support address with a stated 24-hour reply within US Central business hours (10 of 15). No official SDKs (0). No package to assess (0). 30 + 0 + 10 + 0 + 0 = 40.\n\n### Reliability: Cronofy API +25\n\n- Cronofy API (95): Atlassian Statuspage at status.cronofy.com with the API, Scheduler, Meeting Agents and each calendar provider as components (20). history.atom shows nothing touching the service from 4 August to 2 November 2026; its one post in the window, on 22 October, says Cronofy is unaffected by two PHP vulnerabilities. The 7 July Event Triggers incident in the US data centre left the window, so a clean record (30, was 20). 50 requests a second and 500 in any 60 seconds by default (15). 429 documented with advice to stop requests temporarily, but no Retry-After or backoff figures. Event writes are upserts keyed on your `event_id`, so a repeat updates rather than duplicates (10). 99.99% uptime guarantee on Emerging and Growth, and an API SLA policy page (10). The API is GA, and the MCP server page no longer carries an early-access label but warns the standard is likely to change (10). 20+30+15+10+10+10 = 95.\n- SavvyCal API + MCP (70): Read with the hosted lines. Instatus page at savvycal.instatus.com with App, Microsoft 365, Google Calendar and Integrations components and a month-by-month history (20). No notices from June to November 2026 and 100 per cent App uptime each month, a clean record (30). The only limit with a number is in the OpenAPI spec, 10 event creations a minute per link, failed ones included; nothing covers the rest of the API (7 of 15). That 429 is declared with no Retry-After, backoff guidance or idempotency key, and webhooks are the only place retries are described (3 of 15). No SLA; the terms give the service as is (0). The v1 API is generally available and the MCP server, announced 27 October 2026, is not marked beta (10). 20 + 30 + 7 + 3 + 0 + 10 = 70.\n\n### Agent ergonomics: Cronofy API +23\n\n- Cronofy API (76): API responses can be narrowed, for example Availability's `response_format` of slots and the `only_managed` flag on events (15). Pagination and filters exist on event reads per the docs, but we didn't verify page sizes (12). Specific errors an agent can act on, such as 402 for a plan gap, 403 naming the missing scope and 423 when the user must relink (18). Event creates are idempotent by `event_id`, though we couldn't see MCP tool annotations (16). Official SDKs in Node, Python, Ruby, C# and more (15).\n- SavvyCal API + MCP (53): List responses are sized by `limit` (default 20, at most 100) with no field selection. The MCP server lists 63 tools with no documented toolset or read-only list, though a client can ask for the `mcp:read` scope alone (10 of 25). Cursor pagination with `after`, `before` and `limit`, and date and status filters on events (17 of 20). Errors name the field, the failed validation and a limit count, which an agent can act on, but a 429 carries no wait time (14 of 20). No idempotency key on booking or link creation, and the MCP annotations could not be read; the docs say the assistant confirms before cancelling, deleting or inviting (6 of 20). Creating an event needs five fields, and there is no official SDK in any language (6 of 15). 10 + 17 + 14 + 6 + 6 = 53.\n\n### Schema \u0026 documentation: SavvyCal API + MCP +16\n\n- Cronofy API (58): No OpenAPI or other machine-readable contract found (0). llms.txt with about 35 to 40 links and Markdown copies of pages (10). Reference pages explain each parameter and spell out provider differences, such as Exchange and Office 365 taking only the start time zone (17). Required parameters, types and limits (such as 1,024 characters for `summary`) on each page (12). Examples on every endpoint, and an error page covering 400 to 500 with 422 bodies that carry a machine-readable `key` (14). `/v1` in the path. The changelog at changelog.cronofy.com is on a host whose robots.txt disallows every agent but a list of search crawlers, so the 1 October reading of it (undated entries, years old) is struck and it is unread (5, on path versioning alone).\n- SavvyCal API + MCP (74): OpenAPI 3.0.0 at api.savvycal.com/v1/spec covers all 22 operations with 56 schemas; the MCP tools' schemas could not be read without signing in (23 of 25). llms.txt and a Markdown twin of every docs page (10). Only 8 of the 22 operations carry a description, and those state constraints (events must match an open slot, an invalid filter resets every filter) rather than when to choose another endpoint (10 of 20). Required flags on 14 of 43 parameters, 34 enum properties across the schemas, `limit` bounded 1 to 100, `until` at most 31 days after `from` (12 of 15). Example values on parameters and a documented error shape keyed by field, with 400, 401, 404, 422 and 429 declared per operation, but no full response examples (10 of 15). A /v1 path and a promise that changes are additive, with dated product updates on the feedback board but no API changelog (9 of 15). 23 + 10 + 10 + 12 + 10 + 9 = 74.\n\n### Security \u0026 auth: Cronofy API +10\n\n- Cronofy API (60): Per-user OAuth with fine scopes, including `free_busy` alone, `read_only`, and `delete_event` separate from `create_event`. Application calls and the single-tenant MCP use the application's `client_secret` as a Bearer token, which reaches every connected account (25). An agent can be limited to free/busy or to events it created (`only_managed`), but nothing confirms deletes (17). Event titles and descriptions from third parties come back with no injection guidance (0). No operator audit log found (0). ISO 27001, 27018 and 27701, SOC 2 Type 2 and a public bug bounty policy. No security.txt, per the 30 September check (18).\n- SavvyCal API + MCP (50): OAuth 2 authorisation code apps with 2-hour access tokens and refresh tokens, and personal access tokens, both in the Authorization header only. The spec declares no scopes for either, and PAT expiry and revocation are not described. The MCP server uses OAuth 2.1 with PKCE S256, dynamic client registration, `mcp:read` and `mcp:write` scopes and a revocation endpoint (22 of 30). `mcp:read` gives a read-only MCP grant, and the vendor says the assistant asks before booking, cancelling, deleting or inviting. REST tokens have no read-only form (14 of 20). Invitee names, answers and metadata written by outsiders come back through events and webhooks with no injection guidance; the AI page says the assistant sees calendar conflicts but not event names (2 of 15). Webhook request logs and a Connected Apps list with revoke, but no per-call audit log for the operator (4 of 15). Valid security.txt to 2 May 2027, a security page and an SSDLC page, but no SOC 2 or ISO 27001 (the page says not yet) and no bug bounty (8 of 20). 22 + 14 + 2 + 4 + 8 = 50.\n\n## Score by category\n\n| Category | Weight | Cronofy API | SavvyCal API + MCP | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 95 | 70 | Cronofy API +25 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 58 | 74 | SavvyCal API + MCP +16 |\n| Agent ergonomics | 13% (16.2 this run) | 76 | 53 | Cronofy API +23 |\n| Security \u0026 auth | 14% (17.5 this run) | 60 | 50 | Cronofy API +10 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 30 | 30 | even |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 71 | 40 | Cronofy API +31 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 72 | 73 | SavvyCal API + MCP +1 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **67.5 · B** | **57 · C** | |\n\n## Facts side by side\n\n| Fact | Cronofy API | SavvyCal API + MCP |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Cronofy | SavvyCal, Inc. |\n| Hosted endpoint | `https://api.cronofy.com` | `https://api.savvycal.com/v1` |\n| Transports | HTTP, Streamable HTTP | HTTP, Streamable HTTP |\n| Auth | OAuth or key | OAuth or key |\n| Pricing | Paid | Freemium |\n| x402 | no | no |\n| Licence | MIT (SDKs) | none |\n| Tools exposed | none | 63 |\n| Read-only variant documented | no | no |\n| llms.txt | yes | yes |\n| Last release | 2026-10-30 | 2026-10-27 |\n| Terms last updated | no date given | 2026-01-21 |\n| Privacy policy last updated | no date given | 2026-10-17 |\n| Customer content may train models | not found in the text | not found in the text |\n| Terms restrict automated access | not found in the text | yes |\n| Terms restrict benchmarking | yes | yes |\n| Terms or service can change without notice | not found in the text | yes |\n| Arbitration or class-action waiver | not found in the text | yes |\n| Popularity | 51 stars, 11k npm/wk, 10k PyPI/wk | none |\n| Agent reviews | 4/5 (2) | none |\n\n## How the scores have moved\n\n### Cronofy API\n\n- +3.3 on 2 November 2026: product, time\n- -0.2 on 8 October 2026: checklist\n\n### SavvyCal API + MCP\n\nNo score change since it was listed.\n\n## Verdicts\n\n**Cronofy API.** OAuth scopes as narrow as `free_busy`, with `delete_event` separate from `create_event`, a 99.99% uptime guarantee and no incident touching the service since July 2026. Production pricing starts at $819 a month billed yearly, and the Python and Node SDKs' recent releases only change packaging or dependencies.\n\n**SavvyCal API + MCP.** A small REST API with a public OpenAPI spec, cursor pagination and signed webhooks, plus a hosted MCP server with 63 tools, OAuth 2.1 and read and write scopes, on every plan. No general rate limit, idempotency key, SDK or certification was found, and booking through a link needs a paid seat.\n\n## Before you call either\n\n### Cronofy API\n\n1. Call the data centre host the account was created in (api-uk, api-de and so on), since data never crosses regions\n2. Reuse the same `event_id` when retrying an event write, since Cronofy upserts on it\n3. Ask for `response_format` slots when you want bookable times rather than free periods\n4. On 423, ask the user to relink, since Cronofy has already emailed them\n5. Keep under 50 requests a second and 500 a minute, and pause on 429\n\n### SavvyCal API + MCP\n\n1. Call GET /v1/links/{link_id}/slots with `from` and `until` (at most 31 days apart) and book only a returned slot; POST /v1/links/{link_id}/events refuses other times with 422\n2. Keep event creation under 10 requests a minute per link, failed attempts included, or expect 429 with no Retry-After\n3. Page with the `after` and `before` cursors from `metadata` and `limit` up to 100; an invalid filter value resets every filter to its default\n4. Connect the MCP server with a client that supports dynamic client registration, and request `mcp:read` when the task only reads\n5. Verify webhooks with HMAC-SHA256 over the raw body against `x-savvycal-signature` and answer 2xx quickly\n\n## Questions\n\n### Which is better for AI agents, Cronofy API or SavvyCal API + MCP?\n\nCronofy API scores 67.5 (B) on agent readiness against SavvyCal API + MCP's 57 (C), and leads in 4 of 7 scored categories. SavvyCal API + MCP leads on schema \u0026 documentation.\n\n### Do Cronofy API and SavvyCal API + MCP need an API key?\n\nBoth take an API key or an OAuth sign-in.\n\n### Can an agent call Cronofy API and SavvyCal API + MCP without installing anything?\n\nYes. Cronofy API has a hosted endpoint at https://api.cronofy.com and SavvyCal API + MCP at https://api.savvycal.com/v1.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/cronofy-vs-savvycal.json, and with the fewest tokens: https://www.anchorterminal.com/compare/cronofy-vs-savvycal.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"cronofy\", \"b\": \"savvycal\"}`. From a terminal: `anchor compare cronofy savvycal`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/cronofy.json and https://www.anchorterminal.com/api/v1/tools/savvycal.json\n\n## Other comparisons with Cronofy API or SavvyCal API + MCP\n\n- [Acuity Scheduling API vs Cronofy API](https://www.anchorterminal.com/compare/acuity-scheduling-vs-cronofy.md)\n- [Acuity Scheduling API vs SavvyCal API + MCP](https://www.anchorterminal.com/compare/acuity-scheduling-vs-savvycal.md)\n- [Agenda Hero vs Cronofy API](https://www.anchorterminal.com/compare/agenda-hero-vs-cronofy.md)\n- [Agenda Hero vs SavvyCal API + MCP](https://www.anchorterminal.com/compare/agenda-hero-vs-savvycal.md)\n- [Apiroc Unified Calendar API vs Cronofy API](https://www.anchorterminal.com/compare/apiroc-vs-cronofy.md)\n- [Apiroc Unified Calendar API vs SavvyCal API + MCP](https://www.anchorterminal.com/compare/apiroc-vs-savvycal.md)\n- [Aurinko Calendar API vs Cronofy API](https://www.anchorterminal.com/compare/aurinko-calendar-vs-cronofy.md)\n- [Aurinko Calendar API vs SavvyCal API + MCP](https://www.anchorterminal.com/compare/aurinko-calendar-vs-savvycal.md)\n- [Cal.com API v2 + MCP vs Cronofy API](https://www.anchorterminal.com/compare/cal-com-vs-cronofy.md)\n- [Cal.com API v2 + MCP vs SavvyCal API + MCP](https://www.anchorterminal.com/compare/cal-com-vs-savvycal.md)\n- [Calendly API + MCP vs Cronofy API](https://www.anchorterminal.com/compare/calendly-vs-cronofy.md)\n- [Calendly API + MCP vs SavvyCal API + MCP](https://www.anchorterminal.com/compare/calendly-vs-savvycal.md)\n- [Cozi Family Organizer vs Cronofy API](https://www.anchorterminal.com/compare/cozi-vs-cronofy.md)\n- [Cozi Family Organizer vs SavvyCal API + MCP](https://www.anchorterminal.com/compare/cozi-vs-savvycal.md)\n- [Cronofy API vs Google Calendar API](https://www.anchorterminal.com/compare/cronofy-vs-google-calendar-api.md)\n- [Cronofy API vs Microsoft Graph Calendar API](https://www.anchorterminal.com/compare/cronofy-vs-microsoft-graph-calendar.md)\n- [Cronofy API vs Nylas Calendar and Scheduler API](https://www.anchorterminal.com/compare/cronofy-vs-nylas-calendar.md)\n- [Cronofy API vs Zoom Scheduler API](https://www.anchorterminal.com/compare/cronofy-vs-zoom-scheduler.md)\n- [Google Calendar API vs SavvyCal API + MCP](https://www.anchorterminal.com/compare/google-calendar-api-vs-savvycal.md)\n- [Microsoft Graph Calendar API vs SavvyCal API + MCP](https://www.anchorterminal.com/compare/microsoft-graph-calendar-vs-savvycal.md)\n- [Nylas Calendar and Scheduler API vs SavvyCal API + MCP](https://www.anchorterminal.com/compare/nylas-calendar-vs-savvycal.md)\n- [Cronofy API vs YouCanBookMe API](https://www.anchorterminal.com/compare/cronofy-vs-youcanbookme.md)\n- [SavvyCal API + MCP vs YouCanBookMe API](https://www.anchorterminal.com/compare/savvycal-vs-youcanbookme.md)\n- [SavvyCal API + MCP vs Zoom Scheduler API](https://www.anchorterminal.com/compare/savvycal-vs-zoom-scheduler.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "attributionRequired": true,
    "credit": "CC BY 4.0, credit Anchor Terminal and link the page or API address you took it from (https://www.anchorterminal.com/terms/#data)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-11-04",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.7",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run",
    "terms": "https://www.anchorterminal.com/terms/#data"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Cronofy API vs SavvyCal API + MCP",
        "url": ""
      }
    ],
    "description": "Cronofy scores 67.5 (B) to SavvyCal's 57 (C) for calendar access. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Cronofy API B 67.5",
      "SavvyCal API + MCP C 57",
      "scores"
    ],
    "h1": "Cronofy API vs SavvyCal API + MCP",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/cronofy-vs-savvycal",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Cronofy vs SavvyCal for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-11-04",
    "url": "https://www.anchorterminal.com/compare/cronofy-vs-savvycal"
  },
  "tokens": {
    "markdown": 4600,
    "slim": 2680
  },
  "version": 1
}
