Pular para o conteúdo

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.

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 fetch num 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.

CaminhoDe onde aceita chamada de navegador
/api/v1/... — a API da aplicaçãoDe lugar nenhum. Bloqueada
/public/api/v1/forms/... — envio de formulárioDe qualquer site
/f/... — página pública do formulárioDe qualquer site
/public/api/v1/landing_pages/... — conversão de landing pageDe qualquer site
/public/api/v1/web_properties/... — visita, conversão e prova de consentimento dos sites cadastrados em Captação › SitesDe qualquer site (desde 25/09/2026)
/public/api/v1/inboxes/{website_token}/conversion_events — conversão pela caixa do tipo SiteDe 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.

[ 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.

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.

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.