OpenRouterは、各社のLLMを1つのAPIキーとOpenAI互換のAPIで呼べるサービスです。モデルの切り替えは model の文字列を書き換えるだけで済み、落ちたときに別のモデルへ逃がす指定もできます。本記事では、公開されているドキュメントの原稿(GitHubの OpenRouterTeam/docs)から料金と制限の数字を読み、OpenAIのPython SDKが送る中身を手元の受け口で確かめました。LLM全体の地図は LLMとは?仕組み・主要モデル比較・ローカル実行・量子化を一気にまとめる2026年版 にあります。

WHAT IT REPLACES何を代替するか

各社のAPIを1つのキーと1つの書き方にまとめる

各社のAPIを直接

社ごとに契約とSDK

  • キーと請求が社ごとに分かれる
  • 書き方が社ごとに違う
  • 落ちたら自分で切り替える

OpenRouter

OpenAI互換の1つのAPI

  • キーと請求は1つクレジットを前払い
  • model を書き換えるだけprovider/model の形
  • 落ちたら次へmodels 配列で順に試す
出典: OpenRouter docs(Quickstart・Model Fallbacks)2026-10-17 のコミット

30秒でわかる(2026年10月18日時点)

  • ・正体:各社のモデルを1つのキーで呼ぶ有料のAPIサービス。OSSではない(公式SDKはApache-2.0)
  • ・料金:トークン単価は提供元と同じで上乗せなし。手数料はクレジットの購入時に5.5%(カード・最低0.80ドル)
  • ・無料モデル::free は毎分20回・1日50回まで。10ドル以上買ったことがあれば1日1,000回
  • ・呼び方:OpenAI SDKの base_url を替えるだけ。独自の指定は extra_body に入れる

OpenRouterとは|何ができるサービスか

OpenRouterは、モデルを提供する各社(プロバイダ)の前に立つ中継のAPIです。利用者はOpenRouterにだけキーとクレジットを持ち、anthropic/...・openai/...・meta-llama/... のように「作者/モデル名」でモデルを指定します。ドキュメントは「400以上のモデルとプロバイダ」を扱うとしています。

できることは次の4つです。

・1つの書き方:OpenAIのChat Completionsと同じ形で、どのモデルにも送れる
・切り替えと逃がし先:model に加えて models の配列を渡すと、1つ目が落ちたときに順に試す
・同じモデルの提供元の選択:同じモデルを複数の会社が出しているとき、価格や速さで選ぶ
・別名:~openai/gpt-sol-latest のような ~作者/系列-latest の形は、その系列の最新のモデルを指す

OSSのゲートウェイとの違いは置き場所と請求です。LiteLLMや9routerのような自前のゲートウェイは、手元で動かし、各社のキーと請求をそのまま使います。OpenRouterは向こうのサーバーで動き、請求も1つにまとまります。

  OpenRouter 自前のゲートウェイ(LiteLLM など) 各社のAPIを直接
動く場所 OpenRouterのサーバー 自分のサーバー 各社のサーバー
キーと請求 OpenRouterに1つ 各社のまま 各社のまま
料金の上乗せ 単価は上乗せなし、購入時に手数料 なし(運用の手間がかかる) なし
落ちたときの切り替え models で指定 設定で書く 自分で書く
プロンプトの通り道 OpenRouter → 各社 自分 → 各社 直接

OpenRouterの使い方|OpenAI SDKで呼ぶ

キーはOpenRouterの画面で作り、環境変数 OPENROUTER_API_KEY に入れます。あとはOpenAIのSDKで base_url を替えます。公式のQuickstartとModel Fallbacksの例をもとにした呼び出しです。

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://openrouter.ai/api/v1",
    api_key=os.environ["OPENROUTER_API_KEY"],
)
resp = client.chat.completions.create(
    model="~anthropic/claude-sonnet-latest",
    messages=[{"role": "user", "content": "OpenRouterを一文で説明して"}],
    extra_body={"models": ["~openai/gpt-sol-latest", "openrouter/free"]},
)
print(resp.model, resp.choices[0].message.content)

