> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Eventos do Pix Lerian

> Os CloudEvents que o Pix Lerian publica para os fatos de negócio do SPI, DICT, COB e Pix Automático, como são entregues e como descobrir o schema de cada payload.

O Pix Lerian emite fatos de negócio como CloudEvents 1.0 em modo binário de conteúdo. Quatro componentes publicam no mesmo tópico — SPI, DICT Hub, COB Hub e a API do pagador do Pix Automático — porque são módulos de uma única aplicação e compartilham uma única origem CloudEvents, `plugin-br-pix-lerian`. O Streaming Hub entrega esses eventos aos sistemas da sua instituição.

## Como a entrega funciona

***

* **Pelo menos uma vez.** O caso de uso grava o estado de negócio e o envelope do evento na mesma transação, em um outbox; o relay do outbox é o único publisher do broker. Um evento pode chegar mais de uma vez, mas nunca se perde depois que a mudança de estado é confirmada.
* **Dois caminhos de consumo.** O [Streaming Hub](https://docs.lerian.studio/pt/platform/streaming-hub/what-is-streaming-hub.md) entrega cada evento correspondente a um sink seu — webhook HTTPS com assinatura HMAC, SQS, RabbitMQ ou EventBridge — ou seu consumidor assina o tópico `lerian.streaming.plugin-br-pix-lerian` com qualquer cliente Kafka.
* **Elimine duplicatas.** No webhook, pelo header `X-Lerian-Event-Id`; no Kafka, pelo par `(ce-source, ce-id)`.
* **Não dependa da ordem de chegada.** A chave do registro é `<ce-tenantid>:<subject>`, o que dá afinidade de partição por tenant e agregado, não ordenação estrita. Ordene pelo ciclo de vida e pelos timestamps dentro de cada evento.
* **Despache por `ce-type`.** O tipo é `studio.lerian.plugin-br-pix-lerian.<event-key>` e o valor do registro é apenas o payload (`data`), sem envelope. Ignore os tipos que você não trata: eventos novos aparecem sem aviso, no mesmo tópico.
* Valores monetários vêm como string decimal; interprete-os como decimais, nunca como ponto flutuante binário. Os timestamps estão em UTC.

No caminho por webhook, verifique a assinatura HMAC sobre os bytes crus do corpo antes de qualquer parse e responda `2xx` somente depois que a verificação passar e o evento estiver persistido do seu lado. O passo a passo de verificação, a rotação de segredo e os headers `X-Lerian-*` estão em [Consumir eventos](https://docs.lerian.studio/pt/platform/streaming-hub/consuming-events.md); a criação do sink está em [Gerenciar subscriptions](https://docs.lerian.studio/pt/platform/streaming-hub/managing-subscriptions.md).

## Descoberta de schema

***

Cada componente produtor serve dois endpoints HTTP sob o próprio prefixo de rota:

```http theme={null}
GET      {origin}{prefix}/v1/streaming/manifest
GET|HEAD {origin}{prefix}/v1/streaming/schemas/{eventKey}/{schemaVersion}
```

| Componente | Prefixo |
| - | - |
| SPI | `/spi` |
| DICT Hub | `/dict-hub` |
| COB Hub | `/cob-hub` |
| API do pagador do Pix Automático | `/pixauto` |

O manifesto lista os eventos que o componente publica e aponta para o documento JSON Schema de cada par `(eventKey, schemaVersion)`. Use-o como contrato em tempo de deploy, em vez de adivinhar tópicos e formatos. Os dois endpoints compartilham um único grant de autorização, `streaming-manifest`/`get`, escopado ao application name do componente (`plugin-br-pix-lerian-spi`, `-dict`, `-cob`, `-pixauto`); envie o token como `Authorization: Bearer <token>`. Instalações com autorização desabilitada servem os dois endpoints sem autenticação.

> [!NOTE]
>
> Leia `ce-schemaversion` em cada registro e faça cache do documento de schema pelo par `(eventKey, schemaVersion)`. Os produtores escrevem registros apenas na versão corrente de cada evento; uma versão substituída nunca é editada e o documento dela permanece servido para consumidores ainda fixados nela.

## Catálogo

***

Todo `ce-type` usa `studio.lerian.plugin-br-pix-lerian.<event-key>`. A lista autoritativa legível por máquina é o manifesto de cada componente; as tabelas abaixo são o mesmo conjunto em prosa.

### SPI

| Chave do evento | O que anuncia |
| - | - |
| `outbound_transfer.completed` | Um pagamento Pix enviado pela organização foi liquidado. |
| `outbound_transfer.rejected` | Um pagamento Pix enviado pela organização foi recusado; a movimentação no ledger foi compensada. |
| `inbound_transfer.completed` | Um pagamento Pix recebido pela organização foi liquidado. |
| `refund.completed` | Uma devolução Pix foi liquidada. |
| `refund.failed` | Uma devolução Pix não pôde ser liquidada. |
| `scheduled_payment.settled` | Um Pix agendado foi liquidado: o trilho confirmou o pagamento e a retenção no ledger foi efetivada. |
| `scheduled_payment.failed` | Um Pix agendado falhou em definitivo: nenhuma nova tentativa é autorizada em dia posterior. |
| `scheduled_payment.cancelled` | Um Pix agendado foi cancelado — um fato sobre o recebedor: a chave mudou de titular ou deixou de resolver. |
| `scheduled_payment.funds_missing_first_window` | A primeira janela de envio fechou com a ordem não paga por falta de saldo. A ordem não é terminal: uma nova tentativa é obrigatória entre 18:00 e 21:00. |
| `scheduled_payment.funds_missing_final` | No fechamento do dia (21:00), as tentativas do dia se esgotaram e a ordem não será tentada novamente. |
| `scheduled_payment.limit_exceeded` | Uma janela de envio fechou com a ordem não paga porque o limite do próprio pagador seria excedido; apenas a notificação é exigida, sem nova tentativa. |

### DICT Hub

| Chave do evento | O que anuncia |
| - | - |
| `claim.completed` | Uma reivindicação de chave chegou a COMPLETED: a chave passou para o participante reivindicador. |
| `claim.cancelled` | Uma reivindicação chegou a CANCELLED: a chave permanece com o doador. |
| `claim.confirmed` | O participante doador concordou em liberar a chave. |
| `claim.waiting_resolution` | O diretório reconheceu a reivindicação; a janela de resolução do doador está correndo. |
| `funds_recovery.updated` | Qualquer mudança persistida em uma recuperação de fundos do MED. |
| `infraction_report.updated` | Qualquer mudança persistida em um relato de infração do MED. |
| `refund_request.updated` | Qualquer mudança persistida em uma solicitação de devolução do MED. |
| `reconciliation_job.updated` | Uma transição de status de um job de conciliação com o diretório de chaves. |

### COB Hub

| Chave do evento | O que anuncia |
| - | - |
| `collection.paid` | Uma cobrança Pix foi liquidada. Ramifique pelo campo `type`: `IMMEDIATE` (cob) ou `DUE_DATE` (cobv). |

### Pix Automático

| Chave do evento | O que anuncia |
| - | - |
| `pix_auto_request.received` | Uma solicitação de autorização foi criada e aguarda a decisão do pagador. |
| `pix_auto_request.rejected` | O pagador recusou uma solicitação de autorização. |
| `pix_auto_request.expired` | O prazo de decisão da solicitação expirou sem resposta. |
| `pix_auto_request.cancelled` | A contraparte retirou a solicitação antes de o pagador responder. |
| `pix_auto_authorization.granted` | O pagador aceitou a solicitação; a autorização existe. |
| `pix_auto_authorization.parameters_changed` | O pagador reconfigurou uma autorização ativa. |
| `pix_auto_authorization.revoked` | Uma autorização foi revogada, com o tamanho da cascata resultante. |
| `pix_auto_authorization.awaiting_conclusion` | A concessão foi registrada; a resposta da instituição recebedora está pendente. |
| `pix_auto_authorization.concluded` | A resposta conclusiva chegou. |
| `pix_auto_authorization.conclusion_timed_out` | O limite de uma hora expirou sem resposta conclusiva. |
| `pix_auto_consent.revoked` | Um consentimento recorrente do Open Finance foi revogado no PSP do pagador, com o tamanho da cascata resultante. |
| `pix_auto_recurrence.cancelled` | A própria recorrência foi cancelada na contraparte, existindo ou não uma autorização sobre ela. |
| `pix_auto_scheduled_payment.cancelled` | Uma cobrança agendada parou enquanto a autorização segue ativa. |
| `pix_auto_scheduled_payment.cancellation_confirmed` | O participante recebedor aceitou (camt.029 ACCR) o camt.055 enviado por esta ponta; a cobrança já estava cancelada. |
| `pix_auto_scheduled_payment.cancellation_refused` | O participante recebedor recusou (camt.029 RJCR) o camt.055 enviado; a cobrança permanece cancelada. |
| `pix_auto_scheduled_payment.resend_refused` | Um reenvio no mesmo dia (pain.013 RIFL) chegou às 21:00 de Brasília ou depois e foi recusado. |
| `pix_auto_scheduled_payment.settlement_deferred` | A janela da manhã fechou sem liquidação; uma nova tentativa ocorre no mesmo dia entre 18:00 e 21:00. |
| `pix_auto_scheduled_payment.settlement_failed` | A cobrança não pôde ser liquidada no dia e a recorrência não permite nova tentativa após o vencimento. |
| `pix_auto_scheduled_payment.settlement_retry_permitted` | A cobrança não liquidou no dia e a recorrência permite tentativas após o vencimento. |
| `pix_auto_scheduled_payment.settlement_outcome_pending` | Esta ponta ainda não consegue afirmar o desfecho da liquidação da cobrança. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.