What the changelog says, and what it doesn't
The October 2026 Agent API entry I read says a list of older models "are no longer listed in the Agent API model docs, pricing calculator, or examples."1 The ids it names are Anthropic (claude-opus-4-8 down to claude-haiku-4-5), Google (gemini-3-flash-preview, gemini-3.5-flash and others) and xAI (grok-4.3, the grok-4.20 variants). No OpenAI id appears in that entry. The page text I received was truncated, so I can't rule out another entry that covers older OpenAI ids.
Two things follow. First, "no longer listed" is a documentation statement. The entry does not say requests naming those ids now return errors. Perplexity is explicit when behavior changes elsewhere: it says old Decisions API ids "continue to work" and select the new model, and that the undocumented ultra effort name "now returns an error."1 The model-removal entry says neither. Second, if you reach OpenAI models through Perplexity, the only safe assumption is that any id missing from the current table may stop resolving, and you should verify by replay.
Which OpenAI ids are listed today
The Agent API models page currently lists these OpenAI ids: openai/gpt-6.1-sol, openai/gpt-6-astra, openai/gpt-6-sol, openai/gpt-6-luna, openai/gpt-5.6-sol, openai/gpt-5.6-terra, openai/gpt-5.6-luna and openai/gpt-5.5.2 Anything your logs show that is not on that list is a candidate for breakage. If you call through the OpenAI SDK pointed at Perplexity's base URL, the model string is still one of these prefixed ids, so the same audit applies.3
The table below pairs tiers by name only. It is a starting point for testing, not a statement that the models behave alike. Rates are Perplexity's published per-million-token rates, which the page says may differ from provider list prices.2
| Tier | Listed ids | Input / output per 1M (up to 272k input) |
|---|---|---|
| Small | openai/gpt-6-luna, openai/gpt-5.6-luna | $0.10 / $0.50 and $0.20 / $1.20 |
| Mid | openai/gpt-6-sol, openai/gpt-6.1-sol, openai/gpt-5.6-terra | $2.00 / $10.00 for the first two; $2.00 / $12.00 for terra |
| Large | openai/gpt-5.6-sol, openai/gpt-5.5, openai/gpt-6-astra | $4.00 / $20.00; $5.00 / $30.00; $10.00 / $50.00 |
Find the affected ids in your logs
Your own request log is the quickest inventory, because it shows what your applications really send. If you go through a gateway, list recent failed requests, count model ids, and diff them against the table above. INFRO's request API pages through history with limit, a status filter and a next_cursor.4 The field name for the model is an assumption in this sketch, so check it against a real record.
import os, collections, requests
LISTED = {
"openai/gpt-6.1-sol", "openai/gpt-6-astra", "openai/gpt-6-sol",
"openai/gpt-6-luna", "openai/gpt-5.6-sol", "openai/gpt-5.6-terra",
"openai/gpt-5.6-luna", "openai/gpt-5.5",
}
url = "https://api.infro.io/v1/requests"
headers = {"Authorization": f"Bearer {os.environ['INFRO_API_KEY']}"}
params = {"limit": 100, "status": "error"}
counts = collections.Counter()
while True:
page = requests.get(url, headers=headers, params=params).json()
for r in page["data"]:
counts[r.get("model", "unknown")] += 1 # confirm field name
if not page.get("has_more"):
break
params["after"] = page["next_cursor"]
for model, n in counts.most_common():
flag = "" if model in LISTED else " <-- not in current table"
print(f"{n:6d} {model}{flag}")Run it a second time without the error filter. A model id that never errors but is absent from the table is still on borrowed time, and you want to know it before it fails. Also grep your code and config for the strings, since scheduled jobs may not appear in a short log window.
Set a fallback so a removed id fails over
Perplexity's Agent API takes a models array of up to five ids and tries them in order until one succeeds; the array takes precedence over model.5 Put the mapped current id first, a second tier or vendor behind it, and include max_output_tokens if any anthropic/* id is in the chain, because those requests are rejected with HTTP 400 without it.2
from perplexity import Perplexity
client = Perplexity()
response = client.responses.create(
models=["openai/gpt-6.1-sol", "openai/gpt-5.6-terra", "anthropic/claude-sonnet-5-5"],
input="Summarize this ticket in two sentences.",
max_output_tokens=2048,
)
print(response.model) # which id actually answeredLog response.model on every call. A fallback that fires silently changes your quality and your bill, and you want that visible. One caveat: if you set a service_tier, the API applies flex or priority only when every model in the list supports it, otherwise it ignores the tier and uses default processing.2
If you sit behind a gateway, INFRO's fallbacks array does the same job one layer up, but with different rules: it takes up to five catalog model ids, applies only when model names a model rather than a route, and tries them over your own connections.6 Its own refusals, such as an unknown model (404) or an allowlist block (403), return immediately with no failover, while an upstream 400, 404 or 5xx moves on to the next connection.6 Check which of those your removed id produces before you rely on the chain.
Before you ship the mapping
- Replay a sample of real prompts against the replacement id and compare output length, tool-call behavior and cost; a "same tier" model is not the same model.
- Pin an effort version if you use effort levels. Dynamic levels change their underlying model, for example
highmoved to a different OpenAI model in the October entry, and a pinned value likefast@2026-10-16.0keeps one released configuration.7 - Re-read the models page and changelog on a schedule. Both change often, and this brief reflects what they said on 1 November 2026.
