Subiect

Erori API — Ce înseamnă fiecare cod și cum să o repari

FastOG returnează coduri de eroare citibile de mașină atunci când o cerere eșuează — o randare de imagine OG semnată sau un apel către una dintre suprafețele administrative din produs. Fiecare răspuns de eroare include:

  • error — tokenul scurt legacy. Încă prezent la fiecare eșec, astfel încât un client mai vechi să continue să funcționeze.
  • code — același cod de eroare stabil și documentat (tabelul de mai jos), sub numele folosit de API-ul public.
  • message — o descriere de o propoziție a ceea ce a mers greșit.
  • hint — o scurtă descriere în limbaj simplu a ceea ce a mers greșit și cum să o repari.
  • docs_url — un link către această pagină, ancorat la secțiunea pentru acel cod.
  • request_id — corelează acest eșec HTTP cu un rând din tabelul Render Logs din dashboard (returnat și în header-ul răspunsului X-Request-ID). O suprafață fără nimic de corelat răspunde cu null, dar cheia este întotdeauna prezentă.

Suprafețele din produs — adminul Shopify, WooCommerce Studio, puntea Wix și demo-ul — răspund cu același envelope pentru codurile de mai jos, astfel încât un eșec înseamnă același lucru oriunde îl întâlnești. O suprafață de modul poate păstra statusul HTTP pe care l-a returnat dintotdeauna pentru un cod (de exemplu render_failed răspunde cu 503 la exportul copertei și cu 502 la API-ul public); codul, mesajul, hint-ul și link-ul către documentație nu se schimbă.

Citirea unui răspuns de eroare

json
{
  "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-..."
}

Dacă primești un răspuns pe care nu îl înțelegi, calea cea mai rapidă este:

  1. Notează code.
  2. Verifică-ți constructorul de URL — majoritatea eșecurilor sunt bug-uri de semnare, nu probleme de cont.
  3. Potrivește codul de mai jos pentru cauza și soluția exactă.
  4. În dashboard, deschide Render Logs și filtrează după același error_code — fiecare rând afișează parametrii solicitați, astfel încât să poți reproduce (și confirma că request_id corespunde).

Semnare și autentificare

missing_signature

Cererii tale îi lipsesc parametrii de interogare key și/sau s (semnătura).

Remediu: asigură-te că URL-ul tău include atât key=<api-key>, cât și s=<hmac-signature>. Folosește SDK-ul sau ghidul /docs/hmac-signature-guide pentru a-l construi.

invalid_signature

Valoarea s nu corespunde cu ceea ce produce secretul tău HMAC pentru acest URL.

Remediu: semnătura acoperă fiecare parametru de interogare cu excepția s, cu cheile sortate. Modificarea oricărui parametru — inclusiv reordonarea, diferențele de codificare URL sau adăugarea de spații — invalidează semnătura. Resemnează după fiecare modificare. Confirmă că secretul tău este același afișat la crearea cheii API.

invalid_signature_format

Valoarea s nu este un șir hex de 64 de caractere.

Remediu: semnătura trebuie să fie hex SHA-256 brut (a-f0-9 minuscule). Dacă codezi base64 sau trunchiezi rezultatul, folosește hex simplu.

expired_timestamp

Timestamp-ul t pe care l-ai furnizat are mai mult de 5 minute.

Remediu: regenerează timestamp-ul de fiecare dată când construiești un URL. Acest cod se aplică fluxului legacy cu URL semnat; fluxul actual HMAC v2 nu are timestamp.

invalid_api_key

key pe care l-ai transmis nu există.

Remediu: copiază cheia API completă din dashboard — este identificatorul public care începe cu sk_. Este publică și sigură în URL-uri; secretul (niciodată în URL-uri) este cel care dovedește posesia.

missing_hmac_secret

Cheia API nu are niciun secret HMAC configurat.

