API リファレンス
Lovely Router のすべてのエンドポイントに共通する、ベース URL、認証、リクエストの規約、制限、再試行のガイドラインです。
Lovely Router は 1 つのホストから、1 つのキーと 1 つの残高で 2 種類の API を提供します。
- モデル API:各ベンダー独自の形式(Anthropic Messages、OpenAI Chat Completions、Gemini)で提供します。リクエストとレスポンスはベンダーの API リファレンスに従うため、公式 SDK を変更なしで使えます。Lovely Router はいくつかのレスポンスヘッダーを追加します。
- Lovely Router API:データツール(
/v1/tools)とブラウザエージェント(/v1/browser)向けの JSON API で、以下で説明する規約に従います。
Messages、Chat Completions、Gemini、トークンのカウント、モデル一覧。
カタログの検索、ツールの実行、結果の取得。
ブラウザエージェントの実行の開始と操作、シークレット・ファイル・プロファイルの管理。
曲からミュージックビデオを作り、シーンを確認してダウンロード。
ステータスコード、エラーボディ、再試行のポリシー。
ベース URL#
すべてのエンドポイントは https://lovelyrouter.com から HTTPS で提供されます。
| API | SDK のベース URL | エンドポイント |
|---|---|---|
| Anthropic Messages | https://lovelyrouter.com | POST /v1/messages, POST /v1/messages/count_tokens |
| OpenAI Chat Completions | https://lovelyrouter.com/v1 | POST /v1/chat/completions |
| Gemini | https://lovelyrouter.com | POST /v1beta/models/{model}:generateContent, :streamGenerateContent, :countTokens |
| モデル一覧 | — | GET /v1/models, GET /v1beta/models |
| データツール | https://lovelyrouter.com/v1 | /v1/tools/... |
| ブラウザエージェント | https://lovelyrouter.com/v1 | /v1/browser/... |
| ミュージックビデオ | https://lovelyrouter.com/v1 | /v1/videos/music/... |
| MCP サーバー | — | POST /mcp |
OpenAI の Responses、Embeddings、Images API など、ここに記載のないエンドポイントは 404 を返します。
認証#
API キーを Bearer トークンとして送ります。モデルのエンドポイントは各ベンダー独自のヘッダーも受け付けるため、どの SDK もデフォルト設定のまま動作します。
Authorization: Bearer lr-...| ヘッダー | 主な用途 |
|---|---|
Authorization: Bearer lr-... | OpenAI SDK、データツール、ブラウザエージェント、MCP |
x-api-key: lr-... | Anthropic SDK |
x-goog-api-key: lr-... | Google Gen AI SDK |
モデル一覧とツールカタログにはキーが不要です。それ以外にはすべてキーが必要です。認証を参照してください。
リクエストとレスポンス#
- JSON で送り、JSON で受け取る。 リクエストボディは
content-type: application/jsonを付けて JSON で送ります。例外は、生のファイルまたはmultipart/form-dataを受け付けるブラウザエージェントへのファイルアップロードと、image/jpegを返す実行のスクリーンショットです。 - ストリーミング。
"stream": trueを指定した Anthropic と OpenAI のリクエストは、Server-Sent Events(text/event-stream)を返します。Gemini の:streamGenerateContentは、Google の API と同じく JSON 配列をストリーミングし、?alt=sseを付けると Server-Sent Events で返します。ストリーミングを参照してください。 - クロスオリジンリクエストはすべてのオリジンから許可されています。ただし、ブラウザから API を呼び出しても安全という意味ではありません。フロントエンドのコードに含めたキーは誰でも読み取れます。
Lovely Router 独自の API は次の規約に従います。
| 規約 | 例 |
|---|---|
| ID には種類を示すプレフィックスが付く | ツール実行は run_…、ブラウザ実行は brun_… |
| タイムスタンプは UTC の ISO 8601 | "created_at": "2026-10-11T09:30:00.000Z" |
| 金額は米ドルの数値 | "charge_usd": 0.042, "reserved_usd": 0.3 |
| リストはオブジェクトで包まれる | {"object": "list", "data": [...]} |
時間のかかる処理は 202 を返す | ボディに状態確認用の poll パスが含まれる |
| 待機はクエリパラメータで指定する | GET /v1/tools/runs/{id}?wait=60 は、実行が終わるか時間切れになるまでリクエストを保持する |
レスポンスヘッダー#
モデルのレスポンスには、ベンダーのヘッダーに加えて次のヘッダーが付きます。
| ヘッダー | 意味 |
|---|---|
x-lovely-request-id | リクエストの一意の ID。ログにも表示されます。サポートに問い合わせる際に添えてください。 |
x-lovely-group | リクエストを処理したチャネルグループ |
x-lovely-channel | そのチャネルグループの短い説明(URL エンコード済み) |
x-lovely-queued-ms | リクエストが容量の空きを待った時間(ミリ秒)。待機が発生した場合のみ |
retry-after | 429 レスポンスの場合:再試行までに待つべき秒数 |
バージョニング#
モデル API はベンダーのバージョニングに従います。 SDK が送るヘッダーをそのまま送ってください。Anthropic では anthropic-version と anthropic-beta、OpenAI では openai-beta です。Gemini のリクエストは、Google の API と同じく /v1beta パスを使います。Lovely Router はこれらのヘッダーだけを転送し、それ以外は転送しません。そのため、別のベンダーヘッダーに依存する機能は利用できません。
Lovely Router API はパスでバージョン管理され、/v1 以下にあります。レスポンスには新しいフィールドが追加されることがあるため、認識できないフィールドは無視するようにクライアントを実装してください。
レート制限#
リクエストには次の制限が適用されます。
| 制限 | 適用対象 | 超過時 |
|---|---|---|
| キーに設定した 1 分あたりのリクエスト数と同時実行数 | そのキーからのモデルのリクエスト | retry-after 付きの 429 |
| モデルの容量 | モデルのリクエスト。短いバーストはまず数秒間キューで待機します。 | 429(通常は retry-after 付き) |
| アカウントあたり進行中の実行 10 件 | データツールとブラウザの実行 | 429 |
| キーごとに 1 分あたり 100 リクエスト、キーなしの呼び出し元は全体で共有して 1 分あたり 100 リクエスト | POST /v1/tools/suggest | retry-after 付きの 429 |
レート制限とフェイルオーバーと API キーを参照してください。
再試行と冪等性#
Lovely Router は、失敗したモデルのリクエストをエラーとして返す前に別のチャネルで再試行します。そのため、受け取った 5xx はすでに再試行済みです。それでも、429 と 5xx のレスポンスは retry-after に従いつつ、指数バックオフで自分でも再試行する価値があります。その他の 4xx エラーは、リクエストを変更せずに再試行しないでください。OpenAI と Anthropic の公式 SDK はデフォルトで 2 回再試行します。バッチジョブでは max_retries(Node.js では maxRetries)を増やしてください。
この API は冪等性キーを受け付けません。次のケースに備えてください。
- クライアント側でタイムアウトしたモデルのリクエストも、実際には完了して課金されている場合があります。 再試行すると二重に支払う可能性があります。長い生成では余裕のあるクライアントタイムアウトを設定するか、ストリーミングを使ってください。
- ツールやブラウザの実行の開始は冪等ではありません。
POST /v1/tools/{id}/runやPOST /v1/browser/runsがタイムアウトした場合は、別の実行を開始する前にGET /v1/tools/runsまたはGET /v1/browser/runsで最近の実行を確認してください。 - 読み取りは何度繰り返しても安全です。 実行のポーリング、実行の一覧取得、結果の取得で課金されることはありません。
Python と Node.js の再試行のコードは失敗したリクエストを再試行するにあります。
エラー#
モデルのエンドポイントはベンダーの形式でエラーを返すため、SDK はいつもの例外を送出します。Lovely Router 独自の API は次の形式で返します。
{"error": {"type": "invalid_request_error", "message": "\"goal\" is required (max 4,000 characters)"}}すべてのステータスコードと、形式ごとのボディの例はエラーにあります。