idapt ships an OpenRouter-compatible API. If your app already talks to OpenRouter, you migrate by changing one URL: your SDK, request shapes, and response parsing stay the same.
Point your client's base URL at the idapt OpenRouter-compat path, the same path-prefix pattern as idapt's OpenAI- and Anthropic-compatible APIs:
- https://openrouter.ai/api/v1
+ https://idapt.app/api/openrouter/v1Authenticate with an idapt API key as a bearer token (`Authorization: Bearer …`). Create one from your account settings. Your SDK, request shapes, and response parsing stay the same.
| Method | Endpoint | Notes |
|---|---|---|
| POST | /api/openrouter/v1/chat/completions | Streaming + non-streaming. OpenRouter provider policy, model suffixes, multi-model fallback, per-key limits, `provider`, and `usage.cost`. |
| POST | /api/openrouter/v1/completions | Legacy text completions bridge. |
| POST | /api/openrouter/v1/anthropic/v1/messages | Anthropic-shape Messages API. |
| POST | /api/openrouter/v1/embeddings | OpenAI-shape embeddings. |
| POST | /api/openrouter/v1/audio/speech | Text-to-speech. |
| POST | /api/openrouter/v1/audio/transcriptions | Speech-to-text. |
| GET | /api/openrouter/v1/models | Full catalog: `architecture`, `pricing`, `top_provider`, `supported_parameters`. |
| GET | /api/openrouter/v1/models/count | Catalog size. |
| GET | /api/openrouter/v1/models/{author}/{slug} | Single model detail. |
| GET | /api/openrouter/v1/models/{author}/{slug}/endpoints | Per-provider endpoint card. |
| GET | /api/openrouter/v1/generation | Request reconciliation by generation id. |
| GET | /api/openrouter/v1/key | Current key metadata with per-key usage and limits for bearer calls. |
| GET | /api/openrouter/v1/credits | Credit balance and usage. |
| GET · POST · PATCH · DELETE | /api/openrouter/v1/keys | API key CRUD with lifetime USD spend caps. |
| POST | /api/openrouter/v1/responses | Non-streaming text Responses bridge. |
idapt never silently ignores a request field it cannot honor. If you send an OpenRouter feature that is not implemented yet, the API rejects the request with a clear 422 (unsupported request field) or 501 (unbuilt endpoint), and the error body carries a metadata.roadmap_url linking straight to the matching section below. A misrouted request with the wrong provider and wrong bill is worse than a clear error, so unsupported features are explicit.
What: The `provider` request object (`order`, `only`, `ignore`, `allow_fallbacks`, `sort`, `max_price`, `require_parameters`, `quantizations`), plus the legacy `route` string.
Status: Live for chat-compatible requests. The router honors allow/deny/order, fallback disabling, price/throughput/latency/uptime sort, max-price ceilings, required-parameter filtering, quantization labels and legacy route passthrough.
Ships: Live for /chat/completions, /completions, and non-streaming /responses.
What: An array of model ids that the router falls through on upstream failure or rate-limit.
Status: Live. `models` is normalized to an ordered model-candidate list, suffixes are stripped for catalog lookup, and the connector tries the next model when no provider path succeeds.
Ships: Live for chat-compatible requests.
What: The `reasoning` object: `effort` (none/minimal/low/medium/high), `max_tokens` budget, `exclude`, `enabled`.
The surface above is production-supported. The roadmap items are landing in phases, and unsupported fields always fail with a clear error. For the full developer surface (REST API, CLI, MCP) see the developer hub.
Status: Live. The OpenRouter-shape `reasoning` object is preserved through the canonical chat request and providers that do not support reasoning are filtered when required.
Ships: Live for chat-compatible requests.
What: The `transforms` array: middle-out context compression for under-context models.
Status: Accepted and passed through on OpenRouter-routed calls. Requests using transforms force the OpenRouter connector so direct providers do not receive unknown fields.
Ships: Live for OpenRouter-routed chat-compatible requests.
What: The `plugins` array: file-parser (PDF OCR), response-healing (JSON repair), context-compression.
Status: Accepted and passed through on OpenRouter-routed calls. The `:online` suffix injects the web plugin automatically.
Ships: Live for OpenRouter-routed chat-compatible requests.
What: The `service_tier` field: `flex` (cheaper, slower) / `priority` (faster, costlier) provider QoS.
Status: Accepted and preserved in the canonical request. Providers that advertise support can be selected with `provider.require_parameters`.
Ships: Live for chat-compatible requests.
What: Autonomous tools the gateway executes: `openrouter:web_search`, `web_fetch`, `image_generation`, and similar `openrouter:`-prefixed tool names.
Status: Accepted and forced through the OpenRouter connector so gateway-owned tools are not sent to direct native providers.
Ships: Live for OpenRouter-routed chat-compatible requests.
What: Fetch token counts, exact cost, latency and finish reason for a past request by id.
Status: Live for idapt-recorded compatible API calls. Look up by provider generation id, with internal usage-id fallback for historical rows.
Ships: Live.
What: Cohere / Voyage-shape document reranking.
Status: Planned. Not yet available on the compatibility surface.
Ships: Planned.
What: Async video generation with job polling: `POST /videos`, `GET /videos/{jobId}`, `GET /videos/{jobId}/content`, `GET /videos/models`.
Status: Planned. Not yet available on the compatibility surface.
Ships: Planned.
What: The stateless OpenAI Responses-shape endpoint.
Status: Live for common non-streaming stateless text requests by adapting Responses `input` / `instructions` into chat completions. Streaming Responses events are planned.
Ships: Non-streaming live; streaming remains a follow-up.
What: The PKCE-secured endpoint that exchanges an auth code for a user-bound API key, used by editor integrations for a 'Sign in' flow.
Status: Planned. Create an API key from your account settings in the meantime.
Ships: Planned.
What: Per-provider latency percentiles (p50/p75/p90/p99), throughput and uptime windows on `GET /models/{author}/{slug}/endpoints`.
Status: Live for pricing and capabilities per provider; the latency, throughput, and uptime fields show indicative values while live telemetry is in beta.
Ships: Planned.