OpenRouter
@media screen and (max-width: 600px) {
.or-card {
width: 100% !important;
max-width: 100% !important;
}
.or-pad {
padding-left: 24px !important;
padding-right: 24px !important;
}
.or-h1 {
font-size: 20px !important;
line-height: 1.35 !important;
}
.or-logo {
width: 153px !important;
height: 28px !important;
max-width: 153px !important;
}
.or-tbl-cell {
padding: 10px 12px !important;
}
.or-tbl-compact-row td {
padding-left: 20px !important;
padding-right: 20px !important;
}
.or-tbl-compact .or-tbl-row .or-tbl-cell {
padding: 7px 7px !important;
font-size: 11px !important;
}
.or-tbl-compact .or-tbl-head .or-tbl-cell {
padding: 6px 6px !important;
font-size: 9px !important;
letter-spacing: 0.02em !important;
}
.or-stat-grid td {
display: block !important;
width: 100% !important;
border-right: 0 !important;
border-bottom: 1px solid #e4e4e7 !important;
}
.or-stat-grid td:last-child {
border-bottom: 0 !important;
}
}
@media only screen and (max-width: 480px) {
.em-shell-pad {
padding: 20px 8px !important;
}
.em-row-pad {
padding-left: 20px !important;
padding-right: 20px !important;
}
.em-row-pad-top {
padding-left: 20px !important;
padding-right: 20px !important;
padding-top: 28px !important;
}
.em-stack {
display: block !important;
width: 100% !important;
box-sizing: border-box !important;
border-right: none !important;
text-align: left !important;
}
.em-stack-divide {
border-bottom: 1px solid rgba(128,128,128,0.25) !important;
}
.em-stack-divide:last-child {
border-bottom: none !important;
}
.em-shrink-pad {
padding-left: 12px !important;
padding-right: 12px !important;
}
.em-num-col {
width: 28px !important;
padding-right: 8px !important;
}
.em-data-cell {
padding: 8px 6px !important;
font-size: 11px !important;
}
.em-data-cell-model {
word-break: break-all !important;
}
.em-diagram-pad {
padding: 14px 12px !important;
}
.em-h1-mobile {
font-size: 18px !important;
line-height: 1.3 !important;
}
.em-stat-mobile {
font-size: 18px !important;
}
.em-thumb-pad {
padding: 90px 20px !important;
}
.em-stack-gap {
padding: 0 0 24px 0 !important;
}
.em-stack-gap:last-child {
padding-bottom: 0 !important;
}
.em-stack-content {
padding: 14px 0 0 0 !important;
}
.em-table-head {
display: none !important;
}
.em-table-row {
display: block !important;
padding: 6px 0 !important;
border-top: none !important;
}
.em-table-row > td {
display: block !important;
padding: 10px 16px !important;
border: none !important;
border-bottom: 1px solid rgba(128,128,128,0.25) !important;
}
.em-table-row > td:last-child {
border-bottom: none !important;
}
.em-cell-label {
display: block !important;
font-size: 10px !important;
font-weight: 700 !important;
letter-spacing: 0.12em !important;
text-transform: uppercase !important;
opacity: 0.7 !important;
margin-bottom: 2px !important;
}
.em-thumb {
width: 100% !important;
max-width: 100% !important;
height: auto !important;
}
.em-model-slug {
font-size: 11.5px !important;
}
}
@media (prefers-color-scheme: dark) {
.or-page {
background-color: #0e1315 !important;
}
.or-cta {
background-color: #fcfcfe !important;
color: #03080a !important;
}
.or-logo-light {
display: none !important;
}
.or-logo-dark {
display: block !important;
}
.or-card {
background-color: #18181b !important;
}
.or-panel {
background-color: #27272a !important;
}
.or-callout {
background-color: #27272a !important;
}
.or-divider {
background-color: #3f3f46 !important;
}
.or-border-t {
border-top-color: #3f3f46 !important;
}
.or-border-r {
border-right-color: #3f3f46 !important;
}
.or-border-card {
border-color: #52525b !important;
}
.or-ink {
color: #f4f4f5 !important;
}
.or-muted {
color: #a1a1aa !important;
}
.or-strong {
color: #f4f4f5 !important;
}
.or-link-soft {
color: #a1a1aa !important;
}
.or-inline-code {
background-color: #27272a !important;
color: #f4f4f5 !important;
}
.or-code-comment {
color: #a1a1aa !important;
}
.or-code-flag {
color: #fcd34d !important;
}
.or-code-string {
color: #6ee7b7 !important;
}
.or-code-var {
color: #c4b5fd !important;
}
.or-code-url {
color: #7dd3fc !important;
}
.or-code-ink {
color: #f4f4f5 !important;
}
.or-pill {
background-color: #27272a !important;
color: #a1a1aa !important;
}
.or-tbl-head {
background-color: #27272a !important;
color: #a1a1aa !important;
}
.or-tbl-head .or-tbl-cell {
background-color: #27272a !important;
color: #a1a1aa !important;
}
.or-tbl-row {
background-color: #18181b !important;
}
.or-tbl-cell {
color: #fafafa !important;
border-color: #3f3f46 !important;
}
.or-foot-muted {
color: #a1a1aa !important;
}
.or-foot-link {
color: #a1a1aa !important;
}
.or-exacto-bg {
background-color: #27272a !important;
}
.or-exacto-card {
background-color: #0f0f12 !important;
border-color: #3f3f46 !important;
color: #a1a1aa !important;
}
.or-exacto-pick {
background-color: #27272a !important;
border-color: #a1a1aa !important;
color: #f4f4f5 !important;
}
}
@media screen {
[data-ogsc] .or-page {
background-color: #0e1315 !important;
}
[data-ogsc] .or-cta {
background-color: #fcfcfe !important;
color: #03080a !important;
}
[data-ogsc] .or-logo-light {
display: none !important;
}
[data-ogsc] .or-logo-dark {
display: block !important;
}
[data-ogsc] .or-card {
background-color: #18181b !important;
}
[data-ogsc] .or-panel {
background-color: #27272a !important;
}
[data-ogsc] .or-callout {
background-color: #27272a !important;
}
[data-ogsc] .or-divider {
background-color: #3f3f46 !important;
}
[data-ogsc] .or-border-t {
border-top-color: #3f3f46 !important;
}
[data-ogsc] .or-border-r {
border-right-color: #3f3f46 !important;
}
[data-ogsc] .or-border-card {
border-color: #52525b !important;
}
[data-ogsc] .or-ink {
color: #f4f4f5 !important;
}
[data-ogsc] .or-muted {
color: #a1a1aa !important;
}
[data-ogsc] .or-strong {
color: #f4f4f5 !important;
}
[data-ogsc] .or-link-soft {
color: #a1a1aa !important;
}
[data-ogsc] .or-inline-code {
background-color: #27272a !important;
color: #f4f4f5 !important;
}
[data-ogsc] .or-code-comment {
color: #a1a1aa !important;
}
[data-ogsc] .or-code-flag {
color: #fcd34d !important;
}
[data-ogsc] .or-code-string {
color: #6ee7b7 !important;
}
[data-ogsc] .or-code-var {
color: #c4b5fd !important;
}
[data-ogsc] .or-code-url {
color: #7dd3fc !important;
}
[data-ogsc] .or-code-ink {
color: #f4f4f5 !important;
}
[data-ogsc] .or-pill {
background-color: #27272a !important;
color: #a1a1aa !important;
}
[data-ogsc] .or-tbl-head {
background-color: #27272a !important;
color: #a1a1aa !important;
}
[data-ogsc] .or-tbl-head .or-tbl-cell {
background-color: #27272a !important;
color: #a1a1aa !important;
}
[data-ogsc] .or-tbl-row {
background-color: #18181b !important;
}
[data-ogsc] .or-tbl-cell {
color: #fafafa !important;
border-color: #3f3f46 !important;
}
[data-ogsc] .or-foot-muted {
color: #a1a1aa !important;
}
[data-ogsc] .or-foot-link {
color: #a1a1aa !important;
}
[data-ogsc] .or-exacto-bg {
background-color: #27272a !important;
}
[data-ogsc] .or-exacto-card {
background-color: #0f0f12 !important;
border-color: #3f3f46 !important;
color: #a1a1aa !important;
}
[data-ogsc] .or-exacto-pick {
background-color: #27272a !important;
border-color: #a1a1aa !important;
color: #f4f4f5 !important;
}
[data-ogsb] .or-page {
background-color: #0e1315 !important;
}
[data-ogsb] .or-card {
background-color: #18181b !important;
}
[data-ogsb] .or-panel {
background-color: #27272a !important;
}
[data-ogsb] .or-callout {
background-color: #27272a !important;
}
[data-ogsb] .or-divider {
background-color: #3f3f46 !important;
}
[data-ogsb] .or-pill {
background-color: #27272a !important;
}
[data-ogsb] .or-tbl-head {
background-color: #27272a !important;
}
[data-ogsb] .or-tbl-head .or-tbl-cell {
background-color: #27272a !important;
}
[data-ogsb] .or-tbl-row {
background-color: #18181b !important;
}
[data-ogsb] .or-exacto-bg {
background-color: #27272a !important;
}
[data-ogsb] .or-exacto-card {
background-color: #0f0f12 !important;
}
[data-ogsb] .or-exacto-pick {
background-color: #27272a !important;
}
}
Access all major models through one unified interface, routed for the best price and uptime. ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏
Hi there,
Welcome to OpenRouter. One key reaches every major model.
One API key reaches 400+ models from 70+ providers, all through a single unified interface. Every request routes to the best available provider for price and uptime, with automatic failover when one goes down. Switch models by changing one string, not your integration. Make your first call below.
Get set up
1. Create your API key
One key reaches every model and provider. Scope keys per project, with per-key spend limits.
2. Make your first call
Paste the snippet below with your key. The response routes to the best live provider automatically.
3. Add credits when you are ready
The free tier works without a card. Credits raise your rate limits and open every model.
Create your API key
from openrouter import OpenRouter
import os
with OpenRouter(api_key=os.getenv("OPENROUTER_API_KEY")) as client:
response = client.chat.send(
model="~openai/gpt-latest",
messages=[
{"role": "user", "content": "What is the meaning of life?"}
],
)
print(response.choices[0].message.content)
The ~ prefix is a latest alias: it always resolves to the newest flagship in that family, so the code keeps working without redeploying. Swap in any exact slug, like anthropic/claude-opus-4.8, when you want to pin one.
Models and rankings
Every model is ranked by real production traffic, not marketing. The rankings show what teams actually run in production, updated as usage shifts between models. It is the fastest read on what is working right now.
Featured
anthropic/claude-opus-4.8
Anthropic’s flagship for autonomous knowledge work and coding. Text, image, and file input, 1M context, reasoning support.
google/gemini-3.5-flash
text, image, audio, video in, 1M
openrouter/auto
routes each request to the best model
See the rankings
Built for teams
Workspaces scope keys, spend limits, and provider rules per project; guardrails set budget caps and policy controls across every key. Zero-data-retention routing is a per-request flag, and EU in-region processing runs on a dedicated base URL for enterprise accounts. If you are evaluating gateways for an org, talk to the enterprise team.
Set up your workspace
rows; place inside the open
from mkt-header, alongside mkt-new-models. Naming: mkt- = marketing
component library (txn- reserved).
WHY INLINE, NOT A COLLECTION: OR's announcements have no RSS/Atom/JSON feed
(verified 2026-06-16), so posts are hand-curated in the `posts` capture.
Upgrade path: a Google Sheet -> Cio Collection, swap the capture/split for a
collections.N read; dedup/cap/render logic below is unchanged either way.
CONFIG (edit these assigns; rest is mechanism):
- posts: curated lineup, newest-first. Records split by ` @@@ `, fields by
` ||| `: slug ||| title ||| summary ||| image_url ||| cta_verb. slug = path
after openrouter.ai/ (e.g. announcements/fusion-beats-frontier). Empty cta
falls back to "Read the announcement". image_url MUST be Cio-hosted
(userimg-assets.customeriomail.com/...), never an openrouter.ai hotlink
(OR moves those paths, card silently 404s). Upload via
scripts/cio-playwright/upload-snippet-blog-thumbs.js, 600x335 16:9 JPEG
under 180KB (img height=113 keeps card heights equal; tall/square blows
out Outlook).
- blog_posts: optional per-email override, same format, assign before the
include (e.g. a monthly recap's own posts). Unset = canonical default.
- require_section: SEO guard. OR's index mixes /announcements/ (real
launches/news), /tutorials/ (SEO listicles), /insights/ (explainers).
Only posts whose first URL segment matches this render. Default
'announcements'. Use 'any' to allow all sections (curate by hand); do not
use '' (Liquid default filter treats empty as unset). Standard: only
launches/announcements/company news/original research belong in a
lifecycle email, never a /tutorials/ piece.
- max_cards (default 3), show_eyebrow / show_footer (default true),
announcements_url, utm_campaign/utm_source/utm_medium (a template may
override before the include, e.g. m1-newness sets utm_campaign), and
blog_utm_prefix (per-template utm_content prefix, default 'blog').
DEDUP ("don't repeat a post already shown in this email"), two layers:
1. blog_exclude: template assigns before the include, comma-separated
slugs, to skip posts mentioned elsewhere in the same email (e.g. a hero
card). Always works (plain template-scope Liquid).
2. blog_shown: running accumulator this snippet appends rendered slugs to,
so a second include later in the same email auto-skips repeats. Depends
on Cio sharing Liquid scope across includes; confirm at test-send.
Prose mentions aren't auto-detected; add manually to blog_exclude if needed.
FAILURE MODES: empty/all-excluded list renders no cards but the footer
callout still renders (never blank). A record missing fields falls back to
"Read the announcement"; missing image renders no , title/link still show.
VERIFY AT GO-LIVE (UI test-send to nick.livermore@openrouter.ai; API
test-send does not resolve Liquid/snippets): exactly max_cards cards render,
newest-first; curl every href and image src for HTTP 200 (note OR's
/blog/images/blog/ path, older /images/blog/ 404s); if two stacks present,
second shows no repeat; no em dash, no "Hey", no creepy/temporal phrasing.
-->
Latest from the blog
A New Look for OpenRouter
Built from first principles and grounded in timeless Bauhaus philosophy, our new brand identity marks the beginning of our next chapter.
Read the announcement →
The OpenRouter MCP Server
Connect your coding agent to OpenRouter's live model catalog, benchmarks, docs, and test inference, all without leaving your editor.
Read the announcement →
Introducing the Unified Image API
A dedicated Image API with capability discovery across 30+ models from 8 providers. One endpoint tells your code what each model can do.
Read the announcement →
More shipping soon. Full changelog lives at openrouter.ai/announcements. View announcements →
Guides and cookbooks live in the docs. Recipes for routing, structured outputs, tool calling, and prompt caching, ready to copy. Read the guides →
openrouter.ai·Discord·X·Docs
169 Madison Avenue, New York, NY 10016
Manage preferences|Unsubscribe