Skip to main content
POST
/
v1
/
quote-requests
/
{id}
/
commit
curl -X POST https://api.totalis.trade/v1/quote-requests/1a6d1f06-9d4f-47cb-994b-3bdfbbef7e40/commit \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "expected_version": 3,
    "displayed_quote_id": "b2c3d4e5-6789-0abc-def1-234567890abc",
    "displayed_quote_book_seq": 5,
    "min_payout_odds_seen": 4.25
  }'
{
  "data": {
    "status": "committed",
    "quote_request_id": "1a6d1f06-9d4f-47cb-994b-3bdfbbef7e40",
    "rfq_id": "c3d4e5f6-7890-abcd-ef12-34567890abcd",
    "quote_id": "d4e5f6a7-8901-bcde-f234-567890abcdef",
    "selected_payout_odds": 4.25,
    "confirmation_deadline": "2026-06-01T18:45:35.000Z"
  }
}
Commit the best available quote on an active quote request. The server re-validates all markets, selects the best quote that meets your min_payout_odds_seen threshold, and creates the trade atomically. The request body includes protection fields that tie the commit to exactly what you last saw, preventing stale-price execution. After a successful commit, the selected market maker receives a quote:accepted event and must confirm the trade before the confirmation_deadline. The selected market maker may also receive mm_quote:accepted on its private mm:quotes:{mm_id} channel with the final quote economics and exact exposure legs for immediate local risk reservation. From there, the vault settlement flow takes over.

Authentication

Bearer token required. Pass your JWT in the Authorization header.
Authorization: Bearer <jwt>

Path Parameters

id
string
required
The quote request ID (UUID).

Request Body

expected_version
integer
required
The quote request version you are committing against. The commit is rejected if the version has changed since you last received it, indicating the request was modified.
displayed_quote_id
string
required
The id of the best quote you saw at commit time.
displayed_quote_book_seq
integer
required
The book_seq value from the SSE event that delivered the displayed quote. Proves your data was up to date.
min_payout_odds_seen
number
required
The minimum payout odds you were shown. Only quotes at or above this threshold are eligible. Must be at least 1.0001.

Response

data
object

Rejection Reasons

When a commit is rejected with 409 Conflict, the error.details.reason field explains why:
ReasonDescription
QUOTE_CHANGEDThe expected_version does not match. The request was updated since you last fetched it.
MARKET_NOT_LIVEOne or more markets are no longer available (expired, halted, or delisted).
QUOTE_EXPIREDNo active quotes exist, or the best quote expired between selection and commit.
COMMIT_FAILEDThe commit could not be completed — for example no eligible market maker had sufficient collateral. Returns 409.
COMMIT_FAILED_RETRYABLETransient error. Retry after a short delay. Returns 503.

Errors

StatusCodeDescription
400VALIDATION_ERRORMissing or invalid commit fields.
401UNAUTHORIZEDMissing or invalid JWT.
403FORBIDDENYou do not own this quote request.
404NOT_FOUNDQuote request not found.
409CONFLICTCommit rejected. See error.details.reason above.
503SERVICE_UNAVAILABLETransient failure. Retry after a short delay.
curl -X POST https://api.totalis.trade/v1/quote-requests/1a6d1f06-9d4f-47cb-994b-3bdfbbef7e40/commit \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "expected_version": 3,
    "displayed_quote_id": "b2c3d4e5-6789-0abc-def1-234567890abc",
    "displayed_quote_book_seq": 5,
    "min_payout_odds_seen": 4.25
  }'
{
  "data": {
    "status": "committed",
    "quote_request_id": "1a6d1f06-9d4f-47cb-994b-3bdfbbef7e40",
    "rfq_id": "c3d4e5f6-7890-abcd-ef12-34567890abcd",
    "quote_id": "d4e5f6a7-8901-bcde-f234-567890abcdef",
    "selected_payout_odds": 4.25,
    "confirmation_deadline": "2026-06-01T18:45:35.000Z"
  }
}