---
title: "Send OTP V2"
method: POST
path: "/v2/otp/send"
tags: ["SMS OTP"]
---

# Send OTP V2

`POST /v2/otp/send`

## Request

- Base URL: `https://api.verihubs.com`
- URL: `https://api.verihubs.com/v2/otp/send`
- Auth: none declared. Required headers: `App-ID`, `API-Key`

SMS OTP version change is by introducing a new API version release.<br>

Version changes usually need to be applied immediately to the latest version, in order to get a better API usage experience than the previous version.<br>

The benefits you get if you use a newer version are as follows.
- Decreasing processing time in API Request and Response
- Improve feature in SMS: Blocking Request, Spam Check, Sequential Phone Number, and Blocked Numbers
- Increase RPS in SMS (before 30rps to 50rps)
- Better developer environment to support future developments
- Improve logging and monitoring on our side
- Improved dependencies and improved service stability<br>

This method helps you to generate and send sms containing one-time password to destination number<br>

Rate limit of 50 RPS is applied to SMS service. Verihubs also apply rate limit divided into several categories based on product. More explanation [link](https://docs.verihubs.com/docs/rate-limit)<br>

#### Callback Description
When you want to use callback_url payload, you only need to put for example 
```
your-callback-url.com/callback
```
Example callback that we'll send
```
your-callback-url.com/callback?session_id=d0f5fb5c-2d50-4d3f-aea7-20018ab15806&status=1
```

Payload       | Description          |
-----------|:---------------------|
session_id        | ID of the specific message            | 
status        | Latest status of the request             |

#### Status Description

Status       | Description          | Condition |
-----------|:---------------------|:-------------------------- |
0        | Requested            | SMS OTP has been requested. |
1        | Delivered            | SMS OTP has been delivered to destination number. This status will be charged. |
2        | Verified            | SMS OTP has been verified using verify OTP API. This status will be charged. |
3        | Not Verified            | SMS OTP has not been verified after the time limit. This status will be charged. |
4        | Failed            | Operator cannot send SMS OTP to destination number |
5        | Request Error            | Verihubs cannot reach Operator |
6        | Rejected           | Request rejected due to Too Many Requests|
7        | Undelivered             | SMS OTP has not been delivered to destination number (response received from Operator). This status will be charged.                |
8        | No Delivery Report               | Delivered without Delivery Report from Operator after certain period. This status will be charged.          |
9        | Blocked             | Destination Number has been blocked by Verihubs's system          |

## Headers

- `App-ID` string, required
- `API-Key` string, required

## Request body

- SendOtp
  - `msisdn` string, required: Destination Phone Number. You need to include the international prefix number and also find your local prefix number [here.](https://docs.verihubs.com/docs/supported-local-operator-prefix)
  - `template` string: Optional.Template to be send to destination number. In the template, you must mention the brand name according to the Sender ID and include $OTP in template for generated OTP.
  - `otp` string: Optional. Code generated by client.
  - `time_limit` string: Optional. Expiration time for verify OTP in seconds.
  - `challenge` string: This value is a category. You can verify OTP based on the same challenge.
  - `callback_url` string: Optional. This URL will be called by the server when the desired event will occur.

## Response `201`

Successful Request

- ResponseSendOTP
  - `message` string, required: Message
  - `otp` string, required: Code received by destination number.
  - `msisdn` string, required: Destination number with international prefix country code.
  - `session_id` string, required: Generated ID which associated with verification request.
  - `segment_count` integer: Segment Count is the number of SMS segmentation which is calculated by the GSM-7 and UTF-16 encoding system based on the SMS content sent. This segment count becomes a reference for calculating the cost of using SMS services. More explanation [link](https://docs.verihubs.com/docs/sms-segment-count-explanation)

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden
- `409`: Conflict
- `429`: Too Many Request
- `500`: Internal Server Error

## Changes

- **2026-11-03** `c1a5653952bb`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/verihubs/apis/sms-api-documentation/changes/v2/otp/send/post.md)

---

[API](https://skmtc.dev/verihubs/apis/sms-api-documentation.md) - [All operations](https://skmtc.dev/verihubs/apis/sms-api-documentation/llms.txt) - [OpenAPI document](https://skmtc.dev/verihubs/apis/sms-api-documentation/revisions/c1a5653952bb?raw)
