A HeroPay é uma API de pagamento REST para o Brasil: você cria um link de pagamento com Pix, cartão em até 12x e boleto com uma chamada POST /payment_links, recebe a confirmação por webhook assinado e consulta saldo, saques, estornos e relatórios pelos mesmos endpoints. Autenticação por Bearer JWT, sandbox gratuito idêntico à produção, referência OpenAPI pública e exemplos em 18 linguagens. Pix e boleto custam R$ 0 por transação.
Criar conta sandbox Ler a documentação
O essencial em 60 segundos
- A HeroPay é uma API de pagamentos REST com JSON, base
https://api.heropay.techem produção ehttps://api.beta.heropay.techno sandbox. - Toda requisição leva dois headers:
Authorization: Bearer <seu-jwt>eAccept: application/vnd.herospark.com; version=1. - Uma chamada
POST /payment_linksdevolve uma URL de checkout pronta com Pix, cartão (até 12x) e boleto, avulsa ou recorrente. - Pix R$ 0 e boleto R$ 0 por transação; cartão 3,49% por transação aprovada. Sem mensalidade, sem ativação, sem mínimo, sem tarifa de saque (ver preços).
- O sandbox é gratuito, não tem fila de homologação e roda o mesmo contrato da produção: para ir ao ar você troca a chave.
- Webhooks assinados com HMAC e retentativa automática avisam pagamento confirmado, Pix gerado, boleto emitido, recusa, estorno, chargeback e ciclo de assinatura.
- Integração por IA: cole
heropay.tech/llms.txtno Claude, ChatGPT, Cursor, Lovable e outros e a ferramenta escreve a integração a partir da documentação aberta. O MCP server oficial está em desenvolvimento.
Como integrar uma API de pagamento em 5 minutos?
Três passos: pegue a chave, crie o link, escute o webhook. Nada de contrato, nada de homologação.
1. Pegue sua chave no sandbox
Crie a conta em app.heropay.tech, abra a seção de API nas configurações e copie o token JWT. Guarde em variável de ambiente, nunca no front-end:
export HEROPAY_API_URL="https://api.beta.heropay.tech" # sandbox
export HEROPAY_JWT_TOKEN="seu-jwt-do-sandbox"2. Crie seu primeiro link de pagamento
curl -X POST "$HEROPAY_API_URL/payment_links" \
-H "Authorization: Bearer $HEROPAY_JWT_TOKEN" \
-H "Accept: application/vnd.herospark.com; version=1" \
-H "Content-Type: application/json" \
-d '{
"payment_link": {
"name": "Plano Pro",
"description": "Acesso ao Plano Pro",
"price_cents": 9700,
"absorbs_fees": true,
"max_installments": 12,
"payment_methods": ["pix", "credit_card", "bank_slip"],
"src": "lancamento-setembro"
}
}'Resposta 201 Created:
{
"message": "Payment link created successfully",
"data": {
"id": 136,
"name": "Plano Pro",
"description": "Acesso ao Plano Pro",
"price_cents": 9700,
"absorbs_fees": true,
"max_installments": 12,
"period": "unitary",
"frequency_type": "unlimited",
"frequency_limit": null,
"overdue_type": "none",
"overdue_limit": null,
"public_id": "fc280e25-7cbd-446f-b34f-5b8824bb5124",
"offer": {
"id": 6094,
"kind": "payment_link",
"url": "https://pay.beta.herospark.com/fc280e25-7cbd-446f-b34f-5b8824bb5124-6094?src=lancamento-setembro",
"accepted_payment_methods": ["pix", "credit_card", "bank_slip"]
},
"created_at": "2026-09-23T10:07:01.929-03:00",
"updated_at": "2026-09-23T10:07:01.929-03:00"
}
}O campo data.offer.url é o checkout. Mande por WhatsApp, redirecione do seu app ou coloque no botão da landing. Valores sempre em centavos (9700 = R$ 97,00).
3. Escute o webhook e libere o acesso
curl -X POST "$HEROPAY_API_URL/webhook" \
-H "Authorization: Bearer $HEROPAY_JWT_TOKEN" \
-H "Accept: application/vnd.herospark.com; version=1" \
-H "Content-Type: application/json" \
-d '{
"webhook": {
"trigger": "spark_payment_confirmed",
"webhook_url": "https://seuapp.com/webhooks/heropay",
"request_method": "post"
}
}'Quando o comprador paga, sua URL recebe o evento spark_payment_confirmed. Confie no evento, não no polling. Pronto: você tem cobrança, checkout e confirmação. O mesmo código roda em produção trocando a chave.
Mapa de funções da API
A API v1 da HeroPay tem mais de 70 endpoints organizados nos grupos abaixo. Cada grupo tem página própria na referência da API.
Link de pagamento
O que faz: cria, lista, consulta e exclui links de checkout com Pix, cartão e boleto, em pagamento único ou recorrente. Aceita parcelamento de 1 a 12x (parcela mínima de R$ 1,99), valor mínimo de R$ 5,00, vendas internacionais multi-moeda (enable_international_sales, só em link avulso) e rastreamento de origem (src) que volta em cart.src em todo webhook. Endpoint principal: POST /payment_links · também GET /payment_links (paginado com page e items), GET /payment_links/{id}, DELETE /payment_links/{id}. Caso de uso: o SaaS gera um link por plano, o infoprodutor gera um link por campanha com src=instagram e sabe de onde veio cada venda. Docs: Links de pagamento · Criar link · Pagamento internacional · Página do produto: /link-de-pagamento
Assinaturas e pagamentos recorrentes
O que faz: transforma o link em assinatura ao enviar period (monthly, quarterly, semiannual, annual), com renovação ilimitada (frequency_type: unlimited) ou por número de ciclos (limited + frequency_limit). A cobrança de cada ciclo e o reprocessamento de falhas são automáticos; o cancelamento é por API. Endpoint principal: POST /payment_links com period · POST /recurring_payment/cancel (com recurring_payment_id) · GET /sales/recurring. Caso de uso: micro-SaaS com plano mensal e anual; mentoria de 12 meses que encerra sozinha no último ciclo. Docs: Modelos de pagamento · Pagamentos recorrentes · Página do produto: /assinaturas
Checkout
O que faz: todo link de pagamento abre o checkout HeroPay hospedado, com Pix, cartão em até 12x, boleto, Apple Pay e Google Pay, compra 1-click, 2 cartões e Parcelamento Inteligente. Você não mantém formulário de cartão nem escopo de PCI no seu front. Endpoint principal: a URL em data.offer.url do POST /payment_links. Caso de uso: colocar cobrança num app feito no Lovable sem construir tela de pagamento. Docs: Links de pagamento · Página do produto: /checkout
Pix (conta e chave)
O que faz: cadastra e lista as chaves Pix de recebimento (e-mail, telefone, CPF/CNPJ ou aleatória) e define a chave padrão para saques. Toda chave precisa pertencer ao mesmo CPF/CNPJ do titular da conta. A cobrança Pix para o comprador nasce do link de pagamento (payment_methods: ["pix"]), com QR Code e copia e cola no checkout, à vista ou com parcelamento via Pix. Endpoint principal: POST /financial/pix_accounts · GET /financial/pix_accounts · POST /financial/pix_accounts/{id}/set_as_default. Caso de uso: onboarding de um vendedor que cadastra a chave Pix no seu painel e já sai sacando. Docs: Chave Pix · API Pix · Página do produto: /pix
Lista de vendas e transações
O que faz: busca vendas avulsas e recorrentes com filtros e lista transações por status (paga, pendente, recusada, cancelada). Separa compra (a intenção do cliente) de transação (cada tentativa de cobrança), o que evita contar venda em dobro. Endpoint principal: GET /sales/unitary · GET /sales/recurring · GET /transactions/by_status. Caso de uso: conciliar as vendas do dia com seu banco de dados; mostrar histórico de cobranças de um assinante. Docs: Transações vs compras · Lista de vendas
Saldo
O que faz: devolve saldo disponível e a receber (em centavos e formatado), valor disponível para saque, valor antecipável e se a conta permite antecipação. Endpoint principal: GET /financial/balance. Caso de uso: exibir "você tem R$ X para sacar" dentro do seu produto. Docs: Saldo
Saques
O que faz: solicita saque do saldo disponível para uma chave Pix cadastrada e lista o histórico de saques. Endpoint principal: POST /financial/withdrawals (com amount_cents e pix_account_id) · GET /financial/withdrawals. Caso de uso: marketplace ou plataforma que automatiza o repasse semanal do vendedor. Docs: Saques e antecipação · API de saques · Página do produto: /saques-e-antecipacao
Simulação de antecipação
O que faz: simula quanto das vendas no cartão pode ser antecipado e com qual tarifa, antes de você pedir o dinheiro. A resposta traz o valor máximo antecipável e as taxas aplicadas naquela operação. Endpoint principal: GET /financial/anticipation_simulation (com amount_cents). Caso de uso: mostrar ao vendedor o custo exato de antecipar antes de ele confirmar. Docs: Simulação de antecipação
Estorno
O que faz: solicita o estorno de um pagamento pelo ID e devolve valores, taxas, data limite e status do estorno. Endpoint principal: POST /refund (com refund.payment_id). Caso de uso: botão "reembolsar" no seu painel de suporte, sem abrir outro sistema. Docs: Estorno de pagamento
Webhooks
O que faz: cadastra, lista, ativa, desativa e remove webhooks por gatilho. Cada evento chega como POST JSON assinado com HMAC e com retentativa automática se seu endpoint falhar. São 9 gatilhos: spark_payment_confirmed, spark_payment_boleto_created, payment_pix_created, payment_credit_cart_refused, refunded, chargeback_request, subscription_activate, subscription_update e subscription_cancel. Endpoint principal: POST /webhook · GET /webhook · PUT /webhook/{id}/enable · PUT /webhook/{id}/disable · DELETE /webhook/{id}. Caso de uso: liberar acesso quando o pagamento confirma, suspender quando a assinatura cancela, alertar o time em chargeback. Docs: Webhooks · API de webhooks · Página do produto: /webhooks
Relatórios de transações
O que faz: 30 endpoints prontos de analytics financeiro, sem você montar ETL.
- Pagas (
/reports/transaction/paid/*): receita bruta, receita líquida, líquida mensal, líquido após taxas, contagem de transações, transações por método, distribuição por método de pagamento, último pagamento, receita por oferta, mais vendidos, recibo fiscal e relatório completo. - Pendentes (
/reports/transaction/pending/*): valor total pendente, pendentes por oferta, transações expirando e relatório completo. - Reembolsadas (
/reports/transaction/refunded/*): valor de estornos e chargebacks, estornos mensais, taxas de chargeback, taxas não reembolsáveis, último estorno, contagem por status, ofertas e produtos mais reembolsados e relatório completo. - Resumos (
/reports/transaction/summary/*): pagas, abertas, reembolsadas, reembolsadas e chargebacks. - Jornada e funil de conversão:
GET /reports/transaction/journey.
Endpoint principal: GET /reports/transaction/paid/net_value. Caso de uso: dashboard de receita líquida no seu admin; boletos prestes a vencer para disparar lembrete. Docs: Relatórios de transações
Relatórios de compras
O que faz: 23 endpoints de análise de negócio.
- Recorrência e assinaturas (
/reports/purchase/subscriptions/*): receita bruta, líquida e após taxas, receita por oferta, contagem por status, vendas mensais, última venda, mais vendidos e relatório completo. - Estratégia de vendas (
/reports/purchase/sales_strategy/*): receita bruta, líquida e após taxas, últimas vendas, contagem mensal, contagem por modalidade, receita por oferta, mais vendidos e relatório completo. - Recusadas com motivo (
/reports/purchase/refused/*): vendas recusadas e contagem de motivos de recusa. - Resumos (
/reports/purchase/summary): geral, de assinaturas e de estratégia de vendas.
Endpoint principal: GET /reports/purchase/refused/reasons_count. Caso de uso: descobrir que a maior causa de recusa é limite e ligar o parcelamento; medir churn de assinatura por mês. Docs: Relatórios de compras
Carrinhos abandonados
O que faz: lista, por período, os checkouts em que o comprador preencheu os dados de contato e não pagou. Cada acesso ao link cria um carrinho; uma mesma sessão pode ter várias tentativas. Endpoint principal: GET /reports/tracking/abandoned_carts (com start_date e end_date). Caso de uso: puxar os abandonos da última hora e disparar recuperação pelo seu CRM. Docs: Carrinhos · Obter carrinhos abandonados
O que a API v1 ainda não tem
Honestidade de dev para dev: split de pagamento não tem endpoint público na v1 (veja o status em /split); não há endpoint para criar uma cobrança Pix avulsa fora do link de pagamento (o Pix sempre sai pelo checkout); e não há header Idempotency-Key. Quando isso mudar, vai estar no changelog da documentação.
Sandbox e produção: o que muda?
Só a chave. O sandbox roda o mesmo contrato, os mesmos endpoints e os mesmos webhooks da produção, é gratuito e não passa por homologação.
| Sandbox | Produção | |
|---|---|---|
| URL base | https://api.beta.heropay.tech | https://api.heropay.tech |
| Chave | JWT da conta sandbox | JWT da conta de produção |
| Dinheiro real | Não | Sim |
| Homologação | Não precisa | Não precisa |
| Custo | R$ 0 | Pix R$ 0 · boleto R$ 0 · cartão 3,49% (preços) |
Deixe a URL base e o token em variáveis de ambiente. Deploy em produção vira troca de duas variáveis, não um projeto.
Como funciona a autenticação da API?
Bearer JWT em todas as requisições. O token é gerado no painel app.heropay.tech, é escopado à sua conta (não enxerga dados de outra), não expira e pode ser regenerado a qualquer momento se vazar.
POST /payment_links HTTP/1.1
Host: api.heropay.tech
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Accept: application/vnd.herospark.com; version=1
Content-Type: application/jsonToken ausente ou inválido responde 401 Unauthorized. Regra de ouro: o token vive no servidor. Nunca em código de cliente, app mobile ou repositório público.
Como funciona o versionamento?
Pelo header Accept: application/vnd.herospark.com; version=1. A versão atual é a 1, estável e recomendada. Se você não mandar o header, a API usa a versão mais recente disponível, o que é ótimo para testar e perigoso em produção: fixe version=1 e sua integração não muda sozinha. Quando sair uma versão nova, ela vem com documentação das mudanças, guia de migração e período de transição. Detalhes em Versionamento.
Como funcionam os webhooks assinados?
Você cadastra uma URL pública por gatilho com POST /webhook. A cada evento, a HeroPay envia um POST JSON com assinatura HMAC do corpo; você recalcula com o segredo do webhook e descarta o que não bater. Se seu endpoint não responder 2xx, o envio é retentado automaticamente.
A assinatura vem no header X-HeroPay-Signature: um HMAC SHA-256 do corpo bruto da requisição, calculado com o segredo do seu webhook. O exemplo compara a assinatura recebida com o HMAC em hexadecimal e em base64, para o seu código não depender da codificação; detalhes em webhooks.
import crypto from "node:crypto";
// Express com body cru (express.raw({ type: "application/json" }))
app.post("/webhooks/heropay", (req, res) => {
const recebida = req.get("X-HeroPay-Signature") || "";
const mac = crypto
.createHmac("sha256", process.env.HEROPAY_WEBHOOK_SECRET)
.update(req.body)
.digest();
// aceita hexadecimal ou base64; comparação em tempo constante
const valida = [mac.toString("hex"), mac.toString("base64")].some(
(esperada) =>
recebida.length === esperada.length &&
crypto.timingSafeEqual(Buffer.from(recebida), Buffer.from(esperada))
);
if (!valida) {
return res.sendStatus(401);
}
const evento = JSON.parse(req.body);
// deduplique antes de agir: o mesmo evento pode chegar mais de uma vez
res.sendStatus(200);
});O payload segue um template padrão com buyer, payment, offer, product, cart (com cart.src, a origem que você mandou no link), subscription, installments e payment_methods (dados de Pix, boleto e cartão; em recusa, o motivo da operadora vem em payment_methods.credit_card.refused_message). Atenção à grafia do gatilho de recusa: payment_credit_cart_refused, com cart.
| Gatilho | Quando dispara |
|---|---|
spark_payment_confirmed | Pagamento confirmado (compra ou mensalidade) |
payment_pix_created | Pix gerado no checkout |
spark_payment_boleto_created | Boleto emitido |
payment_credit_cart_refused | Cartão recusado (compra ou mensalidade) |
refunded | Você estornou a compra |
chargeback_request | Comprador abriu chargeback na operadora |
subscription_activate | Assinatura ativada no primeiro pagamento |
subscription_update | Mudança de status ou novo pagamento da assinatura |
subscription_cancel | Assinatura cancelada (por cliente, vendedor, estorno, chargeback ou atraso) |
Quais SDKs e linguagens a HeroPay suporta?
A referência da API tem exemplos prontos para copiar em 18 linguagens: cURL, Python, Node.js, JavaScript, Ruby, PHP, Go, Java, C#, C, Objective-C, Swift, Kotlin, Dart, Rust, OCaml, R e PowerShell. A especificação OpenAPI é pública: gere seu próprio cliente com qualquer gerador OpenAPI.
SDKs oficiais estão em desenvolvimento, ainda sem data de publicação. Até lá, qualquer cliente HTTP resolve: é REST com JSON e dois headers, e os exemplos da documentação cobrem as 18 linguagens acima.
Como integrar a HeroPay com IA?
A HeroPay foi desenhada para ser integrada por IA. Duas portas de entrada:
llms.txt + documentação aberta. O heropay.tech/llms.txt resume a HeroPay para IAs e aponta para a referência da API em docs.heropay.tech. Cole no Claude, ChatGPT, Cursor, Lovable e outros e peça em português: "integra a HeroPay no meu app usando https://heropay.tech/llms.txt e https://docs.heropay.tech: um botão que cria um link de R$ 97 com Pix e cartão em 12x e uma rota que valida o webhook". A ferramenta escreve o código que chama a API REST, com os endpoints e headers da documentação.
API REST direta. O mesmo curl do início desta página é o que a IA vai escrever. Peça para ela rodar a chamada no sandbox antes de colocar no seu código e confira a resposta.
MCP server. O MCP server oficial da HeroPay está em desenvolvimento. Enquanto isso, o llms.txt entrega o mesmo resultado no desenvolvimento: a IA lê a referência e escreve a integração. Veja a página de IA.
Guias passo a passo por ferramenta em /integracoes.
Perguntas frequentes de desenvolvedores
A API da HeroPay tem limite de requisições (rate limit)?
A v1 não publica um limite numérico por endpoint hoje. Isso não é convite para martelar a API: construa como se houvesse limite. Use webhooks em vez de polling para saber se um pagamento confirmou, pagine listagens com page e items, faça cache de relatórios que não mudam a cada segundo e, ao receber erro 5xx ou 429, repita com backoff exponencial e jitter. Se o seu caso exige volume alto de leitura (dashboards em tempo real para milhares de contas, por exemplo), fale com a gente pela comunidade antes de ir ao ar, para dimensionarmos juntos.
A API é idempotente? Existe Idempotency-Key?
Não existe header Idempotency-Key na v1. GET e DELETE são seguros para repetir; POST /payment_links não é: duas chamadas iguais criam dois links. Para não duplicar, grave o id retornado antes de repetir a chamada e, em caso de timeout, consulte GET /payment_links antes de criar de novo. Para POST /refund e POST /financial/withdrawals, nunca repita às cegas: confira o status do estorno ou a lista de saques primeiro. No lado dos webhooks, deduplique por ID do pagamento mais gatilho, porque a retentativa pode entregar o mesmo evento mais de uma vez.
Como testar webhook no ambiente local?
Exponha seu localhost com um túnel (ngrok, cloudflared ou similar) e cadastre a URL pública gerada com POST /webhook no sandbox. Para só inspecionar o payload sem escrever código, aponte o webhook para um serviço como webhook.site. Crie um link no sandbox, pague pelo checkout de teste e veja o evento chegar. Use PUT /webhook/{id}/disable para pausar o disparo sem perder a configuração e enable para religar. Como o sandbox é idêntico à produção, o payload que você testa é o mesmo que vai receber no ar.
Quais são os erros mais comuns ao integrar?
Os campeões: 401 por token ausente, com espaço a mais ou sem o prefixo Bearer; esquecer o header Accept e pegar a versão mais recente em vez da version=1; mandar valor em reais em vez de centavos (97 vira R$ 0,97 e cai abaixo do mínimo de R$ 5,00, gerando 422); pedir 12x num valor em que a parcela fica abaixo de R$ 1,99; mandar frequency_type: "limited" sem frequency_limit; usar caracteres fora de letras, números e . _ - ~ no src; e cadastrar chave Pix de outro CPF/CNPJ. 404 indica recurso inexistente ou de outra conta.
Como é o formato de valores, datas e paginação?
Dinheiro é sempre inteiro em centavos (price_cents: 9700 = R$ 97,00), sem ponto flutuante, o que elimina erro de arredondamento. Algumas respostas trazem também o valor formatado em reais para exibição. Datas vêm em ISO 8601 com fuso (2026-09-23T10:07:01.929-03:00) e relatórios filtram por start_date e end_date. Listagens são paginadas: links de pagamento usam page e items e devolvem os headers X-Total-Count, X-Current-Page, X-Total-Pages e X-Page-Items; webhooks usam page e per_page.
Preciso de homologação ou aprovação para ir para produção?
Não. O sandbox é gratuito, não tem fila de homologação e roda o mesmo contrato da produção. Você desenvolve, testa o fluxo inteiro (link, checkout, webhook, estorno) e, quando estiver pronto, troca a chave e a URL base para produção. Não existe reunião comercial nem formulário de aprovação da integração no meio do caminho. Crie a conta em app.heropay.tech e faça a primeira chamada hoje.
Quanto custa usar a API de pagamento da HeroPay?
A API não cobra por chamada. Você paga por transação aprovada: Pix R$ 0, boleto R$ 0 e cartão 3,49%, com parcelamento em até 12x. Sem mensalidade, sem taxa de ativação e sem volume mínimo. Numa venda de R$ 97 no cartão, a tarifa fica em R$ 3,39; no Pix, R$ 0. Você escolhe por link se absorve os juros do parcelamento (absorbs_fees: true) ou repassa ao comprador. Tabela completa e comparação com outros gateways em /precos.
Dá para cobrar assinatura recorrente pela API?
Sim. Envie period no POST /payment_links (monthly, quarterly, semiannual ou annual) e o link vira assinatura. Com frequency_type: "unlimited" a renovação segue até o cancelamento; com "limited" e frequency_limit: 12, encerra sozinha após 12 cobranças. A HeroPay cobra cada ciclo e reprocessa falhas automaticamente; você acompanha tudo pelos gatilhos subscription_activate, subscription_update e subscription_cancel e cancela com POST /recurring_payment/cancel. Pagamento internacional não se aplica a links recorrentes. Mais em /assinaturas.
A HeroPay tem API Pix?
Tem, em duas frentes. Para receber, o Pix sai pelo link de pagamento: inclua "pix" em payment_methods e o checkout gera QR Code e copia e cola, à vista ou com parcelamento via Pix, com confirmação pelo webhook spark_payment_confirmed (e payment_pix_created quando o Pix é gerado). Para movimentar, os endpoints /financial/pix_accounts cadastram e listam chaves Pix do titular e /financial/withdrawals saca o saldo para a chave escolhida. O que não existe na v1 é criar uma cobrança Pix solta, fora do checkout. Pix custa R$ 0 por transação. Veja /pix.
Onde fica o dinheiro e como eu saco pela API?
As vendas entram no saldo da sua conta HeroPay. GET /financial/balance mostra o saldo disponível, o saldo a receber e quanto pode ser antecipado. Para sacar, cadastre uma chave Pix no mesmo CPF/CNPJ da conta e chame POST /financial/withdrawals com amount_cents e pix_account_id. Para receber vendas no cartão antes do prazo, simule com GET /financial/anticipation_simulation, que devolve o valor máximo e as taxas daquela operação. Regras de prazo e tarifa em /saques-e-antecipacao.
Posso integrar a HeroPay em um app feito no Lovable, Cursor ou com o Claude?
Pode, e é o caminho mais curto. Cole o llms.txt da HeroPay (heropay.tech/llms.txt) no Claude, ChatGPT, Cursor, Lovable e outros e peça a integração em linguagem natural. A ferramenta segue para a documentação aberta, com endpoints, headers e campos obrigatórios, e gera o código do link de pagamento e do endpoint de webhook. O MCP server oficial está em desenvolvimento. Só não deixe a ferramenta colocar o token no front-end: a chamada à API precisa acontecer no servidor ou numa função serverless. Guias por ferramenta em /integracoes.
A integração é segura? E o PCI?
O cartão é digitado no checkout hospedado pela HeroPay, não no seu site, então seu servidor nunca toca em número de cartão e seu escopo de PCI DSS fica mínimo. A API exige Bearer JWT escopado por conta, que não enxerga dados de outras contas e pode ser regenerado se vazar. Webhooks chegam assinados com HMAC para você rejeitar requisições forjadas. Sua parte: token em variável de ambiente, endpoint de webhook em HTTPS, validação da assinatura e deduplicação de eventos.
Comece agora
Primeiro link de pagamento em 5 minutos, sem cartão de crédito e sem falar com vendas.