OpenAI 호환
OpenAI 코드는 그대로, 기본 URL만 바꾸세요
SpicyAPI는 OpenAI chat completions 형식을 지원합니다. 호환되는 SDK, 프레임워크, 채팅 앱의 연결 대상을 저희 기본 URL로 바꾸고 카탈로그의 모델 ID를 지정하면, 평소처럼 스트리밍으로 응답을 받을 수 있습니다.
OpenAI 호환 API란?
OpenAI 채팅 API와 같은 형식의 요청을 받는다는 뜻입니다. OpenAI용으로 만든 도구라면 설정 세 가지만 바꾸면 SpicyAPI와 연결됩니다.
- 내 앱 또는 채팅 클라이언트OpenAI SDK, LangChain, SillyTavern…
- SpicyAPIapi.spicyapi.ai/v1
- 채팅 모델키 하나로 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
바꿀 값은 세 가지
대부분의 클라이언트가 /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환경 변수 두 개를 설정하고 모델 이름 앞에 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
자주 만나는 오류 해결
처음 사용할 때 겪는 문제는 대부분 이 세 가지 중 하나입니다. 각 카드에서 증상과 바꿔야 할 항목을 확인하세요.
- 401
인증 실패
키가 없거나 OpenAI 키를 보냈습니다. SpicyAPI 키를 보내세요: Authorization: Bearer sk-spicy-…
- 404
찾을 수 없음
기본 URL 경로가 한 단계 어긋났습니다. 도메인만 쓰거나 /chat/completions를 두 번 붙이지 말고 https://api.spicyapi.ai/v1을 사용하세요.
- 모델
모델을 찾을 수 없음
gpt-4o 같은 OpenAI 모델 이름은 여기서 별칭으로 쓸 수 없습니다. maker/model/chat 형식의 전체 ID를 사용하세요.
