Migrate to dedicated read nodes
Migrate an existing on-demand or pod-based Pinecone index to dedicated read nodes.
From a pod-based index
Section titled “From a pod-based index”You can't migrate a pod-based index directly to dedicated read nodes. First complete Migrate a pod-based index to serverless, which creates a new on-demand index with your data.
If that index has multiple namespaces, consolidate to one namespace, or plan a different architecture. Dedicated read nodes support only a single namespace.
From an on-demand (serverless) index
Section titled “From an on-demand (serverless) index”To migrate an existing on-demand index to dedicated read nodes (including one you created by migrating from pods), follow these steps:
Create a backup of your index
Before migrating, back up your index so you can return to on-demand later, either by converting back or by restoring the backup to a new on-demand index.
Delete extra namespaces
If your index has multiple namespaces, delete all of them except the one you want to keep. Dedicated read nodes support only a single namespace.
Calculate your index size
Determine how many shards you need by sizing your index.
Migrate the index
Call Configure an index. In the request body, in the
spec.serverless.read_capacityobject, set the following fields:Field Value Notes modeDedicateddedicated.node_typeb1ort1See node types dedicated.scalingManualThe only supported value dedicated.manual.shardsNumber of shards needed Minimum 1 shard; each shard provides 250 GB of storage dedicated.manual.replicasNumber of replicas needed Minimum 0 (this pauses the index) This example migrates an index to dedicated read nodes using
b1nodes, one shard, and one replica:Request PINECONE_API_KEY="YOUR_API_KEY" INDEX_NAME="YOUR_INDEX_NAME" curl -X PATCH "https://api.pinecone.io/indexes/$INDEX_NAME" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Api-Key: $PINECONE_API_KEY" \ -H "X-Pinecone-Api-Version: 2025-10" \ -d '{ "spec": { "serverless": { "read_capacity": { "mode": "Dedicated", "dedicated": { "node_type": "b1", "scaling": "Manual", "manual": { "shards": 1, "replicas": 1 } } } } } }'Response { "name": "example-index-to-migrate", "vector_type": "dense", "metric": "cosine", "dimension": 1024, "status": { "ready": true, "state": "Ready" }, "host": "example-index-to-migrate-1c6ab6aa.svc.aped-4627-b74a.pinecone.io", "spec": { "serverless": { "region": "us-east-1", "cloud": "aws", "read_capacity": { "mode": "Dedicated", "dedicated": { "node_type": "b1", "scaling": "Manual", "manual": { "shards": 1, // <---- desired state "replicas": 1 } }, "status": { "state": "Migrating", "current_shards": null, //<---- current state "current_replicas": null } } } }, "deletion_protection": "disabled", "tags": null, "embed": { "model": "llama-text-embed-v2", "field_map": { "text": "text" }, "dimension": 1024, "metric": "cosine", "write_parameters": { "dimension": 1024, "input_type": "passage", "truncate": "END" }, "read_parameters": { "dimension": 1024, "input_type": "query", "truncate": "END" }, "vector_type": "dense" } }The response includes two status fields:
Field Description status.stateOverall index status (for example, Initializing,Ready,Terminating)spec.serverless.read_capacity.status.stateRead capacity status ( Migrating,Scaling,Ready,Error)Monitor the migration
Check the status until
spec.serverless.read_capacity.status.stateisReady.Verify performance
Confirm the index meets your latency and throughput targets.