BazaarLink는 모델과 제공업체 전반에서 통일된 OpenAI 호환 요청 및 응답 형식을 제공합니다. 한 번만 연동하면 애플리케이션을 다시 작성하지 않고 모델을 전환할 수 있습니다.
고객 라우팅 필드는 무시됩니다
provider(객체 전체), transforms, route, 최상위 service_tier 및 preset은 업스트림으로 보내기 전에 제거되며 업스트림이나 가격 등급을 선택할 수 없습니다. Chat Completions 및 Responses 엔드포인트에서는 models 배열을 로컬 대체 모델 목록으로 지원합니다. BazaarLink가 각 모델을 자체 라우팅으로 처리하고 해당 모델의 고객 가격을 적용하며, 목록은 업스트림으로 전달되지 않습니다. 고객이 지정한 :nitro, :floor, :exacto 접미사는 무시됩니다. :eco는 BazaarLink의 경제형 티어로 유지되며 내부적으로 BazaarLink :floor에 매핑됩니다. :free는 별도의 카탈로그 모델 변형입니다.
웹 검색 추가 비용
plugins, :online 또는 web_search_options로 요청하는 웹 검색 동작은 유지되지만 업스트림 추가 요금이 발생할 수 있습니다. 요금은 요청에 사용된 키, 즉 BazaarLink 플랫폼 키 또는 고객 BYOK 키에 청구됩니다.
OpenAPI 사양
전체 BazaarLink API는 OpenAPI 사양으로 문서화되어 있으며 YAML 및 JSON 형식으로 제공됩니다:
finish_reason은 stop, length, tool_calls, content_filter, error 등 BazaarLink 표준화 값을 사용합니다.
JSON
1
2
3
{"finish_reason":"stop"}
비용 및 통계 조회
응답 id 또는 x-request-id 헤더의 불투명한 BazaarLink 요청 ID로 GET /v1/generation을 호출하세요. 비스트리밍 응답에도 같은 ID가 x-generation-id로 포함됩니다. 통계가 표시되기까지 몇 초 걸릴 수 있으므로 404는 잠시 재시도하세요.
미결제 등록은 name, 선택적 description, 선택적 referral_code를 받습니다. 201 응답에는 API 키, 크레딧, 7일 claim token과 만료 시간, 업그레이드 URL, 추천 코드, free_model auto:free, 기본 URL과 문서 링크가 포함됩니다. 기존 무료 모델 메커니즘을 사용하며, 무료 웹 검색은 인증된 이메일이 필요하므로 미결제 에이전트는 사용할 수 없습니다.
유료 등록은 scheme exact, network eip155:196, asset USD-T0, payTo가 포함된 HTTP 402 요구사항으로 시작합니다. X-PAYMENT 헤더와 함께 다시 보내면 같은 등록 필드와 payment { txHash, network, amountUsd }를 받습니다. 유료 에이전트는 일반 유료 계정 규칙을 따르며 기존 계정은 /api/x402/topup으로 충전할 수 있습니다.
사람은 7일 token 유효 기간 동안 /claim에서 미결제 에이전트를 인수할 수 있습니다. 등록은 IP당 24시간에 한 번이며 클라우드 제공업체 한도도 적용됩니다. 거부된 요청은 Retry-After가 있는 429를 반환합니다.
POSThttps://api.bazaarlink.ai/api/x402/topup
채팅 완성
기본 엔드포인트. OpenAI 채팅 완성 API와 호환됩니다.
POST/v1/chat/completions
요청 바디
model필수
string
GET /v1/models에 표시된 id 또는 alias를 사용하세요(예: "claude-sonnet-4.6" 또는 "anthropic/claude-sonnet-4.6").
messages필수
Message[]
role과 content를 가진 메시지 객체 배열
stream
boolean
true이면 Server-Sent Events 스트림을 반환합니다. 기본값: false
temperature
number
샘플링 값은 범위 검증 없이 전달됩니다. 모델이 지원 범위 밖의 값을 제한하거나 무시할 수 있습니다.
max_tokens
integer
생성할 최대 토큰 수
max_completion_tokens
integer
max_tokens의 별칭 (OpenAI o-시리즈 호환). 둘 다 허용; 제공된 것이 적용됨
top_p
number
핵 샘플링 확률 질량. 기본값: 1
top_k
integer
샘플링 값은 범위 검증 없이 전달됩니다. 모델이 지원 범위 밖의 값을 제한하거나 무시할 수 있습니다.
frequency_penalty
number
반복 토큰 패널티. 범위: [-2, 2]. 기본값: 0
presence_penalty
number
존재 기반 토큰 패널티. 범위: [-2, 2]. 기본값: 0
repetition_penalty
number
입력에서 토큰 반복 감소. 범위: (0, 2]. 기본값: 1
min_p
number
상위 토큰 대비 최소 확률. 범위: [0, 1]. 기본값: 0
top_a
number
최고 확률 토큰 기반 동적 top-P. 범위: [0, 1]. 기본값: 0
seed
integer
결정적 샘플링을 위한 정수 시드. 모든 모델에서 보장되지 않음
n
integer
생성할 완성 수. 기본값: 1
user
string
모니터링 및 남용 감지를 위한 최종 사용자 식별자. 과금에 영향 없음. OpenAI 계열 모델에만 적용 — 아래 참고 사항 확인.
stop
string | string[]
중지 시퀀스 — 만나면 생성 중단
logit_bias
object
토큰 ID를 바이어스 값 [-100, 100]에 매핑하여 샘플링 전 추가. OpenAI 계열 모델에만 적용 — 아래 참고 사항 확인.
logprobs
boolean
각 출력 토큰의 로그 확률 반환. OpenAI 계열 모델에만 적용 — 아래 참고 사항 확인.
top_logprobs
integer
위치당 반환할 최고 확률 토큰 수 (logprobs: true 필요). 범위: 0–20. OpenAI 계열 모델에만 적용 — 아래 참고 사항 확인.
tools
Tool[]
모델이 호출할 수 있는 도구(함수) 목록
tool_choice
string | object
도구 사용 제어: "auto", "none", 또는 특정 도구
parallel_tool_calls
boolean
도구 제공 시 병렬 함수 호출 활성화. 기본값: true. OpenAI 계열 모델에만 적용 — 아래 참고 사항 확인.
response_format
object
구조화된 JSON 출력 강제. 구조화된 출력 섹션 참조
structured_outputs
boolean
지원하는 제공자에서 엄격한 JSON 스키마 준수 출력을 요청. 그대로 전달
reasoning
object
제공자별 reasoning/thinking 설정. 그대로 전달
reasoning_effort
string
OpenAI o-시리즈 스타일 reasoning 강도: "low", "medium", 또는 "high". 그대로 전달
include_reasoning
boolean
true이면 message.reasoning(스트리밍에서는 delta.reasoning)에 생각 내용을 반환하고, false이면 기본으로 생각하는 모델의 생각을 끕니다(추론 섹션 참조). 따라서 생각 비용이 청구되지 않습니다. reasoning_effort, reasoning, thinking 중 아무것도 보내지 않으면 그 모델들만 기본으로 생각하고 반환하며, 다른 모델은 요청했을 때만 반환합니다
user, logprobs, top_logprobs, logit_bias, parallel_tool_calls는 OpenAI 계열 모델에만 전달됩니다
이 다섯 개 매개변수는 확인된 모델이 OpenAI 자체 모델로 인식되지 않을 때 업스트림 요청에서 제거됩니다 — anthropic/claude-*, google/gemini-* 등 OpenAI가 아닌 대상으로 보내면 오류가 아니라 매개변수가 조용히 무시된 채 200을 반환합니다. 이 중 하나를 설정했는데 효과가 나타나지 않는다면, 대상 모델이 OpenAI 모델인지 확인하세요.
BazaarLink는 표준화된 응답을 반환하고 업스트림 전용 필드를 제거합니다. usage.cost는 이 요청에 대해 고객에게 청구된 USD 금액입니다.
100초를 초과하는 긴 요청에는 stream:true 사용을 권장합니다. 비스트리밍 요청은 약 12초 후(기본값이며 배포 설정으로 조정 가능) 먼저 200을 반환하고 keepalive 공백을 보내기 시작합니다. 이후 오류가 발생하면 200 + error JSON으로 반환됩니다. keepalive는 JSON 본문 앞의 공백이며 표준 JSON 파서는 이를 무시합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
typeResponse = {
id: string;
object: "chat.completion" | "chat.completion.chunk";
created: number; // Unix timestampmodel: string;
choices: (NonStreamingChoice | StreamingChoice)[];
usage?: ResponseUsage;
};
typeNonStreamingChoice = {
index: number;
finish_reason: "stop" | "length" | "tool_calls" | "content_filter" | null;
message: {
role: "assistant";
content: string | null;
tool_calls?: ToolCall[];
reasoning?: string; // thinking text: when the request asked for it, or by default for the models listed in the reasoning docs sectionreasoning_details?: Array<{ type: string; text?: string }>;
};
};
typeStreamingChoice = {
index: number;
finish_reason: string | null;
delta: {
role?: string;
content?: string | null;
tool_calls?: ToolCall[];
reasoning?: string;
reasoning_details?: Array<{ type: string; text?: string }>;
};
};
typeResponseUsage = {
prompt_tokens: number;
completion_tokens: number;
total_tokens: number;
cost: number; // USD amount charged to the customer for this requestprompt_tokens_details?: {
cached_tokens: number; // Tokens served from prompt cache (reduced cost)cache_write_tokens?: number; // Tokens written to cache in this requestaudio_tokens?: number;
};
completion_tokens_details?: {
reasoning_tokens?: number; // Thinking/reasoning tokens (e.g. o3, Qwen3, DeepSeek R1)image_tokens?: number;
};
};
typeToolCall = {
id: string;
type: "function";
function: { name: string; arguments: string };
};
이미지 생성
DALL·E 및 GPT-4o 같은 모델을 사용하여 텍스트 프롬프트에서 이미지를 생성합니다. `modalities` 파라미터를 사용하여 채팅 완성 엔드포인트에서 이미지 출력을 요청합니다. 이미지 편집(기존 이미지 수정)은 POST /v1/images/edits를 사용합니다 —— OpenAI images.edit 호환이며, multipart/form-data로 소스 이미지를 업로드합니다. 편집 가능한 모델은 modality가 text+image->image입니다(예: qwen/qwen-image-3). 순수 생성 모델은 text->image입니다 —— 각 모델의 modality는 GET /v1/models에서 확인하세요.
Response format
/v1/images/generations는 기본적으로 OpenAI 호환 동기 JSON을 반환합니다(2026-07-25부터) — client.images.generate()가 래퍼 없이 바로 동작합니다. stream: true를 전달하면 SSE 이벤트 스트림으로 전환되어 생성 시간이 긴 모델의 진행 상황을 받을 수 있습니다.
20초를 넘는 비스트리밍 요청은 먼저 HTTP 200을 반환하고(이후 공백 문자로 연결을 유지), 나중에 발생한 실패는 "200 + 오류 본문"으로 반환됩니다. 최상위 `error` 객체를 확인하세요(`"object": "error"`와 `"http_status"`도 추가됩니다). 클라이언트의 읽기 타임아웃이 길다면(OpenAI SDK 기본값은 10분) `X-BazaarLink-Sync-Wait: 90`(정수 초, 1–90, 기본 20)을 보내 해당 시간 안의 실패에 대해 실제 상태 코드를 받을 수 있습니다. Python SDK는 `default_headers={"X-BazaarLink-Sync-Wait": "90"}`, Node SDK는 `defaultHeaders: { "X-BazaarLink-Sync-Wait": "90" }`를 사용합니다. Windows에서는 JSON을 UTF-8 파일로 저장해 `curl --data-binary @body.json`으로 보내세요. 콘솔에서 `-d` 뒤에 입력한 한글은 UTF-8이 아니어서 즉시 400 `invalid_utf8`로 거부됩니다.
A. /v1/chat/completions (네이티브, 권장)
POST/v1/chat/completions
The canonical streaming path. Recommended for any new integration.
1
2
3
4
5
6
7
8
9
curl -N https://api.bazaarlink.ai/v1/chat/completions \
-H "Authorization: Bearer $BL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-5.4-image-2",
"messages": [{"role":"user","content":"a red cat on a sofa"}],
"modalities": ["image","text"],
"stream": true
}'
이미지-투-이미지: content 배열에 image_url 파트를 포함하세요. 데이터 URI 또는 https 이미지 URL(http:// 는 거부됨)을 지원하며, 최대 8장, 데이터 URI당 약 10MB입니다. 이미지를 포함한 메시지에는 text 파트(편집 지시)도 함께 있어야 합니다. 일부 모델은 image_config(예: {"strength": 0.7}, 0–1 — 낮을수록 원본 이미지에 가까움)를 추가로 지원하며, 그대로 업스트림에 전달됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
curl -N https://api.bazaarlink.ai/v1/chat/completions \
-H "Authorization: Bearer $BL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-5.4-image-2",
"messages": [{"role":"user","content":[
{"type":"image_url","image_url":{"url":"data:image/png;base64,..."}},
{"type":"text","text":"change the background to a night city"}
]}],
"modalities": ["image"],
"stream": true
}'
이미지 편집 (OpenAI 호환)
POST/v1/images/edits
OpenAI SDK의 client.images.edit()가 그대로 동작합니다(multipart 업로드, data: [{ url }] 을 반환하는 동기 JSON 응답). 제한은 이미지-투-이미지와 동일: 최대 8장, 각 10MB. mask와 response_format=b64_json은 아직 지원되지 않습니다.
1
2
3
4
5
curl https://api.bazaarlink.ai/v1/images/edits \
-H "Authorization: Bearer $BL_API_KEY" \
-F model="openai/gpt-5.4-image-2" \
-F image=@cat.png \
-F prompt="change the background to a night city"
B. /v1/images/generations (DALL·E 호환)
POST/v1/images/generations
OpenAI DALL-E request shape. Sync JSON ({ created, data: [{ url }] }) is the default and works with client.images.generate() out of the box; pass stream: true to get the SSE event stream documented below instead.
1
2
3
4
5
6
7
8
curl https://api.bazaarlink.ai/v1/images/generations \
-H "Authorization: Bearer $BL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-image-1",
"prompt": "a red cat on a sofa",
"size": "1024x1024"
}'
model필수
string
모델 ID, 예: google/gemini-2.5-flash-image
prompt필수
string
텍스트 프롬프트
size
string
출력 크기 (자동 매핑)
n
integer
생성 개수 (기본값 1)
1
2
3
4
5
6
# Streaming variant — progressive delivery for long generations
curl -N https://api.bazaarlink.ai/v1/images/generations \
-H "Authorization: Bearer $BL_API_KEY" \
-H "Accept: text/event-stream" \
-H "Content-Type: application/json" \
-d '{"model":"openai/gpt-5.4-image-2","prompt":"a red cat on a sofa","stream":true}'
SSE event protocol
SSE 주석 줄과 알 수 없거나 ping인 이벤트는 무시하고 문서화된 image, usage, done 이벤트를 처리하세요.
비동기 3단계 플로우(submit → poll → content)입니다. 비디오 생성은 30초~5분이 걸려 chat-completions의 동기 요청/응답 방식에 맞지 않습니다 — 그래서 BazaarLink는 비디오를 전용 /v1/videos 경로로 분리하고 job-id 패턴을 사용합니다: submit으로 vjob_* ID 수신 → 상태 poll → 완료 후 bytes fetch. video model을 /chat/completions 또는 /images/generations로 호출하면 400(code: wrong_endpoint_for_video)이 반환됩니다. 비용은 completed 시점에 실제 usage.cost로 정산됩니다.
동영상 작업 유형
하나의 엔드포인트가 여러 작업을 처리합니다. 실제로 어떤 작업이 실행되는지는 전송하는 필드로 결정됩니다 —— 하나의 모델로 이미지-투-비디오, 키프레임, 이어 붙이기를 모두 할 수 있습니다. 모든 모델이 모든 작업을 지원하지는 않으며, 미지원 요청은 400을 반환합니다.
텍스트→동영상
prompt
텍스트 프롬프트만으로 생성하며, 입력 미디어가 필요 없습니다.
이미지→동영상
frame_images: [ first frame ]
이미지 자체가 화면입니다. 첫 프레임이 되어 움직이며 원본에 충실합니다. 예: 고양이 사진 → 같은 장면에서 그 고양이가 고개를 돌립니다.
키프레임(첫+마지막)
frame_images: [ first, last ]
시작 이미지와 끝 이미지를 주면 모델이 그 사이의 움직임을 보간합니다.
이어 붙이기
input_video
기존 클립을 연장합니다. 요청한 duration은 원본 동영상 길이보다 커야 합니다.
참조→동영상
input_references: [ images ]
이미지는 프레임이 아니라 '참조'입니다. 모델은 피사체/스타일을 유지하면서 완전히 새로운 장면을 생성합니다. 예: 고양이 사진 + "숲에서 춤추기" → 고양이의 모습은 유지되지만 장면과 움직임은 새로운 영상(참조 1~9장). 이미지→동영상과의 차이: i2v는 원본 이미지에 충실하고, r2v는 피사체를 새 영상으로 다시 연출합니다.
동영상 편집
input_video + prompt
기존 동영상을 편집합니다 — 장면, 스타일, 움직임 변경. 입력 동영상 초 + 출력 초로 과금됩니다.
허용 해상도는 모델마다 다릅니다 —— 미지원 값을 보내면 지원 값을 나열한 400을 반환합니다.
입력 이미지/동영상은 공개 URL에서 접근 가능해야 합니다. 핫링크 보호된 호스트(일부 wiki 등)는 실패합니다.
입력 미디어는 업스트림 콘텐츠 검열을 거치며 가끔 거부될 수 있습니다.
이어 붙이기의 경우 요청한 duration이 원본 동영상 길이를 초과해야 합니다.
출력 화면 비율은 입력 이미지를 따릅니다 —— 정사각형 이미지는 정사각형 동영상이 됩니다.
동영상 편집은 입력 동영상의 초와 생성된 출력의 초로 과금됩니다.
편집/이어 붙이기의 input_video는 공개 URL이어야 합니다. 여기서 생성한 동영상은 API 키 뒤에서 제공되므로 업스트림이 가져올 수 없습니다 —— 소스 동영상을 공개적으로 접근 가능한 URL에 호스팅하세요.
웹훅 페이로드는 서명되지 않습니다 — 조치 전에 GET /videos/{id}로 상태/금액을 확인하세요. 거기의 unsigned_urls는 절대 경로입니다(폴링 응답의 상대 경로와 다름).
지원되는 비디오 모델
Model ID
Modality
Tasks
minimax/hailuo-3-max
text+image->video
t2v, i2v
google/veo-3.1
text+image->video
t2v, i2v
bytedance/seedance-2.5
text+image+audio+video->video
—
x-ai/grok-imagine-video-1.5-lite
text+image->video
t2v, i2v
bytedance/seedance-2.0
text+image+audio+video->video
t2v, i2v
bytedance/seedance-1-5-pro
text+image->video
t2v, i2v
bytedance/seedance-2.0-fast
text+image+audio+video->video
t2v, i2v
음성 합성
/v1/models?output_modalities=speech의 모델 ID로 텍스트를 음성으로 변환합니다. 모델 페이지의 백만 문자당 가격으로 청구합니다. 전체 오디오를 버퍼링한 뒤 바이너리로 반환하며, 구간별 스트리밍은 지원하지 않습니다. provider, transforms, route, service_tier, preset 같은 라우팅 제어 필드는 무시됩니다.
query와 documents로 관련성 순의 index와 relevance_score를 받습니다. 청구 단위는 search이며 모델 페이지 가격에 usage.search_units를 곱하고 문서 수로 청구하지 않습니다. 스트리밍(stream)은 지원하지 않습니다.
POST/v1/rerank
1
2
3
4
curl https://api.bazaarlink.ai/v1/rerank \
-H "$BAZAARLINK_AUTH_HEADER" \
-H "Content-Type: application/json" \
-d '{"model":"your-rerank-model-id","query":"capital of France","documents":["Paris is the capital of France.","Berlin is in Germany."],"top_n":1}'
POST/v1/chat/completions
/v1/chat/completions에 audio 또는 input_audio와 오디오 지원 모델을 사용합니다. 보고된 텍스트와 오디오 토큰 총량에 설정된 입력 및 출력 단가를 동일하게 적용합니다.
POST /v1/audio/speech는 OpenAI-compatible 형식입니다. JSON을 보내면 오디오 파일을 바이너리로 받습니다. ElevenLabs 계열에는 elevenlabs/eleven-v4, eleven-v4-turbo, eleven-v3, eleven-v3-conversational, eleven-multilingual-v2, eleven-flash-v2.5, eleven-flash-v2, eleven-turbo-v2.5, eleven-turbo-v2가 있습니다. 최신 목록은 GET /v1/models?output_modalities=speech에서 확인하세요. GET /v1/models는 기본적으로 텍스트 모델만 반환하므로 ?output_modalities=speech(또는 all)를 붙여 목록을 확인하세요.
POST/v1/audio/speech
매개변수
매개변수
형식
필수
설명
model
string
예
음성 모델 ID. 예: elevenlabs/eleven-flash-v2.5.
input
string
예
합성할 텍스트: 요청당 최대 4,096자(elevenlabs/eleven-v4와 eleven-v4-turbo는 10,000자). 더 긴 텍스트는 여러 요청으로 나누세요.
voice
string
예
사용할 음성. 형식은 모델에 따라 다릅니다. 아래 음성 규칙을 확인하세요.
response_format
string
아니요
mp3(기본) 또는 pcm. opus·aac·flac·wav는 API가 받지만 현재 ElevenLabs 모델이 400으로 거부합니다.
speed
number
아니요
말하기 속도 0.25~4.0. 모델에 따라 적용되지 않을 수 있습니다.
instructions
string
아니요
음성 스타일 지시문. 모델에 따라 적용되지 않을 수 있습니다.
stability
number
아니요
목소리 안정성(0–1, 기본 0.5). 낮을수록 표현이 풍부하고 높을수록 균일합니다. 요청이 당사의 직접 음성 경로로 처리되는 elevenlabs/* 모델에서 적용되며, 응답 헤더 X-Voice-Settings가 applied 또는 ignored를 알려 줍니다.
similarity_boost
number
아니요
원래 목소리와의 유사도(0–1, 기본 0.75). Eleven v3에서는 사용되지 않습니다.
style
number
아니요
스타일 강조도(0–1, 기본 0). 0보다 크면 지연이 늘어납니다. Eleven v4에서는 사용되지 않습니다.
use_speaker_boost
boolean
아니요
원래 화자와의 유사도를 높입니다(기본 true). 지연이 약간 늘어납니다.
clone_strength
number
아니요
클론 강도(0–1, 대부분 0 권장). Eleven v4용으로 학습한 본인의 전문 클론 음성(voice_…)에만 적용됩니다.
language_code
string
아니요
낭독 언어를 지정하는 두 글자 소문자 언어 코드(ISO 639-1, 예: ar, ja, en). multilingual-v2 모델에서는 사용되지 않습니다.
audio_effects
object
아니요
선택적 오디오 효과 객체: filter_preset_id(필터, 예: phone, old_radio), environment_id(잔향 공간, 예: small_room, hall), background_noise_id(배경음, 예: cafe), distance(0–1), send_level(잔향량, 0–1), pan(−1…1). ID는 소문자, 숫자, 밑줄만 사용하며 추가 요금은 없습니다. 잔향 또는 0이 아닌 pan은 스테레오로 출력되어 pcm 출력과 함께 쓸 수 없습니다.
위의 음성 설정 7개는 모두 선택 사항이며, 보내지 않으면 아무것도 바뀌지 않습니다. 범위를 벗어난 값은 400을 반환하며 전송도 과금도 되지 않습니다. 응답 헤더 X-Voice-Settings는 설정이 사용되었는지 알려 줍니다: applied = 사용됨; ignored = 예비 경로가 응답하여 설정이 사용되지 않았습니다(오디오는 정상적으로 생성됩니다); 헤더 없음 = 음성 설정을 보내지 않았습니다. 예: stability 0은 더 표현력 있게, 1은 더 고르게 읽습니다.
음성 규칙
ElevenLabs 모델(elevenlabs/…)에는 다음 음성 이름(대소문자 무관) 중 하나를 넣으세요: george, sarah, adam, alice, bella, bill, brian, callum, charlie, chris, daniel, eric, harry, jessica, laura, liam, lily, matilda, river, roger, will. ElevenLabs 모델은 voice를 생략할 수 있습니다(기본 george). 그 외 값은 400 invalid_voice를 반환합니다. 내 사용자 지정 음성(voice_…)은 아래 ‘사용자 지정 음성’ 섹션을 참조하세요.
alloy, echo, nova 같은 OpenAI-style 음성 이름은 해당 이름을 나열한 모델에서만 작동합니다. 모델 페이지에서 지원 음성을 확인하세요.
사용자 지정 음성(복제)은 단계적으로 공개 중입니다. 아래 ‘사용자 지정 음성’ 섹션(POST /v1/voices)을 참조하세요. 계정에서 활성화되기 전에는 위의 21개 프리셋 이름이나 공개 음성 ID를 사용하세요.
ElevenLabs 모델에 alloy를 보내면 실패합니다
ElevenLabs 모델에 voice ID도 지원 이름도 아닌 값(예: alloy, Rachel)을 보내면 400 invalid_voice를 반환하며 메시지에 허용되는 이름이 나열됩니다. 실패한 요청은 과금되지 않습니다.
기본 제공 음성 목록
voice에는 아래 표의 음성 이름(소문자)을 지정할 수 있습니다. 각 음성에는 짧은 미리듣기 클립이 있으며, GET /api/v1/audio/voices로 전체 목록(성별, 연령대, 억양, 스타일, 미리듣기 URL)을 가져올 수 있습니다.
?lang=(en, zh-TW, zh-CN, 기본값은 Accept-Language)은 description의 언어만 정합니다. 미리듣기 URL은 바뀌지 않습니다: preview_urls.en(preview_url과 동일)은 영어, preview_urls.zh(preview_url_zh와 동일)는 중국어 클립입니다.
음성
설명
미리듣기
george
Male, middle-aged, British accent. Mature and steady, suited to narration and storytelling.
sarah
Female, young adult, American accent. Professional and clear, suited to broadcast-style reading.
adam
Male, middle-aged, American accent. Everyday and approachable, suited to short social videos.
alice
Female, middle-aged, British accent. Professional and informative, suited to explainers and teaching.
bella
Female, middle-aged, American accent. Professional and informative, suited to explainers and teaching.
bill
Male, senior, American accent. Crisp and direct, suited to advertising voice-overs.
brian
Male, middle-aged, American accent. Polished and refined, suited to social and brand content.
callum
Male, middle-aged, American accent. Expressive, suited to characters and animation.
charlie
Male, young adult, Australian accent. Energetic and lively, suited to conversation.
chris
Male, middle-aged, American accent. Relaxed and casual, suited to conversation.
daniel
Male, middle-aged, British accent. Formal and measured, suited to news-style and educational reading.
eric
Male, middle-aged, American accent. Polished and warm, suited to conversation.
harry
Male, young adult, American accent. Rough and gritty, suited to character voices.
jessica
Female, young adult, American accent. Bright and cute, suited to conversation.
laura
Female, young adult, American accent. Playful with attitude, suited to social content.
liam
Male, young adult, American accent. Confident and upbeat, suited to social content.
lily
Female, middle-aged, British accent. Confident and clear, suited to explainers and teaching.
matilda
Female, middle-aged, American accent. Upbeat and friendly, suited to explainers and teaching.
river
Neutral voice, middle-aged, American accent. Calm and even, suited to conversation.
roger
Male, middle-aged, American accent. Polished and confident, suited to conversation.
will
Male, young adult, American accent. Laid-back and easygoing, suited to conversation.
감정·동작 태그(audio tags)
input 안에 대괄호로 태그를 직접 적습니다. 예: [laughs], [whispers], [excited], [sighs], [crying], [curious], [softly]. 태그는 입력한 그대로 모델에 전달되어 뒤따르는 말의 연기 방식을 정합니다. 본문이 한국어여도 태그는 영어로 유지하세요.
1
2
3
4
5
curl https://api.bazaarlink.ai/v1/audio/speech \
-H "Authorization: Bearer $BAZAARLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"elevenlabs/eleven-v3","input":"[laughs] That was actually funny. [whispers] Do not tell anyone.","voice":"george","response_format":"mp3"}' \
--output audio-tags.mp3
elevenlabs/eleven-v3 와 elevenlabs/eleven-v4 계열이 지원합니다. 다른 음성 모델은 태그를 해석하지 않고 대괄호 안 글자를 그대로 읽을 수 있으니 먼저 짧은 문장으로 시험해 보세요.
태그도 input 글자 수에 포함되며 나머지 텍스트와 같은 방식으로 과금됩니다.
출력 형식
response_format을 생략하면 mp3(Content-Type audio/mpeg)가 기본입니다. pcm(audio/pcm, 원시 16-bit PCM)도 동작합니다. API는 opus, aac, flac, wav도 받지만 ElevenLabs 모델은 현재 400으로 거부합니다. 파일은 응답의 Content-Type 헤더에 따라 저장하세요.
요금
음성 합성은 입력 문자 수에 따라 청구됩니다. 문자당 가격은 /models의 모델 페이지와 GET /v1/models의 pricing.character에 있습니다. 모델 페이지에는 백만 문자 기준으로 표시됩니다.
POST /v1/audio/transcriptions는 OpenAI-compatible 형식입니다. multipart/form-data로 오디오를 업로드하거나 JSON으로 base64 input_audio를 보내면 텍스트를 받습니다. 모델에는 elevenlabs/scribe-v2와 elevenlabs/scribe-v2-medical이 있습니다. 최신 목록은 GET /v1/models?output_modalities=transcription에서 확인하세요. GET /v1/models는 기본적으로 텍스트 모델만 반환하므로 ?output_modalities=transcription(또는 all)를 붙여 목록을 확인하세요.
POST/v1/audio/transcriptions
매개변수
매개변수
형식
필수
설명
model
string
예
전사 모델 ID. 예: elevenlabs/scribe-v2.
file
file
예
오디오 파일(multipart). wav, mp3, mp4, m4a, ogg, flac, webm, aac 지원. 최대 25 MiB. JSON 클라이언트는 input_audio: {data: base64, format}을 대신 보낼 수 있습니다.
word 및/또는 segment. response_format=verbose_json에서만 적용되고 다른 형식에서는 무시됩니다. 단어 단위 타임스탬프는 아직 반환되지 않으며 segments는 반환됩니다.
출력 형식
response_format은 json 또는 verbose_json만 허용합니다(text, srt, vtt 미지원). stream은 지원되지 않습니다. 오디오 길이 제한은 모델별로 정해지며 기본값은 60초입니다. 초과하면 처리 전에 413 audio_too_long으로 거부되고 요금이 부과되지 않습니다. 긴 녹음은 나누세요.
요금
전사는 오디오 초 단위로 청구됩니다. 초당 가격은 /models의 모델 페이지와 GET /v1/models의 pricing.second에 있으며 분당 가격은 그 60배입니다. 응답의 usage는 청구 초를, usage.cost는 청구 금액을 보여 줍니다.
잘못된 요청: model 또는 file 누락, 빈 오디오, json/verbose_json 이외의 response_format, stream=true(unsupported_parameter), 또는 word/segment 이외의 timestamp_granularities.
401
API 키가 없거나 유효하지 않습니다.
402
잔액이 부족합니다. 충전 후 다시 시도하세요.
413
audio_too_large: 디코딩한 오디오가 25 MiB를 초과합니다. audio_too_long: 모델별 길이 제한(기본 60초)을 초과한 오디오는 처리 전에 거부되며 요금이 부과되지 않습니다. 압축하거나 나누세요.
429
요청 제한에 도달했습니다. Retry-After에 따라 기다린 뒤 다시 시도하세요.
502
모델 서비스를 일시적으로 사용할 수 없거나 오디오 전송이 중단되었습니다. 다시 시도하세요. 실패한 요청에는 요금이 부과되지 않습니다.
신청 후 이용할 수 있습니다. 사용자 지정 음성은 계정별로 열어 드립니다. 고객 지원에 문의해 신청하세요. 계정에서 활성화되기 전에는 모든 /v1/voices 요청이 403 voice_cloning_not_enabled 를 반환합니다(기능이 전체적으로 꺼져 있으면 404 not_found). 이 페이지의 한도와 가격은 기본값이며 변경될 수 있습니다.
사용할 권리가 있는 목소리의 짧은 녹음을 업로드하면 우리 쪽 voice id(voice_…)를 받습니다. 이 id 를 POST /v1/audio/speech 의 voice 로 전달하세요. 음성은 만든 본인만 사용할 수 있습니다.
엔드포인트
POST/v1/voices
음성 만들기(multipart/form-data)
GET/v1/voices
내 음성 목록(limit 1–100, after 에 voice id 를 주면 다음 페이지)
GET/v1/voices/{id}
내 음성 하나 조회
DELETE/v1/voices/{id}
음성 삭제(즉시 적용)
POST/v1/voices/report
음성 신고(API 키 불필요)
음성 만들기: 필드
필드
타입
필수
설명
name
string
예
음성 이름, 1–60자.
files
file[]
예
해당 목소리의 녹음 파일 1~5개(mp3, wav, m4a, ogg, flac, webm).
consent
boolean
예
true 여야 합니다: 이 목소리를 복제하고 사용할 권리가 있음을 확인합니다(‘동의’ 참조).
consent_statement_version
string
예
확인한 동의 문구의 버전. 현재 "v1".
description
string
아니요
선택, 최대 200자.
remove_background_noise
boolean
아니요
선택 불리언, 기본값 false. 복제 전에 샘플의 배경 소음을 제거합니다.
요청은 동기식입니다. 201 이 오면 음성을 바로 사용할 수 있습니다. Idempotency-Key 헤더(고유한 임의 문자열)를 보내고 재시도할 때 같은 값을 사용하세요. 그러면 재시도해도 두 번째 음성이 만들어지거나 청구되지 않습니다.
응답
201, id(voice_…), object("voice"), name, description, status("ready"), created_at(Unix 초), usage.cost_usd(청구된 생성 요금)를 포함합니다. 음성이 어떻게 만들어지는지에 대한 다른 정보는 외부로 나가지 않습니다.
GET /v1/voices 는 내 음성만 반환합니다: { "object": "list", "data": [ … ], "has_more": false }. 다른 사람의 voice id 는 존재하지 않는 id 와 똑같이 404 voice_not_found 를 반환합니다.
GET /v1/voices/{id} 는 음성 하나를 반환합니다(위와 같은 필드, usage 제외).
DELETE /v1/voices/{id} 는 { "id": "voice_…", "object": "voice", "deleted": true } 를 반환하며 즉시 적용됩니다. 해당 음성을 쓰는 음성 요청은 바로 실패합니다. 삭제는 무료이며 생성 요금은 환불되지 않습니다.
한도(기본값)
1인당 최대 3개의 음성.
음성마다 오디오 파일 1~5개, 파일당 최대 10 MB, 합계 25 MB. 형식: mp3, wav, m4a, ogg, flac, webm. 깨끗한 음성이 합계 30초~5분 정도면 가장 좋습니다.
하루(UTC 기준) 최대 3회 생성할 수 있습니다.
이메일 인증이 완료되고 잔액이 US$5 이상인 계정이 필요합니다.
유명인을 흉내 내는 이름·설명, 공식 또는 직원 목소리처럼 들리는 이름·설명은 거부됩니다(invalid_voice_name).
녹음은 음성을 만드는 데만 쓰이며 저장하지 않습니다. 음성 이름, 소유자, 동의 기록, 타임스탬프만 보관합니다.
가격
음성을 만들 때 1회성 요금이 부과됩니다(기본 US$1.00). 실제 청구 금액은 usage.cost_usd 로 반환되며, 음성이 성공적으로 만들어졌을 때만 청구됩니다. 음성 합성에서 사용자 지정 음성을 쓰는 요금은 해당 모델의 다른 음성과 같은 글자당 요금입니다. 삭제는 무료입니다.
동의
생성할 때마다 consent=true 와 consent_statement_version="v1" 를 보내야 합니다. 문구가 업데이트되면 400 consent_version_mismatch 가 반환되므로 새 버전으로 다시 확인하세요.
확인하게 되는 동의 문구 초안(최종 문구는 검토 중이며 변경될 수 있습니다):
I confirm that I own the voice in these recordings or have the written permission of the person whose voice it is, that this person is an adult and has agreed to have their voice cloned and synthesized, and that I will not use the voice to impersonate a real person, to deceive, to harass, or for political persuasion, fraud or any unlawful purpose. I understand the voice can be removed and my account suspended if I break these rules.
사용자 지정 음성 사용
voice id 를 POST /v1/audio/speech (voice=voice_…) 의 voice 로 전달하고 elevenlabs/* 계열 음성 모델과 함께 사용합니다. 입력 한도, 형식, 글자당 요금은 모델의 것입니다. 존재하지 않거나 삭제·차단되었거나 다른 사람의 voice id 는 400 invalid_voice 를 반환하며, 사용자 지정 음성은 다른 모델에서는 쓸 수 없습니다.
허락 없이 나나 다른 사람을 흉내 내는 음성을 발견하면 신고하세요: POST /v1/voices/report(API 키 불필요), JSON 본문에 voice_id(voice_…) 또는 sample_url, reason(impersonation, fraud, harassment, minor, political, other), 선택 사항으로 details 와 contact(이메일). 항상 202 를 반환합니다. 신고는 검토하여 규정을 어긴 음성을 삭제하며, 계정이 정지될 수 있습니다.
비동기 전용 작업이나 mode async는 불투명한 작업 ID와 함께 HTTP 202를 반환합니다. GET /v1/data/jobs/{id}를 폴링하세요. HTTP 202는 대기 중, HTTP 200은 완료된 data.social 응답을 의미합니다. 작업은 15분 후 만료됩니다(HTTP 410 job_expired). 알 수 없는 작업이나 다른 계정의 작업은 HTTP 404 not_found를 반환합니다. 완료된 작업은 처음 성공적으로 가져올 때 한 번만 과금됩니다.
{"object":"data.catalog","product":"BazaarLink Data API","platforms":[{"platform":"twitter","actions":[{"action":"search","label":"Keyword search","required_params":["keyword"],"optional_params":["sort"],"max_limit":200,"async":false,"price_usd":0.0048}]},{"platform":"instagram","actions":[{"action":"discover","label":"Discover","required_params":["keyword"],"optional_params":[],"max_limit":null,"async":true,"price_usd":0.0096}]}]}
요금
요금은 플랫폼과 작업에 따라 단계별로 적용됩니다. GET /v1/data/catalog에서 활성화된 각 작업의 고객 요금을 확인할 수 있습니다. 성공한 호출은 한 번만 과금되며 실패한 호출과 결과가 없는 호출은 무료입니다. Data API와 웹 검색은 하나의 일일 무료 사용량을 공유합니다.
Evaluate a state against named questions with a decisions-output model. This alpha endpoint returns non-streaming JSON. Find available model ids with GET /v1/models?output_modalities=decisions; use this endpoint for Clef instead of chat/completions. Input tokens are billed at the selected model's customer price. Sufficient credits are required. Set BAZAARLINK_API_KEY to your API key; the sample builds its complete Authorization header in BAZAARLINK_AUTH_HEADER.
export BAZAARLINK_AUTH_HEADER="Authorization: $(printf '%s %s' 'Bearer' "$BAZAARLINK_API_KEY")"
curl https://api.bazaarlink.ai/v1/alpha/decisions \
-H "$BAZAARLINK_AUTH_HEADER" \
-H "Content-Type: application/json" \
-d '{
"model": "cloudflare/clef-flash",
"state": "The support agent issued a full refund.",
"questions": {
"refunded": {
"type": "noul",
"instructions": "Was a refund issued?"
}
}
}'
비디오 입력
동영상 입력을 지원하는 모델에 동영상 파일을 전송하여 분석, 캡션 생성, 장면 및 이벤트에 대한 질문에 답하게 합니다. 직접 URL 또는 base64 데이터 URI를 사용할 수 있습니다 — URL은 공개적으로 접근 가능한 동영상에 효율적이며, base64는 로컬 파일이나 비공개 동영상에 사용합니다.
지원 형식
MP4(H.264)MPEGMOVWebM
1
2
3
4
5
6
7
8
9
10
11
12
13
response = client.chat.completions.create(
model="google/gemini-3.5-flash",
messages=[{
"role": "user",
"content": [
{
"type": "video_url",
"video_url": {"url": "https://example.com/video.mp4"},
},
{"type": "text", "text": "What is happening in this video?"},
],
}],
)
상태 비저장 멀티턴 대화, 도구 호출, 멀티모달 입력을 위한 OpenAI Responses API 호환 엔드포인트. client.responses.create()를 사용하는 OpenAI Python SDK ≥ 1.x 에이전트 및 프레임워크에 적합합니다.
POST/v1/responses
Note
채팅 완성과 동일한 인증 및 모델 라우팅을 지원합니다.
요청 바디
model필수
string
GET /v1/models에 표시된 id 또는 alias를 사용하세요(예: "claude-sonnet-4.6" 또는 "anthropic/claude-sonnet-4.6").
input필수
string | Item[]
사용자 입력 — 일반 문자열(단일 메시지) 또는 멀티턴/멀티모달 대화를 위한 입력 항목 배열.
instructions
string
시스템 수준 지시사항, 시스템 메시지와 동일. 매 요청마다 다시 보내야 합니다.
stream
boolean
true이면 Responses API SSE 스트림 이벤트를 반환합니다. 이벤트 유형: response.created, response.output_text.delta, response.completed.
max_output_tokens
integer
생성할 최대 출력 토큰 수 (o-시리즈 모델의 경우 추론 토큰 포함).
temperature
number
샘플링 값은 범위 검증 없이 전달됩니다. 모델이 지원 범위 밖의 값을 제한하거나 무시할 수 있습니다.
top_p
number
핵 샘플링 확률 질량. 기본값: 1
tools
Tool[]
도구(함수) 정의 — Chat Completions와 동일한 JSON Schema 형식(평면 Responses 형식과 중첩 형식 모두 허용). OpenAI 자체의 내장 호스팅 도구(web_search_preview, file_search, computer_use_preview)는 지원되지 않습니다. 웹 검색은 plugins: [{id:"web"}]로 사용할 수 있으며 — 일부 모델 라우트에서만 지원됩니다.
tool_choice
string | object
도구 사용 제어: "auto", "none", 또는 특정 도구
parallel_tool_calls
boolean
도구 제공 시 병렬 함수 호출 활성화. 기본값: true. OpenAI 계열 모델에만 적용 — 아래 참고 사항 확인.
response_format
object
구조화된 JSON 출력 강제. 구조화된 출력 섹션 참조
previous_response_id
string
이 엔드포인트는 상태 비저장입니다 — null이 아닌 값을 전달하면 즉시 400(invalid_prompt)을 반환하며, 절대 수락된 후 무시되지 않습니다. 대신 상태 비저장 모드를 사용하세요: input 배열에 전체 대화 기록을 전달하세요.
curl https://api.bazaarlink.ai/v1/responses \
-H "Authorization: Bearer $BAZAARLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-5.4-mini",
"instructions": "You are a helpful assistant.",
"input": "What is the capital of Taiwan?"
}'
응답 형식
BazaarLink는 표준화된 응답을 반환하고 업스트림 전용 필드를 제거합니다. 응답의 불투명한 BazaarLink 요청 ID는 x-request-id와 같으며 GET /v1/generation에서 사용할 수 있습니다. 비스트리밍 응답은 같은 ID를 x-generation-id에도 반환합니다. usage.cost는 고객에게 청구된 USD 금액입니다. 통계는 완료 후 몇 초 뒤에 표시될 수 있으므로 404는 잠시 재시도하세요.
BazaarLink는 표준화된 응답을 반환하고 업스트림 전용 필드를 제거합니다. 응답의 불투명한 BazaarLink 요청 ID는 x-request-id와 같으며 GET /v1/generation에서 사용할 수 있습니다. 비스트리밍 응답은 같은 ID를 x-generation-id에도 반환합니다. usage.cost와 usage.bz_cost에는 고객에게 청구된 동일한 USD 금액이 들어 있습니다. 통계는 완료 후 몇 초 뒤에 표시될 수 있으므로 404는 잠시 재시도하세요.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{"id":"85e6f35c71a31f19-SJC","type":"message","role":"assistant","model":"anthropic/claude-opus-4.6","content":[{"type":"text","text":"Hello! How can I help you today?"}],"stop_reason":"end_turn","usage":{"input_tokens":10,"output_tokens":12,"cache_read_input_tokens":0,"cache_creation_input_tokens":0,"cost":0.00042,"bz_cost":0.00042}}
오류 envelope는 실패 유형에 따라 다릅니다. HTTP 상태와 존재하는 경우 error.type으로 분기하세요. error.code는 문자열, 숫자 HTTP 상태이거나 없을 수 있습니다. 처리 방법은 오류 섹션을 참조하세요.
모델
가격 및 기능 정보와 함께 사용 가능한 모든 모델을 나열합니다. 이 엔드포인트는 인증이 필요하지 않습니다.
// /v1/models — Response SchematypeModelsResponse = {
data: Model[];
};
typeModel = {
id: string; // Model ID (e.g. "openai/gpt-4o")name: string; // Human-readable namecontext_length: number | null; // Max context window in tokensmodality: string | null; // e.g. "text->text", "text+image->text"architecture?: {
input_modalities?: string[];
output_modalities?: Array<
"text" | "image" | "embeddings" | "audio" |
"video" | "rerank" | "speech" | "transcription"
>;
};
pricing: {
prompt: string; // Input price per 1M tokens (USD)completion: string; // Output price per 1M tokens (USD)input_cache_read?: string; // Cache read price per token (USD); only when the model publishes oneinput_cache_write?: string; // Cache write price per token (USD); only when the model publishes oneimage_output?: string; // Image output price per token (USD); only token-billed image models (display only)
};
description?: string | null; // Model descriptiontop_provider?: {
max_completion_tokens?: number;
};
supported_parameters?: string[]; // e.g. ["tools", "response_format", "reasoning"]pricing_tiers?: { // Present only for models with input-length tiersabove_prompt_tokens: number; // Ascending; strict "greater than" thresholdprompt: string; // USD per token, override tiercompletion: string; // USD per token, override tierinput_cache_read?: string; // USD per token, only when the tier overrides itinput_cache_write?: string; // USD per token, only when the tier overrides it
}[];
};
입력 길이 기반 단계별 가격
일부 모델은 프롬프트가 token 임계값을 초과하면 전체 가격표가 전환됩니다(임계값을 초과한 부분만이 아닙니다). 임계값은 엄격한 부등식입니다: 입력 token 수가 정확히 N이면 N 이하 단계가 적용되고, N을 초과할 때만 상위 단계가 적용됩니다.
pricing_tiers는 pricing과 동일한 레벨의 필드로, 기본 가격을 초과하는 오버라이드 단계가 있는 모델에만 존재합니다. 항목은 above_prompt_tokens 오름차순으로 정렬되며, prompt/completion은 token당 USD 가격입니다(pricing.prompt/pricing.completion과 동일한 단위). pricing.prompt와 pricing.completion은 항상 기본(최저) 단계입니다.
대부분의 모델에는 단계가 없습니다 — 이 경우 응답에 pricing_tiers 키 자체가 없습니다.
스트리밍 시, 사용량 데이터는 [DONE] 메시지 이전의 마지막 청크에서 빈 delta와 finish_reason: "stop"을 가진 choices 배열과 함께 반환됩니다.
Keep-alive 및 마지막 청크
스트림에는 SSE 주석 줄과 알 수 없는 또는 ping keep-alive 이벤트가 포함될 수 있습니다. 이를 무시하고 data 프레임을 파싱하세요. 마지막 data 프레임에는 data: [DONE] 전에 usage가 포함될 수 있습니다.
1
2
3
4
5
6
7
: keepalive <- SSE comment line — ignore, do NOT JSON.parse
data: {"id":"85e6f35c71a31f19-SJC","choices":[{"delta":{"content":"Hi"},"index":0}]}
data: {"id":"85e6f35c71a31f19-SJC","choices":[{"delta":{},"finish_reason":"stop","index":0}],"usage":{...}}
data: [DONE]
스트림 취소
클라이언트 연결을 종료하면 스트리밍 요청을 취소할 수 있습니다 — 예: AbortController.abort() 호출 또는 stream 객체 종료. BazaarLink는 취소 신호를 받는 즉시 이후 청크 전달을 중단하고 공급자로 나가는 요청을 취소합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
importOpenAIfrom"openai";
const client = newOpenAI({
baseURL: "https://api.bazaarlink.ai/v1",
apiKey: "sk-bl-YOUR_API_KEY",
});
const controller = newAbortController();
const stream = await client.chat.completions.create(
{
model: "anthropic/claude-sonnet-4.6",
messages: [{ role: "user", content: "Write a long story." }],
stream: true,
},
{ signal: controller.signal }
);
forawait (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content;
if (content) process.stdout.write(content);
}
// e.g. on a "Stop" button click:
controller.abort();
중단된 스트림은 과금되지 않습니다
마지막 usage 청크가 도착하기 전에 스트림이 끝나면 — 클라이언트 측 취소를 포함해서 — 해당 요청의 신뢰할 수 있는 토큰 수 근거가 없으므로 BazaarLink는 예약된 금액 전액을 환불합니다. 취소 전에 클라이언트로 이미 전달된 내용에 대해서는 과금되지 않습니다.
공급자 측 즉시 중단은 보장되지 않습니다
연결을 종료하면 BazaarLink는 즉시 이후 토큰 전달과 과금을 중단하지만, 업스트림 공급자가 연결이 끊기는 순간 자사 서버에서 생성을 멈추는지 여부는 해당 공급자에 따라 다릅니다 — 일부는 연결 종료 후에도 잠시 계속 계산할 수 있습니다.
스트림 도중 오류
오류 프레임에는 choices 필드가 없음
스트리밍이 이미 시작된 후 실패가 발생하면(예: 업스트림 연결 끊김), 일반적인 {choices:[...]} 대신 {error:{message,type,code}} 형태의 SSE 데이터 프레임을 받게 됩니다 — 헤더는 이미 전송되었으므로 HTTP 상태 변경은 없습니다. choices[0].delta를 읽기 전에 error 키가 있는지 확인하세요. 이미 스트리밍된 토큰에 대해서만 과금됩니다(부분 과금 적용).
1
2
3
4
5
data: {"id":"85e6f35c71a31f19-SJC","choices":[{"delta":{"content":"The capital of "},"index":0}]}
data: {"error":{"message":"The request could not be completed.","type":"upstream_error","code":502}}
data: [DONE]
임베딩
임베딩(Embeddings)은 의미를 포착하는 수치 표현으로, 텍스트를 벡터(숫자 배열)로 변환하여 다양한 머신러닝 작업에 활용할 수 있습니다. BazaarLink는 OpenAI 임베딩 API와 호환되는 통합 엔드포인트를 제공하여 하나의 인터페이스로 여러 공급자의 임베딩 모델을 호출할 수 있습니다.
Embedding 응답은 x-request-id와 같은 불투명한 BazaarLink 요청 ID를 사용하며 GET /v1/generation에서 사용할 수 있습니다. 비스트리밍 응답은 같은 ID를 x-generation-id에도 반환합니다. usage.cost는 이 요청에 대해 고객에게 청구된 USD 금액입니다. 통계는 완료 후 몇 초 뒤에 표시될 수 있으므로 404는 잠시 재시도하세요.
임베딩이란?
임베딩은 텍스트를 고차원 벡터로 변환하며, 의미적으로 유사한 텍스트는 벡터 공간에서 더 가깝게 위치합니다——예를 들어 "고양이"와 "새끼 고양이"의 임베딩은 비슷하지만, "고양이"와 "비행기"는 멀리 떨어져 있습니다. 이러한 벡터 표현 덕분에 기계가 텍스트 간의 관계를 이해할 수 있으며, 많은 AI 애플리케이션의 기반이 됩니다.
일반적인 사용 사례
사용 사례
설명
RAG (검색 증강 생성)답변을 생성하기 전에 지식 베이스에서 관련 컨텍스트를 검색하는 시스템을 구축——임베딩은 LLM 컨텍스트에 포함할 가장 관련성 높은 문서를 찾아줍니다.
시맨틱 검색문서와 쿼리를 임베딩으로 변환한 후 벡터 유사도로 가장 관련성 높은 문서를 찾습니다——키워드 일치만이 아니라 의미를 이해하므로 키워드 검색보다 더 나은 결과를 제공합니다.
추천 시스템상품, 기사, 동영상 등의 항목과 사용자 선호도에 대한 임베딩을 생성하여 유사한 항목을 추천——공통 키워드가 없어도 벡터 비교로 의미적으로 관련된 항목을 찾을 수 있습니다.
클러스터링 및 분류임베딩 패턴을 분석하여 유사한 문서를 그룹화하거나 분류——임베딩이 비슷한 문서는 보통 같은 주제나 카테고리에 속합니다.
중복 감지임베딩 유사도를 비교하여 중복 또는 거의 중복된 콘텐츠를 감지——내용이 바꿔 표현되었더라도 감지할 수 있습니다.
이상 감지데이터셋의 일반적인 패턴에서 크게 벗어난 임베딩을 찾아 이상치나 특이한 콘텐츠를 식별합니다.
POST/v1/embeddings
Note
업스트림 소스가 요청한 임베딩 모델을 지원하지 않으면 다른 사용 가능한 소스를 시도할 수 있습니다. 해당 모델을 지원하는 소스가 없으면 요청에 오류가 반환됩니다.
매개변수
model필수
string
사용할 임베딩 모델, 예: "openai/text-embedding-3-small".
input필수
string | string[] | ContentItem[]
임베딩할 텍스트 — 단일 문자열, 한 번의 배치 호출을 위한 문자열 배열, 또는 (지원하는 모델의 경우) text와 image_url 파트를 섞은 {content:[...]} 항목 배열.
dimensions
integer
요청하는 출력 벡터 크기. 가변 차원을 지원하는 모델(예: OpenAI text-embedding-3 계열)에서만 적용됩니다. 업스트림 공급자에 그대로 전달되며, 지원하지 않는 모델에서는 무시됩니다.
encoding_format
string
요청하는 임베딩 인코딩, 예: "float" 또는 "base64". 업스트림 공급자에 그대로 전달됩니다 — 지원 여부는 모델에 따라 다릅니다.
provider
object
Unsupported. The entire object is ignored and removed before forwarding; it cannot select an upstream or price tier.
기본 요청
1
2
3
4
5
6
7
8
9
10
11
12
13
from openai import OpenAI
client = OpenAI(
base_url="https://api.bazaarlink.ai/v1",
api_key="sk-bl-YOUR_API_KEY",
)
response = client.embeddings.create(
model="openai/text-embedding-3-small",
input="The quick brown fox jumps over the lazy dog",
)
print(response.data[0].embedding) # 1536-dimensional vector
배치 처리
문자열 배열을 보내면 한 번의 요청으로 여러 텍스트를 임베딩할 수 있습니다 — 텍스트별로 호출하는 것보다 저렴하고 빠릅니다.
1
2
3
4
5
6
7
8
9
10
11
response = client.embeddings.create(
model="openai/text-embedding-3-small",
input=[
"Machine learning is a subset of artificial intelligence",
"Deep learning uses neural networks with multiple layers",
"Natural language processing enables computers to understand text",
],
)
for i, item inenumerate(response.data):
print(f"Embedding {i}: {len(item.embedding)} dimensions")
멀티모달 입력 (이미지 + 텍스트)
이미지 입력을 지원하는 모델(output_modalities에 "embeddings", inputModalities에 "image" 포함)은 {content:[{type:"text",...}, {type:"image_url",...}]} 형태의 입력 항목을 받아, 이미지 단독 또는 텍스트와 함께 임베딩할 수 있습니다.
모델에 따라 다름
일부 임베딩 모델만 이미지 입력을 받습니다 — image_url 콘텐츠를 보내기 전에 Models 페이지에서 해당 모델의 지원 모달리티를 확인하세요. 텍스트 전용 모델은 이 형식을 거부합니다.
임베딩 전용 모델 목록 엔드포인트는 없습니다 — GET /v1/models를 호출한 뒤 output_modalities에 "embeddings"가 포함된 항목을 클라이언트 측에서 필터링하거나, Models 페이지를 둘러보세요.
제한사항
스트리밍 미지원 — 채팅 완성과 달리 임베딩은 항상 완전한 응답으로 반환됩니다.
각 모델에는 최대 입력 길이가 있으며, 이를 초과하는 텍스트는 업스트림에서 잘리거나 거부됩니다.
동일한 입력에 대한 임베딩은 결정론적입니다 — temperature나 무작위성이 개입하지 않습니다.
모범 사례
속도/품질/비용 트레이드오프에 맞는 모델을 선택하세요 — 작은 모델(예: qwen/qwen3-embedding-4b)은 저렴하고 빠르며, 큰 모델(예: openai/text-embedding-3-large)은 일반적으로 더 높은 정확도로 임베딩합니다.
텍스트별로 호출하는 대신 여러 텍스트를 한 번의 요청에 배치로 담으세요 — 왕복 횟수와 오버헤드가 줄어듭니다.
결과를 캐시하세요 — 동일한 입력의 임베딩은 절대 변하지 않으므로, 다시 생성하지 말고 저장해 두세요.
유클리드 거리 대신 코사인 유사도로 비교하세요 — 스케일에 불변하며 고차원 벡터에 더 적합합니다.
각 모델의 컨텍스트 길이에 유의하세요 — 긴 문서는 임베딩 전에 청크로 나눠야 할 수 있습니다.
파라미터
샘플링 파라미터는 토큰 생성 과정을 조정합니다. BazaarLink은 지원되는 파라미터를 업스트림 공급자에 전달합니다; 지원되지 않는 파라미터는 조용히 무시됩니다.
샘플링 파라미터
순수 패스스루 — 로컬 기본값 없음
샘플링 값은 범위 검증 없이 전달됩니다. 모델이 지원 범위 밖의 값을 제한하거나 무시할 수 있습니다.
temperature
number
샘플링 값은 범위 검증 없이 전달됩니다. 모델이 지원 범위 밖의 값을 제한하거나 무시할 수 있습니다.
top_p
number
핵 샘플링 확률 질량. 기본값: 1
top_k
integer
샘플링 값은 범위 검증 없이 전달됩니다. 모델이 지원 범위 밖의 값을 제한하거나 무시할 수 있습니다.
frequency_penalty
number
반복 토큰 패널티. 범위: [-2, 2]. 기본값: 0
presence_penalty
number
존재 기반 토큰 패널티. 범위: [-2, 2]. 기본값: 0
repetition_penalty
number
입력에서 토큰 반복 감소. 범위: (0, 2]. 기본값: 1
min_p
number
상위 토큰 대비 최소 확률. 범위: [0, 1]. 기본값: 0
top_a
number
최고 확률 토큰 기반 동적 top-P. 범위: [0, 1]. 기본값: 0
seed
integer
결정적 샘플링을 위한 정수 시드. 모든 모델에서 보장되지 않음
max_tokens
integer
생성할 최대 토큰 수
n
integer
생성할 완성 수. 기본값: 1
logit_bias
object
토큰 ID를 바이어스 값 [-100, 100]에 매핑하여 샘플링 전 추가. OpenAI 계열 모델에만 적용 — 아래 참고 사항 확인.
logprobs
boolean
각 출력 토큰의 로그 확률 반환. OpenAI 계열 모델에만 적용 — 아래 참고 사항 확인.
top_logprobs
integer
위치당 반환할 최고 확률 토큰 수 (logprobs: true 필요). 범위: 0–20. OpenAI 계열 모델에만 적용 — 아래 참고 사항 확인.
response_format
object
구조화된 JSON 출력 강제. 구조화된 출력 섹션 참조
structured_outputs
boolean
지원하는 제공자에서 엄격한 JSON 스키마 준수 출력을 요청. 그대로 전달
reasoning
object
제공자별 reasoning/thinking 설정. 그대로 전달
reasoning_effort
string
OpenAI o-시리즈 스타일 reasoning 강도: "low", "medium", 또는 "high". 그대로 전달
include_reasoning
boolean
true이면 message.reasoning(스트리밍에서는 delta.reasoning)에 생각 내용을 반환하고, false이면 기본으로 생각하는 모델의 생각을 끕니다(추론 섹션 참조). 따라서 생각 비용이 청구되지 않습니다. reasoning_effort, reasoning, thinking 중 아무것도 보내지 않으면 그 모델들만 기본으로 생각하고 반환하며, 다른 모델은 요청했을 때만 반환합니다
stop
string | string[]
중지 시퀀스 — 만나면 생성 중단
tools
Tool[]
모델이 호출할 수 있는 도구(함수) 목록
tool_choice
string | object
도구 사용 제어: "auto", "none", 또는 특정 도구
parallel_tool_calls
boolean
도구 제공 시 병렬 함수 호출 활성화. 기본값: true. OpenAI 계열 모델에만 적용 — 아래 참고 사항 확인.
응답 id 또는 x-request-id 헤더의 불투명한 BazaarLink 요청 ID로 GET /v1/generation을 호출하세요. 비스트리밍 응답에도 같은 ID가 x-generation-id로 포함됩니다. 통계가 표시되기까지 몇 초 걸릴 수 있으므로 404는 잠시 재시도하세요.
크레딧 잔액이 $10 미만일 때 is_free_tier = true. 윈도우는 UTC: daily = 당일, weekly = 월~일, monthly = 1일~말일. 키에 개별 사용 한도가 설정된 경우(키 생성/수정 시 limit 파라미터), limit / limit_remaining / limit_reset은 해당 한도와 그 기간의 사용량을 반영합니다. 설정되지 않은 경우 limit은 null이며 limit_remaining은 계정 크레딧 잔액으로 대체됩니다. expires_at은 키의 만료 시각(없으면 null)입니다. is_management_key와 is_provisioning_key는 동일한 개념의 별칭으로, 관리 키인 경우 둘 다 true입니다.
BYOK
BazaarLink는 BYOK(자체 키 지참) 프로그램을 제공하지 않으므로 이 엔드포인트는 byok_usage 관련 필드를 반환하지 않습니다.
오류: 401 (auth), 404 (사용자 없음 — 드물게).
오류 코드
오류 응답 형식
오류 envelope는 엔드포인트마다 다릅니다. HTTP 상태와 존재하는 경우 error.type을 사용하세요. error.code는 문자열 또는 숫자이며 생략될 수 있습니다. error.message는 표시용입니다.
1
2
3
4
5
6
7
{"error":{"message":"Insufficient credits. Please top up to continue.","type":"invalid_request_error","code":"insufficient_credits"}}
HTTP 상태 및 오류.코드
오류 envelope는 엔드포인트마다 다릅니다. HTTP 상태와 존재하는 경우 error.type을 사용하세요. error.code는 문자열 또는 숫자이며 생략될 수 있습니다. error.message는 표시용입니다.
코드
이름
설명
424종속성 실패직접 설정한 BYOK 키가 업스트림 제공자에 의해 거부되었습니다. BYOK 설정에서 확인하거나 교체하세요. strict 모드에서만 발생합니다
400잘못된 요청잘못된 요청, 빈 messages 배열, 또는 필수 필드 누락
401승인되지 않음API 키가 누락, 잘못됨, 또는 비활성화됨
402결제 필요계정 크레딧 부족, 키별 지출 한도 도달, 또는 월간/주간 예산 상한 초과
403금지됨계정이 정지되었거나 권한이 없음
404찾을 수 없음Requested model, generation, key, or other resource does not exist
409충돌Resource is not in the required state, such as an incomplete video job
410사라Requested model has been retired and must be replaced
413페이로드가 너무 큼요청 바디가 10 MB 초과; 콘텐츠 크기를 줄이거나 요청을 분할하세요
416범위가 만족스럽지 않음Requested byte range is invalid for generated video content
429요청이 너무 많습니다속도 제한 초과; 재시도 전 Retry-After 헤더를 확인하세요
432무료 한도 소진Tavily 호환 엔드포인트(/v1/search, /v1/extract, /v1/crawl, /v1/map): 무료 검색 한도를 모두 사용했거나 잔액이 0 이하입니다. 크레딧을 충전한 뒤 계속하세요. 응답 본문은 Tavily 형식입니다: {"detail":{"error":"..."}}
500서버 오류BazaarLink 내부 오류
502잘못된 게이트웨이모든 업스트림 소스가 요청을 처리하지 못했습니다. 요청에 오류가 반환됩니다.
503서비스를 이용할 수 없습니다이 모델에 구성된 업스트림 공급자 없음; 관리자에게 문의하세요
504게이트웨이 시간 초과Upstream connection or stream stalled and timed out
기계 판독 가능한 청구 코드
A 402 can represent different controls. Use these stable codes to choose the correct action.
코드
설명
byok_key_invalid직접 설정한 BYOK 키가 업스트림 제공자에 의해 거부되었습니다. BYOK 설정에서 확인하거나 교체하세요. strict 모드에서만 발생합니다.
budget_cap_reachedA weekly or monthly budget cap was reached; raise or reset the cap.
credit_limit_exceededA monthly-billing organization's credit line was exhausted; contact billing.
insufficient_creditsThe prepaid balance is insufficient; add credits.
spend_limit_exceededThe API key reached its daily, weekly, or monthly spend limit.
capacity_unavailableThis model is temporarily at capacity. Retry shortly; the Retry-After header says how long to wait.
Stable error.code catalog
These string codes are emitted by public inference and media paths. Branch on the string code when present; the HTTP status remains the broad failure class.
모델 및 엔드포인트
모델 조회, 수명 주기, 가격 책정, 양식 및 엔드포인트 호환성 오류입니다.
코드
HTTP 상태
unknown_model400
invalid_model_id400
model_not_found404
model_retired410
model_endpoint_mismatch400
embedding_on_chat_endpoint400
model_not_priced400
invalid_modality_for_model400
요청 및 안전
잘못된 매개변수, 컨텍스트, 도구, 스키마 및 콘텐츠 안전 거부.
코드
HTTP 상태
missing_required_field400
unsupported_param400
max_tokens_invalid400
context_too_long400
tool_use_unsupported400
malformed_tool_messages400
invalid_response_format_schema400
invalid_tools_definition400
content_moderation403
content_filter403
unknown_4xx400
이미지 생성 및 편집
이미지 입력, 멀티파트 편집, 출력 및 이미지 파이프라인 오류입니다.
코드
HTTP 상태
invalid_image_url400
input_images_not_supported400
invalid_content_type400
mask_not_supported400
unsupported_response_format400
missing_prompt400
missing_image400
too_many_images400
invalid_image_type400
image_too_large400
invalid_n400
pipeline_error502
no_images502
업스트림 라우팅
공급자 연결, 인증, 제한 및 가용성 오류를 삭제했습니다.
코드
HTTP 상태
upstream_unreachable502
upstream_auth_failed502
upstream_rate_limited429
capacity_unavailable429
upstream_unavailable502/503
byok_key_invalid424
콘텐츠 검토
모든 요청은 모델로 전달되기 전에 자동 콘텐츠 검토를 거칩니다. 이용 정책을 위반하는 요청은 모델에 전달되지 않고 거부되며 403 오류가 반환됩니다.
차단되는 콘텐츠 카테고리
검토는 당사의 이용 정책(Acceptable Use Policy)에 따라 이루어지며, 주로 다음 카테고리의 콘텐츠를 차단합니다:
성적 착취 콘텐츠
폭력적 위협
불법 행위 실행 안내
생물학적 위해 관련 콘텐츠
403 응답 형식
검토에 의해 차단된 요청은 다음 형식의 오류를 반환합니다:
1
2
3
4
5
6
7
{"error":{"message":"Your prompt was blocked by content moderation.","type":"invalid_request_error","code":"content_filter"}}
These controls can reject an otherwise valid request and require different recovery actions.
제어
HTTP 상태
식별 방법
요청 속도 제한429문자열 코드 또는 숫자 코드 429입니다. Retry-After와 X-RateLimit-* 헤더를 사용하세요.
속도 제한 페널티 블록429숫자 코드 429 및 임시 제한 메시지; 재시도 후를 사용하십시오.
글로벌 소비 비상 브레이크503숫자 코드 503, 글로벌 지출 한도 메시지 및 30초 또는 300초 후 재시도.
Scoped spend brake429Numeric code 429 and a spend circuit-breaker message naming the scope.
청구 및 예산 관리402위에 나열된 안정적인 청구 문자열 코드를 사용하세요.
오류 envelope는 엔드포인트마다 다릅니다. HTTP 상태와 존재하는 경우 error.type을 사용하세요. error.code는 문자열 또는 숫자이며 생략될 수 있습니다. error.message는 표시용입니다.
비디오 및 미디어 리소스 상태
Video validation commonly returns numeric code 400. Missing jobs return 404, retired models 410, unfinished video content 409, and invalid video byte ranges 416.
재시도 정책
Retry only failures that may recover without changing the request. Honor Retry-After or use exponential backoff with jitter. Do not stack SDK and manual retries.
백오프로 재시도
429, 502, 503, and 504. Check the original generation job before creating another after an ambiguous network failure.
재시도하기 전에 수정하세요
400, 401, 402, 403, 404, 409, 410, 413, and 416. Fix the request, credentials, balance, permissions, resource state, or Range header first.
오류 처리
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import random
import time
from openai import OpenAI, APIStatusError
client = OpenAI(
base_url="https://api.bazaarlink.ai/v1",
api_key="sk-bl-YOUR_API_KEY",
max_retries=0, # Avoid double retries; this example handles them.
)
RETRYABLE = {429, 502, 503, 504}
for attempt inrange(5):
try:
response = client.chat.completions.create(
model="openai/gpt-4o",
messages=[{"role": "user", "content": "Hello!"}],
)
breakexcept APIStatusError as error:
if error.status_code notin RETRYABLE or attempt == 4:
raise
retry_after = error.response.headers.get("Retry-After")
delay = (
float(retry_after)
if retry_after
elsemin(8, 0.5 * (2 ** attempt)) + random.uniform(0, 0.25)
)
time.sleep(delay)
스트리밍 오류 형식
토큰 스트리밍 전에 발생한 오류는 JSON 바디와 함께 표준 HTTP 오류 응답을 반환합니다.
스트림이 시작되면 HTTP 응답은 이미 200입니다. 각 SSE 데이터 프레임을 파싱하고, 최상위 error 또는 choices[0].finish_reason === "error"가 나타나면 실패한 불완전 응답으로 처리하세요.
스트림이 시작된 후 실패하면 BazaarLink가 최상위 error 객체가 담긴 마지막 SSE 이벤트를 보내고 이어서 data: [DONE]을 보낼 수 있습니다. 응답을 불완전한 것으로 처리하고, 부분 출력을 완료된 결과로 사용하지 마세요.
1
2
3
4
5
data: {"error":{"message":"The request could not be completed.","type":"upstream_error","code":502}}
data: [DONE]
// Branch on error.code; error.type can vary by failure path.
버전 관리
BazaarLink는 단일 안정 API 경로인 /api/v1을 제공합니다 — 관리해야 할 날짜 고정 버전이나 버전 헤더가 없습니다. API는 번호가 매겨진 릴리스가 아니라 지속적으로 발전합니다.
비파괴적 변경
다음은 사전 공지 없이 배포됩니다:
새 엔드포인트
카탈로그에 새 모델 추가
새로운 선택적 요청 매개변수
새로운 응답 필드
선택적 속성을 가진 새 스키마
추가 응답 상태/오류 코드
방어적으로 클라이언트를 작성하세요
인식하지 못하는 응답 필드는 무시하고, enum 형태 필드의 알 수 없는 값에서 실패하지 않도록 하세요 — 카탈로그와 기능이 늘어나면서 새 값이 추가됩니다.
파괴적 변경
이는 드물게 발생하며, 다음을 포함합니다:
엔드포인트, 매개변수, 응답 필드를 제거하거나 이름을 바꾸는 것
필드 타입을 변경하는 것
선택적 매개변수를 필수로 만드는 것
발생하더라도 파괴적 변경은 전체 /v1 표면이 아니라 특정 엔드포인트에만 적용됩니다 — 모든 연동을 한 번에 깨뜨릴 수 있는 단일 버전 업그레이드는 없습니다. 아직 Breaking 태그가 있는 공식 changelog는 게시하지 않습니다(아래 "최신 정보 확인" 참고) — 연동에 중요한 부분이라면, 문서화되지 않은 동작에 의존하기 전에 Support에 문의하세요.
지원 종료 정책
예상해야 할 유일한 정기적인 "파괴적" 이벤트: 업스트림 공급자가 지원을 종료함에 따라 개별 모델이 폐지됩니다. GET /v1/models로 모델의 현재 상태를 조회하세요.
1
2
3
4
5
6
7
GET https://api.bazaarlink.ai/v1/models
Authorization: Bearer sk-bl-YOUR_API_KEY
# A model within 30 days of its deprecation date shows in the catalog# with an "EOL" badge on the Models page. After the effective date it's# dropped from the catalog and calls return:# 410 { "error": { "type": "model_not_available", "code": "model_retired" } }
최신 정보 확인
아직 전용 API changelog나 RSS 피드는 게시하지 않습니다. 지금은 이 페이지를 직접 확인하거나, GET /v1/models로 모델 상태를 확인하거나, 중요한 연동에 사전 통지가 필요하면 Support에 문의하세요.
Support
Support
Hi! How can we help you? Send a message and we'll get back to you soon.