curl "https://api.totalis.trade/v1/mm/quotes?status=accepted&limit=50" \
-H "X-API-Key: $API_KEY"
import requests
# Reconcile on startup or after a WebSocket drop: confirm any
# committed quote you haven't confirmed yet.
resp = requests.get(
"https://api.totalis.trade/v1/mm/quotes",
headers={"X-API-Key": API_KEY},
params={"status": "accepted"},
)
for quote in resp.json()["data"]["quotes"]:
requests.post(
f"https://api.totalis.trade/v1/mm/quotes/{quote['id']}/confirm",
headers={"X-API-Key": API_KEY},
)
{
"data": {
"quotes": [
{
"id": "d4e5f6a7-8901-bcde-f234-567890abcdef",
"parlay_ticket_id": "1a6d1f06-9d4f-47cb-994b-3bdfbbef7e40",
"market_maker_id": "did:privy:cm3mm...",
"payout_odds": 4.0,
"user_cost": 24.75,
"total_payout": 99,
"mm_cost": 74.25,
"taker_fee": 0.25,
"valid_until": "2026-06-01T18:45:45.000Z",
"status": "accepted",
"created_at": "2026-06-01T18:45:30.000Z",
"updated_at": "2026-06-01T18:45:30.000Z",
"mm_wallet_address": "7sKq...9fGh"
}
]
},
"meta": {
"cursor": null,
"has_more": false
}
}
Market maker
List quotes
List your quotes and their lifecycle status. Filter by status or RFQ, with cursor pagination.
GET
/
v1
/
mm
/
quotes
curl "https://api.totalis.trade/v1/mm/quotes?status=accepted&limit=50" \
-H "X-API-Key: $API_KEY"
import requests
# Reconcile on startup or after a WebSocket drop: confirm any
# committed quote you haven't confirmed yet.
resp = requests.get(
"https://api.totalis.trade/v1/mm/quotes",
headers={"X-API-Key": API_KEY},
params={"status": "accepted"},
)
for quote in resp.json()["data"]["quotes"]:
requests.post(
f"https://api.totalis.trade/v1/mm/quotes/{quote['id']}/confirm",
headers={"X-API-Key": API_KEY},
)
{
"data": {
"quotes": [
{
"id": "d4e5f6a7-8901-bcde-f234-567890abcdef",
"parlay_ticket_id": "1a6d1f06-9d4f-47cb-994b-3bdfbbef7e40",
"market_maker_id": "did:privy:cm3mm...",
"payout_odds": 4.0,
"user_cost": 24.75,
"total_payout": 99,
"mm_cost": 74.25,
"taker_fee": 0.25,
"valid_until": "2026-06-01T18:45:45.000Z",
"status": "accepted",
"created_at": "2026-06-01T18:45:30.000Z",
"updated_at": "2026-06-01T18:45:30.000Z",
"mm_wallet_address": "7sKq...9fGh"
}
]
},
"meta": {
"cursor": null,
"has_more": false
}
}
List your quotes that reached the committed trade lifecycle, newest first. A quote appears here when a user commits a quote you submitted:
Use it to reconcile. If your WebSocket connection drops and you miss a
| Status | When |
|---|---|
accepted | The user committed it. Awaiting your confirmation. |
confirmed | You confirmed it. |
expired | The confirmation window lapsed. |
quote:accepted event, poll with status=accepted and confirm anything still open. A confirm on a quote whose window already lapsed returns 409, so a late attempt is safe.
Base URL: https://api.totalis.trade
Authentication
API key required. Pass your API key in theX-API-Key header.
X-API-Key: <key>
Query parameters
string
Return only quotes in this status. One of
accepted, confirmed, expired, pending, executed, rejected, withdrawn. The current flow produces only accepted, confirmed, and expired. An unrecognized value is ignored and the response is unfiltered.string
Return only quotes on this RFQ (UUID).
integer
Page size. Default 50, maximum 100.
string
Opaque pagination cursor. Pass
meta.cursor from the previous page to fetch the next one.Response
object
Show data
Show data
array
Quotes, newest first.
Show quote
Show quote
string
Quote UUID. Matches
quote_id on the quote:accepted and mm_quote:accepted WebSocket events.string
The RFQ this quote belongs to. Matches the
rfq_id filter.string
Your market maker ID.
number
The payout multiplier you quoted. Applies to the net stake (
user_cost), not the gross bet amount; see Fees.number
Cost to the user in USDC: the net stake (
bet_amount minus taker_fee).number
Total payout in USDC if the parlay wins.
number
Your risk in USDC (
total_payout - user_cost).number
Taker fee locked on the quote in USDC (
bet_amount - user_cost). 0 only if the computed fee was zero when the quote was created.string
ISO 8601 timestamp when the quote’s pricing validity ended.
string
Lifecycle status:
accepted (committed by the user, awaiting your confirmation), confirmed (locked in), or expired (confirmation window lapsed and the trade unwound).string
ISO 8601 creation timestamp.
string
ISO 8601 timestamp of the last status change.
string
Your wallet address backing the quote’s collateral. May be omitted.
object
Errors
| Status | Code | Description |
|---|---|---|
| 400 | VALIDATION_ERROR | rfq_id is not a valid UUID. |
| 401 | UNAUTHORIZED | Missing or invalid API key. |
curl "https://api.totalis.trade/v1/mm/quotes?status=accepted&limit=50" \
-H "X-API-Key: $API_KEY"
import requests
# Reconcile on startup or after a WebSocket drop: confirm any
# committed quote you haven't confirmed yet.
resp = requests.get(
"https://api.totalis.trade/v1/mm/quotes",
headers={"X-API-Key": API_KEY},
params={"status": "accepted"},
)
for quote in resp.json()["data"]["quotes"]:
requests.post(
f"https://api.totalis.trade/v1/mm/quotes/{quote['id']}/confirm",
headers={"X-API-Key": API_KEY},
)
{
"data": {
"quotes": [
{
"id": "d4e5f6a7-8901-bcde-f234-567890abcdef",
"parlay_ticket_id": "1a6d1f06-9d4f-47cb-994b-3bdfbbef7e40",
"market_maker_id": "did:privy:cm3mm...",
"payout_odds": 4.0,
"user_cost": 24.75,
"total_payout": 99,
"mm_cost": 74.25,
"taker_fee": 0.25,
"valid_until": "2026-06-01T18:45:45.000Z",
"status": "accepted",
"created_at": "2026-06-01T18:45:30.000Z",
"updated_at": "2026-06-01T18:45:30.000Z",
"mm_wallet_address": "7sKq...9fGh"
}
]
},
"meta": {
"cursor": null,
"has_more": false
}
}
Was this page helpful?

