API migration checker: OpenRouter to KeepRouter
Check credential-free API configuration locally. Verify model IDs, base URLs, endpoints and OpenRouter routing differences, then generate a safe migration starter.
Check the migration before sending a request
An OpenAI-compatible base URL is a transport starting point. Model IDs, request fields, routing rules and response handling still need their own checks. This free tool compares credential-free JSON with the current KeepRouter model catalog, highlights migration work and creates a small starter configuration. No sign-in is needed.
- Remove all keys, authorization headers, cookies, signed URLs and private content before pasting. Use a short synthetic request.
- Paste a JSON object with
base_url(orbaseURL),endpoint, and arequest(orbody) object. A bare request object also works. This is JSON only, not Python, JavaScript, cURL or YAML. - Select an exact target from the loaded catalog. An exact source ID can match automatically; a provider prefix or a similar name cannot establish equivalence.
- Read every change and test item. Copy the minimal starter, then run a controlled test from your own machine.
What the checker verifies
| Check | Result and boundary |
|---|---|
| Client base URL | The OpenAI client uses https://keeprouter.com/v1. Do not carry over OpenRouter's /api prefix or append /chat/completions to the client base URL. |
| Target model | Uses the currently loaded public catalog, or your explicit selection from it. It never guesses that removing a vendor prefix produces a supported model. |
| Endpoint and modality | Shows the modality's normal endpoint. Chat, images, embeddings, speech and asynchronous video are different contracts. |
| OpenRouter routing | Flags provider, models and route; provider preferences and fallback behavior are not automatically carried over. |
| Feature-specific fields | Flags tools, structured output, reasoning, plugins, transforms and streaming for separate validation. |
| Safe starter | Uses sample text and omits original prompts, media, headers, tool definitions and unknown fields. This is a baseline, not an automatic request conversion. |
OpenRouter documents provider routing preferences and OpenRouter-only request fields. Those controls are distinct from a shared OpenAI-style request format. KeepRouter's internally configured routing does not promise equivalent user-controlled provider selection, data-policy filters or model fallback behavior. Review any such requirement before switching.
For the product-level differences, read the KeepRouter and OpenRouter comparison. The OpenRouter to KeepRouter migration runbook covers request mapping, live tests, rollout and rollback. These guides help decide whether to migrate before creating a key.
Endpoint compatibility still needs a real test
KeepRouter exposes Chat Completions, Responses and Anthropic Messages routes, but the public catalog does not certify every model/route pairing. A Responses or Messages payload cannot be converted by renaming its endpoint. The generated starter uses the model's normal modality endpoint; it does not translate conversation state, tools or protocol-specific response fields.
For video, use the selected model page to verify duration and media requirements before submission. This checker deliberately does not invent a generic video request. For speech, validate the selected voice and output format. For all models, check key scope, limits, price and application quality. A catalog match is not proof that your key can call the model.
For streaming, inspect incremental events, usage, cancellation and partial failures. For tools, finish one full tool-call round trip. For structured output, validate the actual returned JSON against your schema, including refusal and invalid-output paths. The tool reports these as tests, never as a compatibility pass.
Download a starter you can inspect and run
The migration starter pack contains Python and Node examples, environment-variable instructions, a migration checklist and expected outputs. Its reviewed source is also available in the public example repository. Its dry-run mode makes no network request. Review the files before running them; an actual inference call consumes the quota or credit of the key and selected model. The download itself does not create a key or migrate an application.
After checking the configuration, choose an exact current model in the form above. The result links to key setup for that same model only when it can generate a safe starter. Create a scoped key, run the dry-run locally, then test one bounded live request. Paid models may require prepaid credit. A key does not certify the migration.
Continue with the OpenAI SDK setup guide, API error reference, API documentation and cost calculator.
Privacy and limits
Your JSON is processed in this browser. The form does not send it to a server, place it in the URL, or save it to browser storage. Loading the public model catalog makes a separate GET request containing no form input. Copying a starter happens only when you press its copy button.
Detected credentials cause the form and result to be cleared. Detection is conservative, not a guarantee that every secret format will be found. Never paste a real credential or sensitive prompt. Inputs are limited to 64 KiB of characters and 40 nested levels. The tool cannot validate account permissions, live provider availability, latency or actual model output.
Does a successful check mean migration is finished?
No. It identifies configuration work and provides a baseline for your own tests. Authentication, response parsing, tool behavior, error handling and cost must still be verified.
Why was my OpenRouter model not mapped automatically?
Provider-prefixed IDs and routing suffixes are not a reliable mapping to another service. Choose the intended model from the current catalog and evaluate it explicitly; selecting another model is not a claim of equivalence.
Can I paste my API key or run a request here?
No. The checker rejects detected credentials and makes no inference calls. Configure your key in your own environment when running the starter pack.