クイックスタート
数分で最初のAPIリクエストを送信できます。必要なのはAPIキーのみで、任意のHTTPクライアントやOpenAI互換のSDKを利用できます。
/v1/chat/completionsonomeoのモデルを使って、チャット補完のレスポンスを生成します。
このページの内容をすべて実行できる形にしたもの(Python、Node、curlでそれぞれ1ファイル)はGitHubにあります。
認証
APIキーはAuthorizationヘッダーに指定します。キーは安全に管理し、クライアント側のコードには含めないでください。
Authorization: Bearer YOUR_API_KEY残高はアカウントに紐づいているため、キーを紛失しても復旧できます。もう一度ログインし、マイページで新しいキーを作成してください。ただし、キー自体は秘密情報として扱い、コミットや共有をしないでください。複数の場所から同時に使われているキーは無効化されます。
キーの漏えい
お客様のキーが公開のGitHubリポジトリに掲載されると、GitHubから数秒以内に当サイトへ通知が届き、そのキーは直ちに無効化されます。その後、アカウントのメールアドレス宛に、該当のキーと見つかった場所を記載したメールが送信されます。
無効化されたキーは直ちに使えなくなり、そのキーを含むリクエストにはすべて401 unauthorizedが返されます。アカウント、残高、ほかのキーには影響しません。
次に行うこと
- コンソールで代わりのキーを作成し、アプリケーションに設定してください。
- コードから古いキーを削除してください。該当の行を消すだけでは不十分です。キーはリポジトリの履歴に残るため、履歴を書き換えるか、そのキーを恒久的に公開されたものとして扱ってください。
- キーをソースコードに含めないようにしてください。環境変数やシークレット管理サービスから読み込み、キーを保存したファイルは.gitignoreに記載します。
漏えいにご自身で気づいた場合
コンソールでキーをご自身で無効化し(即時に反映されます)、代わりのキーを作成してください。第三者に使われた可能性がある場合は、お問い合わせください。そのキーのリクエスト履歴を一緒に確認します。
チャット補完
モデルにメッセージの一覧を送信し、生成された応答を受け取ります。会話型AIの中核となるエンドポイントです。リクエストとレスポンスの本文はOpenAIの形式に従います。
レスポンス
{
"model": "MODEL_ID",
"choices": [{
"message": { "role": "assistant",
"content": "..." }
}],
"usage": { "total_tokens": 150 }
}usageの数値は、この呼び出しで使用した量です。Claude、GPTなどの大型モデルでは、この値をもとに残高からの課金額が計算されます。無料モデルでは課金されず、送信した内容の長さをもとに呼び出し回数が数えられます(計算方法は「課金と上限」をご覧ください)。数えるのは画面に表示されるテキストのみで、送信した内容とモデルの応答が対象です。モデルが応答の前に行う推論は課金対象外です。大型モデルでは、prompt_tokensとcompletion_tokensは実際のトークン数で、total_tokensが実際に課金される量です。返されたテキストはモデルごとの倍率で、送信したテキストはその一定割合で、提供元がキャッシュとして請求した送信テキストの部分はさらに小さい割合で計算されます(割合は「課金と上限」に記載しています)。
残高のないアカウントにAPIで返される応答の末尾には、「— via onomeo.com」の1行が付きます。残高のあるアカウントには付きません。ツール呼び出しの応答、構造化出力の応答、および単一のJSONオブジェクトまたは配列のみで構成される応答は、変更されません。この行はusageには含まれません。ご自身の提供元キーで行った呼び出しは、そのまま返されます。
パラメータ
/v1/chat/completionsでよく使われるパラメータは次のとおりです。
| パラメータ | 型 | 説明 |
|---|---|---|
model | string | モデルページに掲載されている、現在のモデルIDそのもの。 |
messages | array | roleとcontentを持つメッセージオブジェクトの配列。 |
temperature | number | ランダム性を制御します。決定的な出力にするには0.0を指定します。 |
max_tokens | integer | 任意。値が小さすぎる場合は、応答が空にならないよう、下限まで引き上げられます。 |
stream | boolean | レスポンスをストリーミングで返すかどうか(既定値:false)。 |
import requests response = requests.post( "/v1/chat/completions", headers={"Authorization": "Bearer YOUR_API_KEY"}, json={"model": "MODEL_ID", "messages": [ {"role": "user", "content": "Hello!"} ]} ) print(response.json())
ストリーミング
streamをtrueに設定すると、OpenAI APIと同じ形式のサーバー送信イベントとして応答が返されます。公式クライアントはいずれも、そのまま対応しています。
from openai import OpenAI client = OpenAI(api_key="YOUR_API_KEY", base_url="/v1") stream = client.chat.completions.create( model="MODEL_ID", messages=[{"role": "user", "content": "Hello!"}], stream=True, ) for chunk in stream: print(chunk.choices[0].delta.content or "", end="")
ストリーミングでも課金方法は同じです。最後のチャンクに使用量が含まれ、送信したテキストと受信したテキストから計算されます。大型モデルではこの値をもとに課金額が計算され、無料モデルは課金されません。
画像
画像を読み取れるモデルには、ユーザーメッセージの中で画像を渡します。テキストと各画像をcontentの要素として指定し、画像はそれぞれbase64のデータURLにします。
{
"model": "MODEL_ID",
"messages": [{
"role": "user",
"content": [
{ "type": "text", "text": "What is in this picture?" },
{ "type": "image_url",
"image_url": { "url": "data:image/jpeg;base64,/9j/4AAQ..." } }
]
}]
}現在、画像を読み取れるモデル: 一覧を読み込み中…
大型モデルでは、画像を含むリクエストごとに、テキストとは別に画像1枚あたり一定額が課金されます。無料モデルでは画像は課金されません。1回のリクエストに含められる画像は最大8枚で、いずれもPNG、JPEG、WebP、GIFのいずれかの形式、3MB以下である必要があります。画像を読み取れないモデルに画像を送ると、model_no_visionで拒否され、課金されません。画像は応答の生成のためにモデルの提供元に渡され、当サイトには保存されません。
モデル
現在呼び出せるモデルは次のとおりです。無料モデルは課金されず、呼び出し回数に上限があります。それ以外のモデルの費用の列は約束された金額ではなく実測値で、1回の応答にかかった費用(ドル)の30日間の平均です。そのため、長い応答では高くなり、短い応答では低くなります。
モデルは独立した第三者の提供元を通じて提供されますが、リクエストの形式は共通です。そのため、モデルを切り替えるときにコード内で変更するのは文字列1つだけです。一覧は予告なく変わることがあります。名前をコードに直接書かず、実行時にモデルのエンドポイントから取得してください。
| モデル | 返信1回の費用の目安 |
|---|---|
| 一覧を読み込み中… | |
各モデルの提供元を含む同じ一覧は、モデルページにあります。コードから一覧を取得するには、キーを指定してモデルのエンドポイントを呼び出します。
curl "/v1/models" \ -H "Authorization: Bearer YOUR_API_KEY"
課金と上限
残高は米ドルで計算され、チャージによってのみ加算されます。お支払い金額がそのまま残高になり、有効期限はありません。Claude、GPTなどの大型モデルは、送受信した画面に表示されるテキストの量から計算された利用量に応じて残高から課金されます。DeepSeekのコーディング用ラインは、DeepSeekがその呼び出しに対して請求した金額で課金されます。無料モデルは課金されず、呼び出し回数に上限があります。長いメッセージは複数回として数えられます。長さはリクエストで送信するすべての内容(それまでの会話、ペルソナ、ファイルのテキストを含む)で数え、漢字、ひらがな、カタカナ、全角の句読点は1文字を1、半角の英数字、スペース、記号は4文字を1として数え、50,000ごとに(端数も含めて)1回になります。課金対象のモデルへの1回のAPIリクエストで、初めて高額になる見込みの場合、当サイトはそのリクエストを実行せず、見積額を記載した通常の応答を返します。この場合、課金はされません。同じリクエストをもう一度送ると、通常どおり実行されます。この規模のリクエストについては再度の通知は行わず、1回のリクエストの見込み額が10倍になったときにのみ、あらためて通知します。
各モデルの料金は料金ページに掲載しています。チャージもこちらから行えます。
| 上限 | 値 |
|---|---|
| 上限を読み込み中… | |
残高はマイページまたはコードからいつでも確認できます。レスポンスの残高は当サイト内部の単位で返されるため、GET /api/infoのmoney.unitsPerUsdで割るとドルになります。
curl "/api/me" \ -H "Authorization: Bearer YOUR_API_KEY"
エラー
すべてのエラーは、固定のcodeフィールドを持つJSONで返されます。判定にはメッセージの文面ではなくコードを使用してください。メッセージは人が読むためのもので、変更されることがあります。エラー本文の金額は当サイト内部の単位です。needやbalanceを含む場合は、同じ金額をドルで示すneedUsdやbalanceUsdも含まれます。同じリクエストを再送しても同じ理由で失敗する場合(無効なキー、残高不足、上限に達した場合など)は、レスポンスにx-should-retry: falseヘッダーも含まれます。再試行する価値があるのは、408、409、429、5xxのみです。拒否されるたびに再送するツール(Codex、omp、または拒否の数秒以内にそのまま再送されるストリーミングリクエスト)には、拒否の理由を記した通常の応答として返されるため、再送が止まります。
{
"error": {
"code": "not_enough_credit",
"balance": 6000,
"balanceUsd": 0.01,
"need": 15000,
"needUsd": 0.025,
"message": "Insufficient balance: this request needs about $0.025 and your balance is $0.01. Top up, or switch to a free model."
}
}| コード | HTTPステータス | 意味 |
|---|---|---|
bad_key | 401 | キーが無効、または存在しません。 |
not_enough_credit | 402 | このリクエストに対して残高が不足しています。Claude、GPTなどの有料モデルでのみ発生します。本文にはbalanceとneed(このリクエストに必要な額)が含まれ、ドル表示のbalanceUsdとneedUsdも並んで含まれます。解決策を算出できる場合は、waysも含まれます。waysには、無料モデルは課金されないこと(freeOk。課金の仕組みを説明するもので、無料モデルの呼び出し回数が現在残っているという意味ではありません)と、最後のメッセージだけで新しい会話を始めた場合に必要な額(freshNeed)が示されます。 |
premium_daily_cap | 402 | このアカウントは、Claude、GPTなどの大型モデルの1日の上限に達しました。課金はされません。本文にはspent(本日の使用量)、cap、need(このリクエストの見込み額)、buyer(アカウントがチャージ済みかどうか)が含まれます。 |
coding_buyers_only | 402 | DeepSeekのコーディング用ラインは、チャージ済みのアカウントでご利用いただけます。課金はされません。本文にはチャージ先のbuyUrlが含まれます。 |
premium_buyers_only | 402 | Claude、GPTなどの大型モデルは、チャージ済みのアカウントでご利用いただけます。課金はされません。本文にはチャージ先のbuyUrlが含まれます。ウェブ版のチャットでの無料お試しは、API呼び出しには適用されません。 |
key_expired | 401 | このキーは有効期限を過ぎています。マイページで期限を延長するか、別のキーを使用してください。 |
key_limit_reached | 402 | このキーは、キー自体に設定された利用上限に達しました。アカウントの残高には影響しません。本文には上限、使用済みの額、このリクエストの見込み額が含まれます。 |
model_not_allowed | 400 | そのモデルは一覧にありません。本文には利用可能な名前が含まれます。 |
model_paused | 400 | そのモデルは現在停止中で、再開すると一覧に戻ります。本文には現在利用できる名前が含まれます。当サイトが費用を負担している大型モデルは、提供元に預けている当サイトの残高がなくなると、まとめて停止されます。その場合、本文にはheld: trueも含まれます。 |
model_no_vision | 400 | リクエストに画像が含まれていますが、モデルは画像を読み取れません。画像を読み取れるモデルを選ぶか、画像を除いてください。 |
too_many_images | 400 | リクエストに含まれる画像が、上限(8枚)を超えています。 |
bad_image | 400 | 画像が、3MB以下のPNG、JPEG、WebP、GIFのデータURLではありません。 |
request_too_large | 413 | リクエスト本文が8MBを超えています。 |
ip_limit | 429 | 本日、このネットワークから作成された新規アカウントが多すぎます。ログイン時に返されます。 |
too_fast | 429 | 1分間にこのアカウントから送信されたリクエストが多すぎます。本文には秒数でretryAfterが含まれ、Retry-Afterヘッダーにも同じ値が入ります。 |
account_quota | 403 | このアカウントは、現在の期間の無料モデルの呼び出し回数を使い切ったか、このメッセージに必要な回数が残っていません(長いメッセージは複数回として数えられます。長さの数え方は「課金と上限」をご覧ください)。この上限はアカウント内のすべてのキーで共有されます。Claude、GPTなどの大型モデルは対象外です。本文にはretryAfter(待つべき秒数。Retry-Afterヘッダーにも同じ値が入ります)とmax(期間の上限)が含まれます。メッセージが1回を超える回数を必要とする場合は、need(このメッセージが数えられる回数)とleft(この期間に残っている回数)も含まれます。needがmaxを超える場合は、待っても解決しません。エラーメッセージにメッセージが長すぎることが示されるので、会話を短くするか、新しい会話を始めてください。チャージが受け付けられている間、チャージしていないアカウントには、codingModels(DeepSeekのコーディング用ラインのモデル名。残高から課金され、この上限には含まれません)とbuyUrl(チャージ先)も含まれます。 |
network_quota | 403 | このネットワークアドレスは、現在の期間の無料モデルの呼び出し回数を使い切ったか、このメッセージに必要な回数が残っていません。Claude、GPTなどの大型モデルは対象外です。本文にはretryAfter(待つべき秒数。Retry-Afterヘッダーにも同じ値が入ります)とmax(期間の上限)が含まれます。メッセージが1回を超える回数を必要とする場合は、need(このメッセージが数えられる回数)とleft(この期間に残っている回数)も含まれます。needがmaxを超える場合は、待っても解決しません。エラーメッセージにメッセージが長すぎることが示されるので、会話を短くするか、新しい会話を始めてください。チャージが受け付けられている間、チャージしていないアカウントには、codingModels(DeepSeekのコーディング用ラインのモデル名。残高から課金され、この上限には含まれません)とbuyUrl(チャージ先)も含まれます。 |
site_busy | 429 / 403 | 当サイト全体で共有している無料モデルの呼び出し回数が、現在の期間分を使い切ったか、このメッセージに必要な回数が残っていません。Claude、GPTなどの大型モデルは影響を受けません。本文にはretryAfter(待つべき秒数。Retry-Afterヘッダーにも同じ値が入ります)が含まれます。サイト全体の上限と残りの回数は公開していません。メッセージが期間全体で許容される量を超える場合、ステータスは403となり、待っても解決しません。エラーメッセージにメッセージが長すぎることが示されるので、会話を短くするか、新しい会話を始めてください。チャージが受け付けられている間、チャージしていないアカウントには、codingModels(DeepSeekのコーディング用ラインのモデル名。残高から課金され、この上限には含まれません)とbuyUrl(チャージ先)も含まれます。 |
premium_busy | 429 | Claude、GPTなどの大型モデルでほかの応答が処理中で、約10秒待ってもこのリクエストが収まりませんでした。1日の予算は使い切っていません。課金はされません。本文には秒数でretryAfterが含まれ、Retry-Afterヘッダーにも同じ値が入ります。 |
upstream_failed | 503 | モデルの提供元から応答がありませんでした。この場合、課金されません。 |
think_overrun | 503 | モデルが出力の上限をすべて推論に使い切り、応答を書きませんでした。推論をオフにできる無料モデルでは、当サイトがまず推論をオフにしてもう一度問い合わせます。それでも応答がなかった場合にのみ、このエラーが返されます。課金はされず、呼び出し回数も戻されます。max_tokensを増やすか、作業を小さく分けるか、別のモデルを選んでください。ストリーミングのリクエストでは、このエラーは[DONE]の前に届きます。 |
content_filtered | 400 | モデルの提供元のコンテンツフィルターがこのリクエストをブロックしたため、応答はありません。課金はされず、呼び出し回数も戻されます。リクエストの表現を変えるか、別のモデルを選んでください。ストリーミングのリクエストでは、このエラーは[DONE]の前に届きます。 |
content_blocked | 422 | 最後のユーザーメッセージが当サイトのコンテンツポリシー(onomeo.com/content-policy)に適合していないため、どのモデルにも送信されませんでした。課金はされず、呼び出し回数にも数えられません。 |
upstream_unconfigured | 503 | 現在、このサービスは提供元に接続されていません。 |
premium_budget_exhausted | 403 | Claude、GPTなどの大型モデルの、サイト全体の予算は1日4回(UTCの0:00、6:00、12:00、18:00)に分けて開放され、各枠の残りは次の枠に繰り越されます。現在の枠を使い切ってから次の枠が開くまで返されます。1日分の予算をすべて使い切った場合は、UTCの0:00まで返されます。本文にはresetAt(リセット時刻。ISO 8601)とretryAfter(それまでの秒数)が含まれ、Retry-Afterヘッダーにも同じ値が入ります。課金はされず、無料モデルは引き続き応答します。チャージ済みのアカウントにはこの回の区切りは適用されず、1日分の予算をすべて使い切った場合にのみこのエラーが返されます。最初の3回では、チャージしていないアカウントは、その回の70%を使い切った時点でこのエラーが返され、本文にはreserved: trueとチャージ先のbuyUrlも含まれます。 |
coding_line_out | 403 | DeepSeekのコーディング用ラインは停止中です。当サイトがDeepSeekに預けている残高が少なくなっているか、このラインの1日の利用上限に達しました。課金はされません。当サイトがDeepSeekの残高を補充するか、翌日(UTC)になると再開します。それまでは別のモデルを選んでください。 |
draw_daily_limit | 429 | /v1ではなく、画像生成ページ独自のリクエスト(POST /api/draws)で返されます。アカウントが本日の無料画像枚数を使い切ったか、このリクエストが求める枚数が残っていないため、画像は生成されません。本文にはtoday(used、max。単位は枚)とresetsAt(次のUTC 0:00。ISO 8601)が含まれます。ご自身の提供元キーで生成した画像と、1枚ごとに課金されるモデルの画像は、数に含まれません。 |
よくある質問
本番環境で使えますか。
いいえ。これは稼働率を保証しない無料のベータ版です。試用、プロトタイプ、停止しても問題のない用途にご利用ください。
キーを紛失するとどうなりますか。
何も失われません。もう一度ログインし、マイページで新しいキーを作成してください。同じアカウント、同じ残高のままです。ほかの人がキーを持っている可能性がある場合は、マイページから古いキーを削除してください。
キーを複数作成できますか。
はい。1つのアカウントで最大10個のキーを持てます。キーは同じ残高を使い、同じ呼び出し上限を共有するため、キーを増やしても呼び出せる回数は増えません。
プロンプトは保存されますか。
APIへのリクエストについては、onomeoは各リクエストと応答の抜粋(システムプロンプトの先頭1,000文字、最後のユーザーメッセージと応答それぞれの先頭4,000文字)を保存します。保存するのはアカウントごとに直近100件、最長30日間です。運営者は管理画面でこれを閲覧できます。使用量も、課金と呼び出し回数の集計のために記録されます。ウェブ版のチャットの会話は、アカウントに保存されます(最大50件、削除も可能です)。いずれの場合も、メッセージは第三者のモデル提供元に転送され、一部の提供元(特に無料プラン)は、送信された内容を保持したり、サービスの改善に利用したりする場合があります。onomeoがお客様のコンテンツを学習に使用することはありません。
画像生成、音声、埋め込みはありますか。
いいえ。この無料ベータ版が現在提供しているのはテキストのチャットモデルのみで、画像生成、音声、埋め込みはなく、関数呼び出しの動作も保証していません。これらの機能に依存するコードには、このエンドポイントは適していません。
応答が空になるのはなぜですか。
ほとんどの場合、max_tokensの値が小さすぎることが原因です。これらのモデルは応答の前に推論を行い、その推論も同じ上限に含まれます。このフィールドを指定しないのが最も確実です。
Roo Code
OpenCode
Aider
Zed
VS Code
Pi
Cherry Studio
Qwen Code
Jan