Integração

Aceite pagamentos no v0 e no Bolt: Pix a R$ 0 e no ar em minutos

Como aceitar pagamento no v0 da Vercel e no Bolt com Pix a R$ 0, boleto e cartão. Dois prompts prontos em português, sandbox grátis e webhook assinado.

3 passos · em minutos
  1. 01token do sandbox
  2. 02link de pagamento
  3. 03webhook confirma

Para aceitar pagamento no v0 da Vercel ou no Bolt com Pix, você cria uma conta sandbox no HeroPay, guarda o token como variável de servidor e manda o prompt pronto desta página. No v0, a chave vive nas Environment Variables do projeto na Vercel e a cobrança sai de um route handler do Next.js. No Bolt, a chave vive em Secrets e a cobrança sai de uma server function do Bolt Cloud (ou de uma edge function, se o projeto usa Supabase). Nos dois, a chamada é POST /payment_links, o checkout vem pronto com Pix, boleto e cartão em até 12x, e um webhook assinado confirma o pagamento. Pix e boleto custam R$ 0 por transação.

Resumo

O essencial em 60 segundos

  • O v0 gera apps Next.js que rodam na Vercel; a chave do HeroPay fica em Settings > Environment Variables do projeto e só é lida em route handler ou server action, nunca em componente de cliente.
  • O Bolt gera apps fullstack com backend no Bolt Cloud; a chave fica em Secrets e só é lida dentro de uma server function (ou edge function do Supabase, se você conectou um).
  • O caminho mais curto nos dois é o link de pagamento: uma chamada POST /payment_links devolve a URL de um checkout pronto com Pix, boleto e cartão.
  • 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 llms.txt do HeroPay (heropay.tech/llms.txt) resume o HeroPay para IAs e aponta para a documentação da API; colado no chat junto com o prompt desta página, que já traz o contrato da chamada, o v0 e o Bolt escrevem a integração sem inventar endpoint.
  • O pagamento se confirma pelo webhook, com assinatura HMAC no header X-HeroPay-Signature, nunca pela volta do navegador à página de obrigado.
  • O que o HeroPay não tem hoje: integração nativa no Vercel Marketplace nem botão de conectar no Bolt. A integração é por API, e é isso que os prompts desta página resolvem.

Qual a diferença entre integrar pagamento no v0 e no Bolt?

O fluxo de dinheiro é o mesmo nos dois: o servidor cria o link, o comprador paga no checkout do HeroPay, o webhook avisa o seu app. O que muda é onde o código de servidor mora e onde a chave fica guardada.

v0 (Vercel)Bolt (StackBlitz)
O que geraApp Next.js (React, TypeScript, Tailwind, shadcn/ui)App fullstack, front em geral com Vite ou Next
Onde roda o backendRoute handlers (app/api/.../route.ts) e server actions, publicados como Vercel FunctionsServer functions do Bolt Cloud, ou edge functions do Supabase se o projeto usa Supabase
Onde fica a chaveMenu do projeto ... > Settings > Environment Variables (vai para a Vercel)Ícone de banco de dados > Secrets
Prefixo que expõe no navegadorNEXT_PUBLIC_VITE_ (Vite), NEXT_PUBLIC_ (Next)
Banco de dadosIntegração do Marketplace (Supabase, Neon, Upstash)Bolt Database (padrão) ou Supabase
URL do webhookhttps://seu-app.vercel.app/api/webhooks/heropayURL pública da server function heropay-webhook
Preview roda servidor?Sim, o preview usa Vercel Sandbox com rotas de API e env varsSim, as server functions são publicadas pelo Bolt
Pagamento nativo da ferramentaStripe via Vercel MarketplaceStripe integrado (cria as edge functions e o webhook sozinho)

Verificado em set/2026. Fontes: v0.app/docs/faqs, vercel.com/docs/environment-variables, vercel.com/marketplace/stripe, support.bolt.new/cloud/bolt-cloud, support.bolt.new/cloud/database/secrets, support.bolt.new/cloud/database/server-functions, support.bolt.new/integrations/stripe.

