# Rail ## Docs - [Introducción](https://docs.rail.cl/introduction.md): Rail es un agregador bancario chileno read-only. Conecta las cuentas bancarias de tus usuarios con un par de llamadas HTTP. - [Quickstart](https://docs.rail.cl/quickstart.md): Conecta una cuenta bancaria y lee movimientos en 5 minutos. - [Autenticación](https://docs.rail.cl/authentication.md): Modelo de 4 credenciales — sk, pk, wt, et. - [Test mode (Sandbox)](https://docs.rail.cl/test-mode.md): Integra Rail de punta a punta sin tocar un banco real — credenciales mágicas + data determinista. - [Bancos soportados](https://docs.rail.cl/banks.md): Instituciones chilenas disponibles, sus productos y cómo consultarlas en runtime. - [Rate limits](https://docs.rail.cl/rate-limits.md): Límites por endpoint y cómo manejar respuestas 429. - [Links](https://docs.rail.cl/concepts/links.md): Un link es la conexión persistente entre un usuario tuyo y un banco. - [Cuentas](https://docs.rail.cl/concepts/accounts.md): Productos bancarios bajo un link: cuentas vista, ahorro y tarjetas de crédito. - [Movimientos](https://docs.rail.cl/concepts/movements.md): Cargos y abonos de una cuenta. - [Refresh Intents](https://docs.rail.cl/concepts/refresh-intents.md): Sync on-demand de un link, con soporte para MFA async. - [Eventos](https://docs.rail.cl/concepts/events.md): Catálogo completo de event types con shape de cada event.data. - [Widget Rail Connect](https://docs.rail.cl/guides/widget.md): Integrar el widget para que tus users conecten sus bancos sin compartir credenciales con tu app. - [Banca empresa](https://docs.rail.cl/guides/banca-empresa.md): Conecta cuentas de empresa (no solo personas) con el mismo flujo, distinguiendo con holder_type. - [Webhooks](https://docs.rail.cl/guides/webhooks.md): Recibe eventos de Rail en tu backend con firma HMAC. - [Estados de banco](https://docs.rail.cl/guides/estados-de-banco.md): Mostrá en tus conexiones cuándo un banco está en mantención o pausado, sin confundirlo con un link roto. - [Manejo de MFA](https://docs.rail.cl/guides/mfa-handling.md): Walkthrough end-to-end del flow MFA async, desde el backend hasta el widget. - [Idempotency](https://docs.rail.cl/guides/idempotency.md): Reintenta POSTs sin riesgo de doble efecto. - [Paginación](https://docs.rail.cl/guides/pagination.md): Paginación con header Link RFC 5988 + X-Total-Count. - [Errores](https://docs.rail.cl/guides/errors.md): Shape estándar y catálogo de error codes. - [Liveness probe](https://docs.rail.cl/api-reference/health/liveness-probe.md): Endpoint público sin auth. Devuelve {status:"ok"} si el server responde. - [Listar links del cliente](https://docs.rail.cl/api-reference/links/listar-links-del-cliente.md): Devuelve los links del cliente actual. Filtros: external_user_id, bank_id, status, last_sync_at (rango). Sort por created_at (default) o last_sync_at. Útil para cleanup desde el cliente B2B y para detectar links atrasados (ej. `sort=last_sync_at:asc` devuelve primero los más viejos). - [Crear link bancario](https://docs.rail.cl/api-reference/links/crear-link-bancario.md): Crea un link con credenciales del usuario y dispara el primer sync en background. Requiere secret key (rail_sk_*). Para flujo white-label sin pasar credenciales por tu servidor, usar `/v1/widget_tokens` en su lugar. - [Obtener un link](https://docs.rail.cl/api-reference/links/obtener-un-link.md): Devuelve el estado actual del link (status, last_sync_at, refresh_status, etc). - [Eliminar link](https://docs.rail.cl/api-reference/links/eliminar-link.md): Borra el link y CASCADEa accounts, transactions, refresh_intents y tokens asociados. Requiere secret key. Irreversible. - [Verificación de ingresos del link](https://docs.rail.cl/api-reference/links/verificación-de-ingresos-del-link.md): Foto de ingresos derivada de los movimientos: ingreso principal (sueldo recurrente), regularidad y promedios mensuales. Útil para underwriting / verificación de renta. Read-only, no dispara sync. - [Pausar sync automático](https://docs.rail.cl/api-reference/links/pausar-sync-automático.md): El cron de 4h va a saltar este link hasta que se llame /resume. Los syncs manuales con /refresh_intents siguen funcionando. - [Reanudar sync automático](https://docs.rail.cl/api-reference/links/reanudar-sync-automático.md): Quita el flag de pausa y resetea next_sync_at para que el próximo cron tick lo levante. - [Disparar backfill histórico (OB empresa)](https://docs.rail.cl/api-reference/links/disparar-backfill-histórico-ob-empresa.md): Solicita el backfill histórico de movimientos (>90 días vía cartola). Solo disponible para banca empresa Santander (holder_type=business). Idempotente vía el estado en DB: si ya está cubierto, no re-baja (usar force:true para re-correr/extender). Corre async en el worker; devuelve un refresh_intent… - [Listar instituciones soportadas](https://docs.rail.cl/api-reference/institutions/listar-instituciones-soportadas.md): Devuelve los bancos soportados con sus productos y holder_types. Filtros: product, holder_type. Por default oculta combinaciones todavía no disponibles (opt-in con include_unavailable=true). - [Listar cuentas de un link](https://docs.rail.cl/api-reference/accounts/listar-cuentas-de-un-link.md): Devuelve todas las cuentas sincronizadas del link (checking, savings, credit_card). Saldos vienen en minor units (CLP zero-decimal, USD en centavos). Por default oculta accounts que el banco dejó de devolver (`removed_from_link=true`) — pasá `include_removed=true` para verlas. - [Obtener una cuenta](https://docs.rail.cl/api-reference/accounts/obtener-una-cuenta.md) - [Listar movimientos de una cuenta](https://docs.rail.cl/api-reference/movements/listar-movimientos-de-una-cuenta.md): Paginado por offset/per_page. Siempre excluye movimientos internos (`status` duplicated/reversed). Por default además oculta los `pending` (ej. no-facturados de TC): pasá `confirmed_only=false` para incluirlos (vienen con `pending=true`; mostralos con badge "no facturado"). Para sync incremental usá… - [Disparar sync on-demand](https://docs.rail.cl/api-reference/refresh-intents/disparar-sync-on-demand.md): Crea un intent y dispara el sync en background. refresh_type=only_last (default, recomendado): movs recientes, cooldown 5min. refresh_type=historical: 60d + TC facturados, cooldown 60min. Si MFA es requerido, el intent queda en mfa_required hasta que el cliente provea el código via callback o widget… - [Obtener estado del intent](https://docs.rail.cl/api-reference/refresh-intents/obtener-estado-del-intent.md) - [Crear widget token](https://docs.rail.cl/api-reference/widget/crear-widget-token.md): Emite un token efímero wt_* (TTL 10min) para abrir el widget de Rail. Después de que el user conecta el banco, el widget devuelve un et_* que se canjea server-side con POST /v1/exchange_tokens/:id por el link_id. - [Canjear exchange token por link](https://docs.rail.cl/api-reference/widget/canjear-exchange-token-por-link.md): Recibe el et_* devuelto por el widget y lo cambia por el link_id final. Single-use, requiere secret key. - [Disparar un webhook de prueba (test mode)](https://docs.rail.cl/api-reference/sandbox/disparar-un-webhook-de-prueba-test-mode.md): Emite un evento fake a tus webhook endpoints de modo test para validar tu receiver (firma HMAC + retry) sin correr un sync. Requiere una secret key de test. - [Listar eventos del cliente](https://docs.rail.cl/api-reference/events/listar-eventos-del-cliente.md): Audit log inmutable de eventos (refresh_intent.succeeded, link.created, etc). Filtrable por type y link_id. - [Detalle de un evento](https://docs.rail.cl/api-reference/events/detalle-de-un-evento.md) ## OpenAPI Specs - [openapi](https://docs.rail.cl/api-reference/openapi.json)