Erros de API — O que significa cada código e como corrigi-lo
O FastOG devolve códigos de erro legíveis por máquina quando um pedido falha — uma renderização de imagem OG assinada, ou uma chamada a uma das superfícies de administração do produto. Todas as respostas de erro incluem:
error— o token curto legado. Continua presente em todas as falhas para que um cliente mais antigo continue a funcionar.code— o mesmo código de erro estável e documentado (tabela abaixo), sob o nome que a API pública utiliza.message— uma descrição numa frase do que correu mal.hint— uma descrição curta em linguagem simples do que correu mal e de como corrigi-lo.docs_url— uma ligação para esta página, ancorada na secção desse código.request_id— correlaciona esta falha HTTP com uma linha da tabela Render Logs do dashboard (também devolvido no cabeçalho de respostaX-Request-ID). Uma superfície sem nada para correlacionar respondenull, mas a chave está sempre presente.
As superfícies do produto — o admin do Shopify, o WooCommerce Studio, a ponte do Wix e a demo — respondem
com o mesmo envelope para os códigos abaixo, pelo que uma falha significa o mesmo onde quer que a encontre. Uma
superfície de módulo pode manter o estado HTTP que sempre devolveu para um código (por exemplo, render_failed
responde 503 na exportação de capa e 502 na API pública); o código, a mensagem, a dica e a ligação à documentação não mudam.
Ler uma resposta de erro
{
"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-..."
}
Se receber uma resposta que não compreende, o caminho mais rápido é:
- Anote o
code. - Verifique o seu construtor de URL — a maioria das falhas são bugs de assinatura, não problemas de conta.
- Consulte o código abaixo para identificar a causa exata e a correção.
- No dashboard, abra Render Logs e filtre pelo mesmo
error_code— cada linha mostra os parâmetros pedidos para que possa reproduzir (e confirmar querequest_idcorresponde).
Assinatura e autenticação
missing_signature
Faltam na sua requisição os parâmetros de query key e/ou s (assinatura).
Correção: garanta que o seu URL inclui tanto key=<api-key> como s=<hmac-signature>. Use o SDK ou o guia /docs/hmac-signature-guide para o construir.
invalid_signature
O valor de s não corresponde ao que o seu segredo HMAC produz para este URL.
Correção: a assinatura cobre todos os parâmetros de query exceto s, com as chaves ordenadas. Alterar qualquer parâmetro — incluindo reordenar, diferenças de codificação de URL ou adicionar espaços — invalida a assinatura. Volte a assinar após cada alteração. Confirme que o seu segredo é o mesmo que foi mostrado quando a chave de API foi criada.
invalid_signature_format
O valor de s não é uma string hexadecimal de 64 caracteres.
Correção: a assinatura tem de ser SHA-256 hex em bruto (a-f0-9 minúsculo). Se estiver a codificar em base64 ou a truncar o resultado, use hex simples.
expired_timestamp
O timestamp t que forneceu tem mais de 5 minutos.
Correção: regenere o timestamp sempre que construir um URL. Este código aplica-se ao fluxo legado de URL assinado; o fluxo atual HMAC v2 não tem timestamp.
invalid_api_key
O key que passou não existe.
Correção: copie a chave de API completa a partir do dashboard — é o identificador público que começa por sk_. É público e seguro em URLs; o segredo (nunca em URLs) é o que prova a posse.
missing_hmac_secret
A chave de API não tem segredo HMAC configurado.
Correção: crie uma nova chave de API no dashboard — o segredo HMAC é gerado e mostrado uma única vez na criação.
Parâmetro / entrada
invalid_image_url
Uma prop com URL (image, brand_logo, logo, avatar, background_image, ...) não é um URL http(s) público.
Correção: passa um URL https://... acessível publicamente. Localhost, IPs privados e caminhos simples são rejeitados para prevenir server-side request forgery.
Subscrição
subscription_required (402)
O pedido chegou à Dynamic API, mas a sua conta não tem um plano ativo. O acesso à API é exclusivo para subscritores: o plano é o requisito de acesso e inclui a mesma cobertura e a mesma escala de capacidades que as aplicações FastOG comercializam. As renderizações em si não são contabilizadas — não existe quota mensal de renderizações nem faturação de excesso.
Correção: escolha um plano da Dynamic API no dashboard e crie uma chave de API. A resposta inclui um top_up_url que aponta para a página dos planos.
Serviço de renderização
store_blocked (403)
A renderização para a loja associada a esta chave foi suspensa pela FastOG (por exemplo, abuso ou utilização descontrolada). As capas já em cache no edge podem continuar a ser servidas até expirarem. Contacta o suporte para resolver a situação; nada que possas alterar no pedido irá corrigir isto.
render_unreachable
Não foi possível contactar o serviço de renderização (janela breve de reinício).
Correção: tenta novamente dentro de alguns segundos. A renderização não foi contabilizada para esta tentativa.
render_failed
O serviço de renderização devolveu um erro para o teu pedido.
Correção: verifica as props do teu template — valores longos/malformados, campos não suportados ou uma imagem upstream inacessível. A resposta inclui o status subjacente. A renderização não foi contabilizada.
Superfícies de administração da loja
Estes códigos respondem a partir do admin do Shopify e do WooCommerce Studio — os editores incorporados
em que o comerciante trabalha, em vez da API assinada. Vários são partilhados com a API pública (invalid_image_url,
render_failed, invalid_signature); esses mantêm a entrada documentada acima.
| Código | HTTP | O que significa e o que fazer |
|---|---|---|
invalid_shop |
422 | Não foi possível identificar a loja Shopify. Recarregue a aplicação FastOG a partir do seu admin Shopify para que o pedido incorporado volte a transportar a loja e tente novamente. |
invalid_shop_or_page |
422 | A loja ou o tipo de página é desconhecido. Abra a aplicação FastOG a partir do seu admin Shopify e escolha um tipo de página de capa no editor. |
invalid_store |
422 | Não foi possível identificar a loja WooCommerce. Reabra o Studio a partir do seu admin WordPress para que o token da loja volte a ser apresentado e tente novamente. |
invalid_store_or_page |
422 | A loja ou o tipo de página é desconhecido. Reabra o Studio a partir do seu admin WordPress e escolha um tipo de página de capa que o editor ofereça. |
missing_api_key |
422 | A loja não tem chave de assinatura. Conclua a instalação do plugin a partir do seu admin WordPress para que o FastOG possa emitir a chave de assinatura da loja. |
store_ownership_unverified |
403 | Não foi possível verificar o site WordPress. Tem de estar acessível através de HTTPS público com a REST API ativada. |
community_is_free |
422 | O plano Community é gratuito. É o plano gratuito predefinido e não pode ser comprado; escolha um nível pago para fazer upgrade. |
not_installed |
404 | O FastOG não está instalado para esta loja. Instale a aplicação FastOG a partir da Shopify App Store para esta loja e volte a abri-la. |
oauth_required |
409 | A loja tem de autorizar o FastOG novamente. Execute novamente a instalação OAuth do FastOG a partir do seu admin Shopify; a autorização armazenada foi revogada ou os seus escopos mudaram. |
reconnect_required |
409 | A ligação ao Shopify tem de ser restabelecida. Use o botão Reconnect na aplicação FastOG para que seja emitido um novo access token. |
token_rejected |
409 | O Shopify emitiu um access token e depois recusou-o. Tente a reconexão uma vez; se o Shopify continuar a recusá-lo, reinstale a aplicação. |
unauthorized |
401 | O pedido não transporta uma sessão válida para esta superfície. Recarregue a aplicação FastOG a partir do admin da sua plataforma para que seja anexado um novo token de sessão e tente novamente. |
shop_not_found |
404 | A loja já não existe no FastOG. Reinstale o FastOG a partir do seu admin Shopify para recriar o registo da loja. |
invalid_product |
422 | A referência do produto não é válida. Recarregue a página do produto e reabra o FastOG; o id do produto enviado estava em falta ou não era numérico. |
invalid_product_cover |
422 | O payload da capa do produto está malformado. Recarregue o editor e guarde novamente; props, style e signals têm de ser cada um um objeto. |
product_not_found |
404 | Não foi possível ler o produto a partir da loja. Verifique se o produto ainda existe e está publicado e recarregue o editor. |
product_customization_not_on_plan |
403 | A personalização da capa por produto não está incluída neste plano. Faça upgrade ou edite a capa de produto partilhada. |
no_product_handles |
422 | Não foram encontrados produtos para atualizar. Publique pelo menos um produto com um handle público e tente novamente a atualização da pré-visualização de partilha. |
invalid_style |
422 | O bloco de estilo não é utilizável. Recarregue o editor e volte a escolher as cores e os tipos de letra; um valor não pôde ser normalizado. |
invalid_template |
422 | O template pedido não está no catálogo desta plataforma. Escolha um dos layouts que o editor oferece. |
invalid_preset |
422 | O nome do preset não é um dos que esta plataforma oferece. Escolha um preset no ecrã de configuração. |
invalid_set |
422 | O payload do conjunto de capas está em falta ou malformado. Recarregue o ecrã de configuração e escolha novamente um conjunto. |
preset_not_applyable |
422 | O preset não pode ser aplicado a todos os tipos de página. Escolha outro preset; a este falta uma capa para pelo menos um tipo de página. |
template_not_available |
422 | O template não está no catálogo renderizável. Escolha um layout que o seletor oferece. |
template_not_available_on_shopify |
422 | O template não está disponível nas lojas Shopify. Escolha um layout que o editor Shopify oferece. |
template_not_available_on_woocommerce |
422 | O template não está disponível nas lojas WooCommerce. Escolha um layout que o Studio oferece. |
template_unavailable |
422 | O template não está disponível para esta loja. Escolha um layout que o editor oferece; está retirado, é desconhecido ou está acima do que a loja pode desenhar. |
template_not_on_plan |
403 | O template requer um plano superior. Mude de plano ou escolha um layout abrangido pelo plano atual. A resposta indica o plano em requires. |
template_requires_higher_plan |
403 | O template requer um plano superior. A resposta indica o plano em requires. |
no_rule |
404 | Ainda não existe uma regra de capa para este tipo de página. Guarde primeiro uma capa para este tipo de página no editor. |
cover_not_configured |
404 | Ainda não foi guardada nenhuma capa de produto. Guarde uma capa de produto antes de a transferir ou partilhar. |
schedule_only_product |
422 | O agendamento de campanhas só existe para capas de produto. Remova a data de reversão ou mova a campanha para a capa de produto. |
not_dismissible |
422 | Esse anúncio não pode ser dispensado. Recarregue a página; já foi retirado ou pertence a outra loja. |
unsupported_locale |
422 | Esse idioma da UI não está incluído nesta aplicação. Escolha um dos idiomas que a resposta lista em supported. |
no_setup_sets |
422 | Não foi possível reunir conjuntos de capas curados. Tente novamente o ecrã de configuração; se continuar vazio, contacte o suporte. |
export_unavailable |
403 | As transferências não estão incluídas neste plano. Faça upgrade para Pro ou superior para transferir ficheiros de capa. |
cancellation_failed |
502 | O cancelamento da subscrição foi recusado. Tente novamente dentro de momentos; se continuar a falhar, cancele a partir da página de faturação do Shopify ou contacte o suporte. |
logo_override_on_plan |
403 | A substituição do logótipo não está incluída neste plano. Faça upgrade ou limpe a substituição do logótipo. |
invalid_logo |
422 | O ficheiro do logótipo não é uma imagem aceite. Carregue um PNG, JPEG ou WebP abaixo do limite de tamanho indicado no editor. |
invalid_brand_image |
422 | A imagem de referência da marca não é utilizável. Carregue uma imagem suportada abaixo do limite de tamanho ou limpe a referência e guarde novamente. |
brand_image_too_large |
422 | A imagem de referência da marca é demasiado grande. Reduza o ficheiro e carregue-o novamente. |
brand_colors_too_many |
422 | Foram fornecidas mais de três cores de marca. Envie no máximo três cores hex. |
upload_failed |
500 | Não foi possível armazenar o ficheiro carregado. Tente novamente; se continuar a falhar, contacte o suporte — o armazenamento de assets não devolveu nenhum URL público. |
attachment_upload_failed |
500 | Não foi possível armazenar o anexo de suporte. Envie a mensagem sem o anexo e depois envie o ficheiro por email para o suporte. |
invalid_webhook |
401 | A assinatura do webhook da loja não foi verificada. Verifique se o segredo do webhook nas suas definições do FastOG para WordPress corresponde ao que o FastOG emitiu. |
not_found |
404 | Esse endpoint já não existe. Reabra o Studio a partir do seu admin WordPress. |
meta_refresh_unavailable |
503 | A atualização da pré-visualização de partilha não está configurada. Volte a partilhar a ligação a partir do Facebook. |
theme_write_disabled |
409 | A edição de temas não está ativada para esta aplicação. Use o theme app embed em vez da correção do ficheiro de tema. |
scope_required |
403 | Falta ao FastOG uma permissão do Shopify. Aprove os escopos pedidos usando o consent_url na resposta e tente novamente a correção. |
Bridge do Wix
O bridge do Wix é assinado pela app Wix, não por uma sessão de comerciante, pelo que as suas falhas se dirigem ao programador da app. Todas as respostas continuam a incluir code e request_id; o id do pedido do bridge é o do envelope assinado.
| Código | HTTP | O que significa e o que fazer |
|---|---|---|
invalid_bridge_signature |
401 | A assinatura do bridge do Wix não foi verificada. Volte a gerar o pedido com o segredo partilhado, o caminho exato e um timestamp com menos de cinco minutos. |
invalid_bridge_body |
400 | O corpo do envelope do bridge está malformado. Envie body como um objeto JSON e codifique todos os números no seu interior como strings, para que a assinatura canónica corresponda. |
replayed_bridge_request |
401 | Esse pedido do bridge já foi utilizado. Gere um novo request_id para cada chamada que altere estado. |
wix_site_not_installed |
403 | O FastOG não está instalado neste site Wix. Instale a app FastOG no site e volte a abri-lo. |
wix_site_not_provisioned |
422 | O site Wix ainda não tem credenciais de assinatura. Reinstale a app FastOG para que o site seja aprovisionado com uma chave de API. |
invalid_page_type |
422 | O tipo de página não é um dos que o FastOG suporta no Wix. Envie um dos tipos de página que o Studio disponibiliza. |
rule_not_found |
404 | Não existe nenhuma regra com esse id. Atualize a lista; a regra foi eliminada ou pertence a outro site. |
invalid_target_id |
422 | O id de destino do Wix não é válido para este tipo de página. Envie o id que a app Wix fornece para esse tipo de página. |
invalid_preview |
422 | O payload de pré-visualização está malformado. Consulte o objeto details para identificar o campo com erro. |
invalid_rule |
422 | O payload da regra de capa está malformado. Consulte o objeto details; o template é obrigatório e os blocos opcionais têm de ser objetos. |
invalid_sync |
422 | O payload de sincronização está malformado. Consulte o objeto details; target_type e target_id têm de coincidir. |
invalid_regenerate_url |
422 | Falta o URL a regenerar. Envie o URL da página em url. |
invalid_regenerate_host |
422 | O URL não pertence ao host do FastOG. Envie um URL de capa fastog.com. |
ai_presets_unsupported |
422 | Os conjuntos de capas concebidos por IA já não são gerados. Escolha um dos looks curados. |
original_tags_required |
422 | As tags de metadados originais são obrigatórias. Envie original_tags (ou current_tags) para que uma desinstalação possa restaurar os metadados do site. |
invalid_restored |
422 | O payload de chaves restauradas está malformado. Envie restored como um array de chaves de metadados. |
invalid_seo_target |
422 | O tipo de destino de SEO é desconhecido. Utilize site, pattern ou item no caminho. |
invalid_seo_payload |
422 | O payload de metadados de SEO está malformado. Envie target_id, current_tags e fastog_url como um URL http(s) absoluto. |
sync_failed |
500 | A sincronização de metadados para o Wix falhou. Tente novamente; se continuar a falhar, verifique se o site está acessível e se a app continua instalada. |
invalid_tier |
422 | Esse plano não é um dos que o FastOG vende no Wix. Envie starter, pro ou scale como tier. |
Superfície de demonstração
A demonstração é a consola de vendas exclusiva do proprietário, não um endpoint de comerciante.
| Código | HTTP | O que significa e o que fazer |
|---|---|---|
url_required |
422 | Não foi enviado nenhum URL. Cole o link da loja ou do produto antes de ler o cartão. |
unreadable_url |
422 | Não foi possível ler essa página. Verifique se o link é público e está completo; uma página protegida por login não pode ser lida. |
no_api_key |
422 | Não está disponível nenhuma chave de API para assinar capas. Crie uma chave de API (ou introduza uma válida); a resposta tem uma ligação para a página das chaves de API. |
no_presets |
500 | Não estão configurados presets de capa. Configure pelo menos um preset no servidor. |
Códigos do editor de regras com âmbito
Os editores de regras com âmbito (administração do Shopify e WooCommerce Studio) traduzem estes tokens
para o idioma do próprio comerciante, pelo que as suas respostas incluem error e code mas não hint — uma segunda
descrição em inglês apenas divergiria da versão localizada que o comerciante vê efetivamente:
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.
Ainda com dificuldades?
- Abra a página Render Logs do dashboard — cada resultado (sucesso + rejeição) é listado com o respetivo
error_code, o estado HTTP e os parâmetros pedidos. - Execute
php artisan og:diagnosenum URL assinado para percorrer todo o pipeline e ver em que etapa falha. - Consulte a documentação na barra lateral para o framework que está a usar (Next.js, Express, SvelteKit, ...).