For the complete documentation index, see llms.txt. This page is also available as Markdown.

AI Gateway:OpenAI 互換 API 連携

OpenAI SDKでプログラムのロジックを変更せずにMaiAgent AI Gatewayに接続する方法を説明します。エンドポイントとbase URL、Bearer認証、モデル識別子(エイリアス、カスタムモデル、フォールバックグループ)、推論レベル、ストリーミング、エラー形式、Creditsの課金と制限を扱います。

このページは、MaiAgent AI Gatewayを使って言語モデルを呼び出すエンジニア、特にOpenAI SDKでプログラムをすでに開発している独立系ソフトウェアベンダー(ISV)向けの説明です。GatewayはOpenAI互換のインターフェースを提供します。SDKのbase_urlをMaiAgentに、api_keyをMaiAgent API Keyに変更するだけで、呼び出しロジックを変更せずに、組織で利用可能な各社のモデルを単一の入口から呼び出せます。

Gatewayが接続先、モデル、データ、責任、記録の5つの面で提供する保護については、AI Gatewayのセキュリティをご覧ください。このページでは連携方法のみを説明します。

AI Gatewayは、MaiAgentプラットフォーム側で組織に対して有効化する必要があります。組織で有効化されていない場合、どのキーで推論エンドポイントを呼び出しても、無効なキーと同じ401が返されます。

エンドポイント一覧

メソッド
パス
認証
用途

POST

/api/v1/chat/completions

必須

チャット補完。ストリーミングと非ストリーミングに対応します

POST

/api/v1/embeddings

必須

テキストのベクトル化

GET

/api/v1/models

任意

呼び出し可能なモデル識別子と料金の一覧取得

Base URL(OpenAI SDKのbase_urlに指定します):

https://api.maiagent.ai/api/v1

SDKが後ろに/chat/completions、/embeddings、/modelsを自動的に付加します。パスの末尾にスラッシュを付けないでください。

認証

推論エンドポイントはBearer認証を使用します。OpenAI SDKがデフォルトで送信するヘッダーと同じ形式です:

Authorization: Bearer <GATEWAY_API_KEY>
Content-Type: application/json
  • キーはMaiAgentのAPI Keyですが、Gatewayエンドポイントが受け付けるプレフィックスはBearerのみです。MaiAgentのほかのAPIで使用するApi-Key <キー>形式では、ここでは401が返されます。

  • 以下の場合はすべて同じ401 invalid_api_keyを返し、どのチェックで拒否されたかは公開しません:キーが存在しない、取り消し済み、無効化済み、有効期限切れ、紐付けられたメンバーまたはユーザーが無効化済み、組織でAI Gatewayが有効化されていない場合です。

  • リクエスト本文はJSONのみ受け付けます。

Gatewayキーの取得

MaiAgent管理画面で、組織設定 → API Key管理 → API Keyを作成に進みます。作成ウィザードは、メンバーの選択、アクセスと制限の設定、キーの生成の3ステップです。

  • キーは1人のメンバーに紐付きます。呼び出しはそのメンバーの利用として記録され、そのメンバーのCredits上限が適用されます。

  • 「アクセスと制限」では、このキーで呼び出せるモデル(組織で利用可能な範囲内で絞り込むことのみ可能で、デフォルトではすべて有効です)、1分あたりのリクエスト数(RPM)、1分あたりのトークン数(TPM)を設定できます。

  • キー全体が表示されるのは作成時の1回のみです。すぐにシークレット管理システムに保存してください。

  • 同じメンバーが複数の有効なキーを同時に持つことができます。ローテーションでは、新しいキーを先に発行し、デプロイが完了してから古いキーを取り消すことで、サービスを中断せずに切り替えられます。

  • API Key管理ページを使用するには「API Key管理権限」が必要です。この権限がないメンバーは、右上のアバター → アカウント → APIキーから自分のキーを作成できます(Gatewayでも使用できます)。モデルへのアクセスとRPM/TPMは、管理者がAPI Key管理ページで設定します。

管理画面の左メニューにあるAI Gateway → 連携サンプルでは、選択したモデルに応じてコピー可能なcURL/Python/Node.jsのサンプルが生成されます。呼び出しが失敗した場合は、AI Gateway → 概要でアクセス診断を実行すると、キー、メンバー、組織、モデルの有効化状態を順に確認できます。AI Gatewayメニューを表示するには、ロールにAI Gateway権限が必要です。設定方法は、ユーザーマニュアルの指定したロールでAI Gatewayを利用するをご覧ください。