Regra prática: no v0 você pensa em rota de API; no Bolt você pensa em função de servidor. Em ambos, a regra de ouro não muda: a chave vive no servidor e o preço sai do servidor.

Como aceitar pagamento no v0 ou no Bolt com o HeroPay?

Seis passos, iguais nas duas ferramentas. Onde a tela muda, o passo traz as duas versões.

Passo 1: crie sua conta sandbox

Acesse app.heropay.tech, crie a conta e copie o token de API em configurações. O token é um Bearer JWT. No sandbox, a URL base é https://api.beta.heropay.tech; em produção, https://api.heropay.tech. O sandbox é gratuito, idêntico à produção e não tem fila de homologação.

Não cole o token no chat do v0 nem do Bolt. Ele vai para a área de segredos no passo 3.

Passo 2: coloque o llms.txt no contexto

Abra o projeto 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, headers nem campos que não estejam lá.

O llms.txt é um arquivo de texto feito para IAs: resume o que é o HeroPay, lista as páginas do site e aponta para a documentação da API em docs.heropay.tech. É o mesmo que Claude, ChatGPT, Cursor, Lovable e outros leem quando você pede uma integração com o HeroPay. Se a ferramenta não conseguir abrir a URL, baixe o arquivo e anexe no chat. O contrato que mais importa (endpoint, headers, centavos, webhook assinado) já vai escrito no prompt do passo 4.

Passo 3: cadastre os segredos

Os mesmos três nomes nas duas ferramentas:

NomeValor no sandbox
HEROPAY_API_KEYseu token do painel
HEROPAY_API_URLhttps://api.beta.heropay.tech
HEROPAY_WEBHOOK_SECRETo segredo de assinatura do webhook, exibido no painel (passo 5)
  • No v0: menu do projeto ... > Settings > Environment Variables. As variáveis são do projeto, então todos os chats do projeto enxergam. Não use prefixo NEXT_PUBLIC_.
  • No Bolt: ícone de banco de dados > Secrets, preencha Name e Value. O Bolt também abre esse painel sozinho quando o código pede um segredo. Não use prefixo VITE_.

Passo 4: mande o prompt pronto da sua ferramenta

Copie o bloco do v0 ou do Bolt na seção O prompt pronto, troque só o que está entre colchetes e envie.

Passo 5: registre o webhook e teste no sandbox

  1. Publique o app (no v0, Publish; no Bolt, Publish ou deploy da server function) e pegue a URL pública do webhook que a ferramenta mostrar.
  2. Registre um webhook 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-APP/api/webhooks/heropay\",\"request_method\":\"post\"}}"
done
  1. Copie o segredo de assinatura do webhook, exibido no painel, para HEROPAY_WEBHOOK_SECRET. No v0, publique de novo: na Vercel, variável alterada só vale para o próximo deploy.
  2. Clique em Comprar no app, confira o pedido pending no banco e faça uma compra de teste no checkout do sandbox.
  3. Nos logs (Vercel > Logs, ou Bolt > Server Functions > View Logs), veja chegar spark_payment_confirmed e o pedido virar paid.
  4. Teste o caminho triste: voltar do checkout sem pagar não libera nada; um POST na URL do webhook sem assinatura válida recebe 401.

Passo 6: troque a chave e vá pro ar

Troque HEROPAY_API_KEY pelo token de produção e HEROPAY_API_URL por https://api.heropay.tech, registre os webhooks na API de produção e atualize HEROPAY_WEBHOOK_SECRET. Publique. O código que passou no sandbox é o que roda em produção.

Qual prompt usar no v0 e no Bolt?

Os dois prompts pedem as mesmas peças (preço no servidor, pedido no banco, POST /payment_links, webhook com HMAC e idempotência), cada um no dialeto da ferramenta. Cole inteiro e troque só o que está entre colchetes.

Prompt pronto para o v0

Quero aceitar pagamentos neste app Next.js 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. VARIÁVEIS DE AMBIENTE
Use só process.env.HEROPAY_API_KEY, process.env.HEROPAY_API_URL e process.env.HEROPAY_WEBHOOK_SECRET, que já estão nas Environment Variables do projeto. Nunca crie variável com prefixo NEXT_PUBLIC_ para elas. Nunca escreva o valor da chave no código.

