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

© 2026 Gemini Space Station, Inc.

Information
Markets
    List prediction market eventsgetGet event by tickergetGet strike price for eventgetList newly listed eventsgetList recently settled eventsgetList upcoming eventsgetList event categoriesget
Terms
    Get prediction market termsgetGet prediction market terms statusgetAccept prediction market termspost
Trading
    Place orderpostPlace a batch of orderspostCancel orderpostCancel a batch of orderspost
Positions
    Get active orderspostGet order historypostGet positionspostGet settled positionspostGet volume metricspost
Combos
    List combo contractsgetGet combo by instrument symbolget
Rewards
    Get maker-rebate rate schedulegetList maker-rebate payoutspostGet maker-rebate lifetime summarygetGet liquidity-rewards program configgetList liquidity-rewards eventsgetGet liquidity-rewards daily summarygetGet liquidity-rewards lifetime summaryget
Schemas
Gemini Prediction Markets API
Gemini Prediction Markets API

Positions

Server

Authenticated endpoints for viewing positions and order history. Use REST positions for recovery or audit snapshots after reconnects, missed WebSocket messages, and settlement windows.


Get active orders

POST
https://api.gemini.com
/v1/prediction-markets/orders/active

Returns a list of currently open (active) orders. Requires authentication.

Get active orders › Request Body

symbol
​string

Filter by contract instrument symbol

Example: GEMI-FEDJAN26-DN25
limit
​integer · max: 100

Maximum number of results to return (default 50, max 100)

Default: 50
offset
​integer

Number of results to skip for pagination

Default: 0

Get active orders › Responses

Successful response

OrdersResponse
​OrderResponse[]
​PaginationSimple
POST/v1/prediction-markets/orders/active
curl --request POST \ --url https://api.gemini.com/v1/prediction-markets/orders/active \ --header 'Content-Type: application/json' \ --data ' { "symbol": "GEMI-FEDJAN26-DN25", "limit": 50, "offset": 0 } '
shell
Example Request Body
{ "symbol": "GEMI-FEDJAN26-DN25", "limit": 50, "offset": 0 }
json
Example Responses
{ "orders": [ { "orderId": 12345678901, "status": "open", "symbol": "GEMI-FEDJAN26-DN25", "side": "buy", "outcome": "yes", "orderType": "limit", "quantity": "100", "filledQuantity": "25", "remainingQuantity": "75", "price": "0.65", "avgExecutionPrice": "0.64", "createdAt": "2025-12-15T10:30:00.000Z", "updatedAt": "2025-12-15T11:00:00.000Z", "cancelledAt": null, "contractMetadata": { "contractId": "contract_123", "contractName": "FEDJAN26-DN25", "contractTicker": "FEDJAN26-DN25", "eventTicker": "FEDJAN26", "eventName": "Will Fed Funds Rate drop at least 0.25% at January 2026 meeting?", "category": "economics", "contractStatus": "active", "imageUrl": "https://example.com/fed.png", "expiryDate": "2026-01-31T23:59:59.000Z", "resolvedAt": null, "description": "Resolves YES if Federal Reserve lowers the target rate by 0.25% or more at the January 2026 FOMC meeting" } }, { "orderId": 12345678902, "status": "open", "symbol": "GEMI-FEDJAN26-DN25", "side": "sell", "outcome": "yes", "orderType": "limit", "quantity": "50", "filledQuantity": "0", "remainingQuantity": "50", "price": "0.65", "avgExecutionPrice": null, "createdAt": "2025-12-15T12:00:00.000Z", "updatedAt": "2025-12-15T12:00:00.000Z", "cancelledAt": null, "contractMetadata": { "contractId": "contract_123", "contractName": "FEDJAN26-DN25", "contractTicker": "FEDJAN26-DN25", "eventTicker": "FEDJAN26", "eventName": "Will Fed Funds Rate drop at least 0.25% at January 2026 meeting?", "category": "economics", "contractStatus": "active", "imageUrl": "https://example.com/fed.png", "expiryDate": "2026-01-31T23:59:59.000Z", "resolvedAt": null, "description": "Resolves YES if Federal Reserve lowers the target rate by 0.25% or more at the January 2026 FOMC meeting" } } ], "pagination": { "limit": 50, "offset": 0, "count": 2 } }
json
application/json