Remediu: creează o cheie API nouă în dashboard — secretul HMAC este generat și afișat o singură dată la creare.


Parametru / input

invalid_image_url

O proprietate care conține un URL (image, brand_logo, logo, avatar, background_image, ...) nu este un URL public http(s).

Remediere: transmite un URL https://... accesibil public. Localhost, IP-urile private și căile simple sunt respinse pentru a preveni falsificarea cererilor pe partea de server (server-side request forgery).


Abonament

subscription_required (402)

Cererea a ajuns la Dynamic API, dar contul tău nu are niciun plan activ. Accesul la API este doar pe bază de abonament: planul este condiția de acces și oferă aceeași acoperire și aceeași scară de capabilități pe care le vând aplicațiile FastOG. Randările în sine nu sunt contorizate — nu există o cotă lunară de randări și nicio facturare pentru depășire.

Soluție: alege un plan Dynamic API în dashboard și creează o cheie API. Răspunsul include un top_up_url care indică pagina planurilor.


Serviciul de randare

store_blocked (403)

Randarea pentru magazinul din spatele acestei chei a fost suspendată de FastOG (de exemplu, abuz sau utilizare excesivă). Copertele deja cache-uite la edge pot continua să fie servite până la expirare. Contactează suportul pentru a rezolva situația; nimic din ce poți modifica în cerere nu va rezolva asta.

render_unreachable

Serviciul de randare nu a putut fi contactat (fereastră scurtă de repornire).

Soluție: reîncearcă peste câteva secunde. Randarea nu a fost contorizată pentru această încercare.

render_failed

Serviciul de randare a returnat o eroare pentru cererea ta.

Soluție: verifică proprietățile șablonului — valori lungi/malformate, câmpuri neacceptate sau o imagine upstream inaccesibilă. Răspunsul include status subiacent. Randarea nu a fost contorizată.


Suprafețe de administrare ale magazinului

Aceste coduri răspund din adminul Shopify și din WooCommerce Studio — editoarele încorporate în care lucrează un comerciant, nu din API-ul semnat. Câteva sunt comune cu API-ul public (invalid_image_url, render_failed, invalid_signature); acelea păstrează intrarea documentată mai sus.

