Minstrel

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:

methodTypeComo funciona
cardCartao de credito, pelo token do cofre ou pelo checkout transparente. Aprovado ou recusado na hora.
debit_cardCartao de debito.
pixCobranca Pix: nasce requires_action com o QR Code em nextAction; o banco confirma depois.
boletoBoleto registrado: nasce requires_action com a linha digitavel; o banco confirma depois.
walletCarteira digital, vinda de link de pagamento.
bank_transferTransferencia, 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

StatusSignificado
requires_payment_methodPagamento 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.
pendingCriado, ainda nao processado.
processingEm processamento no fluxo de roteamento.
requires_actionAguardando o portador (desafio 3DS), o pagamento de um Pix ou boleto, ou uma pausa do fluxo (revisao manual, espera).
authorizedAprovado e reservado no cartao, sem captura.
capturedCapturado: a venda esta confirmada.
partially_capturedCapturado em parte.
failedRecusado 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.
canceledCancelado antes da autorizacao: pagamento que esperava o cartao e foi cancelado ou venceu, ou Pix e boleto vencidos ou cancelados sem pagamento.
voidedAutorizacao cancelada antes da captura.
partially_refundedEstornado em parte.
refundedEstornado integralmente.
disputedEm contestacao.
charged_backChargeback 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"
ParametroExemploEfeito
statuscaptured,authorizedUm ou mais status, separados por virgula.
customerIdcus_01HQ...Pagamentos de um cliente.
externalIdpedido-1234O seu identificador do pedido, exato.
declineReasonINSUFFICIENT_FUNDSMotivo canonico da ultima recusa.
connectorAccountIdca_01HQ...Pagamentos com ao menos uma tentativa na conta, inclusive os que cairam para outra.
connectorcieloTodas as contas de um conector, pelo slug.
brandvisa,mastercardBandeira do cartao.
methodTypepix,boletoMeio de pagamento: card, debit_card, pix, boleto, wallet, bank_transfer.
initiatormerchantcustomer (CIT, cliente presente) ou merchant (MIT).
amountMin, amountMax10000Faixa de valor, em centavos.
hasFallbacktrueSo pagamentos com mais de uma tentativa (fallback ou retentativa).
createdAfter, createdBeforeISO 8601Periodo de criacao, com os extremos incluidos.
search4242Busca livre, descrita abaixo.
limit50De 1 a 100. Padrao 25.
startingAfterpay_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 txid do 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_back e voided. A taxa mede a decisao do emissor, nao o que aconteceu com a venda depois.
  • approvalRate vem 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 e null.
  • capturedVolume soma o valor capturado, em centavos; averageTicket e a media por pagamento capturado.
  • recovered e 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) e retry (aprovado de primeira, numa fatura cuja cobranca anterior tinha sido recusada).
  • refunds conta 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:

CampoO que traz
nextActionPix e boleto aguardando o pagador: QR Code e copia e cola, ou linha digitavel e codigo de barras. null fora de requires_action.
methodDetailsPix e boleto: a cobranca emitida, com o historico (txid, endToEndId do Pix pago, vencimento, linha digitavel). Continua depois de pago ou vencido.
attemptsCada tentativa: conta de conector, desfecho (outcome), motivo (trigger), codigo bruto do emissor, Merchant Advice Code, classificacao ABECS, NSU, TID, codigo de autorizacao e latencia.
routingResumo do roteamento: tentativas, se houve fallback, se ele salvou a venda (recovered), quem decidiu (decidedBy) e por que parou (stopReason).
flowRunsExecucoes do fluxo, com a versao e cada passo (steps): porta de saida, explicacao da decisao e configuracao relevante do no.
antifraudAnalises antifraude: score, recomendacao e regras acionadas.
operationsCapturas, 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.
refundsEstornos, inclusive os recusados (status: failed, com failureReason).
splitsParcelas do split, com o valor configurado e o calculado.
disputesContestacoes.
eventsLinha do tempo de eventos do pagamento, com a situacao das entregas de webhook de cada um.
actionsO 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

outcomeSignificado
approvedO emissor aprovou.
requires_actionAprovacao pendente de acao do portador; no Pix e no boleto, cobranca emitida aguardando o pagamento.
declinedO emissor recusou. Ha codigo de resposta e classificacao.
technical_failureO conector falhou (timeout, erro do parceiro). Sem codigo; o erro vem em error.
pendingAinda sem resposta.
expiredPix ou boleto que venceu sem pagamento. Nao e recusa.
canceledPix 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:

