Para cobrar por um app, chat ou agente de IA no Brasil hoje, o padrão que funciona é combinar dois produtos: pacotes de créditos vendidos como pagamento único (o usuário compra 500 créditos, gasta, compra de novo) e uma assinatura de plano que devolve uma cota de créditos a cada ciclo. No HeroPay, cada pacote é um link de pagamento, o webhook spark_payment_confirmed credita o saldo do usuário no seu banco e o seu app debita a cada uso. Pix custa R$ 0 por transação, o que importa quando a margem já está apertada pelo custo de token. Cobrança por uso nativa (medir o consumo e faturar no fim do ciclo) o HeroPay ainda não tem, e esta página diz como contornar.
Criar conta sandbox Ler a documentação
O essencial em 60 segundos
- App de IA tem custo variável por uso (tokens de API do modelo). Assinatura "ilimitada" com preço fixo deixa o usuário pesado dar prejuízo.
- O padrão de mercado que resolve é crédito pré-pago: o usuário compra um pacote, o app debita a cada geração, mensagem ou tarefa, e o saldo nunca fica negativo.
- No HeroPay, cada pacote de créditos é um link de pagamento criado uma vez com
POST /payment_links; cada compra usa a mesma URL com?src=<id do pedido>. - Quem credita o saldo é o webhook
spark_payment_confirmed, assinado comX-HeroPay-Signature(HMAC SHA-256), deduplicado pelo id do pagamento. Estorno e chargeback chegam comorefundedechargeback_requeste debitam o saldo. - Assinatura de plano (
period: "monthly") em cartão, boleto ou Pix Automático; cada renovação paga disparaspark_payment_confirmede recarrega a cota do mês. - Pix R$ 0 por transação; cartão 3,49% por transação aprovada, em até 12x. Em mil pacotes de R$ 29,90 no Pix, o custo de gateway é R$ 0.
- O que não existe hoje: cobrança por uso nativa (metered billing), período de teste e recarga automática sem o comprador no checkout.
Assinatura ou créditos: como monetizar um chat ou agente de IA?
A dor em uma frase: você não sabe se cobra mensalidade (receita previsível, mas o usuário pesado dá prejuízo) ou créditos (custo sob controle, mas receita que oscila), e o provedor de pagamento que você escolhe define o que é possível.
Os três modelos que aparecem em apps de IA, e o que cada um pede do gateway:
| Modelo | Como funciona | Risco | O que precisa do pagamento |
|---|---|---|---|
| Assinatura com uso ilimitado | Preço fixo por mês | Usuário pesado custa mais do que paga | Recorrência |
| Assinatura com cota | Preço fixo com X créditos por ciclo | Usuário que estoura a cota fica travado | Recorrência + venda avulsa |
| Créditos pré-pagos | Pacotes comprados antes do uso | Receita menos previsível | Pagamento único, rápido e barato |
| Cobrança por uso (pós-paga) | Mede o consumo e fatura no fim do ciclo | Inadimplência depois do uso | Medição + fatura variável |
A feature que resolve: o HeroPay cobre as três primeiras linhas com o que já existe na API. Pacotes são links de pagamento unitários, a cota mensal é uma assinatura, e os dois conversam com o seu banco pelo mesmo webhook. A quarta linha, cobrança por uso pós-paga com fatura variável, não existe no HeroPay hoje.
Na prática, o combinado que mais protege a margem é assinatura com cota + pacote avulso para quem estoura. O usuário previsível paga o plano; o pesado compra mais créditos, e cada crédito vendido já tem o custo de token coberto.
A conta em reais (exemplo ilustrativo, troque pelos seus números): um plano de R$ 49,90 por mês "ilimitado", num app em que cada geração custa R$ 0,03 em tokens. Um usuário que faz 5.000 gerações no mês custa R$ 150 e paga R$ 49,90: prejuízo de R$ 100,10 nesse usuário. O mesmo plano com cota de 1.000 gerações custa no máximo R$ 30 em tokens e deixa R$ 19,90 de margem antes do gateway. Os 4.000 extras, vendidos em pacotes de 500 por R$ 29,90, viram R$ 239,20 de receita e R$ 120 de custo.
Quanto do preço do crédito vai para o gateway?
A dor em uma frase: crédito é produto de ticket baixo, e taxa fixa por transação come uma fatia enorme de uma venda de R$ 19,90, justamente onde o custo de token já levou metade.
Vender créditos significa muitas compras pequenas e repetidas. Um gateway que cobra R$ 0,80 ou R$ 1,99 por Pix, ou percentual mais fixo no cartão, transforma cada recarga em margem perdida. E como o custo do modelo costuma ser cobrado em dólar pelo provedor de IA, a margem ainda oscila com o câmbio.
A feature que resolve: Pix a R$ 0 por transação, sem convite e sem volume mínimo. Para o usuário que recompra toda semana, o checkout tem compra 1-click e Pix com QR Code na hora. Você empurra o Pix como método principal e deixa o cartão para quem precisa parcelar um pacote grande.
A conta em reais: 1.000 pacotes de R$ 29,90 por mês.
| 1.000 pacotes de R$ 29,90 | HeroPay | AbacatePay | Asaas | Stripe BR |
|---|---|---|---|---|
| Taxa por Pix | R$ 0 | R$ 0,80 | R$ 1,99 | 1,19% (só por convite) |
| Custo total no Pix | R$ 0 | R$ 800,00 | R$ 1.990,00 | R$ 355,81 |
| Custo total no cartão à vista | R$ 1.043,51 | R$ 1.646,50 | R$ 1.384,01 | R$ 1.583,01 |
Verificado em setembro/2026. Fontes: heropay.tech/precos, abacatepay.com e documentação pública da AbacatePay, asaas.com/precos-e-taxas (Asaas cobra R$ 0,99 por Pix nos 3 primeiros meses; cartão R$ 0,49 + 2,99% à vista), stripe.com/br/pricing.
A leitura honesta: como o cartão do HeroPay não tem parte fixa, no cartão à vista de R$ 29,90 ele também é o mais barato da tabela (3,49% da venda, R$ 1,04 por pacote). Isso muda com ticket maior: acima de R$ 98 por venda no cartão à vista, o Asaas (R$ 0,49 + 2,99%) passa a cobrar menos; num pacote de R$ 99,90, são R$ 3,48 no Asaas contra R$ 3,49 no HeroPay. Onde o HeroPay ganha com folga é no Pix, e em app de IA brasileiro o Pix tende a ser o método dominante de recarga. A decisão que mais protege a margem: dê um bônus de créditos no Pix (o checkout tem preço especial à vista no Pix).
Dá para cobrar por uso num app de IA?
A dor em uma frase: o jeito mais justo de cobrar IA é pelo que o usuário consome, mas faturar consumo no fim do mês exige medição, fatura variável e cobrança pós-paga, e poucos gateways no Brasil entregam isso pronto.
A resposta honesta: no HeroPay, cobrança por uso pós-paga nativa não existe hoje. Não há endpoint para reportar consumo medido nem fatura de valor variável por ciclo. Quem tem isso pronto: a Stripe tem cobrança por uso com medidores no Stripe Billing (docs.stripe.com) e a documentação da AbacatePay lista cobrança por uso nas assinaturas (verificado em setembro/2026). Se o seu modelo depende de fatura pós-paga, compare antes de escolher.
A feature que resolve hoje: crédito pré-pago é cobrança por uso com o pagamento na frente. O usuário compra, o app mede e debita, e quando o saldo acaba ele recompra. Para você, é até melhor que o pós-pago: o custo de token já está pago antes de acontecer, não existe inadimplência de consumo e não há fatura surpresa para o usuário contestar.
A conta em reais (ilustrativa): no pós-pago, um usuário que consome R$ 80 em tokens no mês e não paga a fatura é prejuízo de R$ 80, mais o custo de cobrança. No pré-pago, ele consumiu só o que comprou. Com mil usuários e 3% de inadimplência numa fatura média de R$ 80, o pós-pago perde R$ 2.400 por mês que o pré-pago nunca perde.
Como fica a arquitetura de créditos com a API do HeroPay?
A arquitetura tem cinco peças. Nenhuma exige recurso que não esteja na OpenAPI pública.
| Peça | Onde roda | O que faz | Endpoint / evento |
|---|---|---|---|
| Catálogo de pacotes | Seu banco | Guarda cada pacote (créditos, preço, URL do link) | POST /payment_links uma vez por pacote |
Rota comprar-creditos | Seu servidor | Cria um pedido pending e devolve a URL do pacote com ?src=<id do pedido> | nenhum (reusa o link) |
Rota heropay-webhook | Seu servidor, pública | Valida a assinatura e lança créditos no razão | spark_payment_confirmed, refunded, chargeback_request |
| Razão de créditos (ledger) | Seu banco | Uma linha por movimento: compra, uso, estorno, cota do plano | nenhum |
| Assinatura de plano | Link recorrente | Recarrega a cota a cada ciclo pago | period: "monthly", subscription_activate, subscription_cancel, POST /recurring_payment/cancel |
Passo 1: crie um link por pacote, uma vez só
curl -s -X POST https://api.beta.heropay.tech/payment_links \
-H "Authorization: Bearer $HEROPAY_API_KEY" \
-H "Accept: application/vnd.herospark.com; version=1" \
-H "Content-Type: application/json" \
-d '{
"payment_link": {
"name": "500 créditos",
"description": "Pacote de 500 créditos para gerar imagens",
"price_cents": 2990,
"max_installments": 1,
"absorbs_fees": true,
"payment_methods": ["pix", "credit_card"]
}
}'Salve data.id e data.offer.url na sua tabela credit_packs, junto com a quantidade de créditos. Repita para cada pacote (ex.: 500 por R$ 29,90, 2.000 por R$ 99,90). O mínimo por link é R$ 5,00 (500), e cada parcela no cartão precisa ter pelo menos R$ 1,99: pacote pequeno vai à vista.
Passo 2: cada compra reusa a URL com o id do pedido
Quando o usuário clica em "Comprar 500 créditos", seu servidor cria um pedido pending com user_id, pack_id e amount_cents, e devolve offer.url + "?src=" + pedido.id. O valor de src é salvo no carrinho e volta em cart.src em todos os webhooks daquela compra. É assim que o webhook sabe a quem creditar, sem casar por e-mail.
Passo 3: o webhook credita o saldo, uma vez só
Registre os gatilhos no sandbox, um por URL: o gatilho vai no caminho, e o handler sabe qual evento chegou sem depender do formato do envelope.
for trigger in spark_payment_confirmed refunded chargeback_request subscription_activate subscription_cancel; 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/heropay-webhook/$trigger\",\"request_method\":\"post\"}}"
doneE a lógica do handler, em TypeScript:
// POST /api/heropay-webhook/[gatilho]
// assinaturaValida é a mesma função de /solucoes/vibe-coding: o formato
// exato do valor de X-HeroPay-Signature está na documentação de webhooks.
export async function POST(req: Request, { params }: { params: { gatilho: string } }) {
const corpoBruto = await req.text();
const assinatura = req.headers.get("X-HeroPay-Signature");
if (!assinaturaValida(corpoBruto, assinatura, CODIFICACAO_DA_DOC)) {
return new Response("assinatura inválida", { status: 401 });
}
const evento = JSON.parse(corpoBruto);
const gatilho = params.gatilho; // veio do caminho registrado em POST /webhook
const pagamentoId = evento.payment?.id; // id do pagamento, chave de idempotência
const pedido = await db.orders.find(evento.cart?.src);
if (!pedido) return new Response("ok"); // evento de outra origem: registra e ignora
if (gatilho === "spark_payment_confirmed") {
// índice único (payment_id, kind) no ledger: o retry não credita em dobro
await db.creditLedger.insertIgnoreDuplicate({
user_id: pedido.user_id, payment_id: pagamentoId, kind: "purchase",
amount: pedido.credits,
});
await db.orders.markPaid(pedido.id);
}
if (gatilho === "refunded" || gatilho === "chargeback_request") {
await db.creditLedger.insertIgnoreDuplicate({
user_id: pedido.user_id, payment_id: pagamentoId, kind: "reversal",
amount: -pedido.credits,
});
}
return new Response("ok");
}O saldo do usuário é a soma do razão. Cada uso do app lança uma linha negativa, dentro de uma transação que confere se o saldo cobre o uso antes de chamar o modelo. Estorno depois que o usuário já gastou deixa o saldo negativo: bloqueie novos usos até ele recomprar. Para devolver o dinheiro de um pacote pela API, o endpoint é POST /refund com payment_id (estorno na documentação).
Passo 4: a assinatura recarrega a cota a cada ciclo
Crie o plano como link recorrente (period: "monthly", com cartão, boleto e Pix; no Pix, o assinante autoriza o Pix Automático uma vez). O subscription_activate marca o plano ativo; cada renovação paga dispara spark_payment_confirmed, e o handler lança a cota do mês no razão (kind: "plan_quota"). No subscription_cancel, o plano deixa de recarregar; o saldo comprado em pacote continua do usuário. Para o cancelamento iniciado dentro do seu app, use POST /recurring_payment/cancel com o recurring_payment_id.
Passo 5: acompanhe receita e recusas
GET /sales/unitary lista as vendas de pacotes e GET /sales/recurring as de assinatura, com filtro por data, status, método e comprador. Os relatórios GET /reports/purchase/subscriptions/status_count e GET /reports/purchase/refused/reasons_count mostram quantas assinaturas estão ativas e por que o cartão foi recusado.
Mini-case: um chat de IA que vende créditos e plano
Fluxo ilustrativo, sem cliente real por trás. Um dev lança um chat que revisa contratos com IA. Cada revisão consome 10 créditos.
- Lançamento. Ele cria três links no sandbox: 100 créditos por R$ 19,90, 500 por R$ 79,90 e o plano Pro de R$ 49,90 por mês com 400 créditos. Guarda as URLs na tabela
credit_packs. - Primeira compra. Uma advogada compra 100 créditos no Pix. O webhook chega com
cart.srcigual ao id do pedido, o handler lança +100 no razão e o chat libera dez revisões. Ela pagou R$ 19,90 e o gateway ficou com R$ 0. - Retry. O mesmo evento chega de novo por causa do retry automático. O índice único
(payment_id, kind)descarta a segunda linha. Nada de crédito em dobro. - Assinatura. No mês seguinte, ela assina o Pro no Pix Automático. A cada ciclo pago, +400 créditos. Quando estoura a cota antes do fim do mês, o chat oferece o pacote avulso, já com a URL e o
srcprontos. - Estorno. Um cliente pede estorno de um pacote que não usou. O dev chama
POST /refund; orefundedchega e o handler lança −100 no razão.
O que um app de IA usa do HeroPay
| Necessidade | Recurso do HeroPay | Onde ler |
|---|---|---|
| Vender pacote de créditos | Link de pagamento unitário, reusado com ?src= | /link-de-pagamento |
| Recarga barata e rápida | Pix R$ 0, compra 1-click no checkout | /pix, /checkout |
| Plano com cota mensal | Assinatura em cartão, boleto ou Pix Automático | /assinaturas, /pix-automatico |
| Creditar saldo com segurança | Webhook assinado (HMAC), retry, cart.src | /webhooks |
| Devolver dinheiro | POST /refund e evento refunded | docs.heropay.tech |
| Vender para fora do Brasil | Cartão internacional multimoeda no checkout | /pagamentos-internacionais |
| Cobrar dentro da conversa | O agente gera o link e manda no chat ou no WhatsApp | /integracoes/whatsapp, /ai |
| Medir e faturar consumo pós-pago | Não existe hoje; use créditos pré-pagos | Seção "Dá para cobrar por uso" acima |
Perguntas frequentes
Qual o melhor jeito de monetizar um app de IA?
Para a maioria dos apps de IA com custo de token relevante, o combinado mais seguro é assinatura com cota de créditos e pacotes avulsos para quem estoura. A assinatura dá receita previsível; a cota impede que o usuário pesado dê prejuízo; o pacote avulso transforma uso extra em receita com o custo já coberto. Assinatura ilimitada funciona quando o custo por uso é muito baixo em relação ao preço. Cobrança por uso pós-paga é a mais justa, mas exige medição, fatura variável e aceita risco de inadimplência. No HeroPay, os três primeiros modelos rodam com link de pagamento, assinatura e webhook.
O HeroPay tem cobrança por uso (usage-based billing)?
Não tem hoje. A API do HeroPay não tem endpoint para reportar consumo medido nem fatura de valor variável por ciclo; as assinaturas da v1 cobram valor fixo por período. O padrão que funciona no lugar é o crédito pré-pago: o usuário compra um pacote, o seu app mede e debita cada uso, e ele recompra quando o saldo acaba. Na prática, é cobrança por uso com o pagamento na frente, sem inadimplência de consumo. Se o seu modelo exige fatura pós-paga, a Stripe tem medidores no Stripe Billing e a AbacatePay lista cobrança por uso na documentação (verificado em setembro/2026).
Como o webhook credita os créditos do usuário?
Você cria o pedido no seu banco e manda o usuário para a URL do pacote com ?src=<id do pedido>. Quando o pagamento é confirmado, o HeroPay envia spark_payment_confirmed para a sua rota, assinado no header X-HeroPay-Signature (HMAC SHA-256 do corpo bruto). A rota valida a assinatura, lê cart.src para achar o pedido e lança os créditos numa tabela de razão com índice único por id do pagamento. Como o retry automático pode repetir o evento, o índice garante que o crédito entra uma vez só. Em refunded ou chargeback_request, a rota lança o débito correspondente.
Preciso criar um link de pagamento por compra?
Não. Crie um link por pacote, uma vez só, com POST /payment_links, e guarde a URL. A cada compra, acrescente ?src= com o id do pedido. O valor volta em cart.src em todos os webhooks daquela compra, então você identifica quem comprou sem criar um link novo por transação. Criar um link por compra também funciona (mande src no corpo e a URL já volta com o parâmetro), e faz sentido quando o preço muda por usuário, como um pacote personalizado. Para catálogo fixo, um link por pacote é mais simples e gera menos chamadas.
Quanto custa vender créditos com o HeroPay?
Pix R$ 0 e boleto R$ 0 por transação; cartão 3,49% por transação aprovada, em até 12x. Sem mensalidade, ativação nem mínimo. Mil pacotes de R$ 29,90 no Pix custam R$ 0 de gateway; os mesmos mil no cartão à vista custam R$ 1.043,51, menos que AbacatePay, Asaas e Stripe nesse ticket, porque o cartão não tem parte fixa. Acima de R$ 98 por venda no cartão à vista, o Asaas cobra menos. Mesmo assim, a recomendação é empurrar o Pix na recarga (com bônus de créditos, por exemplo), porque ele sai a R$ 0. Veja preços.
Qual o valor mínimo de um pacote de créditos?
R$ 5,00, ou 500 em price_cents. Abaixo disso a API responde 422. No cartão, cada parcela precisa ter pelo menos R$ 1,99, então pacote pequeno vai à vista (max_installments: 1). Se o seu app cobraria centavos por uso, agrupe em pacotes: 100 créditos por R$ 9,90, por exemplo, pago no Pix a R$ 0 de taxa. No cartão, a taxa é só percentual (3,49%, R$ 0,35 num pacote de R$ 9,90), então pacote pequeno não perde margem para parte fixa; o limite prático é a parcela mínima de R$ 1,99.
Dá para recarregar créditos automaticamente quando o saldo acaba?
Não do jeito "cobrar o cartão salvo sem o usuário", porque a API v1 não tem cobrança avulsa num cartão guardado fora do checkout. O que funciona hoje: avisar quando o saldo cai abaixo de um limite e abrir a URL do pacote com um clique; no checkout, a compra 1-click e o Pix com QR Code deixam a recompra rápida. Para receita previsível, a assinatura com cota mensal é a recarga automática de fato: cada ciclo pago recarrega o saldo.
Meu agente de IA pode cobrar o usuário dentro da conversa?
Pode gerar a cobrança, não pagar por ele. O seu backend cria o pedido e devolve a URL do pacote com src; o agente manda essa URL na conversa, no seu app, no WhatsApp ou no Telegram. O usuário paga no checkout do HeroPay e o webhook credita o saldo, e o agente vê o saldo atualizado no seu banco. Para você mesmo criar os links em português, cole heropay.tech/llms.txt no Claude, ChatGPT, Cursor, Lovable e outros e peça a chamada a POST /payment_links; a chave da API fica sempre no seu servidor, nunca com o agente que conversa com o usuário. Veja /ai.
Como lidar com estorno de créditos já usados?
Defina a regra antes e aplique no webhook. Quando chega refunded ou chargeback_request, lance no razão o débito dos créditos daquele pacote. Se o usuário já gastou, o saldo fica negativo e o app bloqueia novos usos até ele recomprar. Para estorno que você mesmo inicia, o endpoint é POST /refund com o payment_id, e o evento refunded segue o mesmo caminho. Deixe a política de reembolso de créditos clara nos termos do app. O antifraude e a validação de assinatura do webhook reduzem o risco de alguém creditar saldo sem pagar.
Posso vender o app de IA para clientes fora do Brasil?
Pode receber cartão internacional: o checkout do HeroPay aceita pagamento internacional multimoeda, configurado por oferta. O resto do fluxo (link, webhook, razão de créditos) é o mesmo. O que muda é a sua conta: custo de token em dólar e receita em outras moedas mexem na margem de formas diferentes, e a precificação por país é decisão sua. Confira limites, moedas e prazos em pagamentos internacionais antes de abrir para fora.
Comece agora
Crie a conta sandbox, cadastre dois pacotes e um plano, registre o webhook e faça a primeira compra de créditos de teste hoje. Quando o razão fechar certo no sandbox, troque a chave e vá pro ar.