2. BANCO DE DADOS
Use a integração de banco do projeto (Supabase ou Neon). Crie a tabela "orders" com: id (uuid), user_id, product_key (texto), amount_cents (inteiro), status (pending, paid, refunded, canceled; padrão pending), checkout_url (texto), heropay_payment_link_id (inteiro), paid_at (timestamp nulo), created_at.
Crie "products" com product_key, name, description e price_cents, e cadastre o produto acima. O preço vive no servidor, nunca no front.

3. CRIAR O CHECKOUT: app/api/checkout/route.ts (POST)
- Arquivo só de servidor, com import "server-only" e export const runtime = "nodejs".
- Recebe apenas product_key. Nunca aceite preço vindo do cliente.
- Busca o preço em "products", 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>",
      "price_cents": <centavos, inteiro, mínimo 500>,
      "absorbs_fees": true,
      "max_installments": [12],
      "payment_methods": ["pix", "credit_card", "bank_slip"],
      "src": "<id do pedido>"
    }
  }
- Salve data.id em heropay_payment_link_id e data.offer.url em checkout_url.
- Devolva ao front só checkout_url e o id do pedido. Em erro da API, responda mensagem amigável e registre o corpo do erro com console.error, sem logar a chave.

4. FRONT
- Botão "Comprar" (componente de cliente) faz fetch para /api/checkout, abre checkout_url em nova aba e leva para /pedido/[id].
- Página /pedido/[id]: mostra "Aguardando pagamento" enquanto status = pending e consulta o status a cada 5 segundos. Quando status = paid, mostra "Pagamento confirmado" e libera o acesso.
- Nunca libere acesso porque o usuário voltou do checkout. Quem libera é o status "paid" gravado pelo webhook.

5. WEBHOOK: app/api/webhooks/heropay/route.ts (POST)
- export const runtime = "nodejs". Leia o corpo bruto com await request.text() ANTES de qualquer JSON.parse.
- Calcule HMAC SHA-256 do corpo bruto com HEROPAY_WEBHOOK_SECRET (node:crypto) e compare com o header X-HeroPay-Signature usando crypto.timingSafeEqual. Confira na documentação se a assinatura vem em hex ou base64; se não estiver claro, aceite os dois e me avise. Se não bater, responda 401.
- Leia o gatilho do evento e cart.src, que é o id do pedido.
- spark_payment_confirmed: marque paid e grave paid_at só se o valor pago bater com amount_cents. Idempotente: se já está paid, responda 200 e não faça nada.
- refunded ou chargeback_request: marque refunded e revogue o acesso.
- Responda 200 rápido. cart.src desconhecido: registre no log e responda 200.
- Se o llms.txt descrever a assinatura de forma diferente, siga o llms.txt e me avise.

6. ENTREGA
Ao terminar, me mostre a URL do webhook no domínio publicado (https://<meu-app>.vercel.app/api/webhooks/heropay) e procure no projeto qualquer uso de HEROPAY_ fora de app/api e de arquivos com "server-only". A resposta certa é nenhum.

Prompt pronto para o Bolt

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.: "Pacote de 100 créditos do meu app"]
- Preço: [ex.: R$ 29,90]
- Parcelamento no cartão: até [3]x
- Métodos: Pix, cartão e boleto

1. BACKEND E SEGREDOS
Todo acesso à HeroPay acontece em server functions do Bolt Cloud (se este projeto usa Supabase, em edge functions do Supabase). Leia HEROPAY_API_KEY, HEROPAY_API_URL e HEROPAY_WEBHOOK_SECRET do painel Secrets. Nunca crie variável com prefixo VITE_ ou NEXT_PUBLIC_ para elas, nunca coloque a chave em arquivo do front e nunca escreva o valor no código. Se faltar algum segredo, me peça para cadastrar em Secrets.

