logo

1. Authentication

1.1 Get Token

➡️
The API is used to obtain the token, which is set on the request header. The token expires after one hour. You can get a new token before it expires or get a new token for requests.
  • URI
    • POST /payout/oauth/token
  • Body Param
    • REQUEST BODY SCHEMA: application/JSON
      Body Json Demo
      Name
      Type
      Required
      Description
      appKey
      string
      Required
      appkey; From xCurrency Hubs
      secretKey
      string
      Required
      secretKey; From xCurrency Hubs
  • Response
    • Name
      Type
      Required
      Description
      data
      string
      Conditional Required
      if the status is 1,the token is responded
      status
      string
      Required
      1 : Success -1: Error
      message
      string
      Conditional Required
      if the status is -1,the err message is responded
      Response Status: 200, Body Json Demo
      Response Status: 400, Body Json Demo

1.2 Check

➡️
The API is used to verify the sign data, will return true when the sign data is correct, and will return 10001 when the sign method error.
  • URI
    • POST /payout/encrypt/check
  • Body Params
    • Encrypted object, not necessarily dictionary type
      Body Json Demo
  • Response
    • Name
      Type
      Required
      Description
      status
      string
      Required
      1 : Success 10001: Failed to verify the signature
      message
      string
      Conditional Required
      if the status is 10001,the err message is responded
      Response Status: 200, Body Json Demo
      Response Status: 400, Body Json Demo

2. Rate Manager

2.1 Get a rate

💡
The API is used to get the currency rate.
  • URI
    • POST /global/payout/rate/query/price
  • Body Params
    • Body Json Demo
      Name
      Type
      Required
      Description
      sourceCurrency
      string
      Required
      Currency you are sending
      targetCurrency
      string
      Required
      Target currency
  • Response
    • Name
      Type
      Required
      Description
      data
      object
      Conditional Required
      data → queryNo
      string
      Conditional Required
      data → rate
      number
      Conditional Required
      status
      string
      Required
      1 : Success -1: Error
      message
      string
      Conditional Required
      if the status is -1,the err message is responded
      Response Status: 200, Body Json Demo
      Response Status: 400, Body Json Demo

3. Order Manager

➡️
This part of the API is designed to improve your order management, including Creating, Querying, and Updating……

3.1 Transfer Create

➡️
The API is used to create a payment on xCurrency hubs, so orderNo should be unique. The same order number can create a payment once. When the HTTP status is 400, and the response data has not traded, the payment failed on xCurrency Hubs' side. Please check the response message or contact xCurrency Hubs' team.
  • URI
    • POST /global/payout/transfer/create
  • Body Param
    • Body Json Demo
