Documentation Index
Fetch the complete documentation index at: https://docs.rail.cl/llms.txt
Use this file to discover all available pages before exploring further.
Por qué existen
Rail corre syncs automáticos cada 4h por cada link. Pero a veces el cliente quiere forzar un sync ya — por ejemplo cuando el user abre la app y quiere ver lo más reciente. Un refresh intent representa ese deseo de sync on-demand. Su ID esri_ + 16 chars hex.
Crear
refresh_type:
full— todas las cuentas, todos los movs (default).historical— incluye movs viejos (60+ días).only_last— solo cuentas (skip movs). Más rápido.
Lifecycle
status | Significa |
|---|---|
created | Encolado. Aún no empezó. |
in_progress | El worker está syncando. |
requires_mfa | El banco pidió MFA. Ver abajo. |
succeeded | Sync terminado OK. |
failed | Sync falló. Ver error_code. |
MFA async
Algunos bancos (Santander, BCI a veces) piden MFA en cada sync. Cuando eso pasa:- El intent queda en
status: requires_mfa. - El campo
requires_mfa.widget_tokencontiene unri_{intentId}_sec_…listo para abrir el widget. - Tu frontend abre el widget con ese token.
- User resuelve el MFA dentro del widget.
- El widget cierra, el sync continúa server-side.
- El intent pasa a
succeededofailed.
Polling vs Webhooks
Dos formas de saber cuándo termina:Polling
status sea succeeded, failed o requires_mfa.
Webhooks (recomendado)
Suscribite a los eventosrefresh_intent.succeeded, refresh_intent.failed, refresh_intent.requires_mfa. Ver Guías → Webhooks.
Cooldown y deduplicación
- Cooldown 5min: si pediste un intent para un link, no podés pedir otro full hasta 5min después. Para
only_lastno hay cooldown. - Unique in-progress: solo puede haber 1 intent activo por link a la vez. Si pedís otro, te devolvemos el existente.
Error codes comunes
error_code | Significa |
|---|---|
bank_unavailable | El banco está caído o muy lento. Reintentar en 10min. |
rejected_credentials | Clave o RUT inválido. El user debe re-conectar. |
requires_mfa_user_timeout | Se emitió wt_* pero el user no resolvió en 10min. |
bank_format_change | El banco cambió su HTML y nuestro parser rompió. Rail está sobre eso. |