Skip to content

Consultar Transação por External ID

Consulta uma transação pelo external_id, o identificador definido pelo seu sistema no momento da criação (cash-in ou cash-out).

Endpoint

GET /api/external/transactions/ref/:external_id

Headers

HeaderTipoObrigatórioDescrição
AuthorizationStringSimApiKey {client_id}:{client_secret}
X-Key-CaseStringNãoDefina como camelCase para receber os campos da resposta em camelCase (padrão é snake_case)

Path Parameters

ParâmetroTipoObrigatórioDescrição
external_idStringSimIdentificador externo definido na criação da transação

Quando usar

Este endpoint é útil para conciliação entre o seu sistema e a Owem Pay. Em vez de armazenar o transaction_id da Owem, consulte diretamente pelo ID do seu pedido, fatura ou referência interna.

Exemplo

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

Shapes de Resposta

A resposta varia conforme o estado da transação. Veja abaixo os 4 shapes possíveis.

Shape 1 -- Transação liquidada (status: "settled")

Retornado quando a transação foi liquidada e persistida na tabela transactions.

json
{
  "worked": true,
  "data": {
    "id": "c7f3a8b1-2d4e-4f6a-9c1b-3e5f7a9b1d3e",
    "transaction_id": "PIXOUT20260309a1b2c3d4e5f6",
    "end_to_end_id": "E37839059202603091530abcdef01",
    "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": null,
    "recipient_document": "12345678901",
    "payer_ispb": null,
    "payer_bank_name": null,
    "created_at": "2026-03-09T15:30:00Z",
    "completed_at": "2026-03-09T15:30:02Z"
  }
}
Campo (top-level)TipoDescrição
idStringUUID interno da transação
transaction_idStringIdentificador público da transação
end_to_end_idStringE2E ID do BACEN
external_idStringIdentificador do seu sistema
typeStringpix, ted, internal
directionStringinbound ou outbound
statusStringStatus da transação (ver pix-lifecycle)
amountIntegerValor em unidades base (÷ 10.000 para reais)
fee_amountIntegerTarifa cobrada em unidades base
net_amountIntegerValor líquido em unidades base
descriptionStringDescrição da transação
counterparty_nameStringNome da contraparte
recipient_keyStringChave PIX do destinatário (apenas outbound)
payer_documentStringCPF/CNPJ do pagador (inbound). null para outbound
recipient_documentStringCPF/CNPJ do recebedor (outbound). null para inbound
payer_ispbStringISPB da instituição pagadora (inbound). null para outbound
payer_bank_nameStringNome do banco pagador (inbound). null para outbound
created_atStringData de criação (ISO 8601)
completed_atStringData de conclusão (ISO 8601)

Shape 2 -- Transação em processamento (status: "processing")

Retornado quando a transação está em outbound_requests aguardando resposta do BACEN (ainda não liquidada nem falhada).

json
{
  "worked": true,
  "data": {
    "transaction_id": "PIXOUT20260309a1b2c3d4e5f6",
    "end_to_end_id": "E37839059202603091530abcdef01",
    "external_id": "order-9876",
    "amount": 300000,
    "fee_amount": 350,
    "net_amount": 300350,
    "status": "processing",
    "payment_status": "processing",
    "type": "pix",
    "direction": "outbound",
    "pix_key": "12345678901",
    "description": "Pagamento fornecedor",
    "started_at": "2026-03-09T15:30:00Z"
  }
}
CampoTipoDescrição
transaction_idStringIdentificador público (prefixo PIXOUT)
end_to_end_idStringE2E ID do BACEN
external_idStringIdentificador do seu sistema
amountIntegerValor em unidades base (÷ 10.000 para reais)
fee_amountIntegerTarifa em unidades base
net_amountIntegeramount + fee_amount em unidades base
statusStringSempre "processing" nesta shape
payment_statusStringEspelho de status para compatibilidade
typeStringpix, ted, internal
directionStringoutbound (shape exclusiva de PIX OUT em voo)
pix_keyStringChave PIX do destinatário
descriptionStringDescrição informada no request
started_atStringInstante em que a requisição entrou na fila (ISO 8601)

Shape intermediária

Transações em processing estão em voo no BACEN. Não confie neste estado como final — aguarde o webhook pix.payout.confirmed ou pix.payout.failed. Operações em quarentena (stage=5, sem resposta do BACEN >30min) também retornam "processing" — ver pix-lifecycle.

Shape 3 -- Transação falhada

Retornado quando a transação está em failed_transactions (rejeitada pelo BACEN ou falha interna).

