For the complete documentation index, see llms.txt. This page is also available as Markdown.

Scan to Pay

Scan to Pay is a Pagsmile solution that enables overseas users to pay local merchants in local currency by scanning supported interoperable local QR codes with an overseas wallet or banking application. Payments are processed through the applicable real-time settlement network.

Supported Countries and QR Schemes

Scan to Pay currently supports five countries and local QR schemes:

Country
Local QR Scheme
Country Code
Local Currency

Brazil

Pix

BRA

BRL

Colombia

Bre-B

COL

COP

Peru

CCE QR

PER

PEN

Philippines

QR Ph

PHL

PHP

Russia

SBP QR

RUS

RUB

Support for additional countries and local QR schemes is under development.

How It Works

  1. The local merchant presents a local QR code.

  2. The overseas customer scans the QR code using the Client's wallet or banking application.

  3. The Client sends the complete QR code payload to the Retrieve QR Code Data API. Pagsmile returns the recipient information, encoded amount—if available—and a one-time scan_id.

  4. The Client displays the payment details and, after the customer confirms, submits the payout using the same QR code payload and scan_id.

  5. Pagsmile processes the payment through the applicable real-time settlement network to the merchant in local currency, and sends the final status to notify_url.

Country Limits and Requirements

Country

source_currency

arrival_currency

Amount

QR Code Payload (account)

Additional Requirements

Brazil

One of: USD, EUR, GBP, BRL

Fixed value: BRL

From 0.01 to 15,000 BRL; up to 2 decimal places

Complete QR code payload; maximum 255 characters

name, document_type and document_id are required.

Colombia

One of: USD, EUR, GBP

Fixed value: COP

From 1,000 to 2,000,000 COP; up to 2 decimal places

Complete QR code payload; maximum 600 characters

No additional recipient fields are required.

Peru

One of: USD, EUR, GBP, PEN

Fixed value: PEN

From 0.01 to 500,000 PEN; up to 2 decimal places

Complete QR code payload; maximum 255 characters

Processing availability is subject to the receiving bank's cut-off schedule. See Peru Bank Cut-off Schedule.

Philippines

One of: USD, EUR, GBP, PHP

Fixed value: PHP

From 1 to 50,000 PHP; up to 2 decimal places

Complete QR code payload; maximum 255 characters

No additional recipient fields are required.

Russia

Use a source currency enabled for the merchant account. Use RUB for same-currency payouts.

Fixed value: RUB

Must match the retrieved fixed amount, when present; up to 2 decimal places. Other network and merchant limits may apply.

Complete https://qr.nspk.ru/... URL used during retrieval

No additional recipient fields are required.

Authentication

Both endpoints on this page use the payout API authentication method described in Security.

  1. Obtain the AppId and app_key from the merchant dashboard.

  2. Sort the non-empty top-level request body parameters by parameter name in ascending order.

  3. Concatenate the parameters as key=value pairs joined by &.

  4. Append the app_key directly to the sorted parameter string.

  5. Calculate the SHA-256 hash and send the lowercase hexadecimal result in the Authorization header.

The source IP address must also be included in the merchant's IP whitelist.


Retrieve QR Code Data

Use this endpoint to validate a QR code and retrieve the recipient information required to submit a Scan to Pay payout.

POST https://sandbox.transfersmile.com/api/payout/bank-account-list

Headers

Name
Type
Required
Description

Content-Type

string

Yes

Fixed value: application/json; charset=UTF-8.

AppId

string

Yes

Your App ID in the Pagsmile payout platform.

Authorization

string

Yes

Lowercase SHA-256 signature generated from the request body and your app_key.

Request Body

Name
Type
Required
Constraints
Description

country

string

Yes

One of: BRA, COL, PER, PHL, RUS

Recipient country code.

method

string

Yes

Fixed value: QRCODE

Payout method.

account_type

string

Yes

Fixed value: QRCODE

Recipient account type.

account

string

Yes

Send the complete, unmodified QR code payload. Country-specific length constraints apply.

QR code payload captured by the scanner. For Russia, send the complete https://qr.nspk.ru/... URL.