Global Payout Create Order Table
Name
Type
Description
orderNo
string
256
Merchant Unique Order No
lockRate
boolean
queryNo
string
256
purpose
string
256
Purpose of remittance Enum: - Salary - Family Support - Payroll - Goods - Service - Tuition - Insurance - Travel - Rent - Living Go here to see the detailed description of the purpose code.
subpurpose
string
256
Sub Purpose of remittance 1. when the purpose is Goods: - CLOTHES_BAGS_SHOES_CLOTHES - DAILY_SUPPLIES_AND_COSMETICS - ELECTRONICS_AND_HOME_APPLIANCES - TOYS_KIDS_BABIES 2. when the purpose is Service: - INTERPRETATION_SERVICE  - TRANSLATION_SERVICE  - HUMAN_RESOURCE_SERVICE  - ESTATE_AGENCY_SERVICE  - SOFTWARE_DEVELOPMENT_SERVICE  - WEB_DESIGN_OR_DEVELOPMENT_SERVICE  - DRAFTING_LEGAL_SERVICE  - LEGAL_RELATED_CERTIFICATION_SERVICE  - ACCOUNTING_SERVICE TAX_SERVICE  - ARCHITECTURAL_DECORATION_DESIGN_SERVICE  - ADVERTISING_SERVICE MARKET_RESEARCH_SERVICE  - EXHIBITION_BOOTH_SERVICE - OTHER_SERVICE
fundsSource
string
256
Source of funds Enum  - Business income - Employment income - Part-time income - Saving deposits
relationship
string
256
The relationship with payer and beneficiary
sourceAmount
float
256
sourceCurrency
string
3
targetAmount
float
256
targetCurrency
string
3
beneficiary
object
Details for the beneficiary . If beneficiaryId provided then beneficiary should be empty
beneficiary → fullName
string
256
beneficiary → firstName
string
256
beneficiary → lastName
string
256
beneficiary → accountInfo
object
Beneficiary Account Info
beneficiary → accountType
string
32
- bank - alipay - wechat
beneficiary → accountInfo → name
string
256
Account Name
beneficiary → accountInfo → bankName
string
256
Account Bank Name
beneficiary → accountInfo → currency
string
3
Account Currency
beneficiary → accountInfo → number
string
256
Account Number
beneficiary → accountInfo → address
string
256
Account Address
beneficiary → accountInfo → routingType
string
256
- Enum - bsb - swift - sort - ifsc - aba - alipay - wechat
beneficiary → accountInfo → routingValue
string
256
When the routingType is not empty
beneficiary → entityType
string
1
I : Individual B: Business
beneficiary → idNumber
string
256
Certificate number
beneficiary → idType
string
256
- Enum - idcard - passport - driver - residence - workpermit - other
beneficiary → nationality
string
2
Nationality (ISO 3166-1 two-digit code, e.g. CN, US, JP)
beneficiary → phoneCode
string
10
beneficiary → phoneNumber
string
256
beneficiary → email
string
256
beneficiay → gender
string
10
required once the entityType is Individual - Enum - Male - FeMale
beneficiary → address
object
beneficiary → address → state
string
256
beneficiary → address →city
string
256
beneficiary → address → address
string
256
beneficiary → address → street
string
256
beneficiary → address → postCode
string
256
beneficiary → address → country
string
2
Country of Address (ISO 3166-1 two-digit code, e.g. CN, US, JP)
beneficiary → address → district
string
256
beneficiary → occupation
string
256
beneficiary → idIssueDate
string
256
Certificate Issue Date (format YYYY-MM-DD)
beneficiary → idExpiryDate
string
256
Certificate Deadline (Format YYYY-MM-DD)
beneficiaryId
string
256
If you know the id of your beneficiary in advance, then you can submit all the information instead
payer
object
Details for the payer . If payerId provided then payer should be empty
payer→ firstName
string
256
payer → lastName
string
256
payer → fullName
string
256
payer → nationality
string
2
Nationality (ISO 3166-1 two-digit code, e.g. CN, US, JP)
payer → phoneNumber
string
256
payer → phoneCode
string
10
payer → email
string
256
payer → idNumber
string
256
Certificate number
payer → idType
string
256
- Enum - idcard - passport - driver - residence - workpermit - other
payer → idCountry
string
2
Country of Certificate (ISO 3166-1 two-digit code, e.g. CN, US, JP)
payer → idIssueDate
string
256
Certificate Issue Date (format YYYY-MM-DD)
payer → idExpiryDate
string
256
Certificate Deadline (Format YYYY-MM-DD)
payer → gender
string
10
- Enum - Male - FeMale
payer → entityType
string
1
I : Individual B: Business
payer → dob
string
10
Date of Birth (Format YYYY-MM-DD)
payer → reference
string
32
Reference from payer to beneficiary
payer → address
object
payer → address → state
string
256
payer → address → city
string
256
payer → address → street
string
256
payer → address → postCode
string
256
payer → address → address
string
256
Full residential address
payer → address → country
string
2
Country of Address (ISO 3166-1 two-digit code, e.g. CN, US, JP)
payer → accountInfo
object
payer → accountInfo → number
string
256
payer → accountInfo → bankName
string
256
payer → occupation
string
256
payerId
string
256
If you know the id of your payer in advance, then you can submit all the information instead
logisticsCompany
string
256
logisticsNumber
string
256
paymentType
string
32
Enum - DepositPayment - FullPayment - FinalPayment
transactionMode
string
256
Enum - cnyMode - originalMode - crossMode
  • Response
    • Name
      Type
      Required
      Description
      status
      string
      Required
      1 : Success Other status please reference appendix
      message
      string
      Conditional Required
      if the status is not 1,the err message is responded
      data
      object
      Conditional Required
      data - tradeId
      string
      256
      Required
      Uniqued id in the XC system
      data - status
      string
      256
      Required
      string
      Response Status: 200, Body Json Demo
      Response Status: 400, Body Json Demo

