Onderwerp

API-fouten — Wat elke code betekent en hoe je het oplost

FastOG retourneert machineleesbare foutcodes wanneer een verzoek mislukt — een ondertekende OG-afbeelding renderen, of een aanroep naar een van de admin-oppervlakken in het product. Elke foutrespons bevat:

  • error — het legacy korte token. Nog steeds aanwezig bij elke fout, zodat een oudere client blijft werken.
  • code — dezelfde stabiele, gedocumenteerde foutcode (tabel hieronder), onder de naam die de publieke API gebruikt.
  • message — een beschrijving van één zin van wat er misging.
  • hint — een korte beschrijving in gewone taal van wat er misging en hoe je het oplost.
  • docs_url — een link naar deze pagina, verankerd op de sectie voor die code.
  • request_id — koppelt deze HTTP-fout aan een rij in de Render Logs-tabel van het dashboard (ook teruggegeven in de X-Request-ID-responsheader). Een oppervlak zonder iets om aan te koppelen antwoordt met null, maar de sleutel is altijd aanwezig.

De oppervlakken in het product — de Shopify-admin, de WooCommerce Studio, de Wix-bridge en de demo — antwoorden met dezelfde envelope voor de onderstaande codes, dus een fout betekent hetzelfde waar je die ook tegenkomt. Een module-oppervlak kan de HTTP-status behouden die het altijd al teruggaf voor een code (bijvoorbeeld render_failed antwoordt 503 bij de cover-export en 502 bij de publieke API); de code, het bericht, de hint en de docs-link veranderen niet.

Een foutrespons lezen

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

Als je een respons krijgt die je niet begrijpt, is dit de snelste route:

  1. Noteer de code.
  2. Controleer je URL-builder — de meeste fouten zijn bugs in de signing, geen accountproblemen.
  3. Zoek de code hieronder op voor de exacte oorzaak en oplossing.
  4. Open in het dashboard Render Logs en filter op dezelfde error_code — elke rij toont de opgevraagde params, zodat je het kunt reproduceren (en kunt bevestigen dat request_id overeenkomt).

Ondertekenen & authenticatie

missing_signature

Je verzoek mist de queryparameters key en/of s (signature).

Oplossing: zorg dat je URL zowel key=<api-key> als s=<hmac-signature> bevat. Gebruik de SDK of de /docs/hmac-signature-guide-walkthrough om hem op te bouwen.

invalid_signature

De waarde van s kwam niet overeen met wat je HMAC-secret voor deze URL oplevert.

Oplossing: de signature dekt elke queryparameter behalve s, met gesorteerde keys. Het wijzigen van welke parameter dan ook — inclusief herordenen, verschillen in URL-encoding of toegevoegde whitespace — maakt de signature ongeldig. Onderteken opnieuw na elke wijziging. Controleer of je secret hetzelfde is als het secret dat werd getoond bij het aanmaken van de API key.

invalid_signature_format

De waarde van s is geen hex-string van 64 tekens.

Oplossing: de signature moet raw SHA-256 hex zijn (kleine letters a-f0-9). Als je de output base64-encodeert of afkapt, gebruik dan gewone hex.

expired_timestamp

De t-timestamp die je hebt opgegeven is ouder dan 5 minuten.

Oplossing: genereer de timestamp opnieuw telkens wanneer je een URL opbouwt. Deze code geldt voor de legacy signed-URL-flow; de huidige HMAC v2-flow heeft geen timestamp.

invalid_api_key

De key die je hebt doorgegeven bestaat niet.

Oplossing: kopieer de volledige API key uit het dashboard — het is de publieke identifier die begint met sk_. Hij is publiek en veilig in URL's; het secret (nooit in URL's) is wat het bezit bewijst.

missing_hmac_secret

Voor de API key is geen HMAC-secret geconfigureerd.

Oplossing: maak een nieuwe API key aan in het dashboard — het HMAC-secret wordt gegenereerd en eenmalig getoond bij het aanmaken.


Parameter / invoer

invalid_image_url

Een prop met een URL (image, brand_logo, logo, avatar, background_image, ...) is geen openbare http(s)-URL.

Oplossing: geef een openbaar op te halen https://... URL door. Localhost, privé-IP's en kale paden worden geweigerd om server-side request forgery te voorkomen.


Abonnement

subscription_required (402)

Het verzoek bereikte de Dynamic API, maar je account heeft geen actief plan. API-toegang is alleen met een abonnement: het plan is de toegangspoort en biedt dezelfde dekking en mogelijkhedenschaal die de FastOG-apps verkopen. Renders zelf worden niet gemeten — er is geen maandelijkse renderc quota en geen facturering voor overschrijding.

Oplossing: kies een Dynamic API-plan in het dashboard en maak een API-sleutel aan. Het antwoord bevat een top_up_url die naar de plannenpagina verwijst.


