OpenRouter、1 つの API で全モダリティを処理
本文の状態
日本語全文を表示中
詳細モードで約18分の本文を読めます。
同じ出来事の情報源
この情報源を基点に整理
OpenRouter Blog
OpenRouter は単一の API エンドポイントでテキスト、画像、動画、音声、埋め込みベクトルを統一的に扱える機能を導入し、開発者が複数のプロバイダ SDK を統合する手間を大幅に削減した。
AI深層分析を開く2026年7月30日 10:07
AI深層分析
キーポイント
単一エンドポイントによる多様なモダリティ対応
OpenRouter は一つのベース URL(https://openrouter.ai/api/v1)を通じて、テキストチャットから画像生成、動画処理、音声変換、埋め込みベクトルまでを統一的に扱えるようにした。
開発コストと複雑性の劇的な削減
従来必要だった複数のプロバイダ SDK の統合、認証管理、エラーハンドリングの重複実装が不要になり、モデル切り替えは文字列の変更のみで実現可能になった。
統一されたルーティング制御と課金システム
チャット呼び出しと同じルーティングロジック(フェイルオーバー、データ収集拒否、コスト/レイテンシ優先)が全モダリティに適用され、API キーと請求は一つで管理される。
技術的な制約事項の明確化
埋め込みベクトルはストリーミング非対応、音声入力は base64 形式のみ、動画 URL サポートはプロバイダ依存など、実装前に確認すべき具体的な制限が提示された。
API の統一性と互換性
OpenAI Chat API と互換性のあるドロップイン代替品として、同じリクエスト形式がすべてのモダリティで流用される。
重要な引用
One developer on r/Bard went looking for a unified API for LLMs, image, and video generation models.
Most input modalities ride the /chat/completions endpoint. Five have dedicated endpoints: /images, /videos, /audio/speech, /audio/transcriptions, and /embeddings.
We don't mark up provider pricing, and failed requests aren't billed.
We're a drop-in replacement for the OpenAI Chat API, so the same request format carries across every modality that rides /chat/completions
編集コメントを表示
編集コメント
開発者が直面する最大の課題の一つである「マルチプロバイダ管理の複雑さ」に対して、OpenRouter が提供した解決策は実用性が極めて高い。特に、異なるモダリティ間でルーティング制御や課金ロジックを統一している点は、大規模な AI アプリケーション構築において重要な基盤となるだろう。
Source Article
元記事を日本語で読む
本文に関係しない購読案内、埋め込み通知、サイト内プロモーションは除いています。
チャットでの質問応答、製品画像の生成、ナレッジベースの検索、音声メモの文字起こしなど、多様な機能を備えたアプリを開発しようとした場合、通常は 4 つのプロバイダー SDK を用意し、それぞれに異なる請求関係と認証方式を設定する必要があります。これらは機能コードを一行も書かずに実装しなければならない重労働です。
r/Bard のある開発者は、LLM や画像・動画生成モデルを統一的な API で扱う方法を探しました。一方、r/ShowYourApp では別の開発者が自らその仕組みを実装しましたが、テキスト、画像、動画、音声合成(TTS)、音声認識(STT)、埋め込みベクトルなど多様な機能を共存させる必要性に直面した結果、「オールインワンの AI API は予想以上に難しかった」と報告しています。
OpenRouter では、すべてのモダリティが単一の OpenAI 互換ベース URL https://openrouter.ai/api/v1 を通じて実行されます。この URL は一度設定するだけでよく、あとはモデル名とコンテンツタイプを変更するだけです。カタログには 70 社以上のプロバイダーにまたがる 400 種類以上のモデル が含まれており、チャット呼び出しを保護するルーティング制御は、埋め込み(embeddings)呼び出しにも同じように適用されます。
Tl;dr
基本の API URL(https://openrouter.ai/api/v1)を一つに統一し、画像・動画・音声・埋め込みベクトル・文字起こしをすべてこのエンドポイントから呼び出します。使用するモデル名とコンテンツタイプを変更するだけで、扱うモダリティを切り替えることができます。 (原文の技術表記: https://openrouter.ai/api/v1)
入力の大半は「/chat/completions」エンドポイントを利用しますが、5 つのモダリティには専用のエンドポイントが用意されています。それは「/images」「/videos」「/audio/speech」「/audio/transcriptions」、そして「/embeddings」です。
同じプロバイダールーティングオブジェクト(フェイルオーバー、data_collection: "deny"、コスト/レイテンシー順ソートなど)は、埋め込み呼び出しでもチャット呼び出しと同じように機能します。
1 つの API キー、1 つの請求書、5 つのモダリティすべてで統一された OpenAI 互換のリクエスト形式を採用しています。プロバイダーごとの価格に上乗せは行わず、失敗したリクエストは課金されません。
計画時に考慮すべき実質的な制限として、埋め込みではストリーミングが利用できないこと、音声入力では base64 エンコーディングのみ対応であること、動画 URL サポートがプロバイダー固有の仕様であることが挙げられます。
1 つの API で画像、動画、音声、埋め込み、文字起こしをすべて扱えるのか?
可能です。1 つのベース URL がすべてのモダリティに対応しており、モデル名とリクエストコンテンツタイプを変更するだけで切り替えられます。https://openrouter.ai/api/v1 をベース URL に設定し、API キーを Bearer トークンとして渡すだけで、OpenAI 互換インターフェースを通じてカタログ全体にアクセスできます。
4 つのプロバイダー SDK を個別に接続すると、各プロバイダーごとに独自の認証更新、リトライとバックオフのセマンティクス、レート制限ヘッダー、ストリーミング形式、エラースキーマを持ち込みます。その調整コードを 4 回書き、4 回維持する必要があり、あるプロバイダーの変更は他のプロバイダーには影響しません。
{
"model": "openai/text-embedding-3-small",
"input": "Your text here",
"provider": {
"order": ["openai", "azure"],
"allow_fallbacks": true,
"data_collection": "deny"
}
}私たちは OpenAI チャット API のドロップインリプレースメントを提供しています。そのため、/chat/completions エンドポイントを利用するすべてのモダリティで同じリクエスト形式が通用し、TTS エンドポイントは OpenAI オーディオ API に従います。画像生成、動画生成、文字起こし、埋め込みベクトルといった専用エンドポイントはそれぞれ独自のリクエスト形状を持っていますが、公式 SDK(TypeScript 用 @openrouter/sdk、Python 用 openrouter)がこれらの複雑さをラップしています。
これらすべてを一つのインターフェースで統括します。
各モダリティはどのエンドポイントを使用するか?
ほとんどの入力モダリティは /chat/completions エンドポイントを共有し、違いはコンテンツタイプのみです。一方、5 つのモダリティには専用のエンドポイントが用意されています。詳細なマッピングについては、マルチモーダル概要 および 埋め込みリファレンス をご参照ください。
| モダリティ | エンドポイント | 呼び出し方 |
|---|---|---|
| テキスト / チャット | POST /api/v1/chat/completions | messages 配列 |
| 画像入力 (ビジョン) | POST /api/v1/chat/completions | image_url コンテンツタイプ |
POST /api/v1/chat/completions | file コンテンツタイプ | |
| 音声入力 | POST /api/v1/chat/completions | input_audio コンテンツタイプ |
| 動画入力 | POST /api/v1/chat/completions | video_url コンテンツタイプ |
| 画像生成 | POST /api/v1/images | プロンプト入力、base64 画像出力 |
| 動画生成 | POST /api/v1/videos (非同期) | プロンプト送信、ジョブ ID 取得、ポーリング |
| テキスト読み上げ (TTS) | POST /api/v1/audio/speech | テキスト入力、MP3/PCM バイト列出力 |
| 文字起こし (STT) | POST /api/v1/audio/transcriptions | base64 音声入力、JSON テキスト + 使用量出力 |
| 埋め込み (Embeddings) | POST /api/v1/embeddings | テキストまたはテキスト+画像入力、ベクトル出力 |

画像生成、動画生成、音声合成、文字起こし、埋め込みベクトルにはそれぞれ専用のエンドポイントが用意されています。これら 5 つは呼び出しの形式が異なるためです。例えば画像生成ではプロンプトに加え、解像度やアスペクト比、出力フォーマットといったパラメータを指定し、結果として Base64 形式の画像を受け取ります。動画生成は非同期処理で、ジョブの状態を確認するためにポーリングが必要です。音声合成と文字起こしは生音声データをやり取りします。埋め込みベクトルはテキストの代わりに数値ベクトルを返します。
一方、残りの 5 つのモダリティは /chat/completions エンドポイントで共通して動作します。メッセージ配列内の content_type フィールドを変更するだけで対応可能です。単一のプロバイダーがすべての機能を網羅しているわけではないため、各ドキュメントを横並びに比較できる資料はほとんど存在しません。
有料登録なしでもマルチモーダル入力を試すことができます。無料枠 ではクレジットカードの登録も不要で、1 日の利用制限が設けられています。ただし、クレジッドを追加するとこの制限は緩和されます。これだけで、ビジョンモデルに画像を送信したり、バッチ処理で埋め込みベクトルを生成したりするテストが可能です。
When should you use each modality?
同じメディアタイプ内でも、「生成」と「理解」は異なるタスクです。どのエンドポイントを使うかは、あなたが実行しようとしている作業の種類によって決まります。
画像:生成と理解の違い。 新規画像が必要なら画像生成を、分析対象の画像があるなら画像入力を利用します。生成機能はテキストプロンプトから資産やモックアップ、イラストを作成し、POST メソッドで専用エンドポイント /api/v1/images を呼び出すことで実行されます。また、画像同士の処理(image-to-image)には参照画像をオプションで指定できます。
Vision input goes the other way: you send an image_url on /chat/completions, and the model does OCR, description, or detection. See the image generation docs for the full walkthrough.
動画:入力と生成の違い。 非同期の /videos エンドポイントを使ってクリップを生成し、チャット内の video_url を使って理解しましょう。動画生成はプロンプトを送信してジョブ ID を返し、クリップが完成するまでポーリングします。解像度、アスペクト比、再生時間は設定可能です。一方、動画の理解では、video_url を動画対応モデルに送信して分析、行動認識、物体検出を行います。詳細は 動画生成の発表 をご覧ください。
音声とテキスト:出力と分析の違い
音声出力やチャット内の音声入力による分析には、それぞれ /audio/speech エンドポイントを使用します。Text-to-speech(TTS)では、テキストを /api/v1/audio/speech に送信し、OpenAI のオーディオ互換エンドポイントを介して MP3 または PCM バイト形式で返却します。これにより、OpenAI 公式のクライアントライブラリがそのまま利用可能です。
音声入力は、感情分析やコンテンツ分析などのタスクにおいて、input_audio コンテンツタイプを介して /chat/completions エンドポイントで処理されます。詳細は 音声 API の発表 をご覧ください。
埋め込みベクトル:検索と類似度判定
生成ではなく、検索や類似度の計算が必要な場合に埋め込みベクトルを活用します。埋め込みドキュメント では、主に以下の 6 つの用途が挙げられています。
- RAG(Retrieval-Augmented Generation)
- セマンティック検索
- レコメンデーション
- クラスタリング
- 重複検出
- アノマリー検知
1 つのリクエストで多数の入力をバッチ処理できるほか、nvidia/llama-nemotron-embed-vl-1b-v2 のようにテキストと画像を同時に受け取り、単一の結合ベクトルを生成するモデルも存在します。
文字起こし:音声からテキストへ。 音声認識には /audio/transcriptions エンドポイントを使用します。Base64 でエンコードされた音声データを送信すると、文字起こし結果と利用統計を含む JSON が返されます。会議の議事録、音声コマンド、字幕生成などに適しています。
埋め込みベクトルや画像呼び出しでもルーティングやフェイルオーバーは機能しますか?
はい、チャット呼び出しで使用する provider オブジェクトは、埋め込み(embeddings)呼び出しでも全く同じように機能します。プロバイダーの優先順位、自動フェイルオーバー、データ収集ポリシー、コストやレイテンシーによるソート処理も同様です。
埋め込みドキュメント に記載されている正確な構造は以下の通りです:
{
"model": "openai/text-embedding-3-small",
"input": "Your text here",
"provider": {
"order": ["openai", "azure"],
"allow_fallbacks": true,
"data_collection": "deny"
}
}
ルーティング制御は、専用画像エンドポイントにも適用されます。/api/v1/images では provider.order や provider.allow_fallbacks を受け付けます。
provider.only、provider.ignore、そして provider.sort です。
画像生成の呼び出しでもチャットの呼び出しでも、フェイルオーバーや順序付け、コストとレイテンシによるソートは同じように動作します。
1 つの埋め込みモデルは、複数のプロバイダーによって提供されています。最初のプロバイダーがエラーを返した場合、他のプロバイダーに自動的に切り替えるフォールバック機能があります。このクロスプロバイダー間のフェイルオーバー機能は、埋め込みだけでなく、画像、音声、チャットにも適用されます。provider object を通じて、これらの機能を統一的に管理できます。
私たちはプロバイダーごとの価格表記を行っていません。モデルカタログに記載されているレートがそのままご利用料金です。
「ゼロ・コンプリッション・インシュアランス(Zero Completion Insurance)」とは、実行に失敗した場合の請求が行われない仕組みを指します。したがって、リクエストが失敗して完了しない場合でも、その分は無料となります。この保証はあらゆるモダリティ(データ形式)に適用されます。
統合によって実際に節約できることは何ですか?
一つの API キー、一つの請求書、そしてすべてのモダリティで統一されたリクエスト形式。
ビジョン呼び出し、音声合成(TTS)呼び出し、埋め込み(embeddings)呼び出しのすべてを、同じ Bearer トークンが権限付与します。プロバイダーごとに別々のキー vault を用意する必要も、モダリティごとにオンボーディングを行う必要もありません。新しい機能、例えば RAG(検索拡張生成)を開始する場合でも、すでに持っているキーを使って /embeddings エンドポイントを呼び出すだけです。
請求書の統合により、各モダリティの利用状況はカタログ価格に基づき、一つの OpenRouter の明細書に集約されます。画像生成のコストと埋め込み処理のコストを別々の CSV をエクスポートして比較する手間なく、同じ場所で対比できます。この reconcilation(照合)の摩擦こそが、all-in-one stack が予想以上に複雑になった 際に r/ShowYourApp のビルダーが直面した問題です。
プラン設計で考慮すべき制限は?
各モダリティには、構築前に知っておくべき制約が存在します。これらは、本社の現在の制限を明確に記述したものであり、開発中に不意に発見するのではなく、事前に設計の前提として組み込むためです。
| 制限 | モダリティ | あなたにとっての意味 |
|---|---|---|
| ストリーミングなし | 埋め込みベクトル (Embeddings) | レスポンスはトークン単位ではなく、完成した状態で返されます。同期処理を計画してください。 |
| 決定論的出力 | 埋め込みベクトル (Embeddings) | 同じ入力には常に同じベクトルが返されます。キャッシュを積極的に活用してください。 |
| Base64 のみ | 音声入力 (Audio input) | 音声は URL 経由では渡せません。ローカルファイルを事前にエンコードしてください。 |
| プロバイダー固有の URL | 動画入力 (Video input) | URL サポートは異なります。AI Studio 上の Gemini は YouTube リンクのみを受け付けます。 |
| モデルごとのサポート状況 | すべて (All) | すべてのモダリティをサポートするモデルがあるわけではありません。コンテンツに基づいて自動的にフィルタリングされます。 |
| 無料枠のレート制限 | すべて (All) | 無料モデルには低い日次制限があり、クレジットを追加すると制限が引き上げられます。 |
複数のメディアタイプが必要になったり、モデルの切り替えを単一文字列の変更で済ませたい場合や、プロバイダの一時的な障害で機能が停止しないようにしたい場合にこそ、統一 API の真価が発揮されます。もしアプリケーション全体が、特定の 1 プロバイダから提供される汎用モデルに対する単一のチャット機能のみであるなら、直接統合の方がシンプルであり、統合によるメリットは限定的です。
最初の呼び出しから始める
ベース URL に対して単一の埋め込みリクエストを送信します。
import requests
response = requests.post(
"https://openrouter.ai/api/v1/embeddings",
headers={
"Authorization": "Bearer <OPENROUTER_API_KEY>",
"Content-Type": "application/json",
},
json={
"model": "openai/text-embedding-3-small",
"input": "The quick brown fox jumps over the lazy dog",
},
)
print(response.json()["data"][0]["embedding"][:5])import { OpenRouter } from '@openrouter/sdk';
const openRouter = new OpenRouter({ apiKey: process.env.OPENROUTER_API_KEY });
const response = await openRouter.embeddings.generate({
model: 'openai/text-embedding-3-small',
input: 'The quick brown fox jumps over the lazy dog',
});
console.log(response.data[0].embedding);curl https://openrouter.ai/api/v1/embeddings \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "openai/text-embedding-3-small", "input": "The quick brown fox jumps over the lazy dog"}'ここからは、マルチモーダル概要 を参照して各メディアタイプごとに詳しく掘り下げるか、出力形式別のモデル一覧 を閲覧して、各呼び出しに最適なモデルを探してください。
よくある質問
画像生成、埋め込みベクトル化、文字起こしを一つのAPIで扱えるのか?
はい。これら 3 つはすべて、単一の API キーで https://openrouter.ai/api/v1 という基本 URL を通じて実行されます。画像生成には専用の /images エンドポイントを、埋め込み(embeddings)には...
/embeddings、そして文字起こしには /audio/transcriptions を使用します。
エンドポイントやコンテンツタイプを変更しても、統合方法、認証、API キーはそのままです。
OpenRouter は埋め込みベクトルをサポートしていますか?
はい、サポートしています。埋め込み処理は POST /api/v1/embeddings エンドポイントを通じて実行され、RAG(検索拡張生成)、セマンティック検索、レコメンデーション、クラスタリング、重複検出、異常検出などの用途でベクトルを返します。
一度のリクエストで複数の入力をバッチ処理することも可能です。また、一部のモデルではテキストと画像を同時に指定して、統合された埋め込みベクトルを取得できます。
チャットエンドポイントと専用エンドポイントは、それぞれどのモダリティで利用されるのでしょうか?
テキスト、画像入力、PDF、音声入力、動画入力はすべて「/chat/completions」エンドポイントを使用し、異なるのはコンテンツタイプのみです。
画像生成(/images)、動画生成(/videos)、テキスト読み上げ(/audio/speech)
トランスクリプション(/audio/transcriptions)と埋め込みベクトル生成(/embeddings)は、呼び出しの形状が異なるため、専用のエンドポイントを使用します。
differ: 画像生成リクエスト、非同期ジョブ、生音声データ、または完了結果ではなくベクトルが返されるケースなど。
多様な入力に対応する無料の AI API はあるのか?
はい、OpenRouter には無料枠があります。クレジットカードの登録も不要です。
無料モデルは、1 日の利用回数制限が低めに設定されていますが、クレジットを追加するとその制限は引き上げられます。これだけで、画像を送信したり埋め込みベクトルを生成したり、他のモダリティを試したりするのに十分な環境が整います。
テキストと画像を一つの埋め込みリクエストで送ることはできますか?
はい、マルチモーダルな埋め込みモデルを使えば可能です。入力データを text と image_url オブジェクトを含む content 配列に包み込むことで、両者の情報を統合した単一のベクトルを返すことができます。
例えば nvidia/llama-nemotron-embed-vl-1b-v2 というモデルがあり、テキストと画像を同じ検索空間で扱いたい場合に役立ちます。
埋め込みベクトルや画像生成の呼び出しでも、プロバイダーのルーティングやフェイルオーバーは機能するのでしょうか?
はい、埋め込み(embeddings)、画像、音声、チャット呼び出しすべてに、同じプロバイダールーティング制御(order、allow_fallbacks、コスト/レイテンシーの sort)が適用されます。プロバイダーでエラーが発生した場合、そのモデルを提供する次のプロバイダーへ自動的に切り替わり、失敗した実行に対しては請求が行われません。
AI算出
主要ニュースainew評価標準
記事は OpenRouter の新機能(統一 API)という具体的な技術的実装とビジネス価値を報じており、新規性が高い。ただし、日本固有の情報や企業事例が含まれていないため、日本の関連性は低めとなる。
6つの評価軸を見る
- AI関連度
- 100
- 情報源の信頼性
- 25
- 新規性
- 75
- 調べる価値
- 75
- 重複の少なさ
- 100
- 日本での有用性
- 25
関連記事
今日のまとめ
AIデイリーブリーフで今日の重要ニュースをまとめ読み