Sujet

Erreurs d'API — signification de chaque code et comment le corriger

FastOG renvoie des codes d'erreur lisibles par machine lorsqu'une requête échoue — un rendu d'image OG signé, ou un appel à l'une des surfaces d'administration intégrées au produit. Chaque réponse d'erreur contient :

  • error — l'ancien jeton court. Toujours présent à chaque échec pour qu'un client plus ancien continue de fonctionner.
  • code — le même code d'erreur stable et documenté (tableau ci-dessous), sous le nom utilisé par l'API publique.
  • message — une description en une phrase de ce qui a échoué.
  • hint — une courte description en langage clair de ce qui a échoué et de la façon de le corriger.
  • docs_url — un lien vers cette page, ancré sur la section correspondant à ce code.
  • request_id — corrèle cet échec HTTP à une ligne du tableau Render Logs du dashboard (également renvoyé dans l'en-tête de réponse X-Request-ID). Une surface sans rien à corréler répond null, mais la clé est toujours présente.

Les surfaces intégrées au produit — l'admin Shopify, le WooCommerce Studio, le pont Wix et la démo — répondent avec la même enveloppe pour les codes ci-dessous, si bien qu'un échec signifie la même chose où que vous le rencontriez. Une surface de module peut conserver le statut HTTP qu'elle a toujours renvoyé pour un code (par exemple render_failed répond 503 sur l'export de couverture et 502 sur l'API publique) ; le code, le message, l'indication et le lien vers la documentation ne changent pas.

Lire une réponse d'erreur

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

Si vous recevez une réponse que vous ne comprenez pas, voici la démarche la plus rapide :

  1. Notez le code.
  2. Vérifiez votre générateur d'URL — la plupart des échecs sont des bugs de signature, pas des problèmes de compte.
  3. Reportez-vous au code ci-dessous pour identifier la cause exacte et le correctif.
  4. Dans le tableau de bord, ouvrez Render Logs et filtrez sur le même error_code — chaque ligne affiche les paramètres demandés pour que vous puissiez reproduire le problème (et confirmer que request_id correspond).

Signature et authentification

missing_signature

Il manque à votre requête les paramètres de requête key et/ou s (signature).

Correction : assurez-vous que votre URL contient à la fois key=<api-key> et s=<hmac-signature>. Utilisez le SDK ou le guide /docs/hmac-signature-guide pour la construire.

invalid_signature

La valeur s ne correspond pas à ce que votre secret HMAC produit pour cette URL.

Correction : la signature couvre tous les paramètres de requête sauf s, avec les clés triées. Modifier un paramètre — y compris le réordonner, des différences d'encodage URL ou l'ajout d'espaces — invalide la signature. Re-signez après chaque modification. Vérifiez que votre secret est bien celui affiché lors de la création de la clé API.

invalid_signature_format

La valeur s n'est pas une chaîne hexadécimale de 64 caractères.

Correction : la signature doit être le hachage SHA-256 brut en hexadécimal (minuscules a-f0-9). Si vous encodez en base64 ou tronquez la sortie, utilisez simplement l'hexadécimal.

expired_timestamp

L'horodatage t que vous avez fourni date de plus de 5 minutes.

Correction : régénérez l'horodatage à chaque fois que vous construisez une URL. Ce code s'applique au flux hérité des URL signées ; le flux HMAC v2 actuel n'a pas d'horodatage.

invalid_api_key

La key que vous avez transmise n'existe pas.

Correction : copiez la clé API complète depuis le tableau de bord — c'est l'identifiant public commençant par sk_. Il est public et sans risque dans les URL ; c'est le secret (jamais dans les URL) qui prouve la possession.

missing_hmac_secret

Aucun secret HMAC n'est configuré pour la clé API.

Correction : créez une nouvelle clé API dans le tableau de bord — le secret HMAC est généré et affiché une seule fois à la création.


Paramètre / entrée

invalid_image_url

Une prop contenant une URL (image, brand_logo, logo, avatar, background_image, ...) n'est pas une URL http(s) publique.

Correction : passez une URL https://... accessible publiquement. Les adresses localhost, les IP privées et les chemins bruts sont rejetés afin de prévenir les falsifications de requête côté serveur (SSRF).


Abonnement

subscription_required (402)

La requête a atteint la Dynamic API, mais votre compte ne dispose d'aucun forfait actif. L'accès à l'API est réservé aux abonnés : le forfait fait office de condition d'accès et reprend la même couverture ainsi que la même progressivité des fonctionnalités que celles vendues par les applications FastOG. Les rendus eux-mêmes ne sont pas mesurés : il n'existe ni quota mensuel de rendus ni facturation au dépassement.

Correction : choisissez un forfait Dynamic API dans le dashboard et créez une clé API. La réponse inclut un top_up_url pointant vers la page des forfaits.


Service de rendu

store_blocked (403)

Le rendu pour la boutique associée à cette clé a été suspendu par FastOG (par exemple en cas d'abus ou d'usage excessif). Les couvertures déjà mises en cache au niveau du edge peuvent continuer à être servies jusqu'à leur expiration. Contactez le support pour résoudre la situation ; aucune modification de la requête ne permettra d'y remédier.

render_unreachable

Le service de rendu n'a pas pu être joint (fenêtre de redémarrage brève).

Correctif : réessayez dans quelques secondes. Le rendu n'a pas été comptabilisé pour cette tentative.

render_failed

Le service de rendu a renvoyé une erreur pour votre requête.

Correctif : vérifiez les props de votre template — valeurs trop longues ou malformées, champs non pris en charge, ou image amont inaccessible. La réponse inclut le status sous-jacent. Le rendu n'a pas été comptabilisé.


Surfaces d'administration de la boutique

Ces codes répondent depuis l'administration Shopify et le WooCommerce Studio — les éditeurs intégrés dans lesquels un marchand travaille plutôt que l'API signée. Plusieurs sont partagés avec l'API publique (invalid_image_url, render_failed, invalid_signature) ; ceux-ci conservent l'entrée documentée ci-dessus.

Code HTTP Ce que cela signifie et ce qu'il faut faire
invalid_shop 422 La boutique Shopify n'a pas pu être identifiée. Rechargez l'application FastOG depuis votre admin Shopify afin que la requête embarquée transporte de nouveau la boutique, puis réessayez.
invalid_shop_or_page 422 La boutique ou le type de page est inconnu. Ouvrez l'application FastOG depuis votre admin Shopify et choisissez un type de page de couverture dans l'éditeur.
invalid_store 422 La boutique WooCommerce n'a pas pu être identifiée. Rouvrez le Studio depuis votre admin WordPress afin que le jeton de boutique soit de nouveau présenté, puis réessayez.
invalid_store_or_page 422 La boutique ou le type de page est inconnu. Rouvrez le Studio depuis votre admin WordPress et choisissez un type de page de couverture proposé par l'éditeur.
missing_api_key 422 La boutique n'a pas de clé de signature. Terminez l'installation de l'extension depuis votre admin WordPress afin que FastOG puisse émettre la clé de signature de la boutique.
store_ownership_unverified 403 Le site WordPress n'a pas pu être vérifié. Il doit être joignable en HTTPS public avec son API REST activée.
community_is_free 422 Le plan Community est gratuit. C'est le plan gratuit par défaut et il n'est pas achetable ; choisissez une offre payante pour passer à un niveau supérieur.
not_installed 404 FastOG n'est pas installé pour cette boutique. Installez l'application FastOG depuis le Shopify App Store pour cette boutique, puis rouvrez-la.
oauth_required 409 La boutique doit autoriser FastOG à nouveau. Relancez l'installation OAuth de FastOG depuis votre admin Shopify ; l'autorisation stockée a été révoquée ou ses scopes ont changé.
reconnect_required 409 La connexion Shopify doit être rétablie. Utilisez le bouton Reconnecter dans l'application FastOG afin qu'un nouveau jeton d'accès soit émis.
token_rejected 409 Shopify a émis un jeton d'accès puis l'a refusé. Réessayez la reconnexion une fois ; si Shopify continue de le refuser, réinstallez l'application.
unauthorized 401 La requête ne porte aucune session valide pour cette surface. Rechargez l'application FastOG depuis l'admin de votre plateforme afin qu'un nouveau jeton de session soit attaché, puis réessayez.
shop_not_found 404 La boutique n'existe plus dans FastOG. Réinstallez FastOG depuis votre admin Shopify pour recréer l'enregistrement de la boutique.
invalid_product 422 La référence produit n'est pas valide. Rechargez la page produit et rouvrez FastOG ; l'identifiant produit envoyé était absent ou non numérique.
invalid_product_cover 422 La charge utile de la couverture produit est malformée. Rechargez l'éditeur et enregistrez à nouveau ; props, style et signals doivent chacun être un objet.
product_not_found 404 Le produit n'a pas pu être lu depuis la boutique. Vérifiez que le produit existe toujours et qu'il est publié, puis rechargez l'éditeur.
product_customization_not_on_plan 403 La personnalisation de couverture par produit n'est pas incluse dans ce plan. Passez à un plan supérieur, ou modifiez plutôt la couverture produit partagée.
no_product_handles 422 Aucun produit n'a été trouvé à actualiser. Publiez au moins un produit avec un handle public, puis relancez l'actualisation de l'aperçu de partage.
invalid_style 422 Le bloc de style n'est pas exploitable. Rechargez l'éditeur et resélectionnez les couleurs et les polices ; une valeur n'a pas pu être normalisée.
invalid_template 422 Le template demandé ne figure pas dans le catalogue de cette plateforme. Choisissez l'une des mises en page proposées par l'éditeur.
invalid_preset 422 Le nom de preset ne fait pas partie de ceux proposés par cette plateforme. Choisissez un preset depuis l'écran de configuration.
invalid_set 422 La charge utile du jeu de couvertures est absente ou malformée. Rechargez l'écran de configuration et choisissez à nouveau un jeu.
preset_not_applyable 422 Le preset ne peut pas être appliqué à tous les types de page. Choisissez un autre preset ; celui-ci n'a pas de couverture pour au moins un type de page.
template_not_available 422 Le template ne figure pas dans le catalogue des templates rendables. Choisissez une mise en page proposée par le sélecteur.
template_not_available_on_shopify 422 Le template n'est pas disponible sur les boutiques Shopify. Choisissez une mise en page proposée par l'éditeur Shopify.
template_not_available_on_woocommerce 422 Le template n'est pas disponible sur les boutiques WooCommerce. Choisissez une mise en page proposée par le Studio.
template_unavailable 422 Le template n'est pas disponible pour cette boutique. Choisissez une mise en page proposée par l'éditeur ; il est retiré, inconnu, ou au-delà de ce que la boutique peut générer.
template_not_on_plan 403 Le template nécessite un plan supérieur. Changez de plan, ou choisissez une mise en page couverte par le plan actuel. La réponse indique le plan dans requires.
template_requires_higher_plan 403 Le template nécessite un plan supérieur. La réponse indique le plan dans requires.
no_rule 404 Il n'existe pas encore de règle de couverture pour ce type de page. Enregistrez d'abord une couverture pour ce type de page dans l'éditeur.
cover_not_configured 404 Aucune couverture produit n'a encore été enregistrée. Enregistrez une couverture produit avant de la télécharger ou de la partager.
schedule_only_product 422 La planification de campagne n'existe que pour les couvertures produit. Supprimez la date de rétablissement, ou déplacez la campagne vers la couverture produit.
not_dismissible 422 Cette annonce ne peut pas être ignorée. Rechargez la page ; elle a déjà été retirée ou appartient à une autre boutique.
unsupported_locale 422 Cette langue d'interface n'est pas fournie avec cette application. Choisissez l'une des langues listées par la réponse dans supported.
no_setup_sets 422 Aucun jeu de couvertures sélectionné n'a pu être assemblé. Relancez l'écran de configuration ; s'il reste vide, contactez le support.
export_unavailable 403 Les téléchargements ne sont pas inclus dans ce plan. Passez à Pro ou au-delà pour télécharger les fichiers de couverture.
cancellation_failed 502 L'annulation de l'abonnement a été refusée. Réessayez dans un instant ; si l'échec persiste, annulez depuis la page de facturation Shopify ou contactez le support.
logo_override_on_plan 403 La substitution du logo n'est pas incluse dans ce plan. Passez à un plan supérieur, ou supprimez la substitution du logo.
invalid_logo 422 Le fichier de logo n'est pas une image acceptée. Téléversez un PNG, JPEG ou WebP sous la limite de taille indiquée dans l'éditeur.
invalid_brand_image 422 L'image de référence de marque n'est pas exploitable. Téléversez une image prise en charge sous la limite de taille, ou supprimez la référence et enregistrez à nouveau.
brand_image_too_large 422 L'image de référence de marque est trop volumineuse. Réduisez le fichier et téléversez-le à nouveau.
brand_colors_too_many 422 Plus de trois couleurs de marque ont été fournies. Envoyez au maximum trois couleurs hexadécimales.
upload_failed 500 Le fichier téléversé n'a pas pu être stocké. Réessayez ; si l'échec persiste, contactez le support — le stockage d'assets n'a renvoyé aucune URL publique.
attachment_upload_failed 500 La pièce jointe du support n'a pas pu être stockée. Envoyez le message sans la pièce jointe, puis envoyez le fichier par e-mail au support.
invalid_webhook 401 La signature du webhook de la boutique n'a pas été vérifiée. Vérifiez que le secret du webhook dans vos réglages FastOG WordPress correspond à celui émis par FastOG.
not_found 404 Ce point de terminaison n'existe plus. Rouvrez le Studio depuis votre admin WordPress.
meta_refresh_unavailable 503 L'actualisation de l'aperçu de partage n'est pas configurée. Partagez plutôt le lien à nouveau depuis Facebook.
theme_write_disabled 409 L'édition du thème n'est pas activée pour cette application. Utilisez l'embed d'application du thème plutôt que la correction par fichier de thème.
scope_required 403 Il manque une autorisation Shopify à FastOG. Approuvez les scopes demandés à l'aide du consent_url dans la réponse, puis relancez la correction.

Passerelle Wix

La passerelle Wix est signée par l'application Wix, et non par une session marchand ; ses échecs sont donc adressés au développeur de l'application. Chaque réponse porte toujours code et request_id ; l'identifiant de requête de la passerelle est celui de l'enveloppe signée.

Code HTTP Signification et action à mener
invalid_bridge_signature 401 La signature de la passerelle Wix n'a pas été vérifiée. Régénérez la requête avec le secret partagé, le chemin exact et un horodatage de moins de cinq minutes.
invalid_bridge_body 400 Le corps de l'enveloppe de la passerelle est malformé. Envoyez body sous forme d'objet JSON et encodez chaque nombre qu'il contient sous forme de chaîne, afin que la signature canonique corresponde.
replayed_bridge_request 401 Cette requête de passerelle a déjà été utilisée. Générez un nouveau request_id pour chaque appel mutant.
wix_site_not_installed 403 FastOG n'est pas installé sur ce site Wix. Installez l'application FastOG sur le site, puis rouvrez-le.
wix_site_not_provisioned 422 Le site Wix n'a pas encore d'identifiants de signature. Réinstallez l'application FastOG afin que le site soit provisionné avec une clé API.
invalid_page_type 422 Le type de page ne fait pas partie de ceux que FastOG couvre sur Wix. Envoyez l'un des types de page proposés par le Studio.
rule_not_found 404 Aucune règle ne correspond à cet identifiant. Actualisez la liste ; la règle a été supprimée ou appartient à un autre site.
invalid_target_id 422 L'identifiant de cible Wix n'est pas valide pour ce type de page. Envoyez l'identifiant fourni par l'application Wix pour ce type de page.
invalid_preview 422 La charge utile d'aperçu est malformée. Consultez l'objet details pour identifier le champ en échec.
invalid_rule 422 La charge utile de la règle de couverture est malformée. Consultez l'objet details ; template est requis et les blocs optionnels doivent être des objets.
invalid_sync 422 La charge utile de synchronisation est malformée. Consultez l'objet details ; target_type et target_id doivent concorder.
invalid_regenerate_url 422 L'URL à régénérer est manquante. Envoyez l'URL de la page dans url.
invalid_regenerate_host 422 L'URL n'appartient pas à l'hôte FastOG. Envoyez une URL de couverture fastog.com.
ai_presets_unsupported 422 Les ensembles de couvertures conçus par IA ne sont plus générés. Choisissez plutôt l'une des apparences sélectionnées.
original_tags_required 422 Les balises de métadonnées d'origine sont requises. Envoyez original_tags (ou current_tags) afin qu'une désinstallation puisse restaurer les métadonnées du site.
invalid_restored 422 La charge utile des clés restaurées est malformée. Envoyez restored sous forme de tableau de clés de métadonnées.
invalid_seo_target 422 Le type de cible SEO est inconnu. Utilisez site, pattern ou item dans le chemin.
invalid_seo_payload 422 La charge utile des métadonnées SEO est malformée. Envoyez target_id, current_tags et fastog_url sous forme d'URL http(s) absolue.
sync_failed 500 La synchronisation des métadonnées vers Wix a échoué. Réessayez ; si l'échec persiste, vérifiez que le site est joignable et que l'application est toujours installée.
invalid_tier 422 Cette offre ne fait pas partie de celles que FastOG vend sur Wix. Envoyez starter, pro ou scale comme palier.

Surface de démonstration

La démo est la console de ventes réservée au propriétaire, et non un endpoint marchand.

Code HTTP Signification et marche à suivre
url_required 422 Aucune URL n'a été envoyée. Collez le lien de la boutique ou du produit avant de lire la carte.
unreadable_url 422 Cette page n'a pas pu être lue. Vérifiez que le lien est public et complet ; une page derrière une authentification ne peut pas être lue.
no_api_key 422 Aucune clé API n'est disponible pour signer les couvertures. Créez une clé API (ou saisissez-en une valide) ; la réponse renvoie vers la page des clés API.
no_presets 500 Aucun préréglage de couverture n'est configuré. Configurez au moins un préréglage sur le serveur.

Codes de l'éditeur de règles à portée limitée

Les éditeurs de règles à portée limitée (admin Shopify et WooCommerce Studio) traduisent eux-mêmes ces jetons dans la langue du marchand ; leurs réponses contiennent donc error et code mais pas hint — une seconde description en anglais ne ferait que diverger de la version localisée que le marchand voit réellement :

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.


Toujours bloqué ?

  • Ouvrez la page Render Logs du tableau de bord — chaque résultat (succès et rejet) y est listé avec son error_code, le statut HTTP et les paramètres demandés.
  • Exécutez php artisan og:diagnose sur une URL signée pour parcourir tout le pipeline et voir quelle étape échoue.
  • Consultez la documentation dans la barre latérale pour le framework que vous utilisez (Next.js, Express, SvelteKit, ...).

Essayez gratuitement — aucune inscription requise

Prévisualisez et testez des images OG dynamiques en quelques secondes.

Ouvrir le testeur d'images OG gratuit

A BeCaSimulations site