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

# Authorizing an OTP transaction

> After submitting a request to **Create a PayIn** using the mobile_money PayIn method, if the `stage` field is `authorize_otp`, it means an OTP has been sent to the wallet owner's phone. You should collect the OTP to authorize the Payin. Retrieve the OTP sent to the customer's phone and send a request to our authorization endpoint. If the OTP verification is successful, an STK prompt will be sent to the wallet owner's phone, prompting them to enter their PIN.



## OpenAPI

````yaml /api/openapi/v2-reference.yaml post /v2/payins/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/confirm_otp:
    post:
      tags:
        - Mobile Money
      summary: Authorizing an OTP transaction
      description: >-
        After submitting a request to **Create a PayIn** using the mobile_money
        PayIn method, if the `stage` field is `authorize_otp`, it means an OTP
        has been sent to the wallet owner's phone. You should collect the OTP to
        authorize the Payin. Retrieve the OTP sent to the customer's phone and
        send a request to our authorization endpoint. If the OTP verification is
        successful, an STK prompt will be sent to the wallet owner's phone,
        prompting them to enter their PIN.
      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: '123456'
      responses:
        '200':
          description: Verify OTP successful
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
              example:
                status: Ok
        '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 STK transaction(Sandbox only)](/api/mobile-money/authorizing-an-stk-transactionsandbox-only.md)
- [Authorising OTP transaction](/api/va-bank-transfer/authorising-otp-transaction.md)
