Entenda também a instalação e
autorização do ponto de vista do
estabelecimento e da integradora.
Endpoints
O fluxo OAuth usa dois hosts distintos: o portal CW (frontend) para autorização e a API aberta para troca e renovação de tokens. Use sempre o par do mesmo ambiente (Sandbox ou Produção).Autorização (portal CW)
Após o onboarding, redirecione o Proprietário para a página de autorização do portal no ambiente em que o app está cadastrado:Troca e renovação de token (API)
Os exemplos abaixo usam o Sandbox; substitua os hosts ao integrar em Produção. Detalhes dos ambientes em Sobre a API.
Referência interativa na aba Referência da API:
Fluxo resumido
1. Gerar PKCE
Antes de redirecionar o Proprietário para a página de autorização do portal CW (https://portal.cardapioweb.com/cw-apps), gere:
code_verifier: string aleatória (43–128 caracteres)code_challenge: Base64 URL-safe do SHA-256 docode_verifiercode_challenge_method:S256
code_verifier para a troca de token.
Exemplo com OpenSSL:
2. Autorização
Após o onboarding na URL de instalação do app, redirecione o Proprietário para a página de autorização do portal CW (https://portal.cardapioweb.com/cw-apps) com:
Exemplo de URL (Sandbox):
Sobre o state
O state é um parâmetro de correlação que você envia no início do fluxo e recebe de volta no redirect para a redirect_uri (?code=...&state=...). Serve para retomar o contexto daquela autorização no seu sistema.
Exemplo: durante o onboarding, o Proprietário está vinculado ao usuário interno usr_abc123 no seu sistema. Ao redirecionar para https://portal.cardapioweb.com/cw-apps, envie state=usr_abc123 (ou um token opaco que mapeie para esse usuário). Quando o portal redirecionar de volta para a Redirect URI com o mesmo state, você saberá para qual usuário aquela autorização foi concluída.
Recomendações:
- Gere e persista o
stateno backend antes do redirect (não confie apenas em estado no frontend). - No callback, valide que o
stateretornado é um valor que você emitiu e que ainda está válido (expiração, uso único, etc.). - Pode ser um ID interno, um UUID ou um valor opaco assinado. O importante é permitir identificar o contexto da instalação no seu lado.
O que o portal faz
O portal CW conduz a autorização e redireciona para sua Redirect URI. Você não implementa estas etapas:- Verifica o login do Proprietário; se necessário, redireciona ao login e retorna à página de autorização com os mesmos parâmetros.
- Exibe o consentimento (app, loja, permissões).
- Redireciona o navegador para a
redirect_uricom?code=...&state=....
3. Troca de token
Apps de integradoras são clientes públicos: não há segredo no fluxo de instalação. A segurança vem do PKCE e da troca de token feita no servidor da integradora. Os passos de PKCE e redirect ao portal estão nas seções Gerar PKCE e Autorização. A partir do callback na Redirect URI:1
1. Receber o callback
A Redirect URI recebe
code e state na query string. A autorização foi concedida, mas a integração ainda não está ativa.2
2. Validar o state
Confirme que o
state retornado é um valor que você emitiu e que ainda está válido.3
3. Trocar o código no servidor
No servidor, chame
POST /api/partner/oauth/token com grant_type=authorization_code, o code, o mesmo redirect_uri, o client_id e o code_verifier.4
4. Persistir por loja
Armazene
access_token e refresh_token vinculados à instalação (contexto da loja autorizada). Cada loja gera tokens próprios.access_token expira em 2 horas (expires_in: 7200 segundos). Com a troca bem-sucedida, a instalação fica ativa e a Partner API e os webhooks passam a operar para aquela loja.
4. Escopos e permissões
Com OAuth, as permissões do app vêm inteiramente do cadastro informado ao suporte. A integradora não escolhe nem envia escopos na URL de autorização: o portal concede todas as permissões cadastradas no consentimento. Tokens só acessam endpoints cujo escopo está presente no token e na instalação ativa.Escopos disponíveis
Como funcionam
- No cadastro do app, informe ao suporte as permissões necessárias.
- Na instalação, o Proprietário autoriza todas as permissões cadastradas no portal.
- O token OAuth recebe os escopos concedidos naquela instalação.
- A API aberta valida o escopo do token e o estado atual da instalação.
Solicite apenas os escopos que seu app realmente usa. Permissões excedidas
dificultam aprovação e reduzem a confiança do restaurante.
X-API-KEY não aplica escopos. Veja API Key (legado).
