# password_reset_token_invalid (/docs/errores/password_reset_token_invalid)

El enlace de recuperación de contraseña no sirve.

|                    |                                                            |
| ------------------ | ---------------------------------------------------------- |
| **Código**         | `password_reset_token_invalid`                             |
| **Tipo**           | `invalid_request_error` — Entrada mal formada o incompleta |
| **HTTP**           | `400`                                                      |
| **¿Reintentable?** | No                                                         |

## Qué hacer [#qué-hacer]

Un código para cuatro razones — vencido (duran 60 minutos), ya usado (un solo uso), nunca existió, o la dirección de la cuenta cambió después de mandar el correo. Cuál de las cuatro no se publica a propósito: distinguirlas es un oráculo para adivinar una credencial, y el remedio es el mismo en las cuatro. Pide un enlace nuevo con `POST /account/password/reset_request`.

> **Advertencia**
>
> Reintentar el mismo request va a fallar igual. Cambia el request, no la frecuencia.

## El sobre [#el-sobre]

```json
{
  "error": {
    "type": "invalid_request_error",
    "code": "password_reset_token_invalid",
    "message": "…",
    "hint": "One code for four reasons — expired (they live 60 minutes), already used (single use), never existed, or the account's address changed after the mail went out. Which one is deliberately not published: distinguishing them is a probe oracle over a bearer credential, and the remedy is the same in all four. Ask for a new link with `POST /account/password/reset_request`.",
    "retriable": false,
    "doc_url": "https://docs.facturia.cl/errors/password_reset_token_invalid",
    "request_id": "req_01K2R7Q9M4T2VB"
  }
}
```

Programa contra `code`, nunca contra `message` — la prosa se puede reescribir, el código no (§5.8).

`hint` y `retriable` llegan en la respuesta, con estos mismos valores: son función del `code` y salen del mismo diccionario que sirve `GET /v1/error_codes`, así que el sobre y el diccionario no pueden discrepar. `hint` va en inglés a propósito — el español de este código es esta ficha. Más en [El sobre de error](/docs/errores).

## También [#también]

- [Todos los códigos](/docs/errores/codigos): La tabla completa, agrupada por dónde te la vas a encontrar.

- [El sobre de error](/docs/errores): Los nueve tipos, el request_id y cómo manejarlos en la práctica.

La copia legible por máquina de esta ficha vive en `GET /v1/error_codes`, sin autenticación.
