> ## Documentation Index
> Fetch the complete documentation index at: https://developer.utgl.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Validate Payout Parameters

> Validate payout parameters and destination before processing a payout request.

This endpoint is currently supported for the UNIONPAY and BANK_TRANSFER methods, and is intended to ensure that the payout request meets the necessary minimum criteria for successful processing.
Note that even a pre-validated payout may still fail to be processed if the destination is invalid for other reasons not checked by this endpoint.

**Special Validation for Korea (KR) Bank Transfer:**
When destinationCountry is "KR" and destinationCurrency is "KRW":
- mobileNumber is required in destination information
- mobileNumber must be in E.164 format (e.g. +82123456789)
- If mobileNumber does not start with "+82", email is required in destination information
- If destinationAmount is provided: Must be greater than or equal to 5 KRW
- If sourceAmount is provided: Must result in a destination amount greater than or equal to 5 KRW




## OpenAPI

````yaml /issuing/api-reference/openapi.yaml post /payouts/validate
openapi: 3.1.0
info:
  title: API Reference
  version: '1.0'
servers:
  - url: https://access.utgl.io/v1
  - url: https://sandbox.access.utgl.io/v1
security:
  - Basic: []
  - Bearer: []
tags:
  - name: Accounts
  - name: Transactions
  - name: Card Accounts
  - name: Card Products
  - name: Cards
  - name: Digital Custody
  - name: Fee
  - name: Payout
paths:
  /payouts/validate:
    post:
      tags:
        - Payouts
      summary: Validate Payout Parameters
      description: >
        Validate payout parameters and destination before processing a payout
        request.


        This endpoint is currently supported for the UNIONPAY and BANK_TRANSFER
        methods, and is intended to ensure that the payout request meets the
        necessary minimum criteria for successful processing.

        Note that even a pre-validated payout may still fail to be processed if
        the destination is invalid for other reasons not checked by this
        endpoint.


        **Special Validation for Korea (KR) Bank Transfer:**

        When destinationCountry is "KR" and destinationCurrency is "KRW":

        - mobileNumber is required in destination information

        - mobileNumber must be in E.164 format (e.g. +82123456789)

        - If mobileNumber does not start with "+82", email is required in
        destination information

        - If destinationAmount is provided: Must be greater than or equal to 5
        KRW

        - If sourceAmount is provided: Must result in a destination amount
        greater than or equal to 5 KRW
      operationId: validatePayout
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              discriminator:
                propertyName: method
                mapping:
                  UNIONPAY:
                    $ref: '#/components/schemas/UnionPayAccount'
              required:
                - method
                - destination
              properties:
                method:
                  type: string
                  enum:
                    - UNIONPAY
                    - BANK_TRANSFER
                amount:
                  type: number
                  description: Destination amount of payout
                currency:
                  type: string
                  description: Destination currency of payout
                source:
                  type: object
                  description: Optional source information for the payout sender
                  properties:
                    firstName:
                      type: string
                    surname:
                      type: string
                    nationality:
                      type: string
                      example: Hong Kong
                    address:
                      type: string
                      description: >-
                        The address of the source. Can be in Chinese or English.
                        Must be longer than 20 characters and contain at least
                        one space and one number. Chinese characters will be
                        automatically converted to pinyin.
                    idType:
                      type: string
                      enum:
                        - national-id
                        - passport
                    idNumber:
                      type: string
                    dateOfBirth:
                      type: string
                      format: date
                      example: '1999-09-09'
                    mobileNumber:
                      type: string
                      description: >
                        Mobile / phone number of the sending individual [E.164
                        format, e.g. +85212345678].

                        Required when destination country is ID (Indonesia).

                        Required when destination country is KR (Korea).
                      nullable: true
                      example: '+85212345678'
                  required:
                    - firstName
                    - surname
                    - nationality
                    - address
                    - idType
                    - idNumber
                    - dateOfBirth
                destination:
                  type: object
                  description: Payout destination
                  oneOf:
                    - $ref: '#/components/schemas/UnionPayAccount'
                      example:
                        method: UNIONPAY
                        destination:
                          accountNumber: '6250948200000004'
                          firstName: CHEN
                          surname: DAWEN
                    - $ref: '#/components/schemas/BankTransferAccount'
                      example:
                        method: BANK_TRANSFER
                        destination:
                          country: KR
                          firstName: John
                          surname: Smith
                          bankCode: '001'
                          bankAccountNumber: '1234567890'
                          bankName: Shinhan Bank
                          bankAddress: Seoul, Korea
                          mobileNumber: '+82123456789'
      responses:
        '200':
          description: Payout Parameters Validated
          content:
            application/json:
              schema:
                type: object
                properties:
                  valid:
                    type: boolean
                    description: Whether the payout destination is valid
                  message:
                    type: string
                    description: Message describing the validation result
        '400':
          description: Payout Parameters Invalid
          content:
            application/json:
              schema:
                type: object
                oneOf:
                  - $ref: '#/components/schemas/PayoutValidationError'
                description: >-
                  The response will contain one of the validation error objects
                  listed below.