Cod HTTP Ce înseamnă și ce trebuie să faci
invalid_shop 422 Magazinul Shopify nu a putut fi identificat. Reîncarcă aplicația FastOG din adminul tău Shopify, astfel încât cererea încorporată să transporte din nou magazinul, apoi încearcă din nou.
invalid_shop_or_page 422 Magazinul sau tipul de pagină este necunoscut. Deschide aplicația FastOG din adminul tău Shopify și alege un tip de pagină pentru copertă din editor.
invalid_store 422 Magazinul WooCommerce nu a putut fi identificat. Redeschide Studio din adminul tău WordPress, astfel încât tokenul magazinului să fie prezentat din nou, apoi încearcă din nou.
invalid_store_or_page 422 Magazinul sau tipul de pagină este necunoscut. Redeschide Studio din adminul tău WordPress și alege un tip de pagină pentru copertă oferit de editor.
missing_api_key 422 Magazinul nu are o cheie de semnare. Finalizează instalarea pluginului din adminul tău WordPress, astfel încât FastOG să poată emite cheia de semnare pentru magazin.
store_ownership_unverified 403 Site-ul WordPress nu a putut fi verificat. Trebuie să fie accesibil prin HTTPS public, cu REST API activat.
community_is_free 422 Planul Community este gratuit. Este planul implicit gratuit și nu poate fi cumpărat; alege un nivel plătit pentru a face upgrade.
not_installed 404 FastOG nu este instalat pentru acest magazin. Instalează aplicația FastOG din Shopify App Store pentru acest magazin, apoi redeschide-o.
oauth_required 409 Magazinul trebuie să autorizeze din nou FastOG. Rulează din nou instalarea OAuth FastOG din adminul tău Shopify; autorizarea stocată a fost revocată sau scope-urile ei s-au schimbat.
reconnect_required 409 Conexiunea Shopify trebuie restabilită. Folosește butonul Reconnect din aplicația FastOG, astfel încât să fie emis un access token nou.
token_rejected 409 Shopify a emis un access token și apoi l-a refuzat. Reîncearcă reconectarea o dată; dacă Shopify continuă să îl refuze, reinstalează aplicația.
unauthorized 401 Cererea nu conține o sesiune validă pentru această suprafață. Reîncarcă aplicația FastOG din adminul platformei tale, astfel încât să fie atașat un token de sesiune nou, apoi încearcă din nou.
shop_not_found 404 Magazinul nu mai există în FastOG. Reinstalează FastOG din adminul tău Shopify pentru a recrea înregistrarea magazinului.
invalid_product 422 Referința produsului nu este validă. Reîncarcă pagina produsului și redeschide FastOG; id-ul produsului trimis lipsea sau nu era numeric.
invalid_product_cover 422 Payload-ul copertei produsului este malformat. Reîncarcă editorul și salvează din nou; props, style și signals trebuie să fie fiecare câte un obiect.
product_not_found 404 Produsul nu a putut fi citit din magazin. Verifică dacă produsul mai există și este publicat, apoi reîncarcă editorul.
product_customization_not_on_plan 403 Personalizarea copertei per produs nu este inclusă în acest plan. Fă upgrade sau editează în schimb coperta partajată a produsului.
no_product_handles 422 Nu s-au găsit produse de reîmprospătat. Publică cel puțin un produs cu un handle public, apoi încearcă din nou reîmprospătarea share-preview.
invalid_style 422 Blocul de stil nu este utilizabil. Reîncarcă editorul și alege din nou culorile și fonturile; o valoare nu a putut fi normalizată.
invalid_template 422 Șablonul solicitat nu este în catalogul acestei platforme. Alege unul dintre layout-urile oferite de editor.
invalid_preset 422 Numele presetului nu este unul oferit de această platformă. Alege un preset din ecranul de configurare.
invalid_set 422 Payload-ul setului de coperte lipsește sau este malformat. Reîncarcă ecranul de configurare și alege din nou un set.
preset_not_applyable 422 Presetul nu poate fi aplicat pentru fiecare tip de pagină. Alege alt preset; acestuia îi lipsește o copertă pentru cel puțin un tip de pagină.
template_not_available 422 Șablonul nu este în catalogul de randare. Alege un layout oferit de selector.
template_not_available_on_shopify 422 Șablonul nu este disponibil pe magazinele Shopify. Alege un layout oferit de editorul Shopify.
template_not_available_on_woocommerce 422 Șablonul nu este disponibil pe magazinele WooCommerce. Alege un layout oferit de Studio.
template_unavailable 422 Șablonul nu este disponibil pentru acest magazin. Alege un layout oferit de editor; este retras, necunoscut sau peste ceea ce poate desena magazinul.
template_not_on_plan 403 Șablonul necesită un plan superior. Schimbă planul sau alege un layout acoperit de planul actual. Răspunsul indică planul în requires.
template_requires_higher_plan 403 Șablonul necesită un plan superior. Răspunsul indică planul în requires.
no_rule 404 Nu există încă o regulă de copertă pentru acest tip de pagină. Salvează mai întâi o copertă pentru acest tip de pagină în editor.
cover_not_configured 404 Nu a fost salvată încă nicio copertă de produs. Salvează o copertă de produs înainte de a o descărca sau partaja.
schedule_only_product 422 Programarea campaniilor există doar pentru copertele de produs. Elimină data de revenire sau mută campania pe coperta de produs.
not_dismissible 422 Acel anunț nu poate fi închis. Reîncarcă pagina; a fost deja retras sau aparține altui magazin.
unsupported_locale 422 Acea limbă de interfață nu este inclusă pentru această aplicație. Alege una dintre limbile listate de răspuns în supported.
no_setup_sets 422 Nu s-au putut asambla seturi de coperte curatoriate. Reîncearcă ecranul de configurare; dacă rămâne gol, contactează suportul.
export_unavailable 403 Descărcările nu sunt incluse în acest plan. Fă upgrade la Pro sau superior pentru a descărca fișierele de copertă.
cancellation_failed 502 Anularea abonamentului a fost refuzată. Reîncearcă într-un moment; dacă eșuează în continuare, anulează din pagina de facturare Shopify sau contactează suportul.
logo_override_on_plan 403 Suprascrierea logo-ului nu este inclusă în acest plan. Fă upgrade sau elimină suprascrierea logo-ului.
invalid_logo 422 Fișierul logo nu este o imagine acceptată. Încarcă un PNG, JPEG sau WebP sub limita de dimensiune afișată în editor.
invalid_brand_image 422 Imaginea de referință pentru brand nu este utilizabilă. Încarcă o imagine acceptată sub limita de dimensiune sau elimină referința și salvează din nou.
brand_image_too_large 422 Imaginea de referință pentru brand este prea mare. Micșorează fișierul și încarcă-l din nou.
brand_colors_too_many 422 Au fost trimise mai mult de trei culori de brand. Trimite cel mult trei culori hex.
upload_failed 500 Fișierul încărcat nu a putut fi stocat. Reîncearcă; dacă eșuează în continuare, contactează suportul — asset store-ul nu a returnat niciun URL public.
attachment_upload_failed 500 Atașamentul pentru suport nu a putut fi stocat. Trimite mesajul fără atașament, apoi trimite fișierul prin email la suport.
invalid_webhook 401 Semnătura webhook-ului magazinului nu a fost verificată. Verifică dacă secretul webhook-ului din setările FastOG pentru WordPress corespunde celui emis de FastOG.
not_found 404 Acel endpoint nu mai există. Redeschide Studio din adminul tău WordPress.
meta_refresh_unavailable 503 Reîmprospătarea share-preview nu este configurată. Partajează din nou linkul din Facebook.
theme_write_disabled 409 Editarea temei nu este activată pentru această aplicație. Folosește theme app embed în loc de corectarea fișierelor temei.
scope_required 403 FastOG nu are o permisiune Shopify. Aprobă scope-urile solicitate folosind consent_url din răspuns, apoi reîncearcă remedierea.

