개요
API의 지도입니다: 모든 엔드포인트, 요청과 오류의 모양, 호출 비용이 지불되는 방식, 그리고 OpenAI 또는 Anthropic SDK에서 넘어올 때 알아야 할 점.
엔드포인트
모든 엔드포인트는 하나의 기본 URL 아래에 있으며 HTTPS로 제공됩니다.
기본 URL
https://api.shannon-ai.com | 엔드포인트 | 형식 | 용도 |
|---|---|---|
POST /v1/chat/completions | OpenAI Chat Completions | 대화를 보내고 다음 답변을 받습니다. 스트리밍 여부는 선택할 수 있습니다. |
POST /v1/messages | Anthropic Messages | 같은 기능을 Anthropic SDK의 요청 및 응답 형태로 제공합니다. |
POST /v1/responses | OpenAI Responses | 같은 기능을 Responses 형태로 제공합니다. 이 엔드포인트는 상태를 저장하지 않으므로 요청마다 대화를 보내야 합니다. |
GET /v1/models | OpenAI 모델 목록 | 컨텍스트 윈도우, 가격, 기능과 함께 모델을 나열합니다. 키가 필요하지 않습니다. |
POST /v1/tokenize | Shannon API | 호스팅 오픈 웨이트 모델에 대해 텍스트 또는 채팅 요청의 토큰 수를 셉니다. 무료입니다. |
POST /v1/messages/count_tokens | Anthropic 토큰 수 계산 | 호스팅 오픈 웨이트 모델에 대한 Messages 요청의 입력 토큰 수를 셉니다. 무료입니다. |
텍스트를 생성하는 세 엔드포인트는 같은 모델에 연결됩니다. 코드가 이미 사용하는 형식의 엔드포인트를 고르세요.
요청 기본
| 헤더 | 설명 |
|---|---|
Authorization: Bearer <key> | API 키입니다. x-api-key를 보내지 않는 한 GET /v1/models를 제외한 모든 엔드포인트에서 필수입니다. |
x-api-key: <key> | Anthropic SDK가 보내는 헤더에 담긴 같은 키입니다. 모든 엔드포인트에서 읽습니다. |
Content-Type: application/json | 모든 POST에서 필수입니다. 없으면 응답은 415입니다. |
x-request-id: <your id> | 선택 사항입니다. 요청에 붙이는 자체 id이며, 응답 헤더 x-request-id로 돌아옵니다. 없으면 API가 12자리 hex 문자열 id를 생성합니다. |
- 모든
POST의 본문은 JSON 객체 하나이며 최대 32 MiB입니다. - API가 모르는 필드는 오류를 일으키지 않으며 아무 효과도 없습니다. 다른 제공업체용으로 작성한 요청이 추가 필드 때문에 실패하지는 않습니다.
- 알려진 필드의 JSON 타입이 틀렸거나 필수 필드가 없으면
422로 응답합니다. 유효한 JSON이 아닌 본문은400으로 응답합니다. model은 Models & pricing에 있는 id 중 하나입니다. 대소문자는 구분하지 않습니다.
응답은 JSON이거나, 요청에서 stream을 true로 설정한 경우 server-sent events 스트림입니다. 각 엔드포인트는 고유한 형식으로 응답합니다. 모든 응답에는 x-request-id 헤더가 있습니다.
요청이 거치는 검사
요청은 모델이 실행되기 전에 정해진 순서로 검사됩니다. 처음 실패한 검사가 응답하므로 401만으로는 본문에 대해 아직 아무것도 알 수 없습니다.
| 검사 항목(이 순서대로) | 실패 시 상태 |
|---|---|
| API 키 | 401 |
| 본문: 크기, 콘텐츠 타입, JSON, 필드 타입 | 413 · 415 · 400 · 422 |
| 모델 id | 400 |
| 플러드 보호: 계정당 분당 120개 요청 | 429 |
| 잔액: 요청의 출력 예산이 들어가야 함 | 429 |
오류 형태
오류는 type과 message를 담은 error가 있는 JSON 객체입니다. /v1/messages는 Anthropic SDK가 기대하는 방식으로 감싸고, 다른 모든 경로는 OpenAI 형태를 사용합니다.
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: gpt-4o"
}
} {
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "unknown model: gpt-4o"
}
} type과message를 읽으세요.code와param은 일부 오류에만 있으므로 선택 사항으로 취급하세요.param은 항상null입니다.- 스트림이 시작된 뒤에는 상태가 이미
200입니다. 이후의 실패는 스트림 안의 오류 프레임으로 전달됩니다. - 모든 오류 응답에는
x-request-id헤더가 포함됩니다.
| 상태 | 유형 | 시점 |
|---|---|---|
400 | invalid_request_error | 본문이 유효한 JSON이 아니거나, 모델 id를 알 수 없거나, 모델이 보낸 입력 종류를 받지 않습니다. |
401 | authentication_error | 키가 없거나 유효하지 않습니다. |
404 | not_found_error | 경로가 존재하지 않습니다. |
405 | api_error | 경로는 존재하지만 메서드가 잘못되었습니다. |
413 | invalid_request_error | 본문이 32 MiB보다 큽니다. |
415 | invalid_request_error | Content-Type이 application/json이 아닙니다. |
422 | invalid_request_error | 필드의 JSON 타입이 잘못되었거나 필수 필드가 없습니다. |
429 | rate_limit_error | 잔액이 요청을 감당하지 못하거나, 분당 120개를 넘는 요청이 도착했거나, 해당 기간의 Shannon Coder 호출을 모두 사용했거나, 모델이 바쁩니다. 어느 경우인지는 메시지에 나옵니다. |
5xx | api_error | 상태 500, 502, 503 또는 504: 요청은 유효했지만 응답할 수 없었습니다. 다시 보내세요. 500에는 type server_error가 담길 수 있습니다. |
결제와 잔액
- 계정당 잔액은 하나이며 채팅과 API가 함께 사용합니다. 오늘의 플랜 할당량을 먼저 쓰고, 그다음에 구매한 크레딧을 씁니다. API에는 별도의 할당량이 없습니다.
- 요청은 출력 예산(
max_tokens, 기본값 4,096)을 확보한 뒤, 실제로 사용한 토큰에 대해 모델의 가격으로 청구됩니다. - 모든 응답은
usage에 토큰 수를 보고합니다. Keys & usage 페이지에서 잔액과 요청별 비용을 볼 수 있습니다. - 모든 요청은 동등하게 처리됩니다. 요청 속도에 대한 유일한 제한은 플러드 보호로, 계정당 분당 120개 요청입니다. 병렬로 보낸 요청은 대기열에서 기다립니다.
모델에 따라 달라지는 필드
모든 모델이 같은 요청을 받습니다. 일부 필드는 특정 모델에서만 적용되며, 표에 해당 모델이 나와 있습니다. 엔드포인트 페이지에는 모든 필드가 나열되어 있습니다.
| 필드 | 설명 | 적용 대상 |
|---|---|---|
system | 모델에 대한 지침입니다. Chat Completions에서는 system 메시지, Messages에서는 system, Responses에서는 instructions입니다. | 호스팅 오픈 웨이트 모델, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
temperature | 샘플링 온도입니다. | 호스팅 오픈 웨이트 모델, shannon-1.6-*, shannon-coder-1 |
top_p | 뉴클리어스 샘플링입니다. | 호스팅 오픈 웨이트 모델 |
seed | 샘플링에 쓰는 고정 시드입니다. | 호스팅 오픈 웨이트 모델 |
stop | 중단 시퀀스를 최대 4개까지 지정할 수 있습니다. | 호스팅 오픈 웨이트 모델 |
reasoning_effort | 모델이 응답하기 전에 얼마나 추론하는지입니다. Responses에서는 reasoning.effort, Messages에서는 thinking입니다. | 호스팅 오픈 웨이트 모델 |
web_search | true이면 이 요청에서 모델이 웹을 검색할 수 있습니다. Chat Completions와 Messages에 있는 이 API 고유의 필드입니다. | shannon-coder-1을 제외한 Shannon 모델 |
max_tokens | 출력 예산입니다. 모든 모델에서 잔액에서 확보하는 양을 정합니다. | 답변 길이의 제한으로: 호스팅 오픈 웨이트 모델, shannon-1.6-*, shannon-coder-1 |
OpenAI SDK에서 넘어올 때
- 기본 URL을
https://api.shannon-ai.com/v1로, 키를 Shannon 키로 설정하세요. 그러면 Chat Completions와 Responses 호출이 SDK에서 그대로 동작합니다. model은 Shannon id여야 합니다.gpt-4o같은 다른 제공업체의 모델 이름은400과unknown model로 응답합니다.- 추론은 별도의 필드로 제공됩니다: 메시지와 스트림 델타 모두에서
content옆에reasoning_content가 있습니다. - 스트림은 항상 마지막 청크에
finish_reason과 함께usage를 담아 보냅니다. - 스트림에서 도구 호출은 완전한
arguments문자열을 담은 하나의 청크로 도착합니다. - 응답에는 choice가 하나 있습니다.
/v1/embeddings처럼 위 표에 없는 OpenAI API 경로는404로 응답합니다.
Anthropic SDK에서 넘어올 때
- 기본 URL을
/v1없이https://api.shannon-ai.com로 설정하고 키는 Shannon 키로 설정하세요. SDK가 이를x-api-key로 보냅니다. model은 Shannon id여야 합니다.- 이 API에서
max_tokens는 선택 사항입니다. 기본값은 4,096입니다. - 응답에는 type이
thinking,text,tool_use인 콘텐츠 블록이 들어 있습니다. 첫 블록이 항상 텍스트는 아니므로type으로 블록을 골라야 합니다. stop_reason은end_turn또는tool_use입니다. Shannon 모델의 스트림은max_tokens로 끝날 수도 있습니다.anthropic-version과anthropic-beta는 허용되므로 SDK가 변경 없이 동작합니다. 요청에 꼭 필요하지는 않습니다./v1/messages의 오류는 Anthropic 형태를 따릅니다:{"type": "error", "error": {…}}.
이 형식을 사용하는 코딩 도구도 같은 방식으로 설정합니다: 기본 URL, 키, 그리고 모델로 Shannon id. CLI 코딩 도구