Download OpenAPI specification:
Regulatory APIs based on PSD2 provide access to certain financial information such as bank account balances and transactions. However, there are other sources of wealth information that are not accessible through these APIs. The Wealth Reader API extends the information offered by regulatory APIs by providing real-time access to additional wealth sources in any entity worldwide. There are two other related documents that will help you integrate the Wealth Reader API. One is the Javascript widget integration guide: https://docs-en.wealthreader.com/ and the other is a Postman collection based on this documentation. Very important: This API definition is adapted for clients integrating via Widget, so some parameters that are not necessary for this type of integration have been omitted, such as bank authentication parameters, as a token will be used.
Retrieves financial assets and details of their composition including investment portfolios (stocks, funds, bonds, pension plans, alternative investments, crypto), credit cards, insurance, and loans. Includes ownership information for each asset as well as unique identifiers that facilitate data processing. It is possible to obtain Mock data. Check with the technical team on how to do this.
| api_key | string Identifies the client in the service |
| code | string Name of the entity. The complete list is available with GET Example: |
| token | string Identifies the custodied credential. The flow by which the token has been obtained is described in the 'Widget Integration Guide' document. The following Mock users are available: MOCKDATA, OK response; MOCKOTP, response with OTP challenge; MOCKLOGINKO, response with login error Example: |
| product_types | string Enum: "accounts" "portfolios" "cards" "receipts" "loans" "factoring" "confirming" "properties" "invoices" "files" "deposits" "leases" "insurances" List of product types from which information is to be retrieved. Accepts multiple values separated by commas. Example: |
| only_balances | boolean Default: false Indicates whether to obtain only the balances of the products instead of all available information. Default value: false. Example: |
| fetch_transaction_details | boolean Default: false Indicates whether extended transaction details should be retrieved when the entity connector supports it. IMPORTANT: Enabling it implies performing one or more additional navigations per transaction to enrich the returned information. This will inevitably and significantly increase the execution time. The number of additional navigations grows with the volume of transactions. It is recommended to enable it only when you are certain that a level of detail beyond the one returned by default is required. The retrieved details are inserted into the Example: |
| date_from | string <date> Date from which transactions are requested, in YYYY-MM-DD format. Must be a date before today. Example: |
| date_to | string <date> This only applies to restricting by future dates for products loan and confirming, in YYYY-MM-DD format. The date must be later than today Example: |
| required_products_schema | string Required products schema. Indicates the accounts or cards from which data is desired, with additional configurations. Example:
|
| add_pdf_from_uuids | string Accepts transaction uuids separated by commas. Parameter that is only taken into account if product_types is ALL or includes accounts. Adds the PDF document associated with each of the requested bank transactions. Example:
|
| otp_method | string Selects which second-factor delivery channel to use when the API returned error code 2017 or 20171 (multiple OTP methods available). Call again with the same session identifier from that response and set this form field to the exact value of the otp_method property from one object in statistics.otpMethods (not the array index). Omit on the first credential-based request; send after the end user chooses a method. The example value below is illustrative only—always copy the string returned in statistics.otpMethods for your entity (wording may be OTP_SMS ****1234, SMS *****1234, or another label depending on the bank). Example: |
api_key=a1b2c3d4e5f6g7h8i9j0&code=caixabank&token=1234Asdf&product_types=accounts%2Cportfolios&only_balances=false&date_from=2024-01-01&date_to=2025-12-31&required_products_schema=%7B%22ACCOUNTS%22%3A%7B%220ae4d722b1c82feeafb4b36b2893230444071335%22%3A%7B%22only_balances%22%3Afalse%2C%22add_pdf_from_uuids%22%3A%5B%2290763109952d4f2ebece8dceca8254078c5384a0%22%5D%2C%22date_from%22%3A%222024-04-03%22%7D%7D%2C%22CARDS%22%3A%7B%22957e6f63546f3fecacce80192b6f7436496dc057%22%3A%7B%7D%7D%7D&add_pdf_from_uuids=20966426721d0885ef9d4b95535e1d3198936f16%2C8772d6c978d37d7af83094abf380b8b703e94105
[- {
- "success": true,
- "payload": {
- "user_information": {
- "ID": "12345678Z",
- "name": "LUIS GARCIA BAQUERO",
- "gender": "male",
- "birth_date": "1980-09-26",
- "birth_place": "Ibiza",
- "email": "lgarcia@gmail.com",
- "cell_phone": "+34666123456",
- "address": "CALLE BAILEN 41 1A",
- "city": "MADRID",
- "country": "SPAIN",
- "postal_code": "28005",
- "marital_status": "married",
- "job": "CUENTA PROPIA"
}, - "portfolios": [
- {
- "subtype": "funds",
- "uuid": "05e4563f5bbf2d06efd0a29ebe7edbbb4e1bff63",
- "code": "1465010091400123456789",
- "name": "Fondo Dinámico",
- "currency": "EUR",
- "total_value": 3275.6,
- "weighted_return": 8.49,
- "annualized_volatility": 0,
- "yield": 256.27,
- "contributions": 3019.33,
- "withholdings": 0,
- "contracting_date": "2016-04-27",
- "linked_account": "ES4021005321592566566159",
- "portfolio_statement": "JVBERi0xLjQKJ...",
- "owners": [
- {
- "ID": "12345678Z",
- "name": "LUIS GARCIA BAQUERO",
- "role": "owner"
}
], - "composition": [
- {
- "ISIN": "LU1234567890",
- "ISIN_description": "My Fund Class A",
- "currency": "EUR",
- "weighting": 100,
- "shares": 225.0077,
- "price": 14.5577,
- "total_amount": 3275.6,
- "reference_currency": "EUR",
- "exchange_rate": 1
}
], - "transactions": [
- {
- "uuid": "05e4563f5bbf2d06efd0a29ebe7edbbb4e1bff63",
- "operation_pending": false,
- "operation_date": "2020-01-30",
- "value_date": "2020-01-30",
- "operation_type": "purchase",
- "shares": 1076.8273,
- "price": 11.1438,
- "total_amount": 12000,
- "currency": "EUR",
- "reference_currency": "USD",
- "exchange_rate": 1,
- "additional_info": [
- {
- "key": "string",
- "value": "string"
}
]
}
]
}
], - "accounts": [
- {
- "uuid": "8076932f04f73e27fe608fee4d12fca8708dec8c",
- "subtype": "checking",
- "interest_rate": 0.5,
- "line_of_credit_details": {
- "credit_limit": 50000,
- "interest_rate": 4.5,
- "credit_used": 15000,
- "credit_available": 35000,
- "constitution_date": "2021-05-20",
- "expiration_date": "2031-05-20"
}, - "code": "ES4914651234561234567890",
- "name": "Cuenta NÓMINA",
- "currency": "EUR",
- "owners": [
- {
- "ID": "12345678Z",
- "name": "LUIS GARCIA BAQUERO",
- "role": "owner"
}
], - "balances": {
- "available": 14302.07,
- "current": 14302.07
}, - "additional_info": [
- {
- "key": "string",
- "value": "string"
}
], - "transactions": [
- {
- "uuid": "d0c2ea4c072cf4d7b0fd494d7728260d736e6b25",
- "operation_date": "2022-12-30",
- "value_date": "2022-12-30",
- "amount": -1.1,
- "balance": 14302.07,
- "description": "Pago en TELPARK MADRID ES",
- "pdf_file": "string",
- "pdf_file_settled": true,
- "categorization": {
- "type": 1,
- "portfolio-uuid": "1465010091400123456789",
- "ISIN": "US88160R1014"
}, - "transfer_details": {
- "concept": "Pago de factura 12345",
- "sender_receiver": "Juan Pérez",
- "account_number": "ESXX12341234121234567890"
}, - "additional_info": [
- {
- "key": "string",
- "value": "string"
}
]
}
]
}
], - "cards": [
- {
- "status": "active",
- "subtype": "credit",
- "uuid": "aefd89eade0a6a09d9b8eab4c22da6a6a37632e6",
- "code": "516097********1234",
- "name": "Credit Card",
- "currency": "EUR",
- "next_payment_date": "2023-01-05",
- "anual_interest": 17.48,
- "tae": 18.95,
- "balances": {
- "available": 3980,
- "limit": 4000,
- "disposed": 20
}, - "linked_account": "ES4021005321592566566159",
- "owner": [
- {
- "ID": "12345678Z",
- "name": "LUIS GARCIA BAQUERO",
- "role": "owner"
}
], - "additional_info": [
- {
- "key": "string",
- "value": "string"
}
], - "transactions": [
- {
- "uuid": "78ceedca9cd9d2f2bfbb2439795ab6a1fcefc12b",
- "settled": false,
- "operation_date": "2022-12-28",
- "value_date": "2022-12-28",
- "amount": -20,
- "currency": "EUR",
- "exchange_rate": 1,
- "description": "Pago en AMZN MKTP ES123CM0ZM4",
- "categorization": {
- "type": 0
}, - "additional_info": [
- {
- "key": "string",
- "value": "string"
}
]
}
]
}
], - "receipts": [
- {
- "last_receipt_date": "2023-07-23",
- "issuer": "Canal de Isabel II",
- "description": "RECIBO CONTRATO 328774628 FACTURA DEL 18 07 23",
- "account": "ES0123456789012345678901",
- "status": "paid",
- "amount": 50.75,
- "pdf_file": "string",
- "pdf_file_settled": true
}
], - "loans": [
- {
- "uuid": "0ae4d722b1c82feeafb4b36b2893230444071335",
- "contract_number": "9620.321-205439-70",
- "loan_type": "Variable rate mortgage",
- "constitution_date": "2022-02-23",
- "currency": "EUR",
- "granted_capital": 207000,
- "pending_amount": 166639.77,
- "next_installment": 1040.3,
- "linked_account": "ES0123456789012345678901",
- "holders": [
- {
- "id": "32945945D",
- "name": "Diego Serrano"
}
], - "interest_rate": 3.768,
- "expiration_date": "2042-03-01",
- "pending_receipts": 223,
- "amortization_made": [
- {
- "uuid": "8772d6c978d37d7af83094abf380b8b703e94105",
- "date": "2022-12-01",
- "amortized": 515.43,
- "interest": 524.87,
- "total": 1040.3,
- "pending_capital": 166639.77,
- "operation_type": "receipt_paid"
}
], - "amortization_pending": [
- {
- "uuid": "e59296b79e7f80cec26679d2c65883025fd59295",
- "date": "2030-12-01",
- "amortized": 515.43,
- "interest": 524.87,
- "total": 1040.3,
- "pending_capital": 66639.77,
- "operation_type": "receipt_scheduled"
}
]
}
], - "deposits": [
- {
- "uuid": "0ae4d722b1c82feeafb4b36b2893230444071335",
- "code": "DPZ-1234567890",
- "name": "12-month deposit",
- "currency": "EUR",
- "principal": 10000,
- "pending_principal": 5000,
- "start_date": "2024-09-01",
- "maturity_date": "2025-09-01",
- "payment_frequency": "at_maturity",
- "capitalization": "none",
- "rate_type": "fixed",
- "nominal_interest_rate": 3,
- "apr_tae": 3.04,
- "day_count_convention": "ACT/365",
- "linked_account": "ES4021005321592566566159",
- "accrued_interest": 24.58,
- "expected_interest_total": 300,
- "withholding_tax_rate": 19,
- "status": "active",
- "auto_renewal": {
- "enabled": false,
- "renewed_times": 0,
- "next_renewal_date": "2019-08-24",
- "renewal_term_months": 0
}, - "early_withdrawal": {
- "allowed": true,
- "penalty_type": "interest_loss",
- "penalty_value": 100,
- "notes": "Loss of accrued interest for the current period"
}, - "owners": [
- {
- "ID": "12345678Z",
- "name": "LUIS GARCIA BAQUERO",
- "role": "owner"
}
], - "interest_movements": [
- {
- "uuid": "90763109952d4f2ebece8dceca8254078c5384a0",
- "scheduled": false,
- "date": "2025-09-01",
- "period_start": "2024-09-01",
- "period_end": "2025-09-01",
- "currency": "EUR",
- "gross_interest": 300,
- "withholding_tax": 57,
- "net_interest": 243,
- "payment_type": "maturity"
}
], - "principal_movements": [
- {
- "uuid": "90763109952d4f2ebece8dceca8254078c5384a0",
- "date": "2019-08-24",
- "type": "opening",
- "amount": 12000,
- "currency": "string",
- "target_account": "string"
}
]
}
], - "leases": [
- {
- "subtype": "leasing",
- "uuid": "1f0a0b1c2d3e4f5a6b7c8d9e0f1234567890abcd",
- "contract_number": "L-2024-000123",
- "name": "BMW 3 Series Leasing",
- "provider": {
- "name": "Banco XYZ Renting, S.A.",
- "tax_id": "A12345678"
}, - "currency": "EUR",
- "start_date": "2024-10-01",
- "end_date": "2028-09-30",
- "term_months": 48,
- "payment_frequency": "monthly",
- "status": "active",
- "linked_account": "ES4021005321592566566159",
- "holders": [
- {
- "ID": "12345678Z",
- "name": "LUIS GARCIA BAQUERO",
- "role": "owner"
}
], - "asset": {
- "category": "vehicle",
- "description": "BMW 320d Touring",
- "vin": "WBA8G51040K123456",
- "license_plate": "1234-ABC",
- "brand": "BMW",
- "model": "320d",
- "year": 2024,
- "serial_number": "string",
- "address": "string"
}, - "financials": {
- "capital_financed": 35000,
- "nominal_interest_rate": 4.25,
- "apr_tae": 4.38,
- "discount_rate": 0,
- "initial_fee": 3000,
- "security_deposit": 1000,
- "residual_value": 12000,
- "purchase_option": true,
- "services_included": {
- "maintenance": true,
- "insurance": true,
- "roadside_assistance": true,
- "tires": false
}, - "vat_included": true,
- "mileage_limit_year": 15000,
- "early_termination": {
- "allowed": true,
- "penalty_type": "percentage_of_remaining",
- "penalty_value": 40
}
}, - "totals": {
- "paid_installments": 10,
- "remaining_installments": 38,
- "total_paid": 0,
- "total_pending": 0,
- "principal_outstanding": 0,
- "accrued_interest": 0
}, - "installments": {
- "paid": [
- {
- "uuid": "b07a1a0d3e6f4c2a9e1d0f8b7c6a5e4d3c2b1a0f",
- "date": "2025-01-01",
- "status": "pending",
- "currency": "EUR",
- "total": 625.5,
- "breakdown": {
- "principal": 450,
- "interest": 80,
- "services": 70,
- "taxes": 25.5,
- "fees": 0
}, - "value_date": "2019-08-24",
- "receipt_uuid": "string",
- "additional_info": [
- {
- "key": null,
- "value": null
}
]
}
], - "scheduled": [
- {
- "uuid": "b07a1a0d3e6f4c2a9e1d0f8b7c6a5e4d3c2b1a0f",
- "date": "2025-01-01",
- "status": "pending",
- "currency": "EUR",
- "total": 625.5,
- "breakdown": {
- "principal": 450,
- "interest": 80,
- "services": 70,
- "taxes": 25.5,
- "fees": 0
}, - "value_date": "2019-08-24",
- "receipt_uuid": "string",
- "additional_info": [
- {
- "key": null,
- "value": null
}
]
}
]
}
}
], - "insurances": [
- {
- "uuid": "0ae4d722b1c82feeafb4b36b2893230444071335",
- "code": "969032717626333",
- "coverage_category": "property",
- "name": "MyBox Hogar",
- "currency": "EUR",
- "insured_value": {
- "name": "PISO / Residencia secundaria 46023 VALENCIA",
- "value": 250000
}, - "insured_concepts": [
- {
- "description": "Fire",
- "value": 25000
}
], - "constitution_date": "2020-01-01",
- "expiration_date": "2021-01-01",
- "next_payment_date": "2020-02-01",
- "next_installment": 800,
- "frequency": "monthly",
- "status": "active",
- "linked_account": "ES4914651234561234567890",
- "owner": {
- "ID": "07133834N",
- "name": "LUIS GARCIA BAQUERO"
}, - "claims": [
- {
- "uuid": "8772d6c978d37d7af83094abf380b8b703e94105",
- "claim_code": "0122074354T2",
- "incident_date": "2023-05-13",
- "claimed_date": "2023-05-15",
- "description": "Rotura de lunas por impacto de objetos",
- "status": "in_process"
}
]
}
], - "properties": [
- {
- "uuid": "string",
- "code": "string",
- "description": "string",
- "purpose": "string",
- "currency": "string",
- "trading_price": 0,
- "trading_year": 0,
- "historic_prices": [
- {
- "date": "2019-08-24",
- "price": 0
}
]
}
], - "files": [
- {
- "file_date": "2023-07-21",
- "retrieval_type": "repository",
- "file_type": "Norma 43",
- "description": "Monthly account statement",
- "content": "string"
}
], - "contracts": [
- {
- "signing_date": "2003-09-26",
- "type": "loan",
- "subtype": "mortgage",
- "description": "Variable rate mortgage",
- "pdf_file": "string"
}
], - "factoring": [
- {
- "uuid": "a62ae601a424403d0fbe968d335378421006c277",
- "contract_number": "000117001234567",
- "name": "FACTORING PPAL SIN RECURSO",
- "assignor_id": "B12345678",
- "assignor": "QUICKSILVER DISTRIBUCION Y LOGISTICA SL",
- "assignor_type": "non-recourse-factor",
- "assignee": "Banco Sabadell",
- "currency": "EUR",
- "balances": {
- "available": 11360.26,
- "disposed": 0,
- "limit": 11360.26
}, - "interest_rate": 5.25,
- "linked_account": "ES0700812345678987654321",
- "next_payment_date": "",
- "number_invoices": 8,
- "total_value": 14495.28,
- "total_advanced_value": 6919.29,
- "clients": [
- {
- "uuid": "2ea19f8f8bcda4fa5e54e139852e0a7459d16b49",
- "client_id": "A12345678",
- "client_name": "EMPRESA 1 SA",
- "limit": 50000,
- "disposed": 15000,
- "available": 35000,
- "payment_method": "transfer_payment",
- "payment_deadline": 30
}
], - "invoices": [
- {
- "uuid": "6b556584df0721e5f0b27448247c9682a6470d11",
- "invoice_id": "2023-53",
- "client_id": "A12345678",
- "operation_date": "2023-10-25",
- "due_date": "2024-01-24",
- "payment_date": "2024-01-20",
- "invoice_amount": 918.45,
- "received_amount": 873.53,
- "status": "funded",
- "additional_info": [
- {
- "key": "string",
- "value": "string"
}
]
}
], - "transactions": [
- {
- "uuid": "8a3b5c7d9e1f2a4b6c8d0e2f4a6b8c0d2e4f6a8b",
- "operation_date": "2023-10-25",
- "value_date": "2023-10-26",
- "amount": 1500,
- "currency": "EUR",
- "description": "ANTICIPO FACTURA 2023-53"
}
]
}
], - "confirming": [
- {
- "uuid": "a62ae601a424403d0fbe968d335378421006c277",
- "contract_number": "000117001234567",
- "name": "CONFIRMING PPAL SIN RECURSO",
- "currency": "EUR",
- "balances": {
- "available": 11360.26,
- "disposed": 0,
- "limit": 11360.26
}, - "interest_rate": 5.25,
- "linked_account": "ES0700812345678987654321",
- "next_payment_date": "",
- "number_invoices": 8,
- "total_value": 14495.28,
- "total_advanced_value": 6919.29,
- "deferrals": [
- {
- "status": "paid",
- "overdue": true,
- "start_date": "2019-08-24",
- "due_date": "2019-08-24",
- "total_value": 0,
- "deferred_value": 0,
- "interest_value": 0,
- "interest_rate": 0,
- "late_fees": 0
}
], - "deferrals_summary": {
- "count": 0,
- "total_value": 0,
- "deferred_value": 0,
- "interest_value": 0,
- "late_fees": 0
}, - "providers": [
- {
- "uuid": "2ea19f8f8bcda4fa5e54e139852e0a7459d16b49",
- "company_id": "A12345678",
- "company_name": "EMPRESA 1 SA"
}
], - "invoices": [
- {
- "uuid": "6b556584df0721e5f0b27448247c9682a6470d11",
- "invoice_id": "2023-53",
- "provider_id": "A12345678",
- "operation_date": "2023-10-25",
- "due_date": "2024-01-24",
- "amount": 918.45,
- "status": "advanced",
- "additional_info": [
- {
- "key": "string",
- "value": "string"
}
]
}
], - "additional_info": [
- {
- "key": "string",
- "value": "string"
}
]
}
], - "employment": {
- "summary": {
- "totalDaysRegistered": 8912,
- "daysInMultipleActivity": 130,
- "daysContributedForBenefits": 8782,
- "totalTimeEquivalence": "24 años, 0 meses y 17 días."
}, - "periods": [
- {
- "employer": "TRABAJADOR AUTONOMO",
- "regime": "AUTONOMO",
- "contract": "INDEFINIDO.TIEMPO COMPLETO.ORDINARIO",
- "category": "INGENIEROS LICENCIADOS",
- "actualStartDate": "2022-11-10",
- "startDate": "2022-11-10",
- "endDate": "Actual",
- "contributedDays": 1062
}
], - "pdf_file": "string"
}, - "tax_returns": [
- {
- "uuid": "5f2b9c1e8a7d3046b1c9e2f4a6d8b0c3e5f7a9b1",
- "issuer": "AEAT",
- "model": "100",
- "fiscal_year": 2025,
- "period": "0A",
- "receipt_number": "2025100000123456",
- "secure_verification_code": "A1B2C3D4E5F6G7H8",
- "filing_date": "2026-05-20",
- "filing_type": "individual",
- "holder_id": "99999999R",
- "holder_name": "APELLIDO1 APELLIDO2, NOMBRE",
- "spouse_id": "11111111H",
- "spouse_name": "APELLIDO3 APELLIDO4, NOMBRE",
- "currency": "EUR",
- "general_taxable_base": 32450.18,
- "savings_taxable_base": 1250.4,
- "general_liquid_base": 30120.18,
- "savings_liquid_base": 1250.4,
- "state_gross_tax": 3655.27,
- "regional_gross_tax": 3540.12,
- "state_net_tax": 3480.15,
- "regional_net_tax": 3398.6,
- "resulting_tax": 6878.75,
- "withholdings_and_payments": 7378.45,
- "differential_tax": -499.7,
- "result_amount": -499.7,
- "result_type": "refundable",
- "xml_file": "string",
- "pdf_file": "string"
}
], - "credit_reports": [
- {
- "uuid": "3c1f0e7a9b2d4c6e8f0a1b3c5d7e9f1a2b4c6d8e",
- "issuer": "BDE",
- "report_type": "summary",
- "report_name": "Informe Global",
- "reference": "I2026100100000000",
- "period": "2026-08",
- "request_date": "2026-10-01",
- "issue_date": "2026-10-01",
- "available_until": "2026-10-21",
- "file_name": "Informe Agregado.pdf",
- "pdf_file": "string"
}
]
}, - "statistics": {
- "SESSION": "3463754e3540884",
- "execution_time": 0.958119869232178,
- "warnings": [
- {
- "code": 1000,
- "message": "No contracted funds",
- "product_type": "portfolios"
}
], - "operation_id": "1827C79229",
- "token": "FRJ0mHlaqZwLzu"
}
}
]Use this method to query the tokens linked to a specific api_key. Results are paginated: limit sets the number of tokens per page (maximum 500) and page selects the page to return. api_key, method and limit are required; if any of them is missing or invalid, the API responds with HTTP 400 and error code 2.
| api_key required | string^[a-z0-9]{8}$ api_key to identify the client in the service |
| method required | string Value: "get" Operation to perform. The only supported value is Example: |
| limit required | integer [ 1 .. 500 ] Number of tokens per page. Minimum Example: |
| page | integer >= 1 Default: 1 Specify the page number you want to retrieve. Each page contains up to Example: |
| code | string Entity code used to filter the tokens. If omitted, the tokens of all entities are returned. Example: |
| sort_by | string Default: "created_at" Enum: "created_at" "accesed_at" Field used to sort the results: Example: |
| sort_order | string Default: "DESC" Enum: "ASC" "DESC" Sort direction: Example: |
api_key=a1b2c3d4&method=get&limit=100&page=1
{- "success": true,
- "payload": {
- "tokens": [
- {
- "created_at": "2026-09-18 10:26:00",
- "accessed_at": "2026-09-20 08:15:42",
- "times_accesed": 12,
- "token": "FRJ0mHlaqZwLzu",
- "code": "bbva",
- "contract_name": "",
- "latest_code": 0,
- "latest_session": "3463754E3540884"
}
]
}, - "pagination": {
- "total_results": 1,
- "total_pages": 1,
- "current_page": 1
}, - "statistics": {
- "SESSION": "3463754e3540884",
- "execution_time": 0.0215
}
}This method allows revoking an existing token to disauthorize future API access requests.
| api_key | string Identifies the client in the service |
| token | string Token to be revoked. |
{- "success": true,
- "message": "Token successfully revoked."
}This method allows reassigning a token from one api_key to another. Both api_keys must be active and belong to the same company, and the token must belong to api_key_source.
| api_key_source | string api_key from which to reassign the token. |
| api_key_target | string api_key to which to reassign the token. |
| token | string Token to be reassigned. Example: |
api_key_source=a1b2c3d4e5f6g7h8i9j0&api_key_target=b2c3d4e5f6g7h8i9j0k1&token=FRJ0mHlaqZwLzu
{- "success": true,
- "message": "Token successfully reassigned."
}Adds the association between the domain that will host the widget and the destination webhook. To edit or test your domains, use https://www.wealthreader.com/clients/
| method required | string Method to execute. Example: |
| api_key required | string User's API key. |
| domain required | string Domain to add. Example: |
| url_callback required | string URL for callback. Example: |
| tokenize required | string Enum: "1" "0" Controls whether the widget initiates a tokenization flow:
Example: |
method=add&api_key=a1b2c3d4e5f6g7h8i9j0&domain=https%3A%2F%2Fwww.cliente.com&url_callback=https%3A%2F%2Fwww.cliente.com%2Fwebhooks%2Fwealthreader&tokenize=1
{- "success": true,
- "message": "string"
}List of error codes. Pay special attention to the fact that not all error codes should receive the same treatment from your application. For an incorrect password error, you should not retry the call with the same parameters, but for an error indicating that the entity is under maintenance, you can retry. Request a technical session with our team to resolve any questions about error management.
| lang | string Default: "es" Enum: "es" "en" Response language |
[- [
- {
- "code": 2,
- "description": "Incorrect call",
- "possible_reasons": "Some of the required parameters have not been sent or have been sent in an incorrect format",
- "how_to_proceed": "The text received in \"message\" will detail the reason for the error. For example, \"The parameter \"api_key\" is mandatory\"."
}
]
]List of warning codes.
| lang | string Default: "es" Enum: "es" "en" Response language |
[- [
- {
- "code": 2,
- "description": "Incorrect call",
- "possible_reasons": "Some of the required parameters have not been sent or have been sent in an incorrect format",
- "how_to_proceed": "The text received in \"message\" will detail the reason for the error. For example, \"The parameter \"api_key\" is mandatory\"."
}
]
]Optional endpoints not required for standard integrations. Use only if explicitly instructed by Wealth Reader.
This endpoint is optional and not required for standard integrations. Use only if explicitly instructed by Wealth Reader. Retrieves the list of supported entities and the information needed to draw the entity's login form.
| show_only_tested | integer Default: 0 Enum: 0 1 Indicates whether to show only tested entities. Default value is 0. In production environments, always use 1. |
[- {
- "code": "bancamarch",
- "name": "Bancamarch",
- "color": "#e23e4d",
- "inputs": {
- "document_type": {
- "required": false,
- "name": "DNI;Pasaporte"
}, - "user": {
- "required": true,
- "name": "Username"
}, - "password": {
- "required": true,
- "name": "Access key"
}
}, - "statistics": {
- "SESSION": "3463754e3540884",
- "execution_time": 0.958119869232178,
- "warnings": [
- {
- "code": 1000,
- "message": "No contracted funds",
- "product_type": "portfolios"
}
], - "operation_id": "1827C79229",
- "token": "FRJ0mHlaqZwLzu"
}
}
]This endpoint is optional and not required for standard integrations. Use only if explicitly instructed by Wealth Reader. This endpoint allows registering a user either on the portfolio transfer platform, Easytransfer, or on the reporting tool, Acumulas, based on a unique identifier.
| api_key required | string Authentication key (8 alphanumeric characters) |
| user_id required | string User identification document. Example: |
| service required | string Enum: "integra" "easy-transfer" Service associated with the user. Determines the data flow. Example: |
| email required | string <email> User email, used according to service type. Example: |
{- "success": true,
- "message": "User registered successfully"
}This endpoint is optional and not required for standard integrations. Use only if explicitly instructed by Wealth Reader. Checks if a user is registered in the Easytransfer or Acumulas system and returns the unique access link for the user.
| api_key required | string Authentication key |
| user_id required | string User identification document. Example: |
{- "success": true,
- "registered": true,
- "user_id": "12345",
- "links": {
}
}This endpoint is optional and not required for standard integrations. Use only if explicitly instructed by Wealth Reader. This endpoint allows unregistering a user from the Easytransfer or Acumulas platform service.
| api_key required | string Authentication key (8 alphanumeric characters) |
| user_id required | string User identification document. Example: |
| service required | string Enum: "integra" "easy-transfer" "all" Service from which to unregister the user. 'all' for all services. Example: |
{- "success": true,
- "message": "User unregistered successfully"
}This endpoint is optional and not required for standard integrations. Use only if explicitly instructed by Wealth Reader.
Important: To use batch process management on Wealthreader's side, a dedicated environment is required. This endpoint is not available on api.wealthreader.com.
The endpoints grouped under the "batch" tag allow processing multiple bank connections asynchronously,
unlike the /entities/ method which is synchronous. Ideal for:
This method starts asynchronous processing of one or multiple bank connections. Immediately returns a batch_id for tracking.
A webhook notification is sent to notification_url for each individual credential as soon as it completes, with the following payload fields: batch_id, credential_id, status, timestamp.
| api_key required | string Identifies the client in the service |
| notification_url required | string <uri> Webhook URL. A notification is sent to this URL for each individual credential as soon as it completes processing, not only once all connections in the batch are done. Example: |
required | Array of objects (batch-connection) non-empty List of connections to process |
{- "api_key": "a1b2c3d4e5f6g7h8i9j0",
- "connections": [
- {
- "credential_id": "cred_demo_001",
- "code": "caixabank",
- "token": "token123",
- "product_types": "accounts,portfolios"
}, - {
- "credential_id": "cred_demo_002",
- "code": "BBVA",
- "token": "token456",
- "product_types": "accounts",
- "date_from": "2024-01-01"
}
]
}{- "success": true,
- "batch_id": "batch_20250120_a1b2c3d4",
- "total_connections": 5,
- "estimated_completion_time": "2025-01-20T10:45:00Z"
}{- "batch_id": 10863151,
- "credential_id": "cred_demo_002",
- "status": "completed",
- "timestamp": "2026-05-13T08:02:47+00:00"
}This endpoint is optional and not required for standard integrations. Use only if explicitly instructed by Wealth Reader. Retrieves general statistics about the processing result of all connections in a batch.
| api_key required | string Identifies the client in the service |
| batch_id required | string Batch ID |
{- "api_key": "string",
- "batch_id": "string"
}{- "success": true,
- "batch_id": "batch_20250120_a1b2c3d4",
- "status": "completed",
- "statistics": {
- "start_time": "2019-08-24T14:15:22Z",
- "end_time": "2019-08-24T14:15:22Z",
- "total_execution_time": 125.5,
- "total_connections": 8,
- "successful_connections": 7,
- "failed_connections": 1
}
}This endpoint is optional and not required for standard integrations. Use only if explicitly instructed by Wealth Reader. Retrieves the result of a specific connection from the batch.
| api_key required | string Identifies the client in the service |
| batch_id required | string Batch ID |
| credential_id required | string Filter by specific credential_id |
{- "api_key": "string",
- "batch_id": "string",
- "credential_id": "string"
}{- "success": true,
- "payload": {
- "user_information": {
- "ID": "12345678Z",
- "name": "LUIS GARCIA BAQUERO",
- "gender": "male",
- "birth_date": "1980-09-26",
- "birth_place": "Ibiza",
- "email": "lgarcia@gmail.com",
- "cell_phone": "+34666123456",
- "address": "CALLE BAILEN 41 1A",
- "city": "MADRID",
- "country": "SPAIN",
- "postal_code": "28005",
- "marital_status": "married",
- "job": "CUENTA PROPIA"
}, - "portfolios": [
- {
- "subtype": "funds",
- "uuid": "05e4563f5bbf2d06efd0a29ebe7edbbb4e1bff63",
- "code": "1465010091400123456789",
- "name": "Fondo Dinámico",
- "currency": "EUR",
- "total_value": 3275.6,
- "weighted_return": 8.49,
- "annualized_volatility": 0,
- "yield": 256.27,
- "contributions": 3019.33,
- "withholdings": 0,
- "contracting_date": "2016-04-27",
- "linked_account": "ES4021005321592566566159",
- "portfolio_statement": "JVBERi0xLjQKJ...",
- "owners": [
- {
- "ID": "12345678Z",
- "name": "LUIS GARCIA BAQUERO",
- "role": "owner"
}
], - "composition": [
- {
- "ISIN": "LU1234567890",
- "ISIN_description": "My Fund Class A",
- "currency": "EUR",
- "weighting": 100,
- "shares": 225.0077,
- "price": 14.5577,
- "total_amount": 3275.6,
- "reference_currency": "EUR",
- "exchange_rate": 1
}
], - "transactions": [
- {
- "uuid": "05e4563f5bbf2d06efd0a29ebe7edbbb4e1bff63",
- "operation_pending": false,
- "operation_date": "2020-01-30",
- "value_date": "2020-01-30",
- "operation_type": "purchase",
- "shares": 1076.8273,
- "price": 11.1438,
- "total_amount": 12000,
- "currency": "EUR",
- "reference_currency": "USD",
- "exchange_rate": 1,
- "additional_info": [
- {
- "key": "string",
- "value": "string"
}
]
}
]
}
], - "accounts": [
- {
- "uuid": "8076932f04f73e27fe608fee4d12fca8708dec8c",
- "subtype": "checking",
- "interest_rate": 0.5,
- "line_of_credit_details": {
- "credit_limit": 50000,
- "interest_rate": 4.5,
- "credit_used": 15000,
- "credit_available": 35000,
- "constitution_date": "2021-05-20",
- "expiration_date": "2031-05-20"
}, - "code": "ES4914651234561234567890",
- "name": "Cuenta NÓMINA",
- "currency": "EUR",
- "owners": [
- {
- "ID": "12345678Z",
- "name": "LUIS GARCIA BAQUERO",
- "role": "owner"
}
], - "balances": {
- "available": 14302.07,
- "current": 14302.07
}, - "additional_info": [
- {
- "key": "string",
- "value": "string"
}
], - "transactions": [
- {
- "uuid": "d0c2ea4c072cf4d7b0fd494d7728260d736e6b25",
- "operation_date": "2022-12-30",
- "value_date": "2022-12-30",
- "amount": -1.1,
- "balance": 14302.07,
- "description": "Pago en TELPARK MADRID ES",
- "pdf_file": "string",
- "pdf_file_settled": true,
- "categorization": {
- "type": 1,
- "portfolio-uuid": "1465010091400123456789",
- "ISIN": "US88160R1014"
}, - "transfer_details": {
- "concept": "Pago de factura 12345",
- "sender_receiver": "Juan Pérez",
- "account_number": "ESXX12341234121234567890"
}, - "additional_info": [
- {
- "key": "string",
- "value": "string"
}
]
}
]
}
], - "cards": [
- {
- "status": "active",
- "subtype": "credit",
- "uuid": "aefd89eade0a6a09d9b8eab4c22da6a6a37632e6",
- "code": "516097********1234",
- "name": "Credit Card",
- "currency": "EUR",
- "next_payment_date": "2023-01-05",
- "anual_interest": 17.48,
- "tae": 18.95,
- "balances": {
- "available": 3980,
- "limit": 4000,
- "disposed": 20
}, - "linked_account": "ES4021005321592566566159",
- "owner": [
- {
- "ID": "12345678Z",
- "name": "LUIS GARCIA BAQUERO",
- "role": "owner"
}
], - "additional_info": [
- {
- "key": "string",
- "value": "string"
}
], - "transactions": [
- {
- "uuid": "78ceedca9cd9d2f2bfbb2439795ab6a1fcefc12b",
- "settled": false,
- "operation_date": "2022-12-28",
- "value_date": "2022-12-28",
- "amount": -20,
- "currency": "EUR",
- "exchange_rate": 1,
- "description": "Pago en AMZN MKTP ES123CM0ZM4",
- "categorization": {
- "type": 0
}, - "additional_info": [
- {
- "key": "string",
- "value": "string"
}
]
}
]
}
], - "receipts": [
- {
- "last_receipt_date": "2023-07-23",
- "issuer": "Canal de Isabel II",
- "description": "RECIBO CONTRATO 328774628 FACTURA DEL 18 07 23",
- "account": "ES0123456789012345678901",
- "status": "paid",
- "amount": 50.75,
- "pdf_file": "string",
- "pdf_file_settled": true
}
], - "loans": [
- {
- "uuid": "0ae4d722b1c82feeafb4b36b2893230444071335",
- "contract_number": "9620.321-205439-70",
- "loan_type": "Variable rate mortgage",
- "constitution_date": "2022-02-23",
- "currency": "EUR",
- "granted_capital": 207000,
- "pending_amount": 166639.77,
- "next_installment": 1040.3,
- "linked_account": "ES0123456789012345678901",
- "holders": [
- {
- "id": "32945945D",
- "name": "Diego Serrano"
}
], - "interest_rate": 3.768,
- "expiration_date": "2042-03-01",
- "pending_receipts": 223,
- "amortization_made": [
- {
- "uuid": "8772d6c978d37d7af83094abf380b8b703e94105",
- "date": "2022-12-01",
- "amortized": 515.43,
- "interest": 524.87,
- "total": 1040.3,
- "pending_capital": 166639.77,
- "operation_type": "receipt_paid"
}
], - "amortization_pending": [
- {
- "uuid": "e59296b79e7f80cec26679d2c65883025fd59295",
- "date": "2030-12-01",
- "amortized": 515.43,
- "interest": 524.87,
- "total": 1040.3,
- "pending_capital": 66639.77,
- "operation_type": "receipt_scheduled"
}
]
}
], - "deposits": [
- {
- "uuid": "0ae4d722b1c82feeafb4b36b2893230444071335",
- "code": "DPZ-1234567890",
- "name": "12-month deposit",
- "currency": "EUR",
- "principal": 10000,
- "pending_principal": 5000,
- "start_date": "2024-09-01",
- "maturity_date": "2025-09-01",
- "payment_frequency": "at_maturity",
- "capitalization": "none",
- "rate_type": "fixed",
- "nominal_interest_rate": 3,
- "apr_tae": 3.04,
- "day_count_convention": "ACT/365",
- "linked_account": "ES4021005321592566566159",
- "accrued_interest": 24.58,
- "expected_interest_total": 300,
- "withholding_tax_rate": 19,
- "status": "active",
- "auto_renewal": {
- "enabled": false,
- "renewed_times": 0,
- "next_renewal_date": "2019-08-24",
- "renewal_term_months": 0
}, - "early_withdrawal": {
- "allowed": true,
- "penalty_type": "interest_loss",
- "penalty_value": 100,
- "notes": "Loss of accrued interest for the current period"
}, - "owners": [
- {
- "ID": "12345678Z",
- "name": "LUIS GARCIA BAQUERO",
- "role": "owner"
}
], - "interest_movements": [
- {
- "uuid": "90763109952d4f2ebece8dceca8254078c5384a0",
- "scheduled": false,
- "date": "2025-09-01",
- "period_start": "2024-09-01",
- "period_end": "2025-09-01",
- "currency": "EUR",
- "gross_interest": 300,
- "withholding_tax": 57,
- "net_interest": 243,
- "payment_type": "maturity"
}
], - "principal_movements": [
- {
- "uuid": "90763109952d4f2ebece8dceca8254078c5384a0",
- "date": "2019-08-24",
- "type": "opening",
- "amount": 12000,
- "currency": "string",
- "target_account": "string"
}
]
}
], - "leases": [
- {
- "subtype": "leasing",
- "uuid": "1f0a0b1c2d3e4f5a6b7c8d9e0f1234567890abcd",
- "contract_number": "L-2024-000123",
- "name": "BMW 3 Series Leasing",
- "provider": {
- "name": "Banco XYZ Renting, S.A.",
- "tax_id": "A12345678"
}, - "currency": "EUR",
- "start_date": "2024-10-01",
- "end_date": "2028-09-30",
- "term_months": 48,
- "payment_frequency": "monthly",
- "status": "active",
- "linked_account": "ES4021005321592566566159",
- "holders": [
- {
- "ID": "12345678Z",
- "name": "LUIS GARCIA BAQUERO",
- "role": "owner"
}
], - "asset": {
- "category": "vehicle",
- "description": "BMW 320d Touring",
- "vin": "WBA8G51040K123456",
- "license_plate": "1234-ABC",
- "brand": "BMW",
- "model": "320d",
- "year": 2024,
- "serial_number": "string",
- "address": "string"
}, - "financials": {
- "capital_financed": 35000,
- "nominal_interest_rate": 4.25,
- "apr_tae": 4.38,
- "discount_rate": 0,
- "initial_fee": 3000,
- "security_deposit": 1000,
- "residual_value": 12000,
- "purchase_option": true,
- "services_included": {
- "maintenance": true,
- "insurance": true,
- "roadside_assistance": true,
- "tires": false
}, - "vat_included": true,
- "mileage_limit_year": 15000,
- "early_termination": {
- "allowed": true,
- "penalty_type": "percentage_of_remaining",
- "penalty_value": 40
}
}, - "totals": {
- "paid_installments": 10,
- "remaining_installments": 38,
- "total_paid": 0,
- "total_pending": 0,
- "principal_outstanding": 0,
- "accrued_interest": 0
}, - "installments": {
- "paid": [
- {
- "uuid": "b07a1a0d3e6f4c2a9e1d0f8b7c6a5e4d3c2b1a0f",
- "date": "2025-01-01",
- "status": "pending",
- "currency": "EUR",
- "total": 625.5,
- "breakdown": {
- "principal": 450,
- "interest": 80,
- "services": 70,
- "taxes": 25.5,
- "fees": 0
}, - "value_date": "2019-08-24",
- "receipt_uuid": "string",
- "additional_info": [
- {
- "key": "string",
- "value": "string"
}
]
}
], - "scheduled": [
- {
- "uuid": "b07a1a0d3e6f4c2a9e1d0f8b7c6a5e4d3c2b1a0f",
- "date": "2025-01-01",
- "status": "pending",
- "currency": "EUR",
- "total": 625.5,
- "breakdown": {
- "principal": 450,
- "interest": 80,
- "services": 70,
- "taxes": 25.5,
- "fees": 0
}, - "value_date": "2019-08-24",
- "receipt_uuid": "string",
- "additional_info": [
- {
- "key": "string",
- "value": "string"
}
]
}
]
}
}
], - "insurances": [
- {
- "uuid": "0ae4d722b1c82feeafb4b36b2893230444071335",
- "code": "969032717626333",
- "coverage_category": "property",
- "name": "MyBox Hogar",
- "currency": "EUR",
- "insured_value": {
- "name": "PISO / Residencia secundaria 46023 VALENCIA",
- "value": 250000
}, - "insured_concepts": [
- {
- "description": "Fire",
- "value": 25000
}
], - "constitution_date": "2020-01-01",
- "expiration_date": "2021-01-01",
- "next_payment_date": "2020-02-01",
- "next_installment": 800,
- "frequency": "monthly",
- "status": "active",
- "linked_account": "ES4914651234561234567890",
- "owner": {
- "ID": "07133834N",
- "name": "LUIS GARCIA BAQUERO"
}, - "claims": [
- {
- "uuid": "8772d6c978d37d7af83094abf380b8b703e94105",
- "claim_code": "0122074354T2",
- "incident_date": "2023-05-13",
- "claimed_date": "2023-05-15",
- "description": "Rotura de lunas por impacto de objetos",
- "status": "in_process"
}
]
}
], - "properties": [
- {
- "uuid": "string",
- "code": "string",
- "description": "string",
- "purpose": "string",
- "currency": "string",
- "trading_price": 0,
- "trading_year": 0,
- "historic_prices": [
- {
- "date": "2019-08-24",
- "price": 0
}
]
}
], - "files": [
- {
- "file_date": "2023-07-21",
- "retrieval_type": "repository",
- "file_type": "Norma 43",
- "description": "Monthly account statement",
- "content": "string"
}
], - "contracts": [
- {
- "signing_date": "2003-09-26",
- "type": "loan",
- "subtype": "mortgage",
- "description": "Variable rate mortgage",
- "pdf_file": "string"
}
], - "factoring": [
- {
- "uuid": "a62ae601a424403d0fbe968d335378421006c277",
- "contract_number": "000117001234567",
- "name": "FACTORING PPAL SIN RECURSO",
- "assignor_id": "B12345678",
- "assignor": "QUICKSILVER DISTRIBUCION Y LOGISTICA SL",
- "assignor_type": "non-recourse-factor",
- "assignee": "Banco Sabadell",
- "currency": "EUR",
- "balances": {
- "available": 11360.26,
- "disposed": 0,
- "limit": 11360.26
}, - "interest_rate": 5.25,
- "linked_account": "ES0700812345678987654321",
- "next_payment_date": "",
- "number_invoices": 8,
- "total_value": 14495.28,
- "total_advanced_value": 6919.29,
- "clients": [
- {
- "uuid": "2ea19f8f8bcda4fa5e54e139852e0a7459d16b49",
- "client_id": "A12345678",
- "client_name": "EMPRESA 1 SA",
- "limit": 50000,
- "disposed": 15000,
- "available": 35000,
- "payment_method": "transfer_payment",
- "payment_deadline": 30
}
], - "invoices": [
- {
- "uuid": "6b556584df0721e5f0b27448247c9682a6470d11",
- "invoice_id": "2023-53",
- "client_id": "A12345678",
- "operation_date": "2023-10-25",
- "due_date": "2024-01-24",
- "payment_date": "2024-01-20",
- "invoice_amount": 918.45,
- "received_amount": 873.53,
- "status": "funded",
- "additional_info": [
- {
- "key": "string",
- "value": "string"
}
]
}
], - "transactions": [
- {
- "uuid": "8a3b5c7d9e1f2a4b6c8d0e2f4a6b8c0d2e4f6a8b",
- "operation_date": "2023-10-25",
- "value_date": "2023-10-26",
- "amount": 1500,
- "currency": "EUR",
- "description": "ANTICIPO FACTURA 2023-53"
}
]
}
], - "confirming": [
- {
- "uuid": "a62ae601a424403d0fbe968d335378421006c277",
- "contract_number": "000117001234567",
- "name": "CONFIRMING PPAL SIN RECURSO",
- "currency": "EUR",
- "balances": {
- "available": 11360.26,
- "disposed": 0,
- "limit": 11360.26
}, - "interest_rate": 5.25,
- "linked_account": "ES0700812345678987654321",
- "next_payment_date": "",
- "number_invoices": 8,
- "total_value": 14495.28,
- "total_advanced_value": 6919.29,
- "deferrals": [
- {
- "status": "paid",
- "overdue": true,
- "start_date": "2019-08-24",
- "due_date": "2019-08-24",
- "total_value": 0,
- "deferred_value": 0,
- "interest_value": 0,
- "interest_rate": 0,
- "late_fees": 0
}
], - "deferrals_summary": {
- "count": 0,
- "total_value": 0,
- "deferred_value": 0,
- "interest_value": 0,
- "late_fees": 0
}, - "providers": [
- {
- "uuid": "2ea19f8f8bcda4fa5e54e139852e0a7459d16b49",
- "company_id": "A12345678",
- "company_name": "EMPRESA 1 SA"
}
], - "invoices": [
- {
- "uuid": "6b556584df0721e5f0b27448247c9682a6470d11",
- "invoice_id": "2023-53",
- "provider_id": "A12345678",
- "operation_date": "2023-10-25",
- "due_date": "2024-01-24",
- "amount": 918.45,
- "status": "advanced",
- "additional_info": [
- {
- "key": "string",
- "value": "string"
}
]
}
], - "additional_info": [
- {
- "key": "string",
- "value": "string"
}
]
}
], - "employment": {
- "summary": {
- "totalDaysRegistered": 8912,
- "daysInMultipleActivity": 130,
- "daysContributedForBenefits": 8782,
- "totalTimeEquivalence": "24 años, 0 meses y 17 días."
}, - "periods": [
- {
- "employer": "TRABAJADOR AUTONOMO",
- "regime": "AUTONOMO",
- "contract": "INDEFINIDO.TIEMPO COMPLETO.ORDINARIO",
- "category": "INGENIEROS LICENCIADOS",
- "actualStartDate": "2022-11-10",
- "startDate": "2022-11-10",
- "endDate": "Actual",
- "contributedDays": 1062
}
], - "pdf_file": "string"
}, - "tax_returns": [
- {
- "uuid": "5f2b9c1e8a7d3046b1c9e2f4a6d8b0c3e5f7a9b1",
- "issuer": "AEAT",
- "model": "100",
- "fiscal_year": 2025,
- "period": "0A",
- "receipt_number": "2025100000123456",
- "secure_verification_code": "A1B2C3D4E5F6G7H8",
- "filing_date": "2026-05-20",
- "filing_type": "individual",
- "holder_id": "99999999R",
- "holder_name": "APELLIDO1 APELLIDO2, NOMBRE",
- "spouse_id": "11111111H",
- "spouse_name": "APELLIDO3 APELLIDO4, NOMBRE",
- "currency": "EUR",
- "general_taxable_base": 32450.18,
- "savings_taxable_base": 1250.4,
- "general_liquid_base": 30120.18,
- "savings_liquid_base": 1250.4,
- "state_gross_tax": 3655.27,
- "regional_gross_tax": 3540.12,
- "state_net_tax": 3480.15,
- "regional_net_tax": 3398.6,
- "resulting_tax": 6878.75,
- "withholdings_and_payments": 7378.45,
- "differential_tax": -499.7,
- "result_amount": -499.7,
- "result_type": "refundable",
- "xml_file": "string",
- "pdf_file": "string"
}
], - "credit_reports": [
- {
- "uuid": "3c1f0e7a9b2d4c6e8f0a1b3c5d7e9f1a2b4c6d8e",
- "issuer": "BDE",
- "report_type": "summary",
- "report_name": "Informe Global",
- "reference": "I2026100100000000",
- "period": "2026-08",
- "request_date": "2026-10-01",
- "issue_date": "2026-10-01",
- "available_until": "2026-10-21",
- "file_name": "Informe Agregado.pdf",
- "pdf_file": "string"
}
]
}, - "statistics": {
- "SESSION": "3463754e3540884",
- "execution_time": 0.958119869232178,
- "warnings": [
- {
- "code": 1000,
- "message": "No contracted funds",
- "product_type": "portfolios"
}
], - "operation_id": "1827C79229",
- "token": "FRJ0mHlaqZwLzu"
}
}Account-holder verification: check whether an IBAN belongs to a holder name through the SEPA Verification of Payee (VoP) of the bank linked to your licence. Step-by-step guide: MyBankMatch.
Checks whether an IBAN belongs to the indicated holder through the SEPA Verification of Payee (VoP) of your own bank, linked to your WealthReader licence. It returns the bank's verdict: it does not compute a local name similarity and it does not create, authorise or execute any payment order.
Before the first call
MY_BANK_MATCH product and available quota.api_key; the bank token is never returned to the browser nor sent as a parameter.Request: form-encoded body (application/x-www-form-urlencoded) with api_key, iban and name, like /entities/. No JSON body and no X-API-Key header. Keep the api_key in your backend.
Response: HTTP 200 means a product result was obtained, not that the name matches. Check success and then payload.result:
payload.result |
Meaning | Extra fields | Billable |
|---|---|---|---|
MATCH |
The bank considers that the name matches the holder. | None. | Yes, 0.10 EUR. |
PARTIAL_MATCH |
The bank returns a partial match (CLOSE_MATCH). |
suggested_name. |
Yes, 0.10 EUR. |
NO_MATCH |
The bank states that the name does not match. | None. | Yes, 0.10 EUR. |
NOT_CONFIGURED |
The licence has no linked bank yet. | setup_url. |
No. |
REAUTH_REQUIRED |
The bank connection needs a new authentication. | setup_url, reason_code. |
No. |
NOT_POSSIBLE |
A usable verdict could not be obtained. It is not a NO_MATCH. |
reason. |
No. |
Only MATCH, PARTIAL_MATCH and NO_MATCH consume quota. Input errors and inconclusive results are not billed.
No idempotency key and no free retry. If the response is lost (timeout, network or an unreadable body), the result and its quota consumption may be unknown to your application. Do not resend the same query automatically: check the history in Clients and contact support with statistics.SESSION.
Full guide: MyBankMatch.
| api_key required | string 8 hexadecimal characters of an active licence with the MY_BANK_MATCH product and available quota. Keep it in your backend. |
| iban required | string IBAN of a SEPA country. Spaces are removed, it is uppercased and the country length and the mod-97 check digits are validated. Example: |
| name required | string <= 140 characters Holder name. Not empty, valid UTF-8, no control characters and up to 140 characters. It is trimmed and its inner spaces are collapsed. Example: |
api_key=a1b2c3d4&iban=ES9321005707250200257112&name=Wealthreader%20S.L.
{- "success": true,
- "payload": {
- "result": "MATCH"
}, - "statistics": {
- "SESSION": "0123456789abcdef",
- "execution_time": 0.42,
- "warnings": [ ]
}
}Account-to-account SEPA payments initiated from the payer's bank. There are two ways to integrate:
POST /payments/?action=fast-track returns the payment URL and Wealth Reader notifies your notification_url with OK or KO. See Payments Fast Track.POST /payments/?action=create, opens the widget with the returned token and confirms the result with POST /payments/?action=status. See Payments introduction and States and reconciliation.Common rules for every /payments/?action=... call
POST with header Content-Type: application/json and a JSON object body (maximum 32768 bytes).X-API-Key header (wr_live_ followed by 72 letters or digits) of an active licence with the PAYMENTS product. It is never sent in the body. Each authenticated call counts towards the licence call limit.422 invalid_request.payment_status: settled. A widget event, an SCA return or interaction_status: completed never mean the payment is settled.Error format: application/json (not problem+json) with a stable error.code; error.message is informative and may change.
{"success": false, "error": {"code": "invalid_request", "message": "The request body has an invalid schema."}}
| HTTP | error.code |
Reason |
|---|---|---|
| 400 | invalid_json |
Empty or invalid body, or not a JSON object. |
| 401 | invalid_api_key |
Missing, malformed, unknown or inactive X-API-Key. |
| 403 | payments_not_allowed |
The licence does not have the PAYMENTS product. |
| 404 | action_not_found |
Unknown action. |
| 405 | method_not_allowed |
Method other than POST. |
| 413 | request_too_large |
Body larger than 32768 bytes. |
| 415 | json_required |
Content-Type other than application/json. |
| 422 | invalid_request |
Missing or unexpected fields. |
| 429 | api_limit_reached |
The licence call limit has been reached. |
| 500 | internal_error |
Unexpected error. |
| 503 | payments_disabled, payments_accept_new_disabled, payment_storage_unavailable, payment_state_unavailable |
Service temporarily unavailable, or new payments paused. |
Wealth Reader sends this POST to the notification_url of a Fast Track payment when it checks the payment status and finds it in a final state. reconciliation_required is not final and is not notified: confirm it with status.
outcome is ok only when the bank has settled the payment (settled); rejected, cancelled, expired and failed notify ko.status. There is no separate scheduled sender: if the payer leaves before the bank concludes, or your server does not answer 2xx, the notification is sent in the next check. If it has not arrived a few minutes after redirecting the payer, call status with the payment_intent_id; that call also triggers the pending notification.2xx to mark it as delivered. Wealth Reader does not follow redirects and waits at most 3 seconds.customer_reference plus outcome as idempotent.status using your X-API-Key and the payment_intent_id of the notification.| User-Agent required | string Value: "WealthReader-Payments" |
| outcome required | string Enum: "ok" "ko"
|
| payment_status required | string Enum: "settled" "rejected" "cancelled" "expired" "failed" Final financial result. |
| customer_reference required | string The |
| payment_intent_id required | string <uuid> Identifier returned by |
{- "outcome": "ok",
- "payment_status": "settled",
- "customer_reference": "11111111-1111-4111-8111-111111111111",
- "payment_intent_id": "3f2b8c1e-5d4a-4b6f-9e21-7c0d4a1b2e3f"
}Single call that returns the payment URL. The payer opens it and authorises in their bank; when the payment reaches a final state, Wealth Reader notifies your notification_url with OK or KO (see the notification_url webhook). Underneath, the same immutable intent as create is created: amount, beneficiary and reference are fixed before reaching the browser.
The Idempotency-Key header is also your merchant reference (customer_reference in the notification): you do not send it in the body. Repeating the same key with the same body returns the same URL; reusing it with other data (including another logo) responds 409 idempotency_conflict.
An instant payment has no specific limit in this API: the bank rejects the one it cannot accept, also because of the amount, and that rejection arrives as KO.
| X-API-Key required | string API key of a licence with the PAYMENTS product. Keep it in your backend. |
| Idempotency-Key required | string [ 16 .. 128 ] characters 16 to 128 characters; it must start with a letter or digit and contain only letters, digits and |
| amount required | string Amount in major units, as a JSON string. Example: |
| currency required | string Value: "EUR" ISO 4217 currency. Only Example: |
required | object (payments-beneficiary) Payee of the transfer. It cannot be changed after the payment is created. |
| reference required | string [ 1 .. 140 ] characters Statement reference, up to 140 characters. Example: |
| priority required | string Enum: "normal" "instant"
Example: |
| notification_url required | string <= 2000 characters Public Example: |
| logo | string <= 2048 characters Optional. Public Example: |
{- "amount": "15.50",
- "currency": "EUR",
- "beneficiary": {
- "name": "Comercio Online S.L.",
- "iban": "ES9121000418450200051332"
}, - "reference": "Pedido 78901",
- "priority": "normal",
}{- "payment_intent_id": "3f2b8c1e-5d4a-4b6f-9e21-7c0d4a1b2e3f"
}Creates an immutable payment intent and returns a short-lived token to open the widget in the payer's browser. Amount, beneficiary and reference are fixed in the backend and cannot be modified from the browser. After the widget closes, confirm the result from your backend with status.
There are two body variants:
amount_minor, currency, beneficiary, reference, customer_reference and allowed_origin.cruz_roja_demo): Wealth Reader fixes beneficiary, reference and limits; you send profile, institution_code, amount_minor, customer_reference and allowed_origin. Get the banks with profile-institutions.Repeating the same Idempotency-Key with the same body returns the same intent (200, idempotent_replay: true); reusing it with other data responds 409 idempotency_conflict. The key is scoped to your company.
Guide: Intents and idempotency and Widget integration.
| X-API-Key required | string API key of a licence with the PAYMENTS product. Keep it in your backend. |
| Idempotency-Key required | string [ 16 .. 128 ] characters 16 to 128 visible ASCII characters. Generate one per payment (a UUID v4 is valid) and reuse it if you retry the call. |
| amount_minor required | integer >= 1 Amount in minor units (cents) as a JSON integer. Example: |
| currency required | string Value: "EUR" |
required | object (payments-beneficiary) Payee of the transfer. It cannot be changed after the payment is created. |
| reference required | string [ 1 .. 140 ] characters Statement reference, up to 140 characters. Example: |
| customer_reference required | string <= 128 characters Your internal reference for the payment. 1 to 128 characters; it starts with a letter or digit and contains only letters, digits and Example: |
| allowed_origin required | string Origin ( Example: |
| locale | string Value: "es" Optional. Widget language; only |
| expected_mode | string Enum: "mock" "live" Optional. If it does not match the environment, the call responds |
| allowed_institution_codes | Array of strings <= 2500 items Optional. Non-empty list of unique bank codes (see Example:
|
| logo | string or null Optional. Public |
{- "amount_minor": 1500,
- "currency": "EUR",
- "beneficiary": {
- "name": "Comercio Online S.L.",
- "iban": "ES9121000418450200051332"
}, - "reference": "Pedido 78901",
- "customer_reference": "order-78901",
}{- "success": true,
- "payment": {
- "id": "3f2b8c1e-5d4a-4b6f-9e21-7c0d4a1b2e3f",
- "state": "ready",
- "payment_status": "not_initiated",
- "idempotent_replay": true,
- "widget": {
- "token": "wrp_w_…",
- "expires_at": "2026-11-08T10:15:00+00:00"
}
}
}Server-to-server query of the status of a payment, until a bank conclusion is reached. A callback, an SCA return or closing the widget are not a financial confirmation: only payment_status: settled is.
Wealth Reader limits external queries per intent; apply backoff in your backend too and do not create another intent while the result is ambiguous.
Ambiguous result: a network failure, timeout or unrecognised response after the initiation was sent changes the intent to reconciliation_required with payment_status: unknown, and the response includes reconciliation. The initiation is never repeated automatically. Keep the identifier and the idempotency key, do not create another intent nor authorise again, and when automatic_recovery is false stop polling and escalate to support with reconciliation.reference.
For Fast Track payments, this query also sends the pending OK/KO notification to notification_url when the payment has reached a final state.
| X-API-Key required | string API key of the licence that created the payment. |
| payment_intent_id required | string <uuid>
Example: |
| refresh | boolean Default: true Optional. |
{- "payment_intent_id": "3f2b8c1e-5d4a-4b6f-9e21-7c0d4a1b2e3f",
- "refresh": true
}{- "success": true,
- "payment": {
- "id": "3f2b8c1e-5d4a-4b6f-9e21-7c0d4a1b2e3f",
- "amount_minor": 1500,
- "currency": "EUR",
- "beneficiary": {
- "name": "Comercio Online S.L.",
- "iban_masked": "ES91••••••••••••••••1332"
}, - "reference": "Pedido 78901",
- "payment_attestation": {
- "mode": "live",
- "provider_binding": "…",
- "allowed_institution_codes": null,
- "profile": null,
- "profile_version": null
}, - "state": "settled",
- "interaction_status": "finished",
- "payment_status": "settled",
- "reconciliation_required": false,
- "expires_at": "2026-11-08T10:30:00+00:00",
- "updated_at": "2026-11-08T10:04:12+00:00"
}
}Returns the conditions of a managed profile enabled for your company (beneficiary, reference, amount limits) and the banks the payer can choose from. Use the chosen code as institution_code in create.
| X-API-Key required | string API key of a licence with the PAYMENTS product. |
| profile required | string Managed profile code. Example: |
{- "profile": "cruz_roja_demo"
}{- "success": true,
- "profile": {
- "code": "cruz_roja_demo",
- "version": "2026-09-04",
- "currency": "EUR",
- "min_amount_minor": 1,
- "max_amount_minor": 100,
- "reference": "Donativo desde la demo de Wealthreader.com",
- "beneficiary_name": "Cruz Roja Española",
- "payment_attestation": {
- "mode": "live",
- "provider_binding": "…"
}, - "institutions": [
- {
- "code": "santander-es",
- "name": "Banco Santander",
- "country": "ES",
- "requires_debtor_iban": false,
}
]
}
}Catalogue of banks that can initiate payments, with their logo and supported payment methods. X-API-Key is optional; if you send it, it is validated and counts as a call. It also accepts POST with the same filters in a JSON body, and POST /payments/?action=entities with mandatory X-API-Key.
Unknown filters are ignored and never produce a validation error.
| country | string Example: country=ES ISO 3166-1 alpha-2 country code. Example: |
| search | string Case-insensitive text contained in the name or code (alias |
| code | string Example: code=santander-es Exact bank code, case-insensitive. Example: |
| payment_method | string Enum: "sepa_credit_transfer" "instant_sepa_credit_transfer" Only banks that support this payment method. |
| limit | integer [ 1 .. 2000 ] Page size (1 to 2000). |
| offset | integer >= 0 Number of results to skip. |
| X-API-Key | string Optional. If sent, it is validated and counts as a call. |
{- "success": true,
- "total": 1,
- "entities": [
- {
- "code": "santander-es",
- "name": "Banco Santander",
- "country": "ES",
- "logo_fallback": null,
- "logo_source": "wealthreader",
- "payment_methods": [
- "sepa_credit_transfer",
- "instant_sepa_credit_transfer"
], - "requires_debtor_iban": false
}
]
}Real-time card expense synchronization from the Open Sync mobile app: per-customer employee pre-registration, signed webhooks (card_transaction.created / card_enrollment.confirmed), and REST query / backfill.
Creates or updates the webhook URL of the customer for the card_transaction.created and card_enrollment.confirmed events (see the cards-webhook-delivery schema for the delivery format and signature). On first setup, or when rotate_secret is true, a new webhook_secret (64 hex characters) is generated and returned once; in any other case webhook_secret comes back as null in the response and cannot be retrieved again. webhook_url must always be https:// and must resolve to a publicly routable host: localhost, private, loopback, link-local (including the cloud metadata address), CGNAT, multicast and reserved addresses are rejected, in any notation (hexadecimal, decimal, octal, short dotted or IPv4-mapped IPv6), and so is a hostname that does not resolve at all. The same check runs again right before every delivery, not only at registration: if the host is repointed at an internal address afterwards (DNS rebinding) the delivery is closed as failed with response_excerpt "blocked_host". Sending null in webhook_url disables webhooks for that customer; omitting the field leaves the stored URL untouched, which is how the secret is rotated without changing the URL.
| api_key required | string API key of the customer. |
| webhook_url | string or null https:// URL that will receive the events, on a publicly routable host that resolves in DNS. null disables webhooks; omitting the field leaves the stored URL unchanged. Example: |
| rotate_secret | boolean Default: false When true, generates and returns a new webhook_secret. |
{- "api_key": "a1b2c3d4",
- "rotate_secret": false
}{- "success": true,
- "payload": {
- "webhook_secret": "9f1c2b3a4d5e6f708192a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5d6e7f8",
- "active": true
}
}Creates an enrollment request in pending status with a short expiry (ttl_minutes, 20 by default, between 1 and 60) for the employee to confirm by opening the mobile app and entering that email (POST /user-sync-validation/, no contract change for the app). It is idempotent: repeating the call for the same (api_key, email) while it is still pending and not expired returns the same request. If the email is already linked to the calling customer, it returns status "active" directly. If it is already linked to a different customer, it returns 409. Rate limit: at most 60 calls to this endpoint per api_key every 60 seconds, counting every attempt and not only the ones that create a row, checked before anything else so the answers that create nothing (200 already active, 409 linked to another customer, 400) cannot be walked as an enumeration oracle. Exceeding it returns 429 with code rate_limited.
| api_key required | string API key of the customer. |
| email required | string <email> Email of the employee to pre-register. Example: |
| ttl_minutes | integer [ 1 .. 60 ] Default: 20 Minutes the request stays valid before expiring. |
{- "api_key": "a1b2c3d4",
- "email": "empleado@cliente.com",
- "ttl_minutes": 20
}{- "success": true,
- "payload": {
- "enrollment_id": "0f3a9c7b1d2e4f5a6b7c8d9e0f1a2b3c",
- "status": "pending",
- "email": "empleado@cliente.com",
- "expires_at": "2026-07-11T14:22:11+02:00",
- "confirmed_at": null,
- "user_id": null
}
}Read-only status of an enrollment request. It has no side effects on card users, unlike POST /user-sync-validation/, which does confirm. The only write allowed is lazily marking a pending enrollment whose expiry date has already passed as expired.
| api_key required | string Example: api_key=a1b2c3d4 API key of the customer. Note it travels in the query string, so it ends up in access logs and intermediary proxies. Example: |
| enrollment_id required | string Example: enrollment_id=0f3a9c7b1d2e4f5a6b7c8d9e0f1a2b3c Identifier returned by POST /cards/enrollments/. Example: |
{- "success": true,
- "payload": {
- "enrollment_id": "0f3a9c7b1d2e4f5a6b7c8d9e0f1a2b3c",
- "status": "active",
- "email": "empleado@cliente.com",
- "expires_at": "2026-07-11T14:22:11+02:00",
- "confirmed_at": "2026-07-11T14:10:03+02:00",
- "user_id": "e9f4c2a1b3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7"
}
}Returns the real-time card transactions received for the employees linked to this api_key, ordered by ascending id. Meant both for periodic backfill (poll with date_from/date_to and paginate with since_id) and for one-off queries. This is the same transaction object carried by the card_transaction.created webhook.
| api_key required | string Example: api_key=a1b2c3d4 API key of the customer. Note it travels in the query string, so it ends up in access logs and intermediary proxies. Example: |
| date_from | string <date> Example: date_from=2026-07-01 YYYY-MM-DD, on the operation date. Default: today minus 3 days. Example: |
| date_to | string <date> Example: date_to=2026-07-11 YYYY-MM-DD, on the operation date. Default: today. Example: |
string <email> Example: email=empleado@cliente.com Filters by the email of the employee. Example: | |
| since_id | integer Example: since_id=216 Exclusive cursor on the transaction id, for pagination. Example: |
| limit | integer <= 1000 Default: 500 Example: limit=500 Maximum number of transactions to return (500 by default, 1000 max). Example: |
{- "success": true,
- "payload": {
- "transactions": [
- {
- "id": 217,
- "payment_id": "550e8400-e29b-41d4-a716-446655440000",
- "user_id": "e9f4c2a1b3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7",
- "email": "empleado@cliente.com",
- "card_last4": "1234",
- "entity_code": "bbva",
- "operation_date": "2026-07-11",
- "value_date": "2026-07-11",
- "amount": -57.6,
- "currency": null,
- "description": "SAKE RESTAURANTE",
- "merchant": "SAKE RESTAURANTE",
- "category": "Other",
- "gps": {
- "lat": 39.4661559,
- "lon": -0.3679207
}, - "received_at": "2026-07-11T14:02:11+02:00"
}
], - "next_since_id": null
}
}