Create a Card Present Pix Payment
Generate a Pix QR Code at a physical terminal in a Card Present (CP) environment using the Getnet Global API. The terminal displays the QR Code as a scannable image (Pix Copy and paste). It can also present the QR Code over NFC (contactless Pix). The customer authorizes the payment from their banking app.
How it works
This flow generates a Pix QR Code at the terminal and confirms the payment asynchronously.
- The terminal requests a dynamic Pix QR Code from the gateway and receives both a scannable
qr_codestring and aqr_code_nfcpayload for contactless (NFC) presentation. - Use this flow for Brazil (BRL) Pix acceptance at the point of sale, when you want the customer to pay from their bank account instead of with a card.
- At the end you have a
payment_idto track the transaction and a QR Code (visual and NFC) to present to the customer.
| Stage | Actor | Action |
|---|---|---|
| 1. Generate | Terminal → API | The terminal sends a POST request to the Pix endpoint and receives the QR Code payloads (HTTP 201). |
| 2. Present | Terminal → Customer | The terminal renders qr_code as a scannable image or emits qr_code_nfc over NFC. The customer confirms the payment in their banking app. |
| 3. Confirm | API → Terminal | Getnet authorizes the payment asynchronously. The terminal confirms the final status via webhooks or the Get Transaction endpoint. |
status: "WAITING" means the QR Code was generated. It does not mean the customer has paid. Confirm the actual payment status separately using the payment_id.
Before You Begin
Before you start, make sure you have:
- API Credentials: Get your
client_idandclient_secretfrom the Integration Support team. - Authentication: Generate a Bearer token via the Authentication endpoint, using the
digital-platform:gateway-apiscope. - Pix enabled: Your merchant account must be enabled for Pix in Brazil (
BRL). - Terminal capability: A physical device that can render a QR Code image and emit the
qr_code_nfcpayload over NFC. For device display and NFC/EMV requirements, see Terminal Requirements and EMV Tags.
Step 1: Build the request
Endpoint
POST /dpm/payments-gwproxy/v2/payments/qrcode/pix
You can customize the QR Code expiration with the optional x-qrcode-expiration-time header (value in seconds; default 180, maximum 1800).
Required fields
Send these fields in every request:
| Field | Type | Constraints | Description |
|---|---|---|---|
amount | Integer | In cents | Transaction amount (e.g., 10050 = 100.50). |
currency | String | ISO 4217 | Currency code. Use BRL. |
customer_id | String | ≤ 36 chars | Buyer identifier used by your platform. Passed on in the Pix payment notification. |
Optional fields
Include these fields when your integration needs them:
| Field | Type | Description |
|---|---|---|
order_id | String | Your internal order reference. |
idempotency_key | String (1-64) | Unique key to prevent duplicate requests. Recommended for every request. |
data.additional_data.split.subseller_list_payment | Array | Distributes the amount across subsellers. Required only for split payments. |
For split payments, each entry in subseller_list_payment carries subseller_id, document_type, document_number, subseller_sale_amount, and an items array. The full example below shows the complete structure.
Step 2: Send the request
Minimal example
Send the smallest valid payload with only the required fields:
curl --request POST \
--url https://api.pre.globalgetnet.com/dpm/payments-gwproxy/v2/payments/qrcode/pix \
--header 'authorization: Bearer <ACCESS_TOKEN>' \
--header 'content-type: application/json' \
--data '{
"amount": 10050,
"currency": "BRL",
"customer_id": "customer_21081826"
}'Full example (with split)
This payload distributes the amount across subsellers with split:
{
"amount": 10050,
"currency": "BRL",
"customer_id": "customer_21081826",
"order_id": "Order-00123",
"idempotency_key": "1eb2412c-165a-41cd-b1d9-76c575d30a21",
"data": {
"additional_data": {
"split": {
"subseller_list_payment": [
{
"subseller_id": "700104158",
"document_type": "CNPJ",
"document_number": "12345678000195",
"subseller_sale_amount": 5025,
"items": [
{ "id": "MR1", "description": "Product MR1", "currency": "BRL", "amount": 5025 }
]
}
]
}
}
}
}Step 3: Handle the response
Success response (HTTP 201)
A successful request returns HTTP 201 with the QR Code payloads inside additional_data. Render qr_code as a scannable image, or present qr_code_nfc over NFC.
| Field | Type | Description |
|---|---|---|
payment_id | String (UUID) | Unique identifier for the created payment. Use it to poll the final status. |
status | String | Current status of the payment (e.g., WAITING). |
description | String | Message confirming the QR Code generation. |
additional_data.transaction_id | String | Internal transaction identifier. |
additional_data.qr_code | String | Pix QR Code payload (Pix Copy and paste). Render it as a scannable image. |
additional_data.qr_code_nfc | String | Pix EMV payload for the NFC (contactless Pix) QR Code. Present it over NFC alongside the standard qr_code. |
additional_data.aids | Array of strings | Application Identifiers (AIDs) associated with the NFC QR Code. |
additional_data.creation_date_qrcode | String (max 24) | Timestamp when the QR Code was created. |
additional_data.expiration_date_qrcode | String (max 24) | Timestamp when the QR Code expires. |
additional_data.psp_code | String | PSP (Payment Service Provider) code used for the transaction. |
additional_data.extra_time_qrcode | Integer | Additional time, in seconds, granted for the QR Code payment. |
is_split | Boolean | Indicates whether the payment is subject to splitting. |
idempotency_key | String | Echoes the idempotency_key sent in the request. |
{
"payment_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"status": "WAITING",
"description": "QR Code successfully generated and awaiting payment.",
"additional_data": {
"transaction_id": "9000TRXIDdnmnefxzmvfckki",
"qr_code": "00020101021226740014br.gov.bcb.pix...6304ABCD",
"qr_code_nfc": "00020101021226870014br.gov.bcb.pix2565pix-h.santander.com.br/qr/nfc/...6304....",
"aids": ["A00000047643276C1FDE7A39B9C05716"],
"creation_date_qrcode": "2025-10-20T18:55:55",
"expiration_date_qrcode": "2025-10-20T18:58:58",
"psp_code": "033",
"extra_time_qrcode": 180
},
"is_split": false,
"idempotency_key": "1eb2412c-165a-41cd-b1d9-76c575d30a21"
}To present the payment, render qr_code as a scannable image, or emit qr_code_nfc over NFC using the identifiers in aids. For terminal display and NFC/EMV requirements, see Terminal Requirements and EMV Tags.
The endpoint returns status: "WAITING", which means the QR Code was generated but not yet paid. Getnet confirms the customer’s payment asynchronously. Subscribe to the PIX_UPDATED_TRANSACTIONS webhook for real-time confirmation, or poll Get Transaction Status with the payment_id.
Next steps
Continue with related Card Present tasks:
- Get Transaction Status: Confirm whether the customer has paid.
- Create Card Present QR Code Payments (Account-to-Account): The Visa/Mastercard QR flow (Chile).
- Single-Step Payments: Process standard chip and magnetic stripe sales.
Global API · Last updated: July 2026