components:
  schemas:
    UnionPayAccount:
      title: UnionPay Card Account
      type: object
      required:
        - accountNumber
        - firstName
        - firstNameCN
        - surname
        - surnameCN
        - address
      properties:
        accountNumber:
          type: string
          description: >-
            UnionPay account​ number (mainland china resident account holders
            only)
          pattern: ^\d{16,19}$
          example: 6225888888888888
        firstName:
          type: string
          description: Account holder's first name
          example: DAWEN
        firstNameCN:
          type: string
          description: Account holder first name in Chinese
          pattern: ^[\u4e00-\u9fa5]+$
          example: 大文
        surname:
          type: string
          description: Account holder surname
          example: CHEN
        surnameCN:
          type: string
          description: The receiver's surname in Chinese
          example: 陈
        address:
          type: string
          description: >-
            The account's address. Can be in Chinese or English. Must be longer
            than 20 characters and contain at least one space and one number.
            Chinese characters will be automatically converted to pinyin.
          example: 上海市黄浦区南京东路333号202室
    BankTransferAccount:
      title: Bank Transfer Account
      type: object
      required:
        - country
        - firstName
        - surname
        - bankCode
        - bankAccountNumber
        - bankName
        - bankAddress
      properties:
        country:
          type: string
          description: >
            The country code associated with the bank account (ISO 3166-1
            alpha-2 format).

            Currently supported countries and their corresponding currencies:

            - HK (Hong Kong): CNH, HKD

            - PH (Philippines): PHP

            - IN (India): INR

            - ID (Indonesia): IDR


            Note: The destination currency must match one of the supported
            currencies for the selected country.
          enum:
            - HK
            - PH
            - IN
            - ID
          example: HK
        firstName:
          type: string
          description: >-
            The first name of the account holder as it appears on the bank
            account.
          example: John
        surname:
          type: string
          description: >-
            The surname (last name) of the account holder as it appears on the
            bank account.
          example: Smith
        dateOfBirth:
          type: string
          format: date
          description: The date of birth of the account holder in YYYY-MM-DD format.
          nullable: true
          example: '1990-01-15'
        mobileNumber:
          type: string
          description: >
            The mobile phone number of the account holder [E.164 format, e.g.
            +85212345678].

            Required when country is ID (Indonesia).

            Required when country is KR (Korea).
          nullable: true
          example: '+85212345678'
        email:
          type: string
          description: >
            The email address of the account holder.

            Required when destinationCountry is "KR" and mobileNumber does not
            start with "+82".
          nullable: true
          example: john.smith@example.com
        address:
          type: string
          description: >-
            The address of the account holder, optional for HK (Hong Kong), PH
            (Philippines), IN (India), but required for all other countries. Can
            be in Chinese or English. Must be longer than 20 characters and
            contain at least one space and one number. Chinese characters will
            be automatically converted to pinyin.
          nullable: true
          example: 123 Main Street, Central, Hong Kong
        branchCode:
          type: string
          description: >
            The branch code of the bank, required for country/countries IN
            (India).
          nullable: true
          example: '001'
        swiftCode:
          type: string
          description: >
            The SWIFT/BIC code of the bank.

            Optional for HK (Hong Kong), PH (Philippines), IN (India), but
            required for all other countries.

            This code is essential for international transfers to correctly
            route the payment to the recipient's bank.
          nullable: true
          example: HSBCHKHHHKH
        iban:
          type: string
          description: |
            The International Bank Account Number (IBAN).
            Primarily used for European banks and some international transfers.
          nullable: true
          example: GB29 NWBK 6016 1331 9268 19
        bankCode:
          type: string
          description: >
            The bank code or routing number specific to the country's banking
            system.

            Format varies by country (e.g., sort code for UK, routing number for
            US).
          example: '004'
        bankAccountNumber:
          type: string
          description: The bank account number of the recipient.
          example: '1234567890'
        sortCode:
          type: string
          description: |
            The sort code - primarily used for UK banks.
            Format: XX-XX-XX (6 digits with hyphens).
          nullable: true
          example: 12-34-56
        bankName:
          type: string
          description: The full name of the bank.
          example: HSBC Hong Kong
        bankAddress:
          type: string
          description: The full address of the bank branch.
          example: 1 Queen's Road Central, Hong Kong
        bankAccountProof:
          type: string
          description: >
            Proof of the bank account ownership.

            This can be a bank statement, account opening document, or
            screenshot showing account details.

            The document should clearly show the account holder name and account
            number.
          nullable: true
          example: data:application/pdf;base64,JVBERi0xLjQK...
    PayoutValidationError:
      type: object
      properties:
        code:
          type: string
          enum:
            - UNIONPAY_INVALID_BANK_ACCOUNT
            - UNIONPAY_AMOUNT_EXCEEDS_LIMIT
            - UNIONPAY_INVALID_CURRENCY
            - UNIONPAY_AMOUNT_LESS_THAN_LIMIT
            - UNIONPAY_INVALID_BANK_ACCOUNT_TYPE
            - UNIONPAY_INVALID_CARD_NUMBER
            - UNIONPAY_INVALID_CUSTOMER_NAME
            - UNIONPAY_INVALID_TRANSACTION_TYPE
            - UNIONPAY_BANK_ACCOUNT_NUMBER_NOT_MATCH
            - UNIONPAY_BANK_ACCOUNT_NAME_NOT_MATCH
            - UNIONPAY_AMOUNT_EXCEEDS_DAILY_LIMIT
            - UNIONPAY_AMOUNT_EXCEEDS_MONTHLY_LIMIT
            - UNIONPAY_BANK_ACCOUNT_AND_CODE_NOT_MATCH
            - UNIONPAY_BANK_ACCOUNT_AND_BRANCH_CODE_NOT_MATCH
            - UNIONPAY_BANK_ACCOUNT_NAME_NOT_MATCH_CUSTOMER_OR_ID
            - UNIONPAY_BANK_ACCOUNT_NAME_NOT_MATCH_ID
            - UNIONPAY_INVALID_ID_CARD_NUMBER
            - UNIONPAY_INVALID_ID_CARD_TYPE
            - UNIONPAY_ID_CARD_EXPIRED
            - UNIONPAY_ID_CARD_NAME_NOT_MATCH_CUSTOMER_NAME
            - UNIONPAY_ID_CARD_NUMBER_NOT_MATCH_CUSTOMER_NAME
            - UNIONPAY_CUSTOMER_NAME_NOT_MATCH_ID_CARD_NAME
            - UNIONPAY_INVALID_TRANSACTION_AMOUNT
            - UNIONPAY_INVALID_EMAIL
            - UNIONPAY_INVALID_ADDRESS
            - UNIONPAY_CARD_EXPIRED
            - UNIONPAY_CARD_INACTIVE
            - UNIONPAY_SUSPICIOUS_TRANSACTION
            - UNIONPAY_SYSTEM_ERROR
            - UNIONPAY_TRANSACTION_NOT_ALLOWED
            - UNIONPAY_EXCEEDS_WITHDRAWAL_LIMIT
            - UNIONPAY_EXCEEDS_WITHDRAWAL_FREQUENCY
            - UNIONPAY_SECURITY_ERROR
            - UNIONPAY_SUSPECTED_FRAUD
            - UNIONPAY_CARD_NOT_EFFECTIVE
            - UNIONPAY_SERVICE_PROVIDER_ERROR
            - UNIONPAY_UNSPECIFIED_FAILURE
            - UNIONPAY_TIMEOUT
            - UNIONPAY_SYSTEM_MALFUNCTION
            - SOURCE_ADDRESS_VALIDATION_FAILED
            - DESTINATION_ADDRESS_VALIDATION_FAILED
          description: Validation failure code for the validation failure.
        message:
          type: string
          description: Message describing the failed validation.
      example:
        UNIONPAY_INVALID_BANK_ACCOUNT:
          code: UNIONPAY_INVALID_BANK_ACCOUNT
          message: >-
            The provided bank account is invalid. Please double-check the bank
            account details and try again.
        SOURCE_ADDRESS_VALIDATION_FAILED:
          code: SOURCE_ADDRESS_VALIDATION_FAILED
          message: >-
            Source address validation failed. Address must be longer than 20
            characters and contain at least one space and one number.
        DESTINATION_ADDRESS_VALIDATION_FAILED:
          code: DESTINATION_ADDRESS_VALIDATION_FAILED
          message: >-
            Destination address validation failed. Address must be longer than
            20 characters and contain at least one space and one number.
  securitySchemes:
    Basic:
      type: http
      scheme: basic
    Bearer:
      type: http
      scheme: bearer
      bearerFormat: JWT

````