Skip to navigation

Availability

View as Markdown

The SQRIL SaaS API is a B2B payout system supporting multi-country QR code payments across Asia, Africa and Latin America. This RESTful API enables you to decode QR codes, get quotations, and execute cross-border payouts with real-time exchange rates.

Transaction Limits

USD

RegionCountryCurrencyMinimum Transaction (USD)Maximum Transaction (USD)Daily Limit (USD)Monthly Limit (USD)
AsiaVietnamVND0.406506,500100,000
AsiaPhilippinesPHP0.026506,500100,000
AsiaThailandTHB1.656506,500100,000
AsiaIndonesiaIDR0.065596,500100,000
AfricaTanzaniaTZS0.043866,500100,000
AfricaKenyaKES0.396506,500100,000
AfricaUgandaUGX0.286506,500100,000
AfricaSouth AfricaZAR0.066506,500100,000
AfricaNigeriaNGN0.016506,500100,000
AfricaGhanaGHS0.096506,500100,000
AfricaZambiaZMW0.056506,500100,000
Latin AmericaBrazilBRL0.106506,500100,000
Latin AmericaArgentinaARS0.106506,500100,000
Latin AmericaColombiaCOP0.106506,500100,000
Latin AmericaBoliviaBOB0.106506,500100,000
Latin AmericaPeruPEN0.291436,500100,000
Latin AmericaParaguayPYG0.106506,500100,000

Local currency

RegionCountryCurrencyMinimum TransactionMaximum TransactionDaily LimitMonthly LimitDecimal places
AsiaVietnamVND10,000 VND17,000,000 VND170,000,000 VND2,600,000,000 VND0
AsiaPhilippinesPHP1 PHP40,000 PHP400,000 PHP6,000,000 PHP2
AsiaThailandTHB55 THB22,500 THB220,000 THB3,400,000 THBnot validated
AsiaIndonesiaIDR1,000 IDR10,000,000 IDR115,000,000 IDR1,800,000,000 IDR0
AfricaTanzaniaTZS1,000 TZS1,000,000 TZS17,000,000 TZS260,000,000 TZS2
AfricaKenyaKES50 KES81,000 KES850,000 KES13,000,000 KES2
AfricaUgandaUGX1,000 UGX2,500,000 UGX25,000,000 UGX370,000,000 UGXnot validated
AfricaSouth AfricaZAR1 ZAR10,000 ZAR100,000 ZAR1,600,000 ZARnot validated
AfricaNigeriaNGN13 NGN900,000 NGN9,000,000 NGN130,000,000 NGNnot validated
AfricaGhanaGHS1 GHS7,000 GHS70,000 GHS1,000,000 GHSnot validated
AfricaZambiaZMW1 ZMW12,000 ZMW120,000 ZMW1,700,000 ZMWnot validated
Latin AmericaBrazilBRL0.6 BRL3,300 BRL33,000 BRL500,000 BRL2
Latin AmericaArgentinaARS175 ARS950,000 ARS9,500,000 ARS140,000,000 ARS2
Latin AmericaColombiaCOP390 COP2,100,000 COP20,000,000 COP300,000,000 COPnot validated
Latin AmericaBoliviaBOB1.25 BOB6,700 BOB75,000 BOB1,100,000 BOB2
Latin AmericaPeruPEN1 PEN500 PEN22,000 PEN320,000 PEN2
Latin AmericaParaguayPYG60 PYG3,800,000 PYG38,000,000 PYG550,000,000 PYGnot validated

Live in production today: Philippines, Vietnam, Thailand, Indonesia, Kenya, Tanzania, Argentina, Brazil, Bolivia, Peru and Colombia. The other corridors in the tables are available on the sandbox and are being brought to production; a row here documents the limits that will apply, not that the corridor is live.

Decimal places: an amount with more decimals than the currency allows is rejected at getQuotation and executePayout with INVALID_AMOUNT. VND and IDR take whole numbers only; PHP, ARS, BRL, PEN, BOB, KES and TZS take two. Currencies marked “not validated” have no settled volume yet, so their rule is not enforced until the payout network confirms it; send whole units there to be safe.

USD and local currency values are approximate equivalents; the stricter applicable limit governs.

The API enforces a per-corridor cap at decodeQr, lookupPaymentCode and getQuotation, and again at executePayout when no quotation locked the amount, for Vietnam, Philippines, Thailand, Indonesia, Cambodia, Brazil, Argentina, Colombia, Peru, Bolivia, Kenya and Tanzania; a request outside the range is rejected before a quotation is issued. For the remaining corridors the figures above are commercial limits and the payout provider’s own limits apply at settlement.

