# Position change history · API reference · Femtos

> Past perp position changes of one coin over a size, one row per account and block. GET /v1/positions/changes on HyperCore: parameters, response fields and a live call per layer.

- Base URL: `https://api.femtos.xyz/v1` (REST) · `wss://api.femtos.xyz/v1/ws` (WebSocket) · MCP: `https://api.femtos.xyz/mcp`
- Auth: `Authorization: Bearer $FEMTOS_KEY`. Free key: https://femtos.xyz/account/new (browser), or with
  no browser: `GET https://femtos.xyz/accounts/agent/challenge`, solve its proof of work, then `POST https://femtos.xyz/accounts/agent/signup`
  (https://femtos.xyz/agents.md#agent-onboarding)
- Decimals are exact strings, times Unix milliseconds, addresses lowercase `0x`
- Whole API in one file: https://femtos.xyz/agents.md · OpenAPI: https://api.femtos.xyz/v1/openapi.json · Index: https://femtos.xyz/llms.txt
- Page with live calls: https://femtos.xyz/reference/position-changes

## Position change history — GET `/v1/positions/changes`

Past perp position changes of one coin over a size, one row per account and block.

Layers: HyperCore. Not on Elysium or HyperEVM: served on HyperCore only.
Page with live calls: https://femtos.xyz/reference/position-changes?layer=hypercore

| Param | In | Example or values | Meaning |
|---|---|---|---|
| `coin` | query | `BTC` | Perp coin |
| `minNotional` | query | `1000000` | Smallest notional (USD, decimal string) |
| `from` | query | (optional) | Window start (ms) |
| `to` | query | (optional) | Window end (ms, exclusive) |
| `sort` | query | `(empty)`, `time`, `notional` | Newest first, or largest first |
| `limit` | query | `50` | Rows |

```bash
curl -H "Authorization: Bearer $FEMTOS_KEY" "https://api.femtos.xyz/v1/positions/changes?coin=BTC&minNotional=1000000&limit=50"
```

| Field | Type | Meaning |
|---|---|---|
| `changes[]` | object | Sorted as asked: {block, time, coin, user, kind, dir, start_position, end_position, sz, px, notional, liquidation, …} |
| `changes[].kind` | open \| increase \| reduce \| close \| flip \| unchanged | What the block did to the position (unchanged: traded both ways, e.g. opened and closed) |
| `from` | ms | Start of the window read |
| `to` | ms | End of the window read (exclusive) |
| `billing` | medium | medium |

## Related (Liquidations & positions)

- [Liquidations](https://femtos.xyz/reference/liquidations.md) `GET /v1/liquidations`: Perp liquidations, newest first, one row per account, coin and block. (HyperCore)
- [Liquidations stream](https://femtos.xyz/reference/ws/liquidations.md) `WS hc.liquidations`: Each liquidation fill, the block it happens. (HyperCore)
- [Liquidation stats](https://femtos.xyz/reference/liquidation-stats.md) `GET /v1/liquidations/stats`: Totals, per coin, per time bucket and the largest, over a window. (HyperCore)
- [Positions](https://femtos.xyz/reference/positions.md) `GET /v1/positions`: Open positions of one perp with leverage and liquidation price. (HyperCore)
- [Position changes](https://femtos.xyz/reference/ws/positions.md) `WS hc.positions`: Each perp position change, one per block, account and coin. (HyperCore)
- [Open interest](https://femtos.xyz/reference/positions-overview.md) `GET /v1/positions/overview`: Open interest, accounts and unrealized PnL per perp. (HyperCore)
- [Liquidation map](https://femtos.xyz/reference/liqmap.md) `GET /v1/positions/liqmap`: Notional that would be liquidated at each price around the mark. (HyperCore)

Every page: https://femtos.xyz/reference.md
