DocsAPI ReferenceWheelPlayground Trading
Playground Trading
Paper-trade options against your Manual Journal account. Fills are instant and flow into the journal and wheel views like real trades.
Place a simulated order
POST
/playground/ordersOrders fill instantly at the price you provide (up to 4 legs) and are recorded as journal activities and lots. A wheel started here behaves like a real one: it shows up in /v1/wheels, the journal, and the dashboard.
Requires a Manual Journal account - create it once in the dashboard (Journal → Manual Journal). Without one this endpoint returns
404 not_found.curl -X POST "https://quantwheel.com/api/v1/playground/orders" \
-H "Authorization: Bearer qw_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"legs": [{
"symbol": "AMD",
"strike": 165,
"expiration": "2026-08-28",
"optionType": "PUT",
"action": "SELL_TO_OPEN",
"quantity": 1,
"price": 3.05
}]
}'201 Created
{
"status": "filled",
"accountId": "MANUAL_JOURNAL_...",
"activityIds": ["act_71bd3"],
"filledAt": "2026-07-30T14:38:11.000Z"
}List positions
GET
/playground/positionsOpen playground positions derived from journal lots and priced live - shorts have negative units, option prices are per contract.
200 OK
{
"account": { "id": "MANUAL_JOURNAL_...", "name": "Manual Journal" },
"stockPositions": [],
"optionPositions": [
{
"ticker": "AMD",
"optionSymbol": "AMD 2026-08-28 165P",
"strike": 165,
"expiration": "2026-08-28",
"optionType": "PUT",
"units": -1,
"currentPrice": 261.0,
"averageCost": 305.0,
"marketValue": -261.0,
"costBasis": -305.0,
"unrealizedPnl": 44.0,
"unrealizedPnlPct": 14.4
}
],
"asOf": "2026-07-30T14:40:00.000Z"
}