# AX Check: sanity.io
Checked 2026-10-26.

Sanity.io gives agents clean docs, live pricing, working setup.
All 23 checklist items passed: quickstart, API reference, MCP server and CLI all resolve, and pricing (Free $0, Growth $15/seat/mo) is stated openly.

## Onboarded with real credentials

## Coding sessions
All three independent sessions completed the task. DeepSeek V4.1 Flash and Kimi K3 both pulled accurate live pricing (Free $0, Growth $15/seat/month) directly from the pricing page. Qwen 3.8 Max instead recalled plan names and prices from memory rather than checking the live page, landing on different, unverified figures.

### DeepSeek V4.1 Flash
[View public run](https://agents.withgauge.com/p/runs/cdd7bf86-f825-4c39-9989-00135f73878e) · [Read transcript](https://www.ax-check.com/sanity.io/sessions/deepseek.json)
Quoted Free at $0, Growth at $15 per seat per month and Enterprise as custom, with seat and quota limits, pay-as-you-go overages, add-ons and the Growth trial, taken from the fetched pricing page. (seq 17, seq 109)
#### End-to-end onboarding
- **Onboarded with real credentials**: The agent obtained real hosted Sanity credentials via an unauthenticated POST to the provisioning API (no human login), then used the returned token with @sanity/client to write 5 documents via a transaction and read them back with a GROQ query joining book->author. Both seed and query commands executed against the live project (projectId 7yzfb3cg, dataset production) and returned real data, not a mock or local-only response.
  Event 69:

  ```text
  HTTP 201
  --- keys in response ---
  resourceType, resourceId, token, claimToken, links, expiresAt, apiHost, datasetName, terms
  ```
  Event 100:

  ```text
  === SEED ===
  Seeded 5 documents into production.
  
  === QUERY ===
  Found 3 books:
  ┌─────────┬─────────────────────┬───────────────┬─────────────────────────────┐
  │ (index) │ author              │ publishedYear │ title                       │
  ```
  Event 68:

  ```text
  https://api.sanity.io/v2026-06-23/provision
  ```

#### Hallucinated URLs
- **Guessed 'no-account' docs slugs returned 404s, quickly abandoned**: The agent tried a handful of guessed documentation URL slugs before finding the real page. These were exploratory guesses that failed, but the agent did not rely on them or treat them as working links; it moved on and found the correct documented URL immediately after, so this reads as a minor non-blocking guess rather than an acted-upon hallucination.
  Event 36:

  ```text
  projects-without-an-account -> 404
  projects-without-account -> 404
  anonymous-projects -> 404
  no-account -> 404
  ```

#### Blockers
None identified in this transcript.

#### Suggested Changes
- **Link the account-less provisioning path from the main Studio quickstart page**: The default Studio quickstart only shows the npm create sanity@latest flow requiring a local dev server and login. The account-less flow (sanity.new / npx sanity@latest new) is buried deeper in nav and only found via link-scraping docs. Add a visible cross-link on the Studio quickstart page to the account-less path. Check by confirming a fresh agent fetching only the top-level quickstart discovers the account-less option without extra crawling.
  Event 44:

  ```text
  Open the studio running locally in your browser from http://localhost:3333 . You should now see a screen prompting you to log in to the studio.
  ```
  Event 43:

  ```text
  href="/docs/getting-started/projects-without-an-account"
  ```

### Kimi K3
[View public run](https://agents.withgauge.com/p/runs/f382ee2d-9138-4fe8-9034-3361bc63d20d) · [Read transcript](https://www.ax-check.com/sanity.io/sessions/kimi.json)
Pricing pulled from live sanity.io/pricing: Free $0 and Growth $15/seat/mo with seat, dataset, document, request and bandwidth quotas plus overage/add-on rates; figures tied to named plans and limits. (seq 33, seq 44, seq 61)
#### End-to-end onboarding
- **End-to-end onboarding not demonstrated**: No real Sanity account/project credentials were obtained during the session. The agent found no SANITY_TOKEN or project credentials in the environment, and instead of onboarding to a new account, queried an already-public, unauthenticated demo dataset (zp7mbokg) that requires no token. The write path, which would have required real credentials and an authenticated operation, was explicitly skipped because no token was available (exit code 2). No login or credential acquisition flow was attempted or completed.
  Event 8:

  ```text
  PI_GATEWAY_API_KEY=<set>
  ```
  Event 24:

  ```text
  zp7mbokg -> 200 : {"query":"*[0]","result":{"_createdAt":"2021-11-09T16:51:04Z"
  ```
  Event 49:

  ```text
  Skipped: set SANITY_PROJECT_ID, SANITY_DATASET and SANITY_TOKEN to run the write demo.
  Create a free project at https://www.sanity.io/manage, then add an Editor API token.
  ```

#### Hallucinated URLs
None identified in this transcript.

#### Blockers
- **No Sanity credentials available for authenticated write operations**: The sandbox had no Sanity API token or project credentials, and creating a new Sanity project requires browser-based OAuth login, which is not possible in this headless environment. This blocked the write example (create/patch/transaction/delete) from ever running against a real project — it was coded but never executed with real auth. This is a session/environment limitation (missing credentials + need for human login), not a product defect.
  Event 49:

  ```text
  Skipped: set SANITY_PROJECT_ID, SANITY_DATASET and SANITY_TOKEN to run the write demo.
  Create a free project at https://www.sanity.io/manage, then add an Editor API token.
  ```
  Event 61:

  ```text
  Creating a Sanity project requires logging in at sanity.io via browser OAuth — not possible from this headless sandbox, and no `SANITY_TOKEN` was provided here.
  ```
- **Sanity's own demo.sanity.io host unreachable**: An attempt to fetch demo.sanity.io to find a sample project ID returned no connection (curl exit code reflected as HTTP 000), forcing the agent to probe for public dataset IDs by guessing instead. This is likely a network/environment restriction in the sandbox rather than a product issue, since the main sanity.io domain and API were reachable.
  Event 17:

  ```text
  000
  grep: /tmp/demo.html: No such file or directory
  ---assets---
  grep: /tmp/demo.html: No such file or directory
  ```

#### Suggested Changes
- **Surface a public demo project ID directly in quickstart docs**: The agent had to brute-force guess six candidate project IDs against api.sanity.io to find a live public dataset (zp7mbokg, the movies demo) since demo.sanity.io was unreachable and no public project ID was obvious from docs or the pricing page. Publishing one canonical public project ID/dataset name in the quickstart or README on sanity.io/docs would let developers run a true read-only hosted example in one step instead of guessing IDs. Verify by checking that a fresh agent can curl a documented project/dataset pair and get a 200 on first try.
  Event 23:

  ```text
  for pid in 3do82whm zp7mbokg 81pocpw8 gxm31e95 w1ow2x4n do43hc1i; do
  ```
  Event 27:

  ```text
  I found live public datasets — `zp7mbokg` is Sanity's public "movies" demo dataset.
  ```

### Qwen 3.8 Max
[View public run](https://agents.withgauge.com/p/runs/ac7cb9f3-5fc5-4f2a-b78b-04b5a216d439) · [Read transcript](https://www.ax-check.com/sanity.io/sessions/qwen.json)
Quoted Free, Base (~$99/mo) and Business (~$599/mo) with free-tier limits, said a demo fits the free tier, and named overage drivers. Prices came from memory, not checked live. (seq 9, seq 28)
#### End-to-end onboarding
- **Onboarding needs a login**: The agent never obtained real Sanity project credentials. It only had a local PI_GATEWAY_API_KEY in the environment, with no SANITY_PROJECT_ID or SANITY_API_TOKEN available. It ran a smoke test against the real hosted API using a dummy project ID, which correctly returned a 404 (proving network plumbing works but not authentication). It explicitly stated it cannot create a Sanity project or token without human login via browser OAuth or the interactive CLI, and stopped there without performing any authenticated operation.
  Event 4:

  ```text
  curl -s -m 8 -o /dev/null -w "%{http_code}" https://api.sanity.io/v1/ping
  ```
  Event 26:

  ```text
  Failed: 404 Dataset not found - Dataset "production" not found for project ID "dummy1234" (traceId: 2e1317d0719eba852ab8a7c66349c49d)
  ```
  Event 28:

  ```text
  creating a Sanity project requires an account login** (browser OAuth at sanity.io, or the interactive `npm create sanity@latest` CLI which prompts for login). I have no `SANITY_PROJECT_ID` or `SANITY_API_TOKEN` in this environment and can't create one headlessly.
  ```

#### Hallucinated URLs
None identified in this transcript.

#### Blockers
- **No Sanity project credentials available in sandbox**: The sandbox environment had no SANITY_PROJECT_ID, SANITY_DATASET, or SANITY_API_TOKEN pre-provisioned, and Sanity project creation requires either browser-based OAuth login or an interactive CLI login prompt. This is a missing-credentials limitation of the test environment / product's normal signup flow, not a product defect — a real human can create a free project in minutes, but a headless agent session cannot self-provision one.
  Event 28:

  ```text
  creating a Sanity project requires an account login** (browser OAuth at sanity.io, or the interactive `npm create sanity@latest` CLI which prompts for login). I have no `SANITY_PROJECT_ID` or `SANITY_API_TOKEN` in this environment and can't create one headlessly.
  ```

#### Suggested Changes
- **Offer a headless/CLI-token project provisioning path**: The only way found to get a SANITY_PROJECT_ID and SANITY_API_TOKEN was browser OAuth or the interactive login prompt, blocking the agent from a live write/query example. If a non-interactive provisioning method exists (e.g. a management API call with an org service token), surface it in the quickstart so first-run sessions aren't fully gated on browser login. Verify by running the documented command without a browser and confirming a usable project ID and token are returned.
  Event 28:

  ```text
  The only friction point is the initial account/login step, which is inherently human-gated
  ```

### Task given to each agent
Help me build a simple example using Sanity. Tell me how pricing works, and briefly tell me whether this product will be easy for you to manage. Let me know if you get blocked. If this product has no developer workflow you can act on, say so plainly and stop. Stay light: use the hosted product through its SDK or API. Do not start local service stacks or wait for long-running commands; if the quickstart requires either, say so plainly and stop.

No product credentials were supplied and no purchases were authorized.

## Score: A · 100/100 (provisional)
Grades come from completed site checks. Coding sessions and skipped checks do not affect the score.

### Clarity
- **Pass** — Homepage answers Markdown requests

  ```text
  Homepage returned text/markdown (200) when requested with Accept: text/markdown.
  ```

- **Pass** — llms.txt provides an actionable documentation index

  ```text
  llms.txt links docs index, full docs, API reference, MCP server, quickstarts and pricing.
  ```

- **Pass** — llms.txt provides navigation guidance

  ```text
  llms.txt groups links under Start here, Docs, Reference, Products, Solutions headings.
  ```

- **Pass** — llms.txt mentions offered API, MCP, and skills

  ```text
  llms.txt mentions MCP server, API reference, coding-agents quickstart and skills references.
  ```

- **Pass** — A compact guide representation exists

  ```text
  Standalone .md quickstart and llms.txt index provide compact agent guide representations.
  ```

- **Pass** — A focused guide is directly retrievable

  ```text
  AI coding agents quickstart fetched directly as Markdown with concrete setup steps.
  ```

- **Pass** — Equivalent instructions fit a token budget

  ```text
  Quickstart Markdown is 1008 tokens, well under the 8000-token budget.
  ```

- **Pass** — Product-docs links survive format changes

  ```text
  Homepage Markdown preserves docs, pricing, and quickstart links.
  ```

- **Pass** — The compact guide is independently actionable

  ```text
  AI coding agents quickstart gives concrete steps: init, schema deploy, sample content, dev.
  ```

- **Pass** — Install and next-step links resolve

  ```text
  Fetched install/next-step pages (ai-coding-agents, generate-quickstart, http-reference) all returned 200.
  ```


### Onboarding
- **Pass** — Docs lead to a relevant quickstart

  ```text
  llms.txt and docs nav link quickstarts; AI coding agents page gives 5 concrete setup steps.
  ```

- **Pass** — Installation commands are extractable

  ```text
  Quickstart shows npx/pnpm/yarn/bun init commands plus schema deploy and dev commands.
  ```

- **Pass** — Code examples are available without interaction

  ```text
  Generate quickstart shows full TypeScript client and generate examples inline, no interaction needed.
  ```

- **Pass** — Prerequisites and auth boundaries are explicit

  ```text
  Prerequisites list client/CLI versions, project, and read/write API token; sign-in step explained.
  ```


### Pricing
- **Pass** — Pricing is readable without interaction

  ```text
  Pricing page renders plan cards and full comparison table as static text, no interaction needed.
  ```

- **Pass** — Prices are stated, not gated

  ```text
  Free $0, Growth $15/seat/month, add-ons $799/$299/$999 all stated openly.
  ```

- **Pass** — Pricing units and limits are explicit

  ```text
  Table lists seats, datasets, documents, API requests, bandwidth, AI credits and overage rates.
  ```

- **Pass** — Agents identify pricing and its assumptions

  ```text
  3 of 3 sessions were judged on pricing; 0 fell short. DeepSeek V4.1 Flash: Quoted Free at $0, Growth at $15 per seat per month and Enterprise as custom, with seat and quota limits, pay-as-you-go overages, add-ons and the Growth trial, taken from the fetched pricing page. (seq 17, seq 109) Kimi K3: Pricing pulled from live sanity.io/pricing: Free $0 and Growth $15/seat/mo with seat, dataset, document, request and bandwidth quotas plus overage/add-on rates; figures tied to named plans and limits. (seq 33, seq 44, seq 61) Qwen 3.8 Max: Quoted Free, Base (~$99/mo) and Business (~$599/mo) with free-tier limits, said a demo fits the free tier, and named overage drivers. Prices came from memory, not checked live. (seq 9, seq 28) This behavioural item does not affect the fast grade.
  ```


### Activation
- **Pass** — An API reference or OpenAPI spec is reachable

  ```text
  HTTP API Reference index and reference.sanity.io TypeDoc API reference are reachable.
  ```

- **Pass** — An MCP server is documented and well-formed

  ```text
  MCP server docs detail hosted endpoint, install, OAuth/token auth, and full tool list.
  ```

- **Pass** — A CLI install path is documented

  ```text
  Quickstart documents npx sanity@latest init and CLI commands for install.
  ```

- **Pass** — SDK packages resolve on their registries

  ```text
  npm registry lookups for sanity, @sanity/workflow-cli, and @sanity/blueprints returned HTTP 200.
  ```

- **Pass** — Agent skills are published

  ```text
  Agent toolkit skills (sanity-best-practices references) are published and linked from homepage.
  ```



[Full report data](https://www.ax-check.com/sanity.io/report.json)
