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

# OTP

> Códigos de uso único para fluxos de verificação

## Campos

| Campo       | Tipo         | Descrição                                                           |
| ----------- | ------------ | ------------------------------------------------------------------- |
| `otpId`     | `UUID`       | Identificador único                                                 |
| `userId`    | `UUID`       | Referência ao usuário                                               |
| `code`      | `String`     | Credencial protegida do código OTP (nunca armazenado em texto puro) |
| `context`   | `OtpContext` | Contexto de uso do código                                           |
| `recipient` | `String`     | Destinatário da entrega (telefone do usuário)                       |
| `expiresAt` | `DateTime`   | Data de expiração do código                                         |
| `usedAt`    | `DateTime?`  | Data em que o código foi utilizado                                  |
| `createdBy` | `UUID?`      | Usuário que criou o registro, quando aplicável                      |
| `createdAt` | `DateTime`   | Data de criação                                                     |
| `updatedBy` | `UUID?`      | Usuário que fez a última atualização, quando aplicável              |
| `updatedAt` | `DateTime`   | Data da última atualização                                          |

## Relacionamentos

* Relaciona-se com [User](/data-modelling/identity/user)

## Regras de Negócio

* O código tem vida curta — expira em **2 minutos** após a criação (`expiresAt`).
* Apenas a versão protegida do `code` é mantida; o valor em texto puro só existe no momento da entrega ao destinatário.
* Uso único — após validado, `usedAt` é preenchido e o código não pode ser reutilizado.
* O campo `context` determina o fluxo ao qual o OTP está associado.

## Enums

### OtpContext

| Valor            | Descrição                          |
| ---------------- | ---------------------------------- |
| `RESET_PASSWORD` | Recuperação de senha               |
| `RESET_PHONE`    | Verificação para troca de telefone |
| `RESET_EMAIL`    | Verificação para troca de email    |

## Example

```json theme={null}
{
  "otpId": "0197a7fb-5227-7e39-a12d-ae3f6d50a732",
  "userId": "0197a7f5-2a88-7c1e-9b65-1f6d8f3b3a10",
  "code": "$protected_otp_hash",
  "context": "RESET_PASSWORD",
  "recipient": "+5511987654321",
  "expiresAt": "2026-07-03T12:02:00.000Z",
  "usedAt": null,
  "createdBy": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
  "createdAt": "2026-07-03T12:00:00.000Z",
  "updatedBy": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
  "updatedAt": "2026-07-03T12:00:00.000Z"
}
```