Get order history

POST
https://api.gemini.com
/v1/prediction-markets/orders/history

Returns historical orders (filled or cancelled) for the authenticated user. Use status: filled with from and to to retrieve fully filled orders in a bounded time window. The range is [from, to): from is inclusive and to is exclusive. A time-bounded response contains at most limit results and ignores offset; split high-volume periods into non-overlapping ranges. Use /orders/active for open orders.

Get order history › Request Body

status
​string · enum

Filter by order status

Enum values:
filled
cancelled
symbol
​string

Filter by contract instrument symbol

Example: GEMI-FEDJAN26-DN25
limit
​integer · min: 1 · max: 1000

Maximum number of results to return. Defaults to 50 and is capped at 1000.

Default: 50
offset
​integer · min: 0 · max: 10000

Number of results to skip for pagination. Offset is ignored when from or to is supplied.

Default: 0
from
​integer · int64

Inclusive start of the order-closed time range, expressed as Unix epoch milliseconds. Use with to for a UTC daily window.

Example: 1775001600000
to
​integer · int64

Exclusive end of the order-closed time range, expressed as Unix epoch milliseconds. from must not be later than to.

Example: 1775088000000

Get order history › Responses

Successful response

OrdersResponse
​OrderResponse[]
​PaginationSimple
POST/v1/prediction-markets/orders/history
curl --request POST \ --url https://api.gemini.com/v1/prediction-markets/orders/history \ --header 'Content-Type: application/json' \ --data ' { "status": "filled", "symbol": "GEMI-FEDJAN26-DN25", "limit": 50, "offset": 0, "from": 1775001600000, "to": 1775088000000 } '
shell
Example Request Body
{ "status": "filled", "symbol": "GEMI-FEDJAN26-DN25", "limit": 50, "offset": 0, "from": 1775001600000, "to": 1775088000000 }
json
Example Responses
{ "orders": [ { "orderId": 12345678, "hashOrderId": "hashOrderId", "clientOrderId": "clientOrderId", "globalOrderId": "globalOrderId", "status": "open", "symbol": "symbol", "side": "buy", "outcome": "yes", "orderType": "limit", "quantity": "quantity", "filledQuantity": "filledQuantity", "remainingQuantity": "remainingQuantity", "price": "price", "stopPrice": "stopPrice", "avgExecutionPrice": "avgExecutionPrice", "createdAt": "2024-08-25T15:00:00Z", "updatedAt": "2024-08-25T15:00:00Z", "cancelledAt": "2024-08-25T15:00:00Z", "contractMetadata": { "contractId": "contractId", "contractName": "contractName", "contractTicker": "contractTicker", "eventTicker": "eventTicker", "eventName": "eventName", "category": "category", "contractStatus": "contractStatus", "eventType": "eventType", "expiryDate": "2024-08-25T15:00:00Z", "resolvedAt": "2024-08-25T15:00:00Z", "resolutionSide": "resolutionSide", "parentEventTicker": "parentEventTicker", "startTime": "2024-08-25T15:00:00Z" } } ], "pagination": { "limit": 0, "offset": 0, "count": 0 } }
json
application/json

Get positions

POST
https://api.gemini.com
/v1/prediction-markets/positions

Returns current filled positions for the authenticated user. All query parameters are optional; omitting them preserves the legacy unpaginated, unsorted behavior.

Get positions › query Parameters

eventTicker
​string

Filter positions to a single event ticker (e.g. FEDJAN26). Positions on sub-events whose parentEventTicker matches the value may also be included.

limit
​integer · min: 1 · max: 1000

Maximum number of positions to return. Clamped to [1, 1000] when supplied. Omit for legacy unpaginated behavior.

offset
​integer · min: 0

Number of positions to skip for pagination. Floor-clamped to 0 when supplied. Ignored when limit is omitted (the response is unpaginated).

sort
​string · enum

