# HTTP — `GET /v1/userFunding`

Settled perpetual-funding history for a user. Public endpoint. Not to be
confused with [`GET /v1/funding`](/api/funding), which reports deposit and
withdrawal requests.

```http
GET /v1/userFunding?user=0x0000000000000000000000000000000000000001&startTime=1780000000000&endTime=1780086400000
```

| Param | Required | Meaning |
| --- | --- | --- |
| `user` | yes | EVM address. Missing fails with `invalid_query`; malformed with `bad_request`. |
| `startTime` | yes | Inclusive start, Unix milliseconds. Missing fails with `invalid_query`. |
| `endTime` | no | Inclusive end, Unix milliseconds; defaults to now. `startTime > endTime` fails with `invalid_time_range`. |

```jsonc
{
  "status": "ok",
  "data": {
    "user": "0x0000000000000000000000000000000000000001",
    "userFundings": [
      {
        "fundingId": "2a4d4983-9057-4da9-bcd7-0aa0e4185bb0",
        "fundingTimeMs": 1780000000000,
        "a": "BTC",
        "venue": "hyperliquid",
        "amountUsdc": "-3.625312",
        "positionSize": "49.1477",
        "fundingRate": "0.0000417",
        "oraclePx": "1768.42"
      }
    ]
  },
  "server_time_ms": 1780086400100
}
```

| Field | Meaning |
| --- | --- |
| `fundingId` | Stable settlement ID. |
| `fundingTimeMs` | Settlement time of the funding period, not the time it became visible. |
| `a`, `venue` | Canonical asset and the venue on which the position accrued funding. Two venues in the same asset are separate entries. |
| `amountUsdc` | Signed USDC cash delta: positive received, negative paid. |
| `positionSize` | Signed position size used for the settlement. |
| `fundingRate` | Hourly funding rate applied. |
| `oraclePx` | Oracle price of the venue funding-rate observation used for the settlement. |

Decimals are strings.

## Pagination

Results are chronological. A page holds 500 settlements plus every remaining
settlement sharing the last `fundingTimeMs`, so continuing with
`startTime = last.fundingTimeMs + 1` never skips another asset or venue
settled in the same interval. There is no cursor or `hasMore` field; an
empty `userFundings` marks the end of the range.
