Get the context's manifest
The context's pinned manifest document. A context that pins nothing returns null — the runtime fills defaults. Writes go through the manifest field on PUT /contexts/{slug}.
GET /contexts/{slug}/manifest
curl --request GET \
--url https://{host}/api/contexts/{slug}/manifest \
--header 'Authorization: Bearer <token>' \
--header 'X-Pinecone-Api-Version: <x-pinecone-api-version>'import requests
url = "https://{host}/api/contexts/{slug}/manifest"
headers = {
"Authorization": "Bearer <token>",
"X-Pinecone-Api-Version": "<x-pinecone-api-version>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: "GET", headers: {"Authorization": "Bearer <token>", "X-Pinecone-Api-Version": "<x-pinecone-api-version>"}};
fetch("https://{host}/api/contexts/{slug}/manifest", options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{host}/api/contexts/{slug}/manifest",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"X-Pinecone-Api-Version: <x-pinecone-api-version>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{host}/api/contexts/{slug}/manifest"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("X-Pinecone-Api-Version", "<x-pinecone-api-version>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{host}/api/contexts/{slug}/manifest")
.header("Authorization", "Bearer <token>")
.header("X-Pinecone-Api-Version", "<x-pinecone-api-version>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{host}/api/contexts/{slug}/manifest")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
request["X-Pinecone-Api-Version"] = '<x-pinecone-api-version>'
response = http.request(request)
puts response.read_body{
"curate": {
"chunks": {
"enabled": true,
"embedding_model": "<string>",
"chunking": {
"strategy": null,
"target_size": null,
"overlap": null,
"respect_sections": null
},
"keyword": {
"enabled": null
}
},
"artifacts": {
"enabled": true,
"artifact_model": "<string>",
"artifact_types": [
null
],
"edge_types": [
null
],
"min_doc_count": 123,
"max_tokens": 123,
"max_doc_chars": 123,
"extraction_window_chars": 123,
"mention_max_chars": 123,
"max_mentions_per_artifact": 123,
"mention_context_chars": 123,
"max_artifacts_per_type": 123
}
},
"optimize": {
"schedule": "<string>",
"latency_threshold_ms": 123,
"min_group_size": 123,
"eval_pass_rate_threshold": 123,
"max_iterations": 123
},
"search": {
"instructions": "<string>"
}
}{
"message": "<string>",
"code": "<string>"
}Authorizations
Section titled “Authorizations”AuthorizationstringrequiredSession token from POST /auth/login, sent as Authorization: Bearer <token>.
Headers
Section titled “Headers”X-Pinecone-Api-Version?stringDate-based contract version, echoed back on the same header. Omit for the default (2026-07); send unstable for the in-development surface. An unrecognized value is rejected with 400 unsupported_api_version.
Path Parameters
Section titled “Path Parameters”slugstringrequiredContext slug or UUID.
Response
Section titled “Response”200 — The manifest document, or null when the context pins none
The pinned manifest, or null when the context pins none.
curate?objectWhat curate builds out of the sources — the chunk leg, the artifact leg, or both.
Show child attributes
chunks?objectThe chunk leg — sources split into passages, embedded for semantic search and optionally indexed for keyword search.
Show child attributes
enabled?booleanWhether curate builds the chunk leg at all.
embedding_model?stringModel that embeds the chunks.
Required string length: 0 - 128
chunking?objectHow a source is cut into chunks.
Show child attributes
strategy?stringWhich structure the splitter cuts on — markdown headings, fixed-size windows, HTML elements, CSV rows, or code syntax. Pick the one that matches the corpus.
target_size?integerChunk size the splitter aims for, in tokens. Smaller chunks retrieve more precisely; larger ones carry more surrounding context.
Required range: 64 <= x <= 4096
overlap?integerTokens each chunk repeats from its predecessor, so a passage split across a boundary is still retrievable whole.
Required range: 0 <= x <= 1024
respect_sections?booleanNever cut across a section boundary, even when that leaves a chunk short of target_size.
keyword?objectThe lexical index built alongside the vectors, for exact-term matching.
Show child attributes
enabled?booleanWhether the lexical index is built.
artifacts?objectThe artifact leg: knowledge an LLM distills out of the sources, as prose files or database rows. Off by default.
Show child attributes
enabled?booleanWhether curate extracts artifacts at all.
artifact_model?stringModel tier that does the extraction. standard reads more carefully at a higher token cost.
artifact_types?object[]What kinds of artifact to extract. Nothing is extracted until at least one is declared.
Show child attributes
namestringrequiredWhat the type is called. Edge endpoints reference it, and a sqlite type's table is named after it.
Required string length: 0 - 64
kind?stringWhat the artifact represents, which selects the extraction prompt. glossary is the exception — it reads the headings named in sections deterministically, with no LLM call.
scope?stringHow widely the extraction reaches. document extracts one artifact per source; corpus reduces mentions from across every source into one artifact per subject.
icon?stringSymbol to display beside artifacts of this kind.
Required string length: 0 - 64
description?stringWhat this type should capture. Goes into the extraction prompt, so it steers the result.
Required string length: 0 - 512
coverage?string[]Topics the extraction is told to address wherever the source speaks to them.
sections?string[]Exact section headings a glossary-kind type reads verbatim. Ignored by every other kind.
min_doc_count?integerOverrides the manifest-level min_doc_count for this type.
Required range: 1 <= x <= 64
format?stringWhere the artifacts of this type are written — markdown a prose file each, sqlite rows in the context's structured database.
columns?object[]Table schema for a sqlite-format type. Ignored for markdown. Two names that normalize to the same column collide, and the first declaration wins.
natural_key?string[]Columns that identify a row uniquely, so re-curating a source upserts its rows rather than duplicating them. sqlite-format types only.
edge_types?object[]Typed, directed relationships between artifact types, which turn the artifacts into a graph the agent can traverse.
Show child attributes
namestringrequiredWhat the relationship is called, e.g. mentions.
Required string length: 0 - 64
fromstringrequiredSource artifact-type name. May equal to for a self-referential edge.
Required string length: 0 - 64
tostringrequiredTarget artifact-type name
Required string length: 0 - 64
description?stringWhat the relationship means. Steers the extraction that finds it.
Required string length: 0 - 512
attributes?string[]Extra properties recorded on each edge, e.g. count.
min_doc_count?integerHow many source documents must mention a corpus-scoped subject before it earns an artifact. Raise it to suppress one-off mentions. An artifact type may override it.
Required range: 1 <= x <= 64
max_tokens?integerOutput cap for one extracted artifact, in tokens.
Required range: 128 <= x <= 8192
max_doc_chars?integerInput cap for one extraction call, in characters. With windowing off this also caps how much of a source is read at all; everything beyond it is dropped.
Required range: 1000 <= x <= 2000000
extraction_window_chars?integerWindow size for walking a long source across several extraction calls, so its back half is covered rather than dropped. 0 opts out and reads only the head, up to max_doc_chars.
Required range: 0 <= x <= 1000000
mention_max_chars?integerCap on one recorded mention — what a single document says about the subject — in characters.
Required range: 100 <= x <= 4000
max_mentions_per_artifact?integerHow many mentions are fed into the pass that reduces them into one corpus-wide artifact.
Required range: 1 <= x <= 500
mention_context_chars?integerCap on those mentions once concatenated, in characters. Applied after max_mentions_per_artifact.
Required range: 1000 <= x <= 100000
max_artifacts_per_type?integerHow many artifacts one type may produce. Omit for no cap.
Required range: 1 <= x <= 10000
optimize?objectThe scheduled self-tuning loop: it clusters the queries that answered badly and tries candidate manifests against an ephemeral index until one reproduces the recorded answers.
Show child attributes
schedule?stringCron expression the tuning loop runs on.
Required string length: 0 - 128
latency_threshold_ms?integerA query slower than this counts as a problem worth tuning for, as does any query that fell back from artifacts to chunks. 0 disables the latency test, leaving only fallback.
Required range: 0 <= x <= 600000
min_group_size?integerHow many near-duplicate problem queries must cluster together before the loop tunes for them. Keeps a one-off slow query from triggering a manifest change.
Required range: 1 <= x <= 100
eval_pass_rate_threshold?numberFraction of eval queries a candidate manifest must answer correctly to be considered ready. 1 demands all of them.
Required range: 0 <= x <= 1
max_iterations?integerHow many candidate manifests the loop tries before stopping with its best.
Required range: 1 <= x <= 100
search?objectStanding instructions for the query runtime, pinned on the context rather than sent per turn.
Show child attributes
instructions?stringThe context's default system prompt, applied to every turn in scope. A session's own system_prompt appends to it rather than replacing it.