按 E2E ID 查询 Cash-Out
通过 End-to-End ID 查询 PIX 交易,该 ID 由 BACEN 在即时支付系统(SPI)中分配。
端点
GET /api/external/transactions/e2e/:e2e_id请求头
| 头 | 类型 | 必填 | 描述 |
|---|---|---|---|
Authorization | String | 是 | ApiKey {client_id}:{client_secret} |
路径参数
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
e2e_id | String | 是 | End-to-End ID(格式:E{ISPB}{YYYYMMDDHHmm}{序号}) |
E2E ID 格式
End-to-End ID 遵循 BACEN 标准:E + ISPB(8 位数字)+ 日期时间(12 位数字)+ 序号。示例:E37839059202603091530abcdef01。ISPB 37839059 标识 Owem Pay。
示例
curl -X GET https://api.owem.com.br/api/external/transactions/e2e/E37839059202603091530abcdef01 \
-H "Authorization: ApiKey $CLIENT_ID:$CLIENT_SECRET"成功响应 -- 200
已结算交易的响应(transactions 表):
{
"worked": true,
"data": {
"id": "c7f3a8b12d4e4f6a9c1b3e5f7a9b1d3e",
"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": "37839059000188",
"recipient_document": "12345678901",
"payer_ispb": "37839059",
"payer_bank_name": "Owem Pay",
"created_at": "2026-03-09T15:30:00Z",
"completed_at": "2026-03-09T15:30:02Z"
}
}端点 GET /transactions/e2e/:e2e_id 按以下顺序在 3 个数据源中搜索:(1) 已结算的 transactions;(2) 进行中的 outbound_requests(PIX OUT 仍在处理);(3) 被拒绝的 failed_transactions。不会在 qrcodes 中搜索 — 要定位 QR,请使用带 QR tx_id 的 GET /transactions/:id,或使用带您在创建时分配的 external_id 的 GET /transactions/ref/:external_id。
响应结构根据找到的源而不同 — 有 3 种不同的结构:
- 已结算交易(
transactions通过Helpers.format_external_transaction/1):上述示例的结构,status: "settled"。18 个字段(包括payer_document、recipient_document、payer_ispb、payer_bank_name、counterparty_name)。与GET /transactions/tag/:tag返回的相同结构。 - 进行中的 PIX OUT(
outbound_requests):简化结构,status: "processing"。字段: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}。不包含payer_document、payer_ispb或completed_at。 - 被拒绝的交易(
failed_transactions):失败结构,status: "failed"。添加reason_code(BACEN 大写或 provider 小写)、reason_description(英文)、failure_reason(原始字符串)、failed_at和简化的recipient: {name, key}。
查看每个结构的完整形式和 status 字段的可能值,请参阅 按 ID 查询 Cash-Out -- status 字段的值。status 字段在源之间没有统一的词汇 — outbound_requests 返回 "processing" 而 transactions 内部状态 2 返回 "pending"。
防御性 parser
始终先根据 data.status 路由 parser,再尝试读取特定字段:
switch (data.status) {
case "settled": // 已结算交易 — 18 个字段
case "processing": // 进行中的 PIX OUT — 无 payer_* 和 completed_at
case "failed": // 被拒绝 — 带 reason_code / reason_description
case "pending": // 罕见 — transactions.status 内部值 2
}所有货币值以基础单位(÷ 10.000 得到雷亚尔)。字段 payer_document、recipient_document、payer_ispb 和 payer_bank_name 仅出现在 "settled" 结构中 — 从交易 metadata 解析,在旧记录或对方未发送数据时可能为 null。
错误响应 -- 404
{
"worked": false,
"detail": "Transacao nao encontrada para E2E ID: E37839059202603091530abcdef01"
}