# OTP SMS

Using OTP's (One Time Passwords) for Sign-up, Sign-in, and 2FA (Two Factor Authentication) has become quite mainstream. You know how it works. You send a code to the mobile number of your end user. They enter that code in your app. You verify whether it is the correct code and let the user sign-in or sign-up or do whatever.

The whole process involves a few steps in case you wish to roll it on your own. It's not very complicated, but you still need to wrangle some code.

1. **Random Code Generator:** A small script that generates a random 'time bound one time password (OTP)'.
2. **Send Script:** To trigger an OTP SMS based on user input. (Pro Tip: The OTP SMS needs to be delivered on the 'Transactional Route')
3. **Verify Script:** When a user sends you back the OTP, you need to verify it's correctness and expiry time bound (say 5 minutes).
4. **Database:** A DB table where you store the OTP sent along with the timestamp for later verification.
5. **Rate Limiting:** So that a rouge agent does not request too many SMS's that shoot up your bill.   &#x20;

### Happy and time saving news for you!&#x20;

The SMS module in Send With SES now comes with a '**OTP SMS Template'** to handle all the above for you. You edit the template to suit your requirement ...&#x20;

![](https://1895149818-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LUFI_-_gHZ4pIVzoRlq%2Fuploads%2FQLD4N7GqimvrV7eu2ady%2FScreen%20Shot%202021-11-03%20at%2012.13.14%20PM.png?alt=media\&token=1cb74bd9-2bb9-4028-accd-be5023f80401)

... and then trigger the ***Send API*** ...&#x20;

```
// Send API
{
      "method": "POST",
      "url": "https://api.sendwithses.com/send-otp",
      "headers": {"template-key": "a2aa10a6S7SDRBzRODj09OkeXelA2"},
      "body": {
          "sender_id": "ABCDEF"
          "origination_number": "+449876543212"
          "mobile": "+449876543210",
       }
}
```

... followed by the ***Verify API***.

```
// Verify API
{
      "method": "POST",
      "url": "https://api.sendwithses.com/verify-otp",
      "headers": {"template-key": "a2aa10a6S7SDRBzRODj09OkeXelA2"},
      "body": {
          "mobile": "+449876543210"
          "otp": "123456",
       }
}
```

### Every SMS is transparently tracked along with the cost.

![](https://1895149818-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LUFI_-_gHZ4pIVzoRlq%2Fuploads%2FplmMMrT2QdqeWMnBh2s1%2FSEND_WITH_SES.png?alt=media\&token=5147f695-b748-4ed0-8b79-b0894085fa4f)

### No Extra Charges.

Starting 1-Nov-2021, this feature has been enabled for all users. There are no extra charges for using the OTP SMS feature. You only pay the [SMS cost](https://aws.amazon.com/sns/sms-pricing/) that is charged directly by AWS to you.

#### Don't have a Send With SES account? You can [signup for the free plan](https://www.sendwithses.com).
