Pagamentos
Transacoes
Liste e filtre pagamentos, acompanhe os indicadores do periodo, entenda o caminho de cada transacao, confirme um pagamento que espera o cartao e capture, cancele ou estorne.
Depois de criado, um pagamento precisa ser encontrado, explicado e, as vezes,
desfeito. Esta pagina cobre as consultas e as operacoes que movem dinheiro de
volta. Leitura exige o escopo payments:read; confirmacao, captura,
cancelamento e estorno, payments:write.
Toda consulta vale para o ambiente da chave: sandbox e producao nunca se misturam, nem num indicador.
Meios de pagamento
methodType diz como o pagamento foi feito:
methodType | Como funciona |
|---|---|
card | Cartao de credito, pelo token do cofre ou pelo checkout transparente. Aprovado ou recusado na hora. |
debit_card | Cartao de debito. |
pix | Cobranca Pix: nasce requires_action com o QR Code em nextAction; o banco confirma depois. |
boleto | Boleto registrado: nasce requires_action com a linha digitavel; o banco confirma depois. |
wallet | Carteira digital, vinda de link de pagamento. |
bank_transfer | Transferencia, vinda de link de pagamento. |
Pix e boleto tem pagina propria: Pix e boleto cobre a criacao, a confirmacao pelo banco, o vencimento e a simulacao no sandbox.
Status de um pagamento
| Status | Significado |
|---|---|
requires_payment_method | Pagamento de cartao criado pelo servidor sem o cartao: espera o portador digita-lo no checkout do lojista, ate actionExpiresAt (24 horas). Confirmado, segue como pending ou processing; abandonado, vira canceled. Veja Checkout transparente. |
pending | Criado, ainda nao processado. |
processing | Em processamento no fluxo de roteamento. |
requires_action | Aguardando o portador (desafio 3DS), o pagamento de um Pix ou boleto, ou uma pausa do fluxo (revisao manual, espera). |
authorized | Aprovado e reservado no cartao, sem captura. |
captured | Capturado: a venda esta confirmada. |
partially_captured | Capturado em parte. |
failed | Recusado ou com falha. O motivo esta em decline; um erro no meio do processamento (no do fluxo, conector ausente) tambem fecha aqui, com error no evento payment.failed. |
canceled | Cancelado antes da autorizacao: pagamento que esperava o cartao e foi cancelado ou venceu, ou Pix e boleto vencidos ou cancelados sem pagamento. |
voided | Autorizacao cancelada antes da captura. |
partially_refunded | Estornado em parte. |
refunded | Estornado integralmente. |
disputed | Em contestacao. |
charged_back | Chargeback efetivado. |
requires_payment_method e o unico status que nasce antes de qualquer
tentativa: ainda nao ha cartao, entao nenhum adquirente foi acionado e
attempts vem vazio. A resposta da criacao traz clientSecret
(<paymentId>_secret_...) e actionExpiresAt. O clientSecret e entregue a
pagina do portador e nunca aparece no painel. Veja Confirmar um pagamento sem
cartao.
Listar e filtrar
curl "http://localhost:3333/v1/payments?status=failed&declineReason=INSUFFICIENT_FUNDS&createdAfter=2026-10-01T03:00:00Z&limit=50" \
-H "Authorization: Bearer $MINSTREL_API_KEY"
| Parametro | Exemplo | Efeito |
|---|---|---|
status | captured,authorized | Um ou mais status, separados por virgula. |
customerId | cus_01HQ... | Pagamentos de um cliente. |
externalId | pedido-1234 | O seu identificador do pedido, exato. |
declineReason | INSUFFICIENT_FUNDS | Motivo canonico da ultima recusa. |
connectorAccountId | ca_01HQ... | Pagamentos com ao menos uma tentativa na conta, inclusive os que cairam para outra. |
connector | cielo | Todas as contas de um conector, pelo slug. |
brand | visa,mastercard | Bandeira do cartao. |
methodType | pix,boleto | Meio de pagamento: card, debit_card, pix, boleto, wallet, bank_transfer. |
initiator | merchant | customer (CIT, cliente presente) ou merchant (MIT). |
amountMin, amountMax | 10000 | Faixa de valor, em centavos. |
hasFallback | true | So pagamentos com mais de uma tentativa (fallback ou retentativa). |
createdAfter, createdBefore | ISO 8601 | Periodo de criacao, com os extremos incluidos. |
search | 4242 | Busca livre, descrita abaixo. |
limit | 50 | De 1 a 100. Padrao 25. |
startingAfter | pay_01HQ... | Cursor: id do ultimo item da pagina anterior. |
Valor fora do vocabulario em status ou methodType e recusado com 422 e a
lista do que e aceito: um filtro digitado errado que devolvesse lista vazia
pareceria "nao ha nada", e voce procuraria o problema no lugar errado.
search aceita o que o suporte costuma receber do cliente:
- id do pagamento (exato ou o comeco, a partir de
pay_); externalId, descricao, nome ou e-mail do cliente (trecho, sem diferenciar maiusculas);- os 4 ultimos digitos do cartao;
- CPF ou CNPJ do cliente, com ou sem pontuacao (a partir de 6 digitos);
- NSU, TID, codigo de autorizacao, id da transacao no adquirente (o
txiddo Pix, o id do boleto no banco) ou id da tentativa (4 caracteres ou mais, sem espaco).
A lista vem do mais recente para o mais antigo. totalCount vem so na primeira
pagina (sem startingAfter): a contagem com filtros e a parte cara da consulta.
Resposta (resumida):
{
"object": "list",
"data": [
{
"object": "payment",
"id": "pay_01HQ...",
"status": "captured",
"amount": 14990,
"capturedAmount": 14990,
"refundedAmount": 0,
"customer": {
"id": "cus_01HQ...",
"name": "Maria Oliveira",
"email": "maria.oliveira@exemplo.com.br"
},
"attemptSummary": {
"count": 1,
"fallback": false,
"connectorAccount": {
"accountId": "ca_01HQ...",
"name": "Cielo principal",
"slug": "cielo",
"connectorName": "Cielo",
"removed": false
},
"path": [
{
"attemptNumber": 1,
"connector": "Cielo principal",
"slug": "cielo",
"outcome": "approved",
"trigger": "initial"
}
],
"lastDecline": null,
"latencyMs": 812
}
}
],
"hasMore": true,
"nextCursor": "pay_01HQ...",
"totalCount": 1284
}
Cada item traz os campos do pagamento (os mesmos do data.object dos
webhooks), o cliente e o resumo das tentativas em attemptSummary: quem
decidiu, o caminho percorrido e a ultima recusa. lastDecline aparece mesmo
quando o pagamento terminou aprovado - e ela que mostra o que o fallback
recuperou (Pix e boleto, ou cartao com token de bandeira proprio: o cartao comum
nao troca de adquirente). technical: true indica falha tecnica do conector,
sem codigo do emissor.
Indicadores do periodo
curl "http://localhost:3333/v1/payments/summary?from=2026-10-01T03:00:00Z" \
-H "Authorization: Bearer $MINSTREL_API_KEY"
Sem from, valem os ultimos 30 dias; sem to, ate agora. O periodo pode ter
no maximo 400 dias. A resposta compara com o periodo anterior de mesma duracao,
deslocado em dias inteiros: "hoje ate agora" compara com "ontem ate a mesma
hora", e nao com as ultimas horas de ontem.
Resposta (resumida):
{
"object": "payment_summary",
"period": {
"from": "2026-10-01T03:00:00.000Z",
"to": "2026-10-15T15:00:00.000Z",
"timezone": "America/Sao_Paulo",
"granularity": "day"
},
"current": {
"count": 1840,
"approved": 1602,
"declined": 221,
"inProgress": 17,
"approvalRate": 8788,
"capturedVolume": 23918450,
"capturedCount": 1577,
"averageTicket": 15167,
"refunds": { "count": 12, "amount": 180400 },
"recovered": {
"count": 96,
"amount": 1402300,
"fallback": { "count": 81, "amount": 1190500 },
"retry": { "count": 15, "amount": 211800 }
}
},
"previous": { "count": 1712, "approved": 1466, "declined": 230, "approvalRate": 8644 }
}
Como ler cada numero:
- Aprovado e todo pagamento que o emissor aprovou em algum momento:
authorized,captured,partially_captured,partially_refunded,refunded,disputed,charged_backevoided. A taxa mede a decisao do emissor, nao o que aconteceu com a venda depois. approvalRatevem em basis points (8788 = 87,88%): aprovados sobre aprovados mais recusados. Pagamentos em andamento ficam fora da conta, e sem nenhuma decisao no periodo a taxa enull.capturedVolumesoma o valor capturado, em centavos;averageTickete a media por pagamento capturado.recoverede a venda salva por uma nova tentativa, em duas origens que nunca se somam duas vezes:fallback(aprovado numa tentativa depois da primeira, no mesmo pagamento) eretry(aprovado de primeira, numa fatura cuja cobranca anterior tinha sido recusada).refundsconta os estornos concluidos pela data do estorno, nao da venda.
A resposta traz ainda series (por hora ate 2 dias de periodo, por dia acima
disso, no fuso da organizacao e com os intervalos vazios zerados),
connectors (desempenho por conta de conector, contado por tentativa: aprovou,
recusou, falha tecnica, recuperou e latencia media) e
facets.connectorAccounts, as contas que servem de filtro na listagem.
Detalhe de um pagamento
GET /v1/payments/:id traz tudo o que explica o caminho da transacao:
| Campo | O que traz |
|---|---|
nextAction | Pix e boleto aguardando o pagador: QR Code e copia e cola, ou linha digitavel e codigo de barras. null fora de requires_action. |
methodDetails | Pix e boleto: a cobranca emitida, com o historico (txid, endToEndId do Pix pago, vencimento, linha digitavel). Continua depois de pago ou vencido. |
attempts | Cada tentativa: conta de conector, desfecho (outcome), motivo (trigger), codigo bruto do emissor, Merchant Advice Code, classificacao ABECS, NSU, TID, codigo de autorizacao e latencia. |
routing | Resumo do roteamento: tentativas, se houve fallback, se ele salvou a venda (recovered), quem decidiu (decidedBy) e por que parou (stopReason). |
flowRuns | Execucoes do fluxo, com a versao e cada passo (steps): porta de saida, explicacao da decisao e configuracao relevante do no. |
antifraud | Analises antifraude: score, recomendacao e regras acionadas. |
operations | Capturas, cancelamentos e estornos enviados ao conector, com status HTTP e erro. No Pix e no boleto, tambem as consultas ao banco que importaram, com a origem e o resultado em check. |
refunds | Estornos, inclusive os recusados (status: failed, com failureReason). |
splits | Parcelas do split, com o valor configurado e o calculado. |
disputes | Contestacoes. |
events | Linha do tempo de eventos do pagamento, com a situacao das entregas de webhook de cada um. |
actions | O que da para fazer agora: capturar, cancelar ou estornar. |
O cartao vem so com dados de exibicao (bandeira, BIN, ultimos 4 digitos, validade, tipo e emissor) - nunca token, nunca numero.
Tentativas
outcome | Significado |
|---|---|
approved | O emissor aprovou. |
requires_action | Aprovacao pendente de acao do portador; no Pix e no boleto, cobranca emitida aguardando o pagamento. |
declined | O emissor recusou. Ha codigo de resposta e classificacao. |
technical_failure | O conector falhou (timeout, erro do parceiro). Sem codigo; o erro vem em error. |
pending | Ainda sem resposta. |
expired | Pix ou boleto que venceu sem pagamento. Nao e recusa. |
canceled | Pix ou boleto cancelado antes do pagamento. |
trigger diz por que a tentativa aconteceu: initial, fallback_reversible
(recusa reversivel na anterior) ou fallback_connector_failure (falha tecnica
na anterior). connector continua sendo o slug; a conta completa vem em
connectorAccount, com removed: true quando ela foi removida depois.
Por que o roteamento parou
E a pergunta que todo operador faz diante de uma recusa: "por que nao tentou
outro adquirente?". A resposta esta em routing.stopReason:
| Valor | Significado |
|---|---|
approved | A ultima tentativa aprovou. |
requires_action | Aprovacao pendente de acao do portador. |
in_progress | A ultima tentativa ainda nao terminou. |
charge_expired | O Pix ou o boleto venceu sem pagamento. |
charge_canceled | O Pix ou o boleto foi cancelado antes do pagamento. |
irreversible_decline | Recusa irreversivel: o fallback para sempre, independentemente da configuracao. |
fallback_disabled | O no de rota estava com o fallback desligado para esse tipo de falha. |
max_attempts | O limite de tentativas do no foi atingido com candidatos sobrando. |
candidates_exhausted | Todos os candidatos foram tentados. |
card_single_acquirer | Cartao: o token so vale na adquirente que o gerou; a nova tentativa e da retentativa (ABECS). |
single_connector | Roteamento direto, sem fluxo publicado: so havia uma conta. |
unknown | Nao foi possivel associar a ultima tentativa a um no de rota. |
Acoes possiveis
actions.capture, actions.void, actions.refund e actions.simulate trazem
available e, quando a acao nao esta disponivel, o motivo em reason. Captura
e estorno disponiveis trazem tambem maxAmount. No Pix e no boleto, void
cancela a cobranca aguardando pagamento e simulate e a
simulacao do banco, so no sandbox. Em
requires_payment_method, void cancela o pagamento que ainda nao recebeu o
cartao; capturar e estornar nao se aplicam.
reason | Significado |
|---|---|
not_authorized | O pagamento nao esta authorized (captura e cancelamento). |
no_authorization | Nao ha tentativa aprovada com id da transacao no adquirente. |
authorization_expired | A autorizacao expirou (authorizationExpiresAt). |
connector_unsupported | O conector que aprovou nao faz a operacao. |
not_captured | Nada foi capturado: nao ha o que estornar. |
fully_refunded | Ja estornado integralmente. |
disputed | Pagamento em contestacao ou com chargeback. |
method_unsupported | O meio nao tem a operacao (boleto nao tem estorno). |
not_pending | Pix ou boleto que nao esta mais aguardando pagamento. |
already_canceled | Pix ou boleto ja cancelado. |
live_environment | Simulacao do banco: so existe no sandbox. |
not_issued | Simulacao: a cobranca ainda nao foi emitida (fluxo pausado). |
Desenhe os botoes da sua interface a partir daqui: so o servidor sabe o que o conector que aprovou consegue fazer.
Linha do tempo
events lista os eventos do pagamento em ordem (ate 200), com status,
previousStatus e o resumo das entregas de webhook de cada um (total,
succeeded, failed, pending). Para o payload completo, use
GET /v1/events/:id - veja Webhooks.
Confirmar um pagamento sem cartao
Um pagamento de cartao criado sem card e sem paymentMethodId nasce em
requires_payment_method e so avanca quando recebe o token de uso unico do
adquirente, gerado no navegador do portador. A confirmacao tem dois caminhos:
| Quem confirma | Rota | Credencial |
|---|---|---|
A pagina do portador, pelo @minstrel/js | POST /v1/public/payments/:id/confirm | Header Minstrel-Client-Secret |
| O seu servidor | POST /v1/payments/:id/confirm | Chave de API (payments:write) |
curl -X POST https://api.minstrel.com.br/v1/payments/pay_01HQ.../confirm -H "Authorization: Bearer $MINSTREL_API_KEY" -H "Idempotency-Key: confirma-pedido-1234" -H "Content-Type: application/json" -d '{ "card": { "token": "3f9a...", "brand": "visa", "last4": "1111" }, "saveCard": false }'
card.tokene o token de uso unico do adquirente;brand,binelast4sao opcionais. Nunca envie o numero do cartao: a API o recusa com422 raw_card_data_rejected.saveCard: trueexigecustomerIdno pagamento e e o consentimento do portador para guardar o cartao e cobra-lo depois. Sem ele, o token e de uso unico e o cartao nunca mais pode ser cobrado.- Aprovada a autorizacao, o pagamento segue o caminho de qualquer cartao
(
authorizedoucaptured, conformecaptureMethod). Recusada, o pagamento terminafailed: nesta versao nao ha nova tentativa no mesmo pagamento; crie outro. - Um pagamento que nao esta mais em
requires_payment_method(ja confirmado, cancelado ou vencido) nao pode ser confirmado de novo.
O passo a passo completo, com a pagina do portador, esta em Checkout transparente.
Capturar
Para pagamentos criados com captureMethod: "manual", que ficam authorized:
curl -X POST http://localhost:3333/v1/payments/pay_01HQ.../capture \
-H "Authorization: Bearer $MINSTREL_API_KEY" \
-H "Idempotency-Key: captura-pedido-1234" \
-H "Content-Type: application/json" \
-d '{ "amount": 12000 }'
- Sem
amount, captura o total autorizado. - Valor menor que o autorizado e captura parcial: o pagamento fica
partially_capturede o restante nao pode ser capturado depois. - As duas emitem
payment.captured; confirastatusecapturedAmount. - A captura total leva as instrucoes de split gravadas; a parcial segue sem split.
| HTTP | code | Quando |
|---|---|---|
409 | payment_not_capturable | O pagamento nao esta authorized, a autorizacao expirou ou nao ha autorizacao aprovada. |
422 | validation_failed | amount acima do valor autorizado. |
402 | card_declined | O adquirente recusou a captura. |
502 | connector_unsupported_operation | O conector que autorizou nao faz captura. |
Prazo da pre-autorizacao
Uma autorizacao sem captura reserva o limite do portador, e a bandeira so deixa
capturar dentro de um prazo. Assim que a autorizacao e aprovada sem captura, o
pagamento ganha authorizationExpiresAt, calculado pela regra do adquirente e
da bandeira:
| Adquirente | Bandeira | Prazo (dias corridos) |
|---|---|---|
| Cielo | Mastercard | 7 |
| Cielo | Demais bandeiras | 15 |
| Cielo | Bandeira desconhecida | 7 |
| Outros adquirentes | Qualquer | 7 |
A regra da Cielo vem do changelog de julho de 2026. Onde a bandeira nao e conhecida, vale o prazo mais curto: errar para menos antecipa uma captura, errar para mais deixaria uma venda aprovada vencer.
- Captura adiada no fluxo. O no Capturar em modo
delayedagenda a captura (captureScheduledAt) e o worker a executa. Se o atraso pedido passar do prazo, a captura e marcada para 1 hora antes do vencimento. Veja Fluxos. - Aviso 24 horas antes. O worker aplica a configuracao Pre-autorizacao
perto de vencer da conta do conector (Plugins, conta, Recursos):
notify(padrao) so avisa,capturecaptura o valor autorizado evoidcancela a autorizacao. Nos tres casos sai o eventopayment.authorization_expiring, com o prazo emauthorizationExpiresAte a acao emexpiryAction. - Depois do prazo a captura nao e mais possivel: a API responde
409 payment_not_capturable, eactions.capture.reasonmostraauthorization_expired.
Cancelar uma autorizacao
O cancelamento (void) desfaz uma autorizacao que ainda nao foi capturada. O limite do portador e liberado sem lancamento na fatura dele - por isso e a operacao certa para uma pre-autorizacao que nao vai virar venda. Estornar depois de capturar custa tarifa e aparece no extrato do cliente.
curl -X POST http://localhost:3333/v1/payments/pay_01HQ.../void \
-H "Authorization: Bearer $MINSTREL_API_KEY" \
-H "Idempotency-Key: cancela-pedido-1234" \
-H "Content-Type: application/json" \
-d '{ "reason": "Pedido cancelado antes do envio" }'
O pedido vai ao mesmo conector que autorizou - so ele conhece a transacao, e
nao ha fallback. O pagamento fica voided e o evento payment.voided leva o
motivo em data.object.voidReason. Nao coloque dado sensivel no motivo.
No Pix e no boleto aguardando pagamento, o mesmo endpoint cancela a cobranca
no banco e o pagamento fica canceled, com payment.canceled. Veja
Pix e boleto.
Em requires_payment_method (o cartao ainda nao foi digitado), o mesmo
endpoint cancela o pagamento: ele fica canceled e a pagina do portador nao
consegue mais confirma-lo. Nada chegou ao adquirente, entao nao ha limite a
liberar.
| HTTP | code | Quando |
|---|---|---|
409 | payment_already_voided | A autorizacao ja foi cancelada. |
409 | payment_not_voidable | O pagamento nao esta authorized (nem requires_payment_method, nem Pix ou boleto aguardando). Se ja foi capturado, use o estorno. |
402 | card_declined | O adquirente recusou o cancelamento. |
502 | connector_unsupported_operation | O conector que autorizou nao faz cancelamento. |
Estornar
curl -X POST http://localhost:3333/v1/payments/pay_01HQ.../refund \
-H "Authorization: Bearer $MINSTREL_API_KEY" \
-H "Idempotency-Key: estorno-pedido-1234-1" \
-H "Content-Type: application/json" \
-d '{ "amount": 5000, "reason": "Devolucao parcial", "metadata": { "ticket": "SAC-991" } }'
- Sem
amount, estorna todo o saldo estornavel: capturado menos ja estornado. - Varios estornos parciais sao permitidos, ate o valor capturado. O pagamento
passa a
partially_refundede, quando o saldo zera, arefunded, com os eventospayment.partially_refundedepayment.refunded. - O estorno vai ao conector que aprovou a venda. Se o adquirente recusar ou
falhar, ele fica registrado em
refundsno detalhe, comstatus: failede o motivo emfailureReason. Conector sem estorno recusa antes, sem registrar nada. - Pagamento em disputa nao e estornado. Com chargeback em andamento, o portador ja pediu o dinheiro ao emissor: estornar devolveria duas vezes. Responda a disputa.
- Pix e estornado pela devolucao do PSP que recebeu. Boleto nao tem
estorno automatico: a resposta e
409com a orientacao de devolver por Pix ou TED e registrar a devolucao.
| HTTP | code | Quando |
|---|---|---|
409 | payment_not_refundable | Nada foi capturado (use o cancelamento), o pagamento ja foi estornado integralmente, esta em disputa (disputed, charged_back ou disputa aberta) ou e boleto. |
422 | validation_failed | amount acima do saldo estornavel. |
402 | card_declined | O adquirente recusou o estorno. |
502 | connector_unsupported_operation | O conector que aprovou nao faz estorno. |
Idempotencia nas operacoes
Captura, cancelamento, estorno e a decisao de revisao manual
aceitam o header Idempotency-Key, como a criacao do pagamento. Use sempre: a
repeticao de uma chamada perdida por timeout devolve a resposta original em vez
de capturar ou estornar duas vezes. A mesma chave com corpo diferente responde
409 idempotency_key_reused. Resposta de erro nao fica memorizada: depois de
uma falha, a mesma chave pode ser usada de novo. Veja o
catalogo de erros.
Eventos
| Evento | Quando acontece |
|---|---|
payment.created | Pagamento criado e aceito para processamento. |
payment.authorized | Autorizado pelo emissor, ainda sem captura. |
payment.captured | Capturado, total ou parcialmente. E o que confirma a venda. |
payment.failed | Recusado. Traz a classificacao ABECS em data.object.decline. |
payment.requires_action | Aguardando o portador, o pagamento de um Pix ou boleto (com o nextAction) ou uma pausa do fluxo. |
payment.voided | Autorizacao cancelada. |
payment.authorization_expiring | Pre-autorizacao perto do fim do prazo de captura, com authorizationExpiresAt e expiryAction (notify, capture ou void). |
payment.canceled | Pix ou boleto vencido ou cancelado sem pagamento, com o motivo em data.object.cancellation. |
payment.partially_refunded | Estorno parcial concluido. |
payment.refunded | Estornado integralmente. |
Os mesmos dados chegam por webhook, assinados.