QR Interoperable
POST https://api-sandbox.epag.io/qrInteroperable/simple
Overview
This process is designed to facilitate payments through QR Interoperable, the interoperable QR code standard in Peru. It allows your customers to pay quickly and securely by scanning a single QR code with any compatible banking app or digital wallet, optimizing the user experience and conversion rates.
The process offers:
- Immediate display of a QR code, without the need for complex preliminary data collection. To use this process, simply send the required fields as indicated in the documentation.
- A streamlined checkout experience. The customer scans the QR code, confirms the amount in their banking or wallet app, and completes the payment. This simplicity contributes to a higher conversion rate.
info
QR Interoperable is currently available via API only. Checkout support is not yet available for this payment method.
QR Interoperable Flow
Authorization
| Header | Value |
|---|---|
| X-Auth-Token | MY_ACCESS_TOKEN |
Request description
contract_id(required/string): Merchant's contract id.notification_url(required/string): URL to post callbacks to for this payment.reference_id(required/string/max 45 chars): External code created by the merchant to reference this payment (e.g., order number).ip_address(optional/string): Remote IP Address (IPv4/IPv6).extra_data(optional/object): Optional extra data that you can use with the transaction.payment(required/object): The payment data:amount(required/float): Total amount of the payment. The value must have a maximum of two decimal places.asset(required/string): Reference code for the asset for the sale's amount.country(required/string): Country code in ISO 3166-2.currency(required/string): Currency code in ISO-4217.qr_interoperable(optional/object): QR Interoperable specific data:expiration_date(optional/string): Expiration date of the QR code inYYYY-MM-DDformat. The QR code expires at the end of the informed day (23:59:59).
person(required/object): The person data:email(required/string): Person’s email provided to the merchant.
Response Description
transaction_status(string): Current status of the payment.payment_token(string): Unique payment identification for this payment.refresh_token(string): Updated access token for future calls.reference_id(string): External code created by the merchant to reference this payment.qr_code(string): Base64 encoded zipped PNG of the QR code to be scanned.amount(string): Amount of this payment.expiration_date(string): ISO 8601 timestamp indicating when the QR code will expire.totals(object): The payment totals.amount(float): Amount in the default region asset.asset(string): Asset used in this amount.original_amount(float): Amount as informed by the merchant.original_asset(string): Asset used in this originalAmount.customer_fees(float): Total calculated fee assigned to the customer.customer_amount(float): Total amount for the customer (amount + customer_fees).
customer_fees(object): List of incident customer fees and their respective values.
Example Request
- 200 - Success
Example Request
200 - Success
curl --location 'https://api-sandbox.epag.io/qrInteroperable/simple' \
--header 'X-Auth-Token: MY_ACCESS_TOKEN' \
--data-raw '{
"contract_id": "MY_CONTRACT_ID",
"notification_url": "https://my.notification.url",
"reference_id": "MY_REFERENCE_ID",
"ip_address": "0.0.0.0",
"payment": {
"amount": 100.00,
"asset": "PEN",
"country": "PE",
"currency": "PEN",
"qr_interoperable": {
"expiration_date": "2026-10-31"
}
},
"person": {
"email": "[email protected]"
},
"extra_data": {
"my-conciliation-number": "xxxxxx"
}
}'
Example Response
Header
Content-Type: application/json
Body
{
"transaction_status": "PROCESSING",
"payment_token": "4b408433-e70c-4f4b-8ea9-b6eec806b7c5",
"reference_id": "ecc7070b-b719-46f1-9fd1-982153886a6c",
"qr_code": "BASE64_ZIPPED_PNG",
"amount": "100.00",
"expiration_date": "2026-10-31T23:59:59",
"totals": {
"amount": 100,
"original_amount": 100,
"original_asset": "PEN",
"customer_fees": 0,
"customer_amount": 100,
"asset": "PEN"
},
"customer_fees": {},
"refresh_token": "MY_ACCESS_TOKEN"
}
Notification & Callback
For status notifications, callback payloads, and how to query updates for this transaction, see Payments - Status Maps & Updates.