Qué es un link
Un link representa la conexión que un usuario tuyo tiene con uno de sus bancos. Es persistente: una vez creado, vive en tu DB asociado a tu user. Cada link tiene unlink_id con prefijo link_ + 16 chars hex.
Tipo de titular
holder_type distingue banca personal de empresa:
Lo defines al emitir el
widget_token (holder_type: "business"). Ver
Banca empresa para el flujo completo.
Cómo se crea
Solo vía widget. No hay endpoint público que reciba credenciales en plano. El flow:- Tu backend pide
wt_*conPOST /v1/widget_tokens. - El widget se abre en el frontend con ese token.
- User mete RUT + clave + MFA dentro del widget.
- Widget cierra y devuelve
et_*al frontend. - Tu backend canjea
et_*porlink_idconPOST /v1/exchange_tokens/{id}.
Estados
Modo realtime (en vivo)
Algunos links (banca empresa, planes premium) se sincronizan en tiempo real: en vez del cron cada 4h, un worker dedicado mantiene la sesión del banco viva y hace poll continuo. El camporealtime te dice si un link está en este modo:
Listar y leer
Query params
Casos típicos
Encontrar links atrasados — los que llevan más tiempo sin sincronizar primero (incluye los que nunca sincronizaron):last_sync_at:asc usa NULLS FIRST automáticamente: los links que nunca sincronizaron salen antes que los más viejos.
Detectar cambios desde tu último poll — recently synced after a timestamp:
credentials_invalid (el user cambió la clave en el banco y hay que iniciar reconnect):
POST /v1/widget_tokens { intent: 'reconnect', link_id }.
Sort por last_sync_at y NULLs
sort=last_sync_at:asc→NULLS FIRST. Útil para encontrar los más atrasados (nunca sincronizados + los más viejos primero).sort=last_sync_at:desc→NULLS LAST. Útil para encontrar los recién actualizados sin que los nunca-sincronizados inflen el head.