OpenRouter's automatic fallback silently changes model behaviour, and provider.only is the fix
Simon Willison's Blog (citing Mohamed Moustafa)·medium signal
Mohamed Moustafa documented that OpenRouter's pitch of handling 'fallbacks automatically' and picking 'the most cost-effective option for each request' means the same model endpoint behaves differently depending on which backend serves it. Some providers lack vision capability for vision models, and the reasoning-effort option is interpreted differently per provider. The practical fix is pinning routing with the provider.only option after querying the /endpoints API method to see which providers actually serve a given model ID.