:::endpoint GET /v1/admin/dashboard/money

What the firm sold and paid out over a period, what that leaves, each set
against the stretch before it, and what its funded traders could ask for
today. The Money panel of the dashboard on the website, behind the same
permission, `view_analytics`.

Amounts are never added up across currencies. Everything is in the currency
the firm sells in, `currency`, and what came in or went out in another one is
listed apart in `other_currencies`. A total is money as everywhere in this
API, a `value` string with two decimals and its `currency`. A series is a list
of those strings, in `currency`.

A sale is the first account of every paid purchase. A refunded one is not a
sale, and neither is an account of our own staff. A payout is what the trader
received, on the day it was paid.

Needs a firm. Our own staff name one with the `Propper-Workspace` header.

## Request

| Parameter | Description                                                    |
| --------- | -------------------------------------------------------------- |
| `period`  | `today`, `7d`, `30d`, `90d` or `12m`. Left out means `30d`     |

```bash
curl "https://api.proppertrading.com/v1/admin/dashboard/money?period=7d" \
  -H "Authorization: Bearer ptat_9f2c1a44_3b8e7d2f5c9a1b4e6d8f0a2c4e6b8d1f" \
  -H "Propper-Workspace: acme"
```

## Response

```json
{
    "data": {
        "object": "dashboard_money",
        "period": {
            "range": "7d",
            "from": "2026-10-09T00:00:00+00:00",
            "to": "2026-10-15T19:05:32+00:00",
            "previous_from": "2026-10-02T00:00:00+00:00",
            "previous_to": "2026-10-08T19:05:32+00:00",
            "granularity": "day",
            "timezone": "UTC"
        },
        "currency": "USD",
        "buckets": ["2026-10-09", "2026-10-10", "2026-10-11", "2026-10-12", "2026-10-13", "2026-10-14", "2026-10-15"],
        "previous_buckets": ["2026-10-02", "2026-10-03", "2026-10-04", "2026-10-05", "2026-10-06", "2026-10-07", "2026-10-08"],
        "sales": {
            "current": { "value": "0.00", "currency": "USD" },
            "previous": { "value": "17179.80", "currency": "USD" },
            "count": 0,
            "previous_count": 42,
            "series": ["0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00"],
            "previous_series": ["3292.60", "2573.30", "2663.10", "2634.20", "2275.30", "2963.10", "778.20"],
            "refunded": {
                "amount": { "value": "0.00", "currency": "USD" },
                "count": 0
            }
        },
        "payouts": {
            "current": { "value": "0.00", "currency": "USD" },
            "previous": { "value": "1403.25", "currency": "USD" },
            "count": 0,
            "previous_count": 2,
            "series": ["0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00"],
            "previous_series": ["0.00", "726.00", "677.25", "0.00", "0.00", "0.00", "0.00"],
            "waiting": {
                "amount": { "value": "2614.10", "currency": "USD" },
                "count": 4
            }
        },
        "net": {
            "current": { "value": "0.00", "currency": "USD" },
            "previous": { "value": "15776.55", "currency": "USD" },
            "series": ["0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00"],
            "previous_series": ["3292.60", "1847.30", "1985.85", "2634.20", "2275.30", "2963.10", "778.20"]
        },
        "owed": {
            "amount": { "value": "71548.18", "currency": "USD" },
            "accounts": 258,
            "in_profit": 137
        },
        "other_currencies": []
    },
    "meta": {
        "request_id": "req_01m50f94cj9yvsr3th43enqa9w"
    }
}
```

| Field                        | Description                                                                                                  |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------ |
| `buckets`, `previous_buckets` | The points of the series, this period and the one before                                                   |
| `sales.current`, `previous`  | Sold in the period and in the one before                                                                     |
| `sales.count`                | How many sales, not counting free accounts                                                                   |
| `sales.refunded`             | Of what the period sold, what was refunded since: a refund keeps the date of its sale                       |
| `payouts.current`, `previous` | Paid out to traders in the period and in the one before                                                    |
| `payouts.waiting`            | Approved and not paid yet: money already promised, whatever the period                                      |
| `net`                        | Sales less payouts, per bucket too                                                                           |
| `owed.amount`                | What funded traders could ask for today: their realised profit above the start, times their split. Payouts that are pending or approved are inside it, open positions are not |
| `owed.accounts`              | Funded accounts in the firm's currency                                                                       |
| `owed.in_profit`             | Of those, the ones above their start. [The list of them](/docs/api/admin/dashboard-owed)                    |
| `other_currencies`           | Sales and payouts of the period in any other currency, one total each                                        |

## The period

`period` is `today`, `7d`, `30d` (the default), `90d` or `12m`. Each runs up to
this moment, in the firm's timezone, and is compared with the stretch of the
same length right before it, so `today` is set against yesterday up to the same
hour. The points of a series are an hour for `today`, a week for `12m`, and a
day otherwise: `buckets` names them, oldest first, and every series has one
value per bucket.

| Field                    | Description                                                        |
| ------------------------ | ------------------------------------------------------------------ |
| `period.range`           | The period asked for                                               |
| `period.from`, `to`      | The period, local to the firm. `to` is now                         |
| `period.previous_from`, `previous_to` | The stretch it is compared with                       |
| `period.granularity`     | `hour`, `day` or `week`: how wide one bucket is                    |
| `period.timezone`        | The firm's timezone, which the buckets are in                      |

## Errors

| Status | Code                      | Meaning                                                                         |
| ------ | ------------------------- | ------------------------------------------------------------------------------- |
| 400    | `workspace_required`      | Asked by our own staff without naming a firm                                    |
| 400    | `invalid_period`          | `period` is not one of the five                                                 |
| 401    | `invalid_token`           | Not a token, or the secret does not match                                       |
| 401    | `revoked_token`           | Signed out here or from another device                                          |
| 401    | `expired_token`           | Ninety days without use, or a set expiry passed                                 |
| 403    | `admin_access_required`   | This account no longer helps run the environment                                |
| 403    | `insufficient_scope`      | This device does not hold `admin:read`                                          |
| 403    | `workspace_not_permitted` | The `Propper-Workspace` header names an environment this account cannot act in |
| 403    | `forbidden`               | Without `view_analytics`                                                        |