checkout_url e recebe a confirmação por webhook.
Base URL: https://api.loja.gg/storefront/v1
1. Antes de começar
No painel, em Loja → Storefront API:1
Habilite a API headless
Sem isso, todas as chamadas respondem
403 headless_disabled.2
Cadastre as origens permitidas
Os domínios de onde o navegador vai chamar a API — ex.:
https://minhaloja.com.br. Precisa ser https (exceto http://localhost), sem caminho e sem wildcard. Se a origem não estiver cadastrada, o navegador bloqueia a chamada.3
Cadastre as URLs de retorno
Para onde o comprador volta depois do checkout — ex.:
https://minhaloja.com.br/obrigado. Sem isso, a criação da sessão de checkout falha com redirect_url_not_allowed.4
Crie suas chaves
A chave completa aparece uma única vez, no momento da criação. Só o hash é armazenado — se perder, revogue e gere outra.
2. As duas chaves
Modo de teste
Chaveshk_test_* funcionam contra o sandbox dos gateways e nunca movimentam dinheiro real. Toda resposta traz livemode: true|false. Construa a loja inteira em test antes de trocar as chaves para hk_live_*.
3. Catálogo
Resposta
Filtros em
/products: page, limit (máx. 100), category, category_id, search.
4. Checkout
Você monta o carrinho no seu site e, na hora de pagar, cria a sessão e redireciona o comprador.Resposta
checkout_url.
string
required
Obrigatória. Se a requisição der timeout e você repetir com a mesma chave e o mesmo corpo, a resposta original é devolvida em vez de criar uma segunda sessão. Corpo diferente com a mesma chave retorna
409.A sessão de checkout expira em 30 minutos.
Validando um cupom
200 com valid: false e uma mensagem genérica — a API não distingue “não existe” de “expirado” de “não se aplica”, para não entregar um oráculo de força bruta contra códigos de cupom.
5. Pedidos
next_cursor da resposta anterior em starting_after.
O CPF/CNPJ vem sempre mascarado (
***.***.789-**), inclusive para a chave secreta. Dados de gateway, taxas, split e margem não são expostos nesta API — eles ficam no painel. Um pedido que não é da sua loja responde 404, nunca 403 (um 403 confirmaria que o id existe).6. Erros
code, não contra a message — a mensagem pode mudar, o código não.
Inclua sempre o
request_id ao abrir um chamado de suporte.
Próximos passos
Integrando com Next.js
Um cliente de API pronto e o modelo mental de chaves publishable/secret no App Router.
Webhooks
Como validar assinatura e entregar o produto de forma confiável.