2. BANCO DE DADOS
Crie a tabela "orders" com: id (uuid), user_id (usuário logado), product_key (texto), amount_cents (inteiro), status (pending, paid, refunded, canceled; padrão pending), checkout_url (texto), heropay_payment_link_id (inteiro), paid_at (timestamp nulo), created_at.
Ative as regras de acesso: o usuário só lê os próprios pedidos e nunca escreve em status, amount_cents ou paid_at. Só as server functions alteram esses campos.
Crie "products" com product_key, name, description e price_cents, e cadastre o produto acima. O preço vive no servidor, nunca no front.

3. SERVER FUNCTION "create-checkout"
- Exige usuário autenticado. Recebe apenas product_key; nunca aceite preço 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>",
      "price_cents": <centavos, inteiro, mínimo 500>,
      "absorbs_fees": true,
      "max_installments": [3],
      "payment_methods": ["pix", "credit_card", "bank_slip"],
      "src": "<id do pedido>"
    }
  }
- Salve data.id em heropay_payment_link_id e data.offer.url em checkout_url. Devolva ao front só checkout_url e o id do pedido.
- Em erro da API, devolva mensagem amigável e registre o corpo do erro no log da função, sem logar a chave.

4. FRONT
- Botão "Comprar": chama create-checkout, abre checkout_url em nova aba e leva para /pedido/:id.
- Página /pedido/:id: "Aguardando pagamento" enquanto status = pending, atualizando sozinha (tempo real do banco ou consulta a cada 5 segundos). Com status = paid, "Pagamento confirmado" e acesso liberado.
- Nunca libere acesso porque o usuário voltou do checkout. Quem libera é o status "paid" gravado pelo webhook.

5. SERVER FUNCTION "heropay-webhook"
- Pública (sem exigir login), só aceita POST.
- Leia o corpo bruto como texto ANTES de fazer parse. Calcule HMAC SHA-256 do corpo bruto com HEROPAY_WEBHOOK_SECRET e compare com o header X-HeroPay-Signature em tempo constante. Confira na documentação se a assinatura vem em hex ou base64; se não estiver claro, aceite os dois e me avise. Se não bater, responda 401.
- Leia o gatilho do evento e cart.src, que é o id do pedido.
- spark_payment_confirmed: marque paid e grave paid_at só se o valor pago bater com amount_cents. Idempotente: se já está paid, responda 200 e não faça nada.
- refunded ou chargeback_request: marque refunded e revogue o acesso.
- Responda 200 rápido. cart.src desconhecido: registre no log e responda 200.
- Se o llms.txt descrever a assinatura de forma diferente, siga o llms.txt e me avise.

6. ENTREGA
Ao terminar, me mostre a URL pública da função heropay-webhook, um comando curl para registrar o webhook na HeroPay e a lista de arquivos do front que leem alguma variável HEROPAY_. A resposta certa é nenhum. Não use a integração de Stripe do Bolt e não crie nada fora do que foi pedido.

A última linha do prompt do Bolt existe por um motivo: quando você fala em pagamento, o Bolt tende a oferecer a integração nativa com Stripe. Ela é boa para vender em dólar, mas não traz Pix a R$ 0 nem boleto.

O que o v0 e o Bolt vão gerar?

PeçaNo v0No BoltO que faz
Tabelas products e ordersBanco da integração (Supabase ou Neon)Bolt Database ou SupabaseGuarda o preço no servidor e o status de cada pedido
Criar checkoutapp/api/checkout/route.tsServer function create-checkoutChama POST /payment_links com a chave do servidor e devolve a URL
Página do pedidoapp/pedido/[id]/page.tsxRota /pedido/:idMostra "aguardando" e vira "confirmado" quando o banco muda
Webhookapp/api/webhooks/heropay/route.tsServer function heropay-webhookValida o HMAC, marca pago, revoga em estorno

O webhook no v0 fica mais ou menos assim. O detalhe que mais quebra integração é ler o corpo com request.text(): se o código fizer request.json() antes, o corpo bruto se perde e a assinatura nunca bate.

// app/api/webhooks/heropay/route.ts
import crypto from "node:crypto";

export const runtime = "nodejs";

