# Consultar Cash-Out por E2E ID

Consulta uma transação PIX pelo End-to-End ID, o identificador único atribuído pelo BACEN no Sistema de Pagamentos Instantâneos (SPI).

## Endpoint

```
GET /api/external/transactions/e2e/:e2e_id
```

## Headers

| Header | Tipo | Obrigatório | Descrição |
|--------|------|-------------|-----------|
| `Authorization` | String | Sim | `ApiKey {client_id}:{client_secret}` |

## Path Parameters

| Parâmetro | Tipo | Obrigatório | Descrição |
|-----------|------|-------------|-----------|
| `e2e_id` | String | Sim | End-to-End ID (formato: `E{ISPB}{YYYYMMDDHHmm}{sequencial}`) |

::: tip Formato do E2E ID
O End-to-End ID segue o padrão BACEN: `E` + ISPB (8 dígitos) + data/hora (12 dígitos) + sequencial. Exemplo: `E46026562202603091530abcdef01`. O ISPB `46026562` identifica a Monetarie.
:::

## Exemplo

```bash
curl -X GET https://api.monetarie.com/api/external/transactions/e2e/E46026562202603091530abcdef01 \
  -H "Authorization: ApiKey $CLIENT_ID:$CLIENT_SECRET"
```

## Resposta de Sucesso -- 200

Para uma transação liquidada (tabela `transactions`):

```json
{
  "worked": true,
  "data": {
    "id": "c7f3a8b12d4e4f6a9c1b3e5f7a9b1d3e",
    "transaction_id": "PIXOUT20260309a1b2c3d4e5f6",
    "end_to_end_id": "E46026562202603091530abcdef01",
    "external_id": "order-9876",
    "type": "pix",
    "direction": "outbound",
    "status": "settled",
    "amount": 300000,
    "fee_amount": 350,
    "net_amount": 300350,
    "description": "Pagamento fornecedor",
    "counterparty_name": "Joao Silva",
    "recipient_key": "12345678901",
    "payer_document": "46026562000165",
    "recipient_document": "12345678901",
    "payer_ispb": "46026562",
    "payer_bank_name": "Monetarie",
    "created_at": "2026-03-09T15:30:00Z",
    "completed_at": "2026-03-09T15:30:02Z"
  }
}
```

O endpoint `GET /transactions/e2e/:e2e_id` busca em **3 fontes** na seguinte ordem: (1) `transactions` liquidadas; (2) `outbound_requests` em andamento (PIX OUT ainda processando); (3) `failed_transactions` rejeitadas. **Não busca em `qrcodes`** - para localizar QRs use `GET /transactions/:id` com o `tx_id` do QR, ou `GET /transactions/ref/:external_id` com o `external_id` que você atribuiu na criação.

A estrutura da resposta varia conforme a fonte encontrada - há **3 shapes distintos**:

- **Transação liquidada** (`transactions` via `Helpers.format_external_transaction/1`): shape do exemplo acima, com `status: "settled"`. 18 campos (incluindo `payer_document`, `recipient_document`, `payer_ispb`, `payer_bank_name`, `counterparty_name`). Mesmo shape retornado por `GET /transactions/tag/:tag`.
- **PIX OUT em andamento** (`outbound_requests`): shape reduzido, com `status: "processing"`. Campos: `status`, `transaction_id`, `end_to_end_id`, `amount`, `fee_amount`, `net_amount`, `external_id`, `pix_key`, `description`, `type`, `direction: "outbound"`, `payment_status: "processing"`, `started_at`, `recipient: {name, key, key_type}`. **Não inclui** `payer_document`, `payer_ispb` nem `completed_at`.
- **Transação rejeitada** (`failed_transactions`): shape de falha, com `status: "failed"`. Adiciona `reason_code` (uppercase BACEN ou lowercase provider), `reason_description` (em inglês), `failure_reason` (string bruta), `failed_at`, e `recipient: {name, key}` simplificado.

Veja cada shape completo e os valores possíveis do campo `status` em [Consultar Cash-Out por ID -- Valores do campo status](/pix-cashout-status#valores-do-campo-status). O campo `status` **não tem vocabulário único entre fontes** - `outbound_requests` retorna `"processing"` enquanto `transactions` com status interno 2 retorna `"pending"`.

::: tip Parser defensivo
Sempre roteie o parser por `data.status` **antes** de tentar ler campos específicos:

```javascript
switch (data.status) {
  case "settled":    // transações liquidadas - 18 campos
  case "processing": // PIX OUT em andamento - sem payer_* nem completed_at
  case "failed":     // rejeitada - com reason_code / reason_description
  case "pending":    // raro - transactions.status interno 2
}
```
:::

Todos os valores monetários em **unidades base** (÷ 10.000 para reais). Campos `payer_document`, `recipient_document`, `payer_ispb` e `payer_bank_name` **aparecem apenas no shape "settled"** - são resolvidos a partir do metadata da transação e podem ser `null` em rows antigas ou quando a contraparte não enviou os dados.

## Resposta de Erro -- 404

```json
{
  "worked": false,
  "detail": "Transacao nao encontrada para E2E ID: E46026562202603091530abcdef01"
}
```
