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 account
    FieldRequiredDescription
    bank_account_proofNoPreviously 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 recipient
    FieldRequiredDescription
    bankAccountProofUrlNoOptional 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 payment
  • GET /v1/payments/paynow/{paynow_id} — Get a dynamic PayNow payment

New request field:

FieldTypeRequiredDescription
uploadQrImagebooleanNoWhen 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):

FieldTypeDescription
base64EncodedImage(Existing field) string or nullBase64-encoded QR code image. Returns null for merchants with QR optimization enabled (use qrCodeImageUrl or qrCodeData instead).
qrCodeData(Existing field) string or nullRaw QR code data string for client-side QR generation. Populated for merchants with QR optimization enabled; null otherwise.
qrCodeImageUrl(New field) string or nullPresigned 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.
  • qrCodeData is 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.