> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pinecone.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Migrate to dedicated read nodes

> Migrate an existing on-demand or pod-based Pinecone index to dedicated read nodes.

## 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](https://docs.pinecone.io/guides/legacy/pod-based-indexes/migrate-a-pod-based-index-to-serverless.md), 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](https://docs.pinecone.io/guides/optimize/dedicated-read-nodes/overview.md#namespace-limits).

## 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](#from-a-pod-based-index)), follow these steps:

**1. Create a backup of your index**

Before migrating, [back up your index](https://docs.pinecone.io/guides/indexes/back-up-an-index.md) so you can return to on-demand later, either by [converting back](https://docs.pinecone.io/guides/optimize/dedicated-read-nodes/manage.md#convert-to-on-demand) or by restoring the backup to a new on-demand index.

**2. Delete extra namespaces**

If your index has multiple namespaces, [delete](https://docs.pinecone.io/reference/api/latest/data-plane/deletenamespace.md) all of them except the one you want to keep. Dedicated read nodes support only a [single namespace](https://docs.pinecone.io/guides/optimize/dedicated-read-nodes/overview.md#namespace-limits).

> [!WARNING]
>
> If this is a production index, be sure to make a [backup](https://docs.pinecone.io/guides/indexes/back-up-an-index.md) before deleting namespaces. Or, if you need multiple namespaces, [contact support](https://app.pinecone.io/organizations/-/settings/support/ticket) to discuss early access to multi-namespace support for dedicated read nodes.

**3. Calculate your index size**

Determine how many [shards](https://docs.pinecone.io/guides/optimize/dedicated-read-nodes/size-and-test.md#number-of-shards) you need by [sizing your index](https://docs.pinecone.io/guides/optimize/dedicated-read-nodes/size-and-test.md#index-size).

**4. Migrate the index**

Call [Configure an index](https://docs.pinecone.io/reference/api/2026-07/control-plane/configure_index.md). In the request body, in the `read_capacity` object, set the following fields:

| Field | Value | Notes |
| :- | :- | :- |
| `mode` | `Dedicated` | |
| `dedicated.node_type` | `b1` or `t1` | See [node types](https://docs.pinecone.io/guides/optimize/dedicated-read-nodes/concepts.md#node-types) |
| `dedicated.scaling` | `Manual` | The only supported value |
| `dedicated.manual.shards` | Number of [shards](https://docs.pinecone.io/guides/optimize/dedicated-read-nodes/size-and-test.md#number-of-shards) needed | Minimum 1 shard; each shard provides 250 GB of storage |
| `dedicated.manual.replicas` | Number of [replicas](https://docs.pinecone.io/guides/optimize/dedicated-read-nodes/size-and-test.md#number-of-replicas) needed | Minimum 0 (this [pauses](https://docs.pinecone.io/guides/optimize/dedicated-read-nodes/manage.md#pause-an-index) the index) |

This example migrates an index to dedicated read nodes using `b1` nodes, one shard, and one replica:

```bash Request expandable theme={null}
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: 2026-07" \
     -d '{
           "read_capacity": {
             "mode": "Dedicated",
             "dedicated": {
               "node_type": "b1",
               "scaling": "Manual",
               "manual": {
                 "shards": 1,
                 "replicas": 1
               }
             }
           }
         }'
```

```jsonc Response expandable theme={null}
{
  "name": "example-index-to-migrate",
  "status": {
    "ready": true,
    "state": "Ready"
  },
  "host": "example-index-to-migrate-1c6ab6aa.svc.aped-4627-b74a.pinecone.io",
  "deployment": {
    "deployment_type": "managed",
    "region": "us-east-1",
    "cloud": "aws",
    "environment": "aped-4627-b74a"
  },
  "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
    }
  },
  "schema": {
    "fields": {
      "_values": { "type": "dense_vector", "dimension": 1024, "metric": "cosine" }
    }
  },
  "deletion_protection": "disabled",
  "tags": null
}
```

The response includes two status fields:

| Field | Description |
| :- | :- |
| **`status.state`** | Overall index status (for example, `Initializing`, `Ready`, `Terminating`) |
| **`read_capacity.status.state`** | Read capacity status (`Migrating`, `Scaling`, `Ready`, `Error`) |

> [!WARNING]
>
> If `status.state` is set to `Error`, the allocated number of shards was insufficient for the size of the index. Try again, adding more shards as needed.

**5. Monitor the migration**

[Check the status](https://docs.pinecone.io/guides/optimize/dedicated-read-nodes/manage.md#check-the-status-of-a-configuration-change) until `read_capacity.status.state` is `Ready`.

**6. Verify performance**

Confirm the index meets your latency and throughput targets.