Indonesia e-wallet top-ups to OVO need at least 10,000 IDR; DANA, GoPay, ShopeePay and QRIS merchant payments take the 1,000 IDR minimum. Indonesia is capped at 10,000,000 IDR per payment, the Bank Indonesia QRIS limit, which is below the 650 USD cap the other corridors carry. Bank-account payouts take a 3-digit bank code or SWIFT from listBanks?country_code=ID. Thailand payouts under 1.5 USD are not guaranteed by the local network, so the floor is 55 THB.

Thailand needs a registered payer at decode time, so decodeQrUnregistered is not available for Thai QRs: decode them with decodeQr and a customer_id (register the payer first with registerCustomer if new).

The daily and monthly limits are per sender (customer_id) within your account, counted over the UTC calendar day and month on payouts that are processing or successful. A quotation or payout that would cross either is rejected with DAILY_LIMIT_EXCEEDED or MONTHLY_LIMIT_EXCEEDED at getQuotation and executePayout; the response carries the limit, the amount used so far and when the window resets.

Vietnam: nationality and restricted nationalities

nationality (ISO 3166-1 alpha-2) is a required sender field for Vietnam payouts. It is checked when a payer’s KYC record is first created, so a new payer registered without it fails their first Vietnam payout (the balance is restored automatically). Send it on registerCustomer for new payers and backfill existing payers with updateCustomer.

Payers with the following nationalities cannot be paid on the Vietnam rail. A payout for one of them fails at KYC with nationality is a restricted jurisdiction: <code> and the balance is restored. Gate on your side before decode to avoid the round trip.

Restricted nationalities
Afghanistan (AF), Belarus (BY), Central African Republic (CF), Cuba (CU), Ethiopia (ET), Iran (IR), Iraq (IQ), Lebanon (LB), Libya (LY), Myanmar (MM), North Korea (KP), Russia (RU), Somalia (SO), Sudan (SD), Syria (SY), Venezuela (VE), Yemen (YE), Zimbabwe (ZW)

China (CN) is not restricted: Chinese payers settle Vietnam payouts normally. It appeared on an early version of the list and was blocked briefly at the start of September, which was reverted. This list applies to Vietnam only.

Rate limits

Requests are counted per minute, per account and calling IP address, in fixed one-minute windows. Exceeding a limit returns 429 RATE_LIMIT_EXCEEDED; nothing is charged and the request can be retried.

EndpointRequests per minute
executePayout60
previewQuotations60

Other endpoints are not rate limited today. Limits may be added as traffic grows, so treat a 429 as retryable on any endpoint rather than assuming it cannot happen.

A 429 can also be returned transiently when a burst of traffic arrives faster than capacity scales, independently of these limits. Handle both the same way: retry with exponential backoff (for example 1s, 2s, 4s, up to about 30s) and a jitter, rather than retrying immediately. Use previewQuotations for rate checks, since it is stateless and built to be polled.

Payer identity documents (Latin America)

On the Latin America corridors (Argentina, Brazil, Colombia, Bolivia, Peru, Paraguay) the payout network validates the payer’s identity document against the accepted document formats of the payer’s own country, taken from the ic_country you registered, not against the merchant’s country.

  • The check is on the document number, against the accepted formats for the payer’s ic_country in the table below; the ic_type label does not change the outcome. For customers whose ic_country is Argentina, Bolivia, Brazil, Chile, Colombia, Costa Rica, Guatemala, Mexico, Panama, Paraguay or Peru the accepted formats are national documents only, so a passport number is rejected even when it looks similar: register them with that country’s document (ic_type NIC).
  • Customers whose ic_country is the Philippines can be registered with a passport (ic_type PP), PCN, UMID or driver’s license; all four are accepted formats for PH.
  • Customers from any other country can be registered with any government identity document, passport included.
  • Always register ic_country. Without it the payer cannot be validated for these corridors.
  • Argentina is stricter than the rule above. The Argentina rail accepts only an Argentine CUIT, CUIL or DNI from the payer, whatever their nationality or ic_country. A passport or a non-Argentine document is refused at execution and the balance is restored, so gate Argentina to payers registered with a local document.
ic_countryAccepted documents
ARCUIT or CUIL (11 digits), DNI (7 to 9 digits)
BOCI (5 to 10 digits, E prefix for foreign residents), NIT
BRCPF (11 digits), CNPJ (14 digits), RG (7 to 9 digits), CNH (11 digits)
CLRUT (7 to 8 digits plus verifier)
CONUIP (10 digits), CC (6 to 10 digits), PPT (6 to 15 alphanumeric)
CRCI or CJ (9 to 10 digits), DIMEX (11 to 12 digits)
GTCUI (13 digits)
MXCURP (18 characters), RFC (12 to 13 characters)
PARUC
PEDNI (8 digits), CE (9 to 12 alphanumeric)
PYCI (6 to 8 digits), RUC (8 to 9 digits)
PHPassport, PCN, UMID or driver’s license

A document that does not match is rejected at decodeQr or getQuotation with CUSTOMER_NOT_ELIGIBLE (400) and a message naming the accepted document. Nothing is locked or charged.