GeminiGemini
Demo environmentGet API key
  • Overview
  • Crypto Trading
  • Prediction Markets
  • Perpetuals
  • Stocks
  • API Reference
  • SDKs & Tools
Changelog
Gemini logoGemini logo

© 2026 Gemini Space Station, Inc.

Overview
Core Concepts
    Events, contracts, and outcomesCombo contracts
Market Data
    OverviewFetching Markets
    Ticker formats
      OverviewCryptoSportsSports Market TaxonomyCommoditiesWeather
Trading
    QuickstartOrder lifecycle and settlement
    Full REST reference
      Combo RFQ
      Events
      Volume
      Terms
      Order Management
        Place OrderPlace Batch OrdersCancel OrderCancel Batch OrdersGet Active OrdersGet Order History
      Positions
      Rewards
    WebSocket APIs
      OverviewAuthenticationMessage format
      Streams
        Book tickerL2 partial depthL2 differential depthTrade streamOrder eventsBalance updatesPosition updatesContract statusPrediction
      Utility
      Subscriptions
      L2 Data
      Order management
      Combo RFQ
        OverviewWebSocket streamsQuote methodsMaker integrationExamples
Market Makers
    Maker Fee-Free Trading PromoTaker Rewards ProgramMaker Rebate ProgramLiquidity Rewards ProgramMarket Maker Program
Resources
    SchemasDemo environmentRate limitsErrors

Place Batch Orders

REST APIsPrediction MarketsOrder ManagementPlace Batch Orders

Place Batch Orders

POSThttps://api.gemini.com/v1/prediction-markets/order/batch

Place 1 to 20 prediction market orders in one authenticated request. The batch is synchronous and non-atomic: up-front validation rejects the entire batch, while exchange submission errors are returned per entry and do not stop later entries.

POSTv1/prediction-markets/order/batch
curl --request POST \
  --url https://api.gemini.com/v1/prediction-markets/order/batch \
  --header 'Content-Type: application/json' \
  --header 'X-GEMINI-APIKEY: <string>' \
  --header 'X-GEMINI-PAYLOAD: <string>' \
  --header 'X-GEMINI-SIGNATURE: <string>' \
  --data '
{
  "orders": [
    {
      "symbol": "GEMI-FEDJAN26-DN25",
      "orderType": "limit",
      "side": "buy",
      "quantity": "100",
      "price": "0.65",
      "outcome": "yes",
      "timeInForce": "good-til-cancel"
    },
    {
      "symbol": "GEMI-FEDJAN26-DN25",
      "orderType": "limit",
      "side": "sell",
      "quantity": "50",
      "price": "0.35",
      "outcome": "no",
      "timeInForce": "good-til-cancel"
    }
  ]
}
'

Terms

Before sending a Prediction Markets order, check Get Terms Status. If the latest terms are not accepted, display Get Terms and call Accept Terms, then retry the batch.

Roles

The API key you use to access this endpoint must have the Trader role assigned. See Roles for more information.

The OAuth scope must have orders:create assigned to access this endpoint. See OAuth Scopes for more information.

Batch Behavior

  • The complete
    Code
    {"orders":[...]}
    payload is encoded and signed once.
  • Gemini validates the batch size and every order before submitting anything. Any up-front validation, account, terms, or risk failure rejects the entire request.
  • After validation, orders are submitted sequentially and results remain aligned with request order.
  • An exchange rejection such as
    Code
    InsufficientFunds
    is returned in that entry's result. Other valid entries continue to be submitted.

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

ordersarray·required
Orders to submit. Every entry is validated before any order is submitted. All orders use the account associated with the authenticated request.
orders[].symbolstring·required
Contract instrument symbolExample: GEMI-FEDJAN26-DN25
orders[].orderTypestring·enum·required
Order type. `stop-limit` orders require a `stopPrice` that triggers a limit order at `price` when the market reaches the trigger.Enum values: limitstop-limit
orders[].sidestring·enum·required
Enum values: buysell
orders[].quantitystring (decimal)·required
Number of contractsExample: 100
orders[].pricestring (decimal)·required
Limit price (0-1 range)Example: 0.65
orders[].stopPricestring (decimal)
The price to trigger a stop-limit order (0-1 range). Only available for stop-limit orders. See [Stop-Limit Orders](#operation/placeOrder) above for `stopPrice`/`price` constraints.Example: 0.60
orders[].outcomestring·enum·required
The outcome being traded (Yes or No)Enum values: yesno
orders[].timeInForcestring·enum
Order execution behavior: - `good-til-cancel` - Order remains active until filled or cancelled (default) - `immediate-or-cancel` - Fill immediately or cancel remaining - `fill-or-kill` - Fill entire order immediately or cancelEnum values: good-til-cancelimmediate-or-cancelfill-or-kill
orders[].makerOrCancelboolean
Set to `true` to require maker-only behavior. If the order would immediately take liquidity, the order is cancelled instead of filling.
Example request body
{
  "orders": [
    {
      "symbol": "GEMI-FEDJAN26-DN25",
      "orderType": "limit",
      "side": "buy",
      "quantity": "100",
      "price": "0.65",
      "outcome": "yes",
      "timeInForce": "good-til-cancel"
    },
    {
      "symbol": "GEMI-FEDJAN26-DN25",
      "orderType": "limit",
      "side": "sell",
      "quantity": "50",
      "price": "0.35",
      "outcome": "no",
      "timeInForce": "good-til-cancel"
    }
  ]
}

Responses

Batch processed. Results are returned in request order and may contain both successful orders and per-entry errors.

resultsarray·required
One result for each submitted order, in request order.
Example Responses
{
  "results": [
    {
      "order": {
        "orderId": 12345678901,
        "status": "open",
        "symbol": "GEMI-FEDJAN26-DN25",
        "side": "buy",
        "outcome": "yes",
        "orderType": "limit",
        "timeInForce": "good-til-cancel",
        "quantity": "100",
        "filledQuantity": "0",
        "remainingQuantity": "100",
        "price": "0.65",
        "createdAt": "2025-12-15T10:30:00.000Z",
        "updatedAt": "2025-12-15T10:30:00.000Z"
      }
    },
    {
      "error": "InsufficientFunds",
      "message": "Insufficient funds"
    }
  ]
}
PreviousPlace OrderNextCancel Order