最小構成のサンプル

まずキーを環境変数に保存し、コードに直接書き込まないでください:

モデル識別子

modelフィールドには、各プロバイダーのネイティブIDではなく、Gatewayモデル識別子を指定します。識別子はすべて/を含む形式です。/を含まない値は、そのまま400になります。

呼び出す対象

modelに指定する値

取得元

MaiAgent管理モデル

{vendor}/{model}(またはプラットフォームに設定されたエイリアス)

GET /modelsが返すid

組織のカスタムモデル(BYOK/セルフホスト)

システムが生成するGatewayモデルID。形式は{プロバイダーslug}/{モデル名}-{ランダムコード}です

管理画面のAI Gateway → モデルページにある「GatewayモデルID」

フォールバックグループ

システムが生成するグループslug。形式はmaiagent/fallbacks-{ランダムコード}です

管理画面のAI Gateway → フォールバックモデルグループ

解決順序は、まずプラットフォームのエイリアス、次に{vendor}/{model}、続いて組織のカスタムモデル、最後にフォールバックグループです。プラットフォームモデル(エイリアスと{vendor}/{model})は、「組織で利用可能 ∩ Gatewayで公開 ∩ このキーで有効化」の範囲内でのみ検索します。カスタムモデルとフォールバックグループは、この組織が所有するものに限定され、このキーのアクセスリストによる制限も受けます。範囲外のモデルと存在しないモデルには、同じ404 model_not_foundが返されます。

/modelsで呼び出し可能なモデルを取得する

Gatewayキーを付けて呼び出すと、そのキーで実際に呼び出せるモデルのみが一覧に表示されます(組織のブロック設定とキーのアクセスリストが反映されます)。認証なしの場合は、組織によるフィルタリングのないプラットフォームの公開カタログが返されます。各項目には、OpenAI標準のid、object、created、owned_byに加え、以下のフィールドがあります:

フィールド
説明

name

表示名です

type

現在はすべてlanguageです

tags

機能タグです:tool-use、multimodal、reasoning、prompt-caching、streaming。reasoningは、このモデルがreasoning_effortを受け付けることを示します。「推論レベル」をご覧ください

pricing

管理モデルではinput/output、単位はcredits_per_1k_tokensです(Gatewayキーを付けて呼び出す場合は組織のGatewayサービス料金を含み、認証なしの公開カタログではサービス料金を加算する前の基準単価です)。カスタムモデルではtraffic_fee_percent、単位はpercent_of_total_tokensです

providers

このモデルを提供できるバックエンドプロバイダーの一覧です。各項目にslugがあり、以下のprovider.orderで指定できます

context_window、max_tokens

設定されている場合のみ表示されます

組織で中国モデルを非表示にした場合の連携動作

組織が「中国モデルを非表示」を有効にすると、プラットフォームに登録されたモデルの原産国に基づいて、中国のプラットフォームモデルが除外されます。今後追加されるモデルも対象です。この制限は、Gatewayのモデルカタログと実際の呼び出しの両方に適用されます:

  • キー付きでカタログを取得する場合:GET /modelsには非表示のプラットフォームモデルが表示されません。認証なしの公開カタログには組織情報がないため、この制限は適用されません。

  • プラットフォームモデルを直接呼び出す場合:非表示のモデルはエイリアスや{vendor}/{model}で呼び出せず、404 model_not_foundが返されます。同じプラットフォームモデルを自分のキーで呼び出しても、組織の非表示設定を回避することはできません。

  • フォールバックグループを呼び出す場合:非表示のプラットフォームモデルを使うステップを先に除外し、残りのステップを使用します。残りのステップがなければ404 model_not_foundが返され、そのグループもキー付きで取得したカタログには表示されません。

  • 組織のカスタムモデル:組織が独自に作成したGatewayモデルには、この原産国による非表示設定は適用されません。ただし、既存のキーのアクセスルールを満たす必要があります。