3.2 Transfer Update

➡️
The API is used to update the order info when the order information is wrong
  • URI
    • POST /global/payout/transfer/update
  • Body Param
    • Body Json Demo
Global Payout Create Order Table (1)
Name
Type
Description
orderNo
string
256
Merchant Unique Order No
lockRate
boolean
queryNo
string
256
purpose
string
256
Purpose of remittance Enum: - Salary - Family Support - Payroll - Goods - Service - Tuition - Insurance - Travel - Rent - Living Go here to see the detailed description of the purpose code.
subpurpose
string
256
Sub Purpose of remittance (Only required when accountType is alipay) 1. when the purpose is Goods: - CLOTHES_BAGS_SHOES_CLOTHES - DAILY_SUPPLIES_AND_COSMETICS - ELECTRONICS_AND_HOME_APPLIANCES - TOYS_KIDS_BABIES 2. when the purpose is Service: - INTERPRETATION_SERVICE  - TRANSLATION_SERVICE  - HUMAN_RESOURCE_SERVICE  - ESTATE_AGENCY_SERVICE  - SOFTWARE_DEVELOPMENT_SERVICE  - WEB_DESIGN_OR_DEVELOPMENT_SERVICE  - DRAFTING_LEGAL_SERVICE  - LEGAL_RELATED_CERTIFICATION_SERVICE  - ACCOUNTING_SERVICE TAX_SERVICE  - ARCHITECTURAL_DECORATION_DESIGN_SERVICE  - ADVERTISING_SERVICE MARKET_RESEARCH_SERVICE  - EXHIBITION_BOOTH_SERVICE - OTHER_SERVICE
fundsSource
string
256
Source of funds Enum  - Business income - Employment income - Part-time income - Saving deposits
relationship
string
256
The relationship with payer and beneficiary
sourceAmount
float
256
sourceCurrency
string
3
targetAmount
float
256
targetCurrency
string
3
beneficiary
object
Details for the beneficiary . If beneficiaryId provided then beneficiary should be empty
beneficiary → fullName
string
256
beneficiary → firstName
string
256
beneficiary → lastName
string
256
beneficiary → accountInfo
object
Beneficiary Account Info
beneficiary → accountType
string
32
- bank - alipay - wechat
beneficiary → accountInfo → name
string
256
Account Name
beneficiary → accountInfo → bankName
string
256
Account Bank Name
beneficiary → accountInfo → currency
string
3
Account Currency
beneficiary → accountInfo → number
string
256
Account Number
beneficiary → accountInfo → address
string
256
Account Address
beneficiary → accountInfo → routingType
string
256
- Enum - bsb - swift - sort - ifsc - aba - alipay - wechat
beneficiary → accountInfo → routingValue
string
256
When the routingType is not empty
beneficiary → entityType
string
1
I : Individual B: Business
beneficiary → idNumber
string
256
Certificate number
beneficiary → idType
string
256
- Enum - idcard - passport - driver - residence - workpermit - other
beneficiary → nationality
string
2
Nationality (ISO 3166-1 two-digit code, e.g. CN, US, JP)
beneficiary → phoneCode
string
10
beneficiary → phoneNumber
string
256
beneficiary → email
string
256
beneficiay → gender
string
10
required once the entityType is Individual - Enum - Male - FeMale
beneficiary → address
object
beneficiary → address → state
string
256
beneficiary → address →city
string
256
beneficiary → address → address
string
256
beneficiary → address → street
string
256
beneficiary → address → postCode
string
256
beneficiary → address → country
string
2
Country of Address (ISO 3166-1 two-digit code, e.g. CN, US, JP)
beneficiary → address → district
string
256
beneficiary → occupation
string
256
beneficiary → idIssueDate
string
256
Certificate Issue Date (format YYYY-MM-DD)
beneficiary → idExpiryDate
string
256
Certificate Deadline (Format YYYY-MM-DD)
beneficiaryId
string
256
If you know the id of your beneficiary in advance, then you can submit all the information instead
payer
object
Details for the payer . If payerId provided then payer should be empty
payer→ firstName
string
256
payer → lastName
string
256
payer → fullName
string
256
payer → nationality
string
2
Nationality (ISO 3166-1 two-digit code, e.g. CN, US, JP)
payer → phoneNumber
string
256
payer → phoneCode
string
10
payer → email
string
256
payer → idNumber
string
256
Certificate number
payer → idType
string
256
- Enum - idcard - passport - driver - residence - workpermit - other
payer → idCountry
string
2
Country of Certificate (ISO 3166-1 two-digit code, e.g. CN, US, JP)
payer → idIssueDate
string
256
Certificate Issue Date (format YYYY-MM-DD)
payer → idExpiryDate
string
256
Certificate Deadline (Format YYYY-MM-DD)
payer → gender
string
10
- Enum - Male - FeMale
payer → entityType
string
1
I : Individual B: Business
payer → dob
string
10
Date of Birth (Format YYYY-MM-DD)
payer → reference
string
32
Reference from payer to beneficiary
payer → address
object
payer → address → state
string
256
payer → address → city
string
256
payer → address → street
string
256
payer → address → postCode
string
256
payer → address → address
string
256
Full residential address
payer → address → country
string
2
Country of Address (ISO 3166-1 two-digit code, e.g. CN, US, JP)
payer → accountInfo
object
payer → accountInfo → number
string
256
payer → accountInfo → bankName
string
256
payer → occupation
string
256
payerId
string
256
If you know the id of your payer in advance, then you can submit all the information instead
logisticsCompany
string
256
logisticsNumber
string
256
paymentType
string
32
Enum - DepositPayment - FullPayment - FinalPayment
transactionMode
string
256
Enum - cnyMode - originalMode - crossMode
  • Response
    • Name
      Type
      Required
      Description
      status
      string
      Required
      1 : Success Other status please reference appendix
      message
      string
      Conditional Required
      if the status is not 1,the err message is responded
      data
      object
      Conditional Required
      data - tradeId
      string
      256
      Required
      Uniqued id in the XC system
      data - status
      string
      256
      Required
      string
      Response Status: 200, Body Json Demo
      Response Status: 400, Body Json Demo

