# Webhooks de Pagamento Agendado

Esta seção discutirá como cada webhook é acionado após a conclusão de cada etapa, afetando as entidades `PaymentRequest`, `PaymentIntent` e `SchedulePayment`.

## Fluxo de Webhooks Agendados

O fluxo geral funciona da seguinte forma: quando o pagador autoriza o consentimento, um webhook `payment_intent/created` é acionado, seguido por `payment_intent/completed` uma vez que a intenção é confirmada. Em seguida, um webhook `scheduled_payment/created` é acionado para cada pagamento agendado, e um webhook `scheduled_payment/all_created` uma vez que todos os agendamentos tenham sido registrados. À medida que cada pagamento agendado é executado na sua data, um webhook `scheduled_payment/completed` é acionado (ou `scheduled_payment/error` se falhar), e finalmente `scheduled_payment/all_completed` quando todos os agendamentos tiverem terminado.

## Exemplos de payloads de webhook

Aqui estão exemplos de payloads de webhook em um caso com dois pagamentos agendados, e ambos se tornando COMPLETOS:

**payment_intent/created**

```json title="payment_intent/created"
{
  "paymentRequestId": "a0ed730e-5a44-491f-9a32-aa295c399fdf",
  "paymentIntentId": "056b8046-2f7c-4d97-b5d5-f5f54005db51",
  "event": "payment_intent/created",
  "eventId": "aa8f7239-101c-4553-afdd-9689a4ac46cd"
}
```

**payment_intent/completed**

```json title="payment_intent/completed"
{
  "paymentRequestId": "a0ed730e-5a44-491f-9a32-aa295c399fdf",
  "paymentIntentId": "056b8046-2f7c-4d97-b5d5-f5f54005db51",
  "event": "payment_intent/completed",
  "eventId": "1ecfb159-e506-48a3-895e-aed5241db4d9"
}
```

**scheduled_payment/created (1)**

```json title="scheduled_payment/created (1)"
{
  "paymentRequestId": "a0ed730e-5a44-491f-9a32-aa295c399fdf",
  "event": "scheduled_payment/created",
  "eventId": "5f519a62-87e1-45ce-be36-d2b185994c21",
  "scheduledPaymentId": "65c6f9cd-e69f-46cd-8103-80b42dd61bfd"
}
```

**scheduled_payment/created (2)**

```json title="scheduled_payment/created (2)"
{
  "paymentRequestId": "a0ed730e-5a44-491f-9a32-aa295c399fdf",
  "event": "scheduled_payment/created",
  "eventId": "c8e0dd66-5939-425d-bfd2-900ffa6921ae",
  "scheduledPaymentId": "502b68b5-f82a-4d1c-bcb3-e1e61fadc48a"
}
```

**scheduled_payment/all_created**

```json title="scheduled_payment/all_created"
{
  "paymentRequestId": "a0ed730e-5a44-491f-9a32-aa295c399fdf",
  "event": "scheduled_payment/all_created",
  "eventId": "4f45ca0a-3286-47b4-b8b3-195cd35cac01"
}
```

**scheduled_payment/completed (1)**

```json title="scheduled_payment/completed (1)"
{
  "paymentRequestId": "a0ed730e-5a44-491f-9a32-aa295c399fdf",
  "event": "scheduled_payment/completed",
  "eventId": "1d5d1aab-fc1a-40d4-aeae-15e7b9c11a10",
  "endToEndId": "E44471172202505211500U0d9ffa12345",
  "scheduledPaymentId": "65c6f9cd-e69f-46cd-8103-80b42dd61bfd"
}
```

**scheduled_payment/completed (2)**

```json title="scheduled_payment/completed (2)"
{
  "paymentRequestId": "a0ed730e-5a44-491f-9a32-aa295c399fdf",
  "event": "scheduled_payment/completed",
  "eventId": "9ebc222b-a94d-41e1-ad52-c0cf26f0357e",
  "endToEndId": "E44471172202505211500U0d9ffa12345",
  "scheduledPaymentId": "502b68b5-f82a-4d1c-bcb3-e1e61fadc48a"
}
```

**scheduled_payment/all_completed**

```json title="scheduled_payment/all_completed"
{
  "paymentRequestId": "a0ed730e-5a44-491f-9a32-aa295c399fdf",
  "event": "scheduled_payment/all_completed",
  "eventId": "7a9426aa-2ac3-4d8e-a5a4-fe780f116c6b"
}
```

> **Exemplo**
>
> Se você configurou todos os webhooks, seguindo o exemplo acima de fluxo, isso acionará todos esses webhooks nessa ordem.
>
> Você receberá:
>
> - Dois webhooks `payment_intent` (criado e concluído).
> - Cinco webhooks `scheduled_payment`.
>   - Como neste exemplo agendamos **dois pagamentos**, receberemos **dois para cada pagamento** que foi agendado (criado e concluído).
>   - Um webhook quando **todos os agendamentos** tiverem terminado.

### Erros de Webhook

Quando você recebe um webhook `scheduled_payment/error`, pode ter um dos seguintes códigos de erro.

| Código de Erro | Significado | Descrição |
|----------------|-------------|-----------|
| `INSUFFICIENT_BALANCE` | Saldo Insuficiente | A conta não tem saldo suficiente para realizar o pagamento. |
| `EXCEEDED_LIMIT` | Limite Excedido | O valor do pagamento excede o limite permitido. |
| `INVALID_AMOUNT` | Valor Inválido | O valor do pagamento fornecido é inválido. |
| `INVALID_INVOICE` | Fatura Inválida | A fatura fornecida é inválida. |
| `INVALID_CONSENT` | Consentimento Inválido | O consentimento fornecido é inválido. |
| `PARAMETER_NOT_PROVIDED` | Parâmetro Não Fornecido | Um parâmetro obrigatório não foi fornecido. |
| `INVALID_PARAMETER` | Parâmetro Inválido | Um parâmetro fornecido é inválido. |
| `NOT_PROVIDED` | Parâmetro Não Fornecido | Um parâmetro obrigatório não foi fornecido. |
| `PAYMENT_DIFFERENT_FROM_CONSENT` | Pagamento Diferente do Consentimento | O pagamento difere do consentimento autorizado. |
| `INVALID_PAYMENT_DETAIL` | Detalhe de Pagamento Inválido | Os detalhes do pagamento fornecidos são inválidos. |
| `PAYMENT_REJECTED_BY_HOLDER` | Pagamento Rejeitado pelo Titular | O titular da conta rejeitou o pagamento. |
| `IDEMPOTENCY_ERROR` | Erro de Idempotência | Ocorreu um erro de idempotência, possivelmente devido a solicitações duplicadas. |
| `CONSENT_PENDING_AUTHORIZATION` | Consentimento Pendente de Autorização | O consentimento está pendente de autorização. |
| `INFRASTRUCTURE_FAILURE` | Falha de Infraestrutura | Ocorreu uma falha na infraestrutura. |
| `SAME_ACCOUNT_ORIGIN_DESTINATION` | Mesma Conta de Origem e Destino | As contas de origem e destino são as mesmas, o que não é permitido. |
| `PAYMENT_SCHEDULING_FAILURE` | Falha no Agendamento do Pagamento | Ocorreu uma falha ao agendar o pagamento. |
| `UNKNOWN_ERROR` | Erro Desconhecido | Ocorreu um erro desconhecido, seja na instituição de Open Finance ou do lado do titular da conta. |