baseURL を差し替えるだけで、既存の OpenAI クライアントが動きます。
https://hai-api.hcloud.ltd/v1
提供 API: /v1/chat/completions / /v1/responses / /v1/messages(Anthropic 互換) / /v1/models
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: "glm-5.2",
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 のモデルを利用できます。
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 など)はそのままモデルへ渡されます。モデルが対応しない指定はエラーにせず無視されます。usage.completion_tokens_details.reasoning_tokens(Responses API では usage.output_tokens_details.reasoning_tokens)として報告され、出力トークンの一部として課金されます。| モデル ID | モデル名 | 精度 |
|---|---|---|
kimi-k3 | Kimi K3 | FP8 |
glm-5.2 | GLM-5.2 | FP8 |
deepseek-v4-pro | DeepSeek V4 Pro | FP8 |
deepseek-v4-flash | DeepSeek V4 Flash | FP8 |