---
title: "Build Parlay"
method: POST
path: "/v1/parlays/build"
tags: ["parlays"]
---

# Build Parlay

`POST /v1/parlays/build`

## Request

- Base URL: `https://api.rivermarkets.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.rivermarkets.com/v1/parlays/build`
- Auth: none declared

Turn 2 or more legs, each a River market id with the side it must resolve to, into a
tradable combo market and return its river_id for POST /v1/rfqs. Polymarket US creates
(or fetches) the combo instrument under your credentials, up to 15 legs. Kalshi finds a
collection that admits every leg and materializes the parlay there. Either way the combo
pays out only if every leg resolves to its side.

Strategy:
  1. For each leg, query `GET /multivariate_event_collections?associated_event_ticker=<event>`
     to enumerate every collection containing that leg's event.
  2. Intersect the collection sets across all legs — these are the collections
     that can host the parlay.
  3. Drop collections that don't admit the requested leg count
     (`size_min <= len(legs) <= size_max`), and any closed collections.
  4. Pick the narrowest surviving collection (smallest `associated_events`
     count) — narrower collections usually have denser quoter coverage.
  5. Materialize the combo market in that collection and return the new
     `market_ticker` plus the chosen `collection_ticker`.

422 if no collection covers all legs — response includes the per-leg
collection lists so the caller can show the user where the legs DO live.

## Request body

- BuildParlayRequest
  - `subaccount_id` string, uuid, required: Subaccount to build under
  - `exchange` string, required: KALSHI or POLYMARKET_US
  - `legs` BuildLeg[], required: Legs to combine, all on the chosen exchange
    - `river_id` integer, required
    - `buy_flag` boolean, required: True: the combo pays when this market resolves YES; False: when it resolves NO

## Response `200`

Successful Response

- BuildParlayResponse: The combo as a River market: pass river_id to POST /v1/rfqs, or trade it like any market.
  - `river_id` integer, required

## Other responses

- `422`: Validation Error

## Changes

- **2026-10-09** `dcf2b3da7bf9`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/rivermarkets/apis/river-finance-api/changes/v1/parlays/build/post.md)

---

[API](https://skmtc.dev/rivermarkets/apis/river-finance-api.md) - [All operations](https://skmtc.dev/rivermarkets/apis/river-finance-api/llms.txt) - [OpenAPI document](https://skmtc.dev/rivermarkets/apis/river-finance-api/revisions/3732aea08430?raw)