たとえば、企業の連携エンジニアが中国のプラットフォームモデルをデフォルトに設定していた場合、組織が非表示を有効にすると、元の識別子は404を返します。エンジニアは、サービスが実際に使用しているキーで/modelsの一覧を再取得し、一覧にある利用可能なモデルにデフォルトを変更してから呼び出しを再開してください。認証なしの公開カタログを使って、その組織にモデルの利用権限があるかどうかを判断しないでください。

非表示設定を有効にしても、既存のモデル単位のブロックリストは削除されません。非表示を解除した後も、元の組織での有効化状態とキーのアクセス範囲に基づいて判断されます。

バックエンドプロバイダーの指定

同じモデル識別子を複数のプロバイダーが提供する場合があります(たとえば、同じモデルが開発元とクラウドプラットフォームの両方で提供されている場合です)。特定のプロバイダーを使用するには、リクエスト本文にprovider.orderを追加し、/modelsが返すproviders[].slugを指定します:

現在は一覧の最初の値のみを使用します。そのプロバイダーにモデルがなければ、404 model_not_foundが返されます。provider.orderを指定した場合、フォールバックグループには解決されません。

Bring Your Own Key(BYOK)

組織の所有者は、管理画面のAI Gateway → モデルプロバイダーで、組織独自のプロバイダー認証情報を登録できます。登録後の動作は次のとおりです:

  • 管理モデルを呼び出す際、組織に同じプロバイダーの有効な認証情報がある場合、Gatewayは組織の認証情報で上流を呼び出します(同じプロバイダーに複数の認証情報がある場合は、最後に更新されたものを使用します)。呼び出し側のmodelは変更不要です。

  • これらの認証情報を使って「カスタムモデル」を作成し、システムが生成するGatewayモデルIDで呼び出すこともできます。

  • 上流が組織の認証情報を401/403で拒否した場合、Gatewayは502 upstream_auth_errorを返します。メッセージには組織のBYOK認証情報が拒否されたことが示されます。AI Gateway設定で認証情報を更新してください。

プロバイダー認証情報の部分更新

連携プログラムは、PATCH /api/v1/gateway/credentials/{id}/で自分の組織のプロバイダー認証情報を更新できます。この管理インターフェースでは、ログイン、組織でのAI Gatewayの有効化、AI Gatewayアクセス権限が必要で、書き込みを行うユーザーは組織の所有者である必要があります。この認証は、推論エンドポイントで使うGateway Bearerキーとは用途が異なります。

リクエストにはname、isActive、credentialsを含めることができます。credentials内では、apiBase、apiKeyなどのcamelCaseフィールド名を使用します。各認証情報フィールドは以下のように処理されます:

送信する値
更新結果

フィールドを省略

元の値を保持します

空文字列""

元の値を保持します。変更なしを意味します

空でない新しい値

元の値を置き換え、プロバイダーのルールに従って検証します

null

任意フィールドをクリアします。必須フィールドはクリアできず、400が返されます

たとえば、vLLMとOpenAI互換プロバイダーのapiKeyはnullでクリアできますが、apiBaseは必須です。Anthropicの任意フィールドapiBaseはnullでクリアし、認証情報内のカスタムエンドポイントを削除できます。API Keyは引き続き必須です。

読み取りレスポンスでは、マスクされたプレビューcredentialsPreviewのみが提供され、元の認証情報は返されません。管理画面での操作方法はモデルプロバイダー設定をご覧ください。この節では、連携プログラムから更新する際の値の扱いのみを説明します。

フォールバックグループ

