RoomScope

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}
FieldTipeArti
codestringPengenal stabil yang dapat dibaca mesin, dalam format snake_case. Tentukan alur berdasarkan field ini, jangan pernah berdasarkan message.
messagestringPenjelasan yang dapat dibaca manusia, dalam bahasa Inggris. Aman ditampilkan kepada operator; susunan katanya bisa berubah.
requestIdstringUUID permintaan, dibuat oleh server. Sertakan saat Anda menghubungi dukungan; hanya dengan ini kami dapat menemukan permintaan tersebut di log kami.
retryablebooleantrue 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.

StatusKodeKapanBisa dicoba ulang
400validation_errorBody atau salah satu parameter tidak valid. Pesan error menyebutkan field-nya.tidak
400invalid_rankings_inputPeringkat: board tidak ada, nilai lebih dari 128 karakter, atau limit, leagueTier, period, atau liveOnly tidak valid.tidak
400invalid_cursor · invalid_region · invalid_trend_typeCursor, region (dua huruf pada insights), atau jenis tren yang tidak diterima endpoint.tidak
400invalid_live_history_input · invalid_alert_input · invalid_dataset · invalid_formatError input khusus endpoint; pesannya menjelaskan apa yang perlu diperbaiki.tidak
401unauthorizedKey tidak ada, formatnya salah, tidak dikenal, sudah dicabut atau kedaluwarsa, atau workspace tidak aktif. Dikirim dengan WWW-Authenticate: Bearer.tidak
402credit_cap_exceededPermintaan ini akan membuat pemakaian periode berjalan melewati batas kredit.tidak
403insufficient_scopeKey tidak memiliki scope tersebut, atau route-nya khusus dashboard.tidak
403module_not_entitledPaket workspace tidak mencakup modul LIVE atau Pencarian.tidak
403export_format_not_entitledPaket tidak mencakup format ekspor tersebut.tidak
404not_foundTidak ada route yang cocok dengan method dan path.tidak
404creator_not_found · video_not_found · live_session_not_found · alert_not_found · export_not_foundResource tidak ada atau milik workspace lain.tidak
409export_not_ready · api_key_limit_reachedEkspor masih dibuat, atau batas jumlah key pada paket sudah tercapai.tidak
429rate_limit_exceededKey melewati batas permintaan per detik. Patuhi Retry-After.ya
429daily_quota_exceededKey sudah memakai kuota hariannya. Retry-After menghitung mundur hingga tengah malam UTC.ya
503rate_limit_unavailable · metering_unavailable · webhook_unavailableSebuah dependensi sedang down. Coba ulang dengan backoff.ya
500internal_errorTerjadi kegagalan di sisi kami. Coba ulang dengan backoff; sertakan requestId saat Anda melaporkannya.ya

Bukan error

  • region yang tidak dikenal atau tidak tercakup pada peringkat bukan error: jawabannya 200 dengan publishable: false, daftar entries kosong, dan provenance yang menjelaskan alasannya.
  • Following, pengikut, dan komentar yang sedang dikumpulkan menjawab 202 dengan status: "collecting", sebuah jobId, dan header Retry-After. Panggil lagi setelah jumlah detik tersebut.

Batas laju punya halaman sendiri: Batas laju.

Apakah halaman ini membantu?