Skip to main content
Round-trip win for market makers and rebalancers — replaces N parallel create_order calls. Each venue has its own batch size cap; OpenPX rejects oversized batches up-front rather than splitting silently.
Polymarket caps batches at 15 orders. Kalshi’s effective cap depends on your token-budget tier (each order in a batch costs 10 tokens).

Parameters

orders
NewOrder[]
required

Returns

orders
Order[]
Successfully placed orders, in the order they were submitted. Failed orders are logged at WARN and omitted from the result.
use openpx::{NewOrder, OrderSide, OrderType};

let orders = vec![
    NewOrder {
        market_id: "KXBTC-25MAR14-T20000".into(),
        outcome: "Yes".into(),
        side: OrderSide::Buy,
        order_type: OrderType::Gtc,
        price: 0.42,
        size: 100.0,
        post_only: None,
        reduce_only: None,
        client_order_id: Some("client-1".into()),
        expiration_ts: None,
    },
    NewOrder {
        market_id: "KXBTC-25MAR14-T25000".into(),
        outcome: "Yes".into(),
        side: OrderSide::Buy,
        order_type: OrderType::Gtc,
        price: 0.21,
        size: 200.0,
        post_only: None,
        reduce_only: None,
        client_order_id: Some("client-2".into()),
        expiration_ts: None,
    },
];
let placed = ex.create_orders_batch(orders).await?;
[
  {
    "id": "ord-001",
    "market_id": "KXBTC-25MAR14-T20000",
    "outcome": "Yes",
    "side": "buy",
    "price": 0.42,
    "size": 100.0,
    "filled": 0.0,
    "status": "Open",
    "created_at": "2026-04-28T10:00:00Z"
  },
  {
    "id": "ord-002",
    "market_id": "KXBTC-25MAR14-T25000",
    "outcome": "Yes",
    "side": "buy",
    "price": 0.21,
    "size": 200.0,
    "filled": 0.0,
    "status": "Open",
    "created_at": "2026-04-28T10:00:00Z"
  }
]