How a request flows
1
Authentication
The
Authorization: Bearer mnfst_... header resolves to one of your agents. A bad or missing key stops here with a 401.2
Limits
If a hard limit for this agent is already over its threshold, the request is blocked with M200 before any provider is called. Nothing is spent.
3
Routing
A custom tier matches on a request header, or the request goes to your default tier. Send a real model ID instead of
auto to skip this entirely.4
Forward
Manifest calls the resolved provider with your credentials and streams the response back.
5
Recovery
If the provider returns an error, Auto-fix may repair and resend the request once. Anything still failing moves down the fallback chain.
Routing
Instead of hard-coding one model into every client, you point your client at Manifest and let it pick. Sendauto as the model, and Manifest resolves the real model based on the rules you set on the dashboard Routing page.
Default
One model plus up to 5 fallbacks. Every request lands here unless a custom tier matches.
Custom
Match a request header to a tier you define, and route it to its own model.
Default tier
Every agent has a default tier: one model plus up to five fallbacks. You set it on the Routing page and can change it anytime without touching your code. Sendauto as the model, and any request that doesn’t match a custom tier goes to your default.
Custom tiers
Custom tiers route by request header. You create a tier on the dashboard, give it a header key and value, and pin it to a model with its own fallbacks. When an incoming request carries that header, Manifest sends it to that tier’s model instead of the default. The header key is yours to choose (lowercase letters, numbers, and hyphens). A few names are reserved and rejected, includingauthorization, cookie, and x-api-key. Send the header from your client like any other:
Route a specific model
To skip routing for a single request, send a real model ID instead ofauto. Manifest forwards it straight to that model’s provider, with no tier lookup and no fallbacks. Call GET /v1/models to list the model IDs your agent can reach.
X-Manifest-Tier: direct, so you can tell a direct call from a routed one. Direct model IDs work on the OpenAI-format endpoints (/v1/chat/completions and /v1/responses). Requests to the Anthropic /v1/messages endpoint always route through your default or custom tiers.
The model list is scoped to the agent key. A model may be missing because its provider is not connected yet, or because the provider exists in your workspace but is not enabled for this agent. If you send an unlisted model ID, Manifest returns M302: Model not available. Send auto to use routing.
Fallback
When a model fails (provider outage, rate limit, bad request), Manifest retries with a backup model from the same tier. Your agent gets a response instead of an error.What triggers a fallback
Any HTTP status code >= 400 triggers a fallback, with one exception: 424 (Failed Dependency) does not, since that’s the status Manifest itself returns when the entire chain is exhausted. Retrying it would loop forever.Configuration
Fallback models are configured per tier. Each tier holds up to 5 fallback models, tried in order.1
Open Routing in the dashboard
Navigate to Routing in the dashboard.
2
Select a tier
Click your Default tier or any custom tier.
3
Add fallback models
Add up to 5 fallback models. Drag to reorder, since models are tried from top to bottom.
Hung providers and the per-attempt timeout
A provider that opens a connection but never returns eventually triggers a fallback via Manifest’s per-attempt timeout (default 180 seconds), which surfaces as a synthetic504 Gateway Timeout and moves to the next model in the chain.
If your upstream client has its own timeout that fires at the same time, the client may disconnect first and Manifest will give up before reaching a healthy fallback. On self-hosted installs, lower PROVIDER_TIMEOUT_MS strictly below your client’s timeout so the chain has room to run inside the client’s window.
Response headers
When a fallback succeeds, the response carriesX-Manifest-Fallback-From (the primary that failed) and X-Manifest-Fallback-Index (its position in the chain) on top of the standard routing headers. When the chain is exhausted, X-Manifest-Fallback-Exhausted: true is set and the request returns 424. Full table: Headers reference.
Hard limits
A limit rule can block requests as well as email you. When a rule’s action includes blocking and the agent is over its threshold for the current period, the gateway rejects the request with M200 and HTTP429:
On Manifest Cloud, running out of the Free plan’s monthly requests is a
different thing entirely: that returns M204 with HTTP
402
and isn’t something you configured.Related
- Auto-fix — repair a failing request before fallback runs
- Observability — what the gateway records, and spend alerts
- API reference
- Headers reference
- Error codes