---
title: "Realized PnL by day"
method: GET
path: "/portfolio/{wallet}/pnl-calendar"
tags: ["Portfolio"]
---

# Realized PnL by day

`GET /portfolio/{wallet}/pnl-calendar`

## Request

- Base URL: `https://api.getchord.xyz/v1`
- URL: `https://api.getchord.xyz/v1/portfolio/{wallet}/pnl-calendar`
- Auth: none declared

Day-by-day realized PnL (UTC days) with the trade count, from the same average-cost model as `/pnl`, so the day sums reconcile with `realized` by construction.

Portfolio routes answer an empty 200 shape rather than a 5xx when the tape read fails — treat an empty `tokens` list as "nothing yet" and retry later.

## Path parameters

- `wallet` string, required: EVM address, hex, case-insensitive.

## Query parameters

- `chain` 5042 | 4663 | 143

## Response `200`

- object
  - `days` object[]
    - `date` string: YYYY-MM-DD
    - `realizedUsd` number
    - `trades` integer
  - `firstDate` string, nullable
  - `realizedTotal` number
  - `updatedAt` integer: Unix time, milliseconds — when the server built this answer.

## Other responses

- `400`: Invalid parameters — `error` names the check that failed (`INVALID_PARAMS`, `BAD_ADDRESS`, `BAD_LIMIT`, `BAD_HOURS`, …).

---

[API](https://skmtc.dev/getchord/apis/chord-api.md) · [All operations](https://skmtc.dev/getchord/apis/chord-api/llms.txt) · [OpenAPI document](https://skmtc.dev/getchord/apis/chord-api/revisions/d3bc4640fea0?raw)
