Lỗi API — Ý nghĩa của từng mã và cách khắc phục
FastOG trả về các mã lỗi mà máy có thể đọc được khi một yêu cầu thất bại — một lần render OG image có ký, hoặc một lời gọi đến một trong các bề mặt quản trị trong sản phẩm. Mọi phản hồi lỗi đều bao gồm:
error— token ngắn kế thừa. Vẫn xuất hiện trong mọi lần thất bại để client cũ tiếp tục hoạt động.code— cùng mã lỗi ổn định, được tài liệu hóa (bảng bên dưới), dưới tên mà API công khai sử dụng.message— mô tả một câu về những gì đã sai.hint— mô tả ngắn gọn bằng ngôn ngữ đơn giản về những gì đã sai và cách khắc phục.docs_url— liên kết đến trang này, neo tại phần dành cho mã đó.request_id— tương quan lỗi HTTP này với một dòng trong bảng Render Logs trên dashboard (cũng được trả về trong header phản hồiX-Request-ID). Một bề mặt không có gì để tương quan sẽ trả lờinull, nhưng khóa này luôn hiện diện.
Các bề mặt trong sản phẩm — Shopify admin, WooCommerce Studio, Wix bridge và bản demo — trả lời
với cùng cấu trúc phản hồi cho các mã bên dưới, vì vậy một lỗi có nghĩa giống nhau ở bất cứ nơi nào bạn gặp. Một
bề mặt module có thể giữ nguyên mã trạng thái HTTP mà nó vẫn luôn trả về cho một mã (ví dụ render_failed
trả lời 503 trên cover export và 502 trên API công khai); mã lỗi, thông điệp, gợi ý và liên kết tài liệu không thay đổi.
Đọc phản hồi lỗi
{
"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-..."
}
Nếu bạn nhận được phản hồi mà mình không hiểu, cách nhanh nhất là:
- Ghi lại
code. - Kiểm tra URL builder của bạn — phần lớn lỗi thất bại là do lỗi ký (signing), không phải vấn đề tài khoản.
- Đối chiếu mã bên dưới để tìm nguyên nhân và cách khắc phục chính xác.
- Trong dashboard, mở Render Logs và lọc theo cùng
error_code— mỗi dòng hiển thị các tham số đã yêu cầu để bạn có thể tái tạo (và xác nhậnrequest_idkhớp).
Ký & xác thực
missing_signature
Yêu cầu của bạn thiếu tham số truy vấn key và/hoặc s (chữ ký).
Cách khắc phục: đảm bảo URL của bạn bao gồm cả key=<api-key> và s=<hmac-signature>. Sử dụng SDK hoặc hướng dẫn /docs/hmac-signature-guide để tạo URL.
invalid_signature
Giá trị s không khớp với giá trị mà HMAC secret của bạn tạo ra cho URL này.
Cách khắc phục: chữ ký bao phủ mọi tham số truy vấn ngoại trừ s, với các khóa được sắp xếp. Thay đổi bất kỳ tham số nào — bao gồm sắp xếp lại thứ tự, khác biệt về URL-encoding, hoặc thêm khoảng trắng — đều làm mất hiệu lực chữ ký. Ký lại sau mỗi lần thay đổi. Xác nhận rằng secret của bạn là secret được hiển thị khi tạo API key.
invalid_signature_format
Giá trị s không phải là chuỗi hex 64 ký tự.
Cách khắc phục: chữ ký phải là SHA-256 hex thô (chữ thường a-f0-9). Nếu bạn đang base64-encoding hoặc cắt ngắn kết quả, hãy dùng hex thuần.
expired_timestamp
Dấu thời gian t bạn cung cấp đã cũ hơn 5 phút.
Cách khắc phục: tạo lại dấu thời gian mỗi lần bạn tạo URL. Mã này áp dụng cho luồng signed-URL cũ; luồng HMAC v2 hiện tại không có dấu thời gian.
invalid_api_key
key bạn truyền vào không tồn tại.
Cách khắc phục: sao chép toàn bộ API key từ dashboard — đó là định danh công khai bắt đầu bằng sk_. Nó là công khai và an toàn trong URL; secret (không bao giờ đặt trong URL) mới là thứ chứng minh quyền sở hữu.
missing_hmac_secret
API key chưa được cấu hình HMAC secret.
Cách khắc phục: tạo một API key mới trong dashboard — HMAC secret được tạo và hiển thị một lần duy nhất khi tạo.
Tham số / đầu vào
invalid_image_url
Một prop chứa URL (image, brand_logo, logo, avatar, background_image, ...) không phải là URL http(s) công khai.
Cách khắc phục: truyền một URL https://... có thể truy xuất công khai. Localhost, IP riêng và đường dẫn trần bị từ chối để ngăn chặn server-side request forgery.
Gói đăng ký
subscription_required (402)
Yêu cầu đã đến Dynamic API nhưng tài khoản của bạn không có gói nào đang hoạt động. Quyền truy cập API là chỉ dành cho gói đăng ký: gói là điều kiện bắt buộc, và nó mang theo cùng mức độ phủ + thang năng lực mà các ứng dụng FastOG bán. Bản thân các lần render không bị tính phí theo lượt — không có hạn mức render hàng tháng và không có tính phí vượt mức.
Cách khắc phục: chọn một gói Dynamic API trong dashboard và tạo một API key. Phản hồi bao gồm một top_up_url trỏ đến trang các gói.
Dịch vụ render
store_blocked (403)
Tính năng render cho cửa hàng gắn với key này đã bị FastOG tạm dừng (ví dụ do lạm dụng hoặc sử dụng quá mức). Các ảnh bìa đã được cache tại edge vẫn có thể tiếp tục được phục vụ cho đến khi hết hạn. Hãy liên hệ bộ phận hỗ trợ để giải quyết; không có thay đổi nào trong request có thể khắc phục được vấn đề này.
render_unreachable
Không thể kết nối tới dịch vụ render (khoảng thời gian khởi động lại ngắn).
Cách khắc phục: thử lại sau vài giây. Lần render này không bị tính cho lần thử này.
render_failed
Dịch vụ render trả về lỗi cho request của bạn.
Cách khắc phục: kiểm tra các template props — giá trị quá dài/sai định dạng, trường không được hỗ trợ, hoặc ảnh upstream không thể truy cập. Phản hồi bao gồm status gốc. Lần render này không bị tính.
Bề mặt quản trị cửa hàng
Các mã này phản hồi từ Shopify admin và WooCommerce Studio — những trình soạn thảo nhúng mà người bán hàng
làm việc trong đó thay vì API đã ký. Một số mã được dùng chung với API công khai (invalid_image_url,
render_failed, invalid_signature); những mã đó giữ nguyên mục đã được ghi tài liệu ở trên.
| Mã | HTTP | Ý nghĩa và cách xử lý |
|---|---|---|
invalid_shop |
422 | Không thể xác định được cửa hàng Shopify. Hãy tải lại ứng dụng FastOG từ trang quản trị Shopify để yêu cầu nhúng mang lại thông tin cửa hàng, sau đó thử lại. |
invalid_shop_or_page |
422 | Không nhận diện được cửa hàng hoặc loại trang. Hãy mở ứng dụng FastOG từ trang quản trị Shopify và chọn một loại trang bìa trong trình chỉnh sửa. |
invalid_store |
422 | Không thể xác định được cửa hàng WooCommerce. Hãy mở lại Studio từ trang quản trị WordPress để token cửa hàng được gửi lại, sau đó thử lại. |
invalid_store_or_page |
422 | Không nhận diện được cửa hàng hoặc loại trang. Hãy mở lại Studio từ trang quản trị WordPress và chọn một loại trang bìa mà trình chỉnh sửa cung cấp. |
missing_api_key |
422 | Cửa hàng chưa có khóa ký. Hãy hoàn tất cài đặt plugin từ trang quản trị WordPress để FastOG cấp khóa ký cho cửa hàng. |
store_ownership_unverified |
403 | Không thể xác minh trang WordPress. Trang phải truy cập được qua HTTPS công khai và bật REST API. |
community_is_free |
422 | Gói Community là miễn phí. Đây là gói mặc định miễn phí và không thể mua; hãy chọn một gói trả phí để nâng cấp. |
not_installed |
404 | FastOG chưa được cài đặt cho cửa hàng này. Hãy cài ứng dụng FastOG từ Shopify App Store cho cửa hàng này, sau đó mở lại. |
oauth_required |
409 | Cửa hàng cần cấp quyền lại cho FastOG. Hãy chạy lại quy trình cài đặt OAuth của FastOG từ trang quản trị Shopify; quyền đã lưu bị thu hồi hoặc phạm vi quyền đã thay đổi. |
reconnect_required |
409 | Cần thiết lập lại kết nối Shopify. Hãy dùng nút Reconnect trong ứng dụng FastOG để cấp access token mới. |
token_rejected |
409 | Shopify đã cấp access token rồi từ chối token đó. Hãy thử kết nối lại một lần; nếu Shopify vẫn từ chối, hãy cài đặt lại ứng dụng. |
unauthorized |
401 | Yêu cầu không mang phiên hợp lệ cho bề mặt này. Hãy tải lại ứng dụng FastOG từ trang quản trị nền tảng để gắn session token mới, sau đó thử lại. |
shop_not_found |
404 | Cửa hàng không còn tồn tại trong FastOG. Hãy cài đặt lại FastOG từ trang quản trị Shopify để tạo lại bản ghi cửa hàng. |
invalid_product |
422 | Tham chiếu sản phẩm không hợp lệ. Hãy tải lại trang sản phẩm và mở lại FastOG; id sản phẩm được gửi bị thiếu hoặc không phải dạng số. |
invalid_product_cover |
422 | Dữ liệu ảnh bìa sản phẩm không đúng định dạng. Hãy tải lại trình chỉnh sửa và lưu lại; props, style và signals mỗi trường phải là một object. |
product_not_found |
404 | Không thể đọc sản phẩm từ cửa hàng. Hãy kiểm tra sản phẩm vẫn tồn tại và đã được xuất bản, sau đó tải lại trình chỉnh sửa. |
product_customization_not_on_plan |
403 | Tính năng tùy chỉnh ảnh bìa riêng cho từng sản phẩm không có trong gói này. Hãy nâng cấp, hoặc chỉnh sửa ảnh bìa sản phẩm dùng chung. |
no_product_handles |
422 | Không tìm thấy sản phẩm nào để làm mới. Hãy xuất bản ít nhất một sản phẩm có handle công khai, sau đó thử làm mới bản xem trước chia sẻ lại. |
invalid_style |
422 | Khối style không dùng được. Hãy tải lại trình chỉnh sửa và chọn lại màu sắc và phông chữ; một giá trị không thể chuẩn hóa. |
invalid_template |
422 | Template được yêu cầu không có trong danh mục của nền tảng này. Hãy chọn một trong các bố cục mà trình chỉnh sửa cung cấp. |
invalid_preset |
422 | Tên preset không thuộc các preset mà nền tảng này cung cấp. Hãy chọn một preset từ màn hình thiết lập. |
invalid_set |
422 | Dữ liệu bộ ảnh bìa bị thiếu hoặc không đúng định dạng. Hãy tải lại màn hình thiết lập và chọn lại một bộ. |
preset_not_applyable |
422 | Không thể áp dụng preset cho mọi loại trang. Hãy chọn preset khác; preset này thiếu ảnh bìa cho ít nhất một loại trang. |
template_not_available |
422 | Template không có trong danh mục có thể render. Hãy chọn một bố cục mà trình chọn cung cấp. |
template_not_available_on_shopify |
422 | Template không khả dụng trên cửa hàng Shopify. Hãy chọn một bố cục mà trình chỉnh sửa Shopify cung cấp. |
template_not_available_on_woocommerce |
422 | Template không khả dụng trên cửa hàng WooCommerce. Hãy chọn một bố cục mà Studio cung cấp. |
template_unavailable |
422 | Template không khả dụng cho cửa hàng này. Hãy chọn một bố cục mà trình chỉnh sửa cung cấp; bố cục này đã ngừng dùng, không xác định, hoặc vượt quá mức cửa hàng được phép dùng. |
template_not_on_plan |
403 | Template cần gói cao hơn. Hãy đổi gói, hoặc chọn một bố cục mà gói hiện tại bao gồm. Phản hồi nêu tên gói trong requires. |
template_requires_higher_plan |
403 | Template cần gói cao hơn. Phản hồi nêu tên gói trong requires. |
no_rule |
404 | Chưa có quy tắc ảnh bìa cho loại trang này. Hãy lưu ảnh bìa cho loại trang này trong trình chỉnh sửa trước. |
cover_not_configured |
404 | Chưa lưu ảnh bìa sản phẩm nào. Hãy lưu ảnh bìa sản phẩm trước khi tải xuống hoặc chia sẻ. |
schedule_only_product |
422 | Lên lịch chiến dịch chỉ áp dụng cho ảnh bìa sản phẩm. Hãy xóa ngày hoàn nguyên, hoặc chuyển chiến dịch sang ảnh bìa sản phẩm. |
not_dismissible |
422 | Không thể bỏ qua thông báo đó. Hãy tải lại trang; thông báo đã bị gỡ hoặc thuộc về cửa hàng khác. |
unsupported_locale |
422 | Ngôn ngữ giao diện đó không được đóng gói cho ứng dụng này. Hãy chọn một trong các ngôn ngữ mà phản hồi liệt kê trong supported. |
no_setup_sets |
422 | Không thể tập hợp được bộ ảnh bìa tuyển chọn nào. Hãy thử lại màn hình thiết lập; nếu vẫn trống, hãy liên hệ bộ phận hỗ trợ. |
export_unavailable |
403 | Tính năng tải xuống không có trong gói này. Hãy nâng cấp lên Pro trở lên để tải xuống các tệp ảnh bìa. |
cancellation_failed |
502 | Yêu cầu hủy đăng ký bị từ chối. Hãy thử lại sau giây lát; nếu vẫn thất bại, hãy hủy từ trang thanh toán Shopify hoặc liên hệ bộ phận hỗ trợ. |
logo_override_on_plan |
403 | Tính năng ghi đè logo không có trong gói này. Hãy nâng cấp, hoặc xóa phần ghi đè logo. |
invalid_logo |
422 | Tệp logo không phải định dạng ảnh được chấp nhận. Hãy tải lên PNG, JPEG hoặc WebP dưới giới hạn dung lượng hiển thị trong trình chỉnh sửa. |
invalid_brand_image |
422 | Ảnh tham chiếu thương hiệu không dùng được. Hãy tải lên ảnh được hỗ trợ dưới giới hạn dung lượng, hoặc xóa ảnh tham chiếu và lưu lại. |
brand_image_too_large |
422 | Ảnh tham chiếu thương hiệu quá lớn. Hãy giảm dung lượng tệp và tải lên lại. |
brand_colors_too_many |
422 | Đã gửi nhiều hơn ba màu thương hiệu. Hãy gửi tối đa ba màu hex. |
upload_failed |
500 | Không thể lưu tệp đã tải lên. Hãy thử lại; nếu vẫn thất bại, hãy liên hệ bộ phận hỗ trợ — kho lưu trữ tài nguyên không trả về URL công khai. |
attachment_upload_failed |
500 | Không thể lưu tệp đính kèm hỗ trợ. Hãy gửi tin nhắn không kèm tệp đính kèm, sau đó gửi email tệp cho bộ phận hỗ trợ. |
invalid_webhook |
401 | Chữ ký webhook của cửa hàng không xác minh được. Hãy kiểm tra webhook secret trong phần cài đặt FastOG trên WordPress của bạn khớp với secret mà FastOG đã cấp. |
not_found |
404 | Endpoint đó không còn tồn tại. Hãy mở lại Studio từ trang quản trị WordPress. |
meta_refresh_unavailable |
503 | Tính năng làm mới bản xem trước chia sẻ chưa được cấu hình. Hãy chia sẻ lại liên kết từ Facebook. |
theme_write_disabled |
409 | Chỉnh sửa theme chưa được bật cho ứng dụng này. Hãy dùng theme app embed thay vì sửa tệp theme. |
scope_required |
403 | FastOG thiếu một quyền của Shopify. Hãy phê duyệt các phạm vi quyền được yêu cầu bằng consent_url trong phản hồi, sau đó thử lại bản sửa. |
Cầu nối Wix
Cầu nối Wix được ký bởi ứng dụng Wix chứ không phải phiên của người bán, vì vậy các lỗi của nó được gửi tới nhà phát triển ứng dụng. Mọi phản hồi vẫn mang code và request_id; id yêu cầu của cầu nối là id từ phong bì đã ký.
| Mã | HTTP | Ý nghĩa và cách xử lý |
|---|---|---|
invalid_bridge_signature |
401 | Chữ ký cầu nối Wix không xác minh được. Tạo lại yêu cầu với shared secret, đúng đường dẫn và dấu thời gian dưới năm phút. |
invalid_bridge_body |
400 | Phần thân phong bì cầu nối bị sai định dạng. Gửi body dưới dạng đối tượng JSON và mã hóa mọi số bên trong thành chuỗi để chữ ký chuẩn tắc khớp. |
replayed_bridge_request |
401 | Yêu cầu cầu nối đó đã được dùng rồi. Tạo request_id mới cho mỗi lần gọi có thay đổi dữ liệu. |
wix_site_not_installed |
403 | FastOG chưa được cài trên site Wix này. Cài ứng dụng FastOG trên site, rồi mở lại. |
wix_site_not_provisioned |
422 | Site Wix chưa có thông tin xác thực để ký. Cài lại ứng dụng FastOG để site được cấp API key. |
invalid_page_type |
422 | Loại trang này không nằm trong số loại trang FastOG hỗ trợ trên Wix. Gửi một trong các loại trang mà Studio cung cấp. |
rule_not_found |
404 | Không có quy tắc nào với id đó. Làm mới danh sách; quy tắc đã bị xóa hoặc thuộc về site khác. |
invalid_target_id |
422 | Id đích Wix không hợp lệ cho loại trang này. Gửi id mà ứng dụng Wix cung cấp cho loại trang đó. |
invalid_preview |
422 | Payload xem trước bị sai định dạng. Đọc đối tượng details để tìm trường bị lỗi. |
invalid_rule |
422 | Payload quy tắc ảnh bìa bị sai định dạng. Đọc đối tượng details; template là bắt buộc và các block tùy chọn phải là đối tượng. |
invalid_sync |
422 | Payload đồng bộ bị sai định dạng. Đọc đối tượng details; target_type và target_id phải khớp nhau. |
invalid_regenerate_url |
422 | Thiếu URL cần tạo lại. Gửi URL trang trong url. |
invalid_regenerate_host |
422 | URL không thuộc host của FastOG. Gửi URL ảnh bìa fastog.com. |
ai_presets_unsupported |
422 | Bộ ảnh bìa do AI thiết kế không còn được tạo nữa. Hãy chọn một trong các giao diện được tuyển chọn thay thế. |
original_tags_required |
422 | Các thẻ metadata gốc là bắt buộc. Gửi original_tags (hoặc current_tags) để việc gỡ cài đặt có thể khôi phục metadata của site. |
invalid_restored |
422 | Payload các khóa được khôi phục bị sai định dạng. Gửi restored dưới dạng mảng các khóa metadata. |
invalid_seo_target |
422 | Loại đích SEO không xác định. Dùng site, pattern hoặc item trong đường dẫn. |
invalid_seo_payload |
422 | Payload metadata SEO bị sai định dạng. Gửi target_id, current_tags và fastog_url dưới dạng URL http(s) tuyệt đối. |
sync_failed |
500 | Đồng bộ metadata sang Wix thất bại. Thử lại; nếu vẫn tiếp tục thất bại, kiểm tra site có thể truy cập được và ứng dụng vẫn còn được cài. |
invalid_tier |
422 | Gói đó không phải gói FastOG bán trên Wix. Gửi starter, pro hoặc scale làm tier. |
Bề mặt demo
Demo là bảng điều khiển bán hàng chỉ dành cho chủ sở hữu, không phải endpoint dành cho người bán.
| Mã | HTTP | Ý nghĩa và cách xử lý |
|---|---|---|
url_required |
422 | Không có URL nào được gửi. Hãy dán liên kết cửa hàng hoặc sản phẩm trước khi đọc thẻ. |
unreadable_url |
422 | Không thể đọc trang đó. Hãy kiểm tra liên kết có công khai và đầy đủ không; không thể đọc trang nằm sau đăng nhập. |
no_api_key |
422 | Không có API key nào để ký ảnh bìa. Hãy tạo API key (hoặc nhập một key hợp lệ); phản hồi có liên kết đến trang API keys. |
no_presets |
500 | Chưa cấu hình preset ảnh bìa nào. Hãy cấu hình ít nhất một preset trên máy chủ. |
Mã của trình soạn thảo quy tắc theo phạm vi
Các trình soạn thảo quy tắc theo phạm vi (Shopify admin và WooCommerce Studio) tự dịch các token này sang ngôn ngữ của chính người bán, vì vậy phản hồi của chúng chứa error và code nhưng không có hint — một mô tả tiếng Anh thứ hai sẽ chỉ lệch khỏi bản đã bản địa hóa mà người bán thực sự nhìn thấy:
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.
Vẫn chưa giải quyết được?
- Mở trang Render Logs trong dashboard — mọi kết quả (thành công + bị từ chối) đều được liệt kê kèm
error_code, trạng thái HTTP và các tham số được yêu cầu. - Chạy
php artisan og:diagnosetrên một URL đã ký để đi qua toàn bộ pipeline và xem giai đoạn nào thất bại. - Xem tài liệu ở thanh bên cho framework bạn đang dùng (Next.js, Express, SvelteKit, ...).