Bridge Wix

Bridge-ul Wix este semnat de aplicația Wix, nu de o sesiune de comerciant, așa că eșecurile sale sunt adresate dezvoltatorului aplicației. Fiecare răspuns poartă în continuare code și request_id; id-ul cererii bridge este cel din plicul semnat.

Cod HTTP Ce înseamnă și ce trebuie să faci
invalid_bridge_signature 401 Semnătura bridge-ului Wix nu s-a verificat. Regenerează cererea cu secretul partajat, calea exactă și un timestamp mai vechi de cel mult cinci minute.
invalid_bridge_body 400 Corpul plicului bridge este malformat. Trimite body ca obiect JSON și codifică fiecare număr din interior ca șir, astfel încât semnătura canonică să corespundă.
replayed_bridge_request 401 Acea cerere bridge a fost deja folosită. Generează un request_id nou pentru fiecare apel care modifică date.
wix_site_not_installed 403 FastOG nu este instalat pe acest site Wix. Instalează aplicația FastOG pe site, apoi redeschide-o.
wix_site_not_provisioned 422 Site-ul Wix nu are încă credențiale de semnare. Reinstalează aplicația FastOG pentru ca site-ul să fie provisionat cu o cheie API.
invalid_page_type 422 Tipul de pagină nu este unul acoperit de FastOG pe Wix. Trimite unul dintre tipurile de pagină oferite de Studio.
rule_not_found 404 Nu există nicio regulă cu acel id. Reîmprospătează lista; regula a fost ștearsă sau aparține altui site.
invalid_target_id 422 Id-ul țintei Wix nu este valid pentru acest tip de pagină. Trimite id-ul furnizat de aplicația Wix pentru acel tip de pagină.
invalid_preview 422 Payload-ul de previzualizare este malformat. Citește obiectul details pentru câmpul care a eșuat.
invalid_rule 422 Payload-ul regulii de copertă este malformat. Citește obiectul details; template este obligatoriu, iar blocurile opționale trebuie să fie obiecte.
invalid_sync 422 Payload-ul de sincronizare este malformat. Citește obiectul details; target_type și target_id trebuie să corespundă.
invalid_regenerate_url 422 Lipsește URL-ul de regenerat. Trimite URL-ul paginii în url.
invalid_regenerate_host 422 URL-ul nu aparține hostului FastOG. Trimite un URL de copertă fastog.com.
ai_presets_unsupported 422 Seturile de coperți proiectate cu AI nu mai sunt generate. Alege în schimb unul dintre look-urile curatoriate.
original_tags_required 422 Etichetele de metadate originale sunt obligatorii. Trimite original_tags (sau current_tags) pentru ca o dezinstalare să poată restaura metadatele site-ului.
invalid_restored 422 Payload-ul cheilor restaurate este malformat. Trimite restored ca array de chei de metadate.
invalid_seo_target 422 Tipul țintei SEO este necunoscut. Folosește site, pattern sau item în cale.
invalid_seo_payload 422 Payload-ul de metadate SEO este malformat. Trimite target_id, current_tags și fastog_url ca URL absolut http(s).
sync_failed 500 Sincronizarea metadatelor către Wix a eșuat. Reîncearcă; dacă eșuează în continuare, verifică dacă site-ul este accesibil și dacă aplicația este încă instalată.
invalid_tier 422 Acel plan nu este unul pe care FastOG îl vinde pe Wix. Trimite starter, pro sau scale ca nivel.