フォールバックグループは、組織の所有者が管理画面で作成する、順序付きのモデル一覧です。modelにグループslugを指定した場合のみ、フォールバックチェーン全体が有効になります。単一モデルへの呼び出しでは、自動的に切り替わりません。

  • 切り替え条件(システムで固定されています):タイムアウト、接続失敗、上流が408/429/500/502/503/504/529を返した場合です。パラメーターの誤りや無効なキーなどのリクエスト側のエラーでは切り替えず、そのままエラーを返します。

  • ストリーミング:Gatewayは上流から最初のコンテンツを取得してからレスポンスを開始します。そのため、接続エラーやレート制限が発生した場合、最初のバイトを送信する前に切り替えられます。コンテンツの返却を開始すると、それ以降は切り替えません。

  • レスポンスのmodelフィールドは、送信したグループslugのままです。実際に処理したモデルやフォールバックが発生したかどうかは、管理画面の使用量とリクエストの記録に残ります。

  • モデルデータが存在しなくなったステップ、または組織のカスタムモデルが削除(無効化)されたステップは、呼び出し前にスキップされます。プライマリモデルも、一覧で最初に呼び出し可能なステップに変わります。プラットフォームモデルが単に無効化されている場合、このスキップルールは適用されません。

  • チェーン全体に呼び出し可能なステップがない場合、推論は400 invalid_request_errorを返し、エラーコードはfallback_group_unavailableです。グループを編集して利用可能なモデルを追加してください。一時的な上流エラーとして再試行しないでください。

  • GET /api/v1/gateway/fallback-groups/{id}/でグループを取得すると、上記の無効なステップはmodelId: null、modelName: ""、managedModel: null、customModel: nullを返します。管理インターフェースの読み取りには、ログイン、組織でのAI Gatewayの有効化、AI Gatewayアクセス権限が必要です。表示可能なプラットフォームのグループと、自分の組織のグループのみ読み取れます。

  • /modelsには、呼び出し可能なステップが残っている組織所有のフォールバックグループのみが表示されます。このルールは、すべてのプラットフォーム仮想モデルがモデルカタログから消えることを意味するものではありません。

チャット補完のパラメーター

POST /chat/completionsが受け付けるフィールドは以下のとおりです:

フィールド
説明

model

必須です。前の節をご覧ください

messages

必須で、空にできません。roleにはsystem、user、assistant、toolを指定できます。contentには文字列、またはtext/image_urlのマルチモーダル配列を指定できます。tool_calls、tool_call_id、nameに対応します

stream

デフォルトはfalseです

stream_options.include_usage

デフォルトはfalseです。「ストリーミング」をご覧ください

temperature

数値です

max_tokens

最小値は1です

top_p

0から1です

stop

文字列または文字列配列です

n

1から8で、デフォルトは1です

tools

type: "function"のみ対応します。関数名は最大64文字です

tool_choice

auto、none、required、または特定の関数オブジェクトを指定します

parallel_tool_calls

デフォルトはtrueです

response_format

typeはtext、json_object、json_schemaです。json_schemaにはjson_schemaオブジェクトが必要です

reasoning_effort

none、minimal、low、medium、high、xhigh、maxです。/modelsでreasoningタグが付いたモデルにのみ適用されます。「推論レベル」をご覧ください

provider

MaiAgentの拡張フィールドです。「バックエンドプロバイダーの指定」をご覧ください

注意事項:

  • 対象モデルがtop_pまたはstopに対応していない場合、これらのパラメーターはエラーにならず、省略されます。

  • toolsとresponse_format: json_schemaは同時に使用できません。併用すると400が返されます。

  • json_schemaモードでストリーミングする場合、完全なJSONを単一のdeltaで一度に送信します。文字単位ではストリーミングしません。

  • json_objectモードでは、システムメッセージに「有効なJSONのみを出力する」という指示が追加されます。

  • json_objectのレスポンス全体が単一のMarkdownのjsonコードブロックであり、その内容が有効なJSONの場合、Gatewayはブロックのマーカーを削除して返します。通常のレスポンスとストリーミングレスポンスの両方に適用されます。

  • ブロックの外に説明文がある場合、ブロック内が有効なJSONでない場合、またはレスポンスが途中で切れて完全な有効なJSONブロックでなくなった場合、Gatewayはモデルの原文を保持します。連携側でもJSONを解析し、無効なJSONを処理する必要があります。json_objectだけでは、毎回解析可能なオブジェクトを取得できるとは限りません。

  • ストリーミングのjson_objectレスポンスがバッククォートで始まる場合、Gatewayはレスポンス全体が完了してからコンテンツを送信します。それ以外のレスポンスは、通常どおり順次送信します。上流が途中で失敗した場合、受信済みでまだ送信していないコンテンツを原文のまま送信してからエラーを通知します。

レスポンスは標準のchat.completionオブジェクトです。idはchatcmpl-...形式で、modelには送信した識別子が返されます。レスポンスヘッダーx-request-idはidと同じです。問題を報告する際は、この値を添えてください。

推論レベル(reasoning_effort)

reasoning_effortは、プロバイダー間で共通のレベルを使って、モデルがどの程度深く推論するかを指定します。弱い順に以下のとおりです:

