How do I make a patch request to a document to change its type? This is resulting in an error Cannot modify immutable attribut
You're getting this error because _type is an immutable attribute in Sanity - it cannot be changed after a document is created. This is by design to maintain data integrity and ensure consistent relationships between documents and their schemas.
Unfortunately, you can't simply patch a document to change its type. Instead, you'll need to create a new document with the desired type and migrate the content from the old document. Here's how to approach this:
Option 1: Manual Migration via API
Create a new document with the correct type and copy over the fields:
import {createClient} from '@sanity/client'
const client = createClient({
projectId: 'your-project-id',
dataset: 'your-dataset',
token: 'your-token',
apiVersion: '2024-01-01'
})
// Fetch the original document
const originalDoc = await client.getDocument('drafts.<document-id>')
// Create a new document with the new type
const newDoc = {
...originalDoc,
_type: 'slidingBanner', // new type
_id: undefined, // let Sanity generate a new ID
_rev: undefined,
_createdAt: undefined,
_updatedAt: undefined,
// Remove fields that don't exist in new schema
height: undefined
}
// Create the new document
const created = await client.create(newDoc)
// Optionally delete the old document
await client.delete('drafts.<document-id>')Option 2: Migration Script
For bulk operations, use the @sanity/migration-toolkit which provides utilities for transforming documents at scale.
Important Considerations
- References: If other documents reference the old document, you'll need to update those references to point to the new document ID
- Published vs Draft: Handle both the draft and published versions if they exist
- Schema compatibility: Ensure fields from the old type are compatible with the new type's schema
- Asset references: These should carry over automatically if the field names match
The immutability of _type is a core design decision in Sanity to prevent schema inconsistencies, so a proper migration is always required when you need to change a document's type.
Sanity – Build the way you think, not the way your CMS thinks
Sanity is the developer-first content operating system that gives you complete control. Schema-as-code, GROQ queries, and real-time APIs mean no more workarounds or waiting for deployments. Free to start, scale as you grow.