{"slug": "how-to-let-openrouter-pick-your-model-and-choose-who-serves-it", "title": "How to Let OpenRouter Pick Your Model, and Choose Who Serves It", "summary": "Backboard has added support for OpenRouter's automatic model selection and per-request provider selection, giving developers two independent routing controls. The feature allows users to set the model to 'openrouter/auto' for automatic classification and routing, with options to restrict candidates via allowed_models, excluded_models, and cost_tier, or to pin a specific provider with fallback options. Both controls are now live in the Backboard API and its Python and TypeScript SDKs.", "body_md": "Backboard now supports OpenRouter automatic model selection (openrouter/auto) and per request provider selection. Here is how both work, with JSON examples for the Backboard API.\n\nBackboard now gives you two independent routing controls for OpenRouter requests:\n\n`llm_provider`\n\nto `openrouter`\n\nand `model_name`\n\nto `openrouter/auto`\n\n. OpenRouter classifies the prompt and picks the model. You pay the standard rate of the model it chooses, with no additional router fee.`openrouter.providers`\n\narray, and keep `allow_fallbacks`\n\non so the request still completes when that provider is unavailable.\nBoth are live now in the Backboard API and in the Python and TypeScript SDKs from Most LLM routing writeups treat \"which model\" as the whole question. It is not.\n\nOpenRouter aggregates 17,000+ models, and many of those models are served by more than one upstream provider. The same model weights can sit behind different pricing, different throughput, different context handling, and different uptime depending on who is running them. So there are two decisions in every request:\n\nSet the model name to `openrouter/auto`\n\n. OpenRouter classifies the incoming prompt and routes it to a model it judges appropriate for that class of work.\n\n```\n{\n  \"llm_provider\": \"openrouter\",\n  \"model_name\": \"openrouter/auto\",\n  \"openrouter\": {\n    \"cost_tier\": \"low\"\n  }\n}\n```\n\nThis is useful when your traffic is mixed. A support inbox that receives one line acknowledgements and multi page technical escalations does not need the same model for both. Automatic selection sizes the model to the prompt instead of forcing you to build that classifier yourself.\n\nNo. You pay the standard rate of whichever model OpenRouter selects. There is no additional router fee layered on top.\n\nAutomatic does not have to mean unbounded. Three fields inside the `openrouter`\n\nobject narrow the candidate set before selection happens.\n\n| Field | What it does | Example |\n|---|---|---|\n`allowed_models` |\nRestricts selection to a list or pattern of models | `[\"anthropic/*\"]` |\n`excluded_models` |\nRemoves specific models from consideration | `[\"some-vendor/experimental-model\"]` |\n`cost_tier` |\nCaps how expensive a model the router may reach for, from `low` to `max`\n|\n`\"low\"` |\n\n`allowed_models: [\"anthropic/*\"]`\n\nlimits automatic selection to that vendor family. That pattern matters for teams with a procurement, residency, or vendor approval constraint. You get automatic selection inside a boundary you defined, rather than automatic selection across everything.\n\n`cost_tier`\n\nis the blunt lever. Set it to `low`\n\nfor high volume, low stakes traffic. Raise it for work where an extra few cents per call is irrelevant next to the cost of a wrong answer.\n\nPass a `providers`\n\narray inside the `openrouter`\n\nobject. The request is routed to that provider for the model you named.\n\n```\n{\n  \"llm_provider\": \"openrouter\",\n  \"model_name\": \"moonshotai/kimi-k3\",\n  \"openrouter\": {\n    \"providers\": [\"together\"],\n    \"allow_fallbacks\": true\n  }\n}\n```\n\nHere the model is fixed and the provider is fixed. You chose `moonshotai/kimi-k3`\n\n, and you chose who runs it.\n\nThis matters when you have benchmarked providers against each other and found a real difference, when one provider's pricing for a given model is materially better, or when you have an existing commercial relationship with one of them.\n\nThat is what `allow_fallbacks`\n\nis for. With `allow_fallbacks: true`\n\n, the request can fall back to another provider serving the same model when your selected provider is unavailable. Your preference is honored when it can be, and the request still completes when it cannot.\n\nSet it to `false`\n\nwhen the provider choice is a hard requirement rather than a preference, and you would rather see the request fail than silently run somewhere else.\n\n| Your situation | Use |\n|---|---|\n| Mixed prompt complexity, no strong model preference |\n`openrouter/auto` with a `cost_tier`\n|\n| Vendor family is constrained but model choice is not |\n`openrouter/auto` with `allowed_models`\n|\n| You know exactly which model you want | Pin `model_name` , leave provider unset |\n| You know the model and the provider you want | Pin `model_name` plus `openrouter.providers`\n|\n| Provider choice is a hard requirement |\n`providers` with `allow_fallbacks: false`\n|\n\nThese are per request settings, not account level settings. Different endpoints in the same application can make different choices.\n\nThe response tells you. Backboard returns the provider and model that handled the request alongside token counts, so automatic selection does not become a visibility gap. You can log what ran, attribute cost to it, and audit routing behavior after the fact.\n\nThat is the practical objection to automatic routing, and it is the reason the response carries the answer rather than leaving you to infer it.\n\nThe **Backboard Model Library** now surfaces provider options for OpenRouter models, alongside pricing, context limits, uptime, and other model information.\n\nBrowse it here: [https://app.backboard.io/dashboard/model-library](https://app.backboard.io/dashboard/model-library)\n\nCheck the library before you hardcode a provider name. Provider availability for a given model changes.\n\n`llm_provider`\n\nset to `openrouter`\n\nFull parameter reference: [https://docs.backboard.io/concepts/messages](https://docs.backboard.io/concepts/messages)\n\n**What is openrouter/auto?**\n\n`openrouter/auto`\n\n, and OpenRouter classifies the prompt and selects a model for it.**Does automatic model selection add a fee?**\n\nNo. You pay the standard rate of the model that gets selected.\n\n**Can I limit automatic selection to certain models?**\n\nYes. Use `allowed_models`\n\nto restrict the candidate set, `excluded_models`\n\nto remove specific models, and `cost_tier`\n\nto cap price, on a scale from `low`\n\nto `max`\n\n.\n\n**Can I choose which provider serves a model on OpenRouter?**\n\nYes. Pass a `providers`\n\narray inside the `openrouter`\n\nobject in your Backboard request body.\n\n**Does provider selection work with automatic model selection?**\n\nProvider selection applies to a model you have named. If you delegate model choice to `openrouter/auto`\n\n, you are also delegating the provider that serves it.\n\n**What does allow_fallbacks do?**\n\n`allow_fallbacks: true`\n\n, a request can move to another provider serving the same model when your selected provider is unavailable. With it off, the provider choice is strict.**Which SDK versions support this?**\n\nPython and TypeScript SDK v1.5.16 and later, plus the Backboard API directly.\n\n**How do I find out which model handled my request?**\n\nThe API response reports the provider and model that ran, so automatic selection stays auditable.\n\n`model_name: \"openrouter/auto\"`\n\ndelegates model choice to OpenRouter at no extra fee.`allowed_models`\n\n, `excluded_models`\n\n, and `cost_tier`\n\nkeep that delegation inside boundaries you set.`openrouter.providers`\n\npicks who serves a named model, and `allow_fallbacks`\n\ndecides whether that pick is a preference or a rule.", "url": "https://wpnews.pro/news/how-to-let-openrouter-pick-your-model-and-choose-who-serves-it", "canonical_source": "https://dev.to/backboardio/how-to-let-openrouter-pick-your-model-and-choose-who-serves-it-1ba4", "published_at": "2026-08-21 14:06:54+00:00", "updated_at": "2026-08-21 14:15:29.010880+00:00", "lang": "en", "topics": ["developer-tools", "ai-infrastructure", "ai-products"], "entities": ["Backboard", "OpenRouter"], "alternates": {"html": "https://wpnews.pro/news/how-to-let-openrouter-pick-your-model-and-choose-who-serves-it", "markdown": "https://wpnews.pro/news/how-to-let-openrouter-pick-your-model-and-choose-who-serves-it.md", "text": "https://wpnews.pro/news/how-to-let-openrouter-pick-your-model-and-choose-who-serves-it.txt", "jsonld": "https://wpnews.pro/news/how-to-let-openrouter-pick-your-model-and-choose-who-serves-it.jsonld"}}