none < minimal < low < medium < high < xhigh < max

  • 指定可能な値:上記の7つの値、またはnullのみを受け付けます。それ以外の値(offや数値のトークン予算を含みます)は、400 invalid_requestになります。noneは推論を無効にすることを意味します。

  • 省略またはnull:Gatewayはレベルを指定しません。プラットフォームにそのモデルのデフォルト推論レベルが設定されていればそれを使用し、なければ推論パラメーターを送信せず、プロバイダーのデフォルトに従います。例外として、一部のOpenAIモデル(GPT-5.6シリーズなど)はレベルを指定しないとツール定義を受け付けないため、プラットフォームがnoneを送信します。

  • モデルにreasoningタグがない場合:そのモデルには推論の制御機能がないため、reasoning_effortはエラーにならず、省略されます。

  • 変換方法:まず対象モデルが対応するレベルにマッピングし、その後プロバイダー固有のパラメーターに変換します(OpenAIのreasoning_effort、Claudeのeffortや推論トークン予算、Geminiの推論予算などです)。各モデルが対応するレベルは、プラットフォームがモデルファミリーごとに管理します。現在の/modelsはreasoningタグのみを提供し、個々のモデルが対応するレベルは一覧にしません。

モデルが指定されたレベルに対応していない場合、Gatewayはエラーを返さず、以下のルールで調整します:

状況
実際に送信する内容

モデルがそのレベルに対応している場合

そのまま送信します

対応していないが、より弱いレベルがある場合

要求したレベルを超えない、最も近いレベルを使用します(たとえば、モデルがhighまで対応している場合、maxを指定するとhighを送信します)。調整によって料金が高くなることはありません

要求したレベルがモデルの最低レベルより低い場合

モデルの最低レベルを使用します

推論を要求した場合(none以外)

無効にする方向には調整しません

noneを指定したが、モデルが推論を無効にできない場合

推論パラメーターを送信せず、プロバイダーのデフォルトに従います。このようなモデルは引き続き推論を行い、実際のトークン数に基づいて課金されます

同じレベルでも、モデルによって実際の推論量は異なります。モデルを変更する際は、レイテンシーとトークン使用量を再評価してください。同じレベルなら料金も同じだと考えないでください。

ストリーミング

stream: trueの場合、レスポンスはServer-Sent Events(Content-Type: text/event-stream)になります。各イベントはdata: {chat.completion.chunk JSON}の1行で、正常終了時はdata: [DONE]で終わります。OpenAI SDKでは、そのまま反復処理できます:

  • include_usage: trueの場合、最後にchoicesが空配列でusageを含むイベントが追加されます。このオプションは使用量を返すかどうかにのみ影響し、課金には影響しません。有効かどうかにかかわらず、Gatewayは使用量を記録して課金します。

  • ストリーミング開始前に発生したエラー(認証、利用上限、モデルが存在しない、上流への接続失敗)は、SSEではなく通常のHTTPエラーレスポンスで返されます。

  • ストリーミング中に上流でエラーが発生した場合、HTTPステータスはすでに200です。Gatewayはdata: {"error": {...}}イベントを送信して終了し、[DONE]は送信しません。クライアント側でこのイベントを処理してください。

ベクトル化

POST /embeddingsはOpenAIと同じ形式です:

  • input:空でない文字列、または空でない文字列配列です。

  • encoding_format:float(デフォルト)またはbase64です。

  • model:プラットフォームがGateway向けに公開したベクトル化モデルの識別子で照合します(次に名前で照合します)。ベクトル化モデルは/modelsの一覧に含まれず、API Keyのモデルアクセスリストによる制限も受けません。利用可能なベクトル化モデル識別子は、MaiAgentに確認してください。

  • usage.prompt_tokensは、Gatewayがcl100k_baseトークナイザーで推定します。この数値が課金の基準にもなります。

エラー形式

すべてのエラーはOpenAI形式で返され、OpenAI SDKが対応する例外に変換します:

HTTP

type

code

主な原因

推奨される対応

400

invalid_request_error

invalid_request

フィールド検証の失敗、modelに/がない、toolsとjson_schemaの併用です

リクエストを修正し、再試行しないでください

400

invalid_request_error

upstream_invalid_request