このコードの base_url だけを手元の受け口(http://127.0.0.1 で動かした記録用のHTTPサーバー)に替え、openai 3.35.0 で何が送られるかを見ました。送り先は POST /api/v1/chat/completions、認証は Authorization: Bearer <キー> でした。extra_body の models は、model・messages と同じ最上位に並んで送られました。OpenRouterからの実際の応答は、キーを使っていないので未検証です。

models の意味はドキュメントのとおりで、model のモデルが落ちたり断られたりしたときに、配列の順に試します。応答の model には、実際に答えたモデルの名前が入ります。HTTPヘッダーの HTTP-Referer と X-OpenRouter-Title は任意で、OpenRouterのランキングにアプリを載せるためのものです。公式のPython SDK(pip install openrouter・1.3.64・Apache-2.0)もあり、client.chat.send(...) の形で呼びます。

HOW A REQUEST ROUTESリクエストの通り道

1つのリクエストがモデルとプロバイダを順に試して返る

  1. アプリ

    OpenAI SDK

  2. OpenRouter

    キーと残高を確認

  3. model を試す

    だめなら models の次

  4. プロバイダ

    同じモデルの提供元

  5. 応答

    実際の model 名つき

出典: OpenRouter docs(Model Fallbacks・Provider Routing)。流れの図で、応答時間の数字は無い

モデル一覧の取り方

モデル一覧はキー無しで取れる公開のエンドポイントです(ドキュメントの例に認証ヘッダーが無い)。:free の付いたIDを抜き出す形です。

curl -s "https://openrouter.ai/api/v1/models" |
  python3 -c 'import json,sys; d=json.load(sys.stdin)["data"]; print(len(d), [m["id"] for m in d if m["id"].endswith(":free")][:5])'

手元の受け口に向けて、この形で件数と :free のIDが出ることを確かめました。実際の件数と無料モデルの顔ぶれは未検証です。既定では文字を出力するモデルだけが返り、画像生成などは ?output_modalities=all を付けると入ります。?sort=pricing-low-to-high で安い順、?supported_parameters=tools でツール呼び出しに対応したモデルに絞れます。

OpenRouterの料金の見方

料金は前払いのクレジットから引かれます。ドキュメントのFAQはトークン単価について「提供元の価格をそのまま通し、上乗せはない」と書いています。費用が増えるのは別の所です。

READING THE BILL料金の見方

トークン単価は上乗せなし。手数料はクレジットの購入時

  1. 1.トークン単価

    提供元の価格をそのまま。上乗せなし

  2. 2.クレジット購入の手数料

    カードは5.5%(最低0.80ドル)、暗号資産は5%

  3. 3.自分のキー(BYOK)

    月25,000ドル分(定価換算)まで無料、超えた分は5%

出典: OpenRouter docs(FAQ・constants)2026-10-17 のコミット。BYOK の枠は従量課金プランの値
費用 値(2026年10月17日のドキュメントの原稿)
トークン単価 提供元の価格をそのまま。モデル一覧の pricing に1トークンあたりのドル(文字列)で入る
クレジット購入(カード) 5.5%、最低0.80ドル
クレジット購入(暗号資産) 5%
BYOK(自分の各社キーを持ち込む) 従量課金プランは月25,000ドル分(定価換算)まで無料、超えた分はOpenRouterでの価格の5%
製品改善への利用を許可した場合 全モデルの利用が1%引き

単価の読み方には注意が要ります。モデル一覧の pricing.prompt と pricing.completion は、1トークンあたりのドルです。ドキュメントの例 "0.0000025" は、100万トークンで2.5ドルにあたります。"0" は無料を表します。長い入力や時間帯で単価が変わるモデルは、overrides に条件つきの単価が入ります。

無料モデルの制限|1日50回と402エラー

IDの末尾に :free が付いたものが無料版です。無料版のあるモデルだけに付き、一覧では有料版とは別の項目として出ます。openrouter/free を指定すると、無料モデルの中から1つを自動で選びます(Free Models Router)。

これまでに買ったクレジット 1分あたり 1日あたり
10ドル未満 20回 50回
10ドル以上 20回 1,000回

上の値はドキュメントの原稿(2026年10月17日のコミット)の定数です。表の基準は残高ではなく「これまでに買った額(all time)」です。日の区切りはUTCです。使った回数と残りは、キーの情報の free_model_daily_requests に出ます。

curl -s "https://openrouter.ai/api/v1/key" \
  -H "Authorization: Bearer $OPENROUTER_API_KEY"

この形で GET /api/v1/key に認証ヘッダーつきで届くことを、手元の受け口で確かめました。応答の中身(limit_remaining・is_free_tier・free_model_daily_requests など)はドキュメントの型定義によるもので、未検証です。キーやアカウントを増やしても上限は増えないと、ドキュメントは明記しています。

止まったときのエラーは2種類あります。

・429:回数の上限を超えた。応答の X-RateLimit-* ヘッダーで残りを見る
・402:残高が足りない。残高がマイナスだと、無料モデルでも402になる。クレジットを足して0より上に戻すと解ける

OpenRouterは安全?データの扱い

ドキュメントによると、OpenRouterはプロンプトと応答を保存しません。保存されるのは、利用者が次のどちらかを有効にしたときだけで、どちらも既定は無効です。

・ログの記録:自分の画面でプロンプトと応答を見返すため。OpenRouterはこの中身を使わない
・製品改善への利用:OpenRouterに使わせる代わりに、全モデルの利用が1%引きになる

トークン数や待ち時間などのメタデータは、毎回保存されます。もう1つ見落としやすいのが、モデルを提供する各社の扱いです。各社は自分の規約で記録や学習を行い、OpenRouterはその方針を提供元ごとに表で出しています。アカウントの設定で「学習に使うかもしれない提供元に送らない」を選べ、この設定は有料モデルと無料モデルで別々です。社外に出せないデータを送るなら、両方を確かめてから使います。地域の中だけで処理する指定(EU・US)は、BusinessとEnterpriseのプランにあります。

自前で動かす選択肢もあります。ローカルのモデルにOpenAI互換で送るなら Ollama API完全ガイド2026|REST・OpenAI互換・Python/JSでローカルLLMを叩く が同じ書き方で使えます。OpenRouter経由でよく使われたモデルの例は Qwen 3.6 Plus徹底解説|1日1.4兆トークン突破の中身とClaude/GPTとのタスク別使い分け で扱いました。

参照ソース