3.3 Query Order Status

➡️
This API is used to query the order status
  • URI
    • POST /global/payout/transfer/query/status
  • Body Params
    • Body Json Demo
  • Response
    • Response Status: 200, Body Json Demo
      Response Status: 400, Body Json Demo

3.4 Notification

➡️
host: xxxxxxxxx , xxxxxxxx is your callback URL; the xCurrency Hubs will be notified back at xxxxxxxx/xcurrency/webhook. Need to IP allowlist if you have a limit.
  • URI
    • POST /xxxxxxxx
  • Headers
    • appkey: xCurrency Hubs' appkey is used for secondary verification and is not required.
  • Body Params
    • Body Json Demo
  • Response
    • Return JSON data
      Response Status: 200, Body Json Demo
      Response Status: 400, Body Json Demo

3.5 Async confirm transfer

➡️
This API is used to send CNY to the beneficiary's bank account, support concurrency.
  • URI
    • POST /global/payout/transfer/async
  • Body Params
    • Body Json Demo
  • Response
    • Response Status : 200, Body Json Demo
      Response Status : 400, Body Json Demo

4. Balance

4.1 New FX-Conversion

  • URI
    • GET /global/payout/wallet/new-fx-conversion
  • Body Params
    • Body Json Demo
Parameter Name
Data Type
Required
Description
sourceCurrency
string
Required
The currency code from which the amount is to be converted.
targetCurrency
string
Required
The currency code to which the amount is to be converted.
sourceAmount
float
Conditional
targetAmount
float
Conditional
queryNo
string
Required
A unique identifier for the exchange rate, obtained from /global/payout/rate/query/price.
walletType
string
Required
Enumerated type specifying the wallet type where the converted funds should be placed. Valid values are personal or business.
  • Responses