Render-service

store_blocked (403)

Het renderen voor de store achter deze key is door FastOG gepauzeerd (bijvoorbeeld door misbruik of buitensporig gebruik). Covers die al in de edge-cache staan, kunnen blijven serveren tot ze verlopen. Neem contact op met support om dit op te lossen; niets wat je in het request kunt wijzigen lost dit op.

render_unreachable

De render-service was niet bereikbaar (kort herstartvenster).

Oplossing: probeer het over een paar seconden opnieuw. De render is niet geteld voor deze poging.

render_failed

De render-service gaf een fout terug voor je request.

Oplossing: controleer je template-props — lange of misvormde waarden, niet-ondersteunde velden, of een niet-bereikbare upstream-afbeelding. De response bevat de onderliggende status. De render is niet geteld.


Beheeromgevingen van de winkel

Deze codes antwoorden vanuit de Shopify-admin en de WooCommerce Studio — de ingebedde editors waarin een merchant werkt in plaats van de ondertekende API. Verschillende worden gedeeld met de publieke API (invalid_image_url, render_failed, invalid_signature); die behouden de hierboven gedocumenteerde vermelding.

Code HTTP Wat het betekent en wat je moet doen
invalid_shop 422 De Shopify-shop kon niet worden geïdentificeerd. Herlaad de FastOG-app vanuit je Shopify-admin zodat het embedded verzoek de shop weer meestuurt, en probeer het daarna opnieuw.
invalid_shop_or_page 422 De shop of het paginatype is onbekend. Open de FastOG-app vanuit je Shopify-admin en kies een cover-paginatype in de editor.
invalid_store 422 De WooCommerce-store kon niet worden geïdentificeerd. Open de Studio opnieuw vanuit je WordPress-admin zodat het store-token weer wordt meegestuurd, en probeer het daarna opnieuw.
invalid_store_or_page 422 De store of het paginatype is onbekend. Open de Studio opnieuw vanuit je WordPress-admin en kies een cover-paginatype dat de editor aanbiedt.
missing_api_key 422 De store heeft geen signing key. Rond de installatie van de plugin af vanuit je WordPress-admin zodat FastOG de store zijn signing key kan uitgeven.
store_ownership_unverified 403 De WordPress-site kon niet worden geverifieerd. De site moet bereikbaar zijn via publieke HTTPS met een ingeschakelde REST API.
community_is_free 422 Het Community-plan is gratis. Het is het gratis standaardplan en is niet te koop; kies een betaald tier om te upgraden.
not_installed 404 FastOG is niet geïnstalleerd voor deze shop. Installeer de FastOG-app vanuit de Shopify App Store voor deze shop en open hem daarna opnieuw.
oauth_required 409 De shop moet FastOG opnieuw autoriseren. Voer de FastOG OAuth-installatie opnieuw uit vanuit je Shopify-admin; de opgeslagen grant is ingetrokken of de scopes zijn gewijzigd.
reconnect_required 409 De Shopify-verbinding moet opnieuw tot stand worden gebracht. Gebruik de knop Opnieuw verbinden in de FastOG-app zodat er een nieuw access token wordt uitgegeven.
token_rejected 409 Shopify gaf een access token uit en weigerde het daarna. Probeer het opnieuw verbinden één keer opnieuw; als Shopify het blijft weigeren, installeer de app dan opnieuw.
unauthorized 401 Het verzoek bevat geen geldige sessie voor dit oppervlak. Herlaad de FastOG-app vanuit je platform-admin zodat er een nieuw sessietoken wordt meegestuurd, en probeer het daarna opnieuw.
shop_not_found 404 De shop bestaat niet meer in FastOG. Installeer FastOG opnieuw vanuit je Shopify-admin om het shop-record opnieuw aan te maken.
invalid_product 422 De productreferentie is niet geldig. Herlaad de productpagina en open FastOG opnieuw; het meegestuurde product-id ontbrak of was niet numeriek.
invalid_product_cover 422 De product-cover-payload is misvormd. Herlaad de editor en sla opnieuw op; props, style en signals moeten elk een object zijn.
product_not_found 404 Het product kon niet uit de store worden gelezen. Controleer of het product nog bestaat en gepubliceerd is, en herlaad daarna de editor.
product_customization_not_on_plan 403 Cover-aanpassing per product zit niet in dit plan. Upgrade, of bewerk in plaats daarvan de gedeelde product-cover.
no_product_handles 422 Er zijn geen producten gevonden om te verversen. Publiceer minstens één product met een publieke handle en probeer het verversen van de share-preview daarna opnieuw.
invalid_style 422 Het style-blok is niet bruikbaar. Herlaad de editor en kies de kleuren en lettertypen opnieuw; één waarde kon niet worden genormaliseerd.
invalid_template 422 De gevraagde template staat niet in deze platformcatalogus. Kies een van de layouts die de editor aanbiedt.
invalid_preset 422 De presetnaam is er geen die dit platform aanbiedt. Kies een preset op het setup-scherm.
invalid_set 422 De cover-set-payload ontbreekt of is misvormd. Herlaad het setup-scherm en kies opnieuw een set.
preset_not_applyable 422 De preset kan niet op elk paginatype worden toegepast. Kies een andere preset; deze mist een cover voor minstens één paginatype.
template_not_available 422 De template staat niet in de renderbare catalogus. Kies een layout die de picker aanbiedt.
template_not_available_on_shopify 422 De template is niet beschikbaar op Shopify-stores. Kies een layout die de Shopify-editor aanbiedt.
template_not_available_on_woocommerce 422 De template is niet beschikbaar op WooCommerce-stores. Kies een layout die de Studio aanbiedt.
template_unavailable 422 De template is niet beschikbaar voor deze store. Kies een layout die de editor aanbiedt; hij is uitgefaseerd, onbekend, of valt buiten wat de store mag tekenen.
template_not_on_plan 403 De template vereist een hoger plan. Wijzig je plan, of kies een layout die het huidige plan dekt. De response noemt het plan in requires.
template_requires_higher_plan 403 De template vereist een hoger plan. De response noemt het plan in requires.
no_rule 404 Er is nog geen cover-regel voor dit paginatype. Sla eerst een cover voor dit paginatype op in de editor.
cover_not_configured 404 Er is nog geen product-cover opgeslagen. Sla een product-cover op voordat je hem downloadt of deelt.
schedule_only_product 422 Campagne-planning bestaat alleen voor product-covers. Verwijder de revert-datum, of verplaats de campagne naar de product-cover.
not_dismissible 422 Die aankondiging kan niet worden weggeklikt. Herlaad de pagina; hij is al uitgefaseerd of hoort bij een andere shop.
unsupported_locale 422 Die UI-taal is niet meegeleverd voor deze app. Kies een van de talen die de response vermeldt in supported.
no_setup_sets 422 Er konden geen samengestelde cover-sets worden opgebouwd. Probeer het setup-scherm opnieuw; als het leeg blijft, neem contact op met support.
export_unavailable 403 Downloads zitten niet in dit plan. Upgrade naar Pro of hoger om cover-bestanden te downloaden.
cancellation_failed 502 De abonnementsopzegging werd geweigerd. Probeer het zo meteen opnieuw; als het blijft mislukken, zeg dan op via de Shopify-factureringspagina of neem contact op met support.
logo_override_on_plan 403 De logo-override zit niet in dit plan. Upgrade, of wis de logo-override.
invalid_logo 422 Het logo-bestand is geen geaccepteerde afbeelding. Upload een PNG, JPEG of WebP onder de maximale grootte die de editor toont.
invalid_brand_image 422 De merk-referentieafbeelding is niet bruikbaar. Upload een ondersteunde afbeelding onder de maximale grootte, of wis de referentie en sla opnieuw op.
brand_image_too_large 422 De merk-referentieafbeelding is te groot. Verklein het bestand en upload het opnieuw.
brand_colors_too_many 422 Er zijn meer dan drie merk-kleuren opgegeven. Stuur maximaal drie hex-kleuren.
upload_failed 500 Het geüploade bestand kon niet worden opgeslagen. Probeer het opnieuw; als het blijft mislukken, neem contact op met support — de asset store gaf geen publieke URL terug.
attachment_upload_failed 500 De support-bijlage kon niet worden opgeslagen. Stuur het bericht zonder de bijlage en mail het bestand daarna naar support.
invalid_webhook 401 De webhook-signatuur van de store kon niet worden geverifieerd. Controleer of het webhook-secret in je WordPress FastOG-instellingen overeenkomt met het secret dat FastOG heeft uitgegeven.
not_found 404 Dat endpoint bestaat niet meer. Open de Studio opnieuw vanuit je WordPress-admin.
meta_refresh_unavailable 503 Verversen van de share-preview is niet geconfigureerd. Deel de link in plaats daarvan opnieuw via Facebook.
theme_write_disabled 409 Theme-bewerking is niet ingeschakeld voor deze app. Gebruik de theme app embed in plaats van de theme-file-fix.
scope_required 403 FastOG mist een Shopify-permissie. Keur de gevraagde scopes goed met de consent_url in de response en probeer de fix daarna opnieuw.

