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

# How to Integrate SMS OTP

> Send a one-time password over SMS with OTP.ID using the public request and send endpoints.

Use this guide when you want OTP.ID to deliver an outbound SMS OTP. You send `channel: "sms"` to both [`POST /v3/request`](/api-reference/request-otp) and [`POST /v3/send`](/api-reference/send-otp), and OTP.ID sends the message to the phone number you provide.

SMS is a strong fit when you want a simple code-entry experience. The user receives a text message on the destination phone number, so the flow works without an installed messaging app or mobile data connectivity. Use an international phone number in digits-only format so OTP.ID can reach the correct destination.

## How the flow works

<Steps>
  <Step title="Create the OTP request">
    Call [`POST /v3/request`](/api-reference/request-otp) with `channel: "sms"` when you want OTP.ID to generate the code for you.
  </Step>

  <Step title="Or send your own code">
    Call [`POST /v3/send`](/api-reference/send-otp) with `channel: "sms"` when your application already has the code.
  </Step>

  <Step title="OTP.ID sends an SMS message">
    OTP.ID delivers the OTP as an outbound SMS to the destination number you submitted.
  </Step>

  <Step title="The user enters the code">
    Show a clear OTP entry UI in your app and let the user type or paste the code from the text message.
  </Step>

  <Step title="You verify the code">
    Submit the transaction ID and code through the verification flow described in the [Verify OTP guide](/guides/verify-otp).
  </Step>
</Steps>

## Request example

This example uses the canonical request shape in the [POST /v3/request API reference](/api-reference/request-otp).

```bash theme={null}
curl -X POST https://api.otp.id/v3/request \
  -H "Authorization: Bearer <api_key>" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "sms",
    "number": "6281234567890",
    "brand": "TokoKita",
    "ttl": 300
  }'
```

## What your UI should do

* Use a single OTP input or six separate digit boxes so the user can enter the code quickly.
* Show a resend action, but only after your own cooldown expires.
* Show the expiry time clearly so the user knows when the current code stops working.
* If delivery fails, tell the user to request a new code instead of retrying the same message automatically.
* Keep the verification action near the input so the user can finish the flow without leaving the screen.

## Related pages

* [Send OTP with WhatsApp, SMS, Email, or Missed Call](/guides/send-otp)
* [Verify a One-Time Password](/guides/verify-otp)
* [POST /v3/request reference](/api-reference/request-otp)
* [POST /v3/send reference](/api-reference/send-otp)
