콘텐츠로 이동

오류

모든 오류는 같은 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_request400invalid_request_error요청 형식이 올바르지 않거나 값이 허용 범위를 벗어났습니다. 유효한 값을 알 수 있는 경우 details.allowed에 담깁니다.
unauthorized401authentication_errorAPI 키가 없거나, 형식이 올바르지 않거나, 존재하지 않거나, 폐기되었거나, 만료되었습니다. 응답은 그중 어느 경우인지 알려 주지 않습니다.
balance_insufficient402insufficient_balance사용 가능한 잔액이 이 요청에 확보해야 하는 금액보다 적습니다. error.details.limit_source는 balance입니다.
key_limit_exceeded402insufficient_balance이 요청을 실행하면 API 키가 사용 한도를 넘게 됩니다. error.details.limit_source는 key이고, error.details.resets_at에 카운터가 다시 시작되는 시각이 담깁니다.
forbidden403permission_error접근이 거부되었습니다. 유효하지 않거나, 변경되었거나, 만료된 서명된 파일 URL에도 이 코드가 반환됩니다.
account_suspended403permission_error계정이 정지되어 이미지, 영상, 채팅 요청이 거부됩니다. 지원팀에 문의하세요. 잔액, 입금, API 키, 작업은 계속 사용할 수 있습니다.
not_found404not_found_error요청한 리소스가 없습니다.
model_not_found404not_found_error카탈로그에 없는 모델 ID입니다. 채팅 엔드포인트는 텍스트 모델이 아닌 모델에도 이 코드를 반환합니다.
method_not_allowed405invalid_request_error경로는 있지만 사용한 메서드를 지원하지 않습니다. Allow 헤더에 지원하는 메서드가 나옵니다. OPTIONS는 CORS 프리플라이트 요청에만 응답합니다.
idempotency_conflict409conflict_error같은 Idempotency-Key가 내용이 다른 요청에 이미 사용되었습니다.
payload_too_large413invalid_request_error요청 본문이 허용 크기를 초과했습니다. error.details.max_bytes가 허용 크기입니다.
content_policy_violation422content_policy_error모델 제공업체가 프롬프트, 참조 이미지 또는 생성된 출력을 그 내용을 이유로 거부했습니다. 이 요청에는 요금이 청구되지 않습니다.
rate_limited429rate_limit_error모델 제공업체가 요청을 제한하고 있습니다. POST /v1/reports는 같은 주소에서 신고가 너무 많이 들어올 때도 이 코드를 반환합니다. Retry-After 헤더에 표시된 시간이 지난 뒤 다시 시도하세요.
concurrency_limited429rate_limit_error모델 제공업체가 혼잡해 지금은 이 요청을 받을 수 없습니다. 계정의 작업 수에 대한 한도가 아닙니다. 나중에 다시 시도하세요.
internal_error500api_error당사 측에서 예기치 않은 오류가 발생했습니다.
upstream_error502upstream_error업스트림 제공사가 오류를 반환했습니다.
upstream_unavailable503overloaded_error업스트림 제공사의 용량이 일시적으로 부족합니다. 잠시 후 다시 시도하세요.
webhooks_unavailable503api_error이 환경에서는 아직 웹훅을 사용할 수 없습니다. 잠시 후 다시 시도하세요.