Skip to content
Bahasa: Bahasa Indonesia

API untuk developer

Format kesalahan API dan kode kesalahan

Diperbarui 1 November 2026 5 menit baca

Susunan respons kesalahan API LinkHarbor, arti kode kesalahan terpenting, dan bagaimana kode Anda sebaiknya menanggapinya.

Setiap respons kesalahan dari API punya format yang sama. Kode Anda sebaiknya mengandalkan kode kesalahan di kolom error, bukan teks di message – kodenya tetap stabil, sedangkan teksnya bisa berubah dan diterjemahkan ke bahasa akun.

Susunan respons kesalahan

Contoh: 422 validation_failed
{
  "error": "validation_failed",
  "message": "Some of the information provided is invalid. Please check and try again.",
  "details": [
    { "field": "title", "reason": "minLength", "message": "…" }
  ],
  "request_id": "6b1f0c2e-…"
}
error
Kode yang bisa dibaca mesin, misalnya not_found. Untuk sebagian besar kesalahan, kode ini juga ada di header X-Error-Code – tetapi andalkan kolom di body.
message
Deskripsi yang bisa dibaca manusia dalam bahasa akun: dengan kunci API, bahasa pemilik workspace, dengan aplikasi terhubung, bahasa orang yang menghubungkannya. Tanpa token yang valid – misalnya 401 dari pemeriksaan token – bahasanya mengikuti Accept-Language, jika tidak, bahasa Inggris. Header Content-Language menyebutkan bahasanya.
details
Hanya ada jika ada hal lain yang perlu disampaikan. Untuk 422 dari validasi isian, sebuah daftar dengan field, reason, dan message untuk setiap masalah; untuk 422 dari logika bisnis dan semua kesalahan lainnya, sebuah objek, misalnya dengan reason, retry_after_sec, atau daftar issues. Saat ukuran terlampaui, isinya field, reason, dan limit, dan untuk 413 request_too_large max_bytes dan max_kb. Jadi periksa apakah details berupa daftar.
request_id
ID permintaan. ID ini juga ada di header X-Request-Id. Sertakan saat Anda menghubungi dukungan.

Pengecualian: respons 429 rate_limited punya kolom retry_after_sec alih-alih details; pada 429 dan 403 insufficient_scope, request_id tidak ada di body. 401 dari pemeriksaan token dan 422 dari pemeriksaan skema tidak punya header X-Error-Code, dan pada pemeriksaan skema hanya message tingkat atas yang diterjemahkan; teks di dalam details tetap dalam bahasa Inggris. Header X-Request-Id selalu disetel.

Kode-kode terpenting

