Cross-Currency Payout Guide

Overview

Cross-currency payout enables you to send funds from your UQPAY account in one currency to a beneficiary who receives the funds in a different currency. This eliminates the need for a separate currency conversion step, streamlining your international payment process.

For a complete list of supported currency pairs, refer to Cross-Currency Payout Supported Currency Pairs.

Key Benefits

  • Simplified Process: No need to create a separate conversion before payout
  • Real-time Exchange Rates: Lock in competitive rates with instant quotes

Step-by-Step Implementation

This guide shows an example of sending 100 USD, with the beneficiary receiving the equivalent value in THB.

Step 1: Create Beneficiary (Optional)

If you haven't already created a beneficiary for the target currency(THB), create one first.

API Reference: Create Beneficiary

Request:

{
  "email": "[email protected]",
  "nickname": "THB beneficiary",
  "entity_type": "COMPANY",
  "company_name": "UQPAY TECHNOLOGY SG PTE LTD",
  "payment_method": "LOCAL",
  "bank_details": {
    "bank_name": "The Currency Cloud Limited",
    "bank_address": "12 Steward Street, The Steward Building, London, E1 6FQ, GB",
    "bank_country_code": "TH",
    "account_holder": "UQPAY PTE. LTD.",
    "account_currency_code": "THB",
    "clearing_system": "LOCAL",
    "swift_code": "BKKBTHBKXXX",
    "account_number": "123456789012",
    "iban": "123456789012"  
  },
  "address": {
    "country": "TH",
    "city": "th",
    "street_address": "123 Main St",
    "postal_code": "123456",
    "state": "thqwe",
    "nationality": "TH"
  },
  "additional_info": {}
}

Response:

{
  "beneficiary_id": "e15436e2-35e8-4680-920d-4852940c18ba",
  "short_reference_id": "BF250917-WQEQ2D7Q"
}

Step 2: Create Quote

Create a quote to lock in the current exchange rate. The quote must be used within its validity period.

API Reference: Create Quote

Request:

{
  "sell_currency": "USD",
  "sell_amount": "100",
  "buy_currency": "THB",
  "conversion_date": "2025-09-17",
  "transaction_type": "payout"
}

Response:

{
  "buy_amount": "3160.3",
  "buy_currency": "THB",
  "quote_price": {
    "currency_pair": "USDTHB",
    "direct_rate": "31.60308",
    "inverse_rate": "0.031642",
    "quote_id": "a202824c-2f93-4561-b298-b5bba76d8a10",
    "validity": {
      "valid_from": 1758102115087,
      "valid_to": 1758102415093
    }
  },
  "sell_amount": "100",
  "sell_currency": "USD"
}

Key Parameters:

  • sell_currency: The currency in your account (USD)
  • sell_amount: The amount you want to send (100)
  • buy_currency: The currency the beneficiary will receive (THB)
  • transaction_type: Must be set to "payout" for cross-currency payouts

Note: You can also specify a fixed buy_amount instead of sell_amount if you want the recipient to receive a specific amount (e.g., 1000 THB), and the system will calculate the required sell_amount based on the current exchange rate.

Extract these values from the response:

  • buy_amount: "3160.3"
  • buy_currency: "THB"
  • sell_amount: "100"
  • sell_currency: "USD"
  • quote_id: "a202824c-2f93-4561-b298-b5bba76d8a10"

Step 3: Create Payout

Within the quote validity period, create the payout using the quote details.

API Reference: Create Payout

Request:

{
  "currency": "USD",
  "amount": "100",
  "quote_id": "a202824c-2f93-4561-b298-b5bba76d8a10",
  "payout_currency": "THB",
  "payout_amount": "3160.3",
  "purpose_code": "AUDIO_VISUAL_SERVICES",
  "payout_reference": "cross currency INR test",
  "fee_paid_by": "OURS",
  "payout_date": "2025-09-17",
  "beneficiary_id": "e15436e2-35e8-4680-920d-4852940c18ba"
}

Response:

{
  "payout_id": "3357f314-14bd-477a-bdf8-12245e863f98",
  "short_reference_id": "P250917-VKVAKHWQ",
  "payout_status": "READY_TO_SEND"
}

