OpenAI 互換
OpenAI のコードはそのまま、ベース URL だけ変更
SpicyAPI は OpenAI の chat completions 形式に対応しています。互換性のある SDK、フレームワーク、チャットアプリの接続先を当社のベース URL に向け、カタログのモデル ID を指定すれば、いつもどおりストリーミングで返信を受け取れます。
OpenAI 互換 API とは?
OpenAI のチャット API と同じ形式のリクエストを受け付けます。OpenAI 向けに作られたツールなら、3 つの設定を変えるだけで SpicyAPI と通信できます。
- あなたのアプリやチャットクライアントOpenAI SDK、LangChain、SillyTavern など
- SpicyAPIapi.spicyapi.ai/v1
- チャットモデル1 つのキーで 26 モデル
こんなときに
- OpenAI SDK を使っているアプリ接続先とキーを替えるだけ。ほかのコードはそのままです。
- ロールプレイ・チャットアプリSillyTavern、RisuAI、Agnai は、カスタム OpenAI エンドポイントとして接続できます。
- エージェントフレームワークLangChain、Vercel AI SDK、Aider は、OpenAI 用のアダプター経由で使えます。
3 ステップで接続
- ステップ 1
API キーを作成
ログインして、コンソールでキーを作成します。キーは sk-spicy- で始まります。
header Authorization: Bearer sk-spicy-… - ステップ 2
ベース URL を変更
OpenAI の接続先を https://api.spicyapi.ai/v1 に置き換えます。
base URL https://api.spicyapi.ai/v1 - ステップ 3
モデル ID を選ぶ
下の一覧からチャットモデルの ID をコピーして、最初のメッセージを送ります。
model xai/grok-4.7/chat
変更するのは 3 つだけ
多くのクライアントは /chat/completions を自動で付け足すので、ベース URL は /v1 までを入力してください。完全なエンドポイントを求めるアプリでは、https://api.spicyapi.ai/v1/chat/completions を入力します。
- ベース URLhttps://api.openai.com/v1https://api.spicyapi.ai/v1
- API キーsk-proj-…sk-spicy-…
- モデルgpt-4oチャットモデルの ID を選ぶ
クライアント別の設定
お使いの SDK、フレームワーク、アプリのスニペットをコピーしてください。 お使いのツールをクリックすると、そのスニペットへ移動します。
curl https://api.spicyapi.ai/v1/chat/completions \
-H "Authorization: Bearer $SPICY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MODEL_ID_FROM_CATALOG",
"messages": [{ "role": "user", "content": "Write a two-line opening scene." }],
"stream": true
}'API type: OpenAI-compatible (custom endpoint / proxy)
Base URL: https://api.spicyapi.ai/v1
API key: sk-spicy-...
Model: MODEL_ID_FROM_CATALOG # a chat model id ending in /chatOpenAI 互換のオプションを選び、ベース URL とキーを貼り付けて、ID が /chat で終わるモデルを選びます。
import OpenAI from "openai";
import { randomUUID } from "node:crypto";
const client = new OpenAI({
apiKey: process.env.SPICY_API_KEY,
baseURL: "https://api.spicyapi.ai/v1",
});
// One key per business action. The SDK retries automatically, so without it a
// dropped response can create a second task and a second charge.
const idempotencyKey = randomUUID();
const completion = await client.chat.completions.create(
{
model: "MODEL_ID_FROM_CATALOG",
messages: [{ role: "user", content: "Say hello in five words." }],
},
{ headers: { "Idempotency-Key": idempotencyKey } },
);
console.log(completion.choices[0].message.content);クライアントに baseURL を設定し、カタログのモデル ID を渡します。
import os
import uuid
from openai import OpenAI
client = OpenAI(
api_key=os.environ["SPICY_API_KEY"],
base_url="https://api.spicyapi.ai/v1", # or set OPENAI_BASE_URL
)
# One key per business action. The SDK retries automatically, so without it a
# dropped response can create a second task and a second charge.
idempotency_key = str(uuid.uuid4())
completion = client.chat.completions.create(
model="MODEL_ID_FROM_CATALOG",
messages=[{"role": "user", "content": "Say hello in five words."}],
extra_headers={"Idempotency-Key": idempotency_key},
)
print(completion.choices[0].message.content)クライアントに base_url を設定するか、OPENAI_BASE_URL をエクスポートします。
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
import { generateText } from "ai";
import { randomUUID } from "node:crypto";
const spicy = createOpenAICompatible({
name: "spicyapi",
apiKey: process.env.SPICY_API_KEY,
baseURL: "https://api.spicyapi.ai/v1",
});
const { text } = await generateText({
model: spicy("MODEL_ID_FROM_CATALOG"),
prompt: "Say hello in five words.",
// Per call, never on the client: one key shared by every request would make
// the second request replay the first one's answer.
headers: { "Idempotency-Key": randomUUID() },
});openai-compatible プロバイダーに当社のベース URL を指定します。
import os
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="MODEL_ID_FROM_CATALOG",
base_url="https://api.spicyapi.ai/v1",
api_key=os.environ["SPICY_API_KEY"],
# Retries here would resend an already-accepted request without an
# Idempotency-Key, which bills twice. Send the key yourself (see the
# OpenAI Python recipe) before turning retries back on.
max_retries=0,
)
print(llm.invoke("Say hello in five words.").content)ChatOpenAI は base_url と api_key を直接受け取ります。
export OPENAI_API_BASE=https://api.spicyapi.ai/v1
export OPENAI_API_KEY=$SPICY_API_KEY
aider --model openai/MODEL_ID_FROM_CATALOG環境変数を 2 つ設定し、モデル名の前に openai/ を付けます。
サードパーティ製クライアントの設定形式は、バージョンによって変わることがあります。ここに載せたスニペットが合わなくなったときは、クライアント自身のドキュメントを優先してください。
使えるチャットモデル
ID は表示のとおりにコピーしてください。料金とコンテキストの上限は、各モデルのページにあります。
- Grok 4.7 · Chatxai/grok-4.7/chat
- DeepSeek V4.1 Flash · Chatdeepseek/v4.1-flash/chat
- Grok 4.3 · Chatxai/grok-4.3/chat
- Claude Haiku 5.5 · Chatanthropic/claude-haiku-5.5/chat
- Claude Sonnet 5.5 · Chatanthropic/claude-sonnet-5.5/chat
- Claude Opus 5.5 · Chatanthropic/claude-opus-5.5/chat
- GLM 5.3 Flash · Chatzai/glm-5.3-flash/chat
- GLM 5.3 · Chatzai/glm-5.3/chat
- DeepSeek V4 Pro · Chatdeepseek/v4-pro/chat
- Gemini 3.7 Flash · Chatgoogle/gemini-3.7-flash/chat
- Grok 4.6 · Chatxai/grok-4.6/chat
- DeepSeek V4 Flash · Chatdeepseek/v4-flash/chat
よくあるエラーの直し方
最初のつまずきは、たいていこの 3 つのどれかです。カードには、表示される内容と直すポイントを 1 つずつ載せています。
- 401
認証エラー
キーがないか、OpenAI のキーを使っています。SpicyAPI のキーを送ってください:Authorization: Bearer sk-spicy-…
- 404
見つかりません
ベース URL の階層がずれています。https://api.spicyapi.ai/v1 を指定してください。ドメインだけでも、/chat/completions を二重に付けても動きません。
- モデル
モデルが見つかりません
gpt-4o のような OpenAI のモデル名は、ここではエイリアスになりません。maker/model/chat の形式の正式な ID を使ってください。
