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

# Send Email OTP

> Send OTP to user email address for verification

# Send Email OTP

Sends a 6-digit OTP to the user's registered email address.

<ParamField path="userId" type="string" required>
  The unique user ID
</ParamField>

## Request

```bash theme={null}
curl -X POST https://api.stablepay.global/v2/users/usr_abc123/verify/email/send \
  -H "Authorization: Bearer YOUR_API_KEY"
```

## Response

```json theme={null}
{
  "success": true,
  "message": "OTP sent to your email",
  "data": {
    "maskedEmail": "ra****@example.com",
    "expiresIn": 600
  }
}
```

<Note>
  * OTP is valid for **10 minutes**
  * Maximum **3 OTP requests** per 10 minutes (rate limited)
  * Previous OTPs are invalidated when a new one is sent
  * User must have an email address on file
</Note>

## Errors

| Code                | Description                            |
| ------------------- | -------------------------------------- |
| `Not Found`         | User not found                         |
| `No Email`          | User does not have an email address    |
| `Already Verified`  | Email is already verified              |
| `Too Many Requests` | Rate limit exceeded (max 3 per 10 min) |

<ResponseExample>
  ```json 200 theme={null}
  {
    "success": true,
    "message": "OTP sent to your email",
    "data": {
      "maskedEmail": "ra****@example.com",
      "expiresIn": 600
    }
  }
  ```

  ```json 400 theme={null}
  {
    "error": "No Email",
    "message": "User does not have an email address"
  }
  ```

  ```json 400 theme={null}
  {
    "error": "Already Verified",
    "message": "Email is already verified"
  }
  ```

  ```json 429 theme={null}
  {
    "error": "Too Many Requests",
    "message": "Too many OTP requests. Please try again later."
  }
  ```
</ResponseExample>
