The Content Operating System for the AI era | Sanity Skip to content 🗓️ Everything *[NYC] is back. A free gathering for AI builders. Sept 9 → Products Content operations Studio Content Agent App SDK Media Library Content Releases Agent API Content backend Content Lake Sanity Context MCP Server Functions Live CDN The only platform powering content operations Start building for free Solutions By Industry E-commerce & Retail Media & Publishing SaaS By Team Developers Content Editors Product Owners Business Leaders Tecovas strengthens their customer connections Read the story Resources Build and Share Sanity 101 Sanity Learn Pioneers Frameworks Templates Tools and plugins Schemas and snippets Join our community Insight Blog Events Customer stories Guides Grab your gear: The official Sanity swag store Read Grab your gear: The official Sanity swag store Docs Enterprise Pricing Log in Contact Sales Get started The Content Operations Platform Power content applications and AI workflows at scale. Every application, one platform. Start building Watch demo npm create sanity@latest Trusted by leaders and innovators Trusted by leaders and innovators Mirror how your content operations team works PROD Home About Shop Login Cart [1] Page title Page description goes here hero.ts terminal import {defineField, defineType} from 'sanity' export const heroType = defineType ({ name: 'hero' , title: 'Hero' , type: 'document' , fields: [ defineField ({ name: 'title' , title: 'Title' , type: 'string' , validation : ( Rule ) => Rule. required (), }), defineField ({ name: 'description' , title: 'Description' , type: 'text' , rows: 3 , }), defineField ({ name: 'image' , title: 'Image' , type: 'image' , options: { hotspot: true , }, fields: [ { name: 'alt' , type: 'string' , title: 'Alternative text' , description: 'Important for SEO and accessibility.' , }, ], }), ], preview: { select: { title: 'title' , subtitle: 'description' , media: 'image' , }, }, }) Tap to interact Click to interact Studio / Homepage / Hero Title Description Your tools shouldn't dictate how you work. Sanity's structured content and fully configurable Studio let you model your entire content platform around your business. Image No changes yet Publish Tap to interact Click to interact History Sanity stores revisions for every document. No changes yet Tap to interact Click to interact New Content Release Set publishing date Documents Action Locale: US-ES add Locale: EU-FR add Site nav bar change Ai Context Promo publish Run Release Tap to interact Click to interact Content Operations without the busywork Agent actions, functions, and content agents automate manual work before and after hitting publish. Update References Translate with AI Delegate from elsewhere Look up all products look up all blog posts find posts missing translations focus on content from the last 2 weeks Sanity Studio Just now @ Jason published a new product: ST07 Winter Jacket Trigger import {documentEventHandler} from '@sanity/functions' import {createClient} from '@sanity/client' const STOREFRONT_WEBHOOK = process.env. STOREFRONT_WEBHOOK_URL export const handler = documentEventHandler ( async ({ context , event }) => { const { data } = event if ( ! STOREFRONT_WEBHOOK ) { console. error ( '❌ STOREFRONT_WEBHOOK_URL not found in environment variables' ) return } const client = createClient ({ ... context.clientOptions, apiVersion: '2025-06-01' , }) // Find every document that references the published product const referencing = await client. fetch ( `*[references($id)]{ _id, _type, title, "slug": slug.current }` , {id: data._id}, ) if ( ! referencing. length ) { console. log ( `📭 No references found for ${ data . _id }` ) return } console. log ( `🔗 Found ${ referencing . length } documents referencing ${ data . _id }` ) // Notify the storefront so it can rebuild affected pages try { const response = await fetch ( STOREFRONT_WEBHOOK , { method: 'POST' , import {documentEventHandler} from '@sanity/functions' import {createClient} from '@sanity/client' const STOREFRONT_WEBHOOK = process.env. STOREFRONT_WEBHOOK_URL export const handler = documentEventHandler ( async ({ context , event }) => { const { data } = event if ( ! STOREFRONT_WEBHOOK ) { console. error ( '❌ STOREFRONT_WEBHOOK_URL not found in environment variables' ) return } const client = createClient ({ ... context.clientOptions, apiVersion: '2025-06-01' , }) // Find every document that references the published product const referencing = await client. fetch ( `*[references($id)]{ _id, _type, title, "slug": slug.current }` , {id: data._id}, ) if ( ! referencing. length ) { console. log ( `📭 No references found for ${ data . _id }` ) return } console. log ( `🔗 Found ${ referencing . length } documents referencing ${ data . _id }` ) // Notify the storefront so it can rebuild affected pages try { const response = await fetch ( STOREFRONT_WEBHOOK , { method: 'POST' , Function Update Products Update Categories Update blogs n032232 n3900-22 n05053 Bags Shoes Something else blog post 1 blog post 2 blog post 3 Learn More → Output Trigger Function Output Sanity Studio Just now @ Jason published a new product: ST07 Winter Jacket Power anything. One API, every platform Turn your content into a governed knowledge layer that powers applications and AI agents. sanity context Marketing Bot [ click to chat ] status: sanity context Current Context: learn, docs HOW DO I SET UP SANITY CONTEXT? HOW DO I CONNECT NEXT.JS TO SANITY? WHAT CAN I AUTOMATE WITH FUNCTIONS? status: enabled Learn More → sanity context Pricing Bot [ click to chat ] status: Everything your team needs in one place 0 1 Content-as-data 0 2 Editorial freedom 0 3 Content agent 0 4 Automation at scale 0 5 Power any application The database optimized for content operations Store any valid JSON document, with schemas living in your Sanity Studio configuration, not as database constraints. Schema as code Query anything Update with precision Manage different environments content lake Content workflows that mirror how you work Enable creative freedom with infinitely customizable workflows. A modern content studio Custom content applications with App SDK Preview content in context Content releases with precision Multiplayer-editing for teams Sanity Studio An agent to run content operations at scale The first content agent that knows your content, so you can action with accuracy at scale. Transform source materials into structured content Audit and edit content at scale Edit visuals with natural language Research trends and topics Prepare changes for revision Content Agent Programmable automation Automate content operations, from AI enrichment to syncing with any system, triggered by any mutation in your dataset. Event driven automation Full access to your content Any possible “If this, then that” combination Agent Actions for schema-aware AI automations Write once, use everywhere Agent actions Power web, mobile, or your own agent Now, with Sanity you can power not only web and content applications but your own agents. Structured data that powers intelligence. Structured content to agentic reasoning Build your own customer-facing or internal agents Agentic workflows Or power any web surface or content application Sanity Context Loved by 1M+ users and 6k+ teams 0 1 0 2 0 3 0 0 custom APIs 300% Faster release cycles 90% of updates owned by the content team 5x faster dev velocity 144x faster product launches 10k products updated in 30 seconds 80 hours saved per month 60 lines of code Zero added services “ Lady Gaga’s team had never used a CMS before. Now they are logging into Sanity and using Sanity Studio to make updates on their own. ” Melody Yung Creative Lead & Founder at Yung Studio “ I want to build tools and systems where I never have to say 'no, I can't do that.' The question becomes 'should we do that?' And if yes, we have the stack and the ability to go do it. ” Kevin Harwood CTO at T