> ## Documentation Index
> Fetch the complete documentation index at: https://www.cashfree.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Validate Payout

> Validates a UPI VPA or phone number and returns a single-use transfer token valid for one hour. Pass this token to the [Process Validated Payout API](/api-reference/payouts/v2/verify-and-pay-transfers-v2) (`POST /payout/transfers`) to initiate the payout.

In the request body, pass the value for exactly one of `vpa` or `phone`, not both.

The response contains either basic or advanced VPA details. Advanced details include IFSC branch information. To enable advanced details for your account, fill the [Support Form](https://merchant.cashfree.com/merchants/landing?env=prod&raise_issue=1).




## OpenAPI

````yaml post /payout/validatePayout
openapi: 3.1.0
info:
  title: Payouts
  version: '4'
servers:
  - url: https://payout-api.cashfree.com
    description: Production
  - url: https://payout-gamma.cashfree.com
    description: Sandbox
security:
  - {}
paths:
  /payout/validatePayout:
    post:
      summary: Validate Payout
      description: >
        Validates a UPI VPA or phone number and returns a single-use transfer
        token valid for one hour. Pass this token to the [Process Validated
        Payout API](/api-reference/payouts/v2/verify-and-pay-transfers-v2)
        (`POST /payout/transfers`) to initiate the payout.


        In the request body, pass the value for exactly one of `vpa` or `phone`,
        not both.


        The response contains either basic or advanced VPA details. Advanced
        details include IFSC branch information. To enable advanced details for
        your account, fill the [Support
        Form](https://merchant.cashfree.com/merchants/landing?env=prod&raise_issue=1).
      operationId: validate-payout-v2
      parameters:
        - name: x-client-id
          in: header
          required: true
          description: >-
            Client app ID. You can find your app ID in the [Merchant
            Dashboard](https://merchant.cashfree.com/payouts/developers/api-keys).
          schema:
            type: string
            example: <CLIENT_ID>
        - name: x-client-secret
          in: header
          required: true
          description: >-
            Client secret key. You can find your secret key in the [Merchant
            Dashboard](https://merchant.cashfree.com/payouts/developers/api-keys).
          schema:
            type: string
            example: <CLIENT_SECRET>
        - name: x-api-version
          in: header
          required: true
          description: Payouts API version for this request.
          schema:
            type: string
            example: '2024-01-01'
        - name: Content-Type
          in: header
          required: true
          description: MIME type of the request or response content.
          schema:
            type: string
            example: application/json
        - name: X-Request-Id
          in: header
          required: false
          description: >-
            Request ID for the API call. Can be used to resolve tech issues.
            Communicate this in your tech related queries to Cashfree.
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              description: >-
                Identifies this validation attempt and the beneficiary to
                resolve on UPI. Send `transfer_id` plus exactly one of `vpa` or
                `phone`.
              required:
                - transfer_id
              properties:
                transfer_id:
                  type: string
                  description: >-
                    Unique ID for this transfer. Use only letters, numbers,
                    hyphens, and underscores. Maximum 40 characters.
                  example: 123451XX
                vpa:
                  type: string
                  description: >-
                    Virtual Payment Address (VPA) on UPI to validate. In the
                    request body, pass the value for exactly one of `vpa` or
                    `phone`, not both.
                  example: success@upi
                phone:
                  type: string
                  description: >-
                    Phone number used to resolve the beneficiary VPA on UPI. In
                    the request body, pass the value for exactly one of `phone`
                    or `vpa`, not both.
                  example: '9999999999'
      responses:
        '200':
          description: >-
            Always returns HTTP 200 when the request is accepted. Use
            `account_status`, `transfer_token`, and related fields to judge VPA
            validity and any advanced IFSC metadata.
          content:
            application/json:
              examples:
                VPABasicDetails:
                  summary: Success — VPA valid, basic details
                  value:
                    transfer_token: 9d37bc17-db08-476b-8206-f0f8ec9661ad
                    vpa: success@upi
                    account_status: VALID
                    name_at_bank: JOHN SNOW
                VPAAdvancedDetails:
                  summary: Success — VPA valid, advanced details (IFSC included)
                  value:
                    transfer_token: f2c3a40a-0055-49ee-9c60-4882c8a013ed
                    ifsc: IDFB0080186
                    vpa: success@upi
                    account_status: VALID
                    name_at_bank: JOHN SNOW
                    ifsc_details:
                      bank: IDFC FIRST Bank
                      neft: Live
                      imps: Live
                      rtgs: Live
                      upi: Live
                      address: >-
                        GROUND FLOOR, 876, KUVEMPU CIRCLE, JAWAHARLAL NEHRU MAIN
                        ROAD, BEML LAYOUT 4TH STAGE, RAJA RAJESHWARI NAGAR,
                        BANGALORE - 560098
                      city: BANGALORE
                      state: KARNATAKA
                      branch: BANGALORE - RAJA RAJESHWARI NAGAR BRANCH
                      category: SUB_MEMBER
                      swift_code: ABCDINBBDCL
                      micr: 560751026
                      nbin: 123123
                VPAInvalid:
                  summary: Success — VPA invalid (no token issued)
                  value:
                    transfer_token: ''
                    vpa: invalid@upi
                    account_status: INVALID
              schema:
                type: object
                description: >-
                  Validation outcome: transfer token, account status,
                  beneficiary name, and optional IFSC metadata when advanced
                  responses are enabled.
                properties:
                  transfer_token:
                    type: string
                    description: >-
                      Single-use token, valid for one hour, for the [Process
                      Validated Payout
                      API](/api-reference/payouts/v2/verify-and-pay-transfers-v2).
                      Empty string when `account_status` is `INVALID`.
                  vpa:
                    type: string
                    description: >-
                      Virtual Payment Address returned or confirmed for this
                      validation.
                  account_status:
                    type: string
                    description: >-
                      Whether the resolved beneficiary account is `VALID` or
                      `INVALID` for payout.
                    enum:
                      - VALID
                      - INVALID
                  name_at_bank:
                    type: string
                    description: Present when `account_status` is `VALID`.
                  ifsc:
                    type: string
                    description: >-
                      Indian Financial System Code (IFSC), an 11-character
                      identifier for a bank branch in India. Returned only when
                      the response includes advanced VPA details (with
                      `ifsc_details`).
                  ifsc_details:
                    type: object
                    description: >-
                      Branch metadata for the returned IFSC, including fields
                      such as bank name, address, city, state, and which
                      transfer rails (for example NEFT, IMPS, RTGS, UPI) are
                      live. Returned only when the response includes advanced
                      VPA details.
        '400':
          description: 'Bad request: invalid or missing fields.'
          content:
            application/json:
              examples:
                VpaAndPhoneBothMissing:
                  summary: Neither vpa nor phone provided
                  value:
                    type: invalid_request_error
                    code: phone_and_vpa_both_missing
                    message: >-
                      phone and vpa : none of them are present in the request.
                      please pass either of them to validate the payout
                VpaAndPhoneBothProvided:
                  summary: Both vpa and phone provided
                  value:
                    type: invalid_request_error
                    code: phone_and_vpa_both_provided
                    message: >-
                      phone and vpa : both are present in the request. please
                      pass either of them to validate the payout
                PhoneInvalid:
                  summary: Phone number invalid
                  value:
                    type: invalid_request_error
                    code: phone_invalid
                    message: 'phone : invalid value provided.'
                VpaInvalid:
                  summary: VPA format invalid
                  value:
                    type: invalid_request_error
                    code: vpa_invalid
                    message: 'vpa : please provide a valid vpa.'
                TransferIdInvalidChars:
                  summary: Transfer ID contains invalid characters
                  value:
                    type: invalid_request_error
                    code: transfer_id_invalid
                    message: >-
                      transfer_id : can contain only alphabets , numbers ,
                      hyphen and underscore.
                TransferIdMissing:
                  summary: Transfer ID missing
                  value:
                    type: invalid_request_error
                    code: transfer_id_missing
                    message: 'transfer_id : missing in the request'
                TransferIdTooLong:
                  summary: Transfer ID exceeds 40 characters
                  value:
                    type: invalid_request_error
                    code: transfer_id_length_exceeded
                    message: 'transfer_id : should not be more than 40 characters long.'
              schema:
                type: object
                description: Structured error for invalid requests (HTTP 400).
                properties:
                  type:
                    type: string
                    description: >-
                      Error category from Cashfree (for example
                      `invalid_request_error`).
                  code:
                    type: string
                    description: Machine-readable error code for this failure.
                  message:
                    type: string
                    description: Human-readable explanation suitable for logs or support.
        '409':
          description: 'Conflict: transfer ID already exists.'
          content:
            application/json:
              examples:
                TransferIdConflict:
                  summary: Transfer ID already exists
                  value:
                    type: invalid_request_error
                    code: conflict_with_transfer_id
                    message: transfer_id already exists
              schema:
                type: object
                description: >-
                  Structured error when the transfer ID conflicts with an
                  existing record (HTTP 409).
                properties:
                  type:
                    type: string
                    description: >-
                      Error category from Cashfree (for example
                      `invalid_request_error`).
                  code:
                    type: string
                    description: Machine-readable error code for this failure.
                  message:
                    type: string
                    description: Human-readable explanation suitable for logs or support.
        '422':
          description: 'Unprocessable: feature not enabled for this merchant.'
          content:
            application/json:
              examples:
                FeatureNotEnabled:
                  summary: Feature not enabled for this merchant
                  value:
                    type: invalid_request_error
                    code: failed_to_process_request
                    message: feature not enabled
              schema:
                type: object
                description: >-
                  Structured error when the merchant account cannot use this
                  capability (HTTP 422).
                properties:
                  type:
                    type: string
                    description: >-
                      Error category from Cashfree (for example
                      `invalid_request_error`).
                  code:
                    type: string
                    description: Machine-readable error code for this failure.
                  message:
                    type: string
                    description: Human-readable explanation suitable for logs or support.
      servers:
        - url: https://api.cashfree.com
          description: Production
        - url: https://sandbox.cashfree.com
          description: Sandbox

````