timestamp

integer

Yes

Current Unix timestamp in seconds. Requests more than 15 seconds before or after server time are rejected.

Request timestamp.

buyer_id

string

No

Maximum length: 200 characters.

Unique customer ID in the merchant system.

email

string

No

Valid email address; maximum length: 200 characters.

Customer email address.

Request Samples

Response Samples


Submit a Payout

Use this endpoint to submit a payout using the same QR code payload and the scan_id returned by the Retrieve QR Code Data API.

POST https://sandbox.transfersmile.com/api/payout

Headers

Name
Type
Required
Description

Content-Type

string

Yes

Fixed value: application/json; charset=UTF-8.

AppId

string

Yes

Your App ID in the Pagsmile payout platform.

Authorization

string

Yes

Lowercase SHA-256 signature generated from the request body and your app_key.

Request Body

Name
Type
Required
Constraints
Description

amount

number

Yes

Must be greater than zero and contain no more than 2 decimal places. Country-specific limits apply.

Payout amount. If the QR code contains a fixed amount, this value must match the retrieved amount.

amount_type

string

No

One of: source_amount, arrival_amount. Default: arrival_amount.

Indicates whether amount is denominated in the merchant's source currency or the recipient's arrival currency.

source_currency

string

Yes

Must be enabled for the merchant account and payout route.

Currency debited from the merchant balance.

arrival_currency

string

Yes

Fixed by country.

Currency credited to the local QR recipient.

fee_bear

string

Yes

One of: merchant, beneficiary

Specifies whether the merchant or beneficiary bears the payout fee.

account

string

Yes

Must be the complete QR code payload used to retrieve the scan_id.

Local payment QR code payload.

account_type

string

Yes

Fixed value: QRCODE

Recipient account type.

scan_id

string

Yes

One-time identifier generated by Pagsmile; maximum stored length: 32 characters. Use it immediately after retrieval.

Links the payout to the verified QR code data.

custom_code

string

Yes

Maximum length: 50 characters; must be unique for the merchant.

Merchant-side payout order ID.

notify_url

string

Yes

Valid URL; maximum length: 255 characters.

URL that receives the asynchronous final payout result.

method

string

Yes

Fixed value: QRCODE

Payout method.

additional_remark

string

Yes

4–40 characters. Only letters, numbers, spaces and underscores are supported.

Payout remark or descriptor.

country

string

Yes

One of: BRA, COL, PER, PHL, RUS

Recipient country code.

name

string

Conditional

2–100 characters. For CPF recipients, use English letters and spaces. For CNPJ recipients, English letters, numbers, dots, hyphens and spaces are supported.

Recipient name returned by the Retrieve QR Code Data API. Required when country is BRA.

document_type

string

Conditional

One of: CPF, CNPJ

Recipient identification type returned by the Retrieve QR Code Data API. Required when country is BRA.

document_id

string

Conditional

Maximum length: 24 characters.

Recipient identification number returned by the Retrieve QR Code Data API. Required when country is BRA.

email

string

No

Valid email address.

Optional recipient email for Brazil.

phone

string

No

Maximum length: 15 characters; valid phone number.

Optional recipient phone number for Brazil.

Request Samples

Response

Error Responses

Code
Message

400

Invalid QR Code

4001015

account is blocked

4001020

order already existed

4001320

amount does not match the scanned QR code amount.

4001321

invalid scan_id. Please scan the QR code again.

4004003

permission denied

4004029

too many requests

5001000

system error

5001003

fee not configured

5001102

balance insufficient

5001320

unable to verify scan_id. Please try again later.


Country-specific Processing Information

Peru Bank Cut-off Schedule

Processing availability for Scan to Pay payouts in Peru varies by receiving bank. The schedule below is provided in English and applies only when country is PER and arrival_currency is PEN.

“No cut-off” means the schedule does not define an unavailable period. “No service” means processing is unavailable for the stated period. A dash (—) means no schedule was provided. Times are reproduced from the processing schedule.

Bank
Monday–Friday
Weekends and Holidays

BCP

