Criar cobrança
Cria uma cobrança avulsa em PIX, boleto ou cartão e devolve o link de checkout para o pagador.
apiKeyAuthorizationBearer <token>Chave de API gerada no painel: Authorization: Bearer <chave>.
application/json- body
grossAmount*stringValor da cobrança na moeda de currency, string com ponto e duas
casas decimais: "49.90". amount é aceito como nome alternativo.
Com passthroughFees: true, é o valor que você quer receber e o
pagador paga mais.
^\d{1,20}\.\d{2}$currency*stringMoeda da cobrança.
"BRL""USD""EUR"paymentMethod?stringMeio de pagamento. Define o formato da resposta e restringe o checkout a esse meio. Omitido, o checkout mostra todos os meios habilitados na conta para a moeda.
PIX: a resposta já traz o QR Code. EmUSDouEUR, o câmbio é travado na criação e o QR cobra o valor convertido em reais.BANK_SLIP: o boleto é emitido na hora, com um QR Code PIX para o mesmo valor. ExigecustomerMetacom nome, documento e endereço.CREDIT_CARD: só cria a cobrança. O pagador informa o cartão no checkout; dados de cartão nunca passam por esta API.CRYPTO: cria a cobrança em cripto. Veja o guia de cripto.
"PIX""BANK_SLIP""CREDIT_CARD""CRYPTO"externalReference?stringIdentificador do pedido no seu sistema. Volta nos webhooks e nas consultas.
length <= 255description?stringDescrição da cobrança.
length <= 2000expiresAt?stringPrazo para pagar, em ISO 8601. Depois dele a cobrança PENDING
passa a EXPIRED.
date-timewebhookUrl?stringURL gravada na cobrança. Hoje nenhuma notificação é enviada para
ela: para saber que a cobrança foi paga, assine charge.paid numa
inscrição de webhook. Se enviar, precisa ser http ou https com
domínio público; IP literal, endereço privado e domínio curinga são
recusados com 400.
urilength <= 2048attemptIdempotencyKey?stringChave de idempotência da tentativa de pagamento, única por conta.
Uma chave já usada nos últimos 30 dias é recusada com 409, sem
criar nova tentativa. Gere um valor novo por cobrança.
length <= 128passthroughFees?booleantrue repassa as tarifas ao pagador: grossAmount passa a ser o
valor que você recebe e o total cobrado sobe para cobrir as
tarifas. false (padrão): o pagador paga grossAmount e as tarifas
saem do seu valor. Com true, paymentMethod é obrigatório e não
pode ser CRYPTO.
falsecustomerMeta?Dados do pagador. Opcional, exceto com paymentMethod: "BANK_SLIP", que
exige name, document e address completo. Nas respostas, documento,
e-mail e telefone voltam mascarados.
gatewayOptions?Opções do checkout e da tentativa de pagamento.
split?array<>Divide o valor líquido (netAmount) entre outras contas. Até 20
itens. O restante fica com você.
items <= 20Cobrança criada. O formato depende de paymentMethod: com PIX
ou BANK_SLIP (ou CRYPTO) a resposta é a tentativa de pagamento
(ChargeAttempt, com chargeId); sem paymentMethod ou com
CREDIT_CARD, é a cobrança (Charge). As duas trazem
checkoutUrl.
application/json- response
Tentativa de pagamento, criada na hora com PIX ou BANK_SLIP (ou CRYPTO).
id?stringId da tentativa.
uuidchargeId?stringId da cobrança. Use em consultas e no reembolso.
status?stringStatus da tentativa: CREATED, PROCESSING (aguardando o
pagamento), CONFIRMED, FAILED ou EXPIRED. Para saber se foi
pago, use o status da cobrança.
"CREATED""PROCESSING""CONFIRMED""FAILED""EXPIRED"paymentMethod?stringMeio de pagamento da tentativa.
"PIX""BANK_SLIP""CRYPTO"checkoutMeta?Instruções de pagamento. Os campos presentes dependem do meio.
checkoutUrl?stringLink do checkout. Envie ao pagador.
uricreatedAt?stringCriação, em UTC.
date-timeupdatedAt?stringÚltima alteração, em UTC.
date-timecurl -X POST 'https://api.gates2b.com/charge' \ -H 'Content-Type: application/json' \ -d '{ "grossAmount": "49.90", "currency": "BRL", "paymentMethod": "PIX", "externalReference": "pedido-0001", "description": "Assinatura mensal", "expiresAt": "2026-11-30T23:59:59Z"}'{ "id": "0192f4c6-7d1e-7a3b-9c2d-4e5f6a7b8c9d", "chargeId": "01JC8Z3R5W7Y9A1C3E5G7J9K2M", "status": "PROCESSING", "paymentMethod": "PIX", "checkoutMeta": { "url": "https://pay.gates2b.com/01JC8Z3R5W7Y9A1C3E5G7J9K2M", "paymentMethod": "PIX", "emv": "00020101021226810014br.gov.bcb.pix2559qr.example.com/v2/cobv/9d36b84f...6304A1B2", "qr_image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." }, "checkoutUrl": "https://pay.gates2b.com/01JC8Z3R5W7Y9A1C3E5G7J9K2M", "createdAt": "2026-10-22T14:00:00.000Z", "updatedAt": "2026-10-22T14:00:00.000Z"}O formato da resposta depende de paymentMethod
Com PIX ou BANK_SLIP (ou CRYPTO), a resposta é a tentativa de pagamento: o id é da tentativa e o id da
cobrança vem em chargeId. Sem paymentMethod ou com CREDIT_CARD, a resposta é a própria cobrança e o id
é o da cobrança. Guarde o id da cobrança: é ele que o reembolso e as consultas pedem.
Como funciona
Uma cobrança guarda o que você vende: valor, moeda, externalReference, prazo e status. O pagamento em si
acontece numa tentativa de pagamento, ligada à cobrança. Uma cobrança pode ter várias tentativas (um PIX que
venceu, depois um cartão no checkout), mas só é paga uma vez.
Cobrança
- id = chargeId
- status, valor, externalReference
Tentativa na criação
- paymentMethod PIX ou BANK_SLIP
- QR Code ou boleto na resposta
Tentativa no checkout
- o pagador escolhe o meio
- em checkoutUrl
Nova tentativa
- depois de uma tentativa recusada
- a cobrança segue aberta
Por isso o formato da resposta muda. Com PIX ou BANK_SLIP, a API cria a cobrança e a tentativa na mesma
chamada e devolve a tentativa, que é onde estão o QR Code e o boleto. Sem paymentMethod, ou com CREDIT_CARD,
nenhuma tentativa é criada agora: a resposta é a cobrança, e a tentativa nasce quando o pagador escolhe o meio e
paga em checkoutUrl. Dados de cartão nunca passam por esta API.
Status da cobrança
PENDINGaguardando pagamento
EXPIREDPAIDdispara charge.paid
RETAINEDREFUNDEDtodo o valor devolvido
- Libere o pedido em
PAID. Esse é o único status de cobrança paga. - Cada reembolso, parcial ou total, dispara
charge.refunded. O parcial mantém a cobrança emPAIDe aumentarefundedAmount; ela só vai aREFUNDEDquando o total reembolsado chega agrossAmount. - Uma tentativa recusada (cartão negado, por exemplo) não muda a cobrança: ela continua
PENDINGe aceita nova tentativa até o prazo. - Nas consultas, uma cobrança
PENDINGcomexpiresAtvencido já aparece comoEXPIRED. CANCELEDeFAILEDtambém existem. Trate os dois como cobrança encerrada sem pagamento.
Em cripto há mais um status, PARTIAL: o pagador transferiu menos que o cotado. A cobrança continua aberta e vira
PAID quando o restante chega. Detalhes em Cripto na cobrança.
Regras
- A conta precisa ter a verificação cadastral concluída. Antes disso, a criação responde
403comcodeKYC_PENDING. grossAmounté string com ponto e duas casas decimais:"49.90". Não envie vírgula nem notação científica.- O pagamento é confirmado pelo evento
charge.paid, entregue às suas inscrições de webhook. O campowebhookUrlé gravado na cobrança, mas hoje não recebe notificação. Veja Webhooks. - Use
externalReferencepara ligar a cobrança ao pedido no seu sistema. Ela volta nocharge.paid. attemptIdempotencyKeyimpede tentativa duplicada: a mesma chave usada de novo na conta, em até 30 dias, responde409e nada novo é criado. Depois de um timeout, busque a cobrança peloexternalReferenceantes de criar outra com chave nova.
Boleto
customerMeta.name,customerMeta.documente ocustomerMeta.addresscompleto (zipcode,street,number,neighborhood,city,state) são obrigatórios. Faltando algum, a resposta é400com todos os campos ausentes na mensagem, e a cobrança não é criada.- O boleto é emitido na hora. A resposta traz o boleto em
checkoutMeta.bankSlipe um QR Code PIX que paga o mesmo valor emcheckoutMeta.pix. bankSlip.valueebankSlip.feesão inteiros em centavos de real (15000= R$ 150,00), enquantogrossAmounté string em unidades da moeda. Em cobrançaUSDouEUR, o boleto cobra o valor convertido em reais.- A API não devolve imagem do boleto. Gere o código de barras a partir de
barcode(padrão Interleaved 2 of 5) e mostredigitableLinepara copiar. - Se o boleto não estiver habilitado na conta, a resposta é
400comBANK_SLIP is not enabled for this account.
Repasse de tarifas
Com passthroughFees: true, grossAmount é o valor que você quer receber; o pagador paga esse valor mais as
tarifas. A opção exige paymentMethod definido e não vale para CRYPTO. Sem ela, o pagador paga grossAmount e
as tarifas saem do seu valor (netAmount).
Split
- O split divide o
netAmount, não ogrossAmount.PERCENTé um percentual dele;FIXED, um valor fixo em string com duas casas. - Cada parte vai para a conta dona do
email. Se não houver conta com esse e-mail, a parte fica com você. splitSettlementmostra a divisão efetiva, em centavos, depois que a cobrança é paga.
Cripto
Com paymentMethod: "CRYPTO", a quantidade de itens em gatewayOptions.cryptoTickers muda o comportamento:
- Um ticker trava a moeda. A resposta já traz endereço, valor e QR Code em
checkoutMeta.crypto, e a reserva de 20 minutos começa a contar na criação. - Dois ou mais tickers, ou o campo omitido, deixam a escolha para o pagador no checkout. A resposta vem sem
checkoutMeta.cryptoe semqr_image.
Em CRYPTO, checkoutMeta.redirectUrl é uma página de pagamento alternativa para a tentativa, não a URL de
retorno que você enviou em gatewayOptions.redirectUrl. Mande o pagador para checkoutUrl.
Tickers aceitos, reserva, status e exibição do valor: Cripto na cobrança.