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éponseX-Request-ID). Une surface sans rien à corréler répondnull, 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
{
"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 :
- Notez le
code. - Vérifiez votre générateur d'URL — la plupart des échecs sont des bugs de signature, pas des problèmes de compte.
- Reportez-vous au code ci-dessous pour identifier la cause exacte et le correctif.
- 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 querequest_idcorrespond).
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:diagnosesur 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, ...).