Suprafața demo

Demo-ul este consola de vânzări doar pentru proprietar, nu un endpoint pentru comercianți.

Cod HTTP Ce înseamnă și ce trebuie făcut
url_required 422 Nu a fost trimis niciun URL. Lipește linkul magazinului sau al produsului înainte de a citi cardul.
unreadable_url 422 Pagina respectivă nu a putut fi citită. Verifică dacă linkul este public și complet; o pagină aflată în spatele unui login nu poate fi citită.
no_api_key 422 Nu este disponibilă nicio cheie API pentru semnarea copertelor. Creează o cheie API (sau introdu una validă); răspunsul conține un link către pagina cheilor API.
no_presets 500 Nu sunt configurate presetări de copertă. Configurează cel puțin o presetare pe server.

Codurile editorului de reguli cu domeniu de aplicare

Editoarele de reguli cu domeniu de aplicare (adminul Shopify și WooCommerce Studio) traduc singure aceste tokenuri, în limba comerciantului, așa că răspunsurile lor conțin error și code, dar nu hint — o a doua descriere în engleză s-ar abate doar de la cea localizată pe care o vede efectiv comerciantul:

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.


Încă blocat?

  • Deschide pagina Render Logs din dashboard — fiecare rezultat (succes + respingere) este listat cu error_code, statusul HTTP și parametrii solicitați.
  • Rulează php artisan og:diagnose pe un URL semnat pentru a parcurge întregul pipeline și a vedea la ce etapă apare eroarea.
  • Verifică documentația din bara laterală pentru framework-ul pe care îl folosești (Next.js, Express, SvelteKit, ...).

Încearcă gratuit — nu este necesară înregistrarea

Previzualizează și testează imagini OG dinamice în câteva secunde.

Deschide Testerul gratuit de imagini OG

A BeCaSimulations site