Wix-bridge

De Wix-bridge wordt ondertekend door de Wix-app, niet door een merchantsessie, dus de fouten ervan zijn gericht aan de app-ontwikkelaar. Elke response bevat nog steeds code en request_id; het bridge-request-id is dat uit de ondertekende envelope.

Code HTTP Wat het betekent en wat je moet doen
invalid_bridge_signature 401 De Wix-bridge-handtekening is niet geverifieerd. Maak het request opnieuw aan met het gedeelde geheim, het exacte pad en een timestamp die minder dan vijf minuten oud is.
invalid_bridge_body 400 De body van de bridge-envelope is misvormd. Stuur body als een JSON-object en codeer elk getal erin als een string, zodat de canonieke handtekening klopt.
replayed_bridge_request 401 Dat bridge-request is al gebruikt. Maak voor elke muterende call een nieuwe request_id aan.
wix_site_not_installed 403 FastOG is niet geïnstalleerd op deze Wix-site. Installeer de FastOG-app op de site en open deze daarna opnieuw.
wix_site_not_provisioned 422 De Wix-site heeft nog geen ondertekeningsgegevens. Herinstalleer de FastOG-app zodat de site wordt voorzien van een API-key.
invalid_page_type 422 Het paginatype wordt niet door FastOG ondersteund op Wix. Stuur een van de paginatypes die de Studio aanbiedt.
rule_not_found 404 Er is geen regel met dat id. Ververs de lijst; de regel is verwijderd of hoort bij een andere site.
invalid_target_id 422 Het Wix-target-id is niet geldig voor dit paginatype. Stuur het id dat de Wix-app voor dat paginatype levert.
invalid_preview 422 De preview-payload is misvormd. Lees het details-object voor het veld dat de fout veroorzaakt.
invalid_rule 422 De payload van de cover-regel is misvormd. Lees het details-object; template is verplicht en de optionele blokken moeten objecten zijn.
invalid_sync 422 De sync-payload is misvormd. Lees het details-object; target_type en target_id moeten overeenkomen.
invalid_regenerate_url 422 De URL die opnieuw gegenereerd moet worden, ontbreekt. Stuur de pagina-URL in url.
invalid_regenerate_host 422 De URL hoort niet bij de FastOG-host. Stuur een fastog.com cover-URL.
ai_presets_unsupported 422 AI-ontworpen coversets worden niet meer gegenereerd. Kies in plaats daarvan een van de samengestelde looks.
original_tags_required 422 De oorspronkelijke metadata-tags zijn verplicht. Stuur original_tags (of current_tags) zodat een uninstall de sitemetadata kan herstellen.
invalid_restored 422 De payload van de herstelde keys is misvormd. Stuur restored als een array van metadata-keys.
invalid_seo_target 422 Het SEO-targettype is onbekend. Gebruik site, pattern of item in het pad.
invalid_seo_payload 422 De SEO-metadata-payload is misvormd. Stuur target_id, current_tags en fastog_url als een absolute http(s)-URL.
sync_failed 500 De metadatasync naar Wix is mislukt. Probeer het opnieuw; als het blijft mislukken, controleer dan of de site bereikbaar is en de app nog steeds is geïnstalleerd.
invalid_tier 422 Dat plan wordt niet door FastOG verkocht op Wix. Stuur starter, pro of scale als tier.

