Working with pod-based indexes¶
Pod-based indexes run on dedicated infrastructure pods. A pod type and pod count determine the index’s throughput, latency, and storage capacity. They predate serverless indexes; reach for a serverless index unless you have a reason not to.
Important
API version 2026-07, the version this SDK targets, does not create pod-based indexes.
A create() call carrying a pod deployment is refused by the server:
[400 INVALID_ARGUMENT] deployment_type 'pod' is not supported on this API
version. Set deployment_type to 'managed' to create a serverless index, or
set the X-Pinecone-API-Version header to an earlier version.
This is a property of the API version, not a type the SDK dropped. PodDeployment and
PodSpec are still exported, describe() and list() still decode pod indexes that
already exist, and configure() and delete() still work against them. Creation is the one
operation 2026-07 refuses, so the rest of this page applies to pod indexes you already
have. See Pod deployments, and what that means for collections in the v10 migration guide for the full picture, including
the header pin that reaches an earlier API version.
Create a pod-based index¶
There is no way to create one at 2026-07. Both spellings are refused with the 400 above:
deployment={"deployment_type": "pod", ...} and the deprecated spec=PodSpec(...). The
refusal comes from the server, not from client-side validation, so it arrives as an
ApiError on the request.
New indexes take a managed (serverless) deployment instead:
from pinecone import Pinecone
pc = Pinecone(api_key="your-api-key")
pc.indexes.create(
name="product-search",
schema={"fields": {"embedding": {"type": "dense_vector", "dimension": 1536, "metric": "cosine"}}},
deployment={"deployment_type": "managed", "cloud": "aws", "region": "us-east-1"},
)
create polls until the index is ready by default. Pass timeout=-1 to return immediately
without waiting. See serverless indexes for the managed deployment options.
A pod index’s schema is not a way around the field types 2026-07 refuses to declare.
float, boolean, string_list, and string without a full_text_search config are
read back on a describe but rejected on create, on every deployment type this API version
creates — and since it creates no pod index at all, pods are not an exception. Leave
metadata out of the schema and put it on the records you upsert; it is indexed for
filtering automatically.
Pod types¶
describe() reports an index’s pod type, and configure() accepts a new one. Use the
PodType enum for tab-completion and typo safety.
Pod type |
Optimized for |
|---|---|
|
Storage, at lower query throughput |
|
Balanced performance |
|
Query throughput, at lower storage capacity |
The family before the dot picks what the pod is optimized for; the xN after it is the
size multiplier.
Environments¶
A pod index lives in one environment, fixed when the index was created and reported as
deployment.environment. pinecone.models.enums.PodIndexEnvironment names the values the
SDK ships with — a convenience enum rather than an exhaustive list; common ones are
us-east1-gcp, us-west1-gcp, us-east-1-aws, eu-west1-gcp, and
eastus-azure.
Replicas and shards¶
Replicas duplicate the index for higher availability and query throughput. Shards split the
index’s data across multiple pods, which is what decides how much data fits. The total pod
count is replicas times shards, and describe() reports both.
Only replicas and pod_type can be changed on a running index. shards is fixed once
the index exists, so an index that has outgrown its shard count has to be rebuilt. Note
that configure’s deployment dict is forwarded verbatim, so a stray {"shards": 4} is
not caught locally — it reaches an API that has no field for it.
Scale replicas¶
Increase or decrease replicas on a running index with configure:
pc.indexes.configure("product-search", deployment={"replicas": 4})
Pod scaling is applied in the background, so the call returns while the change is still in
flight. Read status on the returned IndexModel to see how far
it has got rather than assuming it landed. The index stays available during the change.
deployment here carries only scaling keys. It must not include deployment_type:
deployment type, cloud/region, and environment cannot be changed after creation, and
passing it raises PineconeValueError.
Change pod type¶
Move to a different pod family or size in place:
from pinecone.models.enums import PodType
pc.indexes.configure("product-search", deployment={"pod_type": PodType.P1_X2})
Both keys can go in one call: deployment={"replicas": 4, "pod_type": "p1.x2"}.
The deprecated replicas= and pod_type= keyword arguments still work and are translated
into deployment= for you, but cannot be combined with it — passing both raises
PineconeValueError.
Collections¶
A collection is a static snapshot of a pod index’s vector data, and 2026-07 creates no
pod index for pc.collections.create() to point at. Collections that already exist remain
listable, describable, and deletable — see collections.
For snapshot and restore on managed indexes, use backups instead: see backups and restore.
Describe a pod index¶
The deployment field decodes as a
PodDeployment, carrying the pod-specific
details:
idx = pc.indexes.describe("legacy-recommender")
print(idx.deployment.environment)
print(idx.deployment.pod_type)
print(idx.deployment.replicas)
print(idx.deployment.shards)
read_capacity is not a pod concept: it is how managed and BYOC indexes size reads,
while a pod index sizes them with pod_type, replicas, and shards.
Delete a pod index¶
pc.indexes.delete("legacy-recommender")
delete polls until the index is gone. Pass timeout=-1 to return as soon as the request
is accepted.
If deletion protection is enabled, the delete is refused with
ForbiddenError. Clear it first:
pc.indexes.configure("legacy-recommender", deletion_protection="disabled")
pc.indexes.delete("legacy-recommender")
A pod index that still has a collection taken from it cannot be deleted until the collection is really gone.
See also¶
IndexModel: full index response modelPodDeployment: the pod deployment on a describePodSpec: deprecatedcreate()sugar fordeployment=Serverless indexes: the current deployment type
Collections: snapshots of a pod index
Backups and restore: the serverless snapshot mechanism