Creating QR Payout Transfer

Creating a QR-Payout Transfer (API link): When creating a QR Payout, you need to provide the raw QR code string scanned by the end-user. TransFi will decode this string to extract the required bank account details and network routing information automatically. If an invalid, expired, or unsupported QR code is provided, the payout will be rejected.

Must-Do Note: For QR Payouts, the orderType will still be "payout". However, to successfully perform a QR Payout, you must mandatorily provide the qrCode string inside the destination object.

Minimal payload:

curl --location 'https://api.transfi.com/v3/orders' \
--header 'MID: *****' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'Authorization: *****' \
--data-raw '{
  "orderType": "payout",
  "source": {
    "currency": "USDT"
  },
  "destination": {
    "currency": "VND",
    "amount": 3500000,
    "qrCode": "0002012659043f34fg5g543h53OV.BCB.PIX0122lolololo213@gmail.com0211Kaue g34g34g34g34g34 GUAjjfjJNDJNFUINAcKEXz0ttHEiAi630482A5"
  }
}'

Full payload:

curl --location 'https://api.transfi.com/v3/orders' \
--header 'MID: *****' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'Authorization: *****' \
--data-raw '{
  "orderType": "payout",
  "partnerId": "unique-id-01",
  "purposeCode": "other",
  "purposeCodeReason": "rent payment",
  "sourceUrl": "https://yourapp.com/source",
  "customerMetaData": {
      "customerId": "1234567890",
      "customerName": "John Doe",
      "customerEmail": "[email protected]"
  },
  "deviceDetails": {
      "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
      "ipInfo": {
          "ip": "123.123.123.123",
          "countryCode3": "IND"
      }
  },
  "source": {
    "currency": "USDT"
  },
  "destination": {
    "currency": "VND",
    "amount": 3500000,
    "qrCode": "0002012659043f34fg5g543h53OV.BCB.PIX0122lolololo213@gmail.com0211Kaue g34g34g34g34g34 GUAjjfjJNDJNFUINAcKEXz0ttHEiAi630482A5"
  }
}'

Comparison: QR Payout vs. Normal Fiat Payout

Based on the provided cURL examples, here are the key differences between a Normal Fiat Payout and a QR Payout:

  1. Destination Object Structure (The biggest difference):

    • Normal Payout: Requires explicit routing instructions. You must provide paymentType (e.g., "bank_transfer"), paymentCode (e.g., "sepa_bank"), and an additionalPaymentDetails object containing sensitive banking info like IBAN, BIC, street, city, and postal code.
    • QR Payout: Replaces all manual routing and banking information with a single qrCode string. The system extracts the equivalent routing and account details directly from this string.
  2. User Identification (userId vs partnerId):

    • Normal Payout: Uses userId ("UX-2123123123123") at the root level to identify the TransFi user making the transaction.
    • QR Payout: The provided example omits userId and creates the Payout Recipient internally from the Encoded QR Code Details as it has the name and details of the recipient.