Market Maker
Submit or Replace Quote
Submit a price quote for an active quote request, or replace your existing quote.
PUT
Submit a quote for an active quote request. If you already have an active quote for the same request version, it is replaced atomically. Only one active quote per market maker per request version is allowed.
When the user updates their request (changing legs or bet amount), the
version and request_hash change, and your existing quote is automatically invalidated. Listen for quote_request:updated events on the SSE stream to detect version changes and re-price.
Moving to a new version takes no withdraw. A quote is scoped to a single
(request, version) pair. When the request advances to a new version, your prior-version quote is invalidated automatically — it leaves the book at once, can no longer be accepted, and never blocks a new submission. To quote the new version, simply PUT again with the new request_version and request_hash from the latest quote_request:updated event. There is no need to withdraw the old quote first.A 409 with reason: version_mismatch is not caused by an outstanding prior quote. It means the request_version and/or request_hash in your body no longer match the live request — you priced a stale version, or the slip changed again while you were pricing. Re-read the latest stream event and submit with both current values (they must both match).Authentication
API key required. Pass your market maker API key in theX-API-Key header.
Path Parameters
The quote request ID (UUID).
Request Body
The version of the quote request you priced. Must match the current version from the SSE stream.
The
request_hash from the quote request event. Prevents pricing against stale data.Payout multiplier on the user’s bet amount. Between 1.0001 and 1000. The server derives all cost fields (
user_cost, total_payout, mm_cost) from this value and the request’s bet_amount.How long this quote is valid, in milliseconds. Range: 5000-60000. Default: 15000.
Response
Returns201 Created for a new quote or 200 OK when replacing an existing quote.
Conflict Reasons
When a submit is rejected with409 Conflict, the error.details.reason field explains why:
| Reason | Description |
|---|---|
not_found | Quote request ID does not exist. |
expired | Quote request has expired. |
not_active | Quote request is committed, cancelled, or otherwise inactive. |
version_mismatch | Your request_version and/or request_hash don’t match the live request — you priced a stale version, or it changed while you were pricing. Re-read the latest quote_request / quote_request:updated event and submit both current values. This is not caused by a still-open prior quote, so there is nothing to withdraw. |
self_quote | You cannot quote your own requests. |
Errors
| Status | Code | Description |
|---|---|---|
| 400 | VALIDATION_ERROR | Invalid body. See details.issues. |
| 401 | UNAUTHORIZED | Missing or invalid API key. |
| 409 | CONFLICT | Quote rejected. See details.reason above. |
