curl "https://api.totalis.trade/v1/mm/positions/1a6d1f06-9d4f-47cb-994b-3bdfbbef7e40" \
-H "X-API-Key: $API_KEY"
import requests
rfq_id = "1a6d1f06-9d4f-47cb-994b-3bdfbbef7e40"
resp = requests.get(
f"https://api.totalis.trade/v1/mm/positions/{rfq_id}",
headers={"X-API-Key": API_KEY},
)
if resp.status_code == 404:
print("Not one of your active positions")
else:
position = resp.json()["data"]["position"]
for leg in position["legs"]:
print(leg["market_title"], leg["side"])
{
"data": {
"position": {
"position_pda": "7sKq9fGh2mNp4rTv6wXy8zAb1cDe3fGh5jKl7mNp9qRs",
"rfq_id": "1a6d1f06-9d4f-47cb-994b-3bdfbbef7e40",
"user_id": "did:privy:cmabc123def456ghi789jkl",
"market_maker_id": "did:privy:cmxyz987uvw654rst321opq",
"user_stake": 25,
"mm_risk": 81.25,
"mm_collateral_locked": 81.25,
"total_payout": 106.25,
"status": "active",
"created_at": "2026-06-01T18:45:45.000Z",
"legs": [
{
"market_title": "Lakers",
"event_title": "NBA Finals Winner",
"side": "yes",
"outcome": "yes",
"yes_sub_title": "Los Angeles Lakers",
"no_sub_title": null,
"selection_label": "Lakers",
"bet_group": null,
"venue": "kalshi",
"event_ticker": "KXNBAFINALS-26",
"market_ticker": "KXNBAFINALS-26-LAL",
"exclusivity_group": "KXNBAFINALS-26",
"exclusivity_group_kind": "partition",
"venue_url": "https://kalshi.com/markets/kxnbafinals",
"market_resolved": false,
"market_result": null,
"market_resolved_at": null
}
]
}
}
}
Market maker
Get Position
Fetch one of your active market-maker positions by its RFQ id, with full parlay legs.
GET
/
v1
/
mm
/
positions
/
{id}
curl "https://api.totalis.trade/v1/mm/positions/1a6d1f06-9d4f-47cb-994b-3bdfbbef7e40" \
-H "X-API-Key: $API_KEY"
import requests
rfq_id = "1a6d1f06-9d4f-47cb-994b-3bdfbbef7e40"
resp = requests.get(
f"https://api.totalis.trade/v1/mm/positions/{rfq_id}",
headers={"X-API-Key": API_KEY},
)
if resp.status_code == 404:
print("Not one of your active positions")
else:
position = resp.json()["data"]["position"]
for leg in position["legs"]:
print(leg["market_title"], leg["side"])
{
"data": {
"position": {
"position_pda": "7sKq9fGh2mNp4rTv6wXy8zAb1cDe3fGh5jKl7mNp9qRs",
"rfq_id": "1a6d1f06-9d4f-47cb-994b-3bdfbbef7e40",
"user_id": "did:privy:cmabc123def456ghi789jkl",
"market_maker_id": "did:privy:cmxyz987uvw654rst321opq",
"user_stake": 25,
"mm_risk": 81.25,
"mm_collateral_locked": 81.25,
"total_payout": 106.25,
"status": "active",
"created_at": "2026-06-01T18:45:45.000Z",
"legs": [
{
"market_title": "Lakers",
"event_title": "NBA Finals Winner",
"side": "yes",
"outcome": "yes",
"yes_sub_title": "Los Angeles Lakers",
"no_sub_title": null,
"selection_label": "Lakers",
"bet_group": null,
"venue": "kalshi",
"event_ticker": "KXNBAFINALS-26",
"market_ticker": "KXNBAFINALS-26-LAL",
"exclusivity_group": "KXNBAFINALS-26",
"exclusivity_group_kind": "partition",
"venue_url": "https://kalshi.com/markets/kxnbafinals",
"market_resolved": false,
"market_result": null,
"market_resolved_at": null
}
]
}
}
}
Resolve a single RFQ id to your position and its full parlay legs. This is the by-id counterpart of List Positions: pass an
rfq_id you already hold — for example one returned by Get Vault — to expand it into the underlying legs.
Scoped to you as the market maker. If the id is not one of your active positions — because it belongs to another maker, does not exist, or has already settled — the response is 404, so it never reveals another maker’s book.
Base URL: https://api.totalis.trade
Authentication
API key required. Pass your market maker API key in theX-API-Key header.
X-API-Key: <key>
Path parameters
The RFQ (parlay ticket) id — the
rfq_id from List Positions or Get Vault. Must be a UUID.Response
Show data
Show data
The position. Same shape as each entry in List Positions.
Show position
Show position
On-chain position PDA.
The RFQ (parlay ticket) id — matches the
id path parameter.The counterparty bettor’s Privy DID (
did:privy:...).Your market maker Privy DID (
did:privy:...).The bettor’s stake in USDC.
Your maximum risk (max loss) in USDC.
Collateral locked on-chain for this position in USDC.
null before it lands.Total pot paid to the winner if the parlay resolves (
user_stake + mm_risk).Position status (
active or an in-flight release state — see List Positions).ISO 8601 creation timestamp.
The parlay legs, in leg order. Each leg has the fields documented in List Positions.
Errors
| Status | Code | Description |
|---|---|---|
| 401 | UNAUTHORIZED | Missing or invalid API key. |
| 404 | NOT_FOUND | The id is malformed, or is not one of your active positions. |
curl "https://api.totalis.trade/v1/mm/positions/1a6d1f06-9d4f-47cb-994b-3bdfbbef7e40" \
-H "X-API-Key: $API_KEY"
import requests
rfq_id = "1a6d1f06-9d4f-47cb-994b-3bdfbbef7e40"
resp = requests.get(
f"https://api.totalis.trade/v1/mm/positions/{rfq_id}",
headers={"X-API-Key": API_KEY},
)
if resp.status_code == 404:
print("Not one of your active positions")
else:
position = resp.json()["data"]["position"]
for leg in position["legs"]:
print(leg["market_title"], leg["side"])
{
"data": {
"position": {
"position_pda": "7sKq9fGh2mNp4rTv6wXy8zAb1cDe3fGh5jKl7mNp9qRs",
"rfq_id": "1a6d1f06-9d4f-47cb-994b-3bdfbbef7e40",
"user_id": "did:privy:cmabc123def456ghi789jkl",
"market_maker_id": "did:privy:cmxyz987uvw654rst321opq",
"user_stake": 25,
"mm_risk": 81.25,
"mm_collateral_locked": 81.25,
"total_payout": 106.25,
"status": "active",
"created_at": "2026-06-01T18:45:45.000Z",
"legs": [
{
"market_title": "Lakers",
"event_title": "NBA Finals Winner",
"side": "yes",
"outcome": "yes",
"yes_sub_title": "Los Angeles Lakers",
"no_sub_title": null,
"selection_label": "Lakers",
"bet_group": null,
"venue": "kalshi",
"event_ticker": "KXNBAFINALS-26",
"market_ticker": "KXNBAFINALS-26-LAL",
"exclusivity_group": "KXNBAFINALS-26",
"exclusivity_group_kind": "partition",
"venue_url": "https://kalshi.com/markets/kxnbafinals",
"market_resolved": false,
"market_result": null,
"market_resolved_at": null
}
]
}
}
}
Was this page helpful?
⌘I