function assinaturaValida(corpo: string, recebida: string, segredo: string) {
  const hmac = () => crypto.createHmac("sha256", segredo).update(corpo);
  // confira o formato (hex ou base64) na documentação de webhooks e mantenha só o certo
  const esperadas = [hmac().digest("hex"), hmac().digest("base64")];
  const r = Buffer.from(recebida);
  return esperadas.some((e) => {
    const b = Buffer.from(e);
    return r.length === b.length && crypto.timingSafeEqual(r, b);
  });
}

export async function POST(request: Request) {
  const corpo = await request.text(); // corpo bruto, antes de qualquer parse
  const recebida = request.headers.get("x-heropay-signature") ?? "";
  if (!assinaturaValida(corpo, recebida, process.env.HEROPAY_WEBHOOK_SECRET!)) {
    return new Response("assinatura inválida", { status: 401 });
  }

  const evento = JSON.parse(corpo);
  const pedidoId = evento.cart?.src; // o id do pedido que você mandou em src
  // spark_payment_confirmed: marque paid só se ainda estiver pending (idempotência)
  return new Response("ok", { status: 200 });
}

No Bolt, a server function faz o mesmo: lê o texto bruto, calcula o HMAC, compara em tempo constante e só então interpreta o JSON.

O truque que liga tudo é o campo src. O valor que você manda em POST /payment_links é salvo no carrinho e volta em cart.src em todos os webhooks daquela compra. Mandando o id do pedido, o webhook sabe qual linha de orders atualizar, sem casar por e-mail ou valor. O src aceita letras, números e . _ - ~, até 255 caracteres, então um uuid passa sem ajuste.

Quais são as armadilhas mais comuns ao integrar pagamento no v0 e no Bolt?

Chave no front

É o erro mais caro. No v0, qualquer variável com NEXT_PUBLIC_ ou lida dentro de um arquivo com "use client" vai para o bundle do navegador. No Bolt, o mesmo vale para VITE_ e para qualquer .tsx do front. Com o token, alguém cria links, lê suas vendas e consulta seu saldo. A chave só existe em route handler, server action ou server function. Se vazou, regenere o token no painel na hora.

Preço vindo do navegador

Se a rota aceita price_cents do cliente, 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, no servidor.

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 com 422 porque o mínimo é R$ 5,00 (500). No cartão, cada parcela precisa ter pelo menos R$ 1,99: um produto de R$ 29,90 vai em até 15 parcelas pela conta, mas o limite é 12x, e um de R$ 10 não passa de 5x. Ajuste max_installments ao ticket.

Confirmar pelo redirect e não pelo webhook

Voltar à página de obrigado não prova pagamento: o Pix pode ser pago minutos depois no celular, o usuário pode fechar a aba, e qualquer um digita a URL de sucesso. A única fonte de verdade é spark_payment_confirmed chegando no webhook. Confie no evento, não no redirect.

Webhook sem HMAC ou sem idempotência

Uma URL pública que marca pedidos como pagos precisa validar X-HeroPay-Signature sobre o corpo bruto, senão qualquer um forja um "pago". E a retentativa automática pode entregar o mesmo evento mais de uma vez: marcar paid só se ainda estiver pending evita liberar em dobro.

Webhook apontando para o preview

No v0, o preview roda de verdade na Vercel Sandbox, mas a URL muda e deployments de preview na Vercel costumam ficar atrás de proteção de acesso, que bloqueia o POST do HeroPay. Registre o webhook na URL do domínio publicado. No Bolt, registre a URL da server function publicada, não a do editor.

Env var alterada e deploy antigo

Na Vercel, trocar uma variável não muda o deploy que já está no ar: vale só para o próximo. Trocou a chave do sandbox pela de produção? Publique de novo antes de testar.

Edge runtime no route handler

Se o v0 gerar export const runtime = "edge" no webhook, node:crypto pode não estar disponível. Use runtime = "nodejs" ou a Web Crypto API (crypto.subtle) para o HMAC.

Dá para cobrar no v0 ou no Bolt sem escrever código?

Dá. Se você só quer validar se alguém paga, pule o backend:

  1. No painel, crie um link de pagamento com nome, preço e métodos.
  2. No v0 ou no Bolt, peça: "Adicione um botão Comprar agora na página de preços que abre [URL do link] em nova aba."
  3. Acompanhe as vendas no painel.

