# Realized PnL by day

`GET https://api.getchord.xyz/v1/portfolio/{wallet}/pnl-calendar`

Source: https://getchord.xyz/docs/api-reference/operations/walletpnlcalendar/

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.

## Parameters

| Name | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| `wallet` | path | yes | string |  |
| `chain` | query | no | `5042` · `4663` · `143` (default `143`) | Chain id: `5042` Arc · `4663` Robinhood Chain · `143` Monad. Omitted = 143. |

## Response 200

Example (captured from the live API):

```json
{
  "days": [
    {
      "date": "2026-08-19",
      "realizedUsd": 0,
      "trades": 6
    },
    {
      "date": "2026-08-20",
      "realizedUsd": 0,
      "trades": 2
    }
  ],
  "firstDate": "2026-08-19",
  "realizedTotal": 34046.5607144201,
  "updatedAt": 1789891871239
}
```

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