Terakhir diperbarui
Error
Setiap respons non-2xx adalah amplop JSON dengan empat field yang sama. Tentukan alur berdasarkan code, tampilkan message kepada manusia, catat requestId di log, dan coba ulang hanya jika retryable bernilai true.
Amplop error
429 Too Many Requests
{ "code": "rate_limit_exceeded", "message": "API key rate limit exceeded.", "requestId": "3f2b6c1e-8a4d-4f0e-9b7a-2d5c1e6f8a90", "retryable": true}| Field | Tipe | Arti |
|---|---|---|
code | string | Pengenal stabil yang dapat dibaca mesin, dalam format snake_case. Tentukan alur berdasarkan field ini, jangan pernah berdasarkan message. |
message | string | Penjelasan yang dapat dibaca manusia, dalam bahasa Inggris. Aman ditampilkan kepada operator; susunan katanya bisa berubah. |
requestId | string | UUID permintaan, dibuat oleh server. Sertakan saat Anda menghubungi dukungan; hanya dengan ini kami dapat menemukan permintaan tersebut di log kami. |
retryable | boolean | true jika permintaan yang sama dapat berhasil nanti tanpa perubahan (batas laju, kegagalan sementara). Selain itu, Anda perlu mengirim permintaan yang berbeda. |
Kode status tetap penting
Status HTTP adalah kelas kasarnya (4xx di sisi Anda, 5xx di sisi kami);
code adalah alasan rincinya. Klien yang hanya melihat status kehilangan perbedaan antara scope yang kurang dan paket yang tidak memiliki modulnya (keduanya 403).Menangani error
Pola di bawah ini adalah yang dipakai dashboard RoomScope sendiri: parse amplopnya, gunakan http_error sebagai cadangan jika body bukan JSON, dan coba ulang dengan exponential backoff hanya jika server menandai error tersebut dapat dicoba ulang.
class ApiError extends Error { constructor(status, { code, message, requestId, retryable }) { super(message); Object.assign(this, { status, code, requestId, retryable: Boolean(retryable) }); }} async function call(path, init) { const res = await fetch(`https://api.toktokdata.live${path}`, init); if (res.ok) return res.status === 204 ? undefined : res.json(); let envelope = {}; try { envelope = await res.json(); } catch {} throw new ApiError(res.status, { code: "http_error", message: `Request failed (${res.status})`, ...envelope });} // Retry only when the server says so.async function withRetry(fn, attempts = 3) { for (let i = 0; ; i++) { try { return await fn(); } catch (e) { if (!(e instanceof ApiError) || !e.retryable || i === attempts - 1) throw e; await new Promise((r) => setTimeout(r, 500 * 2 ** i)); } }}Kode berdasarkan status
Kode bersifat stabil; kode baru bisa ditambahkan, jadi tangani kode yang tidak dikenal berdasarkan statusnya. Setiap endpoint di referensi mencantumkan kode yang dapat dikembalikannya.
| Status | Kode | Kapan | Bisa dicoba ulang |
|---|---|---|---|
| 400 | validation_error | Body atau salah satu parameter tidak valid. Pesan error menyebutkan field-nya. | tidak |
| 400 | invalid_rankings_input | Peringkat: board tidak ada, nilai lebih dari 128 karakter, atau limit, leagueTier, period, atau liveOnly tidak valid. | tidak |
| 400 | invalid_cursor · invalid_region · invalid_trend_type | Cursor, region (dua huruf pada insights), atau jenis tren yang tidak diterima endpoint. | tidak |
| 400 | invalid_live_history_input · invalid_alert_input · invalid_dataset · invalid_format | Error input khusus endpoint; pesannya menjelaskan apa yang perlu diperbaiki. | tidak |
| 401 | unauthorized | Key tidak ada, formatnya salah, tidak dikenal, sudah dicabut atau kedaluwarsa, atau workspace tidak aktif. Dikirim dengan WWW-Authenticate: Bearer. | tidak |
| 402 | credit_cap_exceeded | Permintaan ini akan membuat pemakaian periode berjalan melewati batas kredit. | tidak |
| 403 | insufficient_scope | Key tidak memiliki scope tersebut, atau route-nya khusus dashboard. | tidak |
| 403 | module_not_entitled | Paket workspace tidak mencakup modul LIVE atau Pencarian. | tidak |
| 403 | export_format_not_entitled | Paket tidak mencakup format ekspor tersebut. | tidak |
| 404 | not_found | Tidak ada route yang cocok dengan method dan path. | tidak |
| 404 | creator_not_found · video_not_found · live_session_not_found · alert_not_found · export_not_found | Resource tidak ada atau milik workspace lain. | tidak |
| 409 | export_not_ready · api_key_limit_reached | Ekspor masih dibuat, atau batas jumlah key pada paket sudah tercapai. | tidak |
| 429 | rate_limit_exceeded | Key melewati batas permintaan per detik. Patuhi Retry-After. | ya |
| 429 | daily_quota_exceeded | Key sudah memakai kuota hariannya. Retry-After menghitung mundur hingga tengah malam UTC. | ya |
| 503 | rate_limit_unavailable · metering_unavailable · webhook_unavailable | Sebuah dependensi sedang down. Coba ulang dengan backoff. | ya |
| 500 | internal_error | Terjadi kegagalan di sisi kami. Coba ulang dengan backoff; sertakan requestId saat Anda melaporkannya. | ya |
Bukan error
regionyang tidak dikenal atau tidak tercakup pada peringkat bukan error: jawabannya200denganpublishable: false, daftarentrieskosong, danprovenanceyang menjelaskan alasannya.- Following, pengikut, dan komentar yang sedang dikumpulkan menjawab
202denganstatus: "collecting", sebuahjobId, dan headerRetry-After. Panggil lagi setelah jumlah detik tersebut.
Batas laju punya halaman sendiri: Batas laju.
Apakah halaman ini membantu?