O limite: o app não sabe quem pagou. Você libera acesso à mão ou, quando as vendas começarem, evolui para o fluxo com webhook acima. Para saber de onde veio cada venda, acrescente ?src=instagram (ou o nome da campanha) na URL do botão: o valor é salvo no carrinho e volta em cart.src nos webhooks daquela compra.

Quanto custa receber pagamento num app do v0 ou do Bolt?

MétodoHeroPayStripe BR (a opção nativa das duas ferramentas)
PixR$ 01,19%, só por convite
BoletoR$ 0R$ 3,45
Cartão3,49%, até 12x3,99% + R$ 0,39
MensalidadeR$ 0R$ 0

Verificado em set/2026. Fontes: heropay.tech/precos, stripe.com/br/pricing.

Em reais: 1.000 vendas de R$ 29,90 em Pix custam R$ 0 no HeroPay e R$ 355,81 na Stripe BR, quando o Pix está liberado na sua conta. 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 R$ 1,04 e a Stripe BR, R$ 1,58. 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.

Quando usar o pagamento nativo da ferramenta: se você vende em dólar para o mundo e quer zero configuração, a Stripe pelo Vercel Marketplace (no v0) ou a integração de Stripe do Bolt é o caminho mais curto. Se o seu cliente é brasileiro e paga em Pix, a conta muda para o HeroPay, com checkout que traz parcelamento, Apple Pay, Google Pay e recuperação de carrinho.

Perguntas frequentes

Como aceitar pagamento no v0 da Vercel?

Com um route handler do Next.js. Guarde o token do HeroPay em Settings > Environment Variables do projeto no v0 (que grava na Vercel), cole heropay.tech/llms.txt no chat e envie o prompt pronto do v0 desta página. O v0 cria app/api/checkout/route.ts, que chama POST /payment_links e devolve a URL de um checkout com Pix, boleto e cartão, e app/api/webhooks/heropay/route.ts, que valida a assinatura e marca o pedido como pago. Teste no sandbox, publique e troque a chave pela de produção.

Como integrar pagamento com Pix no Bolt?

Pelo backend do Bolt Cloud. Cadastre HEROPAY_API_KEY, HEROPAY_API_URL e HEROPAY_WEBHOOK_SECRET em Secrets (ícone de banco de dados > Secrets) e envie o prompt pronto do Bolt. Ele cria a server function create-checkout, que chama POST /payment_links com "pix" em payment_methods, e a server function heropay-webhook, que confirma o pagamento. O Pix vem com QR Code e copia e cola no checkout do HeroPay e custa R$ 0 por transação. Se o projeto usa Supabase, o mesmo prompt vira edge functions.

Onde colocar a chave de API no v0?

No menu do projeto ... > Settings > Environment Variables. As variáveis são do projeto, então todos os chats dele enxergam, e ficam criptografadas na Vercel. Leia com process.env.HEROPAY_API_KEY só em route handler, server action ou arquivo com import "server-only". Nunca use o prefixo NEXT_PUBLIC_ nem leia a chave em componente com "use client": tudo que vai para o navegador é público. Depois de trocar uma variável, publique de novo, porque o deploy anterior continua com o valor antigo.

Onde colocar a chave de API no Bolt?

No painel Secrets: abra o projeto, clique no ícone de banco de dados e em Secrets, preencha Name (HEROPAY_API_KEY) e Value. O Bolt também abre esse painel sozinho quando o código precisa de um segredo. A chave é lida só dentro de server function (ou edge function do Supabase). Nunca use variável com prefixo VITE_: o Vite embute essas variáveis no código do navegador. Se desconfiar de vazamento, gere um token novo no painel do HeroPay e atualize o secret.

O v0 e o Bolt aceitam Pix?

Nenhum dos dois processa pagamento sozinho: eles geram o código que conversa com um provedor. As opções nativas das duas ferramentas passam pela Stripe, e na Stripe BR o Pix é liberado só por convite (verificado em set/2026). Para aceitar Pix hoje sem depender de convite, o caminho é integrar um provedor brasileiro por API. Com o HeroPay, o Pix vem no link de pagamento, custa R$ 0 por transação e usa o mesmo fluxo que cartão e boleto.