Sort order. Accepts positionValue, unrealizedPnl, or expiryDate (case-insensitive), optionally prefixed with + (ascending) or - (descending). A bare field name uses each field's default direction: positionValue and unrealizedPnl default to descending; expiryDate defaults to ascending (soonest-first). unrealizedPnl and expiryDate sort NULLS LAST so positions without the sort key sink to the bottom regardless of direction. instrumentId ascending is the final tiebreaker for stable pagination across quote ticks. A malformed sort value silently falls back to -positionValue — no 400 is returned.

Enum values:
positionValue
+positionValue
-positionValue
unrealizedPnl
+unrealizedPnl
-unrealizedPnl
expiryDate
+expiryDate

Get positions › Responses

Successful response

PositionsResponse
​Position[]
total
​integer | null

Total number of positions (for pagination)

POST/v1/prediction-markets/positions
curl --request POST \ --url https://api.gemini.com/v1/prediction-markets/positions
shell
Example Responses
{ "positions": [ { "symbol": "GEMI-FEDJAN26-DN25", "instrumentId": 1001, "totalQuantity": "125", "quantityOnHold": "10", "avgPrice": "0.63", "outcome": "yes", "contractMetadata": { "contractId": "contract_123", "contractName": "FEDJAN26-DN25", "contractTicker": "FEDJAN26-DN25", "eventTicker": "FEDJAN26", "eventName": "Will Fed Funds Rate drop at least 0.25% at January 2026 meeting?", "category": "economics", "contractStatus": "active", "imageUrl": "https://example.com/fed.png", "eventImageUrl": "https://example.com/fed-event.png", "eventType": "binary", "expiryDate": "2026-01-31T23:59:59.000Z", "resolvedAt": null, "resolutionSide": null, "description": "Resolves YES if Federal Reserve lowers the target rate by 0.25% or more at the January 2026 FOMC meeting", "sortOrder": null, "parentEventTicker": null, "template": "binary", "color": null, "startTime": null }, "prices": { "buy": { "yes": "0.63", "no": "0.37" }, "sell": { "yes": "0.61", "no": "0.35" }, "bestBid": "0.61", "bestAsk": "0.63", "lastTradePrice": "0.62" }, "resolutionSide": null, "isAboveAutoStartThreshold": false, "isLive": true, "realizedPl": "0", "marketValue": "78.75", "unrealizedPnl": "0", "unrealizedPct": 0 }, { "symbol": "GEMI-FEDJAN26-DN25", "instrumentId": 1001, "totalQuantity": "200", "quantityOnHold": "0", "avgPrice": "0.36", "outcome": "no", "contractMetadata": { "contractId": "contract_123", "contractName": "FEDJAN26-DN25", "contractTicker": "FEDJAN26-DN25", "eventTicker": "FEDJAN26", "eventName": "Will Fed Funds Rate drop at least 0.25% at January 2026 meeting?", "category": "economics", "contractStatus": "active", "imageUrl": "https://example.com/fed.png", "eventImageUrl": "https://example.com/fed-event.png", "eventType": "binary", "expiryDate": "2026-01-31T23:59:59.000Z", "resolvedAt": null, "resolutionSide": null, "description": "Resolves YES if Federal Reserve lowers the target rate by 0.25% or more at the January 2026 FOMC meeting", "sortOrder": null, "parentEventTicker": null, "template": "binary", "color": null, "startTime": null }, "prices": { "buy": { "yes": "0.37", "no": "0.63" }, "sell": { "yes": "0.35", "no": "0.61" }, "bestBid": "0.35", "bestAsk": "0.37", "lastTradePrice": "0.36" }, "resolutionSide": null, "isAboveAutoStartThreshold": false, "isLive": true, "realizedPl": "0", "marketValue": "72.00", "unrealizedPnl": "0", "unrealizedPct": 0 } ], "total": 2 }
json
application/json

Get settled positions

POST
https://api.gemini.com
/v1/prediction-markets/positions/settled

Returns historically settled positions for the authenticated user. Each entry represents a position in a contract that has resolved.

  • payout — the amount received from settlement
  • resolutionSide — indicates which outcome (yes or no) won.