03:59 p.m.–04:01 p.m. 08:46 p.m.–08:51 p.m. (variable; no longer than 6 minutes) 01:00 a.m.–02:00 a.m. (variable; no longer than 1 hour)

No general cut-off. Sunday: 08:46 p.m.–08:51 p.m. (variable; no longer than 6 minutes) Saturday: 01:00 a.m.–02:00 a.m. (variable; no longer than 1 hour)

Interbank

12:00 a.m.–01:00 a.m.

No cut-off

Citibank

Monday–Friday: 06:00 p.m.–08:00 a.m. (D+1)

No service

Scotiabank

Monday: 03:50 p.m.–04:05 p.m.; 11:10 p.m.–11:30 p.m. Tuesday–Friday: 01:30 a.m.–03:00 a.m.; 03:50 p.m.–04:05 p.m.; 11:10 p.m.–11:30 p.m.

Saturday: 01:30 a.m.–03:00 a.m.; 11:10 p.m.–11:30 p.m. Sunday and holidays: 01:30 a.m.–03:00 a.m. The cut-off applies when preceded by a business day, including Saturday.

BBVA Continental

09:40 p.m.–10:00 p.m.

No cut-off

Banco de la Nación

—

—

Banco de Comercio

No cut-off

No cut-off

Banco Pichincha

10:30 p.m.–11:00 p.m. 02:00 a.m.–02:30 a.m.

10:30 p.m.–11:00 p.m. 02:00 a.m.–02:30 a.m.

BanBif

11:30 p.m.–11:40 p.m. 03:00 a.m.–03:10 a.m.

11:30 p.m.–11:40 p.m. 03:00 a.m.–03:10 a.m.

Crediscotia

12:00 a.m.–04:30 a.m. 03:35 p.m.–04:05 p.m. 09:00 p.m.–12:00 a.m.

No service

MiBanco

Outgoing: 06:00 p.m.–08:00 a.m. Incoming: 08:30 p.m.–06:00 a.m.

Sunday and holidays: no service. Saturday outgoing: 01:00 p.m.–12:00 a.m. Saturday incoming: 08:30 p.m.–12:00 a.m.

Banco GNB

No cut-off

No cut-off

Banco Falabella

11:45 p.m.–12:15 a.m.

11:45 p.m.–12:15 a.m.

Banco Ripley

10:00 p.m.–01:00 a.m. on the following day

10:00 p.m.–01:00 a.m. on the following day

Banco Santander

07:00 a.m. 09:00 p.m.

Unavailable

Alfin Banco

No cut-off

No cut-off

Compartamos Financiera

11:00 p.m.–06:00 a.m.

11:00 p.m.–06:00 a.m.

Financiera Oh

No cut-off

No cut-off

Financiera Efectiva

Sign-off: 11:30 p.m. Sign-on: 06:00 a.m.

Sign-off: 11:30 p.m. Sign-on: 06:00 a.m.

Financiera Confianza

—

—

Prexpe

Available 24/7

Available 24/7

Caja Metropolitana

—

—

Caja Piura

12:00 a.m.–12:30 a.m. 04:00 a.m.–04:30 a.m.

Sign-on: 06:00 a.m.

Caja Trujillo

04:00 p.m.–04:05 p.m. 10:00 p.m.–12:00 a.m.

04:00 p.m.–04:05 p.m. 10:00 p.m.–12:00 a.m.

Caja Arequipa

12:00 a.m.–08:00 a.m.

12:00 a.m.–08:00 a.m.

Caja Sullana

—

—

Caja Cusco

11:30 p.m.–05:00 a.m. on the following day

11:30 p.m.–05:00 a.m. on the following day

Caja Huancayo

12:00 a.m.–02:00 a.m. (variable; approximately 2 hours)

12:00 a.m.–02:00 a.m. (variable; approximately 2 hours)

Caja Ica

11:45 p.m.–12:15 a.m. on the following day

11:45 p.m.–12:15 a.m. on the following day

Caja Los Andes

—

—

Cooperativa ABACO

—

—

Tarjetas Peruanas - LIGO

—

—

DALE

Available 24/7

Available 24/7

Last updated

Was this helpful?