모든 오류는 같은 JSON 본문을 사용합니다. 실패한 요청을 HTTP 200으로 반환하는 일은 없습니다. 오류가 200 응답 안에 들어가는 두 가지 경우는 응답 안의 오류에서 설명합니다.
{ "error": { "message": "Model \"example/unknown\" was not found.", "type": "not_found_error", "code": "model_not_found", "param": "model", "request_id": "req_0123456789abcdef0123456789abcdef", "doc_url": "https://example.com/docs/errors/#model_not_found" }}message: 사람이 읽는 짧은 설명입니다.type: 오류 분류입니다.code: 프로그램이 사용하는 안정적인 식별자입니다. 분기에는message가 아니라code를 사용하세요.param: 오류의 원인이 된 요청 파라미터이며, 없으면null입니다.request_id: 요청의 ID입니다. 지원을 요청할 때 함께 알려 주세요.doc_url: 이 페이지에서 해당 코드 항목으로 연결되는 링크입니다.details: 선택적인 기계 판독용 보충 정보입니다. 필드는 오류에 따라 다릅니다.- 허용 값이 정해져 있는 필드에서는
details.allowed에 허용되는 값이 나열됩니다. - 숫자가 범위를 벗어나면
details.minimum과details.maximum에 허용 범위가 담깁니다. 402에서는details.limit_source가balance또는key입니다. 나머지 필드에는 금액이 담기며, 키의 한도라면 기간과details.resets_at도 담깁니다. 잔액과 API 키 사용 한도를 참고하세요.- 사용할 수 없는 참조 이미지 URL에서는
details.reason에 그 이유가 담깁니다. - 데이터 URI로 보낸 참조 이미지가 너무 크면
details.max_bytes가 허용 크기입니다. payload_too_large에서는details.max_bytes가 허용 크기입니다.- 작업을 기다리던 요청이 그 작업의 실패로 실패하면
details.job_id가 작업의 ID입니다. - 이미 끝난 작업을 취소하거나 파일이 없는 영상을 다운로드하는 것처럼 요청이 작업의 상태에 좌우되는 경우에는
details.status가 작업의 상태입니다.
- 허용 값이 정해져 있는 필드에서는
응답 안의 오류
섹션 제목: “응답 안의 오류”오류를 200 응답 안에 담아 보고하는 경우는 두 가지입니다.
- 시작된 뒤에 실패하는 스트리밍 채팅 응답. 오류는 스트림 안의 이벤트로 도착합니다. 채팅을 참고하세요.
- 실패한 작업. 작업을 읽으면
200이 반환되고, 작업의error필드에 오류 응답과 같은 필드가 담깁니다. 작업을 참고하세요.
Anthropic 엔드포인트의 오류 형식
섹션 제목: “Anthropic 엔드포인트의 오류 형식”POST /v1/messages는 모든 오류를 Anthropic 형식으로 반환합니다. type은 error이고, 오류는 error에 들어 있으며, request_id는 최상위 필드입니다. 코드와 HTTP 상태는 아래 표와 같습니다. 채팅을 참고하세요.
오류 코드
섹션 제목: “오류 코드”각 코드는 자신의 행으로 연결되므로, doc_url의 앵커(#<code>)로 해당 항목이 열립니다.
| 코드 | HTTP 상태 | 유형 | 설명 |
|---|---|---|---|
invalid_request | 400 | invalid_request_error | 요청 형식이 올바르지 않거나 값이 허용 범위를 벗어났습니다. 유효한 값을 알 수 있는 경우 details.allowed에 담깁니다. |
unauthorized | 401 | authentication_error | API 키가 없거나, 형식이 올바르지 않거나, 존재하지 않거나, 폐기되었거나, 만료되었습니다. 응답은 그중 어느 경우인지 알려 주지 않습니다. |
balance_insufficient | 402 | insufficient_balance | 사용 가능한 잔액이 이 요청에 확보해야 하는 금액보다 적습니다. error.details.limit_source는 balance입니다. |
key_limit_exceeded | 402 | insufficient_balance | 이 요청을 실행하면 API 키가 사용 한도를 넘게 됩니다. error.details.limit_source는 key이고, error.details.resets_at에 카운터가 다시 시작되는 시각이 담깁니다. |
forbidden | 403 | permission_error | 접근이 거부되었습니다. 유효하지 않거나, 변경되었거나, 만료된 서명된 파일 URL에도 이 코드가 반환됩니다. |
account_suspended | 403 | permission_error | 계정이 정지되어 이미지, 영상, 채팅 요청이 거부됩니다. 지원팀에 문의하세요. 잔액, 입금, API 키, 작업은 계속 사용할 수 있습니다. |
not_found | 404 | not_found_error | 요청한 리소스가 없습니다. |
model_not_found | 404 | not_found_error | 카탈로그에 없는 모델 ID입니다. 채팅 엔드포인트는 텍스트 모델이 아닌 모델에도 이 코드를 반환합니다. |
method_not_allowed | 405 | invalid_request_error | 경로는 있지만 사용한 메서드를 지원하지 않습니다. Allow 헤더에 지원하는 메서드가 나옵니다. OPTIONS는 CORS 프리플라이트 요청에만 응답합니다. |
idempotency_conflict | 409 | conflict_error | 같은 Idempotency-Key가 내용이 다른 요청에 이미 사용되었습니다. |
payload_too_large | 413 | invalid_request_error | 요청 본문이 허용 크기를 초과했습니다. error.details.max_bytes가 허용 크기입니다. |
content_policy_violation | 422 | content_policy_error | 모델 제공업체가 프롬프트, 참조 이미지 또는 생성된 출력을 그 내용을 이유로 거부했습니다. 이 요청에는 요금이 청구되지 않습니다. |
rate_limited | 429 | rate_limit_error | 모델 제공업체가 요청을 제한하고 있습니다. POST /v1/reports는 같은 주소에서 신고가 너무 많이 들어올 때도 이 코드를 반환합니다. Retry-After 헤더에 표시된 시간이 지난 뒤 다시 시도하세요. |
concurrency_limited | 429 | rate_limit_error | 모델 제공업체가 혼잡해 지금은 이 요청을 받을 수 없습니다. 계정의 작업 수에 대한 한도가 아닙니다. 나중에 다시 시도하세요. |
internal_error | 500 | api_error | 당사 측에서 예기치 않은 오류가 발생했습니다. |
upstream_error | 502 | upstream_error | 업스트림 제공사가 오류를 반환했습니다. |
upstream_unavailable | 503 | overloaded_error | 업스트림 제공사의 용량이 일시적으로 부족합니다. 잠시 후 다시 시도하세요. |
webhooks_unavailable | 503 | api_error | 이 환경에서는 아직 웹훅을 사용할 수 없습니다. 잠시 후 다시 시도하세요. |
모든 가격은 USD 기준이며, 표시 가격에는 당사의 마진이 포함되어 있습니다.