Timeline de transações
A API mantém uma timeline pública com os eventos relevantes do ciclo de vida de cada transação. O painel CorpX consome essa timeline para montar a visualização passo a passo da transação, e você pode consumi-la pela mesma API para alimentar dashboards próprios ou aceleros de suporte ao cliente final.
Endpoint
GET /v1/transactions/{transactionId}/timeline
Authorization: Bearer <jwt>
Resposta:
{
"transactionId": "pay_01HMABCD...",
"level": "public",
"events": [
{
"eventId": "8a2c...",
"transactionId": "pay_01HMABCD...",
"workflowId": "pixout-acc_X-key_Y",
"type": "pix_out.requested",
"source": "workflow",
"audience": "public",
"severity": "info",
"occurredAt": "2026-05-05T22:14:01.045Z",
"recordedAt": "2026-05-05T22:14:01.231Z",
"message": "PIX out solicitado",
"payload": {
"paymentId": "pay_01HMABCD...",
"accountId": "acc_X",
"amount": "100.00",
"mode": "KEY"
}
},
{
"type": "pix_out.confirmed",
"occurredAt": "2026-05-05T22:14:03.612Z",
"severity": "info",
"payload": {
"status": "COMPLETED",
"endToEndId": "E18236120202605051914aBcDeF"
}
}
]
}
Filtros (query params)
eventType— filtra por tipo exato (ex.:pix_out.confirmed).source— filtra por origem (workflow,partner_webhook,client_webhook,backoffice,system,partner_poll,api).since— ISO 8601 (ex.:2026-05-05T00:00:00Z); só eventos comoccurredAt >= since.limit— máximo 1000 (default 500).
Ordenação
Eventos são retornados em ordem cronológica crescente por occurredAt,
desempatado por recordedAt (chegada). Use o último evento da resposta
como cursor para paginação simples por since.
Garantias do contrato
Os tipos de evento listados abaixo são parte do contrato público e seguem regras de evolução append-only:
- Adições são minor SemVer e não exigem mudança no integrador —
novos
event_typesimplesmente passam a aparecer na resposta. - Renome ou remoção de tipos é major (breaking) e passa por período formal de deprecation, anunciado no changelog.
- Campos do
payloadpodem ganhar novos campos opcionais sem aviso; campos existentes nunca são removidos sem versão major.
Resumindo: trate qualquer event_type desconhecido como informativo e
ignore com graça — futuras versões podem adicionar tipos sem que isso
quebre seu cliente.
Catálogo de eventos públicos
Cada evento é identificado por um string dot-separated (<domínio>.<verbo>).
Os campos severity, source e payload ajudam a renderizar e filtrar
na sua UI.
Convenção mnemônica de verbos:
received— chegou até você sem ação prévia (ex.:pix_in.received,refund.received).requested— você pediu via API (ex.:pix_out.requested,boleto_pay.requested).created— você criou um recurso (ex.:qrcode.created).confirmed,failed,timeout,refunded— desfechos.
PIX out (pix_out.*)
pix_out.requested
A CorpX aceitou o pedido de PIX out (saída) iniciado em POST /v1/payments/*. Ainda não há confirmação do BACEN.
severity:infosource:workflowpayload:{
"paymentId": "pay_...",
"accountId": "acc_...",
"amount": "100.00",
"mode": "KEY",
"keyType": "EVP",
"identifier": "client-ref-123",
"idempotencyKey": "..."
}
pix_out.confirmed
O BACEN confirmou a transferência. Equivalente ao webhook outbound
pix.out.completed.
severity:infosource:workflowpayload:{paymentId, accountId, status, transactionId, endToEndId, amount}
pix_out.failed
A transferência falhou (saldo insuficiente, chave inválida, recusa do BACEN). O dinheiro não saiu.
severity:errorsource:workflowpayload:{paymentId, status: "FAILED" | "REJECTED", errorCode, errorReason, ...}
pix_out.timeout
A chamada para o parceiro foi aceita, mas o status final não foi
confirmado em até 5 minutos. Não retentar com nova Idempotency-Key
sem antes consultar o extrato — o dinheiro pode ter saído.
severity:warnsource:workflowpayload:{paymentId, errorCode: "confirmation_timeout", errorReason: "..."}
pix_out.refunded
Um PIX out enviado por você foi devolvido pelo destinatário (refund).
O payload carrega o vínculo com a devolução.
severity:infosource:workflowpayload:{
"originalTransactionId": "pay_...",
"refundTransactionId": "pay_...",
"amount": "100.00"
}
pix_out.client_webhook_sent
Confirmação de que o webhook outbound (pix.out.* ou pix.refund.*)
foi entregue com sucesso ao seu endpoint configurado. Útil para
auditoria — equivalente ao delivered_at do delivery log.
severity:infosource:client_webhookpayload:{eventId, eventType, subscriptionId, statusCode}
PIX in (pix_in.*)
pix_in.received
Um PIX foi creditado em uma de suas contas — a CorpX persistiu o crédito no extrato. Aplicações típicas: notificar o sistema interno do integrador para conciliar com o pedido de compra; disparar fluxos de pós-pagamento.
severity:infosource:workflowpayload:{transactionId, endToEndId, accountId, amount, description, identifier, method, payerName, payerDocument}
pix_in.client_webhook_sent
Confirmação de entrega do webhook outbound pix.in.completed ao seu
endpoint.
severity:infosource:client_webhook
QR Code (qrcode.*)
qrcode.created
QR code dinâmico ou estático criado via POST /v1/accounts/{id}/pix/qr-code/*.
severity:infosource:workflowpayload:{txid, accountId, amount, qrType, identifier, expiresAt}
qrcode.paid
O QR code foi pago pelo cliente final (signal recebido do BACEN ou detectado via polling proativo).
severity:infosource:workflowpayload:{txid, accountId, paidAmount, transactionId, endToEndId, payerDocument, payerName}
qrcode.client_webhook_sent
Confirmação de entrega do webhook outbound qrcode.paid.
Boleto (boleto_pay.*)
boleto_pay.requested
Pagamento de boleto solicitado em POST /v1/accounts/{id}/boleto/pay. Ainda não há confirmação do parceiro.
severity:infosource:workflowpayload:{boletoId, accountId, line, amount, taxId, scheduled}
boleto_pay.confirmed
Stark/parceiro confirmou o pagamento do boleto.
severity:infosource:workflowpayload:{boletoId, starkId, accountId, amount, line}
boleto_pay.failed
Pagamento de boleto falhou.
severity:errorsource:workflowpayload:{boletoId, errorReason}
boleto_pay.client_webhook_sent
Confirmação de entrega do webhook outbound boleto.paid ou boleto.failed.
Refund recebido (refund.*)
Esses eventos aparecem na timeline da transação de refund que
chegou. A própria transação original que foi devolvida ganha um evento
pix_out.refunded na sua timeline (linkando o refund).
refund.received
Um refund chegou para uma das suas contas — alguém devolveu um PIX que você havia enviado.
severity:infosource:workflowpayload:{transactionId, refundEndToEndId, originalEndToEndId, accountId, amount}
refund.confirmed
O refund foi marcado como concluído com sucesso (registro persistido, saldo creditado de volta na conta).
severity:infosource:workflow
refund.failed
Tentativa de processar o refund falhou (raro — usualmente parte de um incidente operacional).
severity:errorsource:workflow
Ações de backoffice (backoffice.user_action)
Operadores CorpX ocasionalmente atuam manualmente em uma transação
(aprovação, ajuste, override de policy). Quando isso acontece, a ação
fica registrada na timeline. Esses eventos têm sempre os campos
actor (e-mail do operador) e payload.action (string semântica
descrevendo o que foi feito).
severity:infoouwarn(dependendo da ação)source:backoffice
Modos avançados (backoffice)
O painel CorpX expõe internamente um modo ?level=full que retorna,
além dos eventos públicos, a Temporal History completa do workflow
(decisões internas, retries de activity, signals, timers). Esse modo é
restrito a operadores com a role apropriada e não faz parte do
contrato público — não programe seu cliente para depender dele.
Se você precisa de um nível adicional de transparência (ex.: relatório de SLA, debugging de integração), abra um ticket — podemos avaliar mover algum evento interno relevante para a taxonomia pública.