上流が400/413/415/422でリクエストを拒否しました(パラメーター、ツール定義、入力サイズがそのモデルの制限を超えています)

対象モデルの制限に合わせてリクエストを調整してください

400

invalid_request_error

fallback_group_unavailable

フォールバックグループに呼び出し可能なステップがありません

グループを編集し、利用可能なモデルを追加してください

401

authentication_error

invalid_api_key

キーが無効、無効化済み、有効期限切れ、取り消し済み、または組織でGatewayが有効化されていません

キーを確認し、管理画面のアクセス診断で原因を特定してください

402

billing_error

insufficient_credits

組織のCredits不足、またはメンバー/グループの上限に達しています。上流を呼び出す前に拒否されます

Creditsを追加するか、上限を調整してください

404

invalid_request_error

model_not_found

モデルが存在しない、組織に公開されていない、このキーで有効化されていない、または指定したプロバイダーにそのモデルがありません

/modelsで利用可能なidを確認してください

429

rate_limit_error

rate_limit_exceeded

キーのRPMまたはTPM制限を超えています

バックオフしてから再試行してください

502

server_error

upstream_auth_error

上流が認証情報(BYOKまたはプラットフォームの認証情報)を拒否しました

BYOKでは認証情報を更新し、プラットフォームの認証情報ではMaiAgentに連絡してください

502

server_error

upstream_error

上流のタイムアウト、レート制限、5xx、その他のエラーです。上流の元のエラーメッセージは返されません

バックオフしてから再試行するか、フォールバックグループを使用してください

使用量とCreditsの課金

成功した呼び出しごとに、組織のCreditsが差し引かれます。チャット補完では上流が報告したトークン数を、ベクトル化ではGatewayが推定したトークン数を基準にします(「ベクトル化」をご覧ください):

  • 管理モデル:モデルの入力/出力(プロンプトキャッシュを含みます)のトークン単価に基づいて課金し、組織のGatewayサービス料金の割合を加算します。Gatewayキー付きで/modelsを呼び出した場合、pricingにはサービス料金がすでに含まれています。認証なしの公開カタログは、サービス料金を加算する前の基準単価を表示します。

  • カスタムモデルとBYOK認証情報:上流の料金は、貴社がプロバイダーに直接支払います。MaiAgentが請求するのはトラフィック料金のみで、その呼び出しの合計トークン数(入力+出力+プロンプトキャッシュの書き込みと読み取り)×組織のトラフィック料金率で計算します。LLMのトークン単価による料金は請求しません。管理画面での確認方法は、ユーザーマニュアルのAI Gatewayカスタムモデルのトラフィック料金をご覧ください。

  • ベクトル化:入力トークン数に基づいて課金し、同様にGatewayサービス料金を加算します。

  • ストリーミングの中断:クライアントが途中で切断した場合や上流で途中にエラーが発生した場合も、すでに生成されたトークンは課金対象です。

  • 組織のCreditsが不足している場合やメンバーの上限に達した場合、リクエストは上流を呼び出す前に402を返します。

使用量は、管理画面のAI Gateway → 概要で、モデル、プロバイダー、API Key別に確認できます。Creditsの差し引き明細は、Credits消費記録にあります。

制限

  • RPM:キーの 1 分あたりのリクエスト数上限は、Gateway だけでなく、このキーで呼び出せるすべての MaiAgent API に適用されます。

  • TPM:1 分あたりのトークン数上限は、Gateway のチャット補完と埋め込みにのみ適用されます。トークン数は上流からの応答後に判明するため、単一のリクエストでその分の上限を一度超えることがあります。その後、同じ分内のリクエストはすべて 429 を返し、次の分にリセットされます。

  • RPM/TPM が未設定の場合、レート制限はありません。

  • 現在提供する OpenAI 互換エンドポイントは、上の表の 3 つのみです。OpenAI の Responses、Assistants、画像、音声などのエンドポイントは Gateway の対象外です。

  • AI Gateway のセキュリティ:エンドポイントの提供元、モデルの制御、データ保護、監査ログについて説明します

  • クイックスタート:MaiAgent プラットフォーム API(Agent、対話、ナレッジベース)の認証方法を説明します

  • ユーザーマニュアル Credits:Credits 残高、課金方法、消費記録について説明します

最終更新

役に立ちましたか?