> ## Documentation Index
> Fetch the complete documentation index at: https://docs.totalis.trade/llms.txt
> Use this file to discover all available pages before exploring further.

# Quote requests in depth

> The fields that protect a commit, where to find the reasons a commit is refused, the SSE event shape, and the quote request object.

A **quote request** is the pre-trade price-discovery object (see the
[Glossary](/guides/glossary#the-noun-stack)). For the full lifecycle, start with
[How parlays work](/guides/lifecycle).

## Commit protection

[Commit](/api-reference/quote-service/commit) requires four fields. Together they make sure you lock
in the price you actually saw.

| Field                      | Type    | Description                                                                                                         |
| -------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------- |
| `expected_version`         | integer | The quote request `version` you're committing against. Rejected if the request was modified since your last update. |
| `displayed_quote_id`       | string  | The `id` of the best quote you were shown.                                                                          |
| `displayed_quote_book_seq` | integer | The `book_seq` from the SSE event that delivered the quote. Proves your pricing was current.                        |
| `min_payout_odds_seen`     | number  | The minimum payout odds you saw. Only quotes at or above this threshold can be selected.                            |

```json theme={null}
{
  "expected_version": 3,
  "displayed_quote_id": "quote-uuid",
  "displayed_quote_book_seq": 5,
  "min_payout_odds_seen": 4.0
}
```

## Rejection codes

If a commit fails, `error.details.reason` tells you why. Each reason and what to do about it is on
[Errors](/api-reference/errors#committing-a-quote).

## SSE event format

Events on the user stream (`/v1/quote-requests/{id}/stream`) look like this:

```json theme={null}
{
  "book_seq": 5,
  "version": 3,
  "best_quote": {
    "id": "quote-uuid",
    "payout_odds": 4.0,
    "user_cost": 24.75,
    "total_payout": 99,
    "mm_cost": 74.25,
    "valid_until": "2026-06-01T18:45:45.000Z"
  }
}
```

When no quotes are active, `best_quote` is `null`. Store `book_seq` and `best_quote.id` from the
latest event. You send them as `displayed_quote_book_seq` and `displayed_quote_id` when you commit.

## Quote request object

```json theme={null}
{
  "id": "1a6d1f06-9d4f-47cb-994b-3bdfbbef7e40",
  "version": 3,
  "request_hash": "sha256...",
  "book_seq": 5,
  "status": "active",
  "bet_amount": 25,
  "expires_at": "2026-06-01T18:45:30.000Z",
  "legs": [
    {
      "id": "8ccf2c5d-...",
      "market_ticker": "KXBTC-26JUN05-T73500",
      "side": "yes",
      "venue": "kalshi"
    }
  ],
  "input_legs": [
    { "market_ticker": "KXBTC-26JUN05-T73500", "side": "yes", "venue": "kalshi" }
  ]
}
```
