baseURL を差し替えるだけで、既存の OpenAI クライアントが動きます。
登録不要で HAI のレイテンシと SDK 互換性を体験できます。下のボタンからトライアルキーを発行してください。
from openai import OpenAI
client = OpenAI(
base_url="https://hai-api.hcloud.ltd/v1",
api_key="hai_test_...",
)
resp = client.chat.completions.create(
model="test",
messages=[{"role": "user", "content": "Hello"}],
)
print(resp.choices[0].message.content)フルモデル(Kimi K3 / Kimi K2.6 / DeepSeek V4)は コンソール から。
| 項目 | 内容 |
|---|---|
| モデル | test(動作確認・レイテンシ体感用。出力と入力に下記の上限あり) |
| リクエスト総量 | 50 req / キー |
| レート | 3 rpm |
| 有効期限 | 24 時間 |
| 出力上限 | 512 tokens(超過分は finish_reason: length) |
| 入力上限 | 約 8K トークン相当(24,000 文字) |
| 混雑時 | 429 + retry-after(OpenAI / Anthropic SDK は自動リトライ) |
Claude Code / Codex はトライアル対象外です。コンテキスト要件が大きいため、本番モデル(kimi-k3 等)でご利用ください → コンソールへ。
curl https://hai-api.hcloud.ltd/v1/chat/completions \
-H "Authorization: Bearer hai_test_..." \
-H "Content-Type: application/json" \
-d '{
"model": "test",
"messages": [{"role":"user","content":"こんにちは"}]
}'import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://hai-api.hcloud.ltd/v1",
apiKey: "hai_test_...",
});
const resp = await client.chat.completions.create({
model: "test",
messages: [{ role: "user", content: "Hello" }],
});
console.log(resp.choices[0].message.content);https://hai-api.hcloud.ltd/v1
提供 API: /v1/chat/completions / /v1/responses / /v1/messages(Anthropic 互換) / /v1/models / /v1/embeddings(埋め込み) / /v1/videos(動画生成)
出力上限(max_tokens / max_completion_tokens / max_output_tokens)に 1 以上 3 未満を指定した場合は 3 として扱います (極端に小さい上限でも安定して応答を返すためです)。 自社 GPU で運用するモデル(qwen3.8-27b-uncensored / llm-jp-4-vl-9b)では、モデルの出力上限を超える値は出力上限として扱います。 指定を省略した場合に上限が付くことはありません。
from openai import OpenAI
client = OpenAI(
base_url="https://hai-api.hcloud.ltd/v1",
api_key="hai_...",
)
resp = client.chat.completions.create(
model="deepseek-v4-flash",
messages=[{"role": "user", "content": "Hello"}],
)
print(resp.choices[0].message.content)import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://hai-api.hcloud.ltd/v1",
apiKey: "hai_...",
});
const resp = await client.chat.completions.create({
model: "kimi-k2.6",
messages: [{ role: "user", content: "Hello" }],
});
console.log(resp.choices[0].message.content);curl https://hai-api.hcloud.ltd/v1/chat/completions \
-H "Authorization: Bearer hai_..." \
-H "Content-Type: application/json" \
-d '{
"model": "kimi-k3",
"messages": [{"role":"user","content":"こんにちは"}]
}'Anthropic 互換の /v1/messages を提供しているため、環境変数の設定だけで Claude Code から HAI のモデルを利用できます。トライアル(model test)はコンテキスト上限が小さいため Claude Code での利用はおすすめしません。本番モデルと有料キーでご利用ください。
使うモデルに合わせて ~/.claude/settings.json を生成するなら クライアント設定ジェネレーター を使ってください。
export ANTHROPIC_BASE_URL=https://hai-api.hcloud.ltd export ANTHROPIC_AUTH_TOKEN=hai_... export ANTHROPIC_MODEL=kimi-k3 export ANTHROPIC_SMALL_FAST_MODEL=deepseek-v4-flash claude
ANTHROPIC_SMALL_FAST_MODEL は必須です。未設定の場合、Claude Code が haiku 系のモデル名でリクエストし 400(unknown model)エラーになります。 バックグラウンドタスク用のため、低価格の deepseek-v4-flash を推奨します(コストに応じて他のモデル ID に変更できます)。Authorization: Bearer(ANTHROPIC_AUTH_TOKEN)と x-api-key(ANTHROPIC_API_KEY)の両方に対応しています。/v1/messages/count_tokens は未提供です。コンテキスト残量の表示が不正確になりますが、動作には影響しません。OpenAI Responses API 互換の /v1/responses に対応しています。トライアルは対象外です(本番モデル + 有料キー)。~/.codex/config.toml に以下を追記してください。 モデルを切り替える場合の設定は クライアント設定ジェネレーター で生成できます。
model_provider = "hai" model = "kimi-k3" [model_providers.hai] name = "HAI" base_url = "https://hai-api.hcloud.ltd/v1" env_key = "HAI_API_KEY" wire_api = "responses"
export HAI_API_KEY=hai_... codex
config.toml を書き換えずに試す場合は、-c オプションで同じ設定を渡せます。
codex exec --skip-git-repo-check \ -c model_provider=hai \ -c 'model_providers.hai.name=HAI' \ -c 'model_providers.hai.base_url=https://hai-api.hcloud.ltd/v1' \ -c 'model_providers.hai.env_key=HAI_API_KEY' \ -c 'model_providers.hai.wire_api=responses' \ -c model=kimi-k3 \ "こんにちは"
/v1/models 関連の ERROR ログが表示されることがありますが、非致命的です。そのまま動作します。提供モデルは思考(reasoning)に対応しており、思考の内容と使用トークン数が各 API のレスポンスに含まれます。OpenAI SDK・Claude Code・Codex CLI のいずれからも追加設定なしで利用できます。
| API | リクエスト | 思考内容の返却先 |
|---|---|---|
/v1/chat/completions | reasoning_effort | message.reasoning_content |
/v1/responses(Codex) | reasoning: { effort } | type: "reasoning" の出力アイテム |
/v1/messages(Claude Code) | thinking | thinking コンテンツブロック |
reasoning_effort / budget_tokens など)はそのままモデルへ渡されます。受け付ける値はモデルごとに違い、 対応しない値は 400 になります。モデルごとの一覧は モデル ID の表と クライアント設定 に載せています。"none" を受け付けないモデルは思考を止められません(思考が常時 ON のモデル)。reasoning_effort を送らない場合はモデル既定の思考量になります。usage.completion_tokens_details.reasoning_tokens(Responses API では usage.output_tokens_details.reasoning_tokens)として報告され、出力トークンの一部として課金されます。cache_read_tokens は input_tokens の部分集合です。課金は (input_tokens − cache_read_tokens) × 入力単価 + cache_read_tokens × キャッシュ読取単価 + output_tokens × 出力単価です。単価未設定モデルでは cache_read_tokens が記録されても通常の入力単価で課金されます。/v1/chat/completions と /v1/responses の prompt_tokens / input_tokens はキャッシュ分を含み、/v1/messages の input_tokens は含みません(API 仕様の差)。テキスト生成のモデル ID です。埋め込みのモデルは 埋め込み(/v1/embeddings)、動画生成のモデルは 動画生成(/v1/videos) に記載しています。
| モデル ID | モデル名 | 精度 | 入力 | 出力上限 | reasoning_effort |
|---|---|---|---|---|---|
kimi-k3 | Kimi K3TEE | FP8 | テキスト / 画像 | 65,535 | none / minimal / low / medium / high / xhigh |
qwen3.8-2.4t-a95b | Qwen3.8 2.4T-A95BTEE | FP4 | テキスト | 65,536 | minimal / low / medium / high / xhigh |
glm-5.3 | GLM-5.3自社DC | FP8 | テキスト | 128,000 | minimal / low / medium / high / xhigh |
kimi-k2.6 | Kimi K2.6自社DC | FP8 | テキスト / 画像 | 16,384 | none / minimal / low / medium / high / xhigh |
qwen3.8-27b | Qwen3.8 27B自社DC | BF16 | テキスト / 画像 / 動画 | 32,768 | none / minimal / low / medium / high / xhigh |
qwen3.8-27b-uncensored | Qwen3.8 27B Uncensored自社DC | FP8 | テキスト / 画像 | 16,384 | none / minimal / low / medium / high / xhigh |
deepseek-v4.1-flash | DeepSeek V4.1 Flash自社DC | FP8 | テキスト / 画像 | 384,000 | none / minimal / low / medium / high / xhigh |
gemma-4-31b-it | Gemma 4 31B自社DC | FP8 | テキスト / 画像 / 動画 | 8,192 | none / minimal / low / medium / high / xhigh |
llm-jp-4-vl-9b | LLM-jp-4-VL 9B自社DC | BF16 | テキスト / 画像 | 8,192 | none / minimal / low / medium / high / xhigh |
qwen3.6-35b-a3b | Qwen3.6 35B-A3B自社DC | FP8 | テキスト / 画像 / 動画 | 16,384 | none / minimal / low / medium / high / xhigh |
deepseek-v4-flash | DeepSeek V4 Flash自社DC | FP8 | テキスト | 32,768 | none / minimal / low / medium / high / xhigh |
glm-5.3-flash | GLM-5.3 Flash自社DC | FP8 | テキスト / 画像 / 動画 | 2,048 | none / minimal / low / medium / high / xhigh |
「出力上限」は 1 リクエストで生成できるトークン数の上限です。コンテキスト長 (入力 + 出力の合計)は料金に記載しています。reasoning_effort は実際にリクエストを通して受け付けを確認した値です。設定ファイルの形で欲しい場合は クライアント設定 から生成できます。
掲載してほしいモデルがあればモデルのリクエストから教えてください。ご意見箱扱いとなるため、こちらでは返信いたしません。
テキスト生成モデルの出力はテキストのみです。画像を受け付けるモデルには、 OpenAI 互換の content 配列で image_url(Responses API では input_image、Anthropic 互換では image ブロック)を渡せます。テキストのみのモデルに画像を送るとエラーを返します。
埋め込みは /v1/embeddings です。テキスト生成とは別サーフェスのため、これらのモデル ID は GET /v1/models には含まれません(GET /v1/embeddings/models で対応モデルと次元を確認できます)。トライアルキーは対象外です。
| モデル ID | モデル名 | 精度 | 次元 |
|---|---|---|---|
qwen3-embedding-8b | Qwen3 Embedding 8B自社DC | Q8 | 4,096 32〜4096 で指定可 |
from openai import OpenAI
client = OpenAI(
base_url="https://hai-api.hcloud.ltd/v1",
api_key="hai_...",
)
resp = client.embeddings.create(
model="qwen3-embedding-8b",
input=["テキストをベクトルにする", "複数まとめて送れます"],
)
print(len(resp.data[0].embedding)) # 4096curl https://hai-api.hcloud.ltd/v1/embeddings \
-H "Authorization: Bearer hai_..." \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-embedding-8b",
"input": "テキストをベクトルにする"
}'input は文字列と文字列配列のどちらも受け付けます。配列で送ると data に入力と同じ順で返ります。dimensions に 32〜4096 の整数を指定すると、その次元に切り詰めた(Matryoshka)ベクトルが返ります。 次元を下げるとベクトル DB のストレージと検索コストが下がります。異なる次元のベクトルは比較できないため、 1 つのインデックス内では同じ値を使ってください。encoding_format に base64 を指定できます(既定は float)。stream: true は 400 を返します)。usage.completion_tokens は常に 0 です。 定額プランの対象外で、クレジットから消費します。動画生成は /v1/videos です。テキスト生成とは別サーフェスのため、これらのモデル ID は GET /v1/models には含まれません(GET /v1/videos/models で対応モデルと単価を確認できます)。トライアルキーは対象外です(本番モデル + 有料キー)。
| モデル ID | モデル名 | 仕様 |
|---|---|---|
minimax-h3 | MiniMax H3自社DC | 解像度 2K / 長さ 5〜15 秒 / 音声あり(既定 ON) アスペクト比 21:9 / 16:9 / 4:3 / 1:1 / 3:4 / 9:16 参照画像 最大 2 枚 |
生成は分単位の非同期ジョブです。POST /v1/videos が 202 でジョブ ID を返し、GET /v1/videos/{id} で完了を確認してから GET /v1/videos/{id}/content で mp4 を取得します。OpenAI Video API 互換の形なので、OpenAI SDK の videos.create / videos.retrieve / videos.download_content がそのまま使えます。
curl https://hai-api.hcloud.ltd/v1/videos \
-H "Authorization: Bearer hai_..." \
-H "Content-Type: application/json" \
-d '{
"model": "minimax-h3",
"prompt": "A product spin on a clean white table, soft studio light",
"seconds": 5,
"aspect_ratio": "16:9"
}'# 完了確認(status が completed になるまで繰り返す) curl https://hai-api.hcloud.ltd/v1/videos/<id> \ -H "Authorization: Bearer hai_..." # mp4 の取得 curl -L https://hai-api.hcloud.ltd/v1/videos/<id>/content \ -H "Authorization: Bearer hai_..." \ -o out.mp4
import time
from openai import OpenAI
client = OpenAI(
base_url="https://hai-api.hcloud.ltd/v1",
api_key="hai_...",
)
video = client.videos.create(
model="minimax-h3",
prompt="A product spin on a clean white table",
seconds="5",
)
while video.status in ("pending", "in_progress"):
time.sleep(10)
video = client.videos.retrieve(video.id)
client.videos.download_content(video.id).write_to_file("out.mp4")| パラメータ | 内容 |
|---|---|
prompt | 生成内容のテキスト(必須) |
seconds | 尺(整数秒。文字列も可)。省略時は最短尺。duration も同義で受け付けます |
aspect_ratio | 上の表のアスペクト比から選びます(省略時 16:9) |
input_reference | 参照画像 1 枚。https URL または画像ファイル |
input_references | 参照画像の配列([{ "type": "image", "url": "https://…" }])。https URL のみ |
frame_images | 開始・終了フレームの指定({ "type": "first_frame" | "last_frame", "image_url": "…" }) |
generate_audio | 音声を同時に生成するか(既定 true) |
frame_images / input_reference / input_references の合計で数えます。上の表の上限を超えると 400 です。seed は非対応です(指定すると 400)。解像度は 2K 固定で、size は受け付けません。/content は完了前に呼ぶと 409 です。レスポンスは Content-Type: video/mp4 固定で、保持期限は GET /v1/videos/{id} の expires_at(UNIX 秒)で確認できます。期限が切れる前に取得・保存してください。API キーに account:read 権限を付けると、残高やクレジットの有効期限、利用状況を API から参照できます。コンソールの「API キー」画面で、キーの作成時にチェックするか、既存のキーに後から付与してください。既定はオフです。
ベース URL は推論と同じ https://hai-api.hcloud.ltd です(/v1 は付きません)。認証は Authorization: Bearer のみで、x-api-key は使えません。
curl https://hai-api.hcloud.ltd/api/credits \ -H "Authorization: Bearer $HAI_API_KEY" curl 'https://hai-api.hcloud.ltd/api/usage?from=2026-08-01T00:00:00Z' \ -H "Authorization: Bearer $HAI_API_KEY"
| エンドポイント | 内容 |
|---|---|
GET /api/me | ユーザー情報と残高 |
GET /api/credits | 残高とクレジットロット一覧(発行日・失効日・残額) |
GET /api/keys | API キーの一覧(キー本体は返しません)と権限 |
GET /api/usage | 期間の集計・モデル別内訳・新しい順 200 件の明細 |
GET /api/usage/export | UTC 月次の明細 CSV(year / month) |
/api/usage の期間は from / to で指定します。いずれもタイムゾーン付きの RFC 3339(例 2026-08-01T00:00:00Z / 2026-08-01T09:00:00+09:00)で、from <= 利用日時 < to の半開区間です。省略時は全期間、未来の to はリクエスト時刻まで切り詰められます。calculatedCostJpy はモデル単価から算出した額、debitedJpy は残高から実際に引かれた額です。どちらも円・小数 6 桁の文字列(例 "0.054600")で、切り上げや最低額はありません。debitedJpy が "0.000000" になるのは、HAI Go の定額枠での利用分(calculatedCostJpy は参考額として記録されます)と、決済時点で有効なクレジットロットが無く実控除が無かった場合です。Retry-After を返します。calculatedCostJpy と debitedJpy は一致します。HAI Go の定額枠での利用分は残高から控除されないため debitedJpy が 0 になります(calculatedCostJpy は参考額)。定額プラン HAI Go(月額 ¥1,980・税込)または HAI Go Plus(月額 ¥4,980・税込) に加入すると、対象モデルを利用枠まで定額でご利用いただけます。 API の使い方は変わりません(同じキー・同じエンドポイントで、 残高の代わりに定額枠が適用されます)。
qwen3.8-27b-uncensored・deepseek-v4.1-flash・gemma-4-31b-it・llm-jp-4-vl-9b・deepseek-v4-flash(2 プラン共通・今後拡大予定)。対象外のモデルは従来どおりクレジット消費ですqwen3.8-27b-uncensored / llm-jp-4-vl-9b には月間利用枠の制限はありません。 短期枠(5 時間 / 週)は全対象モデルにあります。 枠は個人の通常利用に十分な水準で、上限の絶対値は公開していません (混雑状況に応じて調整する場合があります)。HAI Go Plus は HAI Go を基準に 次の倍率で枠が広がります。qwen3.8-27b-uncensored: 月間利用枠の制限はなし、短期枠は 2 倍deepseek-v4.1-flash: 月間枠は HAI Go の 2 倍、短期枠は 2 倍gemma-4-31b-it: 月間枠は HAI Go の 2 倍、短期枠は 2 倍llm-jp-4-vl-9b: 月間利用枠の制限はなし、短期枠は 2 倍deepseek-v4-flash: 月間枠は HAI Go の 2 倍、短期枠は 2 倍402(insufficient_quota / billing_error)を返します。 他の対象モデルを利用するか、クレジットをチャージすると従量でご利用いただけます429(rate_limit_error)と Retry-After を返します。 時間をおいて再試行するか、他の対象モデルをご利用くださいGET /api/usage)で確認できますstream: true なら最大 4 分、stream: false なら最大 1 分まで順番待ちします。待機上限を超えた 非ストリーミングは 429 と Retry-After を返します。ストリーミングは 200 のまま SSE の error イベントで 終わります。429 を受け取ったら Retry-After ヘッダーの秒数だけ待ってから再送してください。エージェント利用では stream: true とクライアント側タイムアウト 300 秒以上を推奨しますtype は rate_limit_error です。区別するなら message か Retry-After を見てください(短期枠・混雑)message は Too many concurrent requests. Please retry.、Retry-After は即時拒否が 15 秒、待機上限到達が 30 秒ですRetry-After を尊重しますbaseURL と API キーを差し替えるだけで動きます。/v1/chat/completions・/v1/responses・/v1/models に加えて Anthropic 互換の /v1/messages も提供しているため、Claude Code や Codex CLI からも利用できます。
API キーに account:read 権限を付けると、残高・クレジットの有効期限・利用状況を参照できます。既定はオフで、コンソールから付与します。参照専用のため、チャージやキーの作成・無効化はこの権限では行えません(コンソールからのみ操作できます)。
モデルのリクエストから教えてください。ご意見箱扱いとなるため、こちらでは返信いたしません。品揃えの検討に使います。障害や契約の話は右下のサポートからお問い合わせください。
想定していません。CORS ヘッダーを返さないため、サーバーまたは CLI から呼び出してください。ブラウザ側のコードに API キーを置くと第三者に読み取られます。