Availability
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
Local currency
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.
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.
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_countryin the table below; theic_typelabel does not change the outcome. For customers whoseic_countryis 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_typeNIC). - Customers whose
ic_countryis the Philippines can be registered with a passport (ic_typePP), 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.
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.
