Text
GLM-5.3 API 레퍼런스
GLM-5.3 요청 필드, 추론, 도구, 스트리밍, 사용량 및 전체 Chat, Responses, Messages 예제입니다.
GLM-5.3는 텍스트를 입력받아 텍스트나 도구 호출을 반환합니다. 항상 추론하며 low, high, max 강도를 지원하고 최대 131,072 출력 토큰을 허용합니다. Default 등급에는 glm-5.3 모델을 사용합니다. 기본 그룹은 glm이며 glm-5.3:glm도 같은 그룹을 명시적으로 선택합니다. 추가 그룹에는 각각의 모델 접미사를 사용합니다.
기본 URL: https://api.seedrouter.ai. Authorization: Bearer $SEEDROUTER_API_KEY로 인증합니다. 자격 증명은 서버에 보관합니다. Messages는 호환 x-api-key 헤더도 허용합니다.
이 레퍼런스는 Z.ai Chat 계약, 제조사의 Responses 스키마와 Messages 호환 가이드를 따릅니다. 모델별 한도는 GLM-5.3 가이드를 기준으로 합니다. 문서와 일치한다고 해서 모든 실제 동작이 확인된 것은 아닙니다. 2026년 10월 29일 검사에서는 세 형식 모두의 텍스트 및 스트리밍 요청, Chat 함수 호출, JSON 객체 출력과 저장된 응답을 통한 대화 이어가기를 완료했습니다. 캐시 적중, 명시적 캐시 수명과 모든 호환 제어 항목은 확인되지 않았습니다. 아래 Messages 레퍼런스 필드는 제조사가 문서화한 GLM 필드와 구분합니다.
OpenAPI 명세 · Markdown 레퍼런스 · 모델 및 Playground · 가격 가이드
빠른 시작
각 예제는 Chat Completions 요청 하나를 보냅니다. max_tokens: 2048은 예시 예산이며 기본값이 아닙니다. 추론과 보이는 답변이 이 예산을 공유하므로 답변이 완성되었다고 판단하기 전에 finish_reason을 확인합니다.
curl https://api.seedrouter.ai/v1/chat/completions \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"model":"glm-5.3","messages":[{"role":"user","content":"Explain an idempotency key with one concrete example."}],"reasoning_effort":"low","max_tokens":2048}'import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["SEEDROUTER_API_KEY"], base_url="https://api.seedrouter.ai/v1")
response = client.chat.completions.create(
model="glm-5.3",
messages=[{"role": "user", "content": "Explain an idempotency key with one concrete example."}],
max_tokens=2048,
extra_body={"reasoning_effort": "low"},
)
print(response.choices[0].message.content)
print(response.usage)import OpenAI from 'openai';
const client = new OpenAI({apiKey: process.env.SEEDROUTER_API_KEY, baseURL: 'https://api.seedrouter.ai/v1'});
const response = await client.chat.completions.create({
model: 'glm-5.3',
messages: [{role: 'user', content: 'Explain an idempotency key with one concrete example.'}],
reasoning_effort: 'low',
max_tokens: 2048,
});
console.log(response.choices[0].message.content);
console.log(response.usage);package main
import (
"bytes"
"fmt"
"io"
"net/http"
"os"
"time"
)
func main() {
body := []byte(`{"model":"glm-5.3","messages":[{"role":"user","content":"Explain an idempotency key with one concrete example."}],"reasoning_effort":"low","max_tokens":2048}`)
req, err := http.NewRequest("POST", "https://api.seedrouter.ai/v1/chat/completions", bytes.NewReader(body))
if err != nil { panic(err) }
req.Header.Set("Authorization", "Bearer " + os.Getenv("SEEDROUTER_API_KEY"))
req.Header.Set("Content-Type", "application/json")
client := &http.Client{Timeout: 3 * time.Minute}
res, err := client.Do(req)
if err != nil { panic(err) }
defer res.Body.Close()
data, err := io.ReadAll(res.Body)
if err != nil { panic(err) }
if res.StatusCode != http.StatusOK { panic(fmt.Sprintf("HTTP %d: %s", res.StatusCode, data)) }
fmt.Println(string(data))
}Chat Completions
POST /v1/chat/completions는 최상위 필드 16개를 허용합니다. 명시된 경우를 제외하고 필드는 null을 허용하지 않습니다. 선택 필드는 생략할 수 있으며 생략 대신 null을 보내지 마세요.
| 필드 | 타입 | 필수 | 기본값 및 제약 |
|---|---|---|---|
model | string | 예 | glm-5.3 (Default) |
messages | array | 예 | 메시지 최소 1개. user 또는 tool 메시지를 포함해야 함 |
do_sample | boolean | 아니요 | true; false이면 temperature와 top_p가 영향을 주지 않음 |
stream | boolean | 아니요 | false |
thinking | object | 아니요 | type: enabled; clear_thinking: true |
reasoning_effort | string | 아니요 | low, high, max; 기본값 max |
temperature | number | 아니요 | 0–1 양 끝 포함. 기본값 1 |
top_p | number | 아니요 | 0.01–1 양 끝 포함. 기본값 0.95 |
max_tokens | integer | 아니요 | 1–131072. 공개된 Chat 기본값 없음 |
tool_stream | boolean | 아니요 | false; true이면 stream: true 필요 |
tools | array | 아니요 | Function, retrieval 또는 web_search. 최대 128개 |
tool_choice | string | 아니요 | auto만 허용 |
stop | string array | 아니요 | 공식 스키마는 문자열 최대 4개. 실제 요청에서 4개를 허용했으나 중지 문자열 일치는 시험하지 않음 |
response_format | object | 아니요 | 필수 type: text 또는 json_object; 기본값 text |
request_id | string | 아니요 | 6–64자. 호출자의 고유 요청 식별자 |
user_id | string | 아니요 | 6–128자. 개인 정보 사용 금지 |
system과 user 메시지에는 문자열 content가 필요합니다. assistant 메시지는 문자열 content, reasoning_content와 tool_calls를 포함할 수 있습니다. tool 메시지에는 content와 tool_call_id가 필요합니다. thinking.clear_thinking: false 사용 시 어시스턴트 호출과 도구 결과의 순서를 포함하여 이전 추론을 정확하게 보존합니다. 사고 기능은 비활성화할 수 없습니다.
함수 도구는 {type:"function", function:{name, description, parameters}}를 사용합니다. 이름은 ASCII 영문자, 숫자, 밑줄이나 하이픈 1–64자로 구성합니다. 기계 판독 스키마는 description과 parameters를 필수로 정하지만 설명문에서는 매개변수가 없는 함수의 생략을 언급합니다. 이 불일치가 해소될 때까지 전체 구조를 사용하세요. parameters는 함수의 JSON Schema이며 메시지 내용으로 해석되지 않습니다.
검색 도구는 {type:"retrieval", retrieval:{knowledge_id, prompt_template?}}를 사용합니다. 지식 ID는 요청을 처리하는 계정에 속하며 이 도구를 선언한다고 지식 베이스가 생성되지는 않습니다.
웹 검색 도구는 {type:"web_search", web_search:{search_engine:"search_pro_jina"}}를 사용합니다. 선택 필드는 enable, search_query, count (1–50), search_domain_filter, search_recency_filter (oneDay, oneWeek, oneMonth, oneYear, noLimit), content_size (medium, high), result_sequence (before, after), search_result, require_search, search_prompt입니다. 정확한 타입은 OpenAPI를 확인합니다. 계정별 웹 검색과 지식 검색의 제공 여부는 실제 검증이 필요합니다.
JSON 객체 모드는 JSON을 생성하지만 제공한 JSON Schema를 강제하지는 않습니다. 원하는 필드를 프롬프트에 포함하고 앱에서 결과를 검증합니다.
Responses
POST /v1/responses는 생성 요청의 최상위 필드 15개를 허용합니다. 제조사의 Responses 스키마를 GLM-5.3에 맞춰 적용한 것이며 서비스별 정확한 동작은 검증이 필요합니다.
curl https://api.seedrouter.ai/v1/responses \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"model":"glm-5.3","input":[{"type":"message","role":"user","content":"Give a concise example of a safe retry."}],"reasoning":{"effort":"low"},"max_output_tokens":2048,"store":false}'| 필드 | 타입 | 필수 | 기본값 및 제약 |
|---|---|---|---|
model | string | 예 | glm-5.3 |
input | string or array | 예 | 아래의 네이티브 입력 항목 |
instructions | string | 아니요 | 시스템 지시 |
stream | boolean | 아니요 | false |
temperature | number | 아니요 | 0–1, 소수점 두 자리 이하. 기본값 1 |
top_p | number | 아니요 | 0.01–1, 소수점 두 자리 이하. 기본값 0.95 |
max_output_tokens | integer | 아니요 | 1–131072. 추론을 포함하며 기본값 65536 |
stop | string array | 아니요 | 이 프로토콜에 명시된 개수 제한 없음 |
tools | array | 아니요 | Function, namespace, custom 또는 web_search |
tool_choice | string | 아니요 | none 또는 auto |
reasoning | object | 아니요 | effort: low, high, max. 기본값 max |
text | object | 아니요 | format.type: text 또는 json_object |
prompt_cache_key | string | 아니요 | 캐시 라우팅 키. 문서화된 길이 제한 없음 |
previous_response_id | string | 아니요 | 이전에 저장한 응답 참조 |
store | boolean | 아니요 | false; 이 응답의 저장 여부 |
메시지 입력 항목에는 type: "message", 역할 (user, system, assistant, developer)과 내용이 필요합니다. 내용은 문자열, 텍스트 블록 하나 또는 텍스트 블록 배열입니다. 문자열 text와 함께 input_text 또는 어시스턴트의 output_text를 사용합니다. 범용 이미지/파일 스키마가 이 텍스트 전용 모델에 시각 기능을 부여하지는 않습니다.
함수 호출 입력 항목에는 type: "function_call", name, call_id와 JSON 문자열 arguments가 필요하며 namespace는 선택 사항입니다. 결과에는 type: "function_call_output", call_id와 문자열 output이 필요합니다. 추론 항목은 type: "reasoning"과 단일 content: {type:"reasoning_text", text:"..."} 객체를 사용합니다. 배열로 변환하지 말고 보존합니다.
함수 도구에는 type: "function"과 name이 필수이며 description과 parameters는 선택 사항입니다. 네임스페이스 도구에는 type: "namespace"와 name이 필요하며 함수 tools를 포함할 수 있습니다. 사용자 정의 도구에는 type: "custom"과 name이 필요합니다. 웹 검색 도구에는 type: "web_search"가 필요합니다. Chat에서 함수에 필수인 필드를 이 형식에 그대로 복사하지 마세요.
참조하는 이전 응답은 저장되어 있어야 합니다. 현재 응답의 저장은 별도 선택이며 previous_response_id가 현재 요청의 store: true를 강제하지 않습니다. 제조사의 보존 기간은 7일입니다. 실제 검사에서 응답을 저장한 뒤 현재 store: false로 해당 ID에서 대화를 이어가는 데 성공했지만 모든 저장 응답 작업을 입증한 것은 아닙니다.
저장된 응답 작업
store: true가 성공하면 반환된 응답 ID를 그대로 보관합니다. 다음 인증 작업에는 응답을 생성한 계정을 사용합니다.
GET /v1/responses/{response_id}는 저장된 응답을 가져옵니다.GET /v1/responses/{response_id}/input_items는 입력 항목을 나열합니다. 선택 쿼리 필드:order(asc또는desc, 기본값desc),limit(정수 1–100, 기본값 20),after(이전 페이지의 last_id).DELETE /v1/responses/{response_id}는 저장된 응답을 삭제합니다.
후속 생성 요청은 저장된 ID를 previous_response_id로 사용할 수 있습니다. 접근하려면 원래 사용자의 현재 모델 접근 권한이 필요합니다. 보존 기간은 최대 7일이며 만료되거나 삭제된 응답에서는 대화를 이어갈 수 없습니다. 조회, 삭제와 대화 이어가기는 원래 계정 연결을 유지합니다. 취소 엔드포인트는 문서화되어 있지 않습니다. 이 작업들은 로컬 계약 테스트로 검사합니다. 10월 29일 실제 검사에서는 저장과 대화 이어가기를 확인했으나 조회와 입력 항목 목록은 404를 반환했고 삭제는 시험하지 않았습니다. 제공 여부가 확인되기 전까지 조회, 목록과 삭제에 의존하지 마세요.
Messages 호환성
POST /v1/messages는 Anthropic 호환 구조를 사용합니다. anthropic-version: 2023-06-01을 포함합니다. 제조사는 model, messages, max_tokens와 stream을 직접 예시로 보여 줍니다. 완전한 GLM Messages 스키마는 공개하지 않으며 Claude와의 차이를 안내합니다. 나머지 제어 항목은 호환 레퍼런스 필드이며 개별적으로 검증된 GLM 기능이 아닙니다.
curl https://api.seedrouter.ai/v1/messages \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-d '{"model":"glm-5.3","messages":[{"role":"user","content":"Explain a safe retry in two sentences."}],"max_tokens":2048}'| 필드 | 구조 및 검증 | 근거 |
|---|---|---|
model | 필수 문자열 glm-5.3 | GLM 예제 |
messages | 필수이며 비어 있지 않은 user/assistant 배열. 문자열 또는 네이티브 텍스트/도구 블록 | GLM 텍스트 예제. 블록 구조는 호환 레퍼런스 기준 |
max_tokens | 필수 정수 1–131072 | GLM 예제와 모델 출력 한도 |
stream | 불리언. 기본값 false | GLM 예제 |
system | 문자열 또는 텍스트 블록 배열 | 호환 레퍼런스 |
temperature | 숫자 0–1 | 호환 레퍼런스. 매핑 미검증 |
top_p | 숫자 0.01–1 | 호환 레퍼런스. 매핑 미검증 |
top_k | 음이 아닌 정수 | 호환 레퍼런스. 매핑 미검증 |
stop_sequences | 문자열 배열 | 호환 레퍼런스 |
tools | 클라이언트 도구: name, input_schema, 선택적 description | 호환 레퍼런스 |
tool_choice | 객체 type은 auto, none, any 또는 tool. 지정 도구에는 name 필수 | 호환 레퍼런스 |
thinking | budget_tokens를 포함한 enabled 또는 adaptive. 사고 기능 비활성화 불가 | 호환 레퍼런스와 GLM 상시 추론 규칙 |
output_config | effort가 low, high 또는 max인 객체 | 호환 필드 표기. 매핑 미검증 |
metadata | 선택적 user_id를 포함한 객체 | 호환 레퍼런스 |
cache_control | Ephemeral 표시. ttl 5m 또는 1h는 선택 사항 | 프로토콜 레퍼런스만 존재. GLM 명시적 TTL 동작 미검증 |
활성화된 사고 기능의 호환 예산은 1024 이상이며 max_tokens보다 작아야 합니다. 텍스트 블록에는 text가, 사고 기록에는 thinking과 signature가, 가려진 사고 내용에는 data가 필요합니다. 도구 사용 블록에는 id, name과 input이, 도구 결과 블록에는 tool_use_id가 필요합니다. 이미지, 오디오와 비디오 블록은 허용되지 않습니다. 명시적 캐시 표시는 캐시 적중, 수명이나 별도 요율을 입증하지 않습니다. 모델에 문서화된 컨텍스트 캐시는 자동입니다.
출력, 스트리밍 및 사용량
Chat은 id, created, model, choices와 usage를 반환하며 request_id와 web_search는 선택 사항입니다. choices[].message.content, reasoning_content와 tool_calls를 읽습니다. 도구 호출 응답에는 답변 텍스트가 없을 수 있습니다. SSE는 추론, 텍스트와 도구 인수의 증분을 보낸 다음 [DONE]을 보냅니다. 호출 인덱스로 인수 조각을 결합합니다. stream_options 필드는 공식 GLM Chat 요청에 포함되지 않습니다.
Responses는 메시지, 추론과 도구 호출로 구성된 네이티브 output 유니온을 반환합니다. SSE에는 response.created, response.in_progress, 출력 항목과 내용 부분 이벤트, 텍스트/추론/함수 인수 증분, 검색 진행 상황과 최종 response.completed, response.incomplete 또는 response.failed가 포함됩니다. [DONE] 표시는 필수가 아닙니다. 인덱스와 시퀀스 번호를 보존합니다.
Messages는 내용 블록, stop_reason과 usage를 포함한 네이티브 메시지 구조를 반환합니다. 이벤트 이름에는 message_start, content_block_start/delta/stop, message_delta와 message_stop이 포함됩니다. 사고 서명과 도구 ID는 해석하거나 수정하지 않는 기록으로 보존합니다.
| 형식 | 전체 입력 | 캐시된 입력 | 출력 |
|---|---|---|---|
| Chat | prompt_tokens | prompt_tokens_details.cached_tokens | completion_tokens |
| Responses | input_tokens | input_tokens_details.cached_tokens | output_tokens |
| Messages | input_tokens에 cache_read_input_tokens와 보고된 cache_creation_input_tokens를 더한 값 | cache_read_input_tokens | output_tokens |
추론은 출력의 일부이며 추가 요금 항목이 아닙니다. Chat/Responses의 캐시된 입력은 전체 입력의 일부입니다. 일반 입력 요율을 적용하기 전에 별도로 보고된 캐시 부분을 차감합니다. 공개 응답에는 금액이 아닌 토큰 사용량이 표시됩니다. 현재 가격은 실시간 과금 설정에서 가져오며 실패한 요청에는 요금이 부과되지 않습니다.
검증 및 오류
잘못된 타입, 비활성화된 사고 기능, 미지원 추론 강도, 과도한 출력 예산과 미디어 입력은 검증에 실패합니다. Chat의 tool_stream에는 stream이 필요합니다. 지원하지 않는 최상위 필드는 전달하지 않고 생략합니다. 자격 증명은 필수이며 잔액이 부족하면 유료 요청을 진행할 수 없습니다. 오류는 공개 오류 구조를 사용하며 Messages는 네이티브 오류 구조를 사용합니다. 중단된 스트림을 완성된 답변으로 취급하거나 결과가 불확실한 요청을 자동으로 다시 제출하지 마세요.
Playground는 선택한 형식에서 허용하는 동일한 필드를 제공합니다. 비어 있는 선택 값은 생략하며 명시적인 false와 0은 보존합니다. 형식을 바꾸면 새 대화를 시작합니다. 사용량 추정에는 보고된 사용량과 현재 요율이 모두 필요합니다.