This endpoint differs from Get positions in that it returns closed positions from settled contracts rather than current open positions.

Get settled positions › query Parameters

eventTicker
​string

Optional event ticker to filter settled positions to a single event (e.g. FEDJAN26). If omitted, all settled positions for the account are returned.

limit
​integer · min: 1 · max: 1000

Maximum number of settled positions to return.

Default: 1000
offset
​integer · min: 0

Number of settled positions to skip for pagination.

Default: 0
sort
​string · enum

Sort order. Accepts date or payout, optionally prefixed with + (ascending) or - (descending). A bare field name defaults to descending. date ascending is rejected and silently falls back to the default order — settled positions are conceptually ordered most-recent-first. A malformed sort value also falls back silently; no 400 is returned.

Enum values:
date
-date
payout
+payout
-payout
Example: -payout
search
​string

Case-insensitive substring filter. Matches against the event name, contract name, event ticker, or any ancestor category name in the contract's category subtree (up to four levels). Whitespace is trimmed; inputs under 3 characters are dropped (GIN trigram lookup floor); inputs over 64 characters are truncated.

category
​string

Filter to settled positions whose contract's event belongs to the named category (or any of its descendants in the category tree). Whitespace is trimmed; empty values are ignored.

Example: sports
withCashOuts
​boolean

Opt-in flag. When true, the response carries new sibling fields (cashOuts, totalCashOutProceeds, totalCashOutCostBasis, totalCashOutNetProfit) populated with the qualifying cash-outs in the same account-scoped time window as the returned page's settled positions. When false (default) the response shape is byte-identical to the pre-withCashOuts contract: the positions[] element schema is unchanged regardless of the flag.

Example: true
Default: false

Get settled positions › Responses

Successful response

SettledPositionsResponse
​SettledPosition[]
total
​integer | null

Total number of settled positions across all pages for the current filter set.

totalPayout
​string

Sum of payout across all settled positions in the filter set. Retained for binary back-compat with the legacy response shape; field is absent (not null) on the unified backend because computing a roll-up over the full filtered set would require a separate aggregate query (deferred until a partner asks). Play's default OptionHandlers omits absent Option fields rather than emitting null.

totalCostBasis
​string

Sum of costBasis across all settled positions in the filter set. Retained for binary back-compat; field is absent (not null) on the unified backend (see totalPayout).

totalNetProfit
​string

Sum of netProfit across all settled positions in the filter set. Retained for binary back-compat; field is absent (not null) on the unified backend (see totalPayout).

​CashedOutPosition[]

Cash-outs (early sells before contract resolution) in the same account-scoped time window as the returned page's settled positions. Field is absent (not null) when withCashOuts=true is not passed on the request. positions[] pagination is unaffected — limit/offset continue to scope positions[] only.

totalCashOutProceeds
​string

Sum of cashOuts[].proceeds over the returned cash-outs. Field is absent (not null) when withCashOuts=true is not passed on the request.

Example: 120.00
totalCashOutCostBasis
​string

Sum of cashOuts[].costBasis over the returned cash-outs. Field is absent (not null) when withCashOuts=true is not passed on the request.

Example: 100.00
totalCashOutNetProfit
​string

Sum of cashOuts[].netProfit over the returned cash-outs. Field is absent (not null) when withCashOuts=true is not passed on the request.