HTTPerrorArtiYang harus dilakukan
400invalid_jsonBody bukan JSON yang validPeriksa JSON-nya
400bad_requestContent-Type salah atau permintaan cacatSetel Content-Type: application/json
401missing_bearer_tokenTidak ada token di header AuthorizationSetel header Authorization: Bearer …
401invalid_tokenToken kedaluwarsa atau tidak valid, atau kunci dihapusAmbil token baru; jika tidak membantu, periksa kuncinya
401invalid_api_keyID kunci atau rahasia salah saat penukaran tokenPeriksa data aksesnya
402plan_limit_reachedBatas paket tercapai, misalnya untuk tautan pendekUpgrade atau hapus entri
403insufficient_scopeScope tidak ada atau endpoint tidak diaktifkan untuk kunci APIBuat kunci dengan scope yang tepat
403forbiddenTidak ada izin untuk tindakan iniLakukan di dasbor
403feature_not_availableFitur tidak termasuk dalam paketPeriksa paketnya
403block_type_requires_planJenis blok hanya tersedia di paket yang lebih tinggiPilih jenis blok lain atau upgrade
403template_lockedTemplat premium tidak tersedia di paket saat iniPilih templat dari GET /v1/templates/available
403workspace_suspended, workspace_read_only, workspace_grace_expiredWorkspace terkunci atau hanya baca karena pembayaran tertunggakSelesaikan pembayaran di dasbor
404not_foundResource tidak ada atau bukan milik workspace AndaPeriksa ID-nya
409conflictKonflik umum dengan keadaan saat iniMuat ulang keadaannya, ubah isiannya
409workspace_template_in_useTemplat workspace masih dipakai oleh halaman; jumlahnya ada di details.countGanti templat halaman-halaman itu, lalu hapus
409handle_taken, slug_takenHandle atau slug tautan pendek sudah dipakaiPilih nilai lain
409form_in_use, page_not_private, page_not_published, never_publishedKonflik dengan keadaan: formulir masih di sebuah halaman, halaman tidak privat atau belum dipublikasikan, belum pernah dipublikasikanUbah keadaannya, lalu coba lagi
409page_limit_reached, link_limit_reached, block_limit_reached, form_limit_reached, asset_limit_reached, asset_storage_limit_reached, workspace_template_limit_reachedBatas jumlah atau penyimpanan paket tercapaiHapus entri atau upgrade
409draft_not_publishableDraf punya masalah; daftarnya ada di details.issuesPerbaiki masalahnya, lalu publikasikan lagi
413request_too_largeBody lebih besar dari yang diizinkan untuk endpoint ini (64 KB, 1 MB, atau 2 MB); batasnya ada di details.max_kbKirim lebih sedikit data per permintaan, lihat Rate limit
413payload_too_largeFile yang diunggah lebih dari 10 MBPerkecil filenya
422validation_failedIsian tidak valid atau kolom tidak dikenal; rinciannya di detailsPerbaiki kolom-kolomnya sesuai details
422handle_reserved, target_url_invalid, target_url_scheme, target_url_hostHandle dicadangkan, atau URL tujuan tidak valid atau tidak diizinkanPilih nilai lain
422workspace_template_disabledTemplat workspace yang dipilih dinonaktifkanAktifkan templat di “Domain & templat” atau pilih yang lain
422template_css_external, template_section_invalidTemplat workspace: CSS memuat dari server eksternal, atau bagian {{#if}}/{{#unless}}/{{#each}} ditempatkan salahHapus alamat eksternal, atau tutup bagian itu di dalam tag atau teks yang sama
422custom_css_externalCSS kustom memuat sesuatu dari server eksternalHapus alamat eksternal dari CSS
429rate_limited, api_key_lockedTerlalu banyak permintaan, atau kunci dikunci setelah percobaan gagalTunggu selama yang disebutkan Retry-After atau details.retry_after_sec
500internal_errorKesalahan yang tidak terdugaCoba lagi nanti, catat request_id-nya
503service_unavailableLayanan sementara tidak tersediaCoba lagi setelah jeda

Membaca kesalahan isian

Dengan 422 validation_failed, details mencantumkan setiap masalah secara terpisah: field adalah path kolomnya (dengan garis miring untuk objek bersarang, misalnya theme_config/button_style), reason adalah aturan yang dilanggar, seperti required, minLength, maxLength, enum, atau additionalProperties. Dengan additionalProperties, pesannya menyebutkan kolom mana yang tidak dikenal – sering kali salah ketik pada nama kolom.

Penanganan yang disarankan di kode Anda

  • 400, 413, dan 422: jangan ulangi, perbaiki permintaannya
  • 401 invalid_token: ambil token baru sekali lalu ulangi
  • 403: jangan ulangi; periksa scope, paket, atau siapa yang boleh melakukannya
  • 404: periksa ID-nya; setelah penghapusan, ini normal
  • 409: muat ulang keadaannya dan putuskan apakah tindakan itu masih diperlukan
  • 429: tunggu selama yang disebutkan Retry-After, lalu ulangi – lihat Rate limit
  • 500 dan 503: ulangi beberapa kali dengan jeda yang makin lama

Tidak menemukan jawabannya?

Beri tahu kami apa yang Anda perlukan, dan tim dukungan kami akan membantu Anda secara langsung.

Hubungi dukungan