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

# Send Verification Email

> Send an email verification token or link to the authenticated user

Sends a verification email to the authenticated user's registered email address. The token or link expires after **5 minutes**.

Requires a valid user access token. Returns immediately with `{ success: true }` if the user is already verified.

## Body Parameters

All parameters are optional.

<ParamField body="mode" type="&#x22;code&#x22; | &#x22;link&#x22;" default="&#x22;code&#x22;">
  Delivery mode.

  * `"code"` — The email contains a short token the user types into your app. Call the [Verify Email](/v8/api-reference/auth/verify-email) endpoint to complete verification.
  * `"link"` — The email contains a clickable button. When clicked, the server verifies the token and redirects the user (or renders a hosted confirmation page).
</ParamField>

<ParamField body="tokenFormat" type="&#x22;hex&#x22; | &#x22;numeric&#x22; | &#x22;alpha&#x22; | &#x22;alphanumeric&#x22;" default="&#x22;hex&#x22;">
  Character set used to generate the token.

  | Value | Example | Notes |
  | - | - | - |
  | `"hex"` | `a3f9c2...` | 64-character hex string. `tokenLength` is ignored. |
  | `"numeric"` | `048291` | Digits only (0–9). Good for OTP-style inputs. |
  | `"alpha"` | `GXRTPK` | Uppercase letters only (A–Z). |
  | `"alphanumeric"` | `B4KR9Z` | Uppercase letters and digits. |
</ParamField>

<ParamField body="tokenLength" type="number" default="6">
  Length of the generated token. Must be an integer between `4` and `12`. Ignored when `tokenFormat` is `"hex"`.
</ParamField>

<ParamField body="redirectUrl" type="string">
  A URL to redirect the user to after they click the verification link. Only used when `mode` is `"link"`.

  On success the query parameter `?verified=true` is appended. On failure, `?verified=false&error=invalid-or-expired-token` is appended instead.

  If omitted, the server renders a hosted success/error page.
</ParamField>

## Response

<ResponseField name="success" type="boolean">
  `true` when the request is processed without a server error (including when the user is already verified).
</ResponseField>

## Error Codes

| Code | Status | Description |
| - | - | - |
| `auth/not-password-user` | 400 | The authenticated user does not have an email/password account. |
| `auth/no-user-found` | 403 | The access token is valid but no matching user record exists (e.g. the account was already deleted). |

<Note>
  Each call generates a new token. A previous unused token remains valid in
  Redis until it either expires or the new one is consumed first.
</Note>

## See Also

* [`useSendVerificationEmail` hook](/v8/hooks/auth/use-send-verification-email)
* [Verify Email endpoint](/v8/api-reference/auth/verify-email)
* [Verify Email Link endpoint](/v8/api-reference/auth/verify-email-link)
* [Built-in Auth guide](/v8/sdk/authentication/built-in)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.