Mã lỗi và giới hạn của API Gateway
Ý nghĩa các mã HTTP 400–504 từ API Gateway, mã lỗi chi tiết và cách xử lý khi hết credit, hết hạn mức hoặc chạm giới hạn.
Trên trang này
Khi một yêu cầu không thành công, API Gateway trả mã HTTP kèm thân JSON theo dạng OpenAI. Đọc trường code để biết chính xác nguyên nhân.
Định dạng lỗi
{
"error": {
"message": "Insufficient credit. Top up via VietQR at your dashboard billing page to continue using the API.",
"type": "billing_error",
"code": "insufficient_credit"
}
}message— mô tả bằng tiếng Anh.type— nhóm lỗi, ví dụauthentication_error,billing_error,permission_error.code— mã chi tiết, dùng để xử lý trong mã nguồn.
Thông báo lỗi từ nhà cung cấp phía sau được làm sạch trước khi trả về, nên bạn không thấy tên nhà cung cấp hay URL nội bộ.
Lỗi xác thực và quyền
| HTTP | code | Nguyên nhân | Cách xử lý |
|---|---|---|---|
| 401 | invalid_api_key | Thiếu khoá hoặc khoá không đúng | Kiểm tra header Authorization: Bearer hoặc x-api-key |
| 401 | api_key_revoked | Khoá đã bị thu hồi | Tạo khoá mới ở Khoá API |
| 403 | account_suspended | Tài khoản bị tạm khoá | Liên hệ hỗ trợ |
| 403 | model_not_allowed | Model không có trong gói hiện tại | Chọn model khác hoặc nâng gói |
| 403 | subscription_required_for_free_model | Model miễn phí cần gói thuê bao đang hoạt động | Mua gói ở API Gateway › Thanh toán |
Lỗi thanh toán
| HTTP | code | Nguyên nhân |
|---|---|---|
| 402 | insufficient_credit | Không có gói còn hạn và số dư credit bằng 0 |
| 402 | subscription_expired | Gói đã hết hạn và không còn credit |
Lỗi 402 kèm trường recovery_url trỏ tới trang thanh toán. Xem Sử dụng & thanh toán để nạp credit hoặc gia hạn.
Giới hạn và lỗi 429
API Gateway áp dụng các giới hạn sau:
- Ngân sách cửa sổ của gói — mỗi gói có ngân sách theo cửa sổ 5 giờ hoặc 24 giờ. Hết ngân sách, yêu cầu nhận
429mãplan_usage_window_limit; thông báo cho biết thời điểm đặt lại (Resets at …). - Giới hạn chi tiêu ngày/tháng — nếu bạn đặt mức chi tiêu tối đa, vượt mức nhận
429mãdaily_spending_limithoặcmonthly_spending_limit. - RPM — số yêu cầu mỗi phút theo gói, hiển thị ở dòng RPM trong thẻ Hạn mức gói.
- Số khoá — số khoá đang hoạt động tối đa theo gói. Tạo vượt mức nhận
403mãkey_limit_reached.
Bật Chuyển sang dùng credit khi hết hạn mức trong thẻ Hạn mức gói. Khi ngân sách cửa sổ hết, yêu cầu sẽ trừ vào số dư credit thay vì nhận 429.
Lỗi yêu cầu và máy chủ
| HTTP | Ý nghĩa thường gặp |
|---|---|
| 400 | JSON không hợp lệ, thiếu model (Missing model) hoặc định dạng model sai |
| 404 | Model không tồn tại hoặc hiện không có tuyến phục vụ |
| 406 | Model không hỗ trợ loại yêu cầu này |
| 500 | Lỗi nội bộ |
| 502 | Nhà cung cấp phía sau trả lỗi |
| 503 | Dịch vụ tạm thời không khả dụng, mọi tuyến của model đang bận hoặc lỗi |
| 504 | Hết thời gian chờ |
Với 503, hãy chạy Health Check ở API Gateway › Model để xem model có đang Không phản hồi không.
Xử lý lỗi trong ứng dụng
Phân loại theo mã HTTP
Không thử lại với 400, 401, 402, 403: lỗi sẽ lặp lại cho tới khi bạn sửa yêu cầu, khoá hoặc tài khoản.
Thử lại có giãn cách với 429 và 5xx
Đọc header
Retry-Afternếu có. Nếu không có, chờ tăng dần (1 giây, 2 giây, 4 giây…) và giới hạn số lần thử.Kiểm tra bảng điều khiển
Xem API Gateway › Tổng quan để biết hạn mức còn lại, và Sử dụng › Lịch sử để đối chiếu yêu cầu.
async function callWithRetry(fn: () => Promise<Response>, max = 4) {
for (let i = 0; ; i++) {
const res = await fn();
if (res.ok || i >= max || (res.status !== 429 && res.status < 500)) return res;
const wait = Number(res.headers.get("Retry-After")) || 2 ** i;
await new Promise((r) => setTimeout(r, wait * 1000));
}
}Thử lại liên tục không giúp được khi gặp plan_usage_window_limit. Hãy chờ tới thời điểm đặt lại, dùng Đặt lại hạn mức, hoặc bật dùng credit khi hết hạn mức.