{
  "id": "traderepublic",
  "name": "Trade Republic",
  "service": "traderepublic",
  "trust": "community",
  "domain": "traderepublic.com",
  "country": "global",
  "categories": [
    "banking",
    "investment"
  ],
  "version": "2026-08-08",
  "minVersion": "0.3.0.24",
  "keepRaw": true,
  "match": [
    "https://app.traderepublic.com/*"
  ],
  "openUrl": "https://app.traderepublic.com/",
  "auth": {
    "mode": "cookie",
    "replayHeaders": []
  },
  "api": {
    "host": "https://api.traderepublic.com"
  },
  "streams": [
    {
      "id": "transactions",
      "name": "Transacciones",
      "schema": "investment@2",
      "normalize": {
        "fields": {
          "isin": {
            "from": "icon",
            "re": [
              "^logos/([A-Z]{2}[A-Z0-9]{9}[0-9])/"
            ]
          }
        },
        "map": {
          "side": {
            "from": "type",
            "map": {
              "TRADING_SAVINGSPLAN_EXECUTED": "buy",
              "SAVINGS_PLAN_EXECUTED": "buy"
            }
          },
          "kind": {
            "from": "type",
            "map": {
              "INTEREST_PAYOUT": "interest",
              "BANK_TRANSACTION_INCOMING": "deposit",
              "PAYMENT_INBOUND": "deposit",
              "PAYMENT_INBOUND_GOOGLE_PAY": "deposit"
            }
          }
        }
      },
      "api": {
        "ws": {
          "url": "wss://api.traderepublic.com",
          "connectVersion": 34,
          "connect": {
            "locale": "en",
            "platformId": "webtrading",
            "platformVersion": "web",
            "clientId": "app.traderepublic.com",
            "clientVersion": "15.101.0"
          },
          "sub": {
            "type": "timelineTransactions"
          },
          "itemsPath": "items",
          "cursorPath": "cursors.after",
          "cursorParam": "after",
          "maxPages": 200,
          "detail": {
            "subType": "timelineDetailV2",
            "idField": "id",
            "idParam": "id",
            "attachAs": "detail",
            "max": 2000
          }
        }
      },
      "fields": {
        "internalId": "id",
        "date": "timestamp",
        "amount": "amount.value",
        "currency": "amount.currency",
        "description": "title",
        "counterparty": "title",
        "instrumentName": "title",
        "type": "eventType",
        "settlementAccount": "cashAccountNumber",
        "units": "detail.sections[title=Transaction].data[title=Shares].detail.text",
        "price": "detail.sections[title=Transaction].data[title=Share price].detail.text",
        "commission": "detail.sections[title=Transaction].data[title=Fee].detail.text"
      }
    },
    {
      "id": "extracto",
      "name": "Extractos mensuales",
      "schema": "invoice@1",
      "api": {
        "list": {
          "paging": "synthetic",
          "synthetic": {
            "each": "months"
          },
          "maxAgeDays": 1100
        }
      },
      "fields": {
        "internalId": "{period}",
        "date": "{date}",
        "number": "{period}",
        "description": "Extracto {period}"
      },
      "formats": [
        {
          "id": "pdf",
          "name": "PDF (extracto de cuenta)",
          "api": {
            "pdf": {
              "path": "/api/v1/banking/consumer/accountstatement/statement?fromDate={period}&toDate={period}",
              "method": "GET",
              "ext": "pdf",
              "mime": "application/pdf"
            }
          }
        },
        {
          "id": "csv",
          "name": "CSV (transacciones)",
          "api": {
            "pdf": {
              "ext": "csv",
              "mime": "text/csv",
              "job": {
                "start": {
                  "path": "/api/v1/portfolio-analytics/transactions/export/request",
                  "method": "POST",
                  "body": "{\"from\":\"{fromDate}\",\"to\":\"{toDate}\"}",
                  "contentType": "application/json",
                  "idField": "jobId"
                },
                "status": {
                  "path": "/api/v1/portfolio-analytics/transactions/export/status?jobId={jobId}",
                  "statePath": "status",
                  "readyValue": "COMPLETED",
                  "tries": 20,
                  "delayMs": 1000
                },
                "download": {
                  "path": "/api/v1/portfolio-analytics/transactions/export/download?jobId={jobId}"
                }
              }
            }
          }
        }
      ]
    }
  ],
  "changelog": [
    {
      "version": "2026-08-08",
      "changes": "Adds `content` (bilingual copy for the guide page on habeas.dev) and `brand`."
    },
    {
      "version": "2026-07-17",
      "changes": "Parse the trade breakdown into structured fields: units (Shares), price (Share price) and commission (Fee) from the timelineDetailV2 'Transaction' table (English labels — the WS connect requests locale 'en'). 'Free' fees resolve to 0. Requires extension >= 0.3.0.24."
    },
    {
      "version": "2026-07-16",
      "changes": "Timeline stream now emits investment@2 (broker trade/cash): recordType inferred from the extracted ISIN, side/kind mapped from the timeline eventType, instrument{isin,name}, and the settlement account (cashAccountNumber). Trade quantity/price/fees remain in record.extra.detail (localized text) pending structured parsing. Requires extension >= 0.3.0.24."
    },
    {
      "version": "2026-07-15.3",
      "changes": "Add monthly documents: the account statement PDF (accountstatement/statement?fromDate&toDate) and the monthly transactions CSV (async export job: POST request → poll status → download), per completed month."
    },
    {
      "version": "2026-07-15.2",
      "changes": "Extract the traded instrument ISIN from the timeline icon into record.isin."
    },
    {
      "version": "2026-07-15.1",
      "changes": "Enrich each timeline transaction with its timelineDetailV2 detail in record.extra.detail."
    },
    {
      "version": "2026-07-15",
      "changes": "Initial: the whole transaction timeline via Trade Republic’s WebSocket API."
    }
  ],
  "content": {
    "en": {
      "slug": "trade-republic-statements",
      "docs": "transactions and statements",
      "h1": "How to download your Trade Republic transactions and statements",
      "intro": "Trade Republic publishes your statements as PDF or CSV, period by period. If you want the full record of your positions and movements in one place, you are the one assembling it."
    },
    "es": {
      "slug": "extractos-trade-republic",
      "docs": "movimientos y extractos",
      "h1": "Cómo descargar tus movimientos y extractos de Trade Republic",
      "intro": "Trade Republic publica tus extractos en PDF o CSV, periodo a periodo. Si quieres el registro completo de tus posiciones y movimientos en un solo sitio, el que lo va montando eres tú."
    }
  },
  "brand": "Trade Republic"
}
