أخطاء API — ماذا يعني كل رمز وكيفية إصلاحه
يعيد FastOG رموز أخطاء قابلة للقراءة آليًا عند فشل الطلب — سواء كان طلب عرض صورة OG موقّعًا، أو استدعاءً لأحد واجهات الإدارة داخل المنتج. تتضمن كل استجابة خطأ ما يلي:
error— الرمز القصير القديم. لا يزال حاضرًا في كل فشل حتى يستمر العميل الأقدم في العمل.code— رمز الخطأ نفسه المستقر والموثّق (الجدول أدناه)، تحت الاسم الذي تستخدمه واجهة API العامة.message— وصف من جملة واحدة لما حدث خطأ.hint— وصف قصير بلغة واضحة لما حدث خطأ وكيفية إصلاحه.docs_url— رابط إلى هذه الصفحة، مثبّت عند القسم الخاص بذلك الرمز.request_id— يربط فشل HTTP هذا بصف في جدول Render Logs في لوحة التحكم (يُعاد أيضًا في ترويسة استجابةX-Request-ID). الواجهة التي لا يوجد لديها ما تربطه تُرجعnull، لكن المفتاح حاضر دائمًا.
تُرجع الواجهات داخل المنتج — لوحة إدارة Shopify، وWooCommerce Studio، وجسر Wix، والعرض التجريبي — نفس
المغلّف للرموز أدناه، لذا يعني الفشل الشيء نفسه أينما واجهته. قد تحتفظ واجهة وحدة ما بحالة HTTP التي كانت تُرجعها دائمًا لرمز ما (على سبيل المثال render_failed
تُرجع 503 عند تصدير الغلاف و502 عند واجهة API العامة)؛ أما الرمز والرسالة والتلميح ورابط الوثائق فلا تتغير.
قراءة استجابة الخطأ
{
"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 لديك — معظم حالات الفشل ناتجة عن أخطاء في التوقيع، لا عن مشكلات في الحساب.
- طابِق الرمز أدناه لمعرفة السبب الدقيق والإصلاح.
- في لوحة التحكم، افتح Render Logs وصفِّ حسب
error_codeنفسه — يعرض كل صف المعاملات المطلوبة حتى تتمكن من إعادة الإنتاج (والتأكد من تطابقrequest_id).
التوقيع والمصادقة
missing_signature
يفتقد طلبك إلى معاملات الاستعلام key و/أو s (التوقيع).
الإصلاح: تأكد من أن عنوان URL الخاص بك يتضمن كلاً من key=<api-key> وs=<hmac-signature>. استخدم SDK أو دليل /docs/hmac-signature-guide لبنائه.
invalid_signature
لم تتطابق قيمة s مع ما ينتجه سر HMAC الخاص بك لعنوان URL هذا.
الإصلاح: يغطي التوقيع كل معاملات الاستعلام باستثناء s، مع ترتيب المفاتيح. أي تغيير في أي معامل — بما في ذلك إعادة الترتيب أو اختلافات ترميز URL أو إضافة مسافات — يُبطل التوقيع. أعد التوقيع بعد كل تغيير. تأكد من أن سرك هو نفسه المعروض عند إنشاء مفتاح API.
invalid_signature_format
قيمة s ليست سلسلة hex من 64 حرفًا.
الإصلاح: يجب أن يكون التوقيع بصيغة SHA-256 hex خام (أحرف صغيرة a-f0-9). إذا كنت تستخدم ترميز base64 أو تقتطع الناتج، فاستخدم hex العادي.
expired_timestamp
الطابع الزمني t الذي قدمته أقدم من 5 دقائق.
الإصلاح: أعد توليد الطابع الزمني في كل مرة تبني فيها عنوان URL. ينطبق هذا الرمز على تدفق عنوان URL الموقّع القديم؛ أما تدفق HMAC v2 الحالي فلا يحتوي على طابع زمني.
invalid_api_key
مفتاح key الذي مررته غير موجود.
الإصلاح: انسخ مفتاح API الكامل من لوحة التحكم — فهو المعرّف العام الذي يبدأ بـ sk_. إنه عام وآمن في عناوين URL؛ أما السر (الذي لا يظهر أبدًا في عناوين URL) فهو ما يثبت الملكية.
missing_hmac_secret
لا يحتوي مفتاح API على سر HMAC مُهيأ.
الإصلاح: أنشئ مفتاح API جديدًا في لوحة التحكم — يُولَّد سر HMAC ويُعرض مرة واحدة عند الإنشاء.
المعامل / المدخل
invalid_image_url
خاصية تحمل URL (image، brand_logo، logo، avatar، background_image، ...) ليست URL عامًا من نوع http(s).
الإصلاح: مرّر URL عامًا قابلًا للجلب عبر https://.... تُرفض عناوين 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)؛ ويحتفظ كل منها بالمدخل الموثّق أعلاه.
| Code | HTTP | What it means and what to do |
|---|---|---|
invalid_shop |
422 | تعذّر التعرف على متجر Shopify. أعد تحميل تطبيق FastOG من لوحة إدارة Shopify كي يحمل الطلب المضمّن المتجر مرة أخرى، ثم أعد المحاولة. |
invalid_shop_or_page |
422 | المتجر أو نوع الصفحة غير معروف. افتح تطبيق FastOG من لوحة إدارة Shopify واختر نوع صفحة الغلاف من المحرر. |
invalid_store |
422 | تعذّر التعرف على متجر WooCommerce. أعد فتح Studio من لوحة إدارة WordPress كي يُقدَّم رمز المتجر مرة أخرى، ثم أعد المحاولة. |
invalid_store_or_page |
422 | المتجر أو نوع الصفحة غير معروف. أعد فتح Studio من لوحة إدارة WordPress واختر نوع صفحة غلاف يعرضه المحرر. |
missing_api_key |
422 | لا يملك المتجر مفتاح توقيع. أكمل تثبيت الإضافة من لوحة إدارة WordPress كي يتمكن FastOG من إصدار مفتاح التوقيع للمتجر. |
store_ownership_unverified |
403 | تعذّر التحقق من موقع WordPress. يجب أن يكون الموقع متاحًا عبر HTTPS عام مع تمكين REST API الخاص به. |
community_is_free |
422 | خطة Community مجانية. إنها الخطة الافتراضية المجانية ولا يمكن شراؤها؛ اختر خطة مدفوعة للترقية. |
not_installed |
404 | FastOG غير مثبّت لهذا المتجر. ثبّت تطبيق FastOG من Shopify App Store لهذا المتجر، ثم أعد فتحه. |
oauth_required |
409 | يحتاج المتجر إلى تفويض FastOG مرة أخرى. أعد تشغيل تثبيت FastOG عبر OAuth من لوحة إدارة Shopify؛ فقد أُبطل التفويض المخزّن أو تغيّرت نطاقاته. |
reconnect_required |
409 | يجب إعادة إنشاء اتصال Shopify. استخدم زر Reconnect في تطبيق FastOG كي يُصدر رمز وصول جديد. |
token_rejected |
409 | أصدر Shopify رمز وصول ثم رفضه. أعد محاولة إعادة الاتصال مرة واحدة؛ وإذا استمر Shopify في رفضه، فأعد تثبيت التطبيق. |
unauthorized |
401 | لا يحمل الطلب جلسة صالحة لهذه الواجهة. أعد تحميل تطبيق FastOG من لوحة إدارة منصتك كي يُرفق رمز جلسة جديد، ثم أعد المحاولة. |
shop_not_found |
404 | لم يعد المتجر موجودًا في FastOG. أعد تثبيت FastOG من لوحة إدارة Shopify لإعادة إنشاء سجل المتجر. |
invalid_product |
422 | مرجع المنتج غير صالح. أعد تحميل صفحة المنتج وأعد فتح FastOG؛ فقد كان معرّف المنتج المرسل مفقودًا أو غير رقمي. |
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 | تم تقديم أكثر من ثلاثة ألوان للعلامة التجارية. أرسل ثلاثة ألوان hex كحد أقصى. |
upload_failed |
500 | تعذّر تخزين الملف المرفوع. أعد المحاولة؛ وإذا استمر الفشل، فتواصل مع الدعم — لم يُرجع مخزن الأصول أي URL عام. |
attachment_upload_failed |
500 | تعذّر تخزين مرفق الدعم. أرسل الرسالة دون المرفق، ثم أرسل الملف بالبريد الإلكتروني إلى الدعم. |
invalid_webhook |
401 | لم يتحقق توقيع webhook المتجر. تحقق من أن سر webhook في إعدادات FastOG على WordPress لديك يطابق السر الذي أصدره FastOG. |
not_found |
404 | لم تعد نقطة النهاية هذه موجودة. أعد فتح Studio من لوحة إدارة WordPress. |
meta_refresh_unavailable |
503 | تحديث معاينة المشاركة غير مهيأ. أعد مشاركة الرابط من Facebook بدلًا من ذلك. |
theme_write_disabled |
409 | تحرير القالب غير ممكّن لهذا التطبيق. استخدم تضمين تطبيق القالب بدلًا من إصلاح ملف القالب. |
scope_required |
403 | يفتقد FastOG إلى إذن من Shopify. وافق على النطاقات المطلوبة باستخدام consent_url في الاستجابة، ثم أعد محاولة الإصلاح. |
جسر Wix
يُوقَّع جسر Wix بواسطة تطبيق Wix، وليس بجلسة تاجر، لذا تُوجَّه إخفاقاته إلى مطوّر التطبيق. ما زال كل ردّ يحمل code وrequest_id؛ ومعرّف طلب الجسر هو المعرّف الوارد في المغلّف الموقَّع.
| الرمز | HTTP | ما يعنيه وما ينبغي فعله |
|---|---|---|
invalid_bridge_signature |
401 | لم ينجح التحقق من توقيع جسر Wix. أعد إنشاء الطلب باستخدام السر المشترك والمسار الدقيق وطابع زمني عمره أقل من خمس دقائق. |
invalid_bridge_body |
400 | جسم مغلّف الجسر مشوّه. أرسل body ككائن JSON ورمّز كل رقم داخله كسلسلة نصية، حتى يتطابق التوقيع القانوني. |
replayed_bridge_request |
401 | سبق استخدام طلب الجسر هذا. أنشئ request_id جديدًا لكل استدعاء يُعدّل البيانات. |
wix_site_not_installed |
403 | FastOG غير مثبّت على موقع Wix هذا. ثبّت تطبيق FastOG على الموقع، ثم أعد فتحه. |
wix_site_not_provisioned |
422 | لا يملك موقع Wix بيانات اعتماد توقيع بعد. أعد تثبيت تطبيق FastOG حتى يُجهَّز الموقع بمفتاح API. |
invalid_page_type |
422 | نوع الصفحة ليس من الأنواع التي يغطيها FastOG على Wix. أرسل أحد أنواع الصفحات التي يوفّرها Studio. |
rule_not_found |
404 | لا توجد قاعدة بهذا المعرّف. حدّث القائمة؛ فقد حُذفت القاعدة أو تنتمي إلى موقع آخر. |
invalid_target_id |
422 | معرّف هدف Wix غير صالح لنوع الصفحة هذا. أرسل المعرّف الذي يوفّره تطبيق Wix لنوع الصفحة هذا. |
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. أرسل عنوان URL لغلاف على fastog.com. |
ai_presets_unsupported |
422 | لم تعد تُولَّد مجموعات الأغلفة المصمَّمة بالذكاء الاصطناعي. اختر أحد المظاهر المنسّقة بدلًا من ذلك. |
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 الوصفية مشوّهة. أرسل target_id وcurrent_tags وfastog_url كعنوان URL مطلق من نوع http(s). |
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.
ما زلت عالقًا؟
- افتح صفحة Render Logs في لوحة التحكم — تُدرج كل نتيجة (نجاح + رفض) مع
error_codeوحالة HTTP والمعاملات المطلوبة. - نفّذ
php artisan og:diagnoseعلى URL موقّع لتتبّع المسار كاملًا ومعرفة المرحلة التي تفشل. - راجع الوثائق في الشريط الجانبي الخاصة بالإطار الذي تستخدمه (Next.js، Express، SvelteKit، ...).