Parameter Mapping:

Payout ParameterQuote ResponseDescription
currencysell_currencySource currency from your account
amountsell_amountAmount to be sent
payout_currencybuy_currencyCurrency beneficiary receives
payout_amountbuy_amountAmount beneficiary receives
quote_idquote_idQuote identifier for rate locking

Webhook Notifications

API Reference: Payout Status Webhook

Payout Ready to Send

When the payout is accepted by UQPAY, you'll receive this webhook:

{
  "version": "V1.6.0",
  "event_name": "PAYOUT",
  "event_type": "payout.ready.send",
  "event_id": "ecefbe35-e1a6-42da-a780-8687e0842dd4",
  "source_id": "3357f314-14bd-477a-bdf8-12245e863f98",
  "data": {
    "account_id": "44fb810d-6bca-411c-964a-3013de34b798",
    "amount": "100",
    "authorisation_steps_required": "0",
    "beneficiary_id": "e15436e2-35e8-4680-920d-4852940c18ba",
    "conversion": {
      "client_rate": "31.60308",
      "currency_pair": "USDTHB"
    },
    "currency": "USD",
    "direct_id": "0",
    "failure_reason": "",
    "failure_returned_amount": "",
    "fee_amount": "0.4",
    "fee_currency": "USD",
    "fee_paid_by": "OURS",
    "payment_date": "2025-09-17",
    "payment_type": "LOCAL",
    "payout_amount": "3160.3",
    "payout_currency": "THB",
    "payout_id": "3357f314-14bd-477a-bdf8-12245e863f98",
    "payout_way": "API",
    "quote_id": "a202824c-2f93-4561-b298-b5bba76d8a10",
    "reason": "audiovisual services",
    "reference": "cross currency INR test",
    "short_reference": "P250917-VKVAKHWQ",
    "short_reference_id": "P250917-VKVAKHWQ",
    "status": "READY_TO_SEND",
    "unique_request_id": ""
  }
}

Payout Completed

When the payout is successfully processed:

{
  "version": "V1.6.0",
  "event_name": "PAYOUT",
  "event_type": "payout.completed",
  "event_id": "58b82ca4-7196-47b8-9ddb-5d7c26a1920f",
  "source_id": "3357f314-14bd-477a-bdf8-12245e863f98",
  "data": {
    "account_id": "44fb810d-6bca-411c-964a-3013de34b798",
    "amount": "100",
    "authorisation_steps_required": "0",
    "beneficiary_id": "e15436e2-35e8-4680-920d-4852940c18ba",
    "conversion": {
      "client_rate": "31.60308",
      "currency_pair": "USDTHB"
    },
    "currency": "USD",
    "direct_id": "0",
    "failure_reason": "",
    "failure_returned_amount": "",
    "fee_amount": "0.4",
    "fee_currency": "USD",
    "fee_paid_by": "OURS",
    "payment_date": "2025-09-17",
    "payment_type": "LOCAL",
    "payout_amount": "3160.3",
    "payout_currency": "THB",
    "payout_id": "3357f314-14bd-477a-bdf8-12245e863f98",
    "payout_way": "API",
    "quote_id": "a202824c-2f93-4561-b298-b5bba76d8a10",
    "reason": "audiovisual services",
    "reference": "cross currency INR test",
    "short_reference": "P250917-VKVAKHWQ",
    "short_reference_id": "P250917-VKVAKHWQ",
    "status": "COMPLETED",
    "unique_request_id": ""
  }
}

Additional Considerations

Different payout currencies may have specific parameter requirements:

INR Payouts

  • Upload invoice files in the documentation field of the payout request

COP Payouts

Include additional information in the beneficiary's additional_info:

FieldTypeRequired ForDescriptionExample
id_typestringIndividual beneficiariesID typePASSPORT, NATIONAL_ID, DRIVERS_LICENSE
id_numberstringIndividual beneficiariesID numberA1234567
tax_idstringCompany beneficiariesTax ID123456
msisdnstringAll beneficiariesMobile number in format +[country code][phone number]+65111111

Related Documentation