오류와 지출

오류 봉투, 코드, 체리와 요청 한도입니다.

오류 봉투

모든 오류 응답은 같은 모양이고, 응답 헤더 X-Request-Id가 본문의 requestId와 같습니다. 문의할 때 이 값을 함께 알려 주세요.
오류 봉투 — json
{ "error": { "code": "RATE_LIMITED", "message": "...", "requestId": "...", "details": { "limit_kind": "surface_read", "retry_after_seconds": 30 } } }
message는 사람이 읽는 문장이고 바뀔 수 있습니다. 코드 분기는 error.code와 details로 하세요.

코드와 상태

공개 REST가 쓰는 코드와 HTTP 상태입니다.
상태코드뜻해야 할 일
400INVALID_INPUT본문이 틀림, 모르는 필드, 지원하지 않는 옵션 값, 견적이 maxCherry보다 큼, 멱등 키 헤더와 본문이 다름메시지의 필드 경로와 가능한 값을 보고 고칩니다.
401UNAUTHORIZED키가 틀림, 만료, 폐기, 권한 부족, 인증 헤더 두 개새 키를 만들고 허용한 기능을 확인합니다.
402INSUFFICIENT_CHERRY잔액 부족충전한 뒤 같은 요청을 다시 보냅니다.
403FORBIDDEN연령 확인 전, 또는 문서 편집 권한 없음(영상)앱에서 연령 확인을 마치거나 문서 권한을 받습니다.
404NOT_FOUND없는 작업, 남의 작업, 접근할 수 없는 문서id와 계정을 확인합니다.
409CONFLICT같은 멱등 키에 다른 본문, 이미 시작돼 취소할 수 없음, 종결된 요청의 키 재사용, 문서가 바뀜(영상)details의 사유를 봅니다.
422PRICE_UNPUBLISHED가격을 확정할 수 없는 영상 모델·옵션 조합다른 모델이나 옵션을 고릅니다.
429RATE_LIMITED호출 한도 또는 동시·시간당 접수 한도details.limit_kind를 보고 기다립니다.
429SPEND_LIMIT_EXCEEDED키의 기간 지출 한도 초과한도를 올리거나 다른 키를 쓰거나 리셋을 기다립니다.
500INTERNAL서버 오류requestId와 함께 문의합니다.
503UNAVAILABLE제공자나 환율이 지금 준비되지 않음잠시 뒤 같은 요청을 다시 보냅니다.
계약 코드 목록에는 POLICY_REACCEPTANCE_REQUIRED(409)도 있습니다. 결제 전 약관 재동의용이고 생성 경로는 이 코드를 내지 않습니다.

세부 정보

details는 코드에 따라 다음 값을 담습니다.
키어떤 오류에뜻
required_cherry, balance_cherry잔액 부족필요한 체리와 지금 쓸 수 있는 체리
required_cherry400(상한 초과), 키 지출 한도서버가 계산한 견적
limit_kind, retry_after_seconds속도 제한걸린 한도와 기다릴 초
spend_limit_cherry, spent_cherry, spend_period, retry_after_seconds키 지출 한도한도, 이 기간에 쓴 양, 기간(day, month), 리셋까지 남은 초
price_reason가격 미공표가격을 확정하지 못한 사유
conflict_reason409idempotency_key_reused: 같은 키를 다른 본문에 씀
cancel_reason409already_started: 이미 시작돼 취소할 수 없음
limit_kind 값은 다음과 같습니다.
값뜻기다리면 풀리나
surface_read, surface_write키의 시간당 읽기·쓰기 호출 한도예. Retry-After 뒤
video_hourly영상 시간당 접수 한도(60)예
image_active, video_active, audio_active동시에 진행 중인 작업 수 한도작업이 끝나면 풀립니다. 기다릴 초는 오지 않습니다
image_daily하루 이미지 접수 한도(10)다음 날
price_reason 값은 no_sku_published, token_rate_unpublished, megapixel_basis_required, sku_unrecognized, invalid_sku_value, no_matching_sku, ambiguous_input_pricing, invalid_axes입니다.

접수 단계의 오류

