IframePaso 2 de 2
Configura el backend
Recibe en tu servidor los datos bancarios normalizados y confirma correctamente el callback.
Completa primero el checklist de frontend. El widget no envía los datos bancarios por postMessage: los envía aquí, mediante POST.
Checklist de integración
0 de 41. Crear la URL de callback
Expón un endpoint HTTPS en tu servidor que acepte POST con un body JSON.
Después de procesar lo necesario, responde HTTP 200 con el siguiente JSON:
{
"status": "ok"
}
Si devuelves otro código de estado o un JSON diferente, el widget no notificará al frontend que el flujo terminó correctamente.
Trata operation_id como idempotente: una entrega repetida no debe crear dos operaciones en tu sistema.
2. Qué llega en el POST
El cuerpo es el mismo JSON que POST /entities/ en la referencia OpenAPI. Lo importante para cruzar la operación:
| Campo | Uso |
|---|---|
success |
true si la lectura terminó bien. |
payload |
Datos normalizados (cuentas, carteras, tarjetas, …). |
statistics.operation_id |
El operation_id que generó tu frontend. |
statistics.token |
Credencial custodiada para refrescos posteriores (si la tokenización está activa). |
statistics.code |
Código de la entidad (bbva, caixabank, …). |
statistics.SESSION |
Identificador de la sesión, útil en un ticket de soporte. |
statistics.warnings |
Avisos que no invalidan la lectura (por ejemplo, un producto vacío). |
Ejemplo recortado:
{
"success": true,
"payload": {
"user_information": {
"ID": "12345678Z",
"name": "LUIS GARCIA BAQUERO"
},
"accounts": [
{
"uuid": "8076932f04f73e27fe608fee4d12fca8708dec8c",
"subtype": "checking",
"code": "ES4914651234561234567890",
"name": "Cuenta NOMINA",
"currency": "EUR",
"balances": {
"available": 14302.07,
"current": 14302.07
},
"transactions": []
}
]
},
"statistics": {
"SESSION": "A1B2C3D4E5F67890",
"execution_time": 12.4,
"warnings": [],
"operation_id": "8f1c2a6e-4b0d-4c3a-9e21-0d5b7a91c4e2",
"token": "FRJ0mHlaqZwLzu",
"code": "bbva"
}
}
El esquema completo de payload está en la OpenAPI. No asumas que todas las claves vienen siempre: dependen de product_types y de lo que tenga el usuario en la entidad.
3. Asociar dominio, callback y API key
En el área de clientes asocia:
- el dominio desde el que se carga el widget (el origin de tu front);
- la URL de callback que acabas de crear;
- tu
api_key.
Hasta que el dominio esté dado de alta, el widget no funciona.
4. Probar el flujo
Abre la página que carga el widget e inicia sesión:
| Usuario | Contraseña | Resultado |
|---|---|---|
MOCKDATA |
cualquiera | Lectura correcta con datos de ejemplo anonimizados. El callback recibe un JSON success: true. |
MOCKOTP |
cualquiera | Recreas un desafío de doble factor. |
MOCKLOGINKO |
cualquiera | Recreas un error de login. El callback no se llama. |
Si no tienes el email de bienvenida, pídelo a support@wealthreader.com.
Si quieres ver el POST antes de tener el endpoint en tu entorno, crea una URL temporal en un servicio como https://pipedream.com/ y ponla como callback.
5. Refrescar datos (opcional)
Hasta aquí tienes una integración one shot: una lectura por cada vez que el usuario abre el widget.
Si necesitas un batch nocturno o un botón de “actualizar”, vuelve a llamar a la API con el token y el code que guardaste del callback. No pidas de nuevo usuario y contraseña.
curl --location 'https://api.wealthreader.com/entities/' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'api_key=TU_API_KEY' \
--data-urlencode 'code=bbva' \
--data-urlencode 'token=EL_TOKEN_DEL_CALLBACK' \
--data-urlencode 'product_types=accounts,portfolios'
Presta atención a los códigos de error: un password inválido no se reintenta; un mantenimiento de la entidad sí.
- Especificación OpenAPI v3
- Colección Postman
Si el token deja de valer (cambio de contraseña o nuevo 2FA), abre otra vez el widget pasando ese valor en wr_conf.token para que el usuario se reautentique.