# Modo de Actualización del Hosted Widget

Puedes usar el Hosted Widget de Belvo para actualizar un link que requiere una nueva contraseña o un nuevo token MFA. Necesitarás actualizar un link si:

- La institución requiere un nuevo token MFA para iniciar sesión.
- El usuario ha cambiado la contraseña conectada con el Link.


## Flujo de Actualización

El flujo general para actualizar un enlace con el widget es:

1. Recibes un error de enlace desde la API o un webhook.
2. Solicitas a tu usuario dentro de tu aplicación que actualice sus credenciales o proporcione un nuevo token de autenticación.
3. Una vez que inician el proceso de actualización, realizas una llamada desde el servidor a nuestro endpoint `/api/token/` para generar un `access_token`, proporcionando el `link_id` del usuario.

```curl
curl -X POST \
  https://sandbox.belvo.com/api/token/ \
  -H 'Content-Type: application/json' \
  -H 'Host: sandbox.belvo.com' \
  -d '{
    "id": "SECRET_ID",
    "password": "SECRET_PASSWORD",
    "link_id": "LINK_ID",
    "scopes": "read_institutions,write_links,read_links"
  }'
```
4. Luego inicias el widget con el `access_token` que acabas de generar. Debido a que proporcionaste el `link_id`, detectamos qué tipo de actualización de enlace necesita ser activada (token o credenciales) y guiamos al usuario a través del proceso. Una vez que proporcionan exitosamente sus credenciales o token de autenticación, establecemos el estado del enlace como `valid`.


¡Listo! Una vez que un enlace se actualiza exitosamente, el enlace es `valid` nuevamente y el `link_id` permanece igual.

Si el enlace actualizado exitosamente es recurrente, automáticamente activamos una actualización histórica del enlace, notificándote a través de webhook de cualquier dato nuevo.

## ¿Cómo sé si un enlace necesita ser actualizado?

Un enlace necesitará ser actualizado en los siguientes escenarios:

**Escenario 1: recibes un error de la API**
Al realizar una llamada POST a nuestra API, puedes recibir errores que significan que el enlace necesita ser actualizado:

| Respuesta | Código de error | Razón |
|  --- | --- | --- |
| 400 | `invalid_link` | El enlace ha sido invalidado debido a varios errores de inicio de sesión. |
| 428 | `token_required` | La institución requiere un token MFA para iniciar sesión. |


**Escenario 2: recibes un error de webhook para un enlace recurrente**
Durante la actualización diaria de tus enlaces recurrentes, enviaremos un evento en caso de que uno de tus enlaces necesite ser actualizado para ser refrescado.

| Evento | Razón |
|  --- | --- |
| `invalid_credentials` | Cada vez que no podemos refrescar un enlace recurrente debido a credenciales inválidas. |
| `token_required` | Siempre que necesitemos un nuevo token MFA para refrescar el enlace recurrente. |


# ¿Cómo puedo saber qué enlaces necesitan ser actualizados?

Utiliza la solicitud de API List all Links con el parámetro de consulta `status` configurado en `invalid` o `token_required` (ver el ejemplo a continuación). Si se devuelven enlaces, esos son los que necesitan ser actualizados.

```curl Obtener todos los enlaces que necesitan ser actualizados
# enlaces inválidos
curl -u Secret-Key-ID:Secret-Key-PASSWORD  \
https://sandbox.belvo.com/api/links/?status=invalid

# enlaces que requieren token
curl -u Secret-Key-ID:Secret-Key-PASSWORD  \
https://sandbox.belvo.com/api/links/?status=token_required
```