PIX Cash Out Copy and Paste
Performs a PIX transfer using the EMV code (copy and paste) extracted from a PIX QR Code.
Endpoint
POST /api/external/pix/cash-outHeaders
| Header | Type | Required | Description |
|---|---|---|---|
Authorization | String | Yes | ApiKey {client_id}:{client_secret} |
Content-Type | String | Yes | application/json |
hmac | String | Yes | HMAC-SHA512 signature of the body (hex) |
Idempotency-Key | String | No | Unique key to prevent duplicate processing (max 256 chars) |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
amount | Integer | Yes | Amount in centavos. R$ 30.00 = 3000 |
emv_code | String | Yes | EMV copy and paste code from the PIX QR Code |
description | String | No | Transfer description (max 140 characters) |
external_id | String | No | Your system identifier for tracking. Max 128 chars. Only a-zA-Z0-9._:-. Returned in responses and webhooks. |
Copy and Paste Code
The emv_code field accepts the full EMV code copied from a PIX QR Code. The API automatically extracts the PIX key, recipient data, and the original charge amount from the EMV payload.
Transfer amount
The amount field must be provided even when the QR Code already contains a value. The API validates that the provided amount is compatible with the QR Code (static or dynamic).
Monetary values
Request values are in centavos (R$ 1.00 = 100). Response values are in base units (R$ 1.00 = 10000). To convert the response to BRL, divide by 10,000. Never use floating point.
Example
curl -X POST https://api.owem.com.br/api/external/pix/cash-out \
-H "Authorization: ApiKey $CLIENT_ID:$CLIENT_SECRET" \
-H "Content-Type: application/json" \
-H "hmac: $HMAC" \
-d '{
"amount": 3000,
"emv_code": "00020126580014br.gov.bcb.pix0136a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d5204000053039865802BR5913NOME RECEBEDOR6008BRASILIA62070503***6304ABCD",
"description": "Pagamento via QR Code",
"external_id": "invoice-4521"
}'Success Response -- 200
{
"worked": true,
"transaction_id": "PIXOUT20260309a1b2c3d4e5f6",
"end_to_end_id": "E37839059202603091530abcdef01",
"external_id": "invoice-4521",
"amount": 300000,
"fee_amount": 350,
"net_amount": 300350,
"status": "accepted",
"detail": "PIX enviado para processamento"
}| Field | Type | Description |
|---|---|---|
worked | Boolean | true indicates the request was accepted |
transaction_id | String | Unique transaction identifier |
end_to_end_id | String | End-to-End identifier in SPI/BACEN |
external_id | String | Your identifier, returned as sent. null if not provided |
amount | Integer | Transfer amount in base units (/ 10,000 for BRL). 300000 = R$ 30.00 |
fee_amount | Integer | Fee charged in base units (/ 10,000 for BRL) |
net_amount | Integer | Net amount (amount + fee) in base units |
status | String | accepted (accepted for processing) or completed (settled) |
detail | String | Descriptive message |
Error Response -- 400
{
"worked": false,
"detail": "Codigo EMV invalido ou nao reconhecido"
}Error Response -- 422
{
"worked": false,
"detail": "Saldo insuficiente"
}Next Steps
After creating the transfer, track the status via:
- Query by ID
- Query by E2E ID
- Query by Tag
- Query by External ID --
GET /api/external/transactions/ref/{external_id}
Or receive confirmation automatically via Webhook.