Para adicionar pagamento no Lovable com Pix, você cria uma conta sandbox no HeroPay, cola heropay.tech/llms.txt no chat do Lovable e manda um prompt pedindo o fluxo de cobrança. O Lovable escreve a edge function que chama POST /payment_links, a tela de pedido e o webhook que libera o acesso. Você testa no sandbox, troca a chave e vá pro ar. Do app Lovable à primeira venda em minutos, com Pix a R$ 0 por transação, boleto a R$ 0 e cartão em até 12x.
Criar conta sandbox Ler a documentação
O essencial em 60 segundos
- O Lovable integra qualquer API de pagamento por meio de uma edge function no backend, com a chave guardada em Secrets; é assim que o HeroPay entra no seu app.
- O HeroPay cobra R$ 0 por Pix e R$ 0 por boleto; no cartão, 3,49% por transação aprovada, em até 12x. Sem mensalidade, ativação ou mínimo (preços).
- O caminho mais curto é o link de pagamento: uma chamada
POST /payment_linksdevolve a URL de um checkout pronto com Pix, boleto e cartão. - O arquivo
heropay.tech/llms.txtresume o HeroPay para IAs e aponta para a referência da API em docs.heropay.tech; o Lovable lê os dois antes de escrever código, o que reduz alucinação de endpoint. - O sandbox é gratuito e idêntico à produção, sem fila de homologação: para ir ao ar, você troca a chave e a URL base.
- Pagamento se confirma por webhook, nunca pelo redirect da página de obrigado. Confie no evento, não na volta do navegador.
- O que o HeroPay não tem hoje: botão "conectar" nativo dentro do Lovable; a integração é por API (e é exatamente o que o prompt desta página resolve).
Como adicionar pagamento no Lovable com o HeroPay?
São cinco passos. Os três primeiros acontecem em menos de dez minutos; o quarto depende de quanto você quer testar.
Passo 1: crie sua conta sandbox
Acesse app.heropay.tech, crie a conta e copie o token de API na área de configurações. O token é um Bearer JWT e vale para todas as chamadas. No sandbox a URL base é https://api.beta.heropay.tech; em produção, https://api.heropay.tech.
Não cole o token no chat do Lovable. Ele vai para Secrets no passo 3.
Passo 2: cole o llms.txt no chat do Lovable
Abra o projeto no Lovable e mande, como primeira mensagem:
Leia https://heropay.tech/llms.txt e a documentação em https://docs.heropay.tech e use as duas como referência da API HeroPay neste projeto. Não invente endpoints nem campos que não estejam na documentação.O llms.txt é um arquivo em texto feito para modelos de linguagem: resume o HeroPay, lista as páginas do site e aponta para a documentação da API, onde estão endpoints, campos e headers. É o mesmo arquivo que Claude, ChatGPT, Cursor, Lovable e outros usam quando você pede uma integração com o HeroPay.
Passo 3: mande o prompt pronto
Antes do prompt, cadastre os segredos em Cloud > Secrets (ou nas edge function secrets do Supabase, se o projeto usa Supabase próprio):
| Nome do secret | Valor no sandbox |
|---|---|
HEROPAY_API_KEY | seu token do painel |
HEROPAY_API_URL | https://api.beta.heropay.tech |
HEROPAY_WEBHOOK_SECRET | o segredo de assinatura do seu webhook |
Depois copie e cole o prompt inteiro. Troque só o que está entre colchetes.
Quero aceitar pagamentos neste app usando a API HeroPay (referência: https://heropay.tech/llms.txt e https://docs.heropay.tech). Siga exatamente estas regras.
CONTEXTO DO PRODUTO
- O que vendo: [ex.: "Plano Pro anual do meu app de finanças"]
- Preço: [ex.: R$ 197,00]
- Parcelamento no cartão: até [12]x
- Métodos: Pix, cartão e boleto
1. BANCO DE DADOS
Crie a tabela "orders" com: id (uuid, padrão gen_random_uuid()), user_id (referência ao usuário logado), product_key (texto), amount_cents (inteiro), status (texto: pending, paid, refunded, canceled; padrão pending), checkout_url (texto), heropay_payment_link_id (inteiro), paid_at (timestamp, nulo), created_at (timestamp, padrão now()).
Ative RLS: o usuário só lê os próprios pedidos e NUNCA escreve em status, amount_cents ou paid_at. Só as edge functions, com service role, alteram esses campos.
Crie também a tabela "products" com product_key, name, description e price_cents, e cadastre o produto acima. O preço vive no servidor, nunca no front.
2. EDGE FUNCTION "create-checkout"
- Exige usuário autenticado.
- Recebe apenas product_key. Nunca aceite preço vindo do cliente.
- Busca o preço em "products" e cria um pedido "pending" em "orders".
- Chama POST {HEROPAY_API_URL}/payment_links com os headers:
Authorization: Bearer {HEROPAY_API_KEY}
Accept: application/vnd.herospark.com; version=1
Content-Type: application/json
- Corpo:
{
"payment_link": {
"name": "<nome do produto>",
"description": "<descrição do produto>",
"price_cents": <preço em centavos, inteiro, mínimo 500>,
"absorbs_fees": true,
"max_installments": [12],
"payment_methods": ["pix", "credit_card", "bank_slip"],
"src": "<id do pedido>"
}
}
- Da resposta, salve data.id em heropay_payment_link_id e data.offer.url em checkout_url.
- Devolve ao front só o checkout_url e o id do pedido.
- Leia HEROPAY_API_KEY e HEROPAY_API_URL com Deno.env.get. A chave nunca vai para o código do front, para o repositório nem para logs.
- Se a API responder erro, devolva uma mensagem amigável e registre o corpo do erro no log da função.
3. FRONT
- Botão "Comprar" na página do produto: chama create-checkout, abre o checkout_url em nova aba e leva o usuário para /pedido/:id.
- Página /pedido/:id: mostra "Aguardando pagamento" enquanto status = pending e atualiza sozinha (Realtime do banco ou consulta a cada 5 segundos). Quando status = paid, mostra "Pagamento confirmado" e libera o acesso.
- Nunca libere acesso só porque o usuário voltou do checkout. Quem libera é o status "paid" gravado pelo webhook.
4. EDGE FUNCTION "heropay-webhook"
- Pública (sem exigir JWT do Supabase), só aceita POST.
- Valide a autenticidade do evento antes de parsear o JSON: o header X-HeroPay-Signature traz um HMAC SHA-256 do corpo bruto, calculado com HEROPAY_WEBHOOK_SECRET (lido com Deno.env.get). Compare em tempo constante, aceitando o HMAC em hexadecimal ou em base64. Assinatura ausente ou diferente: responda 401 e descarte.
- Leia o gatilho do evento e o campo cart.src, que é o id do pedido.
- spark_payment_confirmed: marque o pedido como paid e grave paid_at, mas só se o valor pago bater com amount_cents. Seja idempotente: se já está paid, responda 200 e não faça nada.
- refunded ou chargeback_request: marque como refunded e revogue o acesso.
- Responda 200 rápido. Evento com cart.src desconhecido: registre no log e responda 200.
5. ENTREGA
Ao terminar, me mostre a URL pública da função heropay-webhook e um comando curl para eu registrar o webhook na HeroPay. Não crie nada fora do que foi pedido.Passo 4: teste no sandbox
- Registre o webhook com a URL que o Lovable devolveu. Um registro por gatilho:
for trigger in spark_payment_confirmed refunded chargeback_request; do
curl -s -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\":\"$trigger\",\"webhook_url\":\"https://SEU-PROJETO.supabase.co/functions/v1/heropay-webhook\",\"request_method\":\"post\"}}"
done- No preview do Lovable, clique em Comprar. Confira que um pedido
pendingapareceu na tabelaorderse que o checkout abriu em outra aba. - Pague no checkout do sandbox com os dados de teste indicados na documentação.
- Veja nos logs da edge function
heropay-webhooko eventospark_payment_confirmedchegar e o pedido virarpaid. A página/pedido/:iddeve atualizar sozinha. - Teste o caminho triste: pedido sem pagamento continua
pending, e voltar do checkout sem pagar não libera nada.
Passo 5: troque a chave e vá pro ar
Em Secrets, troque HEROPAY_API_KEY pelo token de produção e HEROPAY_API_URL por https://api.heropay.tech. Registre de novo os webhooks, agora na API de produção. Publique o app. Não existe fila de homologação: o código que passou no sandbox é o que roda em produção.
O que o Lovable vai gerar?
Com o prompt acima, o Lovable monta quatro peças. Vale saber o que cada uma faz para revisar o código antes de publicar.
| Peça | Onde roda | O que faz |
|---|---|---|
Tabelas products e orders com RLS | Banco (Lovable Cloud ou Supabase) | Guarda preço no servidor e o status de cada pedido |
Edge function create-checkout | Backend | Chama POST /payment_links com o token em Secrets e devolve a URL do checkout |
Página /pedido/:id | Front | Mostra "aguardando" e vira "confirmado" quando o banco muda |
Edge function heropay-webhook (opcional, mas recomendada) | Backend | Recebe o evento, valida, marca o pedido como pago e revoga em estorno |
A chamada central fica parecida com isto:
const res = await fetch(`${Deno.env.get("HEROPAY_API_URL")}/payment_links`, {
method: "POST",
headers: {
Authorization: `Bearer ${Deno.env.get("HEROPAY_API_KEY")}`,
Accept: "application/vnd.herospark.com; version=1",
"Content-Type": "application/json",
},
body: JSON.stringify({
payment_link: {
name: product.name,
price_cents: product.price_cents, // 19700 = R$ 197,00
absorbs_fees: true,
max_installments: 12,
payment_methods: ["pix", "credit_card", "bank_slip"],
src: order.id, // volta no webhook em cart.src
},
}),
});
const { data } = await res.json();
// data.offer.url é o checkout prontoO truque está no campo src. O que você manda nele é salvo no carrinho e volta em cart.src em todos os webhooks daquela compra. Mandando o id do pedido, o webhook sabe exatamente qual linha de orders atualizar, sem casar por e-mail ou valor.
Quer menos chamadas? Crie um link por produto uma vez só e acrescente ?src=<id-do-pedido> na URL a cada compra. O efeito no webhook é o mesmo.
Dá para cobrar no Lovable sem escrever código?
Dá. Se você só quer validar se alguém paga, pule a edge function:
- No painel, crie um link de pagamento com nome, preço e métodos.
- No Lovable, peça: "Adicione um botão Comprar agora na página de preços que abre [URL do link] em nova aba."
- Acompanhe as vendas no painel.
O limite desse caminho: o app não sabe quem pagou. Você libera acesso manualmente ou, quando as vendas começarem, evolui para o fluxo com webhook acima. Para capturar a origem, acrescente ?src=instagram (ou o nome da campanha) na URL do botão e veja isso chegar nos relatórios.
Quais são as armadilhas mais comuns ao integrar pagamento no Lovable?
Chave exposta no front
É o erro mais caro. Se o token aparece em um arquivo .tsx, em import.meta.env do Vite ou em uma variável com prefixo VITE_, ele vai parar no bundle que qualquer pessoa baixa pelo navegador. Com o token, alguém cria links, lê suas vendas e consulta seu saldo.
Como evitar: o token vive só em Secrets e só é lido dentro de edge function com Deno.env.get. Depois que o Lovable gerar o código, peça: "Procure no projeto qualquer uso de HEROPAY_API_KEY fora de supabase/functions e me mostre." A resposta certa é nenhuma. Se a chave vazou, gere outra no painel na hora.
Valor em reais onde a API espera centavos
price_cents é inteiro em centavos: R$ 197,00 é 19700. Mandar 197 cria um link de R$ 1,97, que a API recusa porque o mínimo é R$ 5,00 (500). Mandar 197.00 como float também dá problema. Guarde centavos no banco e só formate em reais na tela.
Preço vindo do navegador
Se a edge function aceita price_cents do front, qualquer um edita a requisição e compra seu plano por R$ 5. O front manda só o identificador do produto; o preço sai da tabela products.
Confirmar pelo redirect e não pelo webhook
Voltar para a página de obrigado não prova pagamento: o usuário pode fechar a aba antes, o Pix pode ser pago minutos depois no celular, e qualquer um digita a URL de sucesso. A única fonte de verdade é o evento spark_payment_confirmed chegando no webhook. Confie no evento, não no redirect.
Webhook sem validação ou sem idempotência
Uma URL pública que marca pedidos como pagos precisa validar a assinatura HMAC do evento, senão qualquer um forja um "pago". E o mesmo evento pode chegar mais de uma vez por causa do retry: marcar paid só se ainda estiver pending evita liberar em dobro ou mandar dois e-mails.
Assinatura esperando Pix
Links de recorrência (period: monthly, annual etc.) aceitam cartão, boleto e Pix: na assinatura via Pix, o comprador autoriza o Pix Automático uma vez e as cobranças seguintes caem sozinhas, sem cartão e sem churn involuntário. Detalhes em assinaturas.
Por que Pix a R$ 0 muda a conta de um micro-SaaS?
Em ticket baixo, taxa fixa por transação come a margem antes do percentual. Veja 1.000 vendas de R$ 29,90 em Pix (um pacote de créditos, por exemplo):
| Pix, 1.000 vendas de R$ 29,90 | HeroPay | AbacatePay | Stripe BR |
|---|---|---|---|
| Taxa por Pix | R$ 0 | R$ 0,80 | 1,19% (só por convite) |
| Custo total | R$ 0 | R$ 800,00 | R$ 355,81 |
| % da receita (R$ 29.900) | 0% | 2,7% | 1,19% |
Verificado em set/2026. Fontes: heropay.tech/precos, abacatepay.com, stripe.com/br/pricing.
R$ 800 por mil vendas é um mês de servidor, de ferramenta de e-mail ou de anúncio. Em micro-SaaS, onde cada real de margem define se o projeto se paga, cobrar Pix de graça muda a decisão de preço: você pode dar desconto no Pix sem perder dinheiro para o gateway.
No cartão, o HeroPay também fica mais barato que a Stripe BR em qualquer valor de venda: numa venda de R$ 29,90, o HeroPay cobra 3,49% (R$ 1,04) e a Stripe BR cobra 3,99% + R$ 0,39 (R$ 1,58). O que a Stripe tem a mais aqui é a conexão nativa com o Lovable e o suporte oficial (veja a tabela abaixo). Para ticket baixo, o Pix a R$ 0 continua sendo o melhor caminho; para ticket alto, o cartão em até 12x com aprovação de 93%+ trabalha a seu favor. A conta completa está em preços.
Lovable Payments, Stripe ou HeroPay: qual usar?
| HeroPay | Lovable Payments (Paddle) | Stripe conectada ao Lovable | |
|---|---|---|---|
| Pix | R$ 0, liberado para toda conta | Não citado na documentação | 1,19%, só por convite |
| Boleto | R$ 0 | Não citado na documentação | R$ 3,45 |
| Cartão | 3,49%, até 12x | 5% + US$ 0,50 | 3,99% + R$ 0,39 |
| Como conecta | API + llms.txt via edge function | Nativo, sem chave | Nativo, com chave restrita |
| Assinatura | Cartão (pela API) | Sim | Sim |
| Suporte oficial do Lovable | Não (integração por API) | Sim | Sim |
Verificado em set/2026. Fontes: docs.lovable.dev/features/payments, docs.lovable.dev/integrations/stripe, stripe.com/br/pricing.
Resumo honesto: se você vende em dólar para o mundo e quer zero configuração, o pagamento nativo do Lovable é o caminho mais curto. Se o seu cliente é brasileiro e paga em Pix, a conta muda: o HeroPay cobra R$ 0 no Pix e entrega um checkout com parcelamento, Apple Pay, Google Pay e recuperação de carrinho. A própria documentação do Lovable diz que outros provedores entram por edge function com sua conta e sua chave; é exatamente o fluxo desta página.
Perguntas frequentes
Como adicionar pagamento no Lovable?
Pelo backend do próprio Lovable. Você guarda o token do provedor em Cloud > Secrets e pede ao Lovable uma edge function que chame a API de pagamento. Com o HeroPay: crie a conta sandbox, cole heropay.tech/llms.txt no chat para o Lovable ler a referência da API, envie o prompt pronto desta página e teste. A função chama POST /payment_links, recebe a URL de um checkout com Pix, boleto e cartão e abre para o comprador. Um webhook confirma o pagamento e libera o acesso. Para ir ao ar, você troca a chave do sandbox pela de produção.
O Lovable aceita Pix?
O Lovable não processa pagamento sozinho; ele gera o código que conversa com um provedor. A documentação do pagamento nativo (Stripe e Paddle) não cita Pix, e na Stripe BR o Pix é liberado só por convite (verificado em set/2026). Para aceitar Pix hoje, o caminho é integrar um provedor brasileiro por edge function. Com o HeroPay, o Pix vem habilitado no link de pagamento por padrão e custa R$ 0 por transação, então seu app aceita Pix no mesmo fluxo que aceita cartão e boleto.
Preciso saber programar para integrar o HeroPay no Lovable?
Não. O prompt desta página descreve tabelas, funções e regras de segurança em português, e o Lovable escreve o código. Você só precisa copiar o token para Secrets, colar o prompt, rodar um comando curl para registrar o webhook e testar uma compra no sandbox. Se nem isso for possível agora, use a alternativa sem código: crie um link de pagamento no painel e peça ao Lovable um botão que abra esse link. Você perde a liberação automática de acesso, mas começa a vender no mesmo dia.
Onde fica a chave de API no Lovable?
Em Cloud > Secrets, com o nome HEROPAY_API_KEY. Projetos com Supabase próprio usam as edge function secrets do Supabase. A chave é lida só dentro da edge function com Deno.env.get e nunca aparece no front, no repositório ou no chat. Nunca coloque o token em variável com prefixo VITE_ nem em arquivo .tsx: tudo que vai para o navegador é público. Se desconfiar de vazamento, gere um token novo no painel do HeroPay e atualize o secret.
O Lovable consegue criar assinatura mensal com o HeroPay?
Consegue, com uma ressalva. Mandando period: "monthly" (ou quarterly, semiannual, annual) no POST /payment_links, o link vira recorrência, com renovação ilimitada ou limitada por frequency_limit. A recorrência aceita cartão, boleto e Pix: na assinatura via Pix, o comprador autoriza o Pix Automático uma vez e as cobranças seguintes caem sozinhas, a R$ 0 de taxa. Os eventos subscription_activate, subscription_update e subscription_cancel avisam seu app sobre o ciclo de vida da assinatura.
Como saber que o cliente pagou dentro do app do Lovable?
Pelo webhook. Registre a URL da edge function heropay-webhook para o gatilho spark_payment_confirmed. Quando o pagamento é confirmado, o HeroPay envia um POST com dados do comprador, do pagamento e do carrinho. Se você criou o link com src igual ao id do pedido, esse valor volta em cart.src e a função sabe qual pedido marcar como pago. Não use o retorno à página de obrigado como prova: o Pix pode ser pago minutos depois, e qualquer um digita uma URL de sucesso.
Quanto custa receber pagamentos no Lovable com o HeroPay?
Pix R$ 0 e boleto R$ 0 por transação. Cartão de crédito custa 3,49% por transação aprovada, em até 12x. Não há mensalidade, taxa de ativação ou volume mínimo, e o sandbox é gratuito. O Lovable não cobra nada a mais por você integrar uma API externa por edge function; você paga só o seu plano do Lovable, se tiver um. Compare os números de cada método em preços.
O preview do Lovable funciona com o checkout?
Funciona para criar o pedido e abrir o checkout, que o prompt manda abrir em nova aba justamente para não brigar com o iframe do preview. O webhook, porém, chega na edge function publicada, não no seu navegador; por isso a confirmação aparece na página do pedido via banco de dados, mesmo testando pelo preview. Se a página não atualizar, olhe primeiro os logs da função heropay-webhook e confira se o webhook foi registrado na API de sandbox, e não na de produção.
Posso usar o mesmo fluxo em Bolt, v0, Cursor ou Claude?
Pode. O fluxo é o mesmo em qualquer ferramenta: backend com a chave, POST /payment_links, webhook confirmando. Muda onde a chave mora e como a função é publicada. No Cursor e no Claude Code, a IA ainda pode rodar no terminal os curl de teste que você aprovar; o MCP server oficial do HeroPay está em desenvolvimento. Claude, ChatGPT, Cursor, Lovable e outros leem o mesmo llms.txt, então o prompt desta página serve de base; ajuste só a parte de Secrets e edge function para a sua stack. Veja todas as integrações.
Qual é o valor mínimo de uma cobrança?
R$ 5,00, ou 500 em price_cents. Abaixo disso a API responde 422 com a mensagem de validação. No cartão, cada parcela precisa ter pelo menos R$ 1,99, então um produto de R$ 10 não pode ir em 12x; ajuste max_installments ao ticket. Se o seu app vende créditos avulsos de centavos, agrupe em pacotes (por exemplo, 100 créditos por R$ 9,90) e cobre o pacote em Pix, que custa R$ 0 por transação.
O HeroPay tem integração nativa no Lovable, com botão de conectar?
Ainda não. Hoje os provedores com botão nativo no Lovable são Stripe e Paddle. O HeroPay entra pelo caminho que a própria documentação do Lovable indica para outros provedores: edge function com a sua conta e a sua chave. Na prática, isso leva poucos minutos com o llms.txt e o prompt pronto, e você fica com o controle total do fluxo, do banco e dos eventos. Um pedido de integração nativa já existe no fórum de sugestões do Lovable para provedores brasileiros; vote se quiser acelerar.
Comece agora
Crie a conta sandbox, cole o llms.txt no Lovable e faça a primeira venda de teste hoje. Sem fila de homologação: quando passar no sandbox, troque a chave e vá pro ar.