Skip to main content
Phaseo is an OpenAI-compatible alternative to OpenRouter. If your app already uses OpenRouter through the OpenAI SDK or direct HTTP calls, you can usually migrate at the client boundary without rewriting prompts or application logic.
Stripe confirmed its acquisition of OpenRouter on August 19, 2026. An acquisition does not require an immediate cutover, but it is a useful time to test a second gateway and document a config-only rollback path.

What changes

The migration has four parts:
  1. Keep payload shape unchanged.
  2. Swap base URL and API key source.
  3. Verify model IDs and any OpenRouter-only headers.
  4. Roll traffic gradually while comparing latency, output, and cost behavior.

Before you start

  • Access to the current OpenRouter integration code and deployment config.
  • PHASEO_API_KEY available in dev, staging, and production.
  • A short list of production model IDs and representative prompts.

1) Inventory current OpenRouter usage

Start by identifying every place OpenRouter is referenced: endpoint URLs, keys, model IDs, and any provider-specific headers.
  • Find openrouter.ai endpoint references.
  • Find OPENROUTER_API_KEY usage in code, CI, and hosting env vars.
  • Find OpenRouter-only headers such as HTTP-Referer and X-Title.
  • Document active model IDs and any fallback-chain logic.
  • Document any reusable prompt, provider, or parameter defaults that should move into Gateway presets instead of staying duplicated in application code.

2) Swap base URL and credentials

Keep request payload shape unchanged first. Do behavior parity before optimization.

3) Validate model IDs and map OpenRouter-only behavior

Do not assume every previous alias is valid. Query /v1/models and verify each production model ID.
  • Keep Authorization: Bearer format unchanged.
  • Keep HTTP-Referer and X-Title when they identify the calling application. Phaseo accepts the lowercase equivalents http-referer and x-title.
  • If callers depend on OpenRouter-only response fields, adapt them in one compatibility layer instead of changing every caller.
  • If your OpenRouter setup relies on provider allow/deny lists or routing defaults, map those into Presets and Routing and Fallbacks instead of scattering them across callers.
Do not copy OpenRouter provider preferences or response-only fields into every call site. Keep those differences in one adapter so rollback remains a base URL and credential change.

Map provider controls

Several common provider controls have direct Phaseo equivalents: Phaseo also supports provider.required_execution_region and provider.required_data_region when a workload needs regional controls. See Pin or ignore providers and Route only to EU or ZDR-capable providers for complete requests.

4) OpenRouter parity checklist

Use this checklist before shifting meaningful traffic:
  • Base URL updated to https://api.phaseo.app/v1.
  • OPENROUTER_API_KEY replaced with PHASEO_API_KEY in all environments.
  • All production model IDs verified against /v1/models.
  • One non-streaming request validated through /v1/chat/completions or /v1/responses.
  • One streaming request validated through the same app-level integration path used in production.
  • Generation lookups rechecked through GET /v1/generations?id=<request_id> so failed requests can be replayed from the stored replay_request payload when replay_supported=true.
  • Tool-calling and structured-output flows rechecked with real prompts.
  • Invalid-key and invalid-model failures verified in staging.
  • Any OpenRouter-only headers or response fields either removed or explicitly normalized.
  • Shared prompt/routing defaults moved into presets where appropriate.

Agent migration checklist

Give a coding agent this bounded sequence:
  1. Search runtime code and deployment config for openrouter.ai, OPENROUTER_API_KEY, sk-or-v1, HTTP-Referer, and X-Title.
  2. Change the client boundary to https://api.phaseo.app/v1 and PHASEO_API_KEY without adding a secret value to source control.
  3. Query GET /v1/models and record every old-to-new model mapping.
  4. Adapt OpenRouter-only routing options or response fields in one compatibility module.
  5. Run the health, models, non-streaming, streaming, and failure-path checks below.
  6. Report changed files, secret-name changes, model mappings, test evidence, parity gaps, and the rollback switch.
For a reusable workflow, install or invoke the repository’s OpenRouter to Phaseo migration skill. It packages the inventory, mapping, validation, reporting, and rollback requirements for coding agents.

5) Roll out safely

Use a staged rollout: dev first, then a small production slice, then full traffic once metrics are stable.
  1. Start with internal traffic only.
  2. Move to 5-10% production traffic and compare quality, latency, and cost metrics.
  3. Promote to 100% only after parity is confirmed.
  4. Keep rollback as a config-only endpoint/key switch until the cutover is stable.

Validation commands

Test streaming separately through the same endpoint:
Confirm that your application also handles an invalid model without exposing credentials:
Then:
  • Run one streaming request through your app-level integration test.
  • Run one negative test for invalid key or invalid model.
  • Replay a small golden prompt set and compare outputs to baseline.

Next steps

Last modified on August 23, 2026