Skip to content

SDK drift: Python MarketFetchParams/EventFetchParams use snake_case keys; sidecar expects camelCase #468

@realfishsam

Description

@realfishsam

Drift

Python MarketFetchParams and EventFetchParams TypedDicts define snake_case key names (search_in, market_id, outcome_id, event_id). TypeScript's equivalent interfaces use camelCase keys (searchIn, marketId, outcomeId, eventId) that match what the sidecar actually expects. If a Python caller passes a MarketFetchParams dict directly, the keys will be wrong and the sidecar will silently ignore them.

TypeScript SDK

sdks/typescript/pmxt/models.ts, lines 365–448 — camelCase keys matching sidecar protocol:

// sdks/typescript/pmxt/models.ts lines 365–448
export interface MarketFilterParams {
    searchIn?: SearchIn;
    marketId?: string;
    outcomeId?: string;
    eventId?: string;
    // ... other camelCase fields
}

export interface EventFilterCriteria {
    searchIn?: SearchIn;
    eventId?: string;
    // ...
}

Python SDK

sdks/python/pmxt/models.py, lines 555–584 — snake_case keys:

# sdks/python/pmxt/models.py lines 555–584
class MarketFetchParams(TypedDict, total=False):
    search_in: Optional[SearchIn]      # should be searchIn
    market_id: Optional[str]           # should be marketId
    outcome_id: Optional[str]          # should be outcomeId
    event_id: Optional[str]            # should be eventId

class EventFetchParams(TypedDict, total=False):
    event_id: Optional[str]            # should be eventId
    search_in: Optional[SearchIn]      # should be searchIn

The sidecar receives these dicts serialised directly as JSON, so snake_case keys are sent over the wire and not recognised.

Expected

Either:

  1. Python TypedDicts should use camelCase keys to match the wire protocol (consistent with TypeScript), or
  2. The Python client should perform snake_case→camelCase key translation before sending the params dict to the sidecar (and this translation should be documented).

The current situation gives users a false sense of type-safety: the TypedDict type-checks correctly in Python but produces incorrect sidecar requests at runtime.

Impact

Any Python caller using MarketFetchParams or EventFetchParams with search_in, market_id, outcome_id, or event_id fields will get unexpected results (full unfiltered result sets) with no error, because the sidecar ignores the unrecognised snake_case keys. This is a silent correctness bug.

Found by automated SDK cross-language drift audit

Metadata

Metadata

Assignees

No one assigned

    Labels

    sdk-driftCross-language SDK consistency findings (TypeScript vs Python)

    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