Qual é melhor para um app com pagamento: v0 ou Bolt?

Depende de onde você quer o backend. O v0 é mais forte quando você quer um app Next.js padrão, hospedado na Vercel, com o código no GitHub e rotas de API que qualquer dev reconhece. O Bolt é mais forte quando você quer banco, autenticação, server functions e hospedagem num lugar só, sem configurar nada. Para o HeroPay, tanto faz: a integração é a mesma chamada POST /payment_links mais um webhook. Escolha pela ferramenta em que você já constrói.

Como testar o webhook antes de publicar?

No v0, o preview roda seu app de verdade na Vercel Sandbox, mas a URL de preview muda e costuma ter proteção de acesso, então o jeito mais simples é publicar e registrar o webhook no domínio publicado, ainda com a chave de sandbox. No Bolt, registre a URL pública da server function heropay-webhook. Para só inspecionar o payload, aponte o webhook para um serviço como webhook.site. Pague no checkout de teste e confira o evento nos logs.

Posso cobrar assinatura mensal no v0 ou no Bolt com o HeroPay?

Pode. Mande period: "monthly" (ou quarterly, semiannual, annual) no POST /payment_links e 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. Os eventos subscription_activate, subscription_update e subscription_cancel avisam o app.

Quanto custa receber pagamentos no v0 ou no Bolt com o HeroPay?

Pix R$ 0 e boleto R$ 0 por transação. Cartão custa 3,49% por transação aprovada, em até 12x. Não há mensalidade, ativação ou volume mínimo, e o sandbox é gratuito. Nem o v0 nem o Bolt cobram a mais por você chamar uma API externa: você paga seu plano da ferramenta, se tiver, e o uso de hospedagem de cada uma. Numa venda de R$ 97 no cartão, a tarifa do HeroPay fica em cerca de R$ 3,39; no Pix, R$ 0. Detalhes em preços.

Preciso saber programar para integrar o HeroPay no v0 ou no Bolt?

Não para começar. Os prompts desta página descrevem tabelas, rotas e regras de segurança em português, e a ferramenta escreve o código. Você copia o token para a área de segredos, cola o prompt, roda um curl para registrar o webhook e testa uma compra no sandbox. Se nem isso der agora, use a alternativa sem código: crie um link de pagamento no painel e peça um botão que abra esse link. Antes de atender clientes de verdade, peça a alguém para revisar a rota do webhook.

O HeroPay tem integração nativa no Vercel Marketplace ou no Bolt?

Ainda não. Hoje a opção nativa das duas ferramentas é a Stripe: no v0, pelo Vercel Marketplace; no Bolt, pela integração que cria as edge functions e registra o webhook sozinha. O HeroPay entra por API, com a sua conta e a sua chave. Com o llms.txt, a documentação e os prompts desta página, isso sai em minutos, e você fica com controle total do fluxo, do banco e dos eventos.

Posso usar o mesmo fluxo no Lovable, no Cursor ou no Claude?

Pode. O fluxo é sempre o mesmo: backend com a chave, POST /payment_links, webhook confirmando. No Lovable, a chave vai em Secrets e o código em edge function (guia do Lovable). No Claude Code e no Cursor, a regra do projeto guarda o contrato da API e a própria IA roda os curl de teste que você aprovar (Claude Code, Cursor). Claude, ChatGPT, Cursor, Lovable e outros leem o mesmo llms.txt. O MCP server do HeroPay está em desenvolvimento e não é necessário para nenhum desses fluxos.

Comece agora

Crie a conta sandbox, cadastre a chave no v0 ou no Bolt, cole o prompt e faça a primeira venda de teste em minutos. Sem fila de homologação: passou no sandbox, troque a chave e vá pro ar.

Conecte e cobre em minutos

Sandbox grátis, docs abertas e llms.txt para a sua ferramenta de IA.

Pix e boleto R$ 0 · cartão 3,49% em até 12x · saque sem tarifa