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

# Get combo quote

> Price 2 to 10 outcomes as a single combo before placing it

Get the price, multiplier, and maximum stake for a combo without committing to it. Use the returned `quoteId` to [place the combo](https://docs.bayse.markets/api-reference/pm/place-combo.md). See [Combos](https://docs.bayse.markets/concepts/combos.md) for how pricing and settlement work.

## Authentication

Read authentication required — `X-Public-Key` header.

## Request body

**selections** `array` *required*

The combo legs, between 2 and 10. Each market can appear only once. Use [List events](https://docs.bayse.markets/api-reference/pm/list-events.md) with `comboEligible=true` to find markets you can use.

**selection fields**

**marketId** `string` *required*

UUID of the market.

**outcomeId** `string` *required*

UUID of the outcome on that market (`outcome1Id` or `outcome2Id`).

**currency** `string`

`USD` (default) or `NGN`.

## Example request

```bash cURL theme={null}
curl -X POST "https://relay.bayse.markets/v1/pm/combos/quote" \
  -H "X-Public-Key: pk_live_abcdef123456" \
  -H "Content-Type: application/json" \
  -d '{
    "selections": [
      {"marketId": "f6a7b8c9-d0e1-2345-fabc-678901234567", "outcomeId": "01234567-89ab-cdef-0123-456789abcdef"},
      {"marketId": "c9d0e1f2-a3b4-5678-cdef-901234567890", "outcomeId": "34567890-bcde-f012-3456-789abcdef012"},
      {"marketId": "d0e1f2a3-b4c5-6789-defa-012345678901", "outcomeId": "45678901-cdef-0123-4567-89abcdef0123"}
    ],
    "currency": "USD"
  }'
```

```javascript Node.js theme={null}
const response = await fetch('https://relay.bayse.markets/v1/pm/combos/quote', {
  method: 'POST',
  headers: {
    'X-Public-Key': 'pk_live_abcdef123456',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    selections: [
      { marketId: 'f6a7b8c9-d0e1-2345-fabc-678901234567', outcomeId: '01234567-89ab-cdef-0123-456789abcdef' },
      { marketId: 'c9d0e1f2-a3b4-5678-cdef-901234567890', outcomeId: '34567890-bcde-f012-3456-789abcdef012' },
      { marketId: 'd0e1f2a3-b4c5-6789-defa-012345678901', outcomeId: '45678901-cdef-0123-4567-89abcdef0123' },
    ],
    currency: 'USD',
  }),
});
if (!response.ok) {
  const error = await response.json();
  throw new Error(`Quote refused: ${error.message}`);
}
const quote = await response.json();
```

```python Python theme={null}
import requests

resp = requests.post(
    'https://relay.bayse.markets/v1/pm/combos/quote',
    headers={'X-Public-Key': 'pk_live_abcdef123456'},
    json={
        'selections': [
            {'marketId': 'f6a7b8c9-d0e1-2345-fabc-678901234567', 'outcomeId': '01234567-89ab-cdef-0123-456789abcdef'},
            {'marketId': 'c9d0e1f2-a3b4-5678-cdef-901234567890', 'outcomeId': '34567890-bcde-f012-3456-789abcdef012'},
            {'marketId': 'd0e1f2a3-b4c5-6789-defa-012345678901', 'outcomeId': '45678901-cdef-0123-4567-89abcdef0123'},
        ],
        'currency': 'USD',
    },
)
if not resp.ok:
    raise RuntimeError(f"Quote refused: {resp.json()['message']}")
quote = resp.json()
```

```go Go theme={null}
body := strings.NewReader(`{"selections":[{"marketId":"f6a7b8c9-d0e1-2345-fabc-678901234567","outcomeId":"01234567-89ab-cdef-0123-456789abcdef"},{"marketId":"c9d0e1f2-a3b4-5678-cdef-901234567890","outcomeId":"34567890-bcde-f012-3456-789abcdef012"},{"marketId":"d0e1f2a3-b4c5-6789-defa-012345678901","outcomeId":"45678901-cdef-0123-4567-89abcdef0123"}],"currency":"USD"}`)
req, _ := http.NewRequest("POST", "https://relay.bayse.markets/v1/pm/combos/quote", body)
req.Header.Set("X-Public-Key", "pk_live_abcdef123456")
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()
```

## Response

**quoteId** `string`

UUID of this quote. Pass it to [Place combo](https://docs.bayse.markets/api-reference/pm/place-combo.md). It is also the idempotency key for the placement.

**price** `number`

Cost of one combo share (0.00–1.00).

**multiplier** `number`

Payout per unit staked — approximately `1 / price`. Capped at 1000.

**maxStake** `number`

Largest stake you can place on this combo, in the requested currency.

**currency** `string`

`USD` or `NGN`.

**legCount** `integer`

Number of legs in the combo.

**legs** `array`

The priced legs.

**leg fields**

**eventId** `string`

UUID of the leg's event.

**marketId** `string`

UUID of the leg's market.

**outcomeId** `string`

UUID of the selected outcome.

**eventTitle** `string`

Title of the event.

**marketTitle** `string`

Title of the market.

**outcomeLabel** `string`

Label of the selected outcome (e.g. `YES`).

**outcomeIndex** `integer`

`1` or `2` — which side of the market the outcome is.

**imageUrl** `string`

Event image URL. Omitted when the event has no image.

**chance** `number`

Probability of this leg winning (0.00–1.00).

**gameStartDate** `string`

ISO 8601 start time of the leg's game. Present on sports legs.

```json 200 OK theme={null}
{
  "quoteId": "7c1e9a52-4b3d-4f8e-9a61-2d5b8c0e3f47",
  "price": 0.18,
  "multiplier": 5.56,
  "maxStake": 250,
  "currency": "USD",
  "legCount": 3,
  "legs": [
    {
      "eventId": "e5f6a7b8-c9d0-1234-efab-cd567890abcd",
      "marketId": "f6a7b8c9-d0e1-2345-fabc-678901234567",
      "outcomeId": "01234567-89ab-cdef-0123-456789abcdef",
      "eventTitle": "Manchester City vs Aston Villa",
      "marketTitle": "Manchester City to Win",
      "outcomeLabel": "YES",
      "outcomeIndex": 1,
      "imageUrl": "https://cdn.bayse.markets/events/mci-avl.jpg",
      "chance": 0.62,
      "gameStartDate": "2026-10-31T15:00:00Z"
    },
    {
      "eventId": "b9c0d1e2-f3a4-5678-9abc-def012345678",
      "marketId": "c9d0e1f2-a3b4-5678-cdef-901234567890",
      "outcomeId": "34567890-bcde-f012-3456-789abcdef012",
      "eventTitle": "Arsenal vs Chelsea",
      "marketTitle": "Over 2.5 total goals",
      "outcomeLabel": "YES",
      "outcomeIndex": 1,
      "imageUrl": "https://cdn.bayse.markets/events/ars-che.jpg",
      "chance": 0.55,
      "gameStartDate": "2026-10-31T17:30:00Z"
    },
    {
      "eventId": "c0d1e2f3-a4b5-6789-abcd-ef0123456789",
      "marketId": "d0e1f2a3-b4c5-6789-defa-012345678901",
      "outcomeId": "45678901-cdef-0123-4567-89abcdef0123",
      "eventTitle": "Liverpool vs Tottenham",
      "marketTitle": "Liverpool to Win",
      "outcomeLabel": "YES",
      "outcomeIndex": 1,
      "imageUrl": "https://cdn.bayse.markets/events/liv-tot.jpg",
      "chance": 0.48,
      "gameStartDate": "2026-11-01T16:30:00Z"
    }
  ]
}
```

```json 400 Payout cap theme={null}
{
  "error": "Bad Request",
  "message": "A combo cannot pay more than 1000x. Remove an outcome or pick ones with a higher chance.",
  "statusCode": 400
}
```

```json 400 Conflicting legs theme={null}
{
  "error": "Bad Request",
  "message": "You cannot have Manchester City to Win and Aston Villa to Win in the same combo: they cannot both happen",
  "statusCode": 400
}
```

## Errors

| Status | When |
| - | - |
| `400` | Fewer than 2 or more than 10 selections, the same market appears twice, or two legs come from the same grouped or combined event. |
| `400` | Legs conflict — for example, outcomes on the same game that cannot both happen, or legs on the same fixture that are too closely correlated to combine. |
| `400` | A leg's market is not open, is not available for combos, or cannot be priced right now. |
| `400` | The combo would pay well over 1000×. A slip that prices only slightly over is quoted at exactly 1000× instead. |
| `401` | Missing or invalid `X-Public-Key`. |
| `403` | Combos are currently unavailable. |

> [!TIP]
>
> The quote is indicative. Placement re-prices the combo, so set `maxPrice` on [Place combo](https://docs.bayse.markets/api-reference/pm/place-combo.md) to cap what you are willing to pay.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.