If you pick Goose's built-in Perplexity provider and every chat dies with Request failed: Resource not found (404), it's not your API key and it's probably not Perplexity being flaky. The preset ships pointing at a URL that doesn't exist.
What actually happens
People started hitting this in Goose 1.47.0, in both the desktop app and the CLI. The error is the same everywhere:
Request failed: Resource not found (404) at https://api.perplexity.ai/v1/chat/completions
The problem is in that URL. Goose's Perplexity preset is built on the generic OpenAI engine with base URL https://api.perplexity.ai, and that engine appends /v1/chat/completions to whatever base you give it. That's correct for OpenAI and most of its clones. It's wrong for Perplexity, whose OpenAI-compatible chat endpoint is:
https://api.perplexity.ai/chat/completions
No /v1. Perplexity's /v1 namespace is where the newer stuff lives (the Agent API, the newer Sonar routes), and none of it serves /v1/chat/completions. So the preset's requests hit a path that was never there, and instead of a model reply you get a 404.
Prove it yourself
You don't need Goose to confirm this. Two curl calls, no valid key required:
curl -s -o /dev/null -w "%{http_code}\n" -X POST https://api.perplexity.ai/v1/chat/completions
# 404: this route does not exist
curl -s -o /dev/null -w "%{http_code}\n" -X POST https://api.perplexity.ai/chat/completions
# 401: the route exists, it just wants a real key
That 404-vs-401 split is the whole diagnosis in one shot. 404 means the path is wrong. 401 means the path is right and the only problem is auth. When an AI client reports "Resource not found" at a URL you never typed yourself, suspect the preset first, not your account.
The fix
Skip the built-in Perplexity preset and add a custom OpenAI-compatible provider pointed at the real endpoint. In Goose: goose configure → add a provider (the label varies a bit by version) and use:
base_url: https://api.perplexity.ai/chat/completions # no /v1!
model: sonar-pro # sonar works too
API key: PERPLEXITY_API_KEY # the same key you already set
This is the config that worked for me on 1.47.0, and it lines up with Perplexity's own docs, which describe Sonar as fully OpenAI Chat Completions-compatible on that base URL.
One thing to ignore while you're in there: the "Perplexity Agent" template fails with a different error, unknown field 'messages'. That's not the same bug and it won't fix chat. The Agent API just speaks a different request shape.
The bigger lesson
Provider presets are hardcoded base URLs, and vendors move their endpoints around. When a bundled provider starts 404ing, don't assume your key went bad. Probe the URL and read the status code. And when a preset goes stale, the custom OpenAI-compatible provider is the escape hatch in basically every agent tool (Goose, aider, opencode, Cline, pick your flavor) — the fix shape is the same everywhere.
As of this writing the upstream preset is still broken (aaif-goose/goose#11568 is open and assigned), so don't hold your breath for the auto-fix. The custom provider keeps working regardless, because it doesn't depend on the preset at all.
Top comments (0)