List the selectable query models
What the model field on POST /query draws from: the default, every catalog entry, the tier → model-id map, per-phase defaults, and the curate-capable ids. Only entries with available: true are selectable; the rest are rejected with 400.
GET /models
curl --request GET \
--url https://{host}/api/models \
--header 'Authorization: Bearer <token>' \
--header 'X-Pinecone-Api-Version: <x-pinecone-api-version>'import requests
url = "https://{host}/api/models"
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/models", 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/models",
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/models"
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/models")
.header("Authorization", "Bearer <token>")
.header("X-Pinecone-Api-Version", "<x-pinecone-api-version>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{host}/api/models")
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{
"default": "<string>",
"models": [
{
"id": "<string>",
"label": "<string>",
"provider": "<string>",
"available": true
}
],
"tiers": {},
"phase_defaults": {},
"supported_curate_models": [
"<string>"
],
"query_defaults": {
"max_steps": {},
"thinking_levels": [
"<string>"
],
"thinking_level": "<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.
Response
Section titled “Response”200 — The model catalog
The models this deployment can run, and the defaults it resolves.
defaultstringrequiredModel id used when model is omitted
modelsobject[]requiredEvery catalog entry, selectable or not.
Show child attributes
idstringrequiredCatalog model id, passed as model on POST /query. Some carry a vendor prefix and some do not, so treat it as opaque.
labelstringrequiredDisplay name.
providerstringrequiredWho serves the model.
availablebooleanrequiredWhether the model can be selected. An unavailable one is rejected with 400.
tiersobjectrequiredTier (lite/standard/pro) → resolved model id. A tier name is accepted anywhere a model id is, so a caller can ask for standard and let the deployment choose.
phase_defaultsobjectrequiredWorkflow phase → the model id or tier name that phase defaults to.
supported_curate_modelsstring[]requiredModel ids the curate runtime accepts — a subset of the catalog, since curate reads the whole corpus and is priced accordingly.
query_defaultsobjectrequiredThe per-turn harness values a turn runs with when the request sets none.
Show child attributes
max_stepsobjectrequiredWorkflow selector → its agentic tool-loop step cap. Keyed by the same selectors POST /query accepts, since each runs a different loop.
thinking_levelsstring[]requiredEvery accepted thinking_level, ascending. A value outside this list is rejected with 400.
thinking_levelstringrequiredThe level a turn runs at when the request omits one.