Example: 20.00
POST/v1/prediction-markets/positions/settled
curl --request POST \ --url https://api.gemini.com/v1/prediction-markets/positions/settled
shell
Example Responses
{ "positions": [ { "accountId": 12345, "instrumentId": 1001, "instrumentSymbol": "GEMI-FEDJAN26-DN25", "position": "125", "positionQuantity": "125", "outcome": "yes", "payout": "125.00", "resolutionSide": "yes", "settledAt": "2026-01-31T23:59:59.000Z", "contractMetadata": { "contractId": "contract_123", "contractName": "FEDJAN26-DN25", "contractTicker": "FEDJAN26-DN25", "eventTicker": "FEDJAN26", "eventName": "Will Fed Funds Rate drop at least 0.25% at January 2026 meeting?", "category": "economics", "contractStatus": "resolved", "imageUrl": "https://example.com/fed.png", "eventImageUrl": "https://example.com/fed-event.png", "eventType": "binary", "expiryDate": "2026-01-31T23:59:59.000Z", "resolvedAt": "2026-01-31T23:59:59.000Z", "resolutionSide": "yes", "description": "Resolves YES if Federal Reserve lowers the target rate by 0.25% or more at the January 2026 FOMC meeting", "sortOrder": null, "parentEventTicker": null, "template": "binary", "color": null, "startTime": null }, "costBasis": "78.75", "realizedPnl": "0", "netProfit": "46.25" }, { "accountId": 12345, "instrumentId": 1002, "instrumentSymbol": "GEMI-FEDJAN26-NOCUT", "position": "-200", "positionQuantity": "200", "outcome": "no", "payout": "0", "resolutionSide": "yes", "settledAt": "2026-01-31T23:59:59.000Z", "contractMetadata": { "contractId": "contract_124", "contractName": "FEDJAN26-NOCUT", "contractTicker": "FEDJAN26-NOCUT", "eventTicker": "FEDJAN26", "eventName": "Will Fed Funds Rate drop at least 0.25% at January 2026 meeting?", "category": "economics", "contractStatus": "resolved", "imageUrl": "https://example.com/fed.png", "eventImageUrl": "https://example.com/fed-event.png", "eventType": "binary", "expiryDate": "2026-01-31T23:59:59.000Z", "resolvedAt": "2026-01-31T23:59:59.000Z", "resolutionSide": "yes", "description": "Resolves YES if Federal Reserve lowers the target rate by 0.25% or more at the January 2026 FOMC meeting", "sortOrder": null, "parentEventTicker": null, "template": "binary", "color": null, "startTime": null }, "costBasis": "72.00", "realizedPnl": "0", "netProfit": "-72.00" } ], "total": 2 }
json
application/json

Get volume metrics

POST
https://api.gemini.com
/v1/prediction-markets/metrics/volume

Returns per-contract share volume metrics for an event, including the authenticated user's taker and maker volumes.

All volumes are in shares (number of contracts traded), not dollar amounts.

  • totalQty — Total taker volume across all participants for this contract
  • userAggressorQty — The authenticated user's taker (aggressor) volume
  • userRestingQty — The authenticated user's maker (resting) volume, counted when another order fills against the user's resting limit order

An optional time range can be specified to filter trades within a specific window.

Get volume metrics › Request Body

eventTicker
​string · required

The event ticker symbol

Example: FED260318
startTime
​integer · int64

Start of time range filter (epoch milliseconds). If omitted, defaults to the earliest contract creation time.

endTime
​integer · int64

End of time range filter (epoch milliseconds). If omitted, includes all trades up to now.

Get volume metrics › Responses

Successful response

VolumeMetricsResponse
eventTicker
​string

The event ticker

Example: FED260318
​ContractShareVolume[]
POST/v1/prediction-markets/metrics/volume
curl --request POST \ --url https://api.gemini.com/v1/prediction-markets/metrics/volume \ --header 'Content-Type: application/json' \ --data ' { "eventTicker": "FED260318" } '
shell
Example Request Body
{ "eventTicker": "FED260318" }
json
application/json
Example Responses
{ "eventTicker": "FED260318", "contracts": [ { "symbol": "GEMI-FED260318-CUT25", "totalQty": "94625", "userAggressorQty": "1", "userRestingQty": "0" }, { "symbol": "GEMI-FED260318-CUTGT25", "totalQty": "68666", "userAggressorQty": "0", "userRestingQty": "0" }, { "symbol": "GEMI-FED260318-HIKE", "totalQty": "15397", "userAggressorQty": "0", "userRestingQty": "0" }, { "symbol": "GEMI-FED260318-MAINTAIN", "totalQty": "20400", "userAggressorQty": "5", "userRestingQty": "0" } ] }
json
application/json

TradingCombos