Para conectar o HeroPay ao Zapier hoje, você usa o Webhooks by Zapier nos dois sentidos: o trigger Catch Hook recebe os eventos do HeroPay (venda confirmada, Pix gerado, estorno, assinatura cancelada) e dispara qualquer app do catálogo; a action Custom Request chama POST /payment_links e devolve um link de checkout com Pix, boleto e cartão. Não existe app oficial do HeroPay no Zapier, então a integração é por webhook e API REST, e isso exige um plano pago do Zapier. Em minutos, cada venda vira linha no Google Sheets e aviso no Slack.
Criar conta sandbox Ler a documentação
O essencial em 60 segundos
- O HeroPay se conecta ao Zapier pelo Webhooks by Zapier: Catch Hook para receber eventos e Custom Request (método POST) para criar links de pagamento pela API.
- Não há app oficial do HeroPay no diretório do Zapier. O Webhooks by Zapier faz o trabalho com a API REST, com dois campos a mais para configurar.
- Webhooks by Zapier é um app premium: não funciona no plano Free, só a partir do Professional (a partir de US$ 19,99/mês no plano anual, com 750 tasks). Verificado em set/2026 em zapier.com/pricing.
- O HeroPay envia 9 gatilhos, entre eles
spark_payment_confirmed,payment_pix_created,refundedesubscription_cancel, cada um registrado comPOST /webhookapontando para a URL do Zap. - O Catch Hook não valida assinatura HMAC. Para validar o header
X-HeroPay-Signature, use o Catch Raw Hook mais um passo de Code by Zapier; sem isso, não use o Zap para liberar acesso ou mover dinheiro. - No Zapier você paga por task (cada action concluída); no n8n, por execução do fluxo inteiro ou nada se hospedar você mesmo. Acima de poucas centenas de vendas por mês, o n8n tende a sair mais barato.
- Pix e boleto custam R$ 0 por transação no HeroPay; cartão, 3,49% por transação aprovada. O Zapier é um custo à parte, cobrado por ele (preços).
Como conectar o HeroPay ao Zapier?
O fluxo tem duas metades independentes. Use só a que precisa.
| Sentido | App no Zapier | O que faz no HeroPay |
|---|---|---|
| HeroPay → Zapier | Webhooks by Zapier, trigger Catch Hook (ou Catch Raw Hook) | Recebe os eventos que você registrou com POST /webhook |
| Zapier → HeroPay | Webhooks by Zapier, action Custom Request | Chama a API: POST /payment_links, consultas de venda, saldo |
Antes de começar, tenha três coisas: conta sandbox no HeroPay com o token de API copiado do painel (app.heropay.tech), um plano pago do Zapier (Professional ou acima, que já libera o teste gratuito deles) e um terminal para rodar um curl.
Zap 1: venda confirmada vira linha no Google Sheets e aviso no Slack
É o Zap que quase todo mundo monta primeiro: controle de vendas numa planilha que o financeiro já usa, e o time comemorando no canal.
Passo 1: crie o Zap com o Catch Hook
No editor do Zapier, clique em Create > Zaps, escolha Webhooks by Zapier como trigger e o evento Catch Hook. Deixe o campo "Pick off a Child Key" vazio e continue. O Zapier mostra uma URL no formato https://hooks.zapier.com/hooks/catch/123456/abcdef/. Copie.
Na tela, você vê o botão "Test trigger" e a mensagem de que o Zap ainda não recebeu nenhuma requisição. Deixe essa aba aberta.
Passo 2: registre a URL do Zap no HeroPay
Um registro por gatilho. Para este Zap, só o de pagamento confirmado:
curl -X POST https://api.beta.heropay.tech/webhook \
-H "Authorization: Bearer $HEROPAY_API_KEY" \
-H "Accept: application/vnd.herospark.com; version=1" \
-H "Content-Type: application/json" \
-d '{
"webhook": {
"trigger": "spark_payment_confirmed",
"webhook_url": "https://hooks.zapier.com/hooks/catch/123456/abcdef/",
"request_method": "post"
}
}'A resposta 201 Created traz o data.id do webhook. Guarde: é com ele que você pausa (PUT /webhook/{id}/disable) ou remove (DELETE /webhook/{id}) o envio. Os três campos são obrigatórios; use request_method = post. Detalhes do contrato em webhooks.
Passo 3: faça uma venda de teste no sandbox
Crie um link de pagamento no painel do sandbox (ou pela API, como no Zap 2), faça uma compra de teste e volte ao Zapier. Clique em Test trigger: o evento aparece com os campos já separados pelo Zapier, do comprador (buyer), do pagamento (payment) e do carrinho (cart src).
O payload segue o mesmo template em todos os gatilhos: comprador (buyer), pagamento (payment, com ID, data, valor, método e status), oferta (offer), produto (product), carrinho (cart, com o src), assinatura, parcelamento e dados de cada método. Um esboço da estrutura, só para orientar o mapeamento:
{
"buyer": { "name": "...", "email": "..." },
"payment": { "id": "...", "value": "...", "method": "...", "status": "..." },
"offer": { "...": "..." },
"product": { "...": "..." },
"cart": { "src": "instagram" }
}Os nomes exatos e o formato de cada campo (por exemplo, se o valor vem em reais ou em centavos, e como vêm as datas) estão no exemplo de payload da documentação. O teste do trigger mostra o evento real: confira nele antes de mapear.
Passo 4: adicione a linha no Google Sheets
Adicione uma action Google Sheets > Lookup Spreadsheet Row, procure pela coluna payment_id com o valor payment id e marque a opção de criar a linha se ela não existir. Mapeie as colunas: data, nome, e-mail, produto, valor, método, origem (cart src) e payment_id.
Por que lookup e não "Create Spreadsheet Row" direto: o HeroPay tem retentativa automática de entrega, e o mesmo evento pode chegar duas vezes. Buscar pelo payment id antes de criar evita a venda duplicada na planilha.
Passo 5: avise o Slack
Adicione Slack > Send Channel Message, escolha o canal e escreva a mensagem com os campos do trigger, por exemplo: "Venda confirmada: {product name}, R$ {payment value} via {payment method}. Origem: {cart src}." Teste, publique o Zap e faça mais uma compra no sandbox para ver a linha e a mensagem aparecerem sozinhas.
Quando estiver tudo certo, registre o mesmo webhook na API de produção (https://api.heropay.tech/webhook) com o token de produção. O Zap não muda.
Zap 2: formulário vira link de pagamento e e-mail com o link
O caso de quem vende serviço, mentoria ou inscrição: a pessoa preenche um Typeform ou Google Forms e recebe na hora um link para pagar com Pix, boleto ou cartão.
Passo 1: trigger no formulário
Escolha Typeform > New Entry ou Google Forms > New Form Response e conecte o formulário. Os campos mínimos são nome e e-mail. O preço não vem do formulário: ele fica fixo no Zap, para ninguém pagar o valor que digitou.
Passo 2: crie o link com Custom Request
Adicione Webhooks by Zapier > Custom Request. Use Custom Request, não a action POST simples, porque o corpo do HeroPay tem um objeto aninhado (payment_link) e uma lista (payment_methods); na Custom Request, o JSON vai exatamente como você escreve.
| Campo | Valor |
|---|---|
| Method | POST |
| URL | https://api.beta.heropay.tech/payment_links |
| Headers | Authorization = Bearer SEU_TOKEN · Accept = application/vnd.herospark.com; version=1 · Content-Type = application/json |
| Data | o JSON abaixo, com os campos do formulário inseridos |
{
"payment_link": {
"name": "Mentoria de 1 hora",
"description": "Sessão para {nome do formulário}",
"price_cents": 29700,
"absorbs_fees": true,
"max_installments": 6,
"payment_methods": ["pix", "credit_card", "bank_slip"],
"src": "{id da resposta do formulário}"
}
}price_cents é inteiro em centavos: 29700 é R$ 297,00, e o mínimo é 500 (R$ 5,00). O src volta em cart.src em todo webhook dessa compra, então o Zap 1 sabe exatamente de qual resposta do formulário veio o pagamento. Use no src um identificador sem espaços, como o id da resposta.
Teste a action. O Zapier lê a resposta 201 e expõe os campos, entre eles Data Offer Url, que é o checkout pronto.
Variação mais barata: um link só, com ?src= na URL
Criar um link por resposta gasta uma task a mais por lead e enche o painel de links. Se o produto e o preço são sempre os mesmos, crie o link uma vez no painel e, no Zap, monte a URL com Formatter by Zapier (que não consome task): URL_DO_LINK?src={id da resposta}. O src da URL chega em cart.src do mesmo jeito. O Zap cai de duas tasks por lead para uma.
Descreva o Zap para o assistente de IA
O editor do Zapier tem um assistente de IA que monta o rascunho do Zap a partir de uma descrição. Cole o texto abaixo, troque o que está entre colchetes e revise campo a campo antes de publicar: o assistente não conhece a API do HeroPay, então os headers e o JSON vêm desta página.
Crie um Zap com estes passos:
1. Trigger: Webhooks by Zapier, evento Catch Hook.
2. Action: Google Sheets, Lookup Spreadsheet Row na planilha [Vendas HeroPay], aba [2026], buscando a coluna payment_id pelo campo "payment id" do trigger; se não encontrar, crie a linha com as colunas data, nome (buyer name), email (buyer email), produto (product name), valor (payment value), metodo (payment method), origem (cart src) e payment_id (payment id).
3. Action: Slack, Send Channel Message no canal [#vendas] com o texto "Venda confirmada: {product name}, R$ {payment value} via {payment method}. Origem: {cart src}."
Não adicione passos além desses.Para o Zap com validação de assinatura, peça o código do passo Code by Zapier ao Claude, ChatGPT, Cursor ou outra IA de sua preferência com o prompt da seção seguinte, ou copie o código pronto.
O Zapier valida a assinatura dos webhooks do HeroPay?
Não nativamente. O HeroPay assina cada evento com o header X-HeroPay-Signature, um HMAC SHA-256 do corpo calculado com o segredo de assinatura exibido no painel. O trigger Catch Hook do Zapier não confere assinatura nenhuma, e ainda faz o parse do corpo e não entrega os headers. Qualquer pessoa que descobrir a URL do Zap consegue mandar um evento falso.
O que isso significa na prática:
- Zap de registro e aviso (planilha, Slack, CRM): o risco é uma linha falsa na planilha. Aceitável para muita gente, desde que ninguém tome decisão financeira só por ela.
- Zap que libera acesso, emite nota ou manda produto: valide a assinatura. Sempre.
Workaround: Catch Raw Hook + Code by Zapier
Troque o trigger por Catch Raw Hook, que entrega o corpo sem parse e os headers da requisição. Depois adicione Code by Zapier > Run JavaScript e mapeie três campos em Input Data: corpo (o raw body do trigger), assinatura (o header da assinatura, que aparece nos dados de teste com o nome normalizado pelo Zapier) e segredo (o segredo do webhook, colado como texto).
const crypto = require('crypto');
const hmac = () => crypto.createHmac('sha256', inputData.segredo).update(inputData.corpo, 'utf8');
// confira o formato da assinatura (hex ou base64) na documentação e mantenha só o certo
const esperadas = [hmac().digest('hex'), hmac().digest('base64')];
const recebida = Buffer.from((inputData.assinatura || '').trim());
const valido = esperadas.some((e) => {
const b = Buffer.from(e);
return recebida.length === b.length && crypto.timingSafeEqual(recebida, b);
});
let evento = {};
if (valido) evento = JSON.parse(inputData.corpo);
const buyer = evento.buyer || {};
const payment = evento.payment || {};
output = {
valido: valido,
payment_id: payment.id || '',
valor: payment.value || '',
metodo: payment.method || '',
nome: buyer.name || '',
email: buyer.email || '',
origem: (evento.cart || {}).src || '',
};Em seguida, um passo Filter by Zapier com "Only continue if valido is true" (o Filter não consome task). Tudo depois dele só roda com evento autêntico. O Code by Zapier aceita apenas a biblioteca padrão do Node.js, o que inclui o módulo crypto, e está disponível nos mesmos planos pagos que liberam o Webhooks.
Limites honestos desse workaround:
- O segredo fica no campo de Input Data do Zap, visível para quem edita o Zap na sua conta. O Zapier não tem um cofre de segredos para passos de código.
- O Catch Raw Hook aceita corpo de até 2 MB (o Catch Hook, 10 MB); os eventos do HeroPay ficam muito abaixo disso.
- O passo de código consome uma task por evento.
Se o fluxo mexe em dinheiro ou acesso e você não quer manter código dentro do Zapier, o caminho mais sólido é um endpoint seu (ou um fluxo no n8n) que valida o HMAC e só então repassa ao Zap.
Zapier ou n8n: qual usar com o HeroPay?
Os dois recebem o mesmo webhook e chamam a mesma API. A diferença é o modelo de cobrança e onde o fluxo roda.
| Zapier | n8n Cloud | n8n self-hosted | |
|---|---|---|---|
| Como cobra | Por task (cada action concluída; trigger, Filter e Formatter não contam) | Por execução do fluxo inteiro, qualquer número de passos | Grátis (Community Edition); você paga o servidor |
| Plano de entrada com webhook | Professional: US$ 19,99/mês (anual) ou US$ 29,99 (mensal), 750 tasks | Starter: € 20/mês (anual), 2.500 execuções | R$ 0 de licença |
| Zap 1 (Sheets + Slack), por venda | 2 tasks (3 com validação HMAC) | 1 execução | 1 execução |
| Vendas/mês cobertas no plano de entrada | cerca de 375 (250 com HMAC) | cerca de 2.500 | limitado pelo servidor |
| Validação HMAC | Workaround com Code by Zapier | Nó de código ou Crypto | Nó de código ou Crypto |
| Catálogo de apps | 10.147+ apps | Menor, com nó HTTP genérico | Igual ao Cloud |
| Quem mantém | Zapier | n8n | Você |
Verificado em set/2026. Fontes: zapier.com/pricing, zapier.com/apps, n8n.io/pricing.
Resumo honesto: use o Zapier se o seu time já vive nele, precisa de um app de nicho que só ele tem e o volume é de dezenas a poucas centenas de vendas por mês. Passou disso, ou o fluxo mexe em dinheiro e precisa de validação robusta, o n8n sai mais barato e dá mais controle, principalmente hospedado por você.
Quais são as armadilhas mais comuns com Zapier e pagamento?
Token no lugar errado
O token vai no header Authorization da Custom Request, dentro da sua conta do Zapier. Nunca cole o token em formulário, planilha compartilhada ou mensagem do Slack. Se vazar, regenere o token no painel do HeroPay e atualize o Zap.
Esquecer o header Accept
Sem Accept: application/vnd.herospark.com; version=1, a API usa a versão mais recente disponível. Funciona no teste e pode mudar sozinho em produção. Fixe a versão.
Reais onde a API espera centavos
price_cents: 297 cria um link de R$ 2,97, que a API recusa porque o mínimo é R$ 5,00. Em R$ 297,00, mande 29700. No sentido contrário, confira no teste do trigger o formato do valor que chega no payload e, se preciso, converta com o Formatter antes de somar na planilha.
Tratar o redirect como pagamento
Quem confirma pagamento é o evento spark_payment_confirmed, não a página de obrigado. O Pix pode ser pago minutos depois no celular. Confie no evento, não na volta do navegador.
Contar com a retentativa do HeroPay para erros dentro do Zap
O Zapier responde 200 assim que recebe o evento. A partir daí, a retentativa automática do HeroPay já considerou a entrega feita. Se o passo do Sheets falhar, quem reexecuta é o Zapier (histórico de Zaps e reexecução de passos com erro), não o HeroPay. Olhe o histórico do Zap depois de publicar.
Um Zap para todos os eventos sem saber qual chegou
Cada POST /webhook registra um gatilho. Se você apontar vários gatilhos para a mesma URL, acrescente um parâmetro na URL de cada registro, como ?evento=refunded: o Catch Hook costuma expor parâmetros da query string como campos, o que permite separar com Paths ou Filter. Confira no teste do trigger. O caminho mais simples continua sendo um Zap por gatilho.
Dá para cobrar sem Zapier nem código?
Dá. Crie um link de pagamento no painel, com nome, preço e métodos, e mande a URL por WhatsApp, e-mail ou bio. As vendas aparecem no painel e nos relatórios. O Zapier só entra quando você quer que outra ferramenta reaja à venda sozinha. Se o que você quer é colocar pagamento dentro de um app, veja Lovable ou a página de desenvolvedores; se quer que a IA escreva a integração, veja HeroPay para IA.
Perguntas frequentes
Existe app oficial do HeroPay no Zapier?
Não. A integração usa o Webhooks by Zapier, que o próprio Zapier oferece para conectar qualquer serviço com API: o trigger Catch Hook recebe os eventos do HeroPay e a action Custom Request chama a API para criar links de pagamento. Na prática, você configura uma URL e alguns headers a mais do que num app oficial, e ganha acesso a todos os 9 gatilhos de webhook e a qualquer endpoint da API, não só aos que um app pré-pronto exporia.
O Webhooks by Zapier funciona no plano grátis?
Não. O Webhooks by Zapier é um app premium e não está disponível no plano Free, segundo a central de ajuda do Zapier (atualizada em maio/2026). Ele aparece a partir do Professional, que custa US$ 19,99 por mês no plano anual ou US$ 29,99 no mensal, com 750 tasks, e também nos planos Team e Enterprise. O Code by Zapier, usado para validar a assinatura HMAC, segue a mesma regra. Verificado em set/2026 em zapier.com/pricing.
Como receber um webhook de pagamento no Zapier?
Crie um Zap com o trigger Webhooks by Zapier > Catch Hook e copie a URL que ele gera. Depois registre essa URL no HeroPay com POST /webhook, informando o gatilho (por exemplo, spark_payment_confirmed), a webhook_url e request_method: post. Faça uma compra de teste no sandbox e clique em Test trigger: os campos do comprador, do pagamento e do carrinho aparecem prontos para mapear nos próximos passos, como Google Sheets, Slack, CRM ou e-mail.
Quanto custa usar Zapier com o HeroPay?
São duas contas separadas. No HeroPay, Pix e boleto custam R$ 0 por transação e o cartão custa 3,49% por transação aprovada, sem mensalidade. No Zapier, você paga o plano: o Professional começa em US$ 19,99 por mês (anual) com 750 tasks. Um Zap que grava na planilha e avisa no Slack usa 2 tasks por venda, então cobre cerca de 375 vendas por mês nesse plano. Com validação HMAC, são 3 tasks e cerca de 250 vendas.
Zapier ou n8n: qual é melhor para pagamentos?
Depende do volume e do seu time. O Zapier cobra por task, tem mais de 10 mil apps e ninguém precisa manter servidor: bom para dezenas ou poucas centenas de vendas por mês. O n8n cobra por execução do fluxo inteiro (Starter a € 20/mês com 2.500 execuções) ou é gratuito se você hospedar a Community Edition, e valida HMAC com um nó de código sem gambiarra. Para volume alto ou fluxos que liberam acesso, o n8n costuma ser a escolha melhor.
O Zapier consegue criar um link de pagamento?
Consegue, com a action Webhooks by Zapier > Custom Request. Configure método POST, URL https://api.heropay.tech/payment_links, os headers Authorization: Bearer <token>, Accept: application/vnd.herospark.com; version=1 e Content-Type: application/json, e o JSON com payment_link (nome, price_cents em centavos, métodos e src). A resposta traz o checkout em data.offer.url, que o Zapier expõe como campo para o passo seguinte, como um e-mail ou mensagem de WhatsApp.
Como evitar venda duplicada na planilha?
O HeroPay tem retentativa automática de entrega, então o mesmo evento pode chegar mais de uma vez. No Google Sheets, use Lookup Spreadsheet Row buscando pelo payment id com a opção de criar a linha se não existir, em vez de Create Spreadsheet Row direto. Em outros apps, use a action de busca equivalente ou um Filter que compara o payment id com o último registrado. O payment id é único por pagamento e serve de chave de deduplicação.
Dá para saber de qual campanha veio a venda no Zapier?
Dá, pelo campo cart.src. Acrescente ?src=instagram (ou o nome da campanha) na URL do link de pagamento, ou envie src ao criar o link pela API. Esse valor é salvo no carrinho e chega em cart.src em todos os webhooks daquela compra, e o Zapier mostra como campo cart src. Mapeie numa coluna "origem" da planilha e você tem vendas por canal sem depender de UTM, que costuma se perder no redirecionamento.
O Zapier recebe eventos de assinatura e estorno?
Recebe, desde que você registre cada gatilho com POST /webhook. Os gatilhos de assinatura são subscription_activate, subscription_update e subscription_cancel; os de devolução são refunded e chargeback_request. Há ainda payment_pix_created, spark_payment_boleto_created e payment_credit_cart_refused (grafia com "cart"). O mais simples é um Zap por gatilho: por exemplo, subscription_cancel remove o cliente de uma lista no seu e-mail marketing e avisa o suporte no Slack.
Comece agora
Crie a conta sandbox, registre a URL do seu Zap e veja a primeira venda de teste cair na planilha em minutos. Sem fila de homologação: quando funcionar no sandbox, registre o webhook em produção e pronto.