Responses API
새로운POST /v1/responses는 지침과 입력 항목 목록을 받아 OpenAI Responses 형식으로 출력 항목으로 구성된 응답 객체를 반환합니다. OpenAI SDK의 responses API 및 이를 기반으로 만든 Codex CLI 같은 도구와 함께 사용하세요. 이 엔드포인트는 상태를 저장하지 않으므로 요청마다 대화 전체를 보내야 합니다.
POST https://api.shannon-ai.com/v1/responses
가장 작은 요청은 모델 id와 텍스트 하나입니다. 요청하지 않는 한 응답은 스트리밍되지 않습니다.
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com/v1",
)
response = client.responses.create(
model="shannon-3",
input="Say hello in one sentence.",
)
print(response.output_text) import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com/v1",
});
const response = await client.responses.create({
model: "shannon-3",
input: "Say hello in one sentence.",
});
console.log(response.output_text); curl https://api.shannon-ai.com/v1/responses \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-3",
"input": "Say hello in one sentence."
}' 응답은 응답 객체입니다. output에는 모델이 추론한 경우 추론이, 그리고 메시지가 들어 있습니다.
{
"id": "resp_5f0c1e7a9b3d4c62a8e1f07d2b46c9a3",
"object": "response",
"created_at": 1791625200,
"model": "shannon-3",
"status": "completed",
"error": null,
"incomplete_details": null,
"instructions": null,
"metadata": {},
"parallel_tool_calls": true,
"temperature": null,
"tool_choice": "auto",
"tools": [],
"top_p": null,
"output": [
{
"id": "rs_8a2e6c1f4b7d4e03b9c5a1d70f3e2b64",
"type": "reasoning",
"summary": [
{
"type": "summary_text",
"text": "The user wants a greeting in one sentence. Keep it short and friendly."
}
]
},
{
"id": "msg_1c7b9e3a5d2f4a86b0e4c8d19a6f7e25",
"type": "message",
"role": "assistant",
"status": "completed",
"content": [
{
"type": "output_text",
"text": "Hello, it is good to meet you.",
"annotations": []
}
]
}
],
"usage": {
"input_tokens": 1184,
"output_tokens": 46,
"total_tokens": 1230
}
} 요청 필드
요청에 필요한 것은 model과 input입니다. 적용하는 모델 열은 필드가 응답을 바꾸는 모델을 나타냅니다. 호스팅 오픈 웨이트 모델은 모델 목록의 id 열두 개이고, Shannon 3 계열은 shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro입니다. 모델 및 가격
| 필드 | 유형 | 기본값 | 설명 | 적용하는 모델 |
|---|---|---|---|---|
model | string | 필수. 모델 목록의 id입니다. 대소문자를 구분하지 않고 일치시킵니다. id가 없거나 공개되지 않았으면 400 unknown model을 반환합니다. | 모든 모델 | |
input | string | array | 하나의 사용자 메시지로 읽는 문자열, 또는 입력 항목의 배열입니다. 아래의 입력 항목을 참고하세요. | 모든 모델 | |
instructions | string | 모델에 대한 지침이며, 이 형식의 시스템 프롬프트입니다. | 호스팅 오픈 웨이트 모델, shannon-1.6-*, shannon-2-*, shannon-coder-1 | |
stream | boolean | false | true이면 응답을 server-sent events로 보냅니다. 아래의 스트리밍을 참고하세요. | 모든 모델 |
max_output_tokens | integer | 4096 | 응답 길이의 상한이며 토큰 단위입니다. 1에서 65,536 범위를 벗어난 값은 그 범위로 조정됩니다. 요청이 실행되는 동안 잔액에서 따로 확보하는 양이기도 합니다. 아래의 출력 한도를 참고하세요. | 호스팅 오픈 웨이트 모델, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
temperature | number | 샘플링 온도입니다. 호스팅 오픈 웨이트 모델에서는 값이 0과 2 사이로 유지됩니다. | 호스팅 오픈 웨이트 모델, 스트리밍이 아닌 응답에서의 shannon-1.6-*, shannon-2-*, shannon-coder-1 | |
top_p | number | 뉴클리어스 샘플링입니다. 값은 0과 1 사이로 유지됩니다. | 호스팅 오픈 웨이트 모델 | |
tools | array | 모델이 호출할 수 있는 함수이며, 이 형식의 평탄한 형태 {"type": "function", "name", "description", "parameters"}로 작성합니다. 아래의 도구를 참고하세요. | 모든 모델 | |
tool_choice | string | object | auto | "auto"는 모델이 결정하게 합니다. "required"는 도구를 호출하게 합니다. {"type": "function", "name": "…"}는 그 도구를 호출하게 합니다. | 호스팅 오픈 웨이트 모델 |
reasoning | object | off, low, medium, high 중 하나를 쓴 {"effort": "…"}. 다른 값은 400을 반환합니다. | 호스팅 오픈 웨이트 모델 | |
text | object | {"format": {…}}는 JSON 답변을 요청합니다. 아래의 구조화된 출력을 참고하세요. | 모든 Shannon 등급, id별로 표시된 호스팅 오픈 웨이트 모델 |
previous_response_id, store, metadata, parallel_tool_calls, truncation, include, user, prompt_cache_key는 기존 클라이언트 코드가 변경 없이 실행되도록 허용됩니다. 응답은 바뀌지 않습니다. 대화가 저장되지 않으므로 후속 요청은 이전 턴을 input에 담아 보내야 합니다.
입력 항목
입력 항목은 role과 content가 있는 메시지이거나, 도구 호출 또는 그 결과를 담은 타입 지정 항목입니다. content는 문자열 또는 파트의 배열입니다.
| 항목 | 설명 | 적용하는 모델 |
|---|---|---|
{"role": "user", "content": …} | 사용자가 묻는 내용입니다. content는 문자열이거나 input_text와 input_image 파트입니다. | 모든 모델 |
{"role": "assistant", "content": …} | 모델의 이전 응답입니다. content는 문자열이거나 output_text 파트입니다. | 모든 모델 |
{"role": "system", "content": …}{"role": "developer", "content": …} | 대화 안의 지침입니다. | 호스팅 오픈 웨이트 모델 |
{"type": "function_call", "call_id": "…", "name": "…", "arguments": "…"} | 모델이 이전 응답에서 한 도구 호출입니다. arguments는 JSON 문자열입니다. | 모든 모델 |
{"type": "function_call_output", "call_id": "…", "output": "…"} | 그 호출의 결과입니다. call_id는 호출의 id이고 output은 문자열로 된 결과입니다. | 모든 모델 |
지침은 instructions 필드에 넣으세요. Shannon 3 계열 id를 쓸 때는 반드시 지켜야 할 지침을 user 메시지에 넣으세요.
응답 output의 항목은 그대로 input에 되돌려 보낼 수 있습니다. message와 function_call 항목은 읽고 reasoning 항목은 건너뜁니다.
콘텐츠 파트
| 파트 | 설명 | 사용 가능한 곳 |
|---|---|---|
{"type": "input_text", "text": "…"} | 사용자 메시지의 텍스트입니다. | 모든 모델 |
{"type": "output_text", "text": "…"} | assistant 메시지의 텍스트입니다. | 모든 모델 |
{"type": "input_image", "image_url": "…"} | 이미지이며, base64 콘텐츠의 data: URL이거나 http(s) URL입니다. | Shannon 3 계열, shannon-1.6-lite, shannon-1.6-pro, 그리고 이미지 입력이 표시된 호스팅 오픈 웨이트 모델 |
{"type": "input_file", "file_data": "data:application/pdf;base64,…"} | 문서(PDF, Word, PowerPoint, Excel): file_data에는 data: URL, file_url에는 http(s) URL이 들어 있습니다. | Shannon 3 계열 |
Shannon 등급에서는 이미지와 파일을 input의 마지막 user 항목에서 읽습니다. 크기와 한도는 별도 페이지에 있습니다. 이미지와 파일
지침과 옵션이 있는 요청
이 요청은 지침, 입력 항목으로 된 대화, 출력 한도, 온도, 추론 강도를 보냅니다. 이를 모두 적용하는 호스팅 오픈 웨이트 모델을 사용합니다.
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com/v1",
)
response = client.responses.create(
model="DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
instructions="You are a physics teacher. Answer in two sentences.",
input=[
{"role": "user", "content": "Why is the sky blue?"},
{"role": "assistant", "content": "Air scatters blue light more than red light."},
{"role": "user", "content": "And why are sunsets red?"},
],
max_output_tokens=512,
temperature=0.3,
reasoning={"effort": "low"},
)
for item in response.output:
if item.type == "reasoning":
print("reasoning:", item.summary[0].text)
elif item.type == "message":
print("answer:", item.content[0].text)
print(response.usage) import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com/v1",
});
const response = await client.responses.create({
model: "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
instructions: "You are a physics teacher. Answer in two sentences.",
input: [
{ role: "user", content: "Why is the sky blue?" },
{ role: "assistant", content: "Air scatters blue light more than red light." },
{ role: "user", content: "And why are sunsets red?" },
],
max_output_tokens: 512,
temperature: 0.3,
reasoning: { effort: "low" },
});
for (const item of response.output) {
if (item.type === "reasoning") console.log("reasoning:", item.summary[0].text);
if (item.type === "message") console.log("answer:", item.content[0].text);
}
console.log(response.usage); curl https://api.shannon-ai.com/v1/responses \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
"instructions": "You are a physics teacher. Answer in two sentences.",
"input": [
{"role": "user", "content": "Why is the sky blue?"},
{"role": "assistant", "content": "Air scatters blue light more than red light."},
{"role": "user", "content": "And why are sunsets red?"}
],
"max_output_tokens": 512,
"temperature": 0.3,
"reasoning": {"effort": "low"}
}' 호스팅 오픈 웨이트 모델의 응답에는 id, object, model, created_at, status, output, usage가 있습니다. usage에는 캐시에서 읽은 토큰과 추론에 사용된 토큰이 추가됩니다.
{
"usage": {
"input_tokens": 58,
"input_tokens_details": {
"cached_tokens": 0
},
"output_tokens": 67,
"output_tokens_details": {
"reasoning_tokens": 19
},
"total_tokens": 125
}
} 응답 객체
id, object, status, output, usage는 모든 응답에 있습니다. 코드는 이 필드들을 기반으로 작성하세요.
| 필드 | 유형 | 설명 | 전송하는 곳 |
|---|---|---|---|
id | string | resp_ 뒤에 hex 문자 32개가 붙습니다. | 모든 모델 |
object | string | 항상 response입니다. | 모든 모델 |
status | string | completed입니다. 스트림에서는 처음에 in_progress이고, response.failed 이벤트에서는 failed입니다. | 모든 모델 |
output | array | 모델이 생성한 순서의 출력 항목입니다: reasoning, message, function_call. | 모든 모델 |
usage | object | input_tokens, output_tokens, total_tokens. | 모든 모델 |
usage.input_tokens_details | object | cached_tokens: 프롬프트 캐시에서 읽은 입력 토큰입니다. | 호스팅 오픈 웨이트 모델 |
usage.output_tokens_details | object | reasoning_tokens: 추론에 사용된 출력 토큰입니다. | 호스팅 오픈 웨이트 모델 |
model | string | 응답한 모델의 정식 id입니다. | Shannon 3 계열, 호스팅 오픈 웨이트 모델 |
created_at | integer | 응답 시각이며 Unix 초 단위입니다. | Shannon 3 계열, 호스팅 오픈 웨이트 모델 |
instructions, tools, temperature, … | instructions, tools, temperature는 요청을 그대로 반복합니다. error와 incomplete_details는 null, metadata는 {}, parallel_tool_calls는 true, tool_choice는 auto, top_p는 null입니다. | Shannon 3 계열 |
출력 항목
| 항목 | 설명 |
|---|---|
{"id": "rs_…", "type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} | summary_text 파트 하나로 된 모델의 추론입니다. 모델이 추론한 경우에만 있습니다. |
{"id": "msg_…", "type": "message", "role": "assistant", "content": [{"type": "output_text", "text": "…"}]} | 답변: 텍스트가 담긴 output_text 파트 하나입니다. |
{"id": "fc_…", "type": "function_call", "call_id": "call_…", "name": "…", "arguments": "…"} | 도구 호출입니다. arguments는 JSON 문자열입니다. 결과는 같은 call_id로 되돌려 보내세요. |
OpenAI SDK는 메시지의 텍스트를 response.output_text에 합쳐서 제공합니다.
스트리밍
server-sent events를 받으려면 stream을 true로 설정하세요. 각 프레임에는 이벤트 이름이 있는 event: 줄과 JSON 객체가 있는 data: 줄이 있으며, 객체는 type에 같은 이름을 반복합니다. 델타는 output_index로 해당 항목과 연결하세요.
OpenAI SDK에서는 이벤트를 type으로 읽으세요.
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com/v1",
)
stream = client.responses.create(
model="shannon-3",
input="Explain server-sent events in three sentences.",
stream=True,
)
for event in stream:
kind = getattr(event, "type", "error") # an event without a type is an error event
if kind == "response.reasoning_summary_text.delta":
pass # a piece of reasoning: event.delta
elif kind == "response.output_text.delta":
print(event.delta, end="", flush=True)
elif kind == "response.output_item.done" and event.item.type == "function_call":
print("\ntool call:", event.item.name, event.item.arguments)
elif kind == "response.completed":
print("\n", event.response.usage)
elif kind in ("response.failed", "error"):
raise RuntimeError("the stream failed, send the request again") import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com/v1",
});
const stream = await client.responses.create({
model: "shannon-3",
input: "Explain server-sent events in three sentences.",
stream: true,
});
for await (const event of stream) {
if (event.type === "response.reasoning_summary_text.delta") {
// a piece of reasoning: event.delta
} else if (event.type === "response.output_text.delta") {
process.stdout.write(event.delta);
} else if (event.type === "response.output_item.done" && event.item.type === "function_call") {
console.log("\ntool call:", event.item.name, event.item.arguments);
} else if (event.type === "response.completed") {
console.log("\n", event.response.usage);
} else if (event.type === "response.failed" || event.type === "error") {
throw new Error("the stream failed, send the request again");
}
} curl -N https://api.shannon-ai.com/v1/responses \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-3",
"input": "Explain server-sent events in three sentences.",
"stream": true
}' 이벤트는 이 순서로 도착합니다. 추론, 메시지, 도구 호출 그룹은 응답에 해당 내용이 있을 때만 나타납니다.
| 이벤트 | 페이로드 | 시점 |
|---|---|---|
response.created | response | 항상 첫 번째입니다. response.status는 in_progress이고 response.output은 비어 있습니다. |
response.in_progress | response | 항상 두 번째이며 같은 객체를 담습니다. |
response.output_item.added | output_index, item | 추론이 시작됩니다: 빈 summary가 있는 reasoning 항목. |
response.reasoning_summary_text.delta | output_index, summary_index, delta | 추론의 한 조각입니다. |
response.reasoning_summary_text.done | output_index, summary_index, text | 추론이 완료되었습니다: 전체 text. |
response.output_item.done | output_index, item | 완성된 reasoning 항목입니다. |
response.output_item.added | output_index, item | 답변이 시작됩니다: 상태가 in_progress이고 콘텐츠가 없는 message 항목. |
response.content_part.added | output_index, content_index, part | 빈 output_text 파트가 열립니다. |
response.output_text.delta | output_index, content_index, delta | 답변의 한 조각입니다. |
response.output_text.done | output_index, content_index, text | 답변이 완료되었습니다: 전체 text. |
response.content_part.done | output_index, content_index, part | 완성된 output_text 파트입니다. |
response.output_item.done | output_index, item | 상태가 completed인 완성된 message 항목입니다. |
response.output_item.added | output_index, item | 도구 호출이 시작됩니다: call_id, name, 빈 arguments가 있는 function_call 항목. |
response.function_call_arguments.delta | output_index, delta | 호출의 인수이며 하나의 델타에 완전하게 들어 있습니다. |
response.function_call_arguments.done | output_index, arguments | 같은 인수를 arguments로 제공합니다. |
response.output_item.done | output_index, item | 완성된 function_call 항목입니다. |
response.completed | response | 성공 시 항상 마지막입니다: output과 usage가 있는 전체 응답 객체. |
event: response.created
data: {"type":"response.created","response":{"id":"resp_5f0c…","object":"response","status":"in_progress","output":[], …}}
event: response.in_progress
data: {"type":"response.in_progress","response":{"id":"resp_5f0c…","object":"response","status":"in_progress","output":[], …}}
event: response.output_item.added
data: {"type":"response.output_item.added","output_index":0,"item":{"id":"msg_1c7b…","type":"message","role":"assistant","status":"in_progress","content":[]}}
event: response.content_part.added
data: {"type":"response.content_part.added","output_index":0,"content_index":0,"part":{"type":"output_text","text":""}}
event: response.output_text.delta
data: {"type":"response.output_text.delta","output_index":0,"content_index":0,"delta":"Server-sent"}
event: response.output_text.delta
data: {"type":"response.output_text.delta","output_index":0,"content_index":0,"delta":" events let a server push text over one HTTP reply."}
event: response.output_text.done
data: {"type":"response.output_text.done","output_index":0,"content_index":0,"text":"Server-sent events let a server push text over one HTTP reply."}
event: response.content_part.done
data: {"type":"response.content_part.done","output_index":0,"content_index":0,"part":{"type":"output_text","text":"Server-sent events let a server push text over one HTTP reply."}}
event: response.output_item.done
data: {"type":"response.output_item.done","output_index":0,"item":{"id":"msg_1c7b…","type":"message","role":"assistant","status":"completed","content":[{"type":"output_text","text":"Server-sent events let a server push text over one HTTP reply.","annotations":[]}]}}
event: response.completed
data: {"type":"response.completed","response":{"id":"resp_5f0c…","object":"response","status":"completed","output":[…],"usage":{"input_tokens":1190,"output_tokens":18,"total_tokens":1208}, …}} 실패하는 스트림
Shannon 등급에서 실패한 응답은 response.completed 대신 response.failed로 끝납니다. response.status는 failed이고 response.error에는 rate_limit_exceeded 또는 server_error인 code와 message가 들어 있습니다.
호스팅 오픈 웨이트 모델에서 실패는 code가 api_error이고 message가 있는 error 이벤트입니다. 그 뒤에도 response.completed가 이어집니다.
스트림에 response.failed 또는 error 이벤트가 있으면 실패한 것으로 처리하고 요청을 다시 보내세요.
도구
도구는 코드가 실행하는 함수입니다. tools에 설명하세요. 모델이 도구를 원하면 응답에 메시지 대신 또는 메시지와 함께 function_call 항목이 들어 있습니다.
tools의 도구 정의:
[
{
"type": "function",
"name": "get_weather",
"description": "Current weather for a city.",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string"
}
},
"required": [
"city"
]
}
}
] 도구를 호출하는 응답의 output:
[
{
"id": "call_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
"type": "function_call",
"name": "get_weather",
"call_id": "call_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
"arguments": "{\"city\":\"Paris\"}"
}
] 함수를 실행한 뒤, 호출과 그 결과를 input에 추가하여 요청을 다시 보내세요.
[
{
"role": "user",
"content": "What is the weather in Paris?"
},
{
"type": "function_call",
"call_id": "call_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
"name": "get_weather",
"arguments": "{\"city\":\"Paris\"}"
},
{
"type": "function_call_output",
"call_id": "call_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
"output": "{\"temperature_c\": 18, \"sky\": \"cloudy\"}"
}
] type이 function인 도구만 읽습니다. shannon-1.6-*, shannon-2-*, shannon-coder-1에서는 parameters 스키마가 공통 JSON Schema 키워드로 축소됩니다. oneOf는 anyOf로 읽고, $ref, additionalProperties, const, default, title 같은 키워드는 모델에 전달되지 않습니다.
tool_choice 값 required와 이름을 지정한 함수는 호스팅 오픈 웨이트 모델이 적용합니다.
도구 루프는 별도 페이지에 자세히 설명되어 있습니다. 함수 호출
구조화된 출력
이 형식은 구조화된 출력을 text.format으로 표기합니다. 스키마는 Chat Completions처럼 json_schema 멤버 아래가 아니라 name, strict와 나란히 format에 직접 들어갑니다.
{"type": "json_object"}는 임의의 JSON 객체를 요청합니다.{"type": "json_schema", "name", "schema", "strict"}는 스키마를 따르는 JSON을 요청합니다.strict를 생략하면true입니다.
{
"model": "shannon-1.6-lite",
"input": "Extract the city and the date: 'The conference opens in Lisbon on 12 May 2027.'",
"text": {
"format": {
"type": "json_schema",
"name": "event",
"strict": true,
"schema": {
"type": "object",
"properties": {
"city": {
"type": "string"
},
"date": {
"type": "string",
"description": "ISO 8601 date"
}
},
"required": [
"city",
"date"
]
}
}
}
} JSON은 메시지의 output_text 파트에 텍스트로 도착하므로 직접 파싱하세요. 구조화된 출력을 지원하지 않는 호스팅 오픈 웨이트 모델은 400을 반환합니다.
{"city": "Lisbon", "date": "2027-05-12"} 어떤 모델이 어떤 형태를 받는지는 별도 페이지에 나열되어 있습니다. 구조화된 출력
추론
추론하는 모델은 추론을 메시지 앞에 type이 reasoning인 출력 항목으로 반환합니다. 스트림에서는 response.reasoning_summary_text.delta 이벤트로 도착합니다.
호스팅 오픈 웨이트 모델은 reasoning.effort를 적용합니다: off, low, medium, high이며, 아무것도 보내지 않으면 high입니다. off는 reasoning 항목을 반환하지 않습니다. 객체로 보내세요. 이 엔드포인트는 단순 문자열을 읽지 않습니다.
각 강도는 별도 페이지에 설명되어 있습니다. 추론 effort
출력 한도
max_output_tokens를 보내지 않으면 4,096입니다. 요청이 시작될 때 잔액에서 확보하는 토큰 수이며, 응답이 완료되면 그 양은 요청이 실제로 사용한 양으로 대체됩니다. 남은 잔액에 들어가지 않는 값은 429 Quota exceeded를 반환합니다.
shannon-1.6-*, shannon-2-*, shannon-coder-1에서는 응답 길이를, 호스팅 오픈 웨이트 모델에서는 답변 텍스트 길이를 제한합니다.
이 엔드포인트에서 shannon-coder-1은 다른 모든 모델처럼 잔액에서 토큰 단위로 청구됩니다.
요청 본문은 최대 32 MiB까지 가능합니다. 한도 및 잔액
오류
오류는 OpenAI 오류 본문을 사용합니다: type과 message가 있는 error 객체이며, 일부는 값이 null인 code와 param도 담습니다. 표에는 이 엔드포인트가 가장 자주 반환하는 오류가 나열되어 있습니다. 재시도할 항목을 포함한 전체 목록은 별도 페이지에 있습니다. 오류 처리
| 상태 | 유형 | 메시지 | 시점 |
|---|---|---|---|
401 | authentication_error | Missing authenticationInvalid API key | API 키를 보내지 않았거나, 키를 알 수 없거나 폐기되었습니다. |
400 | invalid_request_error | unknown model: <id> | model이 없거나 공개된 id가 아닙니다. |
400 | invalid_request_error | No user message provided. | Shannon 등급: input에 사용자 텍스트가 없습니다. |
400 | invalid_request_error | <id> does not accept image input | 이미지 입력이 없는 호스팅 오픈 웨이트 모델에 이미지를 보냈습니다. |
400 | invalid_request_error | <id> does not accept response_format | 구조화된 출력을 지원하지 않는 호스팅 오픈 웨이트 모델에 text.format을 보냈습니다. |
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | reasoning.effort에 목록에 없는 값이 들어 있습니다. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | 본문은 유효한 JSON이지만 필드의 타입이 잘못되었습니다. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | max_output_tokens가 남은 잔액보다 큽니다. |
429 | rate_limit_error | Too many requests. Retry in <n>s. | 플러드 보호: 계정에서 분당 120개를 넘는 요청이 있었습니다. |
500 | api_error | The model backend failed to answer. Please retry. | 모델이 응답을 생성하지 못했습니다. 요청을 다시 보내세요. |
502 | api_error | The model backend failed to answer. Please retry. | 호스팅 오픈 웨이트 모델에서의 같은 경우입니다. |
504 | api_error | upstream timed out | 호스팅 오픈 웨이트 모델이 스트리밍이 아닌 응답의 제한 시간보다 오래 걸렸습니다. stream을 true로 설정하여 보내세요. |