n8n-io/n8n · error · NodeOperationError
Index ${index} not found
Error message
Index ${index} not found What it means
NodeOperationError (with remediation description) thrown by the Pinecone vector store when the configured index name does not appear in `client.listIndexes()`. The node enumerates the user's Pinecone indexes and refuses to proceed if the selected one is not among them — this prevents a confusing 404 from Pinecone at query time.
Source
Thrown at packages/@n8n/nodes-langchain/nodes/vector_store/VectorStorePinecone/VectorStorePinecone.node.ts:113
},
async populateVectorStore(context, embeddings, documents, itemIndex) {
const index = context.getNodeParameter('pineconeIndex', itemIndex, '', {
extractValue: true,
}) as string;
const options = context.getNodeParameter('options', itemIndex, {}) as {
pineconeNamespace?: string;
clearNamespace?: boolean;
};
const credentials = await context.getCredentials('pineconeApi');
const client = new Pinecone({
apiKey: credentials.apiKey as string,
});
const indexes = ((await client.listIndexes()).indexes ?? []).map((i) => i.name);
if (!indexes.includes(index)) {
throw new NodeOperationError(context.getNode(), `Index ${index} not found`, {
itemIndex,
description: 'Please check that the index exists in your vector store',
});
}
const pineconeIndex = client.Index(index);
if (options.pineconeNamespace && options.clearNamespace) {
const namespace = pineconeIndex.namespace(options.pineconeNamespace);
try {
await namespace.deleteAll();
} catch (error) {
// Namespace doesn't exist yet
context.logger.info(`Namespace ${options.pineconeNamespace} does not exist yet`);
}
}
await PineconeStore.fromDocuments(documents, embeddings, {View on GitHub (pinned to 5ac6606e81)
Solutions
- Open the Pinecone console and confirm the index exists and is `Ready`.
- Pick the index from the node's dropdown (which calls listIndexes) instead of typing the name.
- Verify the API key credential corresponds to the same project that owns the index.
- Recreate the index if it was deleted, then re-run.
Example fix
// before
const indexes = ((await client.listIndexes()).indexes ?? []).map((i) => i.name);
if (!indexes.includes(index)) {
throw new NodeOperationError(context.getNode(), `Index ${index} not found`, {
itemIndex,
description: 'Please check that the index exists in your vector store',
});
}
// after: list available indexes and check Ready state
const indexList = (await client.listIndexes()).indexes ?? [];
const names = indexList.map((i) => i.name);
if (!names.includes(index)) {
throw new NodeOperationError(context.getNode(), `Index ${index} not found`, {
itemIndex,
description: `Available indexes: ${names.join(', ') || 'none'}. Create the index in Pinecone if missing.`,
});
}
const status = indexList.find((i) => i.name === index)?.status;
if (status?.ready === false) {
throw new NodeOperationError(context.getNode(), `Index ${index} is not ready (state: ${status.state})`, { itemIndex });
} Defensive patterns
Strategy: validation
Validate before calling
// Pre-flight: confirm the index exists and is Ready before the workflow runs.
async function ensurePineconeIndex(client: Pinecone, name: string): Promise<void> {
const list = (await client.listIndexes()).indexes ?? [];
const match = list.find((i) => i.name === name);
if (!match) throw new Error(`Index ${name} not found. Available: ${list.map((i) => i.name).join(', ')}.`);
if (match.status?.ready === false) throw new Error(`Index ${name} not ready (state: ${match.status.state}).`);
} Type guard
function indexExists(names: string[], target: string): boolean {
return names.some((n) => n === target);
} Try / catch
const indexes = ((await client.listIndexes()).indexes ?? []).map((i) => i.name);
if (!indexExists(indexes, index)) {
throw new NodeOperationError(context.getNode(), `Index ${index} not found`, {
itemIndex,
description: `Available: ${indexes.join(', ') || 'none'}. Create the index in Pinecone if missing.`,
});
} Prevention
- Pick the index from the dropdown (which calls listIndexes) rather than typing the name.
- Verify the API key belongs to the same project as the index.
- Watch for free-tier auto-deletion after long inactivity.
When it happens
Trigger: Index name typed manually and misspelled; index was deleted in the Pinecone console after the workflow was saved; index is in a different project/region than the API key; index still being created (Pinecone reports `Ready: false`).
Common situations: Pinecone free-tier index auto-deleted after inactivity; wrong API key environment selected; region mismatch; index name has different casing (`MyIndex` vs `myindex`).
Related errors
- Index ${mongoVectorIndexName} not found
- Redis client not initialized
- Index ${credentials.pineconeIndex} not found
- Collection must be a string
- Error connecting to ChromaDB: ${message}
AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12).
Data as JSON: /api/errors/d1be5a3ae7538729.
Report an issue: GitHub.