{
 "categories": [
  "documents",
  "developer-tools"
 ],
 "deployment": "saas",
 "evidence": [
  {
   "date": "2026-09-01",
   "fact": "homepage",
   "note": "Sanity presents itself as a content operating system for AI-era content operations, with Content Lake, Sanity Studio, APIs, and agentic products.",
   "source": "https://www.sanity.io/",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "vendor",
   "note": "The product homepage is published by Sanity.",
   "source": "https://www.sanity.io/",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "deployment",
   "note": "Pricing describes a hosted, real-time content database and hosted Studio/editing tools on Free, Growth, and Enterprise plans rather than a self-managed Content Lake install.",
   "source": "https://www.sanity.io/pricing",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "platforms[0]",
   "note": "Content Lake is accessed over HTTP APIs and used by Sanity Studio and front ends. The product surface assessed here is web.",
   "source": "https://www.sanity.io/docs/content-lake",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "license",
   "note": "Sanity publishes a Free plan at $0 plus paid Growth ($15 per seat / month) and custom Enterprise plans.",
   "source": "https://www.sanity.io/pricing",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "status",
   "note": "Vendor MCP changelog lists v2.30.1 on 2026-08-24. JavaScript client v8.0.0 is dated 2026-08-12 on the client getting-started page.",
   "source": "https://www.sanity.io/docs/ai/mcp-server",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.api.exists",
   "note": "Sanity publishes an HTTP API reference covering Query, Mutation, Actions, Export, Listen, Assets, Webhooks, Access, and related Content Lake endpoints.",
   "source": "https://www.sanity.io/docs/http-reference",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.api.kinds[0]",
   "note": "The Query API is HTTP GET or POST to /data/query/{dataset} on {projectId}.api.sanity.io, returning JSON GROQ results. Mutation and Actions are HTTP POST JSON endpoints on the same host.",
   "source": "https://www.sanity.io/docs/http-reference/query",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.api.kinds[1]",
   "note": "Sanity documents a deployable GraphQL API generated from the Studio schema. Queries run at /graphql/{dataset}/{tag} on the API or API CDN. Mutations are not exposed through GraphQL.",
   "source": "https://www.sanity.io/docs/content-lake/graphql",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.api.kinds[2]",
   "note": "The sanity api command states that endpoint paths come from published OpenAPI specifications, listed with sanity openapi list and inspected with sanity openapi get.",
   "source": "https://www.sanity.io/docs/cli-reference/cli-api",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.api.auth[0]",
   "note": "Personal tokens are generated on sanity login, sent as Authorization: Bearer, and last one year by default (shorter with SAML SSO). sanity debug --secrets prints the current personal token for curl.",
   "source": "https://www.sanity.io/docs/content-lake/http-auth",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.api.auth[1]",
   "note": "Robot tokens are created in manage (project or organization) or via POST to the Access API robots endpoint. They are the documented application credential, last until deleted unless expiresAt is set, and are also sent as Bearer.",
   "source": "https://www.sanity.io/docs/content-lake/http-auth",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.api.coverage",
   "note": "Mutation API covers transactional create, replace, delete, and patch, including GROQ-selected deletes and patches capped at 10,000 documents. Query, Export, Actions, and webhooks add read, dump, Studio-style writes, and events. GraphQL is query-only. Schema validation is Studio-side. Coverage is therefore partial across the Content Lake surface.",
   "source": "https://www.sanity.io/docs/http-reference/mutation",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.api.docs",
   "note": "This page is Sanity's current HTTP API reference index for Content Lake and application-management endpoints.",
   "source": "https://www.sanity.io/docs/http-reference",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.sdk.exists",
   "note": "Sanity's Libraries page lists official JavaScript and PHP clients and labels Rust, LINQ, and Flutter clients as community-supported.",
   "source": "https://www.sanity.io/docs/libraries",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.sdk.official",
   "note": "The Libraries page names the JavaScript and PHP clients official Sanity clients.",
   "source": "https://www.sanity.io/docs/libraries",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.sdk.languages[0]",
   "note": "@sanity/client is the official JavaScript client for GROQ queries, mutations, asset uploads, and listeners. v8 requires Node.js 22.12 or later and ships ESM-only.",
   "source": "https://www.sanity.io/docs/apis-and-sdks/js-client-getting-started",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.sdk.languages[1]",
   "note": "The Libraries page lists an official Sanity PHP Client. The sanity-io/sanity-php repository describes a PHP library for retrieving, creating, and patching Sanity data.",
   "source": "https://www.sanity.io/docs/libraries",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.mcp.first_party",
   "note": "Sanity documents a hosted first-party MCP server at https://mcp.sanity.io on Sanity infrastructure, with OAuth or Bearer token auth and CLI install via npx sanity@latest mcp configure.",
   "source": "https://www.sanity.io/docs/ai/mcp-server",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.mcp.verdict",
   "note": "Vendor docs list editorial and development tools including query_documents, create_documents, patch_documents, publish_documents, deploy_schema, deploy_studio, releases, datasets, CORS, run_sanity_cli, and docs search. Changelog marks GA on 2025-12-11 and v2.30.1 on 2026-08-24.",
   "source": "https://www.sanity.io/docs/ai/mcp-server",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.integrations.zapier",
   "note": "https://zapier.com/apps/sanity/integrations returned 404 on 2026-09-01. The same 404 was returned for /apps/sanity-io, /apps/sanityio, /apps/sanitycms, /apps/sanity-cms, and /apps/sanityio-cms.",
   "source": "https://zapier.com/apps/sanity/integrations",
   "tier": "scraped"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.integrations.make",
   "note": "https://apps.make.com/sanity returned a 404 'This page is coming soon' catalog page on 2026-09-01, not a Sanity CMS app listing.",
   "source": "https://apps.make.com/sanity",
   "tier": "scraped"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.integrations.power_automate",
   "note": "Microsoft's public connector-reference catalog contained no Sanity connector on 2026-09-01. https://learn.microsoft.com/en-us/connectors/sanity/ and /connectors/sanityio/ returned 404.",
   "source": "https://learn.microsoft.com/en-us/connectors/connector-reference/",
   "tier": "scraped"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.integrations.n8n",
   "note": "n8n's built-in app-nodes index contained no Sanity node on 2026-09-01. https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.sanity and https://n8n.io/integrations/sanity returned 404.",
   "source": "https://docs.n8n.io/integrations/builtin/app-nodes/",
   "tier": "scraped"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.cli.exists",
   "note": "Sanity documents the official sanity CLI, recommended as npx sanity@latest, requiring Node.js and npm. Commands manage Studio, datasets, webhooks, GraphQL, and data scripts.",
   "source": "https://www.sanity.io/docs/apis-and-sdks/cli",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.extensibility.scripting[0]",
   "note": "Sanity Functions are small handlers deployed to Sanity infrastructure that run on document create, update, or delete, filterable with GROQ, and defined in Blueprints.",
   "source": "https://www.sanity.io/docs/compute-and-ai/function-quickstart",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.extensibility.scripting[1]",
   "note": "Studio configuration can be packaged with definePlugin, published to npm, and listed on the Sanity Exchange.",
   "source": "https://www.sanity.io/docs/studio/developing-plugins",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.extensibility.scripting[2]",
   "note": "Blueprints are code-defined Sanity resource templates (sanity.blueprint.ts) used to deploy Functions and related stack resources with sanity blueprints deploy.",
   "source": "https://www.sanity.io/docs/compute-and-ai/function-quickstart",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.extensibility.webhooks",
   "note": "Content Lake outgoing webhooks fire on document create, update, and delete. Filters and projections are GROQ. Methods include POST, PUT, PATCH, DELETE, and GET. Delivery retries twice at 30-second intervals and times out at 30 seconds.",
   "source": "https://www.sanity.io/docs/content-lake/webhooks",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.data_access.export[0]",
   "note": "GET /data/export/{dataset} returns an authenticated NDJSON stream of non-deleted documents, including drafts and asset documents. Cursor mode is documented for large datasets.",
   "source": "https://www.sanity.io/docs/http-reference/export",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.data_access.export[1]",
   "note": "sanity datasets export writes a local gzipped tarball of documents and assets, with --types, --no-assets, --no-drafts, and cursor mode.",
   "source": "https://www.sanity.io/docs/cli-reference/cli-datasets",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.data_access.import[0]",
   "note": "Sanity documents NDJSON as the import format, one JSON document per line, including _sanityAsset references for files and images.",
   "source": "https://www.sanity.io/docs/content-lake/importing-data",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.data_access.import[1]",
   "note": "sanity datasets import accepts an NDJSON file, stdin, or a tarball and supports --token for CI, --replace, and --missing.",
   "source": "https://www.sanity.io/docs/cli-reference/cli-datasets",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "modalities.agent_docs.llms_txt",
   "note": "https://www.sanity.io/llms.txt is a first-party markdown documentation index for Content Lake, Studio, HTTP APIs, MCP, CLI, and related sections. https://www.sanity.io/docs/llms.txt is a shorter docs index that also points to llms-full.txt.",
   "source": "https://www.sanity.io/llms.txt",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "verdict.scores.api",
   "note": "Query, Mutation, Actions, Export, and webhooks are documented HTTP surfaces with Bearer tokens, date-versioned paths, an official JS client, and an API CDN. GraphQL is query-only, schema validation is Studio-only, mutations are 25 req/s per IP, and query-selected mutations cap at 10,000 documents, which keeps the path at 8.",
   "source": "https://www.sanity.io/docs/http-reference",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "verdict.scores.mcp",
   "note": "The official hosted server is GA with broad content, schema, release, and project tools. generate_image, transform_image, and instructed create_version consume AI credits. Manual OAuth sessions typically expire after 7 days. Tool availability can vary with permissions and releases.",
   "source": "https://www.sanity.io/docs/ai/mcp-server",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "verdict.scores.cli",
   "note": "sanity api sends authenticated HTTP requests and writes the response body to stdout, with --token or SANITY_AUTH_TOKEN for CI. documents query/get/create/delete, datasets export/import, tokens --json, hooks, graphql, and mcp configure are documented. The CLI requires Node.js and npm.",
   "source": "https://www.sanity.io/docs/cli-reference/cli-api",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "verdict.scores.integrations",
   "note": "Bounded catalog checks on 2026-09-01 found no Sanity CMS connector on Zapier, Make, Microsoft Power Automate, or n8n built-in nodes.",
   "source": "https://zapier.com/apps/sanity/integrations",
   "tier": "scraped"
  },
  {
   "date": "2026-09-01",
   "fact": "freshness.watch[0].url",
   "note": "Opened and verified as the current hosted MCP setup, OAuth and token auth, tool list, AI-credit tools, and changelog through v2.30.1 on 2026-08-24.",
   "source": "https://www.sanity.io/docs/ai/mcp-server",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "freshness.watch[1].url",
   "note": "Opened and verified as the current HTTP API reference index for Query, Mutation, Actions, Export, Listen, Assets, and Webhooks.",
   "source": "https://www.sanity.io/docs/http-reference",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "freshness.watch[2].url",
   "note": "Opened the official sanity-io/agent-toolkit repository. The raw README documents the remote MCP at https://mcp.sanity.io, agent skills, and editor plugins.",
   "source": "https://github.com/sanity-io/agent-toolkit",
   "tier": "declared"
  },
  {
   "date": "2026-09-01",
   "fact": "freshness.watch[3].url",
   "note": "Opened and verified as the current Sanity CLI overview, npx sanity@latest install path, and sanity.cli.js configuration including GraphQL deploy settings.",
   "source": "https://www.sanity.io/docs/apis-and-sdks/cli",
   "tier": "declared"
  }
 ],
 "freshness": {
  "last_verified": "2026-09-01",
  "volatility": "high",
  "watch": [
   {
    "type": "mcp",
    "url": "https://www.sanity.io/docs/ai/mcp-server"
   },
   {
    "type": "docs",
    "url": "https://www.sanity.io/docs/http-reference"
   },
   {
    "type": "repo",
    "url": "https://github.com/sanity-io/agent-toolkit"
   },
   {
    "type": "docs",
    "url": "https://www.sanity.io/docs/apis-and-sdks/cli"
   }
  ]
 },
 "homepage": "https://www.sanity.io/",
 "id": "sanity",
 "license": "freemium",
 "modalities": {
  "agent_docs": {
   "llms_txt": true
  },
  "api": {
   "auth": [
    "personal-token",
    "robot-token"
   ],
   "coverage": "partial",
   "docs": "https://www.sanity.io/docs/http-reference",
   "exists": true,
   "kinds": [
    "rest",
    "graphql",
    "openapi"
   ]
  },
  "cli": {
   "exists": true
  },
  "computer_use": {
   "issues": [],
   "viability": "unknown"
  },
  "data_access": {
   "export": [
    "ndjson",
    "tar-gz"
   ],
   "import": [
    "ndjson",
    "tar-gz"
   ]
  },
  "extensibility": {
   "scripting": [
    "sanity-functions",
    "studio-plugins",
    "blueprints"
   ],
   "webhooks": true
  },
  "integrations": {
   "make": false,
   "n8n": false,
   "power_automate": false,
   "zapier": false
  },
  "mcp": {
   "first_party": true,
   "third_party": [],
   "verdict": "official"
  },
  "rpa": {
   "drivability": "unknown",
   "notes": "No repeatable UI probe was run. Content Lake HTTP APIs, official clients, the Sanity CLI, GROQ-powered webhooks, and the hosted MCP server cover query, mutation, schema, and project work without driving Studio in a browser.\n",
   "ui_stack": [
    "web-dom"
   ],
   "vendor_support": []
  },
  "sdk": {
   "exists": true,
   "languages": [
    "javascript",
    "php"
   ],
   "official": true
  }
 },
 "name": "Sanity",
 "platforms": [
  "web"
 ],
 "related": {
  "alternatives": [
   "umbraco-cms",
   "sitevision",
   "webflow"
  ],
  "our_products": []
 },
 "schema_version": 1,
 "score_version": 1,
 "status": "active",
 "vendor": "Sanity",
 "verdict": {
  "best_path": "api",
  "scores": {
   "api": 8,
   "cli": 8,
   "computer_use": null,
   "integrations": 0,
   "mcp": 8,
   "overall": 8,
   "rpa": null
  },
  "summary": "Sanity is automatable today through the Content Lake HTTP APIs on https://{projectId}.api.sanity.io/{apiVersion}. The Query API runs GROQ over GET or POST at /data/query/{dataset}, with an API CDN at {projectId}.apicdn.sanity.io. Published documents in public datasets are readable without a token; drafts, versions, private datasets, and all writes require Authorization: Bearer. Personal tokens come from sanity login and last one year by default. Robot tokens are created per project or organization in manage or via the Access API, last until deleted unless expiresAt is set, and are the documented path for applications. The Mutation API POSTs a transactional mutations array to /data/mutate/{dataset} (create, createOrReplace, createIfNotExists, delete, patch). Query-selected mutations cap at 10,000 documents. The Actions API is the higher-level Studio write path for document, version, and release operations. GraphQL is a separately deployed, schema-generated query API; mutations are not exposed through GraphQL. Official clients are @sanity/client (JavaScript, v8 requires Node.js 22.12+) and sanity/sanity-php. GROQ-powered outgoing webhooks support create, update, and delete with filters, projections, retries, and HMAC secrets. Sanity hosts a first-party remote MCP server at https://mcp.sanity.io (GA from 2025-12-11; vendor changelog through v2.30.1 on 2026-08-24). MCP authenticates with OAuth by default or a Bearer API token. Tools cover GROQ, document create and patch, publish, releases, schema and Studio deploy, datasets, CORS, documentation search, and a limited CLI runner. generate_image, transform_image, and create_version with instruction consume AI credits. OAuth MCP sessions typically expire after 7 days. The official sanity CLI can call the HTTP API, query and mutate documents, export or import NDJSON and tar.gz datasets, manage tokens and webhooks, and run sanity mcp configure. It needs Node.js and npm. Zapier /apps/sanity, Make apps.make.com/sanity, Microsoft /connectors/sanity/, and n8n's built-in Sanity node path all returned catalog 404s on 2026-09-01. Computer-use viability is unassessed. API, MCP, and CLI all score 8; API is the best path because robot tokens work unattended from any HTTP client without an MCP session or a local Node toolchain, and GraphQL writes still go through the Mutation or Actions APIs.\n"
 }
}