API 錯誤 — 每個代碼的意義與修正方式
當請求失敗時,FastOG 會回傳機器可讀的錯誤代碼 — 無論是簽章過的 OG 圖片算繪,或是對其中一個產品內管理介面的呼叫。每個錯誤回應都包含:
error— 舊版的短 token。每次失敗時仍會保留,讓較舊的用戶端能繼續運作。code— 相同且穩定的已記載錯誤代碼(見下表),使用公開 API 所用的名稱。message— 一句話說明哪裡出錯。hint— 以淺白語言簡短說明哪裡出錯以及如何修正。docs_url— 連到本頁面的連結,錨定在該代碼所屬的章節。request_id— 將這次 HTTP 失敗對應到儀表板 Render Logs 資料表中的某一列(也會在X-Request-ID回應標頭中回傳)。沒有可對應項目的介面會回覆null,但這個鍵一定會存在。
產品內介面 — Shopify 管理後台、WooCommerce Studio、Wix 橋接與示範 — 對下列代碼會以相同的信封格式回應,因此無論你在哪裡遇到,失敗的意義都相同。模組介面可能會保留某個代碼長久以來回傳的 HTTP 狀態(例如 render_failed 在封面匯出時回覆 503,在公開 API 上回覆 502);代碼、訊息、提示與文件連結都不會改變。
讀取錯誤回應
{
"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-..."
}
如果您收到看不懂的回應,最快的處理方式如下:
- 記下
code。 - 檢查您的 URL 建構邏輯 — 大多數失敗是簽章錯誤,而非帳號問題。
- 對照下方代碼找出確切原因與修正方式。
- 在 dashboard 中開啟 Render Logs,並以相同的
error_code篩選 — 每一列都會顯示請求的參數,讓您可以重現(並確認request_id相符)。
簽章與驗證
missing_signature
您的請求缺少 key 和/或 s(簽章)查詢參數。
修正方式: 請確認您的 URL 同時包含 key=<api-key> 與 s=<hmac-signature>。請使用 SDK 或參照 /docs/hmac-signature-guide 的逐步說明來建構 URL。
invalid_signature
s 的值與您的 HMAC 密鑰為此 URL 產生的結果不符。
修正方式: 簽章涵蓋所有查詢參數(s 除外),且鍵值需排序。變更任何參數——包括重新排序、URL 編碼差異或新增空白——都會使簽章失效。每次變更後請重新簽章。請確認您的密鑰與建立 API key 時顯示的密鑰相同。
invalid_signature_format
s 的值不是 64 字元的十六進位字串。
修正方式: 簽章必須是原始 SHA-256 十六進位(小寫 a-f0-9)。若您對輸出進行 base64 編碼或截斷,請改用純十六進位。
expired_timestamp
您提供的 t 時間戳已超過 5 分鐘。
修正方式: 每次建構 URL 時請重新產生時間戳。此代碼適用於舊版簽章 URL 流程;目前的 HMAC v2 流程沒有時間戳。
invalid_api_key
您傳入的 key 不存在。
修正方式: 請從 dashboard 複製完整的 API key——它是以 sk_ 開頭的公開識別碼。此識別碼是公開的,放在 URL 中是安全的;真正用來證明持有權的是密鑰(絕不可放在 URL 中)。
missing_hmac_secret
此 API key 未設定 HMAC 密鑰。
修正方式: 請在 dashboard 建立新的 API key——HMAC 密鑰會在建立時產生並僅顯示一次。
參數 / 輸入
invalid_image_url
帶有 URL 的 prop(image、brand_logo、logo、avatar、background_image、...)不是公開的 http(s) URL。
修正方式: 請傳入可公開存取的 https://... URL。為了防止伺服器端請求偽造(server-side request forgery),localhost、私有 IP 與裸路徑都會被拒絕。
訂閱
subscription_required (402)
請求已送達 Dynamic API,但您的帳戶沒有啟用中的方案。API 存取僅限訂閱:方案是存取的門檻,並提供與 FastOG 應用程式所販售相同的涵蓋範圍與功能層級。轉譯本身不計量——沒有每月轉譯配額,也沒有超額計費。
修正方式: 請在儀表板中選擇 Dynamic API 方案並建立 API 金鑰。回應中會包含指向方案頁面的 top_up_url。
轉譯服務
store_blocked (403)
此金鑰所屬商店的轉譯功能已被 FastOG 暫停(例如濫用或用量失控)。已快取在邊緣的封面圖可能仍會繼續提供,直到過期為止。請聯絡支援團隊處理;你在請求中做的任何變更都無法解決此問題。
render_unreachable
無法連線至轉譯服務(短暫重啟期間)。
修正方式: 請於幾秒後重試。此次嘗試的轉譯未被計入。
render_failed
轉譯服務對你的請求回傳了錯誤。
修正方式: 請確認你的 template props — 過長或格式錯誤的值、不支援的欄位,或無法連線的 upstream 圖片。回應中會包含底層的 status。此次轉譯未被計入。
商店管理介面
這些代碼會從 Shopify 管理介面與 WooCommerce Studio 回應——也就是商家實際操作的內嵌編輯器,而非已簽署的 API。其中數個代碼與公開 API 共用(invalid_image_url、render_failed、invalid_signature);這些代碼仍保留上述所記載的項目。
| 代碼 | HTTP | 意義與處理方式 |
|---|---|---|
invalid_shop |
422 | 無法辨識 Shopify 商店。請從 Shopify 管理後台重新載入 FastOG 應用程式,讓內嵌請求再次帶上商店資訊,然後重試。 |
invalid_shop_or_page |
422 | 商店或頁面類型不明。請從 Shopify 管理後台開啟 FastOG 應用程式,並在編輯器中選擇封面頁面類型。 |
invalid_store |
422 | 無法辨識 WooCommerce 商店。請從 WordPress 管理後台重新開啟 Studio,讓商店權杖再次送出,然後重試。 |
invalid_store_or_page |
422 | 商店或頁面類型不明。請從 WordPress 管理後台重新開啟 Studio,並選擇編輯器提供的封面頁面類型。 |
missing_api_key |
422 | 商店沒有簽章金鑰。請從 WordPress 管理後台完成外掛安裝,讓 FastOG 能為商店核發簽章金鑰。 |
store_ownership_unverified |
403 | 無法驗證 WordPress 網站。該網站必須可透過公開的 HTTPS 存取,且已啟用 REST API。 |
community_is_free |
422 | Community 方案是免費的。它是免費的預設方案,無法購買;請選擇付費層級以升級。 |
not_installed |
404 | 此商店尚未安裝 FastOG。請從 Shopify App Store 為此商店安裝 FastOG 應用程式,然後重新開啟。 |
oauth_required |
409 | 商店需要重新授權 FastOG。請從 Shopify 管理後台再次執行 FastOG OAuth 安裝;已儲存的授權遭撤銷或其範圍已變更。 |
reconnect_required |
409 | 需要重新建立 Shopify 連線。請使用 FastOG 應用程式中的「重新連線」按鈕,以核發新的存取權杖。 |
token_rejected |
409 | Shopify 核發了存取權杖後又拒絕它。請重試重新連線一次;若 Shopify 持續拒絕,請重新安裝應用程式。 |
unauthorized |
401 | 此請求未帶有適用於此介面的有效工作階段。請從平台管理後台重新載入 FastOG 應用程式,以附加新的工作階段權杖,然後重試。 |
shop_not_found |
404 | 該商店在 FastOG 中已不存在。請從 Shopify 管理後台重新安裝 FastOG,以重新建立商店記錄。 |
invalid_product |
422 | 產品參照無效。請重新載入產品頁面並重新開啟 FastOG;送出的產品 id 遺漏或不是數字。 |
invalid_product_cover |
422 | 產品封面承載資料格式錯誤。請重新載入編輯器並再次儲存;props、style 與 signals 都必須是物件。 |
product_not_found |
404 | 無法從商店讀取該產品。請確認產品仍存在且已發佈,然後重新載入編輯器。 |
product_customization_not_on_plan |
403 | 此方案不包含個別產品封面自訂功能。請升級,或改為編輯共用的產品封面。 |
no_product_handles |
422 | 找不到可重新整理的產品。請至少發佈一個具有公開 handle 的產品,然後再次嘗試重新整理分享預覽。 |
invalid_style |
422 | 樣式區塊無法使用。請重新載入編輯器並重新選擇顏色與字型;有某個值無法正規化。 |
invalid_template |
422 | 請求的範本不在此平台的目錄中。請選擇編輯器提供的其中一種版面配置。 |
invalid_preset |
422 | 此平台未提供該預設集名稱。請從設定畫面選擇一個預設集。 |
invalid_set |
422 | 封面組承載資料遺漏或格式錯誤。請重新載入設定畫面並再次選擇封面組。 |
preset_not_applyable |
422 | 此預設集無法套用到所有頁面類型。請選擇其他預設集;此預設集至少缺少一種頁面類型的封面。 |
template_not_available |
422 | 範本不在可算繪的目錄中。請選擇選擇器提供的其中一種版面配置。 |
template_not_available_on_shopify |
422 | 此範本不適用於 Shopify 商店。請選擇 Shopify 編輯器提供的其中一種版面配置。 |
template_not_available_on_woocommerce |
422 | 此範本不適用於 WooCommerce 商店。請選擇 Studio 提供的其中一種版面配置。 |
template_unavailable |
422 | 此範本不適用於此商店。請選擇編輯器提供的其中一種版面配置;該範本已停用、不明,或超出此商店可繪製的範圍。 |
template_not_on_plan |
403 | 此範本需要更高的方案。請變更方案,或選擇目前方案涵蓋的版面配置。回應會在 requires 中指明方案。 |
template_requires_higher_plan |
403 | 此範本需要更高的方案。回應會在 requires 中指明方案。 |
no_rule |
404 | 此頁面類型尚無封面規則。請先在編輯器中為此頁面類型儲存封面。 |
cover_not_configured |
404 | 尚未儲存任何產品封面。請先儲存產品封面,再下載或分享。 |
schedule_only_product |
422 | 活動排程僅適用於產品封面。請移除還原日期,或將活動移至產品封面。 |
not_dismissible |
422 | 該公告無法關閉。請重新載入頁面;該公告已停用或屬於其他商店。 |
unsupported_locale |
422 | 此應用程式未內建該介面語言。請選擇回應在 supported 中列出的其中一種語言。 |
no_setup_sets |
422 | 無法組合出精選封面組。請重試設定畫面;若仍為空白,請聯絡支援團隊。 |
export_unavailable |
403 | 此方案不包含下載功能。請升級至 Pro 或以上方案以下載封面檔案。 |
cancellation_failed |
502 | 訂閱取消遭到拒絕。請稍後重試;若持續失敗,請從 Shopify 帳單頁面取消或聯絡支援團隊。 |
logo_override_on_plan |
403 | 此方案不包含標誌覆寫功能。請升級,或清除標誌覆寫。 |
invalid_logo |
422 | 標誌檔案不是可接受的圖片。請上傳 PNG、JPEG 或 WebP,且大小不超過編輯器顯示的上限。 |
invalid_brand_image |
422 | 品牌參照圖片無法使用。請上傳支援的圖片且不超過大小上限,或清除參照後再次儲存。 |
brand_image_too_large |
422 | 品牌參照圖片過大。請縮小檔案後重新上傳。 |
brand_colors_too_many |
422 | 提供的品牌顏色超過三種。請最多送出三個十六進位顏色。 |
upload_failed |
500 | 無法儲存上傳的檔案。請重試;若持續失敗,請聯絡支援團隊 — 資產儲存服務未回傳公開 URL。 |
attachment_upload_failed |
500 | 無法儲存支援附件。請在不含附件的情況下送出訊息,然後將檔案以電子郵件寄給支援團隊。 |
invalid_webhook |
401 | 商店 webhook 簽章驗證失敗。請確認 WordPress FastOG 設定中的 webhook 密鑰與 FastOG 核發的一致。 |
not_found |
404 | 該端點已不存在。請從 WordPress 管理後台重新開啟 Studio。 |
meta_refresh_unavailable |
503 | 尚未設定分享預覽重新整理。請改從 Facebook 重新分享連結。 |
theme_write_disabled |
409 | 此應用程式未啟用主題編輯。請改用主題應用程式嵌入,而非修改主題檔案。 |
scope_required |
403 | FastOG 缺少 Shopify 權限。請使用回應中的 consent_url 核准請求的範圍,然後重試修正。 |
Wix 橋接
Wix 橋接是由 Wix 應用程式簽署,而非商家工作階段,因此其失敗訊息是寄給應用程式開發人員的。每個回應仍會帶有 code 與 request_id;橋接請求 id 即為簽署信封中的那一個。
| 代碼 | HTTP | 意義與處理方式 |
|---|---|---|
invalid_bridge_signature |
401 | Wix 橋接簽章驗證失敗。請以共用密鑰、確切路徑及五分鐘內的時戳重新簽發請求。 |
invalid_bridge_body |
400 | 橋接信封內容格式錯誤。請以 JSON 物件傳送 body,並將其內每個數字編碼為字串,以便標準簽章相符。 |
replayed_bridge_request |
401 | 該橋接請求已被使用過。請為每次變更呼叫簽發新的 request_id。 |
wix_site_not_installed |
403 | 此 Wix 網站尚未安裝 FastOG。請在該網站安裝 FastOG 應用程式,然後重新開啟。 |
wix_site_not_provisioned |
422 | 此 Wix 網站尚無簽署憑證。請重新安裝 FastOG 應用程式,以便為該網站配置 API 金鑰。 |
invalid_page_type |
422 | 此頁面類型不在 FastOG 於 Wix 支援的範圍內。請傳送 Studio 提供的其中一種頁面類型。 |
rule_not_found |
404 | 沒有該 id 的規則。請重新整理清單;該規則已被刪除或屬於其他網站。 |
invalid_target_id |
422 | 此 Wix 目標 id 不適用於此頁面類型。請傳送 Wix 應用程式為該頁面類型提供的 id。 |
invalid_preview |
422 | 預覽承載內容格式錯誤。請讀取 details 物件以找出出錯的欄位。 |
invalid_rule |
422 | 封面規則承載內容格式錯誤。請讀取 details 物件;template 為必填,且選用區塊必須是物件。 |
invalid_sync |
422 | 同步承載內容格式錯誤。請讀取 details 物件;target_type 與 target_id 必須一致。 |
invalid_regenerate_url |
422 | 缺少要重新產生的 URL。請在 url 中傳送頁面 URL。 |
invalid_regenerate_host |
422 | 該 URL 不屬於 FastOG 主機。請傳送 fastog.com 的封面 URL。 |
ai_presets_unsupported |
422 | 已不再產生 AI 設計的封面組合。請改選其中一種精選樣式。 |
original_tags_required |
422 | 原始中繼資料標籤為必填。請傳送 original_tags(或 current_tags),以便解除安裝時能還原網站中繼資料。 |
invalid_restored |
422 | 已還原鍵的承載內容格式錯誤。請以中繼資料鍵的陣列傳送 restored。 |
invalid_seo_target |
422 | SEO 目標類型未知。請在路徑中使用 site、pattern 或 item。 |
invalid_seo_payload |
422 | SEO 中繼資料承載內容格式錯誤。請以絕對 http(s) URL 傳送 target_id、current_tags 與 fastog_url。 |
sync_failed |
500 | 中繼資料同步至 Wix 失敗。請重試;若持續失敗,請檢查網站是否可連線,以及應用程式是否仍已安裝。 |
invalid_tier |
422 | 該方案並非 FastOG 在 Wix 上販售的方案。請以 starter、pro 或 scale 作為方案層級傳送。 |
示範介面
這個示範是僅限擁有者使用的銷售主控台,不是商家端點。
| 代碼 | HTTP | 代表意義與處理方式 |
|---|---|---|
url_required |
422 | 未送出 URL。請先貼上商店或商品連結,再讀取卡片。 |
unreadable_url |
422 | 無法讀取該頁面。請確認連結為公開且完整;位於登入驗證後方的頁面無法讀取。 |
no_api_key |
422 | 沒有可用於簽署封面的 API 金鑰。請建立 API 金鑰(或輸入有效的金鑰);回應中會附上 API 金鑰頁面的連結。 |
no_presets |
500 | 未設定任何封面預設集。請在伺服器上設定至少一個預設集。 |
範圍規則編輯器代碼
範圍規則編輯器(Shopify 管理後台與 WooCommerce Studio)會自行將這些權杖翻譯成商家所使用的語言,因此其回應會帶有 error 與 code,但不含 hint——額外的英文描述只會與商家實際看到的在地化版本產生落差:
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。
還是卡住了嗎?
- 請開啟 dashboard 的 Render Logs 頁面 — 每個結果(成功與拒絕)都會列出其
error_code、HTTP 狀態碼,以及請求的參數。 - 請在已簽署的 URL 上執行
php artisan og:diagnose,以走完整個流程,並查看是哪個階段失敗。 - 請查看側邊欄中你所使用框架(Next.js、Express、SvelteKit……)的文件。