Field Name
Data Type
Description
status
string
Indicates the success or failure of the request.
data.convertedAmount
float
data.transactionId
string
data.walletType
string
Enumerated type specifying the wallet type where the converted funds should be placed. Valid values are personal or business.
Response Status: 200, Body Json Demo
Response Status: 400, Body Json Demo

4.2 Get All balance-transaction

  • URI
    • GET /global/payout/wallet/list
  • Responses
Field Name
Data Type
Description
status
String
Indicates the success or failure of the request. 1 : Success -1: Error
data
Array
An array of objects, each representing a transaction.
data[].walletId
String
Unique identifier for the wallet.
data[].currency
String
data[].amount
String
Available balance
data[].totalAmount
String
Total balance = available + in transit
data[].type
String
Wallet type: personal/business
Response Status: 200, Body Json Demo
Response Status: 400, Body Json Demo

4.3 Balance for single wallet type

💡
Get balance information by wallet type
  • URI
    • GET /global/payout/wallet/get
  • Query Params
    • Response
      • Response Status : 200, Body Json Demo
        Response Status : 400, Body Json Demo

    5. Online Validation

    5.1 Query Chinese Hanzi Character Information

    • URI
      • GET /global/payout/validation/query-chinese-characters
    • Body Params
      • Body Json Demo
    Parameter Name
    Data Type
    Required
    Description
    pinyinName
    string
    Yes
    The pinyin transcription of the Chinese name.
    idNumber
    string
    Conditional
    Personal ID number (required for individuals).
    uionSocialCreditCode
    string
    Conditional
    Busiess entity union social credit code (required for business entity). The Unified Social Credit Code (USCC) is a unique, 18-digit national business registration number issued to all businesses and other entities in China.
    • Responses
    Field Name
    Data Type
    Description
    status
    string
    Indicates the success or failure of the request. 1 : Success -1: Error
    data.pinyinName
    string
    The Pinyin name used in the query.
    data.idNumber
    string
    The ID number used in the query.
    data.hasChineseCharacters
    boolean
    True if Chinese characters exist for the query; otherwise, false.
    data.chineseCharacters
    string
    The Chinese characters corresponding to the input Pinyin name, if available.
    Response Status: 200, Body Json Demo
    Response Status: 400, Body Json Demo

    5.2 User Information Validation for 3/4 Key Elements

    • URI
      • POST /payout/common/bank/check
    • Body Params
      • Body Json Demo
    Parameter Name
    Data Type
    Required
    Description
    type
    string
    Yes
    The type you want to check. Example: Three elements "check3", four elements "check4”.
    idNumber
    string
    Yes
    Personal ID number.
    name
    string
    Yes
    Personal names.
    account
    string
    Yes
    Personal collection bank account number.
    phone
    string
    Conditional
    Personal phone number. If type is check3, it is not required
    • Responses
    Field Name
    Data Type
    Description
    status
    string
    Indicates the success or failure of the request. 1 : verify successfully -1 : There are required fields left unfilled 10028 :verify failed
    data
    string
    The details of the verify result.
    Response Status: 200, Body Json Demo
    Response Status: 400, Body Json Demo

    5.3 Alipay Transaction Verification

    • URI
      • POST /global/payout/alipay/verification
    • Body Params
      • Body Json Demo
    Parameter Name
    Data Type
    Required
    Description
    purpose
    string
    Required
    Purpose of remittance Enum: - Salary - FamilySupport - Payroll - Service Note: When the purpose is Payroll, you must first add the customer (entity) in the backend. Once the customer has passed the review, you can then use this interface to verify the feasibility of the transaction. Required | Example: C2C wallet: ✅ | Salary C2C Bank: ✅ | Salary B2C wallet: ✅ | Payroll
    payer → fullName
    string
    Conditional
    If it is a payroll payment, please fill in the name of the company that pays the salary. Required | Example: C2C wallet: 🔲 | C2C Bank: 🔲 | B2C Payroll: ✅ | FutureHR Tech Pte. Ltd.
    payer → nationality
    string
    Conditional
    If it is a Payroll Payment, please fill in the country of registration/resident country of the company that issues the salary. Required | Example: C2C wallet: 🔲 | C2C Bank: 🔲 | B2C Payroll: ✅ | SG
    payer → address → country
    string
    Conditional
    If it is a Salary or Family Support payment, please fill in the country where the payer is located or resides. Required | Example: C2C wallet: ✅ | SG C2C Bank: ✅ | SG B2C Payroll:🔲 |
    beneficiary → firstName
    string
    Conditional
    Required | Example: C2C wallet: ✅ | DaWen C2C Bank: 🔲 | B2C Payroll:✅ | DaWen
    beneficiary → lastName
    string
    Conditional
    Required | Example: C2C wallet: ✅ | Chen C2C Bank: 🔲 | B2C Payroll:✅ | Chen
    beneficiary → fullName
    string
    Conditional
    If you are using the template Send_To_Bank_Accounts_Template_01, the name here must be in Chinese. Required | Example: C2C wallet: 🔲 | C2C Bank: ✅ | 陈大文 B2C Payroll: 🔲 |
    beneficiary → idNumber
    string
    Required
    If you are using the Send_To_Bank_Accounts_Template_01 template, currently only Chinese mainland ID cards are supported. Required | Example: C2C wallet: ✅ | 4109281989070941265 C2C Bank: ✅ | 4109281989070941265 B2C Payroll: ✅ | 4109281989070941265
    beneficiary → phoneNumber
    string
    Conditional
    Please fill in the mobile phone number reserved by the bank Required | Example: C2C wallet: 🔲 | C2C Bank: ✅ | 1321019329111 B2C Payroll: 🔲 |
    beneficiary → accountInfo → number
    string
    Conditional
    Required | Example: C2C wallet: 🔲 | C2C Bank: ✅ | 621529383736101111 B2C Payroll: 🔲 |
    beneficiary → accountInfo → routingType
    string
    Conditional
    Required | Example: C2C wallet: ✅ | alipay C2C Bank: 🔲 | B2C Payroll:✅ | alipay
    beneficiary → accountInfo → routingValue
    string
    Conditional
    Required | Example: C2C wallet: ✅ | 132029181431 C2C Bank: 🔲 | B2C Payroll:✅ | 132029181431
    beneficiary → address → country
    string
    Conditional
    Required | Example: C2C wallet: ✅ | CN C2C Bank: ✅ | CN B2C Payroll:🔲 |
    • Responses
    Field Name
    Data Type
    Description
    status
    string
    Indicates the success or failure of the request. 1: request successfully -1: request failed
    data
    string
    The details of the verify result.
    data → tradeId
    string
    The unique ID of this verification result. If you have any questions regarding the result, please provide this ID when contacting our support team.
    data → result
    string
    The result of this verification success | failed
    data → message
    string
    The message of this verification
    Success Result: Body Json Demo
    Failed Result: Body Json Demo

    6. Support Docs

    6.1 Docs Upload

    ➡️
    Upload supporting material order by Multipart
    • URI
      • POST /global/payout/transfer/upload/multipart
    • Form Data Params
      • Form Data Demo
    • Response
      • Response Status: 200, Body Json Demo
        Response Status: 400, Body Json Demo

    6.2 Upload Completed

    ➡️
    Completed uploading supporting material for business order
    • URI
      • POST /global/payout/transfer/upload/completed
    • Body Params
      • Body Json Demo
    • Response
      • Response Status: 200, Body Json Demo
        Response Status: 400, Body Json Demo