Claude Code has no built-in way to use non-Anthropic models. It does support overriding the API URL with an environment variable, but there are drawbacks. OpenRouter is not used within Claude Code at all.
There are some gotchas with it too. e.g. The "system" role message isn't supported in the Anthropic API. It's not the biggest deal but it's a potential footgun.
On the other hand, the openrouter SDK + API takes care of this for you: Their one gateway has ways of enabling provider-specific features. You can switch the model name and pretty much be good to go.
Claude Code does not work with other models out of the box. You need a wrapper around Claude Code that translates other model requests + respondes to what the harness expects.
And, to answer your question, no. The existence of a common API makes it trivial to change zero code and send requests to a different model.
OpenRouter does more than just proxying; they also aggregate providers for open-weight models, which has a stabilizing effect on pricing and gives you protection against a single provider's downtime.
the value of openrouter is it offers centralized billing. you can route your calls to any provider you want, test a whole bunch of models against each other, and you just get one bill from openrouter. switching to a new model, or a new provider of the same model, doesn't mean setting up a new billing account with a new provider.