Lỗi
Mã trạng thái HTTP và nội dung lỗi do API javinfo trả về.
Yêu cầu thất bại không bị tính phí. Bạn chỉ trả cho 200.
Mã trạng thái
| Trạng thái | Ý nghĩa |
|---|---|
400 | Yêu cầu không hợp lệ. Kiểm tra đầu vào thất bại (thiếu tham số, giá trị ngoài phạm vi, enum sai), yêu cầu /query hoặc /idols không có q lẫn bộ lọc, hoặc id nhà cung cấp không tồn tại. |
401 | Thiếu khóa API hoặc khóa không hợp lệ. |
402 | Không đủ tín dụng. Retry-After là một giờ, gợi ý cho máy khách tự động; nạp tiền là thông ngay. Xem thanh toán. |
404 | Không có kết quả. Do /movie, /random, /idols/{id}, /discover/similar, các tra cứu /analytics/idols/*, và /resolve, /resolve/provenance, /resolve/streams trả về. |
422 | Chỉ /query: không nhà cung cấp nào hỗ trợ tổ hợp lọc/sắp xếp đó, nhà cung cấp đã ghim thì không, hoặc bạn vượt trang 50 mà không có q. Xem Lọc. |
429 | Quá nhiều yêu cầu: giới hạn mỗi phút của tài khoản, hoặc hạn mức theo giờ của nhà cung cấp trực tiếp. Chờ hết Retry-After. |
503 | Nhà cung cấp đã ghim (providers=) vượt hạn mức theo giờ. Bỏ ghim, hoặc chờ hết Retry-After. |
499 | Máy khách đóng yêu cầu trước khi nhà cung cấp phản hồi. |
/query không bao giờ trả 404. Không khớp gì là 200 với count: 0 và mảng results
rỗng, không tốn phí — kiểm tra count. Tra cứu theo tên (/idols/{id},
/discover/similar, resolve) trả 404 khi thiếu mã hoặc diễn viên.
Nội dung lỗi
Lỗi từ handler dùng envelope oRPC: defined, code, status và message.
{
"defined": false,
"code": "NOT_FOUND",
"status": 404,
"message": "no title found for \"ZZZZ-99999\""
}400 thêm data.issues, một mục cho mỗi quy tắc thất bại:
{
"defined": false,
"code": "BAD_REQUEST",
"status": 400,
"message": "Input validation failed",
"data": {
"issues": [
{
"expected": "string",
"code": "invalid_type",
"path": ["q"],
"message": "Invalid input: expected string, received undefined"
}
]
}
}422: cùng envelope, status: 422, code: "BAD_REQUEST":
{
"defined": false,
"code": "BAD_REQUEST",
"status": 422,
"message": "does not support sort \"rating\""
}Yêu cầu bị chặn ở cổng, trước handler, thì ngắn hơn:
{ "error": "invalid api key" }Không có khóa nào thì yêu cầu qua cổng và bị handler từ chối với body UNAUTHORIZED:
{
"defined": false,
"code": "UNAUTHORIZED",
"status": 401,
"message": "Unauthorized"
}Bộ giới hạn mỗi phút cũng dùng dạng ngắn: { "error": "rate limit exceeded" }.
Đừng cho rằng code luôn có — rẽ nhánh theo mã trạng thái và đọc nội dung.
Chờ trước khi thử lại
429, 402 và 503 kèm Retry-After tính bằng giây. Tôn trọng nó:
if ([429, 402, 503].includes(res.status)) {
const wait = Number(res.headers.get('Retry-After') ?? 1);
await new Promise((r) => setTimeout(r, wait * 1000));
}Với 402, một giờ đó chỉ là gợi ý. Nếu có người theo dõi, nạp tiền và thử lại ngay.