Skip to content

Comprovante Cash Out

Obtém o comprovante de uma transação PIX em formato estruturado, com dados formatados para exibição ao usuário final.

Endpoint

GET /api/external/transactions/:id/receipt

Headers

HeaderTipoObrigatórioDescrição
AuthorizationStringSimApiKey {client_id}:{client_secret}

Path Parameters

ParâmetroTipoObrigatórioDescrição
idStringSimID da transação (transaction_id)

Disponibilidade

O comprovante consulta a tabela transactions — disponível para transações com status final (settled ou failed). Transações ainda em processamento (estado processing em outbound_requests, stage 1–2) retornam 404 aqui; consulte primeiro via GET /transactions/:id e aguarde a promoção para transactions antes de solicitar o comprovante.

QRs pagos aparecem no comprovante da transação real linkada (não do QR em si) — use o transaction_id retornado no webhook pix.charge.paid ou via consulta.

Exemplo

bash
curl -X GET https://api.owem.com.br/api/external/transactions/PIXOUT20260309a1b2c3d4e5f6/receipt \
  -H "Authorization: ApiKey $CLIENT_ID:$CLIENT_SECRET"

Resposta de Sucesso -- 200

json
{
  "worked": true,
  "receipt": {
    "transaction_id": "PIXOUT20260309a1b2c3d4e5f6",
    "end_to_end_id": "E37839059202603091530abcdef01",
    "external_id": "order-9876",
    "type": "pix",
    "direction": "outbound",
    "status": "settled",
    "amount": 300000,
    "amount_formatted": "R$ 30,00",
    "fee_amount": 350,
    "fee_formatted": "R$ 0,035",
    "net_amount": 300350,
    "description": "Pagamento fornecedor",
    "counterparty_name": "Joao Silva",
    "recipient_key": "12345678901",
    "created_at": "2026-03-09T15:30:00Z",
    "completed_at": "2026-03-09T15:30:02Z",
    "institution": {
      "name": "Owem Pay",
      "cnpj": "37.839.059/0001-88",
      "ispb": "37839059"
    }
  }
}

Campos do Comprovante

O objeto receipt contém exatamente 17 campos (incluindo o sub-objeto institution). Este é o inventário completo — não há outros campos retornados por este endpoint:

#CampoTipoDescrição
1receipt.transaction_idStringIdentificador único da transação
2receipt.end_to_end_idStringIdentificador End-to-End no SPI/BACEN
3receipt.external_idStringID externo fornecido pelo cliente no cash-out. null quando não informado, ou quando o ID externo não passou no sanitize (max 128 chars, apenas a-zA-Z0-9._:-)
4receipt.typeStringTipo da transação. Valores observados: pix (default), pix_return (devolução). Rows legadas podem retornar outros valores (ted, tef, etc.) — o controller faz passthrough de t.type sem filtrar
5receipt.directionStringoutbound ou inbound quando o campo está persistido em transactions.direction. Quando nil, o controller faz fallback para Helpers.infer_direction/2, que retorna apenas credit (conta alvo é a do recebedor) ou debit (conta alvo é a do pagador) — nunca inbound/outbound no caminho de inferência
6receipt.statusStringStatus da transação resolvido via Helpers.format_status/1. Valores possíveis: settled (normal), pending (transactions.status=2), failed (status=3), completed (fallback legado para rows onde status=1 e payment_status=nil). Veja valores possíveis
7receipt.amountIntegerValor em unidades base (÷ 10.000 para reais). 300000 = R$ 30,00
8receipt.amount_formattedStringValor formatado em reais (R$ 30,00)
9receipt.fee_amountIntegerTarifa em unidades base
10receipt.fee_formattedStringTarifa formatada em reais (inclui sub-centavos quando aplicável, ex: R$ 0,035)
11receipt.net_amountIntegerValor líquido em unidades base (fallback `t.net_amount
12receipt.descriptionStringDescrição da transferência
13receipt.counterparty_nameStringNome da contraparte (pagador ou recebedor, conforme direction)
14receipt.recipient_keyStringChave PIX do destinatário (apenas saídas)
15receipt.created_atStringData de criação (ISO 8601, vindo de t.started_at)
16receipt.completed_atStringData de conclusão (ISO 8601, vindo de t.finished_at)
17receipt.institutionObjectDados da instituição emissora — sub-objeto com name, cnpj (formatado XX.XXX.XXX/XXXX-XX) e ispb

Campos formatados

O comprovante inclui campos _formatted com valores já convertidos para reais (ex: R$ 30,00, R$ 0,035 para tarifas sub-centavo). Use estes campos para exibição ao usuário. Use os campos numéricos (amount, fee_amount, net_amount) para cálculos. Não há net_amount_formatted — derive a exibição do amount_formatted + fee_formatted.

O comprovante NÃO retorna os campos de contraparte

Este endpoint explicitamente omite os seguintes campos que aparecem em outras consultas (ex: GET /transactions/:id, GET /transactions/e2e/:e2e_id, Consulta PIX IN por ID):

  • payer_document
  • recipient_document
  • payer_ispb
  • payer_bank_name

Se sua integração assumiu esses campos em /receipt baseada em exemplos de cash-in, ela está lendo undefined em tempo de execução. Para acesso aos dados completos da contraparte (documentos, ISPB, nome do banco), use GET /transactions/:id ou GET /transactions/e2e/:e2e_id — ambos usam a tabela transactions (mesma fonte) mas expõem o shape completo via Helpers.format_external_transaction/1.

Comprovante vs consulta por ID

O endpoint /receipt e o endpoint GET /transactions/:id usam a mesma fonte (transactions) mas retornam shapes distintos:

  • /receipt (17 campos): foco em exibição — adiciona _formatted, institution, e omite os 4 campos de contraparte listados acima.
  • GET /transactions/:id (18 campos no shape "settled"): foco em integração — inclui contexto completo da contraparte (payer_document, recipient_document, payer_ispb, payer_bank_name, counterparty_name) útil para conciliação, e omite os campos _formatted.

Use /receipt para gerar PDFs/emails/telas de confirmação ao usuário final. Use GET /transactions/:id para integração programática e reconciliação interna.

Resposta de Erro -- 404

json
{
  "worked": false,
  "detail": "Transação não encontrada"
}

Owem Pay Instituição de Pagamento — ISPB 37839059