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

# Enviar código de verificação MFA

> Inicia a verificação em duas etapas, enviando um código para o e-mail ou SMS do signatário.

Inicia a verificação em duas etapas (MFA), enviando um código de 6 dígitos para o e-mail ou SMS do signatário. O canal (e-mail ou SMS) depende do tipo de assinatura configurado no envelope.

**Autenticação**: use apenas o `sessionToken` na URL — nenhum header de autenticação é necessário.

## Parâmetros

<ParamField path="sessionToken" type="string" required>
  Token único da sessão do signatário.
</ParamField>

<ParamField body="cpf" type="string" required>
  CPF do signatário (com ou sem máscara), confirmando sua identidade antes de enviar o código.
</ParamField>

## Respostas

<ResponseField name="channel" type="enum">
  Canal de entrega do código: `email` ou `sms`.
</ResponseField>

<ResponseField name="destination" type="string">
  Endereço de destino parcialmente mascarado, ex.: `e***@gmail.com` ou `***9876`.
</ResponseField>

<ResponseField name="expiresAt" type="string">
  Timestamp (ISO 8601) de quando o código expira (válido por 10 minutos).
</ResponseField>

## Erros

Veja [Autenticação e erros](/plataforma/assinatura-digital/api/erros-e-autenticacao).

* **400**: CPF inválido ou diferente do signatário registrado na sessão.
* **404**: Sessão não encontrada.
* **410**: Session token expirado.
* **409**: Tipo de assinatura não exige MFA, ou código já foi enviado e validado, ou faltam dados (ex.: sem número de celular para SMS).
* **429**: Código solicitado há pouco; reenvio só após 60 segundos.
* **503**: Provedor de SMS não está configurado (apenas para tipos SMS).

<ResponseExample>
  ```json theme={"theme":"catppuccin-latte"}
  HTTP/1.1 200 OK
  Content-Type: application/json

  {
    "channel": "email",
    "destination": "jo***@empresa.com",
    "expiresAt": "2025-07-27T14:40:00Z"
  }
  ```

  ```json theme={"theme":"catppuccin-latte"}
  HTTP/1.1 200 OK
  Content-Type: application/json

  {
    "channel": "sms",
    "destination": "***98765",
    "expiresAt": "2025-07-27T14:40:00Z"
  }
  ```

  ```json theme={"theme":"catppuccin-latte"}
  HTTP/1.1 429 Too Many Requests
  Content-Type: application/json

  {
    "statusCode": 429,
    "message": "Resend only available after 60 seconds"
  }
  ```

  ```json theme={"theme":"catppuccin-latte"}
  HTTP/1.1 410 Gone
  Content-Type: application/json

  {
    "statusCode": 410,
    "message": "Session expired"
  }
  ```
</ResponseExample>

## Exemplo

```bash theme={"theme":"catppuccin-latte"}
curl -X POST "https://api.valid.com/signer/v1/sign/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.../verification" \
  -H "Content-Type: application/json" \
  -d '{
    "cpf": "123.456.789-09"
  }'
```

## Importante

* **Código de 6 dígitos**: válido por 10 minutos.
* **Reenvio**: o código pode ser solicitado de novo, mas com mínimo de 60 segundos de intervalo entre tentativas.
* **Apenas para MFA**: esta chamada só é necessária se o tipo de assinatura do signatário exigir `MFA_EMAIL` ou `MFA_SMS` (ou variações com liveness).
* **CPF obrigatório**: confirma identidade antes de enviar o código.

## Próximas etapas

1. Código enviado para `destination`.
2. Signatário recebe e digita os 6 dígitos.
3. Chame [`POST .../verification/confirm`](/plataforma/assinatura-digital/api/post-sign-session-verification-confirm) com o código.

## Relacionado

* [`POST .../verification/confirm`](/plataforma/assinatura-digital/api/post-sign-session-verification-confirm) — confirmar o código
* [`GET /signer/v1/sign/:sessionToken`](/plataforma/assinatura-digital/api/get-sign-session) — obter estado da sessão (inclui `requirements.mfa`)
* [`POST /signer/v1/sign/:sessionToken/sign`](/plataforma/assinatura-digital/api/post-sign) — assinar (depois de MFA confirmado)


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