Demo-omgeving

De demo is de verkoopconsole die alleen voor de eigenaar toegankelijk is, geen merchant-endpoint.

Code HTTP Wat het betekent en wat je moet doen
url_required 422 Er is geen URL verzonden. Plak de winkel- of productlink voordat je de kaart leest.
unreadable_url 422 Die pagina kon niet worden gelezen. Controleer of de link openbaar en volledig is; een pagina achter een login kan niet worden gelezen.
no_api_key 422 Er is geen API-sleutel beschikbaar om covers te ondertekenen. Maak een API-sleutel aan (of voer een geldige in); de response linkt naar de pagina met API-sleutels.
no_presets 500 Er zijn geen cover-presets geconfigureerd. Configureer minstens één preset op de server.

Codes voor de scoped-rule-editor

De scoped-rule-editors (Shopify admin en WooCommerce Studio) vertalen deze tokens zelf, naar de taal van de merchant, dus hun responses bevatten error en code maar geen hint — een tweede Engelse beschrijving zou alleen afwijken van de gelokaliseerde versie die de merchant daadwerkelijk ziet:

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.


Loop je nog ergens tegenaan?

  • Open de pagina Render Logs in het dashboard — elke uitkomst (geslaagd + afgewezen) staat er met de bijbehorende error_code, HTTP-status en de opgevraagde params.
  • Voer php artisan og:diagnose uit op een ondertekende URL om de hele pipeline te doorlopen en te zien welke stap faalt.
  • Bekijk de documentatie in de zijbalk voor het framework dat je gebruikt (Next.js, Express, SvelteKit, ...).

Probeer het gratis — geen aanmelding vereist

Bekijk en test dynamische OG-afbeeldingen in seconden.

Open de gratis OG-afbeeldingstester

A BeCaSimulations site