CORS
Resposta curta: a API não aceita chamada vinda do navegador de outro domínio. Se o seu JavaScript tentar, o navegador bloqueia antes mesmo de a requisição sair.
Isso não é limitação a contornar — é o desenho. O token de acesso autentica como um usuário inteiro, e colocá-lo numa página entregaria a conta a quem abrisse o inspetor. Veja autenticação.
Quando CORS importa para você
Seção intitulada “Quando CORS importa para você”CORS só existe dentro do navegador. Importa se o seu código roda numa página:
- Painel em React, Vue ou Angular consumindo dados da conta
- Extensão de navegador
- Qualquer
fetchnum site
Não importa nada se o código roda fora dele:
- Servidor em Node, Python, Ruby, PHP
- Aplicativo nativo de celular
curl, Postman, script de terminal
Servidor e aplicativo nativo ignoram CORS. Só o navegador aplica a regra.
O que está aberto e o que não está
Seção intitulada “O que está aberto e o que não está”| Caminho | De onde aceita chamada de navegador |
|---|---|
/api/v1/... — a API da aplicação | De lugar nenhum. Bloqueada |
/public/api/v1/forms/... — envio de formulário | De qualquer site |
/f/... — página pública do formulário | De qualquer site |
/public/api/v1/landing_pages/... — conversão de landing page | De qualquer site |
/public/api/v1/web_properties/... — visita, conversão e prova de consentimento dos sites cadastrados em Captação › Sites | De qualquer site (desde 25/09/2026) |
/public/api/v1/inboxes/{website_token}/conversion_events — conversão pela caixa do tipo Site | De lugar nenhum. Use no-cors ou um intermediário |
Ou seja: o que é captação foi aberto de propósito, porque precisa funcionar no site do cliente. O resto, não.
Não existe tela de “origens permitidas” em lugar nenhum do painel. A configuração é nossa, no servidor, e vale para a plataforma inteira — não é ajustável por conta nem por caixa de entrada.
O desenho certo: um intermediário seu
Seção intitulada “O desenho certo: um intermediário seu”[ seu front ] → [ seu servidor ] → [ API do app.smart ]O seu servidor guarda o token e expõe ao front só os endpoints que ele precisa, com as suas próprias regras de acesso. Três ganhos de graça: o token nunca chega ao navegador, você controla o que o front pode pedir, e ganha um lugar para cachear.
// no seu servidor (Express)app.get('/api/meus-contatos', autenticaSeuUsuario, async (req, res) => { const r = await fetch( 'https://app.smart2.com.br/api/v1/accounts/1/contacts', { headers: { api_access_token: process.env.SMART_TOKEN } } ); const { payload } = await r.json(); // devolve só o que o seu front precisa ver res.json(payload.map(c => ({ id: c.id, nome: c.name })));});Mandar lead do site: aí não precisa de nada disso
Seção intitulada “Mandar lead do site: aí não precisa de nada disso”Este é o caso em que a maioria das pessoas chega nesta página, e ele já está resolvido. Para captar lead no seu site, existem caminhos que não usam token e funcionam do navegador:
- Formulário nativo — você monta no painel e cola o trecho no site
- Plugin de WordPress — instala e capta os formulários que já existem
- Landing page do app.smart — sem site nenhum
Os três mandam a conversão com a origem junto (UTMs, página, referência) sem você escrever uma linha de integração. Veja eventos de conversão.
O erro que você vai ver
Seção intitulada “O erro que você vai ver”Access to fetch at 'https://app.smart2.com.br/api/v1/accounts/1/contacts'from origin 'https://seusite.com.br'has been blocked by CORS policy:No 'Access-Control-Allow-Origin' header is present on the requested resource.Não há configuração a mexer. A mensagem está dizendo exatamente o que é: a API da aplicação não atende navegador de fora. Monte o intermediário.
Se o erro aparece num caminho de formulário (/public/api/v1/forms/...), aí sim é outra coisa — provavelmente o endereço está errado, ou o site está chamando por http:// numa página https://. Confira o caminho antes de suspeitar de CORS.
Dúvidas comuns
Seção intitulada “Dúvidas comuns”Consigo liberar o meu domínio? Não pelo painel. E, para a API da aplicação, a resposta seria não de qualquer forma: com token de usuário no navegador, liberar a origem não torna a coisa segura.
Aplicativo nativo precisa se preocupar? Não. CORS é regra de navegador.
curl e Postman funcionam?
Funcionam. Eles não aplicam CORS.
O proxy da empresa pode atrapalhar?
Pode — proxy corporativo agressivo às vezes bloqueia a requisição OPTIONS que o navegador manda antes. Se acontecer, o TI libera app.smart2.com.br.
Posso usar um serviço de proxy CORS pronto, desses públicos? Não faça isso. Você estaria mandando o seu token para um servidor de terceiro a cada chamada.
Próximos passos
Seção intitulada “Próximos passos”- Autenticação — por que o token não pode ir ao navegador
- Eventos de conversão — o caminho pronto para lead do site
- Convenções