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

# Mobile Penny Drop Request

> Use this API to to validate bank account details by sending a one rupee UPI transaction to the provided mobile number and retrieving the associated bank account information.

View the [test data](https://www.cashfree.com/docs/api-reference/vrs/data-to-test-integration#mobile-penny-drop) and use the information to trigger the validations. The test data can be used only in the sandbox environment.



## OpenAPI

````yaml post /mobile/penny-drop
openapi: 3.0.0
info:
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
  contact:
    email: developers@cashfree.com
    name: API Support
    url: https://discord.com/invite/QdZkNSxXsB
  title: Cashfree Verification API's.
  version: '2023-12-18'
  description: >-
    Cashfree's Verification APIs provide different types of verification to our
    merchants.
servers:
  - description: Sandbox Server
    url: https://sandbox.cashfree.com/verification
  - description: Production Server
    url: https://api.cashfree.com/verification
security: []
tags:
  - name: Aadhaar
    description: Operations related to Aadhaar verification.
  - name: BAV V2
    description: Operations related to Bank account verification v2.
  - name: PAN
    description: Operations related to PAN verification.
  - name: Digilocker
    description: Operations related to Digilocker verification.
  - name: E-sign
    description: Operations related to E-sign verification.
  - name: Reverse Penny Drop
    description: Operations related to Reverse Penny Drop verification.
  - name: UPI Penny Drop
    description: Operations related to UPI Penny Drop verification.
  - name: Mobile Penny Drop
    description: Operations related to Mobile Penny Drop verification.
  - name: IP
    description: Operation related to IP verification.
  - name: UPI
    description: Operations related to UPI verification.
  - name: Passport
    description: Operation related to Passport verification.
  - name: CIN
    description: Operation related to CIN verification.
  - name: Name Match
    description: Operation related to Name Match verification.
  - name: PAN to GSTIN
    description: Operation related to PAN to GSTIN.
  - name: Face Match
    description: Operation related to Face Match verification.
  - name: Voter ID
    description: Operation related to Voter ID verification.
  - name: Reverse Geocoding
    description: Operation related to Reverse Geocoding.
  - name: Vehicle RC
    description: Operation related to Vehicle RC verification.
  - name: Driving License
    description: Operation related to Driving License verification.
  - name: GSTIN
    description: Operation related to GSTIN verification.
  - name: Account Aggregator
    description: Operations related to Account aggregator.
  - name: OTPLess
    description: Operations related to OTPLess Verification.
  - name: 1-Click
    description: Operations related to 1-Click.
  - name: Smart OCR
    description: Operations related to Smart OCR.
  - name: Geocoding
    description: Operations related to Geocoding.
  - name: Udyam
    description: Operation related to Udyam verification.
  - name: PAN to Udyam
    description: Operation related to PAN to Udyam.
paths:
  /mobile/penny-drop:
    post:
      tags:
        - Mobile Penny Drop
      summary: Mobile Penny Drop Request
      description: >-
        Use this API to to validate bank account details by sending a one rupee
        UPI transaction to the provided mobile number and retrieving the
        associated bank account information.


        View the [test
        data](https://www.cashfree.com/docs/api-reference/vrs/data-to-test-integration#mobile-penny-drop)
        and use the information to trigger the validations. The test data can be
        used only in the sandbox environment.
      operationId: VrsMobilePennyDropCreateRequest
      parameters:
        - $ref: '#/components/parameters/x_cf_signature'
        - $ref: '#/components/parameters/global_x_api_version'
      requestBody:
        $ref: '#/components/requestBodies/MobilePennyDropRequestBody'
      responses:
        '200':
          $ref: '#/components/responses/MobilePennyDropResponseBody'
        '400':
          $ref: '#/components/responses/Response400MobilePennyDrop'
        '401':
          $ref: '#/components/responses/Response401'
        '403':
          $ref: '#/components/responses/Response403'
        '409':
          $ref: '#/components/responses/Response409DuplicateId'
        '422':
          $ref: '#/components/responses/Response422PennyDrop'
        '429':
          $ref: '#/components/responses/Response429'
        '500':
          $ref: '#/components/responses/Response500'
        '502':
          $ref: '#/components/responses/Response502V2AuthorizedSourceDown'
      security:
        - XClientID: []
          XClientSecret: []
components:
  parameters:
    x_cf_signature:
      description: >-
        Send the signature if two-factor authentication is selected as Public
        Key.  [More
        details](https://www.cashfree.com/docs/api-reference/vrs/getting-started#2fa-api-signature-generation).
      name: x-cf-signature
      in: header
      required: false
      schema:
        type: string
      example: ''
    global_x_api_version:
      description: API version to be used. Format is in YYYY-MM-DD.
      name: x-api-version
      in: header
      required: true
      schema:
        type: string
        default: '2024-12-01'
        example: '2024-12-01'
      example: '2024-12-01'
  requestBodies:
    MobilePennyDropRequestBody:
      description: Find the request parameters to create a mobile penny drop request.
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/MobilePennyDropRequestSchema'
  responses:
    MobilePennyDropResponseBody:
      description: Success response for Mobile Penny Drop verification.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/MobilePennyDropResponseSchema'
          examples:
            Valid:
              value:
                verification_id: test_verification_id
                reference_id: 12345
                status: VALID
                ifsc: ICIC0006567
                vpa: success@upi
                mobile_number: '9988123456'
                account_type: SAVINGS
                name: JOHN DOE
                name_at_bank: JOHN DOE
                utr: '123456789012'
                bank_account: '1234567890'
                name_match_score: '95'
                name_match_result: MATCH
                ifsc_details:
                  bank: ICICI Bank
                  neft: Live
                  imps: Live
                  rtgs: Live
                  upi: Live
                  address: >-
                    GROUND FLOOR, 123, ABC CIRCLE, XYZ MAIN ROAD, BANGALORE -
                    560098
                  city: BANGALORE
                  state: KARNATAKA
                  branch: BANGALORE - RAJA RAJESHWARI NAGAR BRANCH
                  category: SUB_MEMBER
                  swift_code: ABCDINBBDCL
                  micr: 560751026
                  nbin: 1234
            Invalid:
              value:
                verification_id: test_verification_id
                reference_id: 12345
                status: INVALID
                mobile_number: '9988123456'
                account_type: null
                ifsc: null
                vpa: null
                name: null
                name_at_bank: null
                utr: null
                bank_account: null
                name_match_score: null
                name_match_result: null
                ifsc_details: {}
    Response400MobilePennyDrop:
      description: Validation errors for Mobile Penny Drop API.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponseSchema'
          examples:
            Invalid mobile number:
              $ref: '#/components/examples/InvalidMobileNumber'
            Mobile number Missing:
              $ref: '#/components/examples/MobileNumberMissing'
            Client ID/Client Secret in Missing:
              $ref: '#/components/examples/XClientIdMissing'
            Using-Test-Credentials-in-Prod:
              $ref: '#/components/examples/UsingTestCredentialsInProd'
    Response401:
      description: Invalid client ID and client secret combination.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponseSchema'
          examples:
            Invalid client ID and client secret combination:
              value:
                type: authentication_error
                code: authentication_failed
                message: Invalid clientId and clientSecret combination
    Response403:
      description: Authentication error (IP not whitelisted).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponseSchema'
          examples:
            IP not whitelisted:
              value:
                type: authentication_error
                code: ip_validation_failed
                message: >-
                  IP not whitelisted your current ip is 106.51.91.104.For IP
                  whitelisting assistance, visit our guide at
                  https://www.cashfree.com/docs/secure-id/get-started/integration/ip-whitelisting-verification
            x-cf-signature header missing:
              value:
                type: validation_error
                code: authentication_failed
                message: x-cf-signature missing in the request header
    Response409DuplicateId:
      description: Conflict error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponseSchema'
          examples:
            Conflict Error:
              value:
                type: validation_error
                code: verification_id_already_exists
                message: verification ID already exists
    Response422PennyDrop:
      description: >-
        Validation error for penny-drop requests. May indicate insufficient
        balance, fraud detection, or concurrent request checks.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponseSchema'
          examples:
            Insufficient balance:
              value:
                type: validation_error
                code: insufficient_balance
                message: Insufficient balance to process this request
            Fraud account:
              value:
                type: validation_error
                code: fraud_account
                message: Fraud activity detected for this account.
                error:
                  reference_id: 102
            Concurrent request in progress:
              value:
                type: validation_error
                code: verification_already_under_process
                message: verification already under process.
                error:
                  reference_id: 102
    Response429:
      description: Rate limit exceed error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponseSchema'
          examples:
            Rate limit error per operation:
              value:
                type: rate_limit_error
                code: too_many_requests_per_operation
                message: Too many requests for this operation, rate limit reached
            Rate limit error per IP:
              value:
                type: rate_limit_error
                code: too_many_requests_per_ip
                message: Too many requests from the IP, rate limit reached
    Response500:
      description: Internal error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponseSchema'
          examples:
            Internal Server Error:
              value:
                type: internal_error
                code: request_failed
                message: Unable to process your request. Try again after some time
    Response502V2AuthorizedSourceDown:
      description: Gateway error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponseSchema'
          examples:
            Bad Gateway:
              value:
                type: internal_error
                code: verification_failed
                message: >-
                  Authorised source is temporarily unavailable, please try again
                  shortly
  schemas:
    MobilePennyDropRequestSchema:
      type: object
      required:
        - verification_id
        - mobile_number
        - user_consent
      properties:
        verification_id:
          type: string
          description: >-
            It is the unique ID you create to identify the verification request.
            The maximum character limit is 50. Only alphaumeric, period (.),
            hyphen (-), and underscore ( _ ) are allowed.
          example: test_verification_id
        name:
          description: It is the name of the account holder.
          type: string
          example: John Doe
        mobile_number:
          description: It is the valid Mobile Number information.
          type: string
          example: '9999999999'
        user_consent:
          $ref: '#/components/schemas/ConsentSchema'
    MobilePennyDropResponseSchema:
      type: object
      properties:
        verification_id:
          type: string
          description: >-
            It is the unique ID you create to identify the verification request.
            The maximum character limit is 50. Only alphanumeric, period (.),
            hyphen (-), and underscore ( _ ) are allowed.
          example: test_verification_id
        reference_id:
          type: integer
          description: >-
            It displays the unique ID created by Cashfree Payments for reference
            purposes.

            format: `int64`
          example: 12345
        status:
          type: string
          description: It displays the status of the Mobile penny drop verification.
          example: SUCCESS
        ifsc:
          type: string
          nullable: true
          description: It displays the IFSC information associated with the VPA.
          example: ICIC0006567
        vpa:
          description: >-
            It is the valid UPI VPA information. Only alphanumeric, period (.),
            hyphen (-), underscore ( _ ), and at the rate of (@) are accepted.
          type: string
          example: success@upi
        account_type:
          type: string
          description: It is the account type information.
          example: SAVINGS
        mobile_number:
          type: string
          description: It is the mobile number information passed in request.
          example: '9876543210'
        name:
          type: string
          nullable: true
          description: It displays the name provided in the request for verification.
          example: JOHN DOE
        name_at_bank:
          type: string
          nullable: true
          description: >-
            It displays the name of the account holder as registered in the bank
            records.
          example: JOHN DOE
        utr:
          type: string
          nullable: true
          description: >-
            It displays the Unique Transaction Reference (UTR) number for the
            penny drop transaction.
          example: '123456789012'
        bank_account:
          type: string
          nullable: true
          description: It displays the bank account number associated with the VPA.
          example: '1234567890'
        name_match_score:
          type: string
          nullable: true
          description: >-
            It displays the name match score when name verification is
            performed.
          example: '95'
        name_match_result:
          type: string
          nullable: true
          description: It displays the result of name matching verification.
          example: MATCH
        ifsc_details:
          type: object
          description: It displays the details corresponding to the IFSC information.
          properties:
            bank:
              type: string
              description: It displays the name of the bank.
              example: ICICI Bank
            neft:
              type: string
              description: It displays the status of NEFT.
              example: Live
            imps:
              type: string
              description: It displays the status of IMPS.
              example: Live
            rtgs:
              type: string
              description: It displays the status of RTGS.
              example: Live
            upi:
              type: string
              description: It displays the status of UPI.
              example: Live
            address:
              type: string
              description: It displays the physical address information of the branch.
              example: GROUND FLOOR, 123, ABC CIRCLE, XYZ MAIN ROAD, BANGALORE - 560098
            city:
              type: string
              description: It displays the city name where the branch is located.
              example: BANGALORE
            state:
              type: string
              description: It displays the name of the state where the branch is located.
              example: KARNATAKA
            branch:
              type: string
              description: It displays the name of the branch.
              example: BANGALORE - RAJA RAJESHWARI NAGAR BRANCH
            category:
              type: string
              description: It displays the category of the bank.
              example: SUB_MEMBER
            swift_code:
              type: string
              description: >-
                It displays the code that identifies banks and financial
                institutions worldwide. The code helps pinpoint the specific
                bank.
              example: ABCDINBBDCL
            micr:
              type: integer
              description: It displays the MICR code that can be used to identify the bank.
              example: 560751026
            nbin:
              type: integer
              description: >-
                It displays the National Bank Identification Number (NBIN)
                information.
              example: 1234
    ErrorResponseSchema:
      type: object
      properties:
        code:
          type: string
          example: x-client-id_missing
        error:
          type: object
          example:
            ref_id: 102
        message:
          type: string
          example: x-client-id is missing in the request.
          description: It displays the outcome of the error.
        type:
          type: string
          example: validation_error
          description: It displays the type of error.
    ConsentSchema:
      description: Consent details to be used for verification.
      type: object
      required:
        - timestamp
        - purpose
        - obtained
        - type
      properties:
        obtained:
          type: boolean
          description: Indicates whether the user has given consent.
          example: true
        type:
          type: string
          description: >-
            It displays the type of user consent provided.

            Possible values are:

            - `EXPLICIT`: Consent is clearly given by the user to collect and
            process personal data.
          example: EXPLICIT
        timestamp:
          type: string
          format: date-time
          description: >-
            Timestamp when the consent was provided. The value must be in UTC
            and must be within 5 minutes before or after the current time.
          example: '2025-10-27T09:24:36Z'
        purpose:
          type: string
          description: >-
            The description of the consent. The length must be between 20 and
            100 characters. Allowed characters are alphanumeric, period (.),
            hyphen (-), slash (/), ampersand (&), and underscore (_).
          example: Testing the entire flow for penny drop verification
          minLength: 20
          maxLength: 100
  examples:
    InvalidMobileNumber:
      value:
        type: validation_error
        code: mobile_number_value_invalid
        message: mobile_number should be valid.
    MobileNumberMissing:
      value:
        type: validation_error
        code: mobile_number_missing
        message: mobile_number is missing in the request.
    XClientIdMissing:
      value:
        type: validation_error
        code: x-client-id_missing
        message: x-client-id is missing in the request.
    UsingTestCredentialsInProd:
      value:
        type: validation_error
        code: x-client-secret_value_invalid
        message: Client secret belongs to test environment
  securitySchemes:
    XClientID:
      type: apiKey
      in: header
      name: x-client-id
      description: >-
        Your unique client identifier issued by Cashfree. You can find this in
        your [Merchant
        Dashboard](https://merchant.cashfree.com/verificationsuite/developers/api-keys).
    XClientSecret:
      type: apiKey
      in: header
      name: x-client-secret
      description: >-
        The secret key associated with your client ID. Use this to authenticate
        your API requests. You can find this in your [Merchant
        Dashboard](https://merchant.cashfree.com/verificationsuite/developers/api-keys).

````