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

# Authorising OTP transaction

> After submitting a request to create a PayIn using the `kr_bank_va_kyc_krw` PayIn method, if the stage field is `authorize_otp`, it means an OTP has been generated and it has been sent to the owner's bank account. You need to collect the OTP to authorize the PayIn. Retrieve the OTP sent to the customer's bank account and send a request to our authorization endpoint. If the OTP verification is successful, the payment details, including a virtual bank account, will be sent to the webhook you provided.



## OpenAPI

````yaml /api/openapi/v2-reference.yaml post /v2/payins/bank/confirm_otp
openapi: 3.0.2
info:
  title: Multi-currency Payment APIs
  description: >-
    ## Introduction

    The Multi-currency Payment API Solution provides developers with a unified
    API schema to support multiple currencies efficiently. These APIs enable
    seamless transactions for both payin and payout operations, ensuring a
    robust, reliable, and scalable payment infrastructure for businesses dealing
    with various currencies.

    ### Key Features

    - **Single API Schema**: A single schema supports all currencies in your
    account, simplifying integration and management.

    - **Payin and Payout Process**:
      - **Step 1**: Call the **Get payin method list** to retrieve the list of supported methods.
      - **Step 2**: Call the **Get payin required fields** to get specific required fields for each method.
      - **Step 3**: Create the payment using the method and required fields from the previous step.
      - **Step 4**: On the sandbox environment, you can call the **Simulate payin** to simulate the payment.

    <div class="gst-note-red">
      Please note: GST should only be set to <code>true</code> for AU Merchants for <b>AUD</b> currency only. For all other currencies, set GST to <code>false</code>.
    </div>

    This documentation provides detailed guidance for integrating these
    capabilities into your application.
  version: 2.0.0
  termsOfService: https://helloclever.co/terms
  contact:
    email: support@helloclever.co
servers:
  - url: https://api.cleverhub.co/api
    description: Sandbox Environment
  - url: https://api-merchant.helloclever.co/api
    description: Production Environment
security:
  - app-id: []
    secret-key: []
paths:
  /v2/payins/bank/confirm_otp:
    post:
      tags:
        - VA Bank Transfer
      summary: Authorising OTP transaction
      description: >-
        After submitting a request to create a PayIn using the
        `kr_bank_va_kyc_krw` PayIn method, if the stage field is
        `authorize_otp`, it means an OTP has been generated and it has been sent
        to the owner's bank account. You need to collect the OTP to authorize
        the PayIn. Retrieve the OTP sent to the customer's bank account and send
        a request to our authorization endpoint. If the OTP verification is
        successful, the payment details, including a virtual bank account, will
        be sent to the webhook you provided.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - uuid
                - code
              properties:
                uuid:
                  type: string
                  description: Payin request ID
                code:
                  type: string
              example:
                uuid: APU221YS
                code: '123'
      responses:
        '200':
          description: Verify OTP successful
          content:
            application/json:
              schema:
                type: object
                properties:
                  pay_code:
                    type: object
                    properties:
                      virtual_account_number:
                        type: string
                      virtual_bank_code:
                        type: string
                      virtual_bank_name:
                        type: string
              example:
                pay_code:
                  virtual_account_number: '1234567890242'
                  virtual_bank_code: '035'
                  virtual_bank_name: Shinhan Bank
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: object
                    properties:
                      code:
                        type: string
                      message:
                        type: string
              example:
                errors:
                  code: REQUIRE_LOGIN
                  message: Not Authorised
components:
  securitySchemes:
    app-id:
      type: apiKey
      in: header
      name: app-id
      description: |
        A unique identifier assigned to each application.
    secret-key:
      type: apiKey
      in: header
      name: secret-key
      description: |
        A secure token associated with the `app-id`.

````

## Related topics

- [Create a Payin](/api/payin/create-a-payin.md)
- [Authorizing an OTP transaction](/api/mobile-money/authorizing-an-otp-transaction.md)
- [Multi-Currency Payin API Reference (v2)](/api/v2/payin.md)