ValorSignificado
approvedA ultima tentativa aprovou.
requires_actionAprovacao pendente de acao do portador.
in_progressA ultima tentativa ainda nao terminou.
charge_expiredO Pix ou o boleto venceu sem pagamento.
charge_canceledO Pix ou o boleto foi cancelado antes do pagamento.
irreversible_declineRecusa irreversivel: o fallback para sempre, independentemente da configuracao.
fallback_disabledO no de rota estava com o fallback desligado para esse tipo de falha.
max_attemptsO limite de tentativas do no foi atingido com candidatos sobrando.
candidates_exhaustedTodos os candidatos foram tentados.
card_single_acquirerCartao: o token so vale na adquirente que o gerou; a nova tentativa e da retentativa (ABECS).
single_connectorRoteamento direto, sem fluxo publicado: so havia uma conta.
unknownNao 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.

reasonSignificado
not_authorizedO pagamento nao esta authorized (captura e cancelamento).
no_authorizationNao ha tentativa aprovada com id da transacao no adquirente.
authorization_expiredA autorizacao expirou (authorizationExpiresAt).
connector_unsupportedO conector que aprovou nao faz a operacao.
not_capturedNada foi capturado: nao ha o que estornar.
fully_refundedJa estornado integralmente.
disputedPagamento em contestacao ou com chargeback.
method_unsupportedO meio nao tem a operacao (boleto nao tem estorno).
not_pendingPix ou boleto que nao esta mais aguardando pagamento.
already_canceledPix ou boleto ja cancelado.
live_environmentSimulacao do banco: so existe no sandbox.
not_issuedSimulacao: 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 confirmaRotaCredencial
A pagina do portador, pelo @minstrel/jsPOST /v1/public/payments/:id/confirmHeader Minstrel-Client-Secret
O seu servidorPOST /v1/payments/:id/confirmChave 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.token e o token de uso unico do adquirente; brand, bin e last4 sao opcionais. Nunca envie o numero do cartao: a API o recusa com 422 raw_card_data_rejected.
  • saveCard: true exige customerId no 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 (authorized ou captured, conforme captureMethod). Recusada, o pagamento termina failed: 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_captured e o restante nao pode ser capturado depois.
  • As duas emitem payment.captured; confira status e capturedAmount.
  • A captura total leva as instrucoes de split gravadas; a parcial segue sem split.
HTTPcodeQuando
409payment_not_capturableO pagamento nao esta authorized, a autorizacao expirou ou nao ha autorizacao aprovada.
422validation_failedamount acima do valor autorizado.
402card_declinedO adquirente recusou a captura.
502connector_unsupported_operationO 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:

AdquirenteBandeiraPrazo (dias corridos)
CieloMastercard7
CieloDemais bandeiras15
CieloBandeira desconhecida7
Outros adquirentesQualquer7

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 delayed agenda 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, capture captura o valor autorizado e void cancela a autorizacao. Nos tres casos sai o evento payment.authorization_expiring, com o prazo em authorizationExpiresAt e a acao em expiryAction.
  • Depois do prazo a captura nao e mais possivel: a API responde 409 payment_not_capturable, e actions.capture.reason mostra authorization_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.

HTTPcodeQuando
409payment_already_voidedA autorizacao ja foi cancelada.
409payment_not_voidableO pagamento nao esta authorized (nem requires_payment_method, nem Pix ou boleto aguardando). Se ja foi capturado, use o estorno.
402card_declinedO adquirente recusou o cancelamento.
502connector_unsupported_operationO 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_refunded e, quando o saldo zera, a refunded, com os eventos payment.partially_refunded e payment.refunded.
  • O estorno vai ao conector que aprovou a venda. Se o adquirente recusar ou falhar, ele fica registrado em refunds no detalhe, com status: failed e o motivo em failureReason. 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 409 com a orientacao de devolver por Pix ou TED e registrar a devolucao.
HTTPcodeQuando
409payment_not_refundableNada foi capturado (use o cancelamento), o pagamento ja foi estornado integralmente, esta em disputa (disputed, charged_back ou disputa aberta) ou e boleto.
422validation_failedamount acima do saldo estornavel.
402card_declinedO adquirente recusou o estorno.
502connector_unsupported_operationO 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

EventoQuando acontece
payment.createdPagamento criado e aceito para processamento.
payment.authorizedAutorizado pelo emissor, ainda sem captura.
payment.capturedCapturado, total ou parcialmente. E o que confirma a venda.
payment.failedRecusado. Traz a classificacao ABECS em data.object.decline.
payment.requires_actionAguardando o portador, o pagamento de um Pix ou boleto (com o nextAction) ou uma pausa do fluxo.
payment.voidedAutorizacao cancelada.
payment.authorization_expiringPre-autorizacao perto do fim do prazo de captura, com authorizationExpiresAt e expiryAction (notify, capture ou void).
payment.canceledPix ou boleto vencido ou cancelado sem pagamento, com o motivo em data.object.cancellation.
payment.partially_refundedEstorno parcial concluido.
payment.refundedEstornado integralmente.

Os mesmos dados chegam por webhook, assinados.