Skip to content

Python SDK CreateOrderParams TypedDict missing tick_size, neg_risk, on_behalf_of #1146

@realfishsam

Description

@realfishsam

Gap

The core CreateOrderParams type defines three optional fields — tickSize, negRisk, and onBehalfOf — that the TypeScript SDK exposes but the Python SDK's CreateOrderParams TypedDict omits entirely. Python users cannot pass these parameters when calling create_order, build_order, or submit_order, so exchanges that require or accept them will silently ignore or reject the order.

Core

File: core/src/types.ts

interface CreateOrderParams {
  marketId: string;
  outcomeId: string;
  side: 'buy' | 'sell';
  type: 'market' | 'limit';
  amount: number;
  price?: number;
  fee?: number;
  tickSize?: number;   // ← override for Limitless / Polymarket tick granularity
  negRisk?: boolean;   // ← skip neg-risk lookup (Polymarket)
  onBehalfOf?: number; // ← Limitless delegated-signing profile ID
}

tickSize is required for Limitless orders to select the correct tick granularity. negRisk is required for Polymarket orders on neg-risk markets (omitting it causes an incorrect order build). onBehalfOf is required for Limitless delegated-signing (smart-wallet custody).

TypeScript SDK

File: sdks/typescript/pmxt/models.ts, lines 533–563

All three fields are present:

  • tickSize?: number — "Optional override for Limitless/Polymarket"
  • negRisk?: boolean — "Optional override to skip neg-risk lookup (Polymarket)"
  • onBehalfOf?: number — "Limitless delegated signing: profile ID to trade on behalf of"

Python SDK

File: sdks/python/pmxt/models.py

CreateOrderParams TypedDict (around lines 518–527) defines only:

class CreateOrderParams(TypedDict, total=False):
    market_id: str
    outcome_id: str
    side: OrderSide
    type: OrderType
    amount: float
    price: float
    fee: float

tick_size, neg_risk, and on_behalf_of are entirely absent. The underlying Exchange.create_order method in client.py accepts **params and serialises them to the sidecar, so the fields would work if they were in the TypedDict — the TypedDict definition is simply incomplete.

Evidence

grep -n "tick_size\|neg_risk\|on_behalf_of" sdks/python/pmxt/models.py returns zero results. The TypeScript counterpart at sdks/typescript/pmxt/models.ts lines 549–561 explicitly declares all three. core/src/types.ts is the canonical definition.

Impact

Python users placing orders on Limitless with non-default tick sizes will receive incorrect order builds. Python users placing orders on Polymarket neg-risk markets must rely on the sidecar's automatic lookup (an extra network round-trip, and broken if the lookup fails). Python users using Limitless delegated-signing custody cannot specify the profile ID at all — delegated orders are blocked entirely.


Found by automated Core-to-SDK surface coverage audit

Metadata

Metadata

Assignees

No one assigned

    Labels

    core-sdk-gapCore engine capabilities not exposed in SDKs

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions