Skip to main content
POST
https://api.owem.com.br
/
v4
/
i
/
pix
/
in
/
dynamic-qrcode
Generate Dynamic QRCode
curl --request POST \
  --url https://api.owem.com.br/v4/i/pix/in/dynamic-qrcode \
  --header 'Authorization: <authorization>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "accountId": "<string>",
  "userId": "<string>",
  "amount": 123,
  "description": "<string>",
  "expirationSeconds": 123,
  "payerName": "<string>",
  "payerCpfCnpj": "<string>"
}
'
{
  "requestId": "a9d2f14e-31bc-4d52-9b98-04d92f19fa64",
  "success": true,
  "size": 1,
  "data": {
    "txId": "7c4f3a2d8e1248a6b9c71f45e2",
    "dueDate": "2025-12-25T18:35:22.317Z",
    "emv": "00020101021226840014br.gov.bcb.pix2562qrcode.owem.com.br/pix/32fe91a1-4e62-4d8a-9f1e-5c9d2f61a77b5204000053039865802BR5908JOHNSILVA6008SAOPAULO62070503***63041A2B"
  }
}

Purpose

Creates a PIX IN charge with EMV payload (copy-and-paste) and returns the txId. The txId is the unique charge identifier and corresponds to the entryId in the Ledger.
Bradesco and Caixa Econômica Federal require payerName and payerCpfCnpj. Without these fields, the QR will not work on these banks and may reduce conversion by up to 10% on others.

Authentication

Authorization
string
required
Basic Auth required in format: Basic {Base64(API_KEY:API_SECRET)}

Request Body

accountId
string
required
Issuing account (12 digits)
userId
string
required
Requesting user linked to the account
amount
number
required
Amount in BRL (> 0, two decimal places)
description
string
Free-form charge description
expirationSeconds
number
default:"86400"
Expiration in seconds. Default: 86400 (24 hours)
payerName
string
Payer name. Required if payerCpfCnpj is sent. Recommended: always send.
payerCpfCnpj
string
Payer CPF/CNPJ. Required if payerName is sent. Recommended: always send.

Response

requestId
string
UUID for tracking
success
boolean
Operation status
size
number
Number of returned items
data
object
{
  "requestId": "a9d2f14e-31bc-4d52-9b98-04d92f19fa64",
  "success": true,
  "size": 1,
  "data": {
    "txId": "7c4f3a2d8e1248a6b9c71f45e2",
    "dueDate": "2025-12-25T18:35:22.317Z",
    "emv": "00020101021226840014br.gov.bcb.pix2562qrcode.owem.com.br/pix/32fe91a1-4e62-4d8a-9f1e-5c9d2f61a77b5204000053039865802BR5908JOHNSILVA6008SAOPAULO62070503***63041A2B"
  }
}

Status Codes

HTTPDescription
200Charge created
400Invalid parameter (amount, payer*, etc.)
401Invalid credentials
403IP not allowlisted
404accountId or userId not found
409Idempotency conflict
429Rate limit exceeded
500Internal error

Request Examples

{
  "accountId": "123456789012",
  "userId": "usr_abc123def",
  "amount": 197.99,
  "description": "Order #12345",
  "expirationSeconds": 86400,
  "payerCpfCnpj": "12345678900",
  "payerName": "JOHN DOE"
}
Confirm payment: Use GET /v4/i/ledger/entry-id/:txId where txId = entryId.
The returned txId is the identifier for Ledger queries via entry-id.