Trade Republic Data API: Endpoints and Fields
Trade Republic: Broker & Bank is Trade Republic Bank GmbH's Android client — a Berlin neobroker that also runs a licensed cash account. After phone-number plus PIN sign-in, customers buy stocks, ETFs, derivatives, crypto and bonds, run Sparplan savings plans, park euros on an IBAN cash account that pays interest, spend on a Visa debit with freeze and Google Pay, and (in France) hold a Livret A or PEA tax wrapper. The home hub also covers multi-portfolio browse, watchlists, junior accounts, AVD managed strategies, corporate actions and in-app support chat. The product is EU-only, with Germany as the home market and live apps in France and Spain, sitting next to Scalable Capital, flatex, Revolut and N26 for investors who want brokerage and a bank IBAN on the same phone.
Cash-account rows keyed by accountNumber carry amount and ISO currency, while deposit rails expose iban and bic on the primary payment address. Sparplan rows stamp instrumentId, fundingCashAccNo and nextExecutionDate; Visa debit cards return lastFourPan plus daily and monthly spendDaily / atmDaily windows. German Freistellungsauftrag state sits in used against maximum on the exemption order, Livret A (France) reports an ACTIVE balance, and the interest tile publishes currentInterestRate with earnedInterest.
Treasury, tax-wrapper and family-office tools recon cash versus brokerage, monitor Sparplan funding, and flag remaining Steuerfreibetrag — openData Studio turns those fields into callable open data.
Screenshots
API surface
The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.
PIN login
POST
/v1/auth/pin-sign-inopenbankingExchanges phoneNumber + pin for sessionToken / refreshToken JWTs plus the accountState and jurisdiction that shape every later call.
Auth: Phone number plus PIN (or passcode credential) in the request body. The response sessionToken JWT is sent as Authorization: Bearer on later calls; refreshToken rotates the session.
- phoneNumber
- pin
- subjectId
- refreshToken
- sessionToken
- accountState
- jurisdiction
- trackingId
POST /v1/auth/pin-sign-in HTTP/1.1 Content-Type: application/json X-App-Version: <appVersion> X-Client-Platform: android { "phoneNumber": "+491701234567", "pin": "<pin>", "subjectId": "sub-8f21c4" }{ "refreshToken": "<refreshToken>", "sessionToken": "<sessionToken>", "accountState": "ACTIVE", "jurisdiction": "DE", "trackingId": "trk-19a2b7" }Refresh session
POST
/v1/auth/session-renewalopenbankingMints a fresh session after PIN login: sessionToken JWT, accountState, jurisdiction, backendFeatures and subjectId.
Auth: subjectId in the request body; the renewed sessionToken JWT attaches as Authorization: Bearer.
- subjectId
- sessionToken.value
- accountState
- jurisdiction
- backendFeatures
- trackingId
POST /v1/auth/session-renewal HTTP/1.1 Authorization: Bearer <sessionToken> Content-Type: application/json { "subjectId": "sub-8f21c4" }{ "sessionToken": { "value": "<sessionToken>" }, "accountState": "ACTIVE", "jurisdiction": "DE", "backendFeatures": ["MULTI_PORTFOLIO", "CASH_TAB"], "trackingId": "trk-19a2b7", "subjectId": "sub-8f21c4" }Cash account balances
GET
/v1/accounts/cash/balancesopenbankingReads per-cash-account rows used on the Cash tab: accountNumber, ISO currency and amount.
Auth: Authorization: Bearer <sessionToken JWT> from the sign-in call, plus app-version and platform device headers.
- accountNumber
- currency
- amount
GET /v1/accounts/cash/balances HTTP/1.1 Authorization: Bearer <sessionToken> Accept: application/json{ "balances": [ { "accountNumber": "DE89370400440532013000", "currency": "EUR", "amount": 4287.55 } ] }Cash account IBAN details
GET
/v1/accounts/cash/{accountNumber}/deposit-detailsopenbankingReturns the SEPA deposit rail for a cash account: accountHolder name/authAccountId and paymentAddresses with iban and bic.
Auth: Authorization: Bearer <sessionToken JWT> from the sign-in call, plus app-version and platform device headers.
- accountHolder.name
- accountHolder.subType
- accountHolder.authAccountId
- paymentAddresses.primary
- paymentAddresses.details.iban
- paymentAddresses.details.bic
GET /v1/accounts/cash/DE89370400440532013000/deposit-details HTTP/1.1 Authorization: Bearer <sessionToken> Accept: application/json{ "accountHolder": { "name": "Anna Schmidt", "subType": "PRIVATE", "authAccountId": "acc-7c91e2" }, "paymentAddresses": [ { "primary": true, "details": { "iban": "DE89370400440532013000", "bic": "TRBKDEBBXXX" } } ] }Timeline transactions
GET
/v1/activity/feedopenbankingPages Cash-tab and brokerage timeline rows: id, timestamp, title/subtitle, status and amount.value/currency.
Auth: Authorization: Bearer <sessionToken JWT> from the sign-in call, plus app-version and platform device headers.
- id
- sectionId
- timestamp
- title
- subtitle
- status
- amount.value
- amount.fractionDigits
- amount.currency
- badge
GET /v1/activity/feed?limit=20 HTTP/1.1 Authorization: Bearer <sessionToken> Accept: application/json{ "items": [ { "id": "evt-aa12", "sectionId": "2026-10", "timestamp": "2026-10-18T09:15:02", "title": "Savings plan · IWDA", "subtitle": "Buy · 50.00 EUR", "status": "EXECUTED", "amount": { "value": -50.00, "fractionDigits": 2, "currency": "EUR" }, "badge": "SP" } ] }Portfolio latest performance
GET
/v1/portfolios/performance/summaryopenfinanceMarks the multi-portfolio header to market: performance.absoluteValue / relativeValue and currency.
Auth: Authorization: Bearer <sessionToken JWT> from the sign-in call, plus app-version and platform device headers.
- performance.absoluteValue
- performance.relativeValue
- currency
GET /v1/portfolios/performance/summary HTTP/1.1 Authorization: Bearer <sessionToken> Accept: application/json{ "performance": { "absoluteValue": 312.40, "relativeValue": 0.0187 }, "currency": "EUR" }Savings plans
GET
/v1/recurring-investmentsopenfinanceLists Sparplan rows: instrumentId, amount, interval, nextExecutionDate, paused and the fundingCashAccNo that funds each plan.
Auth: Authorization: Bearer <sessionToken JWT> from the sign-in call, plus app-version and platform device headers.
- id
- createdAt
- instrumentId
- amount.value
- amount.currency
- interval
- startDate
- nextExecutionDate
- paused
- fundingCashAccNo
- paymentMethodCode
- instrumentType
GET /v1/recurring-investments HTTP/1.1 Authorization: Bearer <sessionToken> Accept: application/json{ "plans": [ { "id": "sp-441", "createdAt": "2025-03-12T08:00:00Z", "instrumentId": "IE00B4L5Y983", "amount": {"value": 50.00, "currency": "EUR"}, "interval": "MONTHLY", "startDate": "NEXT_MONTH", "nextExecutionDate": "2026-11-01", "paused": false, "fundingCashAccNo": "DE89370400440532013000", "paymentMethodCode": "CASH", "instrumentType": "ETF" } ] }Current Visa debit card
GET
/v1/cards/activeopenbankingReads the signed-in Visa debit: lastFourPan, status, cardholderName, createTime/activateTime and isPinSet.
Auth: Authorization: Bearer <sessionToken JWT> from the sign-in call, plus app-version and platform device headers.
- id
- lastFourPan
- createTime
- activateTime
- status
- cardholderName
- isPinSet
GET /v1/cards/active HTTP/1.1 Authorization: Bearer <sessionToken> Accept: application/json{ "id": "card-aa12", "lastFourPan": "4242", "createTime": "2025-06-01T10:00:00", "activateTime": "2025-06-04T12:11:00", "status": "ACTIVE", "cardholderName": "ANNA SCHMIDT", "isPinSet": true }Card spending limits
GET
/v1/cards/limitsopenbankingSplits ATM vs POS headroom into daily/monthly windows: limitAmountWithCurrency vs currentSpendWithCurrency.
Auth: Authorization: Bearer <sessionToken JWT> from the sign-in call, plus app-version and platform device headers.
- atmDaily.limitType
- atmDaily.limitWindow
- atmDaily.limitAmountWithCurrency.value
- atmDaily.currentSpendWithCurrency.value
- atmMonthly.limitAmountWithCurrency.value
- spendDaily.limitAmountWithCurrency.value
- spendMonthly.currentSpendWithCurrency.value
- spendMonthly.maxAllowedLimitWithCurrency.value
GET /v1/cards/limits HTTP/1.1 Authorization: Bearer <sessionToken> Accept: application/json{ "atmDaily": { "limitType": "ATM", "limitWindow": "DAILY", "limitAmountWithCurrency": {"value": 500.00, "currency": "EUR"}, "currentSpendWithCurrency": {"value": 80.00, "currency": "EUR"}, "maxAllowedLimitWithCurrency": {"value": 1000.00, "currency": "EUR"} }, "atmMonthly": { "limitType": "ATM", "limitWindow": "MONTHLY", "limitAmountWithCurrency": {"value": 2000.00, "currency": "EUR"}, "currentSpendWithCurrency": {"value": 240.00, "currency": "EUR"}, "maxAllowedLimitWithCurrency": {"value": 5000.00, "currency": "EUR"} }, "spendDaily": { "limitType": "SPEND", "limitWindow": "DAILY", "limitAmountWithCurrency": {"value": 2500.00, "currency": "EUR"}, "currentSpendWithCurrency": {"value": 64.90, "currency": "EUR"}, "maxAllowedLimitWithCurrency": {"value": 5000.00, "currency": "EUR"} }, "spendMonthly": { "limitType": "SPEND", "limitWindow": "MONTHLY", "limitAmountWithCurrency": {"value": 8000.00, "currency": "EUR"}, "currentSpendWithCurrency": {"value": 1120.40, "currency": "EUR"}, "maxAllowedLimitWithCurrency": {"value": 15000.00, "currency": "EUR"} } }German tax exemption order
GET
/v1/tax/allowancesopenfinanceReads the Freistellungsauftrag: type SINGLE/JOINT, amount vs used vs maximum, validFrom/validUntil and syncStatus.
Auth: Authorization: Bearer <sessionToken JWT> from the sign-in call, plus app-version and platform device headers.
- id
- type
- amount
- applied
- used
- maximum
- validFrom
- validUntil
- syncStatus
GET /v1/tax/allowances HTTP/1.1 Authorization: Bearer <sessionToken> Accept: application/json{ "id": "exo-2026", "type": "SINGLE", "amount": 1000.00, "applied": 1000.00, "used": 412.30, "maximum": 1000.00, "validFrom": "2026-01-01", "validUntil": "2026-12-31", "syncStatus": "SYNCED" }Realized P&L and dividends
GET
/v1/tax/realized-returnsopenfinanceReturns per-securities-account realizedPnL and dividendReturn as absolute money plus relative share, with lastUpdatedTimestamp.
Auth: Authorization: Bearer <sessionToken JWT> from the sign-in call, plus app-version and platform device headers.
- secAccNo
- realizedPnL.absolute.value
- realizedPnL.relative
- dividendReturn.absolute.value
- dividendReturn.relative
- lastUpdatedTimestamp
GET /v1/tax/realized-returns HTTP/1.1 Authorization: Bearer <sessionToken> Accept: application/json{ "secAccNo": "1234567890", "realizedPnL": { "absolute": {"value": 840.12, "currency": "EUR"}, "relative": 0.064 }, "dividendReturn": { "absolute": {"value": 126.50, "currency": "EUR"}, "relative": 0.009 }, "lastUpdatedTimestamp": "2026-10-18T22:01:00Z" }Livret A status
GET
/v1/wrappers/regulated-savings/statusopenbankingReads the French Livret A wrapper: ACTIVE/ELIGIBLE/ONBOARDING/CLOSED plus balance.value/currency when ACTIVE.
Auth: Authorization: Bearer <sessionToken JWT> from the sign-in call, plus app-version and platform device headers.
- type
- balance.value
- balance.currency
GET /v1/wrappers/regulated-savings/status HTTP/1.1 Authorization: Bearer <sessionToken> Accept: application/json{ "type": "ACTIVE", "balance": { "value": 12500.00, "currency": "EUR" } }Cash interest home
GET
/v1/accounts/cash/{accountNumber}/interest-summaryopenbankingLoads the cash-interest tile: currentInterestRate, earnedInterest, currency, termsAccepted and isEligibleForInterestHike.
Auth: Authorization: Bearer <sessionToken JWT> from the sign-in call, plus app-version and platform device headers.
- title
- subtitle
- termsAccepted
- earnedInterest
- currency
- currentInterestRate
- isEligibleForInterestHike
- iconUrl
GET /v1/accounts/cash/DE89370400440532013000/interest-summary HTTP/1.1 Authorization: Bearer <sessionToken> Accept: application/json{ "title": "Interest", "subtitle": "Paid monthly", "termsAccepted": true, "earnedInterest": 18.42, "currency": "EUR", "currentInterestRate": "2.00", "isEligibleForInterestHike": false, "iconUrl": "https://cdn.example.com/img/interest.svg" }Customer personal details
GET
/v1/profile/identity-reviewosintReads the personal-details confirmation screen: status plus items for name, phone, address and tax residencies.
Auth: Authorization: Bearer <sessionToken JWT> from the sign-in call, plus app-version and platform device headers.
- status
- title
- description
- items.title
- items.status
- items.payload
GET /v1/profile/identity-review HTTP/1.1 Authorization: Bearer <sessionToken> Accept: application/json{ "status": "CONFIRMED", "title": "Your details", "description": "Confirm name, phone and tax residencies", "items": [ { "title": "Name", "status": "CONFIRMED", "payload": {"firstName": "Anna", "lastName": "Schmidt"} }, { "title": "Phone", "status": "CONFIRMED", "payload": {"phoneNumber": "+491701234567"} } ] }Watchlists
GET
/v1/watchlistsopendataLists browse watchlists: id, icon, name and subtitle used on the multi-watchlist screen.
Auth: Authorization: Bearer <sessionToken JWT> from the sign-in call, plus app-version and platform device headers.
- id
- icon
- name
- subtitle
GET /v1/watchlists HTTP/1.1 Authorization: Bearer <sessionToken> Accept: application/json{ "watchlists": [ { "id": "wl-default", "icon": "star", "name": "Watchlist", "subtitle": "12 instruments" } ] }
Data categories
- session tokens
- cash balances
- IBAN payment addresses
- timeline transactions
- portfolio performance
- savings plans
- Visa debit cards
- card spending limits
- German tax exemption orders
- realized P&L
- Livret A
- cash interest
- personal details
- watchlists
Where teams use this data
Nightly cash vs brokerage recon
Treasury bots pull accountNumber/amount on each cash account and match them to timeline rows (title, amount.value, status) so Sparplan executions and Visa clears land on the same EUR ledger.
Sparplan funding monitor
A family-office dashboard lists savings-plan instrumentId, interval and nextExecutionDate against fundingCashAccNo available cash, and flags paused plans before the next debit.
Freistellungsauftrag headroom
German tax wrappers read exemption-order used vs maximum and realizedPnL.absolute so remaining Steuerfreibetrag is known before year-end harvesting.
Visa debit limit watch
Expense tools subscribe to spendDaily/spendMonthly currentSpendWithCurrency versus limitAmountWithCurrency and lastFourPan status so a freeze or ATM-cap change is visible the same day.
Frequently asked questions
What cash and brokerage data does the Trade Republic app expose?
Cash-account balances (accountNumber, amount, currency), SEPA IBAN/BIC payment addresses, timeline transactions, Sparplan savings plans, Visa debit lastFourPan and spending limits, German Freistellungsauftrag used vs maximum, realized P&L, Livret A balance and cash-interest rates.
How does the app authenticate API calls?
Phone number plus PIN at the sign-in call returns sessionToken and refreshToken JWTs. Later calls send Authorization: Bearer plus app-version and platform device headers. A session-renewal call refreshes the session for a subjectId.
Which markets are covered?
Germany is the home market; France and Spain are live too (Livret A and PEA tax wrappers are France-specific). The endpoints shown here are an illustrative model of the data behind the signed-in Android app, not a public developer program.
Can I get tax and savings-plan fields, not just balances?
Yes. Exemption orders return type, amount, used, maximum and validUntil; P&L splits realizedPnL and dividendReturn; savings plans list instrumentId, interval, nextExecutionDate, paused and fundingCashAccNo.
Apps similar to Trade Republic: Broker & Bank
- Scalable Capital — Scalable Capital is a Munich digital investment platform and bank whose Scalable Broker trades stocks, ETFs, derivatives and crypto ETPs and runs euro savings plans from one euro, with operations in Germany, Austria, France, Italy, Spain and the Netherlands.
- flatex — flatex is a German online broker in the flatexDEGIRO group whose app and desktop desks trade stocks, ETFs, crypto, bonds and leveraged products across about 40 venues and offer more than 5,000 ETF and fund savings plans.
- DEGIRO — DEGIRO is a Netherlands-based online broker, now the Dutch brand of flatexDEGIRO Bank, that gives retail investors access to more than 50 exchanges in about 30 countries.
- Revolut — Revolut is a licensed digital bank whose app pairs current accounts and debit cards with in-app share and ETF trading for EEA customers, plus crypto staking in the UK and EEA.
- N26 — N26 is a Berlin direct bank whose app, in partnership with Upvest Securities, lets eligible customers trade stocks and ETFs from €1, run savings plans and buy crypto alongside a euro current account.
- Trading 212: Stocks, ETFs, ISA — Trading 212 is a European brokerage app for commission-free listed equities and ETFs, plus CFDs, a UK cash ISA and a multi-currency payment card, and it is authorised by Germany's BaFin among other regulators.
- eToro — eToro is a multi-asset brokerage for stocks, ETFs, CFDs and cryptoassets, built around CopyTrader social replication, with CySEC-regulated European entities and a Deutsche Börse partnership to expand German stock offerings.
Topics
- Trade Republic API
- Trade Republic cash balance
- Trade Republic IBAN
- Trade Republic savings plan
- Trade Republic Visa debit
- Freistellungsauftrag API
- Livret A Trade Republic
- German neobroker data API
Need this app's data API integrated?
We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.
- NDA + SOW on every engagement
- Delivery in 3–7 days
- Payment only after acceptance
- Work scoped to authorized use