Skip to main content

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.

Rail usa 4 tipos de credenciales. Cada uno tiene un scope y lifetime distinto. Si mezclás (mandás un sk donde se espera pk, o viceversa), la API responde 403.

1. Secret key — rail_sk_{live|test}_…

Server-to-server. Es la única credencial que puede leer cuentas y movimientos.
AtributoValor
UsoBackend ↔ Rail API
LifetimePermanente (hasta revocar)
HeaderAuthorization: Bearer rail_sk_live_…
Scopelinks:read, links:write, accounts:read, movements:read, refresh_intents:write
AlmacenamientoEnv del backend (RAIL_API_KEY). Nunca en frontend.

2. Publishable key — rail_pk_{live|test}_…

Browser-safe. La usa el widget para autenticarse al pedir su widget_token.
AtributoValor
UsoFrontend (widget)
LifetimePermanente
HeaderAuthorization: Bearer rail_pk_live_…
ScopeSolo widget_tokens:write
AlmacenamientoEnv del frontend (NEXT_PUBLIC_RAIL_KEY / VITE_RAIL_KEY)
Exponerla es seguro: el único endpoint que la acepta es POST /v1/widget_tokens, y el wt_* resultante es single-use y efímero. Un atacante con tu pk_ puede emitir tokens infinitos pero no leer data del banco.

3. Widget token — wt_{8hex}_sec_…

Abre el widget de Rail Connect. Single-use.
AtributoValor
UsoInicializar el widget en el frontend
Lifetime10 minutos
EmisiónPOST /v1/widget_tokens (con sk_ o pk_)
ConsumoEl widget lo marca consumed_at al abrirse
Para refresh con MFA async, Rail emite automáticamente un token ri_{intentId}_sec_… dentro del refresh_intent.requires_mfa.widget_token. El widget lo recibe y lo trata igual que un wt_*.

4. Exchange token — et_…

One-shot. El widget lo devuelve al frontend al terminar el connect exitoso. Tu backend lo canjea por el link_id real.
AtributoValor
UsoBridge widget → backend del cliente
Lifetime5 minutos
EmisiónAuto (lo emite Rail al cerrar el widget)
ConsumoPOST /v1/exchange_tokens/{id} (requiere sk_)
Por qué existe: las credenciales bancarias nunca tocan tu backend. Tu frontend solo ve un et_ opaco que tu backend canjea por el link_id definitivo.

Modo test vs live

Las keys vienen en dos modos:
  • test: para integración sin tocar bancos reales (sandbox).
  • live: producción. Cada llamada que dispara sync llama al banco real.
Los recursos creados con sk_test solo se ven con keys _test. No hay cross-talk entre modos. Los responses incluyen "mode": "live" o "mode": "test".
Test mode estará disponible próximamente. Hoy las sk_test y pk_test están emitidas pero no podés usarlas para crear links — el widget rebota al elegir banco. Estamos trabajando en un test bank que devuelve data mock para que puedas validar tu integración sin gastar bancos reales.Mientras tanto, mandanos un mail a soporte@rail.cl y te damos acceso a un link de demo en live con credenciales nuestras.

Manejo de errores de auth

Statuserror.codeSignifica
401invalid_credentialKey inexistente, revocada o malformada
403insufficient_scopeLa key existe pero no tiene scope para ese endpoint
403wrong_modeEstás usando sk_test contra recursos live (o viceversa)
Ver guías → Errores para el shape completo del error envelope.