상황응답해야 할 일
본문 필드가 틀림, 모르는 필드400 INVALID_INPUT메시지의 필드 경로를 고칩니다.
모델이 지원하지 않는 옵션 값400 INVALID_INPUT메시지가 알려 주는 가능한 값 중에서 고릅니다.
모르는 모델 id400 INVALID_INPUT모델 목록 경로로 id를 확인합니다.
견적이 maxCherry보다 큼400 INVALID_INPUTrequired_cherry를 보고 상한을 올리거나 옵션을 줄입니다.
이미지 가격이 확정되지 않는 조합400 INVALID_INPUT다른 모델이나 옵션을 고릅니다.
영상 가격이 확정되지 않는 조합422 PRICE_UNPUBLISHEDprice_reason을 보고 다른 모델이나 옵션을 고릅니다.
허용되지 않는 프롬프트400 INVALID_INPUT프롬프트를 고칩니다. 이 경우 체리는 쓰이지 않습니다.
초안이 있는데 draftJobId 없이 본 생성400 INVALID_INPUT메시지의 초안 작업 id를 draftJobId로 보냅니다.
키가 틀림, 만료, 폐기, 권한 부족401 UNAUTHORIZED새 키를 만들고 권한을 확인합니다.
잔액 부족402 INSUFFICIENT_CHERRY충전한 뒤 같은 요청을 다시 보냅니다.
같은 키, 다른 본문409 CONFLICT같은 요청이면 본문을 똑같이, 새 요청이면 새 키를 씁니다.
동시 작업 한도429 RATE_LIMITED진행 중인 작업이 끝난 뒤 같은 키로 다시 보냅니다.

읽기 단계의 오류

없는 작업, 남의 작업은 모두 404입니다. 존재 여부를 구분해 알려 주지 않습니다. 목록의 limit이나 status가 틀리면 400입니다.

작업이 실패로 끝날 때

접수가 202여도 작업은 실패할 수 있습니다. 조회 응답의 상태가 failed이면 이미지는 error, 영상과 오디오는 failure를 봅니다. 둘 다 code, message, retryable을 담습니다.
종류code 값
이미지canceled, hold_pending, intent_exhausted, capability_unsupported, prompt_rejected, provider_failed, generation_failed, processing_timeout, render_interrupted, title_layer_not_transparent
영상canceled, capability_unsupported, provider_rejected, provider_failed, provider_settlement_invalid, processing_timeout, result_ingest_failed, result_invalid, input_asset_unavailable, submit_interrupted, generation_failed
오디오canceled, capability_unsupported, provider_rejected, provider_failed, processing_timeout, result_ingest_failed, generation_failed
환불 규칙은 세 종류가 같습니다.
  • 사용자 입력이 원인인 prompt_rejected와 capability_unsupported는 환불되지 않고 과금이 유지됩니다.
  • 그 밖의 실패는 제공자나 시스템 원인이라 전액 환불됩니다.
  • 취소(canceled)는 전액 환불됩니다.
  • 영상은 billing.status(pending, charged, refunded, not_billable, quarantined)로, 오디오는 billing.status(pending, charged, refunded, not_billable)로 정산 상태를 확인합니다.
접수 뒤 영상은 45분, 오디오는 10분 안에 끝나지 않으면 processing_timeout으로 닫히고 환불됩니다. 이미지도 제공자가 받은 뒤 45분을 넘기면 같은 코드로 닫힙니다.

체리와 지출

  • 접수하면 견적 금액이 보류됩니다. 견적과 보류 금액은 같은 계산입니다.
  • 작업이 끝나면 정산되고, 실패나 취소면 환불됩니다.
  • 키에 지출 한도를 걸면 기간(UTC 하루 또는 한 달) 안에 보류한 합계(환불 제외)가 한도를 넘는 요청이 거절됩니다. 거절되면 작업이 만들어지지 않습니다.
  • 사용량은 설정의 개발자 사용량 화면에서 일, 키, 모델별로 봅니다.

요청 한도

시간당 호출 수는 기능마다 다르고 읽기가 쓰기의 10배입니다. 표는 API 레퍼런스의 요청 한도 절에 있습니다. 개인 키로 부른 모든 응답에는 다음 헤더가 붙습니다.
헤더뜻
X-RateLimit-Limit이 버킷의 시간당 한도
X-RateLimit-Remaining남은 호출 수
X-RateLimit-Reset리셋까지 남은 초
Retry-After429에서만. 다시 보내도 되는 때까지 남은 초
한도 초과는 429 RATE_LIMITED이고 Retry-After 뒤에 다시 보냅니다. 키 지출 한도 초과도 429이지만 코드가 SPEND_LIMIT_EXCEEDED입니다. 두 경우를 error.code로 구분하세요. 동시 작업 한도(image_active 등)는 기다릴 초를 주지 않으니 진행 중인 작업을 기다린 뒤 다시 보냅니다.

웹훅 전달 실패

알림이 가지 않는다고 작업이 실패한 것은 아닙니다. 작업은 조회로 확인합니다. 전달 상태와 다시 보내기는 웹훅을 보세요.

도움 받기

요청 id와 시각, 작업 id를 함께 알려 주세요. 키 값은 보내지 마세요.

관련