v1.6.0 - SWIFT Bank Account Auto-Approval, PayNow QR Image Optimization, and Documentation Improvements
New: Auto-Approval for SWIFT Recipient Bank Accounts
Manual bank account verification has been removed for SWIFT recipient bank accounts. Merchants can now register and use SWIFT bank accounts immediately without submitting bank statement proof or waiting for manual review.
Affected endpoint:
POST /v1/customer_profile/{customer_profile_id}/bank_accounts— Create a customer profile bank accountField Required Description bank_account_proofNo Previously required. Now optional for SWIFT bank accounts. If omitted, the system auto-verifies the bank account provided the account holder name matches the customer's KYC name. POST /v1/fx/payout-recipients— Create an FX payout recipientField Required Description bankAccountProofUrlNo Optional for SWIFT bank accounts. If omitted, the system auto-verifies the bank account provided the account holder name matches the customer's KYC name.
Behavior changes:
- SWIFT bank accounts are now auto-approved when the recipient bank account name matches the customer's KYC name.
- If there is a name mismatch, the bank account will not be auto-approved and an RFI (Request for Information) will be issued requesting bank account proof.
Important:
- Ensure beneficiary details are accurate before submission. Incorrect details may result in payment rejection or funds sent to the wrong account.
- Returned funds from rejected payments may be subject to charges by the recipient/intermediary bank.
New: PayNow QR Code Image Optimization
We've optimized how Dynamic PayNow QR code images are delivered. Instead of returning a large base64-encoded PNG inline, merchants can now opt to receive a presigned S3 URL for the QR image — reducing response payload size and improving latency.
Affected endpoints:
POST /v1/payments/paynow— Create a dynamic PayNow paymentGET /v1/payments/paynow/{paynow_id}— Get a dynamic PayNow payment
New request field:
| Field | Type | Required | Description |
|---|---|---|---|
uploadQrImage | boolean | No | When true, the QR code image is uploaded to S3 and a presigned URL is returned in qrCodeImageUrl. Only available for merchants with QR optimization enabled. |
New/existing updated response fields (in paymentMethod object):
| Field | Type | Description |
|---|---|---|
base64EncodedImage | (Existing field) string or null | Base64-encoded QR code image. Returns null for merchants with QR optimization enabled (use qrCodeImageUrl or qrCodeData instead). |
qrCodeData | (Existing field) string or null | Raw QR code data string for client-side QR generation. Populated for merchants with QR optimization enabled; null otherwise. |
qrCodeImageUrl | (New field) string or null | Presigned S3 URL to the QR code image (PNG). Available for merchants with QR optimization enabled. May be null initially on create if image upload is still processing. Poll the GET endpoint to retrieve once ready. URL expires after 5 minutes — re-fetch via GET for a fresh URL. |
Notes:
- This feature is gated per-merchant via configuration. Merchants without it enabled see no change in behavior.
qrCodeDatais always returned for enabled merchants, allowing immediate client-side QR rendering without waiting for the S3 URL.
API Guides
We are continuously improving our API documentation — including restructured integration guides, consolidated callback payload references, and updated response samples across several endpoints. More updates coming soon.

