오류와 제한
Markdown응답 코드의 의미와 해결 방법입니다. 모든 오류는 JSON으로 반환되며 Request ID를 포함합니다.
전체 가이드
오류 형식
호출한 API의 형식으로 오류를 반환합니다. 객체 error — OpenAI, {"type": "error", "error": {...}} — Anthropic 및 error — 다음 필드가 포함된 status 및 details — Gemini 형식입니다. 따라서 SDK는 일반 API 오류로 인식합니다.
error.code및error.reason— 아래 표의 오류 분류와 동일한 값입니다.error.type— 형식의 표준 값입니다(예:invalid_request_error또는server_error).error.request_id(Anthropic에서는request_id최상위 필드), 헤더X-Request-ID및 메시지 끝부분에 요청 식별자가 표시됩니다.- Gemini 오류 분류 필드:
error.details:ErrorInfo.reason— 동일 코드를 대문자로 표시합니다(예:MODEL_OVERLOADED),domain—ailoot.ai; 요청 식별자 필드:RequestInfo.requestId. - Gemini 형식에서 자동 재시도하면 안 되는 5xx 오류와
result_pending_check는 상태 409 및statusABORTED: Gemini SDK와 CLI의 자동 재시도를 방지합니다. 오류 분류 필드:ErrorInfo.reason(예:MODEL_TIMEOUT또는RESULT_PENDING_CHECK). - OpenAI 형식 응답에는 다음 최상위 필드도 있습니다:
code및message— 이전 클라이언트용입니다.
{
"code": "API_KEY_REQUIRED",
"error": {
"code": "invalid_api_key",
"message": "No API key was sent with the request. Nothing was charged. Please check that the full key is sent in the Authorization header as \"Bearer <key>\". Request ID: 3b28d3de-5b02-4d07-9f3c-4b9a7d0e68d6.",
"param": null,
"reason": "invalid_api_key",
"request_id": "3b28d3de-5b02-4d07-9f3c-4b9a7d0e68d6",
"type": "invalid_request_error"
},
"message": "No API key was sent with the request. Nothing was charged. …"
}{
"type": "error",
"error": {
"type": "authentication_error",
"code": "invalid_api_key",
"reason": "invalid_api_key",
"message": "… Nothing was charged. … Request ID: 94ed3e31-4373-41ce-bf8a-0d1ed3f7235e."
},
"request_id": "94ed3e31-4373-41ce-bf8a-0d1ed3f7235e"
}{
"error": {
"code": 401,
"status": "UNAUTHENTICATED",
"message": "The API key is not valid. Nothing was charged. … Request ID: e7aa743b-9d0d-4064-b206-2562609f545b.",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "INVALID_API_KEY",
"domain": "ailoot.ai",
"metadata": {
"code": "invalid_api_key",
"reason": "invalid_api_key",
"request_id": "e7aa743b-9d0d-4064-b206-2562609f545b"
}
},
{
"@type": "type.googleapis.com/google.rpc.RequestInfo",
"requestId": "e7aa743b-9d0d-4064-b206-2562609f545b"
}
]
}
}오류 코드
| HTTP | 분류(reason) | 발생한 문제 | 해결 방법 |
|---|---|---|---|
| 400 | invalid_request | 잘못된 요청: 본문 또는 매개변수 오류, 모델이 요청 필드·첨부·도구를 지원하지 않음, 주소로 키 전송 | 오류 메시지에 따라 요청을 수정하세요. 미지원 필드·첨부·도구를 제거하고 키는 헤더로 보내세요. 미지원 항목으로 인한 거부는 금액 예약 전에 발생하므로 아무 금액도 차감되지 않습니다 |
| 400 | context_length_exceeded | 요청이 모델 컨텍스트보다 김 | 대화 기록을 줄이거나 더 큰 컨텍스트의 모델을 선택하세요 |
| 400 | content_policy_violation | 모델 규칙에 의해 요청 거부 | 요청을 다시 작성하세요 |
| 401 | invalid_api_key | 키 누락 또는 잘못된 키 | 키가 완전하게 전달됐는지 확인하세요 |
| 401 | api_key_disabled | 키 비활성화 | 키를 활성화하거나 새 키를 만드세요 |
| 402 | insufficient_balance, insufficient_quota | 최소 예약액도 충당하지 못하는 가용 잔액(insufficient_quota — OpenAI SDK에 익숙한 형식으로 표시한 동일 상황) | 잔액을 충전하거나 max_tokens를 줄이세요 |
| 402 | api_key_quota_exhausted | 키 전체 지출 한도 소진 | 대시보드에서 키 한도를 늘리세요 |
| 402 | payment_disputed | 이의 제기된 결제로 인한 계정 채무 | 상환 전까지 새 요청이 중지됩니다. 지원팀에 문의하세요 |
| 403 | api_key_expired | 키 만료 | 새 키를 만드세요 |
| 403 | account_inactive | 계정 비활성화 | 지원팀에 문의하세요 |
| 403 | permission_denied | 키에 해당 요청이 허용되지 않음(예: IP 제한) | 키 제한을 확인하세요 |
| 404 | model_not_found | 존재하지 않는 모델 | /v1/models의 ID와 비교하세요 |
| 404 | unsupported_endpoint | 이 형식에서 모델이 작동하지 않음 | 다른 형식 또는 모델을 선택하세요 |
| 404 | not_found | 존재하지 않는 경로 또는 객체(예: 작업) | 주소와 식별자를 확인하세요 |
| 409 | duplicate_request | 동일 멱등성 키의 작업이 이미 접수됐으며 완료됐을 수 있음 | 첫 작업의 결과를 확인하고 새 작업을 보내지 마세요 |
| 409 | not_ready, video_not_ready | 영상 또는 기타 작업이 아직 준비되지 않음 | 나중에 상태를 조회하세요 |
| 409, 503 | result_pending_check | 요청 결과를 확인 중입니다. 영상 작업의 경우 다음 플래그가 result_pending_check: true 상태 응답에 있으며 작업 자체의 상태는 in_progress | 요청을 다시 보내지 마세요. 상태는 내역(GET https://ailoot.ai/api/v1/usage)에 표시됩니다. 영상 작업을 다시 만들지 말고 나중에 GET /v1/videos/{id}로 확인하세요 |
| 410 | model_retired | 모델 서비스 종료 | GET /v1/models에서 새 버전을 선택하세요 |
| 413 | request_too_large | 요청 본문이 너무 큼 | 파일 또는 대화 기록을 줄이세요 |
| 429 | rate_limit_exceeded, gateway_concurrency_limit, gateway_queue_full | 계정의 요청 또는 동시 요청이 너무 많음 | 다음 헤더의 시간만큼 기다리세요: Retry-After(보통 10초). 이후 다시 시도하세요 |
| 429 | usage_limit_reached | 키 지출 시간 창 소진(5시간, 1일 또는 7일) | 시간 창이 갱신될 때까지 기다리거나 키 한도를 늘리세요 |
| 500 | internal_error | Ailoot 오류 | Request ID와 함께 지원팀에 문의하세요 |
| 502 | invalid_model_response, empty_response, incomplete_response | 모델이 잘못되거나 비어 있거나 불완전한 응답을 반환함 | 계정 화면의 기록에서 Request ID를 찾으세요. 결과나 차감 내역이 있다면 재시도는 두 번째 유료 요청을 생성합니다. 기록이 없다는 사실만으로 요청이 전송되지 않았거나 실행되지 않았다고 확인할 수는 없습니다. 전송 여부가 불명확한 요청은 다시 보내지 말고 Request ID와 함께 고객 지원에 문의하세요. |
| 502 | result_not_delivered | Ailoot의 책임으로 결과가 전달되지 않아 예약액 또는 차감액 반환 | 요청을 다시 보낼 수 있습니다 |
| 503 | model_overloaded | 모델 일시 과부하 | X-Should-Retry: true이면 Retry-After초 뒤에 다시 시도하세요. false이면 먼저 내역에서 Request ID를 확인하세요 |
| 503 | model_unavailable | 모델 일시 이용 불가 | 다른 모델을 선택하세요. X-Should-Retry: true이면 Retry-After초 뒤에 다시 시도하고, false이면 먼저 내역에서 Request ID를 확인하세요 |
| 503 | service_unavailable | Ailoot 측 일시적 오류 | X-Should-Retry: true이면 Retry-After초 뒤에 다시 시도하세요. false이면 먼저 내역에서 Request ID를 확인하세요 |
| 503 | charge_not_confirmed | 차감 확인에 실패해 응답을 전달하지 못함. 예약액은 반환됐고 금액은 차감되지 않음 | X-Should-Retry: true이면 Retry-After초 뒤에 다시 시도하세요. false이면 먼저 내역에서 Request ID를 확인하세요 |
| 504 | model_timeout | 모델이 제시간에 응답하지 않았지만 결과가 나중에 나타날 수 있음 | 내역에서 Request ID를 확인하기 전에는 요청을 다시 보내지 마세요 |
모델 응답 및 결과 확인 코드(502, 503, 504)는 이제 모델 또는 요청을 가리킵니다: model_unavailable, model_timeout, invalid_model_response, incomplete_response, charge_not_confirmed 및 result_pending_check. 코드에서 error.code 를 이전 값과 비교한다면 표의 새 코드로 바꾸세요. 이전 코드와 새 코드의 대응 관계는 다음에서 안내합니다: 지원.
재시도 조건
- 먼저 X-Should-Retry를 확인하세요: 자동 재시도하지 말아야 할 조건은 다음과 같습니다 —
false,result_pending_check또는model_timeout— 첫 번째는 헤더 값이고, 나머지 두 개는 오류 유형입니다. 대시보드 내역에서 Request ID로 결과와 차감액을 확인하세요. - X-Should-Retry: true를 받은 경우 재시도가 안전합니다: 다음 값만큼 기다리세요:
Retry-After초. 5xx는 코드만으로 판단하면 안 됩니다. 결과가 이미 나왔을 수 있습니다. 대시보드 내역을 확인하거나 Request ID와 함께 지원팀에 문의하세요. 이미지, 영상, 음악 및 긴 에이전트 단계에서는 특히 중요합니다. - 재시도해도 해결되지 않는 코드: 400, 401, 402, 403, 404. 요청, 키 또는 잔액부터 수정하세요.
제한
호출 빈도와 동시 요청 수는 키별이 아니라 계정 전체에 적용됩니다. 초과하면 429 rate_limit_exceeded 헤더: Retry-After: 10. 모델 자체가 과부하 상태이면 503 model_overloaded 및 Retry-After: 30. 더 많은 부하가 필요하다면 다음으로 문의하세요: 지원팀.
지출 한도는 키에 설정합니다. 전체 한도 — 402 api_key_quota_exhausted, 5시간·1일·7일 시간 창 — 429 usage_limit_reached. 자세한 내용: 키와 API 주소.
NVIDIA 모델: 대기열
모델 목록은 잔액이 없어도 조회할 수 있습니다. 생성에는 예약 금액을 충당할 잔액이 필요합니다. NVIDIA 모델(Nemotron 등)은 공용 대기열을 사용합니다. 부하가 높으면 응답이 늦거나 Retry-After 헤더가 포함된 «모델 일시 과부하» 오류가 반환될 수 있습니다. 지정된 시간 뒤에 다시 시도하세요. 가격은 카탈로그에서 확인하며 차감은 다른 모델과 동일합니다.
크기 한도는 모델이 정합니다. 입력할 수 있는 토큰 수인 컨텍스트와 최대 응답 길이입니다. 확인 위치: 카탈로그.
내역과 비용
내역과 비용 · GET https://ailoot.ai/api/v1/usage · JWT · Authorization: Bearer $TOKEN
JWT ≠ sk-… · 로그인과 세션