Trade Republic: Broker & Bank icon

Trade Republic Data API: Endpoints and Fields

Trade Republic Bank GmbH · Banking

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

  • Trade Republic: Broker & Bank screenshot 1
  • Trade Republic: Broker & Bank screenshot 2
  • Trade Republic: Broker & Bank screenshot 3
  • Trade Republic: Broker & Bank screenshot 4
  • Trade Republic: Broker & Bank screenshot 5

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-in openbanking

    Exchanges 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-renewal openbanking

    Mints 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/balances openbanking

    Reads 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-details openbanking

    Returns 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/feed openbanking

    Pages 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/summary openfinance

    Marks 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-investments openfinance

    Lists 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/active openbanking

    Reads 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/limits openbanking

    Splits 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/allowances openfinance

    Reads 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-returns openfinance

    Returns 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/status openbanking

    Reads 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-summary openbanking

    Loads 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-review osint

    Reads 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/watchlists opendata

    Lists 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

Get a quote