Error API — Arti Setiap Kode dan Cara Memperbaikinya
FastOG mengembalikan kode error yang dapat dibaca mesin saat sebuah permintaan gagal — render OG image yang ditandatangani, atau panggilan ke salah satu permukaan admin di dalam produk. Setiap respons error menyertakan:
error— token pendek lama. Tetap ada pada setiap kegagalan agar klien lama tetap berfungsi.code— kode error stabil dan terdokumentasi yang sama (tabel di bawah), dengan nama yang digunakan API publik.message— deskripsi satu kalimat tentang apa yang salah.hint— deskripsi singkat dalam bahasa sederhana tentang apa yang salah dan cara memperbaikinya.docs_url— tautan ke halaman ini, berjangkar pada bagian untuk kode tersebut.request_id— mengorelasikan kegagalan HTTP ini ke sebuah baris di tabel Render Logs pada dashboard (juga dikembalikan dalam header responsX-Request-ID). Permukaan yang tidak memiliki apa pun untuk dikorelasikan menjawabnull, tetapi key tersebut selalu ada.
Permukaan di dalam produk — admin Shopify, WooCommerce Studio, jembatan Wix, dan demo — menjawab
dengan envelope yang sama untuk kode-kode di bawah, sehingga sebuah kegagalan berarti hal yang sama di mana pun Anda menjumpainya. Permukaan modul dapat mempertahankan status HTTP yang selalu dikembalikannya untuk sebuah kode (misalnya render_failed
menjawab 503 pada ekspor cover dan 502 pada API publik); kode, pesan, hint, dan tautan docs tidak berubah.
Membaca respons error
{
"error": "invalid_signature",
"code": "invalid_signature",
"message": "The signature does not match.",
"hint": "The signature did not match. Re-sign with your HMAC secret after every param change.",
"request_id": "5f2a9c1e-..."
}
Jika Anda menerima respons yang tidak dipahami, jalur tercepat adalah:
- Catat
code. - Periksa pembangun URL Anda — sebagian besar kegagalan adalah bug penandatanganan (signing), bukan masalah akun.
- Cocokkan kode di bawah ini untuk penyebab dan perbaikan yang tepat.
- Di dashboard, buka Render Logs dan filter dengan
error_codeyang sama — setiap baris menampilkan parameter yang diminta sehingga Anda dapat mereproduksi (dan memastikanrequest_idcocok).
Penandatanganan & autentikasi
missing_signature
Permintaan Anda tidak menyertakan parameter kueri key dan/atau s (signature).
Perbaikan: pastikan URL Anda menyertakan key=<api-key> dan s=<hmac-signature>. Gunakan SDK atau panduan /docs/hmac-signature-guide untuk membangunnya.
invalid_signature
Nilai s tidak cocok dengan yang dihasilkan oleh secret HMAC Anda untuk URL ini.
Perbaikan: signature mencakup setiap parameter kueri kecuali s, dengan kunci yang diurutkan. Mengubah parameter apa pun — termasuk mengubah urutan, perbedaan pengodean URL, atau menambahkan spasi — akan membatalkan signature. Tandatangani ulang setelah setiap perubahan. Pastikan secret Anda sama dengan yang ditampilkan saat API key dibuat.
invalid_signature_format
Nilai s bukan string hex 64 karakter.
Perbaikan: signature harus berupa hex SHA-256 mentah (huruf kecil a-f0-9). Jika Anda melakukan pengodean base64 atau memotong output, gunakan hex biasa.
expired_timestamp
Timestamp t yang Anda berikan sudah lebih dari 5 menit.
Perbaikan: buat ulang timestamp setiap kali Anda membangun URL. Kode ini berlaku untuk alur signed-URL lama; alur HMAC v2 saat ini tidak memiliki timestamp.
invalid_api_key
key yang Anda berikan tidak ada.
Perbaikan: salin API key lengkap dari dashboard — itu adalah pengenal publik yang dimulai dengan sk_. Ini bersifat publik dan aman digunakan di URL; secret (tidak pernah di URL) adalah yang membuktikan kepemilikan.
missing_hmac_secret
API key tidak memiliki secret HMAC yang dikonfigurasi.
Perbaikan: buat API key baru di dashboard — secret HMAC dibuat dan ditampilkan sekali saat pembuatan.
Parameter / input
invalid_image_url
Prop yang membawa URL (image, brand_logo, logo, avatar, background_image, ...) bukan URL http(s) publik.
Perbaikan: teruskan URL https://... yang dapat diambil secara publik. Localhost, IP privat, dan path tanpa domain ditolak untuk mencegah server-side request forgery.
Langganan
subscription_required (402)
Permintaan mencapai Dynamic API tetapi akun Anda tidak memiliki paket aktif. Akses API bersifat khusus langganan: paket adalah gerbangnya, dan paket tersebut membawa cakupan + tingkatan kemampuan yang sama dengan yang dijual aplikasi FastOG. Render itu sendiri tidak diukur — tidak ada kuota render bulanan dan tidak ada penagihan kelebihan.
Perbaikan: pilih paket Dynamic API di dasbor dan buat kunci API. Respons menyertakan top_up_url yang mengarah ke halaman paket.
Layanan render
store_blocked (403)
Render untuk toko di balik key ini telah dijeda oleh FastOG (misalnya penyalahgunaan atau penggunaan berlebihan). Cover yang sudah di-cache di edge dapat terus disajikan hingga kedaluwarsa. Hubungi support untuk menyelesaikannya; tidak ada yang dapat Anda ubah dalam permintaan yang akan memperbaiki ini.
render_unreachable
Layanan render tidak dapat dijangkau (jendela restart singkat).
Perbaikan: coba lagi dalam beberapa detik. Render tidak dihitung untuk percobaan ini.
render_failed
Layanan render mengembalikan error untuk permintaan Anda.
Perbaikan: verifikasi props template Anda — nilai yang terlalu panjang/malformed, field yang tidak didukung, atau gambar upstream yang tidak dapat dijangkau. Respons menyertakan status yang mendasarinya. Render tidak dihitung.
Permukaan admin toko
Kode-kode ini menjawab dari admin Shopify dan WooCommerce Studio — editor tertanam tempat merchant
bekerja, bukan dari API yang ditandatangani. Beberapa di antaranya dipakai bersama dengan API publik (invalid_image_url,
render_failed, invalid_signature); kode tersebut tetap memakai entri yang didokumentasikan di atas.
| Kode | HTTP | Arti dan tindakan yang perlu dilakukan |
|---|---|---|
invalid_shop |
422 | Toko Shopify tidak dapat diidentifikasi. Muat ulang aplikasi FastOG dari admin Shopify Anda agar permintaan tersemat membawa data toko kembali, lalu coba lagi. |
invalid_shop_or_page |
422 | Toko atau jenis halaman tidak dikenal. Buka aplikasi FastOG dari admin Shopify Anda dan pilih jenis halaman sampul dari editor. |
invalid_store |
422 | Toko WooCommerce tidak dapat diidentifikasi. Buka kembali Studio dari admin WordPress Anda agar token toko disertakan kembali, lalu coba lagi. |
invalid_store_or_page |
422 | Toko atau jenis halaman tidak dikenal. Buka kembali Studio dari admin WordPress Anda dan pilih jenis halaman sampul yang ditawarkan editor. |
missing_api_key |
422 | Toko tidak memiliki kunci penandatanganan (signing key). Selesaikan instalasi plugin dari admin WordPress Anda agar FastOG dapat menerbitkan kunci penandatanganan untuk toko. |
store_ownership_unverified |
403 | Situs WordPress tidak dapat diverifikasi. Situs harus dapat diakses melalui HTTPS publik dengan REST API aktif. |
community_is_free |
422 | Paket Community gratis. Paket ini adalah paket default gratis dan tidak dapat dibeli; pilih tingkat berbayar untuk melakukan upgrade. |
not_installed |
404 | FastOG belum terpasang untuk toko ini. Pasang aplikasi FastOG dari Shopify App Store untuk toko ini, lalu buka kembali. |
oauth_required |
409 | Toko perlu mengotorisasi FastOG kembali. Jalankan kembali instalasi OAuth FastOG dari admin Shopify Anda; hibah (grant) yang tersimpan telah dicabut atau cakupannya berubah. |
reconnect_required |
409 | Koneksi Shopify perlu dibangun ulang. Gunakan tombol Reconnect di aplikasi FastOG agar access token baru diterbitkan. |
token_rejected |
409 | Shopify menerbitkan access token lalu menolaknya. Coba reconnect sekali lagi; jika Shopify terus menolaknya, pasang ulang aplikasi. |
unauthorized |
401 | Permintaan tidak membawa sesi yang valid untuk antarmuka ini. Muat ulang aplikasi FastOG dari admin platform Anda agar session token baru disertakan, lalu coba lagi. |
shop_not_found |
404 | Toko tidak lagi ada di FastOG. Pasang ulang FastOG dari admin Shopify Anda untuk membuat ulang data toko. |
invalid_product |
422 | Referensi produk tidak valid. Muat ulang halaman produk dan buka kembali FastOG; product id yang dikirim tidak ada atau bukan angka. |
invalid_product_cover |
422 | Payload sampul produk tidak valid. Muat ulang editor dan simpan lagi; props, style, dan signals masing-masing harus berupa objek. |
product_not_found |
404 | Produk tidak dapat dibaca dari toko. Periksa apakah produk masih ada dan sudah dipublikasikan, lalu muat ulang editor. |
product_customization_not_on_plan |
403 | Kustomisasi sampul per produk tidak tersedia pada paket ini. Lakukan upgrade, atau edit sampul produk bersama (shared) sebagai gantinya. |
no_product_handles |
422 | Tidak ada produk yang ditemukan untuk disegarkan. Publikasikan setidaknya satu produk dengan handle publik, lalu coba lagi penyegaran pratinjau berbagi (share preview). |
invalid_style |
422 | Blok style tidak dapat digunakan. Muat ulang editor dan pilih ulang warna serta font; salah satu nilai tidak dapat dinormalisasi. |
invalid_template |
422 | Template yang diminta tidak ada dalam katalog platform ini. Pilih salah satu tata letak yang ditawarkan editor. |
invalid_preset |
422 | Nama preset bukan salah satu yang ditawarkan platform ini. Pilih preset dari layar penyiapan. |
invalid_set |
422 | Payload kumpulan sampul (cover set) tidak ada atau tidak valid. Muat ulang layar penyiapan dan pilih kumpulan lagi. |
preset_not_applyable |
422 | Preset tidak dapat diterapkan ke semua jenis halaman. Pilih preset lain; preset ini tidak memiliki sampul untuk setidaknya satu jenis halaman. |
template_not_available |
422 | Template tidak ada dalam katalog yang dapat dirender. Pilih tata letak yang ditawarkan pemilih. |
template_not_available_on_shopify |
422 | Template tidak tersedia di toko Shopify. Pilih tata letak yang ditawarkan editor Shopify. |
template_not_available_on_woocommerce |
422 | Template tidak tersedia di toko WooCommerce. Pilih tata letak yang ditawarkan Studio. |
template_unavailable |
422 | Template tidak tersedia untuk toko ini. Pilih tata letak yang ditawarkan editor; template tersebut sudah dihentikan, tidak dikenal, atau melebihi yang boleh digunakan toko. |
template_not_on_plan |
403 | Template memerlukan paket yang lebih tinggi. Ubah paket, atau pilih tata letak yang tercakup dalam paket saat ini. Respons menyebutkan paket pada requires. |
template_requires_higher_plan |
403 | Template memerlukan paket yang lebih tinggi. Respons menyebutkan paket pada requires. |
no_rule |
404 | Belum ada aturan sampul untuk jenis halaman ini. Simpan sampul untuk jenis halaman ini di editor terlebih dahulu. |
cover_not_configured |
404 | Belum ada sampul produk yang disimpan. Simpan sampul produk sebelum mengunduh atau membagikannya. |
schedule_only_product |
422 | Penjadwalan kampanye hanya tersedia untuk sampul produk. Hapus tanggal pengembalian (revert date), atau pindahkan kampanye ke sampul produk. |
not_dismissible |
422 | Pengumuman tersebut tidak dapat ditutup. Muat ulang halaman; pengumuman sudah dihentikan atau milik toko lain. |
unsupported_locale |
422 | Bahasa UI tersebut tidak disertakan untuk aplikasi ini. Pilih salah satu bahasa yang tercantum dalam respons pada supported. |
no_setup_sets |
422 | Tidak ada kumpulan sampul pilihan (curated) yang dapat disusun. Coba lagi layar penyiapan; jika tetap kosong, hubungi dukungan. |
export_unavailable |
403 | Unduhan tidak tersedia pada paket ini. Lakukan upgrade ke Pro atau lebih tinggi untuk mengunduh file sampul. |
cancellation_failed |
502 | Pembatalan langganan ditolak. Coba lagi sebentar lagi; jika terus gagal, batalkan dari halaman penagihan Shopify atau hubungi dukungan. |
logo_override_on_plan |
403 | Penggantian logo (logo override) tidak tersedia pada paket ini. Lakukan upgrade, atau hapus penggantian logo. |
invalid_logo |
422 | File logo bukan gambar yang diterima. Unggah PNG, JPEG, atau WebP di bawah batas ukuran yang ditampilkan di editor. |
invalid_brand_image |
422 | Gambar referensi merek tidak dapat digunakan. Unggah gambar yang didukung di bawah batas ukuran, atau hapus referensi dan simpan lagi. |
brand_image_too_large |
422 | Gambar referensi merek terlalu besar. Perkecil file dan unggah lagi. |
brand_colors_too_many |
422 | Lebih dari tiga warna merek dikirim. Kirim paling banyak tiga warna hex. |
upload_failed |
500 | File yang diunggah tidak dapat disimpan. Coba lagi; jika terus gagal, hubungi dukungan — penyimpanan aset tidak mengembalikan URL publik. |
attachment_upload_failed |
500 | Lampiran dukungan tidak dapat disimpan. Kirim pesan tanpa lampiran, lalu kirim file tersebut melalui email ke dukungan. |
invalid_webhook |
401 | Tanda tangan webhook toko tidak terverifikasi. Periksa apakah webhook secret di pengaturan FastOG WordPress Anda cocok dengan yang diterbitkan FastOG. |
not_found |
404 | Endpoint tersebut tidak lagi ada. Buka kembali Studio dari admin WordPress Anda. |
meta_refresh_unavailable |
503 | Penyegaran pratinjau berbagi belum dikonfigurasi. Bagikan ulang tautan dari Facebook sebagai gantinya. |
theme_write_disabled |
409 | Pengeditan tema tidak diaktifkan untuk aplikasi ini. Gunakan theme app embed alih-alih perbaikan file tema. |
scope_required |
403 | FastOG kekurangan izin Shopify. Setujui cakupan yang diminta menggunakan consent_url pada respons, lalu coba lagi perbaikannya. |
Bridge Wix
Bridge Wix ditandatangani oleh aplikasi Wix, bukan sesi merchant, sehingga kegagalannya ditujukan kepada pengembang aplikasi. Setiap respons tetap membawa code dan request_id; id permintaan bridge adalah id dari envelope yang ditandatangani.
| Kode | HTTP | Arti dan tindakan yang perlu dilakukan |
|---|---|---|
invalid_bridge_signature |
401 | Tanda tangan bridge Wix tidak terverifikasi. Buat ulang permintaan dengan shared secret, path yang persis, dan timestamp yang usianya di bawah lima menit. |
invalid_bridge_body |
400 | Body envelope bridge tidak valid. Kirim body sebagai objek JSON dan enkode setiap angka di dalamnya sebagai string, agar tanda tangan kanonik cocok. |
replayed_bridge_request |
401 | Permintaan bridge tersebut sudah pernah digunakan. Buat request_id baru untuk setiap panggilan yang mengubah data. |
wix_site_not_installed |
403 | FastOG tidak terpasang di situs Wix ini. Pasang aplikasi FastOG di situs tersebut, lalu buka kembali. |
wix_site_not_provisioned |
422 | Situs Wix belum memiliki kredensial penandatanganan. Pasang ulang aplikasi FastOG agar situs diprovisikan dengan API key. |
invalid_page_type |
422 | Jenis halaman tersebut bukan salah satu yang didukung FastOG di Wix. Kirim salah satu jenis halaman yang ditawarkan Studio. |
rule_not_found |
404 | Tidak ada aturan dengan id tersebut. Segarkan daftar; aturan tersebut telah dihapus atau milik situs lain. |
invalid_target_id |
422 | Id target Wix tidak valid untuk jenis halaman ini. Kirim id yang disediakan aplikasi Wix untuk jenis halaman tersebut. |
invalid_preview |
422 | Payload pratinjau tidak valid. Baca objek details untuk field yang bermasalah. |
invalid_rule |
422 | Payload aturan sampul tidak valid. Baca objek details; template wajib diisi dan blok opsional harus berupa objek. |
invalid_sync |
422 | Payload sinkronisasi tidak valid. Baca objek details; target_type dan target_id harus sesuai. |
invalid_regenerate_url |
422 | URL yang akan dibuat ulang tidak ada. Kirim URL halaman di url. |
invalid_regenerate_host |
422 | URL tersebut bukan milik host FastOG. Kirim URL sampul fastog.com. |
ai_presets_unsupported |
422 | Set sampul hasil desain AI tidak lagi dibuat. Pilih salah satu tampilan kurasi sebagai gantinya. |
original_tags_required |
422 | Tag metadata asli wajib diisi. Kirim original_tags (atau current_tags) agar uninstall dapat memulihkan metadata situs. |
invalid_restored |
422 | Payload kunci yang dipulihkan tidak valid. Kirim restored sebagai array berisi kunci metadata. |
invalid_seo_target |
422 | Jenis target SEO tidak dikenal. Gunakan site, pattern, atau item di path. |
invalid_seo_payload |
422 | Payload metadata SEO tidak valid. Kirim target_id, current_tags, dan fastog_url sebagai URL http(s) absolut. |
sync_failed |
500 | Sinkronisasi metadata ke Wix gagal. Coba lagi; jika terus gagal, periksa apakah situs dapat dijangkau dan aplikasi masih terpasang. |
invalid_tier |
422 | Paket tersebut bukan salah satu paket yang dijual FastOG di Wix. Kirim starter, pro, atau scale sebagai tier. |
Permukaan demo
Demo ini adalah konsol penjualan khusus pemilik, bukan endpoint merchant.
| Kode | HTTP | Arti dan tindakan yang perlu dilakukan |
|---|---|---|
url_required |
422 | Tidak ada URL yang dikirim. Tempelkan tautan toko atau produk sebelum membaca kartu. |
unreadable_url |
422 | Halaman tersebut tidak dapat dibaca. Periksa apakah tautannya publik dan lengkap; halaman di balik login tidak dapat dibaca. |
no_api_key |
422 | Tidak ada API key yang tersedia untuk menandatangani cover. Buat API key (atau masukkan yang valid); respons menautkan ke halaman API keys. |
no_presets |
500 | Tidak ada preset cover yang dikonfigurasi. Konfigurasikan setidaknya satu preset di server. |
Kode editor aturan terbatas
Editor aturan terbatas (admin Shopify dan WooCommerce Studio) menerjemahkan token-token ini sendiri ke dalam bahasa merchant, sehingga responsnya membawa error dan code tetapi tidak membawa hint — deskripsi bahasa Inggris kedua hanya akan menyimpang dari versi terlokalisasi yang benar-benar dilihat merchant:
scope_already_defined, scoped_rule_limit_reached, scoped_rules_not_on_plan,
scope_value_required, scope_value_too_long, unknown_scope_type, base_rule_required,
scoped_rules_product_only, cannot_delete_base_rule.
Masih mengalami kendala?
- Buka halaman Render Logs di dashboard — setiap hasil (berhasil + ditolak) tercantum beserta
error_code, status HTTP, dan parameter yang diminta. - Jalankan
php artisan og:diagnosepada URL yang sudah ditandatangani untuk menelusuri seluruh pipeline dan melihat tahap mana yang gagal. - Periksa dokumentasi di sidebar untuk framework yang Anda gunakan (Next.js, Express, SvelteKit, ...).