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

# Webhook de Cash-out

> Documentação completa das notificações do webhook para transações de cash-out

# Documentação do Webhook de Cash-out

## Visão Geral

Nosso sistema de webhook envia notificações em tempo real sobre transações de cash-out. Quando o status de uma transação é alterado, uma requisição POST é enviada para a URL configurada com informações detalhadas da transação.

## Payload do Webhook

O webhook envia um payload JSON contendo os detalhes e status da transação.

### Exemplo de Payload

```json theme={null}
{
  "transactionId": "550e8400-e29b-41d4-a716-446655440000",
  "transactionStatus": "PAID",
  "transactionType": "CASH_OUT",
  "value": "100.00",
  "externalId": "pedido_123456",
  "creditorAccount": {
    "name": "João Silva",
    "document": "123.456.789-00",
    "accountType": "CHECKING"
  },
  "e2e_id": "E12345678202403151234567890"
}
```

### Descrição dos Campos

#### Informações da Transação

* `transactionId` (string): Identificador único da transação no formato UUID
* `transactionStatus` (string): Status atual da transação. Valores possíveis:
  * `PAID`: Transação concluída com sucesso
  * `FAILED`: Transação falhou
  * `CHARGEBACK`: Transação estornada
* `transactionType` (string): Tipo da transação, sempre "CASH\_OUT"
* `value` (string): Valor da transação (decimal em formato string, ex: `"100.00"`)
* `externalId` (string): ID de referência externa fornecido pelo cliente
* `error_message` (string, opcional): Mensagem de erro quando a transação falha ou é estornada
* `creditorAccount` (objeto, opcional): Informações da conta do beneficiário quando a transação é bem-sucedida
  * `name` (string): Nome do beneficiário
  * `document` (string): Documento do beneficiário
  * `accountType` (string): Tipo da conta
* `e2e_id` (string, opcional): Identificador único da transação PIX

### Exemplos por Status

#### Transação Bem-sucedida

```json theme={null}
{
  "transactionId": "840dd376-2974-4a39-b2c9-48eb6e17698c",
  "transactionStatus": "PAID",
  "transactionType": "CASH_OUT",
  "value": "1.7",
  "externalId": "T&stess373",
  "creditorAccount": {
    "name": "JOAO DA SILVA",
    "document": "145.***.***-99",
    "bankCode": "077",
    "bankName": "BANCO INTER",
    "bankIspb": "00416968",
    "accountType": "CACC"
  },
  "e2e_id": "E08253539202502101337205246cd3db"
}
```

#### Transação Falha

```json theme={null}
{
  "transactionId": "550e8400-e29b-41d4-a716-446655440000",
  "transactionStatus": "FAILED",
  "transactionType": "CASH_OUT",
  "value": "10",
  "externalId": "pedido_123456",
  "error_message": "Saldo insuficiente"
}
```

#### Transação Estornada

```json theme={null}
{
  "transactionId": "550e8400-e29b-41d4-a716-446655440000",
  "transactionStatus": "CHARGEBACK",
  "transactionType": "CASH_OUT",
  "value": "10",
  "externalId": "pedido_123456",
  "error_message": "REFUNDED"
}
```

## Segurança: Verificação de Assinatura

Toda requisição deste webhook é assinada com **HMAC-SHA256** (header
`X-Webhook-Signature`), usando o seu `api_secret` como chave. **Valide a assinatura
antes de processar o payload** para garantir que a notificação veio realmente da
3X Pay e não foi adulterada no caminho.

<Card title="Guia completo: Segurança dos Webhooks" icon="shield-check" href="/api-reference/webhook/webhook-seguranca">
  Headers de segurança, fórmula da assinatura e exemplos de validação (Node.js, Python, PHP).
</Card>

## Boas Práticas

<Steps>
  Valide a assinatura HMAC (`X-Webhook-Signature`) antes de processar — veja [Segurança dos Webhooks](/api-reference/webhook/webhook-seguranca)

  Confirme o recebimento do webhook com uma resposta 200 OK

  Implemente verificações de idempotência usando o `transactionId` e `externalId`

  Processe webhooks de forma assíncrona

  Mantenha logs dos webhooks recebidos para resolução de problemas

  Implemente lógica de retry para entregas de webhook falhas
</Steps>

## O Webhook deve retornar Status Code 200

<Warning>
  Para que a transação tenha seu fluxo finalizado com sucesso é de extrema importância que seja retornado 200 na resposta!
</Warning>

export default function MDXPage({children}) {
  return <div className="docs-container">{children}</div>;
}
