List Trades
GET /api/v1/tradesScope: trades:read
Returns your 50 most recent trades, all statuses. Trades are scoped to the authenticated user — you'll never see another user's trades.
Response
200 OK
[
{
"trade_id": "00000000-0000-0000-0000-000000000000",
"user_id": "usr_YOUR_USER_ID",
"market": "HYPE",
"long_exchange": "lighter",
"long_wallet": "0x...",
"short_exchange": "extended",
"short_wallet": "0x...",
"target_spread": "0",
"spread_condition": "gte",
"target_size": "2",
"filled_size": "2",
"execution_type": "maker_taker",
"maker_leg": "long",
"max_slippage": "0.1",
"status": "completed",
"rate_budget": 20,
"created_at": "2026-03-12T13:06:58Z",
"updated_at": "2026-03-12T13:08:30Z",
"completed_at": "2026-03-12T13:08:30Z",
"size_type": "base",
"spread_type": "absolute",
"failure_reason": ""
}
]Trade statuses
| Status | Description |
|---|---|
pending | Accepted, execution not yet started |
validating | Pre-flight checks (credentials, margin) in progress |
active | Trade is executing |
paused | Execution paused (e.g. during maintenance); position held |
recovering | Execution is being relaunched after a crash or disconnect |
completed | Target size fully filled |
canceled | Canceled by user |
rejected | Failed pre-flight validation (see failure_reason) |
failed | Execution failed (see failure_reason) |
Example
curl -H "X-API-Key: sprdr_..." https://api.spreadr.xyz/api/v1/tradesFilter client-side by status if you only want active ones:
trades = requests.get(f"{API_URL}/trades", headers=headers).json()
active = [t for t in trades if t["status"] in ("pending", "validating", "active", "paused", "recovering")]