> ## 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.

# Create Payout

> Create a payout to an external destination



## OpenAPI

````yaml /issuing/api-reference/openapi.yaml post /payouts
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:
    post:
      tags:
        - Payouts
      summary: Create Payout
      description: Create a payout to an external destination
      operationId: createPayout
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              discriminator:
                propertyName: method
                mapping:
                  BANK_SWIFT:
                    $ref: '#/components/schemas/BankAccount'
                  UNIONPAY:
                    $ref: '#/components/schemas/UnionPayAccount'
                  BANK_TRANSFER:
                    $ref: '#/components/schemas/BankTransferAccount'
              required:
                - destination
                - quoteId
                - accountId
                - sourceOfFunds
                - purpose
                - source
              properties:
                method:
                  type: string
                  enum:
                    - BANK_SWIFT
                    - UNIONPAY
                    - BANK_TRANSFER
                source:
                  type: object
                  description: Required for UNIONPAY method only
                  required:
                    - firstName
                    - surname
                    - nationality
                    - address
                    - idType
                    - idNumber
                    - dateOfBirth
                  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).
                      nullable: true
                      example: '+85212345678'
                destination:
                  type: object
                  oneOf:
                    - $ref: '#/components/schemas/UnionPayAccount'
                    - $ref: '#/components/schemas/BankAccount'
                    - $ref: '#/components/schemas/BankTransferAccount'
                  description: Payout destination
                quoteId:
                  type: string
                  format: uuid
                  description: Quote ID
                purpose:
                  type: string
                  description: |
                    The purpose of the payout. Possible values are

                    - self-use
                    - household
                    - personal-savings
                    - family-living-expenses
                  enum:
                    - self-use
                    - buy-goods
                    - spending
                    - household
                    - payroll
                    - personal-savings
                    - family-living-expenses
                    - company-expense
                sourceOfFunds:
                  type: string
                  description: |
                    The fund source of this payout

                    - income
                    - household
                    - friends-loan
                    - company-fund
                    - personal-investment
                    - personal-savings
                    - wages
                  enum:
                    - income
                    - household
                    - friends-loan
                    - company-fund
                    - personal-investment
                    - personal-savings
                    - wages
                accountId:
                  type: string
                  format: uuid
                  example: 6a3176fe-7715-4fe0-a548-034912d7f800
                  description: Account id to payout from
                remarks:
                  type: string
                  description: The remarks of the payout
                idempotencyKey:
                  $ref: '#/components/schemas/IdempotencyKey'
                xid:
                  $ref: '#/components/schemas/Xid'
                xmetadata:
                  $ref: '#/components/schemas/Xmetadata'
      responses:
        '200':
          description: Payout Requested
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payout'
        '400':
          description: Bad Request - Invalid payout parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: number
                    example: 400
                  error:
                    type: string
                    example: Bad Request
                  message:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                          - SOURCE_ADDRESS_VALIDATION_FAILED
                          - DESTINATION_ADDRESS_VALIDATION_FAILED
                        example: DESTINATION_ADDRESS_VALIDATION_FAILED
                      message:
                        type: string
                        example: >-
                          Destination address validation failed. Address must be
                          longer than 20 characters and contain at least one
                          space and one number.
components:
  schemas:
    BankAccount:
      type: object
      title: Bank Account (SWIFT)
      properties:
        type:
          type: string
          title: Account Type
          description: The type of bank account
          default: BANK_ACCOUNT
        accountNumber:
          type: string
          description: The account number of the bank account
          example: 123456
        routingNumber:
          type: string
          description: The routing number of the bank account
          example: 1234
        country:
          type: string
          description: The country of the bank account
          example: US
        bankName:
          type: string
          description: The name of the bank where the account is held
          example: Bank of America
        bankAddress:
          type: string
          description: The address of the bank where the account is held
          example: 123 Main St, New York, NY 10001, USA
        swiftCode:
          type: string
          description: The SWIFT code of the bank where the account is held
          example: BOFAUS3N
        accountHolderName:
          type: string
          description: The name of the account holder
          example: John Doe
        accountHolderAddress:
          type: string
          description: The address of the account holder
          example: 456 Park Ave, New York, NY 10022, USA
    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...
    IdempotencyKey:
      type: string
      description: >-
        Unique idempotency key for ensuring exactly-once execution of mutating
        requests.
      format: string
      example: xeev1she5eegh9daiviethahchoo1muW
    Xid:
      type: string
      description: >-
        External identifier, unique across all resources created under this
        account.
    Xmetadata:
      type: object
      description: External metadata
      example:
        key1: value1
        key2:
          - value2.1
          - value2.2
      additionalProperties: true
      oneOf:
        - type: string
        - type: array
          items:
            type: string
    Payout:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Id'
        xid:
          $ref: '#/components/schemas/Xid'
        xmetadata:
          $ref: '#/components/schemas/Xmetadata'
        created:
          type: string
          format: date-time
        method:
          type: string
          description: Payout method
          enum:
            - BANK_SWIFT
            - UNIONPAY
        destination:
          oneOf:
            - $ref: '#/components/schemas/BankAccount'
            - $ref: '#/components/schemas/UnionPayAccount'
            - $ref: '#/components/schemas/UnionPayAccount'
        accountId:
          type: string
          format: uuid
          example: 6a3176fe-7715-4fe0-a548-034912d7f800
          description: Account id to fund the payout from
        sourceCurrency:
          type: string
          description: Currency to send
        sourceAmount:
          type: number
          description: Amount to send
        destinationCurrency:
          type: string
          description: Receive currency
          example: RMB
        destinationAmount:
          type: number
          description: Receive amount
        rate:
          type: number
          description: Exchange rate
        updated:
          type: string
          format: date-time
        status:
          type: string
          enum:
            - requested
            - processing
            - completed
            - failed
            - cancelled
          description: |
            Overall status of the payout:
            - `requested`: Payout has been requested but not yet processing
            - `processing`: Payout is being processed (may include AML review)
            - `completed`: Payout has been successfully completed
            - `failed`: Payout failed to process
            - `cancelled`: Payout was cancelled
        subStatus:
          type: string
          nullable: true
          description: >
            Detailed sub-status providing additional context about the payout
            state.


            **Important Sub-Statuses:**

            - `ORDER_UNDER_AML_REVIEW`: The payout is under Anti-Money
            Laundering (AML) compliance review.
              When in this state:
              * The payout **cannot be cancelled** by users or API calls
              * The transaction is held pending manual compliance review
              * Status will remain `processing` until review is complete
              * After review, it will move to `completed` or `cancelled` by the payment gateway

            Other sub-statuses may exist for different processing stages.
          example: ORDER_UNDER_AML_REVIEW
        cancellationReason:
          type: string
          description: Reason for cancellation (only present when status is `cancelled`)
    Id:
      type: string
      format: uuid
      description: ID of resource
  securitySchemes:
    Basic:
      type: http
      scheme: basic
    Bearer:
      type: http
      scheme: bearer
      bearerFormat: JWT

````