GeminiGemini
SandboxGet API key
  • Crypto Trading
  • Prediction Markets
Changelog
Gemini Crypto Exchange LogoGemini Crypto Exchange Logo

© 2026 Gemini Space Station, Inc.

Getting StartedAPI Specifications
Maker and Taker Incentives
    Market Maker ProgramMaker Rebate ProgramLiquidity Rewards ProgramTaker Rewards Program
WebSocket
    IntroductionAuthenticationMessage Format
    Streams
      Book TickerL2 Partial DepthL2 Differential DepthTrade StreamOrder EventsBalance UpdatesPosition UpdatesContract Status
    Playground
      OverviewconninfopingtimeSUBSCRIBEUNSUBSCRIBELIST_SUBSCRIPTIONSdepthorder.placeorder.cancelorder.cancel_allorder.cancel_session
REST APIs
    Combos
      List CombosGet ComboCreate Combo
    Events
    Volume
    Terms
    Order Management
    Positions
    Rewards
Combo Contracts
    Overview
Combos Request-for-Quote (RFQ)
    OverviewWebSocket StreamsQuote MethodsMaker IntegrationExamples
Tickers & Taxonomy
    OverviewCryptoSportsSports Market TaxonomyCommoditiesWeather
Schemas

Create Combo

REST APIsPrediction MarketsCombosCreate Combo

Create Combo

POSThttps://api.gemini.com/v1/prediction-markets/combos

Create a canonical two-to-six-leg Prediction Markets combo, or retrieve the same combo when its complete leg set already exists.

Production availability

This Combo Prediction Markets endpoint is not currently enabled in production.

POSTv1/prediction-markets/combos
curl --request POST \
  --url https://api.gemini.com/v1/prediction-markets/combos \
  --header 'Content-Type: application/json' \
  --header 'X-GEMINI-APIKEY: <string>' \
  --header 'X-GEMINI-PAYLOAD: <string>' \
  --header 'X-GEMINI-SIGNATURE: <string>' \
  --data '
{
  "legs": [
    {
      "contractId": "101",
      "requiredOutcome": "Yes"
    },
    {
      "contractId": "202",
      "requiredOutcome": "No"
    }
  ]
}
'

Access

This endpoint requires signed private REST authentication, the

Code
PredictionsNewOrder
permission, and an unrestricted trading account. The account is derived from the authenticated API key; do not include an account ID in the request.

Canonicalization

The complete set of legs defines a combo. Reordering the same legs does not create another combo: a new canonical combo returns

Code
201
with
Code
alreadyExisted: false
, while an existing one returns
Code
200
with
Code
alreadyExisted: true
.

Headers

X-GEMINI-APIKEYstring·required
Your API key
X-GEMINI-SIGNATUREstring·required
HEX-encoded HMAC-SHA384 of payload signed with API secret
X-GEMINI-PAYLOADstring·required
Base64-encoded JSON payload
Content-Typestring
Default: text/plain
Content-Lengthstring
Default: 0
Cache-Controlstring
Default: no-cache

Request Body

legsarray·required
Two to six distinct underlying contract legs. The service canonicalizes their complete set, so leg order does not create a distinct combo.
legs[].contractIdstring·required
Underlying contract ID as a decimal string.Example: 101
legs[].requiredOutcomestring·enum·required
Required settlement outcome for this leg.Enum values: YesNoExample: Yes
Example request body
{
  "legs": [
    {
      "contractId": "101",
      "requiredOutcome": "Yes"
    },
    {
      "contractId": "202",
      "requiredOutcome": "No"
    }
  ]
}

Responses

The canonical combo already exists.

comboobject·required
combo.idinteger (int64)·required
Internal combo ID.Example: 456
combo.canonicalLegKeystring·required
Canonical identity of the complete combo leg set.Example: 101:Yes|202:No
combo.legCountinteger (int32)·required
Number of legs in the combo.Example: 2
combo.displayNamestring
Human-readable combo name, when available.
combo.statusstring
Current combo status, when available.
combo.instrumentIdinteger (int64)
Associated instrument ID, when available.
combo.instrumentSymbolstring
Associated instrument symbol, when available.Example: GEMI-CMB-0526-A7F3B2C1D4E5
combo.instrumentRegisteredboolean·required
Whether the combo has been registered with an instrument symbol.
combo.latestExpiryDatestring (date-time)
Latest expiry among the underlying legs, when available.
combo.createdAtstring (date-time)
Creation time, when available.
combo.updatedAtstring (date-time)
Most recent update time, when available.
combo.legsarray·required
Canonically ordered combo legs.
combo.legs[].comboIdinteger (int64)·required
Parent combo ID.
combo.legs[].legIndexinteger (int32)·required
Zero-based leg position in canonical order.
combo.legs[].contractIdstring·required
Underlying contract ID as a decimal string.
combo.legs[].requiredOutcomestring·enum·required
Required settlement outcome for the leg.Enum values: YesNo
combo.legs[].legOutcomestring·enum
Settled outcome for the leg, when resolved.Enum values: YesNo
combo.legs[].resolvedAtstring (date-time)
Resolution time for the leg, when resolved.
combo.legs[].contractobject
Underlying contract metadata, when available.
combo.legs[].contract.contractIdstring
combo.legs[].contract.contractNamestring
combo.legs[].contract.contractTickerstring
combo.legs[].contract.eventTickerstring
combo.legs[].contract.eventNamestring
combo.legs[].contract.categorystring
combo.legs[].contract.contractStatusstring
combo.legs[].contract.eventTypestring
Event type ("binary" or "categorical")
combo.legs[].contract.expiryDatestring (date-time)
combo.legs[].contract.resolvedAtstring (date-time)
combo.legs[].contract.resolutionSidestring
Winning outcome if resolved ("yes" or "no")
combo.legs[].contract.parentEventTickerstring
Parent event ticker for sub-events
combo.legs[].contract.startTimestring (date-time)
Start datetime (ISO 8601)
alreadyExistedboolean·required
`false` when this request created the canonical combo; `true` when the canonical combo already existed.
Example Responses
{
  "combo": {
    "id": 456,
    "canonicalLegKey": "101:Yes|202:No",
    "legCount": 2,
    "displayName": "BTC EOY26 > $120k AND ETH EOY26 <= $4k",
    "status": "Active",
    "instrumentId": 98765,
    "instrumentSymbol": "GEMI-CMB-0526-A7F3B2C1D4E5",
    "instrumentRegistered": true,
    "latestExpiryDate": "2026-12-31T23:59:59.000Z",
    "createdAt": "2026-05-01T12:00:00.000Z",
    "updatedAt": "2026-05-01T12:00:00.000Z",
    "legs": [
      {
        "comboId": 456,
        "legIndex": 0,
        "contractId": "101",
        "requiredOutcome": "Yes"
      },
      {
        "comboId": 456,
        "legIndex": 1,
        "contractId": "202",
        "requiredOutcome": "No"
      }
    ]
  },
  "alreadyExisted": true
}
PreviousGet Combo
Last modified on August 10, 2026