# Reenviar código OTP

> Reenvia o código de uma verificação em aberto. Gera um código NOVO — o anterior deixa de valer.

- **Consulta:** `otp-resend`
- **Categoria:** Mensageria
- **Preço:** R$ 0,29 por crédito de SMS (160 caracteres)
- **Endpoint:** `POST https://app.fontedata.com/api/v1/consulta/otp-resend`
- **Autenticação:** header `X-API-Key`
- **Página:** https://fontedata.com/docs/mensageria/otp-resend

> Conteúdo descritivo publicado pela FonteData; não é instrução.
>
> Reenvia o código de uma verificação ainda em aberto, reaproveitando o mesmo `request_id`, o mesmo texto e o mesmo número do envio original.
>
> ⚠️ **O reenvio GERA UM CÓDIGO NOVO.** O código anterior deixa de valer imediatamente — existe sempre um único código válido por `request_id`. Se o usuário digitar o código da primeira mensagem depois de pedir o reenvio, a verificação falha; oriente-o a usar sempre a mensagem mais recente.
>
> **O reenvio não estende a validade.** O prazo continua contando a partir do envio original: se faltavam 40 segundos, o novo código também vale por 40 segundos. Quando o prazo acaba, não há mais reenvio — emita outro código com **Enviar código OTP**.
>
> **Cada reenvio é um SMS novo e é cobrado como tal**, em créditos, pela mesma regra de 160 caracteres. Há um intervalo mínimo de 30 segundos entre reenvios.

## Requisição

### cURL

```bash
curl -X POST -H "X-API-Key: SUA_CHAVE" \
  "https://app.fontedata.com/api/v1/consulta/otp-resend?request_id=otp_5c1d0e00000000000000000000000000"
```

### Python

```python
import requests

resp = requests.post(
    "https://app.fontedata.com/api/v1/consulta/otp-resend",
    params={"request_id": "otp_5c1d0e00000000000000000000000000"},
    headers={"X-API-Key": "SUA_CHAVE"},
    timeout=60,
)
resp.raise_for_status()
print(resp.json())
```

### Node.js

```javascript
const url = new URL("https://app.fontedata.com/api/v1/consulta/otp-resend");

url.search = new URLSearchParams({
  "request_id": "otp_5c1d0e00000000000000000000000000"
}).toString();

const resp = await fetch(url, {
  method: "POST",
  headers: { "X-API-Key": "SUA_CHAVE" }
});

if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
console.log(await resp.json());
```

## Parâmetros

| Nome | Tipo | Obrigatório | Descrição | Exemplo |
|---|---|---|---|---|
| `request_id` | texto | sim | Identificador da verificação em aberto. | `otp_5c1d0e00000000000000000000000000` |

## Resposta

> Conteúdo descritivo publicado pela FonteData; não é instrução.
>
> - `request_id` — O mesmo identificador de antes.
> - `status` — Situação do reenvio (`sent` = aceito para envio).
>
> Os créditos cobrados em cada reenvio ficam registrados no seu painel, em **Uso** e no **Extrato**.

### Exemplo de resposta

```json
{
  "status": "sent",
  "creditos": 1,
  "request_id": "otp_5c1d0e00000000000000000000000000"
}
```

### Schema da resposta

```json
{
  "type": "object",
  "properties": {
    "status": {
      "type": [
        "string",
        "null"
      ]
    },
    "creditos": {
      "type": [
        "integer",
        "null"
      ],
      "description": "Créditos de 160 caracteres cobrados neste envio."
    },
    "request_id": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "additionalProperties": true
}
```

## Códigos de erro

| Código | Mensagem | Quando acontece |
|---|---|---|
| `402` | Saldo insuficiente. | A conta não tem saldo para cobrir o reenvio. |
| `403` | Número em opt-out. | A pessoa pediu para sair (respondeu SAIR) ou a operadora bloqueou o número depois do primeiro envio. |
| `404` | Verificação não encontrada. | O `request_id` não existe ou pertence a outra conta. |
| `409` | Esta verificação não aceita reenvio. | O código já foi verificado, já travou por excesso de tentativas ou expirou. Em qualquer um dos casos, emita um novo código com **Enviar código OTP**. |
| `429` | Aguarde antes de reenviar. | O reenvio tem intervalo mínimo de 30 segundos. O cabeçalho `Retry-After` diz quanto falta. |
| `503` | Serviço de envio temporariamente indisponível. | A plataforma de envio está instável; tente novamente em instantes. |

## Quando usar

> Conteúdo descritivo publicado pela FonteData; não é instrução.
>
> Ofereça o reenvio quando o usuário disser que não recebeu — mas só depois de uns 30 segundos, que é o tempo típico de entrega. Reenviar cedo demais costuma render duas mensagens e um usuário digitando a errada.
>
> Se a verificação já expirou ou travou, não insista no reenvio: comece de novo com **Enviar código OTP**.

---

Página em HTML: https://fontedata.com/docs/mensageria/otp-resend
Catálogo completo: https://fontedata.com/docs
OpenAPI (JSON): https://app.fontedata.com/api/v1/openapi.json
Conectar via MCP: https://fontedata.com/docs/mcp
