API Reference
Trades
List

List Trades

GET /api/v1/trades

Scope: 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

StatusDescription
pendingAccepted, execution not yet started
validatingPre-flight checks (credentials, margin) in progress
activeTrade is executing
pausedExecution paused (e.g. during maintenance); position held
recoveringExecution is being relaunched after a crash or disconnect
completedTarget size fully filled
canceledCanceled by user
rejectedFailed pre-flight validation (see failure_reason)
failedExecution failed (see failure_reason)

Example

curl -H "X-API-Key: sprdr_..." https://api.spreadr.xyz/api/v1/trades

Filter 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")]