Send every conversation to the right model automatically. A decision model reads the first message and picks the route.
Auto Routing picks the right model for each conversation for you. You describe the kinds of requests you get in plain words, attach a model to each one, and a decision model reads the first message of every new conversation and picks the matching route. Easy requests go to a fast, cheap model. Hard ones go to your strongest model.
Up to 43% lower cost
On coding tasks in early internal Requesty benchmarks, compared with sending everything to the strongest model.
Up to 30% lower latency
Simple requests are answered by faster models, so most conversations finish sooner.
It works with the decision model of your choice and with any kind of decision: size of a code change, support triage, reasoning depth, language, topic, risk, or anything else you can describe in a sentence.
Set model to policy/<your-policy-name>, exactly like any other routing policy. Nothing else in your code changes.
2
The classifier reads the first user message
On the first request of a conversation, Requesty sends only the first user message to your classifier, the decision model you picked. Earlier system prompts, later turns and tool results are not sent.
3
It scores every route
The classifier gets one multiple-choice question: your question, with each route label as an option. It returns a probability for every label, so you see how sure it is, not just one answer.
4
The best route wins, or the fallback does
The label with the highest probability wins if it reaches your confidence threshold, and the request goes to that route’s model. If no label is sure enough, or the classifier returns an error, the request goes to the fallback model instead. Your request is never blocked by the classifier.
5
The choice is pinned for the session
The chosen model is remembered for the rest of the conversation, so later turns skip the classifier and the model never switches halfway through a task. Prompt caches keep working because every turn hits the same model.
The classifier runs once per conversation, not once per request, so it adds a single short call (typically well under a second) at the start of a session and nothing after that.
The classifier is any decision model your organization can use. They are built to return calibrated probabilities over a fixed set of options, which is exactly what routing needs.
Classifier
Notes
typesafe/jev-1.14.0
Jev by Typesafe. Our strongest router on coding prompts in internal tests
typesafe/jev-1.13.0
Previous Jev release
cloudflare/clef
Clef by Cloudflare. Fast, also reads images
cloudflare/clef-flash
Smaller, faster Clef
sference/clef
Clef served by Sference
azure/decision-1
Microsoft Decision-1 on Azure, available in EU regions
The classifier picker only lists models that are approved for your organization and allowed by your compliance rules. If a classifier you want is missing, approve it in the Model Library. Live availability is in GET /v1/models/decision.
Not sure which one to pick? Use Try it (below) to run the same messages through several classifiers at once and see where they agree.
Go to Routing Policies > Auto and click New. Only organization admins can create or edit policies.
2
Start from a template, or from scratch
Templates give you a working question and routes to edit:
Template
What it does
Coding: size of the change
Small, local edits go to a fast model; changes that must stay consistent across many places go to the strongest one
Support triage
Quick account questions get a cheap model; bugs and escalations get a stronger one
Reasoning depth
Chit-chat and lookups stay fast; multi-step reasoning, math and planning escalate
3
Pick the classifier and write the question
The question tells the classifier what to look at. Give it context about your users or codebase and end with the actual question, for example “What kind of change is this?”.
4
Add routes
Each route is a label and a target. The label is the description the classifier matches against, so write it as a short, specific category. The target can be any model, or one of your fallback, load balancing or latency policies, so the chosen route still gets failover and provider selection. Auto policies cannot target other Auto policies.
5
Set the fallback and confidence threshold
The fallback model handles anything the classifier is not sure about. A threshold of 50% is a good start: if the best label is below it, the fallback is used. Raise it to send more borderline requests to the fallback.
6
Save and use it
Save the policy and set model to policy/<name> in your requests.
Every Auto policy has a Try it panel. Type a first message, pick one or more classifiers, and run it. Only the classifiers are called, never the target models, so testing costs a fraction of a cent.
Six classifiers compared on the same message. All six agree on the refactor route, with the spread of each classifier's confidence on every label.
Consensus shows which route most classifiers picked, or the fallback if most of them would fall back.
Spread plots every classifier’s probability on every route, with your threshold as a dashed line, so you can see how close the call was.
Region lets you run the test on the Global router or on your organization’s regional router (for example EU), the same way your traffic is served.
from openai import OpenAIclient = OpenAI( base_url="https://router.requesty.ai/v1", api_key="your-requesty-api-key")response = client.chat.completions.create( model="policy/claude-auto-coder", messages=[{"role": "user", "content": "Add a created_at field to the Invoice struct"}], extra_body={"requesty": {"trace_id": "session-8f2c"}})print(response.model) # the model the route picked
curl https://router.requesty.ai/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your-requesty-api-key" \ -d '{ "model": "policy/claude-auto-coder", "messages": [{"role": "user", "content": "Add a created_at field to the Invoice struct"}], "requesty": {"trace_id": "session-8f2c"} }'
The choice is pinned for 60 minutes per conversation. Requesty recognises a conversation by its trace_id if you send one, otherwise by the conversation itself. Send a stable trace_id per session (as above) to make sure every turn of the same task stays on the same model. A new trace_id starts a new decision.
This is the policy in the screenshot above, used internally for coding agents working on a Go backend.
Route label
Model
additive: new field, constant, helper, adapter or endpoint following an existing pattern
anthropic/claude-haiku-5-5
changes existing behaviour in one place
anthropic/claude-sonnet-5-5
changes existing behaviour in several places (handlers, directions, streaming paths) that must all match
anthropic/claude-opus-5-5
rename, move or refactor with no behaviour change
anthropic/claude-opus-5-5
Fallback (below 50%)
anthropic/claude-opus-5-5
The question describes the codebase in two sentences, asks the classifier to infer what the agent will have to touch, and ends with a tie-break rule: “If the request lists several existing places that must all change, prefer the last label.”
Labels should describe the kind of request (“simple account or billing question with a known answer”), never the model. The classifier never sees model names; routes attach them afterwards.
Keep labels distinct
Two labels that overlap split the probability between them, which pushes requests to the fallback. If two routes go to the same model anyway, consider merging them.
Put your safest model on the fallback
Anything the classifier is unsure about lands there, so it should be the model you trust on the hardest requests.
Give context, then ask
A sentence or two about your product or codebase helps. Very long instructions or worked examples tend to overfit and route worse on real traffic.
Test with real first messages
Paste real first messages from your logs into Try it, including any system reminders your client adds, since that is exactly what the classifier sees.
First message only. The decision is made on the first user message of the conversation. If your client prepends long context to that message (some coding agents add project instructions), that text is part of what the classifier reads.
Text only for most classifiers. Images in the first message are only read by cloudflare/clef and cloudflare/clef-flash.
Billing. Each decision is billed as a normal request to the classifier, once per conversation, and shows up in your logs and analytics next to the routed request.
Approved models. Every target model must be approved for your organization, like in any routing policy.
How is this different from latency routing or load balancing?
Those policies choose between models that are interchangeable. Auto Routing chooses between models of different capability and price, based on what the request needs. You can combine them: point a route at a latency or fallback policy.
What happens if the classifier is down?
The request goes to the fallback model. The classifier never blocks a request.
Can a conversation switch models later?
No. The model is fixed for the session so answers stay consistent and prompt caching keeps working. Start a new session (or a new trace_id) to get a new decision.
Where do the savings numbers come from?
Early internal Requesty benchmarks on real coding tasks, comparing an Auto policy against sending every task to the strongest model. Your results depend on your traffic and routes; use Try it and your analytics to measure them.
Last modified on October 23, 2026
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Requesty Docs","description":"Documentation for Requesty, a unified LLM gateway and OpenAI-compatible API for 600+ AI models.","colors":{"primary":"#C8956A","light":"#D4A574","dark":"#E0B88A"},"logo":{"light":"https://mintcdn.com/requesty/o8v2COiz3OtlSbqG/logo/light.svg?fit=max\u0026auto=format\u0026n=o8v2COiz3OtlSbqG\u0026q=85\u0026s=33d22576c8ec4d1e68f24969181684df","dark":"https://mintcdn.com/requesty/o8v2COiz3OtlSbqG/logo/dark.svg?fit=max\u0026auto=format\u0026n=o8v2COiz3OtlSbqG\u0026q=85\u0026s=c21a835e0692187f8c47df7ab6528af9","href":"https://docs.requesty.ai"},"favicon":"https://mintcdn.com/requesty/MM5cSf0NbVkrpoDF/favicon.svg?fit=max\u0026auto=format\u0026n=MM5cSf0NbVkrpoDF\u0026q=85\u0026s=706185ad27099920b149c4ad2f15a5ca","api":{"openapi":["api-reference/requesty_inference-openapi.json","api-reference/requesty_management-openapi.json"],"playground":{}},"appearance":{"default":"dark"},"navbar":{"links":[{"href":"https://docs.requesty.ai/changelog","label":"Changelog"},{"href":"https://docs.requesty.ai/api-reference/requesty_openapi.json","label":"OpenAPI"},{"href":"https://discord.com/invite/Td3rwAHgt4","label":"Discord"}],"primary":{"type":"button","label":"Get Started","href":"https://app.requesty.ai/sign-up"}},"footer":{"socials":{"x":"https://x.com/requestyAI","linkedin":"https://linkedin.com/company/requesty"}},"search":{"prompt":"Search..."},"seo":{"metatags":{"og:site_name":"Requesty Docs"},"indexing":"navigable"},"fonts":{"heading":{"family":"Inter","weight":600},"body":{"family":"Inter"}},"styling":{"eyebrows":"breadcrumbs","codeblocks":"dark","latex":true},"integrations":{"amplitude":{"apiKey":"ce02ec2dce31d2745bd8a3ffaedd53cc"}},"contextual":{"options":["copy","chatgpt","claude","perplexity"],"display":"header"},"metadata":{"timestamp":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"requesty","hasAudioNarration":false,"actualSubdomain":"requesty","customDomains":["docs.requesty.ai"],"gitSource":{"type":"github","owner":"requestyai","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad8df0c0415e81028128ca9","collectionId":"22f6e65c-fda2-4e5b-8934-18c24a629609","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad8df0c0415e81028128ca9"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6adb7acb1ada5501057a632e","clientVersion":"0.0.3939","searchFilterCounts":[{"language":"default","tag":"Gateway","count":58},{"language":"default","tag":"Management API","count":37},{"language":"default","tag":"Integrations","count":26},{"language":"default","tag":"Inference API","count":21},{"language":"default","tag":"Inference APIs","count":21},{"language":"default","tag":"Organization","count":15},{"language":"default","tag":"LLM Gateway","count":14},{"language":"default","tag":"Analytics \u0026 Monitoring","count":12},{"language":"default","tag":"Coding Assistants","count":10},{"language":"default","tag":"API Keys","count":9}]},"assistantConfig":{"enableStarterQuestions":false,"deflection":{"enabled":true,"email":"[email protected]","showHelpButton":true}},"hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"styles/custom.css","content":":root{--requesty-gold:#C8956A;--requesty-gold-light:#E0B88A;--requesty-gold-muted:rgba(200, 149, 106, 0.15)}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:rgba(128,128,128,.15);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:rgba(128,128,128,.3)}#navbar{backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}img.nav-logo{height:2.25rem!important;max-width:18rem!important;max-height:2.25rem!important}#sidebar{font-size:13.5px!important}#sidebar-content{padding-top:.5rem}sidebar-group-header{font-weight:600!important;letter-spacing:.01em;text-transform:none!important}#content-area{max-width:100%}#page-title{font-size:2rem!important;font-weight:600!important;letter-spacing:-.025em!important;line-height:1.2!important}mdx-content{font-size:15px!important;line-height:1.65!important}mdx-content h2{font-size:1.35rem!important;font-weight:600!important;letter-spacing:-.015em!important;margin-top:2rem!important;margin-bottom:.75rem!important}mdx-content h3{font-size:1.1rem!important;font-weight:600!important;margin-top:1.5rem!important;margin-bottom:.4rem!important}mdx-content p{margin-top:.6em!important;margin-bottom:.6em!important}mdx-content li{margin-top:.2rem!important;margin-bottom:.2rem!important}#request-example,#response-example,code-block{border-radius:12px!important;overflow:hidden}mdx-content code:not(pre code){border:0!important;border-radius:5px!important;padding:2px 6px!important;font-size:.9em!important}:root:not(.dark) mdx-content code:not(pre code){background:rgba(0,0,0,.05)!important}:root.dark mdx-content code:not(pre code){background:rgba(255,255,255,.08)!important}card{border-radius:12px!important;transition:border-color .2s ease,background-color .2s ease}:root:not(.dark) card{border:1px solid rgba(0,0,0,.08)!important}:root:not(.dark) card:hover{border-color:rgba(0,0,0,.15)!important;background:rgba(0,0,0,.01)!important}:root.dark card{border:1px solid rgba(255,255,255,.06)!important}:root.dark card:hover{border-color:rgba(255,255,255,.12)!important;background:rgba(255,255,255,.02)!important}callout{border-left-width:3px!important}mdx-content table{overflow:hidden}mdx-content table th{font-weight:600!important;font-size:.85rem!important;letter-spacing:.02em;text-transform:uppercase}accordion,callout,mdx-content img,mdx-content table{border-radius:10px!important}api-section{padding-bottom:2rem}:root:not(.dark) api-section{border-bottom:1px solid rgba(0,0,0,.06)}:root.dark api-section{border-bottom:1px solid rgba(255,255,255,.05)}api-section-heading-title{font-size:1.75rem!important;font-weight:600!important;letter-spacing:-.02em!important}#table-of-contents,breadcrumb-list{font-size:13px!important}toc-item{transition:color .15s ease}breadcrumb-list{opacity:.7}nav-tabs-item{font-weight:500!important;letter-spacing:.01em}#pagination{margin-top:2rem!important;padding-top:1rem!important}:root:not(.dark) #pagination{border-top:1px solid rgba(0,0,0,.06)!important}:root.dark #pagination{border-top:1px solid rgba(255,255,255,.05)!important}steps{border-left-color:rgba(200,149,106,.3)!important}step-content{padding-bottom:.75rem!important}#search-bar-entry,expandable{border-radius:8px!important}nav-tag-pill{font-size:11px!important;font-weight:600!important;letter-spacing:.03em;border-radius:4px!important}[data-component-part=update-tag]{padding:2px 8px!important;border-radius:6px!important;font-size:12px!important}:root:not(.dark) [data-component-part=update-tag]{background:rgba(0,0,0,.06)!important;color:#374151!important}:root.dark [data-component-part=update-tag]{background:rgba(255,255,255,.1)!important;color:#d1d5db!important}:root:not(.dark) #footer{border-top:1px solid rgba(0,0,0,.06)!important}:root.dark #footer{border-top:1px solid rgba(255,255,255,.05)!important}"}],"page":{"pagePath":"features/auto-routing","slug":"/features/auto-routing","pageMetadata":{"title":"Auto Routing","description":"Send every conversation to the right model automatically. A decision model reads the first message and picks the route.","icon":"route","href":"/features/auto-routing"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Send every conversation to the right model automatically. A decision model reads the first message and picks the route.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,CodeBlock,CodeGroup,Frame,Heading,Note,OptimizedImage,Step,Steps,Table,Tip}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!CodeGroup)_missingMdxReference(`CodeGroup`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Auto Routing picks the right model for each conversation for you. You describe the kinds of requests you get in plain words, attach a model to each one, and a `,_jsx(_components.strong,{children:`decision model`}),` reads the first message of every new conversation and picks the matching route. Easy requests go to a fast, cheap model. Hard ones go to your strongest model.`]}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Up to 43% lower cost`,icon:`piggy-bank`,children:_jsx(_components.p,{children:`On coding tasks in early internal Requesty benchmarks, compared with sending everything to the strongest model.`})}),_jsx(Card,{title:`Up to 30% lower latency`,icon:`bolt`,children:_jsx(_components.p,{children:`Simple requests are answered by faster models, so most conversations finish sooner.`})})]}),`\n`,_jsx(_components.p,{children:`It works with the decision model of your choice and with any kind of decision: size of a code change, support triage, reasoning depth, language, topic, risk, or anything else you can describe in a sentence.`}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:_jsx(_components.a,{href:`https://app.requesty.ai/routing-policies/auto`,children:`Create an Auto policy`})}),` in the Requesty Console. Auto Routing is in beta.`]})}),`\n`,_jsx(Frame,{caption:`An Auto policy: one classifier, one question, a model per route and a fallback.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/requesty/nKiOLEOtg3fGfh-o/images/auto-routing/auto-routing-policy-detail.png?fit=max\u0026auto=format\u0026n=nKiOLEOtg3fGfh-o\u0026q=85\u0026s=7926d45532620188ecfb0b38785b6753`,alt:`Auto policy detail page for claude-auto-coder: the typesafe/jev-1.14.0 classifier with its question on the left, four routes on the right mapping change types to Claude Haiku, Sonnet and Opus, and a fallback to Opus below a 50% confidence threshold.`,\"data-og-width\":`3064`,width:`3064`,\"data-og-height\":`1074`,height:`1074`,\"data-path\":`images/auto-routing/auto-routing-policy-detail.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/requesty/nKiOLEOtg3fGfh-o/images/auto-routing/auto-routing-policy-detail.png?w=280\u0026fit=max\u0026auto=format\u0026n=nKiOLEOtg3fGfh-o\u0026q=85\u0026s=ba672db45b84a054005ef4fadd456537 280w, https://mintcdn.com/requesty/nKiOLEOtg3fGfh-o/images/auto-routing/auto-routing-policy-detail.png?w=560\u0026fit=max\u0026auto=format\u0026n=nKiOLEOtg3fGfh-o\u0026q=85\u0026s=842c8a150f264cc7aca2195af7b9a43c 560w, https://mintcdn.com/requesty/nKiOLEOtg3fGfh-o/images/auto-routing/auto-routing-policy-detail.png?w=840\u0026fit=max\u0026auto=format\u0026n=nKiOLEOtg3fGfh-o\u0026q=85\u0026s=07165e3a3b22da11d135d349589431a8 840w, https://mintcdn.com/requesty/nKiOLEOtg3fGfh-o/images/auto-routing/auto-routing-policy-detail.png?w=1100\u0026fit=max\u0026auto=format\u0026n=nKiOLEOtg3fGfh-o\u0026q=85\u0026s=87753e13fb126fab0da28d6b1e443906 1100w, https://mintcdn.com/requesty/nKiOLEOtg3fGfh-o/images/auto-routing/auto-routing-policy-detail.png?w=1650\u0026fit=max\u0026auto=format\u0026n=nKiOLEOtg3fGfh-o\u0026q=85\u0026s=12e3c152707cae5b06911b5cd19b51ed 1650w, https://mintcdn.com/requesty/nKiOLEOtg3fGfh-o/images/auto-routing/auto-routing-policy-detail.png?w=2500\u0026fit=max\u0026auto=format\u0026n=nKiOLEOtg3fGfh-o\u0026q=85\u0026s=703a15013aee6e83f44fc40585c1d521 2500w`})}),`\n`,_jsx(Heading,{level:`2`,id:`how-it-works`,children:`How It Works`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Your app calls the policy`,children:_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`model`}),` to `,_jsx(_components.code,{children:`policy/\u003cyour-policy-name>`}),`, exactly like any other routing policy. Nothing else in your code changes.`]})}),_jsx(Step,{title:`The classifier reads the first user message`,children:_jsxs(_components.p,{children:[`On the first request of a conversation, Requesty sends only the first user message to your `,_jsx(_components.strong,{children:`classifier`}),`, the decision model you picked. Earlier system prompts, later turns and tool results are not sent.`]})}),_jsx(Step,{title:`It scores every route`,children:_jsxs(_components.p,{children:[`The classifier gets one multiple-choice question: your `,_jsx(_components.strong,{children:`question`}),`, with each `,_jsx(_components.strong,{children:`route label`}),` as an option. It returns a probability for every label, so you see how sure it is, not just one answer.`]})}),_jsx(Step,{title:`The best route wins, or the fallback does`,children:_jsxs(_components.p,{children:[`The label with the highest probability wins if it reaches your `,_jsx(_components.strong,{children:`confidence threshold`}),`, and the request goes to that route’s model. If no label is sure enough, or the classifier returns an error, the request goes to the `,_jsx(_components.strong,{children:`fallback`}),` model instead. Your request is never blocked by the classifier.`]})}),_jsx(Step,{title:`The choice is pinned for the session`,children:_jsx(_components.p,{children:`The chosen model is remembered for the rest of the conversation, so later turns skip the classifier and the model never switches halfway through a task. Prompt caches keep working because every turn hits the same model.`})})]}),`\n`,_jsx(_components.p,{children:`The classifier runs once per conversation, not once per request, so it adds a single short call (typically well under a second) at the start of a session and nothing after that.`}),`\n`,_jsx(Heading,{level:`2`,id:`benefits`,children:`Benefits`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Pay for hard work only`,icon:`coins`,children:_jsx(_components.p,{children:`Routine requests stop paying top-tier prices. Only the requests that need your best model get it.`})}),_jsx(Card,{title:`Any decision you can describe`,icon:`list-check`,children:_jsx(_components.p,{children:`Routes are plain-language labels. No training data, no embeddings, no code.`})}),_jsx(Card,{title:`Your choice of classifier`,icon:`scale-balanced`,children:_jsx(_components.p,{children:`Pick the decision model that fits your quality, speed and region needs, and compare them side by side before you ship.`})}),_jsx(Card,{title:`Safe by default`,icon:`shield-check`,children:_jsx(_components.p,{children:`Low confidence or a classifier error always lands on your fallback model.`})})]}),`\n`,_jsx(Heading,{level:`2`,id:`choosing-a-classifier`,children:`Choosing a Classifier`}),`\n`,_jsxs(_components.p,{children:[`The classifier is any `,_jsx(_components.a,{href:`/features/decisions`,children:`decision model`}),` your organization can use. They are built to return calibrated probabilities over a fixed set of options, which is exactly what routing needs.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Classifier`}),_jsx(_components.th,{children:`Notes`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`typesafe/jev-1.14.0`})}),_jsx(_components.td,{children:`Jev by Typesafe. Our strongest router on coding prompts in internal tests`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`typesafe/jev-1.13.0`})}),_jsx(_components.td,{children:`Previous Jev release`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`cloudflare/clef`})}),_jsx(_components.td,{children:`Clef by Cloudflare. Fast, also reads images`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`cloudflare/clef-flash`})}),_jsx(_components.td,{children:`Smaller, faster Clef`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`sference/clef`})}),_jsx(_components.td,{children:`Clef served by Sference`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`azure/decision-1`})}),_jsx(_components.td,{children:`Microsoft Decision-1 on Azure, available in EU regions`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`The classifier picker only lists models that are approved for your organization and allowed by your `,_jsx(_components.a,{href:`/features/approved-models`,children:`compliance rules`}),`. If a classifier you want is missing, approve it in the `,_jsx(_components.a,{href:`https://app.requesty.ai/model-library`,children:`Model Library`}),`. Live availability is in `,_jsx(_components.a,{href:`/api-reference/endpoint/models-decision-list`,children:_jsx(_components.code,{children:`GET /v1/models/decision`})}),`.`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Not sure which one to pick? Use `,_jsx(_components.strong,{children:`Try it`}),` (below) to run the same messages through several classifiers at once and see where they agree.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`creating-an-auto-policy`,children:`Creating an Auto Policy`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Open Auto policies`,children:_jsxs(_components.p,{children:[`Go to `,_jsx(_components.a,{href:`https://app.requesty.ai/routing-policies/auto`,children:`Routing Policies > Auto`}),` and click `,_jsx(_components.strong,{children:`New`}),`. Only organization admins can create or edit policies.`]})}),_jsxs(Step,{title:`Start from a template, or from scratch`,children:[_jsx(_components.p,{children:`Templates give you a working question and routes to edit:`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Template`}),_jsx(_components.th,{children:`What it does`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Coding: size of the change`})}),_jsx(_components.td,{children:`Small, local edits go to a fast model; changes that must stay consistent across many places go to the strongest one`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Support triage`})}),_jsx(_components.td,{children:`Quick account questions get a cheap model; bugs and escalations get a stronger one`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Reasoning depth`})}),_jsx(_components.td,{children:`Chit-chat and lookups stay fast; multi-step reasoning, math and planning escalate`})]})]})]})]}),_jsx(Step,{title:`Pick the classifier and write the question`,children:_jsxs(_components.p,{children:[`The question tells the classifier what to look at. Give it context about your users or codebase and end with the actual question, for example `,_jsx(_components.em,{children:`“What kind of change is this?”`}),`.`]})}),_jsx(Step,{title:`Add routes`,children:_jsxs(_components.p,{children:[`Each route is a `,_jsx(_components.strong,{children:`label`}),` and a `,_jsx(_components.strong,{children:`target`}),`. The label is the description the classifier matches against, so write it as a short, specific category. The target can be any model, or one of your `,_jsx(_components.a,{href:`/features/fallback-policies`,children:`fallback`}),`, `,_jsx(_components.a,{href:`/features/load-balancing-policies`,children:`load balancing`}),` or `,_jsx(_components.a,{href:`/features/latency-routing`,children:`latency`}),` policies, so the chosen route still gets failover and provider selection. Auto policies cannot target other Auto policies.`]})}),_jsx(Step,{title:`Set the fallback and confidence threshold`,children:_jsxs(_components.p,{children:[`The fallback model handles anything the classifier is not sure about. A threshold of `,_jsx(_components.strong,{children:`50%`}),` is a good start: if the best label is below it, the fallback is used. Raise it to send more borderline requests to the fallback.`]})}),_jsx(Step,{title:`Save and use it`,children:_jsxs(_components.p,{children:[`Save the policy and set `,_jsx(_components.code,{children:`model`}),` to `,_jsx(_components.code,{children:`policy/\u003cname>`}),` in your requests.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`try-it-before-you-ship`,children:`Try It Before You Ship`}),`\n`,_jsxs(_components.p,{children:[`Every Auto policy has a `,_jsx(_components.strong,{children:`Try it`}),` panel. Type a first message, pick one or more classifiers, and run it. Only the classifiers are called, never the target models, so testing costs a fraction of a cent.`]}),`\n`,_jsx(Frame,{caption:`Six classifiers compared on the same message. All six agree on the refactor route, with the spread of each classifier's confidence on every label.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/requesty/nKiOLEOtg3fGfh-o/images/auto-routing/auto-routing-try-it.png?fit=max\u0026auto=format\u0026n=nKiOLEOtg3fGfh-o\u0026q=85\u0026s=345a3694837ef2056bf59dbc47faaf40`,alt:`Try it panel comparing six classifiers on the message 'please refactor my auth'. The consensus bar shows all 6 agree on 'rename, move or refactor with no behaviour change' at an average of 87%, with each classifier's probability plotted per route against a 50% threshold line.`,\"data-og-width\":`3070`,width:`3070`,\"data-og-height\":`1314`,height:`1314`,\"data-path\":`images/auto-routing/auto-routing-try-it.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/requesty/nKiOLEOtg3fGfh-o/images/auto-routing/auto-routing-try-it.png?w=280\u0026fit=max\u0026auto=format\u0026n=nKiOLEOtg3fGfh-o\u0026q=85\u0026s=1c6362b7678fbc488095e01373c0cf1f 280w, https://mintcdn.com/requesty/nKiOLEOtg3fGfh-o/images/auto-routing/auto-routing-try-it.png?w=560\u0026fit=max\u0026auto=format\u0026n=nKiOLEOtg3fGfh-o\u0026q=85\u0026s=ba62354e5db23e4daa7cf07df9eff409 560w, https://mintcdn.com/requesty/nKiOLEOtg3fGfh-o/images/auto-routing/auto-routing-try-it.png?w=840\u0026fit=max\u0026auto=format\u0026n=nKiOLEOtg3fGfh-o\u0026q=85\u0026s=1929755638179b1eb630f118caf15ef9 840w, https://mintcdn.com/requesty/nKiOLEOtg3fGfh-o/images/auto-routing/auto-routing-try-it.png?w=1100\u0026fit=max\u0026auto=format\u0026n=nKiOLEOtg3fGfh-o\u0026q=85\u0026s=66945040a4ddc0be2583faef9e1941cb 1100w, https://mintcdn.com/requesty/nKiOLEOtg3fGfh-o/images/auto-routing/auto-routing-try-it.png?w=1650\u0026fit=max\u0026auto=format\u0026n=nKiOLEOtg3fGfh-o\u0026q=85\u0026s=32ab84724345418f5eaad4398e151d3d 1650w, https://mintcdn.com/requesty/nKiOLEOtg3fGfh-o/images/auto-routing/auto-routing-try-it.png?w=2500\u0026fit=max\u0026auto=format\u0026n=nKiOLEOtg3fGfh-o\u0026q=85\u0026s=b4bfd456d50b47480bb6395b5b5392f5 2500w`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Consensus`}),` shows which route most classifiers picked, or the fallback if most of them would fall back.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Spread`}),` plots every classifier’s probability on every route, with your threshold as a dashed line, so you can see how close the call was.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Region`}),` lets you run the test on the Global router or on your organization’s regional router (for example EU), the same way your traffic is served.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`use-the-policy-in-your-code`,children:`Use the Policy in Your Code`}),`\n`,_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`Python`,numberOfLines:`13`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`13`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` openai `}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` OpenAI`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`client = OpenAI(`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` base_url`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"https://router.requesty.ai/v1\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` api_key`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"your-requesty-api-key\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`response = client.chat.completions.create(`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` model`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"policy/claude-auto-coder\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` messages`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`=[{`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"role\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"user\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"content\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"Add a created_at field to the Invoice struct\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` extra_body`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`={`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"requesty\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: {`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"trace_id\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"session-8f2c\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}}`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`print`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(response.model) `}),_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`# the model the route picked`})]}),`\n`]})})}),_jsx(CodeBlock,{filename:`cURL`,numberOfLines:`8`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` https://router.requesty.ai/v1/chat/completions`}),_jsx(_components.span,{style:{color:`#D7BA7D`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#D7BA7D`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer your-requesty-api-key\"`}),_jsx(_components.span,{style:{color:`#D7BA7D`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"model\": \"policy/claude-auto-coder\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"messages\": [{\"role\": \"user\", \"content\": \"Add a created_at field to the Invoice struct\"}],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"requesty\": {\"trace_id\": \"session-8f2c\"}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Claude Code`,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` ANTHROPIC_BASE_URL`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"https://router.requesty.ai\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` ANTHROPIC_AUTH_TOKEN`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"your-requesty-api-key\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` ANTHROPIC_MODEL`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"policy/claude-auto-coder\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`claude`})}),`\n`]})})})]}),`\n`,_jsx(_components.p,{children:`Auto policies work on the Chat Completions, Messages and Responses APIs, with streaming, tools and every other feature of the target model.`}),`\n`,_jsx(Heading,{level:`3`,id:`keeping-a-conversation-on-one-model`,children:`Keeping a conversation on one model`}),`\n`,_jsxs(_components.p,{children:[`The choice is pinned for 60 minutes per conversation. Requesty recognises a conversation by its `,_jsx(_components.code,{children:`trace_id`}),` if you send one, otherwise by the conversation itself. Send a stable `,_jsx(_components.code,{children:`trace_id`}),` per session (as above) to make sure every turn of the same task stays on the same model. A new `,_jsx(_components.code,{children:`trace_id`}),` starts a new decision.`]}),`\n`,_jsx(Heading,{level:`2`,id:`example-coding-agent-router`,children:`Example: Coding Agent Router`}),`\n`,_jsx(_components.p,{children:`This is the policy in the screenshot above, used internally for coding agents working on a Go backend.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Route label`}),_jsx(_components.th,{children:`Model`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`additive: new field, constant, helper, adapter or endpoint following an existing pattern`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`anthropic/claude-haiku-5-5`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`changes existing behaviour in one place`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`anthropic/claude-sonnet-5-5`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`changes existing behaviour in several places (handlers, directions, streaming paths) that must all match`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`anthropic/claude-opus-5-5`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`rename, move or refactor with no behaviour change`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`anthropic/claude-opus-5-5`})})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Fallback`}),` (below 50%)`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`anthropic/claude-opus-5-5`})})]})]})]}),`\n`,_jsxs(_components.p,{children:[`The question describes the codebase in two sentences, asks the classifier to infer what the agent will have to touch, and ends with a tie-break rule: `,_jsx(_components.em,{children:`“If the request lists several existing places that must all change, prefer the last label.”`})]}),`\n`,_jsx(Heading,{level:`2`,id:`writing-good-routes`,children:`Writing Good Routes`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Describe the request, not the model`,id:`describe-the-request-not-the-model`,children:_jsxs(_components.p,{children:[`Labels should describe the kind of request (`,_jsx(_components.em,{children:`“simple account or billing question with a known answer”`}),`), never the model. The classifier never sees model names; routes attach them afterwards.`]})}),_jsx(Accordion,{title:`Keep labels distinct`,id:`keep-labels-distinct`,children:_jsx(_components.p,{children:`Two labels that overlap split the probability between them, which pushes requests to the fallback. If two routes go to the same model anyway, consider merging them.`})}),_jsx(Accordion,{title:`Put your safest model on the fallback`,id:`put-your-safest-model-on-the-fallback`,children:_jsx(_components.p,{children:`Anything the classifier is unsure about lands there, so it should be the model you trust on the hardest requests.`})}),_jsx(Accordion,{title:`Give context, then ask`,id:`give-context-then-ask`,children:_jsx(_components.p,{children:`A sentence or two about your product or codebase helps. Very long instructions or worked examples tend to overfit and route worse on real traffic.`})}),_jsx(Accordion,{title:`Test with real first messages`,id:`test-with-real-first-messages`,children:_jsxs(_components.p,{children:[`Paste real first messages from your logs into `,_jsx(_components.strong,{children:`Try it`}),`, including any system reminders your client adds, since that is exactly what the classifier sees.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`good-to-know`,children:`Good to Know`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`First message only.`}),` The decision is made on the first user message of the conversation. If your client prepends long context to that message (some coding agents add project instructions), that text is part of what the classifier reads.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Text only for most classifiers.`}),` Images in the first message are only read by `,_jsx(_components.code,{children:`cloudflare/clef`}),` and `,_jsx(_components.code,{children:`cloudflare/clef-flash`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Billing.`}),` Each decision is billed as a normal request to the classifier, once per conversation, and shows up in your `,_jsx(_components.a,{href:`/features/logs`,children:`logs`}),` and analytics next to the routed request.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Approved models.`}),` Every target model must be approved for your organization, like in any routing policy.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`faq`,children:`FAQ`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`How is this different from latency routing or load balancing?`,id:`how-is-this-different-from-latency-routing-or-load-balancing`,children:_jsxs(_components.p,{children:[`Those policies choose between models that are interchangeable. Auto Routing chooses between models of `,_jsx(_components.strong,{children:`different capability and price`}),`, based on what the request needs. You can combine them: point a route at a latency or fallback policy.`]})}),_jsx(Accordion,{title:`What happens if the classifier is down?`,id:`what-happens-if-the-classifier-is-down`,children:_jsx(_components.p,{children:`The request goes to the fallback model. The classifier never blocks a request.`})}),_jsx(Accordion,{title:`Can a conversation switch models later?`,id:`can-a-conversation-switch-models-later`,children:_jsxs(_components.p,{children:[`No. The model is fixed for the session so answers stay consistent and prompt caching keeps working. Start a new session (or a new `,_jsx(_components.code,{children:`trace_id`}),`) to get a new decision.`]})}),_jsx(Accordion,{title:`Where do the savings numbers come from?`,id:`where-do-the-savings-numbers-come-from`,children:_jsxs(_components.p,{children:[`Early internal Requesty benchmarks on real coding tasks, comparing an Auto policy against sending every task to the strongest model. Your results depend on your traffic and routes; use `,_jsx(_components.strong,{children:`Try it`}),` and your analytics to measure them.`]})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"dark","config":{},"pageMetadata":{"title":"Auto Routing","description":"Send every conversation to the right model automatically. A decision model reads the first message and picks the route.","icon":"route","href":"/features/auto-routing"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"How It Works","slug":"how-it-works","depth":2,"children":[]},{"title":"Benefits","slug":"benefits","depth":2,"children":[]},{"title":"Choosing a Classifier","slug":"choosing-a-classifier","depth":2,"children":[]},{"title":"Creating an Auto Policy","slug":"creating-an-auto-policy","depth":2,"children":[]},{"title":"Try It Before You Ship","slug":"try-it-before-you-ship","depth":2,"children":[]},{"title":"Use the Policy in Your Code","slug":"use-the-policy-in-your-code","depth":2,"children":[{"title":"Keeping a conversation on one model","slug":"keeping-a-conversation-on-one-model","depth":3,"children":[]}]},{"title":"Example: Coding Agent Router","slug":"example-coding-agent-router","depth":2,"children":[]},{"title":"Writing Good Routes","slug":"writing-good-routes","depth":2,"children":[]},{"title":"Good to Know","slug":"good-to-know","depth":2,"children":[]},{"title":"FAQ","slug":"faq","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"requesty","siteName":"Requesty Docs","title":"Auto Routing - Requesty Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-23T15:18:47.875Z","gitLastModified":"2026-10-23T15:18:31.000Z","originalFileLocation":"features/auto-routing.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Send every conversation to the right model automatically. A decision model reads the first message and picks the route.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Requesty Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/requesty/bWQG6e3TK2khNMP8/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/requesty/bWQG6e3TK2khNMP8/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/requesty/bWQG6e3TK2khNMP8/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/requesty/bWQG6e3TK2khNMP8/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/requesty/bWQG6e3TK2khNMP8/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/requesty/bWQG6e3TK2khNMP8/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/requesty/bWQG6e3TK2khNMP8/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/requesty/bWQG6e3TK2khNMP8/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/requesty/bWQG6e3TK2khNMP8/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Auto Routing - Requesty Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Send every conversation to the right model automatically. A decision model reads the first message and picks the route.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Requesty Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.requesty.ai/features/auto-routing\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://requesty.mintlify.app/_mintlify/api/og/v2?division=LLM+Gateway\u0026amp;title=Auto+Routing\u0026amp;description=Send+every+conversation+to+the+right+model+automatically.+A+decision+model+reads+the+first+message+and+picks+the+route.\u0026amp;theme=0b0b6b1d8f2800991b362086\u0026amp;signature=90de134251025649c28220330e897715188412343eddf45923419e18af9b7f41\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Auto Routing - Requesty Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Send every conversation to the right model automatically. A decision model reads the first message and picks the route.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://requesty.mintlify.app/_mintlify/api/og/v2?division=LLM+Gateway\u0026amp;title=Auto+Routing\u0026amp;description=Send+every+conversation+to+the+right+model+automatically.+A+decision+model+reads+the+first+message+and+picks+the+route.\u0026amp;theme=0b0b6b1d8f2800991b362086\u0026amp;signature=90de134251025649c28220330e897715188412343eddf45923419e18af9b7f41\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/requesty/bWQG6e3TK2khNMP8/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Requesty Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#C8956A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.requesty.ai/features/auto-routing\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/features/auto-routing.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.requesty.ai/#organization\",\"name\":\"Requesty Docs\",\"url\":\"https://docs.requesty.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/requesty/o8v2COiz3OtlSbqG/logo/light.svg?fit=max\u0026auto=format\u0026n=o8v2COiz3OtlSbqG\u0026q=85\u0026s=33d22576c8ec4d1e68f24969181684df\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.requesty.ai#website\",\"name\":\"Requesty Docs\",\"url\":\"https://docs.requesty.ai\",\"publisher\":{\"@id\":\"https://docs.requesty.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.requesty.ai/features/auto-routing#webpage\",\"url\":\"https://docs.requesty.ai/features/auto-routing\",\"name\":\"Auto Routing\",\"description\":\"Send every conversation to the right model automatically. A decision model reads the first message and picks the route.\",\"dateModified\":\"2026-10-23T15:18:31.000Z\",\"isPartOf\":{\"@id\":\"https://docs.requesty.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.requesty.ai/features/auto-routing#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.requesty.ai/features/auto-routing#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"LLM Gateway\",\"item\":\"https://docs.requesty.ai/features/eu-routing\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Auto Routing\",\"item\":\"https://docs.requesty.ai/features/auto-routing\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.requesty.ai/features/auto-routing#article\",\"headline\":\"Auto Routing\",\"name\":\"Auto Routing\",\"description\":\"Send every conversation to the right model automatically. A decision model reads the first message and picks the route.\",\"url\":\"https://docs.requesty.ai/features/auto-routing\",\"mainEntityOfPage\":{\"@id\":\"https://docs.requesty.ai/features/auto-routing#webpage\"},\"dateModified\":\"2026-10-23T15:18:31.000Z\",\"publisher\":{\"@id\":\"https://docs.requesty.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.requesty.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Requesty Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Requesty Docs","nav":{"global":null,"tabs":[{"tab":"Gateway","groups":[{"group":"Getting Started","pages":[{"title":"Quickstart","icon":"rocket","href":"/quickstart"},{"title":"Supported Models","icon":"microchip","href":"/features/supported-models"},{"title":"Free Models","icon":"gift","href":"/features/free-models"},{"title":"Changelog","icon":"clock-rotate-left","href":"/changelog"},{"title":"Error Codes","icon":"triangle-exclamation","href":"/features/error-codes"}]},{"group":"LLM Gateway","pages":[{"title":"EU Routing","icon":"globe-europe","href":"/features/eu-routing"},{"title":"Fallback Policies","icon":"forward-step","href":"/features/fallback-policies"},{"title":"Load Balancing Policies","icon":"scale-balanced","href":"/features/load-balancing-policies"},{"title":"Latency-Based Routing","description":"Automatically route to the fastest available model","icon":"gauge-high","href":"/features/latency-routing"},{"title":"Auto Routing","icon":"route","href":"/features/auto-routing"},{"title":"Managed Policies","description":"Routing policies maintained by Requesty for the best experience out of the box","icon":"wand-magic-sparkles","href":"/features/managed-policies"},{"title":"Auto Caching","icon":"toggle-on","href":"/features/auto-caching"},{"title":"Manual Caching for Anthropic Models","icon":"code","href":"/features/manual-caching"},{"title":"Messages API Caching","icon":"layer-group","href":"/features/messages-api-caching"},{"title":"Spend Limits \u0026 Rate Limits","icon":"gauge-max","href":"/features/api-limits"},{"title":"In-Flight Rate Limits","icon":"arrows-left-right-to-line","href":"/features/in-flight-rate-limits"},{"title":"Bring Your Own Keys","icon":"key","href":"/features/bring-your-own-keys"},{"title":"Service Accounts","icon":"robot","href":"/features/service-accounts"},{"title":"Prompt Library","icon":"book","href":"/features/prompt-library"}]},{"group":"Model Capabilities","pages":[{"title":"Streaming Responses","icon":"stream","href":"/features/streaming"},{"title":"Structured Outputs","icon":"brackets-curly","href":"/features/structured-outputs"},{"title":"Decisions","icon":"scale-balanced","href":"/features/decisions"},{"title":"Reasoning","icon":"brain","href":"/features/reasoning"},{"title":"Image Understanding","icon":"camera","href":"/features/image-understanding"},{"title":"Image Generation","icon":"image","href":"/features/image-generation"},{"title":"PDF Support","icon":"file-pdf","href":"/features/pdf-support"},{"title":"Video Input","icon":"video","href":"/features/video-input"},{"title":"Web Search","icon":"globe","href":"/features/web-search"}]},{"group":"Analytics \u0026 Monitoring","pages":[{"title":"Overview","icon":"gauge-high","href":"/features/overview"},{"title":"Logs \u0026 Traces","icon":"list","href":"/features/logs"},{"title":"Usage Analytics","icon":"chart-line","href":"/features/usage-analytics"},{"title":"Analytics Exports","icon":"file-export","href":"/features/analytics-exports"},{"title":"Cost Tracking","icon":"dollar-sign","href":"/features/cost-tracking"},{"title":"Performance Monitoring","icon":"gauge-high","href":"/features/performance-monitoring"},{"title":"Tool Call Analytics","icon":"screwdriver-wrench","href":"/features/tool-call-analytics"},{"title":"Analytics Headers","icon":"tags","href":"/features/analytics-headers"},{"title":"Request Metadata","icon":"chart-line","href":"/features/request-metadata"},{"title":"Request Feedback","icon":"comment-pen","href":"/features/request-feedback"},{"title":"Session Reconstruction","icon":"wrench","href":"/features/session-reconstruction"},{"title":"Key Management API","icon":"key","href":"/features/key-management-api"}]},{"group":"Access Control","pages":[{"title":"Approved Models","href":"/features/approved-models"},{"title":"Access Lists","href":"/features/access-lists"}]},{"group":"Organization","pages":[{"title":"User Management","href":"/features/users"},{"title":"Groups Management","href":"/features/groups"},{"title":"Platform Integrations","href":"/features/platform-integrations"},{"title":"Single Sign-On (SSO)","href":"/features/sso"},{"title":"Billing","icon":"credit-card","href":"/features/billing"},{"title":"Spending Alerts","href":"/features/alerts"},{"title":"Webhook Signatures","icon":"signature","href":"/features/webhook-signatures"},{"title":"Guardrails","href":"/features/guardrails"},{"title":"RBAC (Role-Based Access Control)","href":"/features/rbac"},{"title":"Data Privacy \u0026 Zero Data Retention","icon":"lock","href":"/features/data-privacy"},{"title":"Compliance","icon":"shield-check","href":"/features/compliance-report"}]},{"group":"MCP Gateway","pages":[{"title":"Overview","icon":"plug","href":"/features/mcp-gateway"},{"title":"MCP Server Management","icon":"server","href":"/features/mcp-server-management"},{"title":"User Key Management","icon":"key","href":"/features/mcp-user-keys"},{"title":"MCP Analytics","icon":"chart-line","href":"/features/mcp-analytics"},{"title":"AI Tool Integration","icon":"plug-circle-plus","href":"/features/mcp-integration"}]}]},{"tab":"Integrations","pages":[{"title":"Integrations","href":"/integrations/requesty-cli"}]},{"tab":"Inference API","pages":[{"title":"Inference API","href":"/api-reference/inference-apis"}]},{"tab":"Management API","pages":[{"title":"Management API","href":"/api-reference/management-apis"}]}]},"title":"Auto Routing - Requesty Docs","buildId":"dpl_5UDDZ9hnigTkoV7QtvQ39eUp84nu","deploymentId":"dpl_5UDDZ9hnigTkoV7QtvQ39eUp84nu","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-CUTvSGqu.js","DynamicMarkdown-BGu84FgU.js","zoom-image-lightbox-ChyC7Hte.js","PlusIcon-DXkY3IBj.js","lightbox-handle-r17bVUz3.js"]}