Skip to content
pytr-orgPublic

Latest commit

 

History

312 Commits

Folders and files

Repository files navigation

GitHub tag (with filter) PyPI build and publish PyPI - Version

pytr: Use TradeRepublic in terminal

This is a library for the private API of the Trade Republic online brokerage. It is not affiliated with Trade Republic Bank GmbH.

Table of Contents

Quickstart

This is the right section for you if all you want to do is to "just run the thing". Whether you've never run a piece of code before, or are new to Python, these steps will make it the easiest for you to run pytr.

We strongly recommend that you use uv to run pytr. Since pytr is written in the Python programming language, you usually need to make sure you have an installation of Python on your computer before you can run any Python program. However, uv will take care of installing an appropriate Python version for you if you don't already have one.

To install uv on OSX/Linux, run:

 curl -LsSf https://astral.sh/uv/install.sh | sh

On Windows, run:

 powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

Then, to run the latest released version of pytr:

 uvx pytr@latest

If you want to use the cutting-edge version, use this command instead:

 uvx --with git+https://github.com/pytr-org/pytr.git pytr

Usage

usage: pytr [-h] [-V] [-v {warning,info,debug}] [--debug-logfile DEBUG_LOGFILE] [--debug-log-filter DEBUG_LOG_FILTER]
            {help,login,accounts,portfolio,rates,details,dl_docs,export_transactions,get_price_alarms,set_price_alarms,get_savings_plans,completion} ...

Use "pytr command_name --help" to get detailed help to a specific command

Commands:
  {help,login,accounts,portfolio,rates,details,dl_docs,export_transactions,get_price_alarms,set_price_alarms,get_savings_plans,completion}
                                        Desired action to perform
    help                                Print this help message
    login                               Check if credentials file exists. If not create it and ask for input. Try to
                                        login. Ask for device reset if needed
    accounts                            List accounts of this login, e.g. a company accounts or child accounts. Use them
                                        with --account
    portfolio                           Show current portfolio
    rates                               Fetch current prices for a list of ISINs given as direct list or CSV input
    details                             Get details for an ISIN
    dl_docs                             Download all pdf documents from the timeline and sort them into folders. Also
                                        export account transactions (account_transactions.csv) and JSON files with all
                                        events (events_with_documents.json and other_events.json)
    export_transactions                 Read data from the TR timeline and export transactions into a file, e.g. as csv
                                        into account_transactions.csv.
    get_price_alarms                    Get current price alarms
    set_price_alarms                    Set new price alarms
    get_savings_plans                   Get current savings plans
    completion                          Print shell tab completion

Options:
  -h, --help                            show this help message and exit
  -V, --version                         Print version information and quit (default: False)
  -v, --verbosity {warning,info,debug}  Set verbosity level (default: info) (default: info)
  --debug-logfile DEBUG_LOGFILE         Dump debug logs to a file (default: None)
  --debug-log-filter DEBUG_LOG_FILTER   Filter debug log types (default: None)

Authentication

Web login

Web login uses the public web-login endpoints at api.traderepublic.com. Two variants are available:

  • v1 (default): pytr login. You receive a four-digit code in the TradeRepublic app (or via SMS as a fallback) and enter it in the terminal. This is the original behavior; nothing changes for existing users. v1 requires passing an AWS WAF token with the login request; by default pytr fetches one automatically via Playwright (requires the optional playwright extra: pip install 'pytr[playwright]' && playwright install chromium). The pure-Python alternative --waf-token awswaf exists but has been reported to no longer work reliably.
  • v2 (opt-in): pytr login --v2. Mirrors what app.traderepublic.com currently does. Instead of typing a four-digit code, you confirm the login from a push notification in the Trade Republic mobile app. Accounts secured with an authenticator app are asked for a code from that app instead. Useful if your account no longer issues a code via the app or SMS. v2 does not require a WAF token; pytr skips it automatically when --v2 is used. Note that Trade Republic removed the SMS resend endpoint along with the v1 web login, so there is no SMS fallback under --v2. The flag is available on every subcommand that performs a login, e.g. pytr portfolio --v2, pytr dl_docs --v2.

Both variants keep you logged in on your primary device, but you may need to re-authenticate every so often when running pytr.

If web login suddenly stops working

The web login identifies itself to Trade Republic as their own web frontend, using a build version, a platform name and a browser User-Agent that are pinned in pytr. Trade Republic can invalidate any of them at any time, and when they do, login fails for everyone until a new release goes out. Three environment variables let you fix it yourself in the meantime:

Variable Overrides Use it when
PYTR_TR_APP_VERSION The frontend build version sent as X-TR-App-Version Login fails with 426 CLIENT_VERSION_OUTDATED
PYTR_TR_USER_AGENT The User-Agent sent on every request Login is rejected or challenged in a way that looks like bot filtering
PYTR_TR_PLATFORM The platform name sent as X-Tr-Platform Login fails with a missing or invalid header error naming the platform
 PYTR_TR_APP_VERSION=2.2700.4 pytr login --v2
 PYTR_TR_USER_AGENT='Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36' pytr login
 PYTR_TR_PLATFORM=web pytr login --v2

Read the current values off app.traderepublic.com in your browser's dev tools, on the network request to /api/v2/auth/web/login. Leaving a variable unset, or setting it to an empty string, keeps the built-in default. If you need one of these, please also open an issue so the default can be updated for everyone.

Other accounts of your login

A Trade Republic login can hold more than its own account, e.g. company accounts or child accounts. Trade Republic treats each of them as a customer of its own, and the web app switches between them after the login. Pass --account to do the same, on any subcommand that performs a login:

pytr portfolio --account LEGAL_ENTITY
pytr dl_docs --account "Mustermann Holding GmbH" ./docs

The value is the account's type, its name or its customer id, as listed by pytr accounts. Without --account, pytr uses your own account. The choice is not remembered between runs.

Unfortunately, it seems that this only works with company accounts, not with child accounts at the moment.

Development

Setting Up a Development Environment

Clone the repository:

 git clone https://github.com/pytr-org/pytr.git

Install dependencies:

 uv sync

Run the tests to ensure everything is set up correctly:

 uv run pytest

Linting and Code Formatting

This project uses Ruff for code linting and auto-formatting, as well as Mypy for type checking.

You can auto-format the code with Ruff by running:

uv run ruff format            # Format code
uv run ruff check --fix-only  # Remove unneeded imports, order imports, etc.

You can check the typing of the code with Mypy by running:

uv run mypy .

Ruff and Mypy run as part of CI and your Pull Request cannot be merged unless it satisfies the linting, formatting checks and type checks.

Release process

  1. Create a pull request that bumps the version number in pyproject.toml
  2. After successfully merging the PR, create a new release via GitHub and make use of the "Generate release notes" button. Tags are formatted as vX.Y.Z.
  3. The package will be published to PyPI from CI.

Keep the readme updated

This readme contains a few automatically generated bits. To keep them up to date, simply run the following command: (Never start it from an activated venv!)

 uvx mksync@0.1.5 -i README.md

License

This project is licensed under the MIT License. See the LICENSE file for details.

Releases

Sponsor this project

Packages

Used by

Contributors

Languages