json
{
  "worked": true,
  "data": {
    "transaction_id": "PIXOUT20260309a1b2c3d4e5f6",
    "end_to_end_id": "E37839059202603091530abcdef01",
    "external_id": "order-9876",
    "amount": 300000,
    "status": "failed",
    "type": "pix",
    "direction": "outbound",
    "reason_code": "AC03",
    "reason_description": "Invalid creditor account number",
    "recipient": {
      "name": "Joao Silva",
      "key": "12345678901"
    },
    "failed_at": "2026-03-09T15:30:02Z"
  }
}
Campo extraTipoDescrição
reason_codeStringCódigo BACEN/provider (ex: AC03, ED05, AM02)
reason_descriptionStringDescrição em inglês
recipientObject{name, key} do destinatário
failed_atStringData da falha (ISO 8601)

Shape 4 -- QR code (cash-in)

Retornado quando o external_id foi registrado em um QR code de cobrança (pago ou não pago). Usado como fallback quando não há row em transactions nem em outbound_requests.

json
{
  "worked": true,
  "data": {
    "id": "e9f3df72-031f-49bf-abc3-a9ce1d540726",
    "tx_id": "smyoka2zd5xowvqq2hea",
    "pix_key": "evp-xxxx-xxxx-xxxx",
    "amount": 100000,
    "fee_amount": 0,
    "status": "paid",
    "external_id": "order-9876",
    "description": "Pedido #1234",
    "end_to_end_id": "E37839059202604101607b2fc9d8b4c6b",
    "direction": "inbound",
    "type": "pix_qrcode",
    "created_at": "2026-04-10T16:00:00Z",
    "paid_at": "2026-04-10T16:07:08Z"
  }
}
CampoTipoDescrição
idStringUUID do QR code
tx_idStringtxId BACEN (identificador do QR no SPI)
pix_keyStringChave PIX do recebedor no QR
amountIntegerValor do QR em unidades base (0 se QR sem valor definido)
fee_amountIntegerSempre 0 no QR code (tarifa é cobrada na liquidação)
statusStringpaid, pending, expired, cancelled
external_idStringIdentificador do seu sistema
descriptionStringDescrição informada na criação do QR
end_to_end_idStringE2E do PIX que liquidou o QR (apenas se status=paid). null caso contrário.
directionStringSempre "inbound" para QR code
typeStringSempre "pix_qrcode"
created_atStringInstante de criação do QR (ISO 8601)
paid_atStringInstante do pagamento (ISO 8601). null se ainda não pago.

Todos os valores monetários estão em unidades base (÷ 10.000 para reais).

Prioridade de busca

O backend procura o external_id nesta ordem: (1) transactions → shape 1, (2) outbound_requests em voo → shape 2, (3) failed_transactions → shape 3, (4) qrcodes → shape 4. A primeira tabela que contém o ID vence.

Diferenças entre shapes (importante para o parser do cliente)

As 4 shapes compartilham alguns campos (ex: transaction_id, end_to_end_id, external_id, amount, status, type, direction) mas não têm o mesmo conjunto de campos:

  • Shape 1 (settled): 18 campos incluindo fee_amount, net_amount, payer_document, payer_ispb, payer_bank_name, recipient_document, recipient_key, counterparty_name
  • Shape 2 (processing): 13 campos — não traz dados da contraparte (payer_document, payer_ispb, recipient_document ausentes), só o que está em outbound_requests
  • Shape 3 (failed): traz reason_code + reason_description + objeto recipient.{name, key} aninhado (observe: não é recipient_document flat)
  • Shape 4 (QR code): esquema diferente — tem tx_id, paid_at, pix_key, sempre direction="inbound" e type="pix_qrcode"

Recomendação: inspecione data.status primeiro; use switch/case para dispatch a 4 parsers distintos. Não assuma presença de campos cross-shape.

Comprovante oficial

Para gerar um comprovante formatado (PDF-ready, com dados de instituição e valores em BRL formatados), use GET /api/external/transactions/:id/receipt após a liquidação — o endpoint /transactions/ref/:external_id traz dados brutos para conciliação programática, não formatação visual.

Resposta de Erro -- 404

json
{
  "worked": false,
  "errors": {
    "not_found": "Transação não encontrada para o external_id informado"
  }
}

Resposta de Erro -- 401

json
{
  "worked": false,
  "errors": {
    "unauthorized": "Missing API key credentials. Use Authorization: ApiKey <client_id>:<client_secret>"
  }
}

Unicidade

O external_id não é único por conta. Se múltiplas transações possuem o mesmo external_id, o endpoint retorna a mais recente. Recomendamos usar valores únicos para facilitar a conciliação.

Owem Pay Instituição de Pagamento — ISPB 37839059