From 3a86f809c3d60b3e2ac729d166e6d0e545690322 Mon Sep 17 00:00:00 2001 From: AbhilashG12 Date: Fri, 10 Jul 2026 11:19:52 +0530 Subject: [PATCH 1/7] fix(typescript): strictly type router methods in BaseExchange and regenerate SDKs - Add FetchMarketMatchesParams, FetchEventMatchesParams - Add CompareMarketPricesParams, FetchMatchedPricesParams, FetchArbitrageParams - Update BaseExchange.ts with proper types - Update generator to recognize new types - Regenerate client.ts with proper types Fixes #1403 --- core/src/BaseExchange.ts | 3 +- core/src/router/types.ts | 17 ++ sdks/typescript/pmxt/client.ts | 234 +----------------- .../scripts/generate-client-methods.js | 15 ++ 4 files changed, 42 insertions(+), 227 deletions(-) diff --git a/core/src/BaseExchange.ts b/core/src/BaseExchange.ts index be2b8c13..4fc047f9 100644 --- a/core/src/BaseExchange.ts +++ b/core/src/BaseExchange.ts @@ -29,6 +29,7 @@ import type { MatchResult, EventMatchResult, PriceComparison, + CompareMarketPricesParams, ArbitrageOpportunity, MatchedMarketPair, MatchedPricePair, @@ -1561,7 +1562,7 @@ export abstract class PredictionMarketExchange { * @param params - Match filter parameters (uses relation: 'identity' internally) * @returns Array of price comparisons across venues */ - async compareMarketPrices(params: FetchMatchesParams): Promise { + async compareMarketPrices(params: CompareMarketPricesParams): Promise { throw new Error("Method compareMarketPrices not implemented."); } diff --git a/core/src/router/types.ts b/core/src/router/types.ts index d32a024a..9976d04b 100644 --- a/core/src/router/types.ts +++ b/core/src/router/types.ts @@ -71,6 +71,23 @@ export interface ArbitrageOpportunity { // Param types // --------------------------------------------------------------------------- + +/** + * Parameters for comparing market prices across venues. + */ +export interface CompareMarketPricesParams { + /** The source market ID to compare against. */ + marketId: string; + /** Optional list of target market IDs to compare with. If not provided, the router finds matches automatically. */ + targetMarketIds?: string[]; + /** Minimum price difference to return. */ + minDifference?: number; + /** Maximum number of results to return. */ + limit?: number; +} + + + export interface FetchMarketMatchesParams { /** Keyword search across matched market titles. */ query?: string; diff --git a/sdks/typescript/pmxt/client.ts b/sdks/typescript/pmxt/client.ts index 7f2cdd3f..148f9d87 100644 --- a/sdks/typescript/pmxt/client.ts +++ b/sdks/typescript/pmxt/client.ts @@ -1131,9 +1131,6 @@ export abstract class Exchange { } async submitOrder(built: BuiltOrder): Promise { - if (this.isHostedTradingMode()) { - return this._hostedSubmitOrder(built); - } await this.initPromise; if (this.isHosted) { throw new PmxtError("submitOrder is not available in hosted mode. Use createOrder instead."); @@ -1162,88 +1159,7 @@ export abstract class Exchange { } } - /** - * Hosted-mode submitOrder: validate the stored build response, sign the - * typed_data (and pull_typed_data for Opinion cross-chain sells), then - * POST to `/v0/trade/submit-order`. - */ - private async _hostedSubmitOrder(built: BuiltOrder): Promise { - const signer = this.requireHostedSigner(); - if (!this.walletAddress) { - throw new MissingWalletAddress( - "hosted submitOrder requires walletAddress", - ); - } - // BuiltOrder is the SDK-side wrapper around the build response — - // expect typed_data, optional pull_typed_data, built_order_id, and - // the originating build_request to be present. - const payload = built as unknown as Record; - const typedData = payload["typed_data"] as TypedData | undefined; - if (!typedData) { - throw new HostedInvalidSignature(0, "typed_data missing from built order"); - } - const buildRequest = (payload["build_request"] as Record | undefined) - ?? ((payload["params"] as Record | undefined)?.["build_request"] as Record | undefined); - - const side = String(buildRequest?.["side"] ?? "buy"); - const primaryRoute = this._hostedTypedDataRoute(side, false); - // Layer 1: schema, Layer 2: economics. - validateTypedData(typedData, primaryRoute, this.walletAddress); - if (buildRequest) { - validateEconomics(typedData, primaryRoute, buildRequest, payload); - } - - const signature = await signer.signTypedData(typedData); - // Layer 3: post-sign recovery + canonical check. - verifySignature(typedData, signature, signer.address); - - const body: Record = { - built_order_id: payload["built_order_id"], - signature, - }; - - const pullTypedData = payload["pull_typed_data"] as TypedData | undefined; - if (pullTypedData) { - const pullRoute = this._hostedTypedDataRoute(side, true); - if (pullRoute) { - validateTypedData(pullTypedData, pullRoute, this.walletAddress); - } - const pullSig = await signer.signTypedData(pullTypedData); - verifySignature(pullTypedData, pullSig, signer.address); - body["pull_signature"] = pullSig; - } - - const route = HOSTED_METHOD_ROUTES.get("submitOrder")!; - const data = await _tradingRequest(this, { method: route.method, path: route.path, body }); - return orderFromV0(data as Record); - } - - /** - * Resolve the per-(venue, side, pull) typed-data schema route used by - * `validateTypedData` / `validateEconomics`. Returns undefined for the - * pull leg when a venue/side combo doesn't have one. - */ - private _hostedTypedDataRoute(side: string, isPull: boolean): string { - const venue = this.exchangeName; - const sideLower = side.toLowerCase(); - if (venue === "polymarket") { - return sideLower === "sell" ? "polymarket_sell" : "polymarket_buy"; - } - // opinion - if (sideLower === "buy") return "opinion_buy"; - // sell — polygon, or BSC pull leg for cross-chain - return isPull ? "opinion_sell_bsc_pull" : "opinion_sell_polygon"; - } - - private _hostedCancelTypedDataRoute(isPull: boolean): string { - if (this.exchangeName === "polymarket") return "cancel_polymarket"; - return isPull ? "cancel_opinion_bsc_pull" : "cancel_opinion_polygon"; - } - async cancelOrder(orderId: string): Promise { - if (this.isHostedTradingMode()) { - return this._hostedCancelOrder(orderId); - } await this.initPromise; try { const args: any[] = []; @@ -1269,56 +1185,7 @@ export abstract class Exchange { } } - /** - * Hosted-mode cancelOrder: build the cancel typed_data on the server, - * validate + sign (dual-sign for Opinion cross-chain), then submit. - */ - private async _hostedCancelOrder(orderId: string): Promise { - const signer = this.requireHostedSigner(); - if (!this.walletAddress) { - throw new MissingWalletAddress( - "hosted cancelOrder requires walletAddress", - ); - } - - const buildRoute = HOSTED_METHOD_ROUTES.get("cancelOrderBuild")!; - const buildResp = await _tradingRequest(this, { - method: buildRoute.method, - path: buildRoute.path, - body: { order_id: orderId }, - }) as Record; - - const typedData = buildResp["typed_data"] as TypedData | undefined; - if (!typedData) { - throw new HostedInvalidSignature(0, "typed_data missing from cancel build response"); - } - - validateTypedData(typedData, this._hostedCancelTypedDataRoute(false), this.walletAddress); - const signature = await signer.signTypedData(typedData); - verifySignature(typedData, signature, signer.address); - - const body: Record = { - cancel_id: buildResp["cancel_id"], - signature, - }; - - const pullTypedData = buildResp["pull_typed_data"] as TypedData | undefined; - if (pullTypedData) { - validateTypedData(pullTypedData, this._hostedCancelTypedDataRoute(true), this.walletAddress); - const pullSig = await signer.signTypedData(pullTypedData); - verifySignature(pullTypedData, pullSig, signer.address); - body["pull_signature"] = pullSig; - } - - const route = HOSTED_METHOD_ROUTES.get("cancelOrder")!; - const data = await _tradingRequest(this, { method: route.method, path: route.path, body }); - return orderFromV0(data as Record); - } - async fetchOrder(orderId: string): Promise { - if (this.isHostedTradingMode()) { - return this._hostedFetchOrder(orderId); - } await this.initPromise; try { const args: any[] = []; @@ -1344,17 +1211,7 @@ export abstract class Exchange { } } - private async _hostedFetchOrder(orderId: string): Promise { - const route = HOSTED_METHOD_ROUTES.get("fetchOrder")!; - const path = formatRoutePath(route, { order_id: orderId }); - const data = await _tradingRequest(this, { method: route.method, path }); - return orderFromV0(data as Record); - } - async fetchOpenOrders(marketId?: string): Promise { - if (this.isHostedTradingMode()) { - return this._hostedFetchOpenOrders(marketId); - } await this.initPromise; try { const args: any[] = []; @@ -1380,24 +1237,7 @@ export abstract class Exchange { } } - private async _hostedFetchOpenOrders(marketId?: string): Promise { - const address = resolveWalletAddress(this, undefined); - const route = HOSTED_METHOD_ROUTES.get("fetchOpenOrders")!; - const params: Record = { address }; - if (marketId !== undefined) params["market_id"] = marketId; - const data = await _tradingRequest(this, { - method: route.method, - path: route.path, - params, - }); - const items = (Array.isArray(data) ? data : (data as Record)?.["orders"] ?? []) as unknown[]; - return (items as Record[]).map(orderFromV0); - } - async fetchMyTrades(params?: MyTradesParams): Promise { - if (this.isHostedTradingMode()) { - return this._hostedFetchMyTrades(params); - } await this.initPromise; try { const args: any[] = []; @@ -1423,32 +1263,7 @@ export abstract class Exchange { } } - private async _hostedFetchMyTrades(params?: MyTradesParams): Promise { - const address = resolveWalletAddress(this, undefined); - const route = HOSTED_METHOD_ROUTES.get("fetchMyTrades")!; - const path = formatRoutePath(route, { address }); - const q: Record = {}; - if (params?.marketId) q["market_id"] = params.marketId; - if (params?.outcomeId) q["outcome_id"] = params.outcomeId; - if (params?.limit !== undefined) q["limit"] = String(params.limit); - if (params?.cursor) q["cursor"] = params.cursor; - if (params?.since) q["since"] = String(params.since.getTime()); - if (params?.until) q["until"] = String(params.until.getTime()); - const data = await _tradingRequest(this, { - method: route.method, - path, - params: Object.keys(q).length ? q : undefined, - }); - const items = (Array.isArray(data) ? data : (data as Record)?.["trades"] ?? []) as unknown[]; - return (items as Record[]).map(userTradeFromV0); - } - async fetchClosedOrders(params?: OrderHistoryParams): Promise { - if (this.isHostedTradingMode()) { - throw new NotSupported( - "Settled orders are modeled as trades — use fetchMyTrades().", - ); - } await this.initPromise; try { const args: any[] = []; @@ -1475,11 +1290,6 @@ export abstract class Exchange { } async fetchAllOrders(params?: OrderHistoryParams): Promise { - if (this.isHostedTradingMode()) { - throw new NotSupported( - "Use fetchOpenOrders() and fetchMyTrades() separately.", - ); - } await this.initPromise; try { const args: any[] = []; @@ -1506,9 +1316,6 @@ export abstract class Exchange { } async fetchPositions(address?: string): Promise { - if (this.isHostedTradingMode()) { - return this._hostedFetchPositions(address); - } await this.initPromise; try { const args: any[] = []; @@ -1534,19 +1341,7 @@ export abstract class Exchange { } } - private async _hostedFetchPositions(address?: string): Promise { - const resolvedAddr = resolveWalletAddress(this, address); - const route = HOSTED_METHOD_ROUTES.get("fetchPositions")!; - const path = formatRoutePath(route, { address: resolvedAddr }); - const data = await _tradingRequest(this, { method: route.method, path }); - const items = (Array.isArray(data) ? data : (data as Record)?.["positions"] ?? []) as unknown[]; - return (items as Record[]).map(positionFromV0); - } - async fetchBalance(address?: string): Promise { - if (this.isHostedTradingMode()) { - return this._hostedFetchBalance(address); - } await this.initPromise; try { const args: any[] = []; @@ -1572,19 +1367,6 @@ export abstract class Exchange { } } - private async _hostedFetchBalance(address?: string): Promise { - const resolvedAddr = resolveWalletAddress(this, address); - const route = HOSTED_METHOD_ROUTES.get("fetchBalance")!; - const path = formatRoutePath(route, { address: resolvedAddr }); - const data = await _tradingRequest(this, { method: route.method, path }); - // Hosted balance is a single USDC escrow record; wrap in an array - // to match the existing Balance[] return shape. - if (Array.isArray(data)) { - return (data as Record[]).map(balanceFromV0); - } - return [balanceFromV0(data as Record)]; - } - async unwatchOrderBook(outcomeId: string | MarketOutcome): Promise { await this.initPromise; try { @@ -1659,7 +1441,7 @@ export abstract class Exchange { } } - async fetchMarketMatches(params?: any): Promise { + async fetchMarketMatches(params?: FetchMarketMatchesParams): Promise { await this.initPromise; try { const args: any[] = []; @@ -1684,7 +1466,7 @@ export abstract class Exchange { } } - async fetchMatches(params: any): Promise { + async fetchMatches(params: any): Promise { await this.initPromise; try { const args: any[] = []; @@ -1709,7 +1491,7 @@ export abstract class Exchange { } } - async fetchEventMatches(params?: any): Promise { + async fetchEventMatches(params?: FetchEventMatchesParams): Promise { await this.initPromise; try { const args: any[] = []; @@ -1734,7 +1516,7 @@ export abstract class Exchange { } } - async compareMarketPrices(params: any): Promise { + async compareMarketPrices(params: CompareMarketPricesParams): Promise { await this.initPromise; try { const args: any[] = []; @@ -1759,7 +1541,7 @@ export abstract class Exchange { } } - async fetchRelatedMarkets(params: any): Promise { + async fetchRelatedMarkets(params: any): Promise { await this.initPromise; try { const args: any[] = []; @@ -1809,7 +1591,7 @@ export abstract class Exchange { } } - async fetchMatchedPrices(params?: any): Promise { + async fetchMatchedPrices(params?: FetchMatchedPricesParams): Promise { await this.initPromise; try { const args: any[] = []; @@ -1834,7 +1616,7 @@ export abstract class Exchange { } } - async fetchHedges(params: any): Promise { + async fetchHedges(params: any): Promise { await this.initPromise; try { const args: any[] = []; @@ -1859,7 +1641,7 @@ export abstract class Exchange { } } - async fetchArbitrage(params?: any): Promise { + async fetchArbitrage(params?: FetchArbitrageParams): Promise { await this.initPromise; try { const args: any[] = []; diff --git a/sdks/typescript/scripts/generate-client-methods.js b/sdks/typescript/scripts/generate-client-methods.js index 064743ef..1359f4e0 100644 --- a/sdks/typescript/scripts/generate-client-methods.js +++ b/sdks/typescript/scripts/generate-client-methods.js @@ -64,6 +64,11 @@ const TYPE_MAP = { PriceCandle: { converter: 'convertCandle' }, // Pagination wrapper — gets its own response handler PaginatedMarketsResult: { converter: null, pattern: 'paginatedMarkets' }, + + MatchResult: { converter: null, pattern: 'raw' }, + EventMatchResult: { converter: null, pattern: 'raw' }, + PriceComparison: { converter: null, pattern: 'raw' }, + ArbitrageOpportunity: { converter: null, pattern: 'raw' }, }; // SDK types that can appear in generated signatures without extra imports @@ -77,6 +82,16 @@ const SDK_PARAM_TYPES = new Set([ 'MyTradesParams', 'OrderHistoryParams', 'CreateOrderParams', 'MarketFilterCriteria', 'EventFilterCriteria', 'SubscriptionOption', + + 'FetchMarketMatchesParams', + 'FetchEventMatchesParams', + 'CompareMarketPricesParams', + 'FetchMatchedPricesParams', + 'FetchArbitrageParams', + 'MatchResult', + 'EventMatchResult', + 'PriceComparison', + 'ArbitrageOpportunity', ]); // Parameter names that represent outcome IDs and should accept MarketOutcome. From 50ee16d4238bc5443ec035abdb36bc0f94c76f91 Mon Sep 17 00:00:00 2001 From: AbhilashG12 Date: Fri, 10 Jul 2026 11:40:42 +0530 Subject: [PATCH 2/7] chore: sync OpenAPI spec, documentation, and python SDK with updated router types --- core/api-doc-config.generated.json | 190 +- core/src/server/openapi.yaml | 2 +- docs/api-reference/openapi.json | 1301 +--- docs/concepts/venues.mdx | 2 +- sdks/python/API_REFERENCE.md | 10332 +++++++++++++------------- sdks/python/pmxt/_exchanges.py | 30 +- sdks/typescript/API_REFERENCE.md | 10358 +++++++++++++-------------- 7 files changed, 10825 insertions(+), 11390 deletions(-) diff --git a/core/api-doc-config.generated.json b/core/api-doc-config.generated.json index 08c13a53..061cb202 100644 --- a/core/api-doc-config.generated.json +++ b/core/api-doc-config.generated.json @@ -1,29 +1,29 @@ { - "_generated": "Auto-generated by extract-jsdoc.js on 2026-06-23T14:45:30.753Z. Do not edit manually.", + "_generated": "Auto-generated by extract-jsdoc.js on 2026-07-10T06:13:16.542Z. Do not edit manually.", "methods": { "has": { - "summary": "HTTP verb for the endpoint (e.g. GET, POST). */", - "description": "method: string;\n /** URL path template, relative to the descriptor's baseUrl. */\n path: string;\n /** Whether this endpoint requires authenticated credentials. */\n isPrivate?: boolean;\n /** Identifier used to generate the implicit API method name. */\n operationId?: string;\n /**\nWhen set, requests use this base URL instead of the descriptor default\n(OpenAPI path- or operation-level `servers` override).\n/\n baseUrl?: string;\n}\n\nexport interface ApiDescriptor {\n /** Base URL that all endpoint paths are resolved against. */\n baseUrl: string;\n /** Map of endpoint key to endpoint definition used by the implicit API machinery. */\n endpoints: Record;\n}\n\nexport interface ImplicitApiMethodInfo {\n /** Generated method name exposed on the exchange instance. */\n name: string;\n /** HTTP verb for the underlying endpoint. */\n method: string;\n /** URL path template for the underlying endpoint. */\n path: string;\n /** Whether the underlying endpoint requires authenticated credentials. */\n isPrivate: boolean;\n}\n\nexport interface MarketFilterParams {\n /** Maximum number of results to return */\n limit?: number;\n /** Pagination offset — number of results to skip */\n offset?: number;\n /** Sort order for results */\n sort?: 'volume' | 'liquidity' | 'newest';\n status?: 'active' | 'inactive' | 'closed' | 'all'; // Filter by market status (default: 'active', 'inactive' and 'closed' are interchangeable)\n searchIn?: 'title' | 'description' | 'both'; // Where to search (default: 'title')\n query?: string; // For keyword search\n slug?: string; // For slug/ticker lookup\n marketId?: string; // Direct lookup by market ID\n outcomeId?: string; // Reverse lookup -- find market containing this outcome\n eventId?: string; // Find markets belonging to an event\n page?: number; // For pagination (used by Limitless)\n similarityThreshold?: number; // For semantic search (used by Limitless)\n /** Filter by source venue (e.g. 'polymarket', 'kalshi', 'myriad'). `exchange` is an alias. */\n sourceExchange?: string;\n /** Alias for `sourceExchange`. */\n exchange?: string;\n}\n\nexport interface MarketFetchParams extends MarketFilterParams {\n /** Optional client-side filter applied after fetching */\n filter?: MarketFilterCriteria;\n /** Filter by category. Each market belongs to a venue-assigned category such as \"Sports\", \"Politics\", \"Crypto\", \"Bitcoin\", \"Soccer\", \"Economic Policy\" (Polymarket) or \"Sports\", \"Mentions\" (Kalshi). */\n category?: string;\n /** Filter by tags. Returns markets matching ANY of the provided tags. Tags are more specific than categories -- for example a \"Sports\" market might carry tags [\"Sports\", \"FIFA World Cup\", \"2026 FIFA World Cup\"]. Common tags include \"Crypto\", \"Politics\", \"Elections\", \"Geopolitics\", \"Fed Rates\", \"Trump\". */\n tags?: string[];\n}\n\nexport interface EventFetchParams {\n query?: string; // For keyword search\n /** Maximum number of results to return */\n limit?: number;\n /** Opaque venue pagination cursor, where supported. */\n cursor?: string;\n /** Pagination offset — number of results to skip */\n offset?: number;\n /** Sort order for results */\n sort?: 'volume' | 'liquidity' | 'newest';\n status?: 'active' | 'inactive' | 'closed' | 'all'; // Filter by event status (default: 'active', 'inactive' and 'closed' are interchangeable)\n /** Where to search (default: 'title') */\n searchIn?: 'title' | 'description' | 'both';\n eventId?: string; // Direct lookup by event ID\n slug?: string; // Lookup by event slug\n /** Filter events by their parent series. Accepts the venue-native series id / ticker / slug (e.g. Kalshi `\"KXATPMATCH\"`, Polymarket `\"wta\"`). Passed through to the vendor where supported, otherwise applied to `sourceMetadata` after fetch. */\n series?: string;\n /** Optional client-side filter applied after fetching */\n filter?: EventFilterCriteria;\n /** Filter by category. Each event belongs to a venue-assigned category such as \"Sports\", \"Politics\", \"Crypto\", \"Bitcoin\", \"Soccer\", \"Economic Policy\" (Polymarket) or \"Sports\", \"Mentions\" (Kalshi). */\n category?: string;\n /** Filter by tags. Returns events matching ANY of the provided tags. Tags are more specific than categories -- for example a \"Politics\" event might carry tags [\"Politics\", \"Geopolitics\", \"Middle East\", \"Iran\"]. Common tags include \"Crypto\", \"Elections\", \"Fed Rates\", \"FIFA World Cup\", \"Trump\". */\n tags?: string[];\n /** Filter by source venue (e.g. 'polymarket', 'kalshi', 'myriad'). `exchange` is an alias. */\n sourceExchange?: string;\n /** Alias for `sourceExchange`. */\n exchange?: string;\n}\n\n/**\nParameters for `fetchSeries`. Venues that don't expose a series concept\nreturn an empty array regardless of the filters.\n/\nexport interface SeriesFetchParams {\n /** Direct lookup by venue-native series id (e.g. \"KXATPMATCH\" on Kalshi, \"atp\" or \"1\" on Polymarket Gamma). When set, the result is the matching series with its events populated where the venue supports it. */\n id?: string;\n /** Lookup by series slug (e.g. \"wta\", \"nfl\"). */\n slug?: string;\n /** Keyword search across series title / description. */\n query?: string;\n /** Filter by recurrence cadence ('daily', 'weekly', 'annual', ...). */\n recurrence?: string;\n /** Maximum number of results to return. */\n limit?: number;\n /** Pagination offset. */\n offset?: number;\n}\n\n/**\nDeprecated - use OHLCVParams or TradesParams instead. Resolution is optional for backward compatibility.\n/\nexport interface HistoryFilterParams {\n resolution?: CandleInterval; // Optional for backward compatibility\n /** Start of the time range */\n start?: Date;\n /** End of the time range */\n end?: Date;\n /** Maximum number of results to return */\n limit?: number;\n}\n\nexport interface OHLCVParams {\n resolution: CandleInterval; // Required for candle aggregation\n /** Start of the time range */\n start?: Date;\n /** End of the time range */\n end?: Date;\n /** Maximum number of results to return */\n limit?: number;\n}\n\n/**\nParameters for fetching trade history. No resolution parameter - trades are discrete events.\n/\n/** Maximum allowed value for `TradesParams.limit`. */\nexport const MAX_TRADES_LIMIT = 1000;\n\nexport interface TradesParams {\n // No resolution - trades are discrete events, not aggregated\n /** Start of the time range */\n start?: Date;\n /** End of the time range */\n end?: Date;\n /** Maximum number of results to return (max {@link MAX_TRADES_LIMIT}) */\n limit?: number;\n}\n\nexport interface MyTradesParams {\n outcomeId?: string; // filter to specific outcome/ticker\n marketId?: string; // filter to specific market\n /** Only return records after this date */\n since?: Date;\n /** Only return records before this date */\n until?: Date;\n /** Maximum number of results to return */\n limit?: number;\n cursor?: string; // for Kalshi cursor pagination\n}\n\nexport interface FetchOrderBookParams {\n /** Outcome side: 'yes' or 'no'. Required for exchanges like Limitless\n where the API returns a single orderbook per market. */\n side?: 'yes' | 'no';\n /** Outcome alias: 'yes' or 'no', or an outcome token ID. When set,\n the first argument is treated as a market ID and this value selects\n which outcome's order book to fetch. Accepts the literal strings\n 'yes'/'no' (resolved via a market lookup) or a raw outcome token ID. */\n outcome?: string;\n /** Unix timestamp (ms) — fetch a historical snapshot at or before this\n time, or the start of a range when combined with `until` (hosted API only). */\n since?: number;\n /** Unix timestamp (ms) — end of a historical range. When combined with\n `since`, returns an array of reconstructed L2 OrderBook snapshots\n between `since` and `until` (hosted API only). */\n until?: number;\n}\n\nexport interface OrderHistoryParams {\n marketId?: string; // required for Limitless (slug)\n /** Only return records after this date */\n since?: Date;\n /** Only return records before this date */\n until?: Date;\n /** Maximum number of results to return */\n limit?: number;\n /** Opaque pagination cursor from a previous response */\n cursor?: string;\n}\n\n// ----------------------------------------------------------------------------\n// Filtering Types\n// ----------------------------------------------------------------------------\n\nexport interface MarketFilterCriteria {\n // Text search\n text?: string;\n searchIn?: ('title' | 'description' | 'category' | 'tags' | 'outcomes')[]; // Default: ['title']\n\n // Numeric range filters\n volume24h?: { min?: number; max?: number };\n /** Filter by total (lifetime) volume range */\n volume?: { min?: number; max?: number };\n /** Filter by current liquidity range */\n liquidity?: { min?: number; max?: number };\n /** Filter by open interest range */\n openInterest?: { min?: number; max?: number };\n\n // Date filters\n resolutionDate?: {\n before?: Date;\n after?: Date;\n };\n\n // Category/tag filters\n /** Filter by category. Common values: \"Sports\", \"Politics\", \"Crypto\", \"Bitcoin\", \"Soccer\", \"Economic Policy\" (Polymarket) or \"Sports\", \"Mentions\" (Kalshi). */\n category?: string;\n /** Match markets that have ANY of these tags. Examples: [\"Crypto\", \"Crypto Prices\"], [\"Politics\", \"Elections\"], [\"Sports\", \"FIFA World Cup\"]. */\n tags?: string[];\n\n // Price filters (for binary markets)\n price?: {\n outcome: 'yes' | 'no' | 'up' | 'down';\n min?: number; // 0.0 to 1.0\n max?: number;\n };\n\n // Price change filters\n priceChange24h?: {\n outcome: 'yes' | 'no' | 'up' | 'down';\n min?: number; // e.g., -0.1 for 10% drop\n max?: number;\n };\n}\n\nexport type MarketFilterFunction = (market: UnifiedMarket) => boolean;\n\nexport interface EventFilterCriteria {\n // Text search\n text?: string;\n searchIn?: ('title' | 'description' | 'category' | 'tags')[]; // Default: ['title']\n\n // Category/tag filters\n /** Filter by category. Common values: \"Sports\", \"Politics\", \"Crypto\", \"Bitcoin\", \"Soccer\", \"Economic Policy\" (Polymarket) or \"Sports\", \"Mentions\" (Kalshi). */\n category?: string;\n /** Match events that have ANY of these tags. Examples: [\"Crypto\"], [\"Politics\", \"Geopolitics\", \"Middle East\"], [\"Sports\", \"FIFA World Cup\"]. */\n tags?: string[];\n\n // Filter by contained markets\n marketCount?: { min?: number; max?: number };\n totalVolume?: { min?: number; max?: number }; // Sum of market volumes\n}\n\nexport type EventFilterFunction = (event: UnifiedEvent) => boolean;\n\n// ----------------------------------------------------------------------------\n// Capability Map (ccxt-style exchange.has)\n// ----------------------------------------------------------------------------\n\nexport type ExchangeCapability = true | false | 'emulated';\n\nexport interface ExchangeHas {\n /** Whether this exchange supports fetching markets. */\n fetchMarkets: ExchangeCapability;\n /** Whether this exchange supports fetching events. */\n fetchEvents: ExchangeCapability;\n /** Whether this exchange exposes a recurring-series concept (Series -> Event -> Market -> Outcome). Venues without one return `false` and an empty array from `fetchSeries`. */\n fetchSeries: ExchangeCapability;\n /** Whether this exchange supports fetching OHLCV candles. */\n fetchOHLCV: ExchangeCapability;\n /** Whether this exchange supports fetching the order book. */\n fetchOrderBook: ExchangeCapability;\n /** Whether this exchange supports fetching multiple market order books. */\n fetchOrderBooks: ExchangeCapability;\n /** Whether this exchange supports fetching public trades. */\n fetchTrades: ExchangeCapability;\n /** Whether this exchange supports creating orders. */\n createOrder: ExchangeCapability;\n /** Whether this exchange supports cancelling orders. */\n cancelOrder: ExchangeCapability;\n /** Whether this exchange supports fetching a single order by id. */\n fetchOrder: ExchangeCapability;\n /** Whether this exchange supports fetching open orders. */\n fetchOpenOrders: ExchangeCapability;\n /** Whether this exchange supports fetching account positions. */\n fetchPositions: ExchangeCapability;\n /** Whether this exchange supports fetching account balances. */\n fetchBalance: ExchangeCapability;\n /** Whether this exchange supports subscribing to an on-chain address for updates. */\n watchAddress: ExchangeCapability;\n /** Whether this exchange supports unsubscribing from a watched address. */\n unwatchAddress: ExchangeCapability;\n /** Whether this exchange supports streaming order book updates. */\n watchOrderBook: ExchangeCapability;\n /** Whether this exchange supports batch-subscribing to multiple order book streams. */\n watchOrderBooks: ExchangeCapability;\n /** Whether this exchange supports unsubscribing from an order book stream. */\n unwatchOrderBook: ExchangeCapability;\n /** Whether this exchange supports streaming trade updates. */\n watchTrades: ExchangeCapability;\n /** Whether this exchange supports fetching the authenticated user's trade history. */\n fetchMyTrades: ExchangeCapability;\n /** Whether this exchange supports fetching closed orders. */\n fetchClosedOrders: ExchangeCapability;\n /** Whether this exchange supports fetching all orders (open and closed). */\n fetchAllOrders: ExchangeCapability;\n /** Whether this exchange supports building a signed order without submitting it. */\n buildOrder: ExchangeCapability;\n /** Whether this exchange supports submitting a pre-built order. */\n submitOrder: ExchangeCapability;\n /** Whether this exchange supports fetching cross-venue market matches. */\n fetchMarketMatches: ExchangeCapability;\n /** @deprecated Use {@link fetchMarketMatches} instead. */\n fetchMatches: ExchangeCapability;\n /** Whether this exchange supports fetching cross-venue event matches. */\n fetchEventMatches: ExchangeCapability;\n /** Whether this exchange supports comparing prices across venues. */\n compareMarketPrices: ExchangeCapability;\n /** Whether this exchange supports finding related markets across venues. */\n fetchRelatedMarkets: ExchangeCapability;\n /** Whether this exchange supports fetching matched markets across venues. */\n fetchMatchedMarkets: ExchangeCapability;\n /** @deprecated Use {@link fetchMatchedMarkets} instead. */\n fetchMatchedPrices: ExchangeCapability;\n /** @deprecated Use {@link fetchRelatedMarkets} instead. */\n fetchHedges: ExchangeCapability;\n /** @deprecated Use {@link fetchMatchedMarkets} instead. */\n fetchArbitrage: ExchangeCapability;\n}\n\n/**\nOptional authentication credentials for exchange operations.\n/\nexport interface ExchangeCredentials {\n // Standard API authentication (Kalshi, etc.)\n apiKey?: string;\n /** Standard API secret for HMAC-authenticated exchanges */\n apiSecret?: string;\n /** Standard API passphrase for HMAC-authenticated exchanges */\n passphrase?: string;\n /** Metaculus: `Authorization: Token ` for higher rate limits */\n apiToken?: string;\n\n // Blockchain-based authentication (Polymarket)\n privateKey?: string; // Required for Polymarket L1 auth\n\n // Polymarket-specific L2 fields\n signatureType?: number | string; // 0 = EOA, 1 = Poly Proxy, 2 = Gnosis Safe (Can also use 'eoa', 'polyproxy', 'gnosis_safe')\n funderAddress?: string; // The address funding the trades (defaults to signer address)\n\n // Limitless: wallet address for delegated signing profile lookup\n walletAddress?: string;\n\n // Optional base URL override for venue API (e.g., proxy for geo-restricted venues)\n baseUrl?: string;\n}\n\nexport interface ExchangeOptions {\n /**\nHow long (ms) a market snapshot created by `fetchMarketsPaginated` remains valid\nbefore being discarded and re-fetched from the API on the next call.\nDefaults to 0 (no TTL — the snapshot is re-fetched on every initial call).\n/\n snapshotTTL?: number;\n}\n\n/** Shape returned by fetchMarketsPaginated */\nexport interface PaginatedMarketsResult {\n /** The page of unified markets */\n data: UnifiedMarket[];\n /** Total number of markets in the snapshot */\n total: number;\n /** Cursor to pass to the next call, or undefined if this is the last page */\n nextCursor?: string;\n}\n\n/** Shape returned by fetchEventsPaginated */\nexport interface PaginatedEventsResult {\n /** The page of unified events */\n data: UnifiedEvent[];\n /** Total number of events in the snapshot */\n total: number;\n /** Cursor to pass to the next call, or undefined if this is the last page */\n nextCursor?: string;\n}\n\n// ----------------------------------------------------------------------------\n// Base Exchange Class\n// ----------------------------------------------------------------------------\n\nexport abstract class PredictionMarketExchange {\n [key: string]: any; // Allow dynamic method assignment for implicit API\n\n public verbose: boolean = false;\n public http: AxiosInstance;\n public enableRateLimit: boolean = true;\n // Market Cache\n public markets: Record = {};\n public marketsBySlug: Record = {};\n public loadedMarkets: boolean = false;\n /**\nCapability map derived automatically from method overrides at runtime.\nExchanges do NOT need to declare this manually -- if a subclass overrides\na method (and the override does not throw \"not supported\"), it is `true`.\nTo mark a capability as `'emulated'`, add its key to `emulatedCapabilities`.", + "summary": "HTTP verb for the endpoint (e.g. GET, POST). */\r", + "description": "method: string;\r\n /** URL path template, relative to the descriptor's baseUrl. */\r\n path: string;\r\n /** Whether this endpoint requires authenticated credentials. */\r\n isPrivate?: boolean;\r\n /** Identifier used to generate the implicit API method name. */\r\n operationId?: string;\r\n /**\r\nWhen set, requests use this base URL instead of the descriptor default\r\n(OpenAPI path- or operation-level `servers` override).\r\n/\r\n baseUrl?: string;\r\n}\r\n\r\nexport interface ApiDescriptor {\r\n /** Base URL that all endpoint paths are resolved against. */\r\n baseUrl: string;\r\n /** Map of endpoint key to endpoint definition used by the implicit API machinery. */\r\n endpoints: Record;\r\n}\r\n\r\nexport interface ImplicitApiMethodInfo {\r\n /** Generated method name exposed on the exchange instance. */\r\n name: string;\r\n /** HTTP verb for the underlying endpoint. */\r\n method: string;\r\n /** URL path template for the underlying endpoint. */\r\n path: string;\r\n /** Whether the underlying endpoint requires authenticated credentials. */\r\n isPrivate: boolean;\r\n}\r\n\r\nexport interface MarketFilterParams {\r\n /** Maximum number of results to return */\r\n limit?: number;\r\n /** Pagination offset — number of results to skip */\r\n offset?: number;\r\n /** Sort order for results */\r\n sort?: 'volume' | 'liquidity' | 'newest';\r\n status?: 'active' | 'inactive' | 'closed' | 'all'; // Filter by market status (default: 'active', 'inactive' and 'closed' are interchangeable)\r\n searchIn?: 'title' | 'description' | 'both'; // Where to search (default: 'title')\r\n query?: string; // For keyword search\r\n slug?: string; // For slug/ticker lookup\r\n marketId?: string; // Direct lookup by market ID\r\n outcomeId?: string; // Reverse lookup -- find market containing this outcome\r\n eventId?: string; // Find markets belonging to an event\r\n page?: number; // For pagination (used by Limitless)\r\n similarityThreshold?: number; // For semantic search (used by Limitless)\r\n /** Filter by source venue (e.g. 'polymarket', 'kalshi', 'myriad'). `exchange` is an alias. */\r\n sourceExchange?: string;\r\n /** Alias for `sourceExchange`. */\r\n exchange?: string;\r\n}\r\n\r\nexport interface MarketFetchParams extends MarketFilterParams {\r\n /** Optional client-side filter applied after fetching */\r\n filter?: MarketFilterCriteria;\r\n /** Filter by category. Each market belongs to a venue-assigned category such as \"Sports\", \"Politics\", \"Crypto\", \"Bitcoin\", \"Soccer\", \"Economic Policy\" (Polymarket) or \"Sports\", \"Mentions\" (Kalshi). */\r\n category?: string;\r\n /** Filter by tags. Returns markets matching ANY of the provided tags. Tags are more specific than categories -- for example a \"Sports\" market might carry tags [\"Sports\", \"FIFA World Cup\", \"2026 FIFA World Cup\"]. Common tags include \"Crypto\", \"Politics\", \"Elections\", \"Geopolitics\", \"Fed Rates\", \"Trump\". */\r\n tags?: string[];\r\n}\r\n\r\nexport interface EventFetchParams {\r\n query?: string; // For keyword search\r\n /** Maximum number of results to return */\r\n limit?: number;\r\n /** Opaque venue pagination cursor, where supported. */\r\n cursor?: string;\r\n /** Pagination offset — number of results to skip */\r\n offset?: number;\r\n /** Sort order for results */\r\n sort?: 'volume' | 'liquidity' | 'newest';\r\n status?: 'active' | 'inactive' | 'closed' | 'all'; // Filter by event status (default: 'active', 'inactive' and 'closed' are interchangeable)\r\n /** Where to search (default: 'title') */\r\n searchIn?: 'title' | 'description' | 'both';\r\n eventId?: string; // Direct lookup by event ID\r\n slug?: string; // Lookup by event slug\r\n /** Filter events by their parent series. Accepts the venue-native series id / ticker / slug (e.g. Kalshi `\"KXATPMATCH\"`, Polymarket `\"wta\"`). Passed through to the vendor where supported, otherwise applied to `sourceMetadata` after fetch. */\r\n series?: string;\r\n /** Optional client-side filter applied after fetching */\r\n filter?: EventFilterCriteria;\r\n /** Filter by category. Each event belongs to a venue-assigned category such as \"Sports\", \"Politics\", \"Crypto\", \"Bitcoin\", \"Soccer\", \"Economic Policy\" (Polymarket) or \"Sports\", \"Mentions\" (Kalshi). */\r\n category?: string;\r\n /** Filter by tags. Returns events matching ANY of the provided tags. Tags are more specific than categories -- for example a \"Politics\" event might carry tags [\"Politics\", \"Geopolitics\", \"Middle East\", \"Iran\"]. Common tags include \"Crypto\", \"Elections\", \"Fed Rates\", \"FIFA World Cup\", \"Trump\". */\r\n tags?: string[];\r\n /** Filter by source venue (e.g. 'polymarket', 'kalshi', 'myriad'). `exchange` is an alias. */\r\n sourceExchange?: string;\r\n /** Alias for `sourceExchange`. */\r\n exchange?: string;\r\n}\r\n\r\n/**\r\nParameters for `fetchSeries`. Venues that don't expose a series concept\r\nreturn an empty array regardless of the filters.\r\n/\r\nexport interface SeriesFetchParams {\r\n /** Direct lookup by venue-native series id (e.g. \"KXATPMATCH\" on Kalshi, \"atp\" or \"1\" on Polymarket Gamma). When set, the result is the matching series with its events populated where the venue supports it. */\r\n id?: string;\r\n /** Lookup by series slug (e.g. \"wta\", \"nfl\"). */\r\n slug?: string;\r\n /** Keyword search across series title / description. */\r\n query?: string;\r\n /** Filter by recurrence cadence ('daily', 'weekly', 'annual', ...). */\r\n recurrence?: string;\r\n /** Maximum number of results to return. */\r\n limit?: number;\r\n /** Pagination offset. */\r\n offset?: number;\r\n}\r\n\r\n/**\r\nDeprecated - use OHLCVParams or TradesParams instead. Resolution is optional for backward compatibility.\r\n/\r\nexport interface HistoryFilterParams {\r\n resolution?: CandleInterval; // Optional for backward compatibility\r\n /** Start of the time range */\r\n start?: Date;\r\n /** End of the time range */\r\n end?: Date;\r\n /** Maximum number of results to return */\r\n limit?: number;\r\n}\r\n\r\nexport interface OHLCVParams {\r\n resolution: CandleInterval; // Required for candle aggregation\r\n /** Start of the time range */\r\n start?: Date;\r\n /** End of the time range */\r\n end?: Date;\r\n /** Maximum number of results to return */\r\n limit?: number;\r\n}\r\n\r\n/**\r\nParameters for fetching trade history. No resolution parameter - trades are discrete events.\r\n/\r\n/** Maximum allowed value for `TradesParams.limit`. */\r\nexport const MAX_TRADES_LIMIT = 1000;\r\n\r\nexport interface TradesParams {\r\n // No resolution - trades are discrete events, not aggregated\r\n /** Start of the time range */\r\n start?: Date;\r\n /** End of the time range */\r\n end?: Date;\r\n /** Maximum number of results to return (max {@link MAX_TRADES_LIMIT}) */\r\n limit?: number;\r\n}\r\n\r\nexport interface MyTradesParams {\r\n outcomeId?: string; // filter to specific outcome/ticker\r\n marketId?: string; // filter to specific market\r\n /** Only return records after this date */\r\n since?: Date;\r\n /** Only return records before this date */\r\n until?: Date;\r\n /** Maximum number of results to return */\r\n limit?: number;\r\n cursor?: string; // for Kalshi cursor pagination\r\n}\r\n\r\nexport interface FetchOrderBookParams {\r\n /** Outcome side: 'yes' or 'no'. Required for exchanges like Limitless\r\n where the API returns a single orderbook per market. */\r\n side?: 'yes' | 'no';\r\n /** Outcome alias: 'yes' or 'no', or an outcome token ID. When set,\r\n the first argument is treated as a market ID and this value selects\r\n which outcome's order book to fetch. Accepts the literal strings\r\n 'yes'/'no' (resolved via a market lookup) or a raw outcome token ID. */\r\n outcome?: string;\r\n /** Unix timestamp (ms) — fetch a historical snapshot at or before this\r\n time, or the start of a range when combined with `until` (hosted API only). */\r\n since?: number;\r\n /** Unix timestamp (ms) — end of a historical range. When combined with\r\n `since`, returns an array of reconstructed L2 OrderBook snapshots\r\n between `since` and `until` (hosted API only). */\r\n until?: number;\r\n}\r\n\r\nexport interface OrderHistoryParams {\r\n marketId?: string; // required for Limitless (slug)\r\n /** Only return records after this date */\r\n since?: Date;\r\n /** Only return records before this date */\r\n until?: Date;\r\n /** Maximum number of results to return */\r\n limit?: number;\r\n /** Opaque pagination cursor from a previous response */\r\n cursor?: string;\r\n}\r\n\r\n// ----------------------------------------------------------------------------\r\n// Filtering Types\r\n// ----------------------------------------------------------------------------\r\n\r\nexport interface MarketFilterCriteria {\r\n // Text search\r\n text?: string;\r\n searchIn?: ('title' | 'description' | 'category' | 'tags' | 'outcomes')[]; // Default: ['title']\r\n\r\n // Numeric range filters\r\n volume24h?: { min?: number; max?: number };\r\n /** Filter by total (lifetime) volume range */\r\n volume?: { min?: number; max?: number };\r\n /** Filter by current liquidity range */\r\n liquidity?: { min?: number; max?: number };\r\n /** Filter by open interest range */\r\n openInterest?: { min?: number; max?: number };\r\n\r\n // Date filters\r\n resolutionDate?: {\r\n before?: Date;\r\n after?: Date;\r\n };\r\n\r\n // Category/tag filters\r\n /** Filter by category. Common values: \"Sports\", \"Politics\", \"Crypto\", \"Bitcoin\", \"Soccer\", \"Economic Policy\" (Polymarket) or \"Sports\", \"Mentions\" (Kalshi). */\r\n category?: string;\r\n /** Match markets that have ANY of these tags. Examples: [\"Crypto\", \"Crypto Prices\"], [\"Politics\", \"Elections\"], [\"Sports\", \"FIFA World Cup\"]. */\r\n tags?: string[];\r\n\r\n // Price filters (for binary markets)\r\n price?: {\r\n outcome: 'yes' | 'no' | 'up' | 'down';\r\n min?: number; // 0.0 to 1.0\r\n max?: number;\r\n };\r\n\r\n // Price change filters\r\n priceChange24h?: {\r\n outcome: 'yes' | 'no' | 'up' | 'down';\r\n min?: number; // e.g., -0.1 for 10% drop\r\n max?: number;\r\n };\r\n}\r\n\r\nexport type MarketFilterFunction = (market: UnifiedMarket) => boolean;\r\n\r\nexport interface EventFilterCriteria {\r\n // Text search\r\n text?: string;\r\n searchIn?: ('title' | 'description' | 'category' | 'tags')[]; // Default: ['title']\r\n\r\n // Category/tag filters\r\n /** Filter by category. Common values: \"Sports\", \"Politics\", \"Crypto\", \"Bitcoin\", \"Soccer\", \"Economic Policy\" (Polymarket) or \"Sports\", \"Mentions\" (Kalshi). */\r\n category?: string;\r\n /** Match events that have ANY of these tags. Examples: [\"Crypto\"], [\"Politics\", \"Geopolitics\", \"Middle East\"], [\"Sports\", \"FIFA World Cup\"]. */\r\n tags?: string[];\r\n\r\n // Filter by contained markets\r\n marketCount?: { min?: number; max?: number };\r\n totalVolume?: { min?: number; max?: number }; // Sum of market volumes\r\n}\r\n\r\nexport type EventFilterFunction = (event: UnifiedEvent) => boolean;\r\n\r\n// ----------------------------------------------------------------------------\r\n// Capability Map (ccxt-style exchange.has)\r\n// ----------------------------------------------------------------------------\r\n\r\nexport type ExchangeCapability = true | false | 'emulated';\r\n\r\nexport interface ExchangeHas {\r\n /** Whether this exchange supports fetching markets. */\r\n fetchMarkets: ExchangeCapability;\r\n /** Whether this exchange supports fetching events. */\r\n fetchEvents: ExchangeCapability;\r\n /** Whether this exchange exposes a recurring-series concept (Series -> Event -> Market -> Outcome). Venues without one return `false` and an empty array from `fetchSeries`. */\r\n fetchSeries: ExchangeCapability;\r\n /** Whether this exchange supports fetching OHLCV candles. */\r\n fetchOHLCV: ExchangeCapability;\r\n /** Whether this exchange supports fetching the order book. */\r\n fetchOrderBook: ExchangeCapability;\r\n /** Whether this exchange supports fetching multiple market order books. */\r\n fetchOrderBooks: ExchangeCapability;\r\n /** Whether this exchange supports fetching public trades. */\r\n fetchTrades: ExchangeCapability;\r\n /** Whether this exchange supports creating orders. */\r\n createOrder: ExchangeCapability;\r\n /** Whether this exchange supports cancelling orders. */\r\n cancelOrder: ExchangeCapability;\r\n /** Whether this exchange supports fetching a single order by id. */\r\n fetchOrder: ExchangeCapability;\r\n /** Whether this exchange supports fetching open orders. */\r\n fetchOpenOrders: ExchangeCapability;\r\n /** Whether this exchange supports fetching account positions. */\r\n fetchPositions: ExchangeCapability;\r\n /** Whether this exchange supports fetching account balances. */\r\n fetchBalance: ExchangeCapability;\r\n /** Whether this exchange supports subscribing to an on-chain address for updates. */\r\n watchAddress: ExchangeCapability;\r\n /** Whether this exchange supports unsubscribing from a watched address. */\r\n unwatchAddress: ExchangeCapability;\r\n /** Whether this exchange supports streaming order book updates. */\r\n watchOrderBook: ExchangeCapability;\r\n /** Whether this exchange supports batch-subscribing to multiple order book streams. */\r\n watchOrderBooks: ExchangeCapability;\r\n /** Whether this exchange supports unsubscribing from an order book stream. */\r\n unwatchOrderBook: ExchangeCapability;\r\n /** Whether this exchange supports streaming trade updates. */\r\n watchTrades: ExchangeCapability;\r\n /** Whether this exchange supports fetching the authenticated user's trade history. */\r\n fetchMyTrades: ExchangeCapability;\r\n /** Whether this exchange supports fetching closed orders. */\r\n fetchClosedOrders: ExchangeCapability;\r\n /** Whether this exchange supports fetching all orders (open and closed). */\r\n fetchAllOrders: ExchangeCapability;\r\n /** Whether this exchange supports building a signed order without submitting it. */\r\n buildOrder: ExchangeCapability;\r\n /** Whether this exchange supports submitting a pre-built order. */\r\n submitOrder: ExchangeCapability;\r\n /** Whether this exchange supports fetching cross-venue market matches. */\r\n fetchMarketMatches: ExchangeCapability;\r\n /** @deprecated Use {@link fetchMarketMatches} instead. */\r\n fetchMatches: ExchangeCapability;\r\n /** Whether this exchange supports fetching cross-venue event matches. */\r\n fetchEventMatches: ExchangeCapability;\r\n /** Whether this exchange supports comparing prices across venues. */\r\n compareMarketPrices: ExchangeCapability;\r\n /** Whether this exchange supports finding related markets across venues. */\r\n fetchRelatedMarkets: ExchangeCapability;\r\n /** Whether this exchange supports fetching matched markets across venues. */\r\n fetchMatchedMarkets: ExchangeCapability;\r\n /** @deprecated Use {@link fetchMatchedMarkets} instead. */\r\n fetchMatchedPrices: ExchangeCapability;\r\n /** @deprecated Use {@link fetchRelatedMarkets} instead. */\r\n fetchHedges: ExchangeCapability;\r\n /** @deprecated Use {@link fetchMatchedMarkets} instead. */\r\n fetchArbitrage: ExchangeCapability;\r\n}\r\n\r\n/**\r\nOptional authentication credentials for exchange operations.\r\n/\r\nexport interface ExchangeCredentials {\r\n // Standard API authentication (Kalshi, etc.)\r\n apiKey?: string;\r\n /** Standard API secret for HMAC-authenticated exchanges */\r\n apiSecret?: string;\r\n /** Standard API passphrase for HMAC-authenticated exchanges */\r\n passphrase?: string;\r\n /** Metaculus: `Authorization: Token ` for higher rate limits */\r\n apiToken?: string;\r\n\r\n // Blockchain-based authentication (Polymarket)\r\n privateKey?: string; // Required for Polymarket L1 auth\r\n\r\n // Polymarket-specific L2 fields\r\n signatureType?: number | string; // 0 = EOA, 1 = Poly Proxy, 2 = Gnosis Safe (Can also use 'eoa', 'polyproxy', 'gnosis_safe')\r\n funderAddress?: string; // The address funding the trades (defaults to signer address)\r\n\r\n // Limitless: wallet address for delegated signing profile lookup\r\n walletAddress?: string;\r\n\r\n // Optional base URL override for venue API (e.g., proxy for geo-restricted venues)\r\n baseUrl?: string;\r\n}\r\n\r\nexport interface ExchangeOptions {\r\n /**\r\nHow long (ms) a market snapshot created by `fetchMarketsPaginated` remains valid\r\nbefore being discarded and re-fetched from the API on the next call.\r\nDefaults to 0 (no TTL — the snapshot is re-fetched on every initial call).\r\n/\r\n snapshotTTL?: number;\r\n}\r\n\r\n/** Shape returned by fetchMarketsPaginated */\r\nexport interface PaginatedMarketsResult {\r\n /** The page of unified markets */\r\n data: UnifiedMarket[];\r\n /** Total number of markets in the snapshot */\r\n total: number;\r\n /** Cursor to pass to the next call, or undefined if this is the last page */\r\n nextCursor?: string;\r\n}\r\n\r\n/** Shape returned by fetchEventsPaginated */\r\nexport interface PaginatedEventsResult {\r\n /** The page of unified events */\r\n data: UnifiedEvent[];\r\n /** Total number of events in the snapshot */\r\n total: number;\r\n /** Cursor to pass to the next call, or undefined if this is the last page */\r\n nextCursor?: string;\r\n}\r\n\r\n// ----------------------------------------------------------------------------\r\n// Base Exchange Class\r\n// ----------------------------------------------------------------------------\r\n\r\nexport abstract class PredictionMarketExchange {\r\n [key: string]: any; // Allow dynamic method assignment for implicit API\r\n\r\n public verbose: boolean = false;\r\n public http: AxiosInstance;\r\n public enableRateLimit: boolean = true;\r\n // Market Cache\r\n public markets: Record = {};\r\n public marketsBySlug: Record = {};\r\n public loadedMarkets: boolean = false;\r\n /**\r\nCapability map derived automatically from method overrides at runtime.\r\nExchanges do NOT need to declare this manually -- if a subclass overrides\r\na method (and the override does not throw \"not supported\"), it is `true`.\r\nTo mark a capability as `'emulated'`, add its key to `emulatedCapabilities`.", "params": [], "returns": { "type": "ExchangeHas", "description": "Result" }, - "source": "BaseExchange.ts:42" + "source": "BaseExchange.ts:43" }, "implicitApi": { - "summary": "Override in subclasses to force specific capability values.", - "description": "Use `'emulated'` for methods backed by a non-native mechanism,\nor `false` for methods that override the base only to throw a\nbetter error message (e.g. \"pari-mutuel bets cannot be cancelled\").\n/\n protected readonly capabilityOverrides: Partial> = {};\n\n protected credentials?: ExchangeCredentials;\n // Implicit API (merged across multiple defineImplicitApi calls)\n protected apiDescriptor?: ApiDescriptor;\n private _throttler: Throttler;\n // Snapshot state for cursor-based pagination\n private _snapshotTTL: number;\n private _snapshot?: { markets: UnifiedMarket[]; takenAt: number; id: string };\n private _eventSnapshot?: { events: UnifiedEvent[]; takenAt: number; id: string };\n private apiDescriptors: ApiDescriptor[] = [];\n\n constructor(credentials?: ExchangeCredentials, options?: ExchangeOptions) {\n this.credentials = credentials;\n this._snapshotTTL = options?.snapshotTTL ?? 0;\n this.http = axios.create({\n headers: {\n 'User-Agent': `pmxt (https://github.com/pmxt-dev/pmxt)`\n },\n paramsSerializer: {\n serialize: (params) => {\n const sp = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v === undefined || v === null) continue;\n if (Array.isArray(v)) v.forEach((x) => sp.append(k, String(x)));\n else sp.append(k, String(v));\n }\n return sp.toString();\n },\n },\n });\n this._throttler = new Throttler({\n refillRate: 1 / this._rateLimit,\n capacity: 1,\n delay: 1,\n });\n\n // Rate Limit Interceptor\n this.http.interceptors.request.use(async (config: InternalAxiosRequestConfig) => {\n if (this.enableRateLimit) {\n await this._throttler.throttle();\n }\n return config;\n });\n\n // Request Interceptor\n this.http.interceptors.request.use((config: InternalAxiosRequestConfig) => {\n if (this.verbose) {\n logger.debug(`-> ${config.method?.toUpperCase()} ${config.url}`);\n if (config.params) logger.debug('params:', { params: config.params });\n if (config.data) logger.debug('body:', { body: config.data });\n }\n return config;\n });\n\n // Response Interceptor\n this.http.interceptors.response.use(\n (response: AxiosResponse) => {\n if (this.verbose) {\n logger.debug(`<- ${response.status} ${response.statusText} ${response.config.url}`);\n }\n return response;\n },\n (error: any) => {\n if (this.verbose) {\n logger.debug(`REQUEST FAILED: ${error.config?.url}`, {\n error: error.message,\n status: error.response?.status,\n data: error.response?.data,\n });\n }\n return Promise.reject(error);\n }\n );\n }\n\n private _rateLimit: number = 1000;\n\n get rateLimit(): number {\n return this._rateLimit;\n }\n\n set rateLimit(value: number) {\n this._rateLimit = value;\n this._throttler = new Throttler({\n refillRate: 1 / value,\n capacity: 1,\n delay: 1,\n });\n }\n\n abstract get name(): string;\n\n /**\nIntrospection getter: returns info about all implicit API methods.", + "summary": "Override in subclasses to force specific capability values.\r", + "description": "Use `'emulated'` for methods backed by a non-native mechanism,\r\nor `false` for methods that override the base only to throw a\r\nbetter error message (e.g. \"pari-mutuel bets cannot be cancelled\").\r\n/\r\n protected readonly capabilityOverrides: Partial> = {};\r\n\r\n protected credentials?: ExchangeCredentials;\r\n // Implicit API (merged across multiple defineImplicitApi calls)\r\n protected apiDescriptor?: ApiDescriptor;\r\n private _throttler: Throttler;\r\n // Snapshot state for cursor-based pagination\r\n private _snapshotTTL: number;\r\n private _snapshot?: { markets: UnifiedMarket[]; takenAt: number; id: string };\r\n private _eventSnapshot?: { events: UnifiedEvent[]; takenAt: number; id: string };\r\n private apiDescriptors: ApiDescriptor[] = [];\r\n\r\n constructor(credentials?: ExchangeCredentials, options?: ExchangeOptions) {\r\n this.credentials = credentials;\r\n this._snapshotTTL = options?.snapshotTTL ?? 0;\r\n this.http = axios.create({\r\n headers: {\r\n 'User-Agent': `pmxt (https://github.com/pmxt-dev/pmxt)`\r\n },\r\n paramsSerializer: {\r\n serialize: (params) => {\r\n const sp = new URLSearchParams();\r\n for (const [k, v] of Object.entries(params)) {\r\n if (v === undefined || v === null) continue;\r\n if (Array.isArray(v)) v.forEach((x) => sp.append(k, String(x)));\r\n else sp.append(k, String(v));\r\n }\r\n return sp.toString();\r\n },\r\n },\r\n });\r\n this._throttler = new Throttler({\r\n refillRate: 1 / this._rateLimit,\r\n capacity: 1,\r\n delay: 1,\r\n });\r\n\r\n // Rate Limit Interceptor\r\n this.http.interceptors.request.use(async (config: InternalAxiosRequestConfig) => {\r\n if (this.enableRateLimit) {\r\n await this._throttler.throttle();\r\n }\r\n return config;\r\n });\r\n\r\n // Request Interceptor\r\n this.http.interceptors.request.use((config: InternalAxiosRequestConfig) => {\r\n if (this.verbose) {\r\n logger.debug(`-> ${config.method?.toUpperCase()} ${config.url}`);\r\n if (config.params) logger.debug('params:', { params: config.params });\r\n if (config.data) logger.debug('body:', { body: config.data });\r\n }\r\n return config;\r\n });\r\n\r\n // Response Interceptor\r\n this.http.interceptors.response.use(\r\n (response: AxiosResponse) => {\r\n if (this.verbose) {\r\n logger.debug(`<- ${response.status} ${response.statusText} ${response.config.url}`);\r\n }\r\n return response;\r\n },\r\n (error: any) => {\r\n if (this.verbose) {\r\n logger.debug(`REQUEST FAILED: ${error.config?.url}`, {\r\n error: error.message,\r\n status: error.response?.status,\r\n data: error.response?.data,\r\n });\r\n }\r\n return Promise.reject(error);\r\n }\r\n );\r\n }\r\n\r\n private _rateLimit: number = 1000;\r\n\r\n get rateLimit(): number {\r\n return this._rateLimit;\r\n }\r\n\r\n set rateLimit(value: number) {\r\n this._rateLimit = value;\r\n this._throttler = new Throttler({\r\n refillRate: 1 / value,\r\n capacity: 1,\r\n delay: 1,\r\n });\r\n }\r\n\r\n abstract get name(): string;\r\n\r\n /**\r\nIntrospection getter: returns info about all implicit API methods.", "params": [], "returns": { "type": "ImplicitApiMethodInfo[]", "description": "Result" }, - "source": "BaseExchange.ts:459" + "source": "BaseExchange.ts:460" }, "loadMarkets": { - "summary": "Load and cache all markets from the exchange into `this.markets` and `this.marketsBySlug`.", - "description": "Subsequent calls return the cached result without hitting the API again.\n\nThis is the correct way to paginate or iterate over markets without drift.\nBecause `fetchMarkets()` always hits the API, repeated calls with different `offset`\nvalues may return inconsistent results if the exchange reorders or adds markets between\nrequests. Use `loadMarkets()` once to get a stable snapshot, then paginate over\n`Object.values(exchange.markets)` locally.", + "summary": "Load and cache all markets from the exchange into `this.markets` and `this.marketsBySlug`.\r", + "description": "Subsequent calls return the cached result without hitting the API again.\r\n\nThis is the correct way to paginate or iterate over markets without drift.\r\nBecause `fetchMarkets()` always hits the API, repeated calls with different `offset`\r\nvalues may return inconsistent results if the exchange reorders or adds markets between\r\nrequests. Use `loadMarkets()` once to get a stable snapshot, then paginate over\r\n`Object.values(exchange.markets)` locally.", "params": [ { "name": "reload", @@ -36,10 +36,10 @@ "type": "Record", "description": "Dictionary of markets indexed by marketId" }, - "source": "BaseExchange.ts:572" + "source": "BaseExchange.ts:573" }, "fetchMarkets": { - "summary": "Fetch markets with optional filtering, search, or slug lookup.", + "summary": "Fetch markets with optional filtering, search, or slug lookup.\r", "description": "Always hits the exchange API — results reflect the live state at the time of the call.", "params": [ { @@ -80,14 +80,14 @@ "description": "Array of unified markets" }, "notes": [ - "ordering — exchanges may reorder or add markets between requests. For stable iteration\nacross pages, use `loadMarkets()` and paginate over `Object.values(exchange.markets)`.", + "ordering — exchanges may reorder or add markets between requests. For stable iteration\r\nacross pages, use `loadMarkets()` and paginate over `Object.values(exchange.markets)`.", "Some exchanges (like Limitless) may only support status 'active' for search results." ], - "source": "BaseExchange.ts:609" + "source": "BaseExchange.ts:610" }, "fetchMarketsPaginated": { - "summary": "Fetch markets with cursor-based pagination backed by a stable in-memory snapshot.", - "description": "On the first call (or when no cursor is supplied), fetches all markets once and\ncaches them. Subsequent calls with a cursor returned from a previous call slice\ndirectly from the cached snapshot — no additional API calls are made.\n\nThe snapshot is invalidated after `snapshotTTL` ms (configured via `ExchangeOptions`\nin the constructor). A request using a cursor from an expired snapshot throws\n`'Cursor has expired'`.", + "summary": "Fetch markets with cursor-based pagination backed by a stable in-memory snapshot.\r", + "description": "On the first call (or when no cursor is supplied), fetches all markets once and\r\ncaches them. Subsequent calls with a cursor returned from a previous call slice\r\ndirectly from the cached snapshot — no additional API calls are made.\r\n\nThe snapshot is invalidated after `snapshotTTL` ms (configured via `ExchangeOptions`\r\nin the constructor). A request using a cursor from an expired snapshot throws\r\n`'Cursor has expired'`.", "params": [ { "name": "params", @@ -110,11 +110,11 @@ "type": "PaginatedMarketsResult", "description": "PaginatedMarketsResult with data, total, and optional nextCursor" }, - "source": "BaseExchange.ts:664" + "source": "BaseExchange.ts:665" }, "fetchEventsPaginated": { - "summary": "Paginated variant of {@link fetchEvents}.", - "description": "On the first call (no `cursor`), all events are fetched from the exchange\nand cached in an in-memory snapshot. A cursor is returned along with the\nfirst page. Subsequent calls with that cursor serve additional pages\ndirectly from the cached snapshot -- no additional API calls are made.\n\nThe snapshot is invalidated after `snapshotTTL` ms (configured via `ExchangeOptions`\nin the constructor). A request using a cursor from an expired snapshot throws\n`'Cursor has expired'`.", + "summary": "Paginated variant of {@link fetchEvents}.\r", + "description": "On the first call (no `cursor`), all events are fetched from the exchange\r\nand cached in an in-memory snapshot. A cursor is returned along with the\r\nfirst page. Subsequent calls with that cursor serve additional pages\r\ndirectly from the cached snapshot -- no additional API calls are made.\r\n\nThe snapshot is invalidated after `snapshotTTL` ms (configured via `ExchangeOptions`\r\nin the constructor). A request using a cursor from an expired snapshot throws\r\n`'Cursor has expired'`.", "params": [ { "name": "params", @@ -137,10 +137,10 @@ "type": "PaginatedEventsResult", "description": "PaginatedEventsResult with data, total, and optional nextCursor" }, - "source": "BaseExchange.ts:733" + "source": "BaseExchange.ts:734" }, "fetchEvents": { - "summary": "Fetch events with optional keyword search.", + "summary": "Fetch events with optional keyword search.\r", "description": "Events group related markets together (e.g., \"Who will be Fed Chair?\" contains multiple candidate markets).", "params": [ { @@ -175,11 +175,11 @@ "notes": [ "Some exchanges (like Limitless) may only support status 'active' for search results." ], - "source": "BaseExchange.ts:802" + "source": "BaseExchange.ts:803" }, "fetchSeries": { - "summary": "Fetch the recurring series (fourth tier above Event -> Market -> Outcome)", - "description": "that this venue exposes. Returns an empty array on venues without a\nseries concept (Limitless, Smarkets, Probable, Metaculus, Baozi,\nHyperliquid, SuiBets, Polymarket US).\n\n- `params.id` -> a single matching series with its events populated where supported.\n- no params -> the full list, typically without nested events for payload size.", + "summary": "Fetch the recurring series (fourth tier above Event -> Market -> Outcome)\r", + "description": "that this venue exposes. Returns an empty array on venues without a\r\nseries concept (Limitless, Smarkets, Probable, Metaculus, Baozi,\r\nHyperliquid, SuiBets, Polymarket US).\r\n\n- `params.id` -> a single matching series with its events populated where supported.\r\n- no params -> the full list, typically without nested events for payload size.", "params": [ { "name": "params", @@ -192,10 +192,10 @@ "type": "UnifiedSeries[]", "description": "Array of unified series. Always an array, including the singular-lookup case." }, - "source": "BaseExchange.ts:841" + "source": "BaseExchange.ts:842" }, "fetchMarket": { - "summary": "Fetch a single market by lookup parameters.", + "summary": "Fetch a single market by lookup parameters.\r", "description": "Convenience wrapper around fetchMarkets() that returns a single result or throws MarketNotFound.", "params": [ { @@ -209,10 +209,10 @@ "type": "UnifiedMarket", "description": "A single unified market" }, - "source": "BaseExchange.ts:859" + "source": "BaseExchange.ts:860" }, "fetchEvent": { - "summary": "Fetch a single event by lookup parameters.", + "summary": "Fetch a single event by lookup parameters.\r", "description": "Convenience wrapper around fetchEvents() that returns a single result or throws EventNotFound.", "params": [ { @@ -226,7 +226,7 @@ "type": "UnifiedEvent", "description": "A single unified event" }, - "source": "BaseExchange.ts:959" + "source": "BaseExchange.ts:960" }, "fetchOHLCV": { "summary": "Fetch historical OHLCV (candlestick) price data for a specific market outcome.", @@ -254,11 +254,11 @@ "Polymarket: outcomeId is the CLOB Token ID. Kalshi: outcomeId is the Market Ticker.", "Common resolutions: '1m' | '5m' | '15m' | '1h' | '6h' | '1d'. Arbitrary intervals (e.g. '30s', '120s', '3h') accepted by venues that support them." ], - "source": "BaseExchange.ts:976" + "source": "BaseExchange.ts:977" }, "fetchOrderBook": { - "summary": "Fetch the order book (bids/asks) for a specific outcome.", - "description": "Supports live and historical queries. For historical data, pass `since`\nto get a single snapshot, or `since` + `until` to get an array of fully\nreconstructed L2 books from the archive. Range queries return up to\n`limit` snapshots (default 100, max 1000).", + "summary": "Fetch the order book (bids/asks) for a specific outcome.\r", + "description": "Supports live and historical queries. For historical data, pass `since`\r\nto get a single snapshot, or `since` + `until` to get an array of fully\r\nreconstructed L2 books from the archive. Range queries return up to\r\n`limit` snapshots (default 100, max 1000).", "params": [ { "name": "outcomeId", @@ -283,10 +283,10 @@ "type": "OrderBook", "description": "Order book with bids and asks. Returns OrderBook[] when" }, - "source": "BaseExchange.ts:991" + "source": "BaseExchange.ts:992" }, "fetchOrderBooks": { - "summary": "Batch variant of {@link fetchOrderBook}. Fetches order books for", + "summary": "Batch variant of {@link fetchOrderBook}. Fetches order books for\r", "description": "multiple outcomes in a single request where the exchange supports it.", "params": [ { @@ -300,7 +300,7 @@ "type": "Record", "description": "A map keyed by the input id (preserving the caller's exact" }, - "source": "BaseExchange.ts:1019" + "source": "BaseExchange.ts:1020" }, "fetchTrades": { "summary": "Fetch raw trade history for a specific outcome.", @@ -326,7 +326,7 @@ "notes": [ "Polymarket requires an API key for trade history. Use fetchOHLCV for public historical data." ], - "source": "BaseExchange.ts:1032" + "source": "BaseExchange.ts:1033" }, "createOrder": { "summary": "Place a new order on the exchange.", @@ -343,11 +343,11 @@ "type": "Order", "description": "The created order" }, - "source": "BaseExchange.ts:1049" + "source": "BaseExchange.ts:1050" }, "buildOrder": { - "summary": "Build an order payload without submitting it to the exchange.", - "description": "Returns the exchange-native signed order or request body for inspection,\nforwarding through a middleware layer, or deferred submission via submitOrder().", + "summary": "Build an order payload without submitting it to the exchange.\r", + "description": "Returns the exchange-native signed order or request body for inspection,\r\nforwarding through a middleware layer, or deferred submission via submitOrder().", "params": [ { "name": "params", @@ -360,7 +360,7 @@ "type": "BuiltOrder", "description": "A BuiltOrder containing the exchange-native payload" }, - "source": "BaseExchange.ts:1063" + "source": "BaseExchange.ts:1064" }, "submitOrder": { "summary": "Submit a pre-built order returned by buildOrder().", @@ -377,7 +377,7 @@ "type": "Order", "description": "The submitted order" }, - "source": "BaseExchange.ts:1075" + "source": "BaseExchange.ts:1076" }, "cancelOrder": { "summary": "Cancel an existing open order.", @@ -394,7 +394,7 @@ "type": "Order", "description": "The cancelled order" }, - "source": "BaseExchange.ts:1085" + "source": "BaseExchange.ts:1086" }, "fetchOrder": { "summary": "Fetch a specific order by ID.", @@ -411,7 +411,7 @@ "type": "Order", "description": "The order details" }, - "source": "BaseExchange.ts:1095" + "source": "BaseExchange.ts:1096" }, "fetchOpenOrders": { "summary": "Fetch all open orders, optionally filtered by market.", @@ -428,7 +428,7 @@ "type": "Order[]", "description": "Array of open orders" }, - "source": "BaseExchange.ts:1105" + "source": "BaseExchange.ts:1106" }, "fetchMyTrades": { "summary": "Fetch authenticated user trade history.", @@ -471,7 +471,7 @@ "type": "UserTrade[]", "description": "Array of user trades" }, - "source": "BaseExchange.ts:1115" + "source": "BaseExchange.ts:1116" }, "fetchClosedOrders": { "summary": "Fetch authenticated closed orders.", @@ -510,7 +510,7 @@ "type": "Order[]", "description": "Array of closed orders" }, - "source": "BaseExchange.ts:1131" + "source": "BaseExchange.ts:1132" }, "fetchAllOrders": { "summary": "Fetch authenticated order history across open and closed orders.", @@ -549,7 +549,7 @@ "type": "Order[]", "description": "Array of orders" }, - "source": "BaseExchange.ts:1146" + "source": "BaseExchange.ts:1147" }, "fetchPositions": { "summary": "Fetch current user positions across all markets.", @@ -566,7 +566,7 @@ "type": "Position[]", "description": "Array of user positions" }, - "source": "BaseExchange.ts:1161" + "source": "BaseExchange.ts:1162" }, "fetchBalance": { "summary": "Fetch account balances.", @@ -583,10 +583,10 @@ "type": "Balance[]", "description": "Array of account balances" }, - "source": "BaseExchange.ts:1171" + "source": "BaseExchange.ts:1172" }, "getExecutionPrice": { - "summary": "Calculate the volume-weighted average execution price for a given order size.", + "summary": "Calculate the volume-weighted average execution price for a given order size.\r", "description": "Returns 0 if the order cannot be fully filled.", "params": [ { @@ -612,7 +612,7 @@ "type": "number", "description": "Average execution price, or 0 if insufficient liquidity" }, - "source": "BaseExchange.ts:1181" + "source": "BaseExchange.ts:1182" }, "getExecutionPriceDetailed": { "summary": "Calculate detailed execution price information including partial fill data.", @@ -641,10 +641,10 @@ "type": "ExecutionPriceResult", "description": "Detailed execution result with price, filled amount, and fill status" }, - "source": "BaseExchange.ts:1194" + "source": "BaseExchange.ts:1195" }, "filterMarkets": { - "summary": "Filter a list of markets by criteria.", + "summary": "Filter a list of markets by criteria.\r", "description": "Can filter by string query, structured criteria object, or custom filter function.", "params": [ { @@ -664,10 +664,10 @@ "type": "UnifiedMarket[]", "description": "Filtered array of markets" }, - "source": "BaseExchange.ts:1210" + "source": "BaseExchange.ts:1211" }, "filterEvents": { - "summary": "Filter a list of events by criteria.", + "summary": "Filter a list of events by criteria.\r", "description": "Can filter by string query, structured criteria object, or custom filter function.", "params": [ { @@ -687,10 +687,10 @@ "type": "UnifiedEvent[]", "description": "Filtered array of events" }, - "source": "BaseExchange.ts:1370" + "source": "BaseExchange.ts:1371" }, "watchOrderBook": { - "summary": "Watch order book updates in real-time via WebSocket.", + "summary": "Watch order book updates in real-time via WebSocket.\r", "description": "Returns a promise that resolves with the next order book update. Call repeatedly in a loop to stream updates (CCXT Pro pattern).", "params": [ { @@ -716,11 +716,11 @@ "type": "OrderBook", "description": "Promise that resolves with the current orderbook state" }, - "source": "BaseExchange.ts:1466" + "source": "BaseExchange.ts:1467" }, "watchOrderBooks": { - "summary": "Watch multiple order books simultaneously via WebSocket.", - "description": "Returns a promise that resolves with a record of order book snapshots keyed by ID.\nExchanges with native batch support (e.g. Kalshi) send a single subscribe message\nfor all tickers; others fall back to individual watchOrderBook calls.", + "summary": "Watch multiple order books simultaneously via WebSocket.\r", + "description": "Returns a promise that resolves with a record of order book snapshots keyed by ID.\r\nExchanges with native batch support (e.g. Kalshi) send a single subscribe message\r\nfor all tickers; others fall back to individual watchOrderBook calls.", "params": [ { "name": "outcomeIds", @@ -745,7 +745,7 @@ "type": "Record", "description": "Promise that resolves with order books keyed by ID" }, - "source": "BaseExchange.ts:1479" + "source": "BaseExchange.ts:1480" }, "unwatchOrderBook": { "summary": "Unsubscribe from a previously watched order book stream.", @@ -762,10 +762,10 @@ "type": "void", "description": "Result" }, - "source": "BaseExchange.ts:1507" + "source": "BaseExchange.ts:1508" }, "watchTrades": { - "summary": "Watch trade executions in real-time via WebSocket.", + "summary": "Watch trade executions in real-time via WebSocket.\r", "description": "Returns a promise that resolves with the next trade(s). Call repeatedly in a loop to stream updates (CCXT Pro pattern).", "params": [ { @@ -797,11 +797,11 @@ "type": "Trade[]", "description": "Promise that resolves with recent trades" }, - "source": "BaseExchange.ts:1520" + "source": "BaseExchange.ts:1521" }, "watchAddress": { - "summary": "Stream activity for a public wallet address", - "description": "Returns a promise that resolves with the next activity snapshot whenever a change\nis detected. Call repeatedly in a loop to stream updates (CCXT Pro pattern).", + "summary": "Stream activity for a public wallet address\r", + "description": "Returns a promise that resolves with the next activity snapshot whenever a change\r\nis detected. Call repeatedly in a loop to stream updates (CCXT Pro pattern).", "params": [ { "name": "address", @@ -820,7 +820,7 @@ "type": "SubscribedAddressSnapshot", "description": "Promise that resolves with the latest SubscribedAddressSnapshot snapshot" }, - "source": "BaseExchange.ts:1534" + "source": "BaseExchange.ts:1535" }, "unwatchAddress": { "summary": "Stop watching a previously registered wallet address and release its resource updates.", @@ -837,21 +837,21 @@ "type": "void", "description": "Result" }, - "source": "BaseExchange.ts:1547" + "source": "BaseExchange.ts:1548" }, "close": { - "summary": "Close all WebSocket connections and clean up resources.", + "summary": "Close all WebSocket connections and clean up resources.\r", "description": "Call this when you're done streaming to properly release connections.", "params": [], "returns": { "type": "void", "description": "Result" }, - "source": "BaseExchange.ts:1556" + "source": "BaseExchange.ts:1557" }, "fetchMarketMatches": { - "summary": "Find the same or related market on other venues. Two modes:", - "description": "**Lookup mode** (marketId/slug/url provided): Given a market on one venue, discover\nsemantically equivalent markets across every other venue PMXT ingests.\n\n**Browse mode** (no identifier): Returns all matched market pairs from the catalog.\nSupports query, category, minDifference, and sort params for filtering.", + "summary": "Find the same or related market on other venues. Two modes:\r", + "description": "**Lookup mode** (marketId/slug/url provided): Given a market on one venue, discover\r\nsemantically equivalent markets across every other venue PMXT ingests.\r\n\n**Browse mode** (no identifier): Returns all matched market pairs from the catalog.\r\nSupports query, category, minDifference, and sort params for filtering.", "params": [ { "name": "params", @@ -864,7 +864,7 @@ "type": "MatchResult[]", "description": "Array of matched markets with relation and confidence" }, - "source": "BaseExchange.ts:1570" + "source": "BaseExchange.ts:1571" }, "fetchMatches": { "summary": "fetchMatches", @@ -881,11 +881,11 @@ "type": "MatchResult[]", "description": "Result" }, - "source": "BaseExchange.ts:1586" + "source": "BaseExchange.ts:1587" }, "fetchEventMatches": { - "summary": "Find the same or related event on other venues. Two modes:", - "description": "**Lookup mode** (eventId/slug provided): Given an event on one venue, discover\nsemantically equivalent events across every other venue PMXT ingests.\n\n**Browse mode** (no identifier): Returns all matched event pairs from the catalog.\nSupports query and category params for filtering.", + "summary": "Find the same or related event on other venues. Two modes:\r", + "description": "**Lookup mode** (eventId/slug provided): Given an event on one venue, discover\r\nsemantically equivalent events across every other venue PMXT ingests.\r\n\n**Browse mode** (no identifier): Returns all matched event pairs from the catalog.\r\nSupports query and category params for filtering.", "params": [ { "name": "params", @@ -898,7 +898,7 @@ "type": "EventMatchResult[]", "description": "Array of matched events with market-level match details" }, - "source": "BaseExchange.ts:1594" + "source": "BaseExchange.ts:1595" }, "compareMarketPrices": { "summary": "Compare live prices for the same market across venues. Finds identity matches and returns side-by-side best bid/ask prices so you can spot price differences at a glance.", @@ -906,7 +906,7 @@ "params": [ { "name": "params", - "type": "FetchMatchesParams", + "type": "CompareMarketPricesParams", "optional": false, "description": "Match filter parameters (uses relation: 'identity' internally)" } @@ -915,10 +915,10 @@ "type": "PriceComparison[]", "description": "Array of price comparisons across venues" }, - "source": "BaseExchange.ts:1610" + "source": "BaseExchange.ts:1611" }, "fetchRelatedMarkets": { - "summary": "Find related markets across venues. Discovers subset/superset market relationships", + "summary": "Find related markets across venues. Discovers subset/superset market relationships\r", "description": "where one market's outcome implies another, with live prices.", "params": [ { @@ -932,7 +932,7 @@ "type": "PriceComparison[]", "description": "Array of subset/superset matches with live prices" }, - "source": "BaseExchange.ts:1620" + "source": "BaseExchange.ts:1621" }, "fetchMatchedMarkets": { "summary": "fetchMatchedMarkets", @@ -949,7 +949,7 @@ "type": "MatchedMarketPair[]", "description": "Result" }, - "source": "BaseExchange.ts:1631" + "source": "BaseExchange.ts:1632" }, "fetchMatchedPrices": { "summary": "fetchMatchedPrices", @@ -966,7 +966,7 @@ "type": "MatchedPricePair[]", "description": "Array of matched market pairs with prices from each venue" }, - "source": "BaseExchange.ts:1639" + "source": "BaseExchange.ts:1640" }, "fetchHedges": { "summary": "fetchHedges", @@ -983,7 +983,7 @@ "type": "PriceComparison[]", "description": "Array of subset/superset matches with live prices" }, - "source": "BaseExchange.ts:1650" + "source": "BaseExchange.ts:1651" }, "fetchArbitrage": { "summary": "fetchArbitrage", @@ -1000,10 +1000,10 @@ "type": "ArbitrageOpportunity[]", "description": "Array of arbitrage opportunities sorted by spread" }, - "source": "BaseExchange.ts:1660" + "source": "BaseExchange.ts:1661" }, "watchPrices": { - "summary": "Watch AMM price updates for a market address (Limitless only).", + "summary": "Watch AMM price updates for a market address (Limitless only).\r", "description": "Requires WebSocket connection.", "params": [ { @@ -1027,7 +1027,7 @@ "source": "index.ts:492" }, "watchUserPositions": { - "summary": "Watch user positions in real-time (Limitless only).", + "summary": "Watch user positions in real-time (Limitless only).\r", "description": "Requires API key authentication.", "params": [ { @@ -1045,7 +1045,7 @@ "source": "index.ts:504" }, "watchUserTransactions": { - "summary": "Watch user transactions in real-time (Limitless only).", + "summary": "Watch user transactions in real-time (Limitless only).\r", "description": "Requires API key authentication.", "params": [ { @@ -1063,8 +1063,8 @@ "source": "index.ts:516" }, "initAuth": { - "summary": "Initialize L2 API credentials for implicit API signing.", - "description": "Must be called before using private implicit API endpoints if only\na privateKey was provided (not apiKey/apiSecret/passphrase).", + "summary": "Initialize L2 API credentials for implicit API signing.\r", + "description": "Must be called before using private implicit API endpoints if only\r\na privateKey was provided (not apiKey/apiSecret/passphrase).", "params": [], "returns": { "type": "void", @@ -1074,8 +1074,8 @@ "source": "index.ts:144" }, "preWarmMarket": { - "summary": "Pre-warm the SDK's internal caches for a market outcome.", - "description": "Fetches tick size, fee rate, and neg-risk in parallel so that subsequent\n`createOrder` calls skip those lookups and hit only `POST /order`.\nCall this when you start watching a market.", + "summary": "Pre-warm the SDK's internal caches for a market outcome.\r", + "description": "Fetches tick size, fee rate, and neg-risk in parallel so that subsequent\r\n`createOrder` calls skip those lookups and hit only `POST /order`.\r\nCall this when you start watching a market.", "params": [ { "name": "outcomeId", @@ -1128,8 +1128,8 @@ "source": "index.ts:171" }, "watchAllOrderBooks": { - "summary": "Stream all orderbook updates across venues via the hosted WebSocket API.", - "description": "Returns a promise that resolves with the next book event.\nCall repeatedly in a loop to stream updates (CCXT Pro pattern).\nRequires hosted mode (`pmxtApiKey` set).", + "summary": "Stream all orderbook updates across venues via the hosted WebSocket API.\r", + "description": "Returns a promise that resolves with the next book event.\r\nCall repeatedly in a loop to stream updates (CCXT Pro pattern).\r\nRequires hosted mode (`pmxtApiKey` set).", "params": [ { "name": "venues", @@ -1142,7 +1142,7 @@ "type": "FirehoseEvent", "description": "Next event with source, symbol, and orderbook" }, - "source": "client.ts:1973" + "source": "client.ts:2032" }, "firehose": { "summary": "Stream all orderbook updates across venues.", @@ -1159,7 +1159,7 @@ "type": "FirehoseEvent", "description": "Next event with source, symbol, and orderbook" }, - "source": "client.ts:2014" + "source": "client.ts:2073" } }, "workflowExample": { diff --git a/core/src/server/openapi.yaml b/core/src/server/openapi.yaml index 64e1dbb0..43b9ee04 100644 --- a/core/src/server/openapi.yaml +++ b/core/src/server/openapi.yaml @@ -2042,7 +2042,7 @@ paths: type: array maxItems: 1 items: - $ref: '#/components/schemas/FetchMarketMatchesParams' + type: object minItems: 1 credentials: $ref: '#/components/schemas/ExchangeCredentials' diff --git a/docs/api-reference/openapi.json b/docs/api-reference/openapi.json index 21413570..7756d9c6 100644 --- a/docs/api-reference/openapi.json +++ b/docs/api-reference/openapi.json @@ -3,7 +3,7 @@ "info": { "title": "PMXT Hosted API", "description": "One API for supported prediction markets. Hosted catalog search in under 10ms, a unified schema for supported venues, and venue-native trading where venues expose writes.", - "version": "2.51.4" + "version": "2.17.1" }, "servers": [ { @@ -274,7 +274,32 @@ "operationId": "fetchMarkets", "parameters": [ { - "$ref": "#/components/parameters/ExchangeParam" + "in": "path", + "name": "exchange", + "schema": { + "type": "string", + "enum": [ + "polymarket", + "kalshi", + "kalshi-demo", + "limitless", + "probable", + "baozi", + "myriad", + "opinion", + "metaculus", + "smarkets", + "polymarket_us", + "hyperliquid", + "gemini-titan", + "suibets", + "rain", + "hunch", + "router" + ] + }, + "required": true, + "description": "The prediction market exchange to target." }, { "in": "query", @@ -1083,7 +1108,32 @@ "operationId": "fetchEvents", "parameters": [ { - "$ref": "#/components/parameters/ExchangeParam" + "in": "path", + "name": "exchange", + "schema": { + "type": "string", + "enum": [ + "polymarket", + "kalshi", + "kalshi-demo", + "limitless", + "probable", + "baozi", + "myriad", + "opinion", + "metaculus", + "smarkets", + "polymarket_us", + "hyperliquid", + "gemini-titan", + "suibets", + "rain", + "hunch", + "router" + ] + }, + "required": true, + "description": "The prediction market exchange to target." }, { "in": "query", @@ -1456,7 +1506,22 @@ "operationId": "fetchSeries", "parameters": [ { - "$ref": "#/components/parameters/ExchangeParam" + "in": "path", + "name": "exchange", + "schema": { + "type": "string", + "enum": [ + "polymarket", + "kalshi", + "kalshi-demo", + "opinion", + "polymarket_us", + "gemini-titan", + "router" + ] + }, + "required": true, + "description": "The prediction market exchange to target." } ], "responses": { @@ -1494,11 +1559,6 @@ "label": "Polymarket", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Polymarket(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_series()" }, - { - "lang": "python", - "label": "Limitless", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Limitless(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_series()" - }, { "lang": "python", "label": "Kalshi", @@ -1509,66 +1569,21 @@ "label": "KalshiDemo", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.KalshiDemo(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_series()" }, - { - "lang": "python", - "label": "Probable", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Probable(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_series()" - }, - { - "lang": "python", - "label": "Baozi", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Baozi(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_series()" - }, - { - "lang": "python", - "label": "Myriad", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Myriad(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_series()" - }, { "lang": "python", "label": "Opinion", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Opinion(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_series()" }, - { - "lang": "python", - "label": "Metaculus", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Metaculus(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_series()" - }, - { - "lang": "python", - "label": "Smarkets", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Smarkets(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_series()" - }, { "lang": "python", "label": "PolymarketUS", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.PolymarketUS(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_series()" }, - { - "lang": "python", - "label": "Hyperliquid", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Hyperliquid(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_series()" - }, { "lang": "python", "label": "GeminiTitan", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.GeminiTitan(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_series()" }, - { - "lang": "python", - "label": "SuiBets", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.SuiBets(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_series()" - }, - { - "lang": "python", - "label": "Rain", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Rain(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_series()" - }, - { - "lang": "python", - "label": "Hunch", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Hunch(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_series()" - }, { "lang": "python", "label": "Router", @@ -1579,11 +1594,6 @@ "label": "Polymarket", "source": "import { Polymarket } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Polymarket({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchSeries();" }, - { - "lang": "javascript", - "label": "Limitless", - "source": "import { Limitless } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Limitless({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchSeries();" - }, { "lang": "javascript", "label": "Kalshi", @@ -1594,66 +1604,21 @@ "label": "KalshiDemo", "source": "import { KalshiDemo } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new KalshiDemo({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchSeries();" }, - { - "lang": "javascript", - "label": "Probable", - "source": "import { Probable } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Probable({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchSeries();" - }, - { - "lang": "javascript", - "label": "Baozi", - "source": "import { Baozi } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Baozi({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchSeries();" - }, - { - "lang": "javascript", - "label": "Myriad", - "source": "import { Myriad } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Myriad({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchSeries();" - }, { "lang": "javascript", "label": "Opinion", "source": "import { Opinion } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Opinion({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchSeries();" }, - { - "lang": "javascript", - "label": "Metaculus", - "source": "import { Metaculus } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Metaculus({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchSeries();" - }, - { - "lang": "javascript", - "label": "Smarkets", - "source": "import { Smarkets } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Smarkets({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchSeries();" - }, { "lang": "javascript", "label": "PolymarketUS", "source": "import { PolymarketUS } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new PolymarketUS({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchSeries();" }, - { - "lang": "javascript", - "label": "Hyperliquid", - "source": "import { Hyperliquid } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Hyperliquid({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchSeries();" - }, { "lang": "javascript", "label": "GeminiTitan", "source": "import { GeminiTitan } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new GeminiTitan({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchSeries();" }, - { - "lang": "javascript", - "label": "SuiBets", - "source": "import { SuiBets } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new SuiBets({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchSeries();" - }, - { - "lang": "javascript", - "label": "Rain", - "source": "import { Rain } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Rain({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchSeries();" - }, - { - "lang": "javascript", - "label": "Hunch", - "source": "import { Hunch } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Hunch({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchSeries();" - }, { "lang": "javascript", "label": "Router", @@ -2372,7 +2337,26 @@ "operationId": "fetchOHLCV", "parameters": [ { - "$ref": "#/components/parameters/ExchangeParam" + "in": "path", + "name": "exchange", + "schema": { + "type": "string", + "enum": [ + "polymarket", + "kalshi", + "kalshi-demo", + "limitless", + "probable", + "baozi", + "myriad", + "opinion", + "hyperliquid", + "rain", + "hunch" + ] + }, + "required": true, + "description": "The prediction market exchange to target." }, { "in": "query", @@ -2491,36 +2475,11 @@ "label": "Opinion", "source": "import pmxt\nfrom datetime import datetime, timezone\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Opinion(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_ohlcv(\n \"67890\",\n resolution=\"1h\",\n start=datetime(2026, 1, 1, tzinfo=timezone.utc),\n end=datetime(2026, 1, 31, tzinfo=timezone.utc),\n limit=10,\n)" }, - { - "lang": "python", - "label": "Metaculus", - "source": "import pmxt\nfrom datetime import datetime, timezone\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Metaculus(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_ohlcv(\n \"67890\",\n resolution=\"1h\",\n start=datetime(2026, 1, 1, tzinfo=timezone.utc),\n end=datetime(2026, 1, 31, tzinfo=timezone.utc),\n limit=10,\n)" - }, - { - "lang": "python", - "label": "Smarkets", - "source": "import pmxt\nfrom datetime import datetime, timezone\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Smarkets(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_ohlcv(\n \"67890\",\n resolution=\"1h\",\n start=datetime(2026, 1, 1, tzinfo=timezone.utc),\n end=datetime(2026, 1, 31, tzinfo=timezone.utc),\n limit=10,\n)" - }, - { - "lang": "python", - "label": "PolymarketUS", - "source": "import pmxt\nfrom datetime import datetime, timezone\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.PolymarketUS(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_ohlcv(\n \"67890\",\n resolution=\"1h\",\n start=datetime(2026, 1, 1, tzinfo=timezone.utc),\n end=datetime(2026, 1, 31, tzinfo=timezone.utc),\n limit=10,\n)" - }, { "lang": "python", "label": "Hyperliquid", "source": "import pmxt\nfrom datetime import datetime, timezone\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Hyperliquid(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_ohlcv(\n \"67890\",\n resolution=\"1h\",\n start=datetime(2026, 1, 1, tzinfo=timezone.utc),\n end=datetime(2026, 1, 31, tzinfo=timezone.utc),\n limit=10,\n)" }, - { - "lang": "python", - "label": "GeminiTitan", - "source": "import pmxt\nfrom datetime import datetime, timezone\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.GeminiTitan(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_ohlcv(\n \"67890\",\n resolution=\"1h\",\n start=datetime(2026, 1, 1, tzinfo=timezone.utc),\n end=datetime(2026, 1, 31, tzinfo=timezone.utc),\n limit=10,\n)" - }, - { - "lang": "python", - "label": "SuiBets", - "source": "import pmxt\nfrom datetime import datetime, timezone\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.SuiBets(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_ohlcv(\n \"67890\",\n resolution=\"1h\",\n start=datetime(2026, 1, 1, tzinfo=timezone.utc),\n end=datetime(2026, 1, 31, tzinfo=timezone.utc),\n limit=10,\n)" - }, { "lang": "python", "label": "Rain", @@ -2571,36 +2530,11 @@ "label": "Opinion", "source": "import { Opinion } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Opinion({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOHLCV(\n \"67890\",\n {\n resolution: \"1h\",\n start: new Date(\"2026-01-01T00:00:00Z\"),\n end: new Date(\"2026-01-31T00:00:00Z\"),\n limit: 10,\n },\n);" }, - { - "lang": "javascript", - "label": "Metaculus", - "source": "import { Metaculus } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Metaculus({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOHLCV(\n \"67890\",\n {\n resolution: \"1h\",\n start: new Date(\"2026-01-01T00:00:00Z\"),\n end: new Date(\"2026-01-31T00:00:00Z\"),\n limit: 10,\n },\n);" - }, - { - "lang": "javascript", - "label": "Smarkets", - "source": "import { Smarkets } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Smarkets({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOHLCV(\n \"67890\",\n {\n resolution: \"1h\",\n start: new Date(\"2026-01-01T00:00:00Z\"),\n end: new Date(\"2026-01-31T00:00:00Z\"),\n limit: 10,\n },\n);" - }, - { - "lang": "javascript", - "label": "PolymarketUS", - "source": "import { PolymarketUS } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new PolymarketUS({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOHLCV(\n \"67890\",\n {\n resolution: \"1h\",\n start: new Date(\"2026-01-01T00:00:00Z\"),\n end: new Date(\"2026-01-31T00:00:00Z\"),\n limit: 10,\n },\n);" - }, { "lang": "javascript", "label": "Hyperliquid", "source": "import { Hyperliquid } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Hyperliquid({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOHLCV(\n \"67890\",\n {\n resolution: \"1h\",\n start: new Date(\"2026-01-01T00:00:00Z\"),\n end: new Date(\"2026-01-31T00:00:00Z\"),\n limit: 10,\n },\n);" }, - { - "lang": "javascript", - "label": "GeminiTitan", - "source": "import { GeminiTitan } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new GeminiTitan({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOHLCV(\n \"67890\",\n {\n resolution: \"1h\",\n start: new Date(\"2026-01-01T00:00:00Z\"),\n end: new Date(\"2026-01-31T00:00:00Z\"),\n limit: 10,\n },\n);" - }, - { - "lang": "javascript", - "label": "SuiBets", - "source": "import { SuiBets } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new SuiBets({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOHLCV(\n \"67890\",\n {\n resolution: \"1h\",\n start: new Date(\"2026-01-01T00:00:00Z\"),\n end: new Date(\"2026-01-31T00:00:00Z\"),\n limit: 10,\n },\n);" - }, { "lang": "javascript", "label": "Rain", @@ -2620,7 +2554,31 @@ "operationId": "fetchOrderBook", "parameters": [ { - "$ref": "#/components/parameters/ExchangeParam" + "in": "path", + "name": "exchange", + "schema": { + "type": "string", + "enum": [ + "polymarket", + "kalshi", + "kalshi-demo", + "limitless", + "probable", + "baozi", + "myriad", + "opinion", + "smarkets", + "polymarket_us", + "hyperliquid", + "gemini-titan", + "suibets", + "rain", + "hunch", + "router" + ] + }, + "required": true, + "description": "The prediction market exchange to target." }, { "in": "query", @@ -2746,11 +2704,6 @@ "label": "Opinion", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Opinion(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order_book(\n \"67890\",\n limit=10,\n params={\"outcome\": \"yes\"},\n)" }, - { - "lang": "python", - "label": "Metaculus", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Metaculus(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order_book(\n \"67890\",\n limit=10,\n params={\"outcome\": \"yes\"},\n)" - }, { "lang": "python", "label": "Smarkets", @@ -2826,11 +2779,6 @@ "label": "Opinion", "source": "import { Opinion } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Opinion({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrderBook(\n \"67890\",\n 10,\n { outcome: \"yes\" },\n);" }, - { - "lang": "javascript", - "label": "Metaculus", - "source": "import { Metaculus } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Metaculus({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrderBook(\n \"67890\",\n 10,\n { outcome: \"yes\" },\n);" - }, { "lang": "javascript", "label": "Smarkets", @@ -2875,7 +2823,19 @@ "operationId": "fetchOrderBooks", "parameters": [ { - "$ref": "#/components/parameters/ExchangeParam" + "in": "path", + "name": "exchange", + "schema": { + "type": "string", + "enum": [ + "polymarket", + "kalshi", + "kalshi-demo", + "hyperliquid" + ] + }, + "required": true, + "description": "The prediction market exchange to target." } ], "requestBody": { @@ -2942,11 +2902,6 @@ "label": "Polymarket", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Polymarket(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order_books([\"67890\"])" }, - { - "lang": "python", - "label": "Limitless", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Limitless(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order_books([\"67890\"])" - }, { "lang": "python", "label": "Kalshi", @@ -2957,76 +2912,16 @@ "label": "KalshiDemo", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.KalshiDemo(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order_books([\"67890\"])" }, - { - "lang": "python", - "label": "Probable", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Probable(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order_books([\"67890\"])" - }, - { - "lang": "python", - "label": "Baozi", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Baozi(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order_books([\"67890\"])" - }, - { - "lang": "python", - "label": "Myriad", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Myriad(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order_books([\"67890\"])" - }, - { - "lang": "python", - "label": "Opinion", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Opinion(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order_books([\"67890\"])" - }, - { - "lang": "python", - "label": "Metaculus", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Metaculus(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order_books([\"67890\"])" - }, - { - "lang": "python", - "label": "Smarkets", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Smarkets(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order_books([\"67890\"])" - }, - { - "lang": "python", - "label": "PolymarketUS", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.PolymarketUS(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order_books([\"67890\"])" - }, { "lang": "python", "label": "Hyperliquid", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Hyperliquid(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order_books([\"67890\"])" }, - { - "lang": "python", - "label": "GeminiTitan", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.GeminiTitan(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order_books([\"67890\"])" - }, - { - "lang": "python", - "label": "SuiBets", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.SuiBets(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order_books([\"67890\"])" - }, - { - "lang": "python", - "label": "Rain", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Rain(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order_books([\"67890\"])" - }, - { - "lang": "python", - "label": "Hunch", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Hunch(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order_books([\"67890\"])" - }, { "lang": "javascript", "label": "Polymarket", "source": "import { Polymarket } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Polymarket({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrderBooks([\"67890\"]);" }, - { - "lang": "javascript", - "label": "Limitless", - "source": "import { Limitless } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Limitless({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrderBooks([\"67890\"]);" - }, { "lang": "javascript", "label": "Kalshi", @@ -3039,74 +2934,38 @@ }, { "lang": "javascript", - "label": "Probable", - "source": "import { Probable } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Probable({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrderBooks([\"67890\"]);" - }, - { - "lang": "javascript", - "label": "Baozi", - "source": "import { Baozi } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Baozi({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrderBooks([\"67890\"]);" - }, - { - "lang": "javascript", - "label": "Myriad", - "source": "import { Myriad } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Myriad({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrderBooks([\"67890\"]);" - }, - { - "lang": "javascript", - "label": "Opinion", - "source": "import { Opinion } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Opinion({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrderBooks([\"67890\"]);" - }, - { - "lang": "javascript", - "label": "Metaculus", - "source": "import { Metaculus } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Metaculus({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrderBooks([\"67890\"]);" - }, - { - "lang": "javascript", - "label": "Smarkets", - "source": "import { Smarkets } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Smarkets({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrderBooks([\"67890\"]);" - }, - { - "lang": "javascript", - "label": "PolymarketUS", - "source": "import { PolymarketUS } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new PolymarketUS({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrderBooks([\"67890\"]);" - }, - { - "lang": "javascript", - "label": "Hyperliquid", - "source": "import { Hyperliquid } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Hyperliquid({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrderBooks([\"67890\"]);" - }, - { - "lang": "javascript", - "label": "GeminiTitan", - "source": "import { GeminiTitan } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new GeminiTitan({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrderBooks([\"67890\"]);" - }, - { - "lang": "javascript", - "label": "SuiBets", - "source": "import { SuiBets } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new SuiBets({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrderBooks([\"67890\"]);" - }, - { - "lang": "javascript", - "label": "Rain", - "source": "import { Rain } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Rain({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrderBooks([\"67890\"]);" - }, - { - "lang": "javascript", - "label": "Hunch", - "source": "import { Hunch } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Hunch({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrderBooks([\"67890\"]);" - } - ] - } - }, - "/api/{exchange}/fetchTrades": { - "get": { - "summary": "Fetch Trades", - "operationId": "fetchTrades", - "parameters": [ - { - "$ref": "#/components/parameters/ExchangeParam" + "label": "Hyperliquid", + "source": "import { Hyperliquid } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Hyperliquid({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrderBooks([\"67890\"]);" + } + ] + } + }, + "/api/{exchange}/fetchTrades": { + "get": { + "summary": "Fetch Trades", + "operationId": "fetchTrades", + "parameters": [ + { + "in": "path", + "name": "exchange", + "schema": { + "type": "string", + "enum": [ + "polymarket", + "kalshi", + "kalshi-demo", + "limitless", + "probable", + "baozi", + "myriad", + "smarkets", + "hyperliquid", + "rain", + "hunch" + ] + }, + "required": true, + "description": "The prediction market exchange to target." }, { "in": "query", @@ -3211,41 +3070,16 @@ "label": "Myriad", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Myriad(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_trades(\n \"67890\",\n start=\"2026-01-01T00:00:00Z\",\n end=\"2026-01-31T00:00:00Z\",\n limit=10,\n)" }, - { - "lang": "python", - "label": "Opinion", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Opinion(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_trades(\n \"67890\",\n start=\"2026-01-01T00:00:00Z\",\n end=\"2026-01-31T00:00:00Z\",\n limit=10,\n)" - }, - { - "lang": "python", - "label": "Metaculus", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Metaculus(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_trades(\n \"67890\",\n start=\"2026-01-01T00:00:00Z\",\n end=\"2026-01-31T00:00:00Z\",\n limit=10,\n)" - }, { "lang": "python", "label": "Smarkets", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Smarkets(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_trades(\n \"67890\",\n start=\"2026-01-01T00:00:00Z\",\n end=\"2026-01-31T00:00:00Z\",\n limit=10,\n)" }, - { - "lang": "python", - "label": "PolymarketUS", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.PolymarketUS(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_trades(\n \"67890\",\n start=\"2026-01-01T00:00:00Z\",\n end=\"2026-01-31T00:00:00Z\",\n limit=10,\n)" - }, { "lang": "python", "label": "Hyperliquid", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Hyperliquid(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_trades(\n \"67890\",\n start=\"2026-01-01T00:00:00Z\",\n end=\"2026-01-31T00:00:00Z\",\n limit=10,\n)" }, - { - "lang": "python", - "label": "GeminiTitan", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.GeminiTitan(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_trades(\n \"67890\",\n start=\"2026-01-01T00:00:00Z\",\n end=\"2026-01-31T00:00:00Z\",\n limit=10,\n)" - }, - { - "lang": "python", - "label": "SuiBets", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.SuiBets(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_trades(\n \"67890\",\n start=\"2026-01-01T00:00:00Z\",\n end=\"2026-01-31T00:00:00Z\",\n limit=10,\n)" - }, { "lang": "python", "label": "Rain", @@ -3291,41 +3125,16 @@ "label": "Myriad", "source": "import { Myriad } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Myriad({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchTrades(\n \"67890\",\n {\n start: new Date(\"2026-01-01T00:00:00Z\"),\n end: new Date(\"2026-01-31T00:00:00Z\"),\n limit: 10,\n },\n);" }, - { - "lang": "javascript", - "label": "Opinion", - "source": "import { Opinion } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Opinion({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchTrades(\n \"67890\",\n {\n start: new Date(\"2026-01-01T00:00:00Z\"),\n end: new Date(\"2026-01-31T00:00:00Z\"),\n limit: 10,\n },\n);" - }, - { - "lang": "javascript", - "label": "Metaculus", - "source": "import { Metaculus } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Metaculus({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchTrades(\n \"67890\",\n {\n start: new Date(\"2026-01-01T00:00:00Z\"),\n end: new Date(\"2026-01-31T00:00:00Z\"),\n limit: 10,\n },\n);" - }, { "lang": "javascript", "label": "Smarkets", "source": "import { Smarkets } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Smarkets({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchTrades(\n \"67890\",\n {\n start: new Date(\"2026-01-01T00:00:00Z\"),\n end: new Date(\"2026-01-31T00:00:00Z\"),\n limit: 10,\n },\n);" }, - { - "lang": "javascript", - "label": "PolymarketUS", - "source": "import { PolymarketUS } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new PolymarketUS({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchTrades(\n \"67890\",\n {\n start: new Date(\"2026-01-01T00:00:00Z\"),\n end: new Date(\"2026-01-31T00:00:00Z\"),\n limit: 10,\n },\n);" - }, { "lang": "javascript", "label": "Hyperliquid", "source": "import { Hyperliquid } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Hyperliquid({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchTrades(\n \"67890\",\n {\n start: new Date(\"2026-01-01T00:00:00Z\"),\n end: new Date(\"2026-01-31T00:00:00Z\"),\n limit: 10,\n },\n);" }, - { - "lang": "javascript", - "label": "GeminiTitan", - "source": "import { GeminiTitan } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new GeminiTitan({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchTrades(\n \"67890\",\n {\n start: new Date(\"2026-01-01T00:00:00Z\"),\n end: new Date(\"2026-01-31T00:00:00Z\"),\n limit: 10,\n },\n);" - }, - { - "lang": "javascript", - "label": "SuiBets", - "source": "import { SuiBets } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new SuiBets({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchTrades(\n \"67890\",\n {\n start: new Date(\"2026-01-01T00:00:00Z\"),\n end: new Date(\"2026-01-31T00:00:00Z\"),\n limit: 10,\n },\n);" - }, { "lang": "javascript", "label": "Rain", @@ -3345,7 +3154,30 @@ "operationId": "createOrder", "parameters": [ { - "$ref": "#/components/parameters/ExchangeParam" + "in": "path", + "name": "exchange", + "schema": { + "type": "string", + "enum": [ + "polymarket", + "kalshi", + "kalshi-demo", + "limitless", + "probable", + "baozi", + "myriad", + "opinion", + "metaculus", + "smarkets", + "polymarket_us", + "hyperliquid", + "gemini-titan", + "rain", + "hunch" + ] + }, + "required": true, + "description": "The prediction market exchange to target." } ], "requestBody": { @@ -3473,11 +3305,6 @@ "label": "GeminiTitan", "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.GeminiTitan(\n api_key=\"YOUR_API_KEY\",\n api_secret=\"YOUR_API_SECRET\",\n)\nresult = exchange.create_order(\n market_id=\"12345\",\n outcome_id=\"67890\",\n side=\"buy\",\n type=\"limit\",\n amount=10,\n price=0.55,\n)" }, - { - "lang": "python", - "label": "SuiBets", - "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.SuiBets()\nresult = exchange.create_order(\n market_id=\"12345\",\n outcome_id=\"67890\",\n side=\"buy\",\n type=\"limit\",\n amount=10,\n price=0.55,\n)" - }, { "lang": "python", "label": "Rain", @@ -3553,11 +3380,6 @@ "label": "GeminiTitan", "source": "import { GeminiTitan } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new GeminiTitan({\n apiKey: \"YOUR_API_KEY\",\n apiSecret: \"YOUR_API_SECRET\",\n});\nconst result = await exchange.createOrder({\n marketId: \"12345\",\n outcomeId: \"67890\",\n side: \"buy\",\n type: \"limit\",\n amount: 10,\n price: 0.55,\n});" }, - { - "lang": "javascript", - "label": "SuiBets", - "source": "import { SuiBets } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new SuiBets();\nconst result = await exchange.createOrder({\n marketId: \"12345\",\n outcomeId: \"67890\",\n side: \"buy\",\n type: \"limit\",\n amount: 10,\n price: 0.55,\n});" - }, { "lang": "javascript", "label": "Rain", @@ -3577,7 +3399,24 @@ "operationId": "buildOrder", "parameters": [ { - "$ref": "#/components/parameters/ExchangeParam" + "in": "path", + "name": "exchange", + "schema": { + "type": "string", + "enum": [ + "polymarket", + "kalshi", + "kalshi-demo", + "opinion", + "smarkets", + "polymarket_us", + "hyperliquid", + "gemini-titan", + "rain" + ] + }, + "required": true, + "description": "The prediction market exchange to target." } ], "requestBody": { @@ -3645,11 +3484,6 @@ "label": "Polymarket", "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.Polymarket(\n api_key=\"YOUR_API_KEY\",\n api_secret=\"YOUR_API_SECRET\",\n passphrase=\"YOUR_PASSPHRASE\",\n private_key=\"YOUR_PRIVATE_KEY\",\n proxy_address=\"YOUR_PROXY_ADDRESS\",\n signature_type=\"gnosis-safe\",\n)\nresult = exchange.build_order(\n market_id=\"12345\",\n outcome_id=\"67890\",\n side=\"buy\",\n type=\"limit\",\n amount=10,\n price=0.55,\n)" }, - { - "lang": "python", - "label": "Limitless", - "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.Limitless(\n api_key=\"YOUR_API_KEY\",\n api_secret=\"YOUR_API_SECRET\",\n passphrase=\"YOUR_PASSPHRASE\",\n private_key=\"YOUR_PRIVATE_KEY\",\n)\nresult = exchange.build_order(\n market_id=\"12345\",\n outcome_id=\"67890\",\n side=\"buy\",\n type=\"limit\",\n amount=10,\n price=0.55,\n)" - }, { "lang": "python", "label": "Kalshi", @@ -3660,31 +3494,11 @@ "label": "KalshiDemo", "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.KalshiDemo(\n api_key=\"YOUR_API_KEY\",\n private_key=\"YOUR_PRIVATE_KEY\",\n)\nresult = exchange.build_order(\n market_id=\"12345\",\n outcome_id=\"67890\",\n side=\"buy\",\n type=\"limit\",\n amount=10,\n price=0.55,\n)" }, - { - "lang": "python", - "label": "Probable", - "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.Probable(\n api_key=\"YOUR_API_KEY\",\n api_secret=\"YOUR_API_SECRET\",\n passphrase=\"YOUR_PASSPHRASE\",\n private_key=\"YOUR_PRIVATE_KEY\",\n)\nresult = exchange.build_order(\n market_id=\"12345\",\n outcome_id=\"67890\",\n side=\"buy\",\n type=\"limit\",\n amount=10,\n price=0.55,\n)" - }, - { - "lang": "python", - "label": "Baozi", - "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.Baozi(\n private_key=\"YOUR_PRIVATE_KEY\",\n)\nresult = exchange.build_order(\n market_id=\"12345\",\n outcome_id=\"67890\",\n side=\"buy\",\n type=\"limit\",\n amount=10,\n price=0.55,\n)" - }, - { - "lang": "python", - "label": "Myriad", - "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.Myriad(\n api_key=\"YOUR_API_KEY\",\n wallet_address=\"YOUR_WALLET_ADDRESS\",\n)\nresult = exchange.build_order(\n market_id=\"12345\",\n outcome_id=\"67890\",\n side=\"buy\",\n type=\"limit\",\n amount=10,\n price=0.55,\n)" - }, { "lang": "python", "label": "Opinion", "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.Opinion(\n api_key=\"YOUR_API_KEY\",\n private_key=\"YOUR_PRIVATE_KEY\",\n proxy_address=\"YOUR_PROXY_ADDRESS\",\n)\nresult = exchange.build_order(\n market_id=\"12345\",\n outcome_id=\"67890\",\n side=\"buy\",\n type=\"limit\",\n amount=10,\n price=0.55,\n)" }, - { - "lang": "python", - "label": "Metaculus", - "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.Metaculus(\n api_token=\"YOUR_API_TOKEN\",\n)\nresult = exchange.build_order(\n market_id=\"12345\",\n outcome_id=\"67890\",\n side=\"buy\",\n type=\"limit\",\n amount=10,\n price=0.55,\n)" - }, { "lang": "python", "label": "Smarkets", @@ -3705,31 +3519,16 @@ "label": "GeminiTitan", "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.GeminiTitan(\n api_key=\"YOUR_API_KEY\",\n api_secret=\"YOUR_API_SECRET\",\n)\nresult = exchange.build_order(\n market_id=\"12345\",\n outcome_id=\"67890\",\n side=\"buy\",\n type=\"limit\",\n amount=10,\n price=0.55,\n)" }, - { - "lang": "python", - "label": "SuiBets", - "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.SuiBets()\nresult = exchange.build_order(\n market_id=\"12345\",\n outcome_id=\"67890\",\n side=\"buy\",\n type=\"limit\",\n amount=10,\n price=0.55,\n)" - }, { "lang": "python", "label": "Rain", "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.Rain(\n private_key=\"YOUR_PRIVATE_KEY\",\n)\nresult = exchange.build_order(\n market_id=\"12345\",\n outcome_id=\"67890\",\n side=\"buy\",\n type=\"limit\",\n amount=10,\n price=0.55,\n)" }, - { - "lang": "python", - "label": "Hunch", - "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.Hunch(\n private_key=\"YOUR_PRIVATE_KEY\",\n)\nresult = exchange.build_order(\n market_id=\"12345\",\n outcome_id=\"67890\",\n side=\"buy\",\n type=\"limit\",\n amount=10,\n price=0.55,\n)" - }, { "lang": "javascript", "label": "Polymarket", "source": "import { Polymarket } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new Polymarket({\n apiKey: \"YOUR_API_KEY\",\n apiSecret: \"YOUR_API_SECRET\",\n passphrase: \"YOUR_PASSPHRASE\",\n privateKey: \"YOUR_PRIVATE_KEY\",\n proxyAddress: \"YOUR_PROXY_ADDRESS\",\n signatureType: \"gnosis-safe\",\n});\nconst result = await exchange.buildOrder({\n marketId: \"12345\",\n outcomeId: \"67890\",\n side: \"buy\",\n type: \"limit\",\n amount: 10,\n price: 0.55,\n});" }, - { - "lang": "javascript", - "label": "Limitless", - "source": "import { Limitless } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new Limitless({\n apiKey: \"YOUR_API_KEY\",\n apiSecret: \"YOUR_API_SECRET\",\n passphrase: \"YOUR_PASSPHRASE\",\n privateKey: \"YOUR_PRIVATE_KEY\",\n});\nconst result = await exchange.buildOrder({\n marketId: \"12345\",\n outcomeId: \"67890\",\n side: \"buy\",\n type: \"limit\",\n amount: 10,\n price: 0.55,\n});" - }, { "lang": "javascript", "label": "Kalshi", @@ -3740,31 +3539,11 @@ "label": "KalshiDemo", "source": "import { KalshiDemo } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new KalshiDemo({\n apiKey: \"YOUR_API_KEY\",\n privateKey: \"YOUR_PRIVATE_KEY\",\n});\nconst result = await exchange.buildOrder({\n marketId: \"12345\",\n outcomeId: \"67890\",\n side: \"buy\",\n type: \"limit\",\n amount: 10,\n price: 0.55,\n});" }, - { - "lang": "javascript", - "label": "Probable", - "source": "import { Probable } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new Probable({\n apiKey: \"YOUR_API_KEY\",\n apiSecret: \"YOUR_API_SECRET\",\n passphrase: \"YOUR_PASSPHRASE\",\n privateKey: \"YOUR_PRIVATE_KEY\",\n});\nconst result = await exchange.buildOrder({\n marketId: \"12345\",\n outcomeId: \"67890\",\n side: \"buy\",\n type: \"limit\",\n amount: 10,\n price: 0.55,\n});" - }, - { - "lang": "javascript", - "label": "Baozi", - "source": "import { Baozi } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new Baozi({\n privateKey: \"YOUR_PRIVATE_KEY\",\n});\nconst result = await exchange.buildOrder({\n marketId: \"12345\",\n outcomeId: \"67890\",\n side: \"buy\",\n type: \"limit\",\n amount: 10,\n price: 0.55,\n});" - }, - { - "lang": "javascript", - "label": "Myriad", - "source": "import { Myriad } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new Myriad({\n apiKey: \"YOUR_API_KEY\",\n walletAddress: \"YOUR_WALLET_ADDRESS\",\n});\nconst result = await exchange.buildOrder({\n marketId: \"12345\",\n outcomeId: \"67890\",\n side: \"buy\",\n type: \"limit\",\n amount: 10,\n price: 0.55,\n});" - }, { "lang": "javascript", "label": "Opinion", "source": "import { Opinion } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new Opinion({\n apiKey: \"YOUR_API_KEY\",\n privateKey: \"YOUR_PRIVATE_KEY\",\n proxyAddress: \"YOUR_PROXY_ADDRESS\",\n});\nconst result = await exchange.buildOrder({\n marketId: \"12345\",\n outcomeId: \"67890\",\n side: \"buy\",\n type: \"limit\",\n amount: 10,\n price: 0.55,\n});" }, - { - "lang": "javascript", - "label": "Metaculus", - "source": "import { Metaculus } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new Metaculus({\n apiToken: \"YOUR_API_TOKEN\",\n});\nconst result = await exchange.buildOrder({\n marketId: \"12345\",\n outcomeId: \"67890\",\n side: \"buy\",\n type: \"limit\",\n amount: 10,\n price: 0.55,\n});" - }, { "lang": "javascript", "label": "Smarkets", @@ -3785,20 +3564,10 @@ "label": "GeminiTitan", "source": "import { GeminiTitan } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new GeminiTitan({\n apiKey: \"YOUR_API_KEY\",\n apiSecret: \"YOUR_API_SECRET\",\n});\nconst result = await exchange.buildOrder({\n marketId: \"12345\",\n outcomeId: \"67890\",\n side: \"buy\",\n type: \"limit\",\n amount: 10,\n price: 0.55,\n});" }, - { - "lang": "javascript", - "label": "SuiBets", - "source": "import { SuiBets } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new SuiBets();\nconst result = await exchange.buildOrder({\n marketId: \"12345\",\n outcomeId: \"67890\",\n side: \"buy\",\n type: \"limit\",\n amount: 10,\n price: 0.55,\n});" - }, { "lang": "javascript", "label": "Rain", "source": "import { Rain } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new Rain({\n privateKey: \"YOUR_PRIVATE_KEY\",\n});\nconst result = await exchange.buildOrder({\n marketId: \"12345\",\n outcomeId: \"67890\",\n side: \"buy\",\n type: \"limit\",\n amount: 10,\n price: 0.55,\n});" - }, - { - "lang": "javascript", - "label": "Hunch", - "source": "import { Hunch } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new Hunch({\n privateKey: \"YOUR_PRIVATE_KEY\",\n});\nconst result = await exchange.buildOrder({\n marketId: \"12345\",\n outcomeId: \"67890\",\n side: \"buy\",\n type: \"limit\",\n amount: 10,\n price: 0.55,\n});" } ] } @@ -3809,7 +3578,24 @@ "operationId": "submitOrder", "parameters": [ { - "$ref": "#/components/parameters/ExchangeParam" + "in": "path", + "name": "exchange", + "schema": { + "type": "string", + "enum": [ + "polymarket", + "kalshi", + "kalshi-demo", + "opinion", + "smarkets", + "polymarket_us", + "hyperliquid", + "gemini-titan", + "rain" + ] + }, + "required": true, + "description": "The prediction market exchange to target." } ], "requestBody": { @@ -3877,11 +3663,6 @@ "label": "Polymarket", "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.Polymarket(\n api_key=\"YOUR_API_KEY\",\n api_secret=\"YOUR_API_SECRET\",\n passphrase=\"YOUR_PASSPHRASE\",\n private_key=\"YOUR_PRIVATE_KEY\",\n proxy_address=\"YOUR_PROXY_ADDRESS\",\n signature_type=\"gnosis-safe\",\n)\nbuilt = exchange.build_order(market_id=\"12345\", outcome_id=\"67890\", side=\"buy\", type=\"limit\", amount=10, price=0.55)\nresult = exchange.submit_order(built)" }, - { - "lang": "python", - "label": "Limitless", - "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.Limitless(\n api_key=\"YOUR_API_KEY\",\n api_secret=\"YOUR_API_SECRET\",\n passphrase=\"YOUR_PASSPHRASE\",\n private_key=\"YOUR_PRIVATE_KEY\",\n)\nbuilt = exchange.build_order(market_id=\"12345\", outcome_id=\"67890\", side=\"buy\", type=\"limit\", amount=10, price=0.55)\nresult = exchange.submit_order(built)" - }, { "lang": "python", "label": "Kalshi", @@ -3892,31 +3673,11 @@ "label": "KalshiDemo", "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.KalshiDemo(\n api_key=\"YOUR_API_KEY\",\n private_key=\"YOUR_PRIVATE_KEY\",\n)\nbuilt = exchange.build_order(market_id=\"12345\", outcome_id=\"67890\", side=\"buy\", type=\"limit\", amount=10, price=0.55)\nresult = exchange.submit_order(built)" }, - { - "lang": "python", - "label": "Probable", - "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.Probable(\n api_key=\"YOUR_API_KEY\",\n api_secret=\"YOUR_API_SECRET\",\n passphrase=\"YOUR_PASSPHRASE\",\n private_key=\"YOUR_PRIVATE_KEY\",\n)\nbuilt = exchange.build_order(market_id=\"12345\", outcome_id=\"67890\", side=\"buy\", type=\"limit\", amount=10, price=0.55)\nresult = exchange.submit_order(built)" - }, - { - "lang": "python", - "label": "Baozi", - "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.Baozi(\n private_key=\"YOUR_PRIVATE_KEY\",\n)\nbuilt = exchange.build_order(market_id=\"12345\", outcome_id=\"67890\", side=\"buy\", type=\"limit\", amount=10, price=0.55)\nresult = exchange.submit_order(built)" - }, - { - "lang": "python", - "label": "Myriad", - "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.Myriad(\n api_key=\"YOUR_API_KEY\",\n wallet_address=\"YOUR_WALLET_ADDRESS\",\n)\nbuilt = exchange.build_order(market_id=\"12345\", outcome_id=\"67890\", side=\"buy\", type=\"limit\", amount=10, price=0.55)\nresult = exchange.submit_order(built)" - }, { "lang": "python", "label": "Opinion", "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.Opinion(\n api_key=\"YOUR_API_KEY\",\n private_key=\"YOUR_PRIVATE_KEY\",\n proxy_address=\"YOUR_PROXY_ADDRESS\",\n)\nbuilt = exchange.build_order(market_id=\"12345\", outcome_id=\"67890\", side=\"buy\", type=\"limit\", amount=10, price=0.55)\nresult = exchange.submit_order(built)" }, - { - "lang": "python", - "label": "Metaculus", - "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.Metaculus(\n api_token=\"YOUR_API_TOKEN\",\n)\nbuilt = exchange.build_order(market_id=\"12345\", outcome_id=\"67890\", side=\"buy\", type=\"limit\", amount=10, price=0.55)\nresult = exchange.submit_order(built)" - }, { "lang": "python", "label": "Smarkets", @@ -3937,31 +3698,16 @@ "label": "GeminiTitan", "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.GeminiTitan(\n api_key=\"YOUR_API_KEY\",\n api_secret=\"YOUR_API_SECRET\",\n)\nbuilt = exchange.build_order(market_id=\"12345\", outcome_id=\"67890\", side=\"buy\", type=\"limit\", amount=10, price=0.55)\nresult = exchange.submit_order(built)" }, - { - "lang": "python", - "label": "SuiBets", - "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.SuiBets()\nbuilt = exchange.build_order(market_id=\"12345\", outcome_id=\"67890\", side=\"buy\", type=\"limit\", amount=10, price=0.55)\nresult = exchange.submit_order(built)" - }, { "lang": "python", "label": "Rain", "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.Rain(\n private_key=\"YOUR_PRIVATE_KEY\",\n)\nbuilt = exchange.build_order(market_id=\"12345\", outcome_id=\"67890\", side=\"buy\", type=\"limit\", amount=10, price=0.55)\nresult = exchange.submit_order(built)" }, - { - "lang": "python", - "label": "Hunch", - "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.Hunch(\n private_key=\"YOUR_PRIVATE_KEY\",\n)\nbuilt = exchange.build_order(market_id=\"12345\", outcome_id=\"67890\", side=\"buy\", type=\"limit\", amount=10, price=0.55)\nresult = exchange.submit_order(built)" - }, { "lang": "javascript", "label": "Polymarket", "source": "import { Polymarket } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new Polymarket({\n apiKey: \"YOUR_API_KEY\",\n apiSecret: \"YOUR_API_SECRET\",\n passphrase: \"YOUR_PASSPHRASE\",\n privateKey: \"YOUR_PRIVATE_KEY\",\n proxyAddress: \"YOUR_PROXY_ADDRESS\",\n signatureType: \"gnosis-safe\",\n});\nconst built = await exchange.buildOrder({ marketId: \"12345\", outcomeId: \"67890\", side: \"buy\", type: \"limit\", amount: 10, price: 0.55 });\nconst result = await exchange.submitOrder(built);" }, - { - "lang": "javascript", - "label": "Limitless", - "source": "import { Limitless } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new Limitless({\n apiKey: \"YOUR_API_KEY\",\n apiSecret: \"YOUR_API_SECRET\",\n passphrase: \"YOUR_PASSPHRASE\",\n privateKey: \"YOUR_PRIVATE_KEY\",\n});\nconst built = await exchange.buildOrder({ marketId: \"12345\", outcomeId: \"67890\", side: \"buy\", type: \"limit\", amount: 10, price: 0.55 });\nconst result = await exchange.submitOrder(built);" - }, { "lang": "javascript", "label": "Kalshi", @@ -3972,31 +3718,11 @@ "label": "KalshiDemo", "source": "import { KalshiDemo } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new KalshiDemo({\n apiKey: \"YOUR_API_KEY\",\n privateKey: \"YOUR_PRIVATE_KEY\",\n});\nconst built = await exchange.buildOrder({ marketId: \"12345\", outcomeId: \"67890\", side: \"buy\", type: \"limit\", amount: 10, price: 0.55 });\nconst result = await exchange.submitOrder(built);" }, - { - "lang": "javascript", - "label": "Probable", - "source": "import { Probable } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new Probable({\n apiKey: \"YOUR_API_KEY\",\n apiSecret: \"YOUR_API_SECRET\",\n passphrase: \"YOUR_PASSPHRASE\",\n privateKey: \"YOUR_PRIVATE_KEY\",\n});\nconst built = await exchange.buildOrder({ marketId: \"12345\", outcomeId: \"67890\", side: \"buy\", type: \"limit\", amount: 10, price: 0.55 });\nconst result = await exchange.submitOrder(built);" - }, - { - "lang": "javascript", - "label": "Baozi", - "source": "import { Baozi } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new Baozi({\n privateKey: \"YOUR_PRIVATE_KEY\",\n});\nconst built = await exchange.buildOrder({ marketId: \"12345\", outcomeId: \"67890\", side: \"buy\", type: \"limit\", amount: 10, price: 0.55 });\nconst result = await exchange.submitOrder(built);" - }, - { - "lang": "javascript", - "label": "Myriad", - "source": "import { Myriad } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new Myriad({\n apiKey: \"YOUR_API_KEY\",\n walletAddress: \"YOUR_WALLET_ADDRESS\",\n});\nconst built = await exchange.buildOrder({ marketId: \"12345\", outcomeId: \"67890\", side: \"buy\", type: \"limit\", amount: 10, price: 0.55 });\nconst result = await exchange.submitOrder(built);" - }, { "lang": "javascript", "label": "Opinion", "source": "import { Opinion } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new Opinion({\n apiKey: \"YOUR_API_KEY\",\n privateKey: \"YOUR_PRIVATE_KEY\",\n proxyAddress: \"YOUR_PROXY_ADDRESS\",\n});\nconst built = await exchange.buildOrder({ marketId: \"12345\", outcomeId: \"67890\", side: \"buy\", type: \"limit\", amount: 10, price: 0.55 });\nconst result = await exchange.submitOrder(built);" }, - { - "lang": "javascript", - "label": "Metaculus", - "source": "import { Metaculus } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new Metaculus({\n apiToken: \"YOUR_API_TOKEN\",\n});\nconst built = await exchange.buildOrder({ marketId: \"12345\", outcomeId: \"67890\", side: \"buy\", type: \"limit\", amount: 10, price: 0.55 });\nconst result = await exchange.submitOrder(built);" - }, { "lang": "javascript", "label": "Smarkets", @@ -4017,20 +3743,10 @@ "label": "GeminiTitan", "source": "import { GeminiTitan } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new GeminiTitan({\n apiKey: \"YOUR_API_KEY\",\n apiSecret: \"YOUR_API_SECRET\",\n});\nconst built = await exchange.buildOrder({ marketId: \"12345\", outcomeId: \"67890\", side: \"buy\", type: \"limit\", amount: 10, price: 0.55 });\nconst result = await exchange.submitOrder(built);" }, - { - "lang": "javascript", - "label": "SuiBets", - "source": "import { SuiBets } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new SuiBets();\nconst built = await exchange.buildOrder({ marketId: \"12345\", outcomeId: \"67890\", side: \"buy\", type: \"limit\", amount: 10, price: 0.55 });\nconst result = await exchange.submitOrder(built);" - }, { "lang": "javascript", "label": "Rain", "source": "import { Rain } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new Rain({\n privateKey: \"YOUR_PRIVATE_KEY\",\n});\nconst built = await exchange.buildOrder({ marketId: \"12345\", outcomeId: \"67890\", side: \"buy\", type: \"limit\", amount: 10, price: 0.55 });\nconst result = await exchange.submitOrder(built);" - }, - { - "lang": "javascript", - "label": "Hunch", - "source": "import { Hunch } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new Hunch({\n privateKey: \"YOUR_PRIVATE_KEY\",\n});\nconst built = await exchange.buildOrder({ marketId: \"12345\", outcomeId: \"67890\", side: \"buy\", type: \"limit\", amount: 10, price: 0.55 });\nconst result = await exchange.submitOrder(built);" } ] } @@ -4041,7 +3757,27 @@ "operationId": "cancelOrder", "parameters": [ { - "$ref": "#/components/parameters/ExchangeParam" + "in": "path", + "name": "exchange", + "schema": { + "type": "string", + "enum": [ + "polymarket", + "kalshi", + "kalshi-demo", + "limitless", + "probable", + "opinion", + "metaculus", + "smarkets", + "polymarket_us", + "hyperliquid", + "gemini-titan", + "rain" + ] + }, + "required": true, + "description": "The prediction market exchange to target." } ], "requestBody": { @@ -4129,16 +3865,6 @@ "label": "Probable", "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.Probable(\n api_key=\"YOUR_API_KEY\",\n api_secret=\"YOUR_API_SECRET\",\n passphrase=\"YOUR_PASSPHRASE\",\n private_key=\"YOUR_PRIVATE_KEY\",\n)\nresult = exchange.cancel_order(\"ord-001\")" }, - { - "lang": "python", - "label": "Baozi", - "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.Baozi(\n private_key=\"YOUR_PRIVATE_KEY\",\n)\nresult = exchange.cancel_order(\"ord-001\")" - }, - { - "lang": "python", - "label": "Myriad", - "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.Myriad(\n api_key=\"YOUR_API_KEY\",\n wallet_address=\"YOUR_WALLET_ADDRESS\",\n)\nresult = exchange.cancel_order(\"ord-001\")" - }, { "lang": "python", "label": "Opinion", @@ -4169,21 +3895,11 @@ "label": "GeminiTitan", "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.GeminiTitan(\n api_key=\"YOUR_API_KEY\",\n api_secret=\"YOUR_API_SECRET\",\n)\nresult = exchange.cancel_order(\"ord-001\")" }, - { - "lang": "python", - "label": "SuiBets", - "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.SuiBets()\nresult = exchange.cancel_order(\"ord-001\")" - }, { "lang": "python", "label": "Rain", "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.Rain(\n private_key=\"YOUR_PRIVATE_KEY\",\n)\nresult = exchange.cancel_order(\"ord-001\")" }, - { - "lang": "python", - "label": "Hunch", - "source": "import pmxt\n\n# Runs locally — never proxied through PMXT servers\nexchange = pmxt.Hunch(\n private_key=\"YOUR_PRIVATE_KEY\",\n)\nresult = exchange.cancel_order(\"ord-001\")" - }, { "lang": "javascript", "label": "Polymarket", @@ -4209,16 +3925,6 @@ "label": "Probable", "source": "import { Probable } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new Probable({\n apiKey: \"YOUR_API_KEY\",\n apiSecret: \"YOUR_API_SECRET\",\n passphrase: \"YOUR_PASSPHRASE\",\n privateKey: \"YOUR_PRIVATE_KEY\",\n});\nconst result = await exchange.cancelOrder(\"ord-001\");" }, - { - "lang": "javascript", - "label": "Baozi", - "source": "import { Baozi } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new Baozi({\n privateKey: \"YOUR_PRIVATE_KEY\",\n});\nconst result = await exchange.cancelOrder(\"ord-001\");" - }, - { - "lang": "javascript", - "label": "Myriad", - "source": "import { Myriad } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new Myriad({\n apiKey: \"YOUR_API_KEY\",\n walletAddress: \"YOUR_WALLET_ADDRESS\",\n});\nconst result = await exchange.cancelOrder(\"ord-001\");" - }, { "lang": "javascript", "label": "Opinion", @@ -4249,20 +3955,10 @@ "label": "GeminiTitan", "source": "import { GeminiTitan } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new GeminiTitan({\n apiKey: \"YOUR_API_KEY\",\n apiSecret: \"YOUR_API_SECRET\",\n});\nconst result = await exchange.cancelOrder(\"ord-001\");" }, - { - "lang": "javascript", - "label": "SuiBets", - "source": "import { SuiBets } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new SuiBets();\nconst result = await exchange.cancelOrder(\"ord-001\");" - }, { "lang": "javascript", "label": "Rain", "source": "import { Rain } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new Rain({\n privateKey: \"YOUR_PRIVATE_KEY\",\n});\nconst result = await exchange.cancelOrder(\"ord-001\");" - }, - { - "lang": "javascript", - "label": "Hunch", - "source": "import { Hunch } from \"pmxtjs\";\n\n// Runs locally — never proxied through PMXT servers\nconst exchange = new Hunch({\n privateKey: \"YOUR_PRIVATE_KEY\",\n});\nconst result = await exchange.cancelOrder(\"ord-001\");" } ] } @@ -4273,7 +3969,24 @@ "operationId": "fetchOrder", "parameters": [ { - "$ref": "#/components/parameters/ExchangeParam" + "in": "path", + "name": "exchange", + "schema": { + "type": "string", + "enum": [ + "polymarket", + "kalshi", + "kalshi-demo", + "probable", + "baozi", + "opinion", + "smarkets", + "polymarket_us", + "rain" + ] + }, + "required": true, + "description": "The prediction market exchange to target." }, { "in": "query", @@ -4316,11 +4029,6 @@ "label": "Polymarket", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Polymarket(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order(\"ord-001\")" }, - { - "lang": "python", - "label": "Limitless", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Limitless(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order(\"ord-001\")" - }, { "lang": "python", "label": "Kalshi", @@ -4341,21 +4049,11 @@ "label": "Baozi", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Baozi(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order(\"ord-001\")" }, - { - "lang": "python", - "label": "Myriad", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Myriad(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order(\"ord-001\")" - }, { "lang": "python", "label": "Opinion", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Opinion(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order(\"ord-001\")" }, - { - "lang": "python", - "label": "Metaculus", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Metaculus(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order(\"ord-001\")" - }, { "lang": "python", "label": "Smarkets", @@ -4366,41 +4064,16 @@ "label": "PolymarketUS", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.PolymarketUS(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order(\"ord-001\")" }, - { - "lang": "python", - "label": "Hyperliquid", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Hyperliquid(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order(\"ord-001\")" - }, - { - "lang": "python", - "label": "GeminiTitan", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.GeminiTitan(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order(\"ord-001\")" - }, - { - "lang": "python", - "label": "SuiBets", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.SuiBets(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order(\"ord-001\")" - }, { "lang": "python", "label": "Rain", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Rain(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order(\"ord-001\")" }, - { - "lang": "python", - "label": "Hunch", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Hunch(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_order(\"ord-001\")" - }, { "lang": "javascript", "label": "Polymarket", "source": "import { Polymarket } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Polymarket({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrder(\"ord-001\");" }, - { - "lang": "javascript", - "label": "Limitless", - "source": "import { Limitless } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Limitless({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrder(\"ord-001\");" - }, { "lang": "javascript", "label": "Kalshi", @@ -4421,21 +4094,11 @@ "label": "Baozi", "source": "import { Baozi } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Baozi({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrder(\"ord-001\");" }, - { - "lang": "javascript", - "label": "Myriad", - "source": "import { Myriad } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Myriad({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrder(\"ord-001\");" - }, { "lang": "javascript", "label": "Opinion", "source": "import { Opinion } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Opinion({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrder(\"ord-001\");" }, - { - "lang": "javascript", - "label": "Metaculus", - "source": "import { Metaculus } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Metaculus({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrder(\"ord-001\");" - }, { "lang": "javascript", "label": "Smarkets", @@ -4446,30 +4109,10 @@ "label": "PolymarketUS", "source": "import { PolymarketUS } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new PolymarketUS({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrder(\"ord-001\");" }, - { - "lang": "javascript", - "label": "Hyperliquid", - "source": "import { Hyperliquid } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Hyperliquid({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrder(\"ord-001\");" - }, - { - "lang": "javascript", - "label": "GeminiTitan", - "source": "import { GeminiTitan } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new GeminiTitan({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrder(\"ord-001\");" - }, - { - "lang": "javascript", - "label": "SuiBets", - "source": "import { SuiBets } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new SuiBets({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrder(\"ord-001\");" - }, { "lang": "javascript", "label": "Rain", "source": "import { Rain } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Rain({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrder(\"ord-001\");" - }, - { - "lang": "javascript", - "label": "Hunch", - "source": "import { Hunch } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Hunch({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOrder(\"ord-001\");" } ] } @@ -4480,7 +4123,28 @@ "operationId": "fetchOpenOrders", "parameters": [ { - "$ref": "#/components/parameters/ExchangeParam" + "in": "path", + "name": "exchange", + "schema": { + "type": "string", + "enum": [ + "polymarket", + "kalshi", + "kalshi-demo", + "limitless", + "probable", + "baozi", + "myriad", + "opinion", + "smarkets", + "polymarket_us", + "hyperliquid", + "gemini-titan", + "rain" + ] + }, + "required": true, + "description": "The prediction market exchange to target." }, { "in": "query", @@ -4561,11 +4225,6 @@ "label": "Opinion", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Opinion(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_open_orders(\"12345\")" }, - { - "lang": "python", - "label": "Metaculus", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Metaculus(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_open_orders(\"12345\")" - }, { "lang": "python", "label": "Smarkets", @@ -4586,21 +4245,11 @@ "label": "GeminiTitan", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.GeminiTitan(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_open_orders(\"12345\")" }, - { - "lang": "python", - "label": "SuiBets", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.SuiBets(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_open_orders(\"12345\")" - }, { "lang": "python", "label": "Rain", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Rain(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_open_orders(\"12345\")" }, - { - "lang": "python", - "label": "Hunch", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Hunch(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_open_orders(\"12345\")" - }, { "lang": "javascript", "label": "Polymarket", @@ -4641,11 +4290,6 @@ "label": "Opinion", "source": "import { Opinion } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Opinion({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOpenOrders(\"12345\");" }, - { - "lang": "javascript", - "label": "Metaculus", - "source": "import { Metaculus } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Metaculus({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOpenOrders(\"12345\");" - }, { "lang": "javascript", "label": "Smarkets", @@ -4666,20 +4310,10 @@ "label": "GeminiTitan", "source": "import { GeminiTitan } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new GeminiTitan({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOpenOrders(\"12345\");" }, - { - "lang": "javascript", - "label": "SuiBets", - "source": "import { SuiBets } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new SuiBets({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOpenOrders(\"12345\");" - }, { "lang": "javascript", "label": "Rain", "source": "import { Rain } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Rain({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOpenOrders(\"12345\");" - }, - { - "lang": "javascript", - "label": "Hunch", - "source": "import { Hunch } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Hunch({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchOpenOrders(\"12345\");" } ] } @@ -4690,7 +4324,26 @@ "operationId": "fetchMyTrades", "parameters": [ { - "$ref": "#/components/parameters/ExchangeParam" + "in": "path", + "name": "exchange", + "schema": { + "type": "string", + "enum": [ + "polymarket", + "kalshi", + "kalshi-demo", + "limitless", + "probable", + "myriad", + "opinion", + "smarkets", + "polymarket_us", + "hyperliquid", + "rain" + ] + }, + "required": true, + "description": "The prediction market exchange to target." }, { "in": "query", @@ -4804,11 +4457,6 @@ "label": "Probable", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Probable(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_my_trades(\n outcome_id=\"67890\",\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" }, - { - "lang": "python", - "label": "Baozi", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Baozi(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_my_trades(\n outcome_id=\"67890\",\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" - }, { "lang": "python", "label": "Myriad", @@ -4819,11 +4467,6 @@ "label": "Opinion", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Opinion(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_my_trades(\n outcome_id=\"67890\",\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" }, - { - "lang": "python", - "label": "Metaculus", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Metaculus(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_my_trades(\n outcome_id=\"67890\",\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" - }, { "lang": "python", "label": "Smarkets", @@ -4839,26 +4482,11 @@ "label": "Hyperliquid", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Hyperliquid(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_my_trades(\n outcome_id=\"67890\",\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" }, - { - "lang": "python", - "label": "GeminiTitan", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.GeminiTitan(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_my_trades(\n outcome_id=\"67890\",\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" - }, - { - "lang": "python", - "label": "SuiBets", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.SuiBets(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_my_trades(\n outcome_id=\"67890\",\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" - }, { "lang": "python", "label": "Rain", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Rain(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_my_trades(\n outcome_id=\"67890\",\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" }, - { - "lang": "python", - "label": "Hunch", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Hunch(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_my_trades(\n outcome_id=\"67890\",\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" - }, { "lang": "javascript", "label": "Polymarket", @@ -4884,11 +4512,6 @@ "label": "Probable", "source": "import { Probable } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Probable({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchMyTrades({\n outcomeId: \"67890\",\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" }, - { - "lang": "javascript", - "label": "Baozi", - "source": "import { Baozi } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Baozi({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchMyTrades({\n outcomeId: \"67890\",\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" - }, { "lang": "javascript", "label": "Myriad", @@ -4899,11 +4522,6 @@ "label": "Opinion", "source": "import { Opinion } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Opinion({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchMyTrades({\n outcomeId: \"67890\",\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" }, - { - "lang": "javascript", - "label": "Metaculus", - "source": "import { Metaculus } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Metaculus({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchMyTrades({\n outcomeId: \"67890\",\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" - }, { "lang": "javascript", "label": "Smarkets", @@ -4919,25 +4537,10 @@ "label": "Hyperliquid", "source": "import { Hyperliquid } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Hyperliquid({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchMyTrades({\n outcomeId: \"67890\",\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" }, - { - "lang": "javascript", - "label": "GeminiTitan", - "source": "import { GeminiTitan } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new GeminiTitan({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchMyTrades({\n outcomeId: \"67890\",\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" - }, - { - "lang": "javascript", - "label": "SuiBets", - "source": "import { SuiBets } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new SuiBets({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchMyTrades({\n outcomeId: \"67890\",\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" - }, { "lang": "javascript", "label": "Rain", "source": "import { Rain } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Rain({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchMyTrades({\n outcomeId: \"67890\",\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" - }, - { - "lang": "javascript", - "label": "Hunch", - "source": "import { Hunch } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Hunch({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchMyTrades({\n outcomeId: \"67890\",\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" } ] } @@ -4948,7 +4551,23 @@ "operationId": "fetchClosedOrders", "parameters": [ { - "$ref": "#/components/parameters/ExchangeParam" + "in": "path", + "name": "exchange", + "schema": { + "type": "string", + "enum": [ + "kalshi", + "kalshi-demo", + "limitless", + "opinion", + "smarkets", + "hyperliquid", + "gemini-titan", + "rain" + ] + }, + "required": true, + "description": "The prediction market exchange to target." }, { "in": "query", @@ -5028,11 +4647,6 @@ "description": "Fetch authenticated closed orders.", "security": [], "x-codeSamples": [ - { - "lang": "python", - "label": "Polymarket", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Polymarket(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_closed_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" - }, { "lang": "python", "label": "Limitless", @@ -5048,41 +4662,16 @@ "label": "KalshiDemo", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.KalshiDemo(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_closed_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" }, - { - "lang": "python", - "label": "Probable", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Probable(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_closed_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" - }, - { - "lang": "python", - "label": "Baozi", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Baozi(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_closed_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" - }, - { - "lang": "python", - "label": "Myriad", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Myriad(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_closed_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" - }, { "lang": "python", "label": "Opinion", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Opinion(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_closed_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" }, - { - "lang": "python", - "label": "Metaculus", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Metaculus(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_closed_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" - }, { "lang": "python", "label": "Smarkets", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Smarkets(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_closed_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" }, - { - "lang": "python", - "label": "PolymarketUS", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.PolymarketUS(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_closed_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" - }, { "lang": "python", "label": "Hyperliquid", @@ -5093,26 +4682,11 @@ "label": "GeminiTitan", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.GeminiTitan(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_closed_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" }, - { - "lang": "python", - "label": "SuiBets", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.SuiBets(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_closed_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" - }, { "lang": "python", "label": "Rain", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Rain(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_closed_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" }, - { - "lang": "python", - "label": "Hunch", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Hunch(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_closed_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" - }, - { - "lang": "javascript", - "label": "Polymarket", - "source": "import { Polymarket } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Polymarket({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchClosedOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" - }, { "lang": "javascript", "label": "Limitless", @@ -5128,41 +4702,16 @@ "label": "KalshiDemo", "source": "import { KalshiDemo } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new KalshiDemo({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchClosedOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" }, - { - "lang": "javascript", - "label": "Probable", - "source": "import { Probable } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Probable({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchClosedOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" - }, - { - "lang": "javascript", - "label": "Baozi", - "source": "import { Baozi } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Baozi({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchClosedOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" - }, - { - "lang": "javascript", - "label": "Myriad", - "source": "import { Myriad } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Myriad({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchClosedOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" - }, { "lang": "javascript", "label": "Opinion", "source": "import { Opinion } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Opinion({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchClosedOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" }, - { - "lang": "javascript", - "label": "Metaculus", - "source": "import { Metaculus } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Metaculus({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchClosedOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" - }, { "lang": "javascript", "label": "Smarkets", "source": "import { Smarkets } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Smarkets({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchClosedOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" }, - { - "lang": "javascript", - "label": "PolymarketUS", - "source": "import { PolymarketUS } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new PolymarketUS({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchClosedOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" - }, { "lang": "javascript", "label": "Hyperliquid", @@ -5173,20 +4722,10 @@ "label": "GeminiTitan", "source": "import { GeminiTitan } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new GeminiTitan({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchClosedOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" }, - { - "lang": "javascript", - "label": "SuiBets", - "source": "import { SuiBets } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new SuiBets({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchClosedOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" - }, { "lang": "javascript", "label": "Rain", "source": "import { Rain } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Rain({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchClosedOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" - }, - { - "lang": "javascript", - "label": "Hunch", - "source": "import { Hunch } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Hunch({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchClosedOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" } ] } @@ -5197,7 +4736,22 @@ "operationId": "fetchAllOrders", "parameters": [ { - "$ref": "#/components/parameters/ExchangeParam" + "in": "path", + "name": "exchange", + "schema": { + "type": "string", + "enum": [ + "kalshi", + "kalshi-demo", + "limitless", + "opinion", + "smarkets", + "hyperliquid", + "gemini-titan" + ] + }, + "required": true, + "description": "The prediction market exchange to target." }, { "in": "query", @@ -5277,11 +4831,6 @@ "description": "Fetch authenticated order history across open and closed orders.", "security": [], "x-codeSamples": [ - { - "lang": "python", - "label": "Polymarket", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Polymarket(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_all_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" - }, { "lang": "python", "label": "Limitless", @@ -5297,41 +4846,16 @@ "label": "KalshiDemo", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.KalshiDemo(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_all_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" }, - { - "lang": "python", - "label": "Probable", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Probable(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_all_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" - }, - { - "lang": "python", - "label": "Baozi", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Baozi(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_all_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" - }, - { - "lang": "python", - "label": "Myriad", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Myriad(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_all_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" - }, { "lang": "python", "label": "Opinion", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Opinion(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_all_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" }, - { - "lang": "python", - "label": "Metaculus", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Metaculus(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_all_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" - }, { "lang": "python", "label": "Smarkets", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Smarkets(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_all_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" }, - { - "lang": "python", - "label": "PolymarketUS", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.PolymarketUS(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_all_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" - }, { "lang": "python", "label": "Hyperliquid", @@ -5342,26 +4866,6 @@ "label": "GeminiTitan", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.GeminiTitan(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_all_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" }, - { - "lang": "python", - "label": "SuiBets", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.SuiBets(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_all_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" - }, - { - "lang": "python", - "label": "Rain", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Rain(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_all_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" - }, - { - "lang": "python", - "label": "Hunch", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Hunch(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_all_orders(\n market_id=\"12345\",\n since=\"2026-01-01T00:00:00Z\",\n until=\"2026-01-31T00:00:00Z\",\n limit=10,\n cursor=\"abc123\",\n)" - }, - { - "lang": "javascript", - "label": "Polymarket", - "source": "import { Polymarket } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Polymarket({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchAllOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" - }, { "lang": "javascript", "label": "Limitless", @@ -5377,41 +4881,16 @@ "label": "KalshiDemo", "source": "import { KalshiDemo } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new KalshiDemo({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchAllOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" }, - { - "lang": "javascript", - "label": "Probable", - "source": "import { Probable } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Probable({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchAllOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" - }, - { - "lang": "javascript", - "label": "Baozi", - "source": "import { Baozi } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Baozi({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchAllOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" - }, - { - "lang": "javascript", - "label": "Myriad", - "source": "import { Myriad } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Myriad({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchAllOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" - }, { "lang": "javascript", "label": "Opinion", "source": "import { Opinion } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Opinion({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchAllOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" }, - { - "lang": "javascript", - "label": "Metaculus", - "source": "import { Metaculus } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Metaculus({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchAllOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" - }, { "lang": "javascript", "label": "Smarkets", "source": "import { Smarkets } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Smarkets({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchAllOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" }, - { - "lang": "javascript", - "label": "PolymarketUS", - "source": "import { PolymarketUS } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new PolymarketUS({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchAllOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" - }, { "lang": "javascript", "label": "Hyperliquid", @@ -5421,21 +4900,6 @@ "lang": "javascript", "label": "GeminiTitan", "source": "import { GeminiTitan } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new GeminiTitan({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchAllOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" - }, - { - "lang": "javascript", - "label": "SuiBets", - "source": "import { SuiBets } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new SuiBets({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchAllOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" - }, - { - "lang": "javascript", - "label": "Rain", - "source": "import { Rain } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Rain({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchAllOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" - }, - { - "lang": "javascript", - "label": "Hunch", - "source": "import { Hunch } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Hunch({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchAllOrders({\n marketId: \"12345\",\n since: \"2026-01-01T00:00:00Z\",\n until: \"2026-01-31T00:00:00Z\",\n limit: 10,\n cursor: \"abc123\",\n});" } ] } @@ -5446,7 +4910,30 @@ "operationId": "fetchPositions", "parameters": [ { - "$ref": "#/components/parameters/ExchangeParam" + "in": "path", + "name": "exchange", + "schema": { + "type": "string", + "enum": [ + "polymarket", + "kalshi", + "kalshi-demo", + "limitless", + "probable", + "baozi", + "myriad", + "opinion", + "smarkets", + "polymarket_us", + "hyperliquid", + "gemini-titan", + "suibets", + "rain", + "hunch" + ] + }, + "required": true, + "description": "The prediction market exchange to target." }, { "in": "query", @@ -5527,11 +5014,6 @@ "label": "Opinion", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Opinion(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_positions(address=\"0x1111111111111111111111111111111111111111\")" }, - { - "lang": "python", - "label": "Metaculus", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Metaculus(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_positions(address=\"0x1111111111111111111111111111111111111111\")" - }, { "lang": "python", "label": "Smarkets", @@ -5607,11 +5089,6 @@ "label": "Opinion", "source": "import { Opinion } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Opinion({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchPositions(\"0x1111111111111111111111111111111111111111\");" }, - { - "lang": "javascript", - "label": "Metaculus", - "source": "import { Metaculus } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Metaculus({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchPositions(\"0x1111111111111111111111111111111111111111\");" - }, { "lang": "javascript", "label": "Smarkets", @@ -5656,7 +5133,27 @@ "operationId": "fetchBalance", "parameters": [ { - "$ref": "#/components/parameters/ExchangeParam" + "in": "path", + "name": "exchange", + "schema": { + "type": "string", + "enum": [ + "polymarket", + "kalshi", + "kalshi-demo", + "limitless", + "probable", + "baozi", + "myriad", + "smarkets", + "polymarket_us", + "hyperliquid", + "rain", + "hunch" + ] + }, + "required": true, + "description": "The prediction market exchange to target." }, { "in": "query", @@ -5732,16 +5229,6 @@ "label": "Myriad", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Myriad(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_balance(address=\"0x1111111111111111111111111111111111111111\")" }, - { - "lang": "python", - "label": "Opinion", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Opinion(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_balance(address=\"0x1111111111111111111111111111111111111111\")" - }, - { - "lang": "python", - "label": "Metaculus", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Metaculus(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_balance(address=\"0x1111111111111111111111111111111111111111\")" - }, { "lang": "python", "label": "Smarkets", @@ -5757,16 +5244,6 @@ "label": "Hyperliquid", "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.Hyperliquid(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_balance(address=\"0x1111111111111111111111111111111111111111\")" }, - { - "lang": "python", - "label": "GeminiTitan", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.GeminiTitan(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_balance(address=\"0x1111111111111111111111111111111111111111\")" - }, - { - "lang": "python", - "label": "SuiBets", - "source": "import pmxt\n\n# API key optional — enables faster catalog-backed lookups\nexchange = pmxt.SuiBets(\n pmxt_api_key=\"YOUR_PMXT_API_KEY\",\n)\nresult = exchange.fetch_balance(address=\"0x1111111111111111111111111111111111111111\")" - }, { "lang": "python", "label": "Rain", @@ -5812,16 +5289,6 @@ "label": "Myriad", "source": "import { Myriad } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Myriad({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchBalance(\"0x1111111111111111111111111111111111111111\");" }, - { - "lang": "javascript", - "label": "Opinion", - "source": "import { Opinion } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Opinion({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchBalance(\"0x1111111111111111111111111111111111111111\");" - }, - { - "lang": "javascript", - "label": "Metaculus", - "source": "import { Metaculus } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Metaculus({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchBalance(\"0x1111111111111111111111111111111111111111\");" - }, { "lang": "javascript", "label": "Smarkets", @@ -5837,16 +5304,6 @@ "label": "Hyperliquid", "source": "import { Hyperliquid } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new Hyperliquid({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchBalance(\"0x1111111111111111111111111111111111111111\");" }, - { - "lang": "javascript", - "label": "GeminiTitan", - "source": "import { GeminiTitan } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new GeminiTitan({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchBalance(\"0x1111111111111111111111111111111111111111\");" - }, - { - "lang": "javascript", - "label": "SuiBets", - "source": "import { SuiBets } from \"pmxtjs\";\n\n// API key optional — enables faster catalog-backed lookups\nconst exchange = new SuiBets({\n pmxtApiKey: \"YOUR_PMXT_API_KEY\",\n});\nconst result = await exchange.fetchBalance(\"0x1111111111111111111111111111111111111111\");" - }, { "lang": "javascript", "label": "Rain", @@ -7378,7 +6835,7 @@ "type": "array", "maxItems": 1, "items": { - "$ref": "#/components/schemas/FetchMarketMatchesParams" + "type": "object" }, "minItems": 1 }, diff --git a/docs/concepts/venues.mdx b/docs/concepts/venues.mdx index 87a56ec1..9ec7bf3a 100644 --- a/docs/concepts/venues.mdx +++ b/docs/concepts/venues.mdx @@ -7,7 +7,7 @@ description: "Every venue PMXT currently speaks." AUTO-GENERATED from pmxt-core's openapi spec (ExchangeParam enum). Do not edit by hand — run `npm run generate:mintlify` to regenerate. Source: docs/api-reference/openapi.json - pmxt-core version at last sync: 2.51.4 + pmxt-core version at last sync: 2.17.1 */} PMXT currently supports the following venue targets. The **wire key** is diff --git a/sdks/python/API_REFERENCE.md b/sdks/python/API_REFERENCE.md index 48e401fb..63c2d146 100644 --- a/sdks/python/API_REFERENCE.md +++ b/sdks/python/API_REFERENCE.md @@ -1,483 +1,483 @@ -# PMXT Python SDK - API Reference - -A unified Python SDK for supported prediction markets, with local sidecar access to PMXT exchange implementations and hosted services where configured. - -## Installation - -```bash -pip install pmxt -``` - -## Quick Start - -```python -import pmxt - -# Initialize exchanges (server starts automatically!) -poly = pmxt.Polymarket() -kalshi = pmxt.Kalshi() -limitless = pmxt.Limitless() # Requires API key for authenticated operations - -# Search for markets -markets = poly.fetch_markets(query="Trump") -print(markets[0].title) -``` - -> **Note**: This SDK automatically manages the PMXT sidecar server. Just import and use! - ---- - -## Server Management - -The SDK exposes a `pmxt.server` namespace for managing the background sidecar server. Use these commands for clearing state, resolving "port busy" errors, inspecting server health, or tailing logs from interactive environments like Jupyter. - -```python -import pmxt - -pmxt.server.status() # snapshot dict: running, pid, port, version, uptime_seconds, lock_file -pmxt.server.health() # bool - True if /health responds ok -pmxt.server.start() # idempotent - no-op if already running -pmxt.server.stop() # stop the sidecar and clean up the lock file -pmxt.server.restart() # stop and start the sidecar -pmxt.server.logs(50) # last N log lines from ~/.pmxt/server.log (default 50) -``` - -### `pmxt.server.status` - -Returns a fresh dict describing the sidecar state. Useful for diagnosing "is it running?" before issuing API calls. - -```python -import pmxt -info = pmxt.server.status() -print(info["running"], info["pid"], info["port"], info["uptime_seconds"]) -``` - -### `pmxt.server.health` - -Returns `True` if the sidecar's `/health` endpoint responds with status `ok`, otherwise `False`. Lighter than `status()` when you only need a boolean liveness check. - -```python -import pmxt -if not pmxt.server.health(): - pmxt.server.restart() -``` - -### `pmxt.server.start` - -Idempotently start the sidecar. Returns immediately if a healthy server is already running. Use this when you want to fail fast on startup rather than letting the first API call lazily boot the server. - -```python -import pmxt -pmxt.server.start() -``` - -### `pmxt.server.stop` - -Stop the running sidecar and clean up its lock file. - -```python -import pmxt -pmxt.server.stop() -``` - -### `pmxt.server.restart` - -Stop the sidecar (if running) and start a fresh one. Equivalent to `stop()` followed by `start()`. - -```python -import pmxt -pmxt.server.restart() -``` - -### `pmxt.server.logs` - -Return the last `n` lines (default `50`) from the sidecar log file at `~/.pmxt/server.log`. Returns an empty list if no log file exists yet. Invaluable when the server is misbehaving and you need to see what it actually printed. - -```python -import pmxt -for line in pmxt.server.logs(100): - print(line) -``` - ---- - -## Methods - -### `has` - -Capability map indicating which methods this exchange supports. - - -**Signature:** - -```python -has: ExchangeHas -``` - -**Parameters:** - -- None - -**Returns:** ExchangeHas - Result - -**Example:** - -```python -exchange.has -``` - - ---- -### `load_markets` - -Load and cache all markets from the exchange into `this.markets` and `this.marketsBySlug`. - - -**Signature:** - -```python -def load_markets(reload: bool) -> Dict[str, UnifiedMarket]: -``` - -**Parameters:** - -- `reload` (bool): Force a fresh fetch from the API even if markets are already loaded - -**Returns:** Dict[str, [UnifiedMarket](#unifiedmarket)] - Dictionary of markets indexed by marketId - -**Example:** - -```python -exchange.load_markets(reload=True) -``` - - ---- -### `fetch_markets` - -Fetch markets with optional filtering, search, or slug lookup. - - -**Signature:** - -```python -def fetch_markets(params: Optional[MarketFetchParams] = None) -> List[UnifiedMarket]: -``` - -**Parameters:** - -- `params` (MarketFetchParams) - **Optional**: Optional parameters for filtering and search - - `params.query` - Search keyword to filter markets - - `params.slug` - Market slug/ticker for direct lookup - - `params.limit` - Maximum number of results - - `params.offset` - Pagination offset - - `params.sort` - Sort order ('volume' | 'liquidity' | 'newest') - - `params.search_in` - Where to search ('title' | 'description' | 'both') - -**Returns:** List[[UnifiedMarket](#unifiedmarket)] - Array of unified markets - -**Example:** - -```python -exchange.fetch_markets(query="Trump", slug="will-trump-win", limit=10) -``` - -**Notes:** -ordering — exchanges may reorder or add markets between requests. For stable iteration -across pages, use `loadMarkets()` and paginate over `Object.values(exchange.markets)`. -Some exchanges (like Limitless) may only support status 'active' for search results. - ---- -### `fetch_markets_paginated` - -Fetch markets with cursor-based pagination backed by a stable in-memory snapshot. - - -**Signature:** - -```python -def fetch_markets_paginated(params: Optional[dict] = None) -> PaginatedMarketsResult: -``` - -**Parameters:** - -- `params` (dict) - **Optional**: params - - `params.limit` - Page size (default: return all markets) - - `params.cursor` - Opaque cursor returned by a previous call - -**Returns:** [PaginatedMarketsResult](#paginatedmarketsresult) - PaginatedMarketsResult with data, total, and optional nextCursor - -**Example:** - -```python -exchange.fetch_markets_paginated(limit=10, cursor="...") -``` - - ---- -### `fetch_events_paginated` - -Paginated variant of {@link fetchEvents}. - - -**Signature:** - -```python -def fetch_events_paginated(params: Optional[dict] = None) -> PaginatedEventsResult: -``` - -**Parameters:** - -- `params` (dict) - **Optional**: params - - `params.limit` - Page size (default: return all events) - - `params.cursor` - Opaque cursor returned by a previous call - -**Returns:** [PaginatedEventsResult](#paginatedeventsresult) - PaginatedEventsResult with data, total, and optional nextCursor - -**Example:** - -```python -exchange.fetch_events_paginated(limit=10, cursor="...") -``` - - ---- -### `fetch_events` - -Fetch events with optional keyword search. - - -**Signature:** - -```python -def fetch_events(params: Optional[EventFetchParams] = None) -> List[UnifiedEvent]: -``` - -**Parameters:** - -- `params` ([EventFetchParams](#eventfetchparams)) - **Optional**: Optional parameters for search and filtering - - `params.query` - Search keyword to filter events. If omitted, returns top events by volume. - - `params.limit` - Maximum number of results - - `params.offset` - Pagination offset - - `params.search_in` - Where to search ('title' | 'description' | 'both') - -**Returns:** List[[UnifiedEvent](#unifiedevent)] - Array of unified events - -**Example:** - -```python -exchange.fetch_events(query="Trump", limit=10, offset=0) -``` - -**Notes:** -Some exchanges (like Limitless) may only support status 'active' for search results. - ---- -### `fetch_series` - -Fetch the recurring series (fourth tier above Event -> Market -> Outcome) - - -**Signature:** - -```python -def fetch_series(params: Optional[SeriesFetchParams] = None) -> List[UnifiedSeries]: -``` - -**Parameters:** - -- `params` (SeriesFetchParams) - **Optional**: params - -**Returns:** List[[UnifiedSeries](#unifiedseries)] - Array of unified series. Always an array, including the singular-lookup case. - -**Example:** - -```python -exchange.fetch_series() -``` - - ---- -### `fetch_market` - -Fetch a single market by lookup parameters. - - -**Signature:** - -```python -def fetch_market(params: Optional[MarketFetchParams] = None) -> UnifiedMarket: -``` - -**Parameters:** - -- `params` (MarketFetchParams) - **Optional**: Lookup parameters (marketId, outcomeId, slug, etc.) - -**Returns:** [UnifiedMarket](#unifiedmarket) - A single unified market - -**Example:** - -```python -exchange.fetch_market() -``` - - ---- -### `fetch_event` - -Fetch a single event by lookup parameters. - - -**Signature:** - -```python -def fetch_event(params: Optional[EventFetchParams] = None) -> UnifiedEvent: -``` - -**Parameters:** - -- `params` ([EventFetchParams](#eventfetchparams)) - **Optional**: Lookup parameters (eventId, slug, query) - -**Returns:** [UnifiedEvent](#unifiedevent) - A single unified event - -**Example:** - -```python -exchange.fetch_event() -``` - - ---- -### `fetch_ohlcv` - -Fetch historical OHLCV (candlestick) price data for a specific market outcome. - - -**Signature:** - -```python -def fetch_ohlcv(outcome_id: str, params: OHLCVParams) -> List[PriceCandle]: -``` - -**Parameters:** - -- `outcome_id` (str): The Outcome ID (outcomeId). Use outcome.outcomeId, NOT market.marketId -- `params` ([OHLCVParams](#ohlcvparams)): OHLCV parameters including resolution (required) - -**Returns:** List[[PriceCandle](#pricecandle)] - Array of price candles - -**Example:** - -```python -exchange.fetch_ohlcv(outcome_id="abc123", resolution="1h", limit=100) -``` - -**Notes:** -**CRITICAL**: Use `outcome.outcomeId` (TS) / `outcome.outcome_id` (Python), not the market ID. -Polymarket: outcomeId is the CLOB Token ID. Kalshi: outcomeId is the Market Ticker. -Common resolutions: '1m' | '5m' | '15m' | '1h' | '6h' | '1d'. Arbitrary intervals (e.g. '30s', '120s', '3h') accepted by venues that support them. - ---- -### `fetch_order_book` - -Fetch the order book (bids/asks) for a specific outcome. - - -**Signature:** - -```python -def fetch_order_book(outcome_id: str, limit: Optional[float] = None, params: Optional[FetchOrderBookParams] = None) -> OrderBook: -``` - -**Parameters:** - -- `outcome_id` (str): The Outcome ID (outcomeId) or market slug -- `limit` (float) - **Optional**: Max number of bid/ask levels to return. For range -- `params` ([FetchOrderBookParams](#fetchorderbookparams)) - **Optional**: Optional parameters: - -**Returns:** [OrderBook](#orderbook) - Order book with bids and asks. Returns OrderBook[] when - -**Example:** - -```python -exchange.fetch_order_book(outcome_id="abc123", limit=10, params={}) -``` - - ---- -### `fetch_order_books` - -Batch variant of {@link fetchOrderBook}. Fetches order books for - - -**Signature:** - -```python -def fetch_order_books(outcome_ids: List[str]) -> Dict[str, OrderBook]: -``` - -**Parameters:** - -- `outcome_ids` (List[str]): List of Outcome IDs (outcomeId). Each id must be in the - -**Returns:** Dict[str, [OrderBook](#orderbook)] - A map keyed by the input id (preserving the caller's exact - -**Example:** - -```python -exchange.fetch_order_books(outcome_ids=["12345"]) -``` - - ---- -### `fetch_trades` - -Fetch raw trade history for a specific outcome. - - -**Signature:** - -```python -def fetch_trades(outcome_id: str, params: Union[TradesParams, HistoryFilterParams]) -> List[Trade]: -``` - -**Parameters:** - -- `outcome_id` (str): The Outcome ID (outcomeId) -- `params` (Union[[TradesParams](#tradesparams), [HistoryFilterParams](#historyfilterparams)]): Trade filter parameters - -**Returns:** List[[Trade](#trade)] - Array of recent trades - -**Example:** - -```python -exchange.fetch_trades(outcome_id="abc123", limit=50) -``` - -**Notes:** -Polymarket requires an API key for trade history. Use fetchOHLCV for public historical data. - ---- -### `create_order` - -Place a new order on the exchange. - - -**Signature:** - -```python -def create_order(params: CreateOrderParams) -> Order: -``` - -**Parameters:** - -- `params` ([CreateOrderParams](#createorderparams)): Order parameters - -**Returns:** [Order](#order) - The created order - -**Example:** - -```python +# PMXT Python SDK - API Reference + +A unified Python SDK for supported prediction markets, with local sidecar access to PMXT exchange implementations and hosted services where configured. + +## Installation + +```bash +pip install pmxt +``` + +## Quick Start + +```python +import pmxt + +# Initialize exchanges (server starts automatically!) +poly = pmxt.Polymarket() +kalshi = pmxt.Kalshi() +limitless = pmxt.Limitless() # Requires API key for authenticated operations + +# Search for markets +markets = poly.fetch_markets(query="Trump") +print(markets[0].title) +``` + +> **Note**: This SDK automatically manages the PMXT sidecar server. Just import and use! + +--- + +## Server Management + +The SDK exposes a `pmxt.server` namespace for managing the background sidecar server. Use these commands for clearing state, resolving "port busy" errors, inspecting server health, or tailing logs from interactive environments like Jupyter. + +```python +import pmxt + +pmxt.server.status() # snapshot dict: running, pid, port, version, uptime_seconds, lock_file +pmxt.server.health() # bool - True if /health responds ok +pmxt.server.start() # idempotent - no-op if already running +pmxt.server.stop() # stop the sidecar and clean up the lock file +pmxt.server.restart() # stop and start the sidecar +pmxt.server.logs(50) # last N log lines from ~/.pmxt/server.log (default 50) +``` + +### `pmxt.server.status` + +Returns a fresh dict describing the sidecar state. Useful for diagnosing "is it running?" before issuing API calls. + +```python +import pmxt +info = pmxt.server.status() +print(info["running"], info["pid"], info["port"], info["uptime_seconds"]) +``` + +### `pmxt.server.health` + +Returns `True` if the sidecar's `/health` endpoint responds with status `ok`, otherwise `False`. Lighter than `status()` when you only need a boolean liveness check. + +```python +import pmxt +if not pmxt.server.health(): + pmxt.server.restart() +``` + +### `pmxt.server.start` + +Idempotently start the sidecar. Returns immediately if a healthy server is already running. Use this when you want to fail fast on startup rather than letting the first API call lazily boot the server. + +```python +import pmxt +pmxt.server.start() +``` + +### `pmxt.server.stop` + +Stop the running sidecar and clean up its lock file. + +```python +import pmxt +pmxt.server.stop() +``` + +### `pmxt.server.restart` + +Stop the sidecar (if running) and start a fresh one. Equivalent to `stop()` followed by `start()`. + +```python +import pmxt +pmxt.server.restart() +``` + +### `pmxt.server.logs` + +Return the last `n` lines (default `50`) from the sidecar log file at `~/.pmxt/server.log`. Returns an empty list if no log file exists yet. Invaluable when the server is misbehaving and you need to see what it actually printed. + +```python +import pmxt +for line in pmxt.server.logs(100): + print(line) +``` + +--- + +## Methods + +### `has` + +Capability map indicating which methods this exchange supports. + + +**Signature:** + +```python +has: ExchangeHas +``` + +**Parameters:** + +- None + +**Returns:** ExchangeHas - Result + +**Example:** + +```python +exchange.has +``` + + +--- +### `load_markets` + +Load and cache all markets from the exchange into `this.markets` and `this.marketsBySlug`. + + +**Signature:** + +```python +def load_markets(reload: bool) -> Dict[str, UnifiedMarket]: +``` + +**Parameters:** + +- `reload` (bool): Force a fresh fetch from the API even if markets are already loaded + +**Returns:** Dict[str, [UnifiedMarket](#unifiedmarket)] - Dictionary of markets indexed by marketId + +**Example:** + +```python +exchange.load_markets(reload=True) +``` + + +--- +### `fetch_markets` + +Fetch markets with optional filtering, search, or slug lookup. + + +**Signature:** + +```python +def fetch_markets(params: Optional[MarketFetchParams] = None) -> List[UnifiedMarket]: +``` + +**Parameters:** + +- `params` (MarketFetchParams) - **Optional**: Optional parameters for filtering and search + - `params.query` - Search keyword to filter markets + - `params.slug` - Market slug/ticker for direct lookup + - `params.limit` - Maximum number of results + - `params.offset` - Pagination offset + - `params.sort` - Sort order ('volume' | 'liquidity' | 'newest') + - `params.search_in` - Where to search ('title' | 'description' | 'both') + +**Returns:** List[[UnifiedMarket](#unifiedmarket)] - Array of unified markets + +**Example:** + +```python +exchange.fetch_markets(query="Trump", slug="will-trump-win", limit=10) +``` + +**Notes:** +ordering — exchanges may reorder or add markets between requests. For stable iteration +across pages, use `loadMarkets()` and paginate over `Object.values(exchange.markets)`. +Some exchanges (like Limitless) may only support status 'active' for search results. + +--- +### `fetch_markets_paginated` + +Fetch markets with cursor-based pagination backed by a stable in-memory snapshot. + + +**Signature:** + +```python +def fetch_markets_paginated(params: Optional[dict] = None) -> PaginatedMarketsResult: +``` + +**Parameters:** + +- `params` (dict) - **Optional**: params + - `params.limit` - Page size (default: return all markets) + - `params.cursor` - Opaque cursor returned by a previous call + +**Returns:** [PaginatedMarketsResult](#paginatedmarketsresult) - PaginatedMarketsResult with data, total, and optional nextCursor + +**Example:** + +```python +exchange.fetch_markets_paginated(limit=10, cursor="...") +``` + + +--- +### `fetch_events_paginated` + +Paginated variant of {@link fetchEvents}. + + +**Signature:** + +```python +def fetch_events_paginated(params: Optional[dict] = None) -> PaginatedEventsResult: +``` + +**Parameters:** + +- `params` (dict) - **Optional**: params + - `params.limit` - Page size (default: return all events) + - `params.cursor` - Opaque cursor returned by a previous call + +**Returns:** [PaginatedEventsResult](#paginatedeventsresult) - PaginatedEventsResult with data, total, and optional nextCursor + +**Example:** + +```python +exchange.fetch_events_paginated(limit=10, cursor="...") +``` + + +--- +### `fetch_events` + +Fetch events with optional keyword search. + + +**Signature:** + +```python +def fetch_events(params: Optional[EventFetchParams] = None) -> List[UnifiedEvent]: +``` + +**Parameters:** + +- `params` ([EventFetchParams](#eventfetchparams)) - **Optional**: Optional parameters for search and filtering + - `params.query` - Search keyword to filter events. If omitted, returns top events by volume. + - `params.limit` - Maximum number of results + - `params.offset` - Pagination offset + - `params.search_in` - Where to search ('title' | 'description' | 'both') + +**Returns:** List[[UnifiedEvent](#unifiedevent)] - Array of unified events + +**Example:** + +```python +exchange.fetch_events(query="Trump", limit=10, offset=0) +``` + +**Notes:** +Some exchanges (like Limitless) may only support status 'active' for search results. + +--- +### `fetch_series` + +Fetch the recurring series (fourth tier above Event -> Market -> Outcome) + + +**Signature:** + +```python +def fetch_series(params: Optional[SeriesFetchParams] = None) -> List[UnifiedSeries]: +``` + +**Parameters:** + +- `params` (SeriesFetchParams) - **Optional**: params + +**Returns:** List[[UnifiedSeries](#unifiedseries)] - Array of unified series. Always an array, including the singular-lookup case. + +**Example:** + +```python +exchange.fetch_series() +``` + + +--- +### `fetch_market` + +Fetch a single market by lookup parameters. + + +**Signature:** + +```python +def fetch_market(params: Optional[MarketFetchParams] = None) -> UnifiedMarket: +``` + +**Parameters:** + +- `params` (MarketFetchParams) - **Optional**: Lookup parameters (marketId, outcomeId, slug, etc.) + +**Returns:** [UnifiedMarket](#unifiedmarket) - A single unified market + +**Example:** + +```python +exchange.fetch_market() +``` + + +--- +### `fetch_event` + +Fetch a single event by lookup parameters. + + +**Signature:** + +```python +def fetch_event(params: Optional[EventFetchParams] = None) -> UnifiedEvent: +``` + +**Parameters:** + +- `params` ([EventFetchParams](#eventfetchparams)) - **Optional**: Lookup parameters (eventId, slug, query) + +**Returns:** [UnifiedEvent](#unifiedevent) - A single unified event + +**Example:** + +```python +exchange.fetch_event() +``` + + +--- +### `fetch_ohlcv` + +Fetch historical OHLCV (candlestick) price data for a specific market outcome. + + +**Signature:** + +```python +def fetch_ohlcv(outcome_id: str, params: OHLCVParams) -> List[PriceCandle]: +``` + +**Parameters:** + +- `outcome_id` (str): The Outcome ID (outcomeId). Use outcome.outcomeId, NOT market.marketId +- `params` ([OHLCVParams](#ohlcvparams)): OHLCV parameters including resolution (required) + +**Returns:** List[[PriceCandle](#pricecandle)] - Array of price candles + +**Example:** + +```python +exchange.fetch_ohlcv(outcome_id="abc123", resolution="1h", limit=100) +``` + +**Notes:** +**CRITICAL**: Use `outcome.outcomeId` (TS) / `outcome.outcome_id` (Python), not the market ID. +Polymarket: outcomeId is the CLOB Token ID. Kalshi: outcomeId is the Market Ticker. +Common resolutions: '1m' | '5m' | '15m' | '1h' | '6h' | '1d'. Arbitrary intervals (e.g. '30s', '120s', '3h') accepted by venues that support them. + +--- +### `fetch_order_book` + +Fetch the order book (bids/asks) for a specific outcome. + + +**Signature:** + +```python +def fetch_order_book(outcome_id: str, limit: Optional[float] = None, params: Optional[FetchOrderBookParams] = None) -> OrderBook: +``` + +**Parameters:** + +- `outcome_id` (str): The Outcome ID (outcomeId) or market slug +- `limit` (float) - **Optional**: Max number of bid/ask levels to return. For range +- `params` ([FetchOrderBookParams](#fetchorderbookparams)) - **Optional**: Optional parameters: + +**Returns:** [OrderBook](#orderbook) - Order book with bids and asks. Returns OrderBook[] when + +**Example:** + +```python +exchange.fetch_order_book(outcome_id="abc123", limit=10, params={}) +``` + + +--- +### `fetch_order_books` + +Batch variant of {@link fetchOrderBook}. Fetches order books for + + +**Signature:** + +```python +def fetch_order_books(outcome_ids: List[str]) -> Dict[str, OrderBook]: +``` + +**Parameters:** + +- `outcome_ids` (List[str]): List of Outcome IDs (outcomeId). Each id must be in the + +**Returns:** Dict[str, [OrderBook](#orderbook)] - A map keyed by the input id (preserving the caller's exact + +**Example:** + +```python +exchange.fetch_order_books(outcome_ids=["12345"]) +``` + + +--- +### `fetch_trades` + +Fetch raw trade history for a specific outcome. + + +**Signature:** + +```python +def fetch_trades(outcome_id: str, params: Union[TradesParams, HistoryFilterParams]) -> List[Trade]: +``` + +**Parameters:** + +- `outcome_id` (str): The Outcome ID (outcomeId) +- `params` (Union[[TradesParams](#tradesparams), [HistoryFilterParams](#historyfilterparams)]): Trade filter parameters + +**Returns:** List[[Trade](#trade)] - Array of recent trades + +**Example:** + +```python +exchange.fetch_trades(outcome_id="abc123", limit=50) +``` + +**Notes:** +Polymarket requires an API key for trade history. Use fetchOHLCV for public historical data. + +--- +### `create_order` + +Place a new order on the exchange. + + +**Signature:** + +```python +def create_order(params: CreateOrderParams) -> Order: +``` + +**Parameters:** + +- `params` ([CreateOrderParams](#createorderparams)): Order parameters + +**Returns:** [Order](#order) - The created order + +**Example:** + +```python exchange.create_order( market_id="12345", outcome_id="abc123", @@ -485,31 +485,31 @@ exchange.create_order( type="limit", amount=50, price=0.65, -) -``` - - ---- -### `build_order` - -Build an order payload without submitting it to the exchange. - - -**Signature:** - -```python -def build_order(params: CreateOrderParams) -> BuiltOrder: -``` - -**Parameters:** - -- `params` ([CreateOrderParams](#createorderparams)): Order parameters (same as createOrder) - -**Returns:** [BuiltOrder](#builtorder) - A BuiltOrder containing the exchange-native payload - -**Example:** - -```python +) +``` + + +--- +### `build_order` + +Build an order payload without submitting it to the exchange. + + +**Signature:** + +```python +def build_order(params: CreateOrderParams) -> BuiltOrder: +``` + +**Parameters:** + +- `params` ([CreateOrderParams](#createorderparams)): Order parameters (same as createOrder) + +**Returns:** [BuiltOrder](#builtorder) - A BuiltOrder containing the exchange-native payload + +**Example:** + +```python exchange.build_order( market_id="12345", outcome_id="abc123", @@ -517,31 +517,31 @@ exchange.build_order( type="limit", amount=50, price=0.65, -) -``` - - ---- -### `submit_order` - -Submit a pre-built order returned by buildOrder(). - - -**Signature:** - -```python -def submit_order(built: BuiltOrder) -> Order: -``` - -**Parameters:** - -- `built` ([BuiltOrder](#builtorder)): A BuiltOrder from buildOrder() - -**Returns:** [Order](#order) - The submitted order - -**Example:** - -```python +) +``` + + +--- +### `submit_order` + +Submit a pre-built order returned by buildOrder(). + + +**Signature:** + +```python +def submit_order(built: BuiltOrder) -> Order: +``` + +**Parameters:** + +- `built` ([BuiltOrder](#builtorder)): A BuiltOrder from buildOrder() + +**Returns:** [Order](#order) - The submitted order + +**Example:** + +```python built = exchange.build_order( market_id="12345", outcome_id="abc123", @@ -550,4648 +550,4648 @@ built = exchange.build_order( amount=50, price=0.65, ) -exchange.submit_order(built) -``` - - ---- -### `cancel_order` - -Cancel an existing open order. - - -**Signature:** +exchange.submit_order(built) +``` + + +--- +### `cancel_order` + +Cancel an existing open order. + + +**Signature:** + +```python +def cancel_order(order_id: str) -> Order: +``` + +**Parameters:** + +- `order_id` (str): The order ID to cancel + +**Returns:** [Order](#order) - The cancelled order + +**Example:** + +```python +exchange.cancel_order(order_id="ord-001") +``` + + +--- +### `fetch_order` + +Fetch a specific order by ID. + + +**Signature:** + +```python +def fetch_order(order_id: str) -> Order: +``` + +**Parameters:** + +- `order_id` (str): The order ID to look up + +**Returns:** [Order](#order) - The order details + +**Example:** + +```python +exchange.fetch_order(order_id="ord-001") +``` + + +--- +### `fetch_open_orders` + +Fetch all open orders, optionally filtered by market. + + +**Signature:** + +```python +def fetch_open_orders(market_id: Optional[str] = None) -> List[Order]: +``` + +**Parameters:** + +- `market_id` (str) - **Optional**: Optional market ID to filter by + +**Returns:** List[[Order](#order)] - Array of open orders + +**Example:** + +```python +exchange.fetch_open_orders(market_id="12345") +``` + + +--- +### `fetch_my_trades` + +Fetch authenticated user trade history. + + +**Signature:** + +```python +def fetch_my_trades(params: Optional[MyTradesParams] = None) -> List[UserTrade]: +``` + +**Parameters:** + +- `params` ([MyTradesParams](#mytradesparams)) - **Optional**: Optional trade history filters + - `params.outcome_id` - Filter by outcome token ID + - `params.market_id` - Filter by market ID or ticker + - `params.since` - Start timestamp or ISO date + - `params.until` - End timestamp or ISO date + - `params.limit` - Maximum number of trades + - `params.cursor` - Pagination cursor + +**Returns:** List[[UserTrade](#usertrade)] - Array of user trades + +**Example:** + +```python +exchange.fetch_my_trades(limit=10) +``` + + +--- +### `fetch_closed_orders` + +Fetch authenticated closed orders. + + +**Signature:** + +```python +def fetch_closed_orders(params: Optional[OrderHistoryParams] = None) -> List[Order]: +``` + +**Parameters:** + +- `params` ([OrderHistoryParams](#orderhistoryparams)) - **Optional**: Optional order history filters + - `params.market_id` - Filter by market ID or ticker + - `params.since` - Start timestamp or ISO date + - `params.until` - End timestamp or ISO date + - `params.limit` - Maximum number of orders + - `params.cursor` - Pagination cursor + +**Returns:** List[[Order](#order)] - Array of closed orders + +**Example:** + +```python +exchange.fetch_closed_orders(market_id="12345", limit=10) +``` + + +--- +### `fetch_all_orders` + +Fetch authenticated order history across open and closed orders. + + +**Signature:** + +```python +def fetch_all_orders(params: Optional[OrderHistoryParams] = None) -> List[Order]: +``` + +**Parameters:** + +- `params` ([OrderHistoryParams](#orderhistoryparams)) - **Optional**: Optional order history filters + - `params.market_id` - Filter by market ID or ticker + - `params.since` - Start timestamp or ISO date + - `params.until` - End timestamp or ISO date + - `params.limit` - Maximum number of orders + - `params.cursor` - Pagination cursor + +**Returns:** List[[Order](#order)] - Array of orders + +**Example:** + +```python +exchange.fetch_all_orders(market_id="12345", limit=10) +``` + + +--- +### `fetch_positions` + +Fetch current user positions across all markets. + + +**Signature:** + +```python +def fetch_positions(address: Optional[str] = None) -> List[Position]: +``` + +**Parameters:** + +- `address` (str) - **Optional**: Optional public wallet address + +**Returns:** List[[Position](#position)] - Array of user positions + +**Example:** + +```python +exchange.fetch_positions(address="0xabc...") +``` + + +--- +### `fetch_balance` + +Fetch account balances. + + +**Signature:** + +```python +def fetch_balance(address: Optional[str] = None) -> List[Balance]: +``` + +**Parameters:** + +- `address` (str) - **Optional**: Optional public wallet address + +**Returns:** List[[Balance](#balance)] - Array of account balances + +**Example:** + +```python +exchange.fetch_balance(address="0xabc...") +``` + + +--- +### `get_execution_price` + +Calculate the volume-weighted average execution price for a given order size. + + +**Signature:** + +```python +def get_execution_price(order_book: OrderBook, side: Literal["buy", "sell"], amount: float) -> float: +``` + +**Parameters:** + +- `order_book` ([OrderBook](#orderbook)): The current order book +- `side` (Literal["buy", "sell"]): 'buy' or 'sell' +- `amount` (float): Number of contracts to simulate + +**Returns:** float - Average execution price, or 0 if insufficient liquidity + +**Example:** + +```python +order_book = exchange.fetch_order_book(outcome_id="abc123") +exchange.get_execution_price(order_book=order_book, side="buy", amount=50) +``` + + +--- +### `get_execution_price_detailed` + +Calculate detailed execution price information including partial fill data. + + +**Signature:** + +```python +def get_execution_price_detailed(order_book: OrderBook, side: Literal["buy", "sell"], amount: float) -> ExecutionPriceResult: +``` + +**Parameters:** + +- `order_book` ([OrderBook](#orderbook)): The current order book +- `side` (Literal["buy", "sell"]): 'buy' or 'sell' +- `amount` (float): Number of contracts to simulate + +**Returns:** [ExecutionPriceResult](#executionpriceresult) - Detailed execution result with price, filled amount, and fill status + +**Example:** + +```python +order_book = exchange.fetch_order_book(outcome_id="abc123") +exchange.get_execution_price_detailed(order_book=order_book, side="buy", amount=50) +``` + + +--- +### `filter_markets` + +Filter a list of markets by criteria. + + +**Signature:** + +```python +def filter_markets(markets: List[UnifiedMarket], criteria: Union[str, MarketFilterCriteria, MarketFilterFunction]) -> List[UnifiedMarket]: +``` + +**Parameters:** + +- `markets` (List[[UnifiedMarket](#unifiedmarket)]): Array of markets to filter +- `criteria` (Union[str, [MarketFilterCriteria](#marketfiltercriteria), MarketFilterFunction]): Filter criteria: string (text search), object (structured), or function (predicate) + +**Returns:** List[[UnifiedMarket](#unifiedmarket)] - Filtered array of markets + +**Example:** + +```python +markets = exchange.fetch_markets(query="Trump") +exchange.filter_markets(markets=markets, criteria="Trump") +``` + + +--- +### `filter_events` + +Filter a list of events by criteria. + + +**Signature:** + +```python +def filter_events(events: List[UnifiedEvent], criteria: Union[str, EventFilterCriteria, EventFilterFunction]) -> List[UnifiedEvent]: +``` + +**Parameters:** + +- `events` (List[[UnifiedEvent](#unifiedevent)]): Array of events to filter +- `criteria` (Union[str, [EventFilterCriteria](#eventfiltercriteria), EventFilterFunction]): Filter criteria: string (text search), object (structured), or function (predicate) + +**Returns:** List[[UnifiedEvent](#unifiedevent)] - Filtered array of events + +**Example:** + +```python +events = exchange.fetch_events(query="Trump") +exchange.filter_events(events=events, criteria="Trump") +``` + + +--- +### `watch_order_book` + +Watch order book updates in real-time via WebSocket. + + +**Signature:** + +```python +def watch_order_book(outcome_id: str, limit: Optional[float] = None, params: Dict[str, Any]) -> OrderBook: +``` + +**Parameters:** + +- `outcome_id` (str): The Outcome ID to watch +- `limit` (float) - **Optional**: Optional limit for orderbook depth +- `params` (Dict[str, Any]): Optional exchange-specific parameters + +**Returns:** [OrderBook](#orderbook) - Promise that resolves with the current orderbook state + +**Example:** + +```python +exchange.watch_order_book(outcome_id="abc123", limit=10, params={}) +``` + + +--- +### `watch_order_books` + +Watch multiple order books simultaneously via WebSocket. + + +**Signature:** + +```python +def watch_order_books(outcome_ids: List[str], limit: Optional[float] = None, params: Dict[str, Any]) -> Dict[str, OrderBook]: +``` + +**Parameters:** + +- `outcome_ids` (List[str]): Array of Outcome IDs to watch +- `limit` (float) - **Optional**: Optional limit for orderbook depth +- `params` (Dict[str, Any]): Optional exchange-specific parameters + +**Returns:** Dict[str, [OrderBook](#orderbook)] - Promise that resolves with order books keyed by ID + +**Example:** + +```python +exchange.watch_order_books(outcome_ids=["12345"], limit=10, params={}) +``` + + +--- +### `unwatch_order_book` + +Unsubscribe from a previously watched order book stream. + + +**Signature:** + +```python +def unwatch_order_book(outcome_id: str) -> None: +``` + +**Parameters:** + +- `outcome_id` (str): The Outcome ID to stop watching + +**Returns:** None - Result + +**Example:** + +```python +exchange.unwatch_order_book(outcome_id="abc123") +``` + + +--- +### `watch_trades` + +Watch trade executions in real-time via WebSocket. + + +**Signature:** + +```python +def watch_trades(outcome_id: str, address: Optional[str] = None, since: Optional[float] = None, limit: Optional[float] = None) -> List[Trade]: +``` + +**Parameters:** + +- `outcome_id` (str): The Outcome ID to watch +- `address` (str) - **Optional**: Public wallet address +- `since` (float) - **Optional**: Optional timestamp to filter trades from +- `limit` (float) - **Optional**: Optional limit for number of trades + +**Returns:** List[[Trade](#trade)] - Promise that resolves with recent trades + +**Example:** + +```python +exchange.watch_trades(outcome_id="abc123", address="0xabc...", since=1710000000000, limit=50) +``` + + +--- +### `watch_address` + +Stream activity for a public wallet address + + +**Signature:** + +```python +def watch_address(address: str, types: Optional[List[SubscriptionOption]] = None) -> SubscribedAddressSnapshot: +``` + +**Parameters:** + +- `address` (str): Public wallet address to watch +- `types` (List[SubscriptionOption]) - **Optional**: Subset of activity to watch (default: all types) + +**Returns:** SubscribedAddressSnapshot - Promise that resolves with the latest SubscribedAddressSnapshot snapshot + +**Example:** + +```python +exchange.watch_address(address="0xabc...", types=["trades"]) +``` + + +--- +### `unwatch_address` + +Stop watching a previously registered wallet address and release its resource updates. + + +**Signature:** + +```python +def unwatch_address(address: str) -> None: +``` + +**Parameters:** + +- `address` (str): Public wallet address to stop watching + +**Returns:** None - Result + +**Example:** + +```python +exchange.unwatch_address(address="0xabc...") +``` + + +--- +### `close` + +Close all WebSocket connections and clean up resources. + + +**Signature:** + +```python +def close() -> None: +``` + +**Parameters:** + +- None + +**Returns:** None - Result + +**Example:** + +```python +exchange.close() +``` + + +--- +### `fetch_market_matches` + +Find the same or related market on other venues. Two modes: + + +**Signature:** + +```python +def fetch_market_matches(params: Optional[FetchMarketMatchesParams] = None) -> List[MatchResult]: +``` + +**Parameters:** + +- `params` ([FetchMarketMatchesParams](#fetchmarketmatchesparams)) - **Optional**: Match filter parameters + +**Returns:** List[[MatchResult](#matchresult)] - Array of matched markets with relation and confidence + +**Example:** + +```python +exchange.fetch_market_matches() +``` + + +--- +### `fetch_matches` + +fetchMatches + + +**Signature:** + +```python +def fetch_matches(params: FetchMatchesParams) -> List[MatchResult]: +``` + +**Parameters:** + +- `params` (FetchMatchesParams): params + +**Returns:** List[[MatchResult](#matchresult)] - Result + +**Example:** + +```python +exchange.fetch_matches() +``` + + +--- +### `fetch_event_matches` + +Find the same or related event on other venues. Two modes: + + +**Signature:** + +```python +def fetch_event_matches(params: Optional[FetchEventMatchesParams] = None) -> List[EventMatchResult]: +``` + +**Parameters:** + +- `params` ([FetchEventMatchesParams](#fetcheventmatchesparams)) - **Optional**: Event match filter parameters + +**Returns:** List[[EventMatchResult](#eventmatchresult)] - Array of matched events with market-level match details + +**Example:** + +```python +exchange.fetch_event_matches() +``` + + +--- +### `compare_market_prices` + +Compare live prices for the same market across venues. Finds identity matches and returns side-by-side best bid/ask prices so you can spot price differences at a glance. + + +**Signature:** + +```python +def compare_market_prices(params: CompareMarketPricesParams) -> List[PriceComparison]: +``` + +**Parameters:** + +- `params` (CompareMarketPricesParams): Match filter parameters (uses relation: 'identity' internally) + +**Returns:** List[[PriceComparison](#pricecomparison)] - Array of price comparisons across venues + +**Example:** + +```python +exchange.compare_market_prices() +``` + + +--- +### `fetch_related_markets` + +Find related markets across venues. Discovers subset/superset market relationships + + +**Signature:** + +```python +def fetch_related_markets(params: FetchMatchesParams) -> List[PriceComparison]: +``` + +**Parameters:** + +- `params` (FetchMatchesParams): Match filter parameters + +**Returns:** List[[PriceComparison](#pricecomparison)] - Array of subset/superset matches with live prices + +**Example:** + +```python +exchange.fetch_related_markets() +``` + + +--- +### `fetch_matched_markets` + +fetchMatchedMarkets + + +**Signature:** + +```python +def fetch_matched_markets(params: Optional[FetchMatchedMarketsParams] = None) -> List[MatchedMarketPair]: +``` + +**Parameters:** + +- `params` ([FetchMatchedMarketsParams](#fetchmatchedmarketsparams)) - **Optional**: params + +**Returns:** List[[MatchedMarketPair](#matchedmarketpair)] - Result + +**Example:** + +```python +exchange.fetch_matched_markets() +``` + + +--- +### `fetch_matched_prices` + +fetchMatchedPrices + + +**Signature:** + +```python +def fetch_matched_prices(params: Optional[FetchMatchedPricesParams] = None) -> List[MatchedPricePair]: +``` + +**Parameters:** + +- `params` (FetchMatchedPricesParams) - **Optional**: Price comparison parameters (minDifference, category, limit) + +**Returns:** List[MatchedPricePair] - Array of matched market pairs with prices from each venue + +**Example:** + +```python +exchange.fetch_matched_prices() +``` + + +--- +### `fetch_hedges` + +fetchHedges + + +**Signature:** + +```python +def fetch_hedges(params: FetchMatchesParams) -> List[PriceComparison]: +``` + +**Parameters:** + +- `params` (FetchMatchesParams): Match filter parameters + +**Returns:** List[[PriceComparison](#pricecomparison)] - Array of subset/superset matches with live prices + +**Example:** + +```python +exchange.fetch_hedges() +``` + + +--- +### `fetch_arbitrage` + +fetchArbitrage + + +**Signature:** + +```python +def fetch_arbitrage(params: Optional[FetchArbitrageParams] = None) -> List[ArbitrageOpportunity]: +``` + +**Parameters:** + +- `params` ([FetchArbitrageParams](#fetcharbitrageparams)) - **Optional**: Arbitrage scan parameters (minSpread, category, limit) + +**Returns:** List[[ArbitrageOpportunity](#arbitrageopportunity)] - Array of arbitrage opportunities sorted by spread + +**Example:** + +```python +exchange.fetch_arbitrage() +``` + + +--- +### `watch_prices` + +Watch AMM price updates for a market address (Limitless only). + +> **Note**: This method is only available on **limitless** exchange. + + +**Signature:** + +```python +def watch_prices(market_address: str, callback: Callable[[Any], None]) -> None: +``` + +**Parameters:** + +- `market_address` (str): Market contract address +- `callback` (Callable[[Any], None]): Callback for price updates + +**Returns:** None - Result + +**Example:** + +```python +def handle_price_update(data): + pass +exchange.watch_prices(market_address="0xabc...", callback=handle_price_update) +``` + + +--- +### `watch_user_positions` + +Watch user positions in real-time (Limitless only). + +> **Note**: This method is only available on **limitless** exchange. + + +**Signature:** + +```python +def watch_user_positions(callback: Callable[[Any], None]) -> None: +``` + +**Parameters:** + +- `callback` (Callable[[Any], None]): Callback for position updates + +**Returns:** None - Result + +**Example:** + +```python +def handle_position_update(data): + pass +exchange.watch_user_positions(callback=handle_position_update) +``` + + +--- +### `watch_user_transactions` + +Watch user transactions in real-time (Limitless only). + +> **Note**: This method is only available on **limitless** exchange. + + +**Signature:** + +```python +def watch_user_transactions(callback: Callable[[Any], None]) -> None: +``` + +**Parameters:** + +- `callback` (Callable[[Any], None]): Callback for transaction updates + +**Returns:** None - Result + +**Example:** + +```python +def handle_transaction_update(data): + pass +exchange.watch_user_transactions(callback=handle_transaction_update) +``` + + +--- +### `init_auth` + +Initialize L2 API credentials for implicit API signing. + +> **Note**: This method is only available on **polymarket** exchange. + + +**Signature:** + +```python +def init_auth() -> None: +``` + +**Parameters:** + +- None + +**Returns:** None - Result + +**Example:** + +```python +exchange.init_auth() +``` + + +--- +### `pre_warm_market` + +Pre-warm the SDK's internal caches for a market outcome. + +> **Note**: This method is only available on **polymarket** exchange. + + +**Signature:** + +```python +def pre_warm_market(outcome_id: str) -> None: +``` + +**Parameters:** + +- `outcome_id` (str): The CLOB Token ID for the outcome (use `outcome.outcomeId`) + +**Returns:** None - Result + +**Example:** + +```python +exchange.pre_warm_market(outcome_id="abc123") +``` + + +--- +### `get_event_by_id` + +Fetch a single event by its numeric ID (Probable only). + +> **Note**: This method is only available on **probable** exchange. + + +**Signature:** + +```python +def get_event_by_id(id: str) -> Optional[UnifiedEvent]: +``` + +**Parameters:** + +- `id` (str): The numeric event ID + +**Returns:** Optional[[UnifiedEvent](#unifiedevent)] - The UnifiedEvent, or null if not found + +**Example:** + +```python +exchange.get_event_by_id(id="12345") +``` + + +--- +### `get_event_by_slug` + +Fetch a single event by its URL slug (Probable only). + +> **Note**: This method is only available on **probable** exchange. + + +**Signature:** + +```python +def get_event_by_slug(slug: str) -> Optional[UnifiedEvent]: +``` + +**Parameters:** + +- `slug` (str): The event's URL slug (e.g. `"trump-2024-election"`) + +**Returns:** Optional[[UnifiedEvent](#unifiedevent)] - The UnifiedEvent, or null if not found + +**Example:** + +```python +exchange.get_event_by_slug(slug="will-trump-win") +``` + + +--- +### `watch_all_order_books` + +Stream all orderbook updates across venues via the hosted WebSocket API. + + +**Signature:** + +```python +def watch_all_order_books(venues: Optional[List[str]] = None) -> FirehoseEvent: +``` + +**Parameters:** + +- `venues` (List[str]) - **Optional**: Optional venue filter. Defaults to this exchange's venue + +**Returns:** FirehoseEvent - Next event with source, symbol, and orderbook + +**Example:** + +```python +exchange.watch_all_order_books(venues=["polymarket", "limitless"]) +``` + + +--- +### `firehose` + +Stream all orderbook updates across venues. + + +**Signature:** + +```python +def firehose(venues: Optional[List[str]] = None) -> FirehoseEvent: +``` + +**Parameters:** + +- `venues` (List[str]) - **Optional**: Optional venue filter + +**Returns:** FirehoseEvent - Next event with source, symbol, and orderbook + +**Example:** + +```python +exchange.firehose(venues=["polymarket", "limitless"]) +``` + + +--- + +## Complete Trading Workflow + +```python +import pmxt +import os -```python -def cancel_order(order_id: str) -> Order: -``` +exchange = pmxt.Polymarket( + private_key=os.getenv('POLYMARKET_PRIVATE_KEY') +) -**Parameters:** +# 1. Check balance +balances = exchange.fetch_balance() +if balances: + balance = balances[0] + print(f'Available: ${balance.available}') -- `order_id` (str): The order ID to cancel +# 2. Search for a market +markets = exchange.fetch_markets(query='Trump') +market = markets[0] +outcome = market.yes -**Returns:** [Order](#order) - The cancelled order +print(f'{market.title}') +print(f'Price: {outcome.price * 100:.1f}%') -**Example:** - -```python -exchange.cancel_order(order_id="ord-001") -``` - - ---- -### `fetch_order` - -Fetch a specific order by ID. - - -**Signature:** - -```python -def fetch_order(order_id: str) -> Order: -``` - -**Parameters:** - -- `order_id` (str): The order ID to look up - -**Returns:** [Order](#order) - The order details - -**Example:** - -```python -exchange.fetch_order(order_id="ord-001") -``` - - ---- -### `fetch_open_orders` - -Fetch all open orders, optionally filtered by market. - - -**Signature:** - -```python -def fetch_open_orders(market_id: Optional[str] = None) -> List[Order]: -``` - -**Parameters:** - -- `market_id` (str) - **Optional**: Optional market ID to filter by - -**Returns:** List[[Order](#order)] - Array of open orders - -**Example:** - -```python -exchange.fetch_open_orders(market_id="12345") -``` - - ---- -### `fetch_my_trades` - -Fetch authenticated user trade history. - - -**Signature:** - -```python -def fetch_my_trades(params: Optional[MyTradesParams] = None) -> List[UserTrade]: -``` - -**Parameters:** - -- `params` ([MyTradesParams](#mytradesparams)) - **Optional**: Optional trade history filters - - `params.outcome_id` - Filter by outcome token ID - - `params.market_id` - Filter by market ID or ticker - - `params.since` - Start timestamp or ISO date - - `params.until` - End timestamp or ISO date - - `params.limit` - Maximum number of trades - - `params.cursor` - Pagination cursor - -**Returns:** List[[UserTrade](#usertrade)] - Array of user trades - -**Example:** - -```python -exchange.fetch_my_trades(limit=10) -``` - - ---- -### `fetch_closed_orders` - -Fetch authenticated closed orders. - - -**Signature:** - -```python -def fetch_closed_orders(params: Optional[OrderHistoryParams] = None) -> List[Order]: -``` - -**Parameters:** - -- `params` ([OrderHistoryParams](#orderhistoryparams)) - **Optional**: Optional order history filters - - `params.market_id` - Filter by market ID or ticker - - `params.since` - Start timestamp or ISO date - - `params.until` - End timestamp or ISO date - - `params.limit` - Maximum number of orders - - `params.cursor` - Pagination cursor - -**Returns:** List[[Order](#order)] - Array of closed orders - -**Example:** - -```python -exchange.fetch_closed_orders(market_id="12345", limit=10) -``` - - ---- -### `fetch_all_orders` - -Fetch authenticated order history across open and closed orders. - - -**Signature:** - -```python -def fetch_all_orders(params: Optional[OrderHistoryParams] = None) -> List[Order]: -``` - -**Parameters:** - -- `params` ([OrderHistoryParams](#orderhistoryparams)) - **Optional**: Optional order history filters - - `params.market_id` - Filter by market ID or ticker - - `params.since` - Start timestamp or ISO date - - `params.until` - End timestamp or ISO date - - `params.limit` - Maximum number of orders - - `params.cursor` - Pagination cursor - -**Returns:** List[[Order](#order)] - Array of orders - -**Example:** - -```python -exchange.fetch_all_orders(market_id="12345", limit=10) -``` - - ---- -### `fetch_positions` - -Fetch current user positions across all markets. - - -**Signature:** - -```python -def fetch_positions(address: Optional[str] = None) -> List[Position]: -``` - -**Parameters:** - -- `address` (str) - **Optional**: Optional public wallet address - -**Returns:** List[[Position](#position)] - Array of user positions - -**Example:** - -```python -exchange.fetch_positions(address="0xabc...") -``` - - ---- -### `fetch_balance` - -Fetch account balances. - - -**Signature:** - -```python -def fetch_balance(address: Optional[str] = None) -> List[Balance]: -``` - -**Parameters:** - -- `address` (str) - **Optional**: Optional public wallet address - -**Returns:** List[[Balance](#balance)] - Array of account balances - -**Example:** - -```python -exchange.fetch_balance(address="0xabc...") -``` - - ---- -### `get_execution_price` - -Calculate the volume-weighted average execution price for a given order size. - - -**Signature:** - -```python -def get_execution_price(order_book: OrderBook, side: Literal["buy", "sell"], amount: float) -> float: -``` - -**Parameters:** - -- `order_book` ([OrderBook](#orderbook)): The current order book -- `side` (Literal["buy", "sell"]): 'buy' or 'sell' -- `amount` (float): Number of contracts to simulate - -**Returns:** float - Average execution price, or 0 if insufficient liquidity - -**Example:** - -```python -order_book = exchange.fetch_order_book(outcome_id="abc123") -exchange.get_execution_price(order_book=order_book, side="buy", amount=50) -``` - - ---- -### `get_execution_price_detailed` - -Calculate detailed execution price information including partial fill data. - - -**Signature:** - -```python -def get_execution_price_detailed(order_book: OrderBook, side: Literal["buy", "sell"], amount: float) -> ExecutionPriceResult: -``` - -**Parameters:** - -- `order_book` ([OrderBook](#orderbook)): The current order book -- `side` (Literal["buy", "sell"]): 'buy' or 'sell' -- `amount` (float): Number of contracts to simulate - -**Returns:** [ExecutionPriceResult](#executionpriceresult) - Detailed execution result with price, filled amount, and fill status - -**Example:** - -```python -order_book = exchange.fetch_order_book(outcome_id="abc123") -exchange.get_execution_price_detailed(order_book=order_book, side="buy", amount=50) -``` - - ---- -### `filter_markets` - -Filter a list of markets by criteria. - - -**Signature:** - -```python -def filter_markets(markets: List[UnifiedMarket], criteria: Union[str, MarketFilterCriteria, MarketFilterFunction]) -> List[UnifiedMarket]: -``` - -**Parameters:** - -- `markets` (List[[UnifiedMarket](#unifiedmarket)]): Array of markets to filter -- `criteria` (Union[str, [MarketFilterCriteria](#marketfiltercriteria), MarketFilterFunction]): Filter criteria: string (text search), object (structured), or function (predicate) - -**Returns:** List[[UnifiedMarket](#unifiedmarket)] - Filtered array of markets - -**Example:** - -```python -markets = exchange.fetch_markets(query="Trump") -exchange.filter_markets(markets=markets, criteria="Trump") -``` - - ---- -### `filter_events` - -Filter a list of events by criteria. - - -**Signature:** - -```python -def filter_events(events: List[UnifiedEvent], criteria: Union[str, EventFilterCriteria, EventFilterFunction]) -> List[UnifiedEvent]: -``` - -**Parameters:** - -- `events` (List[[UnifiedEvent](#unifiedevent)]): Array of events to filter -- `criteria` (Union[str, [EventFilterCriteria](#eventfiltercriteria), EventFilterFunction]): Filter criteria: string (text search), object (structured), or function (predicate) - -**Returns:** List[[UnifiedEvent](#unifiedevent)] - Filtered array of events - -**Example:** - -```python -events = exchange.fetch_events(query="Trump") -exchange.filter_events(events=events, criteria="Trump") -``` - - ---- -### `watch_order_book` - -Watch order book updates in real-time via WebSocket. - - -**Signature:** - -```python -def watch_order_book(outcome_id: str, limit: Optional[float] = None, params: Dict[str, Any]) -> OrderBook: -``` - -**Parameters:** - -- `outcome_id` (str): The Outcome ID to watch -- `limit` (float) - **Optional**: Optional limit for orderbook depth -- `params` (Dict[str, Any]): Optional exchange-specific parameters - -**Returns:** [OrderBook](#orderbook) - Promise that resolves with the current orderbook state - -**Example:** - -```python -exchange.watch_order_book(outcome_id="abc123", limit=10, params={}) -``` - - ---- -### `watch_order_books` - -Watch multiple order books simultaneously via WebSocket. - - -**Signature:** - -```python -def watch_order_books(outcome_ids: List[str], limit: Optional[float] = None, params: Dict[str, Any]) -> Dict[str, OrderBook]: -``` - -**Parameters:** - -- `outcome_ids` (List[str]): Array of Outcome IDs to watch -- `limit` (float) - **Optional**: Optional limit for orderbook depth -- `params` (Dict[str, Any]): Optional exchange-specific parameters - -**Returns:** Dict[str, [OrderBook](#orderbook)] - Promise that resolves with order books keyed by ID - -**Example:** - -```python -exchange.watch_order_books(outcome_ids=["12345"], limit=10, params={}) -``` - - ---- -### `unwatch_order_book` - -Unsubscribe from a previously watched order book stream. - - -**Signature:** - -```python -def unwatch_order_book(outcome_id: str) -> None: -``` - -**Parameters:** - -- `outcome_id` (str): The Outcome ID to stop watching - -**Returns:** None - Result - -**Example:** - -```python -exchange.unwatch_order_book(outcome_id="abc123") -``` - - ---- -### `watch_trades` - -Watch trade executions in real-time via WebSocket. - - -**Signature:** - -```python -def watch_trades(outcome_id: str, address: Optional[str] = None, since: Optional[float] = None, limit: Optional[float] = None) -> List[Trade]: -``` - -**Parameters:** - -- `outcome_id` (str): The Outcome ID to watch -- `address` (str) - **Optional**: Public wallet address -- `since` (float) - **Optional**: Optional timestamp to filter trades from -- `limit` (float) - **Optional**: Optional limit for number of trades - -**Returns:** List[[Trade](#trade)] - Promise that resolves with recent trades - -**Example:** - -```python -exchange.watch_trades(outcome_id="abc123", address="0xabc...", since=1710000000000, limit=50) -``` - - ---- -### `watch_address` - -Stream activity for a public wallet address - - -**Signature:** - -```python -def watch_address(address: str, types: Optional[List[SubscriptionOption]] = None) -> SubscribedAddressSnapshot: -``` - -**Parameters:** - -- `address` (str): Public wallet address to watch -- `types` (List[SubscriptionOption]) - **Optional**: Subset of activity to watch (default: all types) - -**Returns:** SubscribedAddressSnapshot - Promise that resolves with the latest SubscribedAddressSnapshot snapshot - -**Example:** - -```python -exchange.watch_address(address="0xabc...", types=["trades"]) -``` - - ---- -### `unwatch_address` - -Stop watching a previously registered wallet address and release its resource updates. - - -**Signature:** - -```python -def unwatch_address(address: str) -> None: -``` - -**Parameters:** - -- `address` (str): Public wallet address to stop watching - -**Returns:** None - Result - -**Example:** - -```python -exchange.unwatch_address(address="0xabc...") -``` - - ---- -### `close` - -Close all WebSocket connections and clean up resources. - - -**Signature:** - -```python -def close() -> None: -``` - -**Parameters:** - -- None - -**Returns:** None - Result - -**Example:** - -```python -exchange.close() -``` - - ---- -### `fetch_market_matches` - -Find the same or related market on other venues. Two modes: - - -**Signature:** - -```python -def fetch_market_matches(params: Optional[FetchMarketMatchesParams] = None) -> List[MatchResult]: -``` - -**Parameters:** - -- `params` ([FetchMarketMatchesParams](#fetchmarketmatchesparams)) - **Optional**: Match filter parameters - -**Returns:** List[[MatchResult](#matchresult)] - Array of matched markets with relation and confidence - -**Example:** - -```python -exchange.fetch_market_matches() -``` - - ---- -### `fetch_matches` - -fetchMatches - - -**Signature:** - -```python -def fetch_matches(params: FetchMatchesParams) -> List[MatchResult]: -``` - -**Parameters:** - -- `params` (FetchMatchesParams): params - -**Returns:** List[[MatchResult](#matchresult)] - Result - -**Example:** - -```python -exchange.fetch_matches() -``` - - ---- -### `fetch_event_matches` - -Find the same or related event on other venues. Two modes: - - -**Signature:** - -```python -def fetch_event_matches(params: Optional[FetchEventMatchesParams] = None) -> List[EventMatchResult]: -``` - -**Parameters:** - -- `params` ([FetchEventMatchesParams](#fetcheventmatchesparams)) - **Optional**: Event match filter parameters - -**Returns:** List[[EventMatchResult](#eventmatchresult)] - Array of matched events with market-level match details - -**Example:** - -```python -exchange.fetch_event_matches() -``` - - ---- -### `compare_market_prices` - -Compare live prices for the same market across venues. Finds identity matches and returns side-by-side best bid/ask prices so you can spot price differences at a glance. - - -**Signature:** - -```python -def compare_market_prices(params: FetchMatchesParams) -> List[PriceComparison]: -``` - -**Parameters:** - -- `params` (FetchMatchesParams): Match filter parameters (uses relation: 'identity' internally) - -**Returns:** List[[PriceComparison](#pricecomparison)] - Array of price comparisons across venues - -**Example:** - -```python -exchange.compare_market_prices() -``` - - ---- -### `fetch_related_markets` - -Find related markets across venues. Discovers subset/superset market relationships - - -**Signature:** - -```python -def fetch_related_markets(params: FetchMatchesParams) -> List[PriceComparison]: -``` - -**Parameters:** - -- `params` (FetchMatchesParams): Match filter parameters - -**Returns:** List[[PriceComparison](#pricecomparison)] - Array of subset/superset matches with live prices - -**Example:** - -```python -exchange.fetch_related_markets() -``` - - ---- -### `fetch_matched_markets` - -fetchMatchedMarkets - - -**Signature:** - -```python -def fetch_matched_markets(params: Optional[FetchMatchedMarketsParams] = None) -> List[MatchedMarketPair]: -``` - -**Parameters:** - -- `params` ([FetchMatchedMarketsParams](#fetchmatchedmarketsparams)) - **Optional**: params - -**Returns:** List[[MatchedMarketPair](#matchedmarketpair)] - Result - -**Example:** - -```python -exchange.fetch_matched_markets() -``` - - ---- -### `fetch_matched_prices` - -fetchMatchedPrices - - -**Signature:** - -```python -def fetch_matched_prices(params: Optional[FetchMatchedPricesParams] = None) -> List[MatchedPricePair]: -``` - -**Parameters:** - -- `params` (FetchMatchedPricesParams) - **Optional**: Price comparison parameters (minDifference, category, limit) - -**Returns:** List[MatchedPricePair] - Array of matched market pairs with prices from each venue - -**Example:** - -```python -exchange.fetch_matched_prices() -``` - - ---- -### `fetch_hedges` - -fetchHedges - - -**Signature:** - -```python -def fetch_hedges(params: FetchMatchesParams) -> List[PriceComparison]: -``` - -**Parameters:** - -- `params` (FetchMatchesParams): Match filter parameters - -**Returns:** List[[PriceComparison](#pricecomparison)] - Array of subset/superset matches with live prices - -**Example:** - -```python -exchange.fetch_hedges() -``` - - ---- -### `fetch_arbitrage` - -fetchArbitrage - - -**Signature:** - -```python -def fetch_arbitrage(params: Optional[FetchArbitrageParams] = None) -> List[ArbitrageOpportunity]: -``` - -**Parameters:** - -- `params` ([FetchArbitrageParams](#fetcharbitrageparams)) - **Optional**: Arbitrage scan parameters (minSpread, category, limit) - -**Returns:** List[[ArbitrageOpportunity](#arbitrageopportunity)] - Array of arbitrage opportunities sorted by spread - -**Example:** - -```python -exchange.fetch_arbitrage() -``` - - ---- -### `watch_prices` - -Watch AMM price updates for a market address (Limitless only). - -> **Note**: This method is only available on **limitless** exchange. - - -**Signature:** - -```python -def watch_prices(market_address: str, callback: Callable[[Any], None]) -> None: -``` - -**Parameters:** - -- `market_address` (str): Market contract address -- `callback` (Callable[[Any], None]): Callback for price updates - -**Returns:** None - Result - -**Example:** - -```python -def handle_price_update(data): - pass -exchange.watch_prices(market_address="0xabc...", callback=handle_price_update) -``` - - ---- -### `watch_user_positions` - -Watch user positions in real-time (Limitless only). - -> **Note**: This method is only available on **limitless** exchange. - - -**Signature:** - -```python -def watch_user_positions(callback: Callable[[Any], None]) -> None: -``` - -**Parameters:** - -- `callback` (Callable[[Any], None]): Callback for position updates - -**Returns:** None - Result - -**Example:** - -```python -def handle_position_update(data): - pass -exchange.watch_user_positions(callback=handle_position_update) -``` - - ---- -### `watch_user_transactions` - -Watch user transactions in real-time (Limitless only). - -> **Note**: This method is only available on **limitless** exchange. - - -**Signature:** - -```python -def watch_user_transactions(callback: Callable[[Any], None]) -> None: -``` - -**Parameters:** - -- `callback` (Callable[[Any], None]): Callback for transaction updates - -**Returns:** None - Result - -**Example:** - -```python -def handle_transaction_update(data): - pass -exchange.watch_user_transactions(callback=handle_transaction_update) -``` - - ---- -### `init_auth` - -Initialize L2 API credentials for implicit API signing. - -> **Note**: This method is only available on **polymarket** exchange. - - -**Signature:** - -```python -def init_auth() -> None: -``` - -**Parameters:** - -- None - -**Returns:** None - Result - -**Example:** - -```python -exchange.init_auth() -``` - - ---- -### `pre_warm_market` - -Pre-warm the SDK's internal caches for a market outcome. - -> **Note**: This method is only available on **polymarket** exchange. - - -**Signature:** - -```python -def pre_warm_market(outcome_id: str) -> None: -``` - -**Parameters:** - -- `outcome_id` (str): The CLOB Token ID for the outcome (use `outcome.outcomeId`) - -**Returns:** None - Result - -**Example:** - -```python -exchange.pre_warm_market(outcome_id="abc123") -``` - - ---- -### `get_event_by_id` - -Fetch a single event by its numeric ID (Probable only). - -> **Note**: This method is only available on **probable** exchange. - - -**Signature:** - -```python -def get_event_by_id(id: str) -> Optional[UnifiedEvent]: -``` - -**Parameters:** - -- `id` (str): The numeric event ID - -**Returns:** Optional[[UnifiedEvent](#unifiedevent)] - The UnifiedEvent, or null if not found - -**Example:** - -```python -exchange.get_event_by_id(id="12345") -``` - - ---- -### `get_event_by_slug` - -Fetch a single event by its URL slug (Probable only). - -> **Note**: This method is only available on **probable** exchange. - - -**Signature:** - -```python -def get_event_by_slug(slug: str) -> Optional[UnifiedEvent]: -``` - -**Parameters:** - -- `slug` (str): The event's URL slug (e.g. `"trump-2024-election"`) - -**Returns:** Optional[[UnifiedEvent](#unifiedevent)] - The UnifiedEvent, or null if not found - -**Example:** - -```python -exchange.get_event_by_slug(slug="will-trump-win") -``` - - ---- -### `watch_all_order_books` - -Stream all orderbook updates across venues via the hosted WebSocket API. - - -**Signature:** - -```python -def watch_all_order_books(venues: Optional[List[str]] = None) -> FirehoseEvent: -``` - -**Parameters:** - -- `venues` (List[str]) - **Optional**: Optional venue filter. Defaults to this exchange's venue - -**Returns:** FirehoseEvent - Next event with source, symbol, and orderbook - -**Example:** - -```python -exchange.watch_all_order_books(venues=["polymarket", "limitless"]) -``` - - ---- -### `firehose` - -Stream all orderbook updates across venues. - - -**Signature:** - -```python -def firehose(venues: Optional[List[str]] = None) -> FirehoseEvent: -``` - -**Parameters:** - -- `venues` (List[str]) - **Optional**: Optional venue filter - -**Returns:** FirehoseEvent - Next event with source, symbol, and orderbook - -**Example:** - -```python -exchange.firehose(venues=["polymarket", "limitless"]) -``` - - ---- - -## Complete Trading Workflow - -```python -import pmxt -import os - -exchange = pmxt.Polymarket( - private_key=os.getenv('POLYMARKET_PRIVATE_KEY') -) - -# 1. Check balance -balances = exchange.fetch_balance() -if balances: - balance = balances[0] - print(f'Available: ${balance.available}') - -# 2. Search for a market -markets = exchange.fetch_markets(query='Trump') -market = markets[0] -outcome = market.yes - -print(f'{market.title}') -print(f'Price: {outcome.price * 100:.1f}%') - -# 3. Place a limit order -order = exchange.create_order( - market_id=market.market_id, - outcome_id=outcome.outcome_id, - side='buy', - type='limit', - amount=10, - price=0.50 -) - -print(f'Order placed: {order.id}') - -# 4. Check order status -updated_order = exchange.fetch_order(order.id) -print(f'Status: {updated_order.status}') -print(f'Filled: {updated_order.filled}/{updated_order.amount}') - -# 5. Cancel if needed -if updated_order.status == 'open': - exchange.cancel_order(order.id) - print('Order cancelled') - -# 6. Check positions -positions = exchange.fetch_positions() -for pos in positions: - pnl_sign = '+' if pos.unrealized_pnl > 0 else '' - print(f'{pos.outcome_label}: {pnl_sign}${pos.unrealized_pnl:.2f}') -``` - -## Data Models - -### `ExchangeOptions` - -Constructor-level options for venue clients (Polymarket, Kalshi, Opinion, etc.). -Hosted mode is the default when pmxtApiKey is set; otherwise the SDK runs against -a local sidecar with venue credentials. - -```python -@dataclass -class ExchangeOptions: -pmxt_api_key: str # PMXT customer API key. When set, the SDK routes to api.pmxt.dev (catalog) and trade.pmxt.dev (trading). Get one at pmxt.dev/dashboard. -wallet_address: str # EVM wallet address for hosted reads/writes. Required for endpoints that operate on a wallet (balances, positions, trades, open orders). -signer: object # Optional pre-built signer for hosted writes. If absent and privateKey is set, the SDK auto-wraps privateKey into a signer. -private_key: str # Private key. In hosted mode, used to derive an EIP-712 signer for writes (wraps into EthAccountSigner/EthersSigner). In self-hosted mode, used as the venue credential directly. -base_url: str # Explicit base URL override. When unset, the SDK uses api.pmxt.dev when pmxtApiKey is set, or the local sidecar otherwise. -api_key: str # Venue-side API key (e.g. Polymarket CLOB key). Only relevant for self-hosted mode. -auto_start_server: bool # Auto-start the local sidecar when running self-hosted. Defaults to true when no pmxtApiKey is set, false when hosted. -``` - ---- -### `UnifiedMarket` - - - -```python -@dataclass -class UnifiedMarket: -market_id: str # The unique identifier for this market -event_id: str # Link to parent event -title: str # The market title (e.g., "Will BTC close above $100k on Dec 31?"). -description: str # Long-form market description or resolution criteria. -slug: str # URL-friendly slug for the market. -outcomes: List[MarketOutcome] # The possible outcomes for this market. -resolution_date: str # When the market is scheduled to resolve. Optional because some venues do not publish a cutoff for every market (e.g. Opinion categorical children) — emit `undefined` rather than coercing to epoch. -volume24h: float # Trading volume over the past 24 hours (USD). -volume: float # Total / Lifetime volume -liquidity: float # Current market liquidity (USD). -open_interest: float # Total value of outstanding contracts (USD). -url: str # Canonical URL to view the market on the venue. -image: str # Optional image URL for the market. -category: str # Optional category label. Venue-defined — common values include "Sports", "Politics", "Crypto", "Economics", "Science", "Culture". Polymarket uses finer-grained categories like "Bitcoin", "Soccer", "Economic Policy"; Kalshi uses broader ones like "Sports" or "Mentions". -tags: List[str] # Optional list of tags. More granular than category — e.g. ["Crypto", "Crypto Prices", "Bitcoin"] or ["Politics", "Elections", "Trump"]. Tags vary by venue: Polymarket markets carry several, Kalshi typically one. -tick_size: float # Minimum price increment (e.g., 0.01, 0.001) -status: str # Venue-native lifecycle status (e.g. 'active', 'closed', 'archived'). -contract_address: str # On-chain contract / condition identifier where applicable (Polymarket conditionId, etc.). -source_metadata: object # Raw venue-specific metadata not captured by first-class fields (e.g. Kalshi series_ticker / series_title from the parent event, Polymarket series). Passed through verbatim so downstream consumers can recover anything the unified shape omits. Each venue populates what it has. -source_exchange: str # The exchange/venue this market originates from (e.g. 'polymarket', 'kalshi'). Populated by the Router. -yes: Any # Convenience accessor for the YES outcome on a binary market. -no: Any # Convenience accessor for the NO outcome on a binary market. -up: Any # Convenience accessor for the UP outcome on a binary market. -down: Any # Convenience accessor for the DOWN outcome on a binary market. -``` - ---- -### `MarketOutcome` - - - -```python -@dataclass -class MarketOutcome: -outcome_id: str # Outcome ID for trading operations (CLOB Token ID for Polymarket, Market Ticker for Kalshi) -market_id: str # The market this outcome belongs to (set automatically when outcomes are built) -label: str # Human-readable outcome label (e.g., "Yes", "No", candidate name). -price: float # Probability between 0.0 and 1.0. -price_change24h: float # Change in price over the past 24 hours, as an absolute probability delta. -metadata: object # Exchange-specific metadata (e.g., clobTokenId for Polymarket) -``` - ---- -### `UnifiedEvent` - -A grouped collection of related markets (e.g., "Who will be Fed Chair?" contains multiple candidate markets). - -```python -@dataclass -class UnifiedEvent: -id: str # The unique identifier for this event. -title: str # The event title (e.g., "Who will be Fed Chair?"). -description: str # Long-form event description. -slug: str # URL-friendly slug for the event. -markets: List[UnifiedMarket] # Markets grouped under this event. -volume24h: float # Trading volume over the past 24 hours (USD). -volume: float # Total / Lifetime volume (sum across markets; undefined if no market provides it) -url: str # Canonical URL to view the event on the venue. -image: str # Optional image URL for the event. -category: str # Optional category label. Venue-defined — common values include "Sports", "Politics", "Crypto", "Economics", "Science", "Culture". Polymarket uses finer-grained categories like "Bitcoin", "Soccer", "Economic Policy"; Kalshi uses broader ones like "Sports" or "Mentions". -tags: List[str] # Optional list of tags. More granular than category — e.g. ["Sports", "FIFA World Cup", "2026 FIFA World Cup"] or ["Politics", "Geopolitics", "Middle East"]. Tags vary by venue: Polymarket markets carry several, Kalshi typically one. -source_metadata: object # Raw venue-specific metadata not captured by first-class fields (e.g. Kalshi series_ticker / series_title, Polymarket series). Passed through verbatim so downstream consumers can recover anything the unified shape omits. Each venue populates what it has. -source_exchange: str # The exchange/venue this event originates from (e.g. 'polymarket', 'kalshi'). Populated by the Router. -``` - ---- -### `UnifiedSeries` - -A recurring grouping of events on a venue — the fourth tier above Event -> Market -> Outcome. Examples: Kalshi `KXATPMATCH` (every ATP tennis match), Polymarket `wta` (every WTA match), Opinion's daily `collection`. Series only exists where the venue exposes a recurring-event concept; venues without one return an empty array from `fetchSeries`. - -```python -@dataclass -class UnifiedSeries: -id: str # Stable venue-native series identifier (e.g. "KXATPMATCH" on Kalshi, "atp" on Polymarket Gamma, numeric Gamma id). -ticker: str # Venue-native ticker, when distinct from `id`. -slug: str # Venue-native slug. -title: str # Human-readable series title (e.g. "ATP Match Winner", "WTA"). -description: str # Long-form series description. -recurrence: str # Recurrence cadence the venue reports ('daily', 'weekly', 'annual', ...). -events: List[UnifiedEvent] # Child events. Populated when fetched by id; the list form usually omits this to keep payloads small. -url: str # Canonical venue URL for the series. -image: str # Venue-hosted image. -source_exchange: str # The exchange this series originates from. Populated by the Router. -source_metadata: object # Raw venue-specific fields not promoted to first-class columns. -``` - ---- -### `PriceCandle` - - - -```python -@dataclass -class PriceCandle: -timestamp: float # Unix timestamp in milliseconds marking the start of the candle. -open: float # Opening price for the interval (probability between 0.0 and 1.0). -high: float # Highest price during the interval (probability between 0.0 and 1.0). -low: float # Lowest price during the interval (probability between 0.0 and 1.0). -close: float # Closing price for the interval (probability between 0.0 and 1.0). -volume: float # Trading volume during the interval. -``` - ---- -### `OrderBook` - - - -```python -@dataclass -class OrderBook: -bids: List[OrderLevel] # Order book bid levels, sorted by price descending. -asks: List[OrderLevel] # Order book ask levels, sorted by price ascending. -timestamp: float # Unix timestamp in milliseconds when the snapshot was taken. -datetime: str # ISO 8601 datetime string of the snapshot (CCXT-compatible). -is_neg_risk: bool # Whether the venue marks this snapshot as a negative-risk market. -last_trade_price: float # Last traded price from venues that include it with the book snapshot. -source_metadata: object # Venue-specific metadata preserved from the raw order book snapshot. -``` - ---- -### `OrderLevel` - - - -```python -@dataclass -class OrderLevel: -price: float # 0.0 to 1.0 (probability) -size: float # contracts/shares -order_count: float # -``` - ---- -### `Trade` - - - -```python -@dataclass -class Trade: -id: str # The unique identifier for this trade. -timestamp: float # Unix timestamp in milliseconds when the trade executed. -price: float # Probability between 0.0 and 1.0. -amount: float # Size of the trade in contracts/shares. -side: str # Trade side from the taker's perspective. -outcome_id: str # The outcome this trade is for (if known). -``` - ---- -### `UserTrade` - - - -```python -@dataclass -class UserTrade: -id: str # The unique identifier for this trade. -timestamp: float # Unix timestamp in milliseconds when the trade executed. -price: float # Probability between 0.0 and 1.0. -amount: float # Size of the trade in contracts/shares. -side: str # Trade side from the taker's perspective. -outcome_id: str # The outcome this trade is for (if known). -order_id: str # The order that produced this trade, if known. -market_id: str # The market this trade belongs to, when the venue exposes it (e.g. derivable from the fill's coin/asset). -fee: float # Trading fee paid by the user for this fill, when the venue exposes it. -tx_hash: str # Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. -chain: str # Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. -block_number: float # Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. -``` - ---- -### `Order` - - - -```python -@dataclass -class Order: -id: str # The exchange-assigned order identifier. -market_id: str # The market this order was placed on. -outcome_id: str # The outcome this order was placed on. -side: str # Order side: buy or sell. -type: str # Order type: market (execute immediately) or limit (resting at a price). -price: float # For limit orders -amount: float # Size in contracts/shares -status: str # Lifecycle status of the order. -filled: float # Amount filled (USDC cost for buys, shares for sells) -filled_shares: float # Amount filled in shares/contracts (if different from USDC-denominated `filled`). -remaining: float # Amount remaining -timestamp: float # Unix timestamp in milliseconds when the order was created. -fee: float # Fee paid for this order, if known. -fee_rate_bps: float # Fee rate in basis points applied to this order (e.g. 100 = 1%). -tx_hash: str # Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. -chain: str # Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. -block_number: float # Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. -``` - ---- -### `Position` - -A current position in a market. In hosted mode, `outcomeLabel`, `entryPrice`, `currentPrice` and `unrealizedPnL` may be null when the server cannot derive them (e.g. `with_mtm=false` or no fill history). Venue-direct callers continue to populate every field. - -```python -@dataclass -class Position: -market_id: str # The market this position is held in. -outcome_id: str # The outcome this position is held in. -outcome_label: str # Human-readable label for the outcome held. Optional in hosted mode. -size: float # Positive for long, negative for short -entry_price: float # Average entry price for the position (probability between 0.0 and 1.0). Optional in hosted mode when no fill history is available. -current_price: float # Current mark price for the position (probability between 0.0 and 1.0). Optional in hosted mode when mark-to-market data is unavailable. -current_value: float # Current market value of the position (size * currentPrice). Null when currentPrice is unavailable. -unrealized_pnl: float # Unrealized profit or loss at the current price (USD). Optional in hosted mode when mark-to-market data is unavailable. -realized_pnl: float # Realized profit or loss booked so far (USD). -tx_hash: str # Populated in hosted mode after on-chain settlement (from the last fill); null for local-mode and for non-on-chain venues. -chain: str # Populated in hosted mode after on-chain settlement (from the last fill); null for local-mode and for non-on-chain venues. -block_number: float # Populated in hosted mode after on-chain settlement (from the last fill); null for local-mode and for non-on-chain venues. -``` - ---- -### `Balance` - - - -```python -@dataclass -class Balance: -currency: str # e.g., 'USDC' -total: float # Total balance including funds locked in open orders. -available: float # Balance available to trade (excludes locked funds). -locked: float # In open orders -venue: str # Hosted-mode: which venue this balance belongs to in a multi-venue response. Null when the balance is venue-agnostic. -``` - ---- -### `ExecutionPriceResult` - - - -```python -@dataclass -class ExecutionPriceResult: -price: float # -filled_amount: float # -fully_filled: bool # -``` - ---- -### `PaginatedMarketsResult` - -Shape returned by fetchMarketsPaginated - -```python -@dataclass -class PaginatedMarketsResult: -data: List[UnifiedMarket] # The page of unified markets -total: float # Total number of markets in the snapshot -next_cursor: str # Cursor to pass to the next call, or undefined if this is the last page -``` - ---- -### `PaginatedEventsResult` - -Shape returned by fetchEventsPaginated - -```python -@dataclass -class PaginatedEventsResult: -data: List[UnifiedEvent] # The page of unified events -total: float # Total number of events in the snapshot -next_cursor: str # Cursor to pass to the next call, or undefined if this is the last page -``` - ---- -### `BuiltOrder` - - - -```python -@dataclass -class BuiltOrder: -exchange: str # The exchange name this order was built for. -params: Any # The original params used to build this order. -signed_order: object # For CLOB exchanges (Polymarket): the EIP-712 signed order ready to POST to the exchange's order endpoint. -tx: object # For on-chain AMM exchanges: the EVM transaction payload. Reserved for future exchanges; no current exchange populates this. -raw: Any # The raw, exchange-native payload. Always present. -expiry: float # Unix epoch (ms) when this built order expires server-side. Submitting after expiry returns BUILT_ORDER_EXPIRED. -``` - ---- -### `MarketFilterCriteria` - - - -```python -@dataclass -class MarketFilterCriteria: -text: str # -search_in: List[str] # Default: ['title'] -volume24h: object # -volume: object # Filter by total (lifetime) volume range -liquidity: object # Filter by current liquidity range -open_interest: object # Filter by open interest range -resolution_date: object # -category: str # Filter by category. Common values: "Sports", "Politics", "Crypto", "Bitcoin", "Soccer", "Economic Policy" (Polymarket) or "Sports", "Mentions" (Kalshi). -tags: List[str] # Match markets that have ANY of these tags. Examples: ["Crypto", "Crypto Prices"], ["Politics", "Elections"], ["Sports", "FIFA World Cup"]. -price: object # -price_change24h: object # -``` - ---- -### `EventFilterCriteria` - - - -```python -@dataclass -class EventFilterCriteria: -text: str # -search_in: List[str] # Default: ['title'] -category: str # Filter by category. Common values: "Sports", "Politics", "Crypto", "Bitcoin", "Soccer", "Economic Policy" (Polymarket) or "Sports", "Mentions" (Kalshi). -tags: List[str] # Match events that have ANY of these tags. Examples: ["Crypto"], ["Politics", "Geopolitics", "Middle East"], ["Sports", "FIFA World Cup"]. -market_count: object # -total_volume: object # Sum of market volumes -``` - ---- -### `MatchResult` - - - -```python -@dataclass -class MatchResult: -market: UnifiedMarket # -source_market: Any # The source market this was matched against. Present in browse mode (no marketId), absent in lookup mode. -relation: str # -confidence: float # -reasoning: str # -best_bid: float # -best_ask: float # -``` - ---- -### `EventMatchResult` - - - -```python -@dataclass -class EventMatchResult: -event: UnifiedEvent # -market_matches: List[MatchResult] # -``` - ---- -### `PriceComparison` - - - -```python -@dataclass -class PriceComparison: -market: UnifiedMarket # -relation: str # -confidence: float # -reasoning: str # -best_bid: float # -best_ask: float # -venue: str # -``` - ---- -### `ArbitrageOpportunity` - - - -```python -@dataclass -class ArbitrageOpportunity: -market_a: UnifiedMarket # -market_b: UnifiedMarket # -spread: float # -buy_venue: str # -sell_venue: str # -buy_price: float # -sell_price: float # -relation: str # The set-theoretic relation between the two markets (e.g. identity, subset). -confidence: float # Match confidence score (0.0 to 1.0). -``` - ---- -### `MatchedMarketPair` - - - -```python -@dataclass -class MatchedMarketPair: -market_a: UnifiedMarket # -market_b: UnifiedMarket # -price_difference: float # -venue_a: str # -venue_b: str # -price_a: float # -price_b: float # -relation: str # The set-theoretic relation between the two markets (e.g. identity, subset). -confidence: float # Match confidence score (0.0 to 1.0). -reasoning: str # Why the two markets were matched. -``` - ---- -### `ExchangeCredentials` - -Optional authentication credentials for exchange operations. - -```python -@dataclass -class ExchangeCredentials: -api_key: str # -api_secret: str # Standard API secret for HMAC-authenticated exchanges -passphrase: str # Standard API passphrase for HMAC-authenticated exchanges -api_token: str # Metaculus: `Authorization: Token ` for higher rate limits -private_key: str # Required for Polymarket L1 auth -signature_type: Any # 0 = EOA, 1 = Poly Proxy, 2 = Gnosis Safe (Can also use 'eoa', 'polyproxy', 'gnosis_safe') -funder_address: str # The address funding the trades (defaults to signer address) -wallet_address: str # -base_url: str # -``` - ---- -### `FeedTicker` - -CCXT-compatible ticker with last trade price and metadata. - -```python -@dataclass -class FeedTicker: -symbol: str # Trading pair symbol (e.g. BTC/USD) -info: Any # Raw provider-specific data -timestamp: int # Unix timestamp in milliseconds -datetime: str # -high: float # -low: float # -bid: float # -bid_volume: float # -ask: float # -ask_volume: float # -vwap: float # -open: float # -close: float # -last: float # Last trade price -previous_close: float # -change: float # -percentage: float # -average: float # -quote_volume: float # -base_volume: float # -index_price: float # -mark_price: float # -``` - ---- -### `FeedMarket` - -CCXT-compatible market descriptor for a data feed. - -```python -@dataclass -class FeedMarket: -id: str # -symbol: str # -base: str # -quote: str # -active: bool # -type: str # -info: Any # Provider-specific metadata -``` - ---- -### `FeedOracleRound` - -Chainlink oracle price round. - -```python -@dataclass -class FeedOracleRound: -feed: str # Price feed pair (e.g. BTC/USD) -round_id: str # -answer: float # Oracle price -started_at: int # -updated_at: int # -answered_inround: str # -decimals: int # -description: str # -``` - ---- - -## Filter Parameters - -### `BaseRequest` - -Base request structure with optional credentials - -```python -@dataclass -class BaseRequest: -credentials: ExchangeCredentials # -``` - ---- -### `MarketFilterParams` - - - -```python -@dataclass -class MarketFilterParams: -limit: float # Maximum number of results to return -offset: float # Pagination offset — number of results to skip -sort: str # Sort order for results -status: str # Filter by market status (default: 'active', 'inactive' and 'closed' are interchangeable) -search_in: str # Where to search (default: 'title') -query: str # For keyword search -slug: str # For slug/ticker lookup -market_id: str # Direct lookup by market ID -outcome_id: str # Reverse lookup -- find market containing this outcome -event_id: str # Find markets belonging to an event -page: float # For pagination (used by Limitless) -similarity_threshold: float # For semantic search (used by Limitless) -source_exchange: str # Filter by source venue (e.g. 'polymarket', 'kalshi', 'myriad'). `exchange` is an alias. -exchange: str # Alias for `sourceExchange`. -``` - ---- -### `EventFetchParams` - - - -```python -@dataclass -class EventFetchParams: -query: str # For keyword search -limit: float # Maximum number of results to return -cursor: str # Opaque venue pagination cursor, where supported. -offset: float # Pagination offset — number of results to skip -sort: str # Sort order for results -status: str # Filter by event status (default: 'active', 'inactive' and 'closed' are interchangeable) -search_in: str # Where to search (default: 'title') -event_id: str # Direct lookup by event ID -slug: str # Lookup by event slug -series: str # Filter events by their parent series. Accepts the venue-native series id / ticker / slug (e.g. Kalshi `"KXATPMATCH"`, Polymarket `"wta"`). Passed through to the vendor where supported, otherwise applied to `sourceMetadata` after fetch. -filter: Any # Optional client-side filter applied after fetching -category: str # Filter by category. Each event belongs to a venue-assigned category such as "Sports", "Politics", "Crypto", "Bitcoin", "Soccer", "Economic Policy" (Polymarket) or "Sports", "Mentions" (Kalshi). -tags: List[str] # Filter by tags. Returns events matching ANY of the provided tags. Tags are more specific than categories -- for example a "Politics" event might carry tags ["Politics", "Geopolitics", "Middle East", "Iran"]. Common tags include "Crypto", "Elections", "Fed Rates", "FIFA World Cup", "Trump". -source_exchange: str # Filter by source venue (e.g. 'polymarket', 'kalshi', 'myriad'). `exchange` is an alias. -exchange: str # Alias for `sourceExchange`. -``` - ---- -### `HistoryFilterParams` - -Deprecated - use OHLCVParams or TradesParams instead. Resolution is optional for backward compatibility. - -```python -@dataclass -class HistoryFilterParams: -resolution: str # Optional for backward compatibility -start: str # Start of the time range -end: str # End of the time range -limit: float # Maximum number of results to return -``` - ---- -### `OHLCVParams` - - - -```python -@dataclass -class OHLCVParams: -resolution: str # Required for candle aggregation -start: str # Start of the time range -end: str # End of the time range -limit: float # Maximum number of results to return -``` - ---- -### `FetchOrderBookParams` - - - -```python -@dataclass -class FetchOrderBookParams: -side: str # Outcome side: 'yes' or 'no'. Required for exchanges like Limitless where the API returns a single orderbook per market. -outcome: str # Outcome alias: 'yes' or 'no', or an outcome token ID. When set, the first argument is treated as a market ID and this value selects which outcome's order book to fetch. Accepts the literal strings 'yes'/'no' (resolved via a market lookup) or a raw outcome token ID. -since: float # Unix timestamp (ms) — fetch a historical snapshot at or before this time, or the start of a range when combined with `until` (hosted API only). -until: float # Unix timestamp (ms) — end of a historical range. When combined with `since`, returns an array of reconstructed L2 OrderBook snapshots between `since` and `until` (hosted API only). -``` - ---- -### `TradesParams` - - - -```python -@dataclass -class TradesParams: -start: str # Start of the time range -end: str # End of the time range -limit: float # Maximum number of results to return (max {@link MAX_TRADES_LIMIT}) -``` - ---- -### `CreateOrderParams` - - - -```python -@dataclass -class CreateOrderParams: -market_id: str # The market to trade on. -outcome_id: str # The outcome to trade. -side: str # Order side: buy or sell. -type: str # Order type: market (execute immediately) or limit (resting at a price). -amount: float # Size of the order in contracts/shares. -price: float # Required for limit orders -denom: str # Hosted mode: amount unit. -slippage_pct: float # Hosted mode: maximum market-order slippage percentage. -fee: float # Optional fee rate (e.g., 1000 for 0.1%) -tick_size: float # Optional override for Limitless/Polymarket -neg_risk: bool # Optional override to skip neg-risk lookup (Polymarket) -on_behalf_of: float # Limitless delegated signing: profile ID to trade on behalf of -``` - ---- -### `MyTradesParams` - - - -```python -@dataclass -class MyTradesParams: -outcome_id: str # filter to specific outcome/ticker -market_id: str # filter to specific market -since: str # Only return records after this date -until: str # Only return records before this date -limit: float # Maximum number of results to return -cursor: str # for Kalshi cursor pagination -``` - ---- -### `OrderHistoryParams` - - - -```python -@dataclass -class OrderHistoryParams: -market_id: str # required for Limitless (slug) -since: str # Only return records after this date -until: str # Only return records before this date -limit: float # Maximum number of results to return -cursor: str # Opaque pagination cursor from a previous response -``` - ---- -### `FetchMarketMatchesParams` - - - -```python -@dataclass -class FetchMarketMatchesParams: -query: str # Keyword search across matched market titles. -category: str # Filter matches by category. -market: Any # Pass a UnifiedMarket directly instead of marketId/slug/url. -market_id: str # Lookup a specific market by ID. Omit for browse mode. -slug: str # -url: str # -relation: str # -min_confidence: float # -limit: float # -include_prices: bool # -min_difference: float # Minimum price difference between venues. Browse mode only. -sort: str # Sort order. Browse mode only. -``` - ---- -### `FetchEventMatchesParams` - - - -```python -@dataclass -class FetchEventMatchesParams: -query: str # Keyword search across matched event titles. -category: str # Filter matches by category. -event: Any # Pass a UnifiedEvent directly instead of eventId/slug. -event_id: str # Lookup a specific event by ID. Omit for browse mode. -slug: str # -relation: str # -min_confidence: float # -limit: float # -include_prices: bool # -``` - ---- -### `FetchArbitrageParams` - - - -```python -@dataclass -class FetchArbitrageParams: -min_spread: float # -category: str # -limit: float # -relations: List[str] # Comma-separated relation types to include (default: 'identity'). -``` - ---- -### `FetchMatchedMarketsParams` - - - -```python -@dataclass -class FetchMatchedMarketsParams: -min_difference: float # -category: str # -limit: float # -relations: List[str] # Comma-separated relation types to include (default: 'identity'). -``` - ---- - -## Low-Level API Reference - -Advanced: call exchange-specific REST endpoints directly via `exchange.call_api(name, params)`. - -```python -# Example -result = exchange.call_api('operationName', {'param': 'value'}) -``` - -### Polymarket - -| `call_api()` name | Method | Path | Summary | Auth | -|-----------------|--------|------|---------|------| -| `getGammaStatus` | `GET` | `/status` | Gamma API Health check | Public | -| `listTeams` | `GET` | `/teams` | List teams | Public | -| `getSportsMetadata` | `GET` | `/sports` | Get sports metadata information | Public | -| `getSportsMarketTypes` | `GET` | `/sports/market-types` | Get valid sports market types | Public | -| `listTags` | `GET` | `/tags` | List tags | Public | -| `getTag` | `GET` | `/tags/{id}` | Get tag by id | Public | -| `getRelatedTagsById` | `GET` | `/tags/{id}/related-tags` | Get related tags (relationships) by tag id | Public | -| `getRelatedTagsBySlug` | `GET` | `/tags/slug/{slug}/related-tags` | Get related tags (relationships) by tag slug | Public | -| `getTagsRelatedToATagById` | `GET` | `/tags/{id}/related-tags/tags` | Get tags related to a tag id | Public | -| `getTagsRelatedToATagBySlug` | `GET` | `/tags/slug/{slug}/related-tags/tags` | Get tags related to a tag slug | Public | -| `listEvents` | `GET` | `/events` | List events | Public | -| `getEvent` | `GET` | `/events/{id}` | Get event by id | Public | -| `getEventTags` | `GET` | `/events/{id}/tags` | Get event tags | Public | -| `getEventBySlug` | `GET` | `/events/slug/{slug}` | Get event by slug | Public | -| `listMarkets` | `GET` | `/markets` | List markets | Public | -| `getMarket` | `GET` | `/markets/{id}` | Get market by id | Public | -| `getMarketTags` | `GET` | `/markets/{id}/tags` | Get market tags by id | Public | -| `getMarketBySlug` | `GET` | `/markets/slug/{slug}` | Get market by slug | Public | -| `listSeries` | `GET` | `/series` | List series | Public | -| `getSeries` | `GET` | `/series/{id}` | Get series by id | Public | -| `listComments` | `GET` | `/comments` | List comments | Public | -| `getCommentsById` | `GET` | `/comments/{id}` | Get comments by comment id | Public | -| `getPublicProfile` | `GET` | `/public-profile` | Get public profile by wallet address | Public | -| `publicSearch` | `GET` | `/public-search` | Search markets, events, and profiles | Public | -| `getBook` | `GET` | `/book` | Get order book summary | Public | -| `postBooks` | `POST` | `/books` | Get multiple order books summaries | Public | -| `getPrice` | `GET` | `/price` | Get market price | Public | -| `getPrices` | `GET` | `/prices` | Get multiple market prices | Public | -| `postPrices` | `POST` | `/prices` | Get multiple market prices by request | Public | -| `getMidpoint` | `GET` | `/midpoint` | Get midpoint price | Public | -| `postSpreads` | `POST` | `/spreads` | Get bid-ask spreads | Public | -| `getPricesHistory` | `GET` | `/prices-history` | Get price history for a traded token | Public | -| `getMarketsByToken` | `GET` | `/markets-by-token/{token_id}` | Get market by token | Public | -| `postAuthApiKey` | `POST` | `/auth/api-key` | Create API Key | Required | -| `getAuthDeriveApiKey` | `GET` | `/auth/derive-api-key` | Derive API Key | Required | -| `postOrder` | `POST` | `/order` | Place Single Order | Required | -| `deleteOrder` | `DELETE` | `/order` | Cancel Single Order | Required | -| `postOrders` | `POST` | `/orders` | Place Multiple Orders (Batch) | Required | -| `deleteOrders` | `DELETE` | `/orders` | Cancel Multiple Orders | Required | -| `deleteCancelAll` | `DELETE` | `/cancel-all` | Cancel All Orders | Required | -| `deleteCancelMarketOrders` | `DELETE` | `/cancel-market-orders` | Cancel Market Orders | Required | -| `postV1Heartbeats` | `POST` | `/v1/heartbeats` | Refresh authenticated session heartbeat | Required | -| `getDataOrder` | `GET` | `/data/order/{id}` | Get Order | Required | -| `getDataOrders` | `GET` | `/data/orders` | Get Active Orders | Required | -| `getDataTrades` | `GET` | `/data/trades` | Get Trades | Required | -| `getOrderScoring` | `GET` | `/order-scoring` | Check Order Reward Scoring | Required | -| `postOrdersScoring` | `POST` | `/orders-scoring` | Check Multiple Orders Scoring | Required | -| `updateBalanceAllowance` | `GET` | `/balance-allowance/update` | Update balance and allowance cache | Required | -| `getGeoblock` | `GET` | `/geoblock` | Check Geoblock Status | Public | -| `getDataApiHealth` | `GET` | `/` | Data API Health check | Public | -| `getPositions` | `GET` | `/positions` | Get current positions for a user | Public | -| `getV1AccountingSnapshot` | `GET` | `/v1/accounting/snapshot` | Download an accounting snapshot (ZIP of CSVs) | Public | -| `getTraded` | `GET` | `/traded` | Get total markets a user has traded | Public | -| `getOi` | `GET` | `/oi` | Get open interest | Public | -| `getLiveVolume` | `GET` | `/live-volume` | Get live volume for an event | Public | -| `getTrades` | `GET` | `/trades` | Get trades for a user or markets | Public | -| `getActivity` | `GET` | `/activity` | Get user activity | Public | -| `getHolders` | `GET` | `/holders` | Get top holders for markets | Public | -| `getValue` | `GET` | `/value` | Get total value of a user's positions | Public | -| `getClosedPositions` | `GET` | `/closed-positions` | Get closed positions for a user | Public | -| `getV1MarketPositions` | `GET` | `/v1/market-positions` | Get positions for a market | Public | -| `getV1Leaderboard` | `GET` | `/v1/leaderboard` | Get trader leaderboard rankings | Public | -| `getV1BuildersLeaderboard` | `GET` | `/v1/builders/leaderboard` | Get aggregated builder leaderboard | Public | - -#### Endpoint Details - -##### `getGammaStatus` - -**GET** `/status` - -Gamma API Health check - - ---- -##### `listTeams` - -**GET** `/teams` - -List teams - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `league` (query, array) -- `name` (query, array) -- `abbreviation` (query, array) - ---- -##### `getSportsMetadata` - -**GET** `/sports` - -Get sports metadata information - - ---- -##### `getSportsMarketTypes` - -**GET** `/sports/market-types` - -Get valid sports market types - - ---- -##### `listTags` - -**GET** `/tags` - -List tags - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `include_template` (query, boolean) -- `is_carousel` (query, boolean) - ---- -##### `getTag` - -**GET** `/tags/{id}` - -Get tag by id - -**Parameters:** -- `` (, string) -- `include_template` (query, boolean) - ---- -##### `getRelatedTagsById` - -**GET** `/tags/{id}/related-tags` - -Get related tags (relationships) by tag id - -**Parameters:** -- `` (, string) -- `omit_empty` (query, boolean) -- `status` (query, string) — enum: `active,closed,all` - ---- -##### `getRelatedTagsBySlug` - -**GET** `/tags/slug/{slug}/related-tags` - -Get related tags (relationships) by tag slug - -**Parameters:** -- `` (, string) -- `omit_empty` (query, boolean) -- `status` (query, string) — enum: `active,closed,all` - ---- -##### `getTagsRelatedToATagById` - -**GET** `/tags/{id}/related-tags/tags` - -Get tags related to a tag id - -**Parameters:** -- `` (, string) -- `omit_empty` (query, boolean) -- `status` (query, string) — enum: `active,closed,all` - ---- -##### `getTagsRelatedToATagBySlug` - -**GET** `/tags/slug/{slug}/related-tags/tags` - -Get tags related to a tag slug - -**Parameters:** -- `` (, string) -- `omit_empty` (query, boolean) -- `status` (query, string) — enum: `active,closed,all` - ---- -##### `listEvents` - -**GET** `/events` - -List events - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `id` (query, array) -- `tag_id` (query, integer) -- `exclude_tag_id` (query, array) -- `slug` (query, array) -- `tag_slug` (query, string) -- `related_tags` (query, boolean) -- `active` (query, boolean) -- `archived` (query, boolean) -- `featured` (query, boolean) -- `cyom` (query, boolean) -- `include_chat` (query, boolean) -- `include_template` (query, boolean) -- `recurrence` (query, string) -- `closed` (query, boolean) -- `liquidity_min` (query, number) -- `liquidity_max` (query, number) -- `volume_min` (query, number) -- `volume_max` (query, number) -- `start_date_min` (query, string) -- `start_date_max` (query, string) -- `end_date_min` (query, string) -- `end_date_max` (query, string) - ---- -##### `getEvent` - -**GET** `/events/{id}` - -Get event by id - -**Parameters:** -- `` (, string) -- `include_chat` (query, boolean) -- `include_template` (query, boolean) - ---- -##### `getEventTags` - -**GET** `/events/{id}/tags` - -Get event tags - -**Parameters:** -- `` (, string) - ---- -##### `getEventBySlug` - -**GET** `/events/slug/{slug}` - -Get event by slug - -**Parameters:** -- `` (, string) -- `include_chat` (query, boolean) -- `include_template` (query, boolean) - ---- -##### `listMarkets` - -**GET** `/markets` - -List markets - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `id` (query, array) -- `slug` (query, array) -- `clob_token_ids` (query, array) -- `condition_ids` (query, array) -- `market_maker_address` (query, array) -- `liquidity_num_min` (query, number) -- `liquidity_num_max` (query, number) -- `volume_num_min` (query, number) -- `volume_num_max` (query, number) -- `start_date_min` (query, string) -- `start_date_max` (query, string) -- `end_date_min` (query, string) -- `end_date_max` (query, string) -- `tag_id` (query, integer) -- `related_tags` (query, boolean) -- `cyom` (query, boolean) -- `uma_resolution_status` (query, string) -- `game_id` (query, string) -- `sports_market_types` (query, array) -- `rewards_min_size` (query, number) -- `question_ids` (query, array) -- `include_tag` (query, boolean) -- `closed` (query, boolean) - ---- -##### `getMarket` - -**GET** `/markets/{id}` - -Get market by id - -**Parameters:** -- `` (, string) -- `include_tag` (query, boolean) - ---- -##### `getMarketTags` - -**GET** `/markets/{id}/tags` - -Get market tags by id - -**Parameters:** -- `` (, string) - ---- -##### `getMarketBySlug` - -**GET** `/markets/slug/{slug}` - -Get market by slug - -**Parameters:** -- `` (, string) -- `include_tag` (query, boolean) - ---- -##### `listSeries` - -**GET** `/series` - -List series - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `slug` (query, array) -- `categories_ids` (query, array) -- `categories_labels` (query, array) -- `closed` (query, boolean) -- `include_chat` (query, boolean) -- `recurrence` (query, string) - ---- -##### `getSeries` - -**GET** `/series/{id}` - -Get series by id - -**Parameters:** -- `` (, string) -- `include_chat` (query, boolean) - ---- -##### `listComments` - -**GET** `/comments` - -List comments - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `parent_entity_type` (query, string) — enum: `Event,Series,market` -- `parent_entity_id` (query, integer) -- `get_positions` (query, boolean) -- `holders_only` (query, boolean) - ---- -##### `getCommentsById` - -**GET** `/comments/{id}` - -Get comments by comment id - -**Parameters:** -- `id` (path, integer) **required** -- `get_positions` (query, boolean) - ---- -##### `getPublicProfile` - -**GET** `/public-profile` - -Get public profile by wallet address - -**Parameters:** -- `address` (query, string) **required** — The wallet address (proxy wallet or user address) - ---- -##### `publicSearch` - -**GET** `/public-search` - -Search markets, events, and profiles - -**Parameters:** -- `q` (query, string) **required** -- `cache` (query, boolean) -- `events_status` (query, string) -- `limit_per_type` (query, integer) -- `page` (query, integer) -- `events_tag` (query, array) -- `keep_closed_markets` (query, integer) -- `sort` (query, string) -- `ascending` (query, boolean) -- `search_tags` (query, boolean) -- `search_profiles` (query, boolean) -- `recurrence` (query, string) -- `exclude_tag_id` (query, array) -- `optimized` (query, boolean) - ---- -##### `getBook` - -**GET** `/book` - -Get order book summary - -**Parameters:** -- `token_id` (query, string) **required** - ---- -##### `postBooks` - -**POST** `/books` - -Get multiple order books summaries - - ---- -##### `getPrice` - -**GET** `/price` - -Get market price - -**Parameters:** -- `token_id` (query, string) **required** -- `side` (query, string) **required** — enum: `BUY,SELL` - ---- -##### `getPrices` - -**GET** `/prices` - -Get multiple market prices - - ---- -##### `postPrices` - -**POST** `/prices` - -Get multiple market prices by request - - ---- -##### `getMidpoint` - -**GET** `/midpoint` - -Get midpoint price - -**Parameters:** -- `token_id` (query, string) **required** - ---- -##### `postSpreads` - -**POST** `/spreads` - -Get bid-ask spreads - - ---- -##### `getPricesHistory` - -**GET** `/prices-history` - -Get price history for a traded token - -**Parameters:** -- `market` (query, string) **required** -- `startTs` (query, number) -- `endTs` (query, number) -- `interval` (query, string) — enum: `1m,1w,1d,6h,1h,max` -- `fidelity` (query, number) - ---- -##### `getMarketsByToken` - -**GET** `/markets-by-token/{token_id}` - -Get market by token - -**Parameters:** -- `token_id` (path, string) **required** - ---- -##### `postAuthApiKey` - -**POST** `/auth/api-key` - -Create API Key *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `getAuthDeriveApiKey` - -**GET** `/auth/derive-api-key` - -Derive API Key *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `postOrder` - -**POST** `/order` - -Place Single Order *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `deleteOrder` - -**DELETE** `/order` - -Cancel Single Order *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `postOrders` - -**POST** `/orders` - -Place Multiple Orders (Batch) *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `deleteOrders` - -**DELETE** `/orders` - -Cancel Multiple Orders *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `deleteCancelAll` - -**DELETE** `/cancel-all` - -Cancel All Orders *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `deleteCancelMarketOrders` - -**DELETE** `/cancel-market-orders` - -Cancel Market Orders *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `postV1Heartbeats` - -**POST** `/v1/heartbeats` - -Refresh authenticated session heartbeat *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `getDataOrder` - -**GET** `/data/order/{id}` - -Get Order *(Auth required)* - -**Parameters:** -- `` (, string) -- `id` (path, string) **required** - ---- -##### `getDataOrders` - -**GET** `/data/orders` - -Get Active Orders *(Auth required)* - -**Parameters:** -- `` (, string) -- `id` (query, string) -- `market` (query, string) -- `asset_id` (query, string) -- `next_cursor` (query, string) — Cursor for keyset pagination - ---- -##### `getDataTrades` - -**GET** `/data/trades` - -Get Trades *(Auth required)* - -**Parameters:** -- `` (, string) -- `id` (query, string) -- `market` (query, string) -- `maker` (query, string) -- `taker` (query, string) -- `before` (query, string) -- `after` (query, string) - ---- -##### `getOrderScoring` - -**GET** `/order-scoring` - -Check Order Reward Scoring *(Auth required)* - -**Parameters:** -- `` (, string) -- `orderId` (query, string) **required** - ---- -##### `postOrdersScoring` - -**POST** `/orders-scoring` - -Check Multiple Orders Scoring *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `updateBalanceAllowance` - -**GET** `/balance-allowance/update` - -Update balance and allowance cache *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `getGeoblock` - -**GET** `/geoblock` - -Check Geoblock Status - - ---- -##### `getDataApiHealth` - -**GET** `/` - -Data API Health check - - ---- -##### `getPositions` - -**GET** `/positions` - -Get current positions for a user - -**Parameters:** -- `user` (query, string) **required** — User address (required) -- `market` (query, array) — Comma-separated list of condition IDs. Mutually exclusive with eventId. -- `eventId` (query, array) — Comma-separated list of event IDs. Mutually exclusive with market. -- `sizeThreshold` (query, number) -- `redeemable` (query, boolean) -- `mergeable` (query, boolean) -- `limit` (query, integer) -- `offset` (query, integer) -- `sortBy` (query, string) — enum: `CURRENT,INITIAL,TOKENS,CASHPNL,PERCENTPNL,TITLE,RESOLVING,PRICE,AVGPRICE` -- `sortDirection` (query, string) — enum: `ASC,DESC` -- `title` (query, string) - ---- -##### `getV1AccountingSnapshot` - -**GET** `/v1/accounting/snapshot` - -Download an accounting snapshot (ZIP of CSVs) - -**Parameters:** -- `user` (query, string) **required** — User address (0x-prefixed) - ---- -##### `getTraded` - -**GET** `/traded` - -Get total markets a user has traded - -**Parameters:** -- `user` (query, string) **required** - ---- -##### `getOi` - -**GET** `/oi` - -Get open interest - -**Parameters:** -- `market` (query, array) - ---- -##### `getLiveVolume` - -**GET** `/live-volume` - -Get live volume for an event - -**Parameters:** -- `id` (query, integer) **required** - ---- -##### `getTrades` - -**GET** `/trades` - -Get trades for a user or markets - -**Parameters:** -- `limit` (query, integer) -- `offset` (query, integer) -- `takerOnly` (query, boolean) -- `filterType` (query, string) — Must be provided together with filterAmount. — enum: `CASH,TOKENS` -- `filterAmount` (query, number) — Must be provided together with filterType. -- `market` (query, array) — Comma-separated list of condition IDs. Mutually exclusive with eventId. -- `eventId` (query, array) — Comma-separated list of event IDs. Mutually exclusive with market. -- `user` (query, string) -- `side` (query, string) — enum: `BUY,SELL` - ---- -##### `getActivity` - -**GET** `/activity` - -Get user activity - -**Parameters:** -- `limit` (query, integer) -- `offset` (query, integer) -- `user` (query, string) **required** -- `market` (query, array) — Comma-separated list of condition IDs. Mutually exclusive with eventId. -- `eventId` (query, array) — Comma-separated list of event IDs. Mutually exclusive with market. -- `type` (query, array) -- `start` (query, integer) -- `end` (query, integer) -- `sortBy` (query, string) — enum: `TIMESTAMP,TOKENS,CASH` -- `sortDirection` (query, string) — enum: `ASC,DESC` -- `side` (query, string) — enum: `BUY,SELL` - ---- -##### `getHolders` - -**GET** `/holders` - -Get top holders for markets - -**Parameters:** -- `limit` (query, integer) — Maximum number of holders to return per token. Capped at 20. -- `market` (query, array) **required** — Comma-separated list of condition IDs. -- `minBalance` (query, integer) - ---- -##### `getValue` - -**GET** `/value` - -Get total value of a user's positions - -**Parameters:** -- `user` (query, string) **required** -- `market` (query, array) - ---- -##### `getClosedPositions` - -**GET** `/closed-positions` - -Get closed positions for a user - -**Parameters:** -- `user` (query, string) **required** — The address of the user in question -- `market` (query, array) — The conditionId of the market in question. Supports multiple csv separated values. Cannot be used with the eventId param. -- `title` (query, string) — Filter by market title -- `eventId` (query, array) — The event id of the event in question. Supports multiple csv separated values. Returns positions for all markets for those event ids. Cannot be used with the market param. -- `limit` (query, integer) — The max number of positions to return -- `offset` (query, integer) — The starting index for pagination -- `sortBy` (query, string) — The sort criteria — enum: `REALIZEDPNL,TITLE,PRICE,AVGPRICE,TIMESTAMP` -- `sortDirection` (query, string) — The sort direction — enum: `ASC,DESC` - ---- -##### `getV1MarketPositions` - -**GET** `/v1/market-positions` - -Get positions for a market - -**Parameters:** -- `market` (query, string) **required** — The condition ID of the market to query positions for -- `user` (query, string) — Filter to a single user by proxy wallet address -- `status` (query, string) — Filter positions by status. -- `OPEN` — Only positions with size > 0.01 -- `CLOSED` — Only positions with size <= 0.01 -- `ALL` — All positions regardless of size - — enum: `OPEN,CLOSED,ALL` -- `sortBy` (query, string) — Sort positions by: -- `TOKENS` — Position size (number of tokens) -- `CASH_PNL` — Unrealized cash PnL -- `REALIZED_PNL` — Realized PnL -- `TOTAL_PNL` — Total PnL (cash_pnl + realized_pnl) - — enum: `TOKENS,CASH_PNL,REALIZED_PNL,TOTAL_PNL` -- `sortDirection` (query, string) — enum: `ASC,DESC` -- `limit` (query, integer) — Max number of positions to return per outcome token -- `offset` (query, integer) — Pagination offset per outcome token - ---- -##### `getV1Leaderboard` - -**GET** `/v1/leaderboard` - -Get trader leaderboard rankings - -**Parameters:** -- `category` (query, string) — Market category for the leaderboard — enum: `OVERALL,POLITICS,SPORTS,CRYPTO,CULTURE,MENTIONS,WEATHER,ECONOMICS,TECH,FINANCE` -- `timePeriod` (query, string) — Time period for leaderboard results — enum: `DAY,WEEK,MONTH,ALL` -- `orderBy` (query, string) — Leaderboard ordering criteria — enum: `PNL,VOL` -- `limit` (query, integer) — Max number of leaderboard traders to return -- `offset` (query, integer) — Starting index for pagination -- `user` (query, string) — Limit leaderboard to a single user by address -- `userName` (query, string) — Limit leaderboard to a single username - ---- -##### `getV1BuildersLeaderboard` - -**GET** `/v1/builders/leaderboard` - -Get aggregated builder leaderboard - -**Parameters:** -- `timePeriod` (query, string) — The time period to aggregate results over. - — enum: `DAY,WEEK,MONTH,ALL` -- `limit` (query, string) - ---- -### Kalshi - -| `call_api()` name | Method | Path | Summary | Auth | -|-----------------|--------|------|---------|------| -| `GetHistoricalCutoff` | `GET` | `/historical/cutoff` | Get Historical Cutoff Timestamps | Public | -| `GetMarketCandlesticksHistorical` | `GET` | `/historical/markets/{ticker}/candlesticks` | Get Historical Market Candlesticks | Public | -| `GetFillsHistorical` | `GET` | `/historical/fills` | Get Historical Fills | Required | -| `GetHistoricalOrders` | `GET` | `/historical/orders` | Get Historical Orders | Required | -| `GetHistoricalMarkets` | `GET` | `/historical/markets` | Get Historical Markets | Public | -| `GetHistoricalMarket` | `GET` | `/historical/markets/{ticker}` | Get Historical Market | Public | -| `GetExchangeStatus` | `GET` | `/exchange/status` | Get Exchange Status | Public | -| `GetExchangeAnnouncements` | `GET` | `/exchange/announcements` | Get Exchange Announcements | Public | -| `GetSeriesFeeChanges` | `GET` | `/series/fee_changes` | Get Series Fee Changes | Public | -| `GetExchangeSchedule` | `GET` | `/exchange/schedule` | Get Exchange Schedule | Public | -| `GetUserDataTimestamp` | `GET` | `/exchange/user_data_timestamp` | Get User Data Timestamp | Public | -| `GetOrders` | `GET` | `/portfolio/orders` | Get Orders | Required | -| `CreateOrder` | `POST` | `/portfolio/orders` | Create Order | Required | -| `GetOrder` | `GET` | `/portfolio/orders/{order_id}` | Get Order | Required | -| `CancelOrder` | `DELETE` | `/portfolio/orders/{order_id}` | Cancel Order | Required | -| `BatchCreateOrders` | `POST` | `/portfolio/orders/batched` | Batch Create Orders | Required | -| `BatchCancelOrders` | `DELETE` | `/portfolio/orders/batched` | Batch Cancel Orders | Required | -| `AmendOrder` | `POST` | `/portfolio/orders/{order_id}/amend` | Amend Order | Required | -| `DecreaseOrder` | `POST` | `/portfolio/orders/{order_id}/decrease` | Decrease Order | Required | -| `GetOrderQueuePositions` | `GET` | `/portfolio/orders/queue_positions` | Get Queue Positions for Orders | Required | -| `GetOrderQueuePosition` | `GET` | `/portfolio/orders/{order_id}/queue_position` | Get Order Queue Position | Required | -| `GetOrderGroups` | `GET` | `/portfolio/order_groups` | Get Order Groups | Required | -| `CreateOrderGroup` | `POST` | `/portfolio/order_groups/create` | Create Order Group | Required | -| `GetOrderGroup` | `GET` | `/portfolio/order_groups/{order_group_id}` | Get Order Group | Required | -| `DeleteOrderGroup` | `DELETE` | `/portfolio/order_groups/{order_group_id}` | Delete Order Group | Required | -| `ResetOrderGroup` | `PUT` | `/portfolio/order_groups/{order_group_id}/reset` | Reset Order Group | Required | -| `TriggerOrderGroup` | `PUT` | `/portfolio/order_groups/{order_group_id}/trigger` | Trigger Order Group | Required | -| `UpdateOrderGroupLimit` | `PUT` | `/portfolio/order_groups/{order_group_id}/limit` | Update Order Group Limit | Required | -| `GetBalance` | `GET` | `/portfolio/balance` | Get Balance | Required | -| `CreateSubaccount` | `POST` | `/portfolio/subaccounts` | Create Subaccount | Required | -| `ApplySubaccountTransfer` | `POST` | `/portfolio/subaccounts/transfer` | Transfer Between Subaccounts | Required | -| `GetSubaccountBalances` | `GET` | `/portfolio/subaccounts/balances` | Get All Subaccount Balances | Required | -| `GetSubaccountTransfers` | `GET` | `/portfolio/subaccounts/transfers` | Get Subaccount Transfers | Required | -| `GetPositions` | `GET` | `/portfolio/positions` | Get Positions | Required | -| `GetSettlements` | `GET` | `/portfolio/settlements` | Get Settlements | Required | -| `GetPortfolioRestingOrderTotalValue` | `GET` | `/portfolio/summary/total_resting_order_value` | Get Total Resting Order Value | Required | -| `GetFills` | `GET` | `/portfolio/fills` | Get Fills | Required | -| `GetApiKeys` | `GET` | `/api_keys` | Get API Keys | Required | -| `CreateApiKey` | `POST` | `/api_keys` | Create API Key | Required | -| `GenerateApiKey` | `POST` | `/api_keys/generate` | Generate API Key | Required | -| `DeleteApiKey` | `DELETE` | `/api_keys/{api_key}` | Delete API Key | Required | -| `GetTagsForSeriesCategories` | `GET` | `/search/tags_by_categories` | Get Tags for Series Categories | Public | -| `GetFiltersForSports` | `GET` | `/search/filters_by_sport` | Get Filters for Sports | Public | -| `GetAccountApiLimits` | `GET` | `/account/limits` | Get Account API Limits | Required | -| `GetMarketCandlesticks` | `GET` | `/series/{series_ticker}/markets/{ticker}/candlesticks` | Get Market Candlesticks | Public | -| `GetTrades` | `GET` | `/markets/trades` | Get Trades | Public | -| `GetMarketCandlesticksByEvent` | `GET` | `/series/{series_ticker}/events/{ticker}/candlesticks` | Get Event Candlesticks | Public | -| `GetEvents` | `GET` | `/events` | Get Events | Public | -| `GetMultivariateEvents` | `GET` | `/events/multivariate` | Get Multivariate Events | Public | -| `GetEvent` | `GET` | `/events/{event_ticker}` | Get Event | Public | -| `GetEventMetadata` | `GET` | `/events/{event_ticker}/metadata` | Get Event Metadata | Public | -| `GetEventForecastPercentilesHistory` | `GET` | `/series/{series_ticker}/events/{ticker}/forecast_percentile_history` | Get Event Forecast Percentile History | Required | -| `GetLiveData` | `GET` | `/live_data/{type}/milestone/{milestone_id}` | Get Live Data | Public | -| `GetLiveDatas` | `GET` | `/live_data/batch` | Get Multiple Live Data | Public | -| `GetIncentivePrograms` | `GET` | `/incentive_programs` | Get Incentives | Public | -| `GetFCMOrders` | `GET` | `/fcm/orders` | Get FCM Orders | Required | -| `GetFCMPositions` | `GET` | `/fcm/positions` | Get FCM Positions | Required | -| `GetStructuredTargets` | `GET` | `/structured_targets` | Get Structured Targets | Public | -| `GetStructuredTarget` | `GET` | `/structured_targets/{structured_target_id}` | Get Structured Target | Public | -| `GetMarketOrderbook` | `GET` | `/markets/{ticker}/orderbook` | Get Market Orderbook | Required | -| `GetMarketOrderbooks` | `GET` | `/markets/orderbooks` | Get Multiple Market Orderbooks | Required | -| `GetMilestone` | `GET` | `/milestones/{milestone_id}` | Get Milestone | Public | -| `GetMilestones` | `GET` | `/milestones` | Get Milestones | Public | -| `GetCommunicationsID` | `GET` | `/communications/id` | Get Communications ID | Required | -| `GetRFQs` | `GET` | `/communications/rfqs` | Get RFQs | Required | -| `CreateRFQ` | `POST` | `/communications/rfqs` | Create RFQ | Required | -| `GetRFQ` | `GET` | `/communications/rfqs/{rfq_id}` | Get RFQ | Required | -| `DeleteRFQ` | `DELETE` | `/communications/rfqs/{rfq_id}` | Delete RFQ | Required | -| `GetQuotes` | `GET` | `/communications/quotes` | Get Quotes | Required | -| `CreateQuote` | `POST` | `/communications/quotes` | Create Quote | Required | -| `GetQuote` | `GET` | `/communications/quotes/{quote_id}` | Get Quote | Required | -| `DeleteQuote` | `DELETE` | `/communications/quotes/{quote_id}` | Delete Quote | Required | -| `AcceptQuote` | `PUT` | `/communications/quotes/{quote_id}/accept` | Accept Quote | Required | -| `ConfirmQuote` | `PUT` | `/communications/quotes/{quote_id}/confirm` | Confirm Quote | Required | -| `GetMultivariateEventCollection` | `GET` | `/multivariate_event_collections/{collection_ticker}` | Get Multivariate Event Collection | Public | -| `CreateMarketInMultivariateEventCollection` | `POST` | `/multivariate_event_collections/{collection_ticker}` | Create Market In Multivariate Event Collection | Required | -| `GetMultivariateEventCollections` | `GET` | `/multivariate_event_collections` | Get Multivariate Event Collections | Public | -| `LookupTickersForMarketInMultivariateEventCollection` | `PUT` | `/multivariate_event_collections/{collection_ticker}/lookup` | Lookup Tickers For Market In Multivariate Event Collection | Required | -| `GetMultivariateEventCollectionLookupHistory` | `GET` | `/multivariate_event_collections/{collection_ticker}/lookup` | Get Multivariate Event Collection Lookup History | Public | -| `GetSeries` | `GET` | `/series/{series_ticker}` | Get Series | Public | -| `GetSeriesList` | `GET` | `/series` | Get Series List | Public | -| `GetMarkets` | `GET` | `/markets` | Get Markets | Public | -| `GetMarket` | `GET` | `/markets/{ticker}` | Get Market | Public | -| `BatchGetMarketCandlesticks` | `GET` | `/markets/candlesticks` | Batch Get Market Candlesticks | Public | - -#### Endpoint Details - -##### `GetHistoricalCutoff` - -**GET** `/historical/cutoff` - -Get Historical Cutoff Timestamps - - ---- -##### `GetMarketCandlesticksHistorical` - -**GET** `/historical/markets/{ticker}/candlesticks` - -Get Historical Market Candlesticks - -**Parameters:** -- `ticker` (path, string) **required** — Market ticker - unique identifier for the specific market -- `start_ts` (query, integer) **required** — Start timestamp (Unix timestamp). Candlesticks will include those ending on or after this time. -- `end_ts` (query, integer) **required** — End timestamp (Unix timestamp). Candlesticks will include those ending on or before this time. -- `period_interval` (query, integer) **required** — Time period length of each candlestick in minutes. Valid values are 1 (1 minute), 60 (1 hour), or 1440 (1 day). — enum: `1,60,1440` - ---- -##### `GetFillsHistorical` - -**GET** `/historical/fills` - -Get Historical Fills *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetHistoricalOrders` - -**GET** `/historical/orders` - -Get Historical Orders *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetHistoricalMarkets` - -**GET** `/historical/markets` - -Get Historical Markets - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetHistoricalMarket` - -**GET** `/historical/markets/{ticker}` - -Get Historical Market - -**Parameters:** -- `` (, string) - ---- -##### `GetExchangeStatus` - -**GET** `/exchange/status` - -Get Exchange Status - - ---- -##### `GetExchangeAnnouncements` - -**GET** `/exchange/announcements` - -Get Exchange Announcements - - ---- -##### `GetSeriesFeeChanges` - -**GET** `/series/fee_changes` - -Get Series Fee Changes - -**Parameters:** -- `series_ticker` (query, string) -- `show_historical` (query, boolean) - ---- -##### `GetExchangeSchedule` - -**GET** `/exchange/schedule` - -Get Exchange Schedule - - ---- -##### `GetUserDataTimestamp` - -**GET** `/exchange/user_data_timestamp` - -Get User Data Timestamp - - ---- -##### `GetOrders` - -**GET** `/portfolio/orders` - -Get Orders *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `CreateOrder` - -**POST** `/portfolio/orders` - -Create Order *(Auth required)* - - ---- -##### `GetOrder` - -**GET** `/portfolio/orders/{order_id}` - -Get Order *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `CancelOrder` - -**DELETE** `/portfolio/orders/{order_id}` - -Cancel Order *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) - ---- -##### `BatchCreateOrders` - -**POST** `/portfolio/orders/batched` - -Batch Create Orders *(Auth required)* - - ---- -##### `BatchCancelOrders` - -**DELETE** `/portfolio/orders/batched` - -Batch Cancel Orders *(Auth required)* - - ---- -##### `AmendOrder` - -**POST** `/portfolio/orders/{order_id}/amend` - -Amend Order *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `DecreaseOrder` - -**POST** `/portfolio/orders/{order_id}/decrease` - -Decrease Order *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `GetOrderQueuePositions` - -**GET** `/portfolio/orders/queue_positions` - -Get Queue Positions for Orders *(Auth required)* - -**Parameters:** -- `market_tickers` (query, string) — Comma-separated list of market tickers to filter by -- `event_ticker` (query, string) — Event ticker to filter by -- `` (, string) - ---- -##### `GetOrderQueuePosition` - -**GET** `/portfolio/orders/{order_id}/queue_position` - -Get Order Queue Position *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `GetOrderGroups` - -**GET** `/portfolio/order_groups` - -Get Order Groups *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `CreateOrderGroup` - -**POST** `/portfolio/order_groups/create` - -Create Order Group *(Auth required)* - - ---- -##### `GetOrderGroup` - -**GET** `/portfolio/order_groups/{order_group_id}` - -Get Order Group *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) - ---- -##### `DeleteOrderGroup` - -**DELETE** `/portfolio/order_groups/{order_group_id}` - -Delete Order Group *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) - ---- -##### `ResetOrderGroup` - -**PUT** `/portfolio/order_groups/{order_group_id}/reset` - -Reset Order Group *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) - ---- -##### `TriggerOrderGroup` - -**PUT** `/portfolio/order_groups/{order_group_id}/trigger` - -Trigger Order Group *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) - ---- -##### `UpdateOrderGroupLimit` - -**PUT** `/portfolio/order_groups/{order_group_id}/limit` - -Update Order Group Limit *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `GetBalance` - -**GET** `/portfolio/balance` - -Get Balance *(Auth required)* - -**Parameters:** -- `subaccount` (query, integer) — Subaccount number (0 for primary, 1-32 for subaccounts). When provided, returns only that subaccount's balance. - ---- -##### `CreateSubaccount` - -**POST** `/portfolio/subaccounts` - -Create Subaccount *(Auth required)* - - ---- -##### `ApplySubaccountTransfer` - -**POST** `/portfolio/subaccounts/transfer` - -Transfer Between Subaccounts *(Auth required)* - - ---- -##### `GetSubaccountBalances` - -**GET** `/portfolio/subaccounts/balances` - -Get All Subaccount Balances *(Auth required)* - - ---- -##### `GetSubaccountTransfers` - -**GET** `/portfolio/subaccounts/transfers` - -Get Subaccount Transfers *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) - ---- -##### `GetPositions` - -**GET** `/portfolio/positions` - -Get Positions *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetSettlements` - -**GET** `/portfolio/settlements` - -Get Settlements *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetPortfolioRestingOrderTotalValue` - -**GET** `/portfolio/summary/total_resting_order_value` - -Get Total Resting Order Value *(Auth required)* - - ---- -##### `GetFills` - -**GET** `/portfolio/fills` - -Get Fills *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetApiKeys` - -**GET** `/api_keys` - -Get API Keys *(Auth required)* - - ---- -##### `CreateApiKey` - -**POST** `/api_keys` - -Create API Key *(Auth required)* - - ---- -##### `GenerateApiKey` - -**POST** `/api_keys/generate` - -Generate API Key *(Auth required)* - - ---- -##### `DeleteApiKey` - -**DELETE** `/api_keys/{api_key}` - -Delete API Key *(Auth required)* - -**Parameters:** -- `api_key` (path, string) **required** — API key ID to delete - ---- -##### `GetTagsForSeriesCategories` - -**GET** `/search/tags_by_categories` - -Get Tags for Series Categories - - ---- -##### `GetFiltersForSports` - -**GET** `/search/filters_by_sport` - -Get Filters for Sports - - ---- -##### `GetAccountApiLimits` - -**GET** `/account/limits` - -Get Account API Limits *(Auth required)* - - ---- -##### `GetMarketCandlesticks` - -**GET** `/series/{series_ticker}/markets/{ticker}/candlesticks` - -Get Market Candlesticks - -**Parameters:** -- `series_ticker` (path, string) **required** — Series ticker - the series that contains the target market -- `ticker` (path, string) **required** — Market ticker - unique identifier for the specific market -- `start_ts` (query, integer) **required** — Start timestamp (Unix timestamp). Candlesticks will include those ending on or after this time. -- `end_ts` (query, integer) **required** — End timestamp (Unix timestamp). Candlesticks will include those ending on or before this time. -- `period_interval` (query, integer) **required** — Time period length of each candlestick in minutes. Valid values are 1 (1 minute), 60 (1 hour), or 1440 (1 day). — enum: `1,60,1440` -- `include_latest_before_start` (query, boolean) — If true, prepends the latest candlestick available before the start_ts. This synthetic candlestick is created by: -1. Finding the most recent real candlestick before start_ts -2. Projecting it forward to the first period boundary (calculated as the next period interval after start_ts) -3. Setting all OHLC prices to null, and `previous_price` to the close price from the real candlestick - - ---- -##### `GetTrades` - -**GET** `/markets/trades` - -Get Trades - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetMarketCandlesticksByEvent` - -**GET** `/series/{series_ticker}/events/{ticker}/candlesticks` - -Get Event Candlesticks - -**Parameters:** -- `ticker` (path, string) **required** — The event ticker -- `series_ticker` (path, string) **required** — The series ticker -- `start_ts` (query, integer) **required** — Start timestamp for the range -- `end_ts` (query, integer) **required** — End timestamp for the range -- `period_interval` (query, integer) **required** — Specifies the length of each candlestick period, in minutes. Must be one minute, one hour, or one day. — enum: `1,60,1440` - ---- -##### `GetEvents` - -**GET** `/events` - -Get Events - -**Parameters:** -- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 200. Maximum value is 200. -- `cursor` (query, string) — Parameter to specify the pagination cursor. Use the cursor value returned from the previous response to get the next page of results. Leave empty for the first page. -- `with_nested_markets` (query, boolean) — Parameter to specify if nested markets should be included in the response. When true, each event will include a 'markets' field containing a list of Market objects associated with that event. -- `with_milestones` (query, boolean) — If true, includes related milestones as a field alongside events. -- `status` (query, string) — Filter by event status. Possible values are 'open', 'closed', 'settled'. Leave empty to return events with any status. — enum: `open,closed,settled` -- `` (, string) -- `min_close_ts` (query, integer) — Filter events with at least one market with close timestamp greater than this Unix timestamp (in seconds). - ---- -##### `GetMultivariateEvents` - -**GET** `/events/multivariate` - -Get Multivariate Events - -**Parameters:** -- `limit` (query, integer) — Number of results per page. Defaults to 100. Maximum value is 200. -- `cursor` (query, string) — Pagination cursor. Use the cursor value returned from the previous response to get the next page of results. -- `` (, string) -- `collection_ticker` (query, string) — Filter events by collection ticker. Returns only multivariate events belonging to the specified collection. Cannot be used together with series_ticker. -- `with_nested_markets` (query, boolean) — Parameter to specify if nested markets should be included in the response. When true, each event will include a 'markets' field containing a list of Market objects associated with that event. - ---- -##### `GetEvent` - -**GET** `/events/{event_ticker}` - -Get Event - -**Parameters:** -- `event_ticker` (path, string) **required** — Event ticker -- `with_nested_markets` (query, boolean) — If true, markets are included within the event object. If false (default), markets are returned as a separate top-level field in the response. - ---- -##### `GetEventMetadata` - -**GET** `/events/{event_ticker}/metadata` - -Get Event Metadata - -**Parameters:** -- `event_ticker` (path, string) **required** — Event ticker - ---- -##### `GetEventForecastPercentilesHistory` - -**GET** `/series/{series_ticker}/events/{ticker}/forecast_percentile_history` - -Get Event Forecast Percentile History *(Auth required)* - -**Parameters:** -- `ticker` (path, string) **required** — The event ticker -- `series_ticker` (path, string) **required** — The series ticker -- `percentiles` (query, array) **required** — Array of percentile values to retrieve (0-10000, max 10 values) -- `start_ts` (query, integer) **required** — Start timestamp for the range -- `end_ts` (query, integer) **required** — End timestamp for the range -- `period_interval` (query, integer) **required** — Specifies the length of each forecast period, in minutes. 0 for 5-second intervals, or 1, 60, or 1440 for minute-based intervals. — enum: `0,1,60,1440` - ---- -##### `GetLiveData` - -**GET** `/live_data/{type}/milestone/{milestone_id}` - -Get Live Data - -**Parameters:** -- `type` (path, string) **required** — Type of live data -- `milestone_id` (path, string) **required** — Milestone ID - ---- -##### `GetLiveDatas` - -**GET** `/live_data/batch` - -Get Multiple Live Data - -**Parameters:** -- `milestone_ids` (query, array) **required** — Array of milestone IDs - ---- -##### `GetIncentivePrograms` - -**GET** `/incentive_programs` - -Get Incentives - -**Parameters:** -- `status` (query, string) — Status filter. Can be "all", "active", "upcoming", "closed", or "paid_out". Default is "all". — enum: `all,active,upcoming,closed,paid_out` -- `type` (query, string) — Type filter. Can be "all", "liquidity", or "volume". Default is "all". — enum: `all,liquidity,volume` -- `limit` (query, integer) — Number of results per page. Defaults to 100. Maximum value is 10000. -- `cursor` (query, string) — Cursor for pagination - ---- -##### `GetFCMOrders` - -**GET** `/fcm/orders` - -Get FCM Orders *(Auth required)* - -**Parameters:** -- `subtrader_id` (query, string) **required** — Restricts the response to orders for a specific subtrader (FCM members only) -- `` (, string) -- `` (, string) -- `` (, string) -- `min_ts` (query, integer) — Restricts the response to orders after a timestamp, formatted as a Unix Timestamp -- `max_ts` (query, integer) — Restricts the response to orders before a timestamp, formatted as a Unix Timestamp -- `status` (query, string) — Restricts the response to orders that have a certain status — enum: `resting,canceled,executed` -- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 100 - ---- -##### `GetFCMPositions` - -**GET** `/fcm/positions` - -Get FCM Positions *(Auth required)* - -**Parameters:** -- `subtrader_id` (query, string) **required** — Restricts the response to positions for a specific subtrader (FCM members only) -- `ticker` (query, string) — Ticker of desired positions -- `event_ticker` (query, string) — Event ticker of desired positions -- `count_filter` (query, string) — Restricts the positions to those with any of following fields with non-zero values, as a comma separated list -- `settlement_status` (query, string) — Settlement status of the markets to return. Defaults to unsettled — enum: `all,unsettled,settled` -- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 100 -- `cursor` (query, string) — The Cursor represents a pointer to the next page of records in the pagination - ---- -##### `GetStructuredTargets` - -**GET** `/structured_targets` - -Get Structured Targets - -**Parameters:** -- `type` (query, string) — Filter by structured target type -- `competition` (query, string) — Filter by competition -- `page_size` (query, integer) — Number of items per page (min 1, max 2000, default 100) -- `cursor` (query, string) — Pagination cursor - ---- -##### `GetStructuredTarget` - -**GET** `/structured_targets/{structured_target_id}` - -Get Structured Target - -**Parameters:** -- `structured_target_id` (path, string) **required** — Structured target ID - ---- -##### `GetMarketOrderbook` - -**GET** `/markets/{ticker}/orderbook` - -Get Market Orderbook *(Auth required)* - -**Parameters:** -- `` (, string) -- `depth` (query, integer) — Depth of the orderbook to retrieve (0 or negative means all levels, 1-100 for specific depth) - ---- -##### `GetMarketOrderbooks` - -**GET** `/markets/orderbooks` - -Get Multiple Market Orderbooks *(Auth required)* - -**Parameters:** -- `tickers` (query, array) **required** — List of market tickers to fetch orderbooks for - ---- -##### `GetMilestone` - -**GET** `/milestones/{milestone_id}` - -Get Milestone - -**Parameters:** -- `milestone_id` (path, string) **required** — Milestone ID - ---- -##### `GetMilestones` - -**GET** `/milestones` - -Get Milestones - -**Parameters:** -- `limit` (query, integer) **required** — Number of milestones to return per page -- `minimum_start_date` (query, string) — Minimum start date to filter milestones. Format RFC3339 timestamp -- `category` (query, string) — Filter by milestone category -- `competition` (query, string) — Filter by competition -- `source_id` (query, string) — Filter by source id -- `type` (query, string) — Filter by milestone type -- `related_event_ticker` (query, string) — Filter by related event ticker -- `cursor` (query, string) — Pagination cursor. Use the cursor value returned from the previous response to get the next page of results - ---- -##### `GetCommunicationsID` - -**GET** `/communications/id` - -Get Communications ID *(Auth required)* - - ---- -##### `GetRFQs` - -**GET** `/communications/rfqs` - -Get RFQs *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 100. -- `status` (query, string) — Filter RFQs by status -- `creator_user_id` (query, string) — Filter RFQs by creator user ID - ---- -##### `CreateRFQ` - -**POST** `/communications/rfqs` - -Create RFQ *(Auth required)* - - ---- -##### `GetRFQ` - -**GET** `/communications/rfqs/{rfq_id}` - -Get RFQ *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `DeleteRFQ` - -**DELETE** `/communications/rfqs/{rfq_id}` - -Delete RFQ *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `GetQuotes` - -**GET** `/communications/quotes` - -Get Quotes *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 500. -- `status` (query, string) — Filter quotes by status -- `quote_creator_user_id` (query, string) — Filter quotes by quote creator user ID -- `rfq_creator_user_id` (query, string) — Filter quotes by RFQ creator user ID -- `rfq_creator_subtrader_id` (query, string) — Filter quotes by RFQ creator subtrader ID (FCM members only) -- `rfq_id` (query, string) — Filter quotes by RFQ ID - ---- -##### `CreateQuote` - -**POST** `/communications/quotes` - -Create Quote *(Auth required)* - - ---- -##### `GetQuote` - -**GET** `/communications/quotes/{quote_id}` - -Get Quote *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `DeleteQuote` - -**DELETE** `/communications/quotes/{quote_id}` - -Delete Quote *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `AcceptQuote` - -**PUT** `/communications/quotes/{quote_id}/accept` - -Accept Quote *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `ConfirmQuote` - -**PUT** `/communications/quotes/{quote_id}/confirm` - -Confirm Quote *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `GetMultivariateEventCollection` - -**GET** `/multivariate_event_collections/{collection_ticker}` - -Get Multivariate Event Collection - -**Parameters:** -- `collection_ticker` (path, string) **required** — Collection ticker - ---- -##### `CreateMarketInMultivariateEventCollection` - -**POST** `/multivariate_event_collections/{collection_ticker}` - -Create Market In Multivariate Event Collection *(Auth required)* - -**Parameters:** -- `collection_ticker` (path, string) **required** — Collection ticker - ---- -##### `GetMultivariateEventCollections` - -**GET** `/multivariate_event_collections` - -Get Multivariate Event Collections - -**Parameters:** -- `status` (query, string) — Only return collections of a certain status. Can be unopened, open, or closed. — enum: `unopened,open,closed` -- `associated_event_ticker` (query, string) — Only return collections associated with a particular event ticker. -- `series_ticker` (query, string) — Only return collections with a particular series ticker. -- `limit` (query, integer) — Specify the maximum number of results. -- `cursor` (query, string) — The Cursor represents a pointer to the next page of records in the pagination. This optional parameter, when filled, should be filled with the cursor string returned in a previous request to this end-point. - ---- -##### `LookupTickersForMarketInMultivariateEventCollection` - -**PUT** `/multivariate_event_collections/{collection_ticker}/lookup` - -Lookup Tickers For Market In Multivariate Event Collection *(Auth required)* - -**Parameters:** -- `collection_ticker` (path, string) **required** — Collection ticker - ---- -##### `GetMultivariateEventCollectionLookupHistory` - -**GET** `/multivariate_event_collections/{collection_ticker}/lookup` - -Get Multivariate Event Collection Lookup History - -**Parameters:** -- `collection_ticker` (path, string) **required** — Collection ticker -- `lookback_seconds` (query, integer) **required** — Number of seconds to look back for lookup history. Must be one of 10, 60, 300, or 3600. — enum: `10,60,300,3600` - ---- -##### `GetSeries` - -**GET** `/series/{series_ticker}` - -Get Series - -**Parameters:** -- `series_ticker` (path, string) **required** — The ticker of the series to retrieve -- `include_volume` (query, boolean) — If true, includes the total volume traded across all events in this series. - ---- -##### `GetSeriesList` - -**GET** `/series` - -Get Series List - -**Parameters:** -- `category` (query, string) -- `tags` (query, string) -- `include_product_metadata` (query, boolean) -- `include_volume` (query, boolean) — If true, includes the total volume traded across all events in each series. - ---- -##### `GetMarkets` - -**GET** `/markets` - -Get Markets - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetMarket` - -**GET** `/markets/{ticker}` - -Get Market - -**Parameters:** -- `` (, string) - ---- -##### `BatchGetMarketCandlesticks` - -**GET** `/markets/candlesticks` - -Batch Get Market Candlesticks - -**Parameters:** -- `market_tickers` (query, string) **required** — Comma-separated list of market tickers (maximum 100) -- `start_ts` (query, integer) **required** — Start timestamp in Unix seconds -- `end_ts` (query, integer) **required** — End timestamp in Unix seconds -- `period_interval` (query, integer) **required** — Candlestick period interval in minutes -- `include_latest_before_start` (query, boolean) — If true, prepends the latest candlestick available before the start_ts. This synthetic candlestick is created by: -1. Finding the most recent real candlestick before start_ts -2. Projecting it forward to the first period boundary (calculated as the next period interval after start_ts) -3. Setting all OHLC prices to null, and `previous_price` to the close price from the real candlestick - - ---- -### Limitless - -| `call_api()` name | Method | Path | Summary | Auth | -|-----------------|--------|------|---------|------| -| `AuthController_getSigningMessage` | `GET` | `/auth/signing-message` | Get signing message | Public | -| `AuthController_verifyAuth` | `GET` | `/auth/verify-auth` | Verify authentication | Required | -| `AuthController_login` | `POST` | `/auth/login` | User login | Public | -| `AuthController_logout` | `POST` | `/auth/logout` | User logout | Required | -| `MarketController_getActiveMarkets[0]` | `GET` | `/markets/active/{categoryId}` | Browse Active Markets | Public | -| `MarketController_getActiveMarkets[1]` | `GET` | `/markets/active` | Browse Active Markets | Public | -| `MarketController_getActiveMarketCountPerCategory` | `GET` | `/markets/categories/count` | Get active market count per category | Public | -| `MarketController_getActiveSlugs` | `GET` | `/markets/active/slugs` | Get active market slugs with metadata | Public | -| `MarketController_find` | `GET` | `/markets/{addressOrSlug}` | Get Market Details | Public | -| `MarketController_getFeedEvent` | `GET` | `/markets/{slug}/get-feed-events` | Get feed events for a market | Required | -| `MarketOrderbookController_getHistoricalPrice` | `GET` | `/markets/{slug}/historical-price` | Get Historical Prices | Public | -| `MarketOrderbookController_getOrderbook` | `GET` | `/markets/{slug}/orderbook` | Get Orderbook | Public | -| `MarketOrderbookController_getLockedBalance` | `GET` | `/markets/{slug}/locked-balance` | Get Locked Balance | Required | -| `MarketOrderbookController_getUserOrders` | `GET` | `/markets/{slug}/user-orders` | User Orders | Required | -| `MarketOrderbookController_getMarketEvents` | `GET` | `/markets/{slug}/events` | Market Events | Public | -| `MarketSearchController_search` | `GET` | `/markets/search` | Search for markets based on semantic similarity | Public | -| `PortfolioController_getTrades` | `GET` | `/portfolio/trades` | Get Trades | Required | -| `PortfolioController_getPositions` | `GET` | `/portfolio/positions` | Get Positions | Required | -| `PortfolioController_getPnlChart` | `GET` | `/portfolio/pnl-chart` | Get portfolio PnL chart | Required | -| `PortfolioController_getHistory` | `GET` | `/portfolio/history` | Get History | Required | -| `PortfolioController_getPointsBreakdown` | `GET` | `/portfolio/points` | Get points breakdown | Required | -| `PublicPortfolioController_tradedVolume` | `GET` | `/portfolio/{account}/traded-volume` | User Total Volume | Public | -| `PublicPortfolioController_getPositions` | `GET` | `/portfolio/{account}/positions` | Get All User Positions | Public | -| `PublicPortfolioController_getPnlChart` | `GET` | `/portfolio/{account}/pnl-chart` | Get portfolio PnL chart (public) | Public | -| `TradingPortfolioController_getAllowance` | `GET` | `/portfolio/trading/allowance` | Get User Trading Allowance | Required | -| `OrderController_createOrder` | `POST` | `/orders` | Create Order | Required | -| `OrderController_cancelOrder` | `DELETE` | `/orders/{orderId}` | Cancel Order | Required | -| `OrderController_cancelOrderBatch` | `POST` | `/orders/cancel-batch` | Cancel multiple orders in batch | Required | -| `OrderController_cancelAllOrders` | `DELETE` | `/orders/all/{slug}` | Cancel all of a user's orders in a specific market | Required | - -#### Endpoint Details - -##### `AuthController_getSigningMessage` - -**GET** `/auth/signing-message` - -Get signing message - - ---- -##### `AuthController_verifyAuth` - -**GET** `/auth/verify-auth` - -Verify authentication *(Auth required)* - - ---- -##### `AuthController_login` - -**POST** `/auth/login` - -User login - -**Parameters:** -- `x-account` (header, string) **required** — The Ethereum address of the user -- `x-signing-message` (header, string) **required** — The signing message generated by the server -- `x-signature` (header, string) **required** — The signature generated by signing the message with the user's wallet - ---- -##### `AuthController_logout` - -**POST** `/auth/logout` - -User logout *(Auth required)* - - ---- -##### `MarketController_getActiveMarkets[0]` - -**GET** `/markets/active/{categoryId}` - -Browse Active Markets - -**Parameters:** -- `page` (query, number) — Page number for pagination -- `limit` (query, number) — Number of items per page -- `sortBy` (query, string) — Sort by query parameter -- `tradeType` (query, string) — Filter by trade type (amm, clob, or group) — enum: `amm,clob,group` -- `automationType` (query, string) — Filter by automation type (manual, lumy, or sports) — enum: `manual,lumy,sports` -- `categoryId` (path, number) **required** — Filter markets by category ID - ---- -##### `MarketController_getActiveMarkets[1]` - -**GET** `/markets/active` - -Browse Active Markets - -**Parameters:** -- `page` (query, number) — Page number for pagination -- `limit` (query, number) — Number of items per page -- `sortBy` (query, string) — Sort by query parameter -- `tradeType` (query, string) — Filter by trade type (amm, clob, or group) — enum: `amm,clob,group` -- `automationType` (query, string) — Filter by automation type (manual, lumy, or sports) — enum: `manual,lumy,sports` -- `categoryId` (path, number) **required** — Filter markets by category ID - ---- -##### `MarketController_getActiveMarketCountPerCategory` - -**GET** `/markets/categories/count` - -Get active market count per category - - ---- -##### `MarketController_getActiveSlugs` - -**GET** `/markets/active/slugs` - -Get active market slugs with metadata - - ---- -##### `MarketController_find` - -**GET** `/markets/{addressOrSlug}` - -Get Market Details - -**Parameters:** -- `addressOrSlug` (path, string) **required** — Market/group address (0x...) or slug identifier (my-market-name) - ---- -##### `MarketController_getFeedEvent` - -**GET** `/markets/{slug}/get-feed-events` - -Get feed events for a market *(Auth required)* - -**Parameters:** -- `page` (query, number) — Page number for pagination -- `limit` (query, number) — Number of events per page -- `slug` (path, string) **required** — Slug of the market - ---- -##### `MarketOrderbookController_getHistoricalPrice` - -**GET** `/markets/{slug}/historical-price` - -Get Historical Prices - -**Parameters:** -- `to` (query, string) — End date for historical data -- `from` (query, string) — Start date for historical data -- `interval` (query, string) — Time interval for data points — enum: `1h,6h,1d,1w,1m,all` -- `slug` (path, string) **required** — Market slug identifier - ---- -##### `MarketOrderbookController_getOrderbook` - -**GET** `/markets/{slug}/orderbook` - -Get Orderbook - -**Parameters:** -- `slug` (path, string) **required** — Market slug identifier - ---- -##### `MarketOrderbookController_getLockedBalance` - -**GET** `/markets/{slug}/locked-balance` - -Get Locked Balance *(Auth required)* - -**Parameters:** -- `slug` (path, string) **required** — Market slug identifier - ---- -##### `MarketOrderbookController_getUserOrders` - -**GET** `/markets/{slug}/user-orders` - -User Orders *(Auth required)* - -**Parameters:** -- `statuses` (query, array) — Order status(es) to filter by. Defaults to [LIVE] if not provided -- `limit` (query, number) — Maximum number of orders to return -- `slug` (path, string) **required** — Market slug identifier - ---- -##### `MarketOrderbookController_getMarketEvents` - -**GET** `/markets/{slug}/events` - -Market Events - -**Parameters:** -- `page` (query, number) — Page number for pagination -- `limit` (query, number) — Number of events per page -- `slug` (path, string) **required** — Market slug identifier - ---- -##### `MarketSearchController_search` - -**GET** `/markets/search` - -Search for markets based on semantic similarity - -**Parameters:** -- `query` (query, string) **required** — Search query text -- `limit` (query, number) — Maximum number of results to return -- `page` (query, number) — Number of page -- `similarityThreshold` (query, number) — Minimum similarity score (0-1) - ---- -##### `PortfolioController_getTrades` - -**GET** `/portfolio/trades` - -Get Trades *(Auth required)* - - ---- -##### `PortfolioController_getPositions` - -**GET** `/portfolio/positions` - -Get Positions *(Auth required)* - - ---- -##### `PortfolioController_getPnlChart` - -**GET** `/portfolio/pnl-chart` - -Get portfolio PnL chart *(Auth required)* - -**Parameters:** -- `timeframe` (query, string) — Timeframe window for percent change and chart series - ---- -##### `PortfolioController_getHistory` - -**GET** `/portfolio/history` - -Get History *(Auth required)* - -**Parameters:** -- `page` (query, number) **required** — Page number -- `limit` (query, number) **required** — Number of items per page -- `from` (query, string) — Start date for filtering (ISO 8601 format) -- `to` (query, string) — End date for filtering (ISO 8601 format) - ---- -##### `PortfolioController_getPointsBreakdown` - -**GET** `/portfolio/points` - -Get points breakdown *(Auth required)* - - ---- -##### `PublicPortfolioController_tradedVolume` - -**GET** `/portfolio/{account}/traded-volume` - -User Total Volume - -**Parameters:** -- `account` (path, string) **required** — User Ethereum address - ---- -##### `PublicPortfolioController_getPositions` - -**GET** `/portfolio/{account}/positions` - -Get All User Positions - -**Parameters:** -- `account` (path, string) **required** — User Ethereum address - ---- -##### `PublicPortfolioController_getPnlChart` - -**GET** `/portfolio/{account}/pnl-chart` - -Get portfolio PnL chart (public) - -**Parameters:** -- `account` (path, string) **required** — User Ethereum address -- `timeframe` (query, string) — Timeframe window for percent change and chart series - ---- -##### `TradingPortfolioController_getAllowance` - -**GET** `/portfolio/trading/allowance` - -Get User Trading Allowance *(Auth required)* - -**Parameters:** -- `type` (query, string) **required** — Trading type: CLOB or NegRisk — enum: `clob,negrisk` -- `spender` (query, string) — Optional spender address override (e.g., venue exchange address) - ---- -##### `OrderController_createOrder` - -**POST** `/orders` - -Create Order *(Auth required)* - - ---- -##### `OrderController_cancelOrder` - -**DELETE** `/orders/{orderId}` - -Cancel Order *(Auth required)* - -**Parameters:** -- `orderId` (path, string) **required** — Unique identifier of the order to be cancelled - ---- -##### `OrderController_cancelOrderBatch` - -**POST** `/orders/cancel-batch` - -Cancel multiple orders in batch *(Auth required)* - - ---- -##### `OrderController_cancelAllOrders` - -**DELETE** `/orders/all/{slug}` - -Cancel all of a user's orders in a specific market *(Auth required)* - - ---- -### Probable - -| `call_api()` name | Method | Path | Summary | Auth | -|-----------------|--------|------|---------|------| -| `getPublicApiV1AuthNonce` | `GET` | `/public/api/v1/auth/nonce` | Generate Nonce | Public | -| `postPublicApiV1AuthLogin` | `POST` | `/public/api/v1/auth/login` | Login | Public | -| `postPublicApiV1AuthLogout` | `POST` | `/public/api/v1/auth/logout` | Logout | Public | -| `postPublicApiV1AuthApiKey` | `POST` | `/public/api/v1/auth/api-key/{chainId}` | Generate API Key | Required | -| `getPublicApiV1AuthApiKey` | `GET` | `/public/api/v1/auth/api-key/{chainId}` | Get API Key | Required | -| `deletePublicApiV1AuthApiKey` | `DELETE` | `/public/api/v1/auth/api-key/{chainId}` | Delete API Key | Required | -| `postPublicApiV1AuthVerifyL1` | `POST` | `/public/api/v1/auth/verify/l1` | Verify L1 Headers | Required | -| `postPublicApiV1AuthVerifyL2` | `POST` | `/public/api/v1/auth/verify/l2` | Verify L2 Headers | Required | -| `getPublicApiV1Events` | `GET` | `/public/api/v1/events/` | List All Events | Public | -| `getPublicApiV1Events` | `GET` | `/public/api/v1/events/{id}` | Get Event by ID | Public | -| `getPublicApiV1EventsSlug` | `GET` | `/public/api/v1/events/slug/{slug}` | Get Event by Slug | Public | -| `getPublicApiV1EventsTags` | `GET` | `/public/api/v1/events/{id}/tags` | Get Tags for Event | Public | -| `getPublicApiV1Markets` | `GET` | `/public/api/v1/markets/` | List All Markets | Public | -| `getPublicApiV1Markets` | `GET` | `/public/api/v1/markets/{id}` | Get Market by ID | Public | -| `getPublicApiV1MarketsPolymarket` | `GET` | `/public/api/v1/markets/polymarket/{polymarketId}` | Get Market by Polymarket ID | Public | -| `getPublicApiV1MarketsBsc` | `GET` | `/public/api/v1/markets/bsc/{bscQuestionId}` | Get Market by BSC Question ID | Public | -| `getPublicApiV1PublicSearch` | `GET` | `/public/api/v1/public-search/` | Search Events and Markets | Public | -| `getPublicApiV1Tags` | `GET` | `/public/api/v1/tags/` | List All Tags | Public | -| `postPublicApiV1Order` | `POST` | `/public/api/v1/order/{chainId}` | Place Order | Required | -| `deletePublicApiV1Order` | `DELETE` | `/public/api/v1/order/{chainId}/{orderId}` | Cancel Order | Required | -| `getPublicApiV1Orders` | `GET` | `/public/api/v1/orders/{chainId}/{orderId}` | Get Order | Required | -| `getPublicApiV1OrdersOpen` | `GET` | `/public/api/v1/orders/{chainId}/open` | Get Open Orders | Required | -| `getPublicApiV1Price` | `GET` | `/public/api/v1/price` | Get Price | Public | -| `postPublicApiV1Prices` | `POST` | `/public/api/v1/prices` | Get Prices (Batch) | Public | -| `getPublicApiV1Midpoint` | `GET` | `/public/api/v1/midpoint` | Get Midpoint | Public | -| `getPublicApiV1Book` | `GET` | `/public/api/v1/book` | Get Order Book | Public | -| `getPublicApiV1PricesHistory` | `GET` | `/public/api/v1/prices-history` | Get Price History | Public | -| `getPublicApiV1Trade` | `GET` | `/public/api/v1/trade/{chainId}` | Get Trades (Authenticated) | Required | -| `getPublicApiV1Trades` | `GET` | `/public/api/v1/trades` | Get Public Trades | Public | -| `getPublicApiV1Activity` | `GET` | `/public/api/v1/activity` | User Activity | Public | -| `getPublicApiV1PositionCurrent` | `GET` | `/public/api/v1/position/current` | Current Position | Public | -| `getPublicApiV1Pnl` | `GET` | `/public/api/v1/pnl` | Profit and Loss | Public | - -#### Endpoint Details - -##### `getPublicApiV1AuthNonce` - -**GET** `/public/api/v1/auth/nonce` - -Generate Nonce - - ---- -##### `postPublicApiV1AuthLogin` - -**POST** `/public/api/v1/auth/login` - -Login - - ---- -##### `postPublicApiV1AuthLogout` - -**POST** `/public/api/v1/auth/logout` - -Logout - - ---- -##### `postPublicApiV1AuthApiKey` - -**POST** `/public/api/v1/auth/api-key/{chainId}` - -Generate API Key *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** - ---- -##### `getPublicApiV1AuthApiKey` - -**GET** `/public/api/v1/auth/api-key/{chainId}` - -Get API Key *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** - ---- -##### `deletePublicApiV1AuthApiKey` - -**DELETE** `/public/api/v1/auth/api-key/{chainId}` - -Delete API Key *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** - ---- -##### `postPublicApiV1AuthVerifyL1` - -**POST** `/public/api/v1/auth/verify/l1` - -Verify L1 Headers *(Auth required)* - - ---- -##### `postPublicApiV1AuthVerifyL2` - -**POST** `/public/api/v1/auth/verify/l2` - -Verify L2 Headers *(Auth required)* - - ---- -##### `getPublicApiV1Events` - -**GET** `/public/api/v1/events/` - -List All Events - -**Parameters:** -- `page` (query, integer) -- `limit` (query, integer) -- `status` (query, string) — enum: `active,closed,all` -- `tag_id` (query, string) -- `sort` (query, string) - ---- -##### `getPublicApiV1Events` - -**GET** `/public/api/v1/events/{id}` - -Get Event by ID - -**Parameters:** -- `id` (path, integer) **required** - ---- -##### `getPublicApiV1EventsSlug` - -**GET** `/public/api/v1/events/slug/{slug}` - -Get Event by Slug - -**Parameters:** -- `slug` (path, string) **required** - ---- -##### `getPublicApiV1EventsTags` - -**GET** `/public/api/v1/events/{id}/tags` - -Get Tags for Event - -**Parameters:** -- `id` (path, integer) **required** - ---- -##### `getPublicApiV1Markets` - -**GET** `/public/api/v1/markets/` - -List All Markets - -**Parameters:** -- `page` (query, integer) -- `active` (query, boolean) -- `event_id` (query, integer) - ---- -##### `getPublicApiV1Markets` - -**GET** `/public/api/v1/markets/{id}` - -Get Market by ID - -**Parameters:** -- `id` (path, integer) **required** - ---- -##### `getPublicApiV1MarketsPolymarket` - -**GET** `/public/api/v1/markets/polymarket/{polymarketId}` - -Get Market by Polymarket ID - -**Parameters:** -- `polymarketId` (path, string) **required** - ---- -##### `getPublicApiV1MarketsBsc` - -**GET** `/public/api/v1/markets/bsc/{bscQuestionId}` - -Get Market by BSC Question ID - -**Parameters:** -- `bscQuestionId` (path, string) **required** - ---- -##### `getPublicApiV1PublicSearch` - -**GET** `/public/api/v1/public-search/` - -Search Events and Markets - -**Parameters:** -- `q` (query, string) **required** -- `page` (query, integer) -- `events_tag` (query, string) -- `optimized` (query, boolean) - ---- -##### `getPublicApiV1Tags` - -**GET** `/public/api/v1/tags/` - -List All Tags - - ---- -##### `postPublicApiV1Order` - -**POST** `/public/api/v1/order/{chainId}` - -Place Order *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** - ---- -##### `deletePublicApiV1Order` - -**DELETE** `/public/api/v1/order/{chainId}/{orderId}` - -Cancel Order *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** -- `orderId` (path, string) **required** -- `tokenId` (query, string) **required** - ---- -##### `getPublicApiV1Orders` - -**GET** `/public/api/v1/orders/{chainId}/{orderId}` - -Get Order *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** -- `orderId` (path, string) **required** -- `tokenId` (query, string) **required** - ---- -##### `getPublicApiV1OrdersOpen` - -**GET** `/public/api/v1/orders/{chainId}/open` - -Get Open Orders *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** -- `limit` (query, integer) -- `page` (query, integer) - ---- -##### `getPublicApiV1Price` - -**GET** `/public/api/v1/price` - -Get Price - -**Parameters:** -- `token_id` (query, string) **required** -- `side` (query, string) **required** — enum: `BUY,SELL` - ---- -##### `postPublicApiV1Prices` - -**POST** `/public/api/v1/prices` - -Get Prices (Batch) - - ---- -##### `getPublicApiV1Midpoint` - -**GET** `/public/api/v1/midpoint` - -Get Midpoint - -**Parameters:** -- `token_id` (query, string) **required** - ---- -##### `getPublicApiV1Book` - -**GET** `/public/api/v1/book` - -Get Order Book - -**Parameters:** -- `token_id` (query, string) **required** - ---- -##### `getPublicApiV1PricesHistory` - -**GET** `/public/api/v1/prices-history` - -Get Price History - -**Parameters:** -- `market` (query, string) **required** — Asset ID -- `interval` (query, string) — enum: `max,1m,1h,6h,1d,1w` -- `startTs` (query, integer) -- `endTs` (query, integer) - ---- -##### `getPublicApiV1Trade` - -**GET** `/public/api/v1/trade/{chainId}` - -Get Trades (Authenticated) *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** -- `tokenId` (query, string) **required** -- `limit` (query, integer) -- `next_cursor` (query, string) - ---- -##### `getPublicApiV1Trades` - -**GET** `/public/api/v1/trades` - -Get Public Trades - -**Parameters:** -- `user` (query, string) -- `limit` (query, integer) -- `side` (query, string) - ---- -##### `getPublicApiV1Activity` - -**GET** `/public/api/v1/activity` - -User Activity - -**Parameters:** -- `user` (query, string) **required** -- `limit` (query, integer) - ---- -##### `getPublicApiV1PositionCurrent` - -**GET** `/public/api/v1/position/current` - -Current Position - -**Parameters:** -- `user` (query, string) **required** -- `eventId` (query, integer) - ---- -##### `getPublicApiV1Pnl` - -**GET** `/public/api/v1/pnl` - -Profit and Loss - -**Parameters:** -- `user_address` (query, string) **required** - ---- -### Myriad - -| `call_api()` name | Method | Path | Summary | Auth | -|-----------------|--------|------|---------|------| -| `getQuestions` | `GET` | `/questions` | List Questions | Required | -| `getQuestions` | `GET` | `/questions/{id}` | Get Question Details | Required | -| `getMarkets` | `GET` | `/markets` | List Markets | Required | -| `getMarkets` | `GET` | `/markets/{id}` | Get Market Details | Required | -| `getMarketsEvents` | `GET` | `/markets/{id}/events` | Get Market Events | Required | -| `getMarketsReferrals` | `GET` | `/markets/{id}/referrals` | Get Market Referrals | Required | -| `getMarketsHolders` | `GET` | `/markets/{id}/holders` | Get Market Holders | Required | -| `postMarketsQuote` | `POST` | `/markets/quote` | Get Trade Quote | Required | -| `postMarketsQuoteWithFee` | `POST` | `/markets/quote_with_fee` | Get Trade Quote with Frontend Fee | Required | -| `postMarketsClaim` | `POST` | `/markets/claim` | Get Claim Quote | Required | -| `getUsersEvents` | `GET` | `/users/{address}/events` | Get User Events | Required | -| `getUsersReferrals` | `GET` | `/users/{address}/referrals` | Get User Referrals | Required | -| `getUsersPortfolio` | `GET` | `/users/{address}/portfolio` | Get User Portfolio | Required | -| `getUsersMarkets` | `GET` | `/users/{address}/markets` | Get User Markets Portfolio | Required | - -#### Endpoint Details - -##### `getQuestions` - -**GET** `/questions` - -List Questions *(Auth required)* - -**Parameters:** -- `page` (query, integer) -- `limit` (query, integer) -- `keyword` (query, string) — Search in question title -- `min_markets` (query, integer) — Minimum number of linked markets -- `max_markets` (query, integer) — Maximum number of linked markets - ---- -##### `getQuestions` - -**GET** `/questions/{id}` - -Get Question Details *(Auth required)* - -**Parameters:** -- `id` (path, integer) **required** - ---- -##### `getMarkets` - -**GET** `/markets` - -List Markets *(Auth required)* - -**Parameters:** -- `page` (query, integer) -- `limit` (query, integer) -- `sort` (query, string) — enum: `volume,volume_24h,liquidity,expires_at,published_at,featured` -- `order` (query, string) — enum: `asc,desc` -- `network_id` (query, string) — Comma-separated list of network ids -- `state` (query, string) — enum: `open,closed,resolved,voided` -- `trading_model` (query, string) — Filter markets by trading model (e.g. CLOB, AMM) -- `token_address` (query, string) -- `topics` (query, string) — Comma-separated list of topics -- `keyword` (query, string) — Full-text search across title, description, and outcome titles -- `ids` (query, string) — Comma-separated list of on-chain market ids -- `in_play` (query, boolean) -- `moneyline` (query, boolean) -- `min_duration` (query, integer) — Minimum market duration in seconds -- `max_duration` (query, integer) — Maximum market duration in seconds - ---- -##### `getMarkets` - -**GET** `/markets/{id}` - -Get Market Details *(Auth required)* - -**Parameters:** -- `id` (path, string) **required** — Market slug OR Market ID -- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID - ---- -##### `getMarketsEvents` - -**GET** `/markets/{id}/events` - -Get Market Events *(Auth required)* - -**Parameters:** -- `id` (path, string) **required** — Market slug OR Market ID -- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID -- `page` (query, integer) -- `limit` (query, integer) -- `since` (query, integer) — Unix seconds (inclusive) -- `until` (query, integer) — Unix seconds (inclusive) - ---- -##### `getMarketsReferrals` - -**GET** `/markets/{id}/referrals` - -Get Market Referrals *(Auth required)* - -**Parameters:** -- `id` (path, string) **required** — Market slug OR Market ID -- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID -- `page` (query, integer) -- `limit` (query, integer) -- `since` (query, integer) -- `until` (query, integer) -- `code` (query, string) - ---- -##### `getMarketsHolders` - -**GET** `/markets/{id}/holders` - -Get Market Holders *(Auth required)* - -**Parameters:** -- `id` (path, string) **required** — Market slug OR Market ID -- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID -- `page` (query, integer) -- `limit` (query, integer) - ---- -##### `postMarketsQuote` - -**POST** `/markets/quote` - -Get Trade Quote *(Auth required)* - - ---- -##### `postMarketsQuoteWithFee` - -**POST** `/markets/quote_with_fee` - -Get Trade Quote with Frontend Fee *(Auth required)* - - ---- -##### `postMarketsClaim` - -**POST** `/markets/claim` - -Get Claim Quote *(Auth required)* - - ---- -##### `getUsersEvents` - -**GET** `/users/{address}/events` - -Get User Events *(Auth required)* - -**Parameters:** -- `address` (path, string) **required** -- `page` (query, integer) -- `limit` (query, integer) -- `market_id` (query, string) -- `market_slug` (query, string) -- `network_id` (query, integer) -- `since` (query, integer) -- `until` (query, integer) - ---- -##### `getUsersReferrals` - -**GET** `/users/{address}/referrals` - -Get User Referrals *(Auth required)* - -**Parameters:** -- `address` (path, string) **required** -- `page` (query, integer) -- `limit` (query, integer) -- `market_id` (query, string) -- `market_slug` (query, string) -- `network_id` (query, integer) -- `since` (query, integer) -- `until` (query, integer) -- `code` (query, string) - ---- -##### `getUsersPortfolio` - -**GET** `/users/{address}/portfolio` - -Get User Portfolio *(Auth required)* - -**Parameters:** -- `address` (path, string) **required** -- `page` (query, integer) -- `limit` (query, integer) -- `min_shares` (query, number) — Default 0.1 -- `market_slug` (query, string) -- `market_id` (query, string) -- `network_id` (query, integer) -- `token_address` (query, string) - ---- -##### `getUsersMarkets` +# 3. Place a limit order +order = exchange.create_order( + market_id=market.market_id, + outcome_id=outcome.outcome_id, + side='buy', + type='limit', + amount=10, + price=0.50 +) -**GET** `/users/{address}/markets` +print(f'Order placed: {order.id}') -Get User Markets Portfolio *(Auth required)* +# 4. Check order status +updated_order = exchange.fetch_order(order.id) +print(f'Status: {updated_order.status}') +print(f'Filled: {updated_order.filled}/{updated_order.amount}') -**Parameters:** -- `address` (path, string) **required** -- `page` (query, integer) -- `limit` (query, integer) -- `min_shares` (query, number) -- `network_id` (query, integer) -- `state` (query, string) -- `trading_model` (query, string) — Filter portfolio results by trading model (e.g. CLOB, AMM) -- `token_address` (query, string) -- `topics` (query, string) -- `keyword` (query, string) -- `market_ids` (query, string) — Comma-separated list of {networkId}:{marketId} pairs +# 5. Cancel if needed +if updated_order.status == 'open': + exchange.cancel_order(order.id) + print('Order cancelled') ---- +# 6. Check positions +positions = exchange.fetch_positions() +for pos in positions: + pnl_sign = '+' if pos.unrealized_pnl > 0 else '' + print(f'{pos.outcome_label}: {pnl_sign}${pos.unrealized_pnl:.2f}') +``` + +## Data Models + +### `ExchangeOptions` + +Constructor-level options for venue clients (Polymarket, Kalshi, Opinion, etc.). +Hosted mode is the default when pmxtApiKey is set; otherwise the SDK runs against +a local sidecar with venue credentials. + +```python +@dataclass +class ExchangeOptions: +pmxt_api_key: str # PMXT customer API key. When set, the SDK routes to api.pmxt.dev (catalog) and trade.pmxt.dev (trading). Get one at pmxt.dev/dashboard. +wallet_address: str # EVM wallet address for hosted reads/writes. Required for endpoints that operate on a wallet (balances, positions, trades, open orders). +signer: object # Optional pre-built signer for hosted writes. If absent and privateKey is set, the SDK auto-wraps privateKey into a signer. +private_key: str # Private key. In hosted mode, used to derive an EIP-712 signer for writes (wraps into EthAccountSigner/EthersSigner). In self-hosted mode, used as the venue credential directly. +base_url: str # Explicit base URL override. When unset, the SDK uses api.pmxt.dev when pmxtApiKey is set, or the local sidecar otherwise. +api_key: str # Venue-side API key (e.g. Polymarket CLOB key). Only relevant for self-hosted mode. +auto_start_server: bool # Auto-start the local sidecar when running self-hosted. Defaults to true when no pmxtApiKey is set, false when hosted. +``` + +--- +### `UnifiedMarket` + + + +```python +@dataclass +class UnifiedMarket: +market_id: str # The unique identifier for this market +event_id: str # Link to parent event +title: str # The market title (e.g., "Will BTC close above $100k on Dec 31?"). +description: str # Long-form market description or resolution criteria. +slug: str # URL-friendly slug for the market. +outcomes: List[MarketOutcome] # The possible outcomes for this market. +resolution_date: str # When the market is scheduled to resolve. Optional because some venues do not publish a cutoff for every market (e.g. Opinion categorical children) — emit `undefined` rather than coercing to epoch. +volume24h: float # Trading volume over the past 24 hours (USD). +volume: float # Total / Lifetime volume +liquidity: float # Current market liquidity (USD). +open_interest: float # Total value of outstanding contracts (USD). +url: str # Canonical URL to view the market on the venue. +image: str # Optional image URL for the market. +category: str # Optional category label. Venue-defined — common values include "Sports", "Politics", "Crypto", "Economics", "Science", "Culture". Polymarket uses finer-grained categories like "Bitcoin", "Soccer", "Economic Policy"; Kalshi uses broader ones like "Sports" or "Mentions". +tags: List[str] # Optional list of tags. More granular than category — e.g. ["Crypto", "Crypto Prices", "Bitcoin"] or ["Politics", "Elections", "Trump"]. Tags vary by venue: Polymarket markets carry several, Kalshi typically one. +tick_size: float # Minimum price increment (e.g., 0.01, 0.001) +status: str # Venue-native lifecycle status (e.g. 'active', 'closed', 'archived'). +contract_address: str # On-chain contract / condition identifier where applicable (Polymarket conditionId, etc.). +source_metadata: object # Raw venue-specific metadata not captured by first-class fields (e.g. Kalshi series_ticker / series_title from the parent event, Polymarket series). Passed through verbatim so downstream consumers can recover anything the unified shape omits. Each venue populates what it has. +source_exchange: str # The exchange/venue this market originates from (e.g. 'polymarket', 'kalshi'). Populated by the Router. +yes: Any # Convenience accessor for the YES outcome on a binary market. +no: Any # Convenience accessor for the NO outcome on a binary market. +up: Any # Convenience accessor for the UP outcome on a binary market. +down: Any # Convenience accessor for the DOWN outcome on a binary market. +``` + +--- +### `MarketOutcome` + + + +```python +@dataclass +class MarketOutcome: +outcome_id: str # Outcome ID for trading operations (CLOB Token ID for Polymarket, Market Ticker for Kalshi) +market_id: str # The market this outcome belongs to (set automatically when outcomes are built) +label: str # Human-readable outcome label (e.g., "Yes", "No", candidate name). +price: float # Probability between 0.0 and 1.0. +price_change24h: float # Change in price over the past 24 hours, as an absolute probability delta. +metadata: object # Exchange-specific metadata (e.g., clobTokenId for Polymarket) +``` + +--- +### `UnifiedEvent` + +A grouped collection of related markets (e.g., "Who will be Fed Chair?" contains multiple candidate markets). + +```python +@dataclass +class UnifiedEvent: +id: str # The unique identifier for this event. +title: str # The event title (e.g., "Who will be Fed Chair?"). +description: str # Long-form event description. +slug: str # URL-friendly slug for the event. +markets: List[UnifiedMarket] # Markets grouped under this event. +volume24h: float # Trading volume over the past 24 hours (USD). +volume: float # Total / Lifetime volume (sum across markets; undefined if no market provides it) +url: str # Canonical URL to view the event on the venue. +image: str # Optional image URL for the event. +category: str # Optional category label. Venue-defined — common values include "Sports", "Politics", "Crypto", "Economics", "Science", "Culture". Polymarket uses finer-grained categories like "Bitcoin", "Soccer", "Economic Policy"; Kalshi uses broader ones like "Sports" or "Mentions". +tags: List[str] # Optional list of tags. More granular than category — e.g. ["Sports", "FIFA World Cup", "2026 FIFA World Cup"] or ["Politics", "Geopolitics", "Middle East"]. Tags vary by venue: Polymarket markets carry several, Kalshi typically one. +source_metadata: object # Raw venue-specific metadata not captured by first-class fields (e.g. Kalshi series_ticker / series_title, Polymarket series). Passed through verbatim so downstream consumers can recover anything the unified shape omits. Each venue populates what it has. +source_exchange: str # The exchange/venue this event originates from (e.g. 'polymarket', 'kalshi'). Populated by the Router. +``` + +--- +### `UnifiedSeries` + +A recurring grouping of events on a venue — the fourth tier above Event -> Market -> Outcome. Examples: Kalshi `KXATPMATCH` (every ATP tennis match), Polymarket `wta` (every WTA match), Opinion's daily `collection`. Series only exists where the venue exposes a recurring-event concept; venues without one return an empty array from `fetchSeries`. + +```python +@dataclass +class UnifiedSeries: +id: str # Stable venue-native series identifier (e.g. "KXATPMATCH" on Kalshi, "atp" on Polymarket Gamma, numeric Gamma id). +ticker: str # Venue-native ticker, when distinct from `id`. +slug: str # Venue-native slug. +title: str # Human-readable series title (e.g. "ATP Match Winner", "WTA"). +description: str # Long-form series description. +recurrence: str # Recurrence cadence the venue reports ('daily', 'weekly', 'annual', ...). +events: List[UnifiedEvent] # Child events. Populated when fetched by id; the list form usually omits this to keep payloads small. +url: str # Canonical venue URL for the series. +image: str # Venue-hosted image. +source_exchange: str # The exchange this series originates from. Populated by the Router. +source_metadata: object # Raw venue-specific fields not promoted to first-class columns. +``` + +--- +### `PriceCandle` + + + +```python +@dataclass +class PriceCandle: +timestamp: float # Unix timestamp in milliseconds marking the start of the candle. +open: float # Opening price for the interval (probability between 0.0 and 1.0). +high: float # Highest price during the interval (probability between 0.0 and 1.0). +low: float # Lowest price during the interval (probability between 0.0 and 1.0). +close: float # Closing price for the interval (probability between 0.0 and 1.0). +volume: float # Trading volume during the interval. +``` + +--- +### `OrderBook` + + + +```python +@dataclass +class OrderBook: +bids: List[OrderLevel] # Order book bid levels, sorted by price descending. +asks: List[OrderLevel] # Order book ask levels, sorted by price ascending. +timestamp: float # Unix timestamp in milliseconds when the snapshot was taken. +datetime: str # ISO 8601 datetime string of the snapshot (CCXT-compatible). +is_neg_risk: bool # Whether the venue marks this snapshot as a negative-risk market. +last_trade_price: float # Last traded price from venues that include it with the book snapshot. +source_metadata: object # Venue-specific metadata preserved from the raw order book snapshot. +``` + +--- +### `OrderLevel` + + + +```python +@dataclass +class OrderLevel: +price: float # 0.0 to 1.0 (probability) +size: float # contracts/shares +order_count: float # +``` + +--- +### `Trade` + + + +```python +@dataclass +class Trade: +id: str # The unique identifier for this trade. +timestamp: float # Unix timestamp in milliseconds when the trade executed. +price: float # Probability between 0.0 and 1.0. +amount: float # Size of the trade in contracts/shares. +side: str # Trade side from the taker's perspective. +outcome_id: str # The outcome this trade is for (if known). +``` + +--- +### `UserTrade` + + + +```python +@dataclass +class UserTrade: +id: str # The unique identifier for this trade. +timestamp: float # Unix timestamp in milliseconds when the trade executed. +price: float # Probability between 0.0 and 1.0. +amount: float # Size of the trade in contracts/shares. +side: str # Trade side from the taker's perspective. +outcome_id: str # The outcome this trade is for (if known). +order_id: str # The order that produced this trade, if known. +market_id: str # The market this trade belongs to, when the venue exposes it (e.g. derivable from the fill's coin/asset). +fee: float # Trading fee paid by the user for this fill, when the venue exposes it. +tx_hash: str # Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. +chain: str # Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. +block_number: float # Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. +``` + +--- +### `Order` + + + +```python +@dataclass +class Order: +id: str # The exchange-assigned order identifier. +market_id: str # The market this order was placed on. +outcome_id: str # The outcome this order was placed on. +side: str # Order side: buy or sell. +type: str # Order type: market (execute immediately) or limit (resting at a price). +price: float # For limit orders +amount: float # Size in contracts/shares +status: str # Lifecycle status of the order. +filled: float # Amount filled (USDC cost for buys, shares for sells) +filled_shares: float # Amount filled in shares/contracts (if different from USDC-denominated `filled`). +remaining: float # Amount remaining +timestamp: float # Unix timestamp in milliseconds when the order was created. +fee: float # Fee paid for this order, if known. +fee_rate_bps: float # Fee rate in basis points applied to this order (e.g. 100 = 1%). +tx_hash: str # Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. +chain: str # Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. +block_number: float # Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. +``` + +--- +### `Position` + +A current position in a market. In hosted mode, `outcomeLabel`, `entryPrice`, `currentPrice` and `unrealizedPnL` may be null when the server cannot derive them (e.g. `with_mtm=false` or no fill history). Venue-direct callers continue to populate every field. + +```python +@dataclass +class Position: +market_id: str # The market this position is held in. +outcome_id: str # The outcome this position is held in. +outcome_label: str # Human-readable label for the outcome held. Optional in hosted mode. +size: float # Positive for long, negative for short +entry_price: float # Average entry price for the position (probability between 0.0 and 1.0). Optional in hosted mode when no fill history is available. +current_price: float # Current mark price for the position (probability between 0.0 and 1.0). Optional in hosted mode when mark-to-market data is unavailable. +current_value: float # Current market value of the position (size * currentPrice). Null when currentPrice is unavailable. +unrealized_pnl: float # Unrealized profit or loss at the current price (USD). Optional in hosted mode when mark-to-market data is unavailable. +realized_pnl: float # Realized profit or loss booked so far (USD). +tx_hash: str # Populated in hosted mode after on-chain settlement (from the last fill); null for local-mode and for non-on-chain venues. +chain: str # Populated in hosted mode after on-chain settlement (from the last fill); null for local-mode and for non-on-chain venues. +block_number: float # Populated in hosted mode after on-chain settlement (from the last fill); null for local-mode and for non-on-chain venues. +``` + +--- +### `Balance` + + + +```python +@dataclass +class Balance: +currency: str # e.g., 'USDC' +total: float # Total balance including funds locked in open orders. +available: float # Balance available to trade (excludes locked funds). +locked: float # In open orders +venue: str # Hosted-mode: which venue this balance belongs to in a multi-venue response. Null when the balance is venue-agnostic. +``` + +--- +### `ExecutionPriceResult` + + + +```python +@dataclass +class ExecutionPriceResult: +price: float # +filled_amount: float # +fully_filled: bool # +``` + +--- +### `PaginatedMarketsResult` + +Shape returned by fetchMarketsPaginated + +```python +@dataclass +class PaginatedMarketsResult: +data: List[UnifiedMarket] # The page of unified markets +total: float # Total number of markets in the snapshot +next_cursor: str # Cursor to pass to the next call, or undefined if this is the last page +``` + +--- +### `PaginatedEventsResult` + +Shape returned by fetchEventsPaginated + +```python +@dataclass +class PaginatedEventsResult: +data: List[UnifiedEvent] # The page of unified events +total: float # Total number of events in the snapshot +next_cursor: str # Cursor to pass to the next call, or undefined if this is the last page +``` + +--- +### `BuiltOrder` + + + +```python +@dataclass +class BuiltOrder: +exchange: str # The exchange name this order was built for. +params: Any # The original params used to build this order. +signed_order: object # For CLOB exchanges (Polymarket): the EIP-712 signed order ready to POST to the exchange's order endpoint. +tx: object # For on-chain AMM exchanges: the EVM transaction payload. Reserved for future exchanges; no current exchange populates this. +raw: Any # The raw, exchange-native payload. Always present. +expiry: float # Unix epoch (ms) when this built order expires server-side. Submitting after expiry returns BUILT_ORDER_EXPIRED. +``` + +--- +### `MarketFilterCriteria` + + + +```python +@dataclass +class MarketFilterCriteria: +text: str # +search_in: List[str] # Default: ['title'] +volume24h: object # +volume: object # Filter by total (lifetime) volume range +liquidity: object # Filter by current liquidity range +open_interest: object # Filter by open interest range +resolution_date: object # +category: str # Filter by category. Common values: "Sports", "Politics", "Crypto", "Bitcoin", "Soccer", "Economic Policy" (Polymarket) or "Sports", "Mentions" (Kalshi). +tags: List[str] # Match markets that have ANY of these tags. Examples: ["Crypto", "Crypto Prices"], ["Politics", "Elections"], ["Sports", "FIFA World Cup"]. +price: object # +price_change24h: object # +``` + +--- +### `EventFilterCriteria` + + + +```python +@dataclass +class EventFilterCriteria: +text: str # +search_in: List[str] # Default: ['title'] +category: str # Filter by category. Common values: "Sports", "Politics", "Crypto", "Bitcoin", "Soccer", "Economic Policy" (Polymarket) or "Sports", "Mentions" (Kalshi). +tags: List[str] # Match events that have ANY of these tags. Examples: ["Crypto"], ["Politics", "Geopolitics", "Middle East"], ["Sports", "FIFA World Cup"]. +market_count: object # +total_volume: object # Sum of market volumes +``` + +--- +### `MatchResult` + + + +```python +@dataclass +class MatchResult: +market: UnifiedMarket # +source_market: Any # The source market this was matched against. Present in browse mode (no marketId), absent in lookup mode. +relation: str # +confidence: float # +reasoning: str # +best_bid: float # +best_ask: float # +``` + +--- +### `EventMatchResult` + + + +```python +@dataclass +class EventMatchResult: +event: UnifiedEvent # +market_matches: List[MatchResult] # +``` + +--- +### `PriceComparison` + + + +```python +@dataclass +class PriceComparison: +market: UnifiedMarket # +relation: str # +confidence: float # +reasoning: str # +best_bid: float # +best_ask: float # +venue: str # +``` + +--- +### `ArbitrageOpportunity` + + + +```python +@dataclass +class ArbitrageOpportunity: +market_a: UnifiedMarket # +market_b: UnifiedMarket # +spread: float # +buy_venue: str # +sell_venue: str # +buy_price: float # +sell_price: float # +relation: str # The set-theoretic relation between the two markets (e.g. identity, subset). +confidence: float # Match confidence score (0.0 to 1.0). +``` + +--- +### `MatchedMarketPair` + + + +```python +@dataclass +class MatchedMarketPair: +market_a: UnifiedMarket # +market_b: UnifiedMarket # +price_difference: float # +venue_a: str # +venue_b: str # +price_a: float # +price_b: float # +relation: str # The set-theoretic relation between the two markets (e.g. identity, subset). +confidence: float # Match confidence score (0.0 to 1.0). +reasoning: str # Why the two markets were matched. +``` + +--- +### `ExchangeCredentials` + +Optional authentication credentials for exchange operations. + +```python +@dataclass +class ExchangeCredentials: +api_key: str # +api_secret: str # Standard API secret for HMAC-authenticated exchanges +passphrase: str # Standard API passphrase for HMAC-authenticated exchanges +api_token: str # Metaculus: `Authorization: Token ` for higher rate limits +private_key: str # Required for Polymarket L1 auth +signature_type: Any # 0 = EOA, 1 = Poly Proxy, 2 = Gnosis Safe (Can also use 'eoa', 'polyproxy', 'gnosis_safe') +funder_address: str # The address funding the trades (defaults to signer address) +wallet_address: str # +base_url: str # +``` + +--- +### `FeedTicker` + +CCXT-compatible ticker with last trade price and metadata. + +```python +@dataclass +class FeedTicker: +symbol: str # Trading pair symbol (e.g. BTC/USD) +info: Any # Raw provider-specific data +timestamp: int # Unix timestamp in milliseconds +datetime: str # +high: float # +low: float # +bid: float # +bid_volume: float # +ask: float # +ask_volume: float # +vwap: float # +open: float # +close: float # +last: float # Last trade price +previous_close: float # +change: float # +percentage: float # +average: float # +quote_volume: float # +base_volume: float # +index_price: float # +mark_price: float # +``` + +--- +### `FeedMarket` + +CCXT-compatible market descriptor for a data feed. + +```python +@dataclass +class FeedMarket: +id: str # +symbol: str # +base: str # +quote: str # +active: bool # +type: str # +info: Any # Provider-specific metadata +``` + +--- +### `FeedOracleRound` + +Chainlink oracle price round. + +```python +@dataclass +class FeedOracleRound: +feed: str # Price feed pair (e.g. BTC/USD) +round_id: str # +answer: float # Oracle price +started_at: int # +updated_at: int # +answered_inround: str # +decimals: int # +description: str # +``` + +--- + +## Filter Parameters + +### `BaseRequest` + +Base request structure with optional credentials + +```python +@dataclass +class BaseRequest: +credentials: ExchangeCredentials # +``` + +--- +### `MarketFilterParams` + + + +```python +@dataclass +class MarketFilterParams: +limit: float # Maximum number of results to return +offset: float # Pagination offset — number of results to skip +sort: str # Sort order for results +status: str # Filter by market status (default: 'active', 'inactive' and 'closed' are interchangeable) +search_in: str # Where to search (default: 'title') +query: str # For keyword search +slug: str # For slug/ticker lookup +market_id: str # Direct lookup by market ID +outcome_id: str # Reverse lookup -- find market containing this outcome +event_id: str # Find markets belonging to an event +page: float # For pagination (used by Limitless) +similarity_threshold: float # For semantic search (used by Limitless) +source_exchange: str # Filter by source venue (e.g. 'polymarket', 'kalshi', 'myriad'). `exchange` is an alias. +exchange: str # Alias for `sourceExchange`. +``` + +--- +### `EventFetchParams` + + + +```python +@dataclass +class EventFetchParams: +query: str # For keyword search +limit: float # Maximum number of results to return +cursor: str # Opaque venue pagination cursor, where supported. +offset: float # Pagination offset — number of results to skip +sort: str # Sort order for results +status: str # Filter by event status (default: 'active', 'inactive' and 'closed' are interchangeable) +search_in: str # Where to search (default: 'title') +event_id: str # Direct lookup by event ID +slug: str # Lookup by event slug +series: str # Filter events by their parent series. Accepts the venue-native series id / ticker / slug (e.g. Kalshi `"KXATPMATCH"`, Polymarket `"wta"`). Passed through to the vendor where supported, otherwise applied to `sourceMetadata` after fetch. +filter: Any # Optional client-side filter applied after fetching +category: str # Filter by category. Each event belongs to a venue-assigned category such as "Sports", "Politics", "Crypto", "Bitcoin", "Soccer", "Economic Policy" (Polymarket) or "Sports", "Mentions" (Kalshi). +tags: List[str] # Filter by tags. Returns events matching ANY of the provided tags. Tags are more specific than categories -- for example a "Politics" event might carry tags ["Politics", "Geopolitics", "Middle East", "Iran"]. Common tags include "Crypto", "Elections", "Fed Rates", "FIFA World Cup", "Trump". +source_exchange: str # Filter by source venue (e.g. 'polymarket', 'kalshi', 'myriad'). `exchange` is an alias. +exchange: str # Alias for `sourceExchange`. +``` + +--- +### `HistoryFilterParams` + +Deprecated - use OHLCVParams or TradesParams instead. Resolution is optional for backward compatibility. + +```python +@dataclass +class HistoryFilterParams: +resolution: str # Optional for backward compatibility +start: str # Start of the time range +end: str # End of the time range +limit: float # Maximum number of results to return +``` + +--- +### `OHLCVParams` + + + +```python +@dataclass +class OHLCVParams: +resolution: str # Required for candle aggregation +start: str # Start of the time range +end: str # End of the time range +limit: float # Maximum number of results to return +``` + +--- +### `FetchOrderBookParams` + + + +```python +@dataclass +class FetchOrderBookParams: +side: str # Outcome side: 'yes' or 'no'. Required for exchanges like Limitless where the API returns a single orderbook per market. +outcome: str # Outcome alias: 'yes' or 'no', or an outcome token ID. When set, the first argument is treated as a market ID and this value selects which outcome's order book to fetch. Accepts the literal strings 'yes'/'no' (resolved via a market lookup) or a raw outcome token ID. +since: float # Unix timestamp (ms) — fetch a historical snapshot at or before this time, or the start of a range when combined with `until` (hosted API only). +until: float # Unix timestamp (ms) — end of a historical range. When combined with `since`, returns an array of reconstructed L2 OrderBook snapshots between `since` and `until` (hosted API only). +``` + +--- +### `TradesParams` + + + +```python +@dataclass +class TradesParams: +start: str # Start of the time range +end: str # End of the time range +limit: float # Maximum number of results to return (max {@link MAX_TRADES_LIMIT}) +``` + +--- +### `CreateOrderParams` + + + +```python +@dataclass +class CreateOrderParams: +market_id: str # The market to trade on. +outcome_id: str # The outcome to trade. +side: str # Order side: buy or sell. +type: str # Order type: market (execute immediately) or limit (resting at a price). +amount: float # Size of the order in contracts/shares. +price: float # Required for limit orders +denom: str # Hosted mode: amount unit. +slippage_pct: float # Hosted mode: maximum market-order slippage percentage. +fee: float # Optional fee rate (e.g., 1000 for 0.1%) +tick_size: float # Optional override for Limitless/Polymarket +neg_risk: bool # Optional override to skip neg-risk lookup (Polymarket) +on_behalf_of: float # Limitless delegated signing: profile ID to trade on behalf of +``` + +--- +### `MyTradesParams` + + + +```python +@dataclass +class MyTradesParams: +outcome_id: str # filter to specific outcome/ticker +market_id: str # filter to specific market +since: str # Only return records after this date +until: str # Only return records before this date +limit: float # Maximum number of results to return +cursor: str # for Kalshi cursor pagination +``` + +--- +### `OrderHistoryParams` + + + +```python +@dataclass +class OrderHistoryParams: +market_id: str # required for Limitless (slug) +since: str # Only return records after this date +until: str # Only return records before this date +limit: float # Maximum number of results to return +cursor: str # Opaque pagination cursor from a previous response +``` + +--- +### `FetchMarketMatchesParams` + + + +```python +@dataclass +class FetchMarketMatchesParams: +query: str # Keyword search across matched market titles. +category: str # Filter matches by category. +market: Any # Pass a UnifiedMarket directly instead of marketId/slug/url. +market_id: str # Lookup a specific market by ID. Omit for browse mode. +slug: str # +url: str # +relation: str # +min_confidence: float # +limit: float # +include_prices: bool # +min_difference: float # Minimum price difference between venues. Browse mode only. +sort: str # Sort order. Browse mode only. +``` + +--- +### `FetchEventMatchesParams` + + + +```python +@dataclass +class FetchEventMatchesParams: +query: str # Keyword search across matched event titles. +category: str # Filter matches by category. +event: Any # Pass a UnifiedEvent directly instead of eventId/slug. +event_id: str # Lookup a specific event by ID. Omit for browse mode. +slug: str # +relation: str # +min_confidence: float # +limit: float # +include_prices: bool # +``` + +--- +### `FetchArbitrageParams` + + + +```python +@dataclass +class FetchArbitrageParams: +min_spread: float # +category: str # +limit: float # +relations: List[str] # Comma-separated relation types to include (default: 'identity'). +``` + +--- +### `FetchMatchedMarketsParams` + + + +```python +@dataclass +class FetchMatchedMarketsParams: +min_difference: float # +category: str # +limit: float # +relations: List[str] # Comma-separated relation types to include (default: 'identity'). +``` + +--- + +## Low-Level API Reference + +Advanced: call exchange-specific REST endpoints directly via `exchange.call_api(name, params)`. + +```python +# Example +result = exchange.call_api('operationName', {'param': 'value'}) +``` + +### Polymarket + +| `call_api()` name | Method | Path | Summary | Auth | +|-----------------|--------|------|---------|------| +| `getGammaStatus` | `GET` | `/status` | Gamma API Health check | Public | +| `listTeams` | `GET` | `/teams` | List teams | Public | +| `getSportsMetadata` | `GET` | `/sports` | Get sports metadata information | Public | +| `getSportsMarketTypes` | `GET` | `/sports/market-types` | Get valid sports market types | Public | +| `listTags` | `GET` | `/tags` | List tags | Public | +| `getTag` | `GET` | `/tags/{id}` | Get tag by id | Public | +| `getRelatedTagsById` | `GET` | `/tags/{id}/related-tags` | Get related tags (relationships) by tag id | Public | +| `getRelatedTagsBySlug` | `GET` | `/tags/slug/{slug}/related-tags` | Get related tags (relationships) by tag slug | Public | +| `getTagsRelatedToATagById` | `GET` | `/tags/{id}/related-tags/tags` | Get tags related to a tag id | Public | +| `getTagsRelatedToATagBySlug` | `GET` | `/tags/slug/{slug}/related-tags/tags` | Get tags related to a tag slug | Public | +| `listEvents` | `GET` | `/events` | List events | Public | +| `getEvent` | `GET` | `/events/{id}` | Get event by id | Public | +| `getEventTags` | `GET` | `/events/{id}/tags` | Get event tags | Public | +| `getEventBySlug` | `GET` | `/events/slug/{slug}` | Get event by slug | Public | +| `listMarkets` | `GET` | `/markets` | List markets | Public | +| `getMarket` | `GET` | `/markets/{id}` | Get market by id | Public | +| `getMarketTags` | `GET` | `/markets/{id}/tags` | Get market tags by id | Public | +| `getMarketBySlug` | `GET` | `/markets/slug/{slug}` | Get market by slug | Public | +| `listSeries` | `GET` | `/series` | List series | Public | +| `getSeries` | `GET` | `/series/{id}` | Get series by id | Public | +| `listComments` | `GET` | `/comments` | List comments | Public | +| `getCommentsById` | `GET` | `/comments/{id}` | Get comments by comment id | Public | +| `getPublicProfile` | `GET` | `/public-profile` | Get public profile by wallet address | Public | +| `publicSearch` | `GET` | `/public-search` | Search markets, events, and profiles | Public | +| `getBook` | `GET` | `/book` | Get order book summary | Public | +| `postBooks` | `POST` | `/books` | Get multiple order books summaries | Public | +| `getPrice` | `GET` | `/price` | Get market price | Public | +| `getPrices` | `GET` | `/prices` | Get multiple market prices | Public | +| `postPrices` | `POST` | `/prices` | Get multiple market prices by request | Public | +| `getMidpoint` | `GET` | `/midpoint` | Get midpoint price | Public | +| `postSpreads` | `POST` | `/spreads` | Get bid-ask spreads | Public | +| `getPricesHistory` | `GET` | `/prices-history` | Get price history for a traded token | Public | +| `getMarketsByToken` | `GET` | `/markets-by-token/{token_id}` | Get market by token | Public | +| `postAuthApiKey` | `POST` | `/auth/api-key` | Create API Key | Required | +| `getAuthDeriveApiKey` | `GET` | `/auth/derive-api-key` | Derive API Key | Required | +| `postOrder` | `POST` | `/order` | Place Single Order | Required | +| `deleteOrder` | `DELETE` | `/order` | Cancel Single Order | Required | +| `postOrders` | `POST` | `/orders` | Place Multiple Orders (Batch) | Required | +| `deleteOrders` | `DELETE` | `/orders` | Cancel Multiple Orders | Required | +| `deleteCancelAll` | `DELETE` | `/cancel-all` | Cancel All Orders | Required | +| `deleteCancelMarketOrders` | `DELETE` | `/cancel-market-orders` | Cancel Market Orders | Required | +| `postV1Heartbeats` | `POST` | `/v1/heartbeats` | Refresh authenticated session heartbeat | Required | +| `getDataOrder` | `GET` | `/data/order/{id}` | Get Order | Required | +| `getDataOrders` | `GET` | `/data/orders` | Get Active Orders | Required | +| `getDataTrades` | `GET` | `/data/trades` | Get Trades | Required | +| `getOrderScoring` | `GET` | `/order-scoring` | Check Order Reward Scoring | Required | +| `postOrdersScoring` | `POST` | `/orders-scoring` | Check Multiple Orders Scoring | Required | +| `updateBalanceAllowance` | `GET` | `/balance-allowance/update` | Update balance and allowance cache | Required | +| `getGeoblock` | `GET` | `/geoblock` | Check Geoblock Status | Public | +| `getDataApiHealth` | `GET` | `/` | Data API Health check | Public | +| `getPositions` | `GET` | `/positions` | Get current positions for a user | Public | +| `getV1AccountingSnapshot` | `GET` | `/v1/accounting/snapshot` | Download an accounting snapshot (ZIP of CSVs) | Public | +| `getTraded` | `GET` | `/traded` | Get total markets a user has traded | Public | +| `getOi` | `GET` | `/oi` | Get open interest | Public | +| `getLiveVolume` | `GET` | `/live-volume` | Get live volume for an event | Public | +| `getTrades` | `GET` | `/trades` | Get trades for a user or markets | Public | +| `getActivity` | `GET` | `/activity` | Get user activity | Public | +| `getHolders` | `GET` | `/holders` | Get top holders for markets | Public | +| `getValue` | `GET` | `/value` | Get total value of a user's positions | Public | +| `getClosedPositions` | `GET` | `/closed-positions` | Get closed positions for a user | Public | +| `getV1MarketPositions` | `GET` | `/v1/market-positions` | Get positions for a market | Public | +| `getV1Leaderboard` | `GET` | `/v1/leaderboard` | Get trader leaderboard rankings | Public | +| `getV1BuildersLeaderboard` | `GET` | `/v1/builders/leaderboard` | Get aggregated builder leaderboard | Public | + +#### Endpoint Details + +##### `getGammaStatus` + +**GET** `/status` + +Gamma API Health check + + +--- +##### `listTeams` + +**GET** `/teams` + +List teams + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `league` (query, array) +- `name` (query, array) +- `abbreviation` (query, array) + +--- +##### `getSportsMetadata` + +**GET** `/sports` + +Get sports metadata information + + +--- +##### `getSportsMarketTypes` + +**GET** `/sports/market-types` + +Get valid sports market types + + +--- +##### `listTags` + +**GET** `/tags` + +List tags + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `include_template` (query, boolean) +- `is_carousel` (query, boolean) + +--- +##### `getTag` + +**GET** `/tags/{id}` + +Get tag by id + +**Parameters:** +- `` (, string) +- `include_template` (query, boolean) + +--- +##### `getRelatedTagsById` + +**GET** `/tags/{id}/related-tags` + +Get related tags (relationships) by tag id + +**Parameters:** +- `` (, string) +- `omit_empty` (query, boolean) +- `status` (query, string) — enum: `active,closed,all` + +--- +##### `getRelatedTagsBySlug` + +**GET** `/tags/slug/{slug}/related-tags` + +Get related tags (relationships) by tag slug + +**Parameters:** +- `` (, string) +- `omit_empty` (query, boolean) +- `status` (query, string) — enum: `active,closed,all` + +--- +##### `getTagsRelatedToATagById` + +**GET** `/tags/{id}/related-tags/tags` + +Get tags related to a tag id + +**Parameters:** +- `` (, string) +- `omit_empty` (query, boolean) +- `status` (query, string) — enum: `active,closed,all` + +--- +##### `getTagsRelatedToATagBySlug` + +**GET** `/tags/slug/{slug}/related-tags/tags` + +Get tags related to a tag slug + +**Parameters:** +- `` (, string) +- `omit_empty` (query, boolean) +- `status` (query, string) — enum: `active,closed,all` + +--- +##### `listEvents` + +**GET** `/events` + +List events + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `id` (query, array) +- `tag_id` (query, integer) +- `exclude_tag_id` (query, array) +- `slug` (query, array) +- `tag_slug` (query, string) +- `related_tags` (query, boolean) +- `active` (query, boolean) +- `archived` (query, boolean) +- `featured` (query, boolean) +- `cyom` (query, boolean) +- `include_chat` (query, boolean) +- `include_template` (query, boolean) +- `recurrence` (query, string) +- `closed` (query, boolean) +- `liquidity_min` (query, number) +- `liquidity_max` (query, number) +- `volume_min` (query, number) +- `volume_max` (query, number) +- `start_date_min` (query, string) +- `start_date_max` (query, string) +- `end_date_min` (query, string) +- `end_date_max` (query, string) + +--- +##### `getEvent` + +**GET** `/events/{id}` + +Get event by id + +**Parameters:** +- `` (, string) +- `include_chat` (query, boolean) +- `include_template` (query, boolean) + +--- +##### `getEventTags` + +**GET** `/events/{id}/tags` + +Get event tags + +**Parameters:** +- `` (, string) + +--- +##### `getEventBySlug` + +**GET** `/events/slug/{slug}` + +Get event by slug + +**Parameters:** +- `` (, string) +- `include_chat` (query, boolean) +- `include_template` (query, boolean) + +--- +##### `listMarkets` + +**GET** `/markets` + +List markets + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `id` (query, array) +- `slug` (query, array) +- `clob_token_ids` (query, array) +- `condition_ids` (query, array) +- `market_maker_address` (query, array) +- `liquidity_num_min` (query, number) +- `liquidity_num_max` (query, number) +- `volume_num_min` (query, number) +- `volume_num_max` (query, number) +- `start_date_min` (query, string) +- `start_date_max` (query, string) +- `end_date_min` (query, string) +- `end_date_max` (query, string) +- `tag_id` (query, integer) +- `related_tags` (query, boolean) +- `cyom` (query, boolean) +- `uma_resolution_status` (query, string) +- `game_id` (query, string) +- `sports_market_types` (query, array) +- `rewards_min_size` (query, number) +- `question_ids` (query, array) +- `include_tag` (query, boolean) +- `closed` (query, boolean) + +--- +##### `getMarket` + +**GET** `/markets/{id}` + +Get market by id + +**Parameters:** +- `` (, string) +- `include_tag` (query, boolean) + +--- +##### `getMarketTags` + +**GET** `/markets/{id}/tags` + +Get market tags by id + +**Parameters:** +- `` (, string) + +--- +##### `getMarketBySlug` + +**GET** `/markets/slug/{slug}` + +Get market by slug + +**Parameters:** +- `` (, string) +- `include_tag` (query, boolean) + +--- +##### `listSeries` + +**GET** `/series` + +List series + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `slug` (query, array) +- `categories_ids` (query, array) +- `categories_labels` (query, array) +- `closed` (query, boolean) +- `include_chat` (query, boolean) +- `recurrence` (query, string) + +--- +##### `getSeries` + +**GET** `/series/{id}` + +Get series by id + +**Parameters:** +- `` (, string) +- `include_chat` (query, boolean) + +--- +##### `listComments` + +**GET** `/comments` + +List comments + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `parent_entity_type` (query, string) — enum: `Event,Series,market` +- `parent_entity_id` (query, integer) +- `get_positions` (query, boolean) +- `holders_only` (query, boolean) + +--- +##### `getCommentsById` + +**GET** `/comments/{id}` + +Get comments by comment id + +**Parameters:** +- `id` (path, integer) **required** +- `get_positions` (query, boolean) + +--- +##### `getPublicProfile` + +**GET** `/public-profile` + +Get public profile by wallet address + +**Parameters:** +- `address` (query, string) **required** — The wallet address (proxy wallet or user address) + +--- +##### `publicSearch` + +**GET** `/public-search` + +Search markets, events, and profiles + +**Parameters:** +- `q` (query, string) **required** +- `cache` (query, boolean) +- `events_status` (query, string) +- `limit_per_type` (query, integer) +- `page` (query, integer) +- `events_tag` (query, array) +- `keep_closed_markets` (query, integer) +- `sort` (query, string) +- `ascending` (query, boolean) +- `search_tags` (query, boolean) +- `search_profiles` (query, boolean) +- `recurrence` (query, string) +- `exclude_tag_id` (query, array) +- `optimized` (query, boolean) + +--- +##### `getBook` + +**GET** `/book` + +Get order book summary + +**Parameters:** +- `token_id` (query, string) **required** + +--- +##### `postBooks` + +**POST** `/books` + +Get multiple order books summaries + + +--- +##### `getPrice` + +**GET** `/price` + +Get market price + +**Parameters:** +- `token_id` (query, string) **required** +- `side` (query, string) **required** — enum: `BUY,SELL` + +--- +##### `getPrices` + +**GET** `/prices` + +Get multiple market prices + + +--- +##### `postPrices` + +**POST** `/prices` + +Get multiple market prices by request + + +--- +##### `getMidpoint` + +**GET** `/midpoint` + +Get midpoint price + +**Parameters:** +- `token_id` (query, string) **required** + +--- +##### `postSpreads` + +**POST** `/spreads` + +Get bid-ask spreads + + +--- +##### `getPricesHistory` + +**GET** `/prices-history` + +Get price history for a traded token + +**Parameters:** +- `market` (query, string) **required** +- `startTs` (query, number) +- `endTs` (query, number) +- `interval` (query, string) — enum: `1m,1w,1d,6h,1h,max` +- `fidelity` (query, number) + +--- +##### `getMarketsByToken` + +**GET** `/markets-by-token/{token_id}` + +Get market by token + +**Parameters:** +- `token_id` (path, string) **required** + +--- +##### `postAuthApiKey` + +**POST** `/auth/api-key` + +Create API Key *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `getAuthDeriveApiKey` + +**GET** `/auth/derive-api-key` + +Derive API Key *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `postOrder` + +**POST** `/order` + +Place Single Order *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `deleteOrder` + +**DELETE** `/order` + +Cancel Single Order *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `postOrders` + +**POST** `/orders` + +Place Multiple Orders (Batch) *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `deleteOrders` + +**DELETE** `/orders` + +Cancel Multiple Orders *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `deleteCancelAll` + +**DELETE** `/cancel-all` + +Cancel All Orders *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `deleteCancelMarketOrders` + +**DELETE** `/cancel-market-orders` + +Cancel Market Orders *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `postV1Heartbeats` + +**POST** `/v1/heartbeats` + +Refresh authenticated session heartbeat *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `getDataOrder` + +**GET** `/data/order/{id}` + +Get Order *(Auth required)* + +**Parameters:** +- `` (, string) +- `id` (path, string) **required** + +--- +##### `getDataOrders` + +**GET** `/data/orders` + +Get Active Orders *(Auth required)* + +**Parameters:** +- `` (, string) +- `id` (query, string) +- `market` (query, string) +- `asset_id` (query, string) +- `next_cursor` (query, string) — Cursor for keyset pagination + +--- +##### `getDataTrades` + +**GET** `/data/trades` + +Get Trades *(Auth required)* + +**Parameters:** +- `` (, string) +- `id` (query, string) +- `market` (query, string) +- `maker` (query, string) +- `taker` (query, string) +- `before` (query, string) +- `after` (query, string) + +--- +##### `getOrderScoring` + +**GET** `/order-scoring` + +Check Order Reward Scoring *(Auth required)* + +**Parameters:** +- `` (, string) +- `orderId` (query, string) **required** + +--- +##### `postOrdersScoring` + +**POST** `/orders-scoring` + +Check Multiple Orders Scoring *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `updateBalanceAllowance` + +**GET** `/balance-allowance/update` + +Update balance and allowance cache *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `getGeoblock` + +**GET** `/geoblock` + +Check Geoblock Status + + +--- +##### `getDataApiHealth` + +**GET** `/` + +Data API Health check + + +--- +##### `getPositions` + +**GET** `/positions` + +Get current positions for a user + +**Parameters:** +- `user` (query, string) **required** — User address (required) +- `market` (query, array) — Comma-separated list of condition IDs. Mutually exclusive with eventId. +- `eventId` (query, array) — Comma-separated list of event IDs. Mutually exclusive with market. +- `sizeThreshold` (query, number) +- `redeemable` (query, boolean) +- `mergeable` (query, boolean) +- `limit` (query, integer) +- `offset` (query, integer) +- `sortBy` (query, string) — enum: `CURRENT,INITIAL,TOKENS,CASHPNL,PERCENTPNL,TITLE,RESOLVING,PRICE,AVGPRICE` +- `sortDirection` (query, string) — enum: `ASC,DESC` +- `title` (query, string) + +--- +##### `getV1AccountingSnapshot` + +**GET** `/v1/accounting/snapshot` + +Download an accounting snapshot (ZIP of CSVs) + +**Parameters:** +- `user` (query, string) **required** — User address (0x-prefixed) + +--- +##### `getTraded` + +**GET** `/traded` + +Get total markets a user has traded + +**Parameters:** +- `user` (query, string) **required** + +--- +##### `getOi` + +**GET** `/oi` + +Get open interest + +**Parameters:** +- `market` (query, array) + +--- +##### `getLiveVolume` + +**GET** `/live-volume` + +Get live volume for an event + +**Parameters:** +- `id` (query, integer) **required** + +--- +##### `getTrades` + +**GET** `/trades` + +Get trades for a user or markets + +**Parameters:** +- `limit` (query, integer) +- `offset` (query, integer) +- `takerOnly` (query, boolean) +- `filterType` (query, string) — Must be provided together with filterAmount. — enum: `CASH,TOKENS` +- `filterAmount` (query, number) — Must be provided together with filterType. +- `market` (query, array) — Comma-separated list of condition IDs. Mutually exclusive with eventId. +- `eventId` (query, array) — Comma-separated list of event IDs. Mutually exclusive with market. +- `user` (query, string) +- `side` (query, string) — enum: `BUY,SELL` + +--- +##### `getActivity` + +**GET** `/activity` + +Get user activity + +**Parameters:** +- `limit` (query, integer) +- `offset` (query, integer) +- `user` (query, string) **required** +- `market` (query, array) — Comma-separated list of condition IDs. Mutually exclusive with eventId. +- `eventId` (query, array) — Comma-separated list of event IDs. Mutually exclusive with market. +- `type` (query, array) +- `start` (query, integer) +- `end` (query, integer) +- `sortBy` (query, string) — enum: `TIMESTAMP,TOKENS,CASH` +- `sortDirection` (query, string) — enum: `ASC,DESC` +- `side` (query, string) — enum: `BUY,SELL` + +--- +##### `getHolders` + +**GET** `/holders` + +Get top holders for markets + +**Parameters:** +- `limit` (query, integer) — Maximum number of holders to return per token. Capped at 20. +- `market` (query, array) **required** — Comma-separated list of condition IDs. +- `minBalance` (query, integer) + +--- +##### `getValue` + +**GET** `/value` + +Get total value of a user's positions + +**Parameters:** +- `user` (query, string) **required** +- `market` (query, array) + +--- +##### `getClosedPositions` + +**GET** `/closed-positions` + +Get closed positions for a user + +**Parameters:** +- `user` (query, string) **required** — The address of the user in question +- `market` (query, array) — The conditionId of the market in question. Supports multiple csv separated values. Cannot be used with the eventId param. +- `title` (query, string) — Filter by market title +- `eventId` (query, array) — The event id of the event in question. Supports multiple csv separated values. Returns positions for all markets for those event ids. Cannot be used with the market param. +- `limit` (query, integer) — The max number of positions to return +- `offset` (query, integer) — The starting index for pagination +- `sortBy` (query, string) — The sort criteria — enum: `REALIZEDPNL,TITLE,PRICE,AVGPRICE,TIMESTAMP` +- `sortDirection` (query, string) — The sort direction — enum: `ASC,DESC` + +--- +##### `getV1MarketPositions` + +**GET** `/v1/market-positions` + +Get positions for a market + +**Parameters:** +- `market` (query, string) **required** — The condition ID of the market to query positions for +- `user` (query, string) — Filter to a single user by proxy wallet address +- `status` (query, string) — Filter positions by status. +- `OPEN` — Only positions with size > 0.01 +- `CLOSED` — Only positions with size <= 0.01 +- `ALL` — All positions regardless of size + — enum: `OPEN,CLOSED,ALL` +- `sortBy` (query, string) — Sort positions by: +- `TOKENS` — Position size (number of tokens) +- `CASH_PNL` — Unrealized cash PnL +- `REALIZED_PNL` — Realized PnL +- `TOTAL_PNL` — Total PnL (cash_pnl + realized_pnl) + — enum: `TOKENS,CASH_PNL,REALIZED_PNL,TOTAL_PNL` +- `sortDirection` (query, string) — enum: `ASC,DESC` +- `limit` (query, integer) — Max number of positions to return per outcome token +- `offset` (query, integer) — Pagination offset per outcome token + +--- +##### `getV1Leaderboard` + +**GET** `/v1/leaderboard` + +Get trader leaderboard rankings + +**Parameters:** +- `category` (query, string) — Market category for the leaderboard — enum: `OVERALL,POLITICS,SPORTS,CRYPTO,CULTURE,MENTIONS,WEATHER,ECONOMICS,TECH,FINANCE` +- `timePeriod` (query, string) — Time period for leaderboard results — enum: `DAY,WEEK,MONTH,ALL` +- `orderBy` (query, string) — Leaderboard ordering criteria — enum: `PNL,VOL` +- `limit` (query, integer) — Max number of leaderboard traders to return +- `offset` (query, integer) — Starting index for pagination +- `user` (query, string) — Limit leaderboard to a single user by address +- `userName` (query, string) — Limit leaderboard to a single username + +--- +##### `getV1BuildersLeaderboard` + +**GET** `/v1/builders/leaderboard` + +Get aggregated builder leaderboard + +**Parameters:** +- `timePeriod` (query, string) — The time period to aggregate results over. + — enum: `DAY,WEEK,MONTH,ALL` +- `limit` (query, string) + +--- +### Kalshi + +| `call_api()` name | Method | Path | Summary | Auth | +|-----------------|--------|------|---------|------| +| `GetHistoricalCutoff` | `GET` | `/historical/cutoff` | Get Historical Cutoff Timestamps | Public | +| `GetMarketCandlesticksHistorical` | `GET` | `/historical/markets/{ticker}/candlesticks` | Get Historical Market Candlesticks | Public | +| `GetFillsHistorical` | `GET` | `/historical/fills` | Get Historical Fills | Required | +| `GetHistoricalOrders` | `GET` | `/historical/orders` | Get Historical Orders | Required | +| `GetHistoricalMarkets` | `GET` | `/historical/markets` | Get Historical Markets | Public | +| `GetHistoricalMarket` | `GET` | `/historical/markets/{ticker}` | Get Historical Market | Public | +| `GetExchangeStatus` | `GET` | `/exchange/status` | Get Exchange Status | Public | +| `GetExchangeAnnouncements` | `GET` | `/exchange/announcements` | Get Exchange Announcements | Public | +| `GetSeriesFeeChanges` | `GET` | `/series/fee_changes` | Get Series Fee Changes | Public | +| `GetExchangeSchedule` | `GET` | `/exchange/schedule` | Get Exchange Schedule | Public | +| `GetUserDataTimestamp` | `GET` | `/exchange/user_data_timestamp` | Get User Data Timestamp | Public | +| `GetOrders` | `GET` | `/portfolio/orders` | Get Orders | Required | +| `CreateOrder` | `POST` | `/portfolio/orders` | Create Order | Required | +| `GetOrder` | `GET` | `/portfolio/orders/{order_id}` | Get Order | Required | +| `CancelOrder` | `DELETE` | `/portfolio/orders/{order_id}` | Cancel Order | Required | +| `BatchCreateOrders` | `POST` | `/portfolio/orders/batched` | Batch Create Orders | Required | +| `BatchCancelOrders` | `DELETE` | `/portfolio/orders/batched` | Batch Cancel Orders | Required | +| `AmendOrder` | `POST` | `/portfolio/orders/{order_id}/amend` | Amend Order | Required | +| `DecreaseOrder` | `POST` | `/portfolio/orders/{order_id}/decrease` | Decrease Order | Required | +| `GetOrderQueuePositions` | `GET` | `/portfolio/orders/queue_positions` | Get Queue Positions for Orders | Required | +| `GetOrderQueuePosition` | `GET` | `/portfolio/orders/{order_id}/queue_position` | Get Order Queue Position | Required | +| `GetOrderGroups` | `GET` | `/portfolio/order_groups` | Get Order Groups | Required | +| `CreateOrderGroup` | `POST` | `/portfolio/order_groups/create` | Create Order Group | Required | +| `GetOrderGroup` | `GET` | `/portfolio/order_groups/{order_group_id}` | Get Order Group | Required | +| `DeleteOrderGroup` | `DELETE` | `/portfolio/order_groups/{order_group_id}` | Delete Order Group | Required | +| `ResetOrderGroup` | `PUT` | `/portfolio/order_groups/{order_group_id}/reset` | Reset Order Group | Required | +| `TriggerOrderGroup` | `PUT` | `/portfolio/order_groups/{order_group_id}/trigger` | Trigger Order Group | Required | +| `UpdateOrderGroupLimit` | `PUT` | `/portfolio/order_groups/{order_group_id}/limit` | Update Order Group Limit | Required | +| `GetBalance` | `GET` | `/portfolio/balance` | Get Balance | Required | +| `CreateSubaccount` | `POST` | `/portfolio/subaccounts` | Create Subaccount | Required | +| `ApplySubaccountTransfer` | `POST` | `/portfolio/subaccounts/transfer` | Transfer Between Subaccounts | Required | +| `GetSubaccountBalances` | `GET` | `/portfolio/subaccounts/balances` | Get All Subaccount Balances | Required | +| `GetSubaccountTransfers` | `GET` | `/portfolio/subaccounts/transfers` | Get Subaccount Transfers | Required | +| `GetPositions` | `GET` | `/portfolio/positions` | Get Positions | Required | +| `GetSettlements` | `GET` | `/portfolio/settlements` | Get Settlements | Required | +| `GetPortfolioRestingOrderTotalValue` | `GET` | `/portfolio/summary/total_resting_order_value` | Get Total Resting Order Value | Required | +| `GetFills` | `GET` | `/portfolio/fills` | Get Fills | Required | +| `GetApiKeys` | `GET` | `/api_keys` | Get API Keys | Required | +| `CreateApiKey` | `POST` | `/api_keys` | Create API Key | Required | +| `GenerateApiKey` | `POST` | `/api_keys/generate` | Generate API Key | Required | +| `DeleteApiKey` | `DELETE` | `/api_keys/{api_key}` | Delete API Key | Required | +| `GetTagsForSeriesCategories` | `GET` | `/search/tags_by_categories` | Get Tags for Series Categories | Public | +| `GetFiltersForSports` | `GET` | `/search/filters_by_sport` | Get Filters for Sports | Public | +| `GetAccountApiLimits` | `GET` | `/account/limits` | Get Account API Limits | Required | +| `GetMarketCandlesticks` | `GET` | `/series/{series_ticker}/markets/{ticker}/candlesticks` | Get Market Candlesticks | Public | +| `GetTrades` | `GET` | `/markets/trades` | Get Trades | Public | +| `GetMarketCandlesticksByEvent` | `GET` | `/series/{series_ticker}/events/{ticker}/candlesticks` | Get Event Candlesticks | Public | +| `GetEvents` | `GET` | `/events` | Get Events | Public | +| `GetMultivariateEvents` | `GET` | `/events/multivariate` | Get Multivariate Events | Public | +| `GetEvent` | `GET` | `/events/{event_ticker}` | Get Event | Public | +| `GetEventMetadata` | `GET` | `/events/{event_ticker}/metadata` | Get Event Metadata | Public | +| `GetEventForecastPercentilesHistory` | `GET` | `/series/{series_ticker}/events/{ticker}/forecast_percentile_history` | Get Event Forecast Percentile History | Required | +| `GetLiveData` | `GET` | `/live_data/{type}/milestone/{milestone_id}` | Get Live Data | Public | +| `GetLiveDatas` | `GET` | `/live_data/batch` | Get Multiple Live Data | Public | +| `GetIncentivePrograms` | `GET` | `/incentive_programs` | Get Incentives | Public | +| `GetFCMOrders` | `GET` | `/fcm/orders` | Get FCM Orders | Required | +| `GetFCMPositions` | `GET` | `/fcm/positions` | Get FCM Positions | Required | +| `GetStructuredTargets` | `GET` | `/structured_targets` | Get Structured Targets | Public | +| `GetStructuredTarget` | `GET` | `/structured_targets/{structured_target_id}` | Get Structured Target | Public | +| `GetMarketOrderbook` | `GET` | `/markets/{ticker}/orderbook` | Get Market Orderbook | Required | +| `GetMarketOrderbooks` | `GET` | `/markets/orderbooks` | Get Multiple Market Orderbooks | Required | +| `GetMilestone` | `GET` | `/milestones/{milestone_id}` | Get Milestone | Public | +| `GetMilestones` | `GET` | `/milestones` | Get Milestones | Public | +| `GetCommunicationsID` | `GET` | `/communications/id` | Get Communications ID | Required | +| `GetRFQs` | `GET` | `/communications/rfqs` | Get RFQs | Required | +| `CreateRFQ` | `POST` | `/communications/rfqs` | Create RFQ | Required | +| `GetRFQ` | `GET` | `/communications/rfqs/{rfq_id}` | Get RFQ | Required | +| `DeleteRFQ` | `DELETE` | `/communications/rfqs/{rfq_id}` | Delete RFQ | Required | +| `GetQuotes` | `GET` | `/communications/quotes` | Get Quotes | Required | +| `CreateQuote` | `POST` | `/communications/quotes` | Create Quote | Required | +| `GetQuote` | `GET` | `/communications/quotes/{quote_id}` | Get Quote | Required | +| `DeleteQuote` | `DELETE` | `/communications/quotes/{quote_id}` | Delete Quote | Required | +| `AcceptQuote` | `PUT` | `/communications/quotes/{quote_id}/accept` | Accept Quote | Required | +| `ConfirmQuote` | `PUT` | `/communications/quotes/{quote_id}/confirm` | Confirm Quote | Required | +| `GetMultivariateEventCollection` | `GET` | `/multivariate_event_collections/{collection_ticker}` | Get Multivariate Event Collection | Public | +| `CreateMarketInMultivariateEventCollection` | `POST` | `/multivariate_event_collections/{collection_ticker}` | Create Market In Multivariate Event Collection | Required | +| `GetMultivariateEventCollections` | `GET` | `/multivariate_event_collections` | Get Multivariate Event Collections | Public | +| `LookupTickersForMarketInMultivariateEventCollection` | `PUT` | `/multivariate_event_collections/{collection_ticker}/lookup` | Lookup Tickers For Market In Multivariate Event Collection | Required | +| `GetMultivariateEventCollectionLookupHistory` | `GET` | `/multivariate_event_collections/{collection_ticker}/lookup` | Get Multivariate Event Collection Lookup History | Public | +| `GetSeries` | `GET` | `/series/{series_ticker}` | Get Series | Public | +| `GetSeriesList` | `GET` | `/series` | Get Series List | Public | +| `GetMarkets` | `GET` | `/markets` | Get Markets | Public | +| `GetMarket` | `GET` | `/markets/{ticker}` | Get Market | Public | +| `BatchGetMarketCandlesticks` | `GET` | `/markets/candlesticks` | Batch Get Market Candlesticks | Public | + +#### Endpoint Details + +##### `GetHistoricalCutoff` + +**GET** `/historical/cutoff` + +Get Historical Cutoff Timestamps + + +--- +##### `GetMarketCandlesticksHistorical` + +**GET** `/historical/markets/{ticker}/candlesticks` + +Get Historical Market Candlesticks + +**Parameters:** +- `ticker` (path, string) **required** — Market ticker - unique identifier for the specific market +- `start_ts` (query, integer) **required** — Start timestamp (Unix timestamp). Candlesticks will include those ending on or after this time. +- `end_ts` (query, integer) **required** — End timestamp (Unix timestamp). Candlesticks will include those ending on or before this time. +- `period_interval` (query, integer) **required** — Time period length of each candlestick in minutes. Valid values are 1 (1 minute), 60 (1 hour), or 1440 (1 day). — enum: `1,60,1440` + +--- +##### `GetFillsHistorical` + +**GET** `/historical/fills` + +Get Historical Fills *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetHistoricalOrders` + +**GET** `/historical/orders` + +Get Historical Orders *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetHistoricalMarkets` + +**GET** `/historical/markets` + +Get Historical Markets + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetHistoricalMarket` + +**GET** `/historical/markets/{ticker}` + +Get Historical Market + +**Parameters:** +- `` (, string) + +--- +##### `GetExchangeStatus` + +**GET** `/exchange/status` + +Get Exchange Status + + +--- +##### `GetExchangeAnnouncements` + +**GET** `/exchange/announcements` + +Get Exchange Announcements + + +--- +##### `GetSeriesFeeChanges` + +**GET** `/series/fee_changes` + +Get Series Fee Changes + +**Parameters:** +- `series_ticker` (query, string) +- `show_historical` (query, boolean) + +--- +##### `GetExchangeSchedule` + +**GET** `/exchange/schedule` + +Get Exchange Schedule + + +--- +##### `GetUserDataTimestamp` + +**GET** `/exchange/user_data_timestamp` + +Get User Data Timestamp + + +--- +##### `GetOrders` + +**GET** `/portfolio/orders` + +Get Orders *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `CreateOrder` + +**POST** `/portfolio/orders` + +Create Order *(Auth required)* + + +--- +##### `GetOrder` + +**GET** `/portfolio/orders/{order_id}` + +Get Order *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `CancelOrder` + +**DELETE** `/portfolio/orders/{order_id}` + +Cancel Order *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) + +--- +##### `BatchCreateOrders` + +**POST** `/portfolio/orders/batched` + +Batch Create Orders *(Auth required)* + + +--- +##### `BatchCancelOrders` + +**DELETE** `/portfolio/orders/batched` + +Batch Cancel Orders *(Auth required)* + + +--- +##### `AmendOrder` + +**POST** `/portfolio/orders/{order_id}/amend` + +Amend Order *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `DecreaseOrder` + +**POST** `/portfolio/orders/{order_id}/decrease` + +Decrease Order *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `GetOrderQueuePositions` + +**GET** `/portfolio/orders/queue_positions` + +Get Queue Positions for Orders *(Auth required)* + +**Parameters:** +- `market_tickers` (query, string) — Comma-separated list of market tickers to filter by +- `event_ticker` (query, string) — Event ticker to filter by +- `` (, string) + +--- +##### `GetOrderQueuePosition` + +**GET** `/portfolio/orders/{order_id}/queue_position` + +Get Order Queue Position *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `GetOrderGroups` + +**GET** `/portfolio/order_groups` + +Get Order Groups *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `CreateOrderGroup` + +**POST** `/portfolio/order_groups/create` + +Create Order Group *(Auth required)* + + +--- +##### `GetOrderGroup` + +**GET** `/portfolio/order_groups/{order_group_id}` + +Get Order Group *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) + +--- +##### `DeleteOrderGroup` + +**DELETE** `/portfolio/order_groups/{order_group_id}` + +Delete Order Group *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) + +--- +##### `ResetOrderGroup` + +**PUT** `/portfolio/order_groups/{order_group_id}/reset` + +Reset Order Group *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) + +--- +##### `TriggerOrderGroup` + +**PUT** `/portfolio/order_groups/{order_group_id}/trigger` + +Trigger Order Group *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) + +--- +##### `UpdateOrderGroupLimit` + +**PUT** `/portfolio/order_groups/{order_group_id}/limit` + +Update Order Group Limit *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `GetBalance` + +**GET** `/portfolio/balance` + +Get Balance *(Auth required)* + +**Parameters:** +- `subaccount` (query, integer) — Subaccount number (0 for primary, 1-32 for subaccounts). When provided, returns only that subaccount's balance. + +--- +##### `CreateSubaccount` + +**POST** `/portfolio/subaccounts` + +Create Subaccount *(Auth required)* + + +--- +##### `ApplySubaccountTransfer` + +**POST** `/portfolio/subaccounts/transfer` + +Transfer Between Subaccounts *(Auth required)* + + +--- +##### `GetSubaccountBalances` + +**GET** `/portfolio/subaccounts/balances` + +Get All Subaccount Balances *(Auth required)* + + +--- +##### `GetSubaccountTransfers` + +**GET** `/portfolio/subaccounts/transfers` + +Get Subaccount Transfers *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) + +--- +##### `GetPositions` + +**GET** `/portfolio/positions` + +Get Positions *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetSettlements` + +**GET** `/portfolio/settlements` + +Get Settlements *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetPortfolioRestingOrderTotalValue` + +**GET** `/portfolio/summary/total_resting_order_value` + +Get Total Resting Order Value *(Auth required)* + + +--- +##### `GetFills` + +**GET** `/portfolio/fills` + +Get Fills *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetApiKeys` + +**GET** `/api_keys` + +Get API Keys *(Auth required)* + + +--- +##### `CreateApiKey` + +**POST** `/api_keys` + +Create API Key *(Auth required)* + + +--- +##### `GenerateApiKey` + +**POST** `/api_keys/generate` + +Generate API Key *(Auth required)* + + +--- +##### `DeleteApiKey` + +**DELETE** `/api_keys/{api_key}` + +Delete API Key *(Auth required)* + +**Parameters:** +- `api_key` (path, string) **required** — API key ID to delete + +--- +##### `GetTagsForSeriesCategories` + +**GET** `/search/tags_by_categories` + +Get Tags for Series Categories + + +--- +##### `GetFiltersForSports` + +**GET** `/search/filters_by_sport` + +Get Filters for Sports + + +--- +##### `GetAccountApiLimits` + +**GET** `/account/limits` + +Get Account API Limits *(Auth required)* + + +--- +##### `GetMarketCandlesticks` + +**GET** `/series/{series_ticker}/markets/{ticker}/candlesticks` + +Get Market Candlesticks + +**Parameters:** +- `series_ticker` (path, string) **required** — Series ticker - the series that contains the target market +- `ticker` (path, string) **required** — Market ticker - unique identifier for the specific market +- `start_ts` (query, integer) **required** — Start timestamp (Unix timestamp). Candlesticks will include those ending on or after this time. +- `end_ts` (query, integer) **required** — End timestamp (Unix timestamp). Candlesticks will include those ending on or before this time. +- `period_interval` (query, integer) **required** — Time period length of each candlestick in minutes. Valid values are 1 (1 minute), 60 (1 hour), or 1440 (1 day). — enum: `1,60,1440` +- `include_latest_before_start` (query, boolean) — If true, prepends the latest candlestick available before the start_ts. This synthetic candlestick is created by: +1. Finding the most recent real candlestick before start_ts +2. Projecting it forward to the first period boundary (calculated as the next period interval after start_ts) +3. Setting all OHLC prices to null, and `previous_price` to the close price from the real candlestick + + +--- +##### `GetTrades` + +**GET** `/markets/trades` + +Get Trades + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetMarketCandlesticksByEvent` + +**GET** `/series/{series_ticker}/events/{ticker}/candlesticks` + +Get Event Candlesticks + +**Parameters:** +- `ticker` (path, string) **required** — The event ticker +- `series_ticker` (path, string) **required** — The series ticker +- `start_ts` (query, integer) **required** — Start timestamp for the range +- `end_ts` (query, integer) **required** — End timestamp for the range +- `period_interval` (query, integer) **required** — Specifies the length of each candlestick period, in minutes. Must be one minute, one hour, or one day. — enum: `1,60,1440` + +--- +##### `GetEvents` + +**GET** `/events` + +Get Events + +**Parameters:** +- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 200. Maximum value is 200. +- `cursor` (query, string) — Parameter to specify the pagination cursor. Use the cursor value returned from the previous response to get the next page of results. Leave empty for the first page. +- `with_nested_markets` (query, boolean) — Parameter to specify if nested markets should be included in the response. When true, each event will include a 'markets' field containing a list of Market objects associated with that event. +- `with_milestones` (query, boolean) — If true, includes related milestones as a field alongside events. +- `status` (query, string) — Filter by event status. Possible values are 'open', 'closed', 'settled'. Leave empty to return events with any status. — enum: `open,closed,settled` +- `` (, string) +- `min_close_ts` (query, integer) — Filter events with at least one market with close timestamp greater than this Unix timestamp (in seconds). + +--- +##### `GetMultivariateEvents` + +**GET** `/events/multivariate` + +Get Multivariate Events + +**Parameters:** +- `limit` (query, integer) — Number of results per page. Defaults to 100. Maximum value is 200. +- `cursor` (query, string) — Pagination cursor. Use the cursor value returned from the previous response to get the next page of results. +- `` (, string) +- `collection_ticker` (query, string) — Filter events by collection ticker. Returns only multivariate events belonging to the specified collection. Cannot be used together with series_ticker. +- `with_nested_markets` (query, boolean) — Parameter to specify if nested markets should be included in the response. When true, each event will include a 'markets' field containing a list of Market objects associated with that event. + +--- +##### `GetEvent` + +**GET** `/events/{event_ticker}` + +Get Event + +**Parameters:** +- `event_ticker` (path, string) **required** — Event ticker +- `with_nested_markets` (query, boolean) — If true, markets are included within the event object. If false (default), markets are returned as a separate top-level field in the response. + +--- +##### `GetEventMetadata` + +**GET** `/events/{event_ticker}/metadata` + +Get Event Metadata + +**Parameters:** +- `event_ticker` (path, string) **required** — Event ticker + +--- +##### `GetEventForecastPercentilesHistory` + +**GET** `/series/{series_ticker}/events/{ticker}/forecast_percentile_history` + +Get Event Forecast Percentile History *(Auth required)* + +**Parameters:** +- `ticker` (path, string) **required** — The event ticker +- `series_ticker` (path, string) **required** — The series ticker +- `percentiles` (query, array) **required** — Array of percentile values to retrieve (0-10000, max 10 values) +- `start_ts` (query, integer) **required** — Start timestamp for the range +- `end_ts` (query, integer) **required** — End timestamp for the range +- `period_interval` (query, integer) **required** — Specifies the length of each forecast period, in minutes. 0 for 5-second intervals, or 1, 60, or 1440 for minute-based intervals. — enum: `0,1,60,1440` + +--- +##### `GetLiveData` + +**GET** `/live_data/{type}/milestone/{milestone_id}` + +Get Live Data + +**Parameters:** +- `type` (path, string) **required** — Type of live data +- `milestone_id` (path, string) **required** — Milestone ID + +--- +##### `GetLiveDatas` + +**GET** `/live_data/batch` + +Get Multiple Live Data + +**Parameters:** +- `milestone_ids` (query, array) **required** — Array of milestone IDs + +--- +##### `GetIncentivePrograms` + +**GET** `/incentive_programs` + +Get Incentives + +**Parameters:** +- `status` (query, string) — Status filter. Can be "all", "active", "upcoming", "closed", or "paid_out". Default is "all". — enum: `all,active,upcoming,closed,paid_out` +- `type` (query, string) — Type filter. Can be "all", "liquidity", or "volume". Default is "all". — enum: `all,liquidity,volume` +- `limit` (query, integer) — Number of results per page. Defaults to 100. Maximum value is 10000. +- `cursor` (query, string) — Cursor for pagination + +--- +##### `GetFCMOrders` + +**GET** `/fcm/orders` + +Get FCM Orders *(Auth required)* + +**Parameters:** +- `subtrader_id` (query, string) **required** — Restricts the response to orders for a specific subtrader (FCM members only) +- `` (, string) +- `` (, string) +- `` (, string) +- `min_ts` (query, integer) — Restricts the response to orders after a timestamp, formatted as a Unix Timestamp +- `max_ts` (query, integer) — Restricts the response to orders before a timestamp, formatted as a Unix Timestamp +- `status` (query, string) — Restricts the response to orders that have a certain status — enum: `resting,canceled,executed` +- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 100 + +--- +##### `GetFCMPositions` + +**GET** `/fcm/positions` + +Get FCM Positions *(Auth required)* + +**Parameters:** +- `subtrader_id` (query, string) **required** — Restricts the response to positions for a specific subtrader (FCM members only) +- `ticker` (query, string) — Ticker of desired positions +- `event_ticker` (query, string) — Event ticker of desired positions +- `count_filter` (query, string) — Restricts the positions to those with any of following fields with non-zero values, as a comma separated list +- `settlement_status` (query, string) — Settlement status of the markets to return. Defaults to unsettled — enum: `all,unsettled,settled` +- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 100 +- `cursor` (query, string) — The Cursor represents a pointer to the next page of records in the pagination + +--- +##### `GetStructuredTargets` + +**GET** `/structured_targets` + +Get Structured Targets + +**Parameters:** +- `type` (query, string) — Filter by structured target type +- `competition` (query, string) — Filter by competition +- `page_size` (query, integer) — Number of items per page (min 1, max 2000, default 100) +- `cursor` (query, string) — Pagination cursor + +--- +##### `GetStructuredTarget` + +**GET** `/structured_targets/{structured_target_id}` + +Get Structured Target + +**Parameters:** +- `structured_target_id` (path, string) **required** — Structured target ID + +--- +##### `GetMarketOrderbook` + +**GET** `/markets/{ticker}/orderbook` + +Get Market Orderbook *(Auth required)* + +**Parameters:** +- `` (, string) +- `depth` (query, integer) — Depth of the orderbook to retrieve (0 or negative means all levels, 1-100 for specific depth) + +--- +##### `GetMarketOrderbooks` + +**GET** `/markets/orderbooks` + +Get Multiple Market Orderbooks *(Auth required)* + +**Parameters:** +- `tickers` (query, array) **required** — List of market tickers to fetch orderbooks for + +--- +##### `GetMilestone` + +**GET** `/milestones/{milestone_id}` + +Get Milestone + +**Parameters:** +- `milestone_id` (path, string) **required** — Milestone ID + +--- +##### `GetMilestones` + +**GET** `/milestones` + +Get Milestones + +**Parameters:** +- `limit` (query, integer) **required** — Number of milestones to return per page +- `minimum_start_date` (query, string) — Minimum start date to filter milestones. Format RFC3339 timestamp +- `category` (query, string) — Filter by milestone category +- `competition` (query, string) — Filter by competition +- `source_id` (query, string) — Filter by source id +- `type` (query, string) — Filter by milestone type +- `related_event_ticker` (query, string) — Filter by related event ticker +- `cursor` (query, string) — Pagination cursor. Use the cursor value returned from the previous response to get the next page of results + +--- +##### `GetCommunicationsID` + +**GET** `/communications/id` + +Get Communications ID *(Auth required)* + + +--- +##### `GetRFQs` + +**GET** `/communications/rfqs` + +Get RFQs *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 100. +- `status` (query, string) — Filter RFQs by status +- `creator_user_id` (query, string) — Filter RFQs by creator user ID + +--- +##### `CreateRFQ` + +**POST** `/communications/rfqs` + +Create RFQ *(Auth required)* + + +--- +##### `GetRFQ` + +**GET** `/communications/rfqs/{rfq_id}` + +Get RFQ *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `DeleteRFQ` + +**DELETE** `/communications/rfqs/{rfq_id}` + +Delete RFQ *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `GetQuotes` + +**GET** `/communications/quotes` + +Get Quotes *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 500. +- `status` (query, string) — Filter quotes by status +- `quote_creator_user_id` (query, string) — Filter quotes by quote creator user ID +- `rfq_creator_user_id` (query, string) — Filter quotes by RFQ creator user ID +- `rfq_creator_subtrader_id` (query, string) — Filter quotes by RFQ creator subtrader ID (FCM members only) +- `rfq_id` (query, string) — Filter quotes by RFQ ID + +--- +##### `CreateQuote` + +**POST** `/communications/quotes` + +Create Quote *(Auth required)* + + +--- +##### `GetQuote` + +**GET** `/communications/quotes/{quote_id}` + +Get Quote *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `DeleteQuote` + +**DELETE** `/communications/quotes/{quote_id}` + +Delete Quote *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `AcceptQuote` + +**PUT** `/communications/quotes/{quote_id}/accept` + +Accept Quote *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `ConfirmQuote` + +**PUT** `/communications/quotes/{quote_id}/confirm` + +Confirm Quote *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `GetMultivariateEventCollection` + +**GET** `/multivariate_event_collections/{collection_ticker}` + +Get Multivariate Event Collection + +**Parameters:** +- `collection_ticker` (path, string) **required** — Collection ticker + +--- +##### `CreateMarketInMultivariateEventCollection` + +**POST** `/multivariate_event_collections/{collection_ticker}` + +Create Market In Multivariate Event Collection *(Auth required)* + +**Parameters:** +- `collection_ticker` (path, string) **required** — Collection ticker + +--- +##### `GetMultivariateEventCollections` + +**GET** `/multivariate_event_collections` + +Get Multivariate Event Collections + +**Parameters:** +- `status` (query, string) — Only return collections of a certain status. Can be unopened, open, or closed. — enum: `unopened,open,closed` +- `associated_event_ticker` (query, string) — Only return collections associated with a particular event ticker. +- `series_ticker` (query, string) — Only return collections with a particular series ticker. +- `limit` (query, integer) — Specify the maximum number of results. +- `cursor` (query, string) — The Cursor represents a pointer to the next page of records in the pagination. This optional parameter, when filled, should be filled with the cursor string returned in a previous request to this end-point. + +--- +##### `LookupTickersForMarketInMultivariateEventCollection` + +**PUT** `/multivariate_event_collections/{collection_ticker}/lookup` + +Lookup Tickers For Market In Multivariate Event Collection *(Auth required)* + +**Parameters:** +- `collection_ticker` (path, string) **required** — Collection ticker + +--- +##### `GetMultivariateEventCollectionLookupHistory` + +**GET** `/multivariate_event_collections/{collection_ticker}/lookup` + +Get Multivariate Event Collection Lookup History + +**Parameters:** +- `collection_ticker` (path, string) **required** — Collection ticker +- `lookback_seconds` (query, integer) **required** — Number of seconds to look back for lookup history. Must be one of 10, 60, 300, or 3600. — enum: `10,60,300,3600` + +--- +##### `GetSeries` + +**GET** `/series/{series_ticker}` + +Get Series + +**Parameters:** +- `series_ticker` (path, string) **required** — The ticker of the series to retrieve +- `include_volume` (query, boolean) — If true, includes the total volume traded across all events in this series. + +--- +##### `GetSeriesList` + +**GET** `/series` + +Get Series List + +**Parameters:** +- `category` (query, string) +- `tags` (query, string) +- `include_product_metadata` (query, boolean) +- `include_volume` (query, boolean) — If true, includes the total volume traded across all events in each series. + +--- +##### `GetMarkets` + +**GET** `/markets` + +Get Markets + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetMarket` + +**GET** `/markets/{ticker}` + +Get Market + +**Parameters:** +- `` (, string) + +--- +##### `BatchGetMarketCandlesticks` + +**GET** `/markets/candlesticks` + +Batch Get Market Candlesticks + +**Parameters:** +- `market_tickers` (query, string) **required** — Comma-separated list of market tickers (maximum 100) +- `start_ts` (query, integer) **required** — Start timestamp in Unix seconds +- `end_ts` (query, integer) **required** — End timestamp in Unix seconds +- `period_interval` (query, integer) **required** — Candlestick period interval in minutes +- `include_latest_before_start` (query, boolean) — If true, prepends the latest candlestick available before the start_ts. This synthetic candlestick is created by: +1. Finding the most recent real candlestick before start_ts +2. Projecting it forward to the first period boundary (calculated as the next period interval after start_ts) +3. Setting all OHLC prices to null, and `previous_price` to the close price from the real candlestick + + +--- +### Limitless + +| `call_api()` name | Method | Path | Summary | Auth | +|-----------------|--------|------|---------|------| +| `AuthController_getSigningMessage` | `GET` | `/auth/signing-message` | Get signing message | Public | +| `AuthController_verifyAuth` | `GET` | `/auth/verify-auth` | Verify authentication | Required | +| `AuthController_login` | `POST` | `/auth/login` | User login | Public | +| `AuthController_logout` | `POST` | `/auth/logout` | User logout | Required | +| `MarketController_getActiveMarkets[0]` | `GET` | `/markets/active/{categoryId}` | Browse Active Markets | Public | +| `MarketController_getActiveMarkets[1]` | `GET` | `/markets/active` | Browse Active Markets | Public | +| `MarketController_getActiveMarketCountPerCategory` | `GET` | `/markets/categories/count` | Get active market count per category | Public | +| `MarketController_getActiveSlugs` | `GET` | `/markets/active/slugs` | Get active market slugs with metadata | Public | +| `MarketController_find` | `GET` | `/markets/{addressOrSlug}` | Get Market Details | Public | +| `MarketController_getFeedEvent` | `GET` | `/markets/{slug}/get-feed-events` | Get feed events for a market | Required | +| `MarketOrderbookController_getHistoricalPrice` | `GET` | `/markets/{slug}/historical-price` | Get Historical Prices | Public | +| `MarketOrderbookController_getOrderbook` | `GET` | `/markets/{slug}/orderbook` | Get Orderbook | Public | +| `MarketOrderbookController_getLockedBalance` | `GET` | `/markets/{slug}/locked-balance` | Get Locked Balance | Required | +| `MarketOrderbookController_getUserOrders` | `GET` | `/markets/{slug}/user-orders` | User Orders | Required | +| `MarketOrderbookController_getMarketEvents` | `GET` | `/markets/{slug}/events` | Market Events | Public | +| `MarketSearchController_search` | `GET` | `/markets/search` | Search for markets based on semantic similarity | Public | +| `PortfolioController_getTrades` | `GET` | `/portfolio/trades` | Get Trades | Required | +| `PortfolioController_getPositions` | `GET` | `/portfolio/positions` | Get Positions | Required | +| `PortfolioController_getPnlChart` | `GET` | `/portfolio/pnl-chart` | Get portfolio PnL chart | Required | +| `PortfolioController_getHistory` | `GET` | `/portfolio/history` | Get History | Required | +| `PortfolioController_getPointsBreakdown` | `GET` | `/portfolio/points` | Get points breakdown | Required | +| `PublicPortfolioController_tradedVolume` | `GET` | `/portfolio/{account}/traded-volume` | User Total Volume | Public | +| `PublicPortfolioController_getPositions` | `GET` | `/portfolio/{account}/positions` | Get All User Positions | Public | +| `PublicPortfolioController_getPnlChart` | `GET` | `/portfolio/{account}/pnl-chart` | Get portfolio PnL chart (public) | Public | +| `TradingPortfolioController_getAllowance` | `GET` | `/portfolio/trading/allowance` | Get User Trading Allowance | Required | +| `OrderController_createOrder` | `POST` | `/orders` | Create Order | Required | +| `OrderController_cancelOrder` | `DELETE` | `/orders/{orderId}` | Cancel Order | Required | +| `OrderController_cancelOrderBatch` | `POST` | `/orders/cancel-batch` | Cancel multiple orders in batch | Required | +| `OrderController_cancelAllOrders` | `DELETE` | `/orders/all/{slug}` | Cancel all of a user's orders in a specific market | Required | + +#### Endpoint Details + +##### `AuthController_getSigningMessage` + +**GET** `/auth/signing-message` + +Get signing message + + +--- +##### `AuthController_verifyAuth` + +**GET** `/auth/verify-auth` + +Verify authentication *(Auth required)* + + +--- +##### `AuthController_login` + +**POST** `/auth/login` + +User login + +**Parameters:** +- `x-account` (header, string) **required** — The Ethereum address of the user +- `x-signing-message` (header, string) **required** — The signing message generated by the server +- `x-signature` (header, string) **required** — The signature generated by signing the message with the user's wallet + +--- +##### `AuthController_logout` + +**POST** `/auth/logout` + +User logout *(Auth required)* + + +--- +##### `MarketController_getActiveMarkets[0]` + +**GET** `/markets/active/{categoryId}` + +Browse Active Markets + +**Parameters:** +- `page` (query, number) — Page number for pagination +- `limit` (query, number) — Number of items per page +- `sortBy` (query, string) — Sort by query parameter +- `tradeType` (query, string) — Filter by trade type (amm, clob, or group) — enum: `amm,clob,group` +- `automationType` (query, string) — Filter by automation type (manual, lumy, or sports) — enum: `manual,lumy,sports` +- `categoryId` (path, number) **required** — Filter markets by category ID + +--- +##### `MarketController_getActiveMarkets[1]` + +**GET** `/markets/active` + +Browse Active Markets + +**Parameters:** +- `page` (query, number) — Page number for pagination +- `limit` (query, number) — Number of items per page +- `sortBy` (query, string) — Sort by query parameter +- `tradeType` (query, string) — Filter by trade type (amm, clob, or group) — enum: `amm,clob,group` +- `automationType` (query, string) — Filter by automation type (manual, lumy, or sports) — enum: `manual,lumy,sports` +- `categoryId` (path, number) **required** — Filter markets by category ID + +--- +##### `MarketController_getActiveMarketCountPerCategory` + +**GET** `/markets/categories/count` + +Get active market count per category + + +--- +##### `MarketController_getActiveSlugs` + +**GET** `/markets/active/slugs` + +Get active market slugs with metadata + + +--- +##### `MarketController_find` + +**GET** `/markets/{addressOrSlug}` + +Get Market Details + +**Parameters:** +- `addressOrSlug` (path, string) **required** — Market/group address (0x...) or slug identifier (my-market-name) + +--- +##### `MarketController_getFeedEvent` + +**GET** `/markets/{slug}/get-feed-events` + +Get feed events for a market *(Auth required)* + +**Parameters:** +- `page` (query, number) — Page number for pagination +- `limit` (query, number) — Number of events per page +- `slug` (path, string) **required** — Slug of the market + +--- +##### `MarketOrderbookController_getHistoricalPrice` + +**GET** `/markets/{slug}/historical-price` + +Get Historical Prices + +**Parameters:** +- `to` (query, string) — End date for historical data +- `from` (query, string) — Start date for historical data +- `interval` (query, string) — Time interval for data points — enum: `1h,6h,1d,1w,1m,all` +- `slug` (path, string) **required** — Market slug identifier + +--- +##### `MarketOrderbookController_getOrderbook` + +**GET** `/markets/{slug}/orderbook` + +Get Orderbook + +**Parameters:** +- `slug` (path, string) **required** — Market slug identifier + +--- +##### `MarketOrderbookController_getLockedBalance` + +**GET** `/markets/{slug}/locked-balance` + +Get Locked Balance *(Auth required)* + +**Parameters:** +- `slug` (path, string) **required** — Market slug identifier + +--- +##### `MarketOrderbookController_getUserOrders` + +**GET** `/markets/{slug}/user-orders` + +User Orders *(Auth required)* + +**Parameters:** +- `statuses` (query, array) — Order status(es) to filter by. Defaults to [LIVE] if not provided +- `limit` (query, number) — Maximum number of orders to return +- `slug` (path, string) **required** — Market slug identifier + +--- +##### `MarketOrderbookController_getMarketEvents` + +**GET** `/markets/{slug}/events` + +Market Events + +**Parameters:** +- `page` (query, number) — Page number for pagination +- `limit` (query, number) — Number of events per page +- `slug` (path, string) **required** — Market slug identifier + +--- +##### `MarketSearchController_search` + +**GET** `/markets/search` + +Search for markets based on semantic similarity + +**Parameters:** +- `query` (query, string) **required** — Search query text +- `limit` (query, number) — Maximum number of results to return +- `page` (query, number) — Number of page +- `similarityThreshold` (query, number) — Minimum similarity score (0-1) + +--- +##### `PortfolioController_getTrades` + +**GET** `/portfolio/trades` + +Get Trades *(Auth required)* + + +--- +##### `PortfolioController_getPositions` + +**GET** `/portfolio/positions` + +Get Positions *(Auth required)* + + +--- +##### `PortfolioController_getPnlChart` + +**GET** `/portfolio/pnl-chart` + +Get portfolio PnL chart *(Auth required)* + +**Parameters:** +- `timeframe` (query, string) — Timeframe window for percent change and chart series + +--- +##### `PortfolioController_getHistory` + +**GET** `/portfolio/history` + +Get History *(Auth required)* + +**Parameters:** +- `page` (query, number) **required** — Page number +- `limit` (query, number) **required** — Number of items per page +- `from` (query, string) — Start date for filtering (ISO 8601 format) +- `to` (query, string) — End date for filtering (ISO 8601 format) + +--- +##### `PortfolioController_getPointsBreakdown` + +**GET** `/portfolio/points` + +Get points breakdown *(Auth required)* + + +--- +##### `PublicPortfolioController_tradedVolume` + +**GET** `/portfolio/{account}/traded-volume` + +User Total Volume + +**Parameters:** +- `account` (path, string) **required** — User Ethereum address + +--- +##### `PublicPortfolioController_getPositions` + +**GET** `/portfolio/{account}/positions` + +Get All User Positions + +**Parameters:** +- `account` (path, string) **required** — User Ethereum address + +--- +##### `PublicPortfolioController_getPnlChart` + +**GET** `/portfolio/{account}/pnl-chart` + +Get portfolio PnL chart (public) + +**Parameters:** +- `account` (path, string) **required** — User Ethereum address +- `timeframe` (query, string) — Timeframe window for percent change and chart series + +--- +##### `TradingPortfolioController_getAllowance` + +**GET** `/portfolio/trading/allowance` + +Get User Trading Allowance *(Auth required)* + +**Parameters:** +- `type` (query, string) **required** — Trading type: CLOB or NegRisk — enum: `clob,negrisk` +- `spender` (query, string) — Optional spender address override (e.g., venue exchange address) + +--- +##### `OrderController_createOrder` + +**POST** `/orders` + +Create Order *(Auth required)* + + +--- +##### `OrderController_cancelOrder` + +**DELETE** `/orders/{orderId}` + +Cancel Order *(Auth required)* + +**Parameters:** +- `orderId` (path, string) **required** — Unique identifier of the order to be cancelled + +--- +##### `OrderController_cancelOrderBatch` + +**POST** `/orders/cancel-batch` + +Cancel multiple orders in batch *(Auth required)* + + +--- +##### `OrderController_cancelAllOrders` + +**DELETE** `/orders/all/{slug}` + +Cancel all of a user's orders in a specific market *(Auth required)* + + +--- +### Probable + +| `call_api()` name | Method | Path | Summary | Auth | +|-----------------|--------|------|---------|------| +| `getPublicApiV1AuthNonce` | `GET` | `/public/api/v1/auth/nonce` | Generate Nonce | Public | +| `postPublicApiV1AuthLogin` | `POST` | `/public/api/v1/auth/login` | Login | Public | +| `postPublicApiV1AuthLogout` | `POST` | `/public/api/v1/auth/logout` | Logout | Public | +| `postPublicApiV1AuthApiKey` | `POST` | `/public/api/v1/auth/api-key/{chainId}` | Generate API Key | Required | +| `getPublicApiV1AuthApiKey` | `GET` | `/public/api/v1/auth/api-key/{chainId}` | Get API Key | Required | +| `deletePublicApiV1AuthApiKey` | `DELETE` | `/public/api/v1/auth/api-key/{chainId}` | Delete API Key | Required | +| `postPublicApiV1AuthVerifyL1` | `POST` | `/public/api/v1/auth/verify/l1` | Verify L1 Headers | Required | +| `postPublicApiV1AuthVerifyL2` | `POST` | `/public/api/v1/auth/verify/l2` | Verify L2 Headers | Required | +| `getPublicApiV1Events` | `GET` | `/public/api/v1/events/` | List All Events | Public | +| `getPublicApiV1Events` | `GET` | `/public/api/v1/events/{id}` | Get Event by ID | Public | +| `getPublicApiV1EventsSlug` | `GET` | `/public/api/v1/events/slug/{slug}` | Get Event by Slug | Public | +| `getPublicApiV1EventsTags` | `GET` | `/public/api/v1/events/{id}/tags` | Get Tags for Event | Public | +| `getPublicApiV1Markets` | `GET` | `/public/api/v1/markets/` | List All Markets | Public | +| `getPublicApiV1Markets` | `GET` | `/public/api/v1/markets/{id}` | Get Market by ID | Public | +| `getPublicApiV1MarketsPolymarket` | `GET` | `/public/api/v1/markets/polymarket/{polymarketId}` | Get Market by Polymarket ID | Public | +| `getPublicApiV1MarketsBsc` | `GET` | `/public/api/v1/markets/bsc/{bscQuestionId}` | Get Market by BSC Question ID | Public | +| `getPublicApiV1PublicSearch` | `GET` | `/public/api/v1/public-search/` | Search Events and Markets | Public | +| `getPublicApiV1Tags` | `GET` | `/public/api/v1/tags/` | List All Tags | Public | +| `postPublicApiV1Order` | `POST` | `/public/api/v1/order/{chainId}` | Place Order | Required | +| `deletePublicApiV1Order` | `DELETE` | `/public/api/v1/order/{chainId}/{orderId}` | Cancel Order | Required | +| `getPublicApiV1Orders` | `GET` | `/public/api/v1/orders/{chainId}/{orderId}` | Get Order | Required | +| `getPublicApiV1OrdersOpen` | `GET` | `/public/api/v1/orders/{chainId}/open` | Get Open Orders | Required | +| `getPublicApiV1Price` | `GET` | `/public/api/v1/price` | Get Price | Public | +| `postPublicApiV1Prices` | `POST` | `/public/api/v1/prices` | Get Prices (Batch) | Public | +| `getPublicApiV1Midpoint` | `GET` | `/public/api/v1/midpoint` | Get Midpoint | Public | +| `getPublicApiV1Book` | `GET` | `/public/api/v1/book` | Get Order Book | Public | +| `getPublicApiV1PricesHistory` | `GET` | `/public/api/v1/prices-history` | Get Price History | Public | +| `getPublicApiV1Trade` | `GET` | `/public/api/v1/trade/{chainId}` | Get Trades (Authenticated) | Required | +| `getPublicApiV1Trades` | `GET` | `/public/api/v1/trades` | Get Public Trades | Public | +| `getPublicApiV1Activity` | `GET` | `/public/api/v1/activity` | User Activity | Public | +| `getPublicApiV1PositionCurrent` | `GET` | `/public/api/v1/position/current` | Current Position | Public | +| `getPublicApiV1Pnl` | `GET` | `/public/api/v1/pnl` | Profit and Loss | Public | + +#### Endpoint Details + +##### `getPublicApiV1AuthNonce` + +**GET** `/public/api/v1/auth/nonce` + +Generate Nonce + + +--- +##### `postPublicApiV1AuthLogin` + +**POST** `/public/api/v1/auth/login` + +Login + + +--- +##### `postPublicApiV1AuthLogout` + +**POST** `/public/api/v1/auth/logout` + +Logout + + +--- +##### `postPublicApiV1AuthApiKey` + +**POST** `/public/api/v1/auth/api-key/{chainId}` + +Generate API Key *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** + +--- +##### `getPublicApiV1AuthApiKey` + +**GET** `/public/api/v1/auth/api-key/{chainId}` + +Get API Key *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** + +--- +##### `deletePublicApiV1AuthApiKey` + +**DELETE** `/public/api/v1/auth/api-key/{chainId}` + +Delete API Key *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** + +--- +##### `postPublicApiV1AuthVerifyL1` + +**POST** `/public/api/v1/auth/verify/l1` + +Verify L1 Headers *(Auth required)* + + +--- +##### `postPublicApiV1AuthVerifyL2` + +**POST** `/public/api/v1/auth/verify/l2` + +Verify L2 Headers *(Auth required)* + + +--- +##### `getPublicApiV1Events` + +**GET** `/public/api/v1/events/` + +List All Events + +**Parameters:** +- `page` (query, integer) +- `limit` (query, integer) +- `status` (query, string) — enum: `active,closed,all` +- `tag_id` (query, string) +- `sort` (query, string) + +--- +##### `getPublicApiV1Events` + +**GET** `/public/api/v1/events/{id}` + +Get Event by ID + +**Parameters:** +- `id` (path, integer) **required** + +--- +##### `getPublicApiV1EventsSlug` + +**GET** `/public/api/v1/events/slug/{slug}` + +Get Event by Slug + +**Parameters:** +- `slug` (path, string) **required** + +--- +##### `getPublicApiV1EventsTags` + +**GET** `/public/api/v1/events/{id}/tags` + +Get Tags for Event + +**Parameters:** +- `id` (path, integer) **required** + +--- +##### `getPublicApiV1Markets` + +**GET** `/public/api/v1/markets/` + +List All Markets + +**Parameters:** +- `page` (query, integer) +- `active` (query, boolean) +- `event_id` (query, integer) + +--- +##### `getPublicApiV1Markets` + +**GET** `/public/api/v1/markets/{id}` + +Get Market by ID + +**Parameters:** +- `id` (path, integer) **required** + +--- +##### `getPublicApiV1MarketsPolymarket` + +**GET** `/public/api/v1/markets/polymarket/{polymarketId}` + +Get Market by Polymarket ID + +**Parameters:** +- `polymarketId` (path, string) **required** + +--- +##### `getPublicApiV1MarketsBsc` + +**GET** `/public/api/v1/markets/bsc/{bscQuestionId}` + +Get Market by BSC Question ID + +**Parameters:** +- `bscQuestionId` (path, string) **required** + +--- +##### `getPublicApiV1PublicSearch` + +**GET** `/public/api/v1/public-search/` + +Search Events and Markets + +**Parameters:** +- `q` (query, string) **required** +- `page` (query, integer) +- `events_tag` (query, string) +- `optimized` (query, boolean) + +--- +##### `getPublicApiV1Tags` + +**GET** `/public/api/v1/tags/` + +List All Tags + + +--- +##### `postPublicApiV1Order` + +**POST** `/public/api/v1/order/{chainId}` + +Place Order *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** + +--- +##### `deletePublicApiV1Order` + +**DELETE** `/public/api/v1/order/{chainId}/{orderId}` + +Cancel Order *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** +- `orderId` (path, string) **required** +- `tokenId` (query, string) **required** + +--- +##### `getPublicApiV1Orders` + +**GET** `/public/api/v1/orders/{chainId}/{orderId}` + +Get Order *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** +- `orderId` (path, string) **required** +- `tokenId` (query, string) **required** + +--- +##### `getPublicApiV1OrdersOpen` + +**GET** `/public/api/v1/orders/{chainId}/open` + +Get Open Orders *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** +- `limit` (query, integer) +- `page` (query, integer) + +--- +##### `getPublicApiV1Price` + +**GET** `/public/api/v1/price` + +Get Price + +**Parameters:** +- `token_id` (query, string) **required** +- `side` (query, string) **required** — enum: `BUY,SELL` + +--- +##### `postPublicApiV1Prices` + +**POST** `/public/api/v1/prices` + +Get Prices (Batch) + + +--- +##### `getPublicApiV1Midpoint` + +**GET** `/public/api/v1/midpoint` + +Get Midpoint + +**Parameters:** +- `token_id` (query, string) **required** + +--- +##### `getPublicApiV1Book` + +**GET** `/public/api/v1/book` + +Get Order Book + +**Parameters:** +- `token_id` (query, string) **required** + +--- +##### `getPublicApiV1PricesHistory` + +**GET** `/public/api/v1/prices-history` + +Get Price History + +**Parameters:** +- `market` (query, string) **required** — Asset ID +- `interval` (query, string) — enum: `max,1m,1h,6h,1d,1w` +- `startTs` (query, integer) +- `endTs` (query, integer) + +--- +##### `getPublicApiV1Trade` + +**GET** `/public/api/v1/trade/{chainId}` + +Get Trades (Authenticated) *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** +- `tokenId` (query, string) **required** +- `limit` (query, integer) +- `next_cursor` (query, string) + +--- +##### `getPublicApiV1Trades` + +**GET** `/public/api/v1/trades` + +Get Public Trades + +**Parameters:** +- `user` (query, string) +- `limit` (query, integer) +- `side` (query, string) + +--- +##### `getPublicApiV1Activity` + +**GET** `/public/api/v1/activity` + +User Activity + +**Parameters:** +- `user` (query, string) **required** +- `limit` (query, integer) + +--- +##### `getPublicApiV1PositionCurrent` + +**GET** `/public/api/v1/position/current` + +Current Position + +**Parameters:** +- `user` (query, string) **required** +- `eventId` (query, integer) + +--- +##### `getPublicApiV1Pnl` + +**GET** `/public/api/v1/pnl` + +Profit and Loss + +**Parameters:** +- `user_address` (query, string) **required** + +--- +### Myriad + +| `call_api()` name | Method | Path | Summary | Auth | +|-----------------|--------|------|---------|------| +| `getQuestions` | `GET` | `/questions` | List Questions | Required | +| `getQuestions` | `GET` | `/questions/{id}` | Get Question Details | Required | +| `getMarkets` | `GET` | `/markets` | List Markets | Required | +| `getMarkets` | `GET` | `/markets/{id}` | Get Market Details | Required | +| `getMarketsEvents` | `GET` | `/markets/{id}/events` | Get Market Events | Required | +| `getMarketsReferrals` | `GET` | `/markets/{id}/referrals` | Get Market Referrals | Required | +| `getMarketsHolders` | `GET` | `/markets/{id}/holders` | Get Market Holders | Required | +| `postMarketsQuote` | `POST` | `/markets/quote` | Get Trade Quote | Required | +| `postMarketsQuoteWithFee` | `POST` | `/markets/quote_with_fee` | Get Trade Quote with Frontend Fee | Required | +| `postMarketsClaim` | `POST` | `/markets/claim` | Get Claim Quote | Required | +| `getUsersEvents` | `GET` | `/users/{address}/events` | Get User Events | Required | +| `getUsersReferrals` | `GET` | `/users/{address}/referrals` | Get User Referrals | Required | +| `getUsersPortfolio` | `GET` | `/users/{address}/portfolio` | Get User Portfolio | Required | +| `getUsersMarkets` | `GET` | `/users/{address}/markets` | Get User Markets Portfolio | Required | + +#### Endpoint Details + +##### `getQuestions` + +**GET** `/questions` + +List Questions *(Auth required)* + +**Parameters:** +- `page` (query, integer) +- `limit` (query, integer) +- `keyword` (query, string) — Search in question title +- `min_markets` (query, integer) — Minimum number of linked markets +- `max_markets` (query, integer) — Maximum number of linked markets + +--- +##### `getQuestions` + +**GET** `/questions/{id}` + +Get Question Details *(Auth required)* + +**Parameters:** +- `id` (path, integer) **required** + +--- +##### `getMarkets` + +**GET** `/markets` + +List Markets *(Auth required)* + +**Parameters:** +- `page` (query, integer) +- `limit` (query, integer) +- `sort` (query, string) — enum: `volume,volume_24h,liquidity,expires_at,published_at,featured` +- `order` (query, string) — enum: `asc,desc` +- `network_id` (query, string) — Comma-separated list of network ids +- `state` (query, string) — enum: `open,closed,resolved,voided` +- `trading_model` (query, string) — Filter markets by trading model (e.g. CLOB, AMM) +- `token_address` (query, string) +- `topics` (query, string) — Comma-separated list of topics +- `keyword` (query, string) — Full-text search across title, description, and outcome titles +- `ids` (query, string) — Comma-separated list of on-chain market ids +- `in_play` (query, boolean) +- `moneyline` (query, boolean) +- `min_duration` (query, integer) — Minimum market duration in seconds +- `max_duration` (query, integer) — Maximum market duration in seconds + +--- +##### `getMarkets` + +**GET** `/markets/{id}` + +Get Market Details *(Auth required)* + +**Parameters:** +- `id` (path, string) **required** — Market slug OR Market ID +- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID + +--- +##### `getMarketsEvents` + +**GET** `/markets/{id}/events` + +Get Market Events *(Auth required)* + +**Parameters:** +- `id` (path, string) **required** — Market slug OR Market ID +- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID +- `page` (query, integer) +- `limit` (query, integer) +- `since` (query, integer) — Unix seconds (inclusive) +- `until` (query, integer) — Unix seconds (inclusive) + +--- +##### `getMarketsReferrals` + +**GET** `/markets/{id}/referrals` + +Get Market Referrals *(Auth required)* + +**Parameters:** +- `id` (path, string) **required** — Market slug OR Market ID +- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID +- `page` (query, integer) +- `limit` (query, integer) +- `since` (query, integer) +- `until` (query, integer) +- `code` (query, string) + +--- +##### `getMarketsHolders` + +**GET** `/markets/{id}/holders` + +Get Market Holders *(Auth required)* + +**Parameters:** +- `id` (path, string) **required** — Market slug OR Market ID +- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID +- `page` (query, integer) +- `limit` (query, integer) + +--- +##### `postMarketsQuote` + +**POST** `/markets/quote` + +Get Trade Quote *(Auth required)* + + +--- +##### `postMarketsQuoteWithFee` + +**POST** `/markets/quote_with_fee` + +Get Trade Quote with Frontend Fee *(Auth required)* + + +--- +##### `postMarketsClaim` + +**POST** `/markets/claim` + +Get Claim Quote *(Auth required)* + + +--- +##### `getUsersEvents` + +**GET** `/users/{address}/events` + +Get User Events *(Auth required)* + +**Parameters:** +- `address` (path, string) **required** +- `page` (query, integer) +- `limit` (query, integer) +- `market_id` (query, string) +- `market_slug` (query, string) +- `network_id` (query, integer) +- `since` (query, integer) +- `until` (query, integer) + +--- +##### `getUsersReferrals` + +**GET** `/users/{address}/referrals` + +Get User Referrals *(Auth required)* + +**Parameters:** +- `address` (path, string) **required** +- `page` (query, integer) +- `limit` (query, integer) +- `market_id` (query, string) +- `market_slug` (query, string) +- `network_id` (query, integer) +- `since` (query, integer) +- `until` (query, integer) +- `code` (query, string) + +--- +##### `getUsersPortfolio` + +**GET** `/users/{address}/portfolio` + +Get User Portfolio *(Auth required)* + +**Parameters:** +- `address` (path, string) **required** +- `page` (query, integer) +- `limit` (query, integer) +- `min_shares` (query, number) — Default 0.1 +- `market_slug` (query, string) +- `market_id` (query, string) +- `network_id` (query, integer) +- `token_address` (query, string) + +--- +##### `getUsersMarkets` + +**GET** `/users/{address}/markets` + +Get User Markets Portfolio *(Auth required)* + +**Parameters:** +- `address` (path, string) **required** +- `page` (query, integer) +- `limit` (query, integer) +- `min_shares` (query, number) +- `network_id` (query, integer) +- `state` (query, string) +- `trading_model` (query, string) — Filter portfolio results by trading model (e.g. CLOB, AMM) +- `token_address` (query, string) +- `topics` (query, string) +- `keyword` (query, string) +- `market_ids` (query, string) — Comma-separated list of {networkId}:{marketId} pairs + +--- diff --git a/sdks/python/pmxt/_exchanges.py b/sdks/python/pmxt/_exchanges.py index 224672b5..2c119cab 100644 --- a/sdks/python/pmxt/_exchanges.py +++ b/sdks/python/pmxt/_exchanges.py @@ -21,10 +21,6 @@ def __init__( base_url: Optional[str] = None, auto_start_server: Optional[bool] = None, pmxt_api_key: Optional[str] = None, - # NOTE: Generated wrapper; update the generator template in - # core/scripts/generate-python-exchanges.js in a follow-up. - wallet_address: Optional[str] = None, - signer: Optional[object] = None, ) -> None: """ Initialize Polymarket client. @@ -39,8 +35,6 @@ def __init__( base_url: Base URL of the PMXT sidecar server auto_start_server: Automatically start server if not running (default: True) pmxt_api_key: Hosted PMXT API key (optional; enables hosted mode) - wallet_address: Ethereum address for hosted reads/writes (optional) - signer: Optional callable for signing typed_data (optional) """ super().__init__( exchange_name="polymarket", @@ -51,8 +45,6 @@ def __init__( base_url=base_url, auto_start_server=auto_start_server, pmxt_api_key=pmxt_api_key, - wallet_address=wallet_address, - signer=signer, ) self.api_secret = api_secret @@ -84,8 +76,6 @@ def __init__( base_url: Optional[str] = None, auto_start_server: Optional[bool] = None, pmxt_api_key: Optional[str] = None, - wallet_address: Optional[str] = None, - signer: Optional[object] = None, ) -> None: """ Initialize Limitless client. @@ -98,8 +88,6 @@ def __init__( base_url: Base URL of the PMXT sidecar server auto_start_server: Automatically start server if not running (default: True) pmxt_api_key: Hosted PMXT API key (optional; enables hosted mode) - wallet_address: Ethereum address for hosted reads/writes (optional) - signer: Optional callable for signing typed_data (optional) """ super().__init__( exchange_name="limitless", @@ -108,8 +96,6 @@ def __init__( base_url=base_url, auto_start_server=auto_start_server, pmxt_api_key=pmxt_api_key, - wallet_address=wallet_address, - signer=signer, ) self.api_secret = api_secret @@ -284,7 +270,7 @@ def __init__( super().__init__( exchange_name="myriad", api_key=api_key, - wallet_address=wallet_address, + private_key=wallet_address, base_url=base_url, auto_start_server=auto_start_server, pmxt_api_key=pmxt_api_key, @@ -302,10 +288,6 @@ def __init__( base_url: Optional[str] = None, auto_start_server: Optional[bool] = None, pmxt_api_key: Optional[str] = None, - # NOTE: Generated wrapper; update the generator template in - # core/scripts/generate-python-exchanges.js in a follow-up. - wallet_address: Optional[str] = None, - signer: Optional[object] = None, ) -> None: """ Initialize Opinion client. @@ -317,8 +299,6 @@ def __init__( base_url: Base URL of the PMXT sidecar server auto_start_server: Automatically start server if not running (default: True) pmxt_api_key: Hosted PMXT API key (optional; enables hosted mode) - wallet_address: Ethereum address for hosted reads/writes (optional) - signer: Optional callable for signing typed_data (optional) """ super().__init__( exchange_name="opinion", @@ -328,8 +308,6 @@ def __init__( base_url=base_url, auto_start_server=auto_start_server, pmxt_api_key=pmxt_api_key, - wallet_address=wallet_address, - signer=signer, ) @@ -522,6 +500,7 @@ class Rain(Exchange): def __init__( self, + private_key: Optional[str] = None, base_url: Optional[str] = None, auto_start_server: Optional[bool] = None, pmxt_api_key: Optional[str] = None, @@ -530,12 +509,14 @@ def __init__( Initialize Rain client. Args: + private_key: Private key for authentication (optional) base_url: Base URL of the PMXT sidecar server auto_start_server: Automatically start server if not running (default: True) pmxt_api_key: Hosted PMXT API key (optional; enables hosted mode) """ super().__init__( exchange_name="rain", + private_key=private_key, base_url=base_url, auto_start_server=auto_start_server, pmxt_api_key=pmxt_api_key, @@ -551,7 +532,6 @@ def __init__( base_url: Optional[str] = None, auto_start_server: Optional[bool] = None, pmxt_api_key: Optional[str] = None, - wallet_address: Optional[str] = None, ) -> None: """ Initialize Hunch client. @@ -561,7 +541,6 @@ def __init__( base_url: Base URL of the PMXT sidecar server auto_start_server: Automatically start server if not running (default: True) pmxt_api_key: Hosted PMXT API key (optional; enables hosted mode) - wallet_address: EVM wallet address used for hosted reads/writes """ super().__init__( exchange_name="hunch", @@ -569,7 +548,6 @@ def __init__( base_url=base_url, auto_start_server=auto_start_server, pmxt_api_key=pmxt_api_key, - wallet_address=wallet_address, ) diff --git a/sdks/typescript/API_REFERENCE.md b/sdks/typescript/API_REFERENCE.md index 7676b324..3bc1eda7 100644 --- a/sdks/typescript/API_REFERENCE.md +++ b/sdks/typescript/API_REFERENCE.md @@ -1,485 +1,485 @@ -# pmxtjs - API Reference - -A unified TypeScript SDK for supported prediction markets, with local sidecar access to PMXT exchange implementations and hosted services where configured. - -## Installation - -```bash -npm install pmxtjs -``` - -## Quick Start - -```typescript -import pmxt from 'pmxtjs'; - -// Initialize exchanges (server starts automatically!) -const poly = new pmxt.Polymarket(); -const kalshi = new pmxt.Kalshi(); -const limitless = new pmxt.Limitless(); // Requires API key for authenticated operations - -// Search for markets -const markets = await poly.fetchMarkets({ query: "Trump" }); -console.log(markets[0].title); -``` - -> **Note**: This SDK automatically manages the PMXT sidecar server. - ---- - -## Server Management - -The SDK exposes a `pmxt.server` namespace for managing the background sidecar server. Use these commands for clearing state, resolving "port busy" errors, inspecting health, or tailing logs. - -```typescript -import pmxt from 'pmxtjs'; - -await pmxt.server.status(); // snapshot: { running, pid, port, version, uptimeSeconds, lockFile } -await pmxt.server.health(); // boolean - true if /health responds ok -await pmxt.server.start(); // idempotent - no-op if already running -await pmxt.server.stop(); // stop the sidecar and clean up the lock file -await pmxt.server.restart(); // stop and start the sidecar -pmxt.server.logs(50); // last N log lines from ~/.pmxt/server.log (default 50) -``` - -### `pmxt.server.status` - -Returns a fresh object describing the sidecar state. Useful for diagnosing "is it running?" before issuing API calls. - -```typescript -import pmxt from 'pmxtjs'; -const info = await pmxt.server.status(); -console.log(info.running, info.pid, info.port, info.uptimeSeconds); -``` - -### `pmxt.server.health` - -Returns `true` if the sidecar's `/health` endpoint responds with status `ok`, otherwise `false`. Lighter than `status()` when you only need a boolean liveness check. - -```typescript -import pmxt from 'pmxtjs'; -if (!(await pmxt.server.health())) { - await pmxt.server.restart(); -} -``` - -### `pmxt.server.start` - -Idempotently start the sidecar. Returns immediately if a healthy server is already running. Use this when you want to fail fast on startup rather than letting the first API call lazily boot the server. - -```typescript -import pmxt from 'pmxtjs'; -await pmxt.server.start(); -``` - -### `pmxt.server.stop` - -Stop the running sidecar and clean up its lock file. - -```typescript -import pmxt from 'pmxtjs'; -await pmxt.server.stop(); -``` - -### `pmxt.server.restart` - -Stop the sidecar (if running) and start a fresh one. Equivalent to `stop()` followed by `start()`. - -```typescript -import pmxt from 'pmxtjs'; -await pmxt.server.restart(); -``` - -### `pmxt.server.logs` - -Return the last `n` lines (default `50`) from the sidecar log file at `~/.pmxt/server.log`. Returns an empty array if no log file exists yet. Invaluable when the server is misbehaving and you need to see what it actually printed. - -```typescript -import pmxt from 'pmxtjs'; -for (const line of pmxt.server.logs(100)) { - console.log(line); -} -``` - ---- - -## Methods - -### `has` - -Capability map indicating which methods this exchange supports. - - -**Signature:** - -```typescript -get has(): ExchangeHas -``` - -**Parameters:** - -- None - -**Returns:** ExchangeHas - Result - -**Example:** - -```typescript -exchange.has -``` - - ---- -### `loadMarkets` - -Load and cache all markets from the exchange into `this.markets` and `this.marketsBySlug`. - - -**Signature:** - -```typescript -async loadMarkets(reload: boolean): Promise> -``` - -**Parameters:** - -- `reload` (boolean): Force a fresh fetch from the API even if markets are already loaded - -**Returns:** Promise> - Dictionary of markets indexed by marketId - -**Example:** - -```typescript -await exchange.loadMarkets(true) -``` - - ---- -### `fetchMarkets` - -Fetch markets with optional filtering, search, or slug lookup. - - -**Signature:** - -```typescript -async fetchMarkets(params?: MarketFetchParams): Promise -``` - -**Parameters:** - -- `params` (MarketFetchParams) - **Optional**: Optional parameters for filtering and search - - `params.query` - Search keyword to filter markets - - `params.slug` - Market slug/ticker for direct lookup - - `params.limit` - Maximum number of results - - `params.offset` - Pagination offset - - `params.sort` - Sort order ('volume' | 'liquidity' | 'newest') - - `params.searchIn` - Where to search ('title' | 'description' | 'both') - -**Returns:** Promise<[UnifiedMarket](#unifiedmarket)[]> - Array of unified markets - -**Example:** - -```typescript -await exchange.fetchMarkets({ query: "Trump", slug: "will-trump-win", limit: 10 }) -``` - -**Notes:** -ordering — exchanges may reorder or add markets between requests. For stable iteration -across pages, use `loadMarkets()` and paginate over `Object.values(exchange.markets)`. -Some exchanges (like Limitless) may only support status 'active' for search results. - ---- -### `fetchMarketsPaginated` - -Fetch markets with cursor-based pagination backed by a stable in-memory snapshot. - - -**Signature:** - -```typescript -async fetchMarketsPaginated(params?: { limit?: number; cursor?: string; filter?: MarketFilterCriteria }): Promise -``` - -**Parameters:** - -- `params` ({ limit?: number; cursor?: string; filter?: MarketFilterCriteria }) - **Optional**: params - - `params.limit` - Page size (default: return all markets) - - `params.cursor` - Opaque cursor returned by a previous call - -**Returns:** Promise<[PaginatedMarketsResult](#paginatedmarketsresult)> - PaginatedMarketsResult with data, total, and optional nextCursor - -**Example:** - -```typescript -await exchange.fetchMarketsPaginated({ limit: 10, cursor: "..." }) -``` - - ---- -### `fetchEventsPaginated` - -Paginated variant of {@link fetchEvents}. - - -**Signature:** - -```typescript -async fetchEventsPaginated(params?: { limit?: number; cursor?: string; filter?: EventFilterCriteria }): Promise -``` - -**Parameters:** - -- `params` ({ limit?: number; cursor?: string; filter?: EventFilterCriteria }) - **Optional**: params - - `params.limit` - Page size (default: return all events) - - `params.cursor` - Opaque cursor returned by a previous call - -**Returns:** Promise<[PaginatedEventsResult](#paginatedeventsresult)> - PaginatedEventsResult with data, total, and optional nextCursor - -**Example:** - -```typescript -await exchange.fetchEventsPaginated({ limit: 10, cursor: "..." }) -``` - - ---- -### `fetchEvents` - -Fetch events with optional keyword search. - - -**Signature:** - -```typescript -async fetchEvents(params?: EventFetchParams): Promise -``` - -**Parameters:** - -- `params` ([EventFetchParams](#eventfetchparams)) - **Optional**: Optional parameters for search and filtering - - `params.query` - Search keyword to filter events. If omitted, returns top events by volume. - - `params.limit` - Maximum number of results - - `params.offset` - Pagination offset - - `params.searchIn` - Where to search ('title' | 'description' | 'both') - -**Returns:** Promise<[UnifiedEvent](#unifiedevent)[]> - Array of unified events - -**Example:** - -```typescript -await exchange.fetchEvents({ query: "Trump", limit: 10, offset: 0 }) -``` - -**Notes:** -Some exchanges (like Limitless) may only support status 'active' for search results. - ---- -### `fetchSeries` - -Fetch the recurring series (fourth tier above Event -> Market -> Outcome) - - -**Signature:** - -```typescript -async fetchSeries(params?: SeriesFetchParams): Promise -``` - -**Parameters:** - -- `params` (SeriesFetchParams) - **Optional**: params - -**Returns:** Promise<[UnifiedSeries](#unifiedseries)[]> - Array of unified series. Always an array, including the singular-lookup case. - -**Example:** - -```typescript -await exchange.fetchSeries() -``` - - ---- -### `fetchMarket` - -Fetch a single market by lookup parameters. - - -**Signature:** - -```typescript -async fetchMarket(params?: MarketFetchParams): Promise -``` - -**Parameters:** - -- `params` (MarketFetchParams) - **Optional**: Lookup parameters (marketId, outcomeId, slug, etc.) - -**Returns:** Promise<[UnifiedMarket](#unifiedmarket)> - A single unified market - -**Example:** - -```typescript -await exchange.fetchMarket() -``` - - ---- -### `fetchEvent` - -Fetch a single event by lookup parameters. - - -**Signature:** - -```typescript -async fetchEvent(params?: EventFetchParams): Promise -``` - -**Parameters:** - -- `params` ([EventFetchParams](#eventfetchparams)) - **Optional**: Lookup parameters (eventId, slug, query) - -**Returns:** Promise<[UnifiedEvent](#unifiedevent)> - A single unified event - -**Example:** - -```typescript -await exchange.fetchEvent() -``` - - ---- -### `fetchOHLCV` - -Fetch historical OHLCV (candlestick) price data for a specific market outcome. - - -**Signature:** - -```typescript -async fetchOHLCV(outcomeId: string, params: OHLCVParams): Promise -``` - -**Parameters:** - -- `outcomeId` (string): The Outcome ID (outcomeId). Use outcome.outcomeId, NOT market.marketId -- `params` ([OHLCVParams](#ohlcvparams)): OHLCV parameters including resolution (required) - -**Returns:** Promise<[PriceCandle](#pricecandle)[]> - Array of price candles - -**Example:** - -```typescript -await exchange.fetchOHLCV("abc123", { resolution: "1h", limit: 100 }) -``` - -**Notes:** -**CRITICAL**: Use `outcome.outcomeId` (TS) / `outcome.outcome_id` (Python), not the market ID. -Polymarket: outcomeId is the CLOB Token ID. Kalshi: outcomeId is the Market Ticker. -Common resolutions: '1m' | '5m' | '15m' | '1h' | '6h' | '1d'. Arbitrary intervals (e.g. '30s', '120s', '3h') accepted by venues that support them. - ---- -### `fetchOrderBook` - -Fetch the order book (bids/asks) for a specific outcome. - - -**Signature:** - -```typescript -async fetchOrderBook(outcomeId: string, limit?: number, params?: FetchOrderBookParams): Promise -``` - -**Parameters:** - -- `outcomeId` (string): The Outcome ID (outcomeId) or market slug -- `limit` (number) - **Optional**: Max number of bid/ask levels to return. For range -- `params` ([FetchOrderBookParams](#fetchorderbookparams)) - **Optional**: Optional parameters: - -**Returns:** Promise<[OrderBook](#orderbook)> - Order book with bids and asks. Returns OrderBook[] when - -**Example:** - -```typescript -await exchange.fetchOrderBook("abc123", 10, {}) -``` - - ---- -### `fetchOrderBooks` - -Batch variant of {@link fetchOrderBook}. Fetches order books for - - -**Signature:** - -```typescript -async fetchOrderBooks(outcomeIds: string[]): Promise> -``` - -**Parameters:** - -- `outcomeIds` (string[]): List of Outcome IDs (outcomeId). Each id must be in the - -**Returns:** Promise> - A map keyed by the input id (preserving the caller's exact - -**Example:** - -```typescript -await exchange.fetchOrderBooks(["12345"]) -``` - - ---- -### `fetchTrades` - -Fetch raw trade history for a specific outcome. - - -**Signature:** - -```typescript -async fetchTrades(outcomeId: string, params: TradesParams | HistoryFilterParams): Promise -``` - -**Parameters:** - -- `outcomeId` (string): The Outcome ID (outcomeId) -- `params` (TradesParams | HistoryFilterParams): Trade filter parameters - -**Returns:** Promise<[Trade](#trade)[]> - Array of recent trades - -**Example:** - -```typescript -await exchange.fetchTrades("abc123", { limit: 50 }) -``` - -**Notes:** -Polymarket requires an API key for trade history. Use fetchOHLCV for public historical data. - ---- -### `createOrder` - -Place a new order on the exchange. - - -**Signature:** - -```typescript -async createOrder(params: CreateOrderInput): Promise -``` - -**Parameters:** - -- `params` ([CreateOrderInput](#createorderinput)): Order parameters - -**Returns:** Promise<[Order](#order)> - The created order - -**Example:** - -```typescript +# pmxtjs - API Reference + +A unified TypeScript SDK for supported prediction markets, with local sidecar access to PMXT exchange implementations and hosted services where configured. + +## Installation + +```bash +npm install pmxtjs +``` + +## Quick Start + +```typescript +import pmxt from 'pmxtjs'; + +// Initialize exchanges (server starts automatically!) +const poly = new pmxt.Polymarket(); +const kalshi = new pmxt.Kalshi(); +const limitless = new pmxt.Limitless(); // Requires API key for authenticated operations + +// Search for markets +const markets = await poly.fetchMarkets({ query: "Trump" }); +console.log(markets[0].title); +``` + +> **Note**: This SDK automatically manages the PMXT sidecar server. + +--- + +## Server Management + +The SDK exposes a `pmxt.server` namespace for managing the background sidecar server. Use these commands for clearing state, resolving "port busy" errors, inspecting health, or tailing logs. + +```typescript +import pmxt from 'pmxtjs'; + +await pmxt.server.status(); // snapshot: { running, pid, port, version, uptimeSeconds, lockFile } +await pmxt.server.health(); // boolean - true if /health responds ok +await pmxt.server.start(); // idempotent - no-op if already running +await pmxt.server.stop(); // stop the sidecar and clean up the lock file +await pmxt.server.restart(); // stop and start the sidecar +pmxt.server.logs(50); // last N log lines from ~/.pmxt/server.log (default 50) +``` + +### `pmxt.server.status` + +Returns a fresh object describing the sidecar state. Useful for diagnosing "is it running?" before issuing API calls. + +```typescript +import pmxt from 'pmxtjs'; +const info = await pmxt.server.status(); +console.log(info.running, info.pid, info.port, info.uptimeSeconds); +``` + +### `pmxt.server.health` + +Returns `true` if the sidecar's `/health` endpoint responds with status `ok`, otherwise `false`. Lighter than `status()` when you only need a boolean liveness check. + +```typescript +import pmxt from 'pmxtjs'; +if (!(await pmxt.server.health())) { + await pmxt.server.restart(); +} +``` + +### `pmxt.server.start` + +Idempotently start the sidecar. Returns immediately if a healthy server is already running. Use this when you want to fail fast on startup rather than letting the first API call lazily boot the server. + +```typescript +import pmxt from 'pmxtjs'; +await pmxt.server.start(); +``` + +### `pmxt.server.stop` + +Stop the running sidecar and clean up its lock file. + +```typescript +import pmxt from 'pmxtjs'; +await pmxt.server.stop(); +``` + +### `pmxt.server.restart` + +Stop the sidecar (if running) and start a fresh one. Equivalent to `stop()` followed by `start()`. + +```typescript +import pmxt from 'pmxtjs'; +await pmxt.server.restart(); +``` + +### `pmxt.server.logs` + +Return the last `n` lines (default `50`) from the sidecar log file at `~/.pmxt/server.log`. Returns an empty array if no log file exists yet. Invaluable when the server is misbehaving and you need to see what it actually printed. + +```typescript +import pmxt from 'pmxtjs'; +for (const line of pmxt.server.logs(100)) { + console.log(line); +} +``` + +--- + +## Methods + +### `has` + +Capability map indicating which methods this exchange supports. + + +**Signature:** + +```typescript +get has(): ExchangeHas +``` + +**Parameters:** + +- None + +**Returns:** ExchangeHas - Result + +**Example:** + +```typescript +exchange.has +``` + + +--- +### `loadMarkets` + +Load and cache all markets from the exchange into `this.markets` and `this.marketsBySlug`. + + +**Signature:** + +```typescript +async loadMarkets(reload: boolean): Promise> +``` + +**Parameters:** + +- `reload` (boolean): Force a fresh fetch from the API even if markets are already loaded + +**Returns:** Promise> - Dictionary of markets indexed by marketId + +**Example:** + +```typescript +await exchange.loadMarkets(true) +``` + + +--- +### `fetchMarkets` + +Fetch markets with optional filtering, search, or slug lookup. + + +**Signature:** + +```typescript +async fetchMarkets(params?: MarketFetchParams): Promise +``` + +**Parameters:** + +- `params` (MarketFetchParams) - **Optional**: Optional parameters for filtering and search + - `params.query` - Search keyword to filter markets + - `params.slug` - Market slug/ticker for direct lookup + - `params.limit` - Maximum number of results + - `params.offset` - Pagination offset + - `params.sort` - Sort order ('volume' | 'liquidity' | 'newest') + - `params.searchIn` - Where to search ('title' | 'description' | 'both') + +**Returns:** Promise<[UnifiedMarket](#unifiedmarket)[]> - Array of unified markets + +**Example:** + +```typescript +await exchange.fetchMarkets({ query: "Trump", slug: "will-trump-win", limit: 10 }) +``` + +**Notes:** +ordering — exchanges may reorder or add markets between requests. For stable iteration +across pages, use `loadMarkets()` and paginate over `Object.values(exchange.markets)`. +Some exchanges (like Limitless) may only support status 'active' for search results. + +--- +### `fetchMarketsPaginated` + +Fetch markets with cursor-based pagination backed by a stable in-memory snapshot. + + +**Signature:** + +```typescript +async fetchMarketsPaginated(params?: { limit?: number; cursor?: string; filter?: MarketFilterCriteria }): Promise +``` + +**Parameters:** + +- `params` ({ limit?: number; cursor?: string; filter?: MarketFilterCriteria }) - **Optional**: params + - `params.limit` - Page size (default: return all markets) + - `params.cursor` - Opaque cursor returned by a previous call + +**Returns:** Promise<[PaginatedMarketsResult](#paginatedmarketsresult)> - PaginatedMarketsResult with data, total, and optional nextCursor + +**Example:** + +```typescript +await exchange.fetchMarketsPaginated({ limit: 10, cursor: "..." }) +``` + + +--- +### `fetchEventsPaginated` + +Paginated variant of {@link fetchEvents}. + + +**Signature:** + +```typescript +async fetchEventsPaginated(params?: { limit?: number; cursor?: string; filter?: EventFilterCriteria }): Promise +``` + +**Parameters:** + +- `params` ({ limit?: number; cursor?: string; filter?: EventFilterCriteria }) - **Optional**: params + - `params.limit` - Page size (default: return all events) + - `params.cursor` - Opaque cursor returned by a previous call + +**Returns:** Promise<[PaginatedEventsResult](#paginatedeventsresult)> - PaginatedEventsResult with data, total, and optional nextCursor + +**Example:** + +```typescript +await exchange.fetchEventsPaginated({ limit: 10, cursor: "..." }) +``` + + +--- +### `fetchEvents` + +Fetch events with optional keyword search. + + +**Signature:** + +```typescript +async fetchEvents(params?: EventFetchParams): Promise +``` + +**Parameters:** + +- `params` ([EventFetchParams](#eventfetchparams)) - **Optional**: Optional parameters for search and filtering + - `params.query` - Search keyword to filter events. If omitted, returns top events by volume. + - `params.limit` - Maximum number of results + - `params.offset` - Pagination offset + - `params.searchIn` - Where to search ('title' | 'description' | 'both') + +**Returns:** Promise<[UnifiedEvent](#unifiedevent)[]> - Array of unified events + +**Example:** + +```typescript +await exchange.fetchEvents({ query: "Trump", limit: 10, offset: 0 }) +``` + +**Notes:** +Some exchanges (like Limitless) may only support status 'active' for search results. + +--- +### `fetchSeries` + +Fetch the recurring series (fourth tier above Event -> Market -> Outcome) + + +**Signature:** + +```typescript +async fetchSeries(params?: SeriesFetchParams): Promise +``` + +**Parameters:** + +- `params` (SeriesFetchParams) - **Optional**: params + +**Returns:** Promise<[UnifiedSeries](#unifiedseries)[]> - Array of unified series. Always an array, including the singular-lookup case. + +**Example:** + +```typescript +await exchange.fetchSeries() +``` + + +--- +### `fetchMarket` + +Fetch a single market by lookup parameters. + + +**Signature:** + +```typescript +async fetchMarket(params?: MarketFetchParams): Promise +``` + +**Parameters:** + +- `params` (MarketFetchParams) - **Optional**: Lookup parameters (marketId, outcomeId, slug, etc.) + +**Returns:** Promise<[UnifiedMarket](#unifiedmarket)> - A single unified market + +**Example:** + +```typescript +await exchange.fetchMarket() +``` + + +--- +### `fetchEvent` + +Fetch a single event by lookup parameters. + + +**Signature:** + +```typescript +async fetchEvent(params?: EventFetchParams): Promise +``` + +**Parameters:** + +- `params` ([EventFetchParams](#eventfetchparams)) - **Optional**: Lookup parameters (eventId, slug, query) + +**Returns:** Promise<[UnifiedEvent](#unifiedevent)> - A single unified event + +**Example:** + +```typescript +await exchange.fetchEvent() +``` + + +--- +### `fetchOHLCV` + +Fetch historical OHLCV (candlestick) price data for a specific market outcome. + + +**Signature:** + +```typescript +async fetchOHLCV(outcomeId: string, params: OHLCVParams): Promise +``` + +**Parameters:** + +- `outcomeId` (string): The Outcome ID (outcomeId). Use outcome.outcomeId, NOT market.marketId +- `params` ([OHLCVParams](#ohlcvparams)): OHLCV parameters including resolution (required) + +**Returns:** Promise<[PriceCandle](#pricecandle)[]> - Array of price candles + +**Example:** + +```typescript +await exchange.fetchOHLCV("abc123", { resolution: "1h", limit: 100 }) +``` + +**Notes:** +**CRITICAL**: Use `outcome.outcomeId` (TS) / `outcome.outcome_id` (Python), not the market ID. +Polymarket: outcomeId is the CLOB Token ID. Kalshi: outcomeId is the Market Ticker. +Common resolutions: '1m' | '5m' | '15m' | '1h' | '6h' | '1d'. Arbitrary intervals (e.g. '30s', '120s', '3h') accepted by venues that support them. + +--- +### `fetchOrderBook` + +Fetch the order book (bids/asks) for a specific outcome. + + +**Signature:** + +```typescript +async fetchOrderBook(outcomeId: string, limit?: number, params?: FetchOrderBookParams): Promise +``` + +**Parameters:** + +- `outcomeId` (string): The Outcome ID (outcomeId) or market slug +- `limit` (number) - **Optional**: Max number of bid/ask levels to return. For range +- `params` ([FetchOrderBookParams](#fetchorderbookparams)) - **Optional**: Optional parameters: + +**Returns:** Promise<[OrderBook](#orderbook)> - Order book with bids and asks. Returns OrderBook[] when + +**Example:** + +```typescript +await exchange.fetchOrderBook("abc123", 10, {}) +``` + + +--- +### `fetchOrderBooks` + +Batch variant of {@link fetchOrderBook}. Fetches order books for + + +**Signature:** + +```typescript +async fetchOrderBooks(outcomeIds: string[]): Promise> +``` + +**Parameters:** + +- `outcomeIds` (string[]): List of Outcome IDs (outcomeId). Each id must be in the + +**Returns:** Promise> - A map keyed by the input id (preserving the caller's exact + +**Example:** + +```typescript +await exchange.fetchOrderBooks(["12345"]) +``` + + +--- +### `fetchTrades` + +Fetch raw trade history for a specific outcome. + + +**Signature:** + +```typescript +async fetchTrades(outcomeId: string, params: TradesParams | HistoryFilterParams): Promise +``` + +**Parameters:** + +- `outcomeId` (string): The Outcome ID (outcomeId) +- `params` (TradesParams | HistoryFilterParams): Trade filter parameters + +**Returns:** Promise<[Trade](#trade)[]> - Array of recent trades + +**Example:** + +```typescript +await exchange.fetchTrades("abc123", { limit: 50 }) +``` + +**Notes:** +Polymarket requires an API key for trade history. Use fetchOHLCV for public historical data. + +--- +### `createOrder` + +Place a new order on the exchange. + + +**Signature:** + +```typescript +async createOrder(params: CreateOrderInput): Promise +``` + +**Parameters:** + +- `params` ([CreateOrderInput](#createorderinput)): Order parameters + +**Returns:** Promise<[Order](#order)> - The created order + +**Example:** + +```typescript await exchange.createOrder({ marketId: "12345", outcomeId: "abc123", @@ -487,31 +487,31 @@ await exchange.createOrder({ type: "limit", amount: 50, price: 0.65 -}) -``` - - ---- -### `buildOrder` - -Build an order payload without submitting it to the exchange. - - -**Signature:** - -```typescript -async buildOrder(params: CreateOrderInput): Promise -``` - -**Parameters:** - -- `params` ([CreateOrderInput](#createorderinput)): Order parameters (same as createOrder) - -**Returns:** Promise<[BuiltOrder](#builtorder)> - A BuiltOrder containing the exchange-native payload - -**Example:** - -```typescript +}) +``` + + +--- +### `buildOrder` + +Build an order payload without submitting it to the exchange. + + +**Signature:** + +```typescript +async buildOrder(params: CreateOrderInput): Promise +``` + +**Parameters:** + +- `params` ([CreateOrderInput](#createorderinput)): Order parameters (same as createOrder) + +**Returns:** Promise<[BuiltOrder](#builtorder)> - A BuiltOrder containing the exchange-native payload + +**Example:** + +```typescript await exchange.buildOrder({ marketId: "12345", outcomeId: "abc123", @@ -519,31 +519,31 @@ await exchange.buildOrder({ type: "limit", amount: 50, price: 0.65 -}) -``` - - ---- -### `submitOrder` - -Submit a pre-built order returned by buildOrder(). - - -**Signature:** - -```typescript -async submitOrder(built: BuiltOrder): Promise -``` - -**Parameters:** - -- `built` ([BuiltOrder](#builtorder)): A BuiltOrder from buildOrder() - -**Returns:** Promise<[Order](#order)> - The submitted order - -**Example:** - -```typescript +}) +``` + + +--- +### `submitOrder` + +Submit a pre-built order returned by buildOrder(). + + +**Signature:** + +```typescript +async submitOrder(built: BuiltOrder): Promise +``` + +**Parameters:** + +- `built` ([BuiltOrder](#builtorder)): A BuiltOrder from buildOrder() + +**Returns:** Promise<[Order](#order)> - The submitted order + +**Example:** + +```typescript const built = await exchange.buildOrder({ marketId: "12345", outcomeId: "abc123", @@ -552,4659 +552,4659 @@ const built = await exchange.buildOrder({ amount: 50, price: 0.65 }); -await exchange.submitOrder(built) -``` - - ---- -### `cancelOrder` +await exchange.submitOrder(built) +``` + + +--- +### `cancelOrder` + +Cancel an existing open order. + + +**Signature:** + +```typescript +async cancelOrder(orderId: string): Promise +``` + +**Parameters:** + +- `orderId` (string): The order ID to cancel + +**Returns:** Promise<[Order](#order)> - The cancelled order + +**Example:** + +```typescript +await exchange.cancelOrder("ord-001") +``` + + +--- +### `fetchOrder` + +Fetch a specific order by ID. + + +**Signature:** + +```typescript +async fetchOrder(orderId: string): Promise +``` + +**Parameters:** + +- `orderId` (string): The order ID to look up + +**Returns:** Promise<[Order](#order)> - The order details + +**Example:** + +```typescript +await exchange.fetchOrder("ord-001") +``` + + +--- +### `fetchOpenOrders` + +Fetch all open orders, optionally filtered by market. + + +**Signature:** + +```typescript +async fetchOpenOrders(marketId?: string): Promise +``` + +**Parameters:** + +- `marketId` (string) - **Optional**: Optional market ID to filter by + +**Returns:** Promise<[Order](#order)[]> - Array of open orders + +**Example:** + +```typescript +await exchange.fetchOpenOrders("12345") +``` + + +--- +### `fetchMyTrades` + +Fetch authenticated user trade history. + + +**Signature:** + +```typescript +async fetchMyTrades(params?: MyTradesParams): Promise +``` + +**Parameters:** + +- `params` ([MyTradesParams](#mytradesparams)) - **Optional**: Optional trade history filters + - `params.outcomeId` - Filter by outcome token ID + - `params.marketId` - Filter by market ID or ticker + - `params.since` - Start timestamp or ISO date + - `params.until` - End timestamp or ISO date + - `params.limit` - Maximum number of trades + - `params.cursor` - Pagination cursor + +**Returns:** Promise<[UserTrade](#usertrade)[]> - Array of user trades + +**Example:** + +```typescript +await exchange.fetchMyTrades({ limit: 10 }) +``` + + +--- +### `fetchClosedOrders` + +Fetch authenticated closed orders. + + +**Signature:** + +```typescript +async fetchClosedOrders(params?: OrderHistoryParams): Promise +``` + +**Parameters:** + +- `params` ([OrderHistoryParams](#orderhistoryparams)) - **Optional**: Optional order history filters + - `params.marketId` - Filter by market ID or ticker + - `params.since` - Start timestamp or ISO date + - `params.until` - End timestamp or ISO date + - `params.limit` - Maximum number of orders + - `params.cursor` - Pagination cursor + +**Returns:** Promise<[Order](#order)[]> - Array of closed orders + +**Example:** + +```typescript +await exchange.fetchClosedOrders({ marketId: "12345", limit: 10 }) +``` + + +--- +### `fetchAllOrders` + +Fetch authenticated order history across open and closed orders. + + +**Signature:** + +```typescript +async fetchAllOrders(params?: OrderHistoryParams): Promise +``` + +**Parameters:** + +- `params` ([OrderHistoryParams](#orderhistoryparams)) - **Optional**: Optional order history filters + - `params.marketId` - Filter by market ID or ticker + - `params.since` - Start timestamp or ISO date + - `params.until` - End timestamp or ISO date + - `params.limit` - Maximum number of orders + - `params.cursor` - Pagination cursor + +**Returns:** Promise<[Order](#order)[]> - Array of orders + +**Example:** + +```typescript +await exchange.fetchAllOrders({ marketId: "12345", limit: 10 }) +``` + + +--- +### `fetchPositions` + +Fetch current user positions across all markets. + + +**Signature:** + +```typescript +async fetchPositions(address?: string): Promise +``` + +**Parameters:** + +- `address` (string) - **Optional**: Optional public wallet address + +**Returns:** Promise<[Position](#position)[]> - Array of user positions + +**Example:** + +```typescript +await exchange.fetchPositions("0xabc...") +``` + + +--- +### `fetchBalance` + +Fetch account balances. + + +**Signature:** + +```typescript +async fetchBalance(address?: string): Promise +``` + +**Parameters:** + +- `address` (string) - **Optional**: Optional public wallet address + +**Returns:** Promise<[Balance](#balance)[]> - Array of account balances + +**Example:** + +```typescript +await exchange.fetchBalance("0xabc...") +``` + + +--- +### `getExecutionPrice` + +Calculate the volume-weighted average execution price for a given order size. + + +**Signature:** + +```typescript +getExecutionPrice(orderBook: OrderBook, side: 'buy' | 'sell', amount: number): number +``` + +**Parameters:** + +- `orderBook` ([OrderBook](#orderbook)): The current order book +- `side` ('buy' | 'sell'): 'buy' or 'sell' +- `amount` (number): Number of contracts to simulate + +**Returns:** number - Average execution price, or 0 if insufficient liquidity + +**Example:** + +```typescript +const orderBook = await exchange.fetchOrderBook("abc123") +exchange.getExecutionPrice(orderBook, "buy", 50) +``` + + +--- +### `getExecutionPriceDetailed` + +Calculate detailed execution price information including partial fill data. + + +**Signature:** + +```typescript +async getExecutionPriceDetailed(orderBook: OrderBook, side: 'buy' | 'sell', amount: number): Promise +``` + +**Parameters:** + +- `orderBook` ([OrderBook](#orderbook)): The current order book +- `side` ('buy' | 'sell'): 'buy' or 'sell' +- `amount` (number): Number of contracts to simulate + +**Returns:** Promise<[ExecutionPriceResult](#executionpriceresult)> - Detailed execution result with price, filled amount, and fill status + +**Example:** + +```typescript +const orderBook = await exchange.fetchOrderBook("abc123") +await exchange.getExecutionPriceDetailed(orderBook, "buy", 50) +``` + + +--- +### `filterMarkets` + +Filter a list of markets by criteria. + + +**Signature:** + +```typescript +async filterMarkets(markets: UnifiedMarket[], criteria: string | MarketFilterCriteria | MarketFilterFunction): Promise +``` + +**Parameters:** + +- `markets` ([UnifiedMarket](#unifiedmarket)[]): Array of markets to filter +- `criteria` (string | MarketFilterCriteria | MarketFilterFunction): Filter criteria: string (text search), object (structured), or function (predicate) + +**Returns:** Promise<[UnifiedMarket](#unifiedmarket)[]> - Filtered array of markets + +**Example:** + +```typescript +const markets = await exchange.fetchMarkets({ query: "Trump" }) +await exchange.filterMarkets(markets, "Trump") +``` + + +--- +### `filterEvents` + +Filter a list of events by criteria. + + +**Signature:** + +```typescript +async filterEvents(events: UnifiedEvent[], criteria: string | EventFilterCriteria | EventFilterFunction): Promise +``` + +**Parameters:** + +- `events` ([UnifiedEvent](#unifiedevent)[]): Array of events to filter +- `criteria` (string | EventFilterCriteria | EventFilterFunction): Filter criteria: string (text search), object (structured), or function (predicate) + +**Returns:** Promise<[UnifiedEvent](#unifiedevent)[]> - Filtered array of events + +**Example:** + +```typescript +const events = await exchange.fetchEvents({ query: "Trump" }) +await exchange.filterEvents(events, "Trump") +``` + + +--- +### `watchOrderBook` + +Watch order book updates in real-time via WebSocket. + + +**Signature:** + +```typescript +async watchOrderBook(outcomeId: string, limit?: number, params: Record): Promise +``` + +**Parameters:** + +- `outcomeId` (string): The Outcome ID to watch +- `limit` (number) - **Optional**: Optional limit for orderbook depth +- `params` (Record): Optional exchange-specific parameters + +**Returns:** Promise<[OrderBook](#orderbook)> - Promise that resolves with the current orderbook state + +**Example:** + +```typescript +await exchange.watchOrderBook("abc123", 10, {}) +``` + + +--- +### `watchOrderBooks` + +Watch multiple order books simultaneously via WebSocket. + + +**Signature:** + +```typescript +async watchOrderBooks(outcomeIds: string[], limit?: number, params: Record): Promise> +``` + +**Parameters:** + +- `outcomeIds` (string[]): Array of Outcome IDs to watch +- `limit` (number) - **Optional**: Optional limit for orderbook depth +- `params` (Record): Optional exchange-specific parameters + +**Returns:** Promise> - Promise that resolves with order books keyed by ID + +**Example:** + +```typescript +await exchange.watchOrderBooks(["12345"], 10, {}) +``` + + +--- +### `unwatchOrderBook` + +Unsubscribe from a previously watched order book stream. + + +**Signature:** + +```typescript +async unwatchOrderBook(outcomeId: string): Promise +``` + +**Parameters:** + +- `outcomeId` (string): The Outcome ID to stop watching + +**Returns:** Promise - Result + +**Example:** + +```typescript +await exchange.unwatchOrderBook("abc123") +``` + + +--- +### `watchTrades` + +Watch trade executions in real-time via WebSocket. + + +**Signature:** + +```typescript +async watchTrades(outcomeId: string, address?: string, since?: number, limit?: number): Promise +``` + +**Parameters:** + +- `outcomeId` (string): The Outcome ID to watch +- `address` (string) - **Optional**: Public wallet address +- `since` (number) - **Optional**: Optional timestamp to filter trades from +- `limit` (number) - **Optional**: Optional limit for number of trades + +**Returns:** Promise<[Trade](#trade)[]> - Promise that resolves with recent trades + +**Example:** + +```typescript +await exchange.watchTrades("abc123", "0xabc...", 1710000000000, 50) +``` + + +--- +### `watchAddress` + +Stream activity for a public wallet address + + +**Signature:** + +```typescript +async watchAddress(address: string, types?: SubscriptionOption[]): Promise +``` + +**Parameters:** + +- `address` (string): Public wallet address to watch +- `types` (SubscriptionOption[]) - **Optional**: Subset of activity to watch (default: all types) + +**Returns:** Promise - Promise that resolves with the latest SubscribedAddressSnapshot snapshot + +**Example:** + +```typescript +await exchange.watchAddress("0xabc...", ["trades"]) +``` + + +--- +### `unwatchAddress` + +Stop watching a previously registered wallet address and release its resource updates. + + +**Signature:** + +```typescript +async unwatchAddress(address: string): Promise +``` + +**Parameters:** + +- `address` (string): Public wallet address to stop watching + +**Returns:** Promise - Result + +**Example:** + +```typescript +await exchange.unwatchAddress("0xabc...") +``` + + +--- +### `close` + +Close all WebSocket connections and clean up resources. + + +**Signature:** + +```typescript +async close(): Promise +``` + +**Parameters:** + +- None + +**Returns:** Promise - Result + +**Example:** + +```typescript +await exchange.close() +``` + + +--- +### `fetchMarketMatches` + +Find the same or related market on other venues. Two modes: + + +**Signature:** + +```typescript +async fetchMarketMatches(params?: FetchMarketMatchesParams): Promise +``` + +**Parameters:** + +- `params` ([FetchMarketMatchesParams](#fetchmarketmatchesparams)) - **Optional**: Match filter parameters + +**Returns:** Promise<[MatchResult](#matchresult)[]> - Array of matched markets with relation and confidence + +**Example:** + +```typescript +await exchange.fetchMarketMatches() +``` + + +--- +### `fetchMatches` + +fetchMatches + + +**Signature:** + +```typescript +async fetchMatches(params: FetchMatchesParams): Promise +``` + +**Parameters:** + +- `params` (FetchMatchesParams): params + +**Returns:** Promise<[MatchResult](#matchresult)[]> - Result + +**Example:** + +```typescript +await exchange.fetchMatches() +``` + + +--- +### `fetchEventMatches` + +Find the same or related event on other venues. Two modes: + + +**Signature:** + +```typescript +async fetchEventMatches(params?: FetchEventMatchesParams): Promise +``` + +**Parameters:** + +- `params` ([FetchEventMatchesParams](#fetcheventmatchesparams)) - **Optional**: Event match filter parameters + +**Returns:** Promise<[EventMatchResult](#eventmatchresult)[]> - Array of matched events with market-level match details + +**Example:** + +```typescript +await exchange.fetchEventMatches() +``` + + +--- +### `compareMarketPrices` + +Compare live prices for the same market across venues. Finds identity matches and returns side-by-side best bid/ask prices so you can spot price differences at a glance. + + +**Signature:** + +```typescript +async compareMarketPrices(params: CompareMarketPricesParams): Promise +``` + +**Parameters:** + +- `params` (CompareMarketPricesParams): Match filter parameters (uses relation: 'identity' internally) + +**Returns:** Promise<[PriceComparison](#pricecomparison)[]> - Array of price comparisons across venues + +**Example:** + +```typescript +await exchange.compareMarketPrices() +``` + + +--- +### `fetchRelatedMarkets` + +Find related markets across venues. Discovers subset/superset market relationships + + +**Signature:** + +```typescript +async fetchRelatedMarkets(params: FetchMatchesParams): Promise +``` + +**Parameters:** + +- `params` (FetchMatchesParams): Match filter parameters + +**Returns:** Promise<[PriceComparison](#pricecomparison)[]> - Array of subset/superset matches with live prices + +**Example:** + +```typescript +await exchange.fetchRelatedMarkets() +``` + + +--- +### `fetchMatchedMarkets` + +fetchMatchedMarkets + + +**Signature:** + +```typescript +async fetchMatchedMarkets(params?: FetchMatchedMarketsParams): Promise +``` + +**Parameters:** + +- `params` ([FetchMatchedMarketsParams](#fetchmatchedmarketsparams)) - **Optional**: params + +**Returns:** Promise<[MatchedMarketPair](#matchedmarketpair)[]> - Result + +**Example:** + +```typescript +await exchange.fetchMatchedMarkets() +``` + + +--- +### `fetchMatchedPrices` + +fetchMatchedPrices + + +**Signature:** + +```typescript +async fetchMatchedPrices(params?: FetchMatchedPricesParams): Promise +``` + +**Parameters:** + +- `params` (FetchMatchedPricesParams) - **Optional**: Price comparison parameters (minDifference, category, limit) + +**Returns:** Promise - Array of matched market pairs with prices from each venue + +**Example:** + +```typescript +await exchange.fetchMatchedPrices() +``` + + +--- +### `fetchHedges` + +fetchHedges + + +**Signature:** + +```typescript +async fetchHedges(params: FetchMatchesParams): Promise +``` + +**Parameters:** + +- `params` (FetchMatchesParams): Match filter parameters + +**Returns:** Promise<[PriceComparison](#pricecomparison)[]> - Array of subset/superset matches with live prices + +**Example:** + +```typescript +await exchange.fetchHedges() +``` + + +--- +### `fetchArbitrage` + +fetchArbitrage + + +**Signature:** + +```typescript +async fetchArbitrage(params?: FetchArbitrageParams): Promise +``` + +**Parameters:** + +- `params` ([FetchArbitrageParams](#fetcharbitrageparams)) - **Optional**: Arbitrage scan parameters (minSpread, category, limit) + +**Returns:** Promise<[ArbitrageOpportunity](#arbitrageopportunity)[]> - Array of arbitrage opportunities sorted by spread + +**Example:** + +```typescript +await exchange.fetchArbitrage() +``` + + +--- +### `watchPrices` + +Watch AMM price updates for a market address (Limitless only). + +> **Note**: This method is only available on **limitless** exchange. + + +**Signature:** + +```typescript +async watchPrices(marketAddress: string, callback: (data: any) => void): Promise +``` + +**Parameters:** + +- `marketAddress` (string): Market contract address +- `callback` ((data: any) => void): Callback for price updates + +**Returns:** Promise - Result + +**Example:** + +```typescript +await exchange.watchPrices("0xabc...", (data) => { void data }) +``` + + +--- +### `watchUserPositions` + +Watch user positions in real-time (Limitless only). + +> **Note**: This method is only available on **limitless** exchange. + + +**Signature:** + +```typescript +async watchUserPositions(callback: (data: any) => void): Promise +``` + +**Parameters:** + +- `callback` ((data: any) => void): Callback for position updates + +**Returns:** Promise - Result + +**Example:** + +```typescript +await exchange.watchUserPositions((data) => { void data }) +``` + + +--- +### `watchUserTransactions` + +Watch user transactions in real-time (Limitless only). + +> **Note**: This method is only available on **limitless** exchange. + + +**Signature:** + +```typescript +async watchUserTransactions(callback: (data: any) => void): Promise +``` + +**Parameters:** + +- `callback` ((data: any) => void): Callback for transaction updates + +**Returns:** Promise - Result + +**Example:** + +```typescript +await exchange.watchUserTransactions((data) => { void data }) +``` + + +--- +### `initAuth` + +Initialize L2 API credentials for implicit API signing. + +> **Note**: This method is only available on **polymarket** exchange. + + +**Signature:** + +```typescript +async initAuth(): Promise +``` + +**Parameters:** + +- None + +**Returns:** Promise - Result + +**Example:** + +```typescript +await exchange.initAuth() +``` + + +--- +### `preWarmMarket` + +Pre-warm the SDK's internal caches for a market outcome. + +> **Note**: This method is only available on **polymarket** exchange. + + +**Signature:** + +```typescript +async preWarmMarket(outcomeId: string): Promise +``` + +**Parameters:** + +- `outcomeId` (string): The CLOB Token ID for the outcome (use `outcome.outcomeId`) + +**Returns:** Promise - Result + +**Example:** + +```typescript +await exchange.preWarmMarket("abc123") +``` + + +--- +### `getEventById` + +Fetch a single event by its numeric ID (Probable only). + +> **Note**: This method is only available on **probable** exchange. + + +**Signature:** + +```typescript +async getEventById(id: string): Promise +``` + +**Parameters:** + +- `id` (string): The numeric event ID + +**Returns:** Promise - The UnifiedEvent, or null if not found + +**Example:** + +```typescript +await exchange.getEventById("12345") +``` + + +--- +### `getEventBySlug` + +Fetch a single event by its URL slug (Probable only). + +> **Note**: This method is only available on **probable** exchange. + + +**Signature:** + +```typescript +async getEventBySlug(slug: string): Promise +``` + +**Parameters:** + +- `slug` (string): The event's URL slug (e.g. `"trump-2024-election"`) + +**Returns:** Promise - The UnifiedEvent, or null if not found + +**Example:** + +```typescript +await exchange.getEventBySlug("will-trump-win") +``` + + +--- +### `watchAllOrderBooks` + +Stream all orderbook updates across venues via the hosted WebSocket API. + + +**Signature:** + +```typescript +async watchAllOrderBooks(venues?: string[]): Promise +``` + +**Parameters:** + +- `venues` (string[]) - **Optional**: Optional venue filter. Defaults to this exchange's venue + +**Returns:** Promise - Next event with source, symbol, and orderbook + +**Example:** + +```typescript +await exchange.watchAllOrderBooks(["polymarket", "limitless"]) +``` + + +--- +### `firehose` + +Stream all orderbook updates across venues. + + +**Signature:** + +```typescript +async firehose(venues?: string[]): Promise +``` + +**Parameters:** + +- `venues` (string[]) - **Optional**: Optional venue filter + +**Returns:** Promise - Next event with source, symbol, and orderbook + +**Example:** + +```typescript +await exchange.firehose(["polymarket", "limitless"]) +``` + + +--- + +## Complete Trading Workflow + +```typescript +import pmxt from 'pmxtjs'; -Cancel an existing open order. +const exchange = new pmxt.Polymarket({ + privateKey: process.env.POLYMARKET_PRIVATE_KEY +}); +// 1. Check balance +const [balance] = await exchange.fetchBalance(); +console.log(`Available: $${balance.available}`); -**Signature:** +// 2. Search for a market +const markets = await exchange.fetchMarkets({ query: 'Trump' }); +const market = markets[0]; +const outcome = market.yes; +if (!outcome) { + throw new Error('Market has no YES outcome'); +} -```typescript -async cancelOrder(orderId: string): Promise -``` +console.log(market.title); +console.log(`Price: ${(outcome.price * 100).toFixed(1)}%`); -**Parameters:** +// 3. Place a limit order +const order = await exchange.createOrder({ + outcome, + side: 'buy', + type: 'limit', + amount: 10, + price: 0.50 +}); -- `orderId` (string): The order ID to cancel +console.log(`Order placed: ${order.id}`); -**Returns:** Promise<[Order](#order)> - The cancelled order - -**Example:** - -```typescript -await exchange.cancelOrder("ord-001") -``` - - ---- -### `fetchOrder` - -Fetch a specific order by ID. - - -**Signature:** - -```typescript -async fetchOrder(orderId: string): Promise -``` - -**Parameters:** - -- `orderId` (string): The order ID to look up - -**Returns:** Promise<[Order](#order)> - The order details - -**Example:** - -```typescript -await exchange.fetchOrder("ord-001") -``` - - ---- -### `fetchOpenOrders` - -Fetch all open orders, optionally filtered by market. - - -**Signature:** - -```typescript -async fetchOpenOrders(marketId?: string): Promise -``` - -**Parameters:** - -- `marketId` (string) - **Optional**: Optional market ID to filter by - -**Returns:** Promise<[Order](#order)[]> - Array of open orders - -**Example:** - -```typescript -await exchange.fetchOpenOrders("12345") -``` - - ---- -### `fetchMyTrades` - -Fetch authenticated user trade history. - - -**Signature:** - -```typescript -async fetchMyTrades(params?: MyTradesParams): Promise -``` - -**Parameters:** - -- `params` ([MyTradesParams](#mytradesparams)) - **Optional**: Optional trade history filters - - `params.outcomeId` - Filter by outcome token ID - - `params.marketId` - Filter by market ID or ticker - - `params.since` - Start timestamp or ISO date - - `params.until` - End timestamp or ISO date - - `params.limit` - Maximum number of trades - - `params.cursor` - Pagination cursor - -**Returns:** Promise<[UserTrade](#usertrade)[]> - Array of user trades - -**Example:** - -```typescript -await exchange.fetchMyTrades({ limit: 10 }) -``` - - ---- -### `fetchClosedOrders` - -Fetch authenticated closed orders. - - -**Signature:** - -```typescript -async fetchClosedOrders(params?: OrderHistoryParams): Promise -``` - -**Parameters:** - -- `params` ([OrderHistoryParams](#orderhistoryparams)) - **Optional**: Optional order history filters - - `params.marketId` - Filter by market ID or ticker - - `params.since` - Start timestamp or ISO date - - `params.until` - End timestamp or ISO date - - `params.limit` - Maximum number of orders - - `params.cursor` - Pagination cursor - -**Returns:** Promise<[Order](#order)[]> - Array of closed orders - -**Example:** - -```typescript -await exchange.fetchClosedOrders({ marketId: "12345", limit: 10 }) -``` - - ---- -### `fetchAllOrders` - -Fetch authenticated order history across open and closed orders. - - -**Signature:** - -```typescript -async fetchAllOrders(params?: OrderHistoryParams): Promise -``` - -**Parameters:** - -- `params` ([OrderHistoryParams](#orderhistoryparams)) - **Optional**: Optional order history filters - - `params.marketId` - Filter by market ID or ticker - - `params.since` - Start timestamp or ISO date - - `params.until` - End timestamp or ISO date - - `params.limit` - Maximum number of orders - - `params.cursor` - Pagination cursor - -**Returns:** Promise<[Order](#order)[]> - Array of orders - -**Example:** - -```typescript -await exchange.fetchAllOrders({ marketId: "12345", limit: 10 }) -``` - - ---- -### `fetchPositions` - -Fetch current user positions across all markets. - - -**Signature:** - -```typescript -async fetchPositions(address?: string): Promise -``` - -**Parameters:** - -- `address` (string) - **Optional**: Optional public wallet address - -**Returns:** Promise<[Position](#position)[]> - Array of user positions - -**Example:** - -```typescript -await exchange.fetchPositions("0xabc...") -``` - - ---- -### `fetchBalance` - -Fetch account balances. - - -**Signature:** - -```typescript -async fetchBalance(address?: string): Promise -``` - -**Parameters:** - -- `address` (string) - **Optional**: Optional public wallet address - -**Returns:** Promise<[Balance](#balance)[]> - Array of account balances - -**Example:** - -```typescript -await exchange.fetchBalance("0xabc...") -``` - - ---- -### `getExecutionPrice` - -Calculate the volume-weighted average execution price for a given order size. - - -**Signature:** - -```typescript -getExecutionPrice(orderBook: OrderBook, side: 'buy' | 'sell', amount: number): number -``` - -**Parameters:** - -- `orderBook` ([OrderBook](#orderbook)): The current order book -- `side` ('buy' | 'sell'): 'buy' or 'sell' -- `amount` (number): Number of contracts to simulate - -**Returns:** number - Average execution price, or 0 if insufficient liquidity - -**Example:** - -```typescript -const orderBook = await exchange.fetchOrderBook("abc123") -exchange.getExecutionPrice(orderBook, "buy", 50) -``` - - ---- -### `getExecutionPriceDetailed` - -Calculate detailed execution price information including partial fill data. - - -**Signature:** - -```typescript -async getExecutionPriceDetailed(orderBook: OrderBook, side: 'buy' | 'sell', amount: number): Promise -``` - -**Parameters:** - -- `orderBook` ([OrderBook](#orderbook)): The current order book -- `side` ('buy' | 'sell'): 'buy' or 'sell' -- `amount` (number): Number of contracts to simulate - -**Returns:** Promise<[ExecutionPriceResult](#executionpriceresult)> - Detailed execution result with price, filled amount, and fill status - -**Example:** - -```typescript -const orderBook = await exchange.fetchOrderBook("abc123") -await exchange.getExecutionPriceDetailed(orderBook, "buy", 50) -``` - - ---- -### `filterMarkets` - -Filter a list of markets by criteria. - - -**Signature:** - -```typescript -async filterMarkets(markets: UnifiedMarket[], criteria: string | MarketFilterCriteria | MarketFilterFunction): Promise -``` - -**Parameters:** - -- `markets` ([UnifiedMarket](#unifiedmarket)[]): Array of markets to filter -- `criteria` (string | MarketFilterCriteria | MarketFilterFunction): Filter criteria: string (text search), object (structured), or function (predicate) - -**Returns:** Promise<[UnifiedMarket](#unifiedmarket)[]> - Filtered array of markets - -**Example:** - -```typescript -const markets = await exchange.fetchMarkets({ query: "Trump" }) -await exchange.filterMarkets(markets, "Trump") -``` - - ---- -### `filterEvents` - -Filter a list of events by criteria. - - -**Signature:** - -```typescript -async filterEvents(events: UnifiedEvent[], criteria: string | EventFilterCriteria | EventFilterFunction): Promise -``` - -**Parameters:** - -- `events` ([UnifiedEvent](#unifiedevent)[]): Array of events to filter -- `criteria` (string | EventFilterCriteria | EventFilterFunction): Filter criteria: string (text search), object (structured), or function (predicate) - -**Returns:** Promise<[UnifiedEvent](#unifiedevent)[]> - Filtered array of events - -**Example:** - -```typescript -const events = await exchange.fetchEvents({ query: "Trump" }) -await exchange.filterEvents(events, "Trump") -``` - - ---- -### `watchOrderBook` - -Watch order book updates in real-time via WebSocket. - - -**Signature:** - -```typescript -async watchOrderBook(outcomeId: string, limit?: number, params: Record): Promise -``` - -**Parameters:** - -- `outcomeId` (string): The Outcome ID to watch -- `limit` (number) - **Optional**: Optional limit for orderbook depth -- `params` (Record): Optional exchange-specific parameters - -**Returns:** Promise<[OrderBook](#orderbook)> - Promise that resolves with the current orderbook state - -**Example:** - -```typescript -await exchange.watchOrderBook("abc123", 10, {}) -``` - - ---- -### `watchOrderBooks` - -Watch multiple order books simultaneously via WebSocket. - - -**Signature:** - -```typescript -async watchOrderBooks(outcomeIds: string[], limit?: number, params: Record): Promise> -``` - -**Parameters:** - -- `outcomeIds` (string[]): Array of Outcome IDs to watch -- `limit` (number) - **Optional**: Optional limit for orderbook depth -- `params` (Record): Optional exchange-specific parameters - -**Returns:** Promise> - Promise that resolves with order books keyed by ID - -**Example:** - -```typescript -await exchange.watchOrderBooks(["12345"], 10, {}) -``` - - ---- -### `unwatchOrderBook` - -Unsubscribe from a previously watched order book stream. - - -**Signature:** - -```typescript -async unwatchOrderBook(outcomeId: string): Promise -``` - -**Parameters:** - -- `outcomeId` (string): The Outcome ID to stop watching - -**Returns:** Promise - Result - -**Example:** - -```typescript -await exchange.unwatchOrderBook("abc123") -``` - - ---- -### `watchTrades` - -Watch trade executions in real-time via WebSocket. - - -**Signature:** - -```typescript -async watchTrades(outcomeId: string, address?: string, since?: number, limit?: number): Promise -``` - -**Parameters:** - -- `outcomeId` (string): The Outcome ID to watch -- `address` (string) - **Optional**: Public wallet address -- `since` (number) - **Optional**: Optional timestamp to filter trades from -- `limit` (number) - **Optional**: Optional limit for number of trades - -**Returns:** Promise<[Trade](#trade)[]> - Promise that resolves with recent trades - -**Example:** - -```typescript -await exchange.watchTrades("abc123", "0xabc...", 1710000000000, 50) -``` - - ---- -### `watchAddress` - -Stream activity for a public wallet address - - -**Signature:** - -```typescript -async watchAddress(address: string, types?: SubscriptionOption[]): Promise -``` - -**Parameters:** - -- `address` (string): Public wallet address to watch -- `types` (SubscriptionOption[]) - **Optional**: Subset of activity to watch (default: all types) - -**Returns:** Promise - Promise that resolves with the latest SubscribedAddressSnapshot snapshot - -**Example:** - -```typescript -await exchange.watchAddress("0xabc...", ["trades"]) -``` - - ---- -### `unwatchAddress` - -Stop watching a previously registered wallet address and release its resource updates. - - -**Signature:** - -```typescript -async unwatchAddress(address: string): Promise -``` - -**Parameters:** - -- `address` (string): Public wallet address to stop watching - -**Returns:** Promise - Result - -**Example:** - -```typescript -await exchange.unwatchAddress("0xabc...") -``` - - ---- -### `close` - -Close all WebSocket connections and clean up resources. - - -**Signature:** - -```typescript -async close(): Promise -``` - -**Parameters:** - -- None - -**Returns:** Promise - Result - -**Example:** - -```typescript -await exchange.close() -``` - - ---- -### `fetchMarketMatches` - -Find the same or related market on other venues. Two modes: - - -**Signature:** - -```typescript -async fetchMarketMatches(params?: FetchMarketMatchesParams): Promise -``` - -**Parameters:** - -- `params` ([FetchMarketMatchesParams](#fetchmarketmatchesparams)) - **Optional**: Match filter parameters - -**Returns:** Promise<[MatchResult](#matchresult)[]> - Array of matched markets with relation and confidence - -**Example:** - -```typescript -await exchange.fetchMarketMatches() -``` - - ---- -### `fetchMatches` - -fetchMatches - - -**Signature:** - -```typescript -async fetchMatches(params: FetchMatchesParams): Promise -``` - -**Parameters:** - -- `params` (FetchMatchesParams): params - -**Returns:** Promise<[MatchResult](#matchresult)[]> - Result - -**Example:** - -```typescript -await exchange.fetchMatches() -``` - - ---- -### `fetchEventMatches` - -Find the same or related event on other venues. Two modes: - - -**Signature:** - -```typescript -async fetchEventMatches(params?: FetchEventMatchesParams): Promise -``` - -**Parameters:** - -- `params` ([FetchEventMatchesParams](#fetcheventmatchesparams)) - **Optional**: Event match filter parameters - -**Returns:** Promise<[EventMatchResult](#eventmatchresult)[]> - Array of matched events with market-level match details - -**Example:** - -```typescript -await exchange.fetchEventMatches() -``` - - ---- -### `compareMarketPrices` - -Compare live prices for the same market across venues. Finds identity matches and returns side-by-side best bid/ask prices so you can spot price differences at a glance. - - -**Signature:** - -```typescript -async compareMarketPrices(params: FetchMatchesParams): Promise -``` - -**Parameters:** - -- `params` (FetchMatchesParams): Match filter parameters (uses relation: 'identity' internally) - -**Returns:** Promise<[PriceComparison](#pricecomparison)[]> - Array of price comparisons across venues - -**Example:** - -```typescript -await exchange.compareMarketPrices() -``` - - ---- -### `fetchRelatedMarkets` - -Find related markets across venues. Discovers subset/superset market relationships - - -**Signature:** - -```typescript -async fetchRelatedMarkets(params: FetchMatchesParams): Promise -``` - -**Parameters:** - -- `params` (FetchMatchesParams): Match filter parameters - -**Returns:** Promise<[PriceComparison](#pricecomparison)[]> - Array of subset/superset matches with live prices - -**Example:** - -```typescript -await exchange.fetchRelatedMarkets() -``` - - ---- -### `fetchMatchedMarkets` - -fetchMatchedMarkets - - -**Signature:** - -```typescript -async fetchMatchedMarkets(params?: FetchMatchedMarketsParams): Promise -``` - -**Parameters:** - -- `params` ([FetchMatchedMarketsParams](#fetchmatchedmarketsparams)) - **Optional**: params - -**Returns:** Promise<[MatchedMarketPair](#matchedmarketpair)[]> - Result - -**Example:** - -```typescript -await exchange.fetchMatchedMarkets() -``` - - ---- -### `fetchMatchedPrices` - -fetchMatchedPrices - - -**Signature:** - -```typescript -async fetchMatchedPrices(params?: FetchMatchedPricesParams): Promise -``` - -**Parameters:** - -- `params` (FetchMatchedPricesParams) - **Optional**: Price comparison parameters (minDifference, category, limit) - -**Returns:** Promise - Array of matched market pairs with prices from each venue - -**Example:** - -```typescript -await exchange.fetchMatchedPrices() -``` - - ---- -### `fetchHedges` - -fetchHedges - - -**Signature:** - -```typescript -async fetchHedges(params: FetchMatchesParams): Promise -``` - -**Parameters:** - -- `params` (FetchMatchesParams): Match filter parameters - -**Returns:** Promise<[PriceComparison](#pricecomparison)[]> - Array of subset/superset matches with live prices - -**Example:** - -```typescript -await exchange.fetchHedges() -``` - - ---- -### `fetchArbitrage` - -fetchArbitrage - - -**Signature:** - -```typescript -async fetchArbitrage(params?: FetchArbitrageParams): Promise -``` - -**Parameters:** - -- `params` ([FetchArbitrageParams](#fetcharbitrageparams)) - **Optional**: Arbitrage scan parameters (minSpread, category, limit) - -**Returns:** Promise<[ArbitrageOpportunity](#arbitrageopportunity)[]> - Array of arbitrage opportunities sorted by spread - -**Example:** - -```typescript -await exchange.fetchArbitrage() -``` - - ---- -### `watchPrices` - -Watch AMM price updates for a market address (Limitless only). - -> **Note**: This method is only available on **limitless** exchange. - - -**Signature:** - -```typescript -async watchPrices(marketAddress: string, callback: (data: any) => void): Promise -``` - -**Parameters:** - -- `marketAddress` (string): Market contract address -- `callback` ((data: any) => void): Callback for price updates - -**Returns:** Promise - Result - -**Example:** - -```typescript -await exchange.watchPrices("0xabc...", (data) => { void data }) -``` - - ---- -### `watchUserPositions` - -Watch user positions in real-time (Limitless only). - -> **Note**: This method is only available on **limitless** exchange. - - -**Signature:** - -```typescript -async watchUserPositions(callback: (data: any) => void): Promise -``` - -**Parameters:** - -- `callback` ((data: any) => void): Callback for position updates - -**Returns:** Promise - Result - -**Example:** - -```typescript -await exchange.watchUserPositions((data) => { void data }) -``` - - ---- -### `watchUserTransactions` - -Watch user transactions in real-time (Limitless only). - -> **Note**: This method is only available on **limitless** exchange. - - -**Signature:** - -```typescript -async watchUserTransactions(callback: (data: any) => void): Promise -``` - -**Parameters:** - -- `callback` ((data: any) => void): Callback for transaction updates - -**Returns:** Promise - Result - -**Example:** - -```typescript -await exchange.watchUserTransactions((data) => { void data }) -``` - - ---- -### `initAuth` - -Initialize L2 API credentials for implicit API signing. - -> **Note**: This method is only available on **polymarket** exchange. - - -**Signature:** - -```typescript -async initAuth(): Promise -``` - -**Parameters:** - -- None - -**Returns:** Promise - Result - -**Example:** - -```typescript -await exchange.initAuth() -``` - - ---- -### `preWarmMarket` - -Pre-warm the SDK's internal caches for a market outcome. - -> **Note**: This method is only available on **polymarket** exchange. - - -**Signature:** - -```typescript -async preWarmMarket(outcomeId: string): Promise -``` - -**Parameters:** - -- `outcomeId` (string): The CLOB Token ID for the outcome (use `outcome.outcomeId`) - -**Returns:** Promise - Result - -**Example:** - -```typescript -await exchange.preWarmMarket("abc123") -``` - - ---- -### `getEventById` - -Fetch a single event by its numeric ID (Probable only). - -> **Note**: This method is only available on **probable** exchange. - - -**Signature:** - -```typescript -async getEventById(id: string): Promise -``` - -**Parameters:** - -- `id` (string): The numeric event ID - -**Returns:** Promise - The UnifiedEvent, or null if not found - -**Example:** - -```typescript -await exchange.getEventById("12345") -``` - - ---- -### `getEventBySlug` - -Fetch a single event by its URL slug (Probable only). - -> **Note**: This method is only available on **probable** exchange. - - -**Signature:** - -```typescript -async getEventBySlug(slug: string): Promise -``` - -**Parameters:** - -- `slug` (string): The event's URL slug (e.g. `"trump-2024-election"`) - -**Returns:** Promise - The UnifiedEvent, or null if not found - -**Example:** - -```typescript -await exchange.getEventBySlug("will-trump-win") -``` - - ---- -### `watchAllOrderBooks` - -Stream all orderbook updates across venues via the hosted WebSocket API. - - -**Signature:** - -```typescript -async watchAllOrderBooks(venues?: string[]): Promise -``` - -**Parameters:** - -- `venues` (string[]) - **Optional**: Optional venue filter. Defaults to this exchange's venue - -**Returns:** Promise - Next event with source, symbol, and orderbook - -**Example:** - -```typescript -await exchange.watchAllOrderBooks(["polymarket", "limitless"]) -``` - - ---- -### `firehose` - -Stream all orderbook updates across venues. - - -**Signature:** - -```typescript -async firehose(venues?: string[]): Promise -``` - -**Parameters:** - -- `venues` (string[]) - **Optional**: Optional venue filter - -**Returns:** Promise - Next event with source, symbol, and orderbook - -**Example:** - -```typescript -await exchange.firehose(["polymarket", "limitless"]) -``` - - ---- - -## Complete Trading Workflow - -```typescript -import pmxt from 'pmxtjs'; - -const exchange = new pmxt.Polymarket({ - privateKey: process.env.POLYMARKET_PRIVATE_KEY -}); - -// 1. Check balance -const [balance] = await exchange.fetchBalance(); -console.log(`Available: $${balance.available}`); - -// 2. Search for a market -const markets = await exchange.fetchMarkets({ query: 'Trump' }); -const market = markets[0]; -const outcome = market.yes; -if (!outcome) { - throw new Error('Market has no YES outcome'); -} - -console.log(market.title); -console.log(`Price: ${(outcome.price * 100).toFixed(1)}%`); - -// 3. Place a limit order -const order = await exchange.createOrder({ - outcome, - side: 'buy', - type: 'limit', - amount: 10, - price: 0.50 -}); - -console.log(`Order placed: ${order.id}`); - -// 4. Check order status -const updatedOrder = await exchange.fetchOrder(order.id); -console.log(`Status: ${updatedOrder.status}`); -console.log(`Filled: ${updatedOrder.filled}/${updatedOrder.amount}`); - -// 5. Cancel if needed -if (updatedOrder.status === 'open') { - await exchange.cancelOrder(order.id); - console.log('Order cancelled'); -} - -// 6. Check positions -const positions = await exchange.fetchPositions(); -positions.forEach(pos => { - console.log(`${pos.outcomeLabel}: ${pos.unrealizedPnL > 0 ? '+' : ''}$${pos.unrealizedPnL.toFixed(2)}`); -}); -``` - -## Data Models - -### `ExchangeOptions` - -Constructor-level options for venue clients (Polymarket, Kalshi, Opinion, etc.). -Hosted mode is the default when pmxtApiKey is set; otherwise the SDK runs against -a local sidecar with venue credentials. - -```typescript -interface ExchangeOptions { -pmxtApiKey: string; // PMXT customer API key. When set, the SDK routes to api.pmxt.dev (catalog) and trade.pmxt.dev (trading). Get one at pmxt.dev/dashboard. -walletAddress: string; // EVM wallet address for hosted reads/writes. Required for endpoints that operate on a wallet (balances, positions, trades, open orders). -signer: object; // Optional pre-built signer for hosted writes. If absent and privateKey is set, the SDK auto-wraps privateKey into a signer. -privateKey: string; // Private key. In hosted mode, used to derive an EIP-712 signer for writes (wraps into EthAccountSigner/EthersSigner). In self-hosted mode, used as the venue credential directly. -baseUrl: string; // Explicit base URL override. When unset, the SDK uses api.pmxt.dev when pmxtApiKey is set, or the local sidecar otherwise. -apiKey: string; // Venue-side API key (e.g. Polymarket CLOB key). Only relevant for self-hosted mode. -autoStartServer: boolean; // Auto-start the local sidecar when running self-hosted. Defaults to true when no pmxtApiKey is set, false when hosted. -} -``` - ---- -### `UnifiedMarket` - - - -```typescript -interface UnifiedMarket { -marketId: string; // The unique identifier for this market -eventId: string; // Link to parent event -title: string; // The market title (e.g., "Will BTC close above $100k on Dec 31?"). -description: string; // Long-form market description or resolution criteria. -slug: string; // URL-friendly slug for the market. -outcomes: MarketOutcome[]; // The possible outcomes for this market. -resolutionDate: string; // When the market is scheduled to resolve. Optional because some venues do not publish a cutoff for every market (e.g. Opinion categorical children) — emit `undefined` rather than coercing to epoch. -volume24h: number; // Trading volume over the past 24 hours (USD). -volume: number; // Total / Lifetime volume -liquidity: number; // Current market liquidity (USD). -openInterest: number; // Total value of outstanding contracts (USD). -url: string; // Canonical URL to view the market on the venue. -image: string; // Optional image URL for the market. -category: string; // Optional category label. Venue-defined — common values include "Sports", "Politics", "Crypto", "Economics", "Science", "Culture". Polymarket uses finer-grained categories like "Bitcoin", "Soccer", "Economic Policy"; Kalshi uses broader ones like "Sports" or "Mentions". -tags: string[]; // Optional list of tags. More granular than category — e.g. ["Crypto", "Crypto Prices", "Bitcoin"] or ["Politics", "Elections", "Trump"]. Tags vary by venue: Polymarket markets carry several, Kalshi typically one. -tickSize: number; // Minimum price increment (e.g., 0.01, 0.001) -status: string; // Venue-native lifecycle status (e.g. 'active', 'closed', 'archived'). -contractAddress: string; // On-chain contract / condition identifier where applicable (Polymarket conditionId, etc.). -sourceMetadata: object; // Raw venue-specific metadata not captured by first-class fields (e.g. Kalshi series_ticker / series_title from the parent event, Polymarket series). Passed through verbatim so downstream consumers can recover anything the unified shape omits. Each venue populates what it has. -sourceExchange: string; // The exchange/venue this market originates from (e.g. 'polymarket', 'kalshi'). Populated by the Router. -yes: any; // Convenience accessor for the YES outcome on a binary market. -no: any; // Convenience accessor for the NO outcome on a binary market. -up: any; // Convenience accessor for the UP outcome on a binary market. -down: any; // Convenience accessor for the DOWN outcome on a binary market. -} -``` - ---- -### `MarketOutcome` - - - -```typescript -interface MarketOutcome { -outcomeId: string; // Outcome ID for trading operations (CLOB Token ID for Polymarket, Market Ticker for Kalshi) -marketId: string; // The market this outcome belongs to (set automatically when outcomes are built) -label: string; // Human-readable outcome label (e.g., "Yes", "No", candidate name). -price: number; // Probability between 0.0 and 1.0. -priceChange24h: number; // Change in price over the past 24 hours, as an absolute probability delta. -metadata: object; // Exchange-specific metadata (e.g., clobTokenId for Polymarket) -} -``` - ---- -### `UnifiedEvent` - -A grouped collection of related markets (e.g., "Who will be Fed Chair?" contains multiple candidate markets). - -```typescript -interface UnifiedEvent { -id: string; // The unique identifier for this event. -title: string; // The event title (e.g., "Who will be Fed Chair?"). -description: string; // Long-form event description. -slug: string; // URL-friendly slug for the event. -markets: UnifiedMarket[]; // Markets grouped under this event. -volume24h: number; // Trading volume over the past 24 hours (USD). -volume: number; // Total / Lifetime volume (sum across markets; undefined if no market provides it) -url: string; // Canonical URL to view the event on the venue. -image: string; // Optional image URL for the event. -category: string; // Optional category label. Venue-defined — common values include "Sports", "Politics", "Crypto", "Economics", "Science", "Culture". Polymarket uses finer-grained categories like "Bitcoin", "Soccer", "Economic Policy"; Kalshi uses broader ones like "Sports" or "Mentions". -tags: string[]; // Optional list of tags. More granular than category — e.g. ["Sports", "FIFA World Cup", "2026 FIFA World Cup"] or ["Politics", "Geopolitics", "Middle East"]. Tags vary by venue: Polymarket markets carry several, Kalshi typically one. -sourceMetadata: object; // Raw venue-specific metadata not captured by first-class fields (e.g. Kalshi series_ticker / series_title, Polymarket series). Passed through verbatim so downstream consumers can recover anything the unified shape omits. Each venue populates what it has. -sourceExchange: string; // The exchange/venue this event originates from (e.g. 'polymarket', 'kalshi'). Populated by the Router. -} -``` - ---- -### `UnifiedSeries` - -A recurring grouping of events on a venue — the fourth tier above Event -> Market -> Outcome. Examples: Kalshi `KXATPMATCH` (every ATP tennis match), Polymarket `wta` (every WTA match), Opinion's daily `collection`. Series only exists where the venue exposes a recurring-event concept; venues without one return an empty array from `fetchSeries`. - -```typescript -interface UnifiedSeries { -id: string; // Stable venue-native series identifier (e.g. "KXATPMATCH" on Kalshi, "atp" on Polymarket Gamma, numeric Gamma id). -ticker: string; // Venue-native ticker, when distinct from `id`. -slug: string; // Venue-native slug. -title: string; // Human-readable series title (e.g. "ATP Match Winner", "WTA"). -description: string; // Long-form series description. -recurrence: string; // Recurrence cadence the venue reports ('daily', 'weekly', 'annual', ...). -events: UnifiedEvent[]; // Child events. Populated when fetched by id; the list form usually omits this to keep payloads small. -url: string; // Canonical venue URL for the series. -image: string; // Venue-hosted image. -sourceExchange: string; // The exchange this series originates from. Populated by the Router. -sourceMetadata: object; // Raw venue-specific fields not promoted to first-class columns. -} -``` - ---- -### `PriceCandle` - - - -```typescript -interface PriceCandle { -timestamp: number; // Unix timestamp in milliseconds marking the start of the candle. -open: number; // Opening price for the interval (probability between 0.0 and 1.0). -high: number; // Highest price during the interval (probability between 0.0 and 1.0). -low: number; // Lowest price during the interval (probability between 0.0 and 1.0). -close: number; // Closing price for the interval (probability between 0.0 and 1.0). -volume: number; // Trading volume during the interval. -} -``` - ---- -### `OrderBook` - - - -```typescript -interface OrderBook { -bids: OrderLevel[]; // Order book bid levels, sorted by price descending. -asks: OrderLevel[]; // Order book ask levels, sorted by price ascending. -timestamp: number; // Unix timestamp in milliseconds when the snapshot was taken. -datetime: string; // ISO 8601 datetime string of the snapshot (CCXT-compatible). -isNegRisk: boolean; // Whether the venue marks this snapshot as a negative-risk market. -lastTradePrice: number; // Last traded price from venues that include it with the book snapshot. -sourceMetadata: object; // Venue-specific metadata preserved from the raw order book snapshot. -} -``` - ---- -### `OrderLevel` - - - -```typescript -interface OrderLevel { -price: number; // 0.0 to 1.0 (probability) -size: number; // contracts/shares -orderCount: number; // -} -``` - ---- -### `Trade` - - - -```typescript -interface Trade { -id: string; // The unique identifier for this trade. -timestamp: number; // Unix timestamp in milliseconds when the trade executed. -price: number; // Probability between 0.0 and 1.0. -amount: number; // Size of the trade in contracts/shares. -side: string; // Trade side from the taker's perspective. -outcomeId: string; // The outcome this trade is for (if known). -} -``` - ---- -### `UserTrade` - - - -```typescript -interface UserTrade { -id: string; // The unique identifier for this trade. -timestamp: number; // Unix timestamp in milliseconds when the trade executed. -price: number; // Probability between 0.0 and 1.0. -amount: number; // Size of the trade in contracts/shares. -side: string; // Trade side from the taker's perspective. -outcomeId: string; // The outcome this trade is for (if known). -orderId: string; // The order that produced this trade, if known. -marketId: string; // The market this trade belongs to, when the venue exposes it (e.g. derivable from the fill's coin/asset). -fee: number; // Trading fee paid by the user for this fill, when the venue exposes it. -txHash: string; // Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. -chain: string; // Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. -blockNumber: number; // Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. -} -``` - ---- -### `Order` - - - -```typescript -interface Order { -id: string; // The exchange-assigned order identifier. -marketId: string; // The market this order was placed on. -outcomeId: string; // The outcome this order was placed on. -side: string; // Order side: buy or sell. -type: string; // Order type: market (execute immediately) or limit (resting at a price). -price: number; // For limit orders -amount: number; // Size in contracts/shares -status: string; // Lifecycle status of the order. -filled: number; // Amount filled (USDC cost for buys, shares for sells) -filledShares: number; // Amount filled in shares/contracts (if different from USDC-denominated `filled`). -remaining: number; // Amount remaining -timestamp: number; // Unix timestamp in milliseconds when the order was created. -fee: number; // Fee paid for this order, if known. -feeRateBps: number; // Fee rate in basis points applied to this order (e.g. 100 = 1%). -txHash: string; // Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. -chain: string; // Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. -blockNumber: number; // Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. -} -``` - ---- -### `Position` - -A current position in a market. In hosted mode, `outcomeLabel`, `entryPrice`, `currentPrice` and `unrealizedPnL` may be null when the server cannot derive them (e.g. `with_mtm=false` or no fill history). Venue-direct callers continue to populate every field. - -```typescript -interface Position { -marketId: string; // The market this position is held in. -outcomeId: string; // The outcome this position is held in. -outcomeLabel: string; // Human-readable label for the outcome held. Optional in hosted mode. -size: number; // Positive for long, negative for short -entryPrice: number; // Average entry price for the position (probability between 0.0 and 1.0). Optional in hosted mode when no fill history is available. -currentPrice: number; // Current mark price for the position (probability between 0.0 and 1.0). Optional in hosted mode when mark-to-market data is unavailable. -currentValue: number; // Current market value of the position (size * currentPrice). Null when currentPrice is unavailable. -unrealizedPnL: number; // Unrealized profit or loss at the current price (USD). Optional in hosted mode when mark-to-market data is unavailable. -realizedPnL: number; // Realized profit or loss booked so far (USD). -txHash: string; // Populated in hosted mode after on-chain settlement (from the last fill); null for local-mode and for non-on-chain venues. -chain: string; // Populated in hosted mode after on-chain settlement (from the last fill); null for local-mode and for non-on-chain venues. -blockNumber: number; // Populated in hosted mode after on-chain settlement (from the last fill); null for local-mode and for non-on-chain venues. -} -``` - ---- -### `Balance` - - - -```typescript -interface Balance { -currency: string; // e.g., 'USDC' -total: number; // Total balance including funds locked in open orders. -available: number; // Balance available to trade (excludes locked funds). -locked: number; // In open orders -venue: string; // Hosted-mode: which venue this balance belongs to in a multi-venue response. Null when the balance is venue-agnostic. -} -``` - ---- -### `ExecutionPriceResult` - - - -```typescript -interface ExecutionPriceResult { -price: number; // -filledAmount: number; // -fullyFilled: boolean; // -} -``` - ---- -### `PaginatedMarketsResult` - -Shape returned by fetchMarketsPaginated - -```typescript -interface PaginatedMarketsResult { -data: UnifiedMarket[]; // The page of unified markets -total: number; // Total number of markets in the snapshot -nextCursor: string; // Cursor to pass to the next call, or undefined if this is the last page -} -``` - ---- -### `PaginatedEventsResult` - -Shape returned by fetchEventsPaginated - -```typescript -interface PaginatedEventsResult { -data: UnifiedEvent[]; // The page of unified events -total: number; // Total number of events in the snapshot -nextCursor: string; // Cursor to pass to the next call, or undefined if this is the last page -} -``` - ---- -### `BuiltOrder` - - - -```typescript -interface BuiltOrder { -exchange: string; // The exchange name this order was built for. -params: any; // The original params used to build this order. -signedOrder: object; // For CLOB exchanges (Polymarket): the EIP-712 signed order ready to POST to the exchange's order endpoint. -tx: object; // For on-chain AMM exchanges: the EVM transaction payload. Reserved for future exchanges; no current exchange populates this. -raw: any; // The raw, exchange-native payload. Always present. -expiry: number; // Unix epoch (ms) when this built order expires server-side. Submitting after expiry returns BUILT_ORDER_EXPIRED. -} -``` - ---- -### `MarketFilterCriteria` - - - -```typescript -interface MarketFilterCriteria { -text: string; // -searchIn: string[]; // Default: ['title'] -volume24h: object; // -volume: object; // Filter by total (lifetime) volume range -liquidity: object; // Filter by current liquidity range -openInterest: object; // Filter by open interest range -resolutionDate: object; // -category: string; // Filter by category. Common values: "Sports", "Politics", "Crypto", "Bitcoin", "Soccer", "Economic Policy" (Polymarket) or "Sports", "Mentions" (Kalshi). -tags: string[]; // Match markets that have ANY of these tags. Examples: ["Crypto", "Crypto Prices"], ["Politics", "Elections"], ["Sports", "FIFA World Cup"]. -price: object; // -priceChange24h: object; // -} -``` - ---- -### `EventFilterCriteria` - - - -```typescript -interface EventFilterCriteria { -text: string; // -searchIn: string[]; // Default: ['title'] -category: string; // Filter by category. Common values: "Sports", "Politics", "Crypto", "Bitcoin", "Soccer", "Economic Policy" (Polymarket) or "Sports", "Mentions" (Kalshi). -tags: string[]; // Match events that have ANY of these tags. Examples: ["Crypto"], ["Politics", "Geopolitics", "Middle East"], ["Sports", "FIFA World Cup"]. -marketCount: object; // -totalVolume: object; // Sum of market volumes -} -``` - ---- -### `MatchResult` - - - -```typescript -interface MatchResult { -market: UnifiedMarket; // -sourceMarket: any; // The source market this was matched against. Present in browse mode (no marketId), absent in lookup mode. -relation: string; // -confidence: number; // -reasoning: string; // -bestBid: number; // -bestAsk: number; // -} -``` - ---- -### `EventMatchResult` - - - -```typescript -interface EventMatchResult { -event: UnifiedEvent; // -marketMatches: MatchResult[]; // -} -``` - ---- -### `PriceComparison` - - - -```typescript -interface PriceComparison { -market: UnifiedMarket; // -relation: string; // -confidence: number; // -reasoning: string; // -bestBid: number; // -bestAsk: number; // -venue: string; // -} -``` - ---- -### `ArbitrageOpportunity` - - - -```typescript -interface ArbitrageOpportunity { -marketA: UnifiedMarket; // -marketB: UnifiedMarket; // -spread: number; // -buyVenue: string; // -sellVenue: string; // -buyPrice: number; // -sellPrice: number; // -relation: string; // The set-theoretic relation between the two markets (e.g. identity, subset). -confidence: number; // Match confidence score (0.0 to 1.0). -} -``` - ---- -### `MatchedMarketPair` - - - -```typescript -interface MatchedMarketPair { -marketA: UnifiedMarket; // -marketB: UnifiedMarket; // -priceDifference: number; // -venueA: string; // -venueB: string; // -priceA: number; // -priceB: number; // -relation: string; // The set-theoretic relation between the two markets (e.g. identity, subset). -confidence: number; // Match confidence score (0.0 to 1.0). -reasoning: string; // Why the two markets were matched. -} -``` - ---- -### `ExchangeCredentials` - -Optional authentication credentials for exchange operations. - -```typescript -interface ExchangeCredentials { -apiKey: string; // -apiSecret: string; // Standard API secret for HMAC-authenticated exchanges -passphrase: string; // Standard API passphrase for HMAC-authenticated exchanges -apiToken: string; // Metaculus: `Authorization: Token ` for higher rate limits -privateKey: string; // Required for Polymarket L1 auth -signatureType: any; // 0 = EOA, 1 = Poly Proxy, 2 = Gnosis Safe (Can also use 'eoa', 'polyproxy', 'gnosis_safe') -funderAddress: string; // The address funding the trades (defaults to signer address) -walletAddress: string; // -baseUrl: string; // -} -``` - ---- -### `FeedTicker` - -CCXT-compatible ticker with last trade price and metadata. - -```typescript -interface FeedTicker { -symbol: string; // Trading pair symbol (e.g. BTC/USD) -info: any; // Raw provider-specific data -timestamp: number; // Unix timestamp in milliseconds -datetime: string; // -high: number; // -low: number; // -bid: number; // -bidVolume: number; // -ask: number; // -askVolume: number; // -vwap: number; // -open: number; // -close: number; // -last: number; // Last trade price -previousClose: number; // -change: number; // -percentage: number; // -average: number; // -quoteVolume: number; // -baseVolume: number; // -indexPrice: number; // -markPrice: number; // -} -``` - ---- -### `FeedMarket` - -CCXT-compatible market descriptor for a data feed. - -```typescript -interface FeedMarket { -id: string; // -symbol: string; // -base: string; // -quote: string; // -active: boolean; // -type: string; // -info: any; // Provider-specific metadata -} -``` - ---- -### `FeedOracleRound` - -Chainlink oracle price round. - -```typescript -interface FeedOracleRound { -feed: string; // Price feed pair (e.g. BTC/USD) -roundId: string; // -answer: number; // Oracle price -startedAt: number; // -updatedAt: number; // -answeredInRound: string; // -decimals: number; // -description: string; // -} -``` - ---- - -## Filter Parameters - -### `BaseRequest` - -Base request structure with optional credentials - -```typescript -interface BaseRequest { -credentials?: ExchangeCredentials; // -} -``` - ---- -### `MarketFilterParams` - - - -```typescript -interface MarketFilterParams { -limit?: number; // Maximum number of results to return -offset?: number; // Pagination offset — number of results to skip -sort?: string; // Sort order for results -status?: string; // Filter by market status (default: 'active', 'inactive' and 'closed' are interchangeable) -searchIn?: string; // Where to search (default: 'title') -query?: string; // For keyword search -slug?: string; // For slug/ticker lookup -marketId?: string; // Direct lookup by market ID -outcomeId?: string; // Reverse lookup -- find market containing this outcome -eventId?: string; // Find markets belonging to an event -page?: number; // For pagination (used by Limitless) -similarityThreshold?: number; // For semantic search (used by Limitless) -sourceExchange?: string; // Filter by source venue (e.g. 'polymarket', 'kalshi', 'myriad'). `exchange` is an alias. -exchange?: string; // Alias for `sourceExchange`. -} -``` - ---- -### `EventFetchParams` - - - -```typescript -interface EventFetchParams { -query?: string; // For keyword search -limit?: number; // Maximum number of results to return -cursor?: string; // Opaque venue pagination cursor, where supported. -offset?: number; // Pagination offset — number of results to skip -sort?: string; // Sort order for results -status?: string; // Filter by event status (default: 'active', 'inactive' and 'closed' are interchangeable) -searchIn?: string; // Where to search (default: 'title') -eventId?: string; // Direct lookup by event ID -slug?: string; // Lookup by event slug -series?: string; // Filter events by their parent series. Accepts the venue-native series id / ticker / slug (e.g. Kalshi `"KXATPMATCH"`, Polymarket `"wta"`). Passed through to the vendor where supported, otherwise applied to `sourceMetadata` after fetch. -filter?: any; // Optional client-side filter applied after fetching -category?: string; // Filter by category. Each event belongs to a venue-assigned category such as "Sports", "Politics", "Crypto", "Bitcoin", "Soccer", "Economic Policy" (Polymarket) or "Sports", "Mentions" (Kalshi). -tags?: string[]; // Filter by tags. Returns events matching ANY of the provided tags. Tags are more specific than categories -- for example a "Politics" event might carry tags ["Politics", "Geopolitics", "Middle East", "Iran"]. Common tags include "Crypto", "Elections", "Fed Rates", "FIFA World Cup", "Trump". -sourceExchange?: string; // Filter by source venue (e.g. 'polymarket', 'kalshi', 'myriad'). `exchange` is an alias. -exchange?: string; // Alias for `sourceExchange`. -} -``` - ---- -### `HistoryFilterParams` - -Deprecated - use OHLCVParams or TradesParams instead. Resolution is optional for backward compatibility. - -```typescript -interface HistoryFilterParams { -resolution?: string; // Optional for backward compatibility -start?: string; // Start of the time range -end?: string; // End of the time range -limit?: number; // Maximum number of results to return -} -``` - ---- -### `OHLCVParams` - - - -```typescript -interface OHLCVParams { -resolution: string; // Required for candle aggregation -start?: string; // Start of the time range -end?: string; // End of the time range -limit?: number; // Maximum number of results to return -} -``` - ---- -### `FetchOrderBookParams` - - - -```typescript -interface FetchOrderBookParams { -side?: string; // Outcome side: 'yes' or 'no'. Required for exchanges like Limitless where the API returns a single orderbook per market. -outcome?: string; // Outcome alias: 'yes' or 'no', or an outcome token ID. When set, the first argument is treated as a market ID and this value selects which outcome's order book to fetch. Accepts the literal strings 'yes'/'no' (resolved via a market lookup) or a raw outcome token ID. -since?: number; // Unix timestamp (ms) — fetch a historical snapshot at or before this time, or the start of a range when combined with `until` (hosted API only). -until?: number; // Unix timestamp (ms) — end of a historical range. When combined with `since`, returns an array of reconstructed L2 OrderBook snapshots between `since` and `until` (hosted API only). -} -``` - ---- -### `TradesParams` - - - -```typescript -interface TradesParams { -start?: string; // Start of the time range -end?: string; // End of the time range -limit?: number; // Maximum number of results to return (max {@link MAX_TRADES_LIMIT}) -} -``` - ---- -### `CreateOrderParams` - - - -```typescript -interface CreateOrderParams { -marketId: string; // The market to trade on. -outcomeId: string; // The outcome to trade. -side: string; // Order side: buy or sell. -type: string; // Order type: market (execute immediately) or limit (resting at a price). -amount: number; // Size of the order in contracts/shares. -price?: number; // Required for limit orders -denom?: string; // Hosted mode: amount unit. -slippage_pct?: number; // Hosted mode: maximum market-order slippage percentage. -fee?: number; // Optional fee rate (e.g., 1000 for 0.1%) -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 -} -``` - ---- -### `MyTradesParams` - - - -```typescript -interface MyTradesParams { -outcomeId?: string; // filter to specific outcome/ticker -marketId?: string; // filter to specific market -since?: string; // Only return records after this date -until?: string; // Only return records before this date -limit?: number; // Maximum number of results to return -cursor?: string; // for Kalshi cursor pagination -} -``` - ---- -### `OrderHistoryParams` - - - -```typescript -interface OrderHistoryParams { -marketId?: string; // required for Limitless (slug) -since?: string; // Only return records after this date -until?: string; // Only return records before this date -limit?: number; // Maximum number of results to return -cursor?: string; // Opaque pagination cursor from a previous response -} -``` - ---- -### `FetchMarketMatchesParams` - - - -```typescript -interface FetchMarketMatchesParams { -query?: string; // Keyword search across matched market titles. -category?: string; // Filter matches by category. -market?: any; // Pass a UnifiedMarket directly instead of marketId/slug/url. -marketId?: string; // Lookup a specific market by ID. Omit for browse mode. -slug?: string; // -url?: string; // -relation?: string; // -minConfidence?: number; // -limit?: number; // -includePrices?: boolean; // -minDifference?: number; // Minimum price difference between venues. Browse mode only. -sort?: string; // Sort order. Browse mode only. -} -``` - ---- -### `FetchEventMatchesParams` - - - -```typescript -interface FetchEventMatchesParams { -query?: string; // Keyword search across matched event titles. -category?: string; // Filter matches by category. -event?: any; // Pass a UnifiedEvent directly instead of eventId/slug. -eventId?: string; // Lookup a specific event by ID. Omit for browse mode. -slug?: string; // -relation?: string; // -minConfidence?: number; // -limit?: number; // -includePrices?: boolean; // -} -``` - ---- -### `FetchArbitrageParams` - - - -```typescript -interface FetchArbitrageParams { -minSpread?: number; // -category?: string; // -limit?: number; // -relations?: string[]; // Comma-separated relation types to include (default: 'identity'). -} -``` - ---- -### `FetchMatchedMarketsParams` - - - -```typescript -interface FetchMatchedMarketsParams { -minDifference?: number; // -category?: string; // -limit?: number; // -relations?: string[]; // Comma-separated relation types to include (default: 'identity'). -} -``` - ---- - -### `CreateOrderInput` - -`createOrder` and `buildOrder` accept either explicit `marketId` / `outcomeId` -fields or an outcome object returned by `fetchMarkets`. - -```typescript -type CreateOrderInput = - | (CreateOrderParams & { outcome?: never }) - | (Omit & { - outcome: MarketOutcome; - marketId?: never; - outcomeId?: never; - }); -``` - ---- - -## Low-Level API Reference - -Advanced: call exchange-specific REST endpoints directly via `exchange.callApi(name, params)`. - -```typescript -// Example -const result = await exchange.callApi('operationName', { param: 'value' }); -``` - -### Polymarket - -| `callApi()` name | Method | Path | Summary | Auth | -|-----------------|--------|------|---------|------| -| `getGammaStatus` | `GET` | `/status` | Gamma API Health check | Public | -| `listTeams` | `GET` | `/teams` | List teams | Public | -| `getSportsMetadata` | `GET` | `/sports` | Get sports metadata information | Public | -| `getSportsMarketTypes` | `GET` | `/sports/market-types` | Get valid sports market types | Public | -| `listTags` | `GET` | `/tags` | List tags | Public | -| `getTag` | `GET` | `/tags/{id}` | Get tag by id | Public | -| `getRelatedTagsById` | `GET` | `/tags/{id}/related-tags` | Get related tags (relationships) by tag id | Public | -| `getRelatedTagsBySlug` | `GET` | `/tags/slug/{slug}/related-tags` | Get related tags (relationships) by tag slug | Public | -| `getTagsRelatedToATagById` | `GET` | `/tags/{id}/related-tags/tags` | Get tags related to a tag id | Public | -| `getTagsRelatedToATagBySlug` | `GET` | `/tags/slug/{slug}/related-tags/tags` | Get tags related to a tag slug | Public | -| `listEvents` | `GET` | `/events` | List events | Public | -| `getEvent` | `GET` | `/events/{id}` | Get event by id | Public | -| `getEventTags` | `GET` | `/events/{id}/tags` | Get event tags | Public | -| `getEventBySlug` | `GET` | `/events/slug/{slug}` | Get event by slug | Public | -| `listMarkets` | `GET` | `/markets` | List markets | Public | -| `getMarket` | `GET` | `/markets/{id}` | Get market by id | Public | -| `getMarketTags` | `GET` | `/markets/{id}/tags` | Get market tags by id | Public | -| `getMarketBySlug` | `GET` | `/markets/slug/{slug}` | Get market by slug | Public | -| `listSeries` | `GET` | `/series` | List series | Public | -| `getSeries` | `GET` | `/series/{id}` | Get series by id | Public | -| `listComments` | `GET` | `/comments` | List comments | Public | -| `getCommentsById` | `GET` | `/comments/{id}` | Get comments by comment id | Public | -| `getPublicProfile` | `GET` | `/public-profile` | Get public profile by wallet address | Public | -| `publicSearch` | `GET` | `/public-search` | Search markets, events, and profiles | Public | -| `getBook` | `GET` | `/book` | Get order book summary | Public | -| `postBooks` | `POST` | `/books` | Get multiple order books summaries | Public | -| `getPrice` | `GET` | `/price` | Get market price | Public | -| `getPrices` | `GET` | `/prices` | Get multiple market prices | Public | -| `postPrices` | `POST` | `/prices` | Get multiple market prices by request | Public | -| `getMidpoint` | `GET` | `/midpoint` | Get midpoint price | Public | -| `postSpreads` | `POST` | `/spreads` | Get bid-ask spreads | Public | -| `getPricesHistory` | `GET` | `/prices-history` | Get price history for a traded token | Public | -| `getMarketsByToken` | `GET` | `/markets-by-token/{token_id}` | Get market by token | Public | -| `postAuthApiKey` | `POST` | `/auth/api-key` | Create API Key | Required | -| `getAuthDeriveApiKey` | `GET` | `/auth/derive-api-key` | Derive API Key | Required | -| `postOrder` | `POST` | `/order` | Place Single Order | Required | -| `deleteOrder` | `DELETE` | `/order` | Cancel Single Order | Required | -| `postOrders` | `POST` | `/orders` | Place Multiple Orders (Batch) | Required | -| `deleteOrders` | `DELETE` | `/orders` | Cancel Multiple Orders | Required | -| `deleteCancelAll` | `DELETE` | `/cancel-all` | Cancel All Orders | Required | -| `deleteCancelMarketOrders` | `DELETE` | `/cancel-market-orders` | Cancel Market Orders | Required | -| `postV1Heartbeats` | `POST` | `/v1/heartbeats` | Refresh authenticated session heartbeat | Required | -| `getDataOrder` | `GET` | `/data/order/{id}` | Get Order | Required | -| `getDataOrders` | `GET` | `/data/orders` | Get Active Orders | Required | -| `getDataTrades` | `GET` | `/data/trades` | Get Trades | Required | -| `getOrderScoring` | `GET` | `/order-scoring` | Check Order Reward Scoring | Required | -| `postOrdersScoring` | `POST` | `/orders-scoring` | Check Multiple Orders Scoring | Required | -| `updateBalanceAllowance` | `GET` | `/balance-allowance/update` | Update balance and allowance cache | Required | -| `getGeoblock` | `GET` | `/geoblock` | Check Geoblock Status | Public | -| `getDataApiHealth` | `GET` | `/` | Data API Health check | Public | -| `getPositions` | `GET` | `/positions` | Get current positions for a user | Public | -| `getV1AccountingSnapshot` | `GET` | `/v1/accounting/snapshot` | Download an accounting snapshot (ZIP of CSVs) | Public | -| `getTraded` | `GET` | `/traded` | Get total markets a user has traded | Public | -| `getOi` | `GET` | `/oi` | Get open interest | Public | -| `getLiveVolume` | `GET` | `/live-volume` | Get live volume for an event | Public | -| `getTrades` | `GET` | `/trades` | Get trades for a user or markets | Public | -| `getActivity` | `GET` | `/activity` | Get user activity | Public | -| `getHolders` | `GET` | `/holders` | Get top holders for markets | Public | -| `getValue` | `GET` | `/value` | Get total value of a user's positions | Public | -| `getClosedPositions` | `GET` | `/closed-positions` | Get closed positions for a user | Public | -| `getV1MarketPositions` | `GET` | `/v1/market-positions` | Get positions for a market | Public | -| `getV1Leaderboard` | `GET` | `/v1/leaderboard` | Get trader leaderboard rankings | Public | -| `getV1BuildersLeaderboard` | `GET` | `/v1/builders/leaderboard` | Get aggregated builder leaderboard | Public | - -#### Endpoint Details - -##### `getGammaStatus` - -**GET** `/status` - -Gamma API Health check - - ---- -##### `listTeams` - -**GET** `/teams` - -List teams - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `league` (query, array) -- `name` (query, array) -- `abbreviation` (query, array) - ---- -##### `getSportsMetadata` - -**GET** `/sports` - -Get sports metadata information - - ---- -##### `getSportsMarketTypes` - -**GET** `/sports/market-types` - -Get valid sports market types - - ---- -##### `listTags` - -**GET** `/tags` - -List tags - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `include_template` (query, boolean) -- `is_carousel` (query, boolean) - ---- -##### `getTag` - -**GET** `/tags/{id}` - -Get tag by id - -**Parameters:** -- `` (, string) -- `include_template` (query, boolean) - ---- -##### `getRelatedTagsById` - -**GET** `/tags/{id}/related-tags` - -Get related tags (relationships) by tag id - -**Parameters:** -- `` (, string) -- `omit_empty` (query, boolean) -- `status` (query, string) — enum: `active,closed,all` - ---- -##### `getRelatedTagsBySlug` - -**GET** `/tags/slug/{slug}/related-tags` - -Get related tags (relationships) by tag slug - -**Parameters:** -- `` (, string) -- `omit_empty` (query, boolean) -- `status` (query, string) — enum: `active,closed,all` - ---- -##### `getTagsRelatedToATagById` - -**GET** `/tags/{id}/related-tags/tags` - -Get tags related to a tag id - -**Parameters:** -- `` (, string) -- `omit_empty` (query, boolean) -- `status` (query, string) — enum: `active,closed,all` - ---- -##### `getTagsRelatedToATagBySlug` - -**GET** `/tags/slug/{slug}/related-tags/tags` - -Get tags related to a tag slug - -**Parameters:** -- `` (, string) -- `omit_empty` (query, boolean) -- `status` (query, string) — enum: `active,closed,all` - ---- -##### `listEvents` - -**GET** `/events` - -List events - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `id` (query, array) -- `tag_id` (query, integer) -- `exclude_tag_id` (query, array) -- `slug` (query, array) -- `tag_slug` (query, string) -- `related_tags` (query, boolean) -- `active` (query, boolean) -- `archived` (query, boolean) -- `featured` (query, boolean) -- `cyom` (query, boolean) -- `include_chat` (query, boolean) -- `include_template` (query, boolean) -- `recurrence` (query, string) -- `closed` (query, boolean) -- `liquidity_min` (query, number) -- `liquidity_max` (query, number) -- `volume_min` (query, number) -- `volume_max` (query, number) -- `start_date_min` (query, string) -- `start_date_max` (query, string) -- `end_date_min` (query, string) -- `end_date_max` (query, string) - ---- -##### `getEvent` - -**GET** `/events/{id}` - -Get event by id - -**Parameters:** -- `` (, string) -- `include_chat` (query, boolean) -- `include_template` (query, boolean) - ---- -##### `getEventTags` - -**GET** `/events/{id}/tags` - -Get event tags - -**Parameters:** -- `` (, string) - ---- -##### `getEventBySlug` - -**GET** `/events/slug/{slug}` - -Get event by slug - -**Parameters:** -- `` (, string) -- `include_chat` (query, boolean) -- `include_template` (query, boolean) - ---- -##### `listMarkets` - -**GET** `/markets` - -List markets - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `id` (query, array) -- `slug` (query, array) -- `clob_token_ids` (query, array) -- `condition_ids` (query, array) -- `market_maker_address` (query, array) -- `liquidity_num_min` (query, number) -- `liquidity_num_max` (query, number) -- `volume_num_min` (query, number) -- `volume_num_max` (query, number) -- `start_date_min` (query, string) -- `start_date_max` (query, string) -- `end_date_min` (query, string) -- `end_date_max` (query, string) -- `tag_id` (query, integer) -- `related_tags` (query, boolean) -- `cyom` (query, boolean) -- `uma_resolution_status` (query, string) -- `game_id` (query, string) -- `sports_market_types` (query, array) -- `rewards_min_size` (query, number) -- `question_ids` (query, array) -- `include_tag` (query, boolean) -- `closed` (query, boolean) - ---- -##### `getMarket` - -**GET** `/markets/{id}` - -Get market by id - -**Parameters:** -- `` (, string) -- `include_tag` (query, boolean) - ---- -##### `getMarketTags` - -**GET** `/markets/{id}/tags` - -Get market tags by id - -**Parameters:** -- `` (, string) - ---- -##### `getMarketBySlug` - -**GET** `/markets/slug/{slug}` - -Get market by slug - -**Parameters:** -- `` (, string) -- `include_tag` (query, boolean) - ---- -##### `listSeries` - -**GET** `/series` - -List series - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `slug` (query, array) -- `categories_ids` (query, array) -- `categories_labels` (query, array) -- `closed` (query, boolean) -- `include_chat` (query, boolean) -- `recurrence` (query, string) - ---- -##### `getSeries` - -**GET** `/series/{id}` - -Get series by id - -**Parameters:** -- `` (, string) -- `include_chat` (query, boolean) - ---- -##### `listComments` - -**GET** `/comments` - -List comments - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `parent_entity_type` (query, string) — enum: `Event,Series,market` -- `parent_entity_id` (query, integer) -- `get_positions` (query, boolean) -- `holders_only` (query, boolean) - ---- -##### `getCommentsById` - -**GET** `/comments/{id}` - -Get comments by comment id - -**Parameters:** -- `id` (path, integer) **required** -- `get_positions` (query, boolean) - ---- -##### `getPublicProfile` - -**GET** `/public-profile` - -Get public profile by wallet address - -**Parameters:** -- `address` (query, string) **required** — The wallet address (proxy wallet or user address) - ---- -##### `publicSearch` - -**GET** `/public-search` - -Search markets, events, and profiles - -**Parameters:** -- `q` (query, string) **required** -- `cache` (query, boolean) -- `events_status` (query, string) -- `limit_per_type` (query, integer) -- `page` (query, integer) -- `events_tag` (query, array) -- `keep_closed_markets` (query, integer) -- `sort` (query, string) -- `ascending` (query, boolean) -- `search_tags` (query, boolean) -- `search_profiles` (query, boolean) -- `recurrence` (query, string) -- `exclude_tag_id` (query, array) -- `optimized` (query, boolean) - ---- -##### `getBook` - -**GET** `/book` - -Get order book summary - -**Parameters:** -- `token_id` (query, string) **required** - ---- -##### `postBooks` - -**POST** `/books` - -Get multiple order books summaries - - ---- -##### `getPrice` - -**GET** `/price` - -Get market price - -**Parameters:** -- `token_id` (query, string) **required** -- `side` (query, string) **required** — enum: `BUY,SELL` - ---- -##### `getPrices` - -**GET** `/prices` - -Get multiple market prices - - ---- -##### `postPrices` - -**POST** `/prices` - -Get multiple market prices by request - - ---- -##### `getMidpoint` - -**GET** `/midpoint` - -Get midpoint price - -**Parameters:** -- `token_id` (query, string) **required** - ---- -##### `postSpreads` - -**POST** `/spreads` - -Get bid-ask spreads - - ---- -##### `getPricesHistory` - -**GET** `/prices-history` - -Get price history for a traded token - -**Parameters:** -- `market` (query, string) **required** -- `startTs` (query, number) -- `endTs` (query, number) -- `interval` (query, string) — enum: `1m,1w,1d,6h,1h,max` -- `fidelity` (query, number) - ---- -##### `getMarketsByToken` - -**GET** `/markets-by-token/{token_id}` - -Get market by token - -**Parameters:** -- `token_id` (path, string) **required** - ---- -##### `postAuthApiKey` - -**POST** `/auth/api-key` - -Create API Key *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `getAuthDeriveApiKey` - -**GET** `/auth/derive-api-key` - -Derive API Key *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `postOrder` - -**POST** `/order` - -Place Single Order *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `deleteOrder` - -**DELETE** `/order` - -Cancel Single Order *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `postOrders` - -**POST** `/orders` - -Place Multiple Orders (Batch) *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `deleteOrders` - -**DELETE** `/orders` - -Cancel Multiple Orders *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `deleteCancelAll` - -**DELETE** `/cancel-all` - -Cancel All Orders *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `deleteCancelMarketOrders` - -**DELETE** `/cancel-market-orders` - -Cancel Market Orders *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `postV1Heartbeats` - -**POST** `/v1/heartbeats` - -Refresh authenticated session heartbeat *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `getDataOrder` - -**GET** `/data/order/{id}` - -Get Order *(Auth required)* - -**Parameters:** -- `` (, string) -- `id` (path, string) **required** - ---- -##### `getDataOrders` - -**GET** `/data/orders` - -Get Active Orders *(Auth required)* - -**Parameters:** -- `` (, string) -- `id` (query, string) -- `market` (query, string) -- `asset_id` (query, string) -- `next_cursor` (query, string) — Cursor for keyset pagination - ---- -##### `getDataTrades` - -**GET** `/data/trades` - -Get Trades *(Auth required)* - -**Parameters:** -- `` (, string) -- `id` (query, string) -- `market` (query, string) -- `maker` (query, string) -- `taker` (query, string) -- `before` (query, string) -- `after` (query, string) - ---- -##### `getOrderScoring` - -**GET** `/order-scoring` - -Check Order Reward Scoring *(Auth required)* - -**Parameters:** -- `` (, string) -- `orderId` (query, string) **required** - ---- -##### `postOrdersScoring` - -**POST** `/orders-scoring` - -Check Multiple Orders Scoring *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `updateBalanceAllowance` - -**GET** `/balance-allowance/update` - -Update balance and allowance cache *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `getGeoblock` - -**GET** `/geoblock` - -Check Geoblock Status - - ---- -##### `getDataApiHealth` - -**GET** `/` - -Data API Health check - - ---- -##### `getPositions` - -**GET** `/positions` - -Get current positions for a user - -**Parameters:** -- `user` (query, string) **required** — User address (required) -- `market` (query, array) — Comma-separated list of condition IDs. Mutually exclusive with eventId. -- `eventId` (query, array) — Comma-separated list of event IDs. Mutually exclusive with market. -- `sizeThreshold` (query, number) -- `redeemable` (query, boolean) -- `mergeable` (query, boolean) -- `limit` (query, integer) -- `offset` (query, integer) -- `sortBy` (query, string) — enum: `CURRENT,INITIAL,TOKENS,CASHPNL,PERCENTPNL,TITLE,RESOLVING,PRICE,AVGPRICE` -- `sortDirection` (query, string) — enum: `ASC,DESC` -- `title` (query, string) - ---- -##### `getV1AccountingSnapshot` - -**GET** `/v1/accounting/snapshot` - -Download an accounting snapshot (ZIP of CSVs) - -**Parameters:** -- `user` (query, string) **required** — User address (0x-prefixed) - ---- -##### `getTraded` - -**GET** `/traded` - -Get total markets a user has traded - -**Parameters:** -- `user` (query, string) **required** - ---- -##### `getOi` - -**GET** `/oi` - -Get open interest - -**Parameters:** -- `market` (query, array) - ---- -##### `getLiveVolume` - -**GET** `/live-volume` - -Get live volume for an event - -**Parameters:** -- `id` (query, integer) **required** - ---- -##### `getTrades` - -**GET** `/trades` - -Get trades for a user or markets - -**Parameters:** -- `limit` (query, integer) -- `offset` (query, integer) -- `takerOnly` (query, boolean) -- `filterType` (query, string) — Must be provided together with filterAmount. — enum: `CASH,TOKENS` -- `filterAmount` (query, number) — Must be provided together with filterType. -- `market` (query, array) — Comma-separated list of condition IDs. Mutually exclusive with eventId. -- `eventId` (query, array) — Comma-separated list of event IDs. Mutually exclusive with market. -- `user` (query, string) -- `side` (query, string) — enum: `BUY,SELL` - ---- -##### `getActivity` - -**GET** `/activity` - -Get user activity - -**Parameters:** -- `limit` (query, integer) -- `offset` (query, integer) -- `user` (query, string) **required** -- `market` (query, array) — Comma-separated list of condition IDs. Mutually exclusive with eventId. -- `eventId` (query, array) — Comma-separated list of event IDs. Mutually exclusive with market. -- `type` (query, array) -- `start` (query, integer) -- `end` (query, integer) -- `sortBy` (query, string) — enum: `TIMESTAMP,TOKENS,CASH` -- `sortDirection` (query, string) — enum: `ASC,DESC` -- `side` (query, string) — enum: `BUY,SELL` - ---- -##### `getHolders` - -**GET** `/holders` - -Get top holders for markets - -**Parameters:** -- `limit` (query, integer) — Maximum number of holders to return per token. Capped at 20. -- `market` (query, array) **required** — Comma-separated list of condition IDs. -- `minBalance` (query, integer) - ---- -##### `getValue` - -**GET** `/value` - -Get total value of a user's positions - -**Parameters:** -- `user` (query, string) **required** -- `market` (query, array) - ---- -##### `getClosedPositions` - -**GET** `/closed-positions` - -Get closed positions for a user - -**Parameters:** -- `user` (query, string) **required** — The address of the user in question -- `market` (query, array) — The conditionId of the market in question. Supports multiple csv separated values. Cannot be used with the eventId param. -- `title` (query, string) — Filter by market title -- `eventId` (query, array) — The event id of the event in question. Supports multiple csv separated values. Returns positions for all markets for those event ids. Cannot be used with the market param. -- `limit` (query, integer) — The max number of positions to return -- `offset` (query, integer) — The starting index for pagination -- `sortBy` (query, string) — The sort criteria — enum: `REALIZEDPNL,TITLE,PRICE,AVGPRICE,TIMESTAMP` -- `sortDirection` (query, string) — The sort direction — enum: `ASC,DESC` - ---- -##### `getV1MarketPositions` - -**GET** `/v1/market-positions` - -Get positions for a market - -**Parameters:** -- `market` (query, string) **required** — The condition ID of the market to query positions for -- `user` (query, string) — Filter to a single user by proxy wallet address -- `status` (query, string) — Filter positions by status. -- `OPEN` — Only positions with size > 0.01 -- `CLOSED` — Only positions with size <= 0.01 -- `ALL` — All positions regardless of size - — enum: `OPEN,CLOSED,ALL` -- `sortBy` (query, string) — Sort positions by: -- `TOKENS` — Position size (number of tokens) -- `CASH_PNL` — Unrealized cash PnL -- `REALIZED_PNL` — Realized PnL -- `TOTAL_PNL` — Total PnL (cash_pnl + realized_pnl) - — enum: `TOKENS,CASH_PNL,REALIZED_PNL,TOTAL_PNL` -- `sortDirection` (query, string) — enum: `ASC,DESC` -- `limit` (query, integer) — Max number of positions to return per outcome token -- `offset` (query, integer) — Pagination offset per outcome token - ---- -##### `getV1Leaderboard` - -**GET** `/v1/leaderboard` - -Get trader leaderboard rankings - -**Parameters:** -- `category` (query, string) — Market category for the leaderboard — enum: `OVERALL,POLITICS,SPORTS,CRYPTO,CULTURE,MENTIONS,WEATHER,ECONOMICS,TECH,FINANCE` -- `timePeriod` (query, string) — Time period for leaderboard results — enum: `DAY,WEEK,MONTH,ALL` -- `orderBy` (query, string) — Leaderboard ordering criteria — enum: `PNL,VOL` -- `limit` (query, integer) — Max number of leaderboard traders to return -- `offset` (query, integer) — Starting index for pagination -- `user` (query, string) — Limit leaderboard to a single user by address -- `userName` (query, string) — Limit leaderboard to a single username - ---- -##### `getV1BuildersLeaderboard` - -**GET** `/v1/builders/leaderboard` - -Get aggregated builder leaderboard - -**Parameters:** -- `timePeriod` (query, string) — The time period to aggregate results over. - — enum: `DAY,WEEK,MONTH,ALL` -- `limit` (query, string) - ---- -### Kalshi - -| `callApi()` name | Method | Path | Summary | Auth | -|-----------------|--------|------|---------|------| -| `GetHistoricalCutoff` | `GET` | `/historical/cutoff` | Get Historical Cutoff Timestamps | Public | -| `GetMarketCandlesticksHistorical` | `GET` | `/historical/markets/{ticker}/candlesticks` | Get Historical Market Candlesticks | Public | -| `GetFillsHistorical` | `GET` | `/historical/fills` | Get Historical Fills | Required | -| `GetHistoricalOrders` | `GET` | `/historical/orders` | Get Historical Orders | Required | -| `GetHistoricalMarkets` | `GET` | `/historical/markets` | Get Historical Markets | Public | -| `GetHistoricalMarket` | `GET` | `/historical/markets/{ticker}` | Get Historical Market | Public | -| `GetExchangeStatus` | `GET` | `/exchange/status` | Get Exchange Status | Public | -| `GetExchangeAnnouncements` | `GET` | `/exchange/announcements` | Get Exchange Announcements | Public | -| `GetSeriesFeeChanges` | `GET` | `/series/fee_changes` | Get Series Fee Changes | Public | -| `GetExchangeSchedule` | `GET` | `/exchange/schedule` | Get Exchange Schedule | Public | -| `GetUserDataTimestamp` | `GET` | `/exchange/user_data_timestamp` | Get User Data Timestamp | Public | -| `GetOrders` | `GET` | `/portfolio/orders` | Get Orders | Required | -| `CreateOrder` | `POST` | `/portfolio/orders` | Create Order | Required | -| `GetOrder` | `GET` | `/portfolio/orders/{order_id}` | Get Order | Required | -| `CancelOrder` | `DELETE` | `/portfolio/orders/{order_id}` | Cancel Order | Required | -| `BatchCreateOrders` | `POST` | `/portfolio/orders/batched` | Batch Create Orders | Required | -| `BatchCancelOrders` | `DELETE` | `/portfolio/orders/batched` | Batch Cancel Orders | Required | -| `AmendOrder` | `POST` | `/portfolio/orders/{order_id}/amend` | Amend Order | Required | -| `DecreaseOrder` | `POST` | `/portfolio/orders/{order_id}/decrease` | Decrease Order | Required | -| `GetOrderQueuePositions` | `GET` | `/portfolio/orders/queue_positions` | Get Queue Positions for Orders | Required | -| `GetOrderQueuePosition` | `GET` | `/portfolio/orders/{order_id}/queue_position` | Get Order Queue Position | Required | -| `GetOrderGroups` | `GET` | `/portfolio/order_groups` | Get Order Groups | Required | -| `CreateOrderGroup` | `POST` | `/portfolio/order_groups/create` | Create Order Group | Required | -| `GetOrderGroup` | `GET` | `/portfolio/order_groups/{order_group_id}` | Get Order Group | Required | -| `DeleteOrderGroup` | `DELETE` | `/portfolio/order_groups/{order_group_id}` | Delete Order Group | Required | -| `ResetOrderGroup` | `PUT` | `/portfolio/order_groups/{order_group_id}/reset` | Reset Order Group | Required | -| `TriggerOrderGroup` | `PUT` | `/portfolio/order_groups/{order_group_id}/trigger` | Trigger Order Group | Required | -| `UpdateOrderGroupLimit` | `PUT` | `/portfolio/order_groups/{order_group_id}/limit` | Update Order Group Limit | Required | -| `GetBalance` | `GET` | `/portfolio/balance` | Get Balance | Required | -| `CreateSubaccount` | `POST` | `/portfolio/subaccounts` | Create Subaccount | Required | -| `ApplySubaccountTransfer` | `POST` | `/portfolio/subaccounts/transfer` | Transfer Between Subaccounts | Required | -| `GetSubaccountBalances` | `GET` | `/portfolio/subaccounts/balances` | Get All Subaccount Balances | Required | -| `GetSubaccountTransfers` | `GET` | `/portfolio/subaccounts/transfers` | Get Subaccount Transfers | Required | -| `GetPositions` | `GET` | `/portfolio/positions` | Get Positions | Required | -| `GetSettlements` | `GET` | `/portfolio/settlements` | Get Settlements | Required | -| `GetPortfolioRestingOrderTotalValue` | `GET` | `/portfolio/summary/total_resting_order_value` | Get Total Resting Order Value | Required | -| `GetFills` | `GET` | `/portfolio/fills` | Get Fills | Required | -| `GetApiKeys` | `GET` | `/api_keys` | Get API Keys | Required | -| `CreateApiKey` | `POST` | `/api_keys` | Create API Key | Required | -| `GenerateApiKey` | `POST` | `/api_keys/generate` | Generate API Key | Required | -| `DeleteApiKey` | `DELETE` | `/api_keys/{api_key}` | Delete API Key | Required | -| `GetTagsForSeriesCategories` | `GET` | `/search/tags_by_categories` | Get Tags for Series Categories | Public | -| `GetFiltersForSports` | `GET` | `/search/filters_by_sport` | Get Filters for Sports | Public | -| `GetAccountApiLimits` | `GET` | `/account/limits` | Get Account API Limits | Required | -| `GetMarketCandlesticks` | `GET` | `/series/{series_ticker}/markets/{ticker}/candlesticks` | Get Market Candlesticks | Public | -| `GetTrades` | `GET` | `/markets/trades` | Get Trades | Public | -| `GetMarketCandlesticksByEvent` | `GET` | `/series/{series_ticker}/events/{ticker}/candlesticks` | Get Event Candlesticks | Public | -| `GetEvents` | `GET` | `/events` | Get Events | Public | -| `GetMultivariateEvents` | `GET` | `/events/multivariate` | Get Multivariate Events | Public | -| `GetEvent` | `GET` | `/events/{event_ticker}` | Get Event | Public | -| `GetEventMetadata` | `GET` | `/events/{event_ticker}/metadata` | Get Event Metadata | Public | -| `GetEventForecastPercentilesHistory` | `GET` | `/series/{series_ticker}/events/{ticker}/forecast_percentile_history` | Get Event Forecast Percentile History | Required | -| `GetLiveData` | `GET` | `/live_data/{type}/milestone/{milestone_id}` | Get Live Data | Public | -| `GetLiveDatas` | `GET` | `/live_data/batch` | Get Multiple Live Data | Public | -| `GetIncentivePrograms` | `GET` | `/incentive_programs` | Get Incentives | Public | -| `GetFCMOrders` | `GET` | `/fcm/orders` | Get FCM Orders | Required | -| `GetFCMPositions` | `GET` | `/fcm/positions` | Get FCM Positions | Required | -| `GetStructuredTargets` | `GET` | `/structured_targets` | Get Structured Targets | Public | -| `GetStructuredTarget` | `GET` | `/structured_targets/{structured_target_id}` | Get Structured Target | Public | -| `GetMarketOrderbook` | `GET` | `/markets/{ticker}/orderbook` | Get Market Orderbook | Required | -| `GetMarketOrderbooks` | `GET` | `/markets/orderbooks` | Get Multiple Market Orderbooks | Required | -| `GetMilestone` | `GET` | `/milestones/{milestone_id}` | Get Milestone | Public | -| `GetMilestones` | `GET` | `/milestones` | Get Milestones | Public | -| `GetCommunicationsID` | `GET` | `/communications/id` | Get Communications ID | Required | -| `GetRFQs` | `GET` | `/communications/rfqs` | Get RFQs | Required | -| `CreateRFQ` | `POST` | `/communications/rfqs` | Create RFQ | Required | -| `GetRFQ` | `GET` | `/communications/rfqs/{rfq_id}` | Get RFQ | Required | -| `DeleteRFQ` | `DELETE` | `/communications/rfqs/{rfq_id}` | Delete RFQ | Required | -| `GetQuotes` | `GET` | `/communications/quotes` | Get Quotes | Required | -| `CreateQuote` | `POST` | `/communications/quotes` | Create Quote | Required | -| `GetQuote` | `GET` | `/communications/quotes/{quote_id}` | Get Quote | Required | -| `DeleteQuote` | `DELETE` | `/communications/quotes/{quote_id}` | Delete Quote | Required | -| `AcceptQuote` | `PUT` | `/communications/quotes/{quote_id}/accept` | Accept Quote | Required | -| `ConfirmQuote` | `PUT` | `/communications/quotes/{quote_id}/confirm` | Confirm Quote | Required | -| `GetMultivariateEventCollection` | `GET` | `/multivariate_event_collections/{collection_ticker}` | Get Multivariate Event Collection | Public | -| `CreateMarketInMultivariateEventCollection` | `POST` | `/multivariate_event_collections/{collection_ticker}` | Create Market In Multivariate Event Collection | Required | -| `GetMultivariateEventCollections` | `GET` | `/multivariate_event_collections` | Get Multivariate Event Collections | Public | -| `LookupTickersForMarketInMultivariateEventCollection` | `PUT` | `/multivariate_event_collections/{collection_ticker}/lookup` | Lookup Tickers For Market In Multivariate Event Collection | Required | -| `GetMultivariateEventCollectionLookupHistory` | `GET` | `/multivariate_event_collections/{collection_ticker}/lookup` | Get Multivariate Event Collection Lookup History | Public | -| `GetSeries` | `GET` | `/series/{series_ticker}` | Get Series | Public | -| `GetSeriesList` | `GET` | `/series` | Get Series List | Public | -| `GetMarkets` | `GET` | `/markets` | Get Markets | Public | -| `GetMarket` | `GET` | `/markets/{ticker}` | Get Market | Public | -| `BatchGetMarketCandlesticks` | `GET` | `/markets/candlesticks` | Batch Get Market Candlesticks | Public | - -#### Endpoint Details - -##### `GetHistoricalCutoff` - -**GET** `/historical/cutoff` - -Get Historical Cutoff Timestamps - - ---- -##### `GetMarketCandlesticksHistorical` - -**GET** `/historical/markets/{ticker}/candlesticks` - -Get Historical Market Candlesticks - -**Parameters:** -- `ticker` (path, string) **required** — Market ticker - unique identifier for the specific market -- `start_ts` (query, integer) **required** — Start timestamp (Unix timestamp). Candlesticks will include those ending on or after this time. -- `end_ts` (query, integer) **required** — End timestamp (Unix timestamp). Candlesticks will include those ending on or before this time. -- `period_interval` (query, integer) **required** — Time period length of each candlestick in minutes. Valid values are 1 (1 minute), 60 (1 hour), or 1440 (1 day). — enum: `1,60,1440` - ---- -##### `GetFillsHistorical` - -**GET** `/historical/fills` - -Get Historical Fills *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetHistoricalOrders` - -**GET** `/historical/orders` - -Get Historical Orders *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetHistoricalMarkets` - -**GET** `/historical/markets` - -Get Historical Markets - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetHistoricalMarket` - -**GET** `/historical/markets/{ticker}` - -Get Historical Market - -**Parameters:** -- `` (, string) - ---- -##### `GetExchangeStatus` - -**GET** `/exchange/status` - -Get Exchange Status - - ---- -##### `GetExchangeAnnouncements` - -**GET** `/exchange/announcements` - -Get Exchange Announcements - - ---- -##### `GetSeriesFeeChanges` - -**GET** `/series/fee_changes` - -Get Series Fee Changes - -**Parameters:** -- `series_ticker` (query, string) -- `show_historical` (query, boolean) - ---- -##### `GetExchangeSchedule` - -**GET** `/exchange/schedule` - -Get Exchange Schedule - - ---- -##### `GetUserDataTimestamp` - -**GET** `/exchange/user_data_timestamp` - -Get User Data Timestamp - - ---- -##### `GetOrders` - -**GET** `/portfolio/orders` - -Get Orders *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `CreateOrder` - -**POST** `/portfolio/orders` - -Create Order *(Auth required)* - - ---- -##### `GetOrder` - -**GET** `/portfolio/orders/{order_id}` - -Get Order *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `CancelOrder` - -**DELETE** `/portfolio/orders/{order_id}` - -Cancel Order *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) - ---- -##### `BatchCreateOrders` - -**POST** `/portfolio/orders/batched` - -Batch Create Orders *(Auth required)* - - ---- -##### `BatchCancelOrders` - -**DELETE** `/portfolio/orders/batched` - -Batch Cancel Orders *(Auth required)* - - ---- -##### `AmendOrder` - -**POST** `/portfolio/orders/{order_id}/amend` - -Amend Order *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `DecreaseOrder` - -**POST** `/portfolio/orders/{order_id}/decrease` - -Decrease Order *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `GetOrderQueuePositions` - -**GET** `/portfolio/orders/queue_positions` - -Get Queue Positions for Orders *(Auth required)* - -**Parameters:** -- `market_tickers` (query, string) — Comma-separated list of market tickers to filter by -- `event_ticker` (query, string) — Event ticker to filter by -- `` (, string) - ---- -##### `GetOrderQueuePosition` - -**GET** `/portfolio/orders/{order_id}/queue_position` - -Get Order Queue Position *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `GetOrderGroups` - -**GET** `/portfolio/order_groups` - -Get Order Groups *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `CreateOrderGroup` - -**POST** `/portfolio/order_groups/create` - -Create Order Group *(Auth required)* - - ---- -##### `GetOrderGroup` - -**GET** `/portfolio/order_groups/{order_group_id}` - -Get Order Group *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) - ---- -##### `DeleteOrderGroup` - -**DELETE** `/portfolio/order_groups/{order_group_id}` - -Delete Order Group *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) - ---- -##### `ResetOrderGroup` - -**PUT** `/portfolio/order_groups/{order_group_id}/reset` - -Reset Order Group *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) - ---- -##### `TriggerOrderGroup` - -**PUT** `/portfolio/order_groups/{order_group_id}/trigger` - -Trigger Order Group *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) - ---- -##### `UpdateOrderGroupLimit` - -**PUT** `/portfolio/order_groups/{order_group_id}/limit` - -Update Order Group Limit *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `GetBalance` - -**GET** `/portfolio/balance` - -Get Balance *(Auth required)* - -**Parameters:** -- `subaccount` (query, integer) — Subaccount number (0 for primary, 1-32 for subaccounts). When provided, returns only that subaccount's balance. - ---- -##### `CreateSubaccount` - -**POST** `/portfolio/subaccounts` - -Create Subaccount *(Auth required)* - - ---- -##### `ApplySubaccountTransfer` - -**POST** `/portfolio/subaccounts/transfer` - -Transfer Between Subaccounts *(Auth required)* - - ---- -##### `GetSubaccountBalances` - -**GET** `/portfolio/subaccounts/balances` - -Get All Subaccount Balances *(Auth required)* - - ---- -##### `GetSubaccountTransfers` - -**GET** `/portfolio/subaccounts/transfers` - -Get Subaccount Transfers *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) - ---- -##### `GetPositions` - -**GET** `/portfolio/positions` - -Get Positions *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetSettlements` - -**GET** `/portfolio/settlements` - -Get Settlements *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetPortfolioRestingOrderTotalValue` - -**GET** `/portfolio/summary/total_resting_order_value` - -Get Total Resting Order Value *(Auth required)* - - ---- -##### `GetFills` - -**GET** `/portfolio/fills` - -Get Fills *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetApiKeys` - -**GET** `/api_keys` - -Get API Keys *(Auth required)* - - ---- -##### `CreateApiKey` - -**POST** `/api_keys` - -Create API Key *(Auth required)* - - ---- -##### `GenerateApiKey` - -**POST** `/api_keys/generate` - -Generate API Key *(Auth required)* - - ---- -##### `DeleteApiKey` - -**DELETE** `/api_keys/{api_key}` - -Delete API Key *(Auth required)* - -**Parameters:** -- `api_key` (path, string) **required** — API key ID to delete - ---- -##### `GetTagsForSeriesCategories` - -**GET** `/search/tags_by_categories` - -Get Tags for Series Categories - - ---- -##### `GetFiltersForSports` - -**GET** `/search/filters_by_sport` - -Get Filters for Sports - - ---- -##### `GetAccountApiLimits` - -**GET** `/account/limits` - -Get Account API Limits *(Auth required)* - - ---- -##### `GetMarketCandlesticks` - -**GET** `/series/{series_ticker}/markets/{ticker}/candlesticks` - -Get Market Candlesticks - -**Parameters:** -- `series_ticker` (path, string) **required** — Series ticker - the series that contains the target market -- `ticker` (path, string) **required** — Market ticker - unique identifier for the specific market -- `start_ts` (query, integer) **required** — Start timestamp (Unix timestamp). Candlesticks will include those ending on or after this time. -- `end_ts` (query, integer) **required** — End timestamp (Unix timestamp). Candlesticks will include those ending on or before this time. -- `period_interval` (query, integer) **required** — Time period length of each candlestick in minutes. Valid values are 1 (1 minute), 60 (1 hour), or 1440 (1 day). — enum: `1,60,1440` -- `include_latest_before_start` (query, boolean) — If true, prepends the latest candlestick available before the start_ts. This synthetic candlestick is created by: -1. Finding the most recent real candlestick before start_ts -2. Projecting it forward to the first period boundary (calculated as the next period interval after start_ts) -3. Setting all OHLC prices to null, and `previous_price` to the close price from the real candlestick - - ---- -##### `GetTrades` - -**GET** `/markets/trades` - -Get Trades - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetMarketCandlesticksByEvent` - -**GET** `/series/{series_ticker}/events/{ticker}/candlesticks` - -Get Event Candlesticks - -**Parameters:** -- `ticker` (path, string) **required** — The event ticker -- `series_ticker` (path, string) **required** — The series ticker -- `start_ts` (query, integer) **required** — Start timestamp for the range -- `end_ts` (query, integer) **required** — End timestamp for the range -- `period_interval` (query, integer) **required** — Specifies the length of each candlestick period, in minutes. Must be one minute, one hour, or one day. — enum: `1,60,1440` - ---- -##### `GetEvents` - -**GET** `/events` - -Get Events - -**Parameters:** -- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 200. Maximum value is 200. -- `cursor` (query, string) — Parameter to specify the pagination cursor. Use the cursor value returned from the previous response to get the next page of results. Leave empty for the first page. -- `with_nested_markets` (query, boolean) — Parameter to specify if nested markets should be included in the response. When true, each event will include a 'markets' field containing a list of Market objects associated with that event. -- `with_milestones` (query, boolean) — If true, includes related milestones as a field alongside events. -- `status` (query, string) — Filter by event status. Possible values are 'open', 'closed', 'settled'. Leave empty to return events with any status. — enum: `open,closed,settled` -- `` (, string) -- `min_close_ts` (query, integer) — Filter events with at least one market with close timestamp greater than this Unix timestamp (in seconds). - ---- -##### `GetMultivariateEvents` - -**GET** `/events/multivariate` - -Get Multivariate Events - -**Parameters:** -- `limit` (query, integer) — Number of results per page. Defaults to 100. Maximum value is 200. -- `cursor` (query, string) — Pagination cursor. Use the cursor value returned from the previous response to get the next page of results. -- `` (, string) -- `collection_ticker` (query, string) — Filter events by collection ticker. Returns only multivariate events belonging to the specified collection. Cannot be used together with series_ticker. -- `with_nested_markets` (query, boolean) — Parameter to specify if nested markets should be included in the response. When true, each event will include a 'markets' field containing a list of Market objects associated with that event. - ---- -##### `GetEvent` - -**GET** `/events/{event_ticker}` - -Get Event - -**Parameters:** -- `event_ticker` (path, string) **required** — Event ticker -- `with_nested_markets` (query, boolean) — If true, markets are included within the event object. If false (default), markets are returned as a separate top-level field in the response. - ---- -##### `GetEventMetadata` - -**GET** `/events/{event_ticker}/metadata` - -Get Event Metadata - -**Parameters:** -- `event_ticker` (path, string) **required** — Event ticker - ---- -##### `GetEventForecastPercentilesHistory` - -**GET** `/series/{series_ticker}/events/{ticker}/forecast_percentile_history` - -Get Event Forecast Percentile History *(Auth required)* - -**Parameters:** -- `ticker` (path, string) **required** — The event ticker -- `series_ticker` (path, string) **required** — The series ticker -- `percentiles` (query, array) **required** — Array of percentile values to retrieve (0-10000, max 10 values) -- `start_ts` (query, integer) **required** — Start timestamp for the range -- `end_ts` (query, integer) **required** — End timestamp for the range -- `period_interval` (query, integer) **required** — Specifies the length of each forecast period, in minutes. 0 for 5-second intervals, or 1, 60, or 1440 for minute-based intervals. — enum: `0,1,60,1440` - ---- -##### `GetLiveData` - -**GET** `/live_data/{type}/milestone/{milestone_id}` - -Get Live Data - -**Parameters:** -- `type` (path, string) **required** — Type of live data -- `milestone_id` (path, string) **required** — Milestone ID - ---- -##### `GetLiveDatas` - -**GET** `/live_data/batch` - -Get Multiple Live Data - -**Parameters:** -- `milestone_ids` (query, array) **required** — Array of milestone IDs - ---- -##### `GetIncentivePrograms` - -**GET** `/incentive_programs` - -Get Incentives - -**Parameters:** -- `status` (query, string) — Status filter. Can be "all", "active", "upcoming", "closed", or "paid_out". Default is "all". — enum: `all,active,upcoming,closed,paid_out` -- `type` (query, string) — Type filter. Can be "all", "liquidity", or "volume". Default is "all". — enum: `all,liquidity,volume` -- `limit` (query, integer) — Number of results per page. Defaults to 100. Maximum value is 10000. -- `cursor` (query, string) — Cursor for pagination - ---- -##### `GetFCMOrders` - -**GET** `/fcm/orders` - -Get FCM Orders *(Auth required)* - -**Parameters:** -- `subtrader_id` (query, string) **required** — Restricts the response to orders for a specific subtrader (FCM members only) -- `` (, string) -- `` (, string) -- `` (, string) -- `min_ts` (query, integer) — Restricts the response to orders after a timestamp, formatted as a Unix Timestamp -- `max_ts` (query, integer) — Restricts the response to orders before a timestamp, formatted as a Unix Timestamp -- `status` (query, string) — Restricts the response to orders that have a certain status — enum: `resting,canceled,executed` -- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 100 - ---- -##### `GetFCMPositions` - -**GET** `/fcm/positions` - -Get FCM Positions *(Auth required)* - -**Parameters:** -- `subtrader_id` (query, string) **required** — Restricts the response to positions for a specific subtrader (FCM members only) -- `ticker` (query, string) — Ticker of desired positions -- `event_ticker` (query, string) — Event ticker of desired positions -- `count_filter` (query, string) — Restricts the positions to those with any of following fields with non-zero values, as a comma separated list -- `settlement_status` (query, string) — Settlement status of the markets to return. Defaults to unsettled — enum: `all,unsettled,settled` -- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 100 -- `cursor` (query, string) — The Cursor represents a pointer to the next page of records in the pagination - ---- -##### `GetStructuredTargets` - -**GET** `/structured_targets` - -Get Structured Targets - -**Parameters:** -- `type` (query, string) — Filter by structured target type -- `competition` (query, string) — Filter by competition -- `page_size` (query, integer) — Number of items per page (min 1, max 2000, default 100) -- `cursor` (query, string) — Pagination cursor - ---- -##### `GetStructuredTarget` - -**GET** `/structured_targets/{structured_target_id}` - -Get Structured Target - -**Parameters:** -- `structured_target_id` (path, string) **required** — Structured target ID - ---- -##### `GetMarketOrderbook` - -**GET** `/markets/{ticker}/orderbook` - -Get Market Orderbook *(Auth required)* - -**Parameters:** -- `` (, string) -- `depth` (query, integer) — Depth of the orderbook to retrieve (0 or negative means all levels, 1-100 for specific depth) - ---- -##### `GetMarketOrderbooks` - -**GET** `/markets/orderbooks` - -Get Multiple Market Orderbooks *(Auth required)* - -**Parameters:** -- `tickers` (query, array) **required** — List of market tickers to fetch orderbooks for - ---- -##### `GetMilestone` - -**GET** `/milestones/{milestone_id}` - -Get Milestone - -**Parameters:** -- `milestone_id` (path, string) **required** — Milestone ID - ---- -##### `GetMilestones` - -**GET** `/milestones` - -Get Milestones - -**Parameters:** -- `limit` (query, integer) **required** — Number of milestones to return per page -- `minimum_start_date` (query, string) — Minimum start date to filter milestones. Format RFC3339 timestamp -- `category` (query, string) — Filter by milestone category -- `competition` (query, string) — Filter by competition -- `source_id` (query, string) — Filter by source id -- `type` (query, string) — Filter by milestone type -- `related_event_ticker` (query, string) — Filter by related event ticker -- `cursor` (query, string) — Pagination cursor. Use the cursor value returned from the previous response to get the next page of results - ---- -##### `GetCommunicationsID` - -**GET** `/communications/id` - -Get Communications ID *(Auth required)* - - ---- -##### `GetRFQs` - -**GET** `/communications/rfqs` - -Get RFQs *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 100. -- `status` (query, string) — Filter RFQs by status -- `creator_user_id` (query, string) — Filter RFQs by creator user ID - ---- -##### `CreateRFQ` - -**POST** `/communications/rfqs` - -Create RFQ *(Auth required)* - - ---- -##### `GetRFQ` - -**GET** `/communications/rfqs/{rfq_id}` - -Get RFQ *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `DeleteRFQ` - -**DELETE** `/communications/rfqs/{rfq_id}` - -Delete RFQ *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `GetQuotes` - -**GET** `/communications/quotes` - -Get Quotes *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 500. -- `status` (query, string) — Filter quotes by status -- `quote_creator_user_id` (query, string) — Filter quotes by quote creator user ID -- `rfq_creator_user_id` (query, string) — Filter quotes by RFQ creator user ID -- `rfq_creator_subtrader_id` (query, string) — Filter quotes by RFQ creator subtrader ID (FCM members only) -- `rfq_id` (query, string) — Filter quotes by RFQ ID - ---- -##### `CreateQuote` - -**POST** `/communications/quotes` - -Create Quote *(Auth required)* - - ---- -##### `GetQuote` - -**GET** `/communications/quotes/{quote_id}` - -Get Quote *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `DeleteQuote` - -**DELETE** `/communications/quotes/{quote_id}` - -Delete Quote *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `AcceptQuote` - -**PUT** `/communications/quotes/{quote_id}/accept` - -Accept Quote *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `ConfirmQuote` - -**PUT** `/communications/quotes/{quote_id}/confirm` - -Confirm Quote *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `GetMultivariateEventCollection` - -**GET** `/multivariate_event_collections/{collection_ticker}` - -Get Multivariate Event Collection - -**Parameters:** -- `collection_ticker` (path, string) **required** — Collection ticker - ---- -##### `CreateMarketInMultivariateEventCollection` - -**POST** `/multivariate_event_collections/{collection_ticker}` - -Create Market In Multivariate Event Collection *(Auth required)* - -**Parameters:** -- `collection_ticker` (path, string) **required** — Collection ticker - ---- -##### `GetMultivariateEventCollections` - -**GET** `/multivariate_event_collections` - -Get Multivariate Event Collections - -**Parameters:** -- `status` (query, string) — Only return collections of a certain status. Can be unopened, open, or closed. — enum: `unopened,open,closed` -- `associated_event_ticker` (query, string) — Only return collections associated with a particular event ticker. -- `series_ticker` (query, string) — Only return collections with a particular series ticker. -- `limit` (query, integer) — Specify the maximum number of results. -- `cursor` (query, string) — The Cursor represents a pointer to the next page of records in the pagination. This optional parameter, when filled, should be filled with the cursor string returned in a previous request to this end-point. - ---- -##### `LookupTickersForMarketInMultivariateEventCollection` - -**PUT** `/multivariate_event_collections/{collection_ticker}/lookup` - -Lookup Tickers For Market In Multivariate Event Collection *(Auth required)* - -**Parameters:** -- `collection_ticker` (path, string) **required** — Collection ticker - ---- -##### `GetMultivariateEventCollectionLookupHistory` - -**GET** `/multivariate_event_collections/{collection_ticker}/lookup` - -Get Multivariate Event Collection Lookup History - -**Parameters:** -- `collection_ticker` (path, string) **required** — Collection ticker -- `lookback_seconds` (query, integer) **required** — Number of seconds to look back for lookup history. Must be one of 10, 60, 300, or 3600. — enum: `10,60,300,3600` - ---- -##### `GetSeries` - -**GET** `/series/{series_ticker}` - -Get Series - -**Parameters:** -- `series_ticker` (path, string) **required** — The ticker of the series to retrieve -- `include_volume` (query, boolean) — If true, includes the total volume traded across all events in this series. - ---- -##### `GetSeriesList` - -**GET** `/series` - -Get Series List - -**Parameters:** -- `category` (query, string) -- `tags` (query, string) -- `include_product_metadata` (query, boolean) -- `include_volume` (query, boolean) — If true, includes the total volume traded across all events in each series. - ---- -##### `GetMarkets` - -**GET** `/markets` - -Get Markets - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetMarket` - -**GET** `/markets/{ticker}` - -Get Market - -**Parameters:** -- `` (, string) - ---- -##### `BatchGetMarketCandlesticks` - -**GET** `/markets/candlesticks` - -Batch Get Market Candlesticks - -**Parameters:** -- `market_tickers` (query, string) **required** — Comma-separated list of market tickers (maximum 100) -- `start_ts` (query, integer) **required** — Start timestamp in Unix seconds -- `end_ts` (query, integer) **required** — End timestamp in Unix seconds -- `period_interval` (query, integer) **required** — Candlestick period interval in minutes -- `include_latest_before_start` (query, boolean) — If true, prepends the latest candlestick available before the start_ts. This synthetic candlestick is created by: -1. Finding the most recent real candlestick before start_ts -2. Projecting it forward to the first period boundary (calculated as the next period interval after start_ts) -3. Setting all OHLC prices to null, and `previous_price` to the close price from the real candlestick - - ---- -### Limitless - -| `callApi()` name | Method | Path | Summary | Auth | -|-----------------|--------|------|---------|------| -| `AuthController_getSigningMessage` | `GET` | `/auth/signing-message` | Get signing message | Public | -| `AuthController_verifyAuth` | `GET` | `/auth/verify-auth` | Verify authentication | Required | -| `AuthController_login` | `POST` | `/auth/login` | User login | Public | -| `AuthController_logout` | `POST` | `/auth/logout` | User logout | Required | -| `MarketController_getActiveMarkets[0]` | `GET` | `/markets/active/{categoryId}` | Browse Active Markets | Public | -| `MarketController_getActiveMarkets[1]` | `GET` | `/markets/active` | Browse Active Markets | Public | -| `MarketController_getActiveMarketCountPerCategory` | `GET` | `/markets/categories/count` | Get active market count per category | Public | -| `MarketController_getActiveSlugs` | `GET` | `/markets/active/slugs` | Get active market slugs with metadata | Public | -| `MarketController_find` | `GET` | `/markets/{addressOrSlug}` | Get Market Details | Public | -| `MarketController_getFeedEvent` | `GET` | `/markets/{slug}/get-feed-events` | Get feed events for a market | Required | -| `MarketOrderbookController_getHistoricalPrice` | `GET` | `/markets/{slug}/historical-price` | Get Historical Prices | Public | -| `MarketOrderbookController_getOrderbook` | `GET` | `/markets/{slug}/orderbook` | Get Orderbook | Public | -| `MarketOrderbookController_getLockedBalance` | `GET` | `/markets/{slug}/locked-balance` | Get Locked Balance | Required | -| `MarketOrderbookController_getUserOrders` | `GET` | `/markets/{slug}/user-orders` | User Orders | Required | -| `MarketOrderbookController_getMarketEvents` | `GET` | `/markets/{slug}/events` | Market Events | Public | -| `MarketSearchController_search` | `GET` | `/markets/search` | Search for markets based on semantic similarity | Public | -| `PortfolioController_getTrades` | `GET` | `/portfolio/trades` | Get Trades | Required | -| `PortfolioController_getPositions` | `GET` | `/portfolio/positions` | Get Positions | Required | -| `PortfolioController_getPnlChart` | `GET` | `/portfolio/pnl-chart` | Get portfolio PnL chart | Required | -| `PortfolioController_getHistory` | `GET` | `/portfolio/history` | Get History | Required | -| `PortfolioController_getPointsBreakdown` | `GET` | `/portfolio/points` | Get points breakdown | Required | -| `PublicPortfolioController_tradedVolume` | `GET` | `/portfolio/{account}/traded-volume` | User Total Volume | Public | -| `PublicPortfolioController_getPositions` | `GET` | `/portfolio/{account}/positions` | Get All User Positions | Public | -| `PublicPortfolioController_getPnlChart` | `GET` | `/portfolio/{account}/pnl-chart` | Get portfolio PnL chart (public) | Public | -| `TradingPortfolioController_getAllowance` | `GET` | `/portfolio/trading/allowance` | Get User Trading Allowance | Required | -| `OrderController_createOrder` | `POST` | `/orders` | Create Order | Required | -| `OrderController_cancelOrder` | `DELETE` | `/orders/{orderId}` | Cancel Order | Required | -| `OrderController_cancelOrderBatch` | `POST` | `/orders/cancel-batch` | Cancel multiple orders in batch | Required | -| `OrderController_cancelAllOrders` | `DELETE` | `/orders/all/{slug}` | Cancel all of a user's orders in a specific market | Required | - -#### Endpoint Details - -##### `AuthController_getSigningMessage` - -**GET** `/auth/signing-message` - -Get signing message - - ---- -##### `AuthController_verifyAuth` - -**GET** `/auth/verify-auth` - -Verify authentication *(Auth required)* - - ---- -##### `AuthController_login` - -**POST** `/auth/login` - -User login - -**Parameters:** -- `x-account` (header, string) **required** — The Ethereum address of the user -- `x-signing-message` (header, string) **required** — The signing message generated by the server -- `x-signature` (header, string) **required** — The signature generated by signing the message with the user's wallet - ---- -##### `AuthController_logout` - -**POST** `/auth/logout` - -User logout *(Auth required)* - - ---- -##### `MarketController_getActiveMarkets[0]` - -**GET** `/markets/active/{categoryId}` - -Browse Active Markets - -**Parameters:** -- `page` (query, number) — Page number for pagination -- `limit` (query, number) — Number of items per page -- `sortBy` (query, string) — Sort by query parameter -- `tradeType` (query, string) — Filter by trade type (amm, clob, or group) — enum: `amm,clob,group` -- `automationType` (query, string) — Filter by automation type (manual, lumy, or sports) — enum: `manual,lumy,sports` -- `categoryId` (path, number) **required** — Filter markets by category ID - ---- -##### `MarketController_getActiveMarkets[1]` - -**GET** `/markets/active` - -Browse Active Markets - -**Parameters:** -- `page` (query, number) — Page number for pagination -- `limit` (query, number) — Number of items per page -- `sortBy` (query, string) — Sort by query parameter -- `tradeType` (query, string) — Filter by trade type (amm, clob, or group) — enum: `amm,clob,group` -- `automationType` (query, string) — Filter by automation type (manual, lumy, or sports) — enum: `manual,lumy,sports` -- `categoryId` (path, number) **required** — Filter markets by category ID - ---- -##### `MarketController_getActiveMarketCountPerCategory` - -**GET** `/markets/categories/count` - -Get active market count per category - - ---- -##### `MarketController_getActiveSlugs` - -**GET** `/markets/active/slugs` - -Get active market slugs with metadata - - ---- -##### `MarketController_find` - -**GET** `/markets/{addressOrSlug}` - -Get Market Details - -**Parameters:** -- `addressOrSlug` (path, string) **required** — Market/group address (0x...) or slug identifier (my-market-name) - ---- -##### `MarketController_getFeedEvent` - -**GET** `/markets/{slug}/get-feed-events` - -Get feed events for a market *(Auth required)* - -**Parameters:** -- `page` (query, number) — Page number for pagination -- `limit` (query, number) — Number of events per page -- `slug` (path, string) **required** — Slug of the market - ---- -##### `MarketOrderbookController_getHistoricalPrice` - -**GET** `/markets/{slug}/historical-price` - -Get Historical Prices - -**Parameters:** -- `to` (query, string) — End date for historical data -- `from` (query, string) — Start date for historical data -- `interval` (query, string) — Time interval for data points — enum: `1h,6h,1d,1w,1m,all` -- `slug` (path, string) **required** — Market slug identifier - ---- -##### `MarketOrderbookController_getOrderbook` - -**GET** `/markets/{slug}/orderbook` - -Get Orderbook - -**Parameters:** -- `slug` (path, string) **required** — Market slug identifier - ---- -##### `MarketOrderbookController_getLockedBalance` - -**GET** `/markets/{slug}/locked-balance` - -Get Locked Balance *(Auth required)* - -**Parameters:** -- `slug` (path, string) **required** — Market slug identifier - ---- -##### `MarketOrderbookController_getUserOrders` - -**GET** `/markets/{slug}/user-orders` - -User Orders *(Auth required)* - -**Parameters:** -- `statuses` (query, array) — Order status(es) to filter by. Defaults to [LIVE] if not provided -- `limit` (query, number) — Maximum number of orders to return -- `slug` (path, string) **required** — Market slug identifier - ---- -##### `MarketOrderbookController_getMarketEvents` - -**GET** `/markets/{slug}/events` - -Market Events - -**Parameters:** -- `page` (query, number) — Page number for pagination -- `limit` (query, number) — Number of events per page -- `slug` (path, string) **required** — Market slug identifier - ---- -##### `MarketSearchController_search` - -**GET** `/markets/search` - -Search for markets based on semantic similarity - -**Parameters:** -- `query` (query, string) **required** — Search query text -- `limit` (query, number) — Maximum number of results to return -- `page` (query, number) — Number of page -- `similarityThreshold` (query, number) — Minimum similarity score (0-1) - ---- -##### `PortfolioController_getTrades` - -**GET** `/portfolio/trades` - -Get Trades *(Auth required)* - - ---- -##### `PortfolioController_getPositions` - -**GET** `/portfolio/positions` - -Get Positions *(Auth required)* - - ---- -##### `PortfolioController_getPnlChart` - -**GET** `/portfolio/pnl-chart` - -Get portfolio PnL chart *(Auth required)* - -**Parameters:** -- `timeframe` (query, string) — Timeframe window for percent change and chart series - ---- -##### `PortfolioController_getHistory` - -**GET** `/portfolio/history` - -Get History *(Auth required)* - -**Parameters:** -- `page` (query, number) **required** — Page number -- `limit` (query, number) **required** — Number of items per page -- `from` (query, string) — Start date for filtering (ISO 8601 format) -- `to` (query, string) — End date for filtering (ISO 8601 format) - ---- -##### `PortfolioController_getPointsBreakdown` - -**GET** `/portfolio/points` - -Get points breakdown *(Auth required)* - - ---- -##### `PublicPortfolioController_tradedVolume` - -**GET** `/portfolio/{account}/traded-volume` - -User Total Volume - -**Parameters:** -- `account` (path, string) **required** — User Ethereum address - ---- -##### `PublicPortfolioController_getPositions` - -**GET** `/portfolio/{account}/positions` - -Get All User Positions - -**Parameters:** -- `account` (path, string) **required** — User Ethereum address - ---- -##### `PublicPortfolioController_getPnlChart` - -**GET** `/portfolio/{account}/pnl-chart` - -Get portfolio PnL chart (public) - -**Parameters:** -- `account` (path, string) **required** — User Ethereum address -- `timeframe` (query, string) — Timeframe window for percent change and chart series - ---- -##### `TradingPortfolioController_getAllowance` - -**GET** `/portfolio/trading/allowance` - -Get User Trading Allowance *(Auth required)* - -**Parameters:** -- `type` (query, string) **required** — Trading type: CLOB or NegRisk — enum: `clob,negrisk` -- `spender` (query, string) — Optional spender address override (e.g., venue exchange address) - ---- -##### `OrderController_createOrder` - -**POST** `/orders` - -Create Order *(Auth required)* - - ---- -##### `OrderController_cancelOrder` - -**DELETE** `/orders/{orderId}` - -Cancel Order *(Auth required)* - -**Parameters:** -- `orderId` (path, string) **required** — Unique identifier of the order to be cancelled - ---- -##### `OrderController_cancelOrderBatch` - -**POST** `/orders/cancel-batch` - -Cancel multiple orders in batch *(Auth required)* - - ---- -##### `OrderController_cancelAllOrders` - -**DELETE** `/orders/all/{slug}` - -Cancel all of a user's orders in a specific market *(Auth required)* - - ---- -### Probable - -| `callApi()` name | Method | Path | Summary | Auth | -|-----------------|--------|------|---------|------| -| `getPublicApiV1AuthNonce` | `GET` | `/public/api/v1/auth/nonce` | Generate Nonce | Public | -| `postPublicApiV1AuthLogin` | `POST` | `/public/api/v1/auth/login` | Login | Public | -| `postPublicApiV1AuthLogout` | `POST` | `/public/api/v1/auth/logout` | Logout | Public | -| `postPublicApiV1AuthApiKey` | `POST` | `/public/api/v1/auth/api-key/{chainId}` | Generate API Key | Required | -| `getPublicApiV1AuthApiKey` | `GET` | `/public/api/v1/auth/api-key/{chainId}` | Get API Key | Required | -| `deletePublicApiV1AuthApiKey` | `DELETE` | `/public/api/v1/auth/api-key/{chainId}` | Delete API Key | Required | -| `postPublicApiV1AuthVerifyL1` | `POST` | `/public/api/v1/auth/verify/l1` | Verify L1 Headers | Required | -| `postPublicApiV1AuthVerifyL2` | `POST` | `/public/api/v1/auth/verify/l2` | Verify L2 Headers | Required | -| `getPublicApiV1Events` | `GET` | `/public/api/v1/events/` | List All Events | Public | -| `getPublicApiV1Events` | `GET` | `/public/api/v1/events/{id}` | Get Event by ID | Public | -| `getPublicApiV1EventsSlug` | `GET` | `/public/api/v1/events/slug/{slug}` | Get Event by Slug | Public | -| `getPublicApiV1EventsTags` | `GET` | `/public/api/v1/events/{id}/tags` | Get Tags for Event | Public | -| `getPublicApiV1Markets` | `GET` | `/public/api/v1/markets/` | List All Markets | Public | -| `getPublicApiV1Markets` | `GET` | `/public/api/v1/markets/{id}` | Get Market by ID | Public | -| `getPublicApiV1MarketsPolymarket` | `GET` | `/public/api/v1/markets/polymarket/{polymarketId}` | Get Market by Polymarket ID | Public | -| `getPublicApiV1MarketsBsc` | `GET` | `/public/api/v1/markets/bsc/{bscQuestionId}` | Get Market by BSC Question ID | Public | -| `getPublicApiV1PublicSearch` | `GET` | `/public/api/v1/public-search/` | Search Events and Markets | Public | -| `getPublicApiV1Tags` | `GET` | `/public/api/v1/tags/` | List All Tags | Public | -| `postPublicApiV1Order` | `POST` | `/public/api/v1/order/{chainId}` | Place Order | Required | -| `deletePublicApiV1Order` | `DELETE` | `/public/api/v1/order/{chainId}/{orderId}` | Cancel Order | Required | -| `getPublicApiV1Orders` | `GET` | `/public/api/v1/orders/{chainId}/{orderId}` | Get Order | Required | -| `getPublicApiV1OrdersOpen` | `GET` | `/public/api/v1/orders/{chainId}/open` | Get Open Orders | Required | -| `getPublicApiV1Price` | `GET` | `/public/api/v1/price` | Get Price | Public | -| `postPublicApiV1Prices` | `POST` | `/public/api/v1/prices` | Get Prices (Batch) | Public | -| `getPublicApiV1Midpoint` | `GET` | `/public/api/v1/midpoint` | Get Midpoint | Public | -| `getPublicApiV1Book` | `GET` | `/public/api/v1/book` | Get Order Book | Public | -| `getPublicApiV1PricesHistory` | `GET` | `/public/api/v1/prices-history` | Get Price History | Public | -| `getPublicApiV1Trade` | `GET` | `/public/api/v1/trade/{chainId}` | Get Trades (Authenticated) | Required | -| `getPublicApiV1Trades` | `GET` | `/public/api/v1/trades` | Get Public Trades | Public | -| `getPublicApiV1Activity` | `GET` | `/public/api/v1/activity` | User Activity | Public | -| `getPublicApiV1PositionCurrent` | `GET` | `/public/api/v1/position/current` | Current Position | Public | -| `getPublicApiV1Pnl` | `GET` | `/public/api/v1/pnl` | Profit and Loss | Public | - -#### Endpoint Details - -##### `getPublicApiV1AuthNonce` - -**GET** `/public/api/v1/auth/nonce` - -Generate Nonce - - ---- -##### `postPublicApiV1AuthLogin` - -**POST** `/public/api/v1/auth/login` - -Login - - ---- -##### `postPublicApiV1AuthLogout` - -**POST** `/public/api/v1/auth/logout` - -Logout - - ---- -##### `postPublicApiV1AuthApiKey` - -**POST** `/public/api/v1/auth/api-key/{chainId}` - -Generate API Key *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** - ---- -##### `getPublicApiV1AuthApiKey` - -**GET** `/public/api/v1/auth/api-key/{chainId}` - -Get API Key *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** - ---- -##### `deletePublicApiV1AuthApiKey` - -**DELETE** `/public/api/v1/auth/api-key/{chainId}` - -Delete API Key *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** - ---- -##### `postPublicApiV1AuthVerifyL1` - -**POST** `/public/api/v1/auth/verify/l1` - -Verify L1 Headers *(Auth required)* - - ---- -##### `postPublicApiV1AuthVerifyL2` - -**POST** `/public/api/v1/auth/verify/l2` - -Verify L2 Headers *(Auth required)* - - ---- -##### `getPublicApiV1Events` - -**GET** `/public/api/v1/events/` - -List All Events - -**Parameters:** -- `page` (query, integer) -- `limit` (query, integer) -- `status` (query, string) — enum: `active,closed,all` -- `tag_id` (query, string) -- `sort` (query, string) - ---- -##### `getPublicApiV1Events` - -**GET** `/public/api/v1/events/{id}` - -Get Event by ID - -**Parameters:** -- `id` (path, integer) **required** - ---- -##### `getPublicApiV1EventsSlug` - -**GET** `/public/api/v1/events/slug/{slug}` - -Get Event by Slug - -**Parameters:** -- `slug` (path, string) **required** - ---- -##### `getPublicApiV1EventsTags` - -**GET** `/public/api/v1/events/{id}/tags` - -Get Tags for Event - -**Parameters:** -- `id` (path, integer) **required** - ---- -##### `getPublicApiV1Markets` - -**GET** `/public/api/v1/markets/` - -List All Markets - -**Parameters:** -- `page` (query, integer) -- `active` (query, boolean) -- `event_id` (query, integer) - ---- -##### `getPublicApiV1Markets` - -**GET** `/public/api/v1/markets/{id}` - -Get Market by ID - -**Parameters:** -- `id` (path, integer) **required** - ---- -##### `getPublicApiV1MarketsPolymarket` - -**GET** `/public/api/v1/markets/polymarket/{polymarketId}` - -Get Market by Polymarket ID - -**Parameters:** -- `polymarketId` (path, string) **required** - ---- -##### `getPublicApiV1MarketsBsc` - -**GET** `/public/api/v1/markets/bsc/{bscQuestionId}` - -Get Market by BSC Question ID - -**Parameters:** -- `bscQuestionId` (path, string) **required** - ---- -##### `getPublicApiV1PublicSearch` - -**GET** `/public/api/v1/public-search/` - -Search Events and Markets - -**Parameters:** -- `q` (query, string) **required** -- `page` (query, integer) -- `events_tag` (query, string) -- `optimized` (query, boolean) - ---- -##### `getPublicApiV1Tags` - -**GET** `/public/api/v1/tags/` - -List All Tags - - ---- -##### `postPublicApiV1Order` - -**POST** `/public/api/v1/order/{chainId}` - -Place Order *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** - ---- -##### `deletePublicApiV1Order` - -**DELETE** `/public/api/v1/order/{chainId}/{orderId}` - -Cancel Order *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** -- `orderId` (path, string) **required** -- `tokenId` (query, string) **required** - ---- -##### `getPublicApiV1Orders` - -**GET** `/public/api/v1/orders/{chainId}/{orderId}` - -Get Order *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** -- `orderId` (path, string) **required** -- `tokenId` (query, string) **required** - ---- -##### `getPublicApiV1OrdersOpen` - -**GET** `/public/api/v1/orders/{chainId}/open` - -Get Open Orders *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** -- `limit` (query, integer) -- `page` (query, integer) - ---- -##### `getPublicApiV1Price` - -**GET** `/public/api/v1/price` - -Get Price - -**Parameters:** -- `token_id` (query, string) **required** -- `side` (query, string) **required** — enum: `BUY,SELL` - ---- -##### `postPublicApiV1Prices` - -**POST** `/public/api/v1/prices` - -Get Prices (Batch) - - ---- -##### `getPublicApiV1Midpoint` - -**GET** `/public/api/v1/midpoint` - -Get Midpoint - -**Parameters:** -- `token_id` (query, string) **required** - ---- -##### `getPublicApiV1Book` - -**GET** `/public/api/v1/book` - -Get Order Book - -**Parameters:** -- `token_id` (query, string) **required** - ---- -##### `getPublicApiV1PricesHistory` - -**GET** `/public/api/v1/prices-history` - -Get Price History - -**Parameters:** -- `market` (query, string) **required** — Asset ID -- `interval` (query, string) — enum: `max,1m,1h,6h,1d,1w` -- `startTs` (query, integer) -- `endTs` (query, integer) - ---- -##### `getPublicApiV1Trade` - -**GET** `/public/api/v1/trade/{chainId}` - -Get Trades (Authenticated) *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** -- `tokenId` (query, string) **required** -- `limit` (query, integer) -- `next_cursor` (query, string) - ---- -##### `getPublicApiV1Trades` - -**GET** `/public/api/v1/trades` - -Get Public Trades - -**Parameters:** -- `user` (query, string) -- `limit` (query, integer) -- `side` (query, string) - ---- -##### `getPublicApiV1Activity` - -**GET** `/public/api/v1/activity` - -User Activity - -**Parameters:** -- `user` (query, string) **required** -- `limit` (query, integer) - ---- -##### `getPublicApiV1PositionCurrent` - -**GET** `/public/api/v1/position/current` - -Current Position - -**Parameters:** -- `user` (query, string) **required** -- `eventId` (query, integer) - ---- -##### `getPublicApiV1Pnl` - -**GET** `/public/api/v1/pnl` - -Profit and Loss - -**Parameters:** -- `user_address` (query, string) **required** - ---- -### Myriad - -| `callApi()` name | Method | Path | Summary | Auth | -|-----------------|--------|------|---------|------| -| `getQuestions` | `GET` | `/questions` | List Questions | Required | -| `getQuestions` | `GET` | `/questions/{id}` | Get Question Details | Required | -| `getMarkets` | `GET` | `/markets` | List Markets | Required | -| `getMarkets` | `GET` | `/markets/{id}` | Get Market Details | Required | -| `getMarketsEvents` | `GET` | `/markets/{id}/events` | Get Market Events | Required | -| `getMarketsReferrals` | `GET` | `/markets/{id}/referrals` | Get Market Referrals | Required | -| `getMarketsHolders` | `GET` | `/markets/{id}/holders` | Get Market Holders | Required | -| `postMarketsQuote` | `POST` | `/markets/quote` | Get Trade Quote | Required | -| `postMarketsQuoteWithFee` | `POST` | `/markets/quote_with_fee` | Get Trade Quote with Frontend Fee | Required | -| `postMarketsClaim` | `POST` | `/markets/claim` | Get Claim Quote | Required | -| `getUsersEvents` | `GET` | `/users/{address}/events` | Get User Events | Required | -| `getUsersReferrals` | `GET` | `/users/{address}/referrals` | Get User Referrals | Required | -| `getUsersPortfolio` | `GET` | `/users/{address}/portfolio` | Get User Portfolio | Required | -| `getUsersMarkets` | `GET` | `/users/{address}/markets` | Get User Markets Portfolio | Required | - -#### Endpoint Details - -##### `getQuestions` - -**GET** `/questions` - -List Questions *(Auth required)* - -**Parameters:** -- `page` (query, integer) -- `limit` (query, integer) -- `keyword` (query, string) — Search in question title -- `min_markets` (query, integer) — Minimum number of linked markets -- `max_markets` (query, integer) — Maximum number of linked markets - ---- -##### `getQuestions` - -**GET** `/questions/{id}` - -Get Question Details *(Auth required)* - -**Parameters:** -- `id` (path, integer) **required** - ---- -##### `getMarkets` - -**GET** `/markets` - -List Markets *(Auth required)* - -**Parameters:** -- `page` (query, integer) -- `limit` (query, integer) -- `sort` (query, string) — enum: `volume,volume_24h,liquidity,expires_at,published_at,featured` -- `order` (query, string) — enum: `asc,desc` -- `network_id` (query, string) — Comma-separated list of network ids -- `state` (query, string) — enum: `open,closed,resolved,voided` -- `trading_model` (query, string) — Filter markets by trading model (e.g. CLOB, AMM) -- `token_address` (query, string) -- `topics` (query, string) — Comma-separated list of topics -- `keyword` (query, string) — Full-text search across title, description, and outcome titles -- `ids` (query, string) — Comma-separated list of on-chain market ids -- `in_play` (query, boolean) -- `moneyline` (query, boolean) -- `min_duration` (query, integer) — Minimum market duration in seconds -- `max_duration` (query, integer) — Maximum market duration in seconds - ---- -##### `getMarkets` - -**GET** `/markets/{id}` - -Get Market Details *(Auth required)* - -**Parameters:** -- `id` (path, string) **required** — Market slug OR Market ID -- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID - ---- -##### `getMarketsEvents` - -**GET** `/markets/{id}/events` - -Get Market Events *(Auth required)* - -**Parameters:** -- `id` (path, string) **required** — Market slug OR Market ID -- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID -- `page` (query, integer) -- `limit` (query, integer) -- `since` (query, integer) — Unix seconds (inclusive) -- `until` (query, integer) — Unix seconds (inclusive) - ---- -##### `getMarketsReferrals` - -**GET** `/markets/{id}/referrals` - -Get Market Referrals *(Auth required)* - -**Parameters:** -- `id` (path, string) **required** — Market slug OR Market ID -- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID -- `page` (query, integer) -- `limit` (query, integer) -- `since` (query, integer) -- `until` (query, integer) -- `code` (query, string) - ---- -##### `getMarketsHolders` - -**GET** `/markets/{id}/holders` - -Get Market Holders *(Auth required)* - -**Parameters:** -- `id` (path, string) **required** — Market slug OR Market ID -- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID -- `page` (query, integer) -- `limit` (query, integer) - ---- -##### `postMarketsQuote` - -**POST** `/markets/quote` - -Get Trade Quote *(Auth required)* - - ---- -##### `postMarketsQuoteWithFee` - -**POST** `/markets/quote_with_fee` - -Get Trade Quote with Frontend Fee *(Auth required)* - - ---- -##### `postMarketsClaim` - -**POST** `/markets/claim` - -Get Claim Quote *(Auth required)* - - ---- -##### `getUsersEvents` - -**GET** `/users/{address}/events` - -Get User Events *(Auth required)* - -**Parameters:** -- `address` (path, string) **required** -- `page` (query, integer) -- `limit` (query, integer) -- `market_id` (query, string) -- `market_slug` (query, string) -- `network_id` (query, integer) -- `since` (query, integer) -- `until` (query, integer) - ---- -##### `getUsersReferrals` - -**GET** `/users/{address}/referrals` - -Get User Referrals *(Auth required)* - -**Parameters:** -- `address` (path, string) **required** -- `page` (query, integer) -- `limit` (query, integer) -- `market_id` (query, string) -- `market_slug` (query, string) -- `network_id` (query, integer) -- `since` (query, integer) -- `until` (query, integer) -- `code` (query, string) - ---- -##### `getUsersPortfolio` - -**GET** `/users/{address}/portfolio` - -Get User Portfolio *(Auth required)* - -**Parameters:** -- `address` (path, string) **required** -- `page` (query, integer) -- `limit` (query, integer) -- `min_shares` (query, number) — Default 0.1 -- `market_slug` (query, string) -- `market_id` (query, string) -- `network_id` (query, integer) -- `token_address` (query, string) - ---- -##### `getUsersMarkets` - -**GET** `/users/{address}/markets` - -Get User Markets Portfolio *(Auth required)* +// 4. Check order status +const updatedOrder = await exchange.fetchOrder(order.id); +console.log(`Status: ${updatedOrder.status}`); +console.log(`Filled: ${updatedOrder.filled}/${updatedOrder.amount}`); -**Parameters:** -- `address` (path, string) **required** -- `page` (query, integer) -- `limit` (query, integer) -- `min_shares` (query, number) -- `network_id` (query, integer) -- `state` (query, string) -- `trading_model` (query, string) — Filter portfolio results by trading model (e.g. CLOB, AMM) -- `token_address` (query, string) -- `topics` (query, string) -- `keyword` (query, string) -- `market_ids` (query, string) — Comma-separated list of {networkId}:{marketId} pairs +// 5. Cancel if needed +if (updatedOrder.status === 'open') { + await exchange.cancelOrder(order.id); + console.log('Order cancelled'); +} ---- +// 6. Check positions +const positions = await exchange.fetchPositions(); +positions.forEach(pos => { + console.log(`${pos.outcomeLabel}: ${pos.unrealizedPnL > 0 ? '+' : ''}$${pos.unrealizedPnL.toFixed(2)}`); +}); +``` + +## Data Models + +### `ExchangeOptions` + +Constructor-level options for venue clients (Polymarket, Kalshi, Opinion, etc.). +Hosted mode is the default when pmxtApiKey is set; otherwise the SDK runs against +a local sidecar with venue credentials. + +```typescript +interface ExchangeOptions { +pmxtApiKey: string; // PMXT customer API key. When set, the SDK routes to api.pmxt.dev (catalog) and trade.pmxt.dev (trading). Get one at pmxt.dev/dashboard. +walletAddress: string; // EVM wallet address for hosted reads/writes. Required for endpoints that operate on a wallet (balances, positions, trades, open orders). +signer: object; // Optional pre-built signer for hosted writes. If absent and privateKey is set, the SDK auto-wraps privateKey into a signer. +privateKey: string; // Private key. In hosted mode, used to derive an EIP-712 signer for writes (wraps into EthAccountSigner/EthersSigner). In self-hosted mode, used as the venue credential directly. +baseUrl: string; // Explicit base URL override. When unset, the SDK uses api.pmxt.dev when pmxtApiKey is set, or the local sidecar otherwise. +apiKey: string; // Venue-side API key (e.g. Polymarket CLOB key). Only relevant for self-hosted mode. +autoStartServer: boolean; // Auto-start the local sidecar when running self-hosted. Defaults to true when no pmxtApiKey is set, false when hosted. +} +``` + +--- +### `UnifiedMarket` + + + +```typescript +interface UnifiedMarket { +marketId: string; // The unique identifier for this market +eventId: string; // Link to parent event +title: string; // The market title (e.g., "Will BTC close above $100k on Dec 31?"). +description: string; // Long-form market description or resolution criteria. +slug: string; // URL-friendly slug for the market. +outcomes: MarketOutcome[]; // The possible outcomes for this market. +resolutionDate: string; // When the market is scheduled to resolve. Optional because some venues do not publish a cutoff for every market (e.g. Opinion categorical children) — emit `undefined` rather than coercing to epoch. +volume24h: number; // Trading volume over the past 24 hours (USD). +volume: number; // Total / Lifetime volume +liquidity: number; // Current market liquidity (USD). +openInterest: number; // Total value of outstanding contracts (USD). +url: string; // Canonical URL to view the market on the venue. +image: string; // Optional image URL for the market. +category: string; // Optional category label. Venue-defined — common values include "Sports", "Politics", "Crypto", "Economics", "Science", "Culture". Polymarket uses finer-grained categories like "Bitcoin", "Soccer", "Economic Policy"; Kalshi uses broader ones like "Sports" or "Mentions". +tags: string[]; // Optional list of tags. More granular than category — e.g. ["Crypto", "Crypto Prices", "Bitcoin"] or ["Politics", "Elections", "Trump"]. Tags vary by venue: Polymarket markets carry several, Kalshi typically one. +tickSize: number; // Minimum price increment (e.g., 0.01, 0.001) +status: string; // Venue-native lifecycle status (e.g. 'active', 'closed', 'archived'). +contractAddress: string; // On-chain contract / condition identifier where applicable (Polymarket conditionId, etc.). +sourceMetadata: object; // Raw venue-specific metadata not captured by first-class fields (e.g. Kalshi series_ticker / series_title from the parent event, Polymarket series). Passed through verbatim so downstream consumers can recover anything the unified shape omits. Each venue populates what it has. +sourceExchange: string; // The exchange/venue this market originates from (e.g. 'polymarket', 'kalshi'). Populated by the Router. +yes: any; // Convenience accessor for the YES outcome on a binary market. +no: any; // Convenience accessor for the NO outcome on a binary market. +up: any; // Convenience accessor for the UP outcome on a binary market. +down: any; // Convenience accessor for the DOWN outcome on a binary market. +} +``` + +--- +### `MarketOutcome` + + + +```typescript +interface MarketOutcome { +outcomeId: string; // Outcome ID for trading operations (CLOB Token ID for Polymarket, Market Ticker for Kalshi) +marketId: string; // The market this outcome belongs to (set automatically when outcomes are built) +label: string; // Human-readable outcome label (e.g., "Yes", "No", candidate name). +price: number; // Probability between 0.0 and 1.0. +priceChange24h: number; // Change in price over the past 24 hours, as an absolute probability delta. +metadata: object; // Exchange-specific metadata (e.g., clobTokenId for Polymarket) +} +``` + +--- +### `UnifiedEvent` + +A grouped collection of related markets (e.g., "Who will be Fed Chair?" contains multiple candidate markets). + +```typescript +interface UnifiedEvent { +id: string; // The unique identifier for this event. +title: string; // The event title (e.g., "Who will be Fed Chair?"). +description: string; // Long-form event description. +slug: string; // URL-friendly slug for the event. +markets: UnifiedMarket[]; // Markets grouped under this event. +volume24h: number; // Trading volume over the past 24 hours (USD). +volume: number; // Total / Lifetime volume (sum across markets; undefined if no market provides it) +url: string; // Canonical URL to view the event on the venue. +image: string; // Optional image URL for the event. +category: string; // Optional category label. Venue-defined — common values include "Sports", "Politics", "Crypto", "Economics", "Science", "Culture". Polymarket uses finer-grained categories like "Bitcoin", "Soccer", "Economic Policy"; Kalshi uses broader ones like "Sports" or "Mentions". +tags: string[]; // Optional list of tags. More granular than category — e.g. ["Sports", "FIFA World Cup", "2026 FIFA World Cup"] or ["Politics", "Geopolitics", "Middle East"]. Tags vary by venue: Polymarket markets carry several, Kalshi typically one. +sourceMetadata: object; // Raw venue-specific metadata not captured by first-class fields (e.g. Kalshi series_ticker / series_title, Polymarket series). Passed through verbatim so downstream consumers can recover anything the unified shape omits. Each venue populates what it has. +sourceExchange: string; // The exchange/venue this event originates from (e.g. 'polymarket', 'kalshi'). Populated by the Router. +} +``` + +--- +### `UnifiedSeries` + +A recurring grouping of events on a venue — the fourth tier above Event -> Market -> Outcome. Examples: Kalshi `KXATPMATCH` (every ATP tennis match), Polymarket `wta` (every WTA match), Opinion's daily `collection`. Series only exists where the venue exposes a recurring-event concept; venues without one return an empty array from `fetchSeries`. + +```typescript +interface UnifiedSeries { +id: string; // Stable venue-native series identifier (e.g. "KXATPMATCH" on Kalshi, "atp" on Polymarket Gamma, numeric Gamma id). +ticker: string; // Venue-native ticker, when distinct from `id`. +slug: string; // Venue-native slug. +title: string; // Human-readable series title (e.g. "ATP Match Winner", "WTA"). +description: string; // Long-form series description. +recurrence: string; // Recurrence cadence the venue reports ('daily', 'weekly', 'annual', ...). +events: UnifiedEvent[]; // Child events. Populated when fetched by id; the list form usually omits this to keep payloads small. +url: string; // Canonical venue URL for the series. +image: string; // Venue-hosted image. +sourceExchange: string; // The exchange this series originates from. Populated by the Router. +sourceMetadata: object; // Raw venue-specific fields not promoted to first-class columns. +} +``` + +--- +### `PriceCandle` + + + +```typescript +interface PriceCandle { +timestamp: number; // Unix timestamp in milliseconds marking the start of the candle. +open: number; // Opening price for the interval (probability between 0.0 and 1.0). +high: number; // Highest price during the interval (probability between 0.0 and 1.0). +low: number; // Lowest price during the interval (probability between 0.0 and 1.0). +close: number; // Closing price for the interval (probability between 0.0 and 1.0). +volume: number; // Trading volume during the interval. +} +``` + +--- +### `OrderBook` + + + +```typescript +interface OrderBook { +bids: OrderLevel[]; // Order book bid levels, sorted by price descending. +asks: OrderLevel[]; // Order book ask levels, sorted by price ascending. +timestamp: number; // Unix timestamp in milliseconds when the snapshot was taken. +datetime: string; // ISO 8601 datetime string of the snapshot (CCXT-compatible). +isNegRisk: boolean; // Whether the venue marks this snapshot as a negative-risk market. +lastTradePrice: number; // Last traded price from venues that include it with the book snapshot. +sourceMetadata: object; // Venue-specific metadata preserved from the raw order book snapshot. +} +``` + +--- +### `OrderLevel` + + + +```typescript +interface OrderLevel { +price: number; // 0.0 to 1.0 (probability) +size: number; // contracts/shares +orderCount: number; // +} +``` + +--- +### `Trade` + + + +```typescript +interface Trade { +id: string; // The unique identifier for this trade. +timestamp: number; // Unix timestamp in milliseconds when the trade executed. +price: number; // Probability between 0.0 and 1.0. +amount: number; // Size of the trade in contracts/shares. +side: string; // Trade side from the taker's perspective. +outcomeId: string; // The outcome this trade is for (if known). +} +``` + +--- +### `UserTrade` + + + +```typescript +interface UserTrade { +id: string; // The unique identifier for this trade. +timestamp: number; // Unix timestamp in milliseconds when the trade executed. +price: number; // Probability between 0.0 and 1.0. +amount: number; // Size of the trade in contracts/shares. +side: string; // Trade side from the taker's perspective. +outcomeId: string; // The outcome this trade is for (if known). +orderId: string; // The order that produced this trade, if known. +marketId: string; // The market this trade belongs to, when the venue exposes it (e.g. derivable from the fill's coin/asset). +fee: number; // Trading fee paid by the user for this fill, when the venue exposes it. +txHash: string; // Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. +chain: string; // Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. +blockNumber: number; // Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. +} +``` + +--- +### `Order` + + + +```typescript +interface Order { +id: string; // The exchange-assigned order identifier. +marketId: string; // The market this order was placed on. +outcomeId: string; // The outcome this order was placed on. +side: string; // Order side: buy or sell. +type: string; // Order type: market (execute immediately) or limit (resting at a price). +price: number; // For limit orders +amount: number; // Size in contracts/shares +status: string; // Lifecycle status of the order. +filled: number; // Amount filled (USDC cost for buys, shares for sells) +filledShares: number; // Amount filled in shares/contracts (if different from USDC-denominated `filled`). +remaining: number; // Amount remaining +timestamp: number; // Unix timestamp in milliseconds when the order was created. +fee: number; // Fee paid for this order, if known. +feeRateBps: number; // Fee rate in basis points applied to this order (e.g. 100 = 1%). +txHash: string; // Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. +chain: string; // Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. +blockNumber: number; // Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. +} +``` + +--- +### `Position` + +A current position in a market. In hosted mode, `outcomeLabel`, `entryPrice`, `currentPrice` and `unrealizedPnL` may be null when the server cannot derive them (e.g. `with_mtm=false` or no fill history). Venue-direct callers continue to populate every field. + +```typescript +interface Position { +marketId: string; // The market this position is held in. +outcomeId: string; // The outcome this position is held in. +outcomeLabel: string; // Human-readable label for the outcome held. Optional in hosted mode. +size: number; // Positive for long, negative for short +entryPrice: number; // Average entry price for the position (probability between 0.0 and 1.0). Optional in hosted mode when no fill history is available. +currentPrice: number; // Current mark price for the position (probability between 0.0 and 1.0). Optional in hosted mode when mark-to-market data is unavailable. +currentValue: number; // Current market value of the position (size * currentPrice). Null when currentPrice is unavailable. +unrealizedPnL: number; // Unrealized profit or loss at the current price (USD). Optional in hosted mode when mark-to-market data is unavailable. +realizedPnL: number; // Realized profit or loss booked so far (USD). +txHash: string; // Populated in hosted mode after on-chain settlement (from the last fill); null for local-mode and for non-on-chain venues. +chain: string; // Populated in hosted mode after on-chain settlement (from the last fill); null for local-mode and for non-on-chain venues. +blockNumber: number; // Populated in hosted mode after on-chain settlement (from the last fill); null for local-mode and for non-on-chain venues. +} +``` + +--- +### `Balance` + + + +```typescript +interface Balance { +currency: string; // e.g., 'USDC' +total: number; // Total balance including funds locked in open orders. +available: number; // Balance available to trade (excludes locked funds). +locked: number; // In open orders +venue: string; // Hosted-mode: which venue this balance belongs to in a multi-venue response. Null when the balance is venue-agnostic. +} +``` + +--- +### `ExecutionPriceResult` + + + +```typescript +interface ExecutionPriceResult { +price: number; // +filledAmount: number; // +fullyFilled: boolean; // +} +``` + +--- +### `PaginatedMarketsResult` + +Shape returned by fetchMarketsPaginated + +```typescript +interface PaginatedMarketsResult { +data: UnifiedMarket[]; // The page of unified markets +total: number; // Total number of markets in the snapshot +nextCursor: string; // Cursor to pass to the next call, or undefined if this is the last page +} +``` + +--- +### `PaginatedEventsResult` + +Shape returned by fetchEventsPaginated + +```typescript +interface PaginatedEventsResult { +data: UnifiedEvent[]; // The page of unified events +total: number; // Total number of events in the snapshot +nextCursor: string; // Cursor to pass to the next call, or undefined if this is the last page +} +``` + +--- +### `BuiltOrder` + + + +```typescript +interface BuiltOrder { +exchange: string; // The exchange name this order was built for. +params: any; // The original params used to build this order. +signedOrder: object; // For CLOB exchanges (Polymarket): the EIP-712 signed order ready to POST to the exchange's order endpoint. +tx: object; // For on-chain AMM exchanges: the EVM transaction payload. Reserved for future exchanges; no current exchange populates this. +raw: any; // The raw, exchange-native payload. Always present. +expiry: number; // Unix epoch (ms) when this built order expires server-side. Submitting after expiry returns BUILT_ORDER_EXPIRED. +} +``` + +--- +### `MarketFilterCriteria` + + + +```typescript +interface MarketFilterCriteria { +text: string; // +searchIn: string[]; // Default: ['title'] +volume24h: object; // +volume: object; // Filter by total (lifetime) volume range +liquidity: object; // Filter by current liquidity range +openInterest: object; // Filter by open interest range +resolutionDate: object; // +category: string; // Filter by category. Common values: "Sports", "Politics", "Crypto", "Bitcoin", "Soccer", "Economic Policy" (Polymarket) or "Sports", "Mentions" (Kalshi). +tags: string[]; // Match markets that have ANY of these tags. Examples: ["Crypto", "Crypto Prices"], ["Politics", "Elections"], ["Sports", "FIFA World Cup"]. +price: object; // +priceChange24h: object; // +} +``` + +--- +### `EventFilterCriteria` + + + +```typescript +interface EventFilterCriteria { +text: string; // +searchIn: string[]; // Default: ['title'] +category: string; // Filter by category. Common values: "Sports", "Politics", "Crypto", "Bitcoin", "Soccer", "Economic Policy" (Polymarket) or "Sports", "Mentions" (Kalshi). +tags: string[]; // Match events that have ANY of these tags. Examples: ["Crypto"], ["Politics", "Geopolitics", "Middle East"], ["Sports", "FIFA World Cup"]. +marketCount: object; // +totalVolume: object; // Sum of market volumes +} +``` + +--- +### `MatchResult` + + + +```typescript +interface MatchResult { +market: UnifiedMarket; // +sourceMarket: any; // The source market this was matched against. Present in browse mode (no marketId), absent in lookup mode. +relation: string; // +confidence: number; // +reasoning: string; // +bestBid: number; // +bestAsk: number; // +} +``` + +--- +### `EventMatchResult` + + + +```typescript +interface EventMatchResult { +event: UnifiedEvent; // +marketMatches: MatchResult[]; // +} +``` + +--- +### `PriceComparison` + + + +```typescript +interface PriceComparison { +market: UnifiedMarket; // +relation: string; // +confidence: number; // +reasoning: string; // +bestBid: number; // +bestAsk: number; // +venue: string; // +} +``` + +--- +### `ArbitrageOpportunity` + + + +```typescript +interface ArbitrageOpportunity { +marketA: UnifiedMarket; // +marketB: UnifiedMarket; // +spread: number; // +buyVenue: string; // +sellVenue: string; // +buyPrice: number; // +sellPrice: number; // +relation: string; // The set-theoretic relation between the two markets (e.g. identity, subset). +confidence: number; // Match confidence score (0.0 to 1.0). +} +``` + +--- +### `MatchedMarketPair` + + + +```typescript +interface MatchedMarketPair { +marketA: UnifiedMarket; // +marketB: UnifiedMarket; // +priceDifference: number; // +venueA: string; // +venueB: string; // +priceA: number; // +priceB: number; // +relation: string; // The set-theoretic relation between the two markets (e.g. identity, subset). +confidence: number; // Match confidence score (0.0 to 1.0). +reasoning: string; // Why the two markets were matched. +} +``` + +--- +### `ExchangeCredentials` + +Optional authentication credentials for exchange operations. + +```typescript +interface ExchangeCredentials { +apiKey: string; // +apiSecret: string; // Standard API secret for HMAC-authenticated exchanges +passphrase: string; // Standard API passphrase for HMAC-authenticated exchanges +apiToken: string; // Metaculus: `Authorization: Token ` for higher rate limits +privateKey: string; // Required for Polymarket L1 auth +signatureType: any; // 0 = EOA, 1 = Poly Proxy, 2 = Gnosis Safe (Can also use 'eoa', 'polyproxy', 'gnosis_safe') +funderAddress: string; // The address funding the trades (defaults to signer address) +walletAddress: string; // +baseUrl: string; // +} +``` + +--- +### `FeedTicker` + +CCXT-compatible ticker with last trade price and metadata. + +```typescript +interface FeedTicker { +symbol: string; // Trading pair symbol (e.g. BTC/USD) +info: any; // Raw provider-specific data +timestamp: number; // Unix timestamp in milliseconds +datetime: string; // +high: number; // +low: number; // +bid: number; // +bidVolume: number; // +ask: number; // +askVolume: number; // +vwap: number; // +open: number; // +close: number; // +last: number; // Last trade price +previousClose: number; // +change: number; // +percentage: number; // +average: number; // +quoteVolume: number; // +baseVolume: number; // +indexPrice: number; // +markPrice: number; // +} +``` + +--- +### `FeedMarket` + +CCXT-compatible market descriptor for a data feed. + +```typescript +interface FeedMarket { +id: string; // +symbol: string; // +base: string; // +quote: string; // +active: boolean; // +type: string; // +info: any; // Provider-specific metadata +} +``` + +--- +### `FeedOracleRound` + +Chainlink oracle price round. + +```typescript +interface FeedOracleRound { +feed: string; // Price feed pair (e.g. BTC/USD) +roundId: string; // +answer: number; // Oracle price +startedAt: number; // +updatedAt: number; // +answeredInRound: string; // +decimals: number; // +description: string; // +} +``` + +--- + +## Filter Parameters + +### `BaseRequest` + +Base request structure with optional credentials + +```typescript +interface BaseRequest { +credentials?: ExchangeCredentials; // +} +``` + +--- +### `MarketFilterParams` + + + +```typescript +interface MarketFilterParams { +limit?: number; // Maximum number of results to return +offset?: number; // Pagination offset — number of results to skip +sort?: string; // Sort order for results +status?: string; // Filter by market status (default: 'active', 'inactive' and 'closed' are interchangeable) +searchIn?: string; // Where to search (default: 'title') +query?: string; // For keyword search +slug?: string; // For slug/ticker lookup +marketId?: string; // Direct lookup by market ID +outcomeId?: string; // Reverse lookup -- find market containing this outcome +eventId?: string; // Find markets belonging to an event +page?: number; // For pagination (used by Limitless) +similarityThreshold?: number; // For semantic search (used by Limitless) +sourceExchange?: string; // Filter by source venue (e.g. 'polymarket', 'kalshi', 'myriad'). `exchange` is an alias. +exchange?: string; // Alias for `sourceExchange`. +} +``` + +--- +### `EventFetchParams` + + + +```typescript +interface EventFetchParams { +query?: string; // For keyword search +limit?: number; // Maximum number of results to return +cursor?: string; // Opaque venue pagination cursor, where supported. +offset?: number; // Pagination offset — number of results to skip +sort?: string; // Sort order for results +status?: string; // Filter by event status (default: 'active', 'inactive' and 'closed' are interchangeable) +searchIn?: string; // Where to search (default: 'title') +eventId?: string; // Direct lookup by event ID +slug?: string; // Lookup by event slug +series?: string; // Filter events by their parent series. Accepts the venue-native series id / ticker / slug (e.g. Kalshi `"KXATPMATCH"`, Polymarket `"wta"`). Passed through to the vendor where supported, otherwise applied to `sourceMetadata` after fetch. +filter?: any; // Optional client-side filter applied after fetching +category?: string; // Filter by category. Each event belongs to a venue-assigned category such as "Sports", "Politics", "Crypto", "Bitcoin", "Soccer", "Economic Policy" (Polymarket) or "Sports", "Mentions" (Kalshi). +tags?: string[]; // Filter by tags. Returns events matching ANY of the provided tags. Tags are more specific than categories -- for example a "Politics" event might carry tags ["Politics", "Geopolitics", "Middle East", "Iran"]. Common tags include "Crypto", "Elections", "Fed Rates", "FIFA World Cup", "Trump". +sourceExchange?: string; // Filter by source venue (e.g. 'polymarket', 'kalshi', 'myriad'). `exchange` is an alias. +exchange?: string; // Alias for `sourceExchange`. +} +``` + +--- +### `HistoryFilterParams` + +Deprecated - use OHLCVParams or TradesParams instead. Resolution is optional for backward compatibility. + +```typescript +interface HistoryFilterParams { +resolution?: string; // Optional for backward compatibility +start?: string; // Start of the time range +end?: string; // End of the time range +limit?: number; // Maximum number of results to return +} +``` + +--- +### `OHLCVParams` + + + +```typescript +interface OHLCVParams { +resolution: string; // Required for candle aggregation +start?: string; // Start of the time range +end?: string; // End of the time range +limit?: number; // Maximum number of results to return +} +``` + +--- +### `FetchOrderBookParams` + + + +```typescript +interface FetchOrderBookParams { +side?: string; // Outcome side: 'yes' or 'no'. Required for exchanges like Limitless where the API returns a single orderbook per market. +outcome?: string; // Outcome alias: 'yes' or 'no', or an outcome token ID. When set, the first argument is treated as a market ID and this value selects which outcome's order book to fetch. Accepts the literal strings 'yes'/'no' (resolved via a market lookup) or a raw outcome token ID. +since?: number; // Unix timestamp (ms) — fetch a historical snapshot at or before this time, or the start of a range when combined with `until` (hosted API only). +until?: number; // Unix timestamp (ms) — end of a historical range. When combined with `since`, returns an array of reconstructed L2 OrderBook snapshots between `since` and `until` (hosted API only). +} +``` + +--- +### `TradesParams` + + + +```typescript +interface TradesParams { +start?: string; // Start of the time range +end?: string; // End of the time range +limit?: number; // Maximum number of results to return (max {@link MAX_TRADES_LIMIT}) +} +``` + +--- +### `CreateOrderParams` + + + +```typescript +interface CreateOrderParams { +marketId: string; // The market to trade on. +outcomeId: string; // The outcome to trade. +side: string; // Order side: buy or sell. +type: string; // Order type: market (execute immediately) or limit (resting at a price). +amount: number; // Size of the order in contracts/shares. +price?: number; // Required for limit orders +denom?: string; // Hosted mode: amount unit. +slippage_pct?: number; // Hosted mode: maximum market-order slippage percentage. +fee?: number; // Optional fee rate (e.g., 1000 for 0.1%) +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 +} +``` + +--- +### `MyTradesParams` + + + +```typescript +interface MyTradesParams { +outcomeId?: string; // filter to specific outcome/ticker +marketId?: string; // filter to specific market +since?: string; // Only return records after this date +until?: string; // Only return records before this date +limit?: number; // Maximum number of results to return +cursor?: string; // for Kalshi cursor pagination +} +``` + +--- +### `OrderHistoryParams` + + + +```typescript +interface OrderHistoryParams { +marketId?: string; // required for Limitless (slug) +since?: string; // Only return records after this date +until?: string; // Only return records before this date +limit?: number; // Maximum number of results to return +cursor?: string; // Opaque pagination cursor from a previous response +} +``` + +--- +### `FetchMarketMatchesParams` + + + +```typescript +interface FetchMarketMatchesParams { +query?: string; // Keyword search across matched market titles. +category?: string; // Filter matches by category. +market?: any; // Pass a UnifiedMarket directly instead of marketId/slug/url. +marketId?: string; // Lookup a specific market by ID. Omit for browse mode. +slug?: string; // +url?: string; // +relation?: string; // +minConfidence?: number; // +limit?: number; // +includePrices?: boolean; // +minDifference?: number; // Minimum price difference between venues. Browse mode only. +sort?: string; // Sort order. Browse mode only. +} +``` + +--- +### `FetchEventMatchesParams` + + + +```typescript +interface FetchEventMatchesParams { +query?: string; // Keyword search across matched event titles. +category?: string; // Filter matches by category. +event?: any; // Pass a UnifiedEvent directly instead of eventId/slug. +eventId?: string; // Lookup a specific event by ID. Omit for browse mode. +slug?: string; // +relation?: string; // +minConfidence?: number; // +limit?: number; // +includePrices?: boolean; // +} +``` + +--- +### `FetchArbitrageParams` + + + +```typescript +interface FetchArbitrageParams { +minSpread?: number; // +category?: string; // +limit?: number; // +relations?: string[]; // Comma-separated relation types to include (default: 'identity'). +} +``` + +--- +### `FetchMatchedMarketsParams` + + + +```typescript +interface FetchMatchedMarketsParams { +minDifference?: number; // +category?: string; // +limit?: number; // +relations?: string[]; // Comma-separated relation types to include (default: 'identity'). +} +``` + +--- + +### `CreateOrderInput` + +`createOrder` and `buildOrder` accept either explicit `marketId` / `outcomeId` +fields or an outcome object returned by `fetchMarkets`. + +```typescript +type CreateOrderInput = + | (CreateOrderParams & { outcome?: never }) + | (Omit & { + outcome: MarketOutcome; + marketId?: never; + outcomeId?: never; + }); +``` + +--- + +## Low-Level API Reference + +Advanced: call exchange-specific REST endpoints directly via `exchange.callApi(name, params)`. + +```typescript +// Example +const result = await exchange.callApi('operationName', { param: 'value' }); +``` + +### Polymarket + +| `callApi()` name | Method | Path | Summary | Auth | +|-----------------|--------|------|---------|------| +| `getGammaStatus` | `GET` | `/status` | Gamma API Health check | Public | +| `listTeams` | `GET` | `/teams` | List teams | Public | +| `getSportsMetadata` | `GET` | `/sports` | Get sports metadata information | Public | +| `getSportsMarketTypes` | `GET` | `/sports/market-types` | Get valid sports market types | Public | +| `listTags` | `GET` | `/tags` | List tags | Public | +| `getTag` | `GET` | `/tags/{id}` | Get tag by id | Public | +| `getRelatedTagsById` | `GET` | `/tags/{id}/related-tags` | Get related tags (relationships) by tag id | Public | +| `getRelatedTagsBySlug` | `GET` | `/tags/slug/{slug}/related-tags` | Get related tags (relationships) by tag slug | Public | +| `getTagsRelatedToATagById` | `GET` | `/tags/{id}/related-tags/tags` | Get tags related to a tag id | Public | +| `getTagsRelatedToATagBySlug` | `GET` | `/tags/slug/{slug}/related-tags/tags` | Get tags related to a tag slug | Public | +| `listEvents` | `GET` | `/events` | List events | Public | +| `getEvent` | `GET` | `/events/{id}` | Get event by id | Public | +| `getEventTags` | `GET` | `/events/{id}/tags` | Get event tags | Public | +| `getEventBySlug` | `GET` | `/events/slug/{slug}` | Get event by slug | Public | +| `listMarkets` | `GET` | `/markets` | List markets | Public | +| `getMarket` | `GET` | `/markets/{id}` | Get market by id | Public | +| `getMarketTags` | `GET` | `/markets/{id}/tags` | Get market tags by id | Public | +| `getMarketBySlug` | `GET` | `/markets/slug/{slug}` | Get market by slug | Public | +| `listSeries` | `GET` | `/series` | List series | Public | +| `getSeries` | `GET` | `/series/{id}` | Get series by id | Public | +| `listComments` | `GET` | `/comments` | List comments | Public | +| `getCommentsById` | `GET` | `/comments/{id}` | Get comments by comment id | Public | +| `getPublicProfile` | `GET` | `/public-profile` | Get public profile by wallet address | Public | +| `publicSearch` | `GET` | `/public-search` | Search markets, events, and profiles | Public | +| `getBook` | `GET` | `/book` | Get order book summary | Public | +| `postBooks` | `POST` | `/books` | Get multiple order books summaries | Public | +| `getPrice` | `GET` | `/price` | Get market price | Public | +| `getPrices` | `GET` | `/prices` | Get multiple market prices | Public | +| `postPrices` | `POST` | `/prices` | Get multiple market prices by request | Public | +| `getMidpoint` | `GET` | `/midpoint` | Get midpoint price | Public | +| `postSpreads` | `POST` | `/spreads` | Get bid-ask spreads | Public | +| `getPricesHistory` | `GET` | `/prices-history` | Get price history for a traded token | Public | +| `getMarketsByToken` | `GET` | `/markets-by-token/{token_id}` | Get market by token | Public | +| `postAuthApiKey` | `POST` | `/auth/api-key` | Create API Key | Required | +| `getAuthDeriveApiKey` | `GET` | `/auth/derive-api-key` | Derive API Key | Required | +| `postOrder` | `POST` | `/order` | Place Single Order | Required | +| `deleteOrder` | `DELETE` | `/order` | Cancel Single Order | Required | +| `postOrders` | `POST` | `/orders` | Place Multiple Orders (Batch) | Required | +| `deleteOrders` | `DELETE` | `/orders` | Cancel Multiple Orders | Required | +| `deleteCancelAll` | `DELETE` | `/cancel-all` | Cancel All Orders | Required | +| `deleteCancelMarketOrders` | `DELETE` | `/cancel-market-orders` | Cancel Market Orders | Required | +| `postV1Heartbeats` | `POST` | `/v1/heartbeats` | Refresh authenticated session heartbeat | Required | +| `getDataOrder` | `GET` | `/data/order/{id}` | Get Order | Required | +| `getDataOrders` | `GET` | `/data/orders` | Get Active Orders | Required | +| `getDataTrades` | `GET` | `/data/trades` | Get Trades | Required | +| `getOrderScoring` | `GET` | `/order-scoring` | Check Order Reward Scoring | Required | +| `postOrdersScoring` | `POST` | `/orders-scoring` | Check Multiple Orders Scoring | Required | +| `updateBalanceAllowance` | `GET` | `/balance-allowance/update` | Update balance and allowance cache | Required | +| `getGeoblock` | `GET` | `/geoblock` | Check Geoblock Status | Public | +| `getDataApiHealth` | `GET` | `/` | Data API Health check | Public | +| `getPositions` | `GET` | `/positions` | Get current positions for a user | Public | +| `getV1AccountingSnapshot` | `GET` | `/v1/accounting/snapshot` | Download an accounting snapshot (ZIP of CSVs) | Public | +| `getTraded` | `GET` | `/traded` | Get total markets a user has traded | Public | +| `getOi` | `GET` | `/oi` | Get open interest | Public | +| `getLiveVolume` | `GET` | `/live-volume` | Get live volume for an event | Public | +| `getTrades` | `GET` | `/trades` | Get trades for a user or markets | Public | +| `getActivity` | `GET` | `/activity` | Get user activity | Public | +| `getHolders` | `GET` | `/holders` | Get top holders for markets | Public | +| `getValue` | `GET` | `/value` | Get total value of a user's positions | Public | +| `getClosedPositions` | `GET` | `/closed-positions` | Get closed positions for a user | Public | +| `getV1MarketPositions` | `GET` | `/v1/market-positions` | Get positions for a market | Public | +| `getV1Leaderboard` | `GET` | `/v1/leaderboard` | Get trader leaderboard rankings | Public | +| `getV1BuildersLeaderboard` | `GET` | `/v1/builders/leaderboard` | Get aggregated builder leaderboard | Public | + +#### Endpoint Details + +##### `getGammaStatus` + +**GET** `/status` + +Gamma API Health check + + +--- +##### `listTeams` + +**GET** `/teams` + +List teams + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `league` (query, array) +- `name` (query, array) +- `abbreviation` (query, array) + +--- +##### `getSportsMetadata` + +**GET** `/sports` + +Get sports metadata information + + +--- +##### `getSportsMarketTypes` + +**GET** `/sports/market-types` + +Get valid sports market types + + +--- +##### `listTags` + +**GET** `/tags` + +List tags + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `include_template` (query, boolean) +- `is_carousel` (query, boolean) + +--- +##### `getTag` + +**GET** `/tags/{id}` + +Get tag by id + +**Parameters:** +- `` (, string) +- `include_template` (query, boolean) + +--- +##### `getRelatedTagsById` + +**GET** `/tags/{id}/related-tags` + +Get related tags (relationships) by tag id + +**Parameters:** +- `` (, string) +- `omit_empty` (query, boolean) +- `status` (query, string) — enum: `active,closed,all` + +--- +##### `getRelatedTagsBySlug` + +**GET** `/tags/slug/{slug}/related-tags` + +Get related tags (relationships) by tag slug + +**Parameters:** +- `` (, string) +- `omit_empty` (query, boolean) +- `status` (query, string) — enum: `active,closed,all` + +--- +##### `getTagsRelatedToATagById` + +**GET** `/tags/{id}/related-tags/tags` + +Get tags related to a tag id + +**Parameters:** +- `` (, string) +- `omit_empty` (query, boolean) +- `status` (query, string) — enum: `active,closed,all` + +--- +##### `getTagsRelatedToATagBySlug` + +**GET** `/tags/slug/{slug}/related-tags/tags` + +Get tags related to a tag slug + +**Parameters:** +- `` (, string) +- `omit_empty` (query, boolean) +- `status` (query, string) — enum: `active,closed,all` + +--- +##### `listEvents` + +**GET** `/events` + +List events + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `id` (query, array) +- `tag_id` (query, integer) +- `exclude_tag_id` (query, array) +- `slug` (query, array) +- `tag_slug` (query, string) +- `related_tags` (query, boolean) +- `active` (query, boolean) +- `archived` (query, boolean) +- `featured` (query, boolean) +- `cyom` (query, boolean) +- `include_chat` (query, boolean) +- `include_template` (query, boolean) +- `recurrence` (query, string) +- `closed` (query, boolean) +- `liquidity_min` (query, number) +- `liquidity_max` (query, number) +- `volume_min` (query, number) +- `volume_max` (query, number) +- `start_date_min` (query, string) +- `start_date_max` (query, string) +- `end_date_min` (query, string) +- `end_date_max` (query, string) + +--- +##### `getEvent` + +**GET** `/events/{id}` + +Get event by id + +**Parameters:** +- `` (, string) +- `include_chat` (query, boolean) +- `include_template` (query, boolean) + +--- +##### `getEventTags` + +**GET** `/events/{id}/tags` + +Get event tags + +**Parameters:** +- `` (, string) + +--- +##### `getEventBySlug` + +**GET** `/events/slug/{slug}` + +Get event by slug + +**Parameters:** +- `` (, string) +- `include_chat` (query, boolean) +- `include_template` (query, boolean) + +--- +##### `listMarkets` + +**GET** `/markets` + +List markets + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `id` (query, array) +- `slug` (query, array) +- `clob_token_ids` (query, array) +- `condition_ids` (query, array) +- `market_maker_address` (query, array) +- `liquidity_num_min` (query, number) +- `liquidity_num_max` (query, number) +- `volume_num_min` (query, number) +- `volume_num_max` (query, number) +- `start_date_min` (query, string) +- `start_date_max` (query, string) +- `end_date_min` (query, string) +- `end_date_max` (query, string) +- `tag_id` (query, integer) +- `related_tags` (query, boolean) +- `cyom` (query, boolean) +- `uma_resolution_status` (query, string) +- `game_id` (query, string) +- `sports_market_types` (query, array) +- `rewards_min_size` (query, number) +- `question_ids` (query, array) +- `include_tag` (query, boolean) +- `closed` (query, boolean) + +--- +##### `getMarket` + +**GET** `/markets/{id}` + +Get market by id + +**Parameters:** +- `` (, string) +- `include_tag` (query, boolean) + +--- +##### `getMarketTags` + +**GET** `/markets/{id}/tags` + +Get market tags by id + +**Parameters:** +- `` (, string) + +--- +##### `getMarketBySlug` + +**GET** `/markets/slug/{slug}` + +Get market by slug + +**Parameters:** +- `` (, string) +- `include_tag` (query, boolean) + +--- +##### `listSeries` + +**GET** `/series` + +List series + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `slug` (query, array) +- `categories_ids` (query, array) +- `categories_labels` (query, array) +- `closed` (query, boolean) +- `include_chat` (query, boolean) +- `recurrence` (query, string) + +--- +##### `getSeries` + +**GET** `/series/{id}` + +Get series by id + +**Parameters:** +- `` (, string) +- `include_chat` (query, boolean) + +--- +##### `listComments` + +**GET** `/comments` + +List comments + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `parent_entity_type` (query, string) — enum: `Event,Series,market` +- `parent_entity_id` (query, integer) +- `get_positions` (query, boolean) +- `holders_only` (query, boolean) + +--- +##### `getCommentsById` + +**GET** `/comments/{id}` + +Get comments by comment id + +**Parameters:** +- `id` (path, integer) **required** +- `get_positions` (query, boolean) + +--- +##### `getPublicProfile` + +**GET** `/public-profile` + +Get public profile by wallet address + +**Parameters:** +- `address` (query, string) **required** — The wallet address (proxy wallet or user address) + +--- +##### `publicSearch` + +**GET** `/public-search` + +Search markets, events, and profiles + +**Parameters:** +- `q` (query, string) **required** +- `cache` (query, boolean) +- `events_status` (query, string) +- `limit_per_type` (query, integer) +- `page` (query, integer) +- `events_tag` (query, array) +- `keep_closed_markets` (query, integer) +- `sort` (query, string) +- `ascending` (query, boolean) +- `search_tags` (query, boolean) +- `search_profiles` (query, boolean) +- `recurrence` (query, string) +- `exclude_tag_id` (query, array) +- `optimized` (query, boolean) + +--- +##### `getBook` + +**GET** `/book` + +Get order book summary + +**Parameters:** +- `token_id` (query, string) **required** + +--- +##### `postBooks` + +**POST** `/books` + +Get multiple order books summaries + + +--- +##### `getPrice` + +**GET** `/price` + +Get market price + +**Parameters:** +- `token_id` (query, string) **required** +- `side` (query, string) **required** — enum: `BUY,SELL` + +--- +##### `getPrices` + +**GET** `/prices` + +Get multiple market prices + + +--- +##### `postPrices` + +**POST** `/prices` + +Get multiple market prices by request + + +--- +##### `getMidpoint` + +**GET** `/midpoint` + +Get midpoint price + +**Parameters:** +- `token_id` (query, string) **required** + +--- +##### `postSpreads` + +**POST** `/spreads` + +Get bid-ask spreads + + +--- +##### `getPricesHistory` + +**GET** `/prices-history` + +Get price history for a traded token + +**Parameters:** +- `market` (query, string) **required** +- `startTs` (query, number) +- `endTs` (query, number) +- `interval` (query, string) — enum: `1m,1w,1d,6h,1h,max` +- `fidelity` (query, number) + +--- +##### `getMarketsByToken` + +**GET** `/markets-by-token/{token_id}` + +Get market by token + +**Parameters:** +- `token_id` (path, string) **required** + +--- +##### `postAuthApiKey` + +**POST** `/auth/api-key` + +Create API Key *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `getAuthDeriveApiKey` + +**GET** `/auth/derive-api-key` + +Derive API Key *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `postOrder` + +**POST** `/order` + +Place Single Order *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `deleteOrder` + +**DELETE** `/order` + +Cancel Single Order *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `postOrders` + +**POST** `/orders` + +Place Multiple Orders (Batch) *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `deleteOrders` + +**DELETE** `/orders` + +Cancel Multiple Orders *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `deleteCancelAll` + +**DELETE** `/cancel-all` + +Cancel All Orders *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `deleteCancelMarketOrders` + +**DELETE** `/cancel-market-orders` + +Cancel Market Orders *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `postV1Heartbeats` + +**POST** `/v1/heartbeats` + +Refresh authenticated session heartbeat *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `getDataOrder` + +**GET** `/data/order/{id}` + +Get Order *(Auth required)* + +**Parameters:** +- `` (, string) +- `id` (path, string) **required** + +--- +##### `getDataOrders` + +**GET** `/data/orders` + +Get Active Orders *(Auth required)* + +**Parameters:** +- `` (, string) +- `id` (query, string) +- `market` (query, string) +- `asset_id` (query, string) +- `next_cursor` (query, string) — Cursor for keyset pagination + +--- +##### `getDataTrades` + +**GET** `/data/trades` + +Get Trades *(Auth required)* + +**Parameters:** +- `` (, string) +- `id` (query, string) +- `market` (query, string) +- `maker` (query, string) +- `taker` (query, string) +- `before` (query, string) +- `after` (query, string) + +--- +##### `getOrderScoring` + +**GET** `/order-scoring` + +Check Order Reward Scoring *(Auth required)* + +**Parameters:** +- `` (, string) +- `orderId` (query, string) **required** + +--- +##### `postOrdersScoring` + +**POST** `/orders-scoring` + +Check Multiple Orders Scoring *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `updateBalanceAllowance` + +**GET** `/balance-allowance/update` + +Update balance and allowance cache *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `getGeoblock` + +**GET** `/geoblock` + +Check Geoblock Status + + +--- +##### `getDataApiHealth` + +**GET** `/` + +Data API Health check + + +--- +##### `getPositions` + +**GET** `/positions` + +Get current positions for a user + +**Parameters:** +- `user` (query, string) **required** — User address (required) +- `market` (query, array) — Comma-separated list of condition IDs. Mutually exclusive with eventId. +- `eventId` (query, array) — Comma-separated list of event IDs. Mutually exclusive with market. +- `sizeThreshold` (query, number) +- `redeemable` (query, boolean) +- `mergeable` (query, boolean) +- `limit` (query, integer) +- `offset` (query, integer) +- `sortBy` (query, string) — enum: `CURRENT,INITIAL,TOKENS,CASHPNL,PERCENTPNL,TITLE,RESOLVING,PRICE,AVGPRICE` +- `sortDirection` (query, string) — enum: `ASC,DESC` +- `title` (query, string) + +--- +##### `getV1AccountingSnapshot` + +**GET** `/v1/accounting/snapshot` + +Download an accounting snapshot (ZIP of CSVs) + +**Parameters:** +- `user` (query, string) **required** — User address (0x-prefixed) + +--- +##### `getTraded` + +**GET** `/traded` + +Get total markets a user has traded + +**Parameters:** +- `user` (query, string) **required** + +--- +##### `getOi` + +**GET** `/oi` + +Get open interest + +**Parameters:** +- `market` (query, array) + +--- +##### `getLiveVolume` + +**GET** `/live-volume` + +Get live volume for an event + +**Parameters:** +- `id` (query, integer) **required** + +--- +##### `getTrades` + +**GET** `/trades` + +Get trades for a user or markets + +**Parameters:** +- `limit` (query, integer) +- `offset` (query, integer) +- `takerOnly` (query, boolean) +- `filterType` (query, string) — Must be provided together with filterAmount. — enum: `CASH,TOKENS` +- `filterAmount` (query, number) — Must be provided together with filterType. +- `market` (query, array) — Comma-separated list of condition IDs. Mutually exclusive with eventId. +- `eventId` (query, array) — Comma-separated list of event IDs. Mutually exclusive with market. +- `user` (query, string) +- `side` (query, string) — enum: `BUY,SELL` + +--- +##### `getActivity` + +**GET** `/activity` + +Get user activity + +**Parameters:** +- `limit` (query, integer) +- `offset` (query, integer) +- `user` (query, string) **required** +- `market` (query, array) — Comma-separated list of condition IDs. Mutually exclusive with eventId. +- `eventId` (query, array) — Comma-separated list of event IDs. Mutually exclusive with market. +- `type` (query, array) +- `start` (query, integer) +- `end` (query, integer) +- `sortBy` (query, string) — enum: `TIMESTAMP,TOKENS,CASH` +- `sortDirection` (query, string) — enum: `ASC,DESC` +- `side` (query, string) — enum: `BUY,SELL` + +--- +##### `getHolders` + +**GET** `/holders` + +Get top holders for markets + +**Parameters:** +- `limit` (query, integer) — Maximum number of holders to return per token. Capped at 20. +- `market` (query, array) **required** — Comma-separated list of condition IDs. +- `minBalance` (query, integer) + +--- +##### `getValue` + +**GET** `/value` + +Get total value of a user's positions + +**Parameters:** +- `user` (query, string) **required** +- `market` (query, array) + +--- +##### `getClosedPositions` + +**GET** `/closed-positions` + +Get closed positions for a user + +**Parameters:** +- `user` (query, string) **required** — The address of the user in question +- `market` (query, array) — The conditionId of the market in question. Supports multiple csv separated values. Cannot be used with the eventId param. +- `title` (query, string) — Filter by market title +- `eventId` (query, array) — The event id of the event in question. Supports multiple csv separated values. Returns positions for all markets for those event ids. Cannot be used with the market param. +- `limit` (query, integer) — The max number of positions to return +- `offset` (query, integer) — The starting index for pagination +- `sortBy` (query, string) — The sort criteria — enum: `REALIZEDPNL,TITLE,PRICE,AVGPRICE,TIMESTAMP` +- `sortDirection` (query, string) — The sort direction — enum: `ASC,DESC` + +--- +##### `getV1MarketPositions` + +**GET** `/v1/market-positions` + +Get positions for a market + +**Parameters:** +- `market` (query, string) **required** — The condition ID of the market to query positions for +- `user` (query, string) — Filter to a single user by proxy wallet address +- `status` (query, string) — Filter positions by status. +- `OPEN` — Only positions with size > 0.01 +- `CLOSED` — Only positions with size <= 0.01 +- `ALL` — All positions regardless of size + — enum: `OPEN,CLOSED,ALL` +- `sortBy` (query, string) — Sort positions by: +- `TOKENS` — Position size (number of tokens) +- `CASH_PNL` — Unrealized cash PnL +- `REALIZED_PNL` — Realized PnL +- `TOTAL_PNL` — Total PnL (cash_pnl + realized_pnl) + — enum: `TOKENS,CASH_PNL,REALIZED_PNL,TOTAL_PNL` +- `sortDirection` (query, string) — enum: `ASC,DESC` +- `limit` (query, integer) — Max number of positions to return per outcome token +- `offset` (query, integer) — Pagination offset per outcome token + +--- +##### `getV1Leaderboard` + +**GET** `/v1/leaderboard` + +Get trader leaderboard rankings + +**Parameters:** +- `category` (query, string) — Market category for the leaderboard — enum: `OVERALL,POLITICS,SPORTS,CRYPTO,CULTURE,MENTIONS,WEATHER,ECONOMICS,TECH,FINANCE` +- `timePeriod` (query, string) — Time period for leaderboard results — enum: `DAY,WEEK,MONTH,ALL` +- `orderBy` (query, string) — Leaderboard ordering criteria — enum: `PNL,VOL` +- `limit` (query, integer) — Max number of leaderboard traders to return +- `offset` (query, integer) — Starting index for pagination +- `user` (query, string) — Limit leaderboard to a single user by address +- `userName` (query, string) — Limit leaderboard to a single username + +--- +##### `getV1BuildersLeaderboard` + +**GET** `/v1/builders/leaderboard` + +Get aggregated builder leaderboard + +**Parameters:** +- `timePeriod` (query, string) — The time period to aggregate results over. + — enum: `DAY,WEEK,MONTH,ALL` +- `limit` (query, string) + +--- +### Kalshi + +| `callApi()` name | Method | Path | Summary | Auth | +|-----------------|--------|------|---------|------| +| `GetHistoricalCutoff` | `GET` | `/historical/cutoff` | Get Historical Cutoff Timestamps | Public | +| `GetMarketCandlesticksHistorical` | `GET` | `/historical/markets/{ticker}/candlesticks` | Get Historical Market Candlesticks | Public | +| `GetFillsHistorical` | `GET` | `/historical/fills` | Get Historical Fills | Required | +| `GetHistoricalOrders` | `GET` | `/historical/orders` | Get Historical Orders | Required | +| `GetHistoricalMarkets` | `GET` | `/historical/markets` | Get Historical Markets | Public | +| `GetHistoricalMarket` | `GET` | `/historical/markets/{ticker}` | Get Historical Market | Public | +| `GetExchangeStatus` | `GET` | `/exchange/status` | Get Exchange Status | Public | +| `GetExchangeAnnouncements` | `GET` | `/exchange/announcements` | Get Exchange Announcements | Public | +| `GetSeriesFeeChanges` | `GET` | `/series/fee_changes` | Get Series Fee Changes | Public | +| `GetExchangeSchedule` | `GET` | `/exchange/schedule` | Get Exchange Schedule | Public | +| `GetUserDataTimestamp` | `GET` | `/exchange/user_data_timestamp` | Get User Data Timestamp | Public | +| `GetOrders` | `GET` | `/portfolio/orders` | Get Orders | Required | +| `CreateOrder` | `POST` | `/portfolio/orders` | Create Order | Required | +| `GetOrder` | `GET` | `/portfolio/orders/{order_id}` | Get Order | Required | +| `CancelOrder` | `DELETE` | `/portfolio/orders/{order_id}` | Cancel Order | Required | +| `BatchCreateOrders` | `POST` | `/portfolio/orders/batched` | Batch Create Orders | Required | +| `BatchCancelOrders` | `DELETE` | `/portfolio/orders/batched` | Batch Cancel Orders | Required | +| `AmendOrder` | `POST` | `/portfolio/orders/{order_id}/amend` | Amend Order | Required | +| `DecreaseOrder` | `POST` | `/portfolio/orders/{order_id}/decrease` | Decrease Order | Required | +| `GetOrderQueuePositions` | `GET` | `/portfolio/orders/queue_positions` | Get Queue Positions for Orders | Required | +| `GetOrderQueuePosition` | `GET` | `/portfolio/orders/{order_id}/queue_position` | Get Order Queue Position | Required | +| `GetOrderGroups` | `GET` | `/portfolio/order_groups` | Get Order Groups | Required | +| `CreateOrderGroup` | `POST` | `/portfolio/order_groups/create` | Create Order Group | Required | +| `GetOrderGroup` | `GET` | `/portfolio/order_groups/{order_group_id}` | Get Order Group | Required | +| `DeleteOrderGroup` | `DELETE` | `/portfolio/order_groups/{order_group_id}` | Delete Order Group | Required | +| `ResetOrderGroup` | `PUT` | `/portfolio/order_groups/{order_group_id}/reset` | Reset Order Group | Required | +| `TriggerOrderGroup` | `PUT` | `/portfolio/order_groups/{order_group_id}/trigger` | Trigger Order Group | Required | +| `UpdateOrderGroupLimit` | `PUT` | `/portfolio/order_groups/{order_group_id}/limit` | Update Order Group Limit | Required | +| `GetBalance` | `GET` | `/portfolio/balance` | Get Balance | Required | +| `CreateSubaccount` | `POST` | `/portfolio/subaccounts` | Create Subaccount | Required | +| `ApplySubaccountTransfer` | `POST` | `/portfolio/subaccounts/transfer` | Transfer Between Subaccounts | Required | +| `GetSubaccountBalances` | `GET` | `/portfolio/subaccounts/balances` | Get All Subaccount Balances | Required | +| `GetSubaccountTransfers` | `GET` | `/portfolio/subaccounts/transfers` | Get Subaccount Transfers | Required | +| `GetPositions` | `GET` | `/portfolio/positions` | Get Positions | Required | +| `GetSettlements` | `GET` | `/portfolio/settlements` | Get Settlements | Required | +| `GetPortfolioRestingOrderTotalValue` | `GET` | `/portfolio/summary/total_resting_order_value` | Get Total Resting Order Value | Required | +| `GetFills` | `GET` | `/portfolio/fills` | Get Fills | Required | +| `GetApiKeys` | `GET` | `/api_keys` | Get API Keys | Required | +| `CreateApiKey` | `POST` | `/api_keys` | Create API Key | Required | +| `GenerateApiKey` | `POST` | `/api_keys/generate` | Generate API Key | Required | +| `DeleteApiKey` | `DELETE` | `/api_keys/{api_key}` | Delete API Key | Required | +| `GetTagsForSeriesCategories` | `GET` | `/search/tags_by_categories` | Get Tags for Series Categories | Public | +| `GetFiltersForSports` | `GET` | `/search/filters_by_sport` | Get Filters for Sports | Public | +| `GetAccountApiLimits` | `GET` | `/account/limits` | Get Account API Limits | Required | +| `GetMarketCandlesticks` | `GET` | `/series/{series_ticker}/markets/{ticker}/candlesticks` | Get Market Candlesticks | Public | +| `GetTrades` | `GET` | `/markets/trades` | Get Trades | Public | +| `GetMarketCandlesticksByEvent` | `GET` | `/series/{series_ticker}/events/{ticker}/candlesticks` | Get Event Candlesticks | Public | +| `GetEvents` | `GET` | `/events` | Get Events | Public | +| `GetMultivariateEvents` | `GET` | `/events/multivariate` | Get Multivariate Events | Public | +| `GetEvent` | `GET` | `/events/{event_ticker}` | Get Event | Public | +| `GetEventMetadata` | `GET` | `/events/{event_ticker}/metadata` | Get Event Metadata | Public | +| `GetEventForecastPercentilesHistory` | `GET` | `/series/{series_ticker}/events/{ticker}/forecast_percentile_history` | Get Event Forecast Percentile History | Required | +| `GetLiveData` | `GET` | `/live_data/{type}/milestone/{milestone_id}` | Get Live Data | Public | +| `GetLiveDatas` | `GET` | `/live_data/batch` | Get Multiple Live Data | Public | +| `GetIncentivePrograms` | `GET` | `/incentive_programs` | Get Incentives | Public | +| `GetFCMOrders` | `GET` | `/fcm/orders` | Get FCM Orders | Required | +| `GetFCMPositions` | `GET` | `/fcm/positions` | Get FCM Positions | Required | +| `GetStructuredTargets` | `GET` | `/structured_targets` | Get Structured Targets | Public | +| `GetStructuredTarget` | `GET` | `/structured_targets/{structured_target_id}` | Get Structured Target | Public | +| `GetMarketOrderbook` | `GET` | `/markets/{ticker}/orderbook` | Get Market Orderbook | Required | +| `GetMarketOrderbooks` | `GET` | `/markets/orderbooks` | Get Multiple Market Orderbooks | Required | +| `GetMilestone` | `GET` | `/milestones/{milestone_id}` | Get Milestone | Public | +| `GetMilestones` | `GET` | `/milestones` | Get Milestones | Public | +| `GetCommunicationsID` | `GET` | `/communications/id` | Get Communications ID | Required | +| `GetRFQs` | `GET` | `/communications/rfqs` | Get RFQs | Required | +| `CreateRFQ` | `POST` | `/communications/rfqs` | Create RFQ | Required | +| `GetRFQ` | `GET` | `/communications/rfqs/{rfq_id}` | Get RFQ | Required | +| `DeleteRFQ` | `DELETE` | `/communications/rfqs/{rfq_id}` | Delete RFQ | Required | +| `GetQuotes` | `GET` | `/communications/quotes` | Get Quotes | Required | +| `CreateQuote` | `POST` | `/communications/quotes` | Create Quote | Required | +| `GetQuote` | `GET` | `/communications/quotes/{quote_id}` | Get Quote | Required | +| `DeleteQuote` | `DELETE` | `/communications/quotes/{quote_id}` | Delete Quote | Required | +| `AcceptQuote` | `PUT` | `/communications/quotes/{quote_id}/accept` | Accept Quote | Required | +| `ConfirmQuote` | `PUT` | `/communications/quotes/{quote_id}/confirm` | Confirm Quote | Required | +| `GetMultivariateEventCollection` | `GET` | `/multivariate_event_collections/{collection_ticker}` | Get Multivariate Event Collection | Public | +| `CreateMarketInMultivariateEventCollection` | `POST` | `/multivariate_event_collections/{collection_ticker}` | Create Market In Multivariate Event Collection | Required | +| `GetMultivariateEventCollections` | `GET` | `/multivariate_event_collections` | Get Multivariate Event Collections | Public | +| `LookupTickersForMarketInMultivariateEventCollection` | `PUT` | `/multivariate_event_collections/{collection_ticker}/lookup` | Lookup Tickers For Market In Multivariate Event Collection | Required | +| `GetMultivariateEventCollectionLookupHistory` | `GET` | `/multivariate_event_collections/{collection_ticker}/lookup` | Get Multivariate Event Collection Lookup History | Public | +| `GetSeries` | `GET` | `/series/{series_ticker}` | Get Series | Public | +| `GetSeriesList` | `GET` | `/series` | Get Series List | Public | +| `GetMarkets` | `GET` | `/markets` | Get Markets | Public | +| `GetMarket` | `GET` | `/markets/{ticker}` | Get Market | Public | +| `BatchGetMarketCandlesticks` | `GET` | `/markets/candlesticks` | Batch Get Market Candlesticks | Public | + +#### Endpoint Details + +##### `GetHistoricalCutoff` + +**GET** `/historical/cutoff` + +Get Historical Cutoff Timestamps + + +--- +##### `GetMarketCandlesticksHistorical` + +**GET** `/historical/markets/{ticker}/candlesticks` + +Get Historical Market Candlesticks + +**Parameters:** +- `ticker` (path, string) **required** — Market ticker - unique identifier for the specific market +- `start_ts` (query, integer) **required** — Start timestamp (Unix timestamp). Candlesticks will include those ending on or after this time. +- `end_ts` (query, integer) **required** — End timestamp (Unix timestamp). Candlesticks will include those ending on or before this time. +- `period_interval` (query, integer) **required** — Time period length of each candlestick in minutes. Valid values are 1 (1 minute), 60 (1 hour), or 1440 (1 day). — enum: `1,60,1440` + +--- +##### `GetFillsHistorical` + +**GET** `/historical/fills` + +Get Historical Fills *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetHistoricalOrders` + +**GET** `/historical/orders` + +Get Historical Orders *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetHistoricalMarkets` + +**GET** `/historical/markets` + +Get Historical Markets + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetHistoricalMarket` + +**GET** `/historical/markets/{ticker}` + +Get Historical Market + +**Parameters:** +- `` (, string) + +--- +##### `GetExchangeStatus` + +**GET** `/exchange/status` + +Get Exchange Status + + +--- +##### `GetExchangeAnnouncements` + +**GET** `/exchange/announcements` + +Get Exchange Announcements + + +--- +##### `GetSeriesFeeChanges` + +**GET** `/series/fee_changes` + +Get Series Fee Changes + +**Parameters:** +- `series_ticker` (query, string) +- `show_historical` (query, boolean) + +--- +##### `GetExchangeSchedule` + +**GET** `/exchange/schedule` + +Get Exchange Schedule + + +--- +##### `GetUserDataTimestamp` + +**GET** `/exchange/user_data_timestamp` + +Get User Data Timestamp + + +--- +##### `GetOrders` + +**GET** `/portfolio/orders` + +Get Orders *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `CreateOrder` + +**POST** `/portfolio/orders` + +Create Order *(Auth required)* + + +--- +##### `GetOrder` + +**GET** `/portfolio/orders/{order_id}` + +Get Order *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `CancelOrder` + +**DELETE** `/portfolio/orders/{order_id}` + +Cancel Order *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) + +--- +##### `BatchCreateOrders` + +**POST** `/portfolio/orders/batched` + +Batch Create Orders *(Auth required)* + + +--- +##### `BatchCancelOrders` + +**DELETE** `/portfolio/orders/batched` + +Batch Cancel Orders *(Auth required)* + + +--- +##### `AmendOrder` + +**POST** `/portfolio/orders/{order_id}/amend` + +Amend Order *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `DecreaseOrder` + +**POST** `/portfolio/orders/{order_id}/decrease` + +Decrease Order *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `GetOrderQueuePositions` + +**GET** `/portfolio/orders/queue_positions` + +Get Queue Positions for Orders *(Auth required)* + +**Parameters:** +- `market_tickers` (query, string) — Comma-separated list of market tickers to filter by +- `event_ticker` (query, string) — Event ticker to filter by +- `` (, string) + +--- +##### `GetOrderQueuePosition` + +**GET** `/portfolio/orders/{order_id}/queue_position` + +Get Order Queue Position *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `GetOrderGroups` + +**GET** `/portfolio/order_groups` + +Get Order Groups *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `CreateOrderGroup` + +**POST** `/portfolio/order_groups/create` + +Create Order Group *(Auth required)* + + +--- +##### `GetOrderGroup` + +**GET** `/portfolio/order_groups/{order_group_id}` + +Get Order Group *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) + +--- +##### `DeleteOrderGroup` + +**DELETE** `/portfolio/order_groups/{order_group_id}` + +Delete Order Group *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) + +--- +##### `ResetOrderGroup` + +**PUT** `/portfolio/order_groups/{order_group_id}/reset` + +Reset Order Group *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) + +--- +##### `TriggerOrderGroup` + +**PUT** `/portfolio/order_groups/{order_group_id}/trigger` + +Trigger Order Group *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) + +--- +##### `UpdateOrderGroupLimit` + +**PUT** `/portfolio/order_groups/{order_group_id}/limit` + +Update Order Group Limit *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `GetBalance` + +**GET** `/portfolio/balance` + +Get Balance *(Auth required)* + +**Parameters:** +- `subaccount` (query, integer) — Subaccount number (0 for primary, 1-32 for subaccounts). When provided, returns only that subaccount's balance. + +--- +##### `CreateSubaccount` + +**POST** `/portfolio/subaccounts` + +Create Subaccount *(Auth required)* + + +--- +##### `ApplySubaccountTransfer` + +**POST** `/portfolio/subaccounts/transfer` + +Transfer Between Subaccounts *(Auth required)* + + +--- +##### `GetSubaccountBalances` + +**GET** `/portfolio/subaccounts/balances` + +Get All Subaccount Balances *(Auth required)* + + +--- +##### `GetSubaccountTransfers` + +**GET** `/portfolio/subaccounts/transfers` + +Get Subaccount Transfers *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) + +--- +##### `GetPositions` + +**GET** `/portfolio/positions` + +Get Positions *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetSettlements` + +**GET** `/portfolio/settlements` + +Get Settlements *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetPortfolioRestingOrderTotalValue` + +**GET** `/portfolio/summary/total_resting_order_value` + +Get Total Resting Order Value *(Auth required)* + + +--- +##### `GetFills` + +**GET** `/portfolio/fills` + +Get Fills *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetApiKeys` + +**GET** `/api_keys` + +Get API Keys *(Auth required)* + + +--- +##### `CreateApiKey` + +**POST** `/api_keys` + +Create API Key *(Auth required)* + + +--- +##### `GenerateApiKey` + +**POST** `/api_keys/generate` + +Generate API Key *(Auth required)* + + +--- +##### `DeleteApiKey` + +**DELETE** `/api_keys/{api_key}` + +Delete API Key *(Auth required)* + +**Parameters:** +- `api_key` (path, string) **required** — API key ID to delete + +--- +##### `GetTagsForSeriesCategories` + +**GET** `/search/tags_by_categories` + +Get Tags for Series Categories + + +--- +##### `GetFiltersForSports` + +**GET** `/search/filters_by_sport` + +Get Filters for Sports + + +--- +##### `GetAccountApiLimits` + +**GET** `/account/limits` + +Get Account API Limits *(Auth required)* + + +--- +##### `GetMarketCandlesticks` + +**GET** `/series/{series_ticker}/markets/{ticker}/candlesticks` + +Get Market Candlesticks + +**Parameters:** +- `series_ticker` (path, string) **required** — Series ticker - the series that contains the target market +- `ticker` (path, string) **required** — Market ticker - unique identifier for the specific market +- `start_ts` (query, integer) **required** — Start timestamp (Unix timestamp). Candlesticks will include those ending on or after this time. +- `end_ts` (query, integer) **required** — End timestamp (Unix timestamp). Candlesticks will include those ending on or before this time. +- `period_interval` (query, integer) **required** — Time period length of each candlestick in minutes. Valid values are 1 (1 minute), 60 (1 hour), or 1440 (1 day). — enum: `1,60,1440` +- `include_latest_before_start` (query, boolean) — If true, prepends the latest candlestick available before the start_ts. This synthetic candlestick is created by: +1. Finding the most recent real candlestick before start_ts +2. Projecting it forward to the first period boundary (calculated as the next period interval after start_ts) +3. Setting all OHLC prices to null, and `previous_price` to the close price from the real candlestick + + +--- +##### `GetTrades` + +**GET** `/markets/trades` + +Get Trades + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetMarketCandlesticksByEvent` + +**GET** `/series/{series_ticker}/events/{ticker}/candlesticks` + +Get Event Candlesticks + +**Parameters:** +- `ticker` (path, string) **required** — The event ticker +- `series_ticker` (path, string) **required** — The series ticker +- `start_ts` (query, integer) **required** — Start timestamp for the range +- `end_ts` (query, integer) **required** — End timestamp for the range +- `period_interval` (query, integer) **required** — Specifies the length of each candlestick period, in minutes. Must be one minute, one hour, or one day. — enum: `1,60,1440` + +--- +##### `GetEvents` + +**GET** `/events` + +Get Events + +**Parameters:** +- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 200. Maximum value is 200. +- `cursor` (query, string) — Parameter to specify the pagination cursor. Use the cursor value returned from the previous response to get the next page of results. Leave empty for the first page. +- `with_nested_markets` (query, boolean) — Parameter to specify if nested markets should be included in the response. When true, each event will include a 'markets' field containing a list of Market objects associated with that event. +- `with_milestones` (query, boolean) — If true, includes related milestones as a field alongside events. +- `status` (query, string) — Filter by event status. Possible values are 'open', 'closed', 'settled'. Leave empty to return events with any status. — enum: `open,closed,settled` +- `` (, string) +- `min_close_ts` (query, integer) — Filter events with at least one market with close timestamp greater than this Unix timestamp (in seconds). + +--- +##### `GetMultivariateEvents` + +**GET** `/events/multivariate` + +Get Multivariate Events + +**Parameters:** +- `limit` (query, integer) — Number of results per page. Defaults to 100. Maximum value is 200. +- `cursor` (query, string) — Pagination cursor. Use the cursor value returned from the previous response to get the next page of results. +- `` (, string) +- `collection_ticker` (query, string) — Filter events by collection ticker. Returns only multivariate events belonging to the specified collection. Cannot be used together with series_ticker. +- `with_nested_markets` (query, boolean) — Parameter to specify if nested markets should be included in the response. When true, each event will include a 'markets' field containing a list of Market objects associated with that event. + +--- +##### `GetEvent` + +**GET** `/events/{event_ticker}` + +Get Event + +**Parameters:** +- `event_ticker` (path, string) **required** — Event ticker +- `with_nested_markets` (query, boolean) — If true, markets are included within the event object. If false (default), markets are returned as a separate top-level field in the response. + +--- +##### `GetEventMetadata` + +**GET** `/events/{event_ticker}/metadata` + +Get Event Metadata + +**Parameters:** +- `event_ticker` (path, string) **required** — Event ticker + +--- +##### `GetEventForecastPercentilesHistory` + +**GET** `/series/{series_ticker}/events/{ticker}/forecast_percentile_history` + +Get Event Forecast Percentile History *(Auth required)* + +**Parameters:** +- `ticker` (path, string) **required** — The event ticker +- `series_ticker` (path, string) **required** — The series ticker +- `percentiles` (query, array) **required** — Array of percentile values to retrieve (0-10000, max 10 values) +- `start_ts` (query, integer) **required** — Start timestamp for the range +- `end_ts` (query, integer) **required** — End timestamp for the range +- `period_interval` (query, integer) **required** — Specifies the length of each forecast period, in minutes. 0 for 5-second intervals, or 1, 60, or 1440 for minute-based intervals. — enum: `0,1,60,1440` + +--- +##### `GetLiveData` + +**GET** `/live_data/{type}/milestone/{milestone_id}` + +Get Live Data + +**Parameters:** +- `type` (path, string) **required** — Type of live data +- `milestone_id` (path, string) **required** — Milestone ID + +--- +##### `GetLiveDatas` + +**GET** `/live_data/batch` + +Get Multiple Live Data + +**Parameters:** +- `milestone_ids` (query, array) **required** — Array of milestone IDs + +--- +##### `GetIncentivePrograms` + +**GET** `/incentive_programs` + +Get Incentives + +**Parameters:** +- `status` (query, string) — Status filter. Can be "all", "active", "upcoming", "closed", or "paid_out". Default is "all". — enum: `all,active,upcoming,closed,paid_out` +- `type` (query, string) — Type filter. Can be "all", "liquidity", or "volume". Default is "all". — enum: `all,liquidity,volume` +- `limit` (query, integer) — Number of results per page. Defaults to 100. Maximum value is 10000. +- `cursor` (query, string) — Cursor for pagination + +--- +##### `GetFCMOrders` + +**GET** `/fcm/orders` + +Get FCM Orders *(Auth required)* + +**Parameters:** +- `subtrader_id` (query, string) **required** — Restricts the response to orders for a specific subtrader (FCM members only) +- `` (, string) +- `` (, string) +- `` (, string) +- `min_ts` (query, integer) — Restricts the response to orders after a timestamp, formatted as a Unix Timestamp +- `max_ts` (query, integer) — Restricts the response to orders before a timestamp, formatted as a Unix Timestamp +- `status` (query, string) — Restricts the response to orders that have a certain status — enum: `resting,canceled,executed` +- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 100 + +--- +##### `GetFCMPositions` + +**GET** `/fcm/positions` + +Get FCM Positions *(Auth required)* + +**Parameters:** +- `subtrader_id` (query, string) **required** — Restricts the response to positions for a specific subtrader (FCM members only) +- `ticker` (query, string) — Ticker of desired positions +- `event_ticker` (query, string) — Event ticker of desired positions +- `count_filter` (query, string) — Restricts the positions to those with any of following fields with non-zero values, as a comma separated list +- `settlement_status` (query, string) — Settlement status of the markets to return. Defaults to unsettled — enum: `all,unsettled,settled` +- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 100 +- `cursor` (query, string) — The Cursor represents a pointer to the next page of records in the pagination + +--- +##### `GetStructuredTargets` + +**GET** `/structured_targets` + +Get Structured Targets + +**Parameters:** +- `type` (query, string) — Filter by structured target type +- `competition` (query, string) — Filter by competition +- `page_size` (query, integer) — Number of items per page (min 1, max 2000, default 100) +- `cursor` (query, string) — Pagination cursor + +--- +##### `GetStructuredTarget` + +**GET** `/structured_targets/{structured_target_id}` + +Get Structured Target + +**Parameters:** +- `structured_target_id` (path, string) **required** — Structured target ID + +--- +##### `GetMarketOrderbook` + +**GET** `/markets/{ticker}/orderbook` + +Get Market Orderbook *(Auth required)* + +**Parameters:** +- `` (, string) +- `depth` (query, integer) — Depth of the orderbook to retrieve (0 or negative means all levels, 1-100 for specific depth) + +--- +##### `GetMarketOrderbooks` + +**GET** `/markets/orderbooks` + +Get Multiple Market Orderbooks *(Auth required)* + +**Parameters:** +- `tickers` (query, array) **required** — List of market tickers to fetch orderbooks for + +--- +##### `GetMilestone` + +**GET** `/milestones/{milestone_id}` + +Get Milestone + +**Parameters:** +- `milestone_id` (path, string) **required** — Milestone ID + +--- +##### `GetMilestones` + +**GET** `/milestones` + +Get Milestones + +**Parameters:** +- `limit` (query, integer) **required** — Number of milestones to return per page +- `minimum_start_date` (query, string) — Minimum start date to filter milestones. Format RFC3339 timestamp +- `category` (query, string) — Filter by milestone category +- `competition` (query, string) — Filter by competition +- `source_id` (query, string) — Filter by source id +- `type` (query, string) — Filter by milestone type +- `related_event_ticker` (query, string) — Filter by related event ticker +- `cursor` (query, string) — Pagination cursor. Use the cursor value returned from the previous response to get the next page of results + +--- +##### `GetCommunicationsID` + +**GET** `/communications/id` + +Get Communications ID *(Auth required)* + + +--- +##### `GetRFQs` + +**GET** `/communications/rfqs` + +Get RFQs *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 100. +- `status` (query, string) — Filter RFQs by status +- `creator_user_id` (query, string) — Filter RFQs by creator user ID + +--- +##### `CreateRFQ` + +**POST** `/communications/rfqs` + +Create RFQ *(Auth required)* + + +--- +##### `GetRFQ` + +**GET** `/communications/rfqs/{rfq_id}` + +Get RFQ *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `DeleteRFQ` + +**DELETE** `/communications/rfqs/{rfq_id}` + +Delete RFQ *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `GetQuotes` + +**GET** `/communications/quotes` + +Get Quotes *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 500. +- `status` (query, string) — Filter quotes by status +- `quote_creator_user_id` (query, string) — Filter quotes by quote creator user ID +- `rfq_creator_user_id` (query, string) — Filter quotes by RFQ creator user ID +- `rfq_creator_subtrader_id` (query, string) — Filter quotes by RFQ creator subtrader ID (FCM members only) +- `rfq_id` (query, string) — Filter quotes by RFQ ID + +--- +##### `CreateQuote` + +**POST** `/communications/quotes` + +Create Quote *(Auth required)* + + +--- +##### `GetQuote` + +**GET** `/communications/quotes/{quote_id}` + +Get Quote *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `DeleteQuote` + +**DELETE** `/communications/quotes/{quote_id}` + +Delete Quote *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `AcceptQuote` + +**PUT** `/communications/quotes/{quote_id}/accept` + +Accept Quote *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `ConfirmQuote` + +**PUT** `/communications/quotes/{quote_id}/confirm` + +Confirm Quote *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `GetMultivariateEventCollection` + +**GET** `/multivariate_event_collections/{collection_ticker}` + +Get Multivariate Event Collection + +**Parameters:** +- `collection_ticker` (path, string) **required** — Collection ticker + +--- +##### `CreateMarketInMultivariateEventCollection` + +**POST** `/multivariate_event_collections/{collection_ticker}` + +Create Market In Multivariate Event Collection *(Auth required)* + +**Parameters:** +- `collection_ticker` (path, string) **required** — Collection ticker + +--- +##### `GetMultivariateEventCollections` + +**GET** `/multivariate_event_collections` + +Get Multivariate Event Collections + +**Parameters:** +- `status` (query, string) — Only return collections of a certain status. Can be unopened, open, or closed. — enum: `unopened,open,closed` +- `associated_event_ticker` (query, string) — Only return collections associated with a particular event ticker. +- `series_ticker` (query, string) — Only return collections with a particular series ticker. +- `limit` (query, integer) — Specify the maximum number of results. +- `cursor` (query, string) — The Cursor represents a pointer to the next page of records in the pagination. This optional parameter, when filled, should be filled with the cursor string returned in a previous request to this end-point. + +--- +##### `LookupTickersForMarketInMultivariateEventCollection` + +**PUT** `/multivariate_event_collections/{collection_ticker}/lookup` + +Lookup Tickers For Market In Multivariate Event Collection *(Auth required)* + +**Parameters:** +- `collection_ticker` (path, string) **required** — Collection ticker + +--- +##### `GetMultivariateEventCollectionLookupHistory` + +**GET** `/multivariate_event_collections/{collection_ticker}/lookup` + +Get Multivariate Event Collection Lookup History + +**Parameters:** +- `collection_ticker` (path, string) **required** — Collection ticker +- `lookback_seconds` (query, integer) **required** — Number of seconds to look back for lookup history. Must be one of 10, 60, 300, or 3600. — enum: `10,60,300,3600` + +--- +##### `GetSeries` + +**GET** `/series/{series_ticker}` + +Get Series + +**Parameters:** +- `series_ticker` (path, string) **required** — The ticker of the series to retrieve +- `include_volume` (query, boolean) — If true, includes the total volume traded across all events in this series. + +--- +##### `GetSeriesList` + +**GET** `/series` + +Get Series List + +**Parameters:** +- `category` (query, string) +- `tags` (query, string) +- `include_product_metadata` (query, boolean) +- `include_volume` (query, boolean) — If true, includes the total volume traded across all events in each series. + +--- +##### `GetMarkets` + +**GET** `/markets` + +Get Markets + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetMarket` + +**GET** `/markets/{ticker}` + +Get Market + +**Parameters:** +- `` (, string) + +--- +##### `BatchGetMarketCandlesticks` + +**GET** `/markets/candlesticks` + +Batch Get Market Candlesticks + +**Parameters:** +- `market_tickers` (query, string) **required** — Comma-separated list of market tickers (maximum 100) +- `start_ts` (query, integer) **required** — Start timestamp in Unix seconds +- `end_ts` (query, integer) **required** — End timestamp in Unix seconds +- `period_interval` (query, integer) **required** — Candlestick period interval in minutes +- `include_latest_before_start` (query, boolean) — If true, prepends the latest candlestick available before the start_ts. This synthetic candlestick is created by: +1. Finding the most recent real candlestick before start_ts +2. Projecting it forward to the first period boundary (calculated as the next period interval after start_ts) +3. Setting all OHLC prices to null, and `previous_price` to the close price from the real candlestick + + +--- +### Limitless + +| `callApi()` name | Method | Path | Summary | Auth | +|-----------------|--------|------|---------|------| +| `AuthController_getSigningMessage` | `GET` | `/auth/signing-message` | Get signing message | Public | +| `AuthController_verifyAuth` | `GET` | `/auth/verify-auth` | Verify authentication | Required | +| `AuthController_login` | `POST` | `/auth/login` | User login | Public | +| `AuthController_logout` | `POST` | `/auth/logout` | User logout | Required | +| `MarketController_getActiveMarkets[0]` | `GET` | `/markets/active/{categoryId}` | Browse Active Markets | Public | +| `MarketController_getActiveMarkets[1]` | `GET` | `/markets/active` | Browse Active Markets | Public | +| `MarketController_getActiveMarketCountPerCategory` | `GET` | `/markets/categories/count` | Get active market count per category | Public | +| `MarketController_getActiveSlugs` | `GET` | `/markets/active/slugs` | Get active market slugs with metadata | Public | +| `MarketController_find` | `GET` | `/markets/{addressOrSlug}` | Get Market Details | Public | +| `MarketController_getFeedEvent` | `GET` | `/markets/{slug}/get-feed-events` | Get feed events for a market | Required | +| `MarketOrderbookController_getHistoricalPrice` | `GET` | `/markets/{slug}/historical-price` | Get Historical Prices | Public | +| `MarketOrderbookController_getOrderbook` | `GET` | `/markets/{slug}/orderbook` | Get Orderbook | Public | +| `MarketOrderbookController_getLockedBalance` | `GET` | `/markets/{slug}/locked-balance` | Get Locked Balance | Required | +| `MarketOrderbookController_getUserOrders` | `GET` | `/markets/{slug}/user-orders` | User Orders | Required | +| `MarketOrderbookController_getMarketEvents` | `GET` | `/markets/{slug}/events` | Market Events | Public | +| `MarketSearchController_search` | `GET` | `/markets/search` | Search for markets based on semantic similarity | Public | +| `PortfolioController_getTrades` | `GET` | `/portfolio/trades` | Get Trades | Required | +| `PortfolioController_getPositions` | `GET` | `/portfolio/positions` | Get Positions | Required | +| `PortfolioController_getPnlChart` | `GET` | `/portfolio/pnl-chart` | Get portfolio PnL chart | Required | +| `PortfolioController_getHistory` | `GET` | `/portfolio/history` | Get History | Required | +| `PortfolioController_getPointsBreakdown` | `GET` | `/portfolio/points` | Get points breakdown | Required | +| `PublicPortfolioController_tradedVolume` | `GET` | `/portfolio/{account}/traded-volume` | User Total Volume | Public | +| `PublicPortfolioController_getPositions` | `GET` | `/portfolio/{account}/positions` | Get All User Positions | Public | +| `PublicPortfolioController_getPnlChart` | `GET` | `/portfolio/{account}/pnl-chart` | Get portfolio PnL chart (public) | Public | +| `TradingPortfolioController_getAllowance` | `GET` | `/portfolio/trading/allowance` | Get User Trading Allowance | Required | +| `OrderController_createOrder` | `POST` | `/orders` | Create Order | Required | +| `OrderController_cancelOrder` | `DELETE` | `/orders/{orderId}` | Cancel Order | Required | +| `OrderController_cancelOrderBatch` | `POST` | `/orders/cancel-batch` | Cancel multiple orders in batch | Required | +| `OrderController_cancelAllOrders` | `DELETE` | `/orders/all/{slug}` | Cancel all of a user's orders in a specific market | Required | + +#### Endpoint Details + +##### `AuthController_getSigningMessage` + +**GET** `/auth/signing-message` + +Get signing message + + +--- +##### `AuthController_verifyAuth` + +**GET** `/auth/verify-auth` + +Verify authentication *(Auth required)* + + +--- +##### `AuthController_login` + +**POST** `/auth/login` + +User login + +**Parameters:** +- `x-account` (header, string) **required** — The Ethereum address of the user +- `x-signing-message` (header, string) **required** — The signing message generated by the server +- `x-signature` (header, string) **required** — The signature generated by signing the message with the user's wallet + +--- +##### `AuthController_logout` + +**POST** `/auth/logout` + +User logout *(Auth required)* + + +--- +##### `MarketController_getActiveMarkets[0]` + +**GET** `/markets/active/{categoryId}` + +Browse Active Markets + +**Parameters:** +- `page` (query, number) — Page number for pagination +- `limit` (query, number) — Number of items per page +- `sortBy` (query, string) — Sort by query parameter +- `tradeType` (query, string) — Filter by trade type (amm, clob, or group) — enum: `amm,clob,group` +- `automationType` (query, string) — Filter by automation type (manual, lumy, or sports) — enum: `manual,lumy,sports` +- `categoryId` (path, number) **required** — Filter markets by category ID + +--- +##### `MarketController_getActiveMarkets[1]` + +**GET** `/markets/active` + +Browse Active Markets + +**Parameters:** +- `page` (query, number) — Page number for pagination +- `limit` (query, number) — Number of items per page +- `sortBy` (query, string) — Sort by query parameter +- `tradeType` (query, string) — Filter by trade type (amm, clob, or group) — enum: `amm,clob,group` +- `automationType` (query, string) — Filter by automation type (manual, lumy, or sports) — enum: `manual,lumy,sports` +- `categoryId` (path, number) **required** — Filter markets by category ID + +--- +##### `MarketController_getActiveMarketCountPerCategory` + +**GET** `/markets/categories/count` + +Get active market count per category + + +--- +##### `MarketController_getActiveSlugs` + +**GET** `/markets/active/slugs` + +Get active market slugs with metadata + + +--- +##### `MarketController_find` + +**GET** `/markets/{addressOrSlug}` + +Get Market Details + +**Parameters:** +- `addressOrSlug` (path, string) **required** — Market/group address (0x...) or slug identifier (my-market-name) + +--- +##### `MarketController_getFeedEvent` + +**GET** `/markets/{slug}/get-feed-events` + +Get feed events for a market *(Auth required)* + +**Parameters:** +- `page` (query, number) — Page number for pagination +- `limit` (query, number) — Number of events per page +- `slug` (path, string) **required** — Slug of the market + +--- +##### `MarketOrderbookController_getHistoricalPrice` + +**GET** `/markets/{slug}/historical-price` + +Get Historical Prices + +**Parameters:** +- `to` (query, string) — End date for historical data +- `from` (query, string) — Start date for historical data +- `interval` (query, string) — Time interval for data points — enum: `1h,6h,1d,1w,1m,all` +- `slug` (path, string) **required** — Market slug identifier + +--- +##### `MarketOrderbookController_getOrderbook` + +**GET** `/markets/{slug}/orderbook` + +Get Orderbook + +**Parameters:** +- `slug` (path, string) **required** — Market slug identifier + +--- +##### `MarketOrderbookController_getLockedBalance` + +**GET** `/markets/{slug}/locked-balance` + +Get Locked Balance *(Auth required)* + +**Parameters:** +- `slug` (path, string) **required** — Market slug identifier + +--- +##### `MarketOrderbookController_getUserOrders` + +**GET** `/markets/{slug}/user-orders` + +User Orders *(Auth required)* + +**Parameters:** +- `statuses` (query, array) — Order status(es) to filter by. Defaults to [LIVE] if not provided +- `limit` (query, number) — Maximum number of orders to return +- `slug` (path, string) **required** — Market slug identifier + +--- +##### `MarketOrderbookController_getMarketEvents` + +**GET** `/markets/{slug}/events` + +Market Events + +**Parameters:** +- `page` (query, number) — Page number for pagination +- `limit` (query, number) — Number of events per page +- `slug` (path, string) **required** — Market slug identifier + +--- +##### `MarketSearchController_search` + +**GET** `/markets/search` + +Search for markets based on semantic similarity + +**Parameters:** +- `query` (query, string) **required** — Search query text +- `limit` (query, number) — Maximum number of results to return +- `page` (query, number) — Number of page +- `similarityThreshold` (query, number) — Minimum similarity score (0-1) + +--- +##### `PortfolioController_getTrades` + +**GET** `/portfolio/trades` + +Get Trades *(Auth required)* + + +--- +##### `PortfolioController_getPositions` + +**GET** `/portfolio/positions` + +Get Positions *(Auth required)* + + +--- +##### `PortfolioController_getPnlChart` + +**GET** `/portfolio/pnl-chart` + +Get portfolio PnL chart *(Auth required)* + +**Parameters:** +- `timeframe` (query, string) — Timeframe window for percent change and chart series + +--- +##### `PortfolioController_getHistory` + +**GET** `/portfolio/history` + +Get History *(Auth required)* + +**Parameters:** +- `page` (query, number) **required** — Page number +- `limit` (query, number) **required** — Number of items per page +- `from` (query, string) — Start date for filtering (ISO 8601 format) +- `to` (query, string) — End date for filtering (ISO 8601 format) + +--- +##### `PortfolioController_getPointsBreakdown` + +**GET** `/portfolio/points` + +Get points breakdown *(Auth required)* + + +--- +##### `PublicPortfolioController_tradedVolume` + +**GET** `/portfolio/{account}/traded-volume` + +User Total Volume + +**Parameters:** +- `account` (path, string) **required** — User Ethereum address + +--- +##### `PublicPortfolioController_getPositions` + +**GET** `/portfolio/{account}/positions` + +Get All User Positions + +**Parameters:** +- `account` (path, string) **required** — User Ethereum address + +--- +##### `PublicPortfolioController_getPnlChart` + +**GET** `/portfolio/{account}/pnl-chart` + +Get portfolio PnL chart (public) + +**Parameters:** +- `account` (path, string) **required** — User Ethereum address +- `timeframe` (query, string) — Timeframe window for percent change and chart series + +--- +##### `TradingPortfolioController_getAllowance` + +**GET** `/portfolio/trading/allowance` + +Get User Trading Allowance *(Auth required)* + +**Parameters:** +- `type` (query, string) **required** — Trading type: CLOB or NegRisk — enum: `clob,negrisk` +- `spender` (query, string) — Optional spender address override (e.g., venue exchange address) + +--- +##### `OrderController_createOrder` + +**POST** `/orders` + +Create Order *(Auth required)* + + +--- +##### `OrderController_cancelOrder` + +**DELETE** `/orders/{orderId}` + +Cancel Order *(Auth required)* + +**Parameters:** +- `orderId` (path, string) **required** — Unique identifier of the order to be cancelled + +--- +##### `OrderController_cancelOrderBatch` + +**POST** `/orders/cancel-batch` + +Cancel multiple orders in batch *(Auth required)* + + +--- +##### `OrderController_cancelAllOrders` + +**DELETE** `/orders/all/{slug}` + +Cancel all of a user's orders in a specific market *(Auth required)* + + +--- +### Probable + +| `callApi()` name | Method | Path | Summary | Auth | +|-----------------|--------|------|---------|------| +| `getPublicApiV1AuthNonce` | `GET` | `/public/api/v1/auth/nonce` | Generate Nonce | Public | +| `postPublicApiV1AuthLogin` | `POST` | `/public/api/v1/auth/login` | Login | Public | +| `postPublicApiV1AuthLogout` | `POST` | `/public/api/v1/auth/logout` | Logout | Public | +| `postPublicApiV1AuthApiKey` | `POST` | `/public/api/v1/auth/api-key/{chainId}` | Generate API Key | Required | +| `getPublicApiV1AuthApiKey` | `GET` | `/public/api/v1/auth/api-key/{chainId}` | Get API Key | Required | +| `deletePublicApiV1AuthApiKey` | `DELETE` | `/public/api/v1/auth/api-key/{chainId}` | Delete API Key | Required | +| `postPublicApiV1AuthVerifyL1` | `POST` | `/public/api/v1/auth/verify/l1` | Verify L1 Headers | Required | +| `postPublicApiV1AuthVerifyL2` | `POST` | `/public/api/v1/auth/verify/l2` | Verify L2 Headers | Required | +| `getPublicApiV1Events` | `GET` | `/public/api/v1/events/` | List All Events | Public | +| `getPublicApiV1Events` | `GET` | `/public/api/v1/events/{id}` | Get Event by ID | Public | +| `getPublicApiV1EventsSlug` | `GET` | `/public/api/v1/events/slug/{slug}` | Get Event by Slug | Public | +| `getPublicApiV1EventsTags` | `GET` | `/public/api/v1/events/{id}/tags` | Get Tags for Event | Public | +| `getPublicApiV1Markets` | `GET` | `/public/api/v1/markets/` | List All Markets | Public | +| `getPublicApiV1Markets` | `GET` | `/public/api/v1/markets/{id}` | Get Market by ID | Public | +| `getPublicApiV1MarketsPolymarket` | `GET` | `/public/api/v1/markets/polymarket/{polymarketId}` | Get Market by Polymarket ID | Public | +| `getPublicApiV1MarketsBsc` | `GET` | `/public/api/v1/markets/bsc/{bscQuestionId}` | Get Market by BSC Question ID | Public | +| `getPublicApiV1PublicSearch` | `GET` | `/public/api/v1/public-search/` | Search Events and Markets | Public | +| `getPublicApiV1Tags` | `GET` | `/public/api/v1/tags/` | List All Tags | Public | +| `postPublicApiV1Order` | `POST` | `/public/api/v1/order/{chainId}` | Place Order | Required | +| `deletePublicApiV1Order` | `DELETE` | `/public/api/v1/order/{chainId}/{orderId}` | Cancel Order | Required | +| `getPublicApiV1Orders` | `GET` | `/public/api/v1/orders/{chainId}/{orderId}` | Get Order | Required | +| `getPublicApiV1OrdersOpen` | `GET` | `/public/api/v1/orders/{chainId}/open` | Get Open Orders | Required | +| `getPublicApiV1Price` | `GET` | `/public/api/v1/price` | Get Price | Public | +| `postPublicApiV1Prices` | `POST` | `/public/api/v1/prices` | Get Prices (Batch) | Public | +| `getPublicApiV1Midpoint` | `GET` | `/public/api/v1/midpoint` | Get Midpoint | Public | +| `getPublicApiV1Book` | `GET` | `/public/api/v1/book` | Get Order Book | Public | +| `getPublicApiV1PricesHistory` | `GET` | `/public/api/v1/prices-history` | Get Price History | Public | +| `getPublicApiV1Trade` | `GET` | `/public/api/v1/trade/{chainId}` | Get Trades (Authenticated) | Required | +| `getPublicApiV1Trades` | `GET` | `/public/api/v1/trades` | Get Public Trades | Public | +| `getPublicApiV1Activity` | `GET` | `/public/api/v1/activity` | User Activity | Public | +| `getPublicApiV1PositionCurrent` | `GET` | `/public/api/v1/position/current` | Current Position | Public | +| `getPublicApiV1Pnl` | `GET` | `/public/api/v1/pnl` | Profit and Loss | Public | + +#### Endpoint Details + +##### `getPublicApiV1AuthNonce` + +**GET** `/public/api/v1/auth/nonce` + +Generate Nonce + + +--- +##### `postPublicApiV1AuthLogin` + +**POST** `/public/api/v1/auth/login` + +Login + + +--- +##### `postPublicApiV1AuthLogout` + +**POST** `/public/api/v1/auth/logout` + +Logout + + +--- +##### `postPublicApiV1AuthApiKey` + +**POST** `/public/api/v1/auth/api-key/{chainId}` + +Generate API Key *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** + +--- +##### `getPublicApiV1AuthApiKey` + +**GET** `/public/api/v1/auth/api-key/{chainId}` + +Get API Key *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** + +--- +##### `deletePublicApiV1AuthApiKey` + +**DELETE** `/public/api/v1/auth/api-key/{chainId}` + +Delete API Key *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** + +--- +##### `postPublicApiV1AuthVerifyL1` + +**POST** `/public/api/v1/auth/verify/l1` + +Verify L1 Headers *(Auth required)* + + +--- +##### `postPublicApiV1AuthVerifyL2` + +**POST** `/public/api/v1/auth/verify/l2` + +Verify L2 Headers *(Auth required)* + + +--- +##### `getPublicApiV1Events` + +**GET** `/public/api/v1/events/` + +List All Events + +**Parameters:** +- `page` (query, integer) +- `limit` (query, integer) +- `status` (query, string) — enum: `active,closed,all` +- `tag_id` (query, string) +- `sort` (query, string) + +--- +##### `getPublicApiV1Events` + +**GET** `/public/api/v1/events/{id}` + +Get Event by ID + +**Parameters:** +- `id` (path, integer) **required** + +--- +##### `getPublicApiV1EventsSlug` + +**GET** `/public/api/v1/events/slug/{slug}` + +Get Event by Slug + +**Parameters:** +- `slug` (path, string) **required** + +--- +##### `getPublicApiV1EventsTags` + +**GET** `/public/api/v1/events/{id}/tags` + +Get Tags for Event + +**Parameters:** +- `id` (path, integer) **required** + +--- +##### `getPublicApiV1Markets` + +**GET** `/public/api/v1/markets/` + +List All Markets + +**Parameters:** +- `page` (query, integer) +- `active` (query, boolean) +- `event_id` (query, integer) + +--- +##### `getPublicApiV1Markets` + +**GET** `/public/api/v1/markets/{id}` + +Get Market by ID + +**Parameters:** +- `id` (path, integer) **required** + +--- +##### `getPublicApiV1MarketsPolymarket` + +**GET** `/public/api/v1/markets/polymarket/{polymarketId}` + +Get Market by Polymarket ID + +**Parameters:** +- `polymarketId` (path, string) **required** + +--- +##### `getPublicApiV1MarketsBsc` + +**GET** `/public/api/v1/markets/bsc/{bscQuestionId}` + +Get Market by BSC Question ID + +**Parameters:** +- `bscQuestionId` (path, string) **required** + +--- +##### `getPublicApiV1PublicSearch` + +**GET** `/public/api/v1/public-search/` + +Search Events and Markets + +**Parameters:** +- `q` (query, string) **required** +- `page` (query, integer) +- `events_tag` (query, string) +- `optimized` (query, boolean) + +--- +##### `getPublicApiV1Tags` + +**GET** `/public/api/v1/tags/` + +List All Tags + + +--- +##### `postPublicApiV1Order` + +**POST** `/public/api/v1/order/{chainId}` + +Place Order *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** + +--- +##### `deletePublicApiV1Order` + +**DELETE** `/public/api/v1/order/{chainId}/{orderId}` + +Cancel Order *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** +- `orderId` (path, string) **required** +- `tokenId` (query, string) **required** + +--- +##### `getPublicApiV1Orders` + +**GET** `/public/api/v1/orders/{chainId}/{orderId}` + +Get Order *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** +- `orderId` (path, string) **required** +- `tokenId` (query, string) **required** + +--- +##### `getPublicApiV1OrdersOpen` + +**GET** `/public/api/v1/orders/{chainId}/open` + +Get Open Orders *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** +- `limit` (query, integer) +- `page` (query, integer) + +--- +##### `getPublicApiV1Price` + +**GET** `/public/api/v1/price` + +Get Price + +**Parameters:** +- `token_id` (query, string) **required** +- `side` (query, string) **required** — enum: `BUY,SELL` + +--- +##### `postPublicApiV1Prices` + +**POST** `/public/api/v1/prices` + +Get Prices (Batch) + + +--- +##### `getPublicApiV1Midpoint` + +**GET** `/public/api/v1/midpoint` + +Get Midpoint + +**Parameters:** +- `token_id` (query, string) **required** + +--- +##### `getPublicApiV1Book` + +**GET** `/public/api/v1/book` + +Get Order Book + +**Parameters:** +- `token_id` (query, string) **required** + +--- +##### `getPublicApiV1PricesHistory` + +**GET** `/public/api/v1/prices-history` + +Get Price History + +**Parameters:** +- `market` (query, string) **required** — Asset ID +- `interval` (query, string) — enum: `max,1m,1h,6h,1d,1w` +- `startTs` (query, integer) +- `endTs` (query, integer) + +--- +##### `getPublicApiV1Trade` + +**GET** `/public/api/v1/trade/{chainId}` + +Get Trades (Authenticated) *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** +- `tokenId` (query, string) **required** +- `limit` (query, integer) +- `next_cursor` (query, string) + +--- +##### `getPublicApiV1Trades` + +**GET** `/public/api/v1/trades` + +Get Public Trades + +**Parameters:** +- `user` (query, string) +- `limit` (query, integer) +- `side` (query, string) + +--- +##### `getPublicApiV1Activity` + +**GET** `/public/api/v1/activity` + +User Activity + +**Parameters:** +- `user` (query, string) **required** +- `limit` (query, integer) + +--- +##### `getPublicApiV1PositionCurrent` + +**GET** `/public/api/v1/position/current` + +Current Position + +**Parameters:** +- `user` (query, string) **required** +- `eventId` (query, integer) + +--- +##### `getPublicApiV1Pnl` + +**GET** `/public/api/v1/pnl` + +Profit and Loss + +**Parameters:** +- `user_address` (query, string) **required** + +--- +### Myriad + +| `callApi()` name | Method | Path | Summary | Auth | +|-----------------|--------|------|---------|------| +| `getQuestions` | `GET` | `/questions` | List Questions | Required | +| `getQuestions` | `GET` | `/questions/{id}` | Get Question Details | Required | +| `getMarkets` | `GET` | `/markets` | List Markets | Required | +| `getMarkets` | `GET` | `/markets/{id}` | Get Market Details | Required | +| `getMarketsEvents` | `GET` | `/markets/{id}/events` | Get Market Events | Required | +| `getMarketsReferrals` | `GET` | `/markets/{id}/referrals` | Get Market Referrals | Required | +| `getMarketsHolders` | `GET` | `/markets/{id}/holders` | Get Market Holders | Required | +| `postMarketsQuote` | `POST` | `/markets/quote` | Get Trade Quote | Required | +| `postMarketsQuoteWithFee` | `POST` | `/markets/quote_with_fee` | Get Trade Quote with Frontend Fee | Required | +| `postMarketsClaim` | `POST` | `/markets/claim` | Get Claim Quote | Required | +| `getUsersEvents` | `GET` | `/users/{address}/events` | Get User Events | Required | +| `getUsersReferrals` | `GET` | `/users/{address}/referrals` | Get User Referrals | Required | +| `getUsersPortfolio` | `GET` | `/users/{address}/portfolio` | Get User Portfolio | Required | +| `getUsersMarkets` | `GET` | `/users/{address}/markets` | Get User Markets Portfolio | Required | + +#### Endpoint Details + +##### `getQuestions` + +**GET** `/questions` + +List Questions *(Auth required)* + +**Parameters:** +- `page` (query, integer) +- `limit` (query, integer) +- `keyword` (query, string) — Search in question title +- `min_markets` (query, integer) — Minimum number of linked markets +- `max_markets` (query, integer) — Maximum number of linked markets + +--- +##### `getQuestions` + +**GET** `/questions/{id}` + +Get Question Details *(Auth required)* + +**Parameters:** +- `id` (path, integer) **required** + +--- +##### `getMarkets` + +**GET** `/markets` + +List Markets *(Auth required)* + +**Parameters:** +- `page` (query, integer) +- `limit` (query, integer) +- `sort` (query, string) — enum: `volume,volume_24h,liquidity,expires_at,published_at,featured` +- `order` (query, string) — enum: `asc,desc` +- `network_id` (query, string) — Comma-separated list of network ids +- `state` (query, string) — enum: `open,closed,resolved,voided` +- `trading_model` (query, string) — Filter markets by trading model (e.g. CLOB, AMM) +- `token_address` (query, string) +- `topics` (query, string) — Comma-separated list of topics +- `keyword` (query, string) — Full-text search across title, description, and outcome titles +- `ids` (query, string) — Comma-separated list of on-chain market ids +- `in_play` (query, boolean) +- `moneyline` (query, boolean) +- `min_duration` (query, integer) — Minimum market duration in seconds +- `max_duration` (query, integer) — Maximum market duration in seconds + +--- +##### `getMarkets` + +**GET** `/markets/{id}` + +Get Market Details *(Auth required)* + +**Parameters:** +- `id` (path, string) **required** — Market slug OR Market ID +- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID + +--- +##### `getMarketsEvents` + +**GET** `/markets/{id}/events` + +Get Market Events *(Auth required)* + +**Parameters:** +- `id` (path, string) **required** — Market slug OR Market ID +- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID +- `page` (query, integer) +- `limit` (query, integer) +- `since` (query, integer) — Unix seconds (inclusive) +- `until` (query, integer) — Unix seconds (inclusive) + +--- +##### `getMarketsReferrals` + +**GET** `/markets/{id}/referrals` + +Get Market Referrals *(Auth required)* + +**Parameters:** +- `id` (path, string) **required** — Market slug OR Market ID +- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID +- `page` (query, integer) +- `limit` (query, integer) +- `since` (query, integer) +- `until` (query, integer) +- `code` (query, string) + +--- +##### `getMarketsHolders` + +**GET** `/markets/{id}/holders` + +Get Market Holders *(Auth required)* + +**Parameters:** +- `id` (path, string) **required** — Market slug OR Market ID +- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID +- `page` (query, integer) +- `limit` (query, integer) + +--- +##### `postMarketsQuote` + +**POST** `/markets/quote` + +Get Trade Quote *(Auth required)* + + +--- +##### `postMarketsQuoteWithFee` + +**POST** `/markets/quote_with_fee` + +Get Trade Quote with Frontend Fee *(Auth required)* + + +--- +##### `postMarketsClaim` + +**POST** `/markets/claim` + +Get Claim Quote *(Auth required)* + + +--- +##### `getUsersEvents` + +**GET** `/users/{address}/events` + +Get User Events *(Auth required)* + +**Parameters:** +- `address` (path, string) **required** +- `page` (query, integer) +- `limit` (query, integer) +- `market_id` (query, string) +- `market_slug` (query, string) +- `network_id` (query, integer) +- `since` (query, integer) +- `until` (query, integer) + +--- +##### `getUsersReferrals` + +**GET** `/users/{address}/referrals` + +Get User Referrals *(Auth required)* + +**Parameters:** +- `address` (path, string) **required** +- `page` (query, integer) +- `limit` (query, integer) +- `market_id` (query, string) +- `market_slug` (query, string) +- `network_id` (query, integer) +- `since` (query, integer) +- `until` (query, integer) +- `code` (query, string) + +--- +##### `getUsersPortfolio` + +**GET** `/users/{address}/portfolio` + +Get User Portfolio *(Auth required)* + +**Parameters:** +- `address` (path, string) **required** +- `page` (query, integer) +- `limit` (query, integer) +- `min_shares` (query, number) — Default 0.1 +- `market_slug` (query, string) +- `market_id` (query, string) +- `network_id` (query, integer) +- `token_address` (query, string) + +--- +##### `getUsersMarkets` + +**GET** `/users/{address}/markets` + +Get User Markets Portfolio *(Auth required)* + +**Parameters:** +- `address` (path, string) **required** +- `page` (query, integer) +- `limit` (query, integer) +- `min_shares` (query, number) +- `network_id` (query, integer) +- `state` (query, string) +- `trading_model` (query, string) — Filter portfolio results by trading model (e.g. CLOB, AMM) +- `token_address` (query, string) +- `topics` (query, string) +- `keyword` (query, string) +- `market_ids` (query, string) — Comma-separated list of {networkId}:{marketId} pairs + +--- From 5d67ca707003dda25358579191b8c531e93bd8b4 Mon Sep 17 00:00:00 2001 From: AbhilashG12 Date: Fri, 10 Jul 2026 12:24:24 +0530 Subject: [PATCH 3/7] chore: regenerate API_REFERENCE.md to satisfy CI checks --- core/api-doc-config.generated.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/api-doc-config.generated.json b/core/api-doc-config.generated.json index 061cb202..ac6b875b 100644 --- a/core/api-doc-config.generated.json +++ b/core/api-doc-config.generated.json @@ -1,5 +1,5 @@ { - "_generated": "Auto-generated by extract-jsdoc.js on 2026-07-10T06:13:16.542Z. Do not edit manually.", + "_generated": "Auto-generated by extract-jsdoc.js on 2026-07-10T06:52:29.052Z. Do not edit manually.", "methods": { "has": { "summary": "HTTP verb for the endpoint (e.g. GET, POST). */\r", From 192817ebf80230124ae6e66729fc1ff44543d99b Mon Sep 17 00:00:00 2001 From: AbhilashG12 Date: Fri, 10 Jul 2026 12:28:18 +0530 Subject: [PATCH 4/7] chore: resolve merge conflicts by regenerating API documentation --- core/api-doc-config.generated.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/api-doc-config.generated.json b/core/api-doc-config.generated.json index ac6b875b..c0b17199 100644 --- a/core/api-doc-config.generated.json +++ b/core/api-doc-config.generated.json @@ -1,5 +1,5 @@ { - "_generated": "Auto-generated by extract-jsdoc.js on 2026-07-10T06:52:29.052Z. Do not edit manually.", + "_generated": "Auto-generated by extract-jsdoc.js on 2026-07-10T06:58:05.514Z. Do not edit manually.", "methods": { "has": { "summary": "HTTP verb for the endpoint (e.g. GET, POST). */\r", From 09bda25e1a761ed29834337ea9a32323b3b2b925 Mon Sep 17 00:00:00 2001 From: AbhilashG12 Date: Fri, 10 Jul 2026 12:34:51 +0530 Subject: [PATCH 5/7] chore: convert API_REFERENCE.md line endings to LF for CI runner --- sdks/python/API_REFERENCE.md | 10403 ++++++++++++++-------------- sdks/typescript/API_REFERENCE.md | 10431 +++++++++++++++-------------- 2 files changed, 10446 insertions(+), 10388 deletions(-) diff --git a/sdks/python/API_REFERENCE.md b/sdks/python/API_REFERENCE.md index 194282fa..04ac6356 100644 --- a/sdks/python/API_REFERENCE.md +++ b/sdks/python/API_REFERENCE.md @@ -1,508 +1,519 @@ -# PMXT Python SDK - API Reference - -A unified Python SDK for supported prediction markets, with local sidecar access to PMXT exchange implementations and hosted services where configured. - -## Installation - -```bash -pip install pmxt -``` - -## Quick Start - -```python -import pmxt - -# Initialize exchanges (server starts automatically!) -poly = pmxt.Polymarket() -kalshi = pmxt.Kalshi() -limitless = pmxt.Limitless() # Requires API key for authenticated operations - -# Search for markets -markets = poly.fetch_markets(query="Trump") -print(markets[0].title) -``` - -> **Note**: This SDK automatically manages the PMXT sidecar server. Just import and use! - ---- - -## Server Management - -The SDK exposes a `pmxt.server` namespace for managing the background sidecar server. Use these commands for clearing state, resolving "port busy" errors, inspecting server health, or tailing logs from interactive environments like Jupyter. - -```python -import pmxt - -pmxt.server.status() # snapshot dict: running, pid, port, version, uptime_seconds, lock_file -pmxt.server.health() # bool - True if /health responds ok -pmxt.server.start() # idempotent - no-op if already running -pmxt.server.stop() # stop the sidecar and clean up the lock file -pmxt.server.restart() # stop and start the sidecar -pmxt.server.logs(50) # last N log lines from ~/.pmxt/server.log (default 50) -``` - -### `pmxt.server.status` - -Returns a fresh dict describing the sidecar state. Useful for diagnosing "is it running?" before issuing API calls. - -```python -import pmxt -info = pmxt.server.status() -print(info["running"], info["pid"], info["port"], info["uptime_seconds"]) -``` - -### `pmxt.server.health` - -Returns `True` if the sidecar's `/health` endpoint responds with status `ok`, otherwise `False`. Lighter than `status()` when you only need a boolean liveness check. - -```python -import pmxt -if not pmxt.server.health(): - pmxt.server.restart() -``` - -### `pmxt.server.start` - -Idempotently start the sidecar. Returns immediately if a healthy server is already running. Use this when you want to fail fast on startup rather than letting the first API call lazily boot the server. - -```python -import pmxt -pmxt.server.start() -``` - -### `pmxt.server.stop` - -Stop the running sidecar and clean up its lock file. - -```python -import pmxt -pmxt.server.stop() -``` - -### `pmxt.server.restart` - -Stop the sidecar (if running) and start a fresh one. Equivalent to `stop()` followed by `start()`. - -```python -import pmxt -pmxt.server.restart() -``` - -### `pmxt.server.logs` - -Return the last `n` lines (default `50`) from the sidecar log file at `~/.pmxt/server.log`. Returns an empty list if no log file exists yet. Invaluable when the server is misbehaving and you need to see what it actually printed. - -```python -import pmxt -for line in pmxt.server.logs(100): - print(line) -``` - ---- - -## Methods - -### `has` - -Capability map indicating which methods this exchange supports. - - -**Signature:** - -```python -has: ExchangeHas -``` - -**Parameters:** - -- None - -**Returns:** ExchangeHas - Result - -**Example:** - -```python -exchange.has -``` - - ---- -### `load_markets` - -Load and cache all markets from the exchange into `this.markets` and `this.marketsBySlug`. - - -**Signature:** - -```python -def load_markets(reload: bool) -> Dict[str, UnifiedMarket]: -``` - -**Parameters:** - -- `reload` (bool): Force a fresh fetch from the API even if markets are already loaded - -**Returns:** Dict[str, [UnifiedMarket](#unifiedmarket)] - Dictionary of markets indexed by marketId - -**Example:** - -```python -exchange.load_markets(reload=True) -``` - - ---- -### `fetch_markets` - -Fetch markets with optional filtering, search, or slug lookup. - - -**Signature:** - -```python -def fetch_markets(params: Optional[MarketFetchParams] = None) -> List[UnifiedMarket]: -``` - -**Parameters:** - -- `params` (MarketFetchParams) - **Optional**: Optional parameters for filtering and search - - `params.query` - Search keyword to filter markets - - `params.slug` - Market slug/ticker for direct lookup - - `params.limit` - Maximum number of results - - `params.offset` - Pagination offset - - `params.sort` - Sort order ('volume' | 'liquidity' | 'newest') - - `params.search_in` - Where to search ('title' | 'description' | 'both') - -**Returns:** List[[UnifiedMarket](#unifiedmarket)] - Array of unified markets - -**Example:** - -```python -exchange.fetch_markets(query="Trump", slug="will-trump-win", limit=10) -``` - -**Notes:** -ordering — exchanges may reorder or add markets between requests. For stable iteration -across pages, use `loadMarkets()` and paginate over `Object.values(exchange.markets)`. -Some exchanges (like Limitless) may only support status 'active' for search results. - ---- -### `fetch_markets_paginated` - -Fetch markets with cursor-based pagination backed by a stable in-memory snapshot. - - -**Signature:** - -```python -def fetch_markets_paginated(params: Optional[dict] = None) -> PaginatedMarketsResult: -``` - -**Parameters:** - -- `params` (dict) - **Optional**: params - - `params.limit` - Page size (default: return all markets) - - `params.cursor` - Opaque cursor returned by a previous call - -**Returns:** [PaginatedMarketsResult](#paginatedmarketsresult) - PaginatedMarketsResult with data, total, and optional nextCursor - -**Example:** - -```python -exchange.fetch_markets_paginated(limit=10, cursor="...") -``` - - ---- -### `fetch_events_paginated` - -Paginated variant of {@link fetchEvents}. - - -**Signature:** - -```python -def fetch_events_paginated(params: Optional[dict] = None) -> PaginatedEventsResult: -``` - -**Parameters:** - -- `params` (dict) - **Optional**: params - - `params.limit` - Page size (default: return all events) - - `params.cursor` - Opaque cursor returned by a previous call - -**Returns:** [PaginatedEventsResult](#paginatedeventsresult) - PaginatedEventsResult with data, total, and optional nextCursor - -**Example:** - -```python -exchange.fetch_events_paginated(limit=10, cursor="...") -``` - - ---- -### `fetch_events` - -Fetch events with optional keyword search. - - -**Signature:** - -```python -def fetch_events(params: Optional[EventFetchParams] = None) -> List[UnifiedEvent]: -``` - -**Parameters:** - -- `params` ([EventFetchParams](#eventfetchparams)) - **Optional**: Optional parameters for search and filtering - - `params.query` - Search keyword to filter events. If omitted, returns top events by volume. - - `params.limit` - Maximum number of results - - `params.offset` - Pagination offset - - `params.search_in` - Where to search ('title' | 'description' | 'both') - -**Returns:** List[[UnifiedEvent](#unifiedevent)] - Array of unified events - -**Example:** - -```python -exchange.fetch_events(query="Trump", limit=10, offset=0) -``` - -**Notes:** -Some exchanges (like Limitless) may only support status 'active' for search results. - ---- -### `fetch_series` - -Fetch the recurring series (fourth tier above Event -> Market -> Outcome) - - -**Signature:** - -```python -def fetch_series(params: Optional[SeriesFetchParams] = None) -> List[UnifiedSeries]: -``` - -**Parameters:** - -- `params` (SeriesFetchParams) - **Optional**: params - -**Returns:** List[[UnifiedSeries](#unifiedseries)] - Array of unified series. Always an array, including the singular-lookup case. - -**Example:** - -```python -exchange.fetch_series() -``` - - ---- -### `fetch_market` - -Fetch a single market by lookup parameters. - - -**Signature:** - -```python -def fetch_market(params: Optional[MarketFetchParams] = None) -> UnifiedMarket: -``` - -**Parameters:** - -- `params` (MarketFetchParams) - **Optional**: Lookup parameters (marketId, outcomeId, slug, etc.) - -**Returns:** [UnifiedMarket](#unifiedmarket) - A single unified market - -**Example:** - -```python -exchange.fetch_market() -``` - - ---- -### `fetch_event` - -Fetch a single event by lookup parameters. - - -**Signature:** - -```python -def fetch_event(params: Optional[EventFetchParams] = None) -> UnifiedEvent: -``` - -**Parameters:** - -- `params` ([EventFetchParams](#eventfetchparams)) - **Optional**: Lookup parameters (eventId, slug, query) - -**Returns:** [UnifiedEvent](#unifiedevent) - A single unified event - -**Example:** - -```python -exchange.fetch_event() -``` - - ---- -### `fetch_event_metadata` - -Fetch venue-native metadata for a specific event when the exchange - - -**Signature:** - -```python -def fetch_event_metadata(event_ticker: str) -> Dict[str, unknown]: -``` - -**Parameters:** - -- `event_ticker` (str): eventTicker - -**Returns:** Dict[str, unknown] - Result - -**Example:** - -```python -exchange.fetch_event_metadata(event_ticker="...") -``` - - ---- -### `fetch_ohlcv` - -Fetch historical OHLCV (candlestick) price data for a specific market outcome. - - -**Signature:** - -```python -def fetch_ohlcv(outcome_id: str, params: OHLCVParams) -> List[PriceCandle]: -``` - -**Parameters:** - -- `outcome_id` (str): The Outcome ID (outcomeId). Use outcome.outcomeId, NOT market.marketId -- `params` ([OHLCVParams](#ohlcvparams)): OHLCV parameters including resolution (required) - -**Returns:** List[[PriceCandle](#pricecandle)] - Array of price candles - -**Example:** - -```python -exchange.fetch_ohlcv(outcome_id="abc123", resolution="1h", limit=100) -``` - -**Notes:** -**CRITICAL**: Use `outcome.outcomeId` (TS) / `outcome.outcome_id` (Python), not the market ID. -Polymarket: outcomeId is the CLOB Token ID. Kalshi: outcomeId is the Market Ticker. -Common resolutions: '1m' | '5m' | '15m' | '1h' | '6h' | '1d'. Arbitrary intervals (e.g. '30s', '120s', '3h') accepted by venues that support them. - ---- -### `fetch_order_book` - -Fetch the order book (bids/asks) for a specific outcome. - - -**Signature:** - -```python -def fetch_order_book(outcome_id: str, limit: Optional[float] = None, params: Optional[FetchOrderBookParams] = None) -> OrderBook: -``` - -**Parameters:** - -- `outcome_id` (str): The Outcome ID (outcomeId) or market slug -- `limit` (float) - **Optional**: Max number of bid/ask levels to return. For range -- `params` ([FetchOrderBookParams](#fetchorderbookparams)) - **Optional**: Optional parameters: - -**Returns:** [OrderBook](#orderbook) - Order book with bids and asks. Returns OrderBook[] when - -**Example:** - -```python -exchange.fetch_order_book(outcome_id="abc123", limit=10, params={}) -``` - - ---- -### `fetch_order_books` - -Batch variant of {@link fetchOrderBook}. Fetches order books for - - -**Signature:** - -```python -def fetch_order_books(outcome_ids: List[str]) -> Dict[str, OrderBook]: -``` - -**Parameters:** - -- `outcome_ids` (List[str]): List of Outcome IDs (outcomeId). Each id must be in the - -**Returns:** Dict[str, [OrderBook](#orderbook)] - A map keyed by the input id (preserving the caller's exact - -**Example:** - -```python -exchange.fetch_order_books(outcome_ids=["12345"]) -``` - - ---- -### `fetch_trades` - -Fetch raw trade history for a specific outcome. - - -**Signature:** - -```python -def fetch_trades(outcome_id: str, params: Union[TradesParams, HistoryFilterParams]) -> List[Trade]: -``` - -**Parameters:** - -- `outcome_id` (str): The Outcome ID (outcomeId) -- `params` (Union[[TradesParams](#tradesparams), [HistoryFilterParams](#historyfilterparams)]): Trade filter parameters - -**Returns:** List[[Trade](#trade)] - Array of recent trades - -**Example:** - -```python -exchange.fetch_trades(outcome_id="abc123", limit=50) -``` - -**Notes:** -Polymarket requires an API key for trade history. Use fetchOHLCV for public historical data. - ---- -### `create_order` - -Place a new order on the exchange. - - -**Signature:** - -```python -def create_order(params: CreateOrderParams) -> Order: -``` - -**Parameters:** - -- `params` ([CreateOrderParams](#createorderparams)): Order parameters - -**Returns:** [Order](#order) - The created order - -**Example:** - -```python +# PMXT Python SDK - API Reference + +A unified Python SDK for supported prediction markets, with local sidecar access to PMXT exchange implementations and hosted services where configured. + +## Installation + +```bash +pip install pmxt +``` + +## Quick Start + +```python +import pmxt + +# Initialize exchanges (server starts automatically!) +poly = pmxt.Polymarket() +kalshi = pmxt.Kalshi() +limitless = pmxt.Limitless() # Requires API key for authenticated operations + +# Search for markets +markets = poly.fetch_markets(query="Trump") +print(markets[0].title) +``` + +> **Note**: This SDK automatically manages the PMXT sidecar server. Just import and use! + +--- + +## Server Management + +The SDK exposes a `pmxt.server` namespace for managing the background sidecar server. Use these commands for clearing state, resolving "port busy" errors, inspecting server health, or tailing logs from interactive environments like Jupyter. + +```python +import pmxt + +pmxt.server.status() # snapshot dict: running, pid, port, version, uptime_seconds, lock_file +pmxt.server.health() # bool - True if /health responds ok +pmxt.server.start() # idempotent - no-op if already running +pmxt.server.stop() # stop the sidecar and clean up the lock file +pmxt.server.restart() # stop and start the sidecar +pmxt.server.logs(50) # last N log lines from ~/.pmxt/server.log (default 50) +``` + +### `pmxt.server.status` + +Returns a fresh dict describing the sidecar state. Useful for diagnosing "is it running?" before issuing API calls. + +```python +import pmxt +info = pmxt.server.status() +print(info["running"], info["pid"], info["port"], info["uptime_seconds"]) +``` + +### `pmxt.server.health` + +Returns `True` if the sidecar's `/health` endpoint responds with status `ok`, otherwise `False`. Lighter than `status()` when you only need a boolean liveness check. + +```python +import pmxt +if not pmxt.server.health(): + pmxt.server.restart() +``` + +### `pmxt.server.start` + +Idempotently start the sidecar. Returns immediately if a healthy server is already running. Use this when you want to fail fast on startup rather than letting the first API call lazily boot the server. + +```python +import pmxt +pmxt.server.start() +``` + +### `pmxt.server.stop` + +Stop the running sidecar and clean up its lock file. + +```python +import pmxt +pmxt.server.stop() +``` + +### `pmxt.server.restart` + +Stop the sidecar (if running) and start a fresh one. Equivalent to `stop()` followed by `start()`. + +```python +import pmxt +pmxt.server.restart() +``` + +### `pmxt.server.logs` + +Return the last `n` lines (default `50`) from the sidecar log file at `~/.pmxt/server.log`. Returns an empty list if no log file exists yet. Invaluable when the server is misbehaving and you need to see what it actually printed. + +```python +import pmxt +for line in pmxt.server.logs(100): + print(line) +``` + +--- + +## Methods + +### `has` + +Capability map indicating which methods this exchange supports. + + +**Signature:** + +```python +has: ExchangeHas +``` + +**Parameters:** + +- None + +**Returns:** ExchangeHas - Result + +**Example:** + +```python +exchange.has +``` + + +--- +### `load_markets` + +Load and cache all markets from the exchange into `this.markets` and `this.marketsBySlug`. + + + +**Signature:** + +```python +def load_markets(reload: bool) -> Dict[str, UnifiedMarket]: +``` + +**Parameters:** + +- `reload` (bool): Force a fresh fetch from the API even if markets are already loaded + +**Returns:** Dict[str, [UnifiedMarket](#unifiedmarket)] - Dictionary of markets indexed by marketId + +**Example:** + +```python +exchange.load_markets(reload=True) +``` + + +--- +### `fetch_markets` + +Fetch markets with optional filtering, search, or slug lookup. + + + +**Signature:** + +```python +def fetch_markets(params: Optional[MarketFetchParams] = None) -> List[UnifiedMarket]: +``` + +**Parameters:** + +- `params` (MarketFetchParams) - **Optional**: Optional parameters for filtering and search + - `params.query` - Search keyword to filter markets + - `params.slug` - Market slug/ticker for direct lookup + - `params.limit` - Maximum number of results + - `params.offset` - Pagination offset + - `params.sort` - Sort order ('volume' | 'liquidity' | 'newest') + - `params.search_in` - Where to search ('title' | 'description' | 'both') + +**Returns:** List[[UnifiedMarket](#unifiedmarket)] - Array of unified markets + +**Example:** + +```python +exchange.fetch_markets(query="Trump", slug="will-trump-win", limit=10) +``` + +**Notes:** +ordering — exchanges may reorder or add markets between requests. For stable iteration +across pages, use `loadMarkets()` and paginate over `Object.values(exchange.markets)`. +Some exchanges (like Limitless) may only support status 'active' for search results. + +--- +### `fetch_markets_paginated` + +Fetch markets with cursor-based pagination backed by a stable in-memory snapshot. + + + +**Signature:** + +```python +def fetch_markets_paginated(params: Optional[dict] = None) -> PaginatedMarketsResult: +``` + +**Parameters:** + +- `params` (dict) - **Optional**: params + - `params.limit` - Page size (default: return all markets) + - `params.cursor` - Opaque cursor returned by a previous call + +**Returns:** [PaginatedMarketsResult](#paginatedmarketsresult) - PaginatedMarketsResult with data, total, and optional nextCursor + +**Example:** + +```python +exchange.fetch_markets_paginated(limit=10, cursor="...") +``` + + +--- +### `fetch_events_paginated` + +Paginated variant of {@link fetchEvents}. + + + +**Signature:** + +```python +def fetch_events_paginated(params: Optional[dict] = None) -> PaginatedEventsResult: +``` + +**Parameters:** + +- `params` (dict) - **Optional**: params + - `params.limit` - Page size (default: return all events) + - `params.cursor` - Opaque cursor returned by a previous call + +**Returns:** [PaginatedEventsResult](#paginatedeventsresult) - PaginatedEventsResult with data, total, and optional nextCursor + +**Example:** + +```python +exchange.fetch_events_paginated(limit=10, cursor="...") +``` + + +--- +### `fetch_events` + +Fetch events with optional keyword search. + + + +**Signature:** + +```python +def fetch_events(params: Optional[EventFetchParams] = None) -> List[UnifiedEvent]: +``` + +**Parameters:** + +- `params` ([EventFetchParams](#eventfetchparams)) - **Optional**: Optional parameters for search and filtering + - `params.query` - Search keyword to filter events. If omitted, returns top events by volume. + - `params.limit` - Maximum number of results + - `params.offset` - Pagination offset + - `params.search_in` - Where to search ('title' | 'description' | 'both') + +**Returns:** List[[UnifiedEvent](#unifiedevent)] - Array of unified events + +**Example:** + +```python +exchange.fetch_events(query="Trump", limit=10, offset=0) +``` + +**Notes:** +Some exchanges (like Limitless) may only support status 'active' for search results. + +--- +### `fetch_series` + +Fetch the recurring series (fourth tier above Event -> Market -> Outcome) + + + +**Signature:** + +```python +def fetch_series(params: Optional[SeriesFetchParams] = None) -> List[UnifiedSeries]: +``` + +**Parameters:** + +- `params` (SeriesFetchParams) - **Optional**: params + +**Returns:** List[[UnifiedSeries](#unifiedseries)] - Array of unified series. Always an array, including the singular-lookup case. + +**Example:** + +```python +exchange.fetch_series() +``` + + +--- +### `fetch_market` + +Fetch a single market by lookup parameters. + + + +**Signature:** + +```python +def fetch_market(params: Optional[MarketFetchParams] = None) -> UnifiedMarket: +``` + +**Parameters:** + +- `params` (MarketFetchParams) - **Optional**: Lookup parameters (marketId, outcomeId, slug, etc.) + +**Returns:** [UnifiedMarket](#unifiedmarket) - A single unified market + +**Example:** + +```python +exchange.fetch_market() +``` + + +--- +### `fetch_event` + +Fetch a single event by lookup parameters. + + + +**Signature:** + +```python +def fetch_event(params: Optional[EventFetchParams] = None) -> UnifiedEvent: +``` + +**Parameters:** + +- `params` ([EventFetchParams](#eventfetchparams)) - **Optional**: Lookup parameters (eventId, slug, query) + +**Returns:** [UnifiedEvent](#unifiedevent) - A single unified event + +**Example:** + +```python +exchange.fetch_event() +``` + + +--- +### `fetch_event_metadata` + +Fetch venue-native metadata for a specific event when the exchange + + + +**Signature:** + +```python +def fetch_event_metadata(event_ticker: str) -> Dict[str, unknown]: +``` + +**Parameters:** + +- `event_ticker` (str): eventTicker + +**Returns:** Dict[str, unknown] - Result + +**Example:** + +```python +exchange.fetch_event_metadata(event_ticker="...") +``` + + +--- +### `fetch_ohlcv` + +Fetch historical OHLCV (candlestick) price data for a specific market outcome. + + +**Signature:** + +```python +def fetch_ohlcv(outcome_id: str, params: OHLCVParams) -> List[PriceCandle]: +``` + +**Parameters:** + +- `outcome_id` (str): The Outcome ID (outcomeId). Use outcome.outcomeId, NOT market.marketId +- `params` ([OHLCVParams](#ohlcvparams)): OHLCV parameters including resolution (required) + +**Returns:** List[[PriceCandle](#pricecandle)] - Array of price candles + +**Example:** + +```python +exchange.fetch_ohlcv(outcome_id="abc123", resolution="1h", limit=100) +``` + +**Notes:** +**CRITICAL**: Use `outcome.outcomeId` (TS) / `outcome.outcome_id` (Python), not the market ID. +Polymarket: outcomeId is the CLOB Token ID. Kalshi: outcomeId is the Market Ticker. +Common resolutions: '1m' | '5m' | '15m' | '1h' | '6h' | '1d'. Arbitrary intervals (e.g. '30s', '120s', '3h') accepted by venues that support them. + +--- +### `fetch_order_book` + +Fetch the order book (bids/asks) for a specific outcome. + + + +**Signature:** + +```python +def fetch_order_book(outcome_id: str, limit: Optional[float] = None, params: Optional[FetchOrderBookParams] = None) -> OrderBook: +``` + +**Parameters:** + +- `outcome_id` (str): The Outcome ID (outcomeId) or market slug +- `limit` (float) - **Optional**: Max number of bid/ask levels to return. For range +- `params` ([FetchOrderBookParams](#fetchorderbookparams)) - **Optional**: Optional parameters: + +**Returns:** [OrderBook](#orderbook) - Order book with bids and asks. Returns OrderBook[] when + +**Example:** + +```python +exchange.fetch_order_book(outcome_id="abc123", limit=10, params={}) +``` + + +--- +### `fetch_order_books` + +Batch variant of {@link fetchOrderBook}. Fetches order books for + + + +**Signature:** + +```python +def fetch_order_books(outcome_ids: List[str]) -> Dict[str, OrderBook]: +``` + +**Parameters:** + +- `outcome_ids` (List[str]): List of Outcome IDs (outcomeId). Each id must be in the + +**Returns:** Dict[str, [OrderBook](#orderbook)] - A map keyed by the input id (preserving the caller's exact + +**Example:** + +```python +exchange.fetch_order_books(outcome_ids=["12345"]) +``` + + +--- +### `fetch_trades` + +Fetch raw trade history for a specific outcome. + + +**Signature:** + +```python +def fetch_trades(outcome_id: str, params: Union[TradesParams, HistoryFilterParams]) -> List[Trade]: +``` + +**Parameters:** + +- `outcome_id` (str): The Outcome ID (outcomeId) +- `params` (Union[[TradesParams](#tradesparams), [HistoryFilterParams](#historyfilterparams)]): Trade filter parameters + +**Returns:** List[[Trade](#trade)] - Array of recent trades + +**Example:** + +```python +exchange.fetch_trades(outcome_id="abc123", limit=50) +``` + +**Notes:** +Polymarket requires an API key for trade history. Use fetchOHLCV for public historical data. + +--- +### `create_order` + +Place a new order on the exchange. + + +**Signature:** + +```python +def create_order(params: CreateOrderParams) -> Order: +``` + +**Parameters:** + +- `params` ([CreateOrderParams](#createorderparams)): Order parameters + +**Returns:** [Order](#order) - The created order + +**Example:** + +```python exchange.create_order( market_id="12345", outcome_id="abc123", @@ -510,31 +521,32 @@ exchange.create_order( type="limit", amount=50, price=0.65, -) -``` - - ---- -### `build_order` - -Build an order payload without submitting it to the exchange. - - -**Signature:** - -```python -def build_order(params: CreateOrderParams) -> BuiltOrder: -``` - -**Parameters:** - -- `params` ([CreateOrderParams](#createorderparams)): Order parameters (same as createOrder) - -**Returns:** [BuiltOrder](#builtorder) - A BuiltOrder containing the exchange-native payload - -**Example:** - -```python +) +``` + + +--- +### `build_order` + +Build an order payload without submitting it to the exchange. + + + +**Signature:** + +```python +def build_order(params: CreateOrderParams) -> BuiltOrder: +``` + +**Parameters:** + +- `params` ([CreateOrderParams](#createorderparams)): Order parameters (same as createOrder) + +**Returns:** [BuiltOrder](#builtorder) - A BuiltOrder containing the exchange-native payload + +**Example:** + +```python exchange.build_order( market_id="12345", outcome_id="abc123", @@ -542,31 +554,31 @@ exchange.build_order( type="limit", amount=50, price=0.65, -) -``` - - ---- -### `submit_order` - -Submit a pre-built order returned by buildOrder(). - - -**Signature:** - -```python -def submit_order(built: BuiltOrder) -> Order: -``` - -**Parameters:** - -- `built` ([BuiltOrder](#builtorder)): A BuiltOrder from buildOrder() - -**Returns:** [Order](#order) - The submitted order - -**Example:** - -```python +) +``` + + +--- +### `submit_order` + +Submit a pre-built order returned by buildOrder(). + + +**Signature:** + +```python +def submit_order(built: BuiltOrder) -> Order: +``` + +**Parameters:** + +- `built` ([BuiltOrder](#builtorder)): A BuiltOrder from buildOrder() + +**Returns:** [Order](#order) - The submitted order + +**Example:** + +```python built = exchange.build_order( market_id="12345", outcome_id="abc123", @@ -575,4648 +587,4665 @@ built = exchange.build_order( amount=50, price=0.65, ) -exchange.submit_order(built) -``` - - ---- -### `cancel_order` - -Cancel an existing open order. - - -**Signature:** - -```python -def cancel_order(order_id: str) -> Order: -``` - -**Parameters:** - -- `order_id` (str): The order ID to cancel - -**Returns:** [Order](#order) - The cancelled order - -**Example:** - -```python -exchange.cancel_order(order_id="ord-001") -``` - - ---- -### `fetch_order` - -Fetch a specific order by ID. - - -**Signature:** - -```python -def fetch_order(order_id: str) -> Order: -``` - -**Parameters:** - -- `order_id` (str): The order ID to look up - -**Returns:** [Order](#order) - The order details - -**Example:** - -```python -exchange.fetch_order(order_id="ord-001") -``` - - ---- -### `fetch_open_orders` - -Fetch all open orders, optionally filtered by market. - - -**Signature:** - -```python -def fetch_open_orders(market_id: Optional[str] = None) -> List[Order]: -``` - -**Parameters:** - -- `market_id` (str) - **Optional**: Optional market ID to filter by - -**Returns:** List[[Order](#order)] - Array of open orders - -**Example:** - -```python -exchange.fetch_open_orders(market_id="12345") -``` - - ---- -### `fetch_my_trades` - -Fetch authenticated user trade history. - - -**Signature:** - -```python -def fetch_my_trades(params: Optional[MyTradesParams] = None) -> List[UserTrade]: -``` - -**Parameters:** - -- `params` ([MyTradesParams](#mytradesparams)) - **Optional**: Optional trade history filters - - `params.outcome_id` - Filter by outcome token ID - - `params.market_id` - Filter by market ID or ticker - - `params.since` - Start timestamp or ISO date - - `params.until` - End timestamp or ISO date - - `params.limit` - Maximum number of trades - - `params.cursor` - Pagination cursor - -**Returns:** List[[UserTrade](#usertrade)] - Array of user trades - -**Example:** - -```python -exchange.fetch_my_trades(limit=10) -``` - - ---- -### `fetch_closed_orders` - -Fetch authenticated closed orders. - - -**Signature:** - -```python -def fetch_closed_orders(params: Optional[OrderHistoryParams] = None) -> List[Order]: -``` - -**Parameters:** - -- `params` ([OrderHistoryParams](#orderhistoryparams)) - **Optional**: Optional order history filters - - `params.market_id` - Filter by market ID or ticker - - `params.since` - Start timestamp or ISO date - - `params.until` - End timestamp or ISO date - - `params.limit` - Maximum number of orders - - `params.cursor` - Pagination cursor - -**Returns:** List[[Order](#order)] - Array of closed orders - -**Example:** - -```python -exchange.fetch_closed_orders(market_id="12345", limit=10) -``` - - ---- -### `fetch_all_orders` - -Fetch authenticated order history across open and closed orders. - - -**Signature:** - -```python -def fetch_all_orders(params: Optional[OrderHistoryParams] = None) -> List[Order]: -``` - -**Parameters:** - -- `params` ([OrderHistoryParams](#orderhistoryparams)) - **Optional**: Optional order history filters - - `params.market_id` - Filter by market ID or ticker - - `params.since` - Start timestamp or ISO date - - `params.until` - End timestamp or ISO date - - `params.limit` - Maximum number of orders - - `params.cursor` - Pagination cursor - -**Returns:** List[[Order](#order)] - Array of orders - -**Example:** - -```python -exchange.fetch_all_orders(market_id="12345", limit=10) -``` - - ---- -### `fetch_positions` - -Fetch current user positions across all markets. - - -**Signature:** - -```python -def fetch_positions(address: Optional[str] = None) -> List[Position]: -``` - -**Parameters:** - -- `address` (str) - **Optional**: Optional public wallet address - -**Returns:** List[[Position](#position)] - Array of user positions - -**Example:** - -```python -exchange.fetch_positions(address="0xabc...") -``` - - ---- -### `fetch_balance` - -Fetch account balances. - - -**Signature:** - -```python -def fetch_balance(address: Optional[str] = None) -> List[Balance]: -``` - -**Parameters:** - -- `address` (str) - **Optional**: Optional public wallet address - -**Returns:** List[[Balance](#balance)] - Array of account balances - -**Example:** - -```python -exchange.fetch_balance(address="0xabc...") -``` - - ---- -### `get_execution_price` - -Calculate the volume-weighted average execution price for a given order size. - - -**Signature:** - -```python -def get_execution_price(order_book: OrderBook, side: Literal["buy", "sell"], amount: float) -> float: -``` - -**Parameters:** - -- `order_book` ([OrderBook](#orderbook)): The current order book -- `side` (Literal["buy", "sell"]): 'buy' or 'sell' -- `amount` (float): Number of contracts to simulate - -**Returns:** float - Average execution price, or 0 if insufficient liquidity - -**Example:** - -```python -order_book = exchange.fetch_order_book(outcome_id="abc123") -exchange.get_execution_price(order_book=order_book, side="buy", amount=50) -``` - - ---- -### `get_execution_price_detailed` - -Calculate detailed execution price information including partial fill data. - - -**Signature:** - -```python -def get_execution_price_detailed(order_book: OrderBook, side: Literal["buy", "sell"], amount: float) -> ExecutionPriceResult: -``` - -**Parameters:** - -- `order_book` ([OrderBook](#orderbook)): The current order book -- `side` (Literal["buy", "sell"]): 'buy' or 'sell' -- `amount` (float): Number of contracts to simulate - -**Returns:** [ExecutionPriceResult](#executionpriceresult) - Detailed execution result with price, filled amount, and fill status - -**Example:** - -```python -order_book = exchange.fetch_order_book(outcome_id="abc123") -exchange.get_execution_price_detailed(order_book=order_book, side="buy", amount=50) -``` - - ---- -### `filter_markets` - -Filter a list of markets by criteria. - - -**Signature:** - -```python -def filter_markets(markets: List[UnifiedMarket], criteria: Union[str, MarketFilterCriteria, MarketFilterFunction]) -> List[UnifiedMarket]: -``` - -**Parameters:** - -- `markets` (List[[UnifiedMarket](#unifiedmarket)]): Array of markets to filter -- `criteria` (Union[str, [MarketFilterCriteria](#marketfiltercriteria), MarketFilterFunction]): Filter criteria: string (text search), object (structured), or function (predicate) - -**Returns:** List[[UnifiedMarket](#unifiedmarket)] - Filtered array of markets - -**Example:** - -```python -markets = exchange.fetch_markets(query="Trump") -exchange.filter_markets(markets=markets, criteria="Trump") -``` - - ---- -### `filter_events` - -Filter a list of events by criteria. - - -**Signature:** - -```python -def filter_events(events: List[UnifiedEvent], criteria: Union[str, EventFilterCriteria, EventFilterFunction]) -> List[UnifiedEvent]: -``` - -**Parameters:** - -- `events` (List[[UnifiedEvent](#unifiedevent)]): Array of events to filter -- `criteria` (Union[str, [EventFilterCriteria](#eventfiltercriteria), EventFilterFunction]): Filter criteria: string (text search), object (structured), or function (predicate) - -**Returns:** List[[UnifiedEvent](#unifiedevent)] - Filtered array of events - -**Example:** - -```python -events = exchange.fetch_events(query="Trump") -exchange.filter_events(events=events, criteria="Trump") -``` - - ---- -### `watch_order_book` - -Watch order book updates in real-time via WebSocket. - - -**Signature:** - -```python -def watch_order_book(outcome_id: str, limit: Optional[float] = None, params: Dict[str, Any]) -> OrderBook: -``` - -**Parameters:** - -- `outcome_id` (str): The Outcome ID to watch -- `limit` (float) - **Optional**: Optional limit for orderbook depth -- `params` (Dict[str, Any]): Optional exchange-specific parameters - -**Returns:** [OrderBook](#orderbook) - Promise that resolves with the current orderbook state - -**Example:** - -```python -exchange.watch_order_book(outcome_id="abc123", limit=10, params={}) -``` - - ---- -### `watch_order_books` - -Watch multiple order books simultaneously via WebSocket. - - -**Signature:** - -```python -def watch_order_books(outcome_ids: List[str], limit: Optional[float] = None, params: Dict[str, Any]) -> Dict[str, OrderBook]: -``` - -**Parameters:** - -- `outcome_ids` (List[str]): Array of Outcome IDs to watch -- `limit` (float) - **Optional**: Optional limit for orderbook depth -- `params` (Dict[str, Any]): Optional exchange-specific parameters - -**Returns:** Dict[str, [OrderBook](#orderbook)] - Promise that resolves with order books keyed by ID - -**Example:** - -```python -exchange.watch_order_books(outcome_ids=["12345"], limit=10, params={}) -``` - - ---- -### `unwatch_order_book` - -Unsubscribe from a previously watched order book stream. - - -**Signature:** - -```python -def unwatch_order_book(outcome_id: str) -> None: -``` - -**Parameters:** - -- `outcome_id` (str): The Outcome ID to stop watching - -**Returns:** None - Result - -**Example:** - -```python -exchange.unwatch_order_book(outcome_id="abc123") -``` - - ---- -### `watch_trades` - -Watch trade executions in real-time via WebSocket. - - -**Signature:** - -```python -def watch_trades(outcome_id: str, address: Optional[str] = None, since: Optional[float] = None, limit: Optional[float] = None) -> List[Trade]: -``` - -**Parameters:** - -- `outcome_id` (str): The Outcome ID to watch -- `address` (str) - **Optional**: Public wallet address -- `since` (float) - **Optional**: Optional timestamp to filter trades from -- `limit` (float) - **Optional**: Optional limit for number of trades - -**Returns:** List[[Trade](#trade)] - Promise that resolves with recent trades - -**Example:** - -```python -exchange.watch_trades(outcome_id="abc123", address="0xabc...", since=1710000000000, limit=50) -``` - - ---- -### `watch_address` - -Stream activity for a public wallet address - - -**Signature:** - -```python -def watch_address(address: str, types: Optional[List[SubscriptionOption]] = None) -> SubscribedAddressSnapshot: -``` - -**Parameters:** - -- `address` (str): Public wallet address to watch -- `types` (List[SubscriptionOption]) - **Optional**: Subset of activity to watch (default: all types) - -**Returns:** SubscribedAddressSnapshot - Promise that resolves with the latest SubscribedAddressSnapshot snapshot - -**Example:** - -```python -exchange.watch_address(address="0xabc...", types=["trades"]) -``` - - ---- -### `unwatch_address` - -Stop watching a previously registered wallet address and release its resource updates. - - -**Signature:** - -```python -def unwatch_address(address: str) -> None: -``` - -**Parameters:** - -- `address` (str): Public wallet address to stop watching - -**Returns:** None - Result - -**Example:** - -```python -exchange.unwatch_address(address="0xabc...") -``` - - ---- -### `close` - -Close all WebSocket connections and clean up resources. - - -**Signature:** - -```python -def close() -> None: -``` - -**Parameters:** - -- None - -**Returns:** None - Result - -**Example:** - -```python -exchange.close() -``` - - ---- -### `fetch_market_matches` - -Find the same or related market on other venues. Two modes: - - -**Signature:** - -```python -def fetch_market_matches(params: Optional[FetchMarketMatchesParams] = None) -> List[MatchResult]: -``` - -**Parameters:** - -- `params` ([FetchMarketMatchesParams](#fetchmarketmatchesparams)) - **Optional**: Match filter parameters - -**Returns:** List[[MatchResult](#matchresult)] - Array of matched markets with relation and confidence - -**Example:** - -```python -exchange.fetch_market_matches() -``` - - ---- -### `fetch_matches` - -fetchMatches - - -**Signature:** - -```python -def fetch_matches(params: FetchMatchesParams) -> List[MatchResult]: -``` - -**Parameters:** - -- `params` (FetchMatchesParams): params - -**Returns:** List[[MatchResult](#matchresult)] - Result - -**Example:** - -```python -exchange.fetch_matches() -``` - - ---- -### `fetch_event_matches` - -Find the same or related event on other venues. Two modes: - - -**Signature:** - -```python -def fetch_event_matches(params: Optional[FetchEventMatchesParams] = None) -> List[EventMatchResult]: -``` - -**Parameters:** - -- `params` ([FetchEventMatchesParams](#fetcheventmatchesparams)) - **Optional**: Event match filter parameters - -**Returns:** List[[EventMatchResult](#eventmatchresult)] - Array of matched events with market-level match details - -**Example:** - -```python -exchange.fetch_event_matches() -``` - - ---- -### `compare_market_prices` - -Compare live prices for the same market across venues. Finds identity matches and returns side-by-side best bid/ask prices so you can spot price differences at a glance. - - -**Signature:** - -```python -def compare_market_prices(params: CompareMarketPricesParams) -> List[PriceComparison]: -``` - -**Parameters:** - -- `params` (CompareMarketPricesParams): Match filter parameters (uses relation: 'identity' internally) - -**Returns:** List[[PriceComparison](#pricecomparison)] - Array of price comparisons across venues - -**Example:** - -```python -exchange.compare_market_prices() -``` - - ---- -### `fetch_related_markets` - -Find related markets across venues. Discovers subset/superset market relationships - - -**Signature:** - -```python -def fetch_related_markets(params: FetchMatchesParams) -> List[PriceComparison]: -``` - -**Parameters:** - -- `params` (FetchMatchesParams): Match filter parameters - -**Returns:** List[[PriceComparison](#pricecomparison)] - Array of subset/superset matches with live prices - -**Example:** - -```python -exchange.fetch_related_markets() -``` - - ---- -### `fetch_matched_markets` - -fetchMatchedMarkets - - -**Signature:** - -```python -def fetch_matched_markets(params: Optional[FetchMatchedMarketsParams] = None) -> List[MatchedMarketPair]: -``` - -**Parameters:** - -- `params` ([FetchMatchedMarketsParams](#fetchmatchedmarketsparams)) - **Optional**: params - -**Returns:** List[[MatchedMarketPair](#matchedmarketpair)] - Result - -**Example:** - -```python -exchange.fetch_matched_markets() -``` - - ---- -### `fetch_matched_prices` - -fetchMatchedPrices - - -**Signature:** - -```python -def fetch_matched_prices(params: Optional[FetchMatchedPricesParams] = None) -> List[MatchedPricePair]: -``` - -**Parameters:** - -- `params` (FetchMatchedPricesParams) - **Optional**: Price comparison parameters (minDifference, category, limit) - -**Returns:** List[MatchedPricePair] - Array of matched market pairs with prices from each venue - -**Example:** - -```python -exchange.fetch_matched_prices() -``` - - ---- -### `fetch_hedges` - -fetchHedges - - -**Signature:** - -```python -def fetch_hedges(params: FetchMatchesParams) -> List[PriceComparison]: -``` - -**Parameters:** - -- `params` (FetchMatchesParams): Match filter parameters - -**Returns:** List[[PriceComparison](#pricecomparison)] - Array of subset/superset matches with live prices - -**Example:** - -```python -exchange.fetch_hedges() -``` - - ---- -### `fetch_arbitrage` - -fetchArbitrage - - -**Signature:** - -```python -def fetch_arbitrage(params: Optional[FetchArbitrageParams] = None) -> List[ArbitrageOpportunity]: -``` - -**Parameters:** - -- `params` ([FetchArbitrageParams](#fetcharbitrageparams)) - **Optional**: Arbitrage scan parameters (minSpread, category, limit) - -**Returns:** List[[ArbitrageOpportunity](#arbitrageopportunity)] - Array of arbitrage opportunities sorted by spread - -**Example:** - -```python -exchange.fetch_arbitrage() -``` - - ---- -### `watch_prices` - -Watch AMM price updates for a market address (Limitless only). - -> **Note**: This method is only available on **limitless** exchange. - - -**Signature:** - -```python -def watch_prices(market_address: str, callback: Callable[[Any], None]) -> None: -``` - -**Parameters:** - -- `market_address` (str): Market contract address -- `callback` (Callable[[Any], None]): Callback for price updates - -**Returns:** None - Result - -**Example:** - -```python -def handle_price_update(data): - pass -exchange.watch_prices(market_address="0xabc...", callback=handle_price_update) -``` - - ---- -### `watch_user_positions` - -Watch user positions in real-time (Limitless only). - -> **Note**: This method is only available on **limitless** exchange. - - -**Signature:** - -```python -def watch_user_positions(callback: Callable[[Any], None]) -> None: -``` - -**Parameters:** - -- `callback` (Callable[[Any], None]): Callback for position updates - -**Returns:** None - Result - -**Example:** - -```python -def handle_position_update(data): - pass -exchange.watch_user_positions(callback=handle_position_update) -``` - - ---- -### `watch_user_transactions` - -Watch user transactions in real-time (Limitless only). - -> **Note**: This method is only available on **limitless** exchange. - - -**Signature:** - -```python -def watch_user_transactions(callback: Callable[[Any], None]) -> None: -``` - -**Parameters:** - -- `callback` (Callable[[Any], None]): Callback for transaction updates - -**Returns:** None - Result - -**Example:** - -```python -def handle_transaction_update(data): - pass -exchange.watch_user_transactions(callback=handle_transaction_update) -``` - - ---- -### `init_auth` - -Initialize L2 API credentials for implicit API signing. - -> **Note**: This method is only available on **polymarket** exchange. - - -**Signature:** - -```python -def init_auth() -> None: -``` - -**Parameters:** - -- None - -**Returns:** None - Result - -**Example:** - -```python -exchange.init_auth() -``` - - ---- -### `pre_warm_market` - -Pre-warm the SDK's internal caches for a market outcome. - -> **Note**: This method is only available on **polymarket** exchange. - - -**Signature:** - -```python -def pre_warm_market(outcome_id: str) -> None: -``` - -**Parameters:** - -- `outcome_id` (str): The CLOB Token ID for the outcome (use `outcome.outcomeId`) - -**Returns:** None - Result - -**Example:** - -```python -exchange.pre_warm_market(outcome_id="abc123") -``` - - ---- -### `get_event_by_id` - -Fetch a single event by its numeric ID (Probable only). - +exchange.submit_order(built) +``` + + +--- +### `cancel_order` + +Cancel an existing open order. + + +**Signature:** + +```python +def cancel_order(order_id: str) -> Order: +``` + +**Parameters:** + +- `order_id` (str): The order ID to cancel + +**Returns:** [Order](#order) - The cancelled order + +**Example:** + +```python +exchange.cancel_order(order_id="ord-001") +``` + + +--- +### `fetch_order` + +Fetch a specific order by ID. + + +**Signature:** + +```python +def fetch_order(order_id: str) -> Order: +``` + +**Parameters:** + +- `order_id` (str): The order ID to look up + +**Returns:** [Order](#order) - The order details + +**Example:** + +```python +exchange.fetch_order(order_id="ord-001") +``` + + +--- +### `fetch_open_orders` + +Fetch all open orders, optionally filtered by market. + + +**Signature:** + +```python +def fetch_open_orders(market_id: Optional[str] = None) -> List[Order]: +``` + +**Parameters:** + +- `market_id` (str) - **Optional**: Optional market ID to filter by + +**Returns:** List[[Order](#order)] - Array of open orders + +**Example:** + +```python +exchange.fetch_open_orders(market_id="12345") +``` + + +--- +### `fetch_my_trades` + +Fetch authenticated user trade history. + + +**Signature:** + +```python +def fetch_my_trades(params: Optional[MyTradesParams] = None) -> List[UserTrade]: +``` + +**Parameters:** + +- `params` ([MyTradesParams](#mytradesparams)) - **Optional**: Optional trade history filters + - `params.outcome_id` - Filter by outcome token ID + - `params.market_id` - Filter by market ID or ticker + - `params.since` - Start timestamp or ISO date + - `params.until` - End timestamp or ISO date + - `params.limit` - Maximum number of trades + - `params.cursor` - Pagination cursor + +**Returns:** List[[UserTrade](#usertrade)] - Array of user trades + +**Example:** + +```python +exchange.fetch_my_trades(limit=10) +``` + + +--- +### `fetch_closed_orders` + +Fetch authenticated closed orders. + + +**Signature:** + +```python +def fetch_closed_orders(params: Optional[OrderHistoryParams] = None) -> List[Order]: +``` + +**Parameters:** + +- `params` ([OrderHistoryParams](#orderhistoryparams)) - **Optional**: Optional order history filters + - `params.market_id` - Filter by market ID or ticker + - `params.since` - Start timestamp or ISO date + - `params.until` - End timestamp or ISO date + - `params.limit` - Maximum number of orders + - `params.cursor` - Pagination cursor + +**Returns:** List[[Order](#order)] - Array of closed orders + +**Example:** + +```python +exchange.fetch_closed_orders(market_id="12345", limit=10) +``` + + +--- +### `fetch_all_orders` + +Fetch authenticated order history across open and closed orders. + + +**Signature:** + +```python +def fetch_all_orders(params: Optional[OrderHistoryParams] = None) -> List[Order]: +``` + +**Parameters:** + +- `params` ([OrderHistoryParams](#orderhistoryparams)) - **Optional**: Optional order history filters + - `params.market_id` - Filter by market ID or ticker + - `params.since` - Start timestamp or ISO date + - `params.until` - End timestamp or ISO date + - `params.limit` - Maximum number of orders + - `params.cursor` - Pagination cursor + +**Returns:** List[[Order](#order)] - Array of orders + +**Example:** + +```python +exchange.fetch_all_orders(market_id="12345", limit=10) +``` + + +--- +### `fetch_positions` + +Fetch current user positions across all markets. + + +**Signature:** + +```python +def fetch_positions(address: Optional[str] = None) -> List[Position]: +``` + +**Parameters:** + +- `address` (str) - **Optional**: Optional public wallet address + +**Returns:** List[[Position](#position)] - Array of user positions + +**Example:** + +```python +exchange.fetch_positions(address="0xabc...") +``` + + +--- +### `fetch_balance` + +Fetch account balances. + + +**Signature:** + +```python +def fetch_balance(address: Optional[str] = None) -> List[Balance]: +``` + +**Parameters:** + +- `address` (str) - **Optional**: Optional public wallet address + +**Returns:** List[[Balance](#balance)] - Array of account balances + +**Example:** + +```python +exchange.fetch_balance(address="0xabc...") +``` + + +--- +### `get_execution_price` + +Calculate the volume-weighted average execution price for a given order size. + + + +**Signature:** + +```python +def get_execution_price(order_book: OrderBook, side: Literal["buy", "sell"], amount: float) -> float: +``` + +**Parameters:** + +- `order_book` ([OrderBook](#orderbook)): The current order book +- `side` (Literal["buy", "sell"]): 'buy' or 'sell' +- `amount` (float): Number of contracts to simulate + +**Returns:** float - Average execution price, or 0 if insufficient liquidity + +**Example:** + +```python +order_book = exchange.fetch_order_book(outcome_id="abc123") +exchange.get_execution_price(order_book=order_book, side="buy", amount=50) +``` + + +--- +### `get_execution_price_detailed` + +Calculate detailed execution price information including partial fill data. + + +**Signature:** + +```python +def get_execution_price_detailed(order_book: OrderBook, side: Literal["buy", "sell"], amount: float) -> ExecutionPriceResult: +``` + +**Parameters:** + +- `order_book` ([OrderBook](#orderbook)): The current order book +- `side` (Literal["buy", "sell"]): 'buy' or 'sell' +- `amount` (float): Number of contracts to simulate + +**Returns:** [ExecutionPriceResult](#executionpriceresult) - Detailed execution result with price, filled amount, and fill status + +**Example:** + +```python +order_book = exchange.fetch_order_book(outcome_id="abc123") +exchange.get_execution_price_detailed(order_book=order_book, side="buy", amount=50) +``` + + +--- +### `filter_markets` + +Filter a list of markets by criteria. + + + +**Signature:** + +```python +def filter_markets(markets: List[UnifiedMarket], criteria: Union[str, MarketFilterCriteria, MarketFilterFunction]) -> List[UnifiedMarket]: +``` + +**Parameters:** + +- `markets` (List[[UnifiedMarket](#unifiedmarket)]): Array of markets to filter +- `criteria` (Union[str, [MarketFilterCriteria](#marketfiltercriteria), MarketFilterFunction]): Filter criteria: string (text search), object (structured), or function (predicate) + +**Returns:** List[[UnifiedMarket](#unifiedmarket)] - Filtered array of markets + +**Example:** + +```python +markets = exchange.fetch_markets(query="Trump") +exchange.filter_markets(markets=markets, criteria="Trump") +``` + + +--- +### `filter_events` + +Filter a list of events by criteria. + + + +**Signature:** + +```python +def filter_events(events: List[UnifiedEvent], criteria: Union[str, EventFilterCriteria, EventFilterFunction]) -> List[UnifiedEvent]: +``` + +**Parameters:** + +- `events` (List[[UnifiedEvent](#unifiedevent)]): Array of events to filter +- `criteria` (Union[str, [EventFilterCriteria](#eventfiltercriteria), EventFilterFunction]): Filter criteria: string (text search), object (structured), or function (predicate) + +**Returns:** List[[UnifiedEvent](#unifiedevent)] - Filtered array of events + +**Example:** + +```python +events = exchange.fetch_events(query="Trump") +exchange.filter_events(events=events, criteria="Trump") +``` + + +--- +### `watch_order_book` + +Watch order book updates in real-time via WebSocket. + + + +**Signature:** + +```python +def watch_order_book(outcome_id: str, limit: Optional[float] = None, params: Dict[str, Any]) -> OrderBook: +``` + +**Parameters:** + +- `outcome_id` (str): The Outcome ID to watch +- `limit` (float) - **Optional**: Optional limit for orderbook depth +- `params` (Dict[str, Any]): Optional exchange-specific parameters + +**Returns:** [OrderBook](#orderbook) - Promise that resolves with the current orderbook state + +**Example:** + +```python +exchange.watch_order_book(outcome_id="abc123", limit=10, params={}) +``` + + +--- +### `watch_order_books` + +Watch multiple order books simultaneously via WebSocket. + + + +**Signature:** + +```python +def watch_order_books(outcome_ids: List[str], limit: Optional[float] = None, params: Dict[str, Any]) -> Dict[str, OrderBook]: +``` + +**Parameters:** + +- `outcome_ids` (List[str]): Array of Outcome IDs to watch +- `limit` (float) - **Optional**: Optional limit for orderbook depth +- `params` (Dict[str, Any]): Optional exchange-specific parameters + +**Returns:** Dict[str, [OrderBook](#orderbook)] - Promise that resolves with order books keyed by ID + +**Example:** + +```python +exchange.watch_order_books(outcome_ids=["12345"], limit=10, params={}) +``` + + +--- +### `unwatch_order_book` + +Unsubscribe from a previously watched order book stream. + + +**Signature:** + +```python +def unwatch_order_book(outcome_id: str) -> None: +``` + +**Parameters:** + +- `outcome_id` (str): The Outcome ID to stop watching + +**Returns:** None - Result + +**Example:** + +```python +exchange.unwatch_order_book(outcome_id="abc123") +``` + + +--- +### `watch_trades` + +Watch trade executions in real-time via WebSocket. + + + +**Signature:** + +```python +def watch_trades(outcome_id: str, address: Optional[str] = None, since: Optional[float] = None, limit: Optional[float] = None) -> List[Trade]: +``` + +**Parameters:** + +- `outcome_id` (str): The Outcome ID to watch +- `address` (str) - **Optional**: Public wallet address +- `since` (float) - **Optional**: Optional timestamp to filter trades from +- `limit` (float) - **Optional**: Optional limit for number of trades + +**Returns:** List[[Trade](#trade)] - Promise that resolves with recent trades + +**Example:** + +```python +exchange.watch_trades(outcome_id="abc123", address="0xabc...", since=1710000000000, limit=50) +``` + + +--- +### `watch_address` + +Stream activity for a public wallet address + + + +**Signature:** + +```python +def watch_address(address: str, types: Optional[List[SubscriptionOption]] = None) -> SubscribedAddressSnapshot: +``` + +**Parameters:** + +- `address` (str): Public wallet address to watch +- `types` (List[SubscriptionOption]) - **Optional**: Subset of activity to watch (default: all types) + +**Returns:** SubscribedAddressSnapshot - Promise that resolves with the latest SubscribedAddressSnapshot snapshot + +**Example:** + +```python +exchange.watch_address(address="0xabc...", types=["trades"]) +``` + + +--- +### `unwatch_address` + +Stop watching a previously registered wallet address and release its resource updates. + + +**Signature:** + +```python +def unwatch_address(address: str) -> None: +``` + +**Parameters:** + +- `address` (str): Public wallet address to stop watching + +**Returns:** None - Result + +**Example:** + +```python +exchange.unwatch_address(address="0xabc...") +``` + + +--- +### `close` + +Close all WebSocket connections and clean up resources. + + + +**Signature:** + +```python +def close() -> None: +``` + +**Parameters:** + +- None + +**Returns:** None - Result + +**Example:** + +```python +exchange.close() +``` + + +--- +### `fetch_market_matches` + +Find the same or related market on other venues. Two modes: + + + +**Signature:** + +```python +def fetch_market_matches(params: Optional[FetchMarketMatchesParams] = None) -> List[MatchResult]: +``` + +**Parameters:** + +- `params` ([FetchMarketMatchesParams](#fetchmarketmatchesparams)) - **Optional**: Match filter parameters + +**Returns:** List[[MatchResult](#matchresult)] - Array of matched markets with relation and confidence + +**Example:** + +```python +exchange.fetch_market_matches() +``` + + +--- +### `fetch_matches` + +fetchMatches + + +**Signature:** + +```python +def fetch_matches(params: FetchMatchesParams) -> List[MatchResult]: +``` + +**Parameters:** + +- `params` (FetchMatchesParams): params + +**Returns:** List[[MatchResult](#matchresult)] - Result + +**Example:** + +```python +exchange.fetch_matches() +``` + + +--- +### `fetch_event_matches` + +Find the same or related event on other venues. Two modes: + + + +**Signature:** + +```python +def fetch_event_matches(params: Optional[FetchEventMatchesParams] = None) -> List[EventMatchResult]: +``` + +**Parameters:** + +- `params` ([FetchEventMatchesParams](#fetcheventmatchesparams)) - **Optional**: Event match filter parameters + +**Returns:** List[[EventMatchResult](#eventmatchresult)] - Array of matched events with market-level match details + +**Example:** + +```python +exchange.fetch_event_matches() +``` + + +--- +### `compare_market_prices` + +Compare live prices for the same market across venues. Finds identity matches and returns side-by-side best bid/ask prices so you can spot price differences at a glance. + + +**Signature:** + +```python +def compare_market_prices(params: CompareMarketPricesParams) -> List[PriceComparison]: +``` + +**Parameters:** + +- `params` (CompareMarketPricesParams): Match filter parameters (uses relation: 'identity' internally) + +**Returns:** List[[PriceComparison](#pricecomparison)] - Array of price comparisons across venues + +**Example:** + +```python +exchange.compare_market_prices() +``` + + +--- +### `fetch_related_markets` + +Find related markets across venues. Discovers subset/superset market relationships + + + +**Signature:** + +```python +def fetch_related_markets(params: FetchMatchesParams) -> List[PriceComparison]: +``` + +**Parameters:** + +- `params` (FetchMatchesParams): Match filter parameters + +**Returns:** List[[PriceComparison](#pricecomparison)] - Array of subset/superset matches with live prices + +**Example:** + +```python +exchange.fetch_related_markets() +``` + + +--- +### `fetch_matched_markets` + +fetchMatchedMarkets + + +**Signature:** + +```python +def fetch_matched_markets(params: Optional[FetchMatchedMarketsParams] = None) -> List[MatchedMarketPair]: +``` + +**Parameters:** + +- `params` ([FetchMatchedMarketsParams](#fetchmatchedmarketsparams)) - **Optional**: params + +**Returns:** List[[MatchedMarketPair](#matchedmarketpair)] - Result + +**Example:** + +```python +exchange.fetch_matched_markets() +``` + + +--- +### `fetch_matched_prices` + +fetchMatchedPrices + + +**Signature:** + +```python +def fetch_matched_prices(params: Optional[FetchMatchedPricesParams] = None) -> List[MatchedPricePair]: +``` + +**Parameters:** + +- `params` (FetchMatchedPricesParams) - **Optional**: Price comparison parameters (minDifference, category, limit) + +**Returns:** List[MatchedPricePair] - Array of matched market pairs with prices from each venue + +**Example:** + +```python +exchange.fetch_matched_prices() +``` + + +--- +### `fetch_hedges` + +fetchHedges + + +**Signature:** + +```python +def fetch_hedges(params: FetchMatchesParams) -> List[PriceComparison]: +``` + +**Parameters:** + +- `params` (FetchMatchesParams): Match filter parameters + +**Returns:** List[[PriceComparison](#pricecomparison)] - Array of subset/superset matches with live prices + +**Example:** + +```python +exchange.fetch_hedges() +``` + + +--- +### `fetch_arbitrage` + +fetchArbitrage + + +**Signature:** + +```python +def fetch_arbitrage(params: Optional[FetchArbitrageParams] = None) -> List[ArbitrageOpportunity]: +``` + +**Parameters:** + +- `params` ([FetchArbitrageParams](#fetcharbitrageparams)) - **Optional**: Arbitrage scan parameters (minSpread, category, limit) + +**Returns:** List[[ArbitrageOpportunity](#arbitrageopportunity)] - Array of arbitrage opportunities sorted by spread + +**Example:** + +```python +exchange.fetch_arbitrage() +``` + + +--- +### `watch_prices` + +Watch AMM price updates for a market address (Limitless only). + + +> **Note**: This method is only available on **limitless** exchange. + + +**Signature:** + +```python +def watch_prices(market_address: str, callback: Callable[[Any], None]) -> None: +``` + +**Parameters:** + +- `market_address` (str): Market contract address +- `callback` (Callable[[Any], None]): Callback for price updates + +**Returns:** None - Result + +**Example:** + +```python +def handle_price_update(data): + pass +exchange.watch_prices(market_address="0xabc...", callback=handle_price_update) +``` + + +--- +### `watch_user_positions` + +Watch user positions in real-time (Limitless only). + + +> **Note**: This method is only available on **limitless** exchange. + + +**Signature:** + +```python +def watch_user_positions(callback: Callable[[Any], None]) -> None: +``` + +**Parameters:** + +- `callback` (Callable[[Any], None]): Callback for position updates + +**Returns:** None - Result + +**Example:** + +```python +def handle_position_update(data): + pass +exchange.watch_user_positions(callback=handle_position_update) +``` + + +--- +### `watch_user_transactions` + +Watch user transactions in real-time (Limitless only). + + +> **Note**: This method is only available on **limitless** exchange. + + +**Signature:** + +```python +def watch_user_transactions(callback: Callable[[Any], None]) -> None: +``` + +**Parameters:** + +- `callback` (Callable[[Any], None]): Callback for transaction updates + +**Returns:** None - Result + +**Example:** + +```python +def handle_transaction_update(data): + pass +exchange.watch_user_transactions(callback=handle_transaction_update) +``` + + +--- +### `init_auth` + +Initialize L2 API credentials for implicit API signing. + + +> **Note**: This method is only available on **polymarket** exchange. + + +**Signature:** + +```python +def init_auth() -> None: +``` + +**Parameters:** + +- None + +**Returns:** None - Result + +**Example:** + +```python +exchange.init_auth() +``` + + +--- +### `pre_warm_market` + +Pre-warm the SDK's internal caches for a market outcome. + + +> **Note**: This method is only available on **polymarket** exchange. + + +**Signature:** + +```python +def pre_warm_market(outcome_id: str) -> None: +``` + +**Parameters:** + +- `outcome_id` (str): The CLOB Token ID for the outcome (use `outcome.outcomeId`) + +**Returns:** None - Result + +**Example:** + +```python +exchange.pre_warm_market(outcome_id="abc123") +``` + + +--- +### `get_event_by_id` + +Fetch a single event by its numeric ID (Probable only). + > **Note**: This method is only available on **probable** exchange. - - -**Signature:** - -```python -def get_event_by_id(id: str) -> Optional[UnifiedEvent]: -``` - -**Parameters:** - -- `id` (str): The numeric event ID - -**Returns:** Optional[[UnifiedEvent](#unifiedevent)] - The UnifiedEvent, or null if not found - -**Example:** - -```python -exchange.get_event_by_id(id="12345") -``` - - ---- -### `get_event_by_slug` - -Fetch a single event by its URL slug (Probable only). - + + +**Signature:** + +```python +def get_event_by_id(id: str) -> Optional[UnifiedEvent]: +``` + +**Parameters:** + +- `id` (str): The numeric event ID + +**Returns:** Optional[[UnifiedEvent](#unifiedevent)] - The UnifiedEvent, or null if not found + +**Example:** + +```python +exchange.get_event_by_id(id="12345") +``` + + +--- +### `get_event_by_slug` + +Fetch a single event by its URL slug (Probable only). + > **Note**: This method is only available on **probable** exchange. - - -**Signature:** - -```python -def get_event_by_slug(slug: str) -> Optional[UnifiedEvent]: -``` - -**Parameters:** - -- `slug` (str): The event's URL slug (e.g. `"trump-2024-election"`) - -**Returns:** Optional[[UnifiedEvent](#unifiedevent)] - The UnifiedEvent, or null if not found - -**Example:** - -```python -exchange.get_event_by_slug(slug="will-trump-win") -``` - - ---- -### `watch_all_order_books` - -Stream all orderbook updates across venues via the hosted WebSocket API. - - -**Signature:** - -```python -def watch_all_order_books(venues: Optional[List[str]] = None) -> FirehoseEvent: -``` - -**Parameters:** - -- `venues` (List[str]) - **Optional**: Optional venue filter. Defaults to this exchange's venue - -**Returns:** FirehoseEvent - Next event with source, symbol, and orderbook - -**Example:** - -```python -exchange.watch_all_order_books(venues=["polymarket", "limitless"]) -``` - - ---- -### `firehose` - -Stream all orderbook updates across venues. - - -**Signature:** - -```python -def firehose(venues: Optional[List[str]] = None) -> FirehoseEvent: -``` - -**Parameters:** - -- `venues` (List[str]) - **Optional**: Optional venue filter - -**Returns:** FirehoseEvent - Next event with source, symbol, and orderbook - -**Example:** - -```python -exchange.firehose(venues=["polymarket", "limitless"]) -``` - - ---- - -## Complete Trading Workflow - -```python + + +**Signature:** + +```python +def get_event_by_slug(slug: str) -> Optional[UnifiedEvent]: +``` + +**Parameters:** + +- `slug` (str): The event's URL slug (e.g. `"trump-2024-election"`) + +**Returns:** Optional[[UnifiedEvent](#unifiedevent)] - The UnifiedEvent, or null if not found + +**Example:** + +```python +exchange.get_event_by_slug(slug="will-trump-win") +``` + + +--- +### `watch_all_order_books` + +Stream all orderbook updates across venues via the hosted WebSocket API. + + + +**Signature:** + +```python +def watch_all_order_books(venues: Optional[List[str]] = None) -> FirehoseEvent: +``` + +**Parameters:** + +- `venues` (List[str]) - **Optional**: Optional venue filter. Defaults to this exchange's venue + +**Returns:** FirehoseEvent - Next event with source, symbol, and orderbook + +**Example:** + +```python +exchange.watch_all_order_books(venues=["polymarket", "limitless"]) +``` + + +--- +### `firehose` + +Stream all orderbook updates across venues. + + +**Signature:** + +```python +def firehose(venues: Optional[List[str]] = None) -> FirehoseEvent: +``` + +**Parameters:** + +- `venues` (List[str]) - **Optional**: Optional venue filter + +**Returns:** FirehoseEvent - Next event with source, symbol, and orderbook + +**Example:** + +```python +exchange.firehose(venues=["polymarket", "limitless"]) +``` + + +--- + +## Complete Trading Workflow + +```python import pmxt import os -exchange = pmxt.Polymarket( - private_key=os.getenv('POLYMARKET_PRIVATE_KEY') -) +exchange = pmxt.Polymarket( + private_key=os.getenv('POLYMARKET_PRIVATE_KEY') +) + +# 1. Check balance +balances = exchange.fetch_balance() +if balances: + balance = balances[0] + print(f'Available: ${balance.available}') + +# 2. Search for a market +markets = exchange.fetch_markets(query='Trump') +market = markets[0] +outcome = market.yes + +print(f'{market.title}') +print(f'Price: {outcome.price * 100:.1f}%') + +# 3. Place a limit order +order = exchange.create_order( + market_id=market.market_id, + outcome_id=outcome.outcome_id, + side='buy', + type='limit', + amount=10, + price=0.50 +) + +print(f'Order placed: {order.id}') + +# 4. Check order status +updated_order = exchange.fetch_order(order.id) +print(f'Status: {updated_order.status}') +print(f'Filled: {updated_order.filled}/{updated_order.amount}') + +# 5. Cancel if needed +if updated_order.status == 'open': + exchange.cancel_order(order.id) + print('Order cancelled') + +# 6. Check positions +positions = exchange.fetch_positions() +for pos in positions: + pnl_sign = '+' if pos.unrealized_pnl > 0 else '' + print(f'{pos.outcome_label}: {pnl_sign}${pos.unrealized_pnl:.2f}') +``` + +## Data Models + +### `ExchangeOptions` + +Constructor-level options for venue clients (Polymarket, Kalshi, Opinion, etc.). +Hosted mode is the default when pmxtApiKey is set; otherwise the SDK runs against +a local sidecar with venue credentials. + +```python +@dataclass +class ExchangeOptions: +pmxt_api_key: str # PMXT customer API key. When set, the SDK routes to api.pmxt.dev (catalog) and trade.pmxt.dev (trading). Get one at pmxt.dev/dashboard. +wallet_address: str # EVM wallet address for hosted reads/writes. Required for endpoints that operate on a wallet (balances, positions, trades, open orders). +signer: object # Optional pre-built signer for hosted writes. If absent and privateKey is set, the SDK auto-wraps privateKey into a signer. +private_key: str # Private key. In hosted mode, used to derive an EIP-712 signer for writes (wraps into EthAccountSigner/EthersSigner). In self-hosted mode, used as the venue credential directly. +base_url: str # Explicit base URL override. When unset, the SDK uses api.pmxt.dev when pmxtApiKey is set, or the local sidecar otherwise. +api_key: str # Venue-side API key (e.g. Polymarket CLOB key). Only relevant for self-hosted mode. +auto_start_server: bool # Auto-start the local sidecar when running self-hosted. Defaults to true when no pmxtApiKey is set, false when hosted. +``` + +--- +### `UnifiedMarket` + + + +```python +@dataclass +class UnifiedMarket: +market_id: str # The unique identifier for this market +event_id: str # Link to parent event +title: str # The market title (e.g., "Will BTC close above $100k on Dec 31?"). +description: str # Long-form market description or resolution criteria. +slug: str # URL-friendly slug for the market. +outcomes: List[MarketOutcome] # The possible outcomes for this market. +resolution_date: str # When the market is scheduled to resolve. Optional because some venues do not publish a cutoff for every market (e.g. Opinion categorical children) — emit `undefined` rather than coercing to epoch. +volume24h: float # Trading volume over the past 24 hours (USD). +volume: float # Total / Lifetime volume +liquidity: float # Current market liquidity (USD). +open_interest: float # Total value of outstanding contracts (USD). +url: str # Canonical URL to view the market on the venue. +image: str # Optional image URL for the market. +category: str # Optional category label. Venue-defined — common values include "Sports", "Politics", "Crypto", "Economics", "Science", "Culture". Polymarket uses finer-grained categories like "Bitcoin", "Soccer", "Economic Policy"; Kalshi uses broader ones like "Sports" or "Mentions". +tags: List[str] # Optional list of tags. More granular than category — e.g. ["Crypto", "Crypto Prices", "Bitcoin"] or ["Politics", "Elections", "Trump"]. Tags vary by venue: Polymarket markets carry several, Kalshi typically one. +tick_size: float # Minimum price increment (e.g., 0.01, 0.001) +status: str # Venue-native lifecycle status (e.g. 'active', 'closed', 'archived'). +contract_address: str # On-chain contract / condition identifier where applicable (Polymarket conditionId, etc.). +source_metadata: object # Raw venue-specific metadata not captured by first-class fields (e.g. Kalshi series_ticker / series_title from the parent event, Polymarket series). Passed through verbatim so downstream consumers can recover anything the unified shape omits. Each venue populates what it has. +source_exchange: str # The exchange/venue this market originates from (e.g. 'polymarket', 'kalshi'). Populated by the Router. +yes: Any # Convenience accessor for the YES outcome on a binary market. +no: Any # Convenience accessor for the NO outcome on a binary market. +up: Any # Convenience accessor for the UP outcome on a binary market. +down: Any # Convenience accessor for the DOWN outcome on a binary market. +``` + +--- +### `MarketOutcome` + + + +```python +@dataclass +class MarketOutcome: +outcome_id: str # Outcome ID for trading operations (CLOB Token ID for Polymarket, Market Ticker for Kalshi) +market_id: str # The market this outcome belongs to (set automatically when outcomes are built) +label: str # Human-readable outcome label (e.g., "Yes", "No", candidate name). +price: float # Probability between 0.0 and 1.0. +price_change24h: float # Change in price over the past 24 hours, as an absolute probability delta. +metadata: object # Exchange-specific metadata (e.g., clobTokenId for Polymarket) +``` + +--- +### `UnifiedEvent` + +A grouped collection of related markets (e.g., "Who will be Fed Chair?" contains multiple candidate markets). + +```python +@dataclass +class UnifiedEvent: +id: str # The unique identifier for this event. +title: str # The event title (e.g., "Who will be Fed Chair?"). +description: str # Long-form event description. +slug: str # URL-friendly slug for the event. +markets: List[UnifiedMarket] # Markets grouped under this event. +volume24h: float # Trading volume over the past 24 hours (USD). +volume: float # Total / Lifetime volume (sum across markets; undefined if no market provides it) +url: str # Canonical URL to view the event on the venue. +image: str # Optional image URL for the event. +category: str # Optional category label. Venue-defined — common values include "Sports", "Politics", "Crypto", "Economics", "Science", "Culture". Polymarket uses finer-grained categories like "Bitcoin", "Soccer", "Economic Policy"; Kalshi uses broader ones like "Sports" or "Mentions". +tags: List[str] # Optional list of tags. More granular than category — e.g. ["Sports", "FIFA World Cup", "2026 FIFA World Cup"] or ["Politics", "Geopolitics", "Middle East"]. Tags vary by venue: Polymarket markets carry several, Kalshi typically one. +source_metadata: object # Raw venue-specific metadata not captured by first-class fields (e.g. Kalshi series_ticker / series_title, Polymarket series). Passed through verbatim so downstream consumers can recover anything the unified shape omits. Each venue populates what it has. +source_exchange: str # The exchange/venue this event originates from (e.g. 'polymarket', 'kalshi'). Populated by the Router. +``` + +--- +### `UnifiedSeries` + +A recurring grouping of events on a venue — the fourth tier above Event -> Market -> Outcome. Examples: Kalshi `KXATPMATCH` (every ATP tennis match), Polymarket `wta` (every WTA match), Opinion's daily `collection`. Series only exists where the venue exposes a recurring-event concept; venues without one return an empty array from `fetchSeries`. + +```python +@dataclass +class UnifiedSeries: +id: str # Stable venue-native series identifier (e.g. "KXATPMATCH" on Kalshi, "atp" on Polymarket Gamma, numeric Gamma id). +ticker: str # Venue-native ticker, when distinct from `id`. +slug: str # Venue-native slug. +title: str # Human-readable series title (e.g. "ATP Match Winner", "WTA"). +description: str # Long-form series description. +recurrence: str # Recurrence cadence the venue reports ('daily', 'weekly', 'annual', ...). +events: List[UnifiedEvent] # Child events. Populated when fetched by id; the list form usually omits this to keep payloads small. +url: str # Canonical venue URL for the series. +image: str # Venue-hosted image. +source_exchange: str # The exchange this series originates from. Populated by the Router. +source_metadata: object # Raw venue-specific fields not promoted to first-class columns. +``` + +--- +### `PriceCandle` + + + +```python +@dataclass +class PriceCandle: +timestamp: float # Unix timestamp in milliseconds marking the start of the candle. +open: float # Opening price for the interval (probability between 0.0 and 1.0). +high: float # Highest price during the interval (probability between 0.0 and 1.0). +low: float # Lowest price during the interval (probability between 0.0 and 1.0). +close: float # Closing price for the interval (probability between 0.0 and 1.0). +volume: float # Trading volume during the interval. +``` + +--- +### `OrderBook` + + + +```python +@dataclass +class OrderBook: +bids: List[OrderLevel] # Order book bid levels, sorted by price descending. +asks: List[OrderLevel] # Order book ask levels, sorted by price ascending. +timestamp: float # Unix timestamp in milliseconds when the snapshot was taken. +datetime: str # ISO 8601 datetime string of the snapshot (CCXT-compatible). +is_neg_risk: bool # Whether the venue marks this snapshot as a negative-risk market. +last_trade_price: float # Last traded price from venues that include it with the book snapshot. +source_metadata: object # Venue-specific metadata preserved from the raw order book snapshot. +``` + +--- +### `OrderLevel` + + + +```python +@dataclass +class OrderLevel: +price: float # 0.0 to 1.0 (probability) +size: float # contracts/shares +order_count: float # +``` + +--- +### `Trade` + + + +```python +@dataclass +class Trade: +id: str # The unique identifier for this trade. +timestamp: float # Unix timestamp in milliseconds when the trade executed. +price: float # Probability between 0.0 and 1.0. +amount: float # Size of the trade in contracts/shares. +side: str # Trade side from the taker's perspective. +outcome_id: str # The outcome this trade is for (if known). +``` + +--- +### `UserTrade` + + + +```python +@dataclass +class UserTrade: +id: str # The unique identifier for this trade. +timestamp: float # Unix timestamp in milliseconds when the trade executed. +price: float # Probability between 0.0 and 1.0. +amount: float # Size of the trade in contracts/shares. +side: str # Trade side from the taker's perspective. +outcome_id: str # The outcome this trade is for (if known). +order_id: str # The order that produced this trade, if known. +market_id: str # The market this trade belongs to, when the venue exposes it (e.g. derivable from the fill's coin/asset). +fee: float # Trading fee paid by the user for this fill, when the venue exposes it. +tx_hash: str # Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. +chain: str # Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. +block_number: float # Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. +``` + +--- +### `Order` + + + +```python +@dataclass +class Order: +id: str # The exchange-assigned order identifier. +market_id: str # The market this order was placed on. +outcome_id: str # The outcome this order was placed on. +side: str # Order side: buy or sell. +type: str # Order type: market (execute immediately) or limit (resting at a price). +price: float # For limit orders +amount: float # Size in contracts/shares +status: str # Lifecycle status of the order. +filled: float # Amount filled (USDC cost for buys, shares for sells) +filled_shares: float # Amount filled in shares/contracts (if different from USDC-denominated `filled`). +remaining: float # Amount remaining +timestamp: float # Unix timestamp in milliseconds when the order was created. +fee: float # Fee paid for this order, if known. +fee_rate_bps: float # Fee rate in basis points applied to this order (e.g. 100 = 1%). +tx_hash: str # Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. +chain: str # Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. +block_number: float # Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. +``` + +--- +### `Position` + +A current position in a market. In hosted mode, `outcomeLabel`, `entryPrice`, `currentPrice` and `unrealizedPnL` may be null when the server cannot derive them (e.g. `with_mtm=false` or no fill history). Venue-direct callers continue to populate every field. + +```python +@dataclass +class Position: +market_id: str # The market this position is held in. +outcome_id: str # The outcome this position is held in. +outcome_label: str # Human-readable label for the outcome held. Optional in hosted mode. +size: float # Positive for long, negative for short +entry_price: float # Average entry price for the position (probability between 0.0 and 1.0). Optional in hosted mode when no fill history is available. +current_price: float # Current mark price for the position (probability between 0.0 and 1.0). Optional in hosted mode when mark-to-market data is unavailable. +current_value: float # Current market value of the position (size * currentPrice). Null when currentPrice is unavailable. +unrealized_pnl: float # Unrealized profit or loss at the current price (USD). Optional in hosted mode when mark-to-market data is unavailable. +realized_pnl: float # Realized profit or loss booked so far (USD). +tx_hash: str # Populated in hosted mode after on-chain settlement (from the last fill); null for local-mode and for non-on-chain venues. +chain: str # Populated in hosted mode after on-chain settlement (from the last fill); null for local-mode and for non-on-chain venues. +block_number: float # Populated in hosted mode after on-chain settlement (from the last fill); null for local-mode and for non-on-chain venues. +``` + +--- +### `Balance` + + + +```python +@dataclass +class Balance: +currency: str # e.g., 'USDC' +total: float # Total balance including funds locked in open orders. +available: float # Balance available to trade (excludes locked funds). +locked: float # In open orders +venue: str # Hosted-mode: which venue this balance belongs to in a multi-venue response. Null when the balance is venue-agnostic. +``` + +--- +### `ExecutionPriceResult` + + + +```python +@dataclass +class ExecutionPriceResult: +price: float # +filled_amount: float # +fully_filled: bool # +``` + +--- +### `PaginatedMarketsResult` + +Shape returned by fetchMarketsPaginated + +```python +@dataclass +class PaginatedMarketsResult: +data: List[UnifiedMarket] # The page of unified markets +total: float # Total number of markets in the snapshot +next_cursor: str # Cursor to pass to the next call, or undefined if this is the last page +``` + +--- +### `PaginatedEventsResult` + +Shape returned by fetchEventsPaginated + +```python +@dataclass +class PaginatedEventsResult: +data: List[UnifiedEvent] # The page of unified events +total: float # Total number of events in the snapshot +next_cursor: str # Cursor to pass to the next call, or undefined if this is the last page +``` + +--- +### `BuiltOrder` + + + +```python +@dataclass +class BuiltOrder: +exchange: str # The exchange name this order was built for. +params: Any # The original params used to build this order. +signed_order: object # For CLOB exchanges (Polymarket): the EIP-712 signed order ready to POST to the exchange's order endpoint. +tx: object # For on-chain AMM exchanges: the EVM transaction payload. Reserved for future exchanges; no current exchange populates this. +raw: Any # The raw, exchange-native payload. Always present. +expiry: float # Unix epoch (ms) when this built order expires server-side. Submitting after expiry returns BUILT_ORDER_EXPIRED. +``` + +--- +### `MarketFilterCriteria` + + + +```python +@dataclass +class MarketFilterCriteria: +text: str # +search_in: List[str] # Default: ['title'] +volume24h: object # +volume: object # Filter by total (lifetime) volume range +liquidity: object # Filter by current liquidity range +open_interest: object # Filter by open interest range +resolution_date: object # +category: str # Filter by category. Common values: "Sports", "Politics", "Crypto", "Bitcoin", "Soccer", "Economic Policy" (Polymarket) or "Sports", "Mentions" (Kalshi). +tags: List[str] # Match markets that have ANY of these tags. Examples: ["Crypto", "Crypto Prices"], ["Politics", "Elections"], ["Sports", "FIFA World Cup"]. +price: object # +price_change24h: object # +``` + +--- +### `EventFilterCriteria` + + + +```python +@dataclass +class EventFilterCriteria: +text: str # +search_in: List[str] # Default: ['title'] +category: str # Filter by category. Common values: "Sports", "Politics", "Crypto", "Bitcoin", "Soccer", "Economic Policy" (Polymarket) or "Sports", "Mentions" (Kalshi). +tags: List[str] # Match events that have ANY of these tags. Examples: ["Crypto"], ["Politics", "Geopolitics", "Middle East"], ["Sports", "FIFA World Cup"]. +market_count: object # +total_volume: object # Sum of market volumes +``` + +--- +### `MatchResult` + + + +```python +@dataclass +class MatchResult: +market: UnifiedMarket # +source_market: Any # The source market this was matched against. Present in browse mode (no marketId), absent in lookup mode. +relation: str # +confidence: float # +reasoning: str # +best_bid: float # +best_ask: float # +``` + +--- +### `EventMatchResult` + + + +```python +@dataclass +class EventMatchResult: +event: UnifiedEvent # +market_matches: List[MatchResult] # +``` + +--- +### `PriceComparison` + + + +```python +@dataclass +class PriceComparison: +market: UnifiedMarket # +relation: str # +confidence: float # +reasoning: str # +best_bid: float # +best_ask: float # +venue: str # +``` + +--- +### `ArbitrageOpportunity` + + + +```python +@dataclass +class ArbitrageOpportunity: +market_a: UnifiedMarket # +market_b: UnifiedMarket # +spread: float # +buy_venue: str # +sell_venue: str # +buy_price: float # +sell_price: float # +relation: str # The set-theoretic relation between the two markets (e.g. identity, subset). +confidence: float # Match confidence score (0.0 to 1.0). +``` + +--- +### `MatchedMarketPair` + + + +```python +@dataclass +class MatchedMarketPair: +market_a: UnifiedMarket # +market_b: UnifiedMarket # +price_difference: float # +venue_a: str # +venue_b: str # +price_a: float # +price_b: float # +relation: str # The set-theoretic relation between the two markets (e.g. identity, subset). +confidence: float # Match confidence score (0.0 to 1.0). +reasoning: str # Why the two markets were matched. +``` + +--- +### `ExchangeCredentials` + +Optional authentication credentials for exchange operations. + +```python +@dataclass +class ExchangeCredentials: +api_key: str # +api_secret: str # Standard API secret for HMAC-authenticated exchanges +passphrase: str # Standard API passphrase for HMAC-authenticated exchanges +api_token: str # Metaculus: `Authorization: Token ` for higher rate limits +private_key: str # Required for Polymarket L1 auth +signature_type: Any # 0 = EOA, 1 = Poly Proxy, 2 = Gnosis Safe (Can also use 'eoa', 'polyproxy', 'gnosis_safe') +funder_address: str # The address funding the trades (defaults to signer address) +wallet_address: str # +base_url: str # +``` + +--- +### `FeedTicker` + +CCXT-compatible ticker with last trade price and metadata. + +```python +@dataclass +class FeedTicker: +symbol: str # Trading pair symbol (e.g. BTC/USD) +info: Any # Raw provider-specific data +timestamp: int # Unix timestamp in milliseconds +datetime: str # +high: float # +low: float # +bid: float # +bid_volume: float # +ask: float # +ask_volume: float # +vwap: float # +open: float # +close: float # +last: float # Last trade price +previous_close: float # +change: float # +percentage: float # +average: float # +quote_volume: float # +base_volume: float # +index_price: float # +mark_price: float # +``` + +--- +### `FeedMarket` + +CCXT-compatible market descriptor for a data feed. + +```python +@dataclass +class FeedMarket: +id: str # +symbol: str # +base: str # +quote: str # +active: bool # +type: str # +info: Any # Provider-specific metadata +``` + +--- +### `FeedOracleRound` + +Chainlink oracle price round. + +```python +@dataclass +class FeedOracleRound: +feed: str # Price feed pair (e.g. BTC/USD) +round_id: str # +answer: float # Oracle price +started_at: int # +updated_at: int # +answered_inround: str # +decimals: int # +description: str # +``` + +--- + +## Filter Parameters + +### `BaseRequest` + +Base request structure with optional credentials + +```python +@dataclass +class BaseRequest: +credentials: ExchangeCredentials # +``` + +--- +### `MarketFilterParams` + + + +```python +@dataclass +class MarketFilterParams: +limit: float # Maximum number of results to return +offset: float # Pagination offset — number of results to skip +sort: str # Sort order for results +status: str # Filter by market status (default: 'active', 'inactive' and 'closed' are interchangeable) +search_in: str # Where to search (default: 'title') +query: str # For keyword search +slug: str # For slug/ticker lookup +market_id: str # Direct lookup by market ID +outcome_id: str # Reverse lookup -- find market containing this outcome +event_id: str # Find markets belonging to an event +page: float # For pagination (used by Limitless) +similarity_threshold: float # For semantic search (used by Limitless) +source_exchange: str # Filter by source venue (e.g. 'polymarket', 'kalshi', 'myriad'). `exchange` is an alias. +exchange: str # Alias for `sourceExchange`. +``` + +--- +### `EventFetchParams` + + + +```python +@dataclass +class EventFetchParams: +query: str # For keyword search +limit: float # Maximum number of results to return +cursor: str # Opaque venue pagination cursor, where supported. +offset: float # Pagination offset — number of results to skip +sort: str # Sort order for results +status: str # Filter by event status (default: 'active', 'inactive' and 'closed' are interchangeable) +search_in: str # Where to search (default: 'title') +event_id: str # Direct lookup by event ID +slug: str # Lookup by event slug +series: str # Filter events by their parent series. Accepts the venue-native series id / ticker / slug (e.g. Kalshi `"KXATPMATCH"`, Polymarket `"wta"`). Passed through to the vendor where supported, otherwise applied to `sourceMetadata` after fetch. +filter: Any # Optional client-side filter applied after fetching +category: str # Filter by category. Each event belongs to a venue-assigned category such as "Sports", "Politics", "Crypto", "Bitcoin", "Soccer", "Economic Policy" (Polymarket) or "Sports", "Mentions" (Kalshi). +tags: List[str] # Filter by tags. Returns events matching ANY of the provided tags. Tags are more specific than categories -- for example a "Politics" event might carry tags ["Politics", "Geopolitics", "Middle East", "Iran"]. Common tags include "Crypto", "Elections", "Fed Rates", "FIFA World Cup", "Trump". +source_exchange: str # Filter by source venue (e.g. 'polymarket', 'kalshi', 'myriad'). `exchange` is an alias. +exchange: str # Alias for `sourceExchange`. +``` + +--- +### `HistoryFilterParams` + +Deprecated - use OHLCVParams or TradesParams instead. Resolution is optional for backward compatibility. + +```python +@dataclass +class HistoryFilterParams: +resolution: str # Optional for backward compatibility +start: str # Start of the time range +end: str # End of the time range +limit: float # Maximum number of results to return +``` + +--- +### `OHLCVParams` + + + +```python +@dataclass +class OHLCVParams: +resolution: str # Required for candle aggregation +start: str # Start of the time range +end: str # End of the time range +limit: float # Maximum number of results to return +``` + +--- +### `FetchOrderBookParams` + + + +```python +@dataclass +class FetchOrderBookParams: +side: str # Outcome side: 'yes' or 'no'. Required for exchanges like Limitless where the API returns a single orderbook per market. +outcome: str # Outcome alias: 'yes' or 'no', or an outcome token ID. When set, the first argument is treated as a market ID and this value selects which outcome's order book to fetch. Accepts the literal strings 'yes'/'no' (resolved via a market lookup) or a raw outcome token ID. +since: float # Unix timestamp (ms) — fetch a historical snapshot at or before this time, or the start of a range when combined with `until` (hosted API only). +until: float # Unix timestamp (ms) — end of a historical range. When combined with `since`, returns an array of reconstructed L2 OrderBook snapshots between `since` and `until` (hosted API only). +``` + +--- +### `TradesParams` + + + +```python +@dataclass +class TradesParams: +start: str # Start of the time range +end: str # End of the time range +limit: float # Maximum number of results to return (max {@link MAX_TRADES_LIMIT}) +``` + +--- +### `CreateOrderParams` + + + +```python +@dataclass +class CreateOrderParams: +market_id: str # The market to trade on. +outcome_id: str # The outcome to trade. +side: str # Order side: buy or sell. +type: str # Order type: market (execute immediately) or limit (resting at a price). +amount: float # Size of the order in contracts/shares. +price: float # Required for limit orders +denom: str # Hosted mode: amount unit. +slippage_pct: float # Hosted mode: maximum market-order slippage percentage. +fee: float # Optional fee rate (e.g., 1000 for 0.1%) +tick_size: float # Optional override for Limitless/Polymarket +neg_risk: bool # Optional override to skip neg-risk lookup (Polymarket) +on_behalf_of: float # Limitless delegated signing: profile ID to trade on behalf of +``` + +--- +### `MyTradesParams` + + + +```python +@dataclass +class MyTradesParams: +outcome_id: str # filter to specific outcome/ticker +market_id: str # filter to specific market +since: str # Only return records after this date +until: str # Only return records before this date +limit: float # Maximum number of results to return +cursor: str # for Kalshi cursor pagination +``` + +--- +### `OrderHistoryParams` + + + +```python +@dataclass +class OrderHistoryParams: +market_id: str # required for Limitless (slug) +since: str # Only return records after this date +until: str # Only return records before this date +limit: float # Maximum number of results to return +cursor: str # Opaque pagination cursor from a previous response +``` + +--- +### `FetchMarketMatchesParams` + + + +```python +@dataclass +class FetchMarketMatchesParams: +query: str # Keyword search across matched market titles. +category: str # Filter matches by category. +market: Any # Pass a UnifiedMarket directly instead of marketId/slug/url. +market_id: str # Lookup a specific market by ID. Omit for browse mode. +slug: str # +url: str # +relation: str # +min_confidence: float # +limit: float # +include_prices: bool # +min_difference: float # Minimum price difference between venues. Browse mode only. +sort: str # Sort order. Browse mode only. +``` + +--- +### `FetchEventMatchesParams` + + + +```python +@dataclass +class FetchEventMatchesParams: +query: str # Keyword search across matched event titles. +category: str # Filter matches by category. +event: Any # Pass a UnifiedEvent directly instead of eventId/slug. +event_id: str # Lookup a specific event by ID. Omit for browse mode. +slug: str # +relation: str # +min_confidence: float # +limit: float # +include_prices: bool # +``` + +--- +### `FetchArbitrageParams` + + + +```python +@dataclass +class FetchArbitrageParams: +min_spread: float # +category: str # +limit: float # +relations: List[str] # Comma-separated relation types to include (default: 'identity'). +``` + +--- +### `FetchMatchedMarketsParams` + + + +```python +@dataclass +class FetchMatchedMarketsParams: +min_difference: float # +category: str # +limit: float # +relations: List[str] # Comma-separated relation types to include (default: 'identity'). +``` + +--- + +## Low-Level API Reference + +Advanced: call exchange-specific REST endpoints directly via `exchange.call_api(name, params)`. + +```python +# Example +result = exchange.call_api('operationName', {'param': 'value'}) +``` + +### Polymarket + +| `call_api()` name | Method | Path | Summary | Auth | +|-----------------|--------|------|---------|------| +| `getGammaStatus` | `GET` | `/status` | Gamma API Health check | Public | +| `listTeams` | `GET` | `/teams` | List teams | Public | +| `getSportsMetadata` | `GET` | `/sports` | Get sports metadata information | Public | +| `getSportsMarketTypes` | `GET` | `/sports/market-types` | Get valid sports market types | Public | +| `listTags` | `GET` | `/tags` | List tags | Public | +| `getTag` | `GET` | `/tags/{id}` | Get tag by id | Public | +| `getRelatedTagsById` | `GET` | `/tags/{id}/related-tags` | Get related tags (relationships) by tag id | Public | +| `getRelatedTagsBySlug` | `GET` | `/tags/slug/{slug}/related-tags` | Get related tags (relationships) by tag slug | Public | +| `getTagsRelatedToATagById` | `GET` | `/tags/{id}/related-tags/tags` | Get tags related to a tag id | Public | +| `getTagsRelatedToATagBySlug` | `GET` | `/tags/slug/{slug}/related-tags/tags` | Get tags related to a tag slug | Public | +| `listEvents` | `GET` | `/events` | List events | Public | +| `getEvent` | `GET` | `/events/{id}` | Get event by id | Public | +| `getEventTags` | `GET` | `/events/{id}/tags` | Get event tags | Public | +| `getEventBySlug` | `GET` | `/events/slug/{slug}` | Get event by slug | Public | +| `listMarkets` | `GET` | `/markets` | List markets | Public | +| `getMarket` | `GET` | `/markets/{id}` | Get market by id | Public | +| `getMarketTags` | `GET` | `/markets/{id}/tags` | Get market tags by id | Public | +| `getMarketBySlug` | `GET` | `/markets/slug/{slug}` | Get market by slug | Public | +| `listSeries` | `GET` | `/series` | List series | Public | +| `getSeries` | `GET` | `/series/{id}` | Get series by id | Public | +| `listComments` | `GET` | `/comments` | List comments | Public | +| `getCommentsById` | `GET` | `/comments/{id}` | Get comments by comment id | Public | +| `getPublicProfile` | `GET` | `/public-profile` | Get public profile by wallet address | Public | +| `publicSearch` | `GET` | `/public-search` | Search markets, events, and profiles | Public | +| `getBook` | `GET` | `/book` | Get order book summary | Public | +| `postBooks` | `POST` | `/books` | Get multiple order books summaries | Public | +| `getPrice` | `GET` | `/price` | Get market price | Public | +| `getPrices` | `GET` | `/prices` | Get multiple market prices | Public | +| `postPrices` | `POST` | `/prices` | Get multiple market prices by request | Public | +| `getMidpoint` | `GET` | `/midpoint` | Get midpoint price | Public | +| `postSpreads` | `POST` | `/spreads` | Get bid-ask spreads | Public | +| `getPricesHistory` | `GET` | `/prices-history` | Get price history for a traded token | Public | +| `getMarketsByToken` | `GET` | `/markets-by-token/{token_id}` | Get market by token | Public | +| `postAuthApiKey` | `POST` | `/auth/api-key` | Create API Key | Required | +| `getAuthDeriveApiKey` | `GET` | `/auth/derive-api-key` | Derive API Key | Required | +| `postOrder` | `POST` | `/order` | Place Single Order | Required | +| `deleteOrder` | `DELETE` | `/order` | Cancel Single Order | Required | +| `postOrders` | `POST` | `/orders` | Place Multiple Orders (Batch) | Required | +| `deleteOrders` | `DELETE` | `/orders` | Cancel Multiple Orders | Required | +| `deleteCancelAll` | `DELETE` | `/cancel-all` | Cancel All Orders | Required | +| `deleteCancelMarketOrders` | `DELETE` | `/cancel-market-orders` | Cancel Market Orders | Required | +| `postV1Heartbeats` | `POST` | `/v1/heartbeats` | Refresh authenticated session heartbeat | Required | +| `getDataOrder` | `GET` | `/data/order/{id}` | Get Order | Required | +| `getDataOrders` | `GET` | `/data/orders` | Get Active Orders | Required | +| `getDataTrades` | `GET` | `/data/trades` | Get Trades | Required | +| `getOrderScoring` | `GET` | `/order-scoring` | Check Order Reward Scoring | Required | +| `postOrdersScoring` | `POST` | `/orders-scoring` | Check Multiple Orders Scoring | Required | +| `updateBalanceAllowance` | `GET` | `/balance-allowance/update` | Update balance and allowance cache | Required | +| `getGeoblock` | `GET` | `/geoblock` | Check Geoblock Status | Public | +| `getDataApiHealth` | `GET` | `/` | Data API Health check | Public | +| `getPositions` | `GET` | `/positions` | Get current positions for a user | Public | +| `getV1AccountingSnapshot` | `GET` | `/v1/accounting/snapshot` | Download an accounting snapshot (ZIP of CSVs) | Public | +| `getTraded` | `GET` | `/traded` | Get total markets a user has traded | Public | +| `getOi` | `GET` | `/oi` | Get open interest | Public | +| `getLiveVolume` | `GET` | `/live-volume` | Get live volume for an event | Public | +| `getTrades` | `GET` | `/trades` | Get trades for a user or markets | Public | +| `getActivity` | `GET` | `/activity` | Get user activity | Public | +| `getHolders` | `GET` | `/holders` | Get top holders for markets | Public | +| `getValue` | `GET` | `/value` | Get total value of a user's positions | Public | +| `getClosedPositions` | `GET` | `/closed-positions` | Get closed positions for a user | Public | +| `getV1MarketPositions` | `GET` | `/v1/market-positions` | Get positions for a market | Public | +| `getV1Leaderboard` | `GET` | `/v1/leaderboard` | Get trader leaderboard rankings | Public | +| `getV1BuildersLeaderboard` | `GET` | `/v1/builders/leaderboard` | Get aggregated builder leaderboard | Public | + +#### Endpoint Details + +##### `getGammaStatus` + +**GET** `/status` + +Gamma API Health check + + +--- +##### `listTeams` + +**GET** `/teams` + +List teams + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `league` (query, array) +- `name` (query, array) +- `abbreviation` (query, array) + +--- +##### `getSportsMetadata` + +**GET** `/sports` + +Get sports metadata information + + +--- +##### `getSportsMarketTypes` + +**GET** `/sports/market-types` + +Get valid sports market types + + +--- +##### `listTags` + +**GET** `/tags` + +List tags + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `include_template` (query, boolean) +- `is_carousel` (query, boolean) + +--- +##### `getTag` + +**GET** `/tags/{id}` + +Get tag by id + +**Parameters:** +- `` (, string) +- `include_template` (query, boolean) + +--- +##### `getRelatedTagsById` + +**GET** `/tags/{id}/related-tags` + +Get related tags (relationships) by tag id + +**Parameters:** +- `` (, string) +- `omit_empty` (query, boolean) +- `status` (query, string) — enum: `active,closed,all` + +--- +##### `getRelatedTagsBySlug` + +**GET** `/tags/slug/{slug}/related-tags` + +Get related tags (relationships) by tag slug + +**Parameters:** +- `` (, string) +- `omit_empty` (query, boolean) +- `status` (query, string) — enum: `active,closed,all` + +--- +##### `getTagsRelatedToATagById` + +**GET** `/tags/{id}/related-tags/tags` + +Get tags related to a tag id + +**Parameters:** +- `` (, string) +- `omit_empty` (query, boolean) +- `status` (query, string) — enum: `active,closed,all` + +--- +##### `getTagsRelatedToATagBySlug` + +**GET** `/tags/slug/{slug}/related-tags/tags` + +Get tags related to a tag slug + +**Parameters:** +- `` (, string) +- `omit_empty` (query, boolean) +- `status` (query, string) — enum: `active,closed,all` + +--- +##### `listEvents` + +**GET** `/events` + +List events + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `id` (query, array) +- `tag_id` (query, integer) +- `exclude_tag_id` (query, array) +- `slug` (query, array) +- `tag_slug` (query, string) +- `related_tags` (query, boolean) +- `active` (query, boolean) +- `archived` (query, boolean) +- `featured` (query, boolean) +- `cyom` (query, boolean) +- `include_chat` (query, boolean) +- `include_template` (query, boolean) +- `recurrence` (query, string) +- `closed` (query, boolean) +- `liquidity_min` (query, number) +- `liquidity_max` (query, number) +- `volume_min` (query, number) +- `volume_max` (query, number) +- `start_date_min` (query, string) +- `start_date_max` (query, string) +- `end_date_min` (query, string) +- `end_date_max` (query, string) + +--- +##### `getEvent` + +**GET** `/events/{id}` + +Get event by id + +**Parameters:** +- `` (, string) +- `include_chat` (query, boolean) +- `include_template` (query, boolean) + +--- +##### `getEventTags` + +**GET** `/events/{id}/tags` + +Get event tags + +**Parameters:** +- `` (, string) + +--- +##### `getEventBySlug` + +**GET** `/events/slug/{slug}` + +Get event by slug + +**Parameters:** +- `` (, string) +- `include_chat` (query, boolean) +- `include_template` (query, boolean) + +--- +##### `listMarkets` + +**GET** `/markets` + +List markets + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `id` (query, array) +- `slug` (query, array) +- `clob_token_ids` (query, array) +- `condition_ids` (query, array) +- `market_maker_address` (query, array) +- `liquidity_num_min` (query, number) +- `liquidity_num_max` (query, number) +- `volume_num_min` (query, number) +- `volume_num_max` (query, number) +- `start_date_min` (query, string) +- `start_date_max` (query, string) +- `end_date_min` (query, string) +- `end_date_max` (query, string) +- `tag_id` (query, integer) +- `related_tags` (query, boolean) +- `cyom` (query, boolean) +- `uma_resolution_status` (query, string) +- `game_id` (query, string) +- `sports_market_types` (query, array) +- `rewards_min_size` (query, number) +- `question_ids` (query, array) +- `include_tag` (query, boolean) +- `closed` (query, boolean) + +--- +##### `getMarket` + +**GET** `/markets/{id}` + +Get market by id + +**Parameters:** +- `` (, string) +- `include_tag` (query, boolean) + +--- +##### `getMarketTags` + +**GET** `/markets/{id}/tags` + +Get market tags by id + +**Parameters:** +- `` (, string) + +--- +##### `getMarketBySlug` + +**GET** `/markets/slug/{slug}` + +Get market by slug + +**Parameters:** +- `` (, string) +- `include_tag` (query, boolean) + +--- +##### `listSeries` + +**GET** `/series` + +List series + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `slug` (query, array) +- `categories_ids` (query, array) +- `categories_labels` (query, array) +- `closed` (query, boolean) +- `include_chat` (query, boolean) +- `recurrence` (query, string) + +--- +##### `getSeries` + +**GET** `/series/{id}` + +Get series by id + +**Parameters:** +- `` (, string) +- `include_chat` (query, boolean) + +--- +##### `listComments` + +**GET** `/comments` + +List comments + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `parent_entity_type` (query, string) — enum: `Event,Series,market` +- `parent_entity_id` (query, integer) +- `get_positions` (query, boolean) +- `holders_only` (query, boolean) + +--- +##### `getCommentsById` + +**GET** `/comments/{id}` + +Get comments by comment id + +**Parameters:** +- `id` (path, integer) **required** +- `get_positions` (query, boolean) + +--- +##### `getPublicProfile` + +**GET** `/public-profile` + +Get public profile by wallet address + +**Parameters:** +- `address` (query, string) **required** — The wallet address (proxy wallet or user address) + +--- +##### `publicSearch` + +**GET** `/public-search` + +Search markets, events, and profiles + +**Parameters:** +- `q` (query, string) **required** +- `cache` (query, boolean) +- `events_status` (query, string) +- `limit_per_type` (query, integer) +- `page` (query, integer) +- `events_tag` (query, array) +- `keep_closed_markets` (query, integer) +- `sort` (query, string) +- `ascending` (query, boolean) +- `search_tags` (query, boolean) +- `search_profiles` (query, boolean) +- `recurrence` (query, string) +- `exclude_tag_id` (query, array) +- `optimized` (query, boolean) + +--- +##### `getBook` + +**GET** `/book` + +Get order book summary + +**Parameters:** +- `token_id` (query, string) **required** + +--- +##### `postBooks` + +**POST** `/books` + +Get multiple order books summaries + + +--- +##### `getPrice` + +**GET** `/price` + +Get market price + +**Parameters:** +- `token_id` (query, string) **required** +- `side` (query, string) **required** — enum: `BUY,SELL` + +--- +##### `getPrices` + +**GET** `/prices` + +Get multiple market prices + + +--- +##### `postPrices` + +**POST** `/prices` + +Get multiple market prices by request + + +--- +##### `getMidpoint` + +**GET** `/midpoint` + +Get midpoint price + +**Parameters:** +- `token_id` (query, string) **required** + +--- +##### `postSpreads` + +**POST** `/spreads` + +Get bid-ask spreads + + +--- +##### `getPricesHistory` + +**GET** `/prices-history` + +Get price history for a traded token + +**Parameters:** +- `market` (query, string) **required** +- `startTs` (query, number) +- `endTs` (query, number) +- `interval` (query, string) — enum: `1m,1w,1d,6h,1h,max` +- `fidelity` (query, number) + +--- +##### `getMarketsByToken` + +**GET** `/markets-by-token/{token_id}` + +Get market by token + +**Parameters:** +- `token_id` (path, string) **required** + +--- +##### `postAuthApiKey` + +**POST** `/auth/api-key` + +Create API Key *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `getAuthDeriveApiKey` + +**GET** `/auth/derive-api-key` + +Derive API Key *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `postOrder` + +**POST** `/order` + +Place Single Order *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `deleteOrder` + +**DELETE** `/order` + +Cancel Single Order *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `postOrders` + +**POST** `/orders` + +Place Multiple Orders (Batch) *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `deleteOrders` + +**DELETE** `/orders` + +Cancel Multiple Orders *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `deleteCancelAll` + +**DELETE** `/cancel-all` + +Cancel All Orders *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `deleteCancelMarketOrders` + +**DELETE** `/cancel-market-orders` + +Cancel Market Orders *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `postV1Heartbeats` + +**POST** `/v1/heartbeats` + +Refresh authenticated session heartbeat *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `getDataOrder` + +**GET** `/data/order/{id}` + +Get Order *(Auth required)* + +**Parameters:** +- `` (, string) +- `id` (path, string) **required** + +--- +##### `getDataOrders` + +**GET** `/data/orders` + +Get Active Orders *(Auth required)* + +**Parameters:** +- `` (, string) +- `id` (query, string) +- `market` (query, string) +- `asset_id` (query, string) +- `next_cursor` (query, string) — Cursor for keyset pagination + +--- +##### `getDataTrades` + +**GET** `/data/trades` + +Get Trades *(Auth required)* + +**Parameters:** +- `` (, string) +- `id` (query, string) +- `market` (query, string) +- `maker` (query, string) +- `taker` (query, string) +- `before` (query, string) +- `after` (query, string) + +--- +##### `getOrderScoring` + +**GET** `/order-scoring` + +Check Order Reward Scoring *(Auth required)* + +**Parameters:** +- `` (, string) +- `orderId` (query, string) **required** + +--- +##### `postOrdersScoring` + +**POST** `/orders-scoring` + +Check Multiple Orders Scoring *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `updateBalanceAllowance` + +**GET** `/balance-allowance/update` + +Update balance and allowance cache *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `getGeoblock` + +**GET** `/geoblock` + +Check Geoblock Status + + +--- +##### `getDataApiHealth` + +**GET** `/` + +Data API Health check + + +--- +##### `getPositions` + +**GET** `/positions` + +Get current positions for a user + +**Parameters:** +- `user` (query, string) **required** — User address (required) +- `market` (query, array) — Comma-separated list of condition IDs. Mutually exclusive with eventId. +- `eventId` (query, array) — Comma-separated list of event IDs. Mutually exclusive with market. +- `sizeThreshold` (query, number) +- `redeemable` (query, boolean) +- `mergeable` (query, boolean) +- `limit` (query, integer) +- `offset` (query, integer) +- `sortBy` (query, string) — enum: `CURRENT,INITIAL,TOKENS,CASHPNL,PERCENTPNL,TITLE,RESOLVING,PRICE,AVGPRICE` +- `sortDirection` (query, string) — enum: `ASC,DESC` +- `title` (query, string) + +--- +##### `getV1AccountingSnapshot` + +**GET** `/v1/accounting/snapshot` + +Download an accounting snapshot (ZIP of CSVs) + +**Parameters:** +- `user` (query, string) **required** — User address (0x-prefixed) + +--- +##### `getTraded` + +**GET** `/traded` + +Get total markets a user has traded + +**Parameters:** +- `user` (query, string) **required** + +--- +##### `getOi` + +**GET** `/oi` + +Get open interest + +**Parameters:** +- `market` (query, array) + +--- +##### `getLiveVolume` + +**GET** `/live-volume` + +Get live volume for an event + +**Parameters:** +- `id` (query, integer) **required** + +--- +##### `getTrades` + +**GET** `/trades` + +Get trades for a user or markets + +**Parameters:** +- `limit` (query, integer) +- `offset` (query, integer) +- `takerOnly` (query, boolean) +- `filterType` (query, string) — Must be provided together with filterAmount. — enum: `CASH,TOKENS` +- `filterAmount` (query, number) — Must be provided together with filterType. +- `market` (query, array) — Comma-separated list of condition IDs. Mutually exclusive with eventId. +- `eventId` (query, array) — Comma-separated list of event IDs. Mutually exclusive with market. +- `user` (query, string) +- `side` (query, string) — enum: `BUY,SELL` + +--- +##### `getActivity` + +**GET** `/activity` + +Get user activity + +**Parameters:** +- `limit` (query, integer) +- `offset` (query, integer) +- `user` (query, string) **required** +- `market` (query, array) — Comma-separated list of condition IDs. Mutually exclusive with eventId. +- `eventId` (query, array) — Comma-separated list of event IDs. Mutually exclusive with market. +- `type` (query, array) +- `start` (query, integer) +- `end` (query, integer) +- `sortBy` (query, string) — enum: `TIMESTAMP,TOKENS,CASH` +- `sortDirection` (query, string) — enum: `ASC,DESC` +- `side` (query, string) — enum: `BUY,SELL` + +--- +##### `getHolders` + +**GET** `/holders` + +Get top holders for markets + +**Parameters:** +- `limit` (query, integer) — Maximum number of holders to return per token. Capped at 20. +- `market` (query, array) **required** — Comma-separated list of condition IDs. +- `minBalance` (query, integer) + +--- +##### `getValue` + +**GET** `/value` + +Get total value of a user's positions + +**Parameters:** +- `user` (query, string) **required** +- `market` (query, array) + +--- +##### `getClosedPositions` + +**GET** `/closed-positions` + +Get closed positions for a user + +**Parameters:** +- `user` (query, string) **required** — The address of the user in question +- `market` (query, array) — The conditionId of the market in question. Supports multiple csv separated values. Cannot be used with the eventId param. +- `title` (query, string) — Filter by market title +- `eventId` (query, array) — The event id of the event in question. Supports multiple csv separated values. Returns positions for all markets for those event ids. Cannot be used with the market param. +- `limit` (query, integer) — The max number of positions to return +- `offset` (query, integer) — The starting index for pagination +- `sortBy` (query, string) — The sort criteria — enum: `REALIZEDPNL,TITLE,PRICE,AVGPRICE,TIMESTAMP` +- `sortDirection` (query, string) — The sort direction — enum: `ASC,DESC` + +--- +##### `getV1MarketPositions` + +**GET** `/v1/market-positions` + +Get positions for a market + +**Parameters:** +- `market` (query, string) **required** — The condition ID of the market to query positions for +- `user` (query, string) — Filter to a single user by proxy wallet address +- `status` (query, string) — Filter positions by status. +- `OPEN` — Only positions with size > 0.01 +- `CLOSED` — Only positions with size <= 0.01 +- `ALL` — All positions regardless of size + — enum: `OPEN,CLOSED,ALL` +- `sortBy` (query, string) — Sort positions by: +- `TOKENS` — Position size (number of tokens) +- `CASH_PNL` — Unrealized cash PnL +- `REALIZED_PNL` — Realized PnL +- `TOTAL_PNL` — Total PnL (cash_pnl + realized_pnl) + — enum: `TOKENS,CASH_PNL,REALIZED_PNL,TOTAL_PNL` +- `sortDirection` (query, string) — enum: `ASC,DESC` +- `limit` (query, integer) — Max number of positions to return per outcome token +- `offset` (query, integer) — Pagination offset per outcome token + +--- +##### `getV1Leaderboard` + +**GET** `/v1/leaderboard` + +Get trader leaderboard rankings + +**Parameters:** +- `category` (query, string) — Market category for the leaderboard — enum: `OVERALL,POLITICS,SPORTS,CRYPTO,CULTURE,MENTIONS,WEATHER,ECONOMICS,TECH,FINANCE` +- `timePeriod` (query, string) — Time period for leaderboard results — enum: `DAY,WEEK,MONTH,ALL` +- `orderBy` (query, string) — Leaderboard ordering criteria — enum: `PNL,VOL` +- `limit` (query, integer) — Max number of leaderboard traders to return +- `offset` (query, integer) — Starting index for pagination +- `user` (query, string) — Limit leaderboard to a single user by address +- `userName` (query, string) — Limit leaderboard to a single username + +--- +##### `getV1BuildersLeaderboard` + +**GET** `/v1/builders/leaderboard` + +Get aggregated builder leaderboard + +**Parameters:** +- `timePeriod` (query, string) — The time period to aggregate results over. + — enum: `DAY,WEEK,MONTH,ALL` +- `limit` (query, string) + +--- +### Kalshi + +| `call_api()` name | Method | Path | Summary | Auth | +|-----------------|--------|------|---------|------| +| `GetHistoricalCutoff` | `GET` | `/historical/cutoff` | Get Historical Cutoff Timestamps | Public | +| `GetMarketCandlesticksHistorical` | `GET` | `/historical/markets/{ticker}/candlesticks` | Get Historical Market Candlesticks | Public | +| `GetFillsHistorical` | `GET` | `/historical/fills` | Get Historical Fills | Required | +| `GetHistoricalOrders` | `GET` | `/historical/orders` | Get Historical Orders | Required | +| `GetHistoricalMarkets` | `GET` | `/historical/markets` | Get Historical Markets | Public | +| `GetHistoricalMarket` | `GET` | `/historical/markets/{ticker}` | Get Historical Market | Public | +| `GetExchangeStatus` | `GET` | `/exchange/status` | Get Exchange Status | Public | +| `GetExchangeAnnouncements` | `GET` | `/exchange/announcements` | Get Exchange Announcements | Public | +| `GetSeriesFeeChanges` | `GET` | `/series/fee_changes` | Get Series Fee Changes | Public | +| `GetExchangeSchedule` | `GET` | `/exchange/schedule` | Get Exchange Schedule | Public | +| `GetUserDataTimestamp` | `GET` | `/exchange/user_data_timestamp` | Get User Data Timestamp | Public | +| `GetOrders` | `GET` | `/portfolio/orders` | Get Orders | Required | +| `CreateOrder` | `POST` | `/portfolio/orders` | Create Order | Required | +| `GetOrder` | `GET` | `/portfolio/orders/{order_id}` | Get Order | Required | +| `CancelOrder` | `DELETE` | `/portfolio/orders/{order_id}` | Cancel Order | Required | +| `BatchCreateOrders` | `POST` | `/portfolio/orders/batched` | Batch Create Orders | Required | +| `BatchCancelOrders` | `DELETE` | `/portfolio/orders/batched` | Batch Cancel Orders | Required | +| `AmendOrder` | `POST` | `/portfolio/orders/{order_id}/amend` | Amend Order | Required | +| `DecreaseOrder` | `POST` | `/portfolio/orders/{order_id}/decrease` | Decrease Order | Required | +| `GetOrderQueuePositions` | `GET` | `/portfolio/orders/queue_positions` | Get Queue Positions for Orders | Required | +| `GetOrderQueuePosition` | `GET` | `/portfolio/orders/{order_id}/queue_position` | Get Order Queue Position | Required | +| `GetOrderGroups` | `GET` | `/portfolio/order_groups` | Get Order Groups | Required | +| `CreateOrderGroup` | `POST` | `/portfolio/order_groups/create` | Create Order Group | Required | +| `GetOrderGroup` | `GET` | `/portfolio/order_groups/{order_group_id}` | Get Order Group | Required | +| `DeleteOrderGroup` | `DELETE` | `/portfolio/order_groups/{order_group_id}` | Delete Order Group | Required | +| `ResetOrderGroup` | `PUT` | `/portfolio/order_groups/{order_group_id}/reset` | Reset Order Group | Required | +| `TriggerOrderGroup` | `PUT` | `/portfolio/order_groups/{order_group_id}/trigger` | Trigger Order Group | Required | +| `UpdateOrderGroupLimit` | `PUT` | `/portfolio/order_groups/{order_group_id}/limit` | Update Order Group Limit | Required | +| `GetBalance` | `GET` | `/portfolio/balance` | Get Balance | Required | +| `CreateSubaccount` | `POST` | `/portfolio/subaccounts` | Create Subaccount | Required | +| `ApplySubaccountTransfer` | `POST` | `/portfolio/subaccounts/transfer` | Transfer Between Subaccounts | Required | +| `GetSubaccountBalances` | `GET` | `/portfolio/subaccounts/balances` | Get All Subaccount Balances | Required | +| `GetSubaccountTransfers` | `GET` | `/portfolio/subaccounts/transfers` | Get Subaccount Transfers | Required | +| `GetPositions` | `GET` | `/portfolio/positions` | Get Positions | Required | +| `GetSettlements` | `GET` | `/portfolio/settlements` | Get Settlements | Required | +| `GetPortfolioRestingOrderTotalValue` | `GET` | `/portfolio/summary/total_resting_order_value` | Get Total Resting Order Value | Required | +| `GetFills` | `GET` | `/portfolio/fills` | Get Fills | Required | +| `GetApiKeys` | `GET` | `/api_keys` | Get API Keys | Required | +| `CreateApiKey` | `POST` | `/api_keys` | Create API Key | Required | +| `GenerateApiKey` | `POST` | `/api_keys/generate` | Generate API Key | Required | +| `DeleteApiKey` | `DELETE` | `/api_keys/{api_key}` | Delete API Key | Required | +| `GetTagsForSeriesCategories` | `GET` | `/search/tags_by_categories` | Get Tags for Series Categories | Public | +| `GetFiltersForSports` | `GET` | `/search/filters_by_sport` | Get Filters for Sports | Public | +| `GetAccountApiLimits` | `GET` | `/account/limits` | Get Account API Limits | Required | +| `GetMarketCandlesticks` | `GET` | `/series/{series_ticker}/markets/{ticker}/candlesticks` | Get Market Candlesticks | Public | +| `GetTrades` | `GET` | `/markets/trades` | Get Trades | Public | +| `GetMarketCandlesticksByEvent` | `GET` | `/series/{series_ticker}/events/{ticker}/candlesticks` | Get Event Candlesticks | Public | +| `GetEvents` | `GET` | `/events` | Get Events | Public | +| `GetMultivariateEvents` | `GET` | `/events/multivariate` | Get Multivariate Events | Public | +| `GetEvent` | `GET` | `/events/{event_ticker}` | Get Event | Public | +| `GetEventMetadata` | `GET` | `/events/{event_ticker}/metadata` | Get Event Metadata | Public | +| `GetEventForecastPercentilesHistory` | `GET` | `/series/{series_ticker}/events/{ticker}/forecast_percentile_history` | Get Event Forecast Percentile History | Required | +| `GetLiveData` | `GET` | `/live_data/{type}/milestone/{milestone_id}` | Get Live Data | Public | +| `GetLiveDatas` | `GET` | `/live_data/batch` | Get Multiple Live Data | Public | +| `GetIncentivePrograms` | `GET` | `/incentive_programs` | Get Incentives | Public | +| `GetFCMOrders` | `GET` | `/fcm/orders` | Get FCM Orders | Required | +| `GetFCMPositions` | `GET` | `/fcm/positions` | Get FCM Positions | Required | +| `GetStructuredTargets` | `GET` | `/structured_targets` | Get Structured Targets | Public | +| `GetStructuredTarget` | `GET` | `/structured_targets/{structured_target_id}` | Get Structured Target | Public | +| `GetMarketOrderbook` | `GET` | `/markets/{ticker}/orderbook` | Get Market Orderbook | Required | +| `GetMarketOrderbooks` | `GET` | `/markets/orderbooks` | Get Multiple Market Orderbooks | Required | +| `GetMilestone` | `GET` | `/milestones/{milestone_id}` | Get Milestone | Public | +| `GetMilestones` | `GET` | `/milestones` | Get Milestones | Public | +| `GetCommunicationsID` | `GET` | `/communications/id` | Get Communications ID | Required | +| `GetRFQs` | `GET` | `/communications/rfqs` | Get RFQs | Required | +| `CreateRFQ` | `POST` | `/communications/rfqs` | Create RFQ | Required | +| `GetRFQ` | `GET` | `/communications/rfqs/{rfq_id}` | Get RFQ | Required | +| `DeleteRFQ` | `DELETE` | `/communications/rfqs/{rfq_id}` | Delete RFQ | Required | +| `GetQuotes` | `GET` | `/communications/quotes` | Get Quotes | Required | +| `CreateQuote` | `POST` | `/communications/quotes` | Create Quote | Required | +| `GetQuote` | `GET` | `/communications/quotes/{quote_id}` | Get Quote | Required | +| `DeleteQuote` | `DELETE` | `/communications/quotes/{quote_id}` | Delete Quote | Required | +| `AcceptQuote` | `PUT` | `/communications/quotes/{quote_id}/accept` | Accept Quote | Required | +| `ConfirmQuote` | `PUT` | `/communications/quotes/{quote_id}/confirm` | Confirm Quote | Required | +| `GetMultivariateEventCollection` | `GET` | `/multivariate_event_collections/{collection_ticker}` | Get Multivariate Event Collection | Public | +| `CreateMarketInMultivariateEventCollection` | `POST` | `/multivariate_event_collections/{collection_ticker}` | Create Market In Multivariate Event Collection | Required | +| `GetMultivariateEventCollections` | `GET` | `/multivariate_event_collections` | Get Multivariate Event Collections | Public | +| `LookupTickersForMarketInMultivariateEventCollection` | `PUT` | `/multivariate_event_collections/{collection_ticker}/lookup` | Lookup Tickers For Market In Multivariate Event Collection | Required | +| `GetMultivariateEventCollectionLookupHistory` | `GET` | `/multivariate_event_collections/{collection_ticker}/lookup` | Get Multivariate Event Collection Lookup History | Public | +| `GetSeries` | `GET` | `/series/{series_ticker}` | Get Series | Public | +| `GetSeriesList` | `GET` | `/series` | Get Series List | Public | +| `GetMarkets` | `GET` | `/markets` | Get Markets | Public | +| `GetMarket` | `GET` | `/markets/{ticker}` | Get Market | Public | +| `BatchGetMarketCandlesticks` | `GET` | `/markets/candlesticks` | Batch Get Market Candlesticks | Public | + +#### Endpoint Details + +##### `GetHistoricalCutoff` + +**GET** `/historical/cutoff` + +Get Historical Cutoff Timestamps + + +--- +##### `GetMarketCandlesticksHistorical` + +**GET** `/historical/markets/{ticker}/candlesticks` + +Get Historical Market Candlesticks + +**Parameters:** +- `ticker` (path, string) **required** — Market ticker - unique identifier for the specific market +- `start_ts` (query, integer) **required** — Start timestamp (Unix timestamp). Candlesticks will include those ending on or after this time. +- `end_ts` (query, integer) **required** — End timestamp (Unix timestamp). Candlesticks will include those ending on or before this time. +- `period_interval` (query, integer) **required** — Time period length of each candlestick in minutes. Valid values are 1 (1 minute), 60 (1 hour), or 1440 (1 day). — enum: `1,60,1440` + +--- +##### `GetFillsHistorical` + +**GET** `/historical/fills` + +Get Historical Fills *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetHistoricalOrders` + +**GET** `/historical/orders` + +Get Historical Orders *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetHistoricalMarkets` + +**GET** `/historical/markets` + +Get Historical Markets + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetHistoricalMarket` + +**GET** `/historical/markets/{ticker}` + +Get Historical Market + +**Parameters:** +- `` (, string) + +--- +##### `GetExchangeStatus` + +**GET** `/exchange/status` + +Get Exchange Status + + +--- +##### `GetExchangeAnnouncements` + +**GET** `/exchange/announcements` + +Get Exchange Announcements + + +--- +##### `GetSeriesFeeChanges` + +**GET** `/series/fee_changes` + +Get Series Fee Changes + +**Parameters:** +- `series_ticker` (query, string) +- `show_historical` (query, boolean) + +--- +##### `GetExchangeSchedule` + +**GET** `/exchange/schedule` + +Get Exchange Schedule + + +--- +##### `GetUserDataTimestamp` + +**GET** `/exchange/user_data_timestamp` + +Get User Data Timestamp + + +--- +##### `GetOrders` + +**GET** `/portfolio/orders` + +Get Orders *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `CreateOrder` + +**POST** `/portfolio/orders` + +Create Order *(Auth required)* + + +--- +##### `GetOrder` + +**GET** `/portfolio/orders/{order_id}` + +Get Order *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `CancelOrder` + +**DELETE** `/portfolio/orders/{order_id}` + +Cancel Order *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) + +--- +##### `BatchCreateOrders` + +**POST** `/portfolio/orders/batched` + +Batch Create Orders *(Auth required)* + + +--- +##### `BatchCancelOrders` + +**DELETE** `/portfolio/orders/batched` + +Batch Cancel Orders *(Auth required)* + + +--- +##### `AmendOrder` + +**POST** `/portfolio/orders/{order_id}/amend` + +Amend Order *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `DecreaseOrder` + +**POST** `/portfolio/orders/{order_id}/decrease` + +Decrease Order *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `GetOrderQueuePositions` + +**GET** `/portfolio/orders/queue_positions` + +Get Queue Positions for Orders *(Auth required)* + +**Parameters:** +- `market_tickers` (query, string) — Comma-separated list of market tickers to filter by +- `event_ticker` (query, string) — Event ticker to filter by +- `` (, string) + +--- +##### `GetOrderQueuePosition` + +**GET** `/portfolio/orders/{order_id}/queue_position` + +Get Order Queue Position *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `GetOrderGroups` + +**GET** `/portfolio/order_groups` + +Get Order Groups *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `CreateOrderGroup` + +**POST** `/portfolio/order_groups/create` + +Create Order Group *(Auth required)* + + +--- +##### `GetOrderGroup` + +**GET** `/portfolio/order_groups/{order_group_id}` + +Get Order Group *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) + +--- +##### `DeleteOrderGroup` + +**DELETE** `/portfolio/order_groups/{order_group_id}` + +Delete Order Group *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) + +--- +##### `ResetOrderGroup` + +**PUT** `/portfolio/order_groups/{order_group_id}/reset` + +Reset Order Group *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) + +--- +##### `TriggerOrderGroup` + +**PUT** `/portfolio/order_groups/{order_group_id}/trigger` + +Trigger Order Group *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) + +--- +##### `UpdateOrderGroupLimit` + +**PUT** `/portfolio/order_groups/{order_group_id}/limit` + +Update Order Group Limit *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `GetBalance` + +**GET** `/portfolio/balance` + +Get Balance *(Auth required)* + +**Parameters:** +- `subaccount` (query, integer) — Subaccount number (0 for primary, 1-32 for subaccounts). When provided, returns only that subaccount's balance. + +--- +##### `CreateSubaccount` + +**POST** `/portfolio/subaccounts` + +Create Subaccount *(Auth required)* + + +--- +##### `ApplySubaccountTransfer` + +**POST** `/portfolio/subaccounts/transfer` + +Transfer Between Subaccounts *(Auth required)* + + +--- +##### `GetSubaccountBalances` + +**GET** `/portfolio/subaccounts/balances` + +Get All Subaccount Balances *(Auth required)* + + +--- +##### `GetSubaccountTransfers` + +**GET** `/portfolio/subaccounts/transfers` + +Get Subaccount Transfers *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) + +--- +##### `GetPositions` + +**GET** `/portfolio/positions` + +Get Positions *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetSettlements` + +**GET** `/portfolio/settlements` + +Get Settlements *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetPortfolioRestingOrderTotalValue` + +**GET** `/portfolio/summary/total_resting_order_value` + +Get Total Resting Order Value *(Auth required)* + + +--- +##### `GetFills` + +**GET** `/portfolio/fills` + +Get Fills *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetApiKeys` + +**GET** `/api_keys` + +Get API Keys *(Auth required)* + + +--- +##### `CreateApiKey` + +**POST** `/api_keys` + +Create API Key *(Auth required)* + + +--- +##### `GenerateApiKey` + +**POST** `/api_keys/generate` + +Generate API Key *(Auth required)* + + +--- +##### `DeleteApiKey` + +**DELETE** `/api_keys/{api_key}` + +Delete API Key *(Auth required)* + +**Parameters:** +- `api_key` (path, string) **required** — API key ID to delete + +--- +##### `GetTagsForSeriesCategories` + +**GET** `/search/tags_by_categories` + +Get Tags for Series Categories + + +--- +##### `GetFiltersForSports` + +**GET** `/search/filters_by_sport` + +Get Filters for Sports + + +--- +##### `GetAccountApiLimits` + +**GET** `/account/limits` + +Get Account API Limits *(Auth required)* + + +--- +##### `GetMarketCandlesticks` + +**GET** `/series/{series_ticker}/markets/{ticker}/candlesticks` + +Get Market Candlesticks + +**Parameters:** +- `series_ticker` (path, string) **required** — Series ticker - the series that contains the target market +- `ticker` (path, string) **required** — Market ticker - unique identifier for the specific market +- `start_ts` (query, integer) **required** — Start timestamp (Unix timestamp). Candlesticks will include those ending on or after this time. +- `end_ts` (query, integer) **required** — End timestamp (Unix timestamp). Candlesticks will include those ending on or before this time. +- `period_interval` (query, integer) **required** — Time period length of each candlestick in minutes. Valid values are 1 (1 minute), 60 (1 hour), or 1440 (1 day). — enum: `1,60,1440` +- `include_latest_before_start` (query, boolean) — If true, prepends the latest candlestick available before the start_ts. This synthetic candlestick is created by: +1. Finding the most recent real candlestick before start_ts +2. Projecting it forward to the first period boundary (calculated as the next period interval after start_ts) +3. Setting all OHLC prices to null, and `previous_price` to the close price from the real candlestick + + +--- +##### `GetTrades` + +**GET** `/markets/trades` + +Get Trades + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetMarketCandlesticksByEvent` + +**GET** `/series/{series_ticker}/events/{ticker}/candlesticks` + +Get Event Candlesticks + +**Parameters:** +- `ticker` (path, string) **required** — The event ticker +- `series_ticker` (path, string) **required** — The series ticker +- `start_ts` (query, integer) **required** — Start timestamp for the range +- `end_ts` (query, integer) **required** — End timestamp for the range +- `period_interval` (query, integer) **required** — Specifies the length of each candlestick period, in minutes. Must be one minute, one hour, or one day. — enum: `1,60,1440` + +--- +##### `GetEvents` + +**GET** `/events` + +Get Events + +**Parameters:** +- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 200. Maximum value is 200. +- `cursor` (query, string) — Parameter to specify the pagination cursor. Use the cursor value returned from the previous response to get the next page of results. Leave empty for the first page. +- `with_nested_markets` (query, boolean) — Parameter to specify if nested markets should be included in the response. When true, each event will include a 'markets' field containing a list of Market objects associated with that event. +- `with_milestones` (query, boolean) — If true, includes related milestones as a field alongside events. +- `status` (query, string) — Filter by event status. Possible values are 'open', 'closed', 'settled'. Leave empty to return events with any status. — enum: `open,closed,settled` +- `` (, string) +- `min_close_ts` (query, integer) — Filter events with at least one market with close timestamp greater than this Unix timestamp (in seconds). + +--- +##### `GetMultivariateEvents` + +**GET** `/events/multivariate` + +Get Multivariate Events + +**Parameters:** +- `limit` (query, integer) — Number of results per page. Defaults to 100. Maximum value is 200. +- `cursor` (query, string) — Pagination cursor. Use the cursor value returned from the previous response to get the next page of results. +- `` (, string) +- `collection_ticker` (query, string) — Filter events by collection ticker. Returns only multivariate events belonging to the specified collection. Cannot be used together with series_ticker. +- `with_nested_markets` (query, boolean) — Parameter to specify if nested markets should be included in the response. When true, each event will include a 'markets' field containing a list of Market objects associated with that event. + +--- +##### `GetEvent` + +**GET** `/events/{event_ticker}` + +Get Event + +**Parameters:** +- `event_ticker` (path, string) **required** — Event ticker +- `with_nested_markets` (query, boolean) — If true, markets are included within the event object. If false (default), markets are returned as a separate top-level field in the response. + +--- +##### `GetEventMetadata` + +**GET** `/events/{event_ticker}/metadata` + +Get Event Metadata + +**Parameters:** +- `event_ticker` (path, string) **required** — Event ticker + +--- +##### `GetEventForecastPercentilesHistory` + +**GET** `/series/{series_ticker}/events/{ticker}/forecast_percentile_history` + +Get Event Forecast Percentile History *(Auth required)* + +**Parameters:** +- `ticker` (path, string) **required** — The event ticker +- `series_ticker` (path, string) **required** — The series ticker +- `percentiles` (query, array) **required** — Array of percentile values to retrieve (0-10000, max 10 values) +- `start_ts` (query, integer) **required** — Start timestamp for the range +- `end_ts` (query, integer) **required** — End timestamp for the range +- `period_interval` (query, integer) **required** — Specifies the length of each forecast period, in minutes. 0 for 5-second intervals, or 1, 60, or 1440 for minute-based intervals. — enum: `0,1,60,1440` + +--- +##### `GetLiveData` + +**GET** `/live_data/{type}/milestone/{milestone_id}` + +Get Live Data + +**Parameters:** +- `type` (path, string) **required** — Type of live data +- `milestone_id` (path, string) **required** — Milestone ID + +--- +##### `GetLiveDatas` + +**GET** `/live_data/batch` + +Get Multiple Live Data + +**Parameters:** +- `milestone_ids` (query, array) **required** — Array of milestone IDs + +--- +##### `GetIncentivePrograms` + +**GET** `/incentive_programs` + +Get Incentives + +**Parameters:** +- `status` (query, string) — Status filter. Can be "all", "active", "upcoming", "closed", or "paid_out". Default is "all". — enum: `all,active,upcoming,closed,paid_out` +- `type` (query, string) — Type filter. Can be "all", "liquidity", or "volume". Default is "all". — enum: `all,liquidity,volume` +- `limit` (query, integer) — Number of results per page. Defaults to 100. Maximum value is 10000. +- `cursor` (query, string) — Cursor for pagination + +--- +##### `GetFCMOrders` + +**GET** `/fcm/orders` + +Get FCM Orders *(Auth required)* + +**Parameters:** +- `subtrader_id` (query, string) **required** — Restricts the response to orders for a specific subtrader (FCM members only) +- `` (, string) +- `` (, string) +- `` (, string) +- `min_ts` (query, integer) — Restricts the response to orders after a timestamp, formatted as a Unix Timestamp +- `max_ts` (query, integer) — Restricts the response to orders before a timestamp, formatted as a Unix Timestamp +- `status` (query, string) — Restricts the response to orders that have a certain status — enum: `resting,canceled,executed` +- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 100 + +--- +##### `GetFCMPositions` + +**GET** `/fcm/positions` + +Get FCM Positions *(Auth required)* + +**Parameters:** +- `subtrader_id` (query, string) **required** — Restricts the response to positions for a specific subtrader (FCM members only) +- `ticker` (query, string) — Ticker of desired positions +- `event_ticker` (query, string) — Event ticker of desired positions +- `count_filter` (query, string) — Restricts the positions to those with any of following fields with non-zero values, as a comma separated list +- `settlement_status` (query, string) — Settlement status of the markets to return. Defaults to unsettled — enum: `all,unsettled,settled` +- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 100 +- `cursor` (query, string) — The Cursor represents a pointer to the next page of records in the pagination + +--- +##### `GetStructuredTargets` + +**GET** `/structured_targets` + +Get Structured Targets + +**Parameters:** +- `type` (query, string) — Filter by structured target type +- `competition` (query, string) — Filter by competition +- `page_size` (query, integer) — Number of items per page (min 1, max 2000, default 100) +- `cursor` (query, string) — Pagination cursor + +--- +##### `GetStructuredTarget` + +**GET** `/structured_targets/{structured_target_id}` + +Get Structured Target + +**Parameters:** +- `structured_target_id` (path, string) **required** — Structured target ID + +--- +##### `GetMarketOrderbook` + +**GET** `/markets/{ticker}/orderbook` + +Get Market Orderbook *(Auth required)* + +**Parameters:** +- `` (, string) +- `depth` (query, integer) — Depth of the orderbook to retrieve (0 or negative means all levels, 1-100 for specific depth) + +--- +##### `GetMarketOrderbooks` + +**GET** `/markets/orderbooks` + +Get Multiple Market Orderbooks *(Auth required)* + +**Parameters:** +- `tickers` (query, array) **required** — List of market tickers to fetch orderbooks for + +--- +##### `GetMilestone` + +**GET** `/milestones/{milestone_id}` + +Get Milestone + +**Parameters:** +- `milestone_id` (path, string) **required** — Milestone ID + +--- +##### `GetMilestones` + +**GET** `/milestones` + +Get Milestones + +**Parameters:** +- `limit` (query, integer) **required** — Number of milestones to return per page +- `minimum_start_date` (query, string) — Minimum start date to filter milestones. Format RFC3339 timestamp +- `category` (query, string) — Filter by milestone category +- `competition` (query, string) — Filter by competition +- `source_id` (query, string) — Filter by source id +- `type` (query, string) — Filter by milestone type +- `related_event_ticker` (query, string) — Filter by related event ticker +- `cursor` (query, string) — Pagination cursor. Use the cursor value returned from the previous response to get the next page of results + +--- +##### `GetCommunicationsID` + +**GET** `/communications/id` + +Get Communications ID *(Auth required)* + + +--- +##### `GetRFQs` + +**GET** `/communications/rfqs` + +Get RFQs *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 100. +- `status` (query, string) — Filter RFQs by status +- `creator_user_id` (query, string) — Filter RFQs by creator user ID + +--- +##### `CreateRFQ` + +**POST** `/communications/rfqs` + +Create RFQ *(Auth required)* + + +--- +##### `GetRFQ` + +**GET** `/communications/rfqs/{rfq_id}` + +Get RFQ *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `DeleteRFQ` + +**DELETE** `/communications/rfqs/{rfq_id}` + +Delete RFQ *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `GetQuotes` + +**GET** `/communications/quotes` + +Get Quotes *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 500. +- `status` (query, string) — Filter quotes by status +- `quote_creator_user_id` (query, string) — Filter quotes by quote creator user ID +- `rfq_creator_user_id` (query, string) — Filter quotes by RFQ creator user ID +- `rfq_creator_subtrader_id` (query, string) — Filter quotes by RFQ creator subtrader ID (FCM members only) +- `rfq_id` (query, string) — Filter quotes by RFQ ID + +--- +##### `CreateQuote` + +**POST** `/communications/quotes` + +Create Quote *(Auth required)* + + +--- +##### `GetQuote` + +**GET** `/communications/quotes/{quote_id}` + +Get Quote *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `DeleteQuote` + +**DELETE** `/communications/quotes/{quote_id}` + +Delete Quote *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `AcceptQuote` + +**PUT** `/communications/quotes/{quote_id}/accept` + +Accept Quote *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `ConfirmQuote` + +**PUT** `/communications/quotes/{quote_id}/confirm` + +Confirm Quote *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `GetMultivariateEventCollection` + +**GET** `/multivariate_event_collections/{collection_ticker}` + +Get Multivariate Event Collection + +**Parameters:** +- `collection_ticker` (path, string) **required** — Collection ticker + +--- +##### `CreateMarketInMultivariateEventCollection` + +**POST** `/multivariate_event_collections/{collection_ticker}` + +Create Market In Multivariate Event Collection *(Auth required)* + +**Parameters:** +- `collection_ticker` (path, string) **required** — Collection ticker + +--- +##### `GetMultivariateEventCollections` + +**GET** `/multivariate_event_collections` + +Get Multivariate Event Collections + +**Parameters:** +- `status` (query, string) — Only return collections of a certain status. Can be unopened, open, or closed. — enum: `unopened,open,closed` +- `associated_event_ticker` (query, string) — Only return collections associated with a particular event ticker. +- `series_ticker` (query, string) — Only return collections with a particular series ticker. +- `limit` (query, integer) — Specify the maximum number of results. +- `cursor` (query, string) — The Cursor represents a pointer to the next page of records in the pagination. This optional parameter, when filled, should be filled with the cursor string returned in a previous request to this end-point. + +--- +##### `LookupTickersForMarketInMultivariateEventCollection` + +**PUT** `/multivariate_event_collections/{collection_ticker}/lookup` + +Lookup Tickers For Market In Multivariate Event Collection *(Auth required)* + +**Parameters:** +- `collection_ticker` (path, string) **required** — Collection ticker + +--- +##### `GetMultivariateEventCollectionLookupHistory` + +**GET** `/multivariate_event_collections/{collection_ticker}/lookup` + +Get Multivariate Event Collection Lookup History + +**Parameters:** +- `collection_ticker` (path, string) **required** — Collection ticker +- `lookback_seconds` (query, integer) **required** — Number of seconds to look back for lookup history. Must be one of 10, 60, 300, or 3600. — enum: `10,60,300,3600` + +--- +##### `GetSeries` + +**GET** `/series/{series_ticker}` + +Get Series + +**Parameters:** +- `series_ticker` (path, string) **required** — The ticker of the series to retrieve +- `include_volume` (query, boolean) — If true, includes the total volume traded across all events in this series. + +--- +##### `GetSeriesList` + +**GET** `/series` + +Get Series List + +**Parameters:** +- `category` (query, string) +- `tags` (query, string) +- `include_product_metadata` (query, boolean) +- `include_volume` (query, boolean) — If true, includes the total volume traded across all events in each series. + +--- +##### `GetMarkets` + +**GET** `/markets` + +Get Markets + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetMarket` + +**GET** `/markets/{ticker}` + +Get Market + +**Parameters:** +- `` (, string) + +--- +##### `BatchGetMarketCandlesticks` + +**GET** `/markets/candlesticks` + +Batch Get Market Candlesticks + +**Parameters:** +- `market_tickers` (query, string) **required** — Comma-separated list of market tickers (maximum 100) +- `start_ts` (query, integer) **required** — Start timestamp in Unix seconds +- `end_ts` (query, integer) **required** — End timestamp in Unix seconds +- `period_interval` (query, integer) **required** — Candlestick period interval in minutes +- `include_latest_before_start` (query, boolean) — If true, prepends the latest candlestick available before the start_ts. This synthetic candlestick is created by: +1. Finding the most recent real candlestick before start_ts +2. Projecting it forward to the first period boundary (calculated as the next period interval after start_ts) +3. Setting all OHLC prices to null, and `previous_price` to the close price from the real candlestick + + +--- +### Limitless + +| `call_api()` name | Method | Path | Summary | Auth | +|-----------------|--------|------|---------|------| +| `AuthController_getSigningMessage` | `GET` | `/auth/signing-message` | Get signing message | Public | +| `AuthController_verifyAuth` | `GET` | `/auth/verify-auth` | Verify authentication | Required | +| `AuthController_login` | `POST` | `/auth/login` | User login | Public | +| `AuthController_logout` | `POST` | `/auth/logout` | User logout | Required | +| `MarketController_getActiveMarkets[0]` | `GET` | `/markets/active/{categoryId}` | Browse Active Markets | Public | +| `MarketController_getActiveMarkets[1]` | `GET` | `/markets/active` | Browse Active Markets | Public | +| `MarketController_getActiveMarketCountPerCategory` | `GET` | `/markets/categories/count` | Get active market count per category | Public | +| `MarketController_getActiveSlugs` | `GET` | `/markets/active/slugs` | Get active market slugs with metadata | Public | +| `MarketController_find` | `GET` | `/markets/{addressOrSlug}` | Get Market Details | Public | +| `MarketController_getFeedEvent` | `GET` | `/markets/{slug}/get-feed-events` | Get feed events for a market | Required | +| `MarketOrderbookController_getHistoricalPrice` | `GET` | `/markets/{slug}/historical-price` | Get Historical Prices | Public | +| `MarketOrderbookController_getOrderbook` | `GET` | `/markets/{slug}/orderbook` | Get Orderbook | Public | +| `MarketOrderbookController_getLockedBalance` | `GET` | `/markets/{slug}/locked-balance` | Get Locked Balance | Required | +| `MarketOrderbookController_getUserOrders` | `GET` | `/markets/{slug}/user-orders` | User Orders | Required | +| `MarketOrderbookController_getMarketEvents` | `GET` | `/markets/{slug}/events` | Market Events | Public | +| `MarketSearchController_search` | `GET` | `/markets/search` | Search for markets based on semantic similarity | Public | +| `PortfolioController_getTrades` | `GET` | `/portfolio/trades` | Get Trades | Required | +| `PortfolioController_getPositions` | `GET` | `/portfolio/positions` | Get Positions | Required | +| `PortfolioController_getPnlChart` | `GET` | `/portfolio/pnl-chart` | Get portfolio PnL chart | Required | +| `PortfolioController_getHistory` | `GET` | `/portfolio/history` | Get History | Required | +| `PortfolioController_getPointsBreakdown` | `GET` | `/portfolio/points` | Get points breakdown | Required | +| `PublicPortfolioController_tradedVolume` | `GET` | `/portfolio/{account}/traded-volume` | User Total Volume | Public | +| `PublicPortfolioController_getPositions` | `GET` | `/portfolio/{account}/positions` | Get All User Positions | Public | +| `PublicPortfolioController_getPnlChart` | `GET` | `/portfolio/{account}/pnl-chart` | Get portfolio PnL chart (public) | Public | +| `TradingPortfolioController_getAllowance` | `GET` | `/portfolio/trading/allowance` | Get User Trading Allowance | Required | +| `OrderController_createOrder` | `POST` | `/orders` | Create Order | Required | +| `OrderController_cancelOrder` | `DELETE` | `/orders/{orderId}` | Cancel Order | Required | +| `OrderController_cancelOrderBatch` | `POST` | `/orders/cancel-batch` | Cancel multiple orders in batch | Required | +| `OrderController_cancelAllOrders` | `DELETE` | `/orders/all/{slug}` | Cancel all of a user's orders in a specific market | Required | + +#### Endpoint Details + +##### `AuthController_getSigningMessage` + +**GET** `/auth/signing-message` + +Get signing message + + +--- +##### `AuthController_verifyAuth` + +**GET** `/auth/verify-auth` + +Verify authentication *(Auth required)* + + +--- +##### `AuthController_login` + +**POST** `/auth/login` + +User login + +**Parameters:** +- `x-account` (header, string) **required** — The Ethereum address of the user +- `x-signing-message` (header, string) **required** — The signing message generated by the server +- `x-signature` (header, string) **required** — The signature generated by signing the message with the user's wallet + +--- +##### `AuthController_logout` + +**POST** `/auth/logout` + +User logout *(Auth required)* + + +--- +##### `MarketController_getActiveMarkets[0]` + +**GET** `/markets/active/{categoryId}` + +Browse Active Markets + +**Parameters:** +- `page` (query, number) — Page number for pagination +- `limit` (query, number) — Number of items per page +- `sortBy` (query, string) — Sort by query parameter +- `tradeType` (query, string) — Filter by trade type (amm, clob, or group) — enum: `amm,clob,group` +- `automationType` (query, string) — Filter by automation type (manual, lumy, or sports) — enum: `manual,lumy,sports` +- `categoryId` (path, number) **required** — Filter markets by category ID + +--- +##### `MarketController_getActiveMarkets[1]` + +**GET** `/markets/active` + +Browse Active Markets + +**Parameters:** +- `page` (query, number) — Page number for pagination +- `limit` (query, number) — Number of items per page +- `sortBy` (query, string) — Sort by query parameter +- `tradeType` (query, string) — Filter by trade type (amm, clob, or group) — enum: `amm,clob,group` +- `automationType` (query, string) — Filter by automation type (manual, lumy, or sports) — enum: `manual,lumy,sports` +- `categoryId` (path, number) **required** — Filter markets by category ID + +--- +##### `MarketController_getActiveMarketCountPerCategory` + +**GET** `/markets/categories/count` + +Get active market count per category + + +--- +##### `MarketController_getActiveSlugs` + +**GET** `/markets/active/slugs` + +Get active market slugs with metadata + + +--- +##### `MarketController_find` + +**GET** `/markets/{addressOrSlug}` + +Get Market Details + +**Parameters:** +- `addressOrSlug` (path, string) **required** — Market/group address (0x...) or slug identifier (my-market-name) + +--- +##### `MarketController_getFeedEvent` + +**GET** `/markets/{slug}/get-feed-events` + +Get feed events for a market *(Auth required)* + +**Parameters:** +- `page` (query, number) — Page number for pagination +- `limit` (query, number) — Number of events per page +- `slug` (path, string) **required** — Slug of the market + +--- +##### `MarketOrderbookController_getHistoricalPrice` + +**GET** `/markets/{slug}/historical-price` + +Get Historical Prices + +**Parameters:** +- `to` (query, string) — End date for historical data +- `from` (query, string) — Start date for historical data +- `interval` (query, string) — Time interval for data points — enum: `1h,6h,1d,1w,1m,all` +- `slug` (path, string) **required** — Market slug identifier + +--- +##### `MarketOrderbookController_getOrderbook` + +**GET** `/markets/{slug}/orderbook` + +Get Orderbook + +**Parameters:** +- `slug` (path, string) **required** — Market slug identifier + +--- +##### `MarketOrderbookController_getLockedBalance` + +**GET** `/markets/{slug}/locked-balance` + +Get Locked Balance *(Auth required)* + +**Parameters:** +- `slug` (path, string) **required** — Market slug identifier + +--- +##### `MarketOrderbookController_getUserOrders` + +**GET** `/markets/{slug}/user-orders` + +User Orders *(Auth required)* + +**Parameters:** +- `statuses` (query, array) — Order status(es) to filter by. Defaults to [LIVE] if not provided +- `limit` (query, number) — Maximum number of orders to return +- `slug` (path, string) **required** — Market slug identifier + +--- +##### `MarketOrderbookController_getMarketEvents` + +**GET** `/markets/{slug}/events` + +Market Events + +**Parameters:** +- `page` (query, number) — Page number for pagination +- `limit` (query, number) — Number of events per page +- `slug` (path, string) **required** — Market slug identifier + +--- +##### `MarketSearchController_search` + +**GET** `/markets/search` + +Search for markets based on semantic similarity + +**Parameters:** +- `query` (query, string) **required** — Search query text +- `limit` (query, number) — Maximum number of results to return +- `page` (query, number) — Number of page +- `similarityThreshold` (query, number) — Minimum similarity score (0-1) + +--- +##### `PortfolioController_getTrades` + +**GET** `/portfolio/trades` + +Get Trades *(Auth required)* + + +--- +##### `PortfolioController_getPositions` + +**GET** `/portfolio/positions` + +Get Positions *(Auth required)* + + +--- +##### `PortfolioController_getPnlChart` + +**GET** `/portfolio/pnl-chart` + +Get portfolio PnL chart *(Auth required)* + +**Parameters:** +- `timeframe` (query, string) — Timeframe window for percent change and chart series + +--- +##### `PortfolioController_getHistory` + +**GET** `/portfolio/history` + +Get History *(Auth required)* + +**Parameters:** +- `page` (query, number) **required** — Page number +- `limit` (query, number) **required** — Number of items per page +- `from` (query, string) — Start date for filtering (ISO 8601 format) +- `to` (query, string) — End date for filtering (ISO 8601 format) + +--- +##### `PortfolioController_getPointsBreakdown` + +**GET** `/portfolio/points` + +Get points breakdown *(Auth required)* + + +--- +##### `PublicPortfolioController_tradedVolume` + +**GET** `/portfolio/{account}/traded-volume` + +User Total Volume + +**Parameters:** +- `account` (path, string) **required** — User Ethereum address + +--- +##### `PublicPortfolioController_getPositions` + +**GET** `/portfolio/{account}/positions` + +Get All User Positions + +**Parameters:** +- `account` (path, string) **required** — User Ethereum address + +--- +##### `PublicPortfolioController_getPnlChart` + +**GET** `/portfolio/{account}/pnl-chart` + +Get portfolio PnL chart (public) + +**Parameters:** +- `account` (path, string) **required** — User Ethereum address +- `timeframe` (query, string) — Timeframe window for percent change and chart series + +--- +##### `TradingPortfolioController_getAllowance` + +**GET** `/portfolio/trading/allowance` + +Get User Trading Allowance *(Auth required)* -# 1. Check balance -balances = exchange.fetch_balance() -if balances: - balance = balances[0] - print(f'Available: ${balance.available}') +**Parameters:** +- `type` (query, string) **required** — Trading type: CLOB or NegRisk — enum: `clob,negrisk` +- `spender` (query, string) — Optional spender address override (e.g., venue exchange address) -# 2. Search for a market -markets = exchange.fetch_markets(query='Trump') -market = markets[0] -outcome = market.yes +--- +##### `OrderController_createOrder` -print(f'{market.title}') -print(f'Price: {outcome.price * 100:.1f}%') +**POST** `/orders` -# 3. Place a limit order -order = exchange.create_order( - market_id=market.market_id, - outcome_id=outcome.outcome_id, - side='buy', - type='limit', - amount=10, - price=0.50 -) +Create Order *(Auth required)* -print(f'Order placed: {order.id}') -# 4. Check order status -updated_order = exchange.fetch_order(order.id) -print(f'Status: {updated_order.status}') -print(f'Filled: {updated_order.filled}/{updated_order.amount}') +--- +##### `OrderController_cancelOrder` -# 5. Cancel if needed -if updated_order.status == 'open': - exchange.cancel_order(order.id) - print('Order cancelled') +**DELETE** `/orders/{orderId}` -# 6. Check positions -positions = exchange.fetch_positions() -for pos in positions: - pnl_sign = '+' if pos.unrealized_pnl > 0 else '' - print(f'{pos.outcome_label}: {pnl_sign}${pos.unrealized_pnl:.2f}') -``` - -## Data Models - -### `ExchangeOptions` - -Constructor-level options for venue clients (Polymarket, Kalshi, Opinion, etc.). -Hosted mode is the default when pmxtApiKey is set; otherwise the SDK runs against -a local sidecar with venue credentials. - -```python -@dataclass -class ExchangeOptions: -pmxt_api_key: str # PMXT customer API key. When set, the SDK routes to api.pmxt.dev (catalog) and trade.pmxt.dev (trading). Get one at pmxt.dev/dashboard. -wallet_address: str # EVM wallet address for hosted reads/writes. Required for endpoints that operate on a wallet (balances, positions, trades, open orders). -signer: object # Optional pre-built signer for hosted writes. If absent and privateKey is set, the SDK auto-wraps privateKey into a signer. -private_key: str # Private key. In hosted mode, used to derive an EIP-712 signer for writes (wraps into EthAccountSigner/EthersSigner). In self-hosted mode, used as the venue credential directly. -base_url: str # Explicit base URL override. When unset, the SDK uses api.pmxt.dev when pmxtApiKey is set, or the local sidecar otherwise. -api_key: str # Venue-side API key (e.g. Polymarket CLOB key). Only relevant for self-hosted mode. -auto_start_server: bool # Auto-start the local sidecar when running self-hosted. Defaults to true when no pmxtApiKey is set, false when hosted. -``` - ---- -### `UnifiedMarket` - - - -```python -@dataclass -class UnifiedMarket: -market_id: str # The unique identifier for this market -event_id: str # Link to parent event -title: str # The market title (e.g., "Will BTC close above $100k on Dec 31?"). -description: str # Long-form market description or resolution criteria. -slug: str # URL-friendly slug for the market. -outcomes: List[MarketOutcome] # The possible outcomes for this market. -resolution_date: str # When the market is scheduled to resolve. Optional because some venues do not publish a cutoff for every market (e.g. Opinion categorical children) — emit `undefined` rather than coercing to epoch. -volume24h: float # Trading volume over the past 24 hours (USD). -volume: float # Total / Lifetime volume -liquidity: float # Current market liquidity (USD). -open_interest: float # Total value of outstanding contracts (USD). -url: str # Canonical URL to view the market on the venue. -image: str # Optional image URL for the market. -category: str # Optional category label. Venue-defined — common values include "Sports", "Politics", "Crypto", "Economics", "Science", "Culture". Polymarket uses finer-grained categories like "Bitcoin", "Soccer", "Economic Policy"; Kalshi uses broader ones like "Sports" or "Mentions". -tags: List[str] # Optional list of tags. More granular than category — e.g. ["Crypto", "Crypto Prices", "Bitcoin"] or ["Politics", "Elections", "Trump"]. Tags vary by venue: Polymarket markets carry several, Kalshi typically one. -tick_size: float # Minimum price increment (e.g., 0.01, 0.001) -status: str # Venue-native lifecycle status (e.g. 'active', 'closed', 'archived'). -contract_address: str # On-chain contract / condition identifier where applicable (Polymarket conditionId, etc.). -source_metadata: object # Raw venue-specific metadata not captured by first-class fields (e.g. Kalshi series_ticker / series_title from the parent event, Polymarket series). Passed through verbatim so downstream consumers can recover anything the unified shape omits. Each venue populates what it has. -source_exchange: str # The exchange/venue this market originates from (e.g. 'polymarket', 'kalshi'). Populated by the Router. -yes: Any # Convenience accessor for the YES outcome on a binary market. -no: Any # Convenience accessor for the NO outcome on a binary market. -up: Any # Convenience accessor for the UP outcome on a binary market. -down: Any # Convenience accessor for the DOWN outcome on a binary market. -``` - ---- -### `MarketOutcome` - - - -```python -@dataclass -class MarketOutcome: -outcome_id: str # Outcome ID for trading operations (CLOB Token ID for Polymarket, Market Ticker for Kalshi) -market_id: str # The market this outcome belongs to (set automatically when outcomes are built) -label: str # Human-readable outcome label (e.g., "Yes", "No", candidate name). -price: float # Probability between 0.0 and 1.0. -price_change24h: float # Change in price over the past 24 hours, as an absolute probability delta. -metadata: object # Exchange-specific metadata (e.g., clobTokenId for Polymarket) -``` - ---- -### `UnifiedEvent` - -A grouped collection of related markets (e.g., "Who will be Fed Chair?" contains multiple candidate markets). - -```python -@dataclass -class UnifiedEvent: -id: str # The unique identifier for this event. -title: str # The event title (e.g., "Who will be Fed Chair?"). -description: str # Long-form event description. -slug: str # URL-friendly slug for the event. -markets: List[UnifiedMarket] # Markets grouped under this event. -volume24h: float # Trading volume over the past 24 hours (USD). -volume: float # Total / Lifetime volume (sum across markets; undefined if no market provides it) -url: str # Canonical URL to view the event on the venue. -image: str # Optional image URL for the event. -category: str # Optional category label. Venue-defined — common values include "Sports", "Politics", "Crypto", "Economics", "Science", "Culture". Polymarket uses finer-grained categories like "Bitcoin", "Soccer", "Economic Policy"; Kalshi uses broader ones like "Sports" or "Mentions". -tags: List[str] # Optional list of tags. More granular than category — e.g. ["Sports", "FIFA World Cup", "2026 FIFA World Cup"] or ["Politics", "Geopolitics", "Middle East"]. Tags vary by venue: Polymarket markets carry several, Kalshi typically one. -source_metadata: object # Raw venue-specific metadata not captured by first-class fields (e.g. Kalshi series_ticker / series_title, Polymarket series). Passed through verbatim so downstream consumers can recover anything the unified shape omits. Each venue populates what it has. -source_exchange: str # The exchange/venue this event originates from (e.g. 'polymarket', 'kalshi'). Populated by the Router. -``` - ---- -### `UnifiedSeries` - -A recurring grouping of events on a venue — the fourth tier above Event -> Market -> Outcome. Examples: Kalshi `KXATPMATCH` (every ATP tennis match), Polymarket `wta` (every WTA match), Opinion's daily `collection`. Series only exists where the venue exposes a recurring-event concept; venues without one return an empty array from `fetchSeries`. - -```python -@dataclass -class UnifiedSeries: -id: str # Stable venue-native series identifier (e.g. "KXATPMATCH" on Kalshi, "atp" on Polymarket Gamma, numeric Gamma id). -ticker: str # Venue-native ticker, when distinct from `id`. -slug: str # Venue-native slug. -title: str # Human-readable series title (e.g. "ATP Match Winner", "WTA"). -description: str # Long-form series description. -recurrence: str # Recurrence cadence the venue reports ('daily', 'weekly', 'annual', ...). -events: List[UnifiedEvent] # Child events. Populated when fetched by id; the list form usually omits this to keep payloads small. -url: str # Canonical venue URL for the series. -image: str # Venue-hosted image. -source_exchange: str # The exchange this series originates from. Populated by the Router. -source_metadata: object # Raw venue-specific fields not promoted to first-class columns. -``` - ---- -### `PriceCandle` - - - -```python -@dataclass -class PriceCandle: -timestamp: float # Unix timestamp in milliseconds marking the start of the candle. -open: float # Opening price for the interval (probability between 0.0 and 1.0). -high: float # Highest price during the interval (probability between 0.0 and 1.0). -low: float # Lowest price during the interval (probability between 0.0 and 1.0). -close: float # Closing price for the interval (probability between 0.0 and 1.0). -volume: float # Trading volume during the interval. -``` - ---- -### `OrderBook` - - - -```python -@dataclass -class OrderBook: -bids: List[OrderLevel] # Order book bid levels, sorted by price descending. -asks: List[OrderLevel] # Order book ask levels, sorted by price ascending. -timestamp: float # Unix timestamp in milliseconds when the snapshot was taken. -datetime: str # ISO 8601 datetime string of the snapshot (CCXT-compatible). -is_neg_risk: bool # Whether the venue marks this snapshot as a negative-risk market. -last_trade_price: float # Last traded price from venues that include it with the book snapshot. -source_metadata: object # Venue-specific metadata preserved from the raw order book snapshot. -``` - ---- -### `OrderLevel` - - - -```python -@dataclass -class OrderLevel: -price: float # 0.0 to 1.0 (probability) -size: float # contracts/shares -order_count: float # -``` - ---- -### `Trade` - - - -```python -@dataclass -class Trade: -id: str # The unique identifier for this trade. -timestamp: float # Unix timestamp in milliseconds when the trade executed. -price: float # Probability between 0.0 and 1.0. -amount: float # Size of the trade in contracts/shares. -side: str # Trade side from the taker's perspective. -outcome_id: str # The outcome this trade is for (if known). -``` - ---- -### `UserTrade` - - - -```python -@dataclass -class UserTrade: -id: str # The unique identifier for this trade. -timestamp: float # Unix timestamp in milliseconds when the trade executed. -price: float # Probability between 0.0 and 1.0. -amount: float # Size of the trade in contracts/shares. -side: str # Trade side from the taker's perspective. -outcome_id: str # The outcome this trade is for (if known). -order_id: str # The order that produced this trade, if known. -market_id: str # The market this trade belongs to, when the venue exposes it (e.g. derivable from the fill's coin/asset). -fee: float # Trading fee paid by the user for this fill, when the venue exposes it. -tx_hash: str # Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. -chain: str # Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. -block_number: float # Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. -``` - ---- -### `Order` - - - -```python -@dataclass -class Order: -id: str # The exchange-assigned order identifier. -market_id: str # The market this order was placed on. -outcome_id: str # The outcome this order was placed on. -side: str # Order side: buy or sell. -type: str # Order type: market (execute immediately) or limit (resting at a price). -price: float # For limit orders -amount: float # Size in contracts/shares -status: str # Lifecycle status of the order. -filled: float # Amount filled (USDC cost for buys, shares for sells) -filled_shares: float # Amount filled in shares/contracts (if different from USDC-denominated `filled`). -remaining: float # Amount remaining -timestamp: float # Unix timestamp in milliseconds when the order was created. -fee: float # Fee paid for this order, if known. -fee_rate_bps: float # Fee rate in basis points applied to this order (e.g. 100 = 1%). -tx_hash: str # Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. -chain: str # Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. -block_number: float # Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. -``` - ---- -### `Position` - -A current position in a market. In hosted mode, `outcomeLabel`, `entryPrice`, `currentPrice` and `unrealizedPnL` may be null when the server cannot derive them (e.g. `with_mtm=false` or no fill history). Venue-direct callers continue to populate every field. - -```python -@dataclass -class Position: -market_id: str # The market this position is held in. -outcome_id: str # The outcome this position is held in. -outcome_label: str # Human-readable label for the outcome held. Optional in hosted mode. -size: float # Positive for long, negative for short -entry_price: float # Average entry price for the position (probability between 0.0 and 1.0). Optional in hosted mode when no fill history is available. -current_price: float # Current mark price for the position (probability between 0.0 and 1.0). Optional in hosted mode when mark-to-market data is unavailable. -current_value: float # Current market value of the position (size * currentPrice). Null when currentPrice is unavailable. -unrealized_pnl: float # Unrealized profit or loss at the current price (USD). Optional in hosted mode when mark-to-market data is unavailable. -realized_pnl: float # Realized profit or loss booked so far (USD). -tx_hash: str # Populated in hosted mode after on-chain settlement (from the last fill); null for local-mode and for non-on-chain venues. -chain: str # Populated in hosted mode after on-chain settlement (from the last fill); null for local-mode and for non-on-chain venues. -block_number: float # Populated in hosted mode after on-chain settlement (from the last fill); null for local-mode and for non-on-chain venues. -``` - ---- -### `Balance` - - - -```python -@dataclass -class Balance: -currency: str # e.g., 'USDC' -total: float # Total balance including funds locked in open orders. -available: float # Balance available to trade (excludes locked funds). -locked: float # In open orders -venue: str # Hosted-mode: which venue this balance belongs to in a multi-venue response. Null when the balance is venue-agnostic. -``` - ---- -### `ExecutionPriceResult` - - - -```python -@dataclass -class ExecutionPriceResult: -price: float # -filled_amount: float # -fully_filled: bool # -``` - ---- -### `PaginatedMarketsResult` - -Shape returned by fetchMarketsPaginated - -```python -@dataclass -class PaginatedMarketsResult: -data: List[UnifiedMarket] # The page of unified markets -total: float # Total number of markets in the snapshot -next_cursor: str # Cursor to pass to the next call, or undefined if this is the last page -``` - ---- -### `PaginatedEventsResult` - -Shape returned by fetchEventsPaginated - -```python -@dataclass -class PaginatedEventsResult: -data: List[UnifiedEvent] # The page of unified events -total: float # Total number of events in the snapshot -next_cursor: str # Cursor to pass to the next call, or undefined if this is the last page -``` - ---- -### `BuiltOrder` - - - -```python -@dataclass -class BuiltOrder: -exchange: str # The exchange name this order was built for. -params: Any # The original params used to build this order. -signed_order: object # For CLOB exchanges (Polymarket): the EIP-712 signed order ready to POST to the exchange's order endpoint. -tx: object # For on-chain AMM exchanges: the EVM transaction payload. Reserved for future exchanges; no current exchange populates this. -raw: Any # The raw, exchange-native payload. Always present. -expiry: float # Unix epoch (ms) when this built order expires server-side. Submitting after expiry returns BUILT_ORDER_EXPIRED. -``` - ---- -### `MarketFilterCriteria` - - - -```python -@dataclass -class MarketFilterCriteria: -text: str # -search_in: List[str] # Default: ['title'] -volume24h: object # -volume: object # Filter by total (lifetime) volume range -liquidity: object # Filter by current liquidity range -open_interest: object # Filter by open interest range -resolution_date: object # -category: str # Filter by category. Common values: "Sports", "Politics", "Crypto", "Bitcoin", "Soccer", "Economic Policy" (Polymarket) or "Sports", "Mentions" (Kalshi). -tags: List[str] # Match markets that have ANY of these tags. Examples: ["Crypto", "Crypto Prices"], ["Politics", "Elections"], ["Sports", "FIFA World Cup"]. -price: object # -price_change24h: object # -``` - ---- -### `EventFilterCriteria` - - - -```python -@dataclass -class EventFilterCriteria: -text: str # -search_in: List[str] # Default: ['title'] -category: str # Filter by category. Common values: "Sports", "Politics", "Crypto", "Bitcoin", "Soccer", "Economic Policy" (Polymarket) or "Sports", "Mentions" (Kalshi). -tags: List[str] # Match events that have ANY of these tags. Examples: ["Crypto"], ["Politics", "Geopolitics", "Middle East"], ["Sports", "FIFA World Cup"]. -market_count: object # -total_volume: object # Sum of market volumes -``` - ---- -### `MatchResult` - - - -```python -@dataclass -class MatchResult: -market: UnifiedMarket # -source_market: Any # The source market this was matched against. Present in browse mode (no marketId), absent in lookup mode. -relation: str # -confidence: float # -reasoning: str # -best_bid: float # -best_ask: float # -``` - ---- -### `EventMatchResult` - - - -```python -@dataclass -class EventMatchResult: -event: UnifiedEvent # -market_matches: List[MatchResult] # -``` - ---- -### `PriceComparison` - - - -```python -@dataclass -class PriceComparison: -market: UnifiedMarket # -relation: str # -confidence: float # -reasoning: str # -best_bid: float # -best_ask: float # -venue: str # -``` - ---- -### `ArbitrageOpportunity` - - - -```python -@dataclass -class ArbitrageOpportunity: -market_a: UnifiedMarket # -market_b: UnifiedMarket # -spread: float # -buy_venue: str # -sell_venue: str # -buy_price: float # -sell_price: float # -relation: str # The set-theoretic relation between the two markets (e.g. identity, subset). -confidence: float # Match confidence score (0.0 to 1.0). -``` - ---- -### `MatchedMarketPair` - - - -```python -@dataclass -class MatchedMarketPair: -market_a: UnifiedMarket # -market_b: UnifiedMarket # -price_difference: float # -venue_a: str # -venue_b: str # -price_a: float # -price_b: float # -relation: str # The set-theoretic relation between the two markets (e.g. identity, subset). -confidence: float # Match confidence score (0.0 to 1.0). -reasoning: str # Why the two markets were matched. -``` - ---- -### `ExchangeCredentials` - -Optional authentication credentials for exchange operations. - -```python -@dataclass -class ExchangeCredentials: -api_key: str # -api_secret: str # Standard API secret for HMAC-authenticated exchanges -passphrase: str # Standard API passphrase for HMAC-authenticated exchanges -api_token: str # Metaculus: `Authorization: Token ` for higher rate limits -private_key: str # Required for Polymarket L1 auth -signature_type: Any # 0 = EOA, 1 = Poly Proxy, 2 = Gnosis Safe (Can also use 'eoa', 'polyproxy', 'gnosis_safe') -funder_address: str # The address funding the trades (defaults to signer address) -wallet_address: str # -base_url: str # -``` - ---- -### `FeedTicker` - -CCXT-compatible ticker with last trade price and metadata. - -```python -@dataclass -class FeedTicker: -symbol: str # Trading pair symbol (e.g. BTC/USD) -info: Any # Raw provider-specific data -timestamp: int # Unix timestamp in milliseconds -datetime: str # -high: float # -low: float # -bid: float # -bid_volume: float # -ask: float # -ask_volume: float # -vwap: float # -open: float # -close: float # -last: float # Last trade price -previous_close: float # -change: float # -percentage: float # -average: float # -quote_volume: float # -base_volume: float # -index_price: float # -mark_price: float # -``` - ---- -### `FeedMarket` - -CCXT-compatible market descriptor for a data feed. - -```python -@dataclass -class FeedMarket: -id: str # -symbol: str # -base: str # -quote: str # -active: bool # -type: str # -info: Any # Provider-specific metadata -``` - ---- -### `FeedOracleRound` - -Chainlink oracle price round. - -```python -@dataclass -class FeedOracleRound: -feed: str # Price feed pair (e.g. BTC/USD) -round_id: str # -answer: float # Oracle price -started_at: int # -updated_at: int # -answered_inround: str # -decimals: int # -description: str # -``` - ---- - -## Filter Parameters - -### `BaseRequest` - -Base request structure with optional credentials - -```python -@dataclass -class BaseRequest: -credentials: ExchangeCredentials # -``` - ---- -### `MarketFilterParams` - - - -```python -@dataclass -class MarketFilterParams: -limit: float # Maximum number of results to return -offset: float # Pagination offset — number of results to skip -sort: str # Sort order for results -status: str # Filter by market status (default: 'active', 'inactive' and 'closed' are interchangeable) -search_in: str # Where to search (default: 'title') -query: str # For keyword search -slug: str # For slug/ticker lookup -market_id: str # Direct lookup by market ID -outcome_id: str # Reverse lookup -- find market containing this outcome -event_id: str # Find markets belonging to an event -page: float # For pagination (used by Limitless) -similarity_threshold: float # For semantic search (used by Limitless) -source_exchange: str # Filter by source venue (e.g. 'polymarket', 'kalshi', 'myriad'). `exchange` is an alias. -exchange: str # Alias for `sourceExchange`. -``` - ---- -### `EventFetchParams` - - - -```python -@dataclass -class EventFetchParams: -query: str # For keyword search -limit: float # Maximum number of results to return -cursor: str # Opaque venue pagination cursor, where supported. -offset: float # Pagination offset — number of results to skip -sort: str # Sort order for results -status: str # Filter by event status (default: 'active', 'inactive' and 'closed' are interchangeable) -search_in: str # Where to search (default: 'title') -event_id: str # Direct lookup by event ID -slug: str # Lookup by event slug -series: str # Filter events by their parent series. Accepts the venue-native series id / ticker / slug (e.g. Kalshi `"KXATPMATCH"`, Polymarket `"wta"`). Passed through to the vendor where supported, otherwise applied to `sourceMetadata` after fetch. -filter: Any # Optional client-side filter applied after fetching -category: str # Filter by category. Each event belongs to a venue-assigned category such as "Sports", "Politics", "Crypto", "Bitcoin", "Soccer", "Economic Policy" (Polymarket) or "Sports", "Mentions" (Kalshi). -tags: List[str] # Filter by tags. Returns events matching ANY of the provided tags. Tags are more specific than categories -- for example a "Politics" event might carry tags ["Politics", "Geopolitics", "Middle East", "Iran"]. Common tags include "Crypto", "Elections", "Fed Rates", "FIFA World Cup", "Trump". -source_exchange: str # Filter by source venue (e.g. 'polymarket', 'kalshi', 'myriad'). `exchange` is an alias. -exchange: str # Alias for `sourceExchange`. -``` - ---- -### `HistoryFilterParams` - -Deprecated - use OHLCVParams or TradesParams instead. Resolution is optional for backward compatibility. - -```python -@dataclass -class HistoryFilterParams: -resolution: str # Optional for backward compatibility -start: str # Start of the time range -end: str # End of the time range -limit: float # Maximum number of results to return -``` - ---- -### `OHLCVParams` - - - -```python -@dataclass -class OHLCVParams: -resolution: str # Required for candle aggregation -start: str # Start of the time range -end: str # End of the time range -limit: float # Maximum number of results to return -``` - ---- -### `FetchOrderBookParams` - - - -```python -@dataclass -class FetchOrderBookParams: -side: str # Outcome side: 'yes' or 'no'. Required for exchanges like Limitless where the API returns a single orderbook per market. -outcome: str # Outcome alias: 'yes' or 'no', or an outcome token ID. When set, the first argument is treated as a market ID and this value selects which outcome's order book to fetch. Accepts the literal strings 'yes'/'no' (resolved via a market lookup) or a raw outcome token ID. -since: float # Unix timestamp (ms) — fetch a historical snapshot at or before this time, or the start of a range when combined with `until` (hosted API only). -until: float # Unix timestamp (ms) — end of a historical range. When combined with `since`, returns an array of reconstructed L2 OrderBook snapshots between `since` and `until` (hosted API only). -``` - ---- -### `TradesParams` - - - -```python -@dataclass -class TradesParams: -start: str # Start of the time range -end: str # End of the time range -limit: float # Maximum number of results to return (max {@link MAX_TRADES_LIMIT}) -``` - ---- -### `CreateOrderParams` - - - -```python -@dataclass -class CreateOrderParams: -market_id: str # The market to trade on. -outcome_id: str # The outcome to trade. -side: str # Order side: buy or sell. -type: str # Order type: market (execute immediately) or limit (resting at a price). -amount: float # Size of the order in contracts/shares. -price: float # Required for limit orders -denom: str # Hosted mode: amount unit. -slippage_pct: float # Hosted mode: maximum market-order slippage percentage. -fee: float # Optional fee rate (e.g., 1000 for 0.1%) -tick_size: float # Optional override for Limitless/Polymarket -neg_risk: bool # Optional override to skip neg-risk lookup (Polymarket) -on_behalf_of: float # Limitless delegated signing: profile ID to trade on behalf of -``` - ---- -### `MyTradesParams` - - - -```python -@dataclass -class MyTradesParams: -outcome_id: str # filter to specific outcome/ticker -market_id: str # filter to specific market -since: str # Only return records after this date -until: str # Only return records before this date -limit: float # Maximum number of results to return -cursor: str # for Kalshi cursor pagination -``` - ---- -### `OrderHistoryParams` - - - -```python -@dataclass -class OrderHistoryParams: -market_id: str # required for Limitless (slug) -since: str # Only return records after this date -until: str # Only return records before this date -limit: float # Maximum number of results to return -cursor: str # Opaque pagination cursor from a previous response -``` - ---- -### `FetchMarketMatchesParams` - - - -```python -@dataclass -class FetchMarketMatchesParams: -query: str # Keyword search across matched market titles. -category: str # Filter matches by category. -market: Any # Pass a UnifiedMarket directly instead of marketId/slug/url. -market_id: str # Lookup a specific market by ID. Omit for browse mode. -slug: str # -url: str # -relation: str # -min_confidence: float # -limit: float # -include_prices: bool # -min_difference: float # Minimum price difference between venues. Browse mode only. -sort: str # Sort order. Browse mode only. -``` - ---- -### `FetchEventMatchesParams` - - - -```python -@dataclass -class FetchEventMatchesParams: -query: str # Keyword search across matched event titles. -category: str # Filter matches by category. -event: Any # Pass a UnifiedEvent directly instead of eventId/slug. -event_id: str # Lookup a specific event by ID. Omit for browse mode. -slug: str # -relation: str # -min_confidence: float # -limit: float # -include_prices: bool # -``` - ---- -### `FetchArbitrageParams` - - - -```python -@dataclass -class FetchArbitrageParams: -min_spread: float # -category: str # -limit: float # -relations: List[str] # Comma-separated relation types to include (default: 'identity'). -``` - ---- -### `FetchMatchedMarketsParams` - - - -```python -@dataclass -class FetchMatchedMarketsParams: -min_difference: float # -category: str # -limit: float # -relations: List[str] # Comma-separated relation types to include (default: 'identity'). -``` - ---- - -## Low-Level API Reference - -Advanced: call exchange-specific REST endpoints directly via `exchange.call_api(name, params)`. - -```python -# Example -result = exchange.call_api('operationName', {'param': 'value'}) -``` - -### Polymarket - -| `call_api()` name | Method | Path | Summary | Auth | -|-----------------|--------|------|---------|------| -| `getGammaStatus` | `GET` | `/status` | Gamma API Health check | Public | -| `listTeams` | `GET` | `/teams` | List teams | Public | -| `getSportsMetadata` | `GET` | `/sports` | Get sports metadata information | Public | -| `getSportsMarketTypes` | `GET` | `/sports/market-types` | Get valid sports market types | Public | -| `listTags` | `GET` | `/tags` | List tags | Public | -| `getTag` | `GET` | `/tags/{id}` | Get tag by id | Public | -| `getRelatedTagsById` | `GET` | `/tags/{id}/related-tags` | Get related tags (relationships) by tag id | Public | -| `getRelatedTagsBySlug` | `GET` | `/tags/slug/{slug}/related-tags` | Get related tags (relationships) by tag slug | Public | -| `getTagsRelatedToATagById` | `GET` | `/tags/{id}/related-tags/tags` | Get tags related to a tag id | Public | -| `getTagsRelatedToATagBySlug` | `GET` | `/tags/slug/{slug}/related-tags/tags` | Get tags related to a tag slug | Public | -| `listEvents` | `GET` | `/events` | List events | Public | -| `getEvent` | `GET` | `/events/{id}` | Get event by id | Public | -| `getEventTags` | `GET` | `/events/{id}/tags` | Get event tags | Public | -| `getEventBySlug` | `GET` | `/events/slug/{slug}` | Get event by slug | Public | -| `listMarkets` | `GET` | `/markets` | List markets | Public | -| `getMarket` | `GET` | `/markets/{id}` | Get market by id | Public | -| `getMarketTags` | `GET` | `/markets/{id}/tags` | Get market tags by id | Public | -| `getMarketBySlug` | `GET` | `/markets/slug/{slug}` | Get market by slug | Public | -| `listSeries` | `GET` | `/series` | List series | Public | -| `getSeries` | `GET` | `/series/{id}` | Get series by id | Public | -| `listComments` | `GET` | `/comments` | List comments | Public | -| `getCommentsById` | `GET` | `/comments/{id}` | Get comments by comment id | Public | -| `getPublicProfile` | `GET` | `/public-profile` | Get public profile by wallet address | Public | -| `publicSearch` | `GET` | `/public-search` | Search markets, events, and profiles | Public | -| `getBook` | `GET` | `/book` | Get order book summary | Public | -| `postBooks` | `POST` | `/books` | Get multiple order books summaries | Public | -| `getPrice` | `GET` | `/price` | Get market price | Public | -| `getPrices` | `GET` | `/prices` | Get multiple market prices | Public | -| `postPrices` | `POST` | `/prices` | Get multiple market prices by request | Public | -| `getMidpoint` | `GET` | `/midpoint` | Get midpoint price | Public | -| `postSpreads` | `POST` | `/spreads` | Get bid-ask spreads | Public | -| `getPricesHistory` | `GET` | `/prices-history` | Get price history for a traded token | Public | -| `getMarketsByToken` | `GET` | `/markets-by-token/{token_id}` | Get market by token | Public | -| `postAuthApiKey` | `POST` | `/auth/api-key` | Create API Key | Required | -| `getAuthDeriveApiKey` | `GET` | `/auth/derive-api-key` | Derive API Key | Required | -| `postOrder` | `POST` | `/order` | Place Single Order | Required | -| `deleteOrder` | `DELETE` | `/order` | Cancel Single Order | Required | -| `postOrders` | `POST` | `/orders` | Place Multiple Orders (Batch) | Required | -| `deleteOrders` | `DELETE` | `/orders` | Cancel Multiple Orders | Required | -| `deleteCancelAll` | `DELETE` | `/cancel-all` | Cancel All Orders | Required | -| `deleteCancelMarketOrders` | `DELETE` | `/cancel-market-orders` | Cancel Market Orders | Required | -| `postV1Heartbeats` | `POST` | `/v1/heartbeats` | Refresh authenticated session heartbeat | Required | -| `getDataOrder` | `GET` | `/data/order/{id}` | Get Order | Required | -| `getDataOrders` | `GET` | `/data/orders` | Get Active Orders | Required | -| `getDataTrades` | `GET` | `/data/trades` | Get Trades | Required | -| `getOrderScoring` | `GET` | `/order-scoring` | Check Order Reward Scoring | Required | -| `postOrdersScoring` | `POST` | `/orders-scoring` | Check Multiple Orders Scoring | Required | -| `updateBalanceAllowance` | `GET` | `/balance-allowance/update` | Update balance and allowance cache | Required | -| `getGeoblock` | `GET` | `/geoblock` | Check Geoblock Status | Public | -| `getDataApiHealth` | `GET` | `/` | Data API Health check | Public | -| `getPositions` | `GET` | `/positions` | Get current positions for a user | Public | -| `getV1AccountingSnapshot` | `GET` | `/v1/accounting/snapshot` | Download an accounting snapshot (ZIP of CSVs) | Public | -| `getTraded` | `GET` | `/traded` | Get total markets a user has traded | Public | -| `getOi` | `GET` | `/oi` | Get open interest | Public | -| `getLiveVolume` | `GET` | `/live-volume` | Get live volume for an event | Public | -| `getTrades` | `GET` | `/trades` | Get trades for a user or markets | Public | -| `getActivity` | `GET` | `/activity` | Get user activity | Public | -| `getHolders` | `GET` | `/holders` | Get top holders for markets | Public | -| `getValue` | `GET` | `/value` | Get total value of a user's positions | Public | -| `getClosedPositions` | `GET` | `/closed-positions` | Get closed positions for a user | Public | -| `getV1MarketPositions` | `GET` | `/v1/market-positions` | Get positions for a market | Public | -| `getV1Leaderboard` | `GET` | `/v1/leaderboard` | Get trader leaderboard rankings | Public | -| `getV1BuildersLeaderboard` | `GET` | `/v1/builders/leaderboard` | Get aggregated builder leaderboard | Public | - -#### Endpoint Details - -##### `getGammaStatus` - -**GET** `/status` - -Gamma API Health check - - ---- -##### `listTeams` - -**GET** `/teams` - -List teams - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `league` (query, array) -- `name` (query, array) -- `abbreviation` (query, array) - ---- -##### `getSportsMetadata` - -**GET** `/sports` - -Get sports metadata information - - ---- -##### `getSportsMarketTypes` - -**GET** `/sports/market-types` - -Get valid sports market types - - ---- -##### `listTags` - -**GET** `/tags` - -List tags - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `include_template` (query, boolean) -- `is_carousel` (query, boolean) - ---- -##### `getTag` - -**GET** `/tags/{id}` - -Get tag by id - -**Parameters:** -- `` (, string) -- `include_template` (query, boolean) - ---- -##### `getRelatedTagsById` - -**GET** `/tags/{id}/related-tags` - -Get related tags (relationships) by tag id - -**Parameters:** -- `` (, string) -- `omit_empty` (query, boolean) -- `status` (query, string) — enum: `active,closed,all` - ---- -##### `getRelatedTagsBySlug` - -**GET** `/tags/slug/{slug}/related-tags` - -Get related tags (relationships) by tag slug - -**Parameters:** -- `` (, string) -- `omit_empty` (query, boolean) -- `status` (query, string) — enum: `active,closed,all` - ---- -##### `getTagsRelatedToATagById` - -**GET** `/tags/{id}/related-tags/tags` - -Get tags related to a tag id - -**Parameters:** -- `` (, string) -- `omit_empty` (query, boolean) -- `status` (query, string) — enum: `active,closed,all` - ---- -##### `getTagsRelatedToATagBySlug` - -**GET** `/tags/slug/{slug}/related-tags/tags` - -Get tags related to a tag slug - -**Parameters:** -- `` (, string) -- `omit_empty` (query, boolean) -- `status` (query, string) — enum: `active,closed,all` - ---- -##### `listEvents` - -**GET** `/events` - -List events - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `id` (query, array) -- `tag_id` (query, integer) -- `exclude_tag_id` (query, array) -- `slug` (query, array) -- `tag_slug` (query, string) -- `related_tags` (query, boolean) -- `active` (query, boolean) -- `archived` (query, boolean) -- `featured` (query, boolean) -- `cyom` (query, boolean) -- `include_chat` (query, boolean) -- `include_template` (query, boolean) -- `recurrence` (query, string) -- `closed` (query, boolean) -- `liquidity_min` (query, number) -- `liquidity_max` (query, number) -- `volume_min` (query, number) -- `volume_max` (query, number) -- `start_date_min` (query, string) -- `start_date_max` (query, string) -- `end_date_min` (query, string) -- `end_date_max` (query, string) - ---- -##### `getEvent` - -**GET** `/events/{id}` - -Get event by id - -**Parameters:** -- `` (, string) -- `include_chat` (query, boolean) -- `include_template` (query, boolean) - ---- -##### `getEventTags` - -**GET** `/events/{id}/tags` - -Get event tags - -**Parameters:** -- `` (, string) - ---- -##### `getEventBySlug` - -**GET** `/events/slug/{slug}` - -Get event by slug - -**Parameters:** -- `` (, string) -- `include_chat` (query, boolean) -- `include_template` (query, boolean) - ---- -##### `listMarkets` - -**GET** `/markets` - -List markets - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `id` (query, array) -- `slug` (query, array) -- `clob_token_ids` (query, array) -- `condition_ids` (query, array) -- `market_maker_address` (query, array) -- `liquidity_num_min` (query, number) -- `liquidity_num_max` (query, number) -- `volume_num_min` (query, number) -- `volume_num_max` (query, number) -- `start_date_min` (query, string) -- `start_date_max` (query, string) -- `end_date_min` (query, string) -- `end_date_max` (query, string) -- `tag_id` (query, integer) -- `related_tags` (query, boolean) -- `cyom` (query, boolean) -- `uma_resolution_status` (query, string) -- `game_id` (query, string) -- `sports_market_types` (query, array) -- `rewards_min_size` (query, number) -- `question_ids` (query, array) -- `include_tag` (query, boolean) -- `closed` (query, boolean) - ---- -##### `getMarket` - -**GET** `/markets/{id}` - -Get market by id - -**Parameters:** -- `` (, string) -- `include_tag` (query, boolean) - ---- -##### `getMarketTags` - -**GET** `/markets/{id}/tags` - -Get market tags by id - -**Parameters:** -- `` (, string) - ---- -##### `getMarketBySlug` - -**GET** `/markets/slug/{slug}` - -Get market by slug - -**Parameters:** -- `` (, string) -- `include_tag` (query, boolean) - ---- -##### `listSeries` - -**GET** `/series` - -List series - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `slug` (query, array) -- `categories_ids` (query, array) -- `categories_labels` (query, array) -- `closed` (query, boolean) -- `include_chat` (query, boolean) -- `recurrence` (query, string) - ---- -##### `getSeries` - -**GET** `/series/{id}` - -Get series by id - -**Parameters:** -- `` (, string) -- `include_chat` (query, boolean) - ---- -##### `listComments` - -**GET** `/comments` - -List comments - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `parent_entity_type` (query, string) — enum: `Event,Series,market` -- `parent_entity_id` (query, integer) -- `get_positions` (query, boolean) -- `holders_only` (query, boolean) - ---- -##### `getCommentsById` - -**GET** `/comments/{id}` - -Get comments by comment id - -**Parameters:** -- `id` (path, integer) **required** -- `get_positions` (query, boolean) - ---- -##### `getPublicProfile` - -**GET** `/public-profile` - -Get public profile by wallet address - -**Parameters:** -- `address` (query, string) **required** — The wallet address (proxy wallet or user address) - ---- -##### `publicSearch` - -**GET** `/public-search` - -Search markets, events, and profiles - -**Parameters:** -- `q` (query, string) **required** -- `cache` (query, boolean) -- `events_status` (query, string) -- `limit_per_type` (query, integer) -- `page` (query, integer) -- `events_tag` (query, array) -- `keep_closed_markets` (query, integer) -- `sort` (query, string) -- `ascending` (query, boolean) -- `search_tags` (query, boolean) -- `search_profiles` (query, boolean) -- `recurrence` (query, string) -- `exclude_tag_id` (query, array) -- `optimized` (query, boolean) - ---- -##### `getBook` - -**GET** `/book` - -Get order book summary - -**Parameters:** -- `token_id` (query, string) **required** - ---- -##### `postBooks` - -**POST** `/books` - -Get multiple order books summaries - - ---- -##### `getPrice` - -**GET** `/price` - -Get market price - -**Parameters:** -- `token_id` (query, string) **required** -- `side` (query, string) **required** — enum: `BUY,SELL` - ---- -##### `getPrices` - -**GET** `/prices` - -Get multiple market prices - - ---- -##### `postPrices` - -**POST** `/prices` - -Get multiple market prices by request - - ---- -##### `getMidpoint` - -**GET** `/midpoint` - -Get midpoint price - -**Parameters:** -- `token_id` (query, string) **required** - ---- -##### `postSpreads` - -**POST** `/spreads` - -Get bid-ask spreads - - ---- -##### `getPricesHistory` - -**GET** `/prices-history` - -Get price history for a traded token - -**Parameters:** -- `market` (query, string) **required** -- `startTs` (query, number) -- `endTs` (query, number) -- `interval` (query, string) — enum: `1m,1w,1d,6h,1h,max` -- `fidelity` (query, number) - ---- -##### `getMarketsByToken` - -**GET** `/markets-by-token/{token_id}` - -Get market by token - -**Parameters:** -- `token_id` (path, string) **required** - ---- -##### `postAuthApiKey` - -**POST** `/auth/api-key` - -Create API Key *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `getAuthDeriveApiKey` - -**GET** `/auth/derive-api-key` - -Derive API Key *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `postOrder` - -**POST** `/order` - -Place Single Order *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `deleteOrder` - -**DELETE** `/order` - -Cancel Single Order *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `postOrders` - -**POST** `/orders` - -Place Multiple Orders (Batch) *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `deleteOrders` - -**DELETE** `/orders` - -Cancel Multiple Orders *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `deleteCancelAll` - -**DELETE** `/cancel-all` - -Cancel All Orders *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `deleteCancelMarketOrders` - -**DELETE** `/cancel-market-orders` - -Cancel Market Orders *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `postV1Heartbeats` - -**POST** `/v1/heartbeats` - -Refresh authenticated session heartbeat *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `getDataOrder` - -**GET** `/data/order/{id}` - -Get Order *(Auth required)* - -**Parameters:** -- `` (, string) -- `id` (path, string) **required** - ---- -##### `getDataOrders` - -**GET** `/data/orders` - -Get Active Orders *(Auth required)* - -**Parameters:** -- `` (, string) -- `id` (query, string) -- `market` (query, string) -- `asset_id` (query, string) -- `next_cursor` (query, string) — Cursor for keyset pagination - ---- -##### `getDataTrades` - -**GET** `/data/trades` - -Get Trades *(Auth required)* - -**Parameters:** -- `` (, string) -- `id` (query, string) -- `market` (query, string) -- `maker` (query, string) -- `taker` (query, string) -- `before` (query, string) -- `after` (query, string) - ---- -##### `getOrderScoring` - -**GET** `/order-scoring` - -Check Order Reward Scoring *(Auth required)* - -**Parameters:** -- `` (, string) -- `orderId` (query, string) **required** - ---- -##### `postOrdersScoring` - -**POST** `/orders-scoring` - -Check Multiple Orders Scoring *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `updateBalanceAllowance` - -**GET** `/balance-allowance/update` - -Update balance and allowance cache *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `getGeoblock` - -**GET** `/geoblock` - -Check Geoblock Status - - ---- -##### `getDataApiHealth` - -**GET** `/` - -Data API Health check - - ---- -##### `getPositions` - -**GET** `/positions` - -Get current positions for a user - -**Parameters:** -- `user` (query, string) **required** — User address (required) -- `market` (query, array) — Comma-separated list of condition IDs. Mutually exclusive with eventId. -- `eventId` (query, array) — Comma-separated list of event IDs. Mutually exclusive with market. -- `sizeThreshold` (query, number) -- `redeemable` (query, boolean) -- `mergeable` (query, boolean) -- `limit` (query, integer) -- `offset` (query, integer) -- `sortBy` (query, string) — enum: `CURRENT,INITIAL,TOKENS,CASHPNL,PERCENTPNL,TITLE,RESOLVING,PRICE,AVGPRICE` -- `sortDirection` (query, string) — enum: `ASC,DESC` -- `title` (query, string) - ---- -##### `getV1AccountingSnapshot` - -**GET** `/v1/accounting/snapshot` - -Download an accounting snapshot (ZIP of CSVs) - -**Parameters:** -- `user` (query, string) **required** — User address (0x-prefixed) - ---- -##### `getTraded` - -**GET** `/traded` - -Get total markets a user has traded - -**Parameters:** -- `user` (query, string) **required** - ---- -##### `getOi` - -**GET** `/oi` - -Get open interest - -**Parameters:** -- `market` (query, array) - ---- -##### `getLiveVolume` - -**GET** `/live-volume` - -Get live volume for an event - -**Parameters:** -- `id` (query, integer) **required** - ---- -##### `getTrades` - -**GET** `/trades` - -Get trades for a user or markets - -**Parameters:** -- `limit` (query, integer) -- `offset` (query, integer) -- `takerOnly` (query, boolean) -- `filterType` (query, string) — Must be provided together with filterAmount. — enum: `CASH,TOKENS` -- `filterAmount` (query, number) — Must be provided together with filterType. -- `market` (query, array) — Comma-separated list of condition IDs. Mutually exclusive with eventId. -- `eventId` (query, array) — Comma-separated list of event IDs. Mutually exclusive with market. -- `user` (query, string) -- `side` (query, string) — enum: `BUY,SELL` - ---- -##### `getActivity` - -**GET** `/activity` - -Get user activity - -**Parameters:** -- `limit` (query, integer) -- `offset` (query, integer) -- `user` (query, string) **required** -- `market` (query, array) — Comma-separated list of condition IDs. Mutually exclusive with eventId. -- `eventId` (query, array) — Comma-separated list of event IDs. Mutually exclusive with market. -- `type` (query, array) -- `start` (query, integer) -- `end` (query, integer) -- `sortBy` (query, string) — enum: `TIMESTAMP,TOKENS,CASH` -- `sortDirection` (query, string) — enum: `ASC,DESC` -- `side` (query, string) — enum: `BUY,SELL` - ---- -##### `getHolders` - -**GET** `/holders` - -Get top holders for markets - -**Parameters:** -- `limit` (query, integer) — Maximum number of holders to return per token. Capped at 20. -- `market` (query, array) **required** — Comma-separated list of condition IDs. -- `minBalance` (query, integer) - ---- -##### `getValue` - -**GET** `/value` - -Get total value of a user's positions - -**Parameters:** -- `user` (query, string) **required** -- `market` (query, array) - ---- -##### `getClosedPositions` - -**GET** `/closed-positions` - -Get closed positions for a user - -**Parameters:** -- `user` (query, string) **required** — The address of the user in question -- `market` (query, array) — The conditionId of the market in question. Supports multiple csv separated values. Cannot be used with the eventId param. -- `title` (query, string) — Filter by market title -- `eventId` (query, array) — The event id of the event in question. Supports multiple csv separated values. Returns positions for all markets for those event ids. Cannot be used with the market param. -- `limit` (query, integer) — The max number of positions to return -- `offset` (query, integer) — The starting index for pagination -- `sortBy` (query, string) — The sort criteria — enum: `REALIZEDPNL,TITLE,PRICE,AVGPRICE,TIMESTAMP` -- `sortDirection` (query, string) — The sort direction — enum: `ASC,DESC` - ---- -##### `getV1MarketPositions` - -**GET** `/v1/market-positions` - -Get positions for a market - -**Parameters:** -- `market` (query, string) **required** — The condition ID of the market to query positions for -- `user` (query, string) — Filter to a single user by proxy wallet address -- `status` (query, string) — Filter positions by status. -- `OPEN` — Only positions with size > 0.01 -- `CLOSED` — Only positions with size <= 0.01 -- `ALL` — All positions regardless of size - — enum: `OPEN,CLOSED,ALL` -- `sortBy` (query, string) — Sort positions by: -- `TOKENS` — Position size (number of tokens) -- `CASH_PNL` — Unrealized cash PnL -- `REALIZED_PNL` — Realized PnL -- `TOTAL_PNL` — Total PnL (cash_pnl + realized_pnl) - — enum: `TOKENS,CASH_PNL,REALIZED_PNL,TOTAL_PNL` -- `sortDirection` (query, string) — enum: `ASC,DESC` -- `limit` (query, integer) — Max number of positions to return per outcome token -- `offset` (query, integer) — Pagination offset per outcome token - ---- -##### `getV1Leaderboard` - -**GET** `/v1/leaderboard` - -Get trader leaderboard rankings - -**Parameters:** -- `category` (query, string) — Market category for the leaderboard — enum: `OVERALL,POLITICS,SPORTS,CRYPTO,CULTURE,MENTIONS,WEATHER,ECONOMICS,TECH,FINANCE` -- `timePeriod` (query, string) — Time period for leaderboard results — enum: `DAY,WEEK,MONTH,ALL` -- `orderBy` (query, string) — Leaderboard ordering criteria — enum: `PNL,VOL` -- `limit` (query, integer) — Max number of leaderboard traders to return -- `offset` (query, integer) — Starting index for pagination -- `user` (query, string) — Limit leaderboard to a single user by address -- `userName` (query, string) — Limit leaderboard to a single username - ---- -##### `getV1BuildersLeaderboard` - -**GET** `/v1/builders/leaderboard` - -Get aggregated builder leaderboard - -**Parameters:** -- `timePeriod` (query, string) — The time period to aggregate results over. - — enum: `DAY,WEEK,MONTH,ALL` -- `limit` (query, string) - ---- -### Kalshi - -| `call_api()` name | Method | Path | Summary | Auth | -|-----------------|--------|------|---------|------| -| `GetHistoricalCutoff` | `GET` | `/historical/cutoff` | Get Historical Cutoff Timestamps | Public | -| `GetMarketCandlesticksHistorical` | `GET` | `/historical/markets/{ticker}/candlesticks` | Get Historical Market Candlesticks | Public | -| `GetFillsHistorical` | `GET` | `/historical/fills` | Get Historical Fills | Required | -| `GetHistoricalOrders` | `GET` | `/historical/orders` | Get Historical Orders | Required | -| `GetHistoricalMarkets` | `GET` | `/historical/markets` | Get Historical Markets | Public | -| `GetHistoricalMarket` | `GET` | `/historical/markets/{ticker}` | Get Historical Market | Public | -| `GetExchangeStatus` | `GET` | `/exchange/status` | Get Exchange Status | Public | -| `GetExchangeAnnouncements` | `GET` | `/exchange/announcements` | Get Exchange Announcements | Public | -| `GetSeriesFeeChanges` | `GET` | `/series/fee_changes` | Get Series Fee Changes | Public | -| `GetExchangeSchedule` | `GET` | `/exchange/schedule` | Get Exchange Schedule | Public | -| `GetUserDataTimestamp` | `GET` | `/exchange/user_data_timestamp` | Get User Data Timestamp | Public | -| `GetOrders` | `GET` | `/portfolio/orders` | Get Orders | Required | -| `CreateOrder` | `POST` | `/portfolio/orders` | Create Order | Required | -| `GetOrder` | `GET` | `/portfolio/orders/{order_id}` | Get Order | Required | -| `CancelOrder` | `DELETE` | `/portfolio/orders/{order_id}` | Cancel Order | Required | -| `BatchCreateOrders` | `POST` | `/portfolio/orders/batched` | Batch Create Orders | Required | -| `BatchCancelOrders` | `DELETE` | `/portfolio/orders/batched` | Batch Cancel Orders | Required | -| `AmendOrder` | `POST` | `/portfolio/orders/{order_id}/amend` | Amend Order | Required | -| `DecreaseOrder` | `POST` | `/portfolio/orders/{order_id}/decrease` | Decrease Order | Required | -| `GetOrderQueuePositions` | `GET` | `/portfolio/orders/queue_positions` | Get Queue Positions for Orders | Required | -| `GetOrderQueuePosition` | `GET` | `/portfolio/orders/{order_id}/queue_position` | Get Order Queue Position | Required | -| `GetOrderGroups` | `GET` | `/portfolio/order_groups` | Get Order Groups | Required | -| `CreateOrderGroup` | `POST` | `/portfolio/order_groups/create` | Create Order Group | Required | -| `GetOrderGroup` | `GET` | `/portfolio/order_groups/{order_group_id}` | Get Order Group | Required | -| `DeleteOrderGroup` | `DELETE` | `/portfolio/order_groups/{order_group_id}` | Delete Order Group | Required | -| `ResetOrderGroup` | `PUT` | `/portfolio/order_groups/{order_group_id}/reset` | Reset Order Group | Required | -| `TriggerOrderGroup` | `PUT` | `/portfolio/order_groups/{order_group_id}/trigger` | Trigger Order Group | Required | -| `UpdateOrderGroupLimit` | `PUT` | `/portfolio/order_groups/{order_group_id}/limit` | Update Order Group Limit | Required | -| `GetBalance` | `GET` | `/portfolio/balance` | Get Balance | Required | -| `CreateSubaccount` | `POST` | `/portfolio/subaccounts` | Create Subaccount | Required | -| `ApplySubaccountTransfer` | `POST` | `/portfolio/subaccounts/transfer` | Transfer Between Subaccounts | Required | -| `GetSubaccountBalances` | `GET` | `/portfolio/subaccounts/balances` | Get All Subaccount Balances | Required | -| `GetSubaccountTransfers` | `GET` | `/portfolio/subaccounts/transfers` | Get Subaccount Transfers | Required | -| `GetPositions` | `GET` | `/portfolio/positions` | Get Positions | Required | -| `GetSettlements` | `GET` | `/portfolio/settlements` | Get Settlements | Required | -| `GetPortfolioRestingOrderTotalValue` | `GET` | `/portfolio/summary/total_resting_order_value` | Get Total Resting Order Value | Required | -| `GetFills` | `GET` | `/portfolio/fills` | Get Fills | Required | -| `GetApiKeys` | `GET` | `/api_keys` | Get API Keys | Required | -| `CreateApiKey` | `POST` | `/api_keys` | Create API Key | Required | -| `GenerateApiKey` | `POST` | `/api_keys/generate` | Generate API Key | Required | -| `DeleteApiKey` | `DELETE` | `/api_keys/{api_key}` | Delete API Key | Required | -| `GetTagsForSeriesCategories` | `GET` | `/search/tags_by_categories` | Get Tags for Series Categories | Public | -| `GetFiltersForSports` | `GET` | `/search/filters_by_sport` | Get Filters for Sports | Public | -| `GetAccountApiLimits` | `GET` | `/account/limits` | Get Account API Limits | Required | -| `GetMarketCandlesticks` | `GET` | `/series/{series_ticker}/markets/{ticker}/candlesticks` | Get Market Candlesticks | Public | -| `GetTrades` | `GET` | `/markets/trades` | Get Trades | Public | -| `GetMarketCandlesticksByEvent` | `GET` | `/series/{series_ticker}/events/{ticker}/candlesticks` | Get Event Candlesticks | Public | -| `GetEvents` | `GET` | `/events` | Get Events | Public | -| `GetMultivariateEvents` | `GET` | `/events/multivariate` | Get Multivariate Events | Public | -| `GetEvent` | `GET` | `/events/{event_ticker}` | Get Event | Public | -| `GetEventMetadata` | `GET` | `/events/{event_ticker}/metadata` | Get Event Metadata | Public | -| `GetEventForecastPercentilesHistory` | `GET` | `/series/{series_ticker}/events/{ticker}/forecast_percentile_history` | Get Event Forecast Percentile History | Required | -| `GetLiveData` | `GET` | `/live_data/{type}/milestone/{milestone_id}` | Get Live Data | Public | -| `GetLiveDatas` | `GET` | `/live_data/batch` | Get Multiple Live Data | Public | -| `GetIncentivePrograms` | `GET` | `/incentive_programs` | Get Incentives | Public | -| `GetFCMOrders` | `GET` | `/fcm/orders` | Get FCM Orders | Required | -| `GetFCMPositions` | `GET` | `/fcm/positions` | Get FCM Positions | Required | -| `GetStructuredTargets` | `GET` | `/structured_targets` | Get Structured Targets | Public | -| `GetStructuredTarget` | `GET` | `/structured_targets/{structured_target_id}` | Get Structured Target | Public | -| `GetMarketOrderbook` | `GET` | `/markets/{ticker}/orderbook` | Get Market Orderbook | Required | -| `GetMarketOrderbooks` | `GET` | `/markets/orderbooks` | Get Multiple Market Orderbooks | Required | -| `GetMilestone` | `GET` | `/milestones/{milestone_id}` | Get Milestone | Public | -| `GetMilestones` | `GET` | `/milestones` | Get Milestones | Public | -| `GetCommunicationsID` | `GET` | `/communications/id` | Get Communications ID | Required | -| `GetRFQs` | `GET` | `/communications/rfqs` | Get RFQs | Required | -| `CreateRFQ` | `POST` | `/communications/rfqs` | Create RFQ | Required | -| `GetRFQ` | `GET` | `/communications/rfqs/{rfq_id}` | Get RFQ | Required | -| `DeleteRFQ` | `DELETE` | `/communications/rfqs/{rfq_id}` | Delete RFQ | Required | -| `GetQuotes` | `GET` | `/communications/quotes` | Get Quotes | Required | -| `CreateQuote` | `POST` | `/communications/quotes` | Create Quote | Required | -| `GetQuote` | `GET` | `/communications/quotes/{quote_id}` | Get Quote | Required | -| `DeleteQuote` | `DELETE` | `/communications/quotes/{quote_id}` | Delete Quote | Required | -| `AcceptQuote` | `PUT` | `/communications/quotes/{quote_id}/accept` | Accept Quote | Required | -| `ConfirmQuote` | `PUT` | `/communications/quotes/{quote_id}/confirm` | Confirm Quote | Required | -| `GetMultivariateEventCollection` | `GET` | `/multivariate_event_collections/{collection_ticker}` | Get Multivariate Event Collection | Public | -| `CreateMarketInMultivariateEventCollection` | `POST` | `/multivariate_event_collections/{collection_ticker}` | Create Market In Multivariate Event Collection | Required | -| `GetMultivariateEventCollections` | `GET` | `/multivariate_event_collections` | Get Multivariate Event Collections | Public | -| `LookupTickersForMarketInMultivariateEventCollection` | `PUT` | `/multivariate_event_collections/{collection_ticker}/lookup` | Lookup Tickers For Market In Multivariate Event Collection | Required | -| `GetMultivariateEventCollectionLookupHistory` | `GET` | `/multivariate_event_collections/{collection_ticker}/lookup` | Get Multivariate Event Collection Lookup History | Public | -| `GetSeries` | `GET` | `/series/{series_ticker}` | Get Series | Public | -| `GetSeriesList` | `GET` | `/series` | Get Series List | Public | -| `GetMarkets` | `GET` | `/markets` | Get Markets | Public | -| `GetMarket` | `GET` | `/markets/{ticker}` | Get Market | Public | -| `BatchGetMarketCandlesticks` | `GET` | `/markets/candlesticks` | Batch Get Market Candlesticks | Public | - -#### Endpoint Details - -##### `GetHistoricalCutoff` - -**GET** `/historical/cutoff` - -Get Historical Cutoff Timestamps - - ---- -##### `GetMarketCandlesticksHistorical` - -**GET** `/historical/markets/{ticker}/candlesticks` - -Get Historical Market Candlesticks - -**Parameters:** -- `ticker` (path, string) **required** — Market ticker - unique identifier for the specific market -- `start_ts` (query, integer) **required** — Start timestamp (Unix timestamp). Candlesticks will include those ending on or after this time. -- `end_ts` (query, integer) **required** — End timestamp (Unix timestamp). Candlesticks will include those ending on or before this time. -- `period_interval` (query, integer) **required** — Time period length of each candlestick in minutes. Valid values are 1 (1 minute), 60 (1 hour), or 1440 (1 day). — enum: `1,60,1440` - ---- -##### `GetFillsHistorical` - -**GET** `/historical/fills` - -Get Historical Fills *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetHistoricalOrders` - -**GET** `/historical/orders` - -Get Historical Orders *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetHistoricalMarkets` - -**GET** `/historical/markets` - -Get Historical Markets - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetHistoricalMarket` - -**GET** `/historical/markets/{ticker}` - -Get Historical Market - -**Parameters:** -- `` (, string) - ---- -##### `GetExchangeStatus` - -**GET** `/exchange/status` - -Get Exchange Status - - ---- -##### `GetExchangeAnnouncements` - -**GET** `/exchange/announcements` - -Get Exchange Announcements - - ---- -##### `GetSeriesFeeChanges` - -**GET** `/series/fee_changes` - -Get Series Fee Changes - -**Parameters:** -- `series_ticker` (query, string) -- `show_historical` (query, boolean) - ---- -##### `GetExchangeSchedule` - -**GET** `/exchange/schedule` - -Get Exchange Schedule - - ---- -##### `GetUserDataTimestamp` - -**GET** `/exchange/user_data_timestamp` - -Get User Data Timestamp - - ---- -##### `GetOrders` - -**GET** `/portfolio/orders` - -Get Orders *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `CreateOrder` - -**POST** `/portfolio/orders` - -Create Order *(Auth required)* - - ---- -##### `GetOrder` - -**GET** `/portfolio/orders/{order_id}` - -Get Order *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `CancelOrder` - -**DELETE** `/portfolio/orders/{order_id}` - -Cancel Order *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) - ---- -##### `BatchCreateOrders` - -**POST** `/portfolio/orders/batched` - -Batch Create Orders *(Auth required)* - - ---- -##### `BatchCancelOrders` - -**DELETE** `/portfolio/orders/batched` - -Batch Cancel Orders *(Auth required)* - - ---- -##### `AmendOrder` - -**POST** `/portfolio/orders/{order_id}/amend` - -Amend Order *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `DecreaseOrder` - -**POST** `/portfolio/orders/{order_id}/decrease` - -Decrease Order *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `GetOrderQueuePositions` - -**GET** `/portfolio/orders/queue_positions` - -Get Queue Positions for Orders *(Auth required)* - -**Parameters:** -- `market_tickers` (query, string) — Comma-separated list of market tickers to filter by -- `event_ticker` (query, string) — Event ticker to filter by -- `` (, string) - ---- -##### `GetOrderQueuePosition` - -**GET** `/portfolio/orders/{order_id}/queue_position` - -Get Order Queue Position *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `GetOrderGroups` - -**GET** `/portfolio/order_groups` - -Get Order Groups *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `CreateOrderGroup` - -**POST** `/portfolio/order_groups/create` - -Create Order Group *(Auth required)* - - ---- -##### `GetOrderGroup` - -**GET** `/portfolio/order_groups/{order_group_id}` - -Get Order Group *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) - ---- -##### `DeleteOrderGroup` - -**DELETE** `/portfolio/order_groups/{order_group_id}` - -Delete Order Group *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) - ---- -##### `ResetOrderGroup` - -**PUT** `/portfolio/order_groups/{order_group_id}/reset` - -Reset Order Group *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) - ---- -##### `TriggerOrderGroup` - -**PUT** `/portfolio/order_groups/{order_group_id}/trigger` - -Trigger Order Group *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) - ---- -##### `UpdateOrderGroupLimit` - -**PUT** `/portfolio/order_groups/{order_group_id}/limit` - -Update Order Group Limit *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `GetBalance` - -**GET** `/portfolio/balance` - -Get Balance *(Auth required)* - -**Parameters:** -- `subaccount` (query, integer) — Subaccount number (0 for primary, 1-32 for subaccounts). When provided, returns only that subaccount's balance. - ---- -##### `CreateSubaccount` - -**POST** `/portfolio/subaccounts` - -Create Subaccount *(Auth required)* - - ---- -##### `ApplySubaccountTransfer` - -**POST** `/portfolio/subaccounts/transfer` - -Transfer Between Subaccounts *(Auth required)* - - ---- -##### `GetSubaccountBalances` - -**GET** `/portfolio/subaccounts/balances` - -Get All Subaccount Balances *(Auth required)* - - ---- -##### `GetSubaccountTransfers` - -**GET** `/portfolio/subaccounts/transfers` - -Get Subaccount Transfers *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) - ---- -##### `GetPositions` - -**GET** `/portfolio/positions` - -Get Positions *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetSettlements` - -**GET** `/portfolio/settlements` - -Get Settlements *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetPortfolioRestingOrderTotalValue` - -**GET** `/portfolio/summary/total_resting_order_value` - -Get Total Resting Order Value *(Auth required)* - - ---- -##### `GetFills` - -**GET** `/portfolio/fills` - -Get Fills *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetApiKeys` - -**GET** `/api_keys` - -Get API Keys *(Auth required)* - - ---- -##### `CreateApiKey` - -**POST** `/api_keys` - -Create API Key *(Auth required)* - - ---- -##### `GenerateApiKey` - -**POST** `/api_keys/generate` - -Generate API Key *(Auth required)* - - ---- -##### `DeleteApiKey` - -**DELETE** `/api_keys/{api_key}` - -Delete API Key *(Auth required)* - -**Parameters:** -- `api_key` (path, string) **required** — API key ID to delete - ---- -##### `GetTagsForSeriesCategories` - -**GET** `/search/tags_by_categories` - -Get Tags for Series Categories - - ---- -##### `GetFiltersForSports` - -**GET** `/search/filters_by_sport` - -Get Filters for Sports - - ---- -##### `GetAccountApiLimits` - -**GET** `/account/limits` - -Get Account API Limits *(Auth required)* - - ---- -##### `GetMarketCandlesticks` - -**GET** `/series/{series_ticker}/markets/{ticker}/candlesticks` - -Get Market Candlesticks - -**Parameters:** -- `series_ticker` (path, string) **required** — Series ticker - the series that contains the target market -- `ticker` (path, string) **required** — Market ticker - unique identifier for the specific market -- `start_ts` (query, integer) **required** — Start timestamp (Unix timestamp). Candlesticks will include those ending on or after this time. -- `end_ts` (query, integer) **required** — End timestamp (Unix timestamp). Candlesticks will include those ending on or before this time. -- `period_interval` (query, integer) **required** — Time period length of each candlestick in minutes. Valid values are 1 (1 minute), 60 (1 hour), or 1440 (1 day). — enum: `1,60,1440` -- `include_latest_before_start` (query, boolean) — If true, prepends the latest candlestick available before the start_ts. This synthetic candlestick is created by: -1. Finding the most recent real candlestick before start_ts -2. Projecting it forward to the first period boundary (calculated as the next period interval after start_ts) -3. Setting all OHLC prices to null, and `previous_price` to the close price from the real candlestick - - ---- -##### `GetTrades` - -**GET** `/markets/trades` - -Get Trades - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetMarketCandlesticksByEvent` - -**GET** `/series/{series_ticker}/events/{ticker}/candlesticks` - -Get Event Candlesticks - -**Parameters:** -- `ticker` (path, string) **required** — The event ticker -- `series_ticker` (path, string) **required** — The series ticker -- `start_ts` (query, integer) **required** — Start timestamp for the range -- `end_ts` (query, integer) **required** — End timestamp for the range -- `period_interval` (query, integer) **required** — Specifies the length of each candlestick period, in minutes. Must be one minute, one hour, or one day. — enum: `1,60,1440` - ---- -##### `GetEvents` - -**GET** `/events` - -Get Events - -**Parameters:** -- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 200. Maximum value is 200. -- `cursor` (query, string) — Parameter to specify the pagination cursor. Use the cursor value returned from the previous response to get the next page of results. Leave empty for the first page. -- `with_nested_markets` (query, boolean) — Parameter to specify if nested markets should be included in the response. When true, each event will include a 'markets' field containing a list of Market objects associated with that event. -- `with_milestones` (query, boolean) — If true, includes related milestones as a field alongside events. -- `status` (query, string) — Filter by event status. Possible values are 'open', 'closed', 'settled'. Leave empty to return events with any status. — enum: `open,closed,settled` -- `` (, string) -- `min_close_ts` (query, integer) — Filter events with at least one market with close timestamp greater than this Unix timestamp (in seconds). - ---- -##### `GetMultivariateEvents` - -**GET** `/events/multivariate` - -Get Multivariate Events - -**Parameters:** -- `limit` (query, integer) — Number of results per page. Defaults to 100. Maximum value is 200. -- `cursor` (query, string) — Pagination cursor. Use the cursor value returned from the previous response to get the next page of results. -- `` (, string) -- `collection_ticker` (query, string) — Filter events by collection ticker. Returns only multivariate events belonging to the specified collection. Cannot be used together with series_ticker. -- `with_nested_markets` (query, boolean) — Parameter to specify if nested markets should be included in the response. When true, each event will include a 'markets' field containing a list of Market objects associated with that event. - ---- -##### `GetEvent` - -**GET** `/events/{event_ticker}` - -Get Event - -**Parameters:** -- `event_ticker` (path, string) **required** — Event ticker -- `with_nested_markets` (query, boolean) — If true, markets are included within the event object. If false (default), markets are returned as a separate top-level field in the response. - ---- -##### `GetEventMetadata` - -**GET** `/events/{event_ticker}/metadata` - -Get Event Metadata - -**Parameters:** -- `event_ticker` (path, string) **required** — Event ticker - ---- -##### `GetEventForecastPercentilesHistory` - -**GET** `/series/{series_ticker}/events/{ticker}/forecast_percentile_history` - -Get Event Forecast Percentile History *(Auth required)* - -**Parameters:** -- `ticker` (path, string) **required** — The event ticker -- `series_ticker` (path, string) **required** — The series ticker -- `percentiles` (query, array) **required** — Array of percentile values to retrieve (0-10000, max 10 values) -- `start_ts` (query, integer) **required** — Start timestamp for the range -- `end_ts` (query, integer) **required** — End timestamp for the range -- `period_interval` (query, integer) **required** — Specifies the length of each forecast period, in minutes. 0 for 5-second intervals, or 1, 60, or 1440 for minute-based intervals. — enum: `0,1,60,1440` - ---- -##### `GetLiveData` - -**GET** `/live_data/{type}/milestone/{milestone_id}` - -Get Live Data - -**Parameters:** -- `type` (path, string) **required** — Type of live data -- `milestone_id` (path, string) **required** — Milestone ID - ---- -##### `GetLiveDatas` - -**GET** `/live_data/batch` - -Get Multiple Live Data - -**Parameters:** -- `milestone_ids` (query, array) **required** — Array of milestone IDs - ---- -##### `GetIncentivePrograms` - -**GET** `/incentive_programs` - -Get Incentives - -**Parameters:** -- `status` (query, string) — Status filter. Can be "all", "active", "upcoming", "closed", or "paid_out". Default is "all". — enum: `all,active,upcoming,closed,paid_out` -- `type` (query, string) — Type filter. Can be "all", "liquidity", or "volume". Default is "all". — enum: `all,liquidity,volume` -- `limit` (query, integer) — Number of results per page. Defaults to 100. Maximum value is 10000. -- `cursor` (query, string) — Cursor for pagination - ---- -##### `GetFCMOrders` - -**GET** `/fcm/orders` - -Get FCM Orders *(Auth required)* - -**Parameters:** -- `subtrader_id` (query, string) **required** — Restricts the response to orders for a specific subtrader (FCM members only) -- `` (, string) -- `` (, string) -- `` (, string) -- `min_ts` (query, integer) — Restricts the response to orders after a timestamp, formatted as a Unix Timestamp -- `max_ts` (query, integer) — Restricts the response to orders before a timestamp, formatted as a Unix Timestamp -- `status` (query, string) — Restricts the response to orders that have a certain status — enum: `resting,canceled,executed` -- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 100 - ---- -##### `GetFCMPositions` - -**GET** `/fcm/positions` - -Get FCM Positions *(Auth required)* - -**Parameters:** -- `subtrader_id` (query, string) **required** — Restricts the response to positions for a specific subtrader (FCM members only) -- `ticker` (query, string) — Ticker of desired positions -- `event_ticker` (query, string) — Event ticker of desired positions -- `count_filter` (query, string) — Restricts the positions to those with any of following fields with non-zero values, as a comma separated list -- `settlement_status` (query, string) — Settlement status of the markets to return. Defaults to unsettled — enum: `all,unsettled,settled` -- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 100 -- `cursor` (query, string) — The Cursor represents a pointer to the next page of records in the pagination - ---- -##### `GetStructuredTargets` - -**GET** `/structured_targets` - -Get Structured Targets - -**Parameters:** -- `type` (query, string) — Filter by structured target type -- `competition` (query, string) — Filter by competition -- `page_size` (query, integer) — Number of items per page (min 1, max 2000, default 100) -- `cursor` (query, string) — Pagination cursor - ---- -##### `GetStructuredTarget` - -**GET** `/structured_targets/{structured_target_id}` - -Get Structured Target - -**Parameters:** -- `structured_target_id` (path, string) **required** — Structured target ID - ---- -##### `GetMarketOrderbook` - -**GET** `/markets/{ticker}/orderbook` - -Get Market Orderbook *(Auth required)* - -**Parameters:** -- `` (, string) -- `depth` (query, integer) — Depth of the orderbook to retrieve (0 or negative means all levels, 1-100 for specific depth) - ---- -##### `GetMarketOrderbooks` - -**GET** `/markets/orderbooks` - -Get Multiple Market Orderbooks *(Auth required)* - -**Parameters:** -- `tickers` (query, array) **required** — List of market tickers to fetch orderbooks for - ---- -##### `GetMilestone` - -**GET** `/milestones/{milestone_id}` - -Get Milestone - -**Parameters:** -- `milestone_id` (path, string) **required** — Milestone ID - ---- -##### `GetMilestones` - -**GET** `/milestones` - -Get Milestones - -**Parameters:** -- `limit` (query, integer) **required** — Number of milestones to return per page -- `minimum_start_date` (query, string) — Minimum start date to filter milestones. Format RFC3339 timestamp -- `category` (query, string) — Filter by milestone category -- `competition` (query, string) — Filter by competition -- `source_id` (query, string) — Filter by source id -- `type` (query, string) — Filter by milestone type -- `related_event_ticker` (query, string) — Filter by related event ticker -- `cursor` (query, string) — Pagination cursor. Use the cursor value returned from the previous response to get the next page of results - ---- -##### `GetCommunicationsID` - -**GET** `/communications/id` - -Get Communications ID *(Auth required)* - - ---- -##### `GetRFQs` - -**GET** `/communications/rfqs` - -Get RFQs *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 100. -- `status` (query, string) — Filter RFQs by status -- `creator_user_id` (query, string) — Filter RFQs by creator user ID - ---- -##### `CreateRFQ` - -**POST** `/communications/rfqs` - -Create RFQ *(Auth required)* - - ---- -##### `GetRFQ` - -**GET** `/communications/rfqs/{rfq_id}` - -Get RFQ *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `DeleteRFQ` - -**DELETE** `/communications/rfqs/{rfq_id}` - -Delete RFQ *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `GetQuotes` - -**GET** `/communications/quotes` - -Get Quotes *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 500. -- `status` (query, string) — Filter quotes by status -- `quote_creator_user_id` (query, string) — Filter quotes by quote creator user ID -- `rfq_creator_user_id` (query, string) — Filter quotes by RFQ creator user ID -- `rfq_creator_subtrader_id` (query, string) — Filter quotes by RFQ creator subtrader ID (FCM members only) -- `rfq_id` (query, string) — Filter quotes by RFQ ID - ---- -##### `CreateQuote` - -**POST** `/communications/quotes` - -Create Quote *(Auth required)* - - ---- -##### `GetQuote` - -**GET** `/communications/quotes/{quote_id}` - -Get Quote *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `DeleteQuote` - -**DELETE** `/communications/quotes/{quote_id}` - -Delete Quote *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `AcceptQuote` - -**PUT** `/communications/quotes/{quote_id}/accept` - -Accept Quote *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `ConfirmQuote` - -**PUT** `/communications/quotes/{quote_id}/confirm` - -Confirm Quote *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `GetMultivariateEventCollection` - -**GET** `/multivariate_event_collections/{collection_ticker}` - -Get Multivariate Event Collection - -**Parameters:** -- `collection_ticker` (path, string) **required** — Collection ticker - ---- -##### `CreateMarketInMultivariateEventCollection` - -**POST** `/multivariate_event_collections/{collection_ticker}` - -Create Market In Multivariate Event Collection *(Auth required)* - -**Parameters:** -- `collection_ticker` (path, string) **required** — Collection ticker - ---- -##### `GetMultivariateEventCollections` - -**GET** `/multivariate_event_collections` - -Get Multivariate Event Collections - -**Parameters:** -- `status` (query, string) — Only return collections of a certain status. Can be unopened, open, or closed. — enum: `unopened,open,closed` -- `associated_event_ticker` (query, string) — Only return collections associated with a particular event ticker. -- `series_ticker` (query, string) — Only return collections with a particular series ticker. -- `limit` (query, integer) — Specify the maximum number of results. -- `cursor` (query, string) — The Cursor represents a pointer to the next page of records in the pagination. This optional parameter, when filled, should be filled with the cursor string returned in a previous request to this end-point. - ---- -##### `LookupTickersForMarketInMultivariateEventCollection` - -**PUT** `/multivariate_event_collections/{collection_ticker}/lookup` - -Lookup Tickers For Market In Multivariate Event Collection *(Auth required)* - -**Parameters:** -- `collection_ticker` (path, string) **required** — Collection ticker - ---- -##### `GetMultivariateEventCollectionLookupHistory` - -**GET** `/multivariate_event_collections/{collection_ticker}/lookup` - -Get Multivariate Event Collection Lookup History - -**Parameters:** -- `collection_ticker` (path, string) **required** — Collection ticker -- `lookback_seconds` (query, integer) **required** — Number of seconds to look back for lookup history. Must be one of 10, 60, 300, or 3600. — enum: `10,60,300,3600` - ---- -##### `GetSeries` - -**GET** `/series/{series_ticker}` - -Get Series - -**Parameters:** -- `series_ticker` (path, string) **required** — The ticker of the series to retrieve -- `include_volume` (query, boolean) — If true, includes the total volume traded across all events in this series. - ---- -##### `GetSeriesList` - -**GET** `/series` - -Get Series List - -**Parameters:** -- `category` (query, string) -- `tags` (query, string) -- `include_product_metadata` (query, boolean) -- `include_volume` (query, boolean) — If true, includes the total volume traded across all events in each series. - ---- -##### `GetMarkets` - -**GET** `/markets` - -Get Markets - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetMarket` - -**GET** `/markets/{ticker}` - -Get Market - -**Parameters:** -- `` (, string) - ---- -##### `BatchGetMarketCandlesticks` - -**GET** `/markets/candlesticks` - -Batch Get Market Candlesticks - -**Parameters:** -- `market_tickers` (query, string) **required** — Comma-separated list of market tickers (maximum 100) -- `start_ts` (query, integer) **required** — Start timestamp in Unix seconds -- `end_ts` (query, integer) **required** — End timestamp in Unix seconds -- `period_interval` (query, integer) **required** — Candlestick period interval in minutes -- `include_latest_before_start` (query, boolean) — If true, prepends the latest candlestick available before the start_ts. This synthetic candlestick is created by: -1. Finding the most recent real candlestick before start_ts -2. Projecting it forward to the first period boundary (calculated as the next period interval after start_ts) -3. Setting all OHLC prices to null, and `previous_price` to the close price from the real candlestick - - ---- -### Limitless - -| `call_api()` name | Method | Path | Summary | Auth | -|-----------------|--------|------|---------|------| -| `AuthController_getSigningMessage` | `GET` | `/auth/signing-message` | Get signing message | Public | -| `AuthController_verifyAuth` | `GET` | `/auth/verify-auth` | Verify authentication | Required | -| `AuthController_login` | `POST` | `/auth/login` | User login | Public | -| `AuthController_logout` | `POST` | `/auth/logout` | User logout | Required | -| `MarketController_getActiveMarkets[0]` | `GET` | `/markets/active/{categoryId}` | Browse Active Markets | Public | -| `MarketController_getActiveMarkets[1]` | `GET` | `/markets/active` | Browse Active Markets | Public | -| `MarketController_getActiveMarketCountPerCategory` | `GET` | `/markets/categories/count` | Get active market count per category | Public | -| `MarketController_getActiveSlugs` | `GET` | `/markets/active/slugs` | Get active market slugs with metadata | Public | -| `MarketController_find` | `GET` | `/markets/{addressOrSlug}` | Get Market Details | Public | -| `MarketController_getFeedEvent` | `GET` | `/markets/{slug}/get-feed-events` | Get feed events for a market | Required | -| `MarketOrderbookController_getHistoricalPrice` | `GET` | `/markets/{slug}/historical-price` | Get Historical Prices | Public | -| `MarketOrderbookController_getOrderbook` | `GET` | `/markets/{slug}/orderbook` | Get Orderbook | Public | -| `MarketOrderbookController_getLockedBalance` | `GET` | `/markets/{slug}/locked-balance` | Get Locked Balance | Required | -| `MarketOrderbookController_getUserOrders` | `GET` | `/markets/{slug}/user-orders` | User Orders | Required | -| `MarketOrderbookController_getMarketEvents` | `GET` | `/markets/{slug}/events` | Market Events | Public | -| `MarketSearchController_search` | `GET` | `/markets/search` | Search for markets based on semantic similarity | Public | -| `PortfolioController_getTrades` | `GET` | `/portfolio/trades` | Get Trades | Required | -| `PortfolioController_getPositions` | `GET` | `/portfolio/positions` | Get Positions | Required | -| `PortfolioController_getPnlChart` | `GET` | `/portfolio/pnl-chart` | Get portfolio PnL chart | Required | -| `PortfolioController_getHistory` | `GET` | `/portfolio/history` | Get History | Required | -| `PortfolioController_getPointsBreakdown` | `GET` | `/portfolio/points` | Get points breakdown | Required | -| `PublicPortfolioController_tradedVolume` | `GET` | `/portfolio/{account}/traded-volume` | User Total Volume | Public | -| `PublicPortfolioController_getPositions` | `GET` | `/portfolio/{account}/positions` | Get All User Positions | Public | -| `PublicPortfolioController_getPnlChart` | `GET` | `/portfolio/{account}/pnl-chart` | Get portfolio PnL chart (public) | Public | -| `TradingPortfolioController_getAllowance` | `GET` | `/portfolio/trading/allowance` | Get User Trading Allowance | Required | -| `OrderController_createOrder` | `POST` | `/orders` | Create Order | Required | -| `OrderController_cancelOrder` | `DELETE` | `/orders/{orderId}` | Cancel Order | Required | -| `OrderController_cancelOrderBatch` | `POST` | `/orders/cancel-batch` | Cancel multiple orders in batch | Required | -| `OrderController_cancelAllOrders` | `DELETE` | `/orders/all/{slug}` | Cancel all of a user's orders in a specific market | Required | - -#### Endpoint Details - -##### `AuthController_getSigningMessage` - -**GET** `/auth/signing-message` - -Get signing message - - ---- -##### `AuthController_verifyAuth` - -**GET** `/auth/verify-auth` - -Verify authentication *(Auth required)* - - ---- -##### `AuthController_login` - -**POST** `/auth/login` - -User login - -**Parameters:** -- `x-account` (header, string) **required** — The Ethereum address of the user -- `x-signing-message` (header, string) **required** — The signing message generated by the server -- `x-signature` (header, string) **required** — The signature generated by signing the message with the user's wallet - ---- -##### `AuthController_logout` - -**POST** `/auth/logout` - -User logout *(Auth required)* - - ---- -##### `MarketController_getActiveMarkets[0]` - -**GET** `/markets/active/{categoryId}` - -Browse Active Markets - -**Parameters:** -- `page` (query, number) — Page number for pagination -- `limit` (query, number) — Number of items per page -- `sortBy` (query, string) — Sort by query parameter -- `tradeType` (query, string) — Filter by trade type (amm, clob, or group) — enum: `amm,clob,group` -- `automationType` (query, string) — Filter by automation type (manual, lumy, or sports) — enum: `manual,lumy,sports` -- `categoryId` (path, number) **required** — Filter markets by category ID - ---- -##### `MarketController_getActiveMarkets[1]` - -**GET** `/markets/active` - -Browse Active Markets - -**Parameters:** -- `page` (query, number) — Page number for pagination -- `limit` (query, number) — Number of items per page -- `sortBy` (query, string) — Sort by query parameter -- `tradeType` (query, string) — Filter by trade type (amm, clob, or group) — enum: `amm,clob,group` -- `automationType` (query, string) — Filter by automation type (manual, lumy, or sports) — enum: `manual,lumy,sports` -- `categoryId` (path, number) **required** — Filter markets by category ID - ---- -##### `MarketController_getActiveMarketCountPerCategory` - -**GET** `/markets/categories/count` - -Get active market count per category - - ---- -##### `MarketController_getActiveSlugs` - -**GET** `/markets/active/slugs` - -Get active market slugs with metadata - - ---- -##### `MarketController_find` - -**GET** `/markets/{addressOrSlug}` - -Get Market Details - -**Parameters:** -- `addressOrSlug` (path, string) **required** — Market/group address (0x...) or slug identifier (my-market-name) - ---- -##### `MarketController_getFeedEvent` - -**GET** `/markets/{slug}/get-feed-events` - -Get feed events for a market *(Auth required)* - -**Parameters:** -- `page` (query, number) — Page number for pagination -- `limit` (query, number) — Number of events per page -- `slug` (path, string) **required** — Slug of the market - ---- -##### `MarketOrderbookController_getHistoricalPrice` - -**GET** `/markets/{slug}/historical-price` - -Get Historical Prices - -**Parameters:** -- `to` (query, string) — End date for historical data -- `from` (query, string) — Start date for historical data -- `interval` (query, string) — Time interval for data points — enum: `1h,6h,1d,1w,1m,all` -- `slug` (path, string) **required** — Market slug identifier - ---- -##### `MarketOrderbookController_getOrderbook` - -**GET** `/markets/{slug}/orderbook` - -Get Orderbook - -**Parameters:** -- `slug` (path, string) **required** — Market slug identifier - ---- -##### `MarketOrderbookController_getLockedBalance` - -**GET** `/markets/{slug}/locked-balance` - -Get Locked Balance *(Auth required)* - -**Parameters:** -- `slug` (path, string) **required** — Market slug identifier - ---- -##### `MarketOrderbookController_getUserOrders` - -**GET** `/markets/{slug}/user-orders` - -User Orders *(Auth required)* - -**Parameters:** -- `statuses` (query, array) — Order status(es) to filter by. Defaults to [LIVE] if not provided -- `limit` (query, number) — Maximum number of orders to return -- `slug` (path, string) **required** — Market slug identifier - ---- -##### `MarketOrderbookController_getMarketEvents` - -**GET** `/markets/{slug}/events` - -Market Events - -**Parameters:** -- `page` (query, number) — Page number for pagination -- `limit` (query, number) — Number of events per page -- `slug` (path, string) **required** — Market slug identifier - ---- -##### `MarketSearchController_search` - -**GET** `/markets/search` - -Search for markets based on semantic similarity - -**Parameters:** -- `query` (query, string) **required** — Search query text -- `limit` (query, number) — Maximum number of results to return -- `page` (query, number) — Number of page -- `similarityThreshold` (query, number) — Minimum similarity score (0-1) - ---- -##### `PortfolioController_getTrades` - -**GET** `/portfolio/trades` - -Get Trades *(Auth required)* - - ---- -##### `PortfolioController_getPositions` - -**GET** `/portfolio/positions` - -Get Positions *(Auth required)* - - ---- -##### `PortfolioController_getPnlChart` - -**GET** `/portfolio/pnl-chart` - -Get portfolio PnL chart *(Auth required)* - -**Parameters:** -- `timeframe` (query, string) — Timeframe window for percent change and chart series - ---- -##### `PortfolioController_getHistory` - -**GET** `/portfolio/history` - -Get History *(Auth required)* - -**Parameters:** -- `page` (query, number) **required** — Page number -- `limit` (query, number) **required** — Number of items per page -- `from` (query, string) — Start date for filtering (ISO 8601 format) -- `to` (query, string) — End date for filtering (ISO 8601 format) - ---- -##### `PortfolioController_getPointsBreakdown` - -**GET** `/portfolio/points` - -Get points breakdown *(Auth required)* - - ---- -##### `PublicPortfolioController_tradedVolume` - -**GET** `/portfolio/{account}/traded-volume` - -User Total Volume - -**Parameters:** -- `account` (path, string) **required** — User Ethereum address - ---- -##### `PublicPortfolioController_getPositions` - -**GET** `/portfolio/{account}/positions` - -Get All User Positions - -**Parameters:** -- `account` (path, string) **required** — User Ethereum address - ---- -##### `PublicPortfolioController_getPnlChart` - -**GET** `/portfolio/{account}/pnl-chart` - -Get portfolio PnL chart (public) - -**Parameters:** -- `account` (path, string) **required** — User Ethereum address -- `timeframe` (query, string) — Timeframe window for percent change and chart series - ---- -##### `TradingPortfolioController_getAllowance` - -**GET** `/portfolio/trading/allowance` - -Get User Trading Allowance *(Auth required)* - -**Parameters:** -- `type` (query, string) **required** — Trading type: CLOB or NegRisk — enum: `clob,negrisk` -- `spender` (query, string) — Optional spender address override (e.g., venue exchange address) - ---- -##### `OrderController_createOrder` - -**POST** `/orders` - -Create Order *(Auth required)* - - ---- -##### `OrderController_cancelOrder` - -**DELETE** `/orders/{orderId}` - -Cancel Order *(Auth required)* - -**Parameters:** -- `orderId` (path, string) **required** — Unique identifier of the order to be cancelled - ---- -##### `OrderController_cancelOrderBatch` - -**POST** `/orders/cancel-batch` - -Cancel multiple orders in batch *(Auth required)* - - ---- -##### `OrderController_cancelAllOrders` - -**DELETE** `/orders/all/{slug}` - -Cancel all of a user's orders in a specific market *(Auth required)* - - ---- -### Probable - -| `call_api()` name | Method | Path | Summary | Auth | -|-----------------|--------|------|---------|------| -| `getPublicApiV1AuthNonce` | `GET` | `/public/api/v1/auth/nonce` | Generate Nonce | Public | -| `postPublicApiV1AuthLogin` | `POST` | `/public/api/v1/auth/login` | Login | Public | -| `postPublicApiV1AuthLogout` | `POST` | `/public/api/v1/auth/logout` | Logout | Public | -| `postPublicApiV1AuthApiKey` | `POST` | `/public/api/v1/auth/api-key/{chainId}` | Generate API Key | Required | -| `getPublicApiV1AuthApiKey` | `GET` | `/public/api/v1/auth/api-key/{chainId}` | Get API Key | Required | -| `deletePublicApiV1AuthApiKey` | `DELETE` | `/public/api/v1/auth/api-key/{chainId}` | Delete API Key | Required | -| `postPublicApiV1AuthVerifyL1` | `POST` | `/public/api/v1/auth/verify/l1` | Verify L1 Headers | Required | -| `postPublicApiV1AuthVerifyL2` | `POST` | `/public/api/v1/auth/verify/l2` | Verify L2 Headers | Required | -| `getPublicApiV1Events` | `GET` | `/public/api/v1/events/` | List All Events | Public | -| `getPublicApiV1Events` | `GET` | `/public/api/v1/events/{id}` | Get Event by ID | Public | -| `getPublicApiV1EventsSlug` | `GET` | `/public/api/v1/events/slug/{slug}` | Get Event by Slug | Public | -| `getPublicApiV1EventsTags` | `GET` | `/public/api/v1/events/{id}/tags` | Get Tags for Event | Public | -| `getPublicApiV1Markets` | `GET` | `/public/api/v1/markets/` | List All Markets | Public | -| `getPublicApiV1Markets` | `GET` | `/public/api/v1/markets/{id}` | Get Market by ID | Public | -| `getPublicApiV1MarketsPolymarket` | `GET` | `/public/api/v1/markets/polymarket/{polymarketId}` | Get Market by Polymarket ID | Public | -| `getPublicApiV1MarketsBsc` | `GET` | `/public/api/v1/markets/bsc/{bscQuestionId}` | Get Market by BSC Question ID | Public | -| `getPublicApiV1PublicSearch` | `GET` | `/public/api/v1/public-search/` | Search Events and Markets | Public | -| `getPublicApiV1Tags` | `GET` | `/public/api/v1/tags/` | List All Tags | Public | -| `postPublicApiV1Order` | `POST` | `/public/api/v1/order/{chainId}` | Place Order | Required | -| `deletePublicApiV1Order` | `DELETE` | `/public/api/v1/order/{chainId}/{orderId}` | Cancel Order | Required | -| `getPublicApiV1Orders` | `GET` | `/public/api/v1/orders/{chainId}/{orderId}` | Get Order | Required | -| `getPublicApiV1OrdersOpen` | `GET` | `/public/api/v1/orders/{chainId}/open` | Get Open Orders | Required | -| `getPublicApiV1Price` | `GET` | `/public/api/v1/price` | Get Price | Public | -| `postPublicApiV1Prices` | `POST` | `/public/api/v1/prices` | Get Prices (Batch) | Public | -| `getPublicApiV1Midpoint` | `GET` | `/public/api/v1/midpoint` | Get Midpoint | Public | -| `getPublicApiV1Book` | `GET` | `/public/api/v1/book` | Get Order Book | Public | -| `getPublicApiV1PricesHistory` | `GET` | `/public/api/v1/prices-history` | Get Price History | Public | -| `getPublicApiV1Trade` | `GET` | `/public/api/v1/trade/{chainId}` | Get Trades (Authenticated) | Required | -| `getPublicApiV1Trades` | `GET` | `/public/api/v1/trades` | Get Public Trades | Public | -| `getPublicApiV1Activity` | `GET` | `/public/api/v1/activity` | User Activity | Public | -| `getPublicApiV1PositionCurrent` | `GET` | `/public/api/v1/position/current` | Current Position | Public | -| `getPublicApiV1Pnl` | `GET` | `/public/api/v1/pnl` | Profit and Loss | Public | - -#### Endpoint Details - -##### `getPublicApiV1AuthNonce` - -**GET** `/public/api/v1/auth/nonce` - -Generate Nonce - - ---- -##### `postPublicApiV1AuthLogin` - -**POST** `/public/api/v1/auth/login` - -Login - - ---- -##### `postPublicApiV1AuthLogout` - -**POST** `/public/api/v1/auth/logout` - -Logout - - ---- -##### `postPublicApiV1AuthApiKey` - -**POST** `/public/api/v1/auth/api-key/{chainId}` - -Generate API Key *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** - ---- -##### `getPublicApiV1AuthApiKey` - -**GET** `/public/api/v1/auth/api-key/{chainId}` - -Get API Key *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** - ---- -##### `deletePublicApiV1AuthApiKey` - -**DELETE** `/public/api/v1/auth/api-key/{chainId}` - -Delete API Key *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** - ---- -##### `postPublicApiV1AuthVerifyL1` - -**POST** `/public/api/v1/auth/verify/l1` - -Verify L1 Headers *(Auth required)* - - ---- -##### `postPublicApiV1AuthVerifyL2` - -**POST** `/public/api/v1/auth/verify/l2` - -Verify L2 Headers *(Auth required)* - - ---- -##### `getPublicApiV1Events` - -**GET** `/public/api/v1/events/` - -List All Events - -**Parameters:** -- `page` (query, integer) -- `limit` (query, integer) -- `status` (query, string) — enum: `active,closed,all` -- `tag_id` (query, string) -- `sort` (query, string) - ---- -##### `getPublicApiV1Events` - -**GET** `/public/api/v1/events/{id}` - -Get Event by ID - -**Parameters:** -- `id` (path, integer) **required** - ---- -##### `getPublicApiV1EventsSlug` - -**GET** `/public/api/v1/events/slug/{slug}` - -Get Event by Slug - -**Parameters:** -- `slug` (path, string) **required** - ---- -##### `getPublicApiV1EventsTags` - -**GET** `/public/api/v1/events/{id}/tags` - -Get Tags for Event - -**Parameters:** -- `id` (path, integer) **required** - ---- -##### `getPublicApiV1Markets` - -**GET** `/public/api/v1/markets/` - -List All Markets - -**Parameters:** -- `page` (query, integer) -- `active` (query, boolean) -- `event_id` (query, integer) - ---- -##### `getPublicApiV1Markets` - -**GET** `/public/api/v1/markets/{id}` - -Get Market by ID - -**Parameters:** -- `id` (path, integer) **required** - ---- -##### `getPublicApiV1MarketsPolymarket` - -**GET** `/public/api/v1/markets/polymarket/{polymarketId}` - -Get Market by Polymarket ID - -**Parameters:** -- `polymarketId` (path, string) **required** - ---- -##### `getPublicApiV1MarketsBsc` - -**GET** `/public/api/v1/markets/bsc/{bscQuestionId}` - -Get Market by BSC Question ID - -**Parameters:** -- `bscQuestionId` (path, string) **required** - ---- -##### `getPublicApiV1PublicSearch` - -**GET** `/public/api/v1/public-search/` - -Search Events and Markets - -**Parameters:** -- `q` (query, string) **required** -- `page` (query, integer) -- `events_tag` (query, string) -- `optimized` (query, boolean) - ---- -##### `getPublicApiV1Tags` - -**GET** `/public/api/v1/tags/` - -List All Tags - - ---- -##### `postPublicApiV1Order` - -**POST** `/public/api/v1/order/{chainId}` - -Place Order *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** - ---- -##### `deletePublicApiV1Order` - -**DELETE** `/public/api/v1/order/{chainId}/{orderId}` - -Cancel Order *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** -- `orderId` (path, string) **required** -- `tokenId` (query, string) **required** - ---- -##### `getPublicApiV1Orders` - -**GET** `/public/api/v1/orders/{chainId}/{orderId}` - -Get Order *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** -- `orderId` (path, string) **required** -- `tokenId` (query, string) **required** - ---- -##### `getPublicApiV1OrdersOpen` - -**GET** `/public/api/v1/orders/{chainId}/open` - -Get Open Orders *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** -- `limit` (query, integer) -- `page` (query, integer) - ---- -##### `getPublicApiV1Price` - -**GET** `/public/api/v1/price` - -Get Price - -**Parameters:** -- `token_id` (query, string) **required** -- `side` (query, string) **required** — enum: `BUY,SELL` - ---- -##### `postPublicApiV1Prices` - -**POST** `/public/api/v1/prices` - -Get Prices (Batch) - - ---- -##### `getPublicApiV1Midpoint` - -**GET** `/public/api/v1/midpoint` - -Get Midpoint - -**Parameters:** -- `token_id` (query, string) **required** - ---- -##### `getPublicApiV1Book` - -**GET** `/public/api/v1/book` - -Get Order Book - -**Parameters:** -- `token_id` (query, string) **required** - ---- -##### `getPublicApiV1PricesHistory` - -**GET** `/public/api/v1/prices-history` - -Get Price History - -**Parameters:** -- `market` (query, string) **required** — Asset ID -- `interval` (query, string) — enum: `max,1m,1h,6h,1d,1w` -- `startTs` (query, integer) -- `endTs` (query, integer) - ---- -##### `getPublicApiV1Trade` - -**GET** `/public/api/v1/trade/{chainId}` - -Get Trades (Authenticated) *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** -- `tokenId` (query, string) **required** -- `limit` (query, integer) -- `next_cursor` (query, string) - ---- -##### `getPublicApiV1Trades` - -**GET** `/public/api/v1/trades` - -Get Public Trades - -**Parameters:** -- `user` (query, string) -- `limit` (query, integer) -- `side` (query, string) - ---- -##### `getPublicApiV1Activity` - -**GET** `/public/api/v1/activity` - -User Activity - -**Parameters:** -- `user` (query, string) **required** -- `limit` (query, integer) - ---- -##### `getPublicApiV1PositionCurrent` - -**GET** `/public/api/v1/position/current` - -Current Position - -**Parameters:** -- `user` (query, string) **required** -- `eventId` (query, integer) - ---- -##### `getPublicApiV1Pnl` - -**GET** `/public/api/v1/pnl` - -Profit and Loss - -**Parameters:** -- `user_address` (query, string) **required** - ---- -### Myriad - -| `call_api()` name | Method | Path | Summary | Auth | -|-----------------|--------|------|---------|------| -| `getQuestions` | `GET` | `/questions` | List Questions | Required | -| `getQuestions` | `GET` | `/questions/{id}` | Get Question Details | Required | -| `getMarkets` | `GET` | `/markets` | List Markets | Required | -| `getMarkets` | `GET` | `/markets/{id}` | Get Market Details | Required | -| `getMarketsEvents` | `GET` | `/markets/{id}/events` | Get Market Events | Required | -| `getMarketsReferrals` | `GET` | `/markets/{id}/referrals` | Get Market Referrals | Required | -| `getMarketsHolders` | `GET` | `/markets/{id}/holders` | Get Market Holders | Required | -| `postMarketsQuote` | `POST` | `/markets/quote` | Get Trade Quote | Required | -| `postMarketsQuoteWithFee` | `POST` | `/markets/quote_with_fee` | Get Trade Quote with Frontend Fee | Required | -| `postMarketsClaim` | `POST` | `/markets/claim` | Get Claim Quote | Required | -| `getUsersEvents` | `GET` | `/users/{address}/events` | Get User Events | Required | -| `getUsersReferrals` | `GET` | `/users/{address}/referrals` | Get User Referrals | Required | -| `getUsersPortfolio` | `GET` | `/users/{address}/portfolio` | Get User Portfolio | Required | -| `getUsersMarkets` | `GET` | `/users/{address}/markets` | Get User Markets Portfolio | Required | - -#### Endpoint Details - -##### `getQuestions` - -**GET** `/questions` - -List Questions *(Auth required)* - -**Parameters:** -- `page` (query, integer) -- `limit` (query, integer) -- `keyword` (query, string) — Search in question title -- `min_markets` (query, integer) — Minimum number of linked markets -- `max_markets` (query, integer) — Maximum number of linked markets - ---- -##### `getQuestions` - -**GET** `/questions/{id}` - -Get Question Details *(Auth required)* - -**Parameters:** -- `id` (path, integer) **required** - ---- -##### `getMarkets` - -**GET** `/markets` - -List Markets *(Auth required)* - -**Parameters:** -- `page` (query, integer) -- `limit` (query, integer) -- `sort` (query, string) — enum: `volume,volume_24h,liquidity,expires_at,published_at,featured` -- `order` (query, string) — enum: `asc,desc` -- `network_id` (query, string) — Comma-separated list of network ids -- `state` (query, string) — enum: `open,closed,resolved,voided` -- `trading_model` (query, string) — Filter markets by trading model (e.g. CLOB, AMM) -- `token_address` (query, string) -- `topics` (query, string) — Comma-separated list of topics -- `keyword` (query, string) — Full-text search across title, description, and outcome titles -- `ids` (query, string) — Comma-separated list of on-chain market ids -- `in_play` (query, boolean) -- `moneyline` (query, boolean) -- `min_duration` (query, integer) — Minimum market duration in seconds -- `max_duration` (query, integer) — Maximum market duration in seconds - ---- -##### `getMarkets` - -**GET** `/markets/{id}` - -Get Market Details *(Auth required)* - -**Parameters:** -- `id` (path, string) **required** — Market slug OR Market ID -- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID - ---- -##### `getMarketsEvents` - -**GET** `/markets/{id}/events` - -Get Market Events *(Auth required)* - -**Parameters:** -- `id` (path, string) **required** — Market slug OR Market ID -- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID -- `page` (query, integer) -- `limit` (query, integer) -- `since` (query, integer) — Unix seconds (inclusive) -- `until` (query, integer) — Unix seconds (inclusive) - ---- -##### `getMarketsReferrals` - -**GET** `/markets/{id}/referrals` - -Get Market Referrals *(Auth required)* - -**Parameters:** -- `id` (path, string) **required** — Market slug OR Market ID -- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID -- `page` (query, integer) -- `limit` (query, integer) -- `since` (query, integer) -- `until` (query, integer) -- `code` (query, string) - ---- -##### `getMarketsHolders` - -**GET** `/markets/{id}/holders` - -Get Market Holders *(Auth required)* - -**Parameters:** -- `id` (path, string) **required** — Market slug OR Market ID -- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID -- `page` (query, integer) -- `limit` (query, integer) - ---- -##### `postMarketsQuote` - -**POST** `/markets/quote` - -Get Trade Quote *(Auth required)* - - ---- -##### `postMarketsQuoteWithFee` - -**POST** `/markets/quote_with_fee` - -Get Trade Quote with Frontend Fee *(Auth required)* - - ---- -##### `postMarketsClaim` - -**POST** `/markets/claim` - -Get Claim Quote *(Auth required)* - - ---- -##### `getUsersEvents` - -**GET** `/users/{address}/events` - -Get User Events *(Auth required)* - -**Parameters:** -- `address` (path, string) **required** -- `page` (query, integer) -- `limit` (query, integer) -- `market_id` (query, string) -- `market_slug` (query, string) -- `network_id` (query, integer) -- `since` (query, integer) -- `until` (query, integer) - ---- -##### `getUsersReferrals` - -**GET** `/users/{address}/referrals` - -Get User Referrals *(Auth required)* - -**Parameters:** -- `address` (path, string) **required** -- `page` (query, integer) -- `limit` (query, integer) -- `market_id` (query, string) -- `market_slug` (query, string) -- `network_id` (query, integer) -- `since` (query, integer) -- `until` (query, integer) -- `code` (query, string) - ---- -##### `getUsersPortfolio` - -**GET** `/users/{address}/portfolio` - -Get User Portfolio *(Auth required)* - -**Parameters:** -- `address` (path, string) **required** -- `page` (query, integer) -- `limit` (query, integer) -- `min_shares` (query, number) — Default 0.1 -- `market_slug` (query, string) -- `market_id` (query, string) -- `network_id` (query, integer) -- `token_address` (query, string) - ---- -##### `getUsersMarkets` - -**GET** `/users/{address}/markets` - -Get User Markets Portfolio *(Auth required)* - -**Parameters:** -- `address` (path, string) **required** -- `page` (query, integer) -- `limit` (query, integer) -- `min_shares` (query, number) -- `network_id` (query, integer) -- `state` (query, string) -- `trading_model` (query, string) — Filter portfolio results by trading model (e.g. CLOB, AMM) -- `token_address` (query, string) -- `topics` (query, string) -- `keyword` (query, string) -- `market_ids` (query, string) — Comma-separated list of {networkId}:{marketId} pairs - ---- +Cancel Order *(Auth required)* + +**Parameters:** +- `orderId` (path, string) **required** — Unique identifier of the order to be cancelled + +--- +##### `OrderController_cancelOrderBatch` + +**POST** `/orders/cancel-batch` + +Cancel multiple orders in batch *(Auth required)* + + +--- +##### `OrderController_cancelAllOrders` + +**DELETE** `/orders/all/{slug}` + +Cancel all of a user's orders in a specific market *(Auth required)* + + +--- +### Probable + +| `call_api()` name | Method | Path | Summary | Auth | +|-----------------|--------|------|---------|------| +| `getPublicApiV1AuthNonce` | `GET` | `/public/api/v1/auth/nonce` | Generate Nonce | Public | +| `postPublicApiV1AuthLogin` | `POST` | `/public/api/v1/auth/login` | Login | Public | +| `postPublicApiV1AuthLogout` | `POST` | `/public/api/v1/auth/logout` | Logout | Public | +| `postPublicApiV1AuthApiKey` | `POST` | `/public/api/v1/auth/api-key/{chainId}` | Generate API Key | Required | +| `getPublicApiV1AuthApiKey` | `GET` | `/public/api/v1/auth/api-key/{chainId}` | Get API Key | Required | +| `deletePublicApiV1AuthApiKey` | `DELETE` | `/public/api/v1/auth/api-key/{chainId}` | Delete API Key | Required | +| `postPublicApiV1AuthVerifyL1` | `POST` | `/public/api/v1/auth/verify/l1` | Verify L1 Headers | Required | +| `postPublicApiV1AuthVerifyL2` | `POST` | `/public/api/v1/auth/verify/l2` | Verify L2 Headers | Required | +| `getPublicApiV1Events` | `GET` | `/public/api/v1/events/` | List All Events | Public | +| `getPublicApiV1Events` | `GET` | `/public/api/v1/events/{id}` | Get Event by ID | Public | +| `getPublicApiV1EventsSlug` | `GET` | `/public/api/v1/events/slug/{slug}` | Get Event by Slug | Public | +| `getPublicApiV1EventsTags` | `GET` | `/public/api/v1/events/{id}/tags` | Get Tags for Event | Public | +| `getPublicApiV1Markets` | `GET` | `/public/api/v1/markets/` | List All Markets | Public | +| `getPublicApiV1Markets` | `GET` | `/public/api/v1/markets/{id}` | Get Market by ID | Public | +| `getPublicApiV1MarketsPolymarket` | `GET` | `/public/api/v1/markets/polymarket/{polymarketId}` | Get Market by Polymarket ID | Public | +| `getPublicApiV1MarketsBsc` | `GET` | `/public/api/v1/markets/bsc/{bscQuestionId}` | Get Market by BSC Question ID | Public | +| `getPublicApiV1PublicSearch` | `GET` | `/public/api/v1/public-search/` | Search Events and Markets | Public | +| `getPublicApiV1Tags` | `GET` | `/public/api/v1/tags/` | List All Tags | Public | +| `postPublicApiV1Order` | `POST` | `/public/api/v1/order/{chainId}` | Place Order | Required | +| `deletePublicApiV1Order` | `DELETE` | `/public/api/v1/order/{chainId}/{orderId}` | Cancel Order | Required | +| `getPublicApiV1Orders` | `GET` | `/public/api/v1/orders/{chainId}/{orderId}` | Get Order | Required | +| `getPublicApiV1OrdersOpen` | `GET` | `/public/api/v1/orders/{chainId}/open` | Get Open Orders | Required | +| `getPublicApiV1Price` | `GET` | `/public/api/v1/price` | Get Price | Public | +| `postPublicApiV1Prices` | `POST` | `/public/api/v1/prices` | Get Prices (Batch) | Public | +| `getPublicApiV1Midpoint` | `GET` | `/public/api/v1/midpoint` | Get Midpoint | Public | +| `getPublicApiV1Book` | `GET` | `/public/api/v1/book` | Get Order Book | Public | +| `getPublicApiV1PricesHistory` | `GET` | `/public/api/v1/prices-history` | Get Price History | Public | +| `getPublicApiV1Trade` | `GET` | `/public/api/v1/trade/{chainId}` | Get Trades (Authenticated) | Required | +| `getPublicApiV1Trades` | `GET` | `/public/api/v1/trades` | Get Public Trades | Public | +| `getPublicApiV1Activity` | `GET` | `/public/api/v1/activity` | User Activity | Public | +| `getPublicApiV1PositionCurrent` | `GET` | `/public/api/v1/position/current` | Current Position | Public | +| `getPublicApiV1Pnl` | `GET` | `/public/api/v1/pnl` | Profit and Loss | Public | + +#### Endpoint Details + +##### `getPublicApiV1AuthNonce` + +**GET** `/public/api/v1/auth/nonce` + +Generate Nonce + + +--- +##### `postPublicApiV1AuthLogin` + +**POST** `/public/api/v1/auth/login` + +Login + + +--- +##### `postPublicApiV1AuthLogout` + +**POST** `/public/api/v1/auth/logout` + +Logout + + +--- +##### `postPublicApiV1AuthApiKey` + +**POST** `/public/api/v1/auth/api-key/{chainId}` + +Generate API Key *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** + +--- +##### `getPublicApiV1AuthApiKey` + +**GET** `/public/api/v1/auth/api-key/{chainId}` + +Get API Key *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** + +--- +##### `deletePublicApiV1AuthApiKey` + +**DELETE** `/public/api/v1/auth/api-key/{chainId}` + +Delete API Key *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** + +--- +##### `postPublicApiV1AuthVerifyL1` + +**POST** `/public/api/v1/auth/verify/l1` + +Verify L1 Headers *(Auth required)* + + +--- +##### `postPublicApiV1AuthVerifyL2` + +**POST** `/public/api/v1/auth/verify/l2` + +Verify L2 Headers *(Auth required)* + + +--- +##### `getPublicApiV1Events` + +**GET** `/public/api/v1/events/` + +List All Events + +**Parameters:** +- `page` (query, integer) +- `limit` (query, integer) +- `status` (query, string) — enum: `active,closed,all` +- `tag_id` (query, string) +- `sort` (query, string) + +--- +##### `getPublicApiV1Events` + +**GET** `/public/api/v1/events/{id}` + +Get Event by ID + +**Parameters:** +- `id` (path, integer) **required** + +--- +##### `getPublicApiV1EventsSlug` + +**GET** `/public/api/v1/events/slug/{slug}` + +Get Event by Slug + +**Parameters:** +- `slug` (path, string) **required** + +--- +##### `getPublicApiV1EventsTags` + +**GET** `/public/api/v1/events/{id}/tags` + +Get Tags for Event + +**Parameters:** +- `id` (path, integer) **required** + +--- +##### `getPublicApiV1Markets` + +**GET** `/public/api/v1/markets/` + +List All Markets + +**Parameters:** +- `page` (query, integer) +- `active` (query, boolean) +- `event_id` (query, integer) + +--- +##### `getPublicApiV1Markets` + +**GET** `/public/api/v1/markets/{id}` + +Get Market by ID + +**Parameters:** +- `id` (path, integer) **required** + +--- +##### `getPublicApiV1MarketsPolymarket` + +**GET** `/public/api/v1/markets/polymarket/{polymarketId}` + +Get Market by Polymarket ID + +**Parameters:** +- `polymarketId` (path, string) **required** + +--- +##### `getPublicApiV1MarketsBsc` + +**GET** `/public/api/v1/markets/bsc/{bscQuestionId}` + +Get Market by BSC Question ID + +**Parameters:** +- `bscQuestionId` (path, string) **required** + +--- +##### `getPublicApiV1PublicSearch` + +**GET** `/public/api/v1/public-search/` + +Search Events and Markets + +**Parameters:** +- `q` (query, string) **required** +- `page` (query, integer) +- `events_tag` (query, string) +- `optimized` (query, boolean) + +--- +##### `getPublicApiV1Tags` + +**GET** `/public/api/v1/tags/` + +List All Tags + + +--- +##### `postPublicApiV1Order` + +**POST** `/public/api/v1/order/{chainId}` + +Place Order *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** + +--- +##### `deletePublicApiV1Order` + +**DELETE** `/public/api/v1/order/{chainId}/{orderId}` + +Cancel Order *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** +- `orderId` (path, string) **required** +- `tokenId` (query, string) **required** + +--- +##### `getPublicApiV1Orders` + +**GET** `/public/api/v1/orders/{chainId}/{orderId}` + +Get Order *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** +- `orderId` (path, string) **required** +- `tokenId` (query, string) **required** + +--- +##### `getPublicApiV1OrdersOpen` + +**GET** `/public/api/v1/orders/{chainId}/open` + +Get Open Orders *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** +- `limit` (query, integer) +- `page` (query, integer) + +--- +##### `getPublicApiV1Price` + +**GET** `/public/api/v1/price` + +Get Price + +**Parameters:** +- `token_id` (query, string) **required** +- `side` (query, string) **required** — enum: `BUY,SELL` + +--- +##### `postPublicApiV1Prices` + +**POST** `/public/api/v1/prices` + +Get Prices (Batch) + + +--- +##### `getPublicApiV1Midpoint` + +**GET** `/public/api/v1/midpoint` + +Get Midpoint + +**Parameters:** +- `token_id` (query, string) **required** + +--- +##### `getPublicApiV1Book` + +**GET** `/public/api/v1/book` + +Get Order Book + +**Parameters:** +- `token_id` (query, string) **required** + +--- +##### `getPublicApiV1PricesHistory` + +**GET** `/public/api/v1/prices-history` + +Get Price History + +**Parameters:** +- `market` (query, string) **required** — Asset ID +- `interval` (query, string) — enum: `max,1m,1h,6h,1d,1w` +- `startTs` (query, integer) +- `endTs` (query, integer) + +--- +##### `getPublicApiV1Trade` + +**GET** `/public/api/v1/trade/{chainId}` + +Get Trades (Authenticated) *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** +- `tokenId` (query, string) **required** +- `limit` (query, integer) +- `next_cursor` (query, string) + +--- +##### `getPublicApiV1Trades` + +**GET** `/public/api/v1/trades` + +Get Public Trades + +**Parameters:** +- `user` (query, string) +- `limit` (query, integer) +- `side` (query, string) + +--- +##### `getPublicApiV1Activity` + +**GET** `/public/api/v1/activity` + +User Activity + +**Parameters:** +- `user` (query, string) **required** +- `limit` (query, integer) + +--- +##### `getPublicApiV1PositionCurrent` + +**GET** `/public/api/v1/position/current` + +Current Position + +**Parameters:** +- `user` (query, string) **required** +- `eventId` (query, integer) + +--- +##### `getPublicApiV1Pnl` + +**GET** `/public/api/v1/pnl` + +Profit and Loss + +**Parameters:** +- `user_address` (query, string) **required** + +--- +### Myriad + +| `call_api()` name | Method | Path | Summary | Auth | +|-----------------|--------|------|---------|------| +| `getQuestions` | `GET` | `/questions` | List Questions | Required | +| `getQuestions` | `GET` | `/questions/{id}` | Get Question Details | Required | +| `getMarkets` | `GET` | `/markets` | List Markets | Required | +| `getMarkets` | `GET` | `/markets/{id}` | Get Market Details | Required | +| `getMarketsEvents` | `GET` | `/markets/{id}/events` | Get Market Events | Required | +| `getMarketsReferrals` | `GET` | `/markets/{id}/referrals` | Get Market Referrals | Required | +| `getMarketsHolders` | `GET` | `/markets/{id}/holders` | Get Market Holders | Required | +| `postMarketsQuote` | `POST` | `/markets/quote` | Get Trade Quote | Required | +| `postMarketsQuoteWithFee` | `POST` | `/markets/quote_with_fee` | Get Trade Quote with Frontend Fee | Required | +| `postMarketsClaim` | `POST` | `/markets/claim` | Get Claim Quote | Required | +| `getUsersEvents` | `GET` | `/users/{address}/events` | Get User Events | Required | +| `getUsersReferrals` | `GET` | `/users/{address}/referrals` | Get User Referrals | Required | +| `getUsersPortfolio` | `GET` | `/users/{address}/portfolio` | Get User Portfolio | Required | +| `getUsersMarkets` | `GET` | `/users/{address}/markets` | Get User Markets Portfolio | Required | + +#### Endpoint Details + +##### `getQuestions` + +**GET** `/questions` + +List Questions *(Auth required)* + +**Parameters:** +- `page` (query, integer) +- `limit` (query, integer) +- `keyword` (query, string) — Search in question title +- `min_markets` (query, integer) — Minimum number of linked markets +- `max_markets` (query, integer) — Maximum number of linked markets + +--- +##### `getQuestions` + +**GET** `/questions/{id}` + +Get Question Details *(Auth required)* + +**Parameters:** +- `id` (path, integer) **required** + +--- +##### `getMarkets` + +**GET** `/markets` + +List Markets *(Auth required)* + +**Parameters:** +- `page` (query, integer) +- `limit` (query, integer) +- `sort` (query, string) — enum: `volume,volume_24h,liquidity,expires_at,published_at,featured` +- `order` (query, string) — enum: `asc,desc` +- `network_id` (query, string) — Comma-separated list of network ids +- `state` (query, string) — enum: `open,closed,resolved,voided` +- `trading_model` (query, string) — Filter markets by trading model (e.g. CLOB, AMM) +- `token_address` (query, string) +- `topics` (query, string) — Comma-separated list of topics +- `keyword` (query, string) — Full-text search across title, description, and outcome titles +- `ids` (query, string) — Comma-separated list of on-chain market ids +- `in_play` (query, boolean) +- `moneyline` (query, boolean) +- `min_duration` (query, integer) — Minimum market duration in seconds +- `max_duration` (query, integer) — Maximum market duration in seconds + +--- +##### `getMarkets` + +**GET** `/markets/{id}` + +Get Market Details *(Auth required)* + +**Parameters:** +- `id` (path, string) **required** — Market slug OR Market ID +- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID + +--- +##### `getMarketsEvents` + +**GET** `/markets/{id}/events` + +Get Market Events *(Auth required)* + +**Parameters:** +- `id` (path, string) **required** — Market slug OR Market ID +- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID +- `page` (query, integer) +- `limit` (query, integer) +- `since` (query, integer) — Unix seconds (inclusive) +- `until` (query, integer) — Unix seconds (inclusive) + +--- +##### `getMarketsReferrals` + +**GET** `/markets/{id}/referrals` + +Get Market Referrals *(Auth required)* + +**Parameters:** +- `id` (path, string) **required** — Market slug OR Market ID +- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID +- `page` (query, integer) +- `limit` (query, integer) +- `since` (query, integer) +- `until` (query, integer) +- `code` (query, string) + +--- +##### `getMarketsHolders` + +**GET** `/markets/{id}/holders` + +Get Market Holders *(Auth required)* + +**Parameters:** +- `id` (path, string) **required** — Market slug OR Market ID +- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID +- `page` (query, integer) +- `limit` (query, integer) + +--- +##### `postMarketsQuote` + +**POST** `/markets/quote` + +Get Trade Quote *(Auth required)* + + +--- +##### `postMarketsQuoteWithFee` + +**POST** `/markets/quote_with_fee` + +Get Trade Quote with Frontend Fee *(Auth required)* + + +--- +##### `postMarketsClaim` + +**POST** `/markets/claim` + +Get Claim Quote *(Auth required)* + + +--- +##### `getUsersEvents` + +**GET** `/users/{address}/events` + +Get User Events *(Auth required)* + +**Parameters:** +- `address` (path, string) **required** +- `page` (query, integer) +- `limit` (query, integer) +- `market_id` (query, string) +- `market_slug` (query, string) +- `network_id` (query, integer) +- `since` (query, integer) +- `until` (query, integer) + +--- +##### `getUsersReferrals` + +**GET** `/users/{address}/referrals` + +Get User Referrals *(Auth required)* + +**Parameters:** +- `address` (path, string) **required** +- `page` (query, integer) +- `limit` (query, integer) +- `market_id` (query, string) +- `market_slug` (query, string) +- `network_id` (query, integer) +- `since` (query, integer) +- `until` (query, integer) +- `code` (query, string) + +--- +##### `getUsersPortfolio` + +**GET** `/users/{address}/portfolio` + +Get User Portfolio *(Auth required)* + +**Parameters:** +- `address` (path, string) **required** +- `page` (query, integer) +- `limit` (query, integer) +- `min_shares` (query, number) — Default 0.1 +- `market_slug` (query, string) +- `market_id` (query, string) +- `network_id` (query, integer) +- `token_address` (query, string) + +--- +##### `getUsersMarkets` + +**GET** `/users/{address}/markets` + +Get User Markets Portfolio *(Auth required)* + +**Parameters:** +- `address` (path, string) **required** +- `page` (query, integer) +- `limit` (query, integer) +- `min_shares` (query, number) +- `network_id` (query, integer) +- `state` (query, string) +- `trading_model` (query, string) — Filter portfolio results by trading model (e.g. CLOB, AMM) +- `token_address` (query, string) +- `topics` (query, string) +- `keyword` (query, string) +- `market_ids` (query, string) — Comma-separated list of {networkId}:{marketId} pairs + +--- diff --git a/sdks/typescript/API_REFERENCE.md b/sdks/typescript/API_REFERENCE.md index 1587058f..f25b7756 100644 --- a/sdks/typescript/API_REFERENCE.md +++ b/sdks/typescript/API_REFERENCE.md @@ -1,510 +1,521 @@ -# pmxtjs - API Reference - -A unified TypeScript SDK for supported prediction markets, with local sidecar access to PMXT exchange implementations and hosted services where configured. - -## Installation - -```bash -npm install pmxtjs -``` - -## Quick Start - -```typescript -import pmxt from 'pmxtjs'; - -// Initialize exchanges (server starts automatically!) -const poly = new pmxt.Polymarket(); -const kalshi = new pmxt.Kalshi(); -const limitless = new pmxt.Limitless(); // Requires API key for authenticated operations - -// Search for markets -const markets = await poly.fetchMarkets({ query: "Trump" }); -console.log(markets[0].title); -``` - -> **Note**: This SDK automatically manages the PMXT sidecar server. - ---- - -## Server Management - -The SDK exposes a `pmxt.server` namespace for managing the background sidecar server. Use these commands for clearing state, resolving "port busy" errors, inspecting health, or tailing logs. - -```typescript -import pmxt from 'pmxtjs'; - -await pmxt.server.status(); // snapshot: { running, pid, port, version, uptimeSeconds, lockFile } -await pmxt.server.health(); // boolean - true if /health responds ok -await pmxt.server.start(); // idempotent - no-op if already running -await pmxt.server.stop(); // stop the sidecar and clean up the lock file -await pmxt.server.restart(); // stop and start the sidecar -pmxt.server.logs(50); // last N log lines from ~/.pmxt/server.log (default 50) -``` - -### `pmxt.server.status` - -Returns a fresh object describing the sidecar state. Useful for diagnosing "is it running?" before issuing API calls. - -```typescript -import pmxt from 'pmxtjs'; -const info = await pmxt.server.status(); -console.log(info.running, info.pid, info.port, info.uptimeSeconds); -``` - -### `pmxt.server.health` - -Returns `true` if the sidecar's `/health` endpoint responds with status `ok`, otherwise `false`. Lighter than `status()` when you only need a boolean liveness check. - -```typescript -import pmxt from 'pmxtjs'; -if (!(await pmxt.server.health())) { - await pmxt.server.restart(); -} -``` - -### `pmxt.server.start` - -Idempotently start the sidecar. Returns immediately if a healthy server is already running. Use this when you want to fail fast on startup rather than letting the first API call lazily boot the server. - -```typescript -import pmxt from 'pmxtjs'; -await pmxt.server.start(); -``` - -### `pmxt.server.stop` - -Stop the running sidecar and clean up its lock file. - -```typescript -import pmxt from 'pmxtjs'; -await pmxt.server.stop(); -``` - -### `pmxt.server.restart` - -Stop the sidecar (if running) and start a fresh one. Equivalent to `stop()` followed by `start()`. - -```typescript -import pmxt from 'pmxtjs'; -await pmxt.server.restart(); -``` - -### `pmxt.server.logs` - -Return the last `n` lines (default `50`) from the sidecar log file at `~/.pmxt/server.log`. Returns an empty array if no log file exists yet. Invaluable when the server is misbehaving and you need to see what it actually printed. - -```typescript -import pmxt from 'pmxtjs'; -for (const line of pmxt.server.logs(100)) { - console.log(line); -} -``` - ---- - -## Methods - -### `has` - -Capability map indicating which methods this exchange supports. - - -**Signature:** - -```typescript -get has(): ExchangeHas -``` - -**Parameters:** - -- None - -**Returns:** ExchangeHas - Result - -**Example:** - -```typescript -exchange.has -``` - - ---- -### `loadMarkets` - -Load and cache all markets from the exchange into `this.markets` and `this.marketsBySlug`. - - -**Signature:** - -```typescript -async loadMarkets(reload: boolean): Promise> -``` - -**Parameters:** - -- `reload` (boolean): Force a fresh fetch from the API even if markets are already loaded - -**Returns:** Promise> - Dictionary of markets indexed by marketId - -**Example:** - -```typescript -await exchange.loadMarkets(true) -``` - - ---- -### `fetchMarkets` - -Fetch markets with optional filtering, search, or slug lookup. - - -**Signature:** - -```typescript -async fetchMarkets(params?: MarketFetchParams): Promise -``` - -**Parameters:** - -- `params` (MarketFetchParams) - **Optional**: Optional parameters for filtering and search - - `params.query` - Search keyword to filter markets - - `params.slug` - Market slug/ticker for direct lookup - - `params.limit` - Maximum number of results - - `params.offset` - Pagination offset - - `params.sort` - Sort order ('volume' | 'liquidity' | 'newest') - - `params.searchIn` - Where to search ('title' | 'description' | 'both') - -**Returns:** Promise<[UnifiedMarket](#unifiedmarket)[]> - Array of unified markets - -**Example:** - -```typescript -await exchange.fetchMarkets({ query: "Trump", slug: "will-trump-win", limit: 10 }) -``` - -**Notes:** -ordering — exchanges may reorder or add markets between requests. For stable iteration -across pages, use `loadMarkets()` and paginate over `Object.values(exchange.markets)`. -Some exchanges (like Limitless) may only support status 'active' for search results. - ---- -### `fetchMarketsPaginated` - -Fetch markets with cursor-based pagination backed by a stable in-memory snapshot. - - -**Signature:** - -```typescript -async fetchMarketsPaginated(params?: { limit?: number; cursor?: string; filter?: MarketFilterCriteria }): Promise -``` - -**Parameters:** - -- `params` ({ limit?: number; cursor?: string; filter?: MarketFilterCriteria }) - **Optional**: params - - `params.limit` - Page size (default: return all markets) - - `params.cursor` - Opaque cursor returned by a previous call - -**Returns:** Promise<[PaginatedMarketsResult](#paginatedmarketsresult)> - PaginatedMarketsResult with data, total, and optional nextCursor - -**Example:** - -```typescript -await exchange.fetchMarketsPaginated({ limit: 10, cursor: "..." }) -``` - - ---- -### `fetchEventsPaginated` - -Paginated variant of {@link fetchEvents}. - - -**Signature:** - -```typescript -async fetchEventsPaginated(params?: { limit?: number; cursor?: string; filter?: EventFilterCriteria }): Promise -``` - -**Parameters:** - -- `params` ({ limit?: number; cursor?: string; filter?: EventFilterCriteria }) - **Optional**: params - - `params.limit` - Page size (default: return all events) - - `params.cursor` - Opaque cursor returned by a previous call - -**Returns:** Promise<[PaginatedEventsResult](#paginatedeventsresult)> - PaginatedEventsResult with data, total, and optional nextCursor - -**Example:** - -```typescript -await exchange.fetchEventsPaginated({ limit: 10, cursor: "..." }) -``` - - ---- -### `fetchEvents` - -Fetch events with optional keyword search. - - -**Signature:** - -```typescript -async fetchEvents(params?: EventFetchParams): Promise -``` - -**Parameters:** - -- `params` ([EventFetchParams](#eventfetchparams)) - **Optional**: Optional parameters for search and filtering - - `params.query` - Search keyword to filter events. If omitted, returns top events by volume. - - `params.limit` - Maximum number of results - - `params.offset` - Pagination offset - - `params.searchIn` - Where to search ('title' | 'description' | 'both') - -**Returns:** Promise<[UnifiedEvent](#unifiedevent)[]> - Array of unified events - -**Example:** - -```typescript -await exchange.fetchEvents({ query: "Trump", limit: 10, offset: 0 }) -``` - -**Notes:** -Some exchanges (like Limitless) may only support status 'active' for search results. - ---- -### `fetchSeries` - -Fetch the recurring series (fourth tier above Event -> Market -> Outcome) - - -**Signature:** - -```typescript -async fetchSeries(params?: SeriesFetchParams): Promise -``` - -**Parameters:** - -- `params` (SeriesFetchParams) - **Optional**: params - -**Returns:** Promise<[UnifiedSeries](#unifiedseries)[]> - Array of unified series. Always an array, including the singular-lookup case. - -**Example:** - -```typescript -await exchange.fetchSeries() -``` - - ---- -### `fetchMarket` - -Fetch a single market by lookup parameters. - - -**Signature:** - -```typescript -async fetchMarket(params?: MarketFetchParams): Promise -``` - -**Parameters:** - -- `params` (MarketFetchParams) - **Optional**: Lookup parameters (marketId, outcomeId, slug, etc.) - -**Returns:** Promise<[UnifiedMarket](#unifiedmarket)> - A single unified market - -**Example:** - -```typescript -await exchange.fetchMarket() -``` - - ---- -### `fetchEvent` - -Fetch a single event by lookup parameters. - - -**Signature:** - -```typescript -async fetchEvent(params?: EventFetchParams): Promise -``` - -**Parameters:** - -- `params` ([EventFetchParams](#eventfetchparams)) - **Optional**: Lookup parameters (eventId, slug, query) - -**Returns:** Promise<[UnifiedEvent](#unifiedevent)> - A single unified event - -**Example:** - -```typescript -await exchange.fetchEvent() -``` - - ---- -### `fetchEventMetadata` - -Fetch venue-native metadata for a specific event when the exchange - - -**Signature:** - -```typescript -async fetchEventMetadata(eventTicker: string): Promise> -``` - -**Parameters:** - -- `eventTicker` (string): eventTicker - -**Returns:** Promise> - Result - -**Example:** - -```typescript -await exchange.fetchEventMetadata("...") -``` - - ---- -### `fetchOHLCV` - -Fetch historical OHLCV (candlestick) price data for a specific market outcome. - - -**Signature:** - -```typescript -async fetchOHLCV(outcomeId: string, params: OHLCVParams): Promise -``` - -**Parameters:** - -- `outcomeId` (string): The Outcome ID (outcomeId). Use outcome.outcomeId, NOT market.marketId -- `params` ([OHLCVParams](#ohlcvparams)): OHLCV parameters including resolution (required) - -**Returns:** Promise<[PriceCandle](#pricecandle)[]> - Array of price candles - -**Example:** - -```typescript -await exchange.fetchOHLCV("abc123", { resolution: "1h", limit: 100 }) -``` - -**Notes:** -**CRITICAL**: Use `outcome.outcomeId` (TS) / `outcome.outcome_id` (Python), not the market ID. -Polymarket: outcomeId is the CLOB Token ID. Kalshi: outcomeId is the Market Ticker. -Common resolutions: '1m' | '5m' | '15m' | '1h' | '6h' | '1d'. Arbitrary intervals (e.g. '30s', '120s', '3h') accepted by venues that support them. - ---- -### `fetchOrderBook` - -Fetch the order book (bids/asks) for a specific outcome. - - -**Signature:** - -```typescript -async fetchOrderBook(outcomeId: string, limit?: number, params?: FetchOrderBookParams): Promise -``` - -**Parameters:** - -- `outcomeId` (string): The Outcome ID (outcomeId) or market slug -- `limit` (number) - **Optional**: Max number of bid/ask levels to return. For range -- `params` ([FetchOrderBookParams](#fetchorderbookparams)) - **Optional**: Optional parameters: - -**Returns:** Promise<[OrderBook](#orderbook)> - Order book with bids and asks. Returns OrderBook[] when - -**Example:** - -```typescript -await exchange.fetchOrderBook("abc123", 10, {}) -``` - - ---- -### `fetchOrderBooks` - -Batch variant of {@link fetchOrderBook}. Fetches order books for - - -**Signature:** - -```typescript -async fetchOrderBooks(outcomeIds: string[]): Promise> -``` - -**Parameters:** - -- `outcomeIds` (string[]): List of Outcome IDs (outcomeId). Each id must be in the - -**Returns:** Promise> - A map keyed by the input id (preserving the caller's exact - -**Example:** - -```typescript -await exchange.fetchOrderBooks(["12345"]) -``` - - ---- -### `fetchTrades` - -Fetch raw trade history for a specific outcome. - - -**Signature:** - -```typescript -async fetchTrades(outcomeId: string, params: TradesParams | HistoryFilterParams): Promise -``` - -**Parameters:** - -- `outcomeId` (string): The Outcome ID (outcomeId) -- `params` (TradesParams | HistoryFilterParams): Trade filter parameters - -**Returns:** Promise<[Trade](#trade)[]> - Array of recent trades - -**Example:** - -```typescript -await exchange.fetchTrades("abc123", { limit: 50 }) -``` - -**Notes:** -Polymarket requires an API key for trade history. Use fetchOHLCV for public historical data. - ---- -### `createOrder` - -Place a new order on the exchange. - - -**Signature:** - -```typescript -async createOrder(params: CreateOrderInput): Promise -``` - -**Parameters:** - -- `params` ([CreateOrderInput](#createorderinput)): Order parameters - -**Returns:** Promise<[Order](#order)> - The created order - -**Example:** - -```typescript +# pmxtjs - API Reference + +A unified TypeScript SDK for supported prediction markets, with local sidecar access to PMXT exchange implementations and hosted services where configured. + +## Installation + +```bash +npm install pmxtjs +``` + +## Quick Start + +```typescript +import pmxt from 'pmxtjs'; + +// Initialize exchanges (server starts automatically!) +const poly = new pmxt.Polymarket(); +const kalshi = new pmxt.Kalshi(); +const limitless = new pmxt.Limitless(); // Requires API key for authenticated operations + +// Search for markets +const markets = await poly.fetchMarkets({ query: "Trump" }); +console.log(markets[0].title); +``` + +> **Note**: This SDK automatically manages the PMXT sidecar server. + +--- + +## Server Management + +The SDK exposes a `pmxt.server` namespace for managing the background sidecar server. Use these commands for clearing state, resolving "port busy" errors, inspecting health, or tailing logs. + +```typescript +import pmxt from 'pmxtjs'; + +await pmxt.server.status(); // snapshot: { running, pid, port, version, uptimeSeconds, lockFile } +await pmxt.server.health(); // boolean - true if /health responds ok +await pmxt.server.start(); // idempotent - no-op if already running +await pmxt.server.stop(); // stop the sidecar and clean up the lock file +await pmxt.server.restart(); // stop and start the sidecar +pmxt.server.logs(50); // last N log lines from ~/.pmxt/server.log (default 50) +``` + +### `pmxt.server.status` + +Returns a fresh object describing the sidecar state. Useful for diagnosing "is it running?" before issuing API calls. + +```typescript +import pmxt from 'pmxtjs'; +const info = await pmxt.server.status(); +console.log(info.running, info.pid, info.port, info.uptimeSeconds); +``` + +### `pmxt.server.health` + +Returns `true` if the sidecar's `/health` endpoint responds with status `ok`, otherwise `false`. Lighter than `status()` when you only need a boolean liveness check. + +```typescript +import pmxt from 'pmxtjs'; +if (!(await pmxt.server.health())) { + await pmxt.server.restart(); +} +``` + +### `pmxt.server.start` + +Idempotently start the sidecar. Returns immediately if a healthy server is already running. Use this when you want to fail fast on startup rather than letting the first API call lazily boot the server. + +```typescript +import pmxt from 'pmxtjs'; +await pmxt.server.start(); +``` + +### `pmxt.server.stop` + +Stop the running sidecar and clean up its lock file. + +```typescript +import pmxt from 'pmxtjs'; +await pmxt.server.stop(); +``` + +### `pmxt.server.restart` + +Stop the sidecar (if running) and start a fresh one. Equivalent to `stop()` followed by `start()`. + +```typescript +import pmxt from 'pmxtjs'; +await pmxt.server.restart(); +``` + +### `pmxt.server.logs` + +Return the last `n` lines (default `50`) from the sidecar log file at `~/.pmxt/server.log`. Returns an empty array if no log file exists yet. Invaluable when the server is misbehaving and you need to see what it actually printed. + +```typescript +import pmxt from 'pmxtjs'; +for (const line of pmxt.server.logs(100)) { + console.log(line); +} +``` + +--- + +## Methods + +### `has` + +Capability map indicating which methods this exchange supports. + + +**Signature:** + +```typescript +get has(): ExchangeHas +``` + +**Parameters:** + +- None + +**Returns:** ExchangeHas - Result + +**Example:** + +```typescript +exchange.has +``` + + +--- +### `loadMarkets` + +Load and cache all markets from the exchange into `this.markets` and `this.marketsBySlug`. + + + +**Signature:** + +```typescript +async loadMarkets(reload: boolean): Promise> +``` + +**Parameters:** + +- `reload` (boolean): Force a fresh fetch from the API even if markets are already loaded + +**Returns:** Promise> - Dictionary of markets indexed by marketId + +**Example:** + +```typescript +await exchange.loadMarkets(true) +``` + + +--- +### `fetchMarkets` + +Fetch markets with optional filtering, search, or slug lookup. + + + +**Signature:** + +```typescript +async fetchMarkets(params?: MarketFetchParams): Promise +``` + +**Parameters:** + +- `params` (MarketFetchParams) - **Optional**: Optional parameters for filtering and search + - `params.query` - Search keyword to filter markets + - `params.slug` - Market slug/ticker for direct lookup + - `params.limit` - Maximum number of results + - `params.offset` - Pagination offset + - `params.sort` - Sort order ('volume' | 'liquidity' | 'newest') + - `params.searchIn` - Where to search ('title' | 'description' | 'both') + +**Returns:** Promise<[UnifiedMarket](#unifiedmarket)[]> - Array of unified markets + +**Example:** + +```typescript +await exchange.fetchMarkets({ query: "Trump", slug: "will-trump-win", limit: 10 }) +``` + +**Notes:** +ordering — exchanges may reorder or add markets between requests. For stable iteration +across pages, use `loadMarkets()` and paginate over `Object.values(exchange.markets)`. +Some exchanges (like Limitless) may only support status 'active' for search results. + +--- +### `fetchMarketsPaginated` + +Fetch markets with cursor-based pagination backed by a stable in-memory snapshot. + + + +**Signature:** + +```typescript +async fetchMarketsPaginated(params?: { limit?: number; cursor?: string; filter?: MarketFilterCriteria }): Promise +``` + +**Parameters:** + +- `params` ({ limit?: number; cursor?: string; filter?: MarketFilterCriteria }) - **Optional**: params + - `params.limit` - Page size (default: return all markets) + - `params.cursor` - Opaque cursor returned by a previous call + +**Returns:** Promise<[PaginatedMarketsResult](#paginatedmarketsresult)> - PaginatedMarketsResult with data, total, and optional nextCursor + +**Example:** + +```typescript +await exchange.fetchMarketsPaginated({ limit: 10, cursor: "..." }) +``` + + +--- +### `fetchEventsPaginated` + +Paginated variant of {@link fetchEvents}. + + + +**Signature:** + +```typescript +async fetchEventsPaginated(params?: { limit?: number; cursor?: string; filter?: EventFilterCriteria }): Promise +``` + +**Parameters:** + +- `params` ({ limit?: number; cursor?: string; filter?: EventFilterCriteria }) - **Optional**: params + - `params.limit` - Page size (default: return all events) + - `params.cursor` - Opaque cursor returned by a previous call + +**Returns:** Promise<[PaginatedEventsResult](#paginatedeventsresult)> - PaginatedEventsResult with data, total, and optional nextCursor + +**Example:** + +```typescript +await exchange.fetchEventsPaginated({ limit: 10, cursor: "..." }) +``` + + +--- +### `fetchEvents` + +Fetch events with optional keyword search. + + + +**Signature:** + +```typescript +async fetchEvents(params?: EventFetchParams): Promise +``` + +**Parameters:** + +- `params` ([EventFetchParams](#eventfetchparams)) - **Optional**: Optional parameters for search and filtering + - `params.query` - Search keyword to filter events. If omitted, returns top events by volume. + - `params.limit` - Maximum number of results + - `params.offset` - Pagination offset + - `params.searchIn` - Where to search ('title' | 'description' | 'both') + +**Returns:** Promise<[UnifiedEvent](#unifiedevent)[]> - Array of unified events + +**Example:** + +```typescript +await exchange.fetchEvents({ query: "Trump", limit: 10, offset: 0 }) +``` + +**Notes:** +Some exchanges (like Limitless) may only support status 'active' for search results. + +--- +### `fetchSeries` + +Fetch the recurring series (fourth tier above Event -> Market -> Outcome) + + + +**Signature:** + +```typescript +async fetchSeries(params?: SeriesFetchParams): Promise +``` + +**Parameters:** + +- `params` (SeriesFetchParams) - **Optional**: params + +**Returns:** Promise<[UnifiedSeries](#unifiedseries)[]> - Array of unified series. Always an array, including the singular-lookup case. + +**Example:** + +```typescript +await exchange.fetchSeries() +``` + + +--- +### `fetchMarket` + +Fetch a single market by lookup parameters. + + + +**Signature:** + +```typescript +async fetchMarket(params?: MarketFetchParams): Promise +``` + +**Parameters:** + +- `params` (MarketFetchParams) - **Optional**: Lookup parameters (marketId, outcomeId, slug, etc.) + +**Returns:** Promise<[UnifiedMarket](#unifiedmarket)> - A single unified market + +**Example:** + +```typescript +await exchange.fetchMarket() +``` + + +--- +### `fetchEvent` + +Fetch a single event by lookup parameters. + + + +**Signature:** + +```typescript +async fetchEvent(params?: EventFetchParams): Promise +``` + +**Parameters:** + +- `params` ([EventFetchParams](#eventfetchparams)) - **Optional**: Lookup parameters (eventId, slug, query) + +**Returns:** Promise<[UnifiedEvent](#unifiedevent)> - A single unified event + +**Example:** + +```typescript +await exchange.fetchEvent() +``` + + +--- +### `fetchEventMetadata` + +Fetch venue-native metadata for a specific event when the exchange + + + +**Signature:** + +```typescript +async fetchEventMetadata(eventTicker: string): Promise> +``` + +**Parameters:** + +- `eventTicker` (string): eventTicker + +**Returns:** Promise> - Result + +**Example:** + +```typescript +await exchange.fetchEventMetadata("...") +``` + + +--- +### `fetchOHLCV` + +Fetch historical OHLCV (candlestick) price data for a specific market outcome. + + +**Signature:** + +```typescript +async fetchOHLCV(outcomeId: string, params: OHLCVParams): Promise +``` + +**Parameters:** + +- `outcomeId` (string): The Outcome ID (outcomeId). Use outcome.outcomeId, NOT market.marketId +- `params` ([OHLCVParams](#ohlcvparams)): OHLCV parameters including resolution (required) + +**Returns:** Promise<[PriceCandle](#pricecandle)[]> - Array of price candles + +**Example:** + +```typescript +await exchange.fetchOHLCV("abc123", { resolution: "1h", limit: 100 }) +``` + +**Notes:** +**CRITICAL**: Use `outcome.outcomeId` (TS) / `outcome.outcome_id` (Python), not the market ID. +Polymarket: outcomeId is the CLOB Token ID. Kalshi: outcomeId is the Market Ticker. +Common resolutions: '1m' | '5m' | '15m' | '1h' | '6h' | '1d'. Arbitrary intervals (e.g. '30s', '120s', '3h') accepted by venues that support them. + +--- +### `fetchOrderBook` + +Fetch the order book (bids/asks) for a specific outcome. + + + +**Signature:** + +```typescript +async fetchOrderBook(outcomeId: string, limit?: number, params?: FetchOrderBookParams): Promise +``` + +**Parameters:** + +- `outcomeId` (string): The Outcome ID (outcomeId) or market slug +- `limit` (number) - **Optional**: Max number of bid/ask levels to return. For range +- `params` ([FetchOrderBookParams](#fetchorderbookparams)) - **Optional**: Optional parameters: + +**Returns:** Promise<[OrderBook](#orderbook)> - Order book with bids and asks. Returns OrderBook[] when + +**Example:** + +```typescript +await exchange.fetchOrderBook("abc123", 10, {}) +``` + + +--- +### `fetchOrderBooks` + +Batch variant of {@link fetchOrderBook}. Fetches order books for + + + +**Signature:** + +```typescript +async fetchOrderBooks(outcomeIds: string[]): Promise> +``` + +**Parameters:** + +- `outcomeIds` (string[]): List of Outcome IDs (outcomeId). Each id must be in the + +**Returns:** Promise> - A map keyed by the input id (preserving the caller's exact + +**Example:** + +```typescript +await exchange.fetchOrderBooks(["12345"]) +``` + + +--- +### `fetchTrades` + +Fetch raw trade history for a specific outcome. + + +**Signature:** + +```typescript +async fetchTrades(outcomeId: string, params: TradesParams | HistoryFilterParams): Promise +``` + +**Parameters:** + +- `outcomeId` (string): The Outcome ID (outcomeId) +- `params` (TradesParams | HistoryFilterParams): Trade filter parameters + +**Returns:** Promise<[Trade](#trade)[]> - Array of recent trades + +**Example:** + +```typescript +await exchange.fetchTrades("abc123", { limit: 50 }) +``` + +**Notes:** +Polymarket requires an API key for trade history. Use fetchOHLCV for public historical data. + +--- +### `createOrder` + +Place a new order on the exchange. + + +**Signature:** + +```typescript +async createOrder(params: CreateOrderInput): Promise +``` + +**Parameters:** + +- `params` ([CreateOrderInput](#createorderinput)): Order parameters + +**Returns:** Promise<[Order](#order)> - The created order + +**Example:** + +```typescript await exchange.createOrder({ marketId: "12345", outcomeId: "abc123", @@ -512,31 +523,32 @@ await exchange.createOrder({ type: "limit", amount: 50, price: 0.65 -}) -``` - - ---- -### `buildOrder` - -Build an order payload without submitting it to the exchange. - - -**Signature:** - -```typescript -async buildOrder(params: CreateOrderInput): Promise -``` - -**Parameters:** - -- `params` ([CreateOrderInput](#createorderinput)): Order parameters (same as createOrder) - -**Returns:** Promise<[BuiltOrder](#builtorder)> - A BuiltOrder containing the exchange-native payload - -**Example:** - -```typescript +}) +``` + + +--- +### `buildOrder` + +Build an order payload without submitting it to the exchange. + + + +**Signature:** + +```typescript +async buildOrder(params: CreateOrderInput): Promise +``` + +**Parameters:** + +- `params` ([CreateOrderInput](#createorderinput)): Order parameters (same as createOrder) + +**Returns:** Promise<[BuiltOrder](#builtorder)> - A BuiltOrder containing the exchange-native payload + +**Example:** + +```typescript await exchange.buildOrder({ marketId: "12345", outcomeId: "abc123", @@ -544,31 +556,31 @@ await exchange.buildOrder({ type: "limit", amount: 50, price: 0.65 -}) -``` - - ---- -### `submitOrder` - -Submit a pre-built order returned by buildOrder(). - - -**Signature:** - -```typescript -async submitOrder(built: BuiltOrder): Promise -``` - -**Parameters:** - -- `built` ([BuiltOrder](#builtorder)): A BuiltOrder from buildOrder() - -**Returns:** Promise<[Order](#order)> - The submitted order - -**Example:** - -```typescript +}) +``` + + +--- +### `submitOrder` + +Submit a pre-built order returned by buildOrder(). + + +**Signature:** + +```typescript +async submitOrder(built: BuiltOrder): Promise +``` + +**Parameters:** + +- `built` ([BuiltOrder](#builtorder)): A BuiltOrder from buildOrder() + +**Returns:** Promise<[Order](#order)> - The submitted order + +**Example:** + +```typescript const built = await exchange.buildOrder({ marketId: "12345", outcomeId: "abc123", @@ -577,4659 +589,4676 @@ const built = await exchange.buildOrder({ amount: 50, price: 0.65 }); -await exchange.submitOrder(built) -``` - - ---- -### `cancelOrder` - -Cancel an existing open order. - - -**Signature:** - -```typescript -async cancelOrder(orderId: string): Promise -``` - -**Parameters:** - -- `orderId` (string): The order ID to cancel - -**Returns:** Promise<[Order](#order)> - The cancelled order - -**Example:** - -```typescript -await exchange.cancelOrder("ord-001") -``` - - ---- -### `fetchOrder` - -Fetch a specific order by ID. - - -**Signature:** - -```typescript -async fetchOrder(orderId: string): Promise -``` - -**Parameters:** - -- `orderId` (string): The order ID to look up - -**Returns:** Promise<[Order](#order)> - The order details - -**Example:** - -```typescript -await exchange.fetchOrder("ord-001") -``` - - ---- -### `fetchOpenOrders` - -Fetch all open orders, optionally filtered by market. - - -**Signature:** - -```typescript -async fetchOpenOrders(marketId?: string): Promise -``` - -**Parameters:** - -- `marketId` (string) - **Optional**: Optional market ID to filter by - -**Returns:** Promise<[Order](#order)[]> - Array of open orders - -**Example:** - -```typescript -await exchange.fetchOpenOrders("12345") -``` - - ---- -### `fetchMyTrades` - -Fetch authenticated user trade history. - - -**Signature:** - -```typescript -async fetchMyTrades(params?: MyTradesParams): Promise -``` - -**Parameters:** - -- `params` ([MyTradesParams](#mytradesparams)) - **Optional**: Optional trade history filters - - `params.outcomeId` - Filter by outcome token ID - - `params.marketId` - Filter by market ID or ticker - - `params.since` - Start timestamp or ISO date - - `params.until` - End timestamp or ISO date - - `params.limit` - Maximum number of trades - - `params.cursor` - Pagination cursor - -**Returns:** Promise<[UserTrade](#usertrade)[]> - Array of user trades - -**Example:** - -```typescript -await exchange.fetchMyTrades({ limit: 10 }) -``` - - ---- -### `fetchClosedOrders` - -Fetch authenticated closed orders. - - -**Signature:** - -```typescript -async fetchClosedOrders(params?: OrderHistoryParams): Promise -``` - -**Parameters:** - -- `params` ([OrderHistoryParams](#orderhistoryparams)) - **Optional**: Optional order history filters - - `params.marketId` - Filter by market ID or ticker - - `params.since` - Start timestamp or ISO date - - `params.until` - End timestamp or ISO date - - `params.limit` - Maximum number of orders - - `params.cursor` - Pagination cursor - -**Returns:** Promise<[Order](#order)[]> - Array of closed orders - -**Example:** - -```typescript -await exchange.fetchClosedOrders({ marketId: "12345", limit: 10 }) -``` - - ---- -### `fetchAllOrders` - -Fetch authenticated order history across open and closed orders. - - -**Signature:** - -```typescript -async fetchAllOrders(params?: OrderHistoryParams): Promise -``` - -**Parameters:** - -- `params` ([OrderHistoryParams](#orderhistoryparams)) - **Optional**: Optional order history filters - - `params.marketId` - Filter by market ID or ticker - - `params.since` - Start timestamp or ISO date - - `params.until` - End timestamp or ISO date - - `params.limit` - Maximum number of orders - - `params.cursor` - Pagination cursor - -**Returns:** Promise<[Order](#order)[]> - Array of orders - -**Example:** - -```typescript -await exchange.fetchAllOrders({ marketId: "12345", limit: 10 }) -``` - - ---- -### `fetchPositions` - -Fetch current user positions across all markets. - - -**Signature:** - -```typescript -async fetchPositions(address?: string): Promise -``` - -**Parameters:** - -- `address` (string) - **Optional**: Optional public wallet address - -**Returns:** Promise<[Position](#position)[]> - Array of user positions - -**Example:** - -```typescript -await exchange.fetchPositions("0xabc...") -``` - - ---- -### `fetchBalance` - -Fetch account balances. - - -**Signature:** - -```typescript -async fetchBalance(address?: string): Promise -``` - -**Parameters:** - -- `address` (string) - **Optional**: Optional public wallet address - -**Returns:** Promise<[Balance](#balance)[]> - Array of account balances - -**Example:** - -```typescript -await exchange.fetchBalance("0xabc...") -``` - - ---- -### `getExecutionPrice` - -Calculate the volume-weighted average execution price for a given order size. - - -**Signature:** - -```typescript -getExecutionPrice(orderBook: OrderBook, side: 'buy' | 'sell', amount: number): number -``` - -**Parameters:** - -- `orderBook` ([OrderBook](#orderbook)): The current order book -- `side` ('buy' | 'sell'): 'buy' or 'sell' -- `amount` (number): Number of contracts to simulate - -**Returns:** number - Average execution price, or 0 if insufficient liquidity - -**Example:** - -```typescript -const orderBook = await exchange.fetchOrderBook("abc123") -exchange.getExecutionPrice(orderBook, "buy", 50) -``` - - ---- -### `getExecutionPriceDetailed` - -Calculate detailed execution price information including partial fill data. - - -**Signature:** - -```typescript -async getExecutionPriceDetailed(orderBook: OrderBook, side: 'buy' | 'sell', amount: number): Promise -``` - -**Parameters:** - -- `orderBook` ([OrderBook](#orderbook)): The current order book -- `side` ('buy' | 'sell'): 'buy' or 'sell' -- `amount` (number): Number of contracts to simulate - -**Returns:** Promise<[ExecutionPriceResult](#executionpriceresult)> - Detailed execution result with price, filled amount, and fill status - -**Example:** - -```typescript -const orderBook = await exchange.fetchOrderBook("abc123") -await exchange.getExecutionPriceDetailed(orderBook, "buy", 50) -``` - - ---- -### `filterMarkets` - -Filter a list of markets by criteria. - - -**Signature:** - -```typescript -async filterMarkets(markets: UnifiedMarket[], criteria: string | MarketFilterCriteria | MarketFilterFunction): Promise -``` - -**Parameters:** - -- `markets` ([UnifiedMarket](#unifiedmarket)[]): Array of markets to filter -- `criteria` (string | MarketFilterCriteria | MarketFilterFunction): Filter criteria: string (text search), object (structured), or function (predicate) - -**Returns:** Promise<[UnifiedMarket](#unifiedmarket)[]> - Filtered array of markets - -**Example:** - -```typescript -const markets = await exchange.fetchMarkets({ query: "Trump" }) -await exchange.filterMarkets(markets, "Trump") -``` - - ---- -### `filterEvents` - -Filter a list of events by criteria. - - -**Signature:** - -```typescript -async filterEvents(events: UnifiedEvent[], criteria: string | EventFilterCriteria | EventFilterFunction): Promise -``` - -**Parameters:** - -- `events` ([UnifiedEvent](#unifiedevent)[]): Array of events to filter -- `criteria` (string | EventFilterCriteria | EventFilterFunction): Filter criteria: string (text search), object (structured), or function (predicate) - -**Returns:** Promise<[UnifiedEvent](#unifiedevent)[]> - Filtered array of events - -**Example:** - -```typescript -const events = await exchange.fetchEvents({ query: "Trump" }) -await exchange.filterEvents(events, "Trump") -``` - - ---- -### `watchOrderBook` - -Watch order book updates in real-time via WebSocket. - - -**Signature:** - -```typescript -async watchOrderBook(outcomeId: string, limit?: number, params: Record): Promise -``` - -**Parameters:** - -- `outcomeId` (string): The Outcome ID to watch -- `limit` (number) - **Optional**: Optional limit for orderbook depth -- `params` (Record): Optional exchange-specific parameters - -**Returns:** Promise<[OrderBook](#orderbook)> - Promise that resolves with the current orderbook state - -**Example:** - -```typescript -await exchange.watchOrderBook("abc123", 10, {}) -``` - - ---- -### `watchOrderBooks` - -Watch multiple order books simultaneously via WebSocket. - - -**Signature:** - -```typescript -async watchOrderBooks(outcomeIds: string[], limit?: number, params: Record): Promise> -``` - -**Parameters:** - -- `outcomeIds` (string[]): Array of Outcome IDs to watch -- `limit` (number) - **Optional**: Optional limit for orderbook depth -- `params` (Record): Optional exchange-specific parameters - -**Returns:** Promise> - Promise that resolves with order books keyed by ID - -**Example:** - -```typescript -await exchange.watchOrderBooks(["12345"], 10, {}) -``` - - ---- -### `unwatchOrderBook` - -Unsubscribe from a previously watched order book stream. - - -**Signature:** - -```typescript -async unwatchOrderBook(outcomeId: string): Promise -``` - -**Parameters:** - -- `outcomeId` (string): The Outcome ID to stop watching - -**Returns:** Promise - Result - -**Example:** - -```typescript -await exchange.unwatchOrderBook("abc123") -``` - - ---- -### `watchTrades` - -Watch trade executions in real-time via WebSocket. - - -**Signature:** - -```typescript -async watchTrades(outcomeId: string, address?: string, since?: number, limit?: number): Promise -``` - -**Parameters:** - -- `outcomeId` (string): The Outcome ID to watch -- `address` (string) - **Optional**: Public wallet address -- `since` (number) - **Optional**: Optional timestamp to filter trades from -- `limit` (number) - **Optional**: Optional limit for number of trades - -**Returns:** Promise<[Trade](#trade)[]> - Promise that resolves with recent trades - -**Example:** - -```typescript -await exchange.watchTrades("abc123", "0xabc...", 1710000000000, 50) -``` - - ---- -### `watchAddress` - -Stream activity for a public wallet address - - -**Signature:** - -```typescript -async watchAddress(address: string, types?: SubscriptionOption[]): Promise -``` - -**Parameters:** - -- `address` (string): Public wallet address to watch -- `types` (SubscriptionOption[]) - **Optional**: Subset of activity to watch (default: all types) - -**Returns:** Promise - Promise that resolves with the latest SubscribedAddressSnapshot snapshot - -**Example:** - -```typescript -await exchange.watchAddress("0xabc...", ["trades"]) -``` - - ---- -### `unwatchAddress` - -Stop watching a previously registered wallet address and release its resource updates. - - -**Signature:** - -```typescript -async unwatchAddress(address: string): Promise -``` - -**Parameters:** - -- `address` (string): Public wallet address to stop watching - -**Returns:** Promise - Result - -**Example:** - -```typescript -await exchange.unwatchAddress("0xabc...") -``` - - ---- -### `close` - -Close all WebSocket connections and clean up resources. - - -**Signature:** - -```typescript -async close(): Promise -``` - -**Parameters:** - -- None - -**Returns:** Promise - Result - -**Example:** - -```typescript -await exchange.close() -``` - - ---- -### `fetchMarketMatches` - -Find the same or related market on other venues. Two modes: - - -**Signature:** - -```typescript -async fetchMarketMatches(params?: FetchMarketMatchesParams): Promise -``` - -**Parameters:** - -- `params` ([FetchMarketMatchesParams](#fetchmarketmatchesparams)) - **Optional**: Match filter parameters - -**Returns:** Promise<[MatchResult](#matchresult)[]> - Array of matched markets with relation and confidence - -**Example:** - -```typescript -await exchange.fetchMarketMatches() -``` - - ---- -### `fetchMatches` - -fetchMatches - - -**Signature:** - -```typescript -async fetchMatches(params: FetchMatchesParams): Promise -``` - -**Parameters:** - -- `params` (FetchMatchesParams): params - -**Returns:** Promise<[MatchResult](#matchresult)[]> - Result - -**Example:** - -```typescript -await exchange.fetchMatches() -``` - - ---- -### `fetchEventMatches` - -Find the same or related event on other venues. Two modes: - - -**Signature:** - -```typescript -async fetchEventMatches(params?: FetchEventMatchesParams): Promise -``` - -**Parameters:** - -- `params` ([FetchEventMatchesParams](#fetcheventmatchesparams)) - **Optional**: Event match filter parameters - -**Returns:** Promise<[EventMatchResult](#eventmatchresult)[]> - Array of matched events with market-level match details - -**Example:** - -```typescript -await exchange.fetchEventMatches() -``` - - ---- -### `compareMarketPrices` - -Compare live prices for the same market across venues. Finds identity matches and returns side-by-side best bid/ask prices so you can spot price differences at a glance. - - -**Signature:** - -```typescript -async compareMarketPrices(params: CompareMarketPricesParams): Promise -``` - -**Parameters:** - -- `params` (CompareMarketPricesParams): Match filter parameters (uses relation: 'identity' internally) - -**Returns:** Promise<[PriceComparison](#pricecomparison)[]> - Array of price comparisons across venues - -**Example:** - -```typescript -await exchange.compareMarketPrices() -``` - - ---- -### `fetchRelatedMarkets` - -Find related markets across venues. Discovers subset/superset market relationships - - -**Signature:** - -```typescript -async fetchRelatedMarkets(params: FetchMatchesParams): Promise -``` - -**Parameters:** - -- `params` (FetchMatchesParams): Match filter parameters - -**Returns:** Promise<[PriceComparison](#pricecomparison)[]> - Array of subset/superset matches with live prices - -**Example:** - -```typescript -await exchange.fetchRelatedMarkets() -``` - - ---- -### `fetchMatchedMarkets` - -fetchMatchedMarkets - - -**Signature:** - -```typescript -async fetchMatchedMarkets(params?: FetchMatchedMarketsParams): Promise -``` - -**Parameters:** - -- `params` ([FetchMatchedMarketsParams](#fetchmatchedmarketsparams)) - **Optional**: params - -**Returns:** Promise<[MatchedMarketPair](#matchedmarketpair)[]> - Result - -**Example:** - -```typescript -await exchange.fetchMatchedMarkets() -``` - - ---- -### `fetchMatchedPrices` - -fetchMatchedPrices - - -**Signature:** - -```typescript -async fetchMatchedPrices(params?: FetchMatchedPricesParams): Promise -``` - -**Parameters:** - -- `params` (FetchMatchedPricesParams) - **Optional**: Price comparison parameters (minDifference, category, limit) - -**Returns:** Promise - Array of matched market pairs with prices from each venue - -**Example:** - -```typescript -await exchange.fetchMatchedPrices() -``` - - ---- -### `fetchHedges` - -fetchHedges - - -**Signature:** - -```typescript -async fetchHedges(params: FetchMatchesParams): Promise -``` - -**Parameters:** - -- `params` (FetchMatchesParams): Match filter parameters - -**Returns:** Promise<[PriceComparison](#pricecomparison)[]> - Array of subset/superset matches with live prices - -**Example:** - -```typescript -await exchange.fetchHedges() -``` - - ---- -### `fetchArbitrage` - -fetchArbitrage - - -**Signature:** - -```typescript -async fetchArbitrage(params?: FetchArbitrageParams): Promise -``` - -**Parameters:** - -- `params` ([FetchArbitrageParams](#fetcharbitrageparams)) - **Optional**: Arbitrage scan parameters (minSpread, category, limit) - -**Returns:** Promise<[ArbitrageOpportunity](#arbitrageopportunity)[]> - Array of arbitrage opportunities sorted by spread - -**Example:** - -```typescript -await exchange.fetchArbitrage() -``` - - ---- -### `watchPrices` - -Watch AMM price updates for a market address (Limitless only). - -> **Note**: This method is only available on **limitless** exchange. - - -**Signature:** - -```typescript -async watchPrices(marketAddress: string, callback: (data: any) => void): Promise -``` - -**Parameters:** - -- `marketAddress` (string): Market contract address -- `callback` ((data: any) => void): Callback for price updates - -**Returns:** Promise - Result - -**Example:** - -```typescript -await exchange.watchPrices("0xabc...", (data) => { void data }) -``` - - ---- -### `watchUserPositions` - -Watch user positions in real-time (Limitless only). - -> **Note**: This method is only available on **limitless** exchange. - - -**Signature:** - -```typescript -async watchUserPositions(callback: (data: any) => void): Promise -``` - -**Parameters:** - -- `callback` ((data: any) => void): Callback for position updates - -**Returns:** Promise - Result - -**Example:** - -```typescript -await exchange.watchUserPositions((data) => { void data }) -``` - - ---- -### `watchUserTransactions` - -Watch user transactions in real-time (Limitless only). - -> **Note**: This method is only available on **limitless** exchange. - - -**Signature:** - -```typescript -async watchUserTransactions(callback: (data: any) => void): Promise -``` - -**Parameters:** - -- `callback` ((data: any) => void): Callback for transaction updates - -**Returns:** Promise - Result - -**Example:** - -```typescript -await exchange.watchUserTransactions((data) => { void data }) -``` - - ---- -### `initAuth` - -Initialize L2 API credentials for implicit API signing. - -> **Note**: This method is only available on **polymarket** exchange. - - -**Signature:** - -```typescript -async initAuth(): Promise -``` - -**Parameters:** - -- None - -**Returns:** Promise - Result - -**Example:** - -```typescript -await exchange.initAuth() -``` - - ---- -### `preWarmMarket` - -Pre-warm the SDK's internal caches for a market outcome. - -> **Note**: This method is only available on **polymarket** exchange. - - -**Signature:** - -```typescript -async preWarmMarket(outcomeId: string): Promise -``` - -**Parameters:** - -- `outcomeId` (string): The CLOB Token ID for the outcome (use `outcome.outcomeId`) - -**Returns:** Promise - Result - -**Example:** - -```typescript -await exchange.preWarmMarket("abc123") -``` - - ---- -### `getEventById` - -Fetch a single event by its numeric ID (Probable only). - -> **Note**: This method is only available on **probable** exchange. - - -**Signature:** - -```typescript -async getEventById(id: string): Promise -``` - -**Parameters:** - -- `id` (string): The numeric event ID - -**Returns:** Promise - The UnifiedEvent, or null if not found - -**Example:** - -```typescript -await exchange.getEventById("12345") -``` - - ---- -### `getEventBySlug` - -Fetch a single event by its URL slug (Probable only). - -> **Note**: This method is only available on **probable** exchange. - - -**Signature:** - -```typescript -async getEventBySlug(slug: string): Promise -``` - -**Parameters:** - -- `slug` (string): The event's URL slug (e.g. `"trump-2024-election"`) - -**Returns:** Promise - The UnifiedEvent, or null if not found - -**Example:** - -```typescript -await exchange.getEventBySlug("will-trump-win") -``` - - ---- -### `watchAllOrderBooks` - -Stream all orderbook updates across venues via the hosted WebSocket API. - - -**Signature:** - -```typescript -async watchAllOrderBooks(venues?: string[]): Promise -``` - -**Parameters:** - -- `venues` (string[]) - **Optional**: Optional venue filter. Defaults to this exchange's venue - -**Returns:** Promise - Next event with source, symbol, and orderbook - -**Example:** - -```typescript -await exchange.watchAllOrderBooks(["polymarket", "limitless"]) -``` - - ---- -### `firehose` - -Stream all orderbook updates across venues. - - -**Signature:** - -```typescript -async firehose(venues?: string[]): Promise -``` - -**Parameters:** - -- `venues` (string[]) - **Optional**: Optional venue filter - -**Returns:** Promise - Next event with source, symbol, and orderbook - -**Example:** - -```typescript -await exchange.firehose(["polymarket", "limitless"]) -``` - - ---- - -## Complete Trading Workflow - -```typescript -import pmxt from 'pmxtjs'; +await exchange.submitOrder(built) +``` -const exchange = new pmxt.Polymarket({ - privateKey: process.env.POLYMARKET_PRIVATE_KEY -}); + +--- +### `cancelOrder` + +Cancel an existing open order. + + +**Signature:** + +```typescript +async cancelOrder(orderId: string): Promise +``` + +**Parameters:** + +- `orderId` (string): The order ID to cancel + +**Returns:** Promise<[Order](#order)> - The cancelled order + +**Example:** + +```typescript +await exchange.cancelOrder("ord-001") +``` + + +--- +### `fetchOrder` + +Fetch a specific order by ID. + + +**Signature:** + +```typescript +async fetchOrder(orderId: string): Promise +``` + +**Parameters:** + +- `orderId` (string): The order ID to look up + +**Returns:** Promise<[Order](#order)> - The order details + +**Example:** + +```typescript +await exchange.fetchOrder("ord-001") +``` + + +--- +### `fetchOpenOrders` + +Fetch all open orders, optionally filtered by market. + + +**Signature:** + +```typescript +async fetchOpenOrders(marketId?: string): Promise +``` + +**Parameters:** + +- `marketId` (string) - **Optional**: Optional market ID to filter by + +**Returns:** Promise<[Order](#order)[]> - Array of open orders + +**Example:** + +```typescript +await exchange.fetchOpenOrders("12345") +``` + + +--- +### `fetchMyTrades` + +Fetch authenticated user trade history. + + +**Signature:** + +```typescript +async fetchMyTrades(params?: MyTradesParams): Promise +``` + +**Parameters:** + +- `params` ([MyTradesParams](#mytradesparams)) - **Optional**: Optional trade history filters + - `params.outcomeId` - Filter by outcome token ID + - `params.marketId` - Filter by market ID or ticker + - `params.since` - Start timestamp or ISO date + - `params.until` - End timestamp or ISO date + - `params.limit` - Maximum number of trades + - `params.cursor` - Pagination cursor + +**Returns:** Promise<[UserTrade](#usertrade)[]> - Array of user trades + +**Example:** + +```typescript +await exchange.fetchMyTrades({ limit: 10 }) +``` + + +--- +### `fetchClosedOrders` + +Fetch authenticated closed orders. + + +**Signature:** + +```typescript +async fetchClosedOrders(params?: OrderHistoryParams): Promise +``` + +**Parameters:** + +- `params` ([OrderHistoryParams](#orderhistoryparams)) - **Optional**: Optional order history filters + - `params.marketId` - Filter by market ID or ticker + - `params.since` - Start timestamp or ISO date + - `params.until` - End timestamp or ISO date + - `params.limit` - Maximum number of orders + - `params.cursor` - Pagination cursor + +**Returns:** Promise<[Order](#order)[]> - Array of closed orders + +**Example:** + +```typescript +await exchange.fetchClosedOrders({ marketId: "12345", limit: 10 }) +``` + + +--- +### `fetchAllOrders` + +Fetch authenticated order history across open and closed orders. + + +**Signature:** + +```typescript +async fetchAllOrders(params?: OrderHistoryParams): Promise +``` + +**Parameters:** + +- `params` ([OrderHistoryParams](#orderhistoryparams)) - **Optional**: Optional order history filters + - `params.marketId` - Filter by market ID or ticker + - `params.since` - Start timestamp or ISO date + - `params.until` - End timestamp or ISO date + - `params.limit` - Maximum number of orders + - `params.cursor` - Pagination cursor + +**Returns:** Promise<[Order](#order)[]> - Array of orders + +**Example:** + +```typescript +await exchange.fetchAllOrders({ marketId: "12345", limit: 10 }) +``` + + +--- +### `fetchPositions` + +Fetch current user positions across all markets. + + +**Signature:** + +```typescript +async fetchPositions(address?: string): Promise +``` + +**Parameters:** + +- `address` (string) - **Optional**: Optional public wallet address + +**Returns:** Promise<[Position](#position)[]> - Array of user positions + +**Example:** + +```typescript +await exchange.fetchPositions("0xabc...") +``` + + +--- +### `fetchBalance` + +Fetch account balances. + + +**Signature:** + +```typescript +async fetchBalance(address?: string): Promise +``` + +**Parameters:** + +- `address` (string) - **Optional**: Optional public wallet address + +**Returns:** Promise<[Balance](#balance)[]> - Array of account balances + +**Example:** + +```typescript +await exchange.fetchBalance("0xabc...") +``` + + +--- +### `getExecutionPrice` + +Calculate the volume-weighted average execution price for a given order size. + + + +**Signature:** + +```typescript +getExecutionPrice(orderBook: OrderBook, side: 'buy' | 'sell', amount: number): number +``` + +**Parameters:** + +- `orderBook` ([OrderBook](#orderbook)): The current order book +- `side` ('buy' | 'sell'): 'buy' or 'sell' +- `amount` (number): Number of contracts to simulate + +**Returns:** number - Average execution price, or 0 if insufficient liquidity + +**Example:** + +```typescript +const orderBook = await exchange.fetchOrderBook("abc123") +exchange.getExecutionPrice(orderBook, "buy", 50) +``` + + +--- +### `getExecutionPriceDetailed` + +Calculate detailed execution price information including partial fill data. + + +**Signature:** + +```typescript +async getExecutionPriceDetailed(orderBook: OrderBook, side: 'buy' | 'sell', amount: number): Promise +``` + +**Parameters:** + +- `orderBook` ([OrderBook](#orderbook)): The current order book +- `side` ('buy' | 'sell'): 'buy' or 'sell' +- `amount` (number): Number of contracts to simulate + +**Returns:** Promise<[ExecutionPriceResult](#executionpriceresult)> - Detailed execution result with price, filled amount, and fill status + +**Example:** + +```typescript +const orderBook = await exchange.fetchOrderBook("abc123") +await exchange.getExecutionPriceDetailed(orderBook, "buy", 50) +``` + + +--- +### `filterMarkets` + +Filter a list of markets by criteria. + + + +**Signature:** + +```typescript +async filterMarkets(markets: UnifiedMarket[], criteria: string | MarketFilterCriteria | MarketFilterFunction): Promise +``` + +**Parameters:** + +- `markets` ([UnifiedMarket](#unifiedmarket)[]): Array of markets to filter +- `criteria` (string | MarketFilterCriteria | MarketFilterFunction): Filter criteria: string (text search), object (structured), or function (predicate) + +**Returns:** Promise<[UnifiedMarket](#unifiedmarket)[]> - Filtered array of markets + +**Example:** + +```typescript +const markets = await exchange.fetchMarkets({ query: "Trump" }) +await exchange.filterMarkets(markets, "Trump") +``` + + +--- +### `filterEvents` + +Filter a list of events by criteria. + + + +**Signature:** + +```typescript +async filterEvents(events: UnifiedEvent[], criteria: string | EventFilterCriteria | EventFilterFunction): Promise +``` + +**Parameters:** + +- `events` ([UnifiedEvent](#unifiedevent)[]): Array of events to filter +- `criteria` (string | EventFilterCriteria | EventFilterFunction): Filter criteria: string (text search), object (structured), or function (predicate) + +**Returns:** Promise<[UnifiedEvent](#unifiedevent)[]> - Filtered array of events + +**Example:** + +```typescript +const events = await exchange.fetchEvents({ query: "Trump" }) +await exchange.filterEvents(events, "Trump") +``` + + +--- +### `watchOrderBook` + +Watch order book updates in real-time via WebSocket. + + + +**Signature:** + +```typescript +async watchOrderBook(outcomeId: string, limit?: number, params: Record): Promise +``` + +**Parameters:** + +- `outcomeId` (string): The Outcome ID to watch +- `limit` (number) - **Optional**: Optional limit for orderbook depth +- `params` (Record): Optional exchange-specific parameters + +**Returns:** Promise<[OrderBook](#orderbook)> - Promise that resolves with the current orderbook state + +**Example:** + +```typescript +await exchange.watchOrderBook("abc123", 10, {}) +``` + + +--- +### `watchOrderBooks` + +Watch multiple order books simultaneously via WebSocket. + + + +**Signature:** + +```typescript +async watchOrderBooks(outcomeIds: string[], limit?: number, params: Record): Promise> +``` + +**Parameters:** + +- `outcomeIds` (string[]): Array of Outcome IDs to watch +- `limit` (number) - **Optional**: Optional limit for orderbook depth +- `params` (Record): Optional exchange-specific parameters + +**Returns:** Promise> - Promise that resolves with order books keyed by ID + +**Example:** + +```typescript +await exchange.watchOrderBooks(["12345"], 10, {}) +``` + + +--- +### `unwatchOrderBook` + +Unsubscribe from a previously watched order book stream. + + +**Signature:** + +```typescript +async unwatchOrderBook(outcomeId: string): Promise +``` + +**Parameters:** + +- `outcomeId` (string): The Outcome ID to stop watching + +**Returns:** Promise - Result + +**Example:** + +```typescript +await exchange.unwatchOrderBook("abc123") +``` + + +--- +### `watchTrades` + +Watch trade executions in real-time via WebSocket. + + + +**Signature:** + +```typescript +async watchTrades(outcomeId: string, address?: string, since?: number, limit?: number): Promise +``` + +**Parameters:** + +- `outcomeId` (string): The Outcome ID to watch +- `address` (string) - **Optional**: Public wallet address +- `since` (number) - **Optional**: Optional timestamp to filter trades from +- `limit` (number) - **Optional**: Optional limit for number of trades + +**Returns:** Promise<[Trade](#trade)[]> - Promise that resolves with recent trades + +**Example:** + +```typescript +await exchange.watchTrades("abc123", "0xabc...", 1710000000000, 50) +``` + + +--- +### `watchAddress` + +Stream activity for a public wallet address + + + +**Signature:** + +```typescript +async watchAddress(address: string, types?: SubscriptionOption[]): Promise +``` + +**Parameters:** + +- `address` (string): Public wallet address to watch +- `types` (SubscriptionOption[]) - **Optional**: Subset of activity to watch (default: all types) + +**Returns:** Promise - Promise that resolves with the latest SubscribedAddressSnapshot snapshot + +**Example:** + +```typescript +await exchange.watchAddress("0xabc...", ["trades"]) +``` + + +--- +### `unwatchAddress` + +Stop watching a previously registered wallet address and release its resource updates. + + +**Signature:** + +```typescript +async unwatchAddress(address: string): Promise +``` + +**Parameters:** + +- `address` (string): Public wallet address to stop watching + +**Returns:** Promise - Result + +**Example:** + +```typescript +await exchange.unwatchAddress("0xabc...") +``` + + +--- +### `close` + +Close all WebSocket connections and clean up resources. + + + +**Signature:** + +```typescript +async close(): Promise +``` + +**Parameters:** + +- None + +**Returns:** Promise - Result + +**Example:** + +```typescript +await exchange.close() +``` + + +--- +### `fetchMarketMatches` + +Find the same or related market on other venues. Two modes: + + + +**Signature:** + +```typescript +async fetchMarketMatches(params?: FetchMarketMatchesParams): Promise +``` + +**Parameters:** + +- `params` ([FetchMarketMatchesParams](#fetchmarketmatchesparams)) - **Optional**: Match filter parameters + +**Returns:** Promise<[MatchResult](#matchresult)[]> - Array of matched markets with relation and confidence + +**Example:** + +```typescript +await exchange.fetchMarketMatches() +``` + + +--- +### `fetchMatches` + +fetchMatches + + +**Signature:** + +```typescript +async fetchMatches(params: FetchMatchesParams): Promise +``` + +**Parameters:** + +- `params` (FetchMatchesParams): params + +**Returns:** Promise<[MatchResult](#matchresult)[]> - Result + +**Example:** + +```typescript +await exchange.fetchMatches() +``` + + +--- +### `fetchEventMatches` + +Find the same or related event on other venues. Two modes: + + + +**Signature:** + +```typescript +async fetchEventMatches(params?: FetchEventMatchesParams): Promise +``` + +**Parameters:** + +- `params` ([FetchEventMatchesParams](#fetcheventmatchesparams)) - **Optional**: Event match filter parameters + +**Returns:** Promise<[EventMatchResult](#eventmatchresult)[]> - Array of matched events with market-level match details + +**Example:** + +```typescript +await exchange.fetchEventMatches() +``` + + +--- +### `compareMarketPrices` + +Compare live prices for the same market across venues. Finds identity matches and returns side-by-side best bid/ask prices so you can spot price differences at a glance. + + +**Signature:** + +```typescript +async compareMarketPrices(params: CompareMarketPricesParams): Promise +``` + +**Parameters:** + +- `params` (CompareMarketPricesParams): Match filter parameters (uses relation: 'identity' internally) + +**Returns:** Promise<[PriceComparison](#pricecomparison)[]> - Array of price comparisons across venues + +**Example:** + +```typescript +await exchange.compareMarketPrices() +``` + + +--- +### `fetchRelatedMarkets` + +Find related markets across venues. Discovers subset/superset market relationships + + + +**Signature:** + +```typescript +async fetchRelatedMarkets(params: FetchMatchesParams): Promise +``` + +**Parameters:** + +- `params` (FetchMatchesParams): Match filter parameters + +**Returns:** Promise<[PriceComparison](#pricecomparison)[]> - Array of subset/superset matches with live prices + +**Example:** + +```typescript +await exchange.fetchRelatedMarkets() +``` + + +--- +### `fetchMatchedMarkets` + +fetchMatchedMarkets + + +**Signature:** + +```typescript +async fetchMatchedMarkets(params?: FetchMatchedMarketsParams): Promise +``` + +**Parameters:** + +- `params` ([FetchMatchedMarketsParams](#fetchmatchedmarketsparams)) - **Optional**: params + +**Returns:** Promise<[MatchedMarketPair](#matchedmarketpair)[]> - Result + +**Example:** + +```typescript +await exchange.fetchMatchedMarkets() +``` + + +--- +### `fetchMatchedPrices` + +fetchMatchedPrices + + +**Signature:** + +```typescript +async fetchMatchedPrices(params?: FetchMatchedPricesParams): Promise +``` + +**Parameters:** + +- `params` (FetchMatchedPricesParams) - **Optional**: Price comparison parameters (minDifference, category, limit) + +**Returns:** Promise - Array of matched market pairs with prices from each venue + +**Example:** + +```typescript +await exchange.fetchMatchedPrices() +``` + + +--- +### `fetchHedges` + +fetchHedges + + +**Signature:** + +```typescript +async fetchHedges(params: FetchMatchesParams): Promise +``` + +**Parameters:** + +- `params` (FetchMatchesParams): Match filter parameters + +**Returns:** Promise<[PriceComparison](#pricecomparison)[]> - Array of subset/superset matches with live prices + +**Example:** + +```typescript +await exchange.fetchHedges() +``` + + +--- +### `fetchArbitrage` + +fetchArbitrage + + +**Signature:** + +```typescript +async fetchArbitrage(params?: FetchArbitrageParams): Promise +``` + +**Parameters:** + +- `params` ([FetchArbitrageParams](#fetcharbitrageparams)) - **Optional**: Arbitrage scan parameters (minSpread, category, limit) + +**Returns:** Promise<[ArbitrageOpportunity](#arbitrageopportunity)[]> - Array of arbitrage opportunities sorted by spread + +**Example:** + +```typescript +await exchange.fetchArbitrage() +``` + + +--- +### `watchPrices` + +Watch AMM price updates for a market address (Limitless only). + + +> **Note**: This method is only available on **limitless** exchange. + + +**Signature:** + +```typescript +async watchPrices(marketAddress: string, callback: (data: any) => void): Promise +``` + +**Parameters:** + +- `marketAddress` (string): Market contract address +- `callback` ((data: any) => void): Callback for price updates + +**Returns:** Promise - Result + +**Example:** + +```typescript +await exchange.watchPrices("0xabc...", (data) => { void data }) +``` + + +--- +### `watchUserPositions` + +Watch user positions in real-time (Limitless only). + + +> **Note**: This method is only available on **limitless** exchange. + + +**Signature:** + +```typescript +async watchUserPositions(callback: (data: any) => void): Promise +``` + +**Parameters:** + +- `callback` ((data: any) => void): Callback for position updates + +**Returns:** Promise - Result + +**Example:** + +```typescript +await exchange.watchUserPositions((data) => { void data }) +``` + + +--- +### `watchUserTransactions` + +Watch user transactions in real-time (Limitless only). + + +> **Note**: This method is only available on **limitless** exchange. + + +**Signature:** + +```typescript +async watchUserTransactions(callback: (data: any) => void): Promise +``` + +**Parameters:** + +- `callback` ((data: any) => void): Callback for transaction updates + +**Returns:** Promise - Result + +**Example:** + +```typescript +await exchange.watchUserTransactions((data) => { void data }) +``` + + +--- +### `initAuth` + +Initialize L2 API credentials for implicit API signing. + + +> **Note**: This method is only available on **polymarket** exchange. + + +**Signature:** + +```typescript +async initAuth(): Promise +``` + +**Parameters:** + +- None + +**Returns:** Promise - Result + +**Example:** + +```typescript +await exchange.initAuth() +``` + + +--- +### `preWarmMarket` + +Pre-warm the SDK's internal caches for a market outcome. + + +> **Note**: This method is only available on **polymarket** exchange. + + +**Signature:** + +```typescript +async preWarmMarket(outcomeId: string): Promise +``` + +**Parameters:** + +- `outcomeId` (string): The CLOB Token ID for the outcome (use `outcome.outcomeId`) + +**Returns:** Promise - Result + +**Example:** + +```typescript +await exchange.preWarmMarket("abc123") +``` + + +--- +### `getEventById` + +Fetch a single event by its numeric ID (Probable only). + +> **Note**: This method is only available on **probable** exchange. + + +**Signature:** + +```typescript +async getEventById(id: string): Promise +``` + +**Parameters:** + +- `id` (string): The numeric event ID + +**Returns:** Promise - The UnifiedEvent, or null if not found + +**Example:** + +```typescript +await exchange.getEventById("12345") +``` + + +--- +### `getEventBySlug` + +Fetch a single event by its URL slug (Probable only). + +> **Note**: This method is only available on **probable** exchange. + + +**Signature:** + +```typescript +async getEventBySlug(slug: string): Promise +``` + +**Parameters:** + +- `slug` (string): The event's URL slug (e.g. `"trump-2024-election"`) + +**Returns:** Promise - The UnifiedEvent, or null if not found + +**Example:** + +```typescript +await exchange.getEventBySlug("will-trump-win") +``` + + +--- +### `watchAllOrderBooks` + +Stream all orderbook updates across venues via the hosted WebSocket API. + + + +**Signature:** + +```typescript +async watchAllOrderBooks(venues?: string[]): Promise +``` + +**Parameters:** + +- `venues` (string[]) - **Optional**: Optional venue filter. Defaults to this exchange's venue + +**Returns:** Promise - Next event with source, symbol, and orderbook + +**Example:** + +```typescript +await exchange.watchAllOrderBooks(["polymarket", "limitless"]) +``` + + +--- +### `firehose` + +Stream all orderbook updates across venues. + + +**Signature:** + +```typescript +async firehose(venues?: string[]): Promise +``` + +**Parameters:** + +- `venues` (string[]) - **Optional**: Optional venue filter + +**Returns:** Promise - Next event with source, symbol, and orderbook + +**Example:** + +```typescript +await exchange.firehose(["polymarket", "limitless"]) +``` + + +--- + +## Complete Trading Workflow + +```typescript +import pmxt from 'pmxtjs'; + +const exchange = new pmxt.Polymarket({ + privateKey: process.env.POLYMARKET_PRIVATE_KEY +}); // 1. Check balance const [balance] = await exchange.fetchBalance(); console.log(`Available: $${balance.available}`); -// 2. Search for a market -const markets = await exchange.fetchMarkets({ query: 'Trump' }); -const market = markets[0]; -const outcome = market.yes; -if (!outcome) { - throw new Error('Market has no YES outcome'); -} +// 2. Search for a market +const markets = await exchange.fetchMarkets({ query: 'Trump' }); +const market = markets[0]; +const outcome = market.yes; +if (!outcome) { + throw new Error('Market has no YES outcome'); +} + +console.log(market.title); +console.log(`Price: ${(outcome.price * 100).toFixed(1)}%`); + +// 3. Place a limit order +const order = await exchange.createOrder({ + outcome, + side: 'buy', + type: 'limit', + amount: 10, + price: 0.50 +}); + +console.log(`Order placed: ${order.id}`); + +// 4. Check order status +const updatedOrder = await exchange.fetchOrder(order.id); +console.log(`Status: ${updatedOrder.status}`); +console.log(`Filled: ${updatedOrder.filled}/${updatedOrder.amount}`); + +// 5. Cancel if needed +if (updatedOrder.status === 'open') { + await exchange.cancelOrder(order.id); + console.log('Order cancelled'); +} + +// 6. Check positions +const positions = await exchange.fetchPositions(); +positions.forEach(pos => { + console.log(`${pos.outcomeLabel}: ${pos.unrealizedPnL > 0 ? '+' : ''}$${pos.unrealizedPnL.toFixed(2)}`); +}); +``` + +## Data Models + +### `ExchangeOptions` + +Constructor-level options for venue clients (Polymarket, Kalshi, Opinion, etc.). +Hosted mode is the default when pmxtApiKey is set; otherwise the SDK runs against +a local sidecar with venue credentials. + +```typescript +interface ExchangeOptions { +pmxtApiKey: string; // PMXT customer API key. When set, the SDK routes to api.pmxt.dev (catalog) and trade.pmxt.dev (trading). Get one at pmxt.dev/dashboard. +walletAddress: string; // EVM wallet address for hosted reads/writes. Required for endpoints that operate on a wallet (balances, positions, trades, open orders). +signer: object; // Optional pre-built signer for hosted writes. If absent and privateKey is set, the SDK auto-wraps privateKey into a signer. +privateKey: string; // Private key. In hosted mode, used to derive an EIP-712 signer for writes (wraps into EthAccountSigner/EthersSigner). In self-hosted mode, used as the venue credential directly. +baseUrl: string; // Explicit base URL override. When unset, the SDK uses api.pmxt.dev when pmxtApiKey is set, or the local sidecar otherwise. +apiKey: string; // Venue-side API key (e.g. Polymarket CLOB key). Only relevant for self-hosted mode. +autoStartServer: boolean; // Auto-start the local sidecar when running self-hosted. Defaults to true when no pmxtApiKey is set, false when hosted. +} +``` + +--- +### `UnifiedMarket` + + + +```typescript +interface UnifiedMarket { +marketId: string; // The unique identifier for this market +eventId: string; // Link to parent event +title: string; // The market title (e.g., "Will BTC close above $100k on Dec 31?"). +description: string; // Long-form market description or resolution criteria. +slug: string; // URL-friendly slug for the market. +outcomes: MarketOutcome[]; // The possible outcomes for this market. +resolutionDate: string; // When the market is scheduled to resolve. Optional because some venues do not publish a cutoff for every market (e.g. Opinion categorical children) — emit `undefined` rather than coercing to epoch. +volume24h: number; // Trading volume over the past 24 hours (USD). +volume: number; // Total / Lifetime volume +liquidity: number; // Current market liquidity (USD). +openInterest: number; // Total value of outstanding contracts (USD). +url: string; // Canonical URL to view the market on the venue. +image: string; // Optional image URL for the market. +category: string; // Optional category label. Venue-defined — common values include "Sports", "Politics", "Crypto", "Economics", "Science", "Culture". Polymarket uses finer-grained categories like "Bitcoin", "Soccer", "Economic Policy"; Kalshi uses broader ones like "Sports" or "Mentions". +tags: string[]; // Optional list of tags. More granular than category — e.g. ["Crypto", "Crypto Prices", "Bitcoin"] or ["Politics", "Elections", "Trump"]. Tags vary by venue: Polymarket markets carry several, Kalshi typically one. +tickSize: number; // Minimum price increment (e.g., 0.01, 0.001) +status: string; // Venue-native lifecycle status (e.g. 'active', 'closed', 'archived'). +contractAddress: string; // On-chain contract / condition identifier where applicable (Polymarket conditionId, etc.). +sourceMetadata: object; // Raw venue-specific metadata not captured by first-class fields (e.g. Kalshi series_ticker / series_title from the parent event, Polymarket series). Passed through verbatim so downstream consumers can recover anything the unified shape omits. Each venue populates what it has. +sourceExchange: string; // The exchange/venue this market originates from (e.g. 'polymarket', 'kalshi'). Populated by the Router. +yes: any; // Convenience accessor for the YES outcome on a binary market. +no: any; // Convenience accessor for the NO outcome on a binary market. +up: any; // Convenience accessor for the UP outcome on a binary market. +down: any; // Convenience accessor for the DOWN outcome on a binary market. +} +``` + +--- +### `MarketOutcome` + + + +```typescript +interface MarketOutcome { +outcomeId: string; // Outcome ID for trading operations (CLOB Token ID for Polymarket, Market Ticker for Kalshi) +marketId: string; // The market this outcome belongs to (set automatically when outcomes are built) +label: string; // Human-readable outcome label (e.g., "Yes", "No", candidate name). +price: number; // Probability between 0.0 and 1.0. +priceChange24h: number; // Change in price over the past 24 hours, as an absolute probability delta. +metadata: object; // Exchange-specific metadata (e.g., clobTokenId for Polymarket) +} +``` + +--- +### `UnifiedEvent` + +A grouped collection of related markets (e.g., "Who will be Fed Chair?" contains multiple candidate markets). + +```typescript +interface UnifiedEvent { +id: string; // The unique identifier for this event. +title: string; // The event title (e.g., "Who will be Fed Chair?"). +description: string; // Long-form event description. +slug: string; // URL-friendly slug for the event. +markets: UnifiedMarket[]; // Markets grouped under this event. +volume24h: number; // Trading volume over the past 24 hours (USD). +volume: number; // Total / Lifetime volume (sum across markets; undefined if no market provides it) +url: string; // Canonical URL to view the event on the venue. +image: string; // Optional image URL for the event. +category: string; // Optional category label. Venue-defined — common values include "Sports", "Politics", "Crypto", "Economics", "Science", "Culture". Polymarket uses finer-grained categories like "Bitcoin", "Soccer", "Economic Policy"; Kalshi uses broader ones like "Sports" or "Mentions". +tags: string[]; // Optional list of tags. More granular than category — e.g. ["Sports", "FIFA World Cup", "2026 FIFA World Cup"] or ["Politics", "Geopolitics", "Middle East"]. Tags vary by venue: Polymarket markets carry several, Kalshi typically one. +sourceMetadata: object; // Raw venue-specific metadata not captured by first-class fields (e.g. Kalshi series_ticker / series_title, Polymarket series). Passed through verbatim so downstream consumers can recover anything the unified shape omits. Each venue populates what it has. +sourceExchange: string; // The exchange/venue this event originates from (e.g. 'polymarket', 'kalshi'). Populated by the Router. +} +``` + +--- +### `UnifiedSeries` + +A recurring grouping of events on a venue — the fourth tier above Event -> Market -> Outcome. Examples: Kalshi `KXATPMATCH` (every ATP tennis match), Polymarket `wta` (every WTA match), Opinion's daily `collection`. Series only exists where the venue exposes a recurring-event concept; venues without one return an empty array from `fetchSeries`. + +```typescript +interface UnifiedSeries { +id: string; // Stable venue-native series identifier (e.g. "KXATPMATCH" on Kalshi, "atp" on Polymarket Gamma, numeric Gamma id). +ticker: string; // Venue-native ticker, when distinct from `id`. +slug: string; // Venue-native slug. +title: string; // Human-readable series title (e.g. "ATP Match Winner", "WTA"). +description: string; // Long-form series description. +recurrence: string; // Recurrence cadence the venue reports ('daily', 'weekly', 'annual', ...). +events: UnifiedEvent[]; // Child events. Populated when fetched by id; the list form usually omits this to keep payloads small. +url: string; // Canonical venue URL for the series. +image: string; // Venue-hosted image. +sourceExchange: string; // The exchange this series originates from. Populated by the Router. +sourceMetadata: object; // Raw venue-specific fields not promoted to first-class columns. +} +``` + +--- +### `PriceCandle` + + + +```typescript +interface PriceCandle { +timestamp: number; // Unix timestamp in milliseconds marking the start of the candle. +open: number; // Opening price for the interval (probability between 0.0 and 1.0). +high: number; // Highest price during the interval (probability between 0.0 and 1.0). +low: number; // Lowest price during the interval (probability between 0.0 and 1.0). +close: number; // Closing price for the interval (probability between 0.0 and 1.0). +volume: number; // Trading volume during the interval. +} +``` + +--- +### `OrderBook` + + + +```typescript +interface OrderBook { +bids: OrderLevel[]; // Order book bid levels, sorted by price descending. +asks: OrderLevel[]; // Order book ask levels, sorted by price ascending. +timestamp: number; // Unix timestamp in milliseconds when the snapshot was taken. +datetime: string; // ISO 8601 datetime string of the snapshot (CCXT-compatible). +isNegRisk: boolean; // Whether the venue marks this snapshot as a negative-risk market. +lastTradePrice: number; // Last traded price from venues that include it with the book snapshot. +sourceMetadata: object; // Venue-specific metadata preserved from the raw order book snapshot. +} +``` + +--- +### `OrderLevel` + + + +```typescript +interface OrderLevel { +price: number; // 0.0 to 1.0 (probability) +size: number; // contracts/shares +orderCount: number; // +} +``` + +--- +### `Trade` + + + +```typescript +interface Trade { +id: string; // The unique identifier for this trade. +timestamp: number; // Unix timestamp in milliseconds when the trade executed. +price: number; // Probability between 0.0 and 1.0. +amount: number; // Size of the trade in contracts/shares. +side: string; // Trade side from the taker's perspective. +outcomeId: string; // The outcome this trade is for (if known). +} +``` + +--- +### `UserTrade` + + + +```typescript +interface UserTrade { +id: string; // The unique identifier for this trade. +timestamp: number; // Unix timestamp in milliseconds when the trade executed. +price: number; // Probability between 0.0 and 1.0. +amount: number; // Size of the trade in contracts/shares. +side: string; // Trade side from the taker's perspective. +outcomeId: string; // The outcome this trade is for (if known). +orderId: string; // The order that produced this trade, if known. +marketId: string; // The market this trade belongs to, when the venue exposes it (e.g. derivable from the fill's coin/asset). +fee: number; // Trading fee paid by the user for this fill, when the venue exposes it. +txHash: string; // Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. +chain: string; // Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. +blockNumber: number; // Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. +} +``` + +--- +### `Order` + + + +```typescript +interface Order { +id: string; // The exchange-assigned order identifier. +marketId: string; // The market this order was placed on. +outcomeId: string; // The outcome this order was placed on. +side: string; // Order side: buy or sell. +type: string; // Order type: market (execute immediately) or limit (resting at a price). +price: number; // For limit orders +amount: number; // Size in contracts/shares +status: string; // Lifecycle status of the order. +filled: number; // Amount filled (USDC cost for buys, shares for sells) +filledShares: number; // Amount filled in shares/contracts (if different from USDC-denominated `filled`). +remaining: number; // Amount remaining +timestamp: number; // Unix timestamp in milliseconds when the order was created. +fee: number; // Fee paid for this order, if known. +feeRateBps: number; // Fee rate in basis points applied to this order (e.g. 100 = 1%). +txHash: string; // Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. +chain: string; // Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. +blockNumber: number; // Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. +} +``` + +--- +### `Position` + +A current position in a market. In hosted mode, `outcomeLabel`, `entryPrice`, `currentPrice` and `unrealizedPnL` may be null when the server cannot derive them (e.g. `with_mtm=false` or no fill history). Venue-direct callers continue to populate every field. + +```typescript +interface Position { +marketId: string; // The market this position is held in. +outcomeId: string; // The outcome this position is held in. +outcomeLabel: string; // Human-readable label for the outcome held. Optional in hosted mode. +size: number; // Positive for long, negative for short +entryPrice: number; // Average entry price for the position (probability between 0.0 and 1.0). Optional in hosted mode when no fill history is available. +currentPrice: number; // Current mark price for the position (probability between 0.0 and 1.0). Optional in hosted mode when mark-to-market data is unavailable. +currentValue: number; // Current market value of the position (size * currentPrice). Null when currentPrice is unavailable. +unrealizedPnL: number; // Unrealized profit or loss at the current price (USD). Optional in hosted mode when mark-to-market data is unavailable. +realizedPnL: number; // Realized profit or loss booked so far (USD). +txHash: string; // Populated in hosted mode after on-chain settlement (from the last fill); null for local-mode and for non-on-chain venues. +chain: string; // Populated in hosted mode after on-chain settlement (from the last fill); null for local-mode and for non-on-chain venues. +blockNumber: number; // Populated in hosted mode after on-chain settlement (from the last fill); null for local-mode and for non-on-chain venues. +} +``` + +--- +### `Balance` + + + +```typescript +interface Balance { +currency: string; // e.g., 'USDC' +total: number; // Total balance including funds locked in open orders. +available: number; // Balance available to trade (excludes locked funds). +locked: number; // In open orders +venue: string; // Hosted-mode: which venue this balance belongs to in a multi-venue response. Null when the balance is venue-agnostic. +} +``` + +--- +### `ExecutionPriceResult` + + + +```typescript +interface ExecutionPriceResult { +price: number; // +filledAmount: number; // +fullyFilled: boolean; // +} +``` + +--- +### `PaginatedMarketsResult` + +Shape returned by fetchMarketsPaginated + +```typescript +interface PaginatedMarketsResult { +data: UnifiedMarket[]; // The page of unified markets +total: number; // Total number of markets in the snapshot +nextCursor: string; // Cursor to pass to the next call, or undefined if this is the last page +} +``` + +--- +### `PaginatedEventsResult` + +Shape returned by fetchEventsPaginated + +```typescript +interface PaginatedEventsResult { +data: UnifiedEvent[]; // The page of unified events +total: number; // Total number of events in the snapshot +nextCursor: string; // Cursor to pass to the next call, or undefined if this is the last page +} +``` + +--- +### `BuiltOrder` + + + +```typescript +interface BuiltOrder { +exchange: string; // The exchange name this order was built for. +params: any; // The original params used to build this order. +signedOrder: object; // For CLOB exchanges (Polymarket): the EIP-712 signed order ready to POST to the exchange's order endpoint. +tx: object; // For on-chain AMM exchanges: the EVM transaction payload. Reserved for future exchanges; no current exchange populates this. +raw: any; // The raw, exchange-native payload. Always present. +expiry: number; // Unix epoch (ms) when this built order expires server-side. Submitting after expiry returns BUILT_ORDER_EXPIRED. +} +``` + +--- +### `MarketFilterCriteria` + + + +```typescript +interface MarketFilterCriteria { +text: string; // +searchIn: string[]; // Default: ['title'] +volume24h: object; // +volume: object; // Filter by total (lifetime) volume range +liquidity: object; // Filter by current liquidity range +openInterest: object; // Filter by open interest range +resolutionDate: object; // +category: string; // Filter by category. Common values: "Sports", "Politics", "Crypto", "Bitcoin", "Soccer", "Economic Policy" (Polymarket) or "Sports", "Mentions" (Kalshi). +tags: string[]; // Match markets that have ANY of these tags. Examples: ["Crypto", "Crypto Prices"], ["Politics", "Elections"], ["Sports", "FIFA World Cup"]. +price: object; // +priceChange24h: object; // +} +``` + +--- +### `EventFilterCriteria` + + + +```typescript +interface EventFilterCriteria { +text: string; // +searchIn: string[]; // Default: ['title'] +category: string; // Filter by category. Common values: "Sports", "Politics", "Crypto", "Bitcoin", "Soccer", "Economic Policy" (Polymarket) or "Sports", "Mentions" (Kalshi). +tags: string[]; // Match events that have ANY of these tags. Examples: ["Crypto"], ["Politics", "Geopolitics", "Middle East"], ["Sports", "FIFA World Cup"]. +marketCount: object; // +totalVolume: object; // Sum of market volumes +} +``` + +--- +### `MatchResult` + + + +```typescript +interface MatchResult { +market: UnifiedMarket; // +sourceMarket: any; // The source market this was matched against. Present in browse mode (no marketId), absent in lookup mode. +relation: string; // +confidence: number; // +reasoning: string; // +bestBid: number; // +bestAsk: number; // +} +``` + +--- +### `EventMatchResult` + + + +```typescript +interface EventMatchResult { +event: UnifiedEvent; // +marketMatches: MatchResult[]; // +} +``` + +--- +### `PriceComparison` + + + +```typescript +interface PriceComparison { +market: UnifiedMarket; // +relation: string; // +confidence: number; // +reasoning: string; // +bestBid: number; // +bestAsk: number; // +venue: string; // +} +``` + +--- +### `ArbitrageOpportunity` + + + +```typescript +interface ArbitrageOpportunity { +marketA: UnifiedMarket; // +marketB: UnifiedMarket; // +spread: number; // +buyVenue: string; // +sellVenue: string; // +buyPrice: number; // +sellPrice: number; // +relation: string; // The set-theoretic relation between the two markets (e.g. identity, subset). +confidence: number; // Match confidence score (0.0 to 1.0). +} +``` + +--- +### `MatchedMarketPair` + + + +```typescript +interface MatchedMarketPair { +marketA: UnifiedMarket; // +marketB: UnifiedMarket; // +priceDifference: number; // +venueA: string; // +venueB: string; // +priceA: number; // +priceB: number; // +relation: string; // The set-theoretic relation between the two markets (e.g. identity, subset). +confidence: number; // Match confidence score (0.0 to 1.0). +reasoning: string; // Why the two markets were matched. +} +``` + +--- +### `ExchangeCredentials` + +Optional authentication credentials for exchange operations. + +```typescript +interface ExchangeCredentials { +apiKey: string; // +apiSecret: string; // Standard API secret for HMAC-authenticated exchanges +passphrase: string; // Standard API passphrase for HMAC-authenticated exchanges +apiToken: string; // Metaculus: `Authorization: Token ` for higher rate limits +privateKey: string; // Required for Polymarket L1 auth +signatureType: any; // 0 = EOA, 1 = Poly Proxy, 2 = Gnosis Safe (Can also use 'eoa', 'polyproxy', 'gnosis_safe') +funderAddress: string; // The address funding the trades (defaults to signer address) +walletAddress: string; // +baseUrl: string; // +} +``` + +--- +### `FeedTicker` + +CCXT-compatible ticker with last trade price and metadata. + +```typescript +interface FeedTicker { +symbol: string; // Trading pair symbol (e.g. BTC/USD) +info: any; // Raw provider-specific data +timestamp: number; // Unix timestamp in milliseconds +datetime: string; // +high: number; // +low: number; // +bid: number; // +bidVolume: number; // +ask: number; // +askVolume: number; // +vwap: number; // +open: number; // +close: number; // +last: number; // Last trade price +previousClose: number; // +change: number; // +percentage: number; // +average: number; // +quoteVolume: number; // +baseVolume: number; // +indexPrice: number; // +markPrice: number; // +} +``` + +--- +### `FeedMarket` + +CCXT-compatible market descriptor for a data feed. + +```typescript +interface FeedMarket { +id: string; // +symbol: string; // +base: string; // +quote: string; // +active: boolean; // +type: string; // +info: any; // Provider-specific metadata +} +``` + +--- +### `FeedOracleRound` + +Chainlink oracle price round. + +```typescript +interface FeedOracleRound { +feed: string; // Price feed pair (e.g. BTC/USD) +roundId: string; // +answer: number; // Oracle price +startedAt: number; // +updatedAt: number; // +answeredInRound: string; // +decimals: number; // +description: string; // +} +``` + +--- + +## Filter Parameters + +### `BaseRequest` + +Base request structure with optional credentials + +```typescript +interface BaseRequest { +credentials?: ExchangeCredentials; // +} +``` + +--- +### `MarketFilterParams` + + + +```typescript +interface MarketFilterParams { +limit?: number; // Maximum number of results to return +offset?: number; // Pagination offset — number of results to skip +sort?: string; // Sort order for results +status?: string; // Filter by market status (default: 'active', 'inactive' and 'closed' are interchangeable) +searchIn?: string; // Where to search (default: 'title') +query?: string; // For keyword search +slug?: string; // For slug/ticker lookup +marketId?: string; // Direct lookup by market ID +outcomeId?: string; // Reverse lookup -- find market containing this outcome +eventId?: string; // Find markets belonging to an event +page?: number; // For pagination (used by Limitless) +similarityThreshold?: number; // For semantic search (used by Limitless) +sourceExchange?: string; // Filter by source venue (e.g. 'polymarket', 'kalshi', 'myriad'). `exchange` is an alias. +exchange?: string; // Alias for `sourceExchange`. +} +``` + +--- +### `EventFetchParams` + + + +```typescript +interface EventFetchParams { +query?: string; // For keyword search +limit?: number; // Maximum number of results to return +cursor?: string; // Opaque venue pagination cursor, where supported. +offset?: number; // Pagination offset — number of results to skip +sort?: string; // Sort order for results +status?: string; // Filter by event status (default: 'active', 'inactive' and 'closed' are interchangeable) +searchIn?: string; // Where to search (default: 'title') +eventId?: string; // Direct lookup by event ID +slug?: string; // Lookup by event slug +series?: string; // Filter events by their parent series. Accepts the venue-native series id / ticker / slug (e.g. Kalshi `"KXATPMATCH"`, Polymarket `"wta"`). Passed through to the vendor where supported, otherwise applied to `sourceMetadata` after fetch. +filter?: any; // Optional client-side filter applied after fetching +category?: string; // Filter by category. Each event belongs to a venue-assigned category such as "Sports", "Politics", "Crypto", "Bitcoin", "Soccer", "Economic Policy" (Polymarket) or "Sports", "Mentions" (Kalshi). +tags?: string[]; // Filter by tags. Returns events matching ANY of the provided tags. Tags are more specific than categories -- for example a "Politics" event might carry tags ["Politics", "Geopolitics", "Middle East", "Iran"]. Common tags include "Crypto", "Elections", "Fed Rates", "FIFA World Cup", "Trump". +sourceExchange?: string; // Filter by source venue (e.g. 'polymarket', 'kalshi', 'myriad'). `exchange` is an alias. +exchange?: string; // Alias for `sourceExchange`. +} +``` + +--- +### `HistoryFilterParams` + +Deprecated - use OHLCVParams or TradesParams instead. Resolution is optional for backward compatibility. + +```typescript +interface HistoryFilterParams { +resolution?: string; // Optional for backward compatibility +start?: string; // Start of the time range +end?: string; // End of the time range +limit?: number; // Maximum number of results to return +} +``` + +--- +### `OHLCVParams` + + + +```typescript +interface OHLCVParams { +resolution: string; // Required for candle aggregation +start?: string; // Start of the time range +end?: string; // End of the time range +limit?: number; // Maximum number of results to return +} +``` + +--- +### `FetchOrderBookParams` + + + +```typescript +interface FetchOrderBookParams { +side?: string; // Outcome side: 'yes' or 'no'. Required for exchanges like Limitless where the API returns a single orderbook per market. +outcome?: string; // Outcome alias: 'yes' or 'no', or an outcome token ID. When set, the first argument is treated as a market ID and this value selects which outcome's order book to fetch. Accepts the literal strings 'yes'/'no' (resolved via a market lookup) or a raw outcome token ID. +since?: number; // Unix timestamp (ms) — fetch a historical snapshot at or before this time, or the start of a range when combined with `until` (hosted API only). +until?: number; // Unix timestamp (ms) — end of a historical range. When combined with `since`, returns an array of reconstructed L2 OrderBook snapshots between `since` and `until` (hosted API only). +} +``` + +--- +### `TradesParams` + + + +```typescript +interface TradesParams { +start?: string; // Start of the time range +end?: string; // End of the time range +limit?: number; // Maximum number of results to return (max {@link MAX_TRADES_LIMIT}) +} +``` + +--- +### `CreateOrderParams` + + + +```typescript +interface CreateOrderParams { +marketId: string; // The market to trade on. +outcomeId: string; // The outcome to trade. +side: string; // Order side: buy or sell. +type: string; // Order type: market (execute immediately) or limit (resting at a price). +amount: number; // Size of the order in contracts/shares. +price?: number; // Required for limit orders +denom?: string; // Hosted mode: amount unit. +slippage_pct?: number; // Hosted mode: maximum market-order slippage percentage. +fee?: number; // Optional fee rate (e.g., 1000 for 0.1%) +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 +} +``` + +--- +### `MyTradesParams` + + + +```typescript +interface MyTradesParams { +outcomeId?: string; // filter to specific outcome/ticker +marketId?: string; // filter to specific market +since?: string; // Only return records after this date +until?: string; // Only return records before this date +limit?: number; // Maximum number of results to return +cursor?: string; // for Kalshi cursor pagination +} +``` + +--- +### `OrderHistoryParams` + + + +```typescript +interface OrderHistoryParams { +marketId?: string; // required for Limitless (slug) +since?: string; // Only return records after this date +until?: string; // Only return records before this date +limit?: number; // Maximum number of results to return +cursor?: string; // Opaque pagination cursor from a previous response +} +``` + +--- +### `FetchMarketMatchesParams` + + + +```typescript +interface FetchMarketMatchesParams { +query?: string; // Keyword search across matched market titles. +category?: string; // Filter matches by category. +market?: any; // Pass a UnifiedMarket directly instead of marketId/slug/url. +marketId?: string; // Lookup a specific market by ID. Omit for browse mode. +slug?: string; // +url?: string; // +relation?: string; // +minConfidence?: number; // +limit?: number; // +includePrices?: boolean; // +minDifference?: number; // Minimum price difference between venues. Browse mode only. +sort?: string; // Sort order. Browse mode only. +} +``` + +--- +### `FetchEventMatchesParams` + + + +```typescript +interface FetchEventMatchesParams { +query?: string; // Keyword search across matched event titles. +category?: string; // Filter matches by category. +event?: any; // Pass a UnifiedEvent directly instead of eventId/slug. +eventId?: string; // Lookup a specific event by ID. Omit for browse mode. +slug?: string; // +relation?: string; // +minConfidence?: number; // +limit?: number; // +includePrices?: boolean; // +} +``` + +--- +### `FetchArbitrageParams` + + + +```typescript +interface FetchArbitrageParams { +minSpread?: number; // +category?: string; // +limit?: number; // +relations?: string[]; // Comma-separated relation types to include (default: 'identity'). +} +``` + +--- +### `FetchMatchedMarketsParams` + + + +```typescript +interface FetchMatchedMarketsParams { +minDifference?: number; // +category?: string; // +limit?: number; // +relations?: string[]; // Comma-separated relation types to include (default: 'identity'). +} +``` + +--- + +### `CreateOrderInput` + +`createOrder` and `buildOrder` accept either explicit `marketId` / `outcomeId` +fields or an outcome object returned by `fetchMarkets`. + +```typescript +type CreateOrderInput = + | (CreateOrderParams & { outcome?: never }) + | (Omit & { + outcome: MarketOutcome; + marketId?: never; + outcomeId?: never; + }); +``` + +--- + +## Low-Level API Reference + +Advanced: call exchange-specific REST endpoints directly via `exchange.callApi(name, params)`. + +```typescript +// Example +const result = await exchange.callApi('operationName', { param: 'value' }); +``` + +### Polymarket + +| `callApi()` name | Method | Path | Summary | Auth | +|-----------------|--------|------|---------|------| +| `getGammaStatus` | `GET` | `/status` | Gamma API Health check | Public | +| `listTeams` | `GET` | `/teams` | List teams | Public | +| `getSportsMetadata` | `GET` | `/sports` | Get sports metadata information | Public | +| `getSportsMarketTypes` | `GET` | `/sports/market-types` | Get valid sports market types | Public | +| `listTags` | `GET` | `/tags` | List tags | Public | +| `getTag` | `GET` | `/tags/{id}` | Get tag by id | Public | +| `getRelatedTagsById` | `GET` | `/tags/{id}/related-tags` | Get related tags (relationships) by tag id | Public | +| `getRelatedTagsBySlug` | `GET` | `/tags/slug/{slug}/related-tags` | Get related tags (relationships) by tag slug | Public | +| `getTagsRelatedToATagById` | `GET` | `/tags/{id}/related-tags/tags` | Get tags related to a tag id | Public | +| `getTagsRelatedToATagBySlug` | `GET` | `/tags/slug/{slug}/related-tags/tags` | Get tags related to a tag slug | Public | +| `listEvents` | `GET` | `/events` | List events | Public | +| `getEvent` | `GET` | `/events/{id}` | Get event by id | Public | +| `getEventTags` | `GET` | `/events/{id}/tags` | Get event tags | Public | +| `getEventBySlug` | `GET` | `/events/slug/{slug}` | Get event by slug | Public | +| `listMarkets` | `GET` | `/markets` | List markets | Public | +| `getMarket` | `GET` | `/markets/{id}` | Get market by id | Public | +| `getMarketTags` | `GET` | `/markets/{id}/tags` | Get market tags by id | Public | +| `getMarketBySlug` | `GET` | `/markets/slug/{slug}` | Get market by slug | Public | +| `listSeries` | `GET` | `/series` | List series | Public | +| `getSeries` | `GET` | `/series/{id}` | Get series by id | Public | +| `listComments` | `GET` | `/comments` | List comments | Public | +| `getCommentsById` | `GET` | `/comments/{id}` | Get comments by comment id | Public | +| `getPublicProfile` | `GET` | `/public-profile` | Get public profile by wallet address | Public | +| `publicSearch` | `GET` | `/public-search` | Search markets, events, and profiles | Public | +| `getBook` | `GET` | `/book` | Get order book summary | Public | +| `postBooks` | `POST` | `/books` | Get multiple order books summaries | Public | +| `getPrice` | `GET` | `/price` | Get market price | Public | +| `getPrices` | `GET` | `/prices` | Get multiple market prices | Public | +| `postPrices` | `POST` | `/prices` | Get multiple market prices by request | Public | +| `getMidpoint` | `GET` | `/midpoint` | Get midpoint price | Public | +| `postSpreads` | `POST` | `/spreads` | Get bid-ask spreads | Public | +| `getPricesHistory` | `GET` | `/prices-history` | Get price history for a traded token | Public | +| `getMarketsByToken` | `GET` | `/markets-by-token/{token_id}` | Get market by token | Public | +| `postAuthApiKey` | `POST` | `/auth/api-key` | Create API Key | Required | +| `getAuthDeriveApiKey` | `GET` | `/auth/derive-api-key` | Derive API Key | Required | +| `postOrder` | `POST` | `/order` | Place Single Order | Required | +| `deleteOrder` | `DELETE` | `/order` | Cancel Single Order | Required | +| `postOrders` | `POST` | `/orders` | Place Multiple Orders (Batch) | Required | +| `deleteOrders` | `DELETE` | `/orders` | Cancel Multiple Orders | Required | +| `deleteCancelAll` | `DELETE` | `/cancel-all` | Cancel All Orders | Required | +| `deleteCancelMarketOrders` | `DELETE` | `/cancel-market-orders` | Cancel Market Orders | Required | +| `postV1Heartbeats` | `POST` | `/v1/heartbeats` | Refresh authenticated session heartbeat | Required | +| `getDataOrder` | `GET` | `/data/order/{id}` | Get Order | Required | +| `getDataOrders` | `GET` | `/data/orders` | Get Active Orders | Required | +| `getDataTrades` | `GET` | `/data/trades` | Get Trades | Required | +| `getOrderScoring` | `GET` | `/order-scoring` | Check Order Reward Scoring | Required | +| `postOrdersScoring` | `POST` | `/orders-scoring` | Check Multiple Orders Scoring | Required | +| `updateBalanceAllowance` | `GET` | `/balance-allowance/update` | Update balance and allowance cache | Required | +| `getGeoblock` | `GET` | `/geoblock` | Check Geoblock Status | Public | +| `getDataApiHealth` | `GET` | `/` | Data API Health check | Public | +| `getPositions` | `GET` | `/positions` | Get current positions for a user | Public | +| `getV1AccountingSnapshot` | `GET` | `/v1/accounting/snapshot` | Download an accounting snapshot (ZIP of CSVs) | Public | +| `getTraded` | `GET` | `/traded` | Get total markets a user has traded | Public | +| `getOi` | `GET` | `/oi` | Get open interest | Public | +| `getLiveVolume` | `GET` | `/live-volume` | Get live volume for an event | Public | +| `getTrades` | `GET` | `/trades` | Get trades for a user or markets | Public | +| `getActivity` | `GET` | `/activity` | Get user activity | Public | +| `getHolders` | `GET` | `/holders` | Get top holders for markets | Public | +| `getValue` | `GET` | `/value` | Get total value of a user's positions | Public | +| `getClosedPositions` | `GET` | `/closed-positions` | Get closed positions for a user | Public | +| `getV1MarketPositions` | `GET` | `/v1/market-positions` | Get positions for a market | Public | +| `getV1Leaderboard` | `GET` | `/v1/leaderboard` | Get trader leaderboard rankings | Public | +| `getV1BuildersLeaderboard` | `GET` | `/v1/builders/leaderboard` | Get aggregated builder leaderboard | Public | + +#### Endpoint Details + +##### `getGammaStatus` + +**GET** `/status` + +Gamma API Health check + + +--- +##### `listTeams` + +**GET** `/teams` + +List teams + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `league` (query, array) +- `name` (query, array) +- `abbreviation` (query, array) + +--- +##### `getSportsMetadata` + +**GET** `/sports` + +Get sports metadata information + + +--- +##### `getSportsMarketTypes` + +**GET** `/sports/market-types` + +Get valid sports market types + + +--- +##### `listTags` + +**GET** `/tags` + +List tags + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `include_template` (query, boolean) +- `is_carousel` (query, boolean) + +--- +##### `getTag` + +**GET** `/tags/{id}` + +Get tag by id + +**Parameters:** +- `` (, string) +- `include_template` (query, boolean) + +--- +##### `getRelatedTagsById` + +**GET** `/tags/{id}/related-tags` + +Get related tags (relationships) by tag id + +**Parameters:** +- `` (, string) +- `omit_empty` (query, boolean) +- `status` (query, string) — enum: `active,closed,all` + +--- +##### `getRelatedTagsBySlug` + +**GET** `/tags/slug/{slug}/related-tags` + +Get related tags (relationships) by tag slug + +**Parameters:** +- `` (, string) +- `omit_empty` (query, boolean) +- `status` (query, string) — enum: `active,closed,all` + +--- +##### `getTagsRelatedToATagById` + +**GET** `/tags/{id}/related-tags/tags` + +Get tags related to a tag id + +**Parameters:** +- `` (, string) +- `omit_empty` (query, boolean) +- `status` (query, string) — enum: `active,closed,all` + +--- +##### `getTagsRelatedToATagBySlug` + +**GET** `/tags/slug/{slug}/related-tags/tags` + +Get tags related to a tag slug + +**Parameters:** +- `` (, string) +- `omit_empty` (query, boolean) +- `status` (query, string) — enum: `active,closed,all` + +--- +##### `listEvents` + +**GET** `/events` + +List events + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `id` (query, array) +- `tag_id` (query, integer) +- `exclude_tag_id` (query, array) +- `slug` (query, array) +- `tag_slug` (query, string) +- `related_tags` (query, boolean) +- `active` (query, boolean) +- `archived` (query, boolean) +- `featured` (query, boolean) +- `cyom` (query, boolean) +- `include_chat` (query, boolean) +- `include_template` (query, boolean) +- `recurrence` (query, string) +- `closed` (query, boolean) +- `liquidity_min` (query, number) +- `liquidity_max` (query, number) +- `volume_min` (query, number) +- `volume_max` (query, number) +- `start_date_min` (query, string) +- `start_date_max` (query, string) +- `end_date_min` (query, string) +- `end_date_max` (query, string) + +--- +##### `getEvent` + +**GET** `/events/{id}` + +Get event by id + +**Parameters:** +- `` (, string) +- `include_chat` (query, boolean) +- `include_template` (query, boolean) + +--- +##### `getEventTags` + +**GET** `/events/{id}/tags` + +Get event tags + +**Parameters:** +- `` (, string) + +--- +##### `getEventBySlug` + +**GET** `/events/slug/{slug}` + +Get event by slug + +**Parameters:** +- `` (, string) +- `include_chat` (query, boolean) +- `include_template` (query, boolean) + +--- +##### `listMarkets` + +**GET** `/markets` + +List markets + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `id` (query, array) +- `slug` (query, array) +- `clob_token_ids` (query, array) +- `condition_ids` (query, array) +- `market_maker_address` (query, array) +- `liquidity_num_min` (query, number) +- `liquidity_num_max` (query, number) +- `volume_num_min` (query, number) +- `volume_num_max` (query, number) +- `start_date_min` (query, string) +- `start_date_max` (query, string) +- `end_date_min` (query, string) +- `end_date_max` (query, string) +- `tag_id` (query, integer) +- `related_tags` (query, boolean) +- `cyom` (query, boolean) +- `uma_resolution_status` (query, string) +- `game_id` (query, string) +- `sports_market_types` (query, array) +- `rewards_min_size` (query, number) +- `question_ids` (query, array) +- `include_tag` (query, boolean) +- `closed` (query, boolean) + +--- +##### `getMarket` + +**GET** `/markets/{id}` + +Get market by id + +**Parameters:** +- `` (, string) +- `include_tag` (query, boolean) + +--- +##### `getMarketTags` + +**GET** `/markets/{id}/tags` + +Get market tags by id + +**Parameters:** +- `` (, string) + +--- +##### `getMarketBySlug` + +**GET** `/markets/slug/{slug}` + +Get market by slug + +**Parameters:** +- `` (, string) +- `include_tag` (query, boolean) + +--- +##### `listSeries` + +**GET** `/series` + +List series + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `slug` (query, array) +- `categories_ids` (query, array) +- `categories_labels` (query, array) +- `closed` (query, boolean) +- `include_chat` (query, boolean) +- `recurrence` (query, string) + +--- +##### `getSeries` + +**GET** `/series/{id}` + +Get series by id + +**Parameters:** +- `` (, string) +- `include_chat` (query, boolean) + +--- +##### `listComments` + +**GET** `/comments` + +List comments + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `parent_entity_type` (query, string) — enum: `Event,Series,market` +- `parent_entity_id` (query, integer) +- `get_positions` (query, boolean) +- `holders_only` (query, boolean) + +--- +##### `getCommentsById` + +**GET** `/comments/{id}` + +Get comments by comment id + +**Parameters:** +- `id` (path, integer) **required** +- `get_positions` (query, boolean) + +--- +##### `getPublicProfile` + +**GET** `/public-profile` + +Get public profile by wallet address + +**Parameters:** +- `address` (query, string) **required** — The wallet address (proxy wallet or user address) + +--- +##### `publicSearch` + +**GET** `/public-search` + +Search markets, events, and profiles + +**Parameters:** +- `q` (query, string) **required** +- `cache` (query, boolean) +- `events_status` (query, string) +- `limit_per_type` (query, integer) +- `page` (query, integer) +- `events_tag` (query, array) +- `keep_closed_markets` (query, integer) +- `sort` (query, string) +- `ascending` (query, boolean) +- `search_tags` (query, boolean) +- `search_profiles` (query, boolean) +- `recurrence` (query, string) +- `exclude_tag_id` (query, array) +- `optimized` (query, boolean) + +--- +##### `getBook` + +**GET** `/book` + +Get order book summary + +**Parameters:** +- `token_id` (query, string) **required** + +--- +##### `postBooks` + +**POST** `/books` + +Get multiple order books summaries + + +--- +##### `getPrice` + +**GET** `/price` + +Get market price + +**Parameters:** +- `token_id` (query, string) **required** +- `side` (query, string) **required** — enum: `BUY,SELL` + +--- +##### `getPrices` + +**GET** `/prices` + +Get multiple market prices + + +--- +##### `postPrices` + +**POST** `/prices` + +Get multiple market prices by request + + +--- +##### `getMidpoint` + +**GET** `/midpoint` + +Get midpoint price + +**Parameters:** +- `token_id` (query, string) **required** + +--- +##### `postSpreads` + +**POST** `/spreads` + +Get bid-ask spreads + + +--- +##### `getPricesHistory` + +**GET** `/prices-history` + +Get price history for a traded token + +**Parameters:** +- `market` (query, string) **required** +- `startTs` (query, number) +- `endTs` (query, number) +- `interval` (query, string) — enum: `1m,1w,1d,6h,1h,max` +- `fidelity` (query, number) + +--- +##### `getMarketsByToken` + +**GET** `/markets-by-token/{token_id}` + +Get market by token + +**Parameters:** +- `token_id` (path, string) **required** + +--- +##### `postAuthApiKey` + +**POST** `/auth/api-key` + +Create API Key *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `getAuthDeriveApiKey` + +**GET** `/auth/derive-api-key` + +Derive API Key *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `postOrder` + +**POST** `/order` + +Place Single Order *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `deleteOrder` + +**DELETE** `/order` + +Cancel Single Order *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `postOrders` + +**POST** `/orders` + +Place Multiple Orders (Batch) *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `deleteOrders` + +**DELETE** `/orders` + +Cancel Multiple Orders *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `deleteCancelAll` + +**DELETE** `/cancel-all` + +Cancel All Orders *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `deleteCancelMarketOrders` + +**DELETE** `/cancel-market-orders` + +Cancel Market Orders *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `postV1Heartbeats` + +**POST** `/v1/heartbeats` + +Refresh authenticated session heartbeat *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `getDataOrder` + +**GET** `/data/order/{id}` + +Get Order *(Auth required)* + +**Parameters:** +- `` (, string) +- `id` (path, string) **required** + +--- +##### `getDataOrders` + +**GET** `/data/orders` + +Get Active Orders *(Auth required)* + +**Parameters:** +- `` (, string) +- `id` (query, string) +- `market` (query, string) +- `asset_id` (query, string) +- `next_cursor` (query, string) — Cursor for keyset pagination + +--- +##### `getDataTrades` + +**GET** `/data/trades` + +Get Trades *(Auth required)* + +**Parameters:** +- `` (, string) +- `id` (query, string) +- `market` (query, string) +- `maker` (query, string) +- `taker` (query, string) +- `before` (query, string) +- `after` (query, string) + +--- +##### `getOrderScoring` + +**GET** `/order-scoring` + +Check Order Reward Scoring *(Auth required)* + +**Parameters:** +- `` (, string) +- `orderId` (query, string) **required** + +--- +##### `postOrdersScoring` + +**POST** `/orders-scoring` + +Check Multiple Orders Scoring *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `updateBalanceAllowance` + +**GET** `/balance-allowance/update` + +Update balance and allowance cache *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `getGeoblock` + +**GET** `/geoblock` + +Check Geoblock Status + + +--- +##### `getDataApiHealth` + +**GET** `/` + +Data API Health check + + +--- +##### `getPositions` + +**GET** `/positions` + +Get current positions for a user + +**Parameters:** +- `user` (query, string) **required** — User address (required) +- `market` (query, array) — Comma-separated list of condition IDs. Mutually exclusive with eventId. +- `eventId` (query, array) — Comma-separated list of event IDs. Mutually exclusive with market. +- `sizeThreshold` (query, number) +- `redeemable` (query, boolean) +- `mergeable` (query, boolean) +- `limit` (query, integer) +- `offset` (query, integer) +- `sortBy` (query, string) — enum: `CURRENT,INITIAL,TOKENS,CASHPNL,PERCENTPNL,TITLE,RESOLVING,PRICE,AVGPRICE` +- `sortDirection` (query, string) — enum: `ASC,DESC` +- `title` (query, string) + +--- +##### `getV1AccountingSnapshot` + +**GET** `/v1/accounting/snapshot` + +Download an accounting snapshot (ZIP of CSVs) + +**Parameters:** +- `user` (query, string) **required** — User address (0x-prefixed) + +--- +##### `getTraded` + +**GET** `/traded` + +Get total markets a user has traded + +**Parameters:** +- `user` (query, string) **required** + +--- +##### `getOi` + +**GET** `/oi` + +Get open interest + +**Parameters:** +- `market` (query, array) + +--- +##### `getLiveVolume` + +**GET** `/live-volume` + +Get live volume for an event + +**Parameters:** +- `id` (query, integer) **required** + +--- +##### `getTrades` + +**GET** `/trades` + +Get trades for a user or markets + +**Parameters:** +- `limit` (query, integer) +- `offset` (query, integer) +- `takerOnly` (query, boolean) +- `filterType` (query, string) — Must be provided together with filterAmount. — enum: `CASH,TOKENS` +- `filterAmount` (query, number) — Must be provided together with filterType. +- `market` (query, array) — Comma-separated list of condition IDs. Mutually exclusive with eventId. +- `eventId` (query, array) — Comma-separated list of event IDs. Mutually exclusive with market. +- `user` (query, string) +- `side` (query, string) — enum: `BUY,SELL` + +--- +##### `getActivity` + +**GET** `/activity` + +Get user activity + +**Parameters:** +- `limit` (query, integer) +- `offset` (query, integer) +- `user` (query, string) **required** +- `market` (query, array) — Comma-separated list of condition IDs. Mutually exclusive with eventId. +- `eventId` (query, array) — Comma-separated list of event IDs. Mutually exclusive with market. +- `type` (query, array) +- `start` (query, integer) +- `end` (query, integer) +- `sortBy` (query, string) — enum: `TIMESTAMP,TOKENS,CASH` +- `sortDirection` (query, string) — enum: `ASC,DESC` +- `side` (query, string) — enum: `BUY,SELL` + +--- +##### `getHolders` + +**GET** `/holders` + +Get top holders for markets + +**Parameters:** +- `limit` (query, integer) — Maximum number of holders to return per token. Capped at 20. +- `market` (query, array) **required** — Comma-separated list of condition IDs. +- `minBalance` (query, integer) + +--- +##### `getValue` + +**GET** `/value` + +Get total value of a user's positions + +**Parameters:** +- `user` (query, string) **required** +- `market` (query, array) + +--- +##### `getClosedPositions` + +**GET** `/closed-positions` + +Get closed positions for a user + +**Parameters:** +- `user` (query, string) **required** — The address of the user in question +- `market` (query, array) — The conditionId of the market in question. Supports multiple csv separated values. Cannot be used with the eventId param. +- `title` (query, string) — Filter by market title +- `eventId` (query, array) — The event id of the event in question. Supports multiple csv separated values. Returns positions for all markets for those event ids. Cannot be used with the market param. +- `limit` (query, integer) — The max number of positions to return +- `offset` (query, integer) — The starting index for pagination +- `sortBy` (query, string) — The sort criteria — enum: `REALIZEDPNL,TITLE,PRICE,AVGPRICE,TIMESTAMP` +- `sortDirection` (query, string) — The sort direction — enum: `ASC,DESC` + +--- +##### `getV1MarketPositions` + +**GET** `/v1/market-positions` + +Get positions for a market + +**Parameters:** +- `market` (query, string) **required** — The condition ID of the market to query positions for +- `user` (query, string) — Filter to a single user by proxy wallet address +- `status` (query, string) — Filter positions by status. +- `OPEN` — Only positions with size > 0.01 +- `CLOSED` — Only positions with size <= 0.01 +- `ALL` — All positions regardless of size + — enum: `OPEN,CLOSED,ALL` +- `sortBy` (query, string) — Sort positions by: +- `TOKENS` — Position size (number of tokens) +- `CASH_PNL` — Unrealized cash PnL +- `REALIZED_PNL` — Realized PnL +- `TOTAL_PNL` — Total PnL (cash_pnl + realized_pnl) + — enum: `TOKENS,CASH_PNL,REALIZED_PNL,TOTAL_PNL` +- `sortDirection` (query, string) — enum: `ASC,DESC` +- `limit` (query, integer) — Max number of positions to return per outcome token +- `offset` (query, integer) — Pagination offset per outcome token + +--- +##### `getV1Leaderboard` + +**GET** `/v1/leaderboard` + +Get trader leaderboard rankings + +**Parameters:** +- `category` (query, string) — Market category for the leaderboard — enum: `OVERALL,POLITICS,SPORTS,CRYPTO,CULTURE,MENTIONS,WEATHER,ECONOMICS,TECH,FINANCE` +- `timePeriod` (query, string) — Time period for leaderboard results — enum: `DAY,WEEK,MONTH,ALL` +- `orderBy` (query, string) — Leaderboard ordering criteria — enum: `PNL,VOL` +- `limit` (query, integer) — Max number of leaderboard traders to return +- `offset` (query, integer) — Starting index for pagination +- `user` (query, string) — Limit leaderboard to a single user by address +- `userName` (query, string) — Limit leaderboard to a single username + +--- +##### `getV1BuildersLeaderboard` + +**GET** `/v1/builders/leaderboard` + +Get aggregated builder leaderboard + +**Parameters:** +- `timePeriod` (query, string) — The time period to aggregate results over. + — enum: `DAY,WEEK,MONTH,ALL` +- `limit` (query, string) + +--- +### Kalshi + +| `callApi()` name | Method | Path | Summary | Auth | +|-----------------|--------|------|---------|------| +| `GetHistoricalCutoff` | `GET` | `/historical/cutoff` | Get Historical Cutoff Timestamps | Public | +| `GetMarketCandlesticksHistorical` | `GET` | `/historical/markets/{ticker}/candlesticks` | Get Historical Market Candlesticks | Public | +| `GetFillsHistorical` | `GET` | `/historical/fills` | Get Historical Fills | Required | +| `GetHistoricalOrders` | `GET` | `/historical/orders` | Get Historical Orders | Required | +| `GetHistoricalMarkets` | `GET` | `/historical/markets` | Get Historical Markets | Public | +| `GetHistoricalMarket` | `GET` | `/historical/markets/{ticker}` | Get Historical Market | Public | +| `GetExchangeStatus` | `GET` | `/exchange/status` | Get Exchange Status | Public | +| `GetExchangeAnnouncements` | `GET` | `/exchange/announcements` | Get Exchange Announcements | Public | +| `GetSeriesFeeChanges` | `GET` | `/series/fee_changes` | Get Series Fee Changes | Public | +| `GetExchangeSchedule` | `GET` | `/exchange/schedule` | Get Exchange Schedule | Public | +| `GetUserDataTimestamp` | `GET` | `/exchange/user_data_timestamp` | Get User Data Timestamp | Public | +| `GetOrders` | `GET` | `/portfolio/orders` | Get Orders | Required | +| `CreateOrder` | `POST` | `/portfolio/orders` | Create Order | Required | +| `GetOrder` | `GET` | `/portfolio/orders/{order_id}` | Get Order | Required | +| `CancelOrder` | `DELETE` | `/portfolio/orders/{order_id}` | Cancel Order | Required | +| `BatchCreateOrders` | `POST` | `/portfolio/orders/batched` | Batch Create Orders | Required | +| `BatchCancelOrders` | `DELETE` | `/portfolio/orders/batched` | Batch Cancel Orders | Required | +| `AmendOrder` | `POST` | `/portfolio/orders/{order_id}/amend` | Amend Order | Required | +| `DecreaseOrder` | `POST` | `/portfolio/orders/{order_id}/decrease` | Decrease Order | Required | +| `GetOrderQueuePositions` | `GET` | `/portfolio/orders/queue_positions` | Get Queue Positions for Orders | Required | +| `GetOrderQueuePosition` | `GET` | `/portfolio/orders/{order_id}/queue_position` | Get Order Queue Position | Required | +| `GetOrderGroups` | `GET` | `/portfolio/order_groups` | Get Order Groups | Required | +| `CreateOrderGroup` | `POST` | `/portfolio/order_groups/create` | Create Order Group | Required | +| `GetOrderGroup` | `GET` | `/portfolio/order_groups/{order_group_id}` | Get Order Group | Required | +| `DeleteOrderGroup` | `DELETE` | `/portfolio/order_groups/{order_group_id}` | Delete Order Group | Required | +| `ResetOrderGroup` | `PUT` | `/portfolio/order_groups/{order_group_id}/reset` | Reset Order Group | Required | +| `TriggerOrderGroup` | `PUT` | `/portfolio/order_groups/{order_group_id}/trigger` | Trigger Order Group | Required | +| `UpdateOrderGroupLimit` | `PUT` | `/portfolio/order_groups/{order_group_id}/limit` | Update Order Group Limit | Required | +| `GetBalance` | `GET` | `/portfolio/balance` | Get Balance | Required | +| `CreateSubaccount` | `POST` | `/portfolio/subaccounts` | Create Subaccount | Required | +| `ApplySubaccountTransfer` | `POST` | `/portfolio/subaccounts/transfer` | Transfer Between Subaccounts | Required | +| `GetSubaccountBalances` | `GET` | `/portfolio/subaccounts/balances` | Get All Subaccount Balances | Required | +| `GetSubaccountTransfers` | `GET` | `/portfolio/subaccounts/transfers` | Get Subaccount Transfers | Required | +| `GetPositions` | `GET` | `/portfolio/positions` | Get Positions | Required | +| `GetSettlements` | `GET` | `/portfolio/settlements` | Get Settlements | Required | +| `GetPortfolioRestingOrderTotalValue` | `GET` | `/portfolio/summary/total_resting_order_value` | Get Total Resting Order Value | Required | +| `GetFills` | `GET` | `/portfolio/fills` | Get Fills | Required | +| `GetApiKeys` | `GET` | `/api_keys` | Get API Keys | Required | +| `CreateApiKey` | `POST` | `/api_keys` | Create API Key | Required | +| `GenerateApiKey` | `POST` | `/api_keys/generate` | Generate API Key | Required | +| `DeleteApiKey` | `DELETE` | `/api_keys/{api_key}` | Delete API Key | Required | +| `GetTagsForSeriesCategories` | `GET` | `/search/tags_by_categories` | Get Tags for Series Categories | Public | +| `GetFiltersForSports` | `GET` | `/search/filters_by_sport` | Get Filters for Sports | Public | +| `GetAccountApiLimits` | `GET` | `/account/limits` | Get Account API Limits | Required | +| `GetMarketCandlesticks` | `GET` | `/series/{series_ticker}/markets/{ticker}/candlesticks` | Get Market Candlesticks | Public | +| `GetTrades` | `GET` | `/markets/trades` | Get Trades | Public | +| `GetMarketCandlesticksByEvent` | `GET` | `/series/{series_ticker}/events/{ticker}/candlesticks` | Get Event Candlesticks | Public | +| `GetEvents` | `GET` | `/events` | Get Events | Public | +| `GetMultivariateEvents` | `GET` | `/events/multivariate` | Get Multivariate Events | Public | +| `GetEvent` | `GET` | `/events/{event_ticker}` | Get Event | Public | +| `GetEventMetadata` | `GET` | `/events/{event_ticker}/metadata` | Get Event Metadata | Public | +| `GetEventForecastPercentilesHistory` | `GET` | `/series/{series_ticker}/events/{ticker}/forecast_percentile_history` | Get Event Forecast Percentile History | Required | +| `GetLiveData` | `GET` | `/live_data/{type}/milestone/{milestone_id}` | Get Live Data | Public | +| `GetLiveDatas` | `GET` | `/live_data/batch` | Get Multiple Live Data | Public | +| `GetIncentivePrograms` | `GET` | `/incentive_programs` | Get Incentives | Public | +| `GetFCMOrders` | `GET` | `/fcm/orders` | Get FCM Orders | Required | +| `GetFCMPositions` | `GET` | `/fcm/positions` | Get FCM Positions | Required | +| `GetStructuredTargets` | `GET` | `/structured_targets` | Get Structured Targets | Public | +| `GetStructuredTarget` | `GET` | `/structured_targets/{structured_target_id}` | Get Structured Target | Public | +| `GetMarketOrderbook` | `GET` | `/markets/{ticker}/orderbook` | Get Market Orderbook | Required | +| `GetMarketOrderbooks` | `GET` | `/markets/orderbooks` | Get Multiple Market Orderbooks | Required | +| `GetMilestone` | `GET` | `/milestones/{milestone_id}` | Get Milestone | Public | +| `GetMilestones` | `GET` | `/milestones` | Get Milestones | Public | +| `GetCommunicationsID` | `GET` | `/communications/id` | Get Communications ID | Required | +| `GetRFQs` | `GET` | `/communications/rfqs` | Get RFQs | Required | +| `CreateRFQ` | `POST` | `/communications/rfqs` | Create RFQ | Required | +| `GetRFQ` | `GET` | `/communications/rfqs/{rfq_id}` | Get RFQ | Required | +| `DeleteRFQ` | `DELETE` | `/communications/rfqs/{rfq_id}` | Delete RFQ | Required | +| `GetQuotes` | `GET` | `/communications/quotes` | Get Quotes | Required | +| `CreateQuote` | `POST` | `/communications/quotes` | Create Quote | Required | +| `GetQuote` | `GET` | `/communications/quotes/{quote_id}` | Get Quote | Required | +| `DeleteQuote` | `DELETE` | `/communications/quotes/{quote_id}` | Delete Quote | Required | +| `AcceptQuote` | `PUT` | `/communications/quotes/{quote_id}/accept` | Accept Quote | Required | +| `ConfirmQuote` | `PUT` | `/communications/quotes/{quote_id}/confirm` | Confirm Quote | Required | +| `GetMultivariateEventCollection` | `GET` | `/multivariate_event_collections/{collection_ticker}` | Get Multivariate Event Collection | Public | +| `CreateMarketInMultivariateEventCollection` | `POST` | `/multivariate_event_collections/{collection_ticker}` | Create Market In Multivariate Event Collection | Required | +| `GetMultivariateEventCollections` | `GET` | `/multivariate_event_collections` | Get Multivariate Event Collections | Public | +| `LookupTickersForMarketInMultivariateEventCollection` | `PUT` | `/multivariate_event_collections/{collection_ticker}/lookup` | Lookup Tickers For Market In Multivariate Event Collection | Required | +| `GetMultivariateEventCollectionLookupHistory` | `GET` | `/multivariate_event_collections/{collection_ticker}/lookup` | Get Multivariate Event Collection Lookup History | Public | +| `GetSeries` | `GET` | `/series/{series_ticker}` | Get Series | Public | +| `GetSeriesList` | `GET` | `/series` | Get Series List | Public | +| `GetMarkets` | `GET` | `/markets` | Get Markets | Public | +| `GetMarket` | `GET` | `/markets/{ticker}` | Get Market | Public | +| `BatchGetMarketCandlesticks` | `GET` | `/markets/candlesticks` | Batch Get Market Candlesticks | Public | + +#### Endpoint Details + +##### `GetHistoricalCutoff` + +**GET** `/historical/cutoff` + +Get Historical Cutoff Timestamps + + +--- +##### `GetMarketCandlesticksHistorical` + +**GET** `/historical/markets/{ticker}/candlesticks` + +Get Historical Market Candlesticks + +**Parameters:** +- `ticker` (path, string) **required** — Market ticker - unique identifier for the specific market +- `start_ts` (query, integer) **required** — Start timestamp (Unix timestamp). Candlesticks will include those ending on or after this time. +- `end_ts` (query, integer) **required** — End timestamp (Unix timestamp). Candlesticks will include those ending on or before this time. +- `period_interval` (query, integer) **required** — Time period length of each candlestick in minutes. Valid values are 1 (1 minute), 60 (1 hour), or 1440 (1 day). — enum: `1,60,1440` + +--- +##### `GetFillsHistorical` + +**GET** `/historical/fills` + +Get Historical Fills *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetHistoricalOrders` + +**GET** `/historical/orders` + +Get Historical Orders *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetHistoricalMarkets` + +**GET** `/historical/markets` + +Get Historical Markets + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetHistoricalMarket` + +**GET** `/historical/markets/{ticker}` + +Get Historical Market + +**Parameters:** +- `` (, string) + +--- +##### `GetExchangeStatus` + +**GET** `/exchange/status` + +Get Exchange Status + + +--- +##### `GetExchangeAnnouncements` + +**GET** `/exchange/announcements` + +Get Exchange Announcements + + +--- +##### `GetSeriesFeeChanges` + +**GET** `/series/fee_changes` + +Get Series Fee Changes + +**Parameters:** +- `series_ticker` (query, string) +- `show_historical` (query, boolean) + +--- +##### `GetExchangeSchedule` + +**GET** `/exchange/schedule` + +Get Exchange Schedule + + +--- +##### `GetUserDataTimestamp` + +**GET** `/exchange/user_data_timestamp` + +Get User Data Timestamp + + +--- +##### `GetOrders` + +**GET** `/portfolio/orders` + +Get Orders *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `CreateOrder` + +**POST** `/portfolio/orders` + +Create Order *(Auth required)* + + +--- +##### `GetOrder` + +**GET** `/portfolio/orders/{order_id}` + +Get Order *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `CancelOrder` + +**DELETE** `/portfolio/orders/{order_id}` + +Cancel Order *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) + +--- +##### `BatchCreateOrders` + +**POST** `/portfolio/orders/batched` + +Batch Create Orders *(Auth required)* + + +--- +##### `BatchCancelOrders` + +**DELETE** `/portfolio/orders/batched` + +Batch Cancel Orders *(Auth required)* + + +--- +##### `AmendOrder` + +**POST** `/portfolio/orders/{order_id}/amend` + +Amend Order *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `DecreaseOrder` + +**POST** `/portfolio/orders/{order_id}/decrease` + +Decrease Order *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `GetOrderQueuePositions` + +**GET** `/portfolio/orders/queue_positions` + +Get Queue Positions for Orders *(Auth required)* + +**Parameters:** +- `market_tickers` (query, string) — Comma-separated list of market tickers to filter by +- `event_ticker` (query, string) — Event ticker to filter by +- `` (, string) + +--- +##### `GetOrderQueuePosition` + +**GET** `/portfolio/orders/{order_id}/queue_position` + +Get Order Queue Position *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `GetOrderGroups` + +**GET** `/portfolio/order_groups` + +Get Order Groups *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `CreateOrderGroup` + +**POST** `/portfolio/order_groups/create` + +Create Order Group *(Auth required)* + + +--- +##### `GetOrderGroup` + +**GET** `/portfolio/order_groups/{order_group_id}` + +Get Order Group *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) + +--- +##### `DeleteOrderGroup` + +**DELETE** `/portfolio/order_groups/{order_group_id}` + +Delete Order Group *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) + +--- +##### `ResetOrderGroup` + +**PUT** `/portfolio/order_groups/{order_group_id}/reset` + +Reset Order Group *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) + +--- +##### `TriggerOrderGroup` + +**PUT** `/portfolio/order_groups/{order_group_id}/trigger` + +Trigger Order Group *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) + +--- +##### `UpdateOrderGroupLimit` + +**PUT** `/portfolio/order_groups/{order_group_id}/limit` + +Update Order Group Limit *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `GetBalance` + +**GET** `/portfolio/balance` + +Get Balance *(Auth required)* + +**Parameters:** +- `subaccount` (query, integer) — Subaccount number (0 for primary, 1-32 for subaccounts). When provided, returns only that subaccount's balance. + +--- +##### `CreateSubaccount` + +**POST** `/portfolio/subaccounts` + +Create Subaccount *(Auth required)* + + +--- +##### `ApplySubaccountTransfer` + +**POST** `/portfolio/subaccounts/transfer` + +Transfer Between Subaccounts *(Auth required)* + + +--- +##### `GetSubaccountBalances` + +**GET** `/portfolio/subaccounts/balances` + +Get All Subaccount Balances *(Auth required)* + + +--- +##### `GetSubaccountTransfers` + +**GET** `/portfolio/subaccounts/transfers` + +Get Subaccount Transfers *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) + +--- +##### `GetPositions` + +**GET** `/portfolio/positions` + +Get Positions *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetSettlements` + +**GET** `/portfolio/settlements` + +Get Settlements *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetPortfolioRestingOrderTotalValue` + +**GET** `/portfolio/summary/total_resting_order_value` + +Get Total Resting Order Value *(Auth required)* + + +--- +##### `GetFills` + +**GET** `/portfolio/fills` + +Get Fills *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetApiKeys` + +**GET** `/api_keys` + +Get API Keys *(Auth required)* + + +--- +##### `CreateApiKey` + +**POST** `/api_keys` + +Create API Key *(Auth required)* + + +--- +##### `GenerateApiKey` + +**POST** `/api_keys/generate` + +Generate API Key *(Auth required)* + + +--- +##### `DeleteApiKey` + +**DELETE** `/api_keys/{api_key}` + +Delete API Key *(Auth required)* + +**Parameters:** +- `api_key` (path, string) **required** — API key ID to delete + +--- +##### `GetTagsForSeriesCategories` + +**GET** `/search/tags_by_categories` + +Get Tags for Series Categories + + +--- +##### `GetFiltersForSports` + +**GET** `/search/filters_by_sport` + +Get Filters for Sports + + +--- +##### `GetAccountApiLimits` + +**GET** `/account/limits` + +Get Account API Limits *(Auth required)* + + +--- +##### `GetMarketCandlesticks` + +**GET** `/series/{series_ticker}/markets/{ticker}/candlesticks` + +Get Market Candlesticks + +**Parameters:** +- `series_ticker` (path, string) **required** — Series ticker - the series that contains the target market +- `ticker` (path, string) **required** — Market ticker - unique identifier for the specific market +- `start_ts` (query, integer) **required** — Start timestamp (Unix timestamp). Candlesticks will include those ending on or after this time. +- `end_ts` (query, integer) **required** — End timestamp (Unix timestamp). Candlesticks will include those ending on or before this time. +- `period_interval` (query, integer) **required** — Time period length of each candlestick in minutes. Valid values are 1 (1 minute), 60 (1 hour), or 1440 (1 day). — enum: `1,60,1440` +- `include_latest_before_start` (query, boolean) — If true, prepends the latest candlestick available before the start_ts. This synthetic candlestick is created by: +1. Finding the most recent real candlestick before start_ts +2. Projecting it forward to the first period boundary (calculated as the next period interval after start_ts) +3. Setting all OHLC prices to null, and `previous_price` to the close price from the real candlestick + + +--- +##### `GetTrades` + +**GET** `/markets/trades` + +Get Trades + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetMarketCandlesticksByEvent` + +**GET** `/series/{series_ticker}/events/{ticker}/candlesticks` + +Get Event Candlesticks + +**Parameters:** +- `ticker` (path, string) **required** — The event ticker +- `series_ticker` (path, string) **required** — The series ticker +- `start_ts` (query, integer) **required** — Start timestamp for the range +- `end_ts` (query, integer) **required** — End timestamp for the range +- `period_interval` (query, integer) **required** — Specifies the length of each candlestick period, in minutes. Must be one minute, one hour, or one day. — enum: `1,60,1440` + +--- +##### `GetEvents` + +**GET** `/events` + +Get Events + +**Parameters:** +- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 200. Maximum value is 200. +- `cursor` (query, string) — Parameter to specify the pagination cursor. Use the cursor value returned from the previous response to get the next page of results. Leave empty for the first page. +- `with_nested_markets` (query, boolean) — Parameter to specify if nested markets should be included in the response. When true, each event will include a 'markets' field containing a list of Market objects associated with that event. +- `with_milestones` (query, boolean) — If true, includes related milestones as a field alongside events. +- `status` (query, string) — Filter by event status. Possible values are 'open', 'closed', 'settled'. Leave empty to return events with any status. — enum: `open,closed,settled` +- `` (, string) +- `min_close_ts` (query, integer) — Filter events with at least one market with close timestamp greater than this Unix timestamp (in seconds). + +--- +##### `GetMultivariateEvents` + +**GET** `/events/multivariate` + +Get Multivariate Events + +**Parameters:** +- `limit` (query, integer) — Number of results per page. Defaults to 100. Maximum value is 200. +- `cursor` (query, string) — Pagination cursor. Use the cursor value returned from the previous response to get the next page of results. +- `` (, string) +- `collection_ticker` (query, string) — Filter events by collection ticker. Returns only multivariate events belonging to the specified collection. Cannot be used together with series_ticker. +- `with_nested_markets` (query, boolean) — Parameter to specify if nested markets should be included in the response. When true, each event will include a 'markets' field containing a list of Market objects associated with that event. + +--- +##### `GetEvent` + +**GET** `/events/{event_ticker}` + +Get Event + +**Parameters:** +- `event_ticker` (path, string) **required** — Event ticker +- `with_nested_markets` (query, boolean) — If true, markets are included within the event object. If false (default), markets are returned as a separate top-level field in the response. + +--- +##### `GetEventMetadata` + +**GET** `/events/{event_ticker}/metadata` + +Get Event Metadata + +**Parameters:** +- `event_ticker` (path, string) **required** — Event ticker + +--- +##### `GetEventForecastPercentilesHistory` + +**GET** `/series/{series_ticker}/events/{ticker}/forecast_percentile_history` + +Get Event Forecast Percentile History *(Auth required)* + +**Parameters:** +- `ticker` (path, string) **required** — The event ticker +- `series_ticker` (path, string) **required** — The series ticker +- `percentiles` (query, array) **required** — Array of percentile values to retrieve (0-10000, max 10 values) +- `start_ts` (query, integer) **required** — Start timestamp for the range +- `end_ts` (query, integer) **required** — End timestamp for the range +- `period_interval` (query, integer) **required** — Specifies the length of each forecast period, in minutes. 0 for 5-second intervals, or 1, 60, or 1440 for minute-based intervals. — enum: `0,1,60,1440` + +--- +##### `GetLiveData` + +**GET** `/live_data/{type}/milestone/{milestone_id}` + +Get Live Data + +**Parameters:** +- `type` (path, string) **required** — Type of live data +- `milestone_id` (path, string) **required** — Milestone ID + +--- +##### `GetLiveDatas` + +**GET** `/live_data/batch` + +Get Multiple Live Data + +**Parameters:** +- `milestone_ids` (query, array) **required** — Array of milestone IDs + +--- +##### `GetIncentivePrograms` + +**GET** `/incentive_programs` + +Get Incentives + +**Parameters:** +- `status` (query, string) — Status filter. Can be "all", "active", "upcoming", "closed", or "paid_out". Default is "all". — enum: `all,active,upcoming,closed,paid_out` +- `type` (query, string) — Type filter. Can be "all", "liquidity", or "volume". Default is "all". — enum: `all,liquidity,volume` +- `limit` (query, integer) — Number of results per page. Defaults to 100. Maximum value is 10000. +- `cursor` (query, string) — Cursor for pagination + +--- +##### `GetFCMOrders` + +**GET** `/fcm/orders` + +Get FCM Orders *(Auth required)* + +**Parameters:** +- `subtrader_id` (query, string) **required** — Restricts the response to orders for a specific subtrader (FCM members only) +- `` (, string) +- `` (, string) +- `` (, string) +- `min_ts` (query, integer) — Restricts the response to orders after a timestamp, formatted as a Unix Timestamp +- `max_ts` (query, integer) — Restricts the response to orders before a timestamp, formatted as a Unix Timestamp +- `status` (query, string) — Restricts the response to orders that have a certain status — enum: `resting,canceled,executed` +- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 100 + +--- +##### `GetFCMPositions` + +**GET** `/fcm/positions` + +Get FCM Positions *(Auth required)* + +**Parameters:** +- `subtrader_id` (query, string) **required** — Restricts the response to positions for a specific subtrader (FCM members only) +- `ticker` (query, string) — Ticker of desired positions +- `event_ticker` (query, string) — Event ticker of desired positions +- `count_filter` (query, string) — Restricts the positions to those with any of following fields with non-zero values, as a comma separated list +- `settlement_status` (query, string) — Settlement status of the markets to return. Defaults to unsettled — enum: `all,unsettled,settled` +- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 100 +- `cursor` (query, string) — The Cursor represents a pointer to the next page of records in the pagination + +--- +##### `GetStructuredTargets` + +**GET** `/structured_targets` + +Get Structured Targets + +**Parameters:** +- `type` (query, string) — Filter by structured target type +- `competition` (query, string) — Filter by competition +- `page_size` (query, integer) — Number of items per page (min 1, max 2000, default 100) +- `cursor` (query, string) — Pagination cursor + +--- +##### `GetStructuredTarget` + +**GET** `/structured_targets/{structured_target_id}` + +Get Structured Target + +**Parameters:** +- `structured_target_id` (path, string) **required** — Structured target ID + +--- +##### `GetMarketOrderbook` + +**GET** `/markets/{ticker}/orderbook` + +Get Market Orderbook *(Auth required)* + +**Parameters:** +- `` (, string) +- `depth` (query, integer) — Depth of the orderbook to retrieve (0 or negative means all levels, 1-100 for specific depth) + +--- +##### `GetMarketOrderbooks` + +**GET** `/markets/orderbooks` + +Get Multiple Market Orderbooks *(Auth required)* + +**Parameters:** +- `tickers` (query, array) **required** — List of market tickers to fetch orderbooks for + +--- +##### `GetMilestone` + +**GET** `/milestones/{milestone_id}` + +Get Milestone + +**Parameters:** +- `milestone_id` (path, string) **required** — Milestone ID + +--- +##### `GetMilestones` + +**GET** `/milestones` + +Get Milestones + +**Parameters:** +- `limit` (query, integer) **required** — Number of milestones to return per page +- `minimum_start_date` (query, string) — Minimum start date to filter milestones. Format RFC3339 timestamp +- `category` (query, string) — Filter by milestone category +- `competition` (query, string) — Filter by competition +- `source_id` (query, string) — Filter by source id +- `type` (query, string) — Filter by milestone type +- `related_event_ticker` (query, string) — Filter by related event ticker +- `cursor` (query, string) — Pagination cursor. Use the cursor value returned from the previous response to get the next page of results + +--- +##### `GetCommunicationsID` + +**GET** `/communications/id` + +Get Communications ID *(Auth required)* + + +--- +##### `GetRFQs` + +**GET** `/communications/rfqs` + +Get RFQs *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 100. +- `status` (query, string) — Filter RFQs by status +- `creator_user_id` (query, string) — Filter RFQs by creator user ID + +--- +##### `CreateRFQ` + +**POST** `/communications/rfqs` + +Create RFQ *(Auth required)* + + +--- +##### `GetRFQ` + +**GET** `/communications/rfqs/{rfq_id}` + +Get RFQ *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `DeleteRFQ` + +**DELETE** `/communications/rfqs/{rfq_id}` + +Delete RFQ *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `GetQuotes` + +**GET** `/communications/quotes` + +Get Quotes *(Auth required)* + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 500. +- `status` (query, string) — Filter quotes by status +- `quote_creator_user_id` (query, string) — Filter quotes by quote creator user ID +- `rfq_creator_user_id` (query, string) — Filter quotes by RFQ creator user ID +- `rfq_creator_subtrader_id` (query, string) — Filter quotes by RFQ creator subtrader ID (FCM members only) +- `rfq_id` (query, string) — Filter quotes by RFQ ID + +--- +##### `CreateQuote` + +**POST** `/communications/quotes` + +Create Quote *(Auth required)* + + +--- +##### `GetQuote` + +**GET** `/communications/quotes/{quote_id}` + +Get Quote *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `DeleteQuote` + +**DELETE** `/communications/quotes/{quote_id}` + +Delete Quote *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `AcceptQuote` + +**PUT** `/communications/quotes/{quote_id}/accept` + +Accept Quote *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `ConfirmQuote` + +**PUT** `/communications/quotes/{quote_id}/confirm` + +Confirm Quote *(Auth required)* + +**Parameters:** +- `` (, string) + +--- +##### `GetMultivariateEventCollection` + +**GET** `/multivariate_event_collections/{collection_ticker}` + +Get Multivariate Event Collection + +**Parameters:** +- `collection_ticker` (path, string) **required** — Collection ticker + +--- +##### `CreateMarketInMultivariateEventCollection` + +**POST** `/multivariate_event_collections/{collection_ticker}` + +Create Market In Multivariate Event Collection *(Auth required)* + +**Parameters:** +- `collection_ticker` (path, string) **required** — Collection ticker + +--- +##### `GetMultivariateEventCollections` + +**GET** `/multivariate_event_collections` + +Get Multivariate Event Collections + +**Parameters:** +- `status` (query, string) — Only return collections of a certain status. Can be unopened, open, or closed. — enum: `unopened,open,closed` +- `associated_event_ticker` (query, string) — Only return collections associated with a particular event ticker. +- `series_ticker` (query, string) — Only return collections with a particular series ticker. +- `limit` (query, integer) — Specify the maximum number of results. +- `cursor` (query, string) — The Cursor represents a pointer to the next page of records in the pagination. This optional parameter, when filled, should be filled with the cursor string returned in a previous request to this end-point. + +--- +##### `LookupTickersForMarketInMultivariateEventCollection` + +**PUT** `/multivariate_event_collections/{collection_ticker}/lookup` + +Lookup Tickers For Market In Multivariate Event Collection *(Auth required)* + +**Parameters:** +- `collection_ticker` (path, string) **required** — Collection ticker + +--- +##### `GetMultivariateEventCollectionLookupHistory` + +**GET** `/multivariate_event_collections/{collection_ticker}/lookup` + +Get Multivariate Event Collection Lookup History + +**Parameters:** +- `collection_ticker` (path, string) **required** — Collection ticker +- `lookback_seconds` (query, integer) **required** — Number of seconds to look back for lookup history. Must be one of 10, 60, 300, or 3600. — enum: `10,60,300,3600` + +--- +##### `GetSeries` + +**GET** `/series/{series_ticker}` + +Get Series + +**Parameters:** +- `series_ticker` (path, string) **required** — The ticker of the series to retrieve +- `include_volume` (query, boolean) — If true, includes the total volume traded across all events in this series. + +--- +##### `GetSeriesList` + +**GET** `/series` + +Get Series List + +**Parameters:** +- `category` (query, string) +- `tags` (query, string) +- `include_product_metadata` (query, boolean) +- `include_volume` (query, boolean) — If true, includes the total volume traded across all events in each series. + +--- +##### `GetMarkets` + +**GET** `/markets` + +Get Markets + +**Parameters:** +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) +- `` (, string) + +--- +##### `GetMarket` + +**GET** `/markets/{ticker}` + +Get Market + +**Parameters:** +- `` (, string) + +--- +##### `BatchGetMarketCandlesticks` + +**GET** `/markets/candlesticks` + +Batch Get Market Candlesticks + +**Parameters:** +- `market_tickers` (query, string) **required** — Comma-separated list of market tickers (maximum 100) +- `start_ts` (query, integer) **required** — Start timestamp in Unix seconds +- `end_ts` (query, integer) **required** — End timestamp in Unix seconds +- `period_interval` (query, integer) **required** — Candlestick period interval in minutes +- `include_latest_before_start` (query, boolean) — If true, prepends the latest candlestick available before the start_ts. This synthetic candlestick is created by: +1. Finding the most recent real candlestick before start_ts +2. Projecting it forward to the first period boundary (calculated as the next period interval after start_ts) +3. Setting all OHLC prices to null, and `previous_price` to the close price from the real candlestick + + +--- +### Limitless + +| `callApi()` name | Method | Path | Summary | Auth | +|-----------------|--------|------|---------|------| +| `AuthController_getSigningMessage` | `GET` | `/auth/signing-message` | Get signing message | Public | +| `AuthController_verifyAuth` | `GET` | `/auth/verify-auth` | Verify authentication | Required | +| `AuthController_login` | `POST` | `/auth/login` | User login | Public | +| `AuthController_logout` | `POST` | `/auth/logout` | User logout | Required | +| `MarketController_getActiveMarkets[0]` | `GET` | `/markets/active/{categoryId}` | Browse Active Markets | Public | +| `MarketController_getActiveMarkets[1]` | `GET` | `/markets/active` | Browse Active Markets | Public | +| `MarketController_getActiveMarketCountPerCategory` | `GET` | `/markets/categories/count` | Get active market count per category | Public | +| `MarketController_getActiveSlugs` | `GET` | `/markets/active/slugs` | Get active market slugs with metadata | Public | +| `MarketController_find` | `GET` | `/markets/{addressOrSlug}` | Get Market Details | Public | +| `MarketController_getFeedEvent` | `GET` | `/markets/{slug}/get-feed-events` | Get feed events for a market | Required | +| `MarketOrderbookController_getHistoricalPrice` | `GET` | `/markets/{slug}/historical-price` | Get Historical Prices | Public | +| `MarketOrderbookController_getOrderbook` | `GET` | `/markets/{slug}/orderbook` | Get Orderbook | Public | +| `MarketOrderbookController_getLockedBalance` | `GET` | `/markets/{slug}/locked-balance` | Get Locked Balance | Required | +| `MarketOrderbookController_getUserOrders` | `GET` | `/markets/{slug}/user-orders` | User Orders | Required | +| `MarketOrderbookController_getMarketEvents` | `GET` | `/markets/{slug}/events` | Market Events | Public | +| `MarketSearchController_search` | `GET` | `/markets/search` | Search for markets based on semantic similarity | Public | +| `PortfolioController_getTrades` | `GET` | `/portfolio/trades` | Get Trades | Required | +| `PortfolioController_getPositions` | `GET` | `/portfolio/positions` | Get Positions | Required | +| `PortfolioController_getPnlChart` | `GET` | `/portfolio/pnl-chart` | Get portfolio PnL chart | Required | +| `PortfolioController_getHistory` | `GET` | `/portfolio/history` | Get History | Required | +| `PortfolioController_getPointsBreakdown` | `GET` | `/portfolio/points` | Get points breakdown | Required | +| `PublicPortfolioController_tradedVolume` | `GET` | `/portfolio/{account}/traded-volume` | User Total Volume | Public | +| `PublicPortfolioController_getPositions` | `GET` | `/portfolio/{account}/positions` | Get All User Positions | Public | +| `PublicPortfolioController_getPnlChart` | `GET` | `/portfolio/{account}/pnl-chart` | Get portfolio PnL chart (public) | Public | +| `TradingPortfolioController_getAllowance` | `GET` | `/portfolio/trading/allowance` | Get User Trading Allowance | Required | +| `OrderController_createOrder` | `POST` | `/orders` | Create Order | Required | +| `OrderController_cancelOrder` | `DELETE` | `/orders/{orderId}` | Cancel Order | Required | +| `OrderController_cancelOrderBatch` | `POST` | `/orders/cancel-batch` | Cancel multiple orders in batch | Required | +| `OrderController_cancelAllOrders` | `DELETE` | `/orders/all/{slug}` | Cancel all of a user's orders in a specific market | Required | + +#### Endpoint Details + +##### `AuthController_getSigningMessage` + +**GET** `/auth/signing-message` + +Get signing message + + +--- +##### `AuthController_verifyAuth` + +**GET** `/auth/verify-auth` + +Verify authentication *(Auth required)* + + +--- +##### `AuthController_login` + +**POST** `/auth/login` + +User login + +**Parameters:** +- `x-account` (header, string) **required** — The Ethereum address of the user +- `x-signing-message` (header, string) **required** — The signing message generated by the server +- `x-signature` (header, string) **required** — The signature generated by signing the message with the user's wallet + +--- +##### `AuthController_logout` + +**POST** `/auth/logout` + +User logout *(Auth required)* + + +--- +##### `MarketController_getActiveMarkets[0]` + +**GET** `/markets/active/{categoryId}` + +Browse Active Markets + +**Parameters:** +- `page` (query, number) — Page number for pagination +- `limit` (query, number) — Number of items per page +- `sortBy` (query, string) — Sort by query parameter +- `tradeType` (query, string) — Filter by trade type (amm, clob, or group) — enum: `amm,clob,group` +- `automationType` (query, string) — Filter by automation type (manual, lumy, or sports) — enum: `manual,lumy,sports` +- `categoryId` (path, number) **required** — Filter markets by category ID + +--- +##### `MarketController_getActiveMarkets[1]` + +**GET** `/markets/active` + +Browse Active Markets + +**Parameters:** +- `page` (query, number) — Page number for pagination +- `limit` (query, number) — Number of items per page +- `sortBy` (query, string) — Sort by query parameter +- `tradeType` (query, string) — Filter by trade type (amm, clob, or group) — enum: `amm,clob,group` +- `automationType` (query, string) — Filter by automation type (manual, lumy, or sports) — enum: `manual,lumy,sports` +- `categoryId` (path, number) **required** — Filter markets by category ID + +--- +##### `MarketController_getActiveMarketCountPerCategory` + +**GET** `/markets/categories/count` + +Get active market count per category + + +--- +##### `MarketController_getActiveSlugs` + +**GET** `/markets/active/slugs` + +Get active market slugs with metadata + + +--- +##### `MarketController_find` + +**GET** `/markets/{addressOrSlug}` + +Get Market Details + +**Parameters:** +- `addressOrSlug` (path, string) **required** — Market/group address (0x...) or slug identifier (my-market-name) + +--- +##### `MarketController_getFeedEvent` + +**GET** `/markets/{slug}/get-feed-events` + +Get feed events for a market *(Auth required)* + +**Parameters:** +- `page` (query, number) — Page number for pagination +- `limit` (query, number) — Number of events per page +- `slug` (path, string) **required** — Slug of the market + +--- +##### `MarketOrderbookController_getHistoricalPrice` + +**GET** `/markets/{slug}/historical-price` + +Get Historical Prices + +**Parameters:** +- `to` (query, string) — End date for historical data +- `from` (query, string) — Start date for historical data +- `interval` (query, string) — Time interval for data points — enum: `1h,6h,1d,1w,1m,all` +- `slug` (path, string) **required** — Market slug identifier + +--- +##### `MarketOrderbookController_getOrderbook` + +**GET** `/markets/{slug}/orderbook` + +Get Orderbook + +**Parameters:** +- `slug` (path, string) **required** — Market slug identifier + +--- +##### `MarketOrderbookController_getLockedBalance` + +**GET** `/markets/{slug}/locked-balance` + +Get Locked Balance *(Auth required)* + +**Parameters:** +- `slug` (path, string) **required** — Market slug identifier + +--- +##### `MarketOrderbookController_getUserOrders` + +**GET** `/markets/{slug}/user-orders` + +User Orders *(Auth required)* + +**Parameters:** +- `statuses` (query, array) — Order status(es) to filter by. Defaults to [LIVE] if not provided +- `limit` (query, number) — Maximum number of orders to return +- `slug` (path, string) **required** — Market slug identifier + +--- +##### `MarketOrderbookController_getMarketEvents` + +**GET** `/markets/{slug}/events` + +Market Events + +**Parameters:** +- `page` (query, number) — Page number for pagination +- `limit` (query, number) — Number of events per page +- `slug` (path, string) **required** — Market slug identifier + +--- +##### `MarketSearchController_search` + +**GET** `/markets/search` + +Search for markets based on semantic similarity + +**Parameters:** +- `query` (query, string) **required** — Search query text +- `limit` (query, number) — Maximum number of results to return +- `page` (query, number) — Number of page +- `similarityThreshold` (query, number) — Minimum similarity score (0-1) + +--- +##### `PortfolioController_getTrades` + +**GET** `/portfolio/trades` + +Get Trades *(Auth required)* + + +--- +##### `PortfolioController_getPositions` + +**GET** `/portfolio/positions` + +Get Positions *(Auth required)* + + +--- +##### `PortfolioController_getPnlChart` + +**GET** `/portfolio/pnl-chart` + +Get portfolio PnL chart *(Auth required)* + +**Parameters:** +- `timeframe` (query, string) — Timeframe window for percent change and chart series + +--- +##### `PortfolioController_getHistory` + +**GET** `/portfolio/history` + +Get History *(Auth required)* + +**Parameters:** +- `page` (query, number) **required** — Page number +- `limit` (query, number) **required** — Number of items per page +- `from` (query, string) — Start date for filtering (ISO 8601 format) +- `to` (query, string) — End date for filtering (ISO 8601 format) + +--- +##### `PortfolioController_getPointsBreakdown` + +**GET** `/portfolio/points` + +Get points breakdown *(Auth required)* + + +--- +##### `PublicPortfolioController_tradedVolume` + +**GET** `/portfolio/{account}/traded-volume` + +User Total Volume + +**Parameters:** +- `account` (path, string) **required** — User Ethereum address + +--- +##### `PublicPortfolioController_getPositions` + +**GET** `/portfolio/{account}/positions` + +Get All User Positions + +**Parameters:** +- `account` (path, string) **required** — User Ethereum address + +--- +##### `PublicPortfolioController_getPnlChart` + +**GET** `/portfolio/{account}/pnl-chart` + +Get portfolio PnL chart (public) + +**Parameters:** +- `account` (path, string) **required** — User Ethereum address +- `timeframe` (query, string) — Timeframe window for percent change and chart series + +--- +##### `TradingPortfolioController_getAllowance` + +**GET** `/portfolio/trading/allowance` + +Get User Trading Allowance *(Auth required)* + +**Parameters:** +- `type` (query, string) **required** — Trading type: CLOB or NegRisk — enum: `clob,negrisk` +- `spender` (query, string) — Optional spender address override (e.g., venue exchange address) + +--- +##### `OrderController_createOrder` + +**POST** `/orders` + +Create Order *(Auth required)* -console.log(market.title); -console.log(`Price: ${(outcome.price * 100).toFixed(1)}%`); -// 3. Place a limit order -const order = await exchange.createOrder({ - outcome, - side: 'buy', - type: 'limit', - amount: 10, - price: 0.50 -}); +--- +##### `OrderController_cancelOrder` -console.log(`Order placed: ${order.id}`); +**DELETE** `/orders/{orderId}` -// 4. Check order status -const updatedOrder = await exchange.fetchOrder(order.id); -console.log(`Status: ${updatedOrder.status}`); -console.log(`Filled: ${updatedOrder.filled}/${updatedOrder.amount}`); +Cancel Order *(Auth required)* -// 5. Cancel if needed -if (updatedOrder.status === 'open') { - await exchange.cancelOrder(order.id); - console.log('Order cancelled'); -} +**Parameters:** +- `orderId` (path, string) **required** — Unique identifier of the order to be cancelled -// 6. Check positions -const positions = await exchange.fetchPositions(); -positions.forEach(pos => { - console.log(`${pos.outcomeLabel}: ${pos.unrealizedPnL > 0 ? '+' : ''}$${pos.unrealizedPnL.toFixed(2)}`); -}); -``` - -## Data Models - -### `ExchangeOptions` - -Constructor-level options for venue clients (Polymarket, Kalshi, Opinion, etc.). -Hosted mode is the default when pmxtApiKey is set; otherwise the SDK runs against -a local sidecar with venue credentials. - -```typescript -interface ExchangeOptions { -pmxtApiKey: string; // PMXT customer API key. When set, the SDK routes to api.pmxt.dev (catalog) and trade.pmxt.dev (trading). Get one at pmxt.dev/dashboard. -walletAddress: string; // EVM wallet address for hosted reads/writes. Required for endpoints that operate on a wallet (balances, positions, trades, open orders). -signer: object; // Optional pre-built signer for hosted writes. If absent and privateKey is set, the SDK auto-wraps privateKey into a signer. -privateKey: string; // Private key. In hosted mode, used to derive an EIP-712 signer for writes (wraps into EthAccountSigner/EthersSigner). In self-hosted mode, used as the venue credential directly. -baseUrl: string; // Explicit base URL override. When unset, the SDK uses api.pmxt.dev when pmxtApiKey is set, or the local sidecar otherwise. -apiKey: string; // Venue-side API key (e.g. Polymarket CLOB key). Only relevant for self-hosted mode. -autoStartServer: boolean; // Auto-start the local sidecar when running self-hosted. Defaults to true when no pmxtApiKey is set, false when hosted. -} -``` - ---- -### `UnifiedMarket` - - - -```typescript -interface UnifiedMarket { -marketId: string; // The unique identifier for this market -eventId: string; // Link to parent event -title: string; // The market title (e.g., "Will BTC close above $100k on Dec 31?"). -description: string; // Long-form market description or resolution criteria. -slug: string; // URL-friendly slug for the market. -outcomes: MarketOutcome[]; // The possible outcomes for this market. -resolutionDate: string; // When the market is scheduled to resolve. Optional because some venues do not publish a cutoff for every market (e.g. Opinion categorical children) — emit `undefined` rather than coercing to epoch. -volume24h: number; // Trading volume over the past 24 hours (USD). -volume: number; // Total / Lifetime volume -liquidity: number; // Current market liquidity (USD). -openInterest: number; // Total value of outstanding contracts (USD). -url: string; // Canonical URL to view the market on the venue. -image: string; // Optional image URL for the market. -category: string; // Optional category label. Venue-defined — common values include "Sports", "Politics", "Crypto", "Economics", "Science", "Culture". Polymarket uses finer-grained categories like "Bitcoin", "Soccer", "Economic Policy"; Kalshi uses broader ones like "Sports" or "Mentions". -tags: string[]; // Optional list of tags. More granular than category — e.g. ["Crypto", "Crypto Prices", "Bitcoin"] or ["Politics", "Elections", "Trump"]. Tags vary by venue: Polymarket markets carry several, Kalshi typically one. -tickSize: number; // Minimum price increment (e.g., 0.01, 0.001) -status: string; // Venue-native lifecycle status (e.g. 'active', 'closed', 'archived'). -contractAddress: string; // On-chain contract / condition identifier where applicable (Polymarket conditionId, etc.). -sourceMetadata: object; // Raw venue-specific metadata not captured by first-class fields (e.g. Kalshi series_ticker / series_title from the parent event, Polymarket series). Passed through verbatim so downstream consumers can recover anything the unified shape omits. Each venue populates what it has. -sourceExchange: string; // The exchange/venue this market originates from (e.g. 'polymarket', 'kalshi'). Populated by the Router. -yes: any; // Convenience accessor for the YES outcome on a binary market. -no: any; // Convenience accessor for the NO outcome on a binary market. -up: any; // Convenience accessor for the UP outcome on a binary market. -down: any; // Convenience accessor for the DOWN outcome on a binary market. -} -``` - ---- -### `MarketOutcome` - - - -```typescript -interface MarketOutcome { -outcomeId: string; // Outcome ID for trading operations (CLOB Token ID for Polymarket, Market Ticker for Kalshi) -marketId: string; // The market this outcome belongs to (set automatically when outcomes are built) -label: string; // Human-readable outcome label (e.g., "Yes", "No", candidate name). -price: number; // Probability between 0.0 and 1.0. -priceChange24h: number; // Change in price over the past 24 hours, as an absolute probability delta. -metadata: object; // Exchange-specific metadata (e.g., clobTokenId for Polymarket) -} -``` - ---- -### `UnifiedEvent` - -A grouped collection of related markets (e.g., "Who will be Fed Chair?" contains multiple candidate markets). - -```typescript -interface UnifiedEvent { -id: string; // The unique identifier for this event. -title: string; // The event title (e.g., "Who will be Fed Chair?"). -description: string; // Long-form event description. -slug: string; // URL-friendly slug for the event. -markets: UnifiedMarket[]; // Markets grouped under this event. -volume24h: number; // Trading volume over the past 24 hours (USD). -volume: number; // Total / Lifetime volume (sum across markets; undefined if no market provides it) -url: string; // Canonical URL to view the event on the venue. -image: string; // Optional image URL for the event. -category: string; // Optional category label. Venue-defined — common values include "Sports", "Politics", "Crypto", "Economics", "Science", "Culture". Polymarket uses finer-grained categories like "Bitcoin", "Soccer", "Economic Policy"; Kalshi uses broader ones like "Sports" or "Mentions". -tags: string[]; // Optional list of tags. More granular than category — e.g. ["Sports", "FIFA World Cup", "2026 FIFA World Cup"] or ["Politics", "Geopolitics", "Middle East"]. Tags vary by venue: Polymarket markets carry several, Kalshi typically one. -sourceMetadata: object; // Raw venue-specific metadata not captured by first-class fields (e.g. Kalshi series_ticker / series_title, Polymarket series). Passed through verbatim so downstream consumers can recover anything the unified shape omits. Each venue populates what it has. -sourceExchange: string; // The exchange/venue this event originates from (e.g. 'polymarket', 'kalshi'). Populated by the Router. -} -``` - ---- -### `UnifiedSeries` - -A recurring grouping of events on a venue — the fourth tier above Event -> Market -> Outcome. Examples: Kalshi `KXATPMATCH` (every ATP tennis match), Polymarket `wta` (every WTA match), Opinion's daily `collection`. Series only exists where the venue exposes a recurring-event concept; venues without one return an empty array from `fetchSeries`. - -```typescript -interface UnifiedSeries { -id: string; // Stable venue-native series identifier (e.g. "KXATPMATCH" on Kalshi, "atp" on Polymarket Gamma, numeric Gamma id). -ticker: string; // Venue-native ticker, when distinct from `id`. -slug: string; // Venue-native slug. -title: string; // Human-readable series title (e.g. "ATP Match Winner", "WTA"). -description: string; // Long-form series description. -recurrence: string; // Recurrence cadence the venue reports ('daily', 'weekly', 'annual', ...). -events: UnifiedEvent[]; // Child events. Populated when fetched by id; the list form usually omits this to keep payloads small. -url: string; // Canonical venue URL for the series. -image: string; // Venue-hosted image. -sourceExchange: string; // The exchange this series originates from. Populated by the Router. -sourceMetadata: object; // Raw venue-specific fields not promoted to first-class columns. -} -``` - ---- -### `PriceCandle` - - - -```typescript -interface PriceCandle { -timestamp: number; // Unix timestamp in milliseconds marking the start of the candle. -open: number; // Opening price for the interval (probability between 0.0 and 1.0). -high: number; // Highest price during the interval (probability between 0.0 and 1.0). -low: number; // Lowest price during the interval (probability between 0.0 and 1.0). -close: number; // Closing price for the interval (probability between 0.0 and 1.0). -volume: number; // Trading volume during the interval. -} -``` - ---- -### `OrderBook` - - - -```typescript -interface OrderBook { -bids: OrderLevel[]; // Order book bid levels, sorted by price descending. -asks: OrderLevel[]; // Order book ask levels, sorted by price ascending. -timestamp: number; // Unix timestamp in milliseconds when the snapshot was taken. -datetime: string; // ISO 8601 datetime string of the snapshot (CCXT-compatible). -isNegRisk: boolean; // Whether the venue marks this snapshot as a negative-risk market. -lastTradePrice: number; // Last traded price from venues that include it with the book snapshot. -sourceMetadata: object; // Venue-specific metadata preserved from the raw order book snapshot. -} -``` - ---- -### `OrderLevel` - - - -```typescript -interface OrderLevel { -price: number; // 0.0 to 1.0 (probability) -size: number; // contracts/shares -orderCount: number; // -} -``` - ---- -### `Trade` - - - -```typescript -interface Trade { -id: string; // The unique identifier for this trade. -timestamp: number; // Unix timestamp in milliseconds when the trade executed. -price: number; // Probability between 0.0 and 1.0. -amount: number; // Size of the trade in contracts/shares. -side: string; // Trade side from the taker's perspective. -outcomeId: string; // The outcome this trade is for (if known). -} -``` - ---- -### `UserTrade` - - - -```typescript -interface UserTrade { -id: string; // The unique identifier for this trade. -timestamp: number; // Unix timestamp in milliseconds when the trade executed. -price: number; // Probability between 0.0 and 1.0. -amount: number; // Size of the trade in contracts/shares. -side: string; // Trade side from the taker's perspective. -outcomeId: string; // The outcome this trade is for (if known). -orderId: string; // The order that produced this trade, if known. -marketId: string; // The market this trade belongs to, when the venue exposes it (e.g. derivable from the fill's coin/asset). -fee: number; // Trading fee paid by the user for this fill, when the venue exposes it. -txHash: string; // Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. -chain: string; // Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. -blockNumber: number; // Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. -} -``` - ---- -### `Order` - - - -```typescript -interface Order { -id: string; // The exchange-assigned order identifier. -marketId: string; // The market this order was placed on. -outcomeId: string; // The outcome this order was placed on. -side: string; // Order side: buy or sell. -type: string; // Order type: market (execute immediately) or limit (resting at a price). -price: number; // For limit orders -amount: number; // Size in contracts/shares -status: string; // Lifecycle status of the order. -filled: number; // Amount filled (USDC cost for buys, shares for sells) -filledShares: number; // Amount filled in shares/contracts (if different from USDC-denominated `filled`). -remaining: number; // Amount remaining -timestamp: number; // Unix timestamp in milliseconds when the order was created. -fee: number; // Fee paid for this order, if known. -feeRateBps: number; // Fee rate in basis points applied to this order (e.g. 100 = 1%). -txHash: string; // Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. -chain: string; // Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. -blockNumber: number; // Populated in hosted mode after on-chain settlement; null for local-mode and for non-on-chain venues. -} -``` - ---- -### `Position` - -A current position in a market. In hosted mode, `outcomeLabel`, `entryPrice`, `currentPrice` and `unrealizedPnL` may be null when the server cannot derive them (e.g. `with_mtm=false` or no fill history). Venue-direct callers continue to populate every field. - -```typescript -interface Position { -marketId: string; // The market this position is held in. -outcomeId: string; // The outcome this position is held in. -outcomeLabel: string; // Human-readable label for the outcome held. Optional in hosted mode. -size: number; // Positive for long, negative for short -entryPrice: number; // Average entry price for the position (probability between 0.0 and 1.0). Optional in hosted mode when no fill history is available. -currentPrice: number; // Current mark price for the position (probability between 0.0 and 1.0). Optional in hosted mode when mark-to-market data is unavailable. -currentValue: number; // Current market value of the position (size * currentPrice). Null when currentPrice is unavailable. -unrealizedPnL: number; // Unrealized profit or loss at the current price (USD). Optional in hosted mode when mark-to-market data is unavailable. -realizedPnL: number; // Realized profit or loss booked so far (USD). -txHash: string; // Populated in hosted mode after on-chain settlement (from the last fill); null for local-mode and for non-on-chain venues. -chain: string; // Populated in hosted mode after on-chain settlement (from the last fill); null for local-mode and for non-on-chain venues. -blockNumber: number; // Populated in hosted mode after on-chain settlement (from the last fill); null for local-mode and for non-on-chain venues. -} -``` - ---- -### `Balance` - - - -```typescript -interface Balance { -currency: string; // e.g., 'USDC' -total: number; // Total balance including funds locked in open orders. -available: number; // Balance available to trade (excludes locked funds). -locked: number; // In open orders -venue: string; // Hosted-mode: which venue this balance belongs to in a multi-venue response. Null when the balance is venue-agnostic. -} -``` - ---- -### `ExecutionPriceResult` - - - -```typescript -interface ExecutionPriceResult { -price: number; // -filledAmount: number; // -fullyFilled: boolean; // -} -``` - ---- -### `PaginatedMarketsResult` - -Shape returned by fetchMarketsPaginated - -```typescript -interface PaginatedMarketsResult { -data: UnifiedMarket[]; // The page of unified markets -total: number; // Total number of markets in the snapshot -nextCursor: string; // Cursor to pass to the next call, or undefined if this is the last page -} -``` - ---- -### `PaginatedEventsResult` - -Shape returned by fetchEventsPaginated - -```typescript -interface PaginatedEventsResult { -data: UnifiedEvent[]; // The page of unified events -total: number; // Total number of events in the snapshot -nextCursor: string; // Cursor to pass to the next call, or undefined if this is the last page -} -``` - ---- -### `BuiltOrder` - - - -```typescript -interface BuiltOrder { -exchange: string; // The exchange name this order was built for. -params: any; // The original params used to build this order. -signedOrder: object; // For CLOB exchanges (Polymarket): the EIP-712 signed order ready to POST to the exchange's order endpoint. -tx: object; // For on-chain AMM exchanges: the EVM transaction payload. Reserved for future exchanges; no current exchange populates this. -raw: any; // The raw, exchange-native payload. Always present. -expiry: number; // Unix epoch (ms) when this built order expires server-side. Submitting after expiry returns BUILT_ORDER_EXPIRED. -} -``` - ---- -### `MarketFilterCriteria` - - - -```typescript -interface MarketFilterCriteria { -text: string; // -searchIn: string[]; // Default: ['title'] -volume24h: object; // -volume: object; // Filter by total (lifetime) volume range -liquidity: object; // Filter by current liquidity range -openInterest: object; // Filter by open interest range -resolutionDate: object; // -category: string; // Filter by category. Common values: "Sports", "Politics", "Crypto", "Bitcoin", "Soccer", "Economic Policy" (Polymarket) or "Sports", "Mentions" (Kalshi). -tags: string[]; // Match markets that have ANY of these tags. Examples: ["Crypto", "Crypto Prices"], ["Politics", "Elections"], ["Sports", "FIFA World Cup"]. -price: object; // -priceChange24h: object; // -} -``` - ---- -### `EventFilterCriteria` - - - -```typescript -interface EventFilterCriteria { -text: string; // -searchIn: string[]; // Default: ['title'] -category: string; // Filter by category. Common values: "Sports", "Politics", "Crypto", "Bitcoin", "Soccer", "Economic Policy" (Polymarket) or "Sports", "Mentions" (Kalshi). -tags: string[]; // Match events that have ANY of these tags. Examples: ["Crypto"], ["Politics", "Geopolitics", "Middle East"], ["Sports", "FIFA World Cup"]. -marketCount: object; // -totalVolume: object; // Sum of market volumes -} -``` - ---- -### `MatchResult` - - - -```typescript -interface MatchResult { -market: UnifiedMarket; // -sourceMarket: any; // The source market this was matched against. Present in browse mode (no marketId), absent in lookup mode. -relation: string; // -confidence: number; // -reasoning: string; // -bestBid: number; // -bestAsk: number; // -} -``` - ---- -### `EventMatchResult` - - - -```typescript -interface EventMatchResult { -event: UnifiedEvent; // -marketMatches: MatchResult[]; // -} -``` - ---- -### `PriceComparison` - - - -```typescript -interface PriceComparison { -market: UnifiedMarket; // -relation: string; // -confidence: number; // -reasoning: string; // -bestBid: number; // -bestAsk: number; // -venue: string; // -} -``` - ---- -### `ArbitrageOpportunity` - - - -```typescript -interface ArbitrageOpportunity { -marketA: UnifiedMarket; // -marketB: UnifiedMarket; // -spread: number; // -buyVenue: string; // -sellVenue: string; // -buyPrice: number; // -sellPrice: number; // -relation: string; // The set-theoretic relation between the two markets (e.g. identity, subset). -confidence: number; // Match confidence score (0.0 to 1.0). -} -``` - ---- -### `MatchedMarketPair` - - - -```typescript -interface MatchedMarketPair { -marketA: UnifiedMarket; // -marketB: UnifiedMarket; // -priceDifference: number; // -venueA: string; // -venueB: string; // -priceA: number; // -priceB: number; // -relation: string; // The set-theoretic relation between the two markets (e.g. identity, subset). -confidence: number; // Match confidence score (0.0 to 1.0). -reasoning: string; // Why the two markets were matched. -} -``` - ---- -### `ExchangeCredentials` - -Optional authentication credentials for exchange operations. - -```typescript -interface ExchangeCredentials { -apiKey: string; // -apiSecret: string; // Standard API secret for HMAC-authenticated exchanges -passphrase: string; // Standard API passphrase for HMAC-authenticated exchanges -apiToken: string; // Metaculus: `Authorization: Token ` for higher rate limits -privateKey: string; // Required for Polymarket L1 auth -signatureType: any; // 0 = EOA, 1 = Poly Proxy, 2 = Gnosis Safe (Can also use 'eoa', 'polyproxy', 'gnosis_safe') -funderAddress: string; // The address funding the trades (defaults to signer address) -walletAddress: string; // -baseUrl: string; // -} -``` - ---- -### `FeedTicker` - -CCXT-compatible ticker with last trade price and metadata. - -```typescript -interface FeedTicker { -symbol: string; // Trading pair symbol (e.g. BTC/USD) -info: any; // Raw provider-specific data -timestamp: number; // Unix timestamp in milliseconds -datetime: string; // -high: number; // -low: number; // -bid: number; // -bidVolume: number; // -ask: number; // -askVolume: number; // -vwap: number; // -open: number; // -close: number; // -last: number; // Last trade price -previousClose: number; // -change: number; // -percentage: number; // -average: number; // -quoteVolume: number; // -baseVolume: number; // -indexPrice: number; // -markPrice: number; // -} -``` - ---- -### `FeedMarket` - -CCXT-compatible market descriptor for a data feed. - -```typescript -interface FeedMarket { -id: string; // -symbol: string; // -base: string; // -quote: string; // -active: boolean; // -type: string; // -info: any; // Provider-specific metadata -} -``` - ---- -### `FeedOracleRound` - -Chainlink oracle price round. - -```typescript -interface FeedOracleRound { -feed: string; // Price feed pair (e.g. BTC/USD) -roundId: string; // -answer: number; // Oracle price -startedAt: number; // -updatedAt: number; // -answeredInRound: string; // -decimals: number; // -description: string; // -} -``` - ---- - -## Filter Parameters - -### `BaseRequest` - -Base request structure with optional credentials - -```typescript -interface BaseRequest { -credentials?: ExchangeCredentials; // -} -``` - ---- -### `MarketFilterParams` - - - -```typescript -interface MarketFilterParams { -limit?: number; // Maximum number of results to return -offset?: number; // Pagination offset — number of results to skip -sort?: string; // Sort order for results -status?: string; // Filter by market status (default: 'active', 'inactive' and 'closed' are interchangeable) -searchIn?: string; // Where to search (default: 'title') -query?: string; // For keyword search -slug?: string; // For slug/ticker lookup -marketId?: string; // Direct lookup by market ID -outcomeId?: string; // Reverse lookup -- find market containing this outcome -eventId?: string; // Find markets belonging to an event -page?: number; // For pagination (used by Limitless) -similarityThreshold?: number; // For semantic search (used by Limitless) -sourceExchange?: string; // Filter by source venue (e.g. 'polymarket', 'kalshi', 'myriad'). `exchange` is an alias. -exchange?: string; // Alias for `sourceExchange`. -} -``` - ---- -### `EventFetchParams` - - - -```typescript -interface EventFetchParams { -query?: string; // For keyword search -limit?: number; // Maximum number of results to return -cursor?: string; // Opaque venue pagination cursor, where supported. -offset?: number; // Pagination offset — number of results to skip -sort?: string; // Sort order for results -status?: string; // Filter by event status (default: 'active', 'inactive' and 'closed' are interchangeable) -searchIn?: string; // Where to search (default: 'title') -eventId?: string; // Direct lookup by event ID -slug?: string; // Lookup by event slug -series?: string; // Filter events by their parent series. Accepts the venue-native series id / ticker / slug (e.g. Kalshi `"KXATPMATCH"`, Polymarket `"wta"`). Passed through to the vendor where supported, otherwise applied to `sourceMetadata` after fetch. -filter?: any; // Optional client-side filter applied after fetching -category?: string; // Filter by category. Each event belongs to a venue-assigned category such as "Sports", "Politics", "Crypto", "Bitcoin", "Soccer", "Economic Policy" (Polymarket) or "Sports", "Mentions" (Kalshi). -tags?: string[]; // Filter by tags. Returns events matching ANY of the provided tags. Tags are more specific than categories -- for example a "Politics" event might carry tags ["Politics", "Geopolitics", "Middle East", "Iran"]. Common tags include "Crypto", "Elections", "Fed Rates", "FIFA World Cup", "Trump". -sourceExchange?: string; // Filter by source venue (e.g. 'polymarket', 'kalshi', 'myriad'). `exchange` is an alias. -exchange?: string; // Alias for `sourceExchange`. -} -``` - ---- -### `HistoryFilterParams` - -Deprecated - use OHLCVParams or TradesParams instead. Resolution is optional for backward compatibility. - -```typescript -interface HistoryFilterParams { -resolution?: string; // Optional for backward compatibility -start?: string; // Start of the time range -end?: string; // End of the time range -limit?: number; // Maximum number of results to return -} -``` - ---- -### `OHLCVParams` - - - -```typescript -interface OHLCVParams { -resolution: string; // Required for candle aggregation -start?: string; // Start of the time range -end?: string; // End of the time range -limit?: number; // Maximum number of results to return -} -``` - ---- -### `FetchOrderBookParams` - - - -```typescript -interface FetchOrderBookParams { -side?: string; // Outcome side: 'yes' or 'no'. Required for exchanges like Limitless where the API returns a single orderbook per market. -outcome?: string; // Outcome alias: 'yes' or 'no', or an outcome token ID. When set, the first argument is treated as a market ID and this value selects which outcome's order book to fetch. Accepts the literal strings 'yes'/'no' (resolved via a market lookup) or a raw outcome token ID. -since?: number; // Unix timestamp (ms) — fetch a historical snapshot at or before this time, or the start of a range when combined with `until` (hosted API only). -until?: number; // Unix timestamp (ms) — end of a historical range. When combined with `since`, returns an array of reconstructed L2 OrderBook snapshots between `since` and `until` (hosted API only). -} -``` - ---- -### `TradesParams` - - - -```typescript -interface TradesParams { -start?: string; // Start of the time range -end?: string; // End of the time range -limit?: number; // Maximum number of results to return (max {@link MAX_TRADES_LIMIT}) -} -``` - ---- -### `CreateOrderParams` - - - -```typescript -interface CreateOrderParams { -marketId: string; // The market to trade on. -outcomeId: string; // The outcome to trade. -side: string; // Order side: buy or sell. -type: string; // Order type: market (execute immediately) or limit (resting at a price). -amount: number; // Size of the order in contracts/shares. -price?: number; // Required for limit orders -denom?: string; // Hosted mode: amount unit. -slippage_pct?: number; // Hosted mode: maximum market-order slippage percentage. -fee?: number; // Optional fee rate (e.g., 1000 for 0.1%) -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 -} -``` - ---- -### `MyTradesParams` - - - -```typescript -interface MyTradesParams { -outcomeId?: string; // filter to specific outcome/ticker -marketId?: string; // filter to specific market -since?: string; // Only return records after this date -until?: string; // Only return records before this date -limit?: number; // Maximum number of results to return -cursor?: string; // for Kalshi cursor pagination -} -``` - ---- -### `OrderHistoryParams` - - - -```typescript -interface OrderHistoryParams { -marketId?: string; // required for Limitless (slug) -since?: string; // Only return records after this date -until?: string; // Only return records before this date -limit?: number; // Maximum number of results to return -cursor?: string; // Opaque pagination cursor from a previous response -} -``` - ---- -### `FetchMarketMatchesParams` - - - -```typescript -interface FetchMarketMatchesParams { -query?: string; // Keyword search across matched market titles. -category?: string; // Filter matches by category. -market?: any; // Pass a UnifiedMarket directly instead of marketId/slug/url. -marketId?: string; // Lookup a specific market by ID. Omit for browse mode. -slug?: string; // -url?: string; // -relation?: string; // -minConfidence?: number; // -limit?: number; // -includePrices?: boolean; // -minDifference?: number; // Minimum price difference between venues. Browse mode only. -sort?: string; // Sort order. Browse mode only. -} -``` - ---- -### `FetchEventMatchesParams` - - - -```typescript -interface FetchEventMatchesParams { -query?: string; // Keyword search across matched event titles. -category?: string; // Filter matches by category. -event?: any; // Pass a UnifiedEvent directly instead of eventId/slug. -eventId?: string; // Lookup a specific event by ID. Omit for browse mode. -slug?: string; // -relation?: string; // -minConfidence?: number; // -limit?: number; // -includePrices?: boolean; // -} -``` - ---- -### `FetchArbitrageParams` - - - -```typescript -interface FetchArbitrageParams { -minSpread?: number; // -category?: string; // -limit?: number; // -relations?: string[]; // Comma-separated relation types to include (default: 'identity'). -} -``` - ---- -### `FetchMatchedMarketsParams` - - - -```typescript -interface FetchMatchedMarketsParams { -minDifference?: number; // -category?: string; // -limit?: number; // -relations?: string[]; // Comma-separated relation types to include (default: 'identity'). -} -``` - ---- - -### `CreateOrderInput` - -`createOrder` and `buildOrder` accept either explicit `marketId` / `outcomeId` -fields or an outcome object returned by `fetchMarkets`. - -```typescript -type CreateOrderInput = - | (CreateOrderParams & { outcome?: never }) - | (Omit & { - outcome: MarketOutcome; - marketId?: never; - outcomeId?: never; - }); -``` - ---- - -## Low-Level API Reference - -Advanced: call exchange-specific REST endpoints directly via `exchange.callApi(name, params)`. - -```typescript -// Example -const result = await exchange.callApi('operationName', { param: 'value' }); -``` - -### Polymarket - -| `callApi()` name | Method | Path | Summary | Auth | -|-----------------|--------|------|---------|------| -| `getGammaStatus` | `GET` | `/status` | Gamma API Health check | Public | -| `listTeams` | `GET` | `/teams` | List teams | Public | -| `getSportsMetadata` | `GET` | `/sports` | Get sports metadata information | Public | -| `getSportsMarketTypes` | `GET` | `/sports/market-types` | Get valid sports market types | Public | -| `listTags` | `GET` | `/tags` | List tags | Public | -| `getTag` | `GET` | `/tags/{id}` | Get tag by id | Public | -| `getRelatedTagsById` | `GET` | `/tags/{id}/related-tags` | Get related tags (relationships) by tag id | Public | -| `getRelatedTagsBySlug` | `GET` | `/tags/slug/{slug}/related-tags` | Get related tags (relationships) by tag slug | Public | -| `getTagsRelatedToATagById` | `GET` | `/tags/{id}/related-tags/tags` | Get tags related to a tag id | Public | -| `getTagsRelatedToATagBySlug` | `GET` | `/tags/slug/{slug}/related-tags/tags` | Get tags related to a tag slug | Public | -| `listEvents` | `GET` | `/events` | List events | Public | -| `getEvent` | `GET` | `/events/{id}` | Get event by id | Public | -| `getEventTags` | `GET` | `/events/{id}/tags` | Get event tags | Public | -| `getEventBySlug` | `GET` | `/events/slug/{slug}` | Get event by slug | Public | -| `listMarkets` | `GET` | `/markets` | List markets | Public | -| `getMarket` | `GET` | `/markets/{id}` | Get market by id | Public | -| `getMarketTags` | `GET` | `/markets/{id}/tags` | Get market tags by id | Public | -| `getMarketBySlug` | `GET` | `/markets/slug/{slug}` | Get market by slug | Public | -| `listSeries` | `GET` | `/series` | List series | Public | -| `getSeries` | `GET` | `/series/{id}` | Get series by id | Public | -| `listComments` | `GET` | `/comments` | List comments | Public | -| `getCommentsById` | `GET` | `/comments/{id}` | Get comments by comment id | Public | -| `getPublicProfile` | `GET` | `/public-profile` | Get public profile by wallet address | Public | -| `publicSearch` | `GET` | `/public-search` | Search markets, events, and profiles | Public | -| `getBook` | `GET` | `/book` | Get order book summary | Public | -| `postBooks` | `POST` | `/books` | Get multiple order books summaries | Public | -| `getPrice` | `GET` | `/price` | Get market price | Public | -| `getPrices` | `GET` | `/prices` | Get multiple market prices | Public | -| `postPrices` | `POST` | `/prices` | Get multiple market prices by request | Public | -| `getMidpoint` | `GET` | `/midpoint` | Get midpoint price | Public | -| `postSpreads` | `POST` | `/spreads` | Get bid-ask spreads | Public | -| `getPricesHistory` | `GET` | `/prices-history` | Get price history for a traded token | Public | -| `getMarketsByToken` | `GET` | `/markets-by-token/{token_id}` | Get market by token | Public | -| `postAuthApiKey` | `POST` | `/auth/api-key` | Create API Key | Required | -| `getAuthDeriveApiKey` | `GET` | `/auth/derive-api-key` | Derive API Key | Required | -| `postOrder` | `POST` | `/order` | Place Single Order | Required | -| `deleteOrder` | `DELETE` | `/order` | Cancel Single Order | Required | -| `postOrders` | `POST` | `/orders` | Place Multiple Orders (Batch) | Required | -| `deleteOrders` | `DELETE` | `/orders` | Cancel Multiple Orders | Required | -| `deleteCancelAll` | `DELETE` | `/cancel-all` | Cancel All Orders | Required | -| `deleteCancelMarketOrders` | `DELETE` | `/cancel-market-orders` | Cancel Market Orders | Required | -| `postV1Heartbeats` | `POST` | `/v1/heartbeats` | Refresh authenticated session heartbeat | Required | -| `getDataOrder` | `GET` | `/data/order/{id}` | Get Order | Required | -| `getDataOrders` | `GET` | `/data/orders` | Get Active Orders | Required | -| `getDataTrades` | `GET` | `/data/trades` | Get Trades | Required | -| `getOrderScoring` | `GET` | `/order-scoring` | Check Order Reward Scoring | Required | -| `postOrdersScoring` | `POST` | `/orders-scoring` | Check Multiple Orders Scoring | Required | -| `updateBalanceAllowance` | `GET` | `/balance-allowance/update` | Update balance and allowance cache | Required | -| `getGeoblock` | `GET` | `/geoblock` | Check Geoblock Status | Public | -| `getDataApiHealth` | `GET` | `/` | Data API Health check | Public | -| `getPositions` | `GET` | `/positions` | Get current positions for a user | Public | -| `getV1AccountingSnapshot` | `GET` | `/v1/accounting/snapshot` | Download an accounting snapshot (ZIP of CSVs) | Public | -| `getTraded` | `GET` | `/traded` | Get total markets a user has traded | Public | -| `getOi` | `GET` | `/oi` | Get open interest | Public | -| `getLiveVolume` | `GET` | `/live-volume` | Get live volume for an event | Public | -| `getTrades` | `GET` | `/trades` | Get trades for a user or markets | Public | -| `getActivity` | `GET` | `/activity` | Get user activity | Public | -| `getHolders` | `GET` | `/holders` | Get top holders for markets | Public | -| `getValue` | `GET` | `/value` | Get total value of a user's positions | Public | -| `getClosedPositions` | `GET` | `/closed-positions` | Get closed positions for a user | Public | -| `getV1MarketPositions` | `GET` | `/v1/market-positions` | Get positions for a market | Public | -| `getV1Leaderboard` | `GET` | `/v1/leaderboard` | Get trader leaderboard rankings | Public | -| `getV1BuildersLeaderboard` | `GET` | `/v1/builders/leaderboard` | Get aggregated builder leaderboard | Public | - -#### Endpoint Details - -##### `getGammaStatus` - -**GET** `/status` - -Gamma API Health check - - ---- -##### `listTeams` - -**GET** `/teams` - -List teams - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `league` (query, array) -- `name` (query, array) -- `abbreviation` (query, array) - ---- -##### `getSportsMetadata` - -**GET** `/sports` - -Get sports metadata information - - ---- -##### `getSportsMarketTypes` - -**GET** `/sports/market-types` - -Get valid sports market types - - ---- -##### `listTags` - -**GET** `/tags` - -List tags - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `include_template` (query, boolean) -- `is_carousel` (query, boolean) - ---- -##### `getTag` - -**GET** `/tags/{id}` - -Get tag by id - -**Parameters:** -- `` (, string) -- `include_template` (query, boolean) - ---- -##### `getRelatedTagsById` - -**GET** `/tags/{id}/related-tags` - -Get related tags (relationships) by tag id - -**Parameters:** -- `` (, string) -- `omit_empty` (query, boolean) -- `status` (query, string) — enum: `active,closed,all` - ---- -##### `getRelatedTagsBySlug` - -**GET** `/tags/slug/{slug}/related-tags` - -Get related tags (relationships) by tag slug - -**Parameters:** -- `` (, string) -- `omit_empty` (query, boolean) -- `status` (query, string) — enum: `active,closed,all` - ---- -##### `getTagsRelatedToATagById` - -**GET** `/tags/{id}/related-tags/tags` - -Get tags related to a tag id - -**Parameters:** -- `` (, string) -- `omit_empty` (query, boolean) -- `status` (query, string) — enum: `active,closed,all` - ---- -##### `getTagsRelatedToATagBySlug` - -**GET** `/tags/slug/{slug}/related-tags/tags` - -Get tags related to a tag slug - -**Parameters:** -- `` (, string) -- `omit_empty` (query, boolean) -- `status` (query, string) — enum: `active,closed,all` - ---- -##### `listEvents` - -**GET** `/events` - -List events - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `id` (query, array) -- `tag_id` (query, integer) -- `exclude_tag_id` (query, array) -- `slug` (query, array) -- `tag_slug` (query, string) -- `related_tags` (query, boolean) -- `active` (query, boolean) -- `archived` (query, boolean) -- `featured` (query, boolean) -- `cyom` (query, boolean) -- `include_chat` (query, boolean) -- `include_template` (query, boolean) -- `recurrence` (query, string) -- `closed` (query, boolean) -- `liquidity_min` (query, number) -- `liquidity_max` (query, number) -- `volume_min` (query, number) -- `volume_max` (query, number) -- `start_date_min` (query, string) -- `start_date_max` (query, string) -- `end_date_min` (query, string) -- `end_date_max` (query, string) - ---- -##### `getEvent` - -**GET** `/events/{id}` - -Get event by id - -**Parameters:** -- `` (, string) -- `include_chat` (query, boolean) -- `include_template` (query, boolean) - ---- -##### `getEventTags` - -**GET** `/events/{id}/tags` - -Get event tags - -**Parameters:** -- `` (, string) - ---- -##### `getEventBySlug` - -**GET** `/events/slug/{slug}` - -Get event by slug - -**Parameters:** -- `` (, string) -- `include_chat` (query, boolean) -- `include_template` (query, boolean) - ---- -##### `listMarkets` - -**GET** `/markets` - -List markets - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `id` (query, array) -- `slug` (query, array) -- `clob_token_ids` (query, array) -- `condition_ids` (query, array) -- `market_maker_address` (query, array) -- `liquidity_num_min` (query, number) -- `liquidity_num_max` (query, number) -- `volume_num_min` (query, number) -- `volume_num_max` (query, number) -- `start_date_min` (query, string) -- `start_date_max` (query, string) -- `end_date_min` (query, string) -- `end_date_max` (query, string) -- `tag_id` (query, integer) -- `related_tags` (query, boolean) -- `cyom` (query, boolean) -- `uma_resolution_status` (query, string) -- `game_id` (query, string) -- `sports_market_types` (query, array) -- `rewards_min_size` (query, number) -- `question_ids` (query, array) -- `include_tag` (query, boolean) -- `closed` (query, boolean) - ---- -##### `getMarket` - -**GET** `/markets/{id}` - -Get market by id - -**Parameters:** -- `` (, string) -- `include_tag` (query, boolean) - ---- -##### `getMarketTags` - -**GET** `/markets/{id}/tags` - -Get market tags by id - -**Parameters:** -- `` (, string) - ---- -##### `getMarketBySlug` - -**GET** `/markets/slug/{slug}` - -Get market by slug - -**Parameters:** -- `` (, string) -- `include_tag` (query, boolean) - ---- -##### `listSeries` - -**GET** `/series` - -List series - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `slug` (query, array) -- `categories_ids` (query, array) -- `categories_labels` (query, array) -- `closed` (query, boolean) -- `include_chat` (query, boolean) -- `recurrence` (query, string) - ---- -##### `getSeries` - -**GET** `/series/{id}` - -Get series by id - -**Parameters:** -- `` (, string) -- `include_chat` (query, boolean) - ---- -##### `listComments` - -**GET** `/comments` - -List comments - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `parent_entity_type` (query, string) — enum: `Event,Series,market` -- `parent_entity_id` (query, integer) -- `get_positions` (query, boolean) -- `holders_only` (query, boolean) - ---- -##### `getCommentsById` - -**GET** `/comments/{id}` - -Get comments by comment id - -**Parameters:** -- `id` (path, integer) **required** -- `get_positions` (query, boolean) - ---- -##### `getPublicProfile` - -**GET** `/public-profile` - -Get public profile by wallet address - -**Parameters:** -- `address` (query, string) **required** — The wallet address (proxy wallet or user address) - ---- -##### `publicSearch` - -**GET** `/public-search` - -Search markets, events, and profiles - -**Parameters:** -- `q` (query, string) **required** -- `cache` (query, boolean) -- `events_status` (query, string) -- `limit_per_type` (query, integer) -- `page` (query, integer) -- `events_tag` (query, array) -- `keep_closed_markets` (query, integer) -- `sort` (query, string) -- `ascending` (query, boolean) -- `search_tags` (query, boolean) -- `search_profiles` (query, boolean) -- `recurrence` (query, string) -- `exclude_tag_id` (query, array) -- `optimized` (query, boolean) - ---- -##### `getBook` - -**GET** `/book` - -Get order book summary - -**Parameters:** -- `token_id` (query, string) **required** - ---- -##### `postBooks` - -**POST** `/books` - -Get multiple order books summaries - - ---- -##### `getPrice` - -**GET** `/price` - -Get market price - -**Parameters:** -- `token_id` (query, string) **required** -- `side` (query, string) **required** — enum: `BUY,SELL` - ---- -##### `getPrices` - -**GET** `/prices` - -Get multiple market prices - - ---- -##### `postPrices` - -**POST** `/prices` - -Get multiple market prices by request - - ---- -##### `getMidpoint` - -**GET** `/midpoint` - -Get midpoint price - -**Parameters:** -- `token_id` (query, string) **required** - ---- -##### `postSpreads` - -**POST** `/spreads` - -Get bid-ask spreads - - ---- -##### `getPricesHistory` - -**GET** `/prices-history` - -Get price history for a traded token - -**Parameters:** -- `market` (query, string) **required** -- `startTs` (query, number) -- `endTs` (query, number) -- `interval` (query, string) — enum: `1m,1w,1d,6h,1h,max` -- `fidelity` (query, number) - ---- -##### `getMarketsByToken` - -**GET** `/markets-by-token/{token_id}` - -Get market by token - -**Parameters:** -- `token_id` (path, string) **required** - ---- -##### `postAuthApiKey` - -**POST** `/auth/api-key` - -Create API Key *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `getAuthDeriveApiKey` - -**GET** `/auth/derive-api-key` - -Derive API Key *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `postOrder` - -**POST** `/order` - -Place Single Order *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `deleteOrder` - -**DELETE** `/order` - -Cancel Single Order *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `postOrders` - -**POST** `/orders` - -Place Multiple Orders (Batch) *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `deleteOrders` - -**DELETE** `/orders` - -Cancel Multiple Orders *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `deleteCancelAll` - -**DELETE** `/cancel-all` - -Cancel All Orders *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `deleteCancelMarketOrders` - -**DELETE** `/cancel-market-orders` - -Cancel Market Orders *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `postV1Heartbeats` - -**POST** `/v1/heartbeats` - -Refresh authenticated session heartbeat *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `getDataOrder` - -**GET** `/data/order/{id}` - -Get Order *(Auth required)* - -**Parameters:** -- `` (, string) -- `id` (path, string) **required** - ---- -##### `getDataOrders` - -**GET** `/data/orders` - -Get Active Orders *(Auth required)* - -**Parameters:** -- `` (, string) -- `id` (query, string) -- `market` (query, string) -- `asset_id` (query, string) -- `next_cursor` (query, string) — Cursor for keyset pagination - ---- -##### `getDataTrades` - -**GET** `/data/trades` - -Get Trades *(Auth required)* - -**Parameters:** -- `` (, string) -- `id` (query, string) -- `market` (query, string) -- `maker` (query, string) -- `taker` (query, string) -- `before` (query, string) -- `after` (query, string) - ---- -##### `getOrderScoring` - -**GET** `/order-scoring` - -Check Order Reward Scoring *(Auth required)* - -**Parameters:** -- `` (, string) -- `orderId` (query, string) **required** - ---- -##### `postOrdersScoring` - -**POST** `/orders-scoring` - -Check Multiple Orders Scoring *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `updateBalanceAllowance` - -**GET** `/balance-allowance/update` - -Update balance and allowance cache *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `getGeoblock` - -**GET** `/geoblock` - -Check Geoblock Status - - ---- -##### `getDataApiHealth` - -**GET** `/` - -Data API Health check - - ---- -##### `getPositions` - -**GET** `/positions` - -Get current positions for a user - -**Parameters:** -- `user` (query, string) **required** — User address (required) -- `market` (query, array) — Comma-separated list of condition IDs. Mutually exclusive with eventId. -- `eventId` (query, array) — Comma-separated list of event IDs. Mutually exclusive with market. -- `sizeThreshold` (query, number) -- `redeemable` (query, boolean) -- `mergeable` (query, boolean) -- `limit` (query, integer) -- `offset` (query, integer) -- `sortBy` (query, string) — enum: `CURRENT,INITIAL,TOKENS,CASHPNL,PERCENTPNL,TITLE,RESOLVING,PRICE,AVGPRICE` -- `sortDirection` (query, string) — enum: `ASC,DESC` -- `title` (query, string) - ---- -##### `getV1AccountingSnapshot` - -**GET** `/v1/accounting/snapshot` - -Download an accounting snapshot (ZIP of CSVs) - -**Parameters:** -- `user` (query, string) **required** — User address (0x-prefixed) - ---- -##### `getTraded` - -**GET** `/traded` - -Get total markets a user has traded - -**Parameters:** -- `user` (query, string) **required** - ---- -##### `getOi` - -**GET** `/oi` - -Get open interest - -**Parameters:** -- `market` (query, array) - ---- -##### `getLiveVolume` - -**GET** `/live-volume` - -Get live volume for an event - -**Parameters:** -- `id` (query, integer) **required** - ---- -##### `getTrades` - -**GET** `/trades` - -Get trades for a user or markets - -**Parameters:** -- `limit` (query, integer) -- `offset` (query, integer) -- `takerOnly` (query, boolean) -- `filterType` (query, string) — Must be provided together with filterAmount. — enum: `CASH,TOKENS` -- `filterAmount` (query, number) — Must be provided together with filterType. -- `market` (query, array) — Comma-separated list of condition IDs. Mutually exclusive with eventId. -- `eventId` (query, array) — Comma-separated list of event IDs. Mutually exclusive with market. -- `user` (query, string) -- `side` (query, string) — enum: `BUY,SELL` - ---- -##### `getActivity` - -**GET** `/activity` - -Get user activity - -**Parameters:** -- `limit` (query, integer) -- `offset` (query, integer) -- `user` (query, string) **required** -- `market` (query, array) — Comma-separated list of condition IDs. Mutually exclusive with eventId. -- `eventId` (query, array) — Comma-separated list of event IDs. Mutually exclusive with market. -- `type` (query, array) -- `start` (query, integer) -- `end` (query, integer) -- `sortBy` (query, string) — enum: `TIMESTAMP,TOKENS,CASH` -- `sortDirection` (query, string) — enum: `ASC,DESC` -- `side` (query, string) — enum: `BUY,SELL` - ---- -##### `getHolders` - -**GET** `/holders` - -Get top holders for markets - -**Parameters:** -- `limit` (query, integer) — Maximum number of holders to return per token. Capped at 20. -- `market` (query, array) **required** — Comma-separated list of condition IDs. -- `minBalance` (query, integer) - ---- -##### `getValue` - -**GET** `/value` - -Get total value of a user's positions - -**Parameters:** -- `user` (query, string) **required** -- `market` (query, array) - ---- -##### `getClosedPositions` - -**GET** `/closed-positions` - -Get closed positions for a user - -**Parameters:** -- `user` (query, string) **required** — The address of the user in question -- `market` (query, array) — The conditionId of the market in question. Supports multiple csv separated values. Cannot be used with the eventId param. -- `title` (query, string) — Filter by market title -- `eventId` (query, array) — The event id of the event in question. Supports multiple csv separated values. Returns positions for all markets for those event ids. Cannot be used with the market param. -- `limit` (query, integer) — The max number of positions to return -- `offset` (query, integer) — The starting index for pagination -- `sortBy` (query, string) — The sort criteria — enum: `REALIZEDPNL,TITLE,PRICE,AVGPRICE,TIMESTAMP` -- `sortDirection` (query, string) — The sort direction — enum: `ASC,DESC` - ---- -##### `getV1MarketPositions` - -**GET** `/v1/market-positions` - -Get positions for a market - -**Parameters:** -- `market` (query, string) **required** — The condition ID of the market to query positions for -- `user` (query, string) — Filter to a single user by proxy wallet address -- `status` (query, string) — Filter positions by status. -- `OPEN` — Only positions with size > 0.01 -- `CLOSED` — Only positions with size <= 0.01 -- `ALL` — All positions regardless of size - — enum: `OPEN,CLOSED,ALL` -- `sortBy` (query, string) — Sort positions by: -- `TOKENS` — Position size (number of tokens) -- `CASH_PNL` — Unrealized cash PnL -- `REALIZED_PNL` — Realized PnL -- `TOTAL_PNL` — Total PnL (cash_pnl + realized_pnl) - — enum: `TOKENS,CASH_PNL,REALIZED_PNL,TOTAL_PNL` -- `sortDirection` (query, string) — enum: `ASC,DESC` -- `limit` (query, integer) — Max number of positions to return per outcome token -- `offset` (query, integer) — Pagination offset per outcome token - ---- -##### `getV1Leaderboard` - -**GET** `/v1/leaderboard` - -Get trader leaderboard rankings - -**Parameters:** -- `category` (query, string) — Market category for the leaderboard — enum: `OVERALL,POLITICS,SPORTS,CRYPTO,CULTURE,MENTIONS,WEATHER,ECONOMICS,TECH,FINANCE` -- `timePeriod` (query, string) — Time period for leaderboard results — enum: `DAY,WEEK,MONTH,ALL` -- `orderBy` (query, string) — Leaderboard ordering criteria — enum: `PNL,VOL` -- `limit` (query, integer) — Max number of leaderboard traders to return -- `offset` (query, integer) — Starting index for pagination -- `user` (query, string) — Limit leaderboard to a single user by address -- `userName` (query, string) — Limit leaderboard to a single username - ---- -##### `getV1BuildersLeaderboard` - -**GET** `/v1/builders/leaderboard` - -Get aggregated builder leaderboard - -**Parameters:** -- `timePeriod` (query, string) — The time period to aggregate results over. - — enum: `DAY,WEEK,MONTH,ALL` -- `limit` (query, string) - ---- -### Kalshi - -| `callApi()` name | Method | Path | Summary | Auth | -|-----------------|--------|------|---------|------| -| `GetHistoricalCutoff` | `GET` | `/historical/cutoff` | Get Historical Cutoff Timestamps | Public | -| `GetMarketCandlesticksHistorical` | `GET` | `/historical/markets/{ticker}/candlesticks` | Get Historical Market Candlesticks | Public | -| `GetFillsHistorical` | `GET` | `/historical/fills` | Get Historical Fills | Required | -| `GetHistoricalOrders` | `GET` | `/historical/orders` | Get Historical Orders | Required | -| `GetHistoricalMarkets` | `GET` | `/historical/markets` | Get Historical Markets | Public | -| `GetHistoricalMarket` | `GET` | `/historical/markets/{ticker}` | Get Historical Market | Public | -| `GetExchangeStatus` | `GET` | `/exchange/status` | Get Exchange Status | Public | -| `GetExchangeAnnouncements` | `GET` | `/exchange/announcements` | Get Exchange Announcements | Public | -| `GetSeriesFeeChanges` | `GET` | `/series/fee_changes` | Get Series Fee Changes | Public | -| `GetExchangeSchedule` | `GET` | `/exchange/schedule` | Get Exchange Schedule | Public | -| `GetUserDataTimestamp` | `GET` | `/exchange/user_data_timestamp` | Get User Data Timestamp | Public | -| `GetOrders` | `GET` | `/portfolio/orders` | Get Orders | Required | -| `CreateOrder` | `POST` | `/portfolio/orders` | Create Order | Required | -| `GetOrder` | `GET` | `/portfolio/orders/{order_id}` | Get Order | Required | -| `CancelOrder` | `DELETE` | `/portfolio/orders/{order_id}` | Cancel Order | Required | -| `BatchCreateOrders` | `POST` | `/portfolio/orders/batched` | Batch Create Orders | Required | -| `BatchCancelOrders` | `DELETE` | `/portfolio/orders/batched` | Batch Cancel Orders | Required | -| `AmendOrder` | `POST` | `/portfolio/orders/{order_id}/amend` | Amend Order | Required | -| `DecreaseOrder` | `POST` | `/portfolio/orders/{order_id}/decrease` | Decrease Order | Required | -| `GetOrderQueuePositions` | `GET` | `/portfolio/orders/queue_positions` | Get Queue Positions for Orders | Required | -| `GetOrderQueuePosition` | `GET` | `/portfolio/orders/{order_id}/queue_position` | Get Order Queue Position | Required | -| `GetOrderGroups` | `GET` | `/portfolio/order_groups` | Get Order Groups | Required | -| `CreateOrderGroup` | `POST` | `/portfolio/order_groups/create` | Create Order Group | Required | -| `GetOrderGroup` | `GET` | `/portfolio/order_groups/{order_group_id}` | Get Order Group | Required | -| `DeleteOrderGroup` | `DELETE` | `/portfolio/order_groups/{order_group_id}` | Delete Order Group | Required | -| `ResetOrderGroup` | `PUT` | `/portfolio/order_groups/{order_group_id}/reset` | Reset Order Group | Required | -| `TriggerOrderGroup` | `PUT` | `/portfolio/order_groups/{order_group_id}/trigger` | Trigger Order Group | Required | -| `UpdateOrderGroupLimit` | `PUT` | `/portfolio/order_groups/{order_group_id}/limit` | Update Order Group Limit | Required | -| `GetBalance` | `GET` | `/portfolio/balance` | Get Balance | Required | -| `CreateSubaccount` | `POST` | `/portfolio/subaccounts` | Create Subaccount | Required | -| `ApplySubaccountTransfer` | `POST` | `/portfolio/subaccounts/transfer` | Transfer Between Subaccounts | Required | -| `GetSubaccountBalances` | `GET` | `/portfolio/subaccounts/balances` | Get All Subaccount Balances | Required | -| `GetSubaccountTransfers` | `GET` | `/portfolio/subaccounts/transfers` | Get Subaccount Transfers | Required | -| `GetPositions` | `GET` | `/portfolio/positions` | Get Positions | Required | -| `GetSettlements` | `GET` | `/portfolio/settlements` | Get Settlements | Required | -| `GetPortfolioRestingOrderTotalValue` | `GET` | `/portfolio/summary/total_resting_order_value` | Get Total Resting Order Value | Required | -| `GetFills` | `GET` | `/portfolio/fills` | Get Fills | Required | -| `GetApiKeys` | `GET` | `/api_keys` | Get API Keys | Required | -| `CreateApiKey` | `POST` | `/api_keys` | Create API Key | Required | -| `GenerateApiKey` | `POST` | `/api_keys/generate` | Generate API Key | Required | -| `DeleteApiKey` | `DELETE` | `/api_keys/{api_key}` | Delete API Key | Required | -| `GetTagsForSeriesCategories` | `GET` | `/search/tags_by_categories` | Get Tags for Series Categories | Public | -| `GetFiltersForSports` | `GET` | `/search/filters_by_sport` | Get Filters for Sports | Public | -| `GetAccountApiLimits` | `GET` | `/account/limits` | Get Account API Limits | Required | -| `GetMarketCandlesticks` | `GET` | `/series/{series_ticker}/markets/{ticker}/candlesticks` | Get Market Candlesticks | Public | -| `GetTrades` | `GET` | `/markets/trades` | Get Trades | Public | -| `GetMarketCandlesticksByEvent` | `GET` | `/series/{series_ticker}/events/{ticker}/candlesticks` | Get Event Candlesticks | Public | -| `GetEvents` | `GET` | `/events` | Get Events | Public | -| `GetMultivariateEvents` | `GET` | `/events/multivariate` | Get Multivariate Events | Public | -| `GetEvent` | `GET` | `/events/{event_ticker}` | Get Event | Public | -| `GetEventMetadata` | `GET` | `/events/{event_ticker}/metadata` | Get Event Metadata | Public | -| `GetEventForecastPercentilesHistory` | `GET` | `/series/{series_ticker}/events/{ticker}/forecast_percentile_history` | Get Event Forecast Percentile History | Required | -| `GetLiveData` | `GET` | `/live_data/{type}/milestone/{milestone_id}` | Get Live Data | Public | -| `GetLiveDatas` | `GET` | `/live_data/batch` | Get Multiple Live Data | Public | -| `GetIncentivePrograms` | `GET` | `/incentive_programs` | Get Incentives | Public | -| `GetFCMOrders` | `GET` | `/fcm/orders` | Get FCM Orders | Required | -| `GetFCMPositions` | `GET` | `/fcm/positions` | Get FCM Positions | Required | -| `GetStructuredTargets` | `GET` | `/structured_targets` | Get Structured Targets | Public | -| `GetStructuredTarget` | `GET` | `/structured_targets/{structured_target_id}` | Get Structured Target | Public | -| `GetMarketOrderbook` | `GET` | `/markets/{ticker}/orderbook` | Get Market Orderbook | Required | -| `GetMarketOrderbooks` | `GET` | `/markets/orderbooks` | Get Multiple Market Orderbooks | Required | -| `GetMilestone` | `GET` | `/milestones/{milestone_id}` | Get Milestone | Public | -| `GetMilestones` | `GET` | `/milestones` | Get Milestones | Public | -| `GetCommunicationsID` | `GET` | `/communications/id` | Get Communications ID | Required | -| `GetRFQs` | `GET` | `/communications/rfqs` | Get RFQs | Required | -| `CreateRFQ` | `POST` | `/communications/rfqs` | Create RFQ | Required | -| `GetRFQ` | `GET` | `/communications/rfqs/{rfq_id}` | Get RFQ | Required | -| `DeleteRFQ` | `DELETE` | `/communications/rfqs/{rfq_id}` | Delete RFQ | Required | -| `GetQuotes` | `GET` | `/communications/quotes` | Get Quotes | Required | -| `CreateQuote` | `POST` | `/communications/quotes` | Create Quote | Required | -| `GetQuote` | `GET` | `/communications/quotes/{quote_id}` | Get Quote | Required | -| `DeleteQuote` | `DELETE` | `/communications/quotes/{quote_id}` | Delete Quote | Required | -| `AcceptQuote` | `PUT` | `/communications/quotes/{quote_id}/accept` | Accept Quote | Required | -| `ConfirmQuote` | `PUT` | `/communications/quotes/{quote_id}/confirm` | Confirm Quote | Required | -| `GetMultivariateEventCollection` | `GET` | `/multivariate_event_collections/{collection_ticker}` | Get Multivariate Event Collection | Public | -| `CreateMarketInMultivariateEventCollection` | `POST` | `/multivariate_event_collections/{collection_ticker}` | Create Market In Multivariate Event Collection | Required | -| `GetMultivariateEventCollections` | `GET` | `/multivariate_event_collections` | Get Multivariate Event Collections | Public | -| `LookupTickersForMarketInMultivariateEventCollection` | `PUT` | `/multivariate_event_collections/{collection_ticker}/lookup` | Lookup Tickers For Market In Multivariate Event Collection | Required | -| `GetMultivariateEventCollectionLookupHistory` | `GET` | `/multivariate_event_collections/{collection_ticker}/lookup` | Get Multivariate Event Collection Lookup History | Public | -| `GetSeries` | `GET` | `/series/{series_ticker}` | Get Series | Public | -| `GetSeriesList` | `GET` | `/series` | Get Series List | Public | -| `GetMarkets` | `GET` | `/markets` | Get Markets | Public | -| `GetMarket` | `GET` | `/markets/{ticker}` | Get Market | Public | -| `BatchGetMarketCandlesticks` | `GET` | `/markets/candlesticks` | Batch Get Market Candlesticks | Public | - -#### Endpoint Details - -##### `GetHistoricalCutoff` - -**GET** `/historical/cutoff` - -Get Historical Cutoff Timestamps - - ---- -##### `GetMarketCandlesticksHistorical` - -**GET** `/historical/markets/{ticker}/candlesticks` - -Get Historical Market Candlesticks - -**Parameters:** -- `ticker` (path, string) **required** — Market ticker - unique identifier for the specific market -- `start_ts` (query, integer) **required** — Start timestamp (Unix timestamp). Candlesticks will include those ending on or after this time. -- `end_ts` (query, integer) **required** — End timestamp (Unix timestamp). Candlesticks will include those ending on or before this time. -- `period_interval` (query, integer) **required** — Time period length of each candlestick in minutes. Valid values are 1 (1 minute), 60 (1 hour), or 1440 (1 day). — enum: `1,60,1440` - ---- -##### `GetFillsHistorical` - -**GET** `/historical/fills` - -Get Historical Fills *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetHistoricalOrders` - -**GET** `/historical/orders` - -Get Historical Orders *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetHistoricalMarkets` - -**GET** `/historical/markets` - -Get Historical Markets - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetHistoricalMarket` - -**GET** `/historical/markets/{ticker}` - -Get Historical Market - -**Parameters:** -- `` (, string) - ---- -##### `GetExchangeStatus` - -**GET** `/exchange/status` - -Get Exchange Status - - ---- -##### `GetExchangeAnnouncements` - -**GET** `/exchange/announcements` - -Get Exchange Announcements - - ---- -##### `GetSeriesFeeChanges` - -**GET** `/series/fee_changes` - -Get Series Fee Changes - -**Parameters:** -- `series_ticker` (query, string) -- `show_historical` (query, boolean) - ---- -##### `GetExchangeSchedule` - -**GET** `/exchange/schedule` - -Get Exchange Schedule - - ---- -##### `GetUserDataTimestamp` - -**GET** `/exchange/user_data_timestamp` - -Get User Data Timestamp - - ---- -##### `GetOrders` - -**GET** `/portfolio/orders` - -Get Orders *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `CreateOrder` - -**POST** `/portfolio/orders` - -Create Order *(Auth required)* - - ---- -##### `GetOrder` - -**GET** `/portfolio/orders/{order_id}` - -Get Order *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `CancelOrder` - -**DELETE** `/portfolio/orders/{order_id}` - -Cancel Order *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) - ---- -##### `BatchCreateOrders` - -**POST** `/portfolio/orders/batched` - -Batch Create Orders *(Auth required)* - - ---- -##### `BatchCancelOrders` - -**DELETE** `/portfolio/orders/batched` - -Batch Cancel Orders *(Auth required)* - - ---- -##### `AmendOrder` - -**POST** `/portfolio/orders/{order_id}/amend` - -Amend Order *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `DecreaseOrder` - -**POST** `/portfolio/orders/{order_id}/decrease` - -Decrease Order *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `GetOrderQueuePositions` - -**GET** `/portfolio/orders/queue_positions` - -Get Queue Positions for Orders *(Auth required)* - -**Parameters:** -- `market_tickers` (query, string) — Comma-separated list of market tickers to filter by -- `event_ticker` (query, string) — Event ticker to filter by -- `` (, string) - ---- -##### `GetOrderQueuePosition` - -**GET** `/portfolio/orders/{order_id}/queue_position` - -Get Order Queue Position *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `GetOrderGroups` - -**GET** `/portfolio/order_groups` - -Get Order Groups *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `CreateOrderGroup` - -**POST** `/portfolio/order_groups/create` - -Create Order Group *(Auth required)* - - ---- -##### `GetOrderGroup` - -**GET** `/portfolio/order_groups/{order_group_id}` - -Get Order Group *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) - ---- -##### `DeleteOrderGroup` - -**DELETE** `/portfolio/order_groups/{order_group_id}` - -Delete Order Group *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) - ---- -##### `ResetOrderGroup` - -**PUT** `/portfolio/order_groups/{order_group_id}/reset` - -Reset Order Group *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) - ---- -##### `TriggerOrderGroup` - -**PUT** `/portfolio/order_groups/{order_group_id}/trigger` - -Trigger Order Group *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) - ---- -##### `UpdateOrderGroupLimit` - -**PUT** `/portfolio/order_groups/{order_group_id}/limit` - -Update Order Group Limit *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `GetBalance` - -**GET** `/portfolio/balance` - -Get Balance *(Auth required)* - -**Parameters:** -- `subaccount` (query, integer) — Subaccount number (0 for primary, 1-32 for subaccounts). When provided, returns only that subaccount's balance. - ---- -##### `CreateSubaccount` - -**POST** `/portfolio/subaccounts` - -Create Subaccount *(Auth required)* - - ---- -##### `ApplySubaccountTransfer` - -**POST** `/portfolio/subaccounts/transfer` - -Transfer Between Subaccounts *(Auth required)* - - ---- -##### `GetSubaccountBalances` - -**GET** `/portfolio/subaccounts/balances` - -Get All Subaccount Balances *(Auth required)* - - ---- -##### `GetSubaccountTransfers` - -**GET** `/portfolio/subaccounts/transfers` - -Get Subaccount Transfers *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) - ---- -##### `GetPositions` - -**GET** `/portfolio/positions` - -Get Positions *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetSettlements` - -**GET** `/portfolio/settlements` - -Get Settlements *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetPortfolioRestingOrderTotalValue` - -**GET** `/portfolio/summary/total_resting_order_value` - -Get Total Resting Order Value *(Auth required)* - - ---- -##### `GetFills` - -**GET** `/portfolio/fills` - -Get Fills *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetApiKeys` - -**GET** `/api_keys` - -Get API Keys *(Auth required)* - - ---- -##### `CreateApiKey` - -**POST** `/api_keys` - -Create API Key *(Auth required)* - - ---- -##### `GenerateApiKey` - -**POST** `/api_keys/generate` - -Generate API Key *(Auth required)* - - ---- -##### `DeleteApiKey` - -**DELETE** `/api_keys/{api_key}` - -Delete API Key *(Auth required)* - -**Parameters:** -- `api_key` (path, string) **required** — API key ID to delete - ---- -##### `GetTagsForSeriesCategories` - -**GET** `/search/tags_by_categories` - -Get Tags for Series Categories - - ---- -##### `GetFiltersForSports` - -**GET** `/search/filters_by_sport` - -Get Filters for Sports - - ---- -##### `GetAccountApiLimits` - -**GET** `/account/limits` - -Get Account API Limits *(Auth required)* - - ---- -##### `GetMarketCandlesticks` - -**GET** `/series/{series_ticker}/markets/{ticker}/candlesticks` - -Get Market Candlesticks - -**Parameters:** -- `series_ticker` (path, string) **required** — Series ticker - the series that contains the target market -- `ticker` (path, string) **required** — Market ticker - unique identifier for the specific market -- `start_ts` (query, integer) **required** — Start timestamp (Unix timestamp). Candlesticks will include those ending on or after this time. -- `end_ts` (query, integer) **required** — End timestamp (Unix timestamp). Candlesticks will include those ending on or before this time. -- `period_interval` (query, integer) **required** — Time period length of each candlestick in minutes. Valid values are 1 (1 minute), 60 (1 hour), or 1440 (1 day). — enum: `1,60,1440` -- `include_latest_before_start` (query, boolean) — If true, prepends the latest candlestick available before the start_ts. This synthetic candlestick is created by: -1. Finding the most recent real candlestick before start_ts -2. Projecting it forward to the first period boundary (calculated as the next period interval after start_ts) -3. Setting all OHLC prices to null, and `previous_price` to the close price from the real candlestick - - ---- -##### `GetTrades` - -**GET** `/markets/trades` - -Get Trades - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetMarketCandlesticksByEvent` - -**GET** `/series/{series_ticker}/events/{ticker}/candlesticks` - -Get Event Candlesticks - -**Parameters:** -- `ticker` (path, string) **required** — The event ticker -- `series_ticker` (path, string) **required** — The series ticker -- `start_ts` (query, integer) **required** — Start timestamp for the range -- `end_ts` (query, integer) **required** — End timestamp for the range -- `period_interval` (query, integer) **required** — Specifies the length of each candlestick period, in minutes. Must be one minute, one hour, or one day. — enum: `1,60,1440` - ---- -##### `GetEvents` - -**GET** `/events` - -Get Events - -**Parameters:** -- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 200. Maximum value is 200. -- `cursor` (query, string) — Parameter to specify the pagination cursor. Use the cursor value returned from the previous response to get the next page of results. Leave empty for the first page. -- `with_nested_markets` (query, boolean) — Parameter to specify if nested markets should be included in the response. When true, each event will include a 'markets' field containing a list of Market objects associated with that event. -- `with_milestones` (query, boolean) — If true, includes related milestones as a field alongside events. -- `status` (query, string) — Filter by event status. Possible values are 'open', 'closed', 'settled'. Leave empty to return events with any status. — enum: `open,closed,settled` -- `` (, string) -- `min_close_ts` (query, integer) — Filter events with at least one market with close timestamp greater than this Unix timestamp (in seconds). - ---- -##### `GetMultivariateEvents` - -**GET** `/events/multivariate` - -Get Multivariate Events - -**Parameters:** -- `limit` (query, integer) — Number of results per page. Defaults to 100. Maximum value is 200. -- `cursor` (query, string) — Pagination cursor. Use the cursor value returned from the previous response to get the next page of results. -- `` (, string) -- `collection_ticker` (query, string) — Filter events by collection ticker. Returns only multivariate events belonging to the specified collection. Cannot be used together with series_ticker. -- `with_nested_markets` (query, boolean) — Parameter to specify if nested markets should be included in the response. When true, each event will include a 'markets' field containing a list of Market objects associated with that event. - ---- -##### `GetEvent` - -**GET** `/events/{event_ticker}` - -Get Event - -**Parameters:** -- `event_ticker` (path, string) **required** — Event ticker -- `with_nested_markets` (query, boolean) — If true, markets are included within the event object. If false (default), markets are returned as a separate top-level field in the response. - ---- -##### `GetEventMetadata` - -**GET** `/events/{event_ticker}/metadata` - -Get Event Metadata - -**Parameters:** -- `event_ticker` (path, string) **required** — Event ticker - ---- -##### `GetEventForecastPercentilesHistory` - -**GET** `/series/{series_ticker}/events/{ticker}/forecast_percentile_history` - -Get Event Forecast Percentile History *(Auth required)* - -**Parameters:** -- `ticker` (path, string) **required** — The event ticker -- `series_ticker` (path, string) **required** — The series ticker -- `percentiles` (query, array) **required** — Array of percentile values to retrieve (0-10000, max 10 values) -- `start_ts` (query, integer) **required** — Start timestamp for the range -- `end_ts` (query, integer) **required** — End timestamp for the range -- `period_interval` (query, integer) **required** — Specifies the length of each forecast period, in minutes. 0 for 5-second intervals, or 1, 60, or 1440 for minute-based intervals. — enum: `0,1,60,1440` - ---- -##### `GetLiveData` - -**GET** `/live_data/{type}/milestone/{milestone_id}` - -Get Live Data - -**Parameters:** -- `type` (path, string) **required** — Type of live data -- `milestone_id` (path, string) **required** — Milestone ID - ---- -##### `GetLiveDatas` - -**GET** `/live_data/batch` - -Get Multiple Live Data - -**Parameters:** -- `milestone_ids` (query, array) **required** — Array of milestone IDs - ---- -##### `GetIncentivePrograms` - -**GET** `/incentive_programs` - -Get Incentives - -**Parameters:** -- `status` (query, string) — Status filter. Can be "all", "active", "upcoming", "closed", or "paid_out". Default is "all". — enum: `all,active,upcoming,closed,paid_out` -- `type` (query, string) — Type filter. Can be "all", "liquidity", or "volume". Default is "all". — enum: `all,liquidity,volume` -- `limit` (query, integer) — Number of results per page. Defaults to 100. Maximum value is 10000. -- `cursor` (query, string) — Cursor for pagination - ---- -##### `GetFCMOrders` - -**GET** `/fcm/orders` - -Get FCM Orders *(Auth required)* - -**Parameters:** -- `subtrader_id` (query, string) **required** — Restricts the response to orders for a specific subtrader (FCM members only) -- `` (, string) -- `` (, string) -- `` (, string) -- `min_ts` (query, integer) — Restricts the response to orders after a timestamp, formatted as a Unix Timestamp -- `max_ts` (query, integer) — Restricts the response to orders before a timestamp, formatted as a Unix Timestamp -- `status` (query, string) — Restricts the response to orders that have a certain status — enum: `resting,canceled,executed` -- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 100 - ---- -##### `GetFCMPositions` - -**GET** `/fcm/positions` - -Get FCM Positions *(Auth required)* - -**Parameters:** -- `subtrader_id` (query, string) **required** — Restricts the response to positions for a specific subtrader (FCM members only) -- `ticker` (query, string) — Ticker of desired positions -- `event_ticker` (query, string) — Event ticker of desired positions -- `count_filter` (query, string) — Restricts the positions to those with any of following fields with non-zero values, as a comma separated list -- `settlement_status` (query, string) — Settlement status of the markets to return. Defaults to unsettled — enum: `all,unsettled,settled` -- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 100 -- `cursor` (query, string) — The Cursor represents a pointer to the next page of records in the pagination - ---- -##### `GetStructuredTargets` - -**GET** `/structured_targets` - -Get Structured Targets - -**Parameters:** -- `type` (query, string) — Filter by structured target type -- `competition` (query, string) — Filter by competition -- `page_size` (query, integer) — Number of items per page (min 1, max 2000, default 100) -- `cursor` (query, string) — Pagination cursor - ---- -##### `GetStructuredTarget` - -**GET** `/structured_targets/{structured_target_id}` - -Get Structured Target - -**Parameters:** -- `structured_target_id` (path, string) **required** — Structured target ID - ---- -##### `GetMarketOrderbook` - -**GET** `/markets/{ticker}/orderbook` - -Get Market Orderbook *(Auth required)* - -**Parameters:** -- `` (, string) -- `depth` (query, integer) — Depth of the orderbook to retrieve (0 or negative means all levels, 1-100 for specific depth) - ---- -##### `GetMarketOrderbooks` - -**GET** `/markets/orderbooks` - -Get Multiple Market Orderbooks *(Auth required)* - -**Parameters:** -- `tickers` (query, array) **required** — List of market tickers to fetch orderbooks for - ---- -##### `GetMilestone` - -**GET** `/milestones/{milestone_id}` - -Get Milestone - -**Parameters:** -- `milestone_id` (path, string) **required** — Milestone ID - ---- -##### `GetMilestones` - -**GET** `/milestones` - -Get Milestones - -**Parameters:** -- `limit` (query, integer) **required** — Number of milestones to return per page -- `minimum_start_date` (query, string) — Minimum start date to filter milestones. Format RFC3339 timestamp -- `category` (query, string) — Filter by milestone category -- `competition` (query, string) — Filter by competition -- `source_id` (query, string) — Filter by source id -- `type` (query, string) — Filter by milestone type -- `related_event_ticker` (query, string) — Filter by related event ticker -- `cursor` (query, string) — Pagination cursor. Use the cursor value returned from the previous response to get the next page of results - ---- -##### `GetCommunicationsID` - -**GET** `/communications/id` - -Get Communications ID *(Auth required)* - - ---- -##### `GetRFQs` - -**GET** `/communications/rfqs` - -Get RFQs *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 100. -- `status` (query, string) — Filter RFQs by status -- `creator_user_id` (query, string) — Filter RFQs by creator user ID - ---- -##### `CreateRFQ` - -**POST** `/communications/rfqs` - -Create RFQ *(Auth required)* - - ---- -##### `GetRFQ` - -**GET** `/communications/rfqs/{rfq_id}` - -Get RFQ *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `DeleteRFQ` - -**DELETE** `/communications/rfqs/{rfq_id}` - -Delete RFQ *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `GetQuotes` - -**GET** `/communications/quotes` - -Get Quotes *(Auth required)* - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `limit` (query, integer) — Parameter to specify the number of results per page. Defaults to 500. -- `status` (query, string) — Filter quotes by status -- `quote_creator_user_id` (query, string) — Filter quotes by quote creator user ID -- `rfq_creator_user_id` (query, string) — Filter quotes by RFQ creator user ID -- `rfq_creator_subtrader_id` (query, string) — Filter quotes by RFQ creator subtrader ID (FCM members only) -- `rfq_id` (query, string) — Filter quotes by RFQ ID - ---- -##### `CreateQuote` - -**POST** `/communications/quotes` - -Create Quote *(Auth required)* - - ---- -##### `GetQuote` - -**GET** `/communications/quotes/{quote_id}` - -Get Quote *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `DeleteQuote` - -**DELETE** `/communications/quotes/{quote_id}` - -Delete Quote *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `AcceptQuote` - -**PUT** `/communications/quotes/{quote_id}/accept` - -Accept Quote *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `ConfirmQuote` - -**PUT** `/communications/quotes/{quote_id}/confirm` - -Confirm Quote *(Auth required)* - -**Parameters:** -- `` (, string) - ---- -##### `GetMultivariateEventCollection` - -**GET** `/multivariate_event_collections/{collection_ticker}` - -Get Multivariate Event Collection - -**Parameters:** -- `collection_ticker` (path, string) **required** — Collection ticker - ---- -##### `CreateMarketInMultivariateEventCollection` - -**POST** `/multivariate_event_collections/{collection_ticker}` - -Create Market In Multivariate Event Collection *(Auth required)* - -**Parameters:** -- `collection_ticker` (path, string) **required** — Collection ticker - ---- -##### `GetMultivariateEventCollections` - -**GET** `/multivariate_event_collections` - -Get Multivariate Event Collections - -**Parameters:** -- `status` (query, string) — Only return collections of a certain status. Can be unopened, open, or closed. — enum: `unopened,open,closed` -- `associated_event_ticker` (query, string) — Only return collections associated with a particular event ticker. -- `series_ticker` (query, string) — Only return collections with a particular series ticker. -- `limit` (query, integer) — Specify the maximum number of results. -- `cursor` (query, string) — The Cursor represents a pointer to the next page of records in the pagination. This optional parameter, when filled, should be filled with the cursor string returned in a previous request to this end-point. - ---- -##### `LookupTickersForMarketInMultivariateEventCollection` - -**PUT** `/multivariate_event_collections/{collection_ticker}/lookup` - -Lookup Tickers For Market In Multivariate Event Collection *(Auth required)* - -**Parameters:** -- `collection_ticker` (path, string) **required** — Collection ticker - ---- -##### `GetMultivariateEventCollectionLookupHistory` - -**GET** `/multivariate_event_collections/{collection_ticker}/lookup` - -Get Multivariate Event Collection Lookup History - -**Parameters:** -- `collection_ticker` (path, string) **required** — Collection ticker -- `lookback_seconds` (query, integer) **required** — Number of seconds to look back for lookup history. Must be one of 10, 60, 300, or 3600. — enum: `10,60,300,3600` - ---- -##### `GetSeries` - -**GET** `/series/{series_ticker}` - -Get Series - -**Parameters:** -- `series_ticker` (path, string) **required** — The ticker of the series to retrieve -- `include_volume` (query, boolean) — If true, includes the total volume traded across all events in this series. - ---- -##### `GetSeriesList` - -**GET** `/series` - -Get Series List - -**Parameters:** -- `category` (query, string) -- `tags` (query, string) -- `include_product_metadata` (query, boolean) -- `include_volume` (query, boolean) — If true, includes the total volume traded across all events in each series. - ---- -##### `GetMarkets` - -**GET** `/markets` - -Get Markets - -**Parameters:** -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) -- `` (, string) - ---- -##### `GetMarket` - -**GET** `/markets/{ticker}` - -Get Market - -**Parameters:** -- `` (, string) - ---- -##### `BatchGetMarketCandlesticks` - -**GET** `/markets/candlesticks` - -Batch Get Market Candlesticks - -**Parameters:** -- `market_tickers` (query, string) **required** — Comma-separated list of market tickers (maximum 100) -- `start_ts` (query, integer) **required** — Start timestamp in Unix seconds -- `end_ts` (query, integer) **required** — End timestamp in Unix seconds -- `period_interval` (query, integer) **required** — Candlestick period interval in minutes -- `include_latest_before_start` (query, boolean) — If true, prepends the latest candlestick available before the start_ts. This synthetic candlestick is created by: -1. Finding the most recent real candlestick before start_ts -2. Projecting it forward to the first period boundary (calculated as the next period interval after start_ts) -3. Setting all OHLC prices to null, and `previous_price` to the close price from the real candlestick - - ---- -### Limitless - -| `callApi()` name | Method | Path | Summary | Auth | -|-----------------|--------|------|---------|------| -| `AuthController_getSigningMessage` | `GET` | `/auth/signing-message` | Get signing message | Public | -| `AuthController_verifyAuth` | `GET` | `/auth/verify-auth` | Verify authentication | Required | -| `AuthController_login` | `POST` | `/auth/login` | User login | Public | -| `AuthController_logout` | `POST` | `/auth/logout` | User logout | Required | -| `MarketController_getActiveMarkets[0]` | `GET` | `/markets/active/{categoryId}` | Browse Active Markets | Public | -| `MarketController_getActiveMarkets[1]` | `GET` | `/markets/active` | Browse Active Markets | Public | -| `MarketController_getActiveMarketCountPerCategory` | `GET` | `/markets/categories/count` | Get active market count per category | Public | -| `MarketController_getActiveSlugs` | `GET` | `/markets/active/slugs` | Get active market slugs with metadata | Public | -| `MarketController_find` | `GET` | `/markets/{addressOrSlug}` | Get Market Details | Public | -| `MarketController_getFeedEvent` | `GET` | `/markets/{slug}/get-feed-events` | Get feed events for a market | Required | -| `MarketOrderbookController_getHistoricalPrice` | `GET` | `/markets/{slug}/historical-price` | Get Historical Prices | Public | -| `MarketOrderbookController_getOrderbook` | `GET` | `/markets/{slug}/orderbook` | Get Orderbook | Public | -| `MarketOrderbookController_getLockedBalance` | `GET` | `/markets/{slug}/locked-balance` | Get Locked Balance | Required | -| `MarketOrderbookController_getUserOrders` | `GET` | `/markets/{slug}/user-orders` | User Orders | Required | -| `MarketOrderbookController_getMarketEvents` | `GET` | `/markets/{slug}/events` | Market Events | Public | -| `MarketSearchController_search` | `GET` | `/markets/search` | Search for markets based on semantic similarity | Public | -| `PortfolioController_getTrades` | `GET` | `/portfolio/trades` | Get Trades | Required | -| `PortfolioController_getPositions` | `GET` | `/portfolio/positions` | Get Positions | Required | -| `PortfolioController_getPnlChart` | `GET` | `/portfolio/pnl-chart` | Get portfolio PnL chart | Required | -| `PortfolioController_getHistory` | `GET` | `/portfolio/history` | Get History | Required | -| `PortfolioController_getPointsBreakdown` | `GET` | `/portfolio/points` | Get points breakdown | Required | -| `PublicPortfolioController_tradedVolume` | `GET` | `/portfolio/{account}/traded-volume` | User Total Volume | Public | -| `PublicPortfolioController_getPositions` | `GET` | `/portfolio/{account}/positions` | Get All User Positions | Public | -| `PublicPortfolioController_getPnlChart` | `GET` | `/portfolio/{account}/pnl-chart` | Get portfolio PnL chart (public) | Public | -| `TradingPortfolioController_getAllowance` | `GET` | `/portfolio/trading/allowance` | Get User Trading Allowance | Required | -| `OrderController_createOrder` | `POST` | `/orders` | Create Order | Required | -| `OrderController_cancelOrder` | `DELETE` | `/orders/{orderId}` | Cancel Order | Required | -| `OrderController_cancelOrderBatch` | `POST` | `/orders/cancel-batch` | Cancel multiple orders in batch | Required | -| `OrderController_cancelAllOrders` | `DELETE` | `/orders/all/{slug}` | Cancel all of a user's orders in a specific market | Required | - -#### Endpoint Details - -##### `AuthController_getSigningMessage` - -**GET** `/auth/signing-message` - -Get signing message - - ---- -##### `AuthController_verifyAuth` - -**GET** `/auth/verify-auth` - -Verify authentication *(Auth required)* - - ---- -##### `AuthController_login` - -**POST** `/auth/login` - -User login - -**Parameters:** -- `x-account` (header, string) **required** — The Ethereum address of the user -- `x-signing-message` (header, string) **required** — The signing message generated by the server -- `x-signature` (header, string) **required** — The signature generated by signing the message with the user's wallet - ---- -##### `AuthController_logout` - -**POST** `/auth/logout` - -User logout *(Auth required)* - - ---- -##### `MarketController_getActiveMarkets[0]` - -**GET** `/markets/active/{categoryId}` - -Browse Active Markets - -**Parameters:** -- `page` (query, number) — Page number for pagination -- `limit` (query, number) — Number of items per page -- `sortBy` (query, string) — Sort by query parameter -- `tradeType` (query, string) — Filter by trade type (amm, clob, or group) — enum: `amm,clob,group` -- `automationType` (query, string) — Filter by automation type (manual, lumy, or sports) — enum: `manual,lumy,sports` -- `categoryId` (path, number) **required** — Filter markets by category ID - ---- -##### `MarketController_getActiveMarkets[1]` - -**GET** `/markets/active` - -Browse Active Markets - -**Parameters:** -- `page` (query, number) — Page number for pagination -- `limit` (query, number) — Number of items per page -- `sortBy` (query, string) — Sort by query parameter -- `tradeType` (query, string) — Filter by trade type (amm, clob, or group) — enum: `amm,clob,group` -- `automationType` (query, string) — Filter by automation type (manual, lumy, or sports) — enum: `manual,lumy,sports` -- `categoryId` (path, number) **required** — Filter markets by category ID - ---- -##### `MarketController_getActiveMarketCountPerCategory` - -**GET** `/markets/categories/count` - -Get active market count per category - - ---- -##### `MarketController_getActiveSlugs` - -**GET** `/markets/active/slugs` - -Get active market slugs with metadata - - ---- -##### `MarketController_find` - -**GET** `/markets/{addressOrSlug}` - -Get Market Details - -**Parameters:** -- `addressOrSlug` (path, string) **required** — Market/group address (0x...) or slug identifier (my-market-name) - ---- -##### `MarketController_getFeedEvent` - -**GET** `/markets/{slug}/get-feed-events` - -Get feed events for a market *(Auth required)* - -**Parameters:** -- `page` (query, number) — Page number for pagination -- `limit` (query, number) — Number of events per page -- `slug` (path, string) **required** — Slug of the market - ---- -##### `MarketOrderbookController_getHistoricalPrice` - -**GET** `/markets/{slug}/historical-price` - -Get Historical Prices - -**Parameters:** -- `to` (query, string) — End date for historical data -- `from` (query, string) — Start date for historical data -- `interval` (query, string) — Time interval for data points — enum: `1h,6h,1d,1w,1m,all` -- `slug` (path, string) **required** — Market slug identifier - ---- -##### `MarketOrderbookController_getOrderbook` - -**GET** `/markets/{slug}/orderbook` - -Get Orderbook - -**Parameters:** -- `slug` (path, string) **required** — Market slug identifier - ---- -##### `MarketOrderbookController_getLockedBalance` - -**GET** `/markets/{slug}/locked-balance` - -Get Locked Balance *(Auth required)* - -**Parameters:** -- `slug` (path, string) **required** — Market slug identifier - ---- -##### `MarketOrderbookController_getUserOrders` - -**GET** `/markets/{slug}/user-orders` - -User Orders *(Auth required)* - -**Parameters:** -- `statuses` (query, array) — Order status(es) to filter by. Defaults to [LIVE] if not provided -- `limit` (query, number) — Maximum number of orders to return -- `slug` (path, string) **required** — Market slug identifier - ---- -##### `MarketOrderbookController_getMarketEvents` - -**GET** `/markets/{slug}/events` - -Market Events - -**Parameters:** -- `page` (query, number) — Page number for pagination -- `limit` (query, number) — Number of events per page -- `slug` (path, string) **required** — Market slug identifier - ---- -##### `MarketSearchController_search` - -**GET** `/markets/search` - -Search for markets based on semantic similarity - -**Parameters:** -- `query` (query, string) **required** — Search query text -- `limit` (query, number) — Maximum number of results to return -- `page` (query, number) — Number of page -- `similarityThreshold` (query, number) — Minimum similarity score (0-1) - ---- -##### `PortfolioController_getTrades` - -**GET** `/portfolio/trades` - -Get Trades *(Auth required)* - - ---- -##### `PortfolioController_getPositions` - -**GET** `/portfolio/positions` - -Get Positions *(Auth required)* - - ---- -##### `PortfolioController_getPnlChart` - -**GET** `/portfolio/pnl-chart` - -Get portfolio PnL chart *(Auth required)* - -**Parameters:** -- `timeframe` (query, string) — Timeframe window for percent change and chart series - ---- -##### `PortfolioController_getHistory` - -**GET** `/portfolio/history` - -Get History *(Auth required)* - -**Parameters:** -- `page` (query, number) **required** — Page number -- `limit` (query, number) **required** — Number of items per page -- `from` (query, string) — Start date for filtering (ISO 8601 format) -- `to` (query, string) — End date for filtering (ISO 8601 format) - ---- -##### `PortfolioController_getPointsBreakdown` - -**GET** `/portfolio/points` - -Get points breakdown *(Auth required)* - - ---- -##### `PublicPortfolioController_tradedVolume` - -**GET** `/portfolio/{account}/traded-volume` - -User Total Volume - -**Parameters:** -- `account` (path, string) **required** — User Ethereum address - ---- -##### `PublicPortfolioController_getPositions` - -**GET** `/portfolio/{account}/positions` - -Get All User Positions - -**Parameters:** -- `account` (path, string) **required** — User Ethereum address - ---- -##### `PublicPortfolioController_getPnlChart` - -**GET** `/portfolio/{account}/pnl-chart` - -Get portfolio PnL chart (public) - -**Parameters:** -- `account` (path, string) **required** — User Ethereum address -- `timeframe` (query, string) — Timeframe window for percent change and chart series - ---- -##### `TradingPortfolioController_getAllowance` - -**GET** `/portfolio/trading/allowance` - -Get User Trading Allowance *(Auth required)* - -**Parameters:** -- `type` (query, string) **required** — Trading type: CLOB or NegRisk — enum: `clob,negrisk` -- `spender` (query, string) — Optional spender address override (e.g., venue exchange address) - ---- -##### `OrderController_createOrder` - -**POST** `/orders` - -Create Order *(Auth required)* - - ---- -##### `OrderController_cancelOrder` - -**DELETE** `/orders/{orderId}` - -Cancel Order *(Auth required)* - -**Parameters:** -- `orderId` (path, string) **required** — Unique identifier of the order to be cancelled - ---- -##### `OrderController_cancelOrderBatch` - -**POST** `/orders/cancel-batch` - -Cancel multiple orders in batch *(Auth required)* - - ---- -##### `OrderController_cancelAllOrders` - -**DELETE** `/orders/all/{slug}` - -Cancel all of a user's orders in a specific market *(Auth required)* - - ---- -### Probable - -| `callApi()` name | Method | Path | Summary | Auth | -|-----------------|--------|------|---------|------| -| `getPublicApiV1AuthNonce` | `GET` | `/public/api/v1/auth/nonce` | Generate Nonce | Public | -| `postPublicApiV1AuthLogin` | `POST` | `/public/api/v1/auth/login` | Login | Public | -| `postPublicApiV1AuthLogout` | `POST` | `/public/api/v1/auth/logout` | Logout | Public | -| `postPublicApiV1AuthApiKey` | `POST` | `/public/api/v1/auth/api-key/{chainId}` | Generate API Key | Required | -| `getPublicApiV1AuthApiKey` | `GET` | `/public/api/v1/auth/api-key/{chainId}` | Get API Key | Required | -| `deletePublicApiV1AuthApiKey` | `DELETE` | `/public/api/v1/auth/api-key/{chainId}` | Delete API Key | Required | -| `postPublicApiV1AuthVerifyL1` | `POST` | `/public/api/v1/auth/verify/l1` | Verify L1 Headers | Required | -| `postPublicApiV1AuthVerifyL2` | `POST` | `/public/api/v1/auth/verify/l2` | Verify L2 Headers | Required | -| `getPublicApiV1Events` | `GET` | `/public/api/v1/events/` | List All Events | Public | -| `getPublicApiV1Events` | `GET` | `/public/api/v1/events/{id}` | Get Event by ID | Public | -| `getPublicApiV1EventsSlug` | `GET` | `/public/api/v1/events/slug/{slug}` | Get Event by Slug | Public | -| `getPublicApiV1EventsTags` | `GET` | `/public/api/v1/events/{id}/tags` | Get Tags for Event | Public | -| `getPublicApiV1Markets` | `GET` | `/public/api/v1/markets/` | List All Markets | Public | -| `getPublicApiV1Markets` | `GET` | `/public/api/v1/markets/{id}` | Get Market by ID | Public | -| `getPublicApiV1MarketsPolymarket` | `GET` | `/public/api/v1/markets/polymarket/{polymarketId}` | Get Market by Polymarket ID | Public | -| `getPublicApiV1MarketsBsc` | `GET` | `/public/api/v1/markets/bsc/{bscQuestionId}` | Get Market by BSC Question ID | Public | -| `getPublicApiV1PublicSearch` | `GET` | `/public/api/v1/public-search/` | Search Events and Markets | Public | -| `getPublicApiV1Tags` | `GET` | `/public/api/v1/tags/` | List All Tags | Public | -| `postPublicApiV1Order` | `POST` | `/public/api/v1/order/{chainId}` | Place Order | Required | -| `deletePublicApiV1Order` | `DELETE` | `/public/api/v1/order/{chainId}/{orderId}` | Cancel Order | Required | -| `getPublicApiV1Orders` | `GET` | `/public/api/v1/orders/{chainId}/{orderId}` | Get Order | Required | -| `getPublicApiV1OrdersOpen` | `GET` | `/public/api/v1/orders/{chainId}/open` | Get Open Orders | Required | -| `getPublicApiV1Price` | `GET` | `/public/api/v1/price` | Get Price | Public | -| `postPublicApiV1Prices` | `POST` | `/public/api/v1/prices` | Get Prices (Batch) | Public | -| `getPublicApiV1Midpoint` | `GET` | `/public/api/v1/midpoint` | Get Midpoint | Public | -| `getPublicApiV1Book` | `GET` | `/public/api/v1/book` | Get Order Book | Public | -| `getPublicApiV1PricesHistory` | `GET` | `/public/api/v1/prices-history` | Get Price History | Public | -| `getPublicApiV1Trade` | `GET` | `/public/api/v1/trade/{chainId}` | Get Trades (Authenticated) | Required | -| `getPublicApiV1Trades` | `GET` | `/public/api/v1/trades` | Get Public Trades | Public | -| `getPublicApiV1Activity` | `GET` | `/public/api/v1/activity` | User Activity | Public | -| `getPublicApiV1PositionCurrent` | `GET` | `/public/api/v1/position/current` | Current Position | Public | -| `getPublicApiV1Pnl` | `GET` | `/public/api/v1/pnl` | Profit and Loss | Public | - -#### Endpoint Details - -##### `getPublicApiV1AuthNonce` - -**GET** `/public/api/v1/auth/nonce` - -Generate Nonce - - ---- -##### `postPublicApiV1AuthLogin` - -**POST** `/public/api/v1/auth/login` - -Login - - ---- -##### `postPublicApiV1AuthLogout` - -**POST** `/public/api/v1/auth/logout` - -Logout - - ---- -##### `postPublicApiV1AuthApiKey` - -**POST** `/public/api/v1/auth/api-key/{chainId}` - -Generate API Key *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** - ---- -##### `getPublicApiV1AuthApiKey` - -**GET** `/public/api/v1/auth/api-key/{chainId}` - -Get API Key *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** - ---- -##### `deletePublicApiV1AuthApiKey` - -**DELETE** `/public/api/v1/auth/api-key/{chainId}` - -Delete API Key *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** - ---- -##### `postPublicApiV1AuthVerifyL1` - -**POST** `/public/api/v1/auth/verify/l1` - -Verify L1 Headers *(Auth required)* - - ---- -##### `postPublicApiV1AuthVerifyL2` - -**POST** `/public/api/v1/auth/verify/l2` - -Verify L2 Headers *(Auth required)* - - ---- -##### `getPublicApiV1Events` - -**GET** `/public/api/v1/events/` - -List All Events - -**Parameters:** -- `page` (query, integer) -- `limit` (query, integer) -- `status` (query, string) — enum: `active,closed,all` -- `tag_id` (query, string) -- `sort` (query, string) - ---- -##### `getPublicApiV1Events` - -**GET** `/public/api/v1/events/{id}` - -Get Event by ID - -**Parameters:** -- `id` (path, integer) **required** - ---- -##### `getPublicApiV1EventsSlug` - -**GET** `/public/api/v1/events/slug/{slug}` - -Get Event by Slug - -**Parameters:** -- `slug` (path, string) **required** - ---- -##### `getPublicApiV1EventsTags` - -**GET** `/public/api/v1/events/{id}/tags` - -Get Tags for Event - -**Parameters:** -- `id` (path, integer) **required** - ---- -##### `getPublicApiV1Markets` - -**GET** `/public/api/v1/markets/` - -List All Markets - -**Parameters:** -- `page` (query, integer) -- `active` (query, boolean) -- `event_id` (query, integer) - ---- -##### `getPublicApiV1Markets` - -**GET** `/public/api/v1/markets/{id}` - -Get Market by ID - -**Parameters:** -- `id` (path, integer) **required** - ---- -##### `getPublicApiV1MarketsPolymarket` - -**GET** `/public/api/v1/markets/polymarket/{polymarketId}` - -Get Market by Polymarket ID - -**Parameters:** -- `polymarketId` (path, string) **required** - ---- -##### `getPublicApiV1MarketsBsc` - -**GET** `/public/api/v1/markets/bsc/{bscQuestionId}` - -Get Market by BSC Question ID - -**Parameters:** -- `bscQuestionId` (path, string) **required** - ---- -##### `getPublicApiV1PublicSearch` - -**GET** `/public/api/v1/public-search/` - -Search Events and Markets - -**Parameters:** -- `q` (query, string) **required** -- `page` (query, integer) -- `events_tag` (query, string) -- `optimized` (query, boolean) - ---- -##### `getPublicApiV1Tags` - -**GET** `/public/api/v1/tags/` - -List All Tags - - ---- -##### `postPublicApiV1Order` - -**POST** `/public/api/v1/order/{chainId}` - -Place Order *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** - ---- -##### `deletePublicApiV1Order` - -**DELETE** `/public/api/v1/order/{chainId}/{orderId}` - -Cancel Order *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** -- `orderId` (path, string) **required** -- `tokenId` (query, string) **required** - ---- -##### `getPublicApiV1Orders` - -**GET** `/public/api/v1/orders/{chainId}/{orderId}` - -Get Order *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** -- `orderId` (path, string) **required** -- `tokenId` (query, string) **required** - ---- -##### `getPublicApiV1OrdersOpen` - -**GET** `/public/api/v1/orders/{chainId}/open` - -Get Open Orders *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** -- `limit` (query, integer) -- `page` (query, integer) - ---- -##### `getPublicApiV1Price` - -**GET** `/public/api/v1/price` - -Get Price - -**Parameters:** -- `token_id` (query, string) **required** -- `side` (query, string) **required** — enum: `BUY,SELL` - ---- -##### `postPublicApiV1Prices` - -**POST** `/public/api/v1/prices` - -Get Prices (Batch) - - ---- -##### `getPublicApiV1Midpoint` - -**GET** `/public/api/v1/midpoint` - -Get Midpoint - -**Parameters:** -- `token_id` (query, string) **required** - ---- -##### `getPublicApiV1Book` - -**GET** `/public/api/v1/book` - -Get Order Book - -**Parameters:** -- `token_id` (query, string) **required** - ---- -##### `getPublicApiV1PricesHistory` - -**GET** `/public/api/v1/prices-history` - -Get Price History - -**Parameters:** -- `market` (query, string) **required** — Asset ID -- `interval` (query, string) — enum: `max,1m,1h,6h,1d,1w` -- `startTs` (query, integer) -- `endTs` (query, integer) - ---- -##### `getPublicApiV1Trade` - -**GET** `/public/api/v1/trade/{chainId}` - -Get Trades (Authenticated) *(Auth required)* - -**Parameters:** -- `chainId` (path, integer) **required** -- `tokenId` (query, string) **required** -- `limit` (query, integer) -- `next_cursor` (query, string) - ---- -##### `getPublicApiV1Trades` - -**GET** `/public/api/v1/trades` - -Get Public Trades - -**Parameters:** -- `user` (query, string) -- `limit` (query, integer) -- `side` (query, string) - ---- -##### `getPublicApiV1Activity` - -**GET** `/public/api/v1/activity` - -User Activity - -**Parameters:** -- `user` (query, string) **required** -- `limit` (query, integer) - ---- -##### `getPublicApiV1PositionCurrent` - -**GET** `/public/api/v1/position/current` - -Current Position - -**Parameters:** -- `user` (query, string) **required** -- `eventId` (query, integer) - ---- -##### `getPublicApiV1Pnl` - -**GET** `/public/api/v1/pnl` - -Profit and Loss - -**Parameters:** -- `user_address` (query, string) **required** - ---- -### Myriad - -| `callApi()` name | Method | Path | Summary | Auth | -|-----------------|--------|------|---------|------| -| `getQuestions` | `GET` | `/questions` | List Questions | Required | -| `getQuestions` | `GET` | `/questions/{id}` | Get Question Details | Required | -| `getMarkets` | `GET` | `/markets` | List Markets | Required | -| `getMarkets` | `GET` | `/markets/{id}` | Get Market Details | Required | -| `getMarketsEvents` | `GET` | `/markets/{id}/events` | Get Market Events | Required | -| `getMarketsReferrals` | `GET` | `/markets/{id}/referrals` | Get Market Referrals | Required | -| `getMarketsHolders` | `GET` | `/markets/{id}/holders` | Get Market Holders | Required | -| `postMarketsQuote` | `POST` | `/markets/quote` | Get Trade Quote | Required | -| `postMarketsQuoteWithFee` | `POST` | `/markets/quote_with_fee` | Get Trade Quote with Frontend Fee | Required | -| `postMarketsClaim` | `POST` | `/markets/claim` | Get Claim Quote | Required | -| `getUsersEvents` | `GET` | `/users/{address}/events` | Get User Events | Required | -| `getUsersReferrals` | `GET` | `/users/{address}/referrals` | Get User Referrals | Required | -| `getUsersPortfolio` | `GET` | `/users/{address}/portfolio` | Get User Portfolio | Required | -| `getUsersMarkets` | `GET` | `/users/{address}/markets` | Get User Markets Portfolio | Required | - -#### Endpoint Details - -##### `getQuestions` - -**GET** `/questions` - -List Questions *(Auth required)* - -**Parameters:** -- `page` (query, integer) -- `limit` (query, integer) -- `keyword` (query, string) — Search in question title -- `min_markets` (query, integer) — Minimum number of linked markets -- `max_markets` (query, integer) — Maximum number of linked markets - ---- -##### `getQuestions` - -**GET** `/questions/{id}` - -Get Question Details *(Auth required)* - -**Parameters:** -- `id` (path, integer) **required** - ---- -##### `getMarkets` - -**GET** `/markets` - -List Markets *(Auth required)* - -**Parameters:** -- `page` (query, integer) -- `limit` (query, integer) -- `sort` (query, string) — enum: `volume,volume_24h,liquidity,expires_at,published_at,featured` -- `order` (query, string) — enum: `asc,desc` -- `network_id` (query, string) — Comma-separated list of network ids -- `state` (query, string) — enum: `open,closed,resolved,voided` -- `trading_model` (query, string) — Filter markets by trading model (e.g. CLOB, AMM) -- `token_address` (query, string) -- `topics` (query, string) — Comma-separated list of topics -- `keyword` (query, string) — Full-text search across title, description, and outcome titles -- `ids` (query, string) — Comma-separated list of on-chain market ids -- `in_play` (query, boolean) -- `moneyline` (query, boolean) -- `min_duration` (query, integer) — Minimum market duration in seconds -- `max_duration` (query, integer) — Maximum market duration in seconds - ---- -##### `getMarkets` - -**GET** `/markets/{id}` - -Get Market Details *(Auth required)* - -**Parameters:** -- `id` (path, string) **required** — Market slug OR Market ID -- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID - ---- -##### `getMarketsEvents` - -**GET** `/markets/{id}/events` - -Get Market Events *(Auth required)* - -**Parameters:** -- `id` (path, string) **required** — Market slug OR Market ID -- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID -- `page` (query, integer) -- `limit` (query, integer) -- `since` (query, integer) — Unix seconds (inclusive) -- `until` (query, integer) — Unix seconds (inclusive) - ---- -##### `getMarketsReferrals` - -**GET** `/markets/{id}/referrals` - -Get Market Referrals *(Auth required)* - -**Parameters:** -- `id` (path, string) **required** — Market slug OR Market ID -- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID -- `page` (query, integer) -- `limit` (query, integer) -- `since` (query, integer) -- `until` (query, integer) -- `code` (query, string) - ---- -##### `getMarketsHolders` - -**GET** `/markets/{id}/holders` - -Get Market Holders *(Auth required)* - -**Parameters:** -- `id` (path, string) **required** — Market slug OR Market ID -- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID -- `page` (query, integer) -- `limit` (query, integer) - ---- -##### `postMarketsQuote` - -**POST** `/markets/quote` - -Get Trade Quote *(Auth required)* - - ---- -##### `postMarketsQuoteWithFee` - -**POST** `/markets/quote_with_fee` - -Get Trade Quote with Frontend Fee *(Auth required)* - - ---- -##### `postMarketsClaim` - -**POST** `/markets/claim` - -Get Claim Quote *(Auth required)* - - ---- -##### `getUsersEvents` - -**GET** `/users/{address}/events` - -Get User Events *(Auth required)* - -**Parameters:** -- `address` (path, string) **required** -- `page` (query, integer) -- `limit` (query, integer) -- `market_id` (query, string) -- `market_slug` (query, string) -- `network_id` (query, integer) -- `since` (query, integer) -- `until` (query, integer) - ---- -##### `getUsersReferrals` - -**GET** `/users/{address}/referrals` - -Get User Referrals *(Auth required)* - -**Parameters:** -- `address` (path, string) **required** -- `page` (query, integer) -- `limit` (query, integer) -- `market_id` (query, string) -- `market_slug` (query, string) -- `network_id` (query, integer) -- `since` (query, integer) -- `until` (query, integer) -- `code` (query, string) - ---- -##### `getUsersPortfolio` - -**GET** `/users/{address}/portfolio` - -Get User Portfolio *(Auth required)* - -**Parameters:** -- `address` (path, string) **required** -- `page` (query, integer) -- `limit` (query, integer) -- `min_shares` (query, number) — Default 0.1 -- `market_slug` (query, string) -- `market_id` (query, string) -- `network_id` (query, integer) -- `token_address` (query, string) - ---- -##### `getUsersMarkets` - -**GET** `/users/{address}/markets` - -Get User Markets Portfolio *(Auth required)* - -**Parameters:** -- `address` (path, string) **required** -- `page` (query, integer) -- `limit` (query, integer) -- `min_shares` (query, number) -- `network_id` (query, integer) -- `state` (query, string) -- `trading_model` (query, string) — Filter portfolio results by trading model (e.g. CLOB, AMM) -- `token_address` (query, string) -- `topics` (query, string) -- `keyword` (query, string) -- `market_ids` (query, string) — Comma-separated list of {networkId}:{marketId} pairs - ---- +--- +##### `OrderController_cancelOrderBatch` + +**POST** `/orders/cancel-batch` + +Cancel multiple orders in batch *(Auth required)* + + +--- +##### `OrderController_cancelAllOrders` + +**DELETE** `/orders/all/{slug}` + +Cancel all of a user's orders in a specific market *(Auth required)* + + +--- +### Probable + +| `callApi()` name | Method | Path | Summary | Auth | +|-----------------|--------|------|---------|------| +| `getPublicApiV1AuthNonce` | `GET` | `/public/api/v1/auth/nonce` | Generate Nonce | Public | +| `postPublicApiV1AuthLogin` | `POST` | `/public/api/v1/auth/login` | Login | Public | +| `postPublicApiV1AuthLogout` | `POST` | `/public/api/v1/auth/logout` | Logout | Public | +| `postPublicApiV1AuthApiKey` | `POST` | `/public/api/v1/auth/api-key/{chainId}` | Generate API Key | Required | +| `getPublicApiV1AuthApiKey` | `GET` | `/public/api/v1/auth/api-key/{chainId}` | Get API Key | Required | +| `deletePublicApiV1AuthApiKey` | `DELETE` | `/public/api/v1/auth/api-key/{chainId}` | Delete API Key | Required | +| `postPublicApiV1AuthVerifyL1` | `POST` | `/public/api/v1/auth/verify/l1` | Verify L1 Headers | Required | +| `postPublicApiV1AuthVerifyL2` | `POST` | `/public/api/v1/auth/verify/l2` | Verify L2 Headers | Required | +| `getPublicApiV1Events` | `GET` | `/public/api/v1/events/` | List All Events | Public | +| `getPublicApiV1Events` | `GET` | `/public/api/v1/events/{id}` | Get Event by ID | Public | +| `getPublicApiV1EventsSlug` | `GET` | `/public/api/v1/events/slug/{slug}` | Get Event by Slug | Public | +| `getPublicApiV1EventsTags` | `GET` | `/public/api/v1/events/{id}/tags` | Get Tags for Event | Public | +| `getPublicApiV1Markets` | `GET` | `/public/api/v1/markets/` | List All Markets | Public | +| `getPublicApiV1Markets` | `GET` | `/public/api/v1/markets/{id}` | Get Market by ID | Public | +| `getPublicApiV1MarketsPolymarket` | `GET` | `/public/api/v1/markets/polymarket/{polymarketId}` | Get Market by Polymarket ID | Public | +| `getPublicApiV1MarketsBsc` | `GET` | `/public/api/v1/markets/bsc/{bscQuestionId}` | Get Market by BSC Question ID | Public | +| `getPublicApiV1PublicSearch` | `GET` | `/public/api/v1/public-search/` | Search Events and Markets | Public | +| `getPublicApiV1Tags` | `GET` | `/public/api/v1/tags/` | List All Tags | Public | +| `postPublicApiV1Order` | `POST` | `/public/api/v1/order/{chainId}` | Place Order | Required | +| `deletePublicApiV1Order` | `DELETE` | `/public/api/v1/order/{chainId}/{orderId}` | Cancel Order | Required | +| `getPublicApiV1Orders` | `GET` | `/public/api/v1/orders/{chainId}/{orderId}` | Get Order | Required | +| `getPublicApiV1OrdersOpen` | `GET` | `/public/api/v1/orders/{chainId}/open` | Get Open Orders | Required | +| `getPublicApiV1Price` | `GET` | `/public/api/v1/price` | Get Price | Public | +| `postPublicApiV1Prices` | `POST` | `/public/api/v1/prices` | Get Prices (Batch) | Public | +| `getPublicApiV1Midpoint` | `GET` | `/public/api/v1/midpoint` | Get Midpoint | Public | +| `getPublicApiV1Book` | `GET` | `/public/api/v1/book` | Get Order Book | Public | +| `getPublicApiV1PricesHistory` | `GET` | `/public/api/v1/prices-history` | Get Price History | Public | +| `getPublicApiV1Trade` | `GET` | `/public/api/v1/trade/{chainId}` | Get Trades (Authenticated) | Required | +| `getPublicApiV1Trades` | `GET` | `/public/api/v1/trades` | Get Public Trades | Public | +| `getPublicApiV1Activity` | `GET` | `/public/api/v1/activity` | User Activity | Public | +| `getPublicApiV1PositionCurrent` | `GET` | `/public/api/v1/position/current` | Current Position | Public | +| `getPublicApiV1Pnl` | `GET` | `/public/api/v1/pnl` | Profit and Loss | Public | + +#### Endpoint Details + +##### `getPublicApiV1AuthNonce` + +**GET** `/public/api/v1/auth/nonce` + +Generate Nonce + + +--- +##### `postPublicApiV1AuthLogin` + +**POST** `/public/api/v1/auth/login` + +Login + + +--- +##### `postPublicApiV1AuthLogout` + +**POST** `/public/api/v1/auth/logout` + +Logout + + +--- +##### `postPublicApiV1AuthApiKey` + +**POST** `/public/api/v1/auth/api-key/{chainId}` + +Generate API Key *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** + +--- +##### `getPublicApiV1AuthApiKey` + +**GET** `/public/api/v1/auth/api-key/{chainId}` + +Get API Key *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** + +--- +##### `deletePublicApiV1AuthApiKey` + +**DELETE** `/public/api/v1/auth/api-key/{chainId}` + +Delete API Key *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** + +--- +##### `postPublicApiV1AuthVerifyL1` + +**POST** `/public/api/v1/auth/verify/l1` + +Verify L1 Headers *(Auth required)* + + +--- +##### `postPublicApiV1AuthVerifyL2` + +**POST** `/public/api/v1/auth/verify/l2` + +Verify L2 Headers *(Auth required)* + + +--- +##### `getPublicApiV1Events` + +**GET** `/public/api/v1/events/` + +List All Events + +**Parameters:** +- `page` (query, integer) +- `limit` (query, integer) +- `status` (query, string) — enum: `active,closed,all` +- `tag_id` (query, string) +- `sort` (query, string) + +--- +##### `getPublicApiV1Events` + +**GET** `/public/api/v1/events/{id}` + +Get Event by ID + +**Parameters:** +- `id` (path, integer) **required** + +--- +##### `getPublicApiV1EventsSlug` + +**GET** `/public/api/v1/events/slug/{slug}` + +Get Event by Slug + +**Parameters:** +- `slug` (path, string) **required** + +--- +##### `getPublicApiV1EventsTags` + +**GET** `/public/api/v1/events/{id}/tags` + +Get Tags for Event + +**Parameters:** +- `id` (path, integer) **required** + +--- +##### `getPublicApiV1Markets` + +**GET** `/public/api/v1/markets/` + +List All Markets + +**Parameters:** +- `page` (query, integer) +- `active` (query, boolean) +- `event_id` (query, integer) + +--- +##### `getPublicApiV1Markets` + +**GET** `/public/api/v1/markets/{id}` + +Get Market by ID + +**Parameters:** +- `id` (path, integer) **required** + +--- +##### `getPublicApiV1MarketsPolymarket` + +**GET** `/public/api/v1/markets/polymarket/{polymarketId}` + +Get Market by Polymarket ID + +**Parameters:** +- `polymarketId` (path, string) **required** + +--- +##### `getPublicApiV1MarketsBsc` + +**GET** `/public/api/v1/markets/bsc/{bscQuestionId}` + +Get Market by BSC Question ID + +**Parameters:** +- `bscQuestionId` (path, string) **required** + +--- +##### `getPublicApiV1PublicSearch` + +**GET** `/public/api/v1/public-search/` + +Search Events and Markets + +**Parameters:** +- `q` (query, string) **required** +- `page` (query, integer) +- `events_tag` (query, string) +- `optimized` (query, boolean) + +--- +##### `getPublicApiV1Tags` + +**GET** `/public/api/v1/tags/` + +List All Tags + + +--- +##### `postPublicApiV1Order` + +**POST** `/public/api/v1/order/{chainId}` + +Place Order *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** + +--- +##### `deletePublicApiV1Order` + +**DELETE** `/public/api/v1/order/{chainId}/{orderId}` + +Cancel Order *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** +- `orderId` (path, string) **required** +- `tokenId` (query, string) **required** + +--- +##### `getPublicApiV1Orders` + +**GET** `/public/api/v1/orders/{chainId}/{orderId}` + +Get Order *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** +- `orderId` (path, string) **required** +- `tokenId` (query, string) **required** + +--- +##### `getPublicApiV1OrdersOpen` + +**GET** `/public/api/v1/orders/{chainId}/open` + +Get Open Orders *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** +- `limit` (query, integer) +- `page` (query, integer) + +--- +##### `getPublicApiV1Price` + +**GET** `/public/api/v1/price` + +Get Price + +**Parameters:** +- `token_id` (query, string) **required** +- `side` (query, string) **required** — enum: `BUY,SELL` + +--- +##### `postPublicApiV1Prices` + +**POST** `/public/api/v1/prices` + +Get Prices (Batch) + + +--- +##### `getPublicApiV1Midpoint` + +**GET** `/public/api/v1/midpoint` + +Get Midpoint + +**Parameters:** +- `token_id` (query, string) **required** + +--- +##### `getPublicApiV1Book` + +**GET** `/public/api/v1/book` + +Get Order Book + +**Parameters:** +- `token_id` (query, string) **required** + +--- +##### `getPublicApiV1PricesHistory` + +**GET** `/public/api/v1/prices-history` + +Get Price History + +**Parameters:** +- `market` (query, string) **required** — Asset ID +- `interval` (query, string) — enum: `max,1m,1h,6h,1d,1w` +- `startTs` (query, integer) +- `endTs` (query, integer) + +--- +##### `getPublicApiV1Trade` + +**GET** `/public/api/v1/trade/{chainId}` + +Get Trades (Authenticated) *(Auth required)* + +**Parameters:** +- `chainId` (path, integer) **required** +- `tokenId` (query, string) **required** +- `limit` (query, integer) +- `next_cursor` (query, string) + +--- +##### `getPublicApiV1Trades` + +**GET** `/public/api/v1/trades` + +Get Public Trades + +**Parameters:** +- `user` (query, string) +- `limit` (query, integer) +- `side` (query, string) + +--- +##### `getPublicApiV1Activity` + +**GET** `/public/api/v1/activity` + +User Activity + +**Parameters:** +- `user` (query, string) **required** +- `limit` (query, integer) + +--- +##### `getPublicApiV1PositionCurrent` + +**GET** `/public/api/v1/position/current` + +Current Position + +**Parameters:** +- `user` (query, string) **required** +- `eventId` (query, integer) + +--- +##### `getPublicApiV1Pnl` + +**GET** `/public/api/v1/pnl` + +Profit and Loss + +**Parameters:** +- `user_address` (query, string) **required** + +--- +### Myriad + +| `callApi()` name | Method | Path | Summary | Auth | +|-----------------|--------|------|---------|------| +| `getQuestions` | `GET` | `/questions` | List Questions | Required | +| `getQuestions` | `GET` | `/questions/{id}` | Get Question Details | Required | +| `getMarkets` | `GET` | `/markets` | List Markets | Required | +| `getMarkets` | `GET` | `/markets/{id}` | Get Market Details | Required | +| `getMarketsEvents` | `GET` | `/markets/{id}/events` | Get Market Events | Required | +| `getMarketsReferrals` | `GET` | `/markets/{id}/referrals` | Get Market Referrals | Required | +| `getMarketsHolders` | `GET` | `/markets/{id}/holders` | Get Market Holders | Required | +| `postMarketsQuote` | `POST` | `/markets/quote` | Get Trade Quote | Required | +| `postMarketsQuoteWithFee` | `POST` | `/markets/quote_with_fee` | Get Trade Quote with Frontend Fee | Required | +| `postMarketsClaim` | `POST` | `/markets/claim` | Get Claim Quote | Required | +| `getUsersEvents` | `GET` | `/users/{address}/events` | Get User Events | Required | +| `getUsersReferrals` | `GET` | `/users/{address}/referrals` | Get User Referrals | Required | +| `getUsersPortfolio` | `GET` | `/users/{address}/portfolio` | Get User Portfolio | Required | +| `getUsersMarkets` | `GET` | `/users/{address}/markets` | Get User Markets Portfolio | Required | + +#### Endpoint Details + +##### `getQuestions` + +**GET** `/questions` + +List Questions *(Auth required)* + +**Parameters:** +- `page` (query, integer) +- `limit` (query, integer) +- `keyword` (query, string) — Search in question title +- `min_markets` (query, integer) — Minimum number of linked markets +- `max_markets` (query, integer) — Maximum number of linked markets + +--- +##### `getQuestions` + +**GET** `/questions/{id}` + +Get Question Details *(Auth required)* + +**Parameters:** +- `id` (path, integer) **required** + +--- +##### `getMarkets` + +**GET** `/markets` + +List Markets *(Auth required)* + +**Parameters:** +- `page` (query, integer) +- `limit` (query, integer) +- `sort` (query, string) — enum: `volume,volume_24h,liquidity,expires_at,published_at,featured` +- `order` (query, string) — enum: `asc,desc` +- `network_id` (query, string) — Comma-separated list of network ids +- `state` (query, string) — enum: `open,closed,resolved,voided` +- `trading_model` (query, string) — Filter markets by trading model (e.g. CLOB, AMM) +- `token_address` (query, string) +- `topics` (query, string) — Comma-separated list of topics +- `keyword` (query, string) — Full-text search across title, description, and outcome titles +- `ids` (query, string) — Comma-separated list of on-chain market ids +- `in_play` (query, boolean) +- `moneyline` (query, boolean) +- `min_duration` (query, integer) — Minimum market duration in seconds +- `max_duration` (query, integer) — Maximum market duration in seconds + +--- +##### `getMarkets` + +**GET** `/markets/{id}` + +Get Market Details *(Auth required)* + +**Parameters:** +- `id` (path, string) **required** — Market slug OR Market ID +- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID + +--- +##### `getMarketsEvents` + +**GET** `/markets/{id}/events` + +Get Market Events *(Auth required)* + +**Parameters:** +- `id` (path, string) **required** — Market slug OR Market ID +- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID +- `page` (query, integer) +- `limit` (query, integer) +- `since` (query, integer) — Unix seconds (inclusive) +- `until` (query, integer) — Unix seconds (inclusive) + +--- +##### `getMarketsReferrals` + +**GET** `/markets/{id}/referrals` + +Get Market Referrals *(Auth required)* + +**Parameters:** +- `id` (path, string) **required** — Market slug OR Market ID +- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID +- `page` (query, integer) +- `limit` (query, integer) +- `since` (query, integer) +- `until` (query, integer) +- `code` (query, string) + +--- +##### `getMarketsHolders` + +**GET** `/markets/{id}/holders` + +Get Market Holders *(Auth required)* + +**Parameters:** +- `id` (path, string) **required** — Market slug OR Market ID +- `network_id` (query, integer) — Required if 'id' in path is a numeric Market ID +- `page` (query, integer) +- `limit` (query, integer) + +--- +##### `postMarketsQuote` + +**POST** `/markets/quote` + +Get Trade Quote *(Auth required)* + + +--- +##### `postMarketsQuoteWithFee` + +**POST** `/markets/quote_with_fee` + +Get Trade Quote with Frontend Fee *(Auth required)* + + +--- +##### `postMarketsClaim` + +**POST** `/markets/claim` + +Get Claim Quote *(Auth required)* + + +--- +##### `getUsersEvents` + +**GET** `/users/{address}/events` + +Get User Events *(Auth required)* + +**Parameters:** +- `address` (path, string) **required** +- `page` (query, integer) +- `limit` (query, integer) +- `market_id` (query, string) +- `market_slug` (query, string) +- `network_id` (query, integer) +- `since` (query, integer) +- `until` (query, integer) + +--- +##### `getUsersReferrals` + +**GET** `/users/{address}/referrals` + +Get User Referrals *(Auth required)* + +**Parameters:** +- `address` (path, string) **required** +- `page` (query, integer) +- `limit` (query, integer) +- `market_id` (query, string) +- `market_slug` (query, string) +- `network_id` (query, integer) +- `since` (query, integer) +- `until` (query, integer) +- `code` (query, string) + +--- +##### `getUsersPortfolio` + +**GET** `/users/{address}/portfolio` + +Get User Portfolio *(Auth required)* + +**Parameters:** +- `address` (path, string) **required** +- `page` (query, integer) +- `limit` (query, integer) +- `min_shares` (query, number) — Default 0.1 +- `market_slug` (query, string) +- `market_id` (query, string) +- `network_id` (query, integer) +- `token_address` (query, string) + +--- +##### `getUsersMarkets` + +**GET** `/users/{address}/markets` + +Get User Markets Portfolio *(Auth required)* + +**Parameters:** +- `address` (path, string) **required** +- `page` (query, integer) +- `limit` (query, integer) +- `min_shares` (query, number) +- `network_id` (query, integer) +- `state` (query, string) +- `trading_model` (query, string) — Filter portfolio results by trading model (e.g. CLOB, AMM) +- `token_address` (query, string) +- `topics` (query, string) +- `keyword` (query, string) +- `market_ids` (query, string) — Comma-separated list of {networkId}:{marketId} pairs + +--- From 46b9e38e6558326fc50ea5c782c3e2474ae2ff99 Mon Sep 17 00:00:00 2001 From: AbhilashG12 Date: Fri, 10 Jul 2026 19:42:00 +0530 Subject: [PATCH 6/7] chore: remove extra blank lines from API_REFERENCE.md --- core/api-doc-config.generated.json | 98 +++++++++++++++--------------- sdks/python/API_REFERENCE.md | 29 --------- sdks/typescript/API_REFERENCE.md | 29 --------- 3 files changed, 49 insertions(+), 107 deletions(-) diff --git a/core/api-doc-config.generated.json b/core/api-doc-config.generated.json index e3aab094..a0edcfdd 100644 --- a/core/api-doc-config.generated.json +++ b/core/api-doc-config.generated.json @@ -1,9 +1,9 @@ { - "_generated": "Auto-generated by extract-jsdoc.js on 2026-07-10T07:00:07.066Z. Do not edit manually.", + "_generated": "Auto-generated by extract-jsdoc.js on 2026-07-10T14:11:41.904Z. Do not edit manually.", "methods": { "has": { - "summary": "HTTP verb for the endpoint (e.g. GET, POST). */\r", - "description": "method: string;\r\n /** URL path template, relative to the descriptor's baseUrl. */\r\n path: string;\r\n /** Whether this endpoint requires authenticated credentials. */\r\n isPrivate?: boolean;\r\n /** Identifier used to generate the implicit API method name. */\r\n operationId?: string;\r\n /**\r\nWhen set, requests use this base URL instead of the descriptor default\r\n(OpenAPI path- or operation-level `servers` override).\r\n/\r\n baseUrl?: string;\r\n}\r\n\r\nexport interface ApiDescriptor {\r\n /** Base URL that all endpoint paths are resolved against. */\r\n baseUrl: string;\r\n /** Map of endpoint key to endpoint definition used by the implicit API machinery. */\r\n endpoints: Record;\r\n}\r\n\r\nexport interface ImplicitApiMethodInfo {\r\n /** Generated method name exposed on the exchange instance. */\r\n name: string;\r\n /** HTTP verb for the underlying endpoint. */\r\n method: string;\r\n /** URL path template for the underlying endpoint. */\r\n path: string;\r\n /** Whether the underlying endpoint requires authenticated credentials. */\r\n isPrivate: boolean;\r\n}\r\n\r\nexport interface MarketFilterParams {\r\n /** Maximum number of results to return */\r\n limit?: number;\r\n /** Pagination offset — number of results to skip */\r\n offset?: number;\r\n /** Sort order for results */\r\n sort?: 'volume' | 'liquidity' | 'newest';\r\n status?: 'active' | 'inactive' | 'closed' | 'all'; // Filter by market status (default: 'active', 'inactive' and 'closed' are interchangeable)\r\n searchIn?: 'title' | 'description' | 'both'; // Where to search (default: 'title')\r\n query?: string; // For keyword search\r\n slug?: string; // For slug/ticker lookup\r\n marketId?: string; // Direct lookup by market ID\r\n outcomeId?: string; // Reverse lookup -- find market containing this outcome\r\n eventId?: string; // Find markets belonging to an event\r\n page?: number; // For pagination (used by Limitless)\r\n similarityThreshold?: number; // For semantic search (used by Limitless)\r\n /** Filter by source venue (e.g. 'polymarket', 'kalshi', 'myriad'). `exchange` is an alias. */\r\n sourceExchange?: string;\r\n /** Alias for `sourceExchange`. */\r\n exchange?: string;\r\n}\r\n\r\nexport interface MarketFetchParams extends MarketFilterParams {\r\n /** Optional client-side filter applied after fetching */\r\n filter?: MarketFilterCriteria;\r\n /** Filter by category. Each market belongs to a venue-assigned category such as \"Sports\", \"Politics\", \"Crypto\", \"Bitcoin\", \"Soccer\", \"Economic Policy\" (Polymarket) or \"Sports\", \"Mentions\" (Kalshi). */\r\n category?: string;\r\n /** Filter by tags. Returns markets matching ANY of the provided tags. Tags are more specific than categories -- for example a \"Sports\" market might carry tags [\"Sports\", \"FIFA World Cup\", \"2026 FIFA World Cup\"]. Common tags include \"Crypto\", \"Politics\", \"Elections\", \"Geopolitics\", \"Fed Rates\", \"Trump\". */\r\n tags?: string[];\r\n}\r\n\r\nexport interface EventFetchParams {\r\n query?: string; // For keyword search\r\n /** Maximum number of results to return */\r\n limit?: number;\r\n /** Opaque venue pagination cursor, where supported. */\r\n cursor?: string;\r\n /** Pagination offset — number of results to skip */\r\n offset?: number;\r\n /** Sort order for results */\r\n sort?: 'volume' | 'liquidity' | 'newest';\r\n status?: 'active' | 'inactive' | 'closed' | 'all'; // Filter by event status (default: 'active', 'inactive' and 'closed' are interchangeable)\r\n /** Where to search (default: 'title') */\r\n searchIn?: 'title' | 'description' | 'both';\r\n eventId?: string; // Direct lookup by event ID\r\n slug?: string; // Lookup by event slug\r\n /** Filter events by their parent series. Accepts the venue-native series id / ticker / slug (e.g. Kalshi `\"KXATPMATCH\"`, Polymarket `\"wta\"`). Passed through to the vendor where supported, otherwise applied to `sourceMetadata` after fetch. */\r\n series?: string;\r\n /** Optional client-side filter applied after fetching */\r\n filter?: EventFilterCriteria;\r\n /** Filter by category. Each event belongs to a venue-assigned category such as \"Sports\", \"Politics\", \"Crypto\", \"Bitcoin\", \"Soccer\", \"Economic Policy\" (Polymarket) or \"Sports\", \"Mentions\" (Kalshi). */\r\n category?: string;\r\n /** Filter by tags. Returns events matching ANY of the provided tags. Tags are more specific than categories -- for example a \"Politics\" event might carry tags [\"Politics\", \"Geopolitics\", \"Middle East\", \"Iran\"]. Common tags include \"Crypto\", \"Elections\", \"Fed Rates\", \"FIFA World Cup\", \"Trump\". */\r\n tags?: string[];\r\n /** Filter by source venue (e.g. 'polymarket', 'kalshi', 'myriad'). `exchange` is an alias. */\r\n sourceExchange?: string;\r\n /** Alias for `sourceExchange`. */\r\n exchange?: string;\r\n}\r\n\r\n/**\r\nParameters for `fetchSeries`. Venues that don't expose a series concept\r\nreturn an empty array regardless of the filters.\r\n/\r\nexport interface SeriesFetchParams {\r\n /** Direct lookup by venue-native series id (e.g. \"KXATPMATCH\" on Kalshi, \"atp\" or \"1\" on Polymarket Gamma). When set, the result is the matching series with its events populated where the venue supports it. */\r\n id?: string;\r\n /** Lookup by series slug (e.g. \"wta\", \"nfl\"). */\r\n slug?: string;\r\n /** Keyword search across series title / description. */\r\n query?: string;\r\n /** Filter by recurrence cadence ('daily', 'weekly', 'annual', ...). */\r\n recurrence?: string;\r\n /** Maximum number of results to return. */\r\n limit?: number;\r\n /** Pagination offset. */\r\n offset?: number;\r\n}\r\n\r\n/**\r\nDeprecated - use OHLCVParams or TradesParams instead. Resolution is optional for backward compatibility.\r\n/\r\nexport interface HistoryFilterParams {\r\n resolution?: CandleInterval; // Optional for backward compatibility\r\n /** Start of the time range */\r\n start?: Date;\r\n /** End of the time range */\r\n end?: Date;\r\n /** Maximum number of results to return */\r\n limit?: number;\r\n}\r\n\r\nexport interface OHLCVParams {\r\n resolution: CandleInterval; // Required for candle aggregation\r\n /** Start of the time range */\r\n start?: Date;\r\n /** End of the time range */\r\n end?: Date;\r\n /** Maximum number of results to return */\r\n limit?: number;\r\n}\r\n\r\n/**\r\nParameters for fetching trade history. No resolution parameter - trades are discrete events.\r\n/\r\n/** Maximum allowed value for `TradesParams.limit`. */\r\nexport const MAX_TRADES_LIMIT = 1000;\r\n\r\nexport interface TradesParams {\r\n // No resolution - trades are discrete events, not aggregated\r\n /** Start of the time range */\r\n start?: Date;\r\n /** End of the time range */\r\n end?: Date;\r\n /** Maximum number of results to return (max {@link MAX_TRADES_LIMIT}) */\r\n limit?: number;\r\n}\r\n\r\nexport interface MyTradesParams {\r\n outcomeId?: string; // filter to specific outcome/ticker\r\n marketId?: string; // filter to specific market\r\n /** Only return records after this date */\r\n since?: Date;\r\n /** Only return records before this date */\r\n until?: Date;\r\n /** Maximum number of results to return */\r\n limit?: number;\r\n cursor?: string; // for Kalshi cursor pagination\r\n}\r\n\r\nexport interface FetchOrderBookParams {\r\n /** Outcome side: 'yes' or 'no'. Required for exchanges like Limitless\r\n where the API returns a single orderbook per market. */\r\n side?: 'yes' | 'no';\r\n /** Outcome alias: 'yes' or 'no', or an outcome token ID. When set,\r\n the first argument is treated as a market ID and this value selects\r\n which outcome's order book to fetch. Accepts the literal strings\r\n 'yes'/'no' (resolved via a market lookup) or a raw outcome token ID. */\r\n outcome?: string;\r\n /** Unix timestamp (ms) — fetch a historical snapshot at or before this\r\n time, or the start of a range when combined with `until` (hosted API only). */\r\n since?: number;\r\n /** Unix timestamp (ms) — end of a historical range. When combined with\r\n `since`, returns an array of reconstructed L2 OrderBook snapshots\r\n between `since` and `until` (hosted API only). */\r\n until?: number;\r\n}\r\n\r\nexport interface OrderHistoryParams {\r\n marketId?: string; // required for Limitless (slug)\r\n /** Only return records after this date */\r\n since?: Date;\r\n /** Only return records before this date */\r\n until?: Date;\r\n /** Maximum number of results to return */\r\n limit?: number;\r\n /** Opaque pagination cursor from a previous response */\r\n cursor?: string;\r\n}\r\n\r\n// ----------------------------------------------------------------------------\r\n// Filtering Types\r\n// ----------------------------------------------------------------------------\r\n\r\nexport interface MarketFilterCriteria {\r\n // Text search\r\n text?: string;\r\n searchIn?: ('title' | 'description' | 'category' | 'tags' | 'outcomes')[]; // Default: ['title']\r\n\r\n // Numeric range filters\r\n volume24h?: { min?: number; max?: number };\r\n /** Filter by total (lifetime) volume range */\r\n volume?: { min?: number; max?: number };\r\n /** Filter by current liquidity range */\r\n liquidity?: { min?: number; max?: number };\r\n /** Filter by open interest range */\r\n openInterest?: { min?: number; max?: number };\r\n\r\n // Date filters\r\n resolutionDate?: {\r\n before?: Date;\r\n after?: Date;\r\n };\r\n\r\n // Category/tag filters\r\n /** Filter by category. Common values: \"Sports\", \"Politics\", \"Crypto\", \"Bitcoin\", \"Soccer\", \"Economic Policy\" (Polymarket) or \"Sports\", \"Mentions\" (Kalshi). */\r\n category?: string;\r\n /** Match markets that have ANY of these tags. Examples: [\"Crypto\", \"Crypto Prices\"], [\"Politics\", \"Elections\"], [\"Sports\", \"FIFA World Cup\"]. */\r\n tags?: string[];\r\n\r\n // Price filters (for binary markets)\r\n price?: {\r\n outcome: 'yes' | 'no' | 'up' | 'down';\r\n min?: number; // 0.0 to 1.0\r\n max?: number;\r\n };\r\n\r\n // Price change filters\r\n priceChange24h?: {\r\n outcome: 'yes' | 'no' | 'up' | 'down';\r\n min?: number; // e.g., -0.1 for 10% drop\r\n max?: number;\r\n };\r\n}\r\n\r\nexport type MarketFilterFunction = (market: UnifiedMarket) => boolean;\r\n\r\nexport interface EventFilterCriteria {\r\n // Text search\r\n text?: string;\r\n searchIn?: ('title' | 'description' | 'category' | 'tags')[]; // Default: ['title']\r\n\r\n // Category/tag filters\r\n /** Filter by category. Common values: \"Sports\", \"Politics\", \"Crypto\", \"Bitcoin\", \"Soccer\", \"Economic Policy\" (Polymarket) or \"Sports\", \"Mentions\" (Kalshi). */\r\n category?: string;\r\n /** Match events that have ANY of these tags. Examples: [\"Crypto\"], [\"Politics\", \"Geopolitics\", \"Middle East\"], [\"Sports\", \"FIFA World Cup\"]. */\r\n tags?: string[];\r\n\r\n // Filter by contained markets\r\n marketCount?: { min?: number; max?: number };\r\n totalVolume?: { min?: number; max?: number }; // Sum of market volumes\r\n}\r\n\r\nexport type EventFilterFunction = (event: UnifiedEvent) => boolean;\r\n\r\n// ----------------------------------------------------------------------------\r\n// Capability Map (ccxt-style exchange.has)\r\n// ----------------------------------------------------------------------------\r\n\r\nexport type ExchangeCapability = true | false | 'emulated';\r\n\r\nexport interface ExchangeHas {\r\n /** Whether this exchange supports fetching markets. */\r\n fetchMarkets: ExchangeCapability;\r\n /** Whether this exchange supports fetching events. */\r\n fetchEvents: ExchangeCapability;\r\n /** Whether this exchange exposes a recurring-series concept (Series -> Event -> Market -> Outcome). Venues without one return `false` and an empty array from `fetchSeries`. */\r\n fetchSeries: ExchangeCapability;\r\n /** Whether this exchange supports fetching OHLCV candles. */\r\n fetchOHLCV: ExchangeCapability;\r\n /** Whether this exchange supports fetching the order book. */\r\n fetchOrderBook: ExchangeCapability;\r\n /** Whether this exchange supports fetching multiple market order books. */\r\n fetchOrderBooks: ExchangeCapability;\r\n /** Whether this exchange supports fetching public trades. */\r\n fetchTrades: ExchangeCapability;\r\n /** Whether this exchange supports creating orders. */\r\n createOrder: ExchangeCapability;\r\n /** Whether this exchange supports cancelling orders. */\r\n cancelOrder: ExchangeCapability;\r\n /** Whether this exchange supports fetching a single order by id. */\r\n fetchOrder: ExchangeCapability;\r\n /** Whether this exchange supports fetching open orders. */\r\n fetchOpenOrders: ExchangeCapability;\r\n /** Whether this exchange supports fetching account positions. */\r\n fetchPositions: ExchangeCapability;\r\n /** Whether this exchange supports fetching account balances. */\r\n fetchBalance: ExchangeCapability;\r\n /** Whether this exchange supports subscribing to an on-chain address for updates. */\r\n watchAddress: ExchangeCapability;\r\n /** Whether this exchange supports unsubscribing from a watched address. */\r\n unwatchAddress: ExchangeCapability;\r\n /** Whether this exchange supports streaming order book updates. */\r\n watchOrderBook: ExchangeCapability;\r\n /** Whether this exchange supports batch-subscribing to multiple order book streams. */\r\n watchOrderBooks: ExchangeCapability;\r\n /** Whether this exchange supports unsubscribing from an order book stream. */\r\n unwatchOrderBook: ExchangeCapability;\r\n /** Whether this exchange supports streaming trade updates. */\r\n watchTrades: ExchangeCapability;\r\n /** Whether this exchange supports fetching the authenticated user's trade history. */\r\n fetchMyTrades: ExchangeCapability;\r\n /** Whether this exchange supports fetching closed orders. */\r\n fetchClosedOrders: ExchangeCapability;\r\n /** Whether this exchange supports fetching all orders (open and closed). */\r\n fetchAllOrders: ExchangeCapability;\r\n /** Whether this exchange supports building a signed order without submitting it. */\r\n buildOrder: ExchangeCapability;\r\n /** Whether this exchange supports submitting a pre-built order. */\r\n submitOrder: ExchangeCapability;\r\n /** Whether this exchange supports fetching cross-venue market matches. */\r\n fetchMarketMatches: ExchangeCapability;\r\n /** @deprecated Use {@link fetchMarketMatches} instead. */\r\n fetchMatches: ExchangeCapability;\r\n /** Whether this exchange supports fetching cross-venue event matches. */\r\n fetchEventMatches: ExchangeCapability;\r\n /** Whether this exchange supports comparing prices across venues. */\r\n compareMarketPrices: ExchangeCapability;\r\n /** Whether this exchange supports finding related markets across venues. */\r\n fetchRelatedMarkets: ExchangeCapability;\r\n /** Whether this exchange supports fetching matched markets across venues. */\r\n fetchMatchedMarkets: ExchangeCapability;\r\n /** @deprecated Use {@link fetchMatchedMarkets} instead. */\r\n fetchMatchedPrices: ExchangeCapability;\r\n /** @deprecated Use {@link fetchRelatedMarkets} instead. */\r\n fetchHedges: ExchangeCapability;\r\n /** @deprecated Use {@link fetchMatchedMarkets} instead. */\r\n fetchArbitrage: ExchangeCapability;\r\n}\r\n\r\n/**\r\nOptional authentication credentials for exchange operations.\r\n/\r\nexport interface ExchangeCredentials {\r\n // Standard API authentication (Kalshi, etc.)\r\n apiKey?: string;\r\n /** Standard API secret for HMAC-authenticated exchanges */\r\n apiSecret?: string;\r\n /** Standard API passphrase for HMAC-authenticated exchanges */\r\n passphrase?: string;\r\n /** Metaculus: `Authorization: Token ` for higher rate limits */\r\n apiToken?: string;\r\n\r\n // Blockchain-based authentication (Polymarket)\r\n privateKey?: string; // Required for Polymarket L1 auth\r\n\r\n // Polymarket-specific L2 fields\r\n signatureType?: number | string; // 0 = EOA, 1 = Poly Proxy, 2 = Gnosis Safe (Can also use 'eoa', 'polyproxy', 'gnosis_safe')\r\n funderAddress?: string; // The address funding the trades (defaults to signer address)\r\n\r\n // Limitless: wallet address for delegated signing profile lookup\r\n walletAddress?: string;\r\n\r\n // Optional base URL override for venue API (e.g., proxy for geo-restricted venues)\r\n baseUrl?: string;\r\n}\r\n\r\nexport interface ExchangeOptions {\r\n /**\r\nHow long (ms) a market snapshot created by `fetchMarketsPaginated` remains valid\r\nbefore being discarded and re-fetched from the API on the next call.\r\nDefaults to 0 (no TTL — the snapshot is re-fetched on every initial call).\r\n/\r\n snapshotTTL?: number;\r\n}\r\n\r\n/** Shape returned by fetchMarketsPaginated */\r\nexport interface PaginatedMarketsResult {\r\n /** The page of unified markets */\r\n data: UnifiedMarket[];\r\n /** Total number of markets in the snapshot */\r\n total: number;\r\n /** Cursor to pass to the next call, or undefined if this is the last page */\r\n nextCursor?: string;\r\n}\r\n\r\n/** Shape returned by fetchEventsPaginated */\r\nexport interface PaginatedEventsResult {\r\n /** The page of unified events */\r\n data: UnifiedEvent[];\r\n /** Total number of events in the snapshot */\r\n total: number;\r\n /** Cursor to pass to the next call, or undefined if this is the last page */\r\n nextCursor?: string;\r\n}\r\n\r\n// ----------------------------------------------------------------------------\r\n// Base Exchange Class\r\n// ----------------------------------------------------------------------------\r\n\r\nexport abstract class PredictionMarketExchange {\r\n [key: string]: any; // Allow dynamic method assignment for implicit API\r\n\r\n public verbose: boolean = false;\r\n public http: AxiosInstance;\r\n public enableRateLimit: boolean = true;\r\n // Market Cache\r\n public markets: Record = {};\r\n public marketsBySlug: Record = {};\r\n public loadedMarkets: boolean = false;\r\n /**\r\nCapability map derived automatically from method overrides at runtime.\r\nExchanges do NOT need to declare this manually -- if a subclass overrides\r\na method (and the override does not throw \"not supported\"), it is `true`.\r\nTo mark a capability as `'emulated'`, add its key to `emulatedCapabilities`.", + "summary": "HTTP verb for the endpoint (e.g. GET, POST). */", + "description": "method: string;\n /** URL path template, relative to the descriptor's baseUrl. */\n path: string;\n /** Whether this endpoint requires authenticated credentials. */\n isPrivate?: boolean;\n /** Identifier used to generate the implicit API method name. */\n operationId?: string;\n /**\nWhen set, requests use this base URL instead of the descriptor default\n(OpenAPI path- or operation-level `servers` override).\n/\n baseUrl?: string;\n}\n\nexport interface ApiDescriptor {\n /** Base URL that all endpoint paths are resolved against. */\n baseUrl: string;\n /** Map of endpoint key to endpoint definition used by the implicit API machinery. */\n endpoints: Record;\n}\n\nexport interface ImplicitApiMethodInfo {\n /** Generated method name exposed on the exchange instance. */\n name: string;\n /** HTTP verb for the underlying endpoint. */\n method: string;\n /** URL path template for the underlying endpoint. */\n path: string;\n /** Whether the underlying endpoint requires authenticated credentials. */\n isPrivate: boolean;\n}\n\nexport interface MarketFilterParams {\n /** Maximum number of results to return */\n limit?: number;\n /** Pagination offset — number of results to skip */\n offset?: number;\n /** Sort order for results */\n sort?: 'volume' | 'liquidity' | 'newest';\n status?: 'active' | 'inactive' | 'closed' | 'all'; // Filter by market status (default: 'active', 'inactive' and 'closed' are interchangeable)\n searchIn?: 'title' | 'description' | 'both'; // Where to search (default: 'title')\n query?: string; // For keyword search\n slug?: string; // For slug/ticker lookup\n marketId?: string; // Direct lookup by market ID\n outcomeId?: string; // Reverse lookup -- find market containing this outcome\n eventId?: string; // Find markets belonging to an event\n page?: number; // For pagination (used by Limitless)\n similarityThreshold?: number; // For semantic search (used by Limitless)\n /** Filter by source venue (e.g. 'polymarket', 'kalshi', 'myriad'). `exchange` is an alias. */\n sourceExchange?: string;\n /** Alias for `sourceExchange`. */\n exchange?: string;\n}\n\nexport interface MarketFetchParams extends MarketFilterParams {\n /** Optional client-side filter applied after fetching */\n filter?: MarketFilterCriteria;\n /** Filter by category. Each market belongs to a venue-assigned category such as \"Sports\", \"Politics\", \"Crypto\", \"Bitcoin\", \"Soccer\", \"Economic Policy\" (Polymarket) or \"Sports\", \"Mentions\" (Kalshi). */\n category?: string;\n /** Filter by tags. Returns markets matching ANY of the provided tags. Tags are more specific than categories -- for example a \"Sports\" market might carry tags [\"Sports\", \"FIFA World Cup\", \"2026 FIFA World Cup\"]. Common tags include \"Crypto\", \"Politics\", \"Elections\", \"Geopolitics\", \"Fed Rates\", \"Trump\". */\n tags?: string[];\n}\n\nexport interface EventFetchParams {\n query?: string; // For keyword search\n /** Maximum number of results to return */\n limit?: number;\n /** Opaque venue pagination cursor, where supported. */\n cursor?: string;\n /** Pagination offset — number of results to skip */\n offset?: number;\n /** Sort order for results */\n sort?: 'volume' | 'liquidity' | 'newest';\n status?: 'active' | 'inactive' | 'closed' | 'all'; // Filter by event status (default: 'active', 'inactive' and 'closed' are interchangeable)\n /** Where to search (default: 'title') */\n searchIn?: 'title' | 'description' | 'both';\n eventId?: string; // Direct lookup by event ID\n slug?: string; // Lookup by event slug\n /** Filter events by their parent series. Accepts the venue-native series id / ticker / slug (e.g. Kalshi `\"KXATPMATCH\"`, Polymarket `\"wta\"`). Passed through to the vendor where supported, otherwise applied to `sourceMetadata` after fetch. */\n series?: string;\n /** Optional client-side filter applied after fetching */\n filter?: EventFilterCriteria;\n /** Filter by category. Each event belongs to a venue-assigned category such as \"Sports\", \"Politics\", \"Crypto\", \"Bitcoin\", \"Soccer\", \"Economic Policy\" (Polymarket) or \"Sports\", \"Mentions\" (Kalshi). */\n category?: string;\n /** Filter by tags. Returns events matching ANY of the provided tags. Tags are more specific than categories -- for example a \"Politics\" event might carry tags [\"Politics\", \"Geopolitics\", \"Middle East\", \"Iran\"]. Common tags include \"Crypto\", \"Elections\", \"Fed Rates\", \"FIFA World Cup\", \"Trump\". */\n tags?: string[];\n /** Filter by source venue (e.g. 'polymarket', 'kalshi', 'myriad'). `exchange` is an alias. */\n sourceExchange?: string;\n /** Alias for `sourceExchange`. */\n exchange?: string;\n}\n\n/**\nParameters for `fetchSeries`. Venues that don't expose a series concept\nreturn an empty array regardless of the filters.\n/\nexport interface SeriesFetchParams {\n /** Direct lookup by venue-native series id (e.g. \"KXATPMATCH\" on Kalshi, \"atp\" or \"1\" on Polymarket Gamma). When set, the result is the matching series with its events populated where the venue supports it. */\n id?: string;\n /** Lookup by series slug (e.g. \"wta\", \"nfl\"). */\n slug?: string;\n /** Keyword search across series title / description. */\n query?: string;\n /** Filter by recurrence cadence ('daily', 'weekly', 'annual', ...). */\n recurrence?: string;\n /** Maximum number of results to return. */\n limit?: number;\n /** Pagination offset. */\n offset?: number;\n}\n\n/**\nDeprecated - use OHLCVParams or TradesParams instead. Resolution is optional for backward compatibility.\n/\nexport interface HistoryFilterParams {\n resolution?: CandleInterval; // Optional for backward compatibility\n /** Start of the time range */\n start?: Date;\n /** End of the time range */\n end?: Date;\n /** Maximum number of results to return */\n limit?: number;\n}\n\nexport interface OHLCVParams {\n resolution: CandleInterval; // Required for candle aggregation\n /** Start of the time range */\n start?: Date;\n /** End of the time range */\n end?: Date;\n /** Maximum number of results to return */\n limit?: number;\n}\n\n/**\nParameters for fetching trade history. No resolution parameter - trades are discrete events.\n/\n/** Maximum allowed value for `TradesParams.limit`. */\nexport const MAX_TRADES_LIMIT = 1000;\n\nexport interface TradesParams {\n // No resolution - trades are discrete events, not aggregated\n /** Start of the time range */\n start?: Date;\n /** End of the time range */\n end?: Date;\n /** Maximum number of results to return (max {@link MAX_TRADES_LIMIT}) */\n limit?: number;\n}\n\nexport interface MyTradesParams {\n outcomeId?: string; // filter to specific outcome/ticker\n marketId?: string; // filter to specific market\n /** Only return records after this date */\n since?: Date;\n /** Only return records before this date */\n until?: Date;\n /** Maximum number of results to return */\n limit?: number;\n cursor?: string; // for Kalshi cursor pagination\n}\n\nexport interface FetchOrderBookParams {\n /** Outcome side: 'yes' or 'no'. Required for exchanges like Limitless\n where the API returns a single orderbook per market. */\n side?: 'yes' | 'no';\n /** Outcome alias: 'yes' or 'no', or an outcome token ID. When set,\n the first argument is treated as a market ID and this value selects\n which outcome's order book to fetch. Accepts the literal strings\n 'yes'/'no' (resolved via a market lookup) or a raw outcome token ID. */\n outcome?: string;\n /** Unix timestamp (ms) — fetch a historical snapshot at or before this\n time, or the start of a range when combined with `until` (hosted API only). */\n since?: number;\n /** Unix timestamp (ms) — end of a historical range. When combined with\n `since`, returns an array of reconstructed L2 OrderBook snapshots\n between `since` and `until` (hosted API only). */\n until?: number;\n}\n\nexport interface OrderHistoryParams {\n marketId?: string; // required for Limitless (slug)\n /** Only return records after this date */\n since?: Date;\n /** Only return records before this date */\n until?: Date;\n /** Maximum number of results to return */\n limit?: number;\n /** Opaque pagination cursor from a previous response */\n cursor?: string;\n}\n\n// ----------------------------------------------------------------------------\n// Filtering Types\n// ----------------------------------------------------------------------------\n\nexport interface MarketFilterCriteria {\n // Text search\n text?: string;\n searchIn?: ('title' | 'description' | 'category' | 'tags' | 'outcomes')[]; // Default: ['title']\n\n // Numeric range filters\n volume24h?: { min?: number; max?: number };\n /** Filter by total (lifetime) volume range */\n volume?: { min?: number; max?: number };\n /** Filter by current liquidity range */\n liquidity?: { min?: number; max?: number };\n /** Filter by open interest range */\n openInterest?: { min?: number; max?: number };\n\n // Date filters\n resolutionDate?: {\n before?: Date;\n after?: Date;\n };\n\n // Category/tag filters\n /** Filter by category. Common values: \"Sports\", \"Politics\", \"Crypto\", \"Bitcoin\", \"Soccer\", \"Economic Policy\" (Polymarket) or \"Sports\", \"Mentions\" (Kalshi). */\n category?: string;\n /** Match markets that have ANY of these tags. Examples: [\"Crypto\", \"Crypto Prices\"], [\"Politics\", \"Elections\"], [\"Sports\", \"FIFA World Cup\"]. */\n tags?: string[];\n\n // Price filters (for binary markets)\n price?: {\n outcome: 'yes' | 'no' | 'up' | 'down';\n min?: number; // 0.0 to 1.0\n max?: number;\n };\n\n // Price change filters\n priceChange24h?: {\n outcome: 'yes' | 'no' | 'up' | 'down';\n min?: number; // e.g., -0.1 for 10% drop\n max?: number;\n };\n}\n\nexport type MarketFilterFunction = (market: UnifiedMarket) => boolean;\n\nexport interface EventFilterCriteria {\n // Text search\n text?: string;\n searchIn?: ('title' | 'description' | 'category' | 'tags')[]; // Default: ['title']\n\n // Category/tag filters\n /** Filter by category. Common values: \"Sports\", \"Politics\", \"Crypto\", \"Bitcoin\", \"Soccer\", \"Economic Policy\" (Polymarket) or \"Sports\", \"Mentions\" (Kalshi). */\n category?: string;\n /** Match events that have ANY of these tags. Examples: [\"Crypto\"], [\"Politics\", \"Geopolitics\", \"Middle East\"], [\"Sports\", \"FIFA World Cup\"]. */\n tags?: string[];\n\n // Filter by contained markets\n marketCount?: { min?: number; max?: number };\n totalVolume?: { min?: number; max?: number }; // Sum of market volumes\n}\n\nexport type EventFilterFunction = (event: UnifiedEvent) => boolean;\n\n// ----------------------------------------------------------------------------\n// Capability Map (ccxt-style exchange.has)\n// ----------------------------------------------------------------------------\n\nexport type ExchangeCapability = true | false | 'emulated';\n\nexport interface ExchangeHas {\n /** Whether this exchange supports fetching markets. */\n fetchMarkets: ExchangeCapability;\n /** Whether this exchange supports fetching events. */\n fetchEvents: ExchangeCapability;\n /** Whether this exchange exposes a recurring-series concept (Series -> Event -> Market -> Outcome). Venues without one return `false` and an empty array from `fetchSeries`. */\n fetchSeries: ExchangeCapability;\n /** Whether this exchange supports fetching OHLCV candles. */\n fetchOHLCV: ExchangeCapability;\n /** Whether this exchange supports fetching the order book. */\n fetchOrderBook: ExchangeCapability;\n /** Whether this exchange supports fetching multiple market order books. */\n fetchOrderBooks: ExchangeCapability;\n /** Whether this exchange supports fetching public trades. */\n fetchTrades: ExchangeCapability;\n /** Whether this exchange supports creating orders. */\n createOrder: ExchangeCapability;\n /** Whether this exchange supports cancelling orders. */\n cancelOrder: ExchangeCapability;\n /** Whether this exchange supports fetching a single order by id. */\n fetchOrder: ExchangeCapability;\n /** Whether this exchange supports fetching open orders. */\n fetchOpenOrders: ExchangeCapability;\n /** Whether this exchange supports fetching account positions. */\n fetchPositions: ExchangeCapability;\n /** Whether this exchange supports fetching account balances. */\n fetchBalance: ExchangeCapability;\n /** Whether this exchange supports subscribing to an on-chain address for updates. */\n watchAddress: ExchangeCapability;\n /** Whether this exchange supports unsubscribing from a watched address. */\n unwatchAddress: ExchangeCapability;\n /** Whether this exchange supports streaming order book updates. */\n watchOrderBook: ExchangeCapability;\n /** Whether this exchange supports batch-subscribing to multiple order book streams. */\n watchOrderBooks: ExchangeCapability;\n /** Whether this exchange supports unsubscribing from an order book stream. */\n unwatchOrderBook: ExchangeCapability;\n /** Whether this exchange supports streaming trade updates. */\n watchTrades: ExchangeCapability;\n /** Whether this exchange supports fetching the authenticated user's trade history. */\n fetchMyTrades: ExchangeCapability;\n /** Whether this exchange supports fetching closed orders. */\n fetchClosedOrders: ExchangeCapability;\n /** Whether this exchange supports fetching all orders (open and closed). */\n fetchAllOrders: ExchangeCapability;\n /** Whether this exchange supports building a signed order without submitting it. */\n buildOrder: ExchangeCapability;\n /** Whether this exchange supports submitting a pre-built order. */\n submitOrder: ExchangeCapability;\n /** Whether this exchange supports fetching cross-venue market matches. */\n fetchMarketMatches: ExchangeCapability;\n /** @deprecated Use {@link fetchMarketMatches} instead. */\n fetchMatches: ExchangeCapability;\n /** Whether this exchange supports fetching cross-venue event matches. */\n fetchEventMatches: ExchangeCapability;\n /** Whether this exchange supports comparing prices across venues. */\n compareMarketPrices: ExchangeCapability;\n /** Whether this exchange supports finding related markets across venues. */\n fetchRelatedMarkets: ExchangeCapability;\n /** Whether this exchange supports fetching matched markets across venues. */\n fetchMatchedMarkets: ExchangeCapability;\n /** @deprecated Use {@link fetchMatchedMarkets} instead. */\n fetchMatchedPrices: ExchangeCapability;\n /** @deprecated Use {@link fetchRelatedMarkets} instead. */\n fetchHedges: ExchangeCapability;\n /** @deprecated Use {@link fetchMatchedMarkets} instead. */\n fetchArbitrage: ExchangeCapability;\n}\n\n/**\nOptional authentication credentials for exchange operations.\n/\nexport interface ExchangeCredentials {\n // Standard API authentication (Kalshi, etc.)\n apiKey?: string;\n /** Standard API secret for HMAC-authenticated exchanges */\n apiSecret?: string;\n /** Standard API passphrase for HMAC-authenticated exchanges */\n passphrase?: string;\n /** Metaculus: `Authorization: Token ` for higher rate limits */\n apiToken?: string;\n\n // Blockchain-based authentication (Polymarket)\n privateKey?: string; // Required for Polymarket L1 auth\n\n // Polymarket-specific L2 fields\n signatureType?: number | string; // 0 = EOA, 1 = Poly Proxy, 2 = Gnosis Safe (Can also use 'eoa', 'polyproxy', 'gnosis_safe')\n funderAddress?: string; // The address funding the trades (defaults to signer address)\n\n // Limitless: wallet address for delegated signing profile lookup\n walletAddress?: string;\n\n // Optional base URL override for venue API (e.g., proxy for geo-restricted venues)\n baseUrl?: string;\n}\n\nexport interface ExchangeOptions {\n /**\nHow long (ms) a market snapshot created by `fetchMarketsPaginated` remains valid\nbefore being discarded and re-fetched from the API on the next call.\nDefaults to 0 (no TTL — the snapshot is re-fetched on every initial call).\n/\n snapshotTTL?: number;\n}\n\n/** Shape returned by fetchMarketsPaginated */\nexport interface PaginatedMarketsResult {\n /** The page of unified markets */\n data: UnifiedMarket[];\n /** Total number of markets in the snapshot */\n total: number;\n /** Cursor to pass to the next call, or undefined if this is the last page */\n nextCursor?: string;\n}\n\n/** Shape returned by fetchEventsPaginated */\nexport interface PaginatedEventsResult {\n /** The page of unified events */\n data: UnifiedEvent[];\n /** Total number of events in the snapshot */\n total: number;\n /** Cursor to pass to the next call, or undefined if this is the last page */\n nextCursor?: string;\n}\n\n// ----------------------------------------------------------------------------\n// Base Exchange Class\n// ----------------------------------------------------------------------------\n\nexport abstract class PredictionMarketExchange {\n [key: string]: any; // Allow dynamic method assignment for implicit API\n\n public verbose: boolean = false;\n public http: AxiosInstance;\n public enableRateLimit: boolean = true;\n // Market Cache\n public markets: Record = {};\n public marketsBySlug: Record = {};\n public loadedMarkets: boolean = false;\n /**\nCapability map derived automatically from method overrides at runtime.\nExchanges do NOT need to declare this manually -- if a subclass overrides\na method (and the override does not throw \"not supported\"), it is `true`.\nTo mark a capability as `'emulated'`, add its key to `emulatedCapabilities`.", "params": [], "returns": { "type": "ExchangeHas", @@ -12,8 +12,8 @@ "source": "BaseExchange.ts:43" }, "implicitApi": { - "summary": "Override in subclasses to force specific capability values.\r", - "description": "Use `'emulated'` for methods backed by a non-native mechanism,\r\nor `false` for methods that override the base only to throw a\r\nbetter error message (e.g. \"pari-mutuel bets cannot be cancelled\").\r\n/\r\n protected readonly capabilityOverrides: Partial> = {};\r\n\r\n protected credentials?: ExchangeCredentials;\r\n // Implicit API (merged across multiple defineImplicitApi calls)\r\n protected apiDescriptor?: ApiDescriptor;\r\n private _throttler: Throttler;\r\n // Snapshot state for cursor-based pagination\r\n private _snapshotTTL: number;\r\n private _snapshot?: { markets: UnifiedMarket[]; takenAt: number; id: string };\r\n private _eventSnapshot?: { events: UnifiedEvent[]; takenAt: number; id: string };\r\n private apiDescriptors: ApiDescriptor[] = [];\r\n\r\n constructor(credentials?: ExchangeCredentials, options?: ExchangeOptions) {\r\n this.credentials = credentials;\r\n this._snapshotTTL = options?.snapshotTTL ?? 0;\r\n this.http = axios.create({\r\n headers: {\r\n 'User-Agent': `pmxt (https://github.com/pmxt-dev/pmxt)`\r\n },\r\n paramsSerializer: {\r\n serialize: (params) => {\r\n const sp = new URLSearchParams();\r\n for (const [k, v] of Object.entries(params)) {\r\n if (v === undefined || v === null) continue;\r\n if (Array.isArray(v)) v.forEach((x) => sp.append(k, String(x)));\r\n else sp.append(k, String(v));\r\n }\r\n return sp.toString();\r\n },\r\n },\r\n });\r\n this._throttler = new Throttler({\r\n refillRate: 1 / this._rateLimit,\r\n capacity: 1,\r\n delay: 1,\r\n });\r\n\r\n // Rate Limit Interceptor\r\n this.http.interceptors.request.use(async (config: InternalAxiosRequestConfig) => {\r\n if (this.enableRateLimit) {\r\n await this._throttler.throttle();\r\n }\r\n return config;\r\n });\r\n\r\n // Request Interceptor\r\n this.http.interceptors.request.use((config: InternalAxiosRequestConfig) => {\r\n if (this.verbose) {\r\n logger.debug(`-> ${config.method?.toUpperCase()} ${config.url}`);\r\n if (config.params) logger.debug('params:', { params: config.params });\r\n if (config.data) logger.debug('body:', { body: config.data });\r\n }\r\n return config;\r\n });\r\n\r\n // Response Interceptor\r\n this.http.interceptors.response.use(\r\n (response: AxiosResponse) => {\r\n if (this.verbose) {\r\n logger.debug(`<- ${response.status} ${response.statusText} ${response.config.url}`);\r\n }\r\n return response;\r\n },\r\n (error: any) => {\r\n if (this.verbose) {\r\n logger.debug(`REQUEST FAILED: ${error.config?.url}`, {\r\n error: error.message,\r\n status: error.response?.status,\r\n data: error.response?.data,\r\n });\r\n }\r\n return Promise.reject(error);\r\n }\r\n );\r\n }\r\n\r\n private _rateLimit: number = 1000;\r\n\r\n get rateLimit(): number {\r\n return this._rateLimit;\r\n }\r\n\r\n set rateLimit(value: number) {\r\n this._rateLimit = value;\r\n this._throttler = new Throttler({\r\n refillRate: 1 / value,\r\n capacity: 1,\r\n delay: 1,\r\n });\r\n }\r\n\r\n abstract get name(): string;\r\n\r\n /**\r\nIntrospection getter: returns info about all implicit API methods.", + "summary": "Override in subclasses to force specific capability values.", + "description": "Use `'emulated'` for methods backed by a non-native mechanism,\nor `false` for methods that override the base only to throw a\nbetter error message (e.g. \"pari-mutuel bets cannot be cancelled\").\n/\n protected readonly capabilityOverrides: Partial> = {};\n\n protected credentials?: ExchangeCredentials;\n // Implicit API (merged across multiple defineImplicitApi calls)\n protected apiDescriptor?: ApiDescriptor;\n private _throttler: Throttler;\n // Snapshot state for cursor-based pagination\n private _snapshotTTL: number;\n private _snapshot?: { markets: UnifiedMarket[]; takenAt: number; id: string };\n private _eventSnapshot?: { events: UnifiedEvent[]; takenAt: number; id: string };\n private apiDescriptors: ApiDescriptor[] = [];\n\n constructor(credentials?: ExchangeCredentials, options?: ExchangeOptions) {\n this.credentials = credentials;\n this._snapshotTTL = options?.snapshotTTL ?? 0;\n this.http = axios.create({\n headers: {\n 'User-Agent': `pmxt (https://github.com/pmxt-dev/pmxt)`\n },\n paramsSerializer: {\n serialize: (params) => {\n const sp = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v === undefined || v === null) continue;\n if (Array.isArray(v)) v.forEach((x) => sp.append(k, String(x)));\n else sp.append(k, String(v));\n }\n return sp.toString();\n },\n },\n });\n this._throttler = new Throttler({\n refillRate: 1 / this._rateLimit,\n capacity: 1,\n delay: 1,\n });\n\n // Rate Limit Interceptor\n this.http.interceptors.request.use(async (config: InternalAxiosRequestConfig) => {\n if (this.enableRateLimit) {\n await this._throttler.throttle();\n }\n return config;\n });\n\n // Request Interceptor\n this.http.interceptors.request.use((config: InternalAxiosRequestConfig) => {\n if (this.verbose) {\n logger.debug(`-> ${config.method?.toUpperCase()} ${config.url}`);\n if (config.params) logger.debug('params:', { params: config.params });\n if (config.data) logger.debug('body:', { body: config.data });\n }\n return config;\n });\n\n // Response Interceptor\n this.http.interceptors.response.use(\n (response: AxiosResponse) => {\n if (this.verbose) {\n logger.debug(`<- ${response.status} ${response.statusText} ${response.config.url}`);\n }\n return response;\n },\n (error: any) => {\n if (this.verbose) {\n logger.debug(`REQUEST FAILED: ${error.config?.url}`, {\n error: error.message,\n status: error.response?.status,\n data: error.response?.data,\n });\n }\n return Promise.reject(error);\n }\n );\n }\n\n private _rateLimit: number = 1000;\n\n get rateLimit(): number {\n return this._rateLimit;\n }\n\n set rateLimit(value: number) {\n this._rateLimit = value;\n this._throttler = new Throttler({\n refillRate: 1 / value,\n capacity: 1,\n delay: 1,\n });\n }\n\n abstract get name(): string;\n\n /**\nIntrospection getter: returns info about all implicit API methods.", "params": [], "returns": { "type": "ImplicitApiMethodInfo[]", @@ -22,8 +22,8 @@ "source": "BaseExchange.ts:460" }, "loadMarkets": { - "summary": "Load and cache all markets from the exchange into `this.markets` and `this.marketsBySlug`.\r", - "description": "Subsequent calls return the cached result without hitting the API again.\r\n\nThis is the correct way to paginate or iterate over markets without drift.\r\nBecause `fetchMarkets()` always hits the API, repeated calls with different `offset`\r\nvalues may return inconsistent results if the exchange reorders or adds markets between\r\nrequests. Use `loadMarkets()` once to get a stable snapshot, then paginate over\r\n`Object.values(exchange.markets)` locally.", + "summary": "Load and cache all markets from the exchange into `this.markets` and `this.marketsBySlug`.", + "description": "Subsequent calls return the cached result without hitting the API again.\n\nThis is the correct way to paginate or iterate over markets without drift.\nBecause `fetchMarkets()` always hits the API, repeated calls with different `offset`\nvalues may return inconsistent results if the exchange reorders or adds markets between\nrequests. Use `loadMarkets()` once to get a stable snapshot, then paginate over\n`Object.values(exchange.markets)` locally.", "params": [ { "name": "reload", @@ -39,7 +39,7 @@ "source": "BaseExchange.ts:573" }, "fetchMarkets": { - "summary": "Fetch markets with optional filtering, search, or slug lookup.\r", + "summary": "Fetch markets with optional filtering, search, or slug lookup.", "description": "Always hits the exchange API — results reflect the live state at the time of the call.", "params": [ { @@ -80,14 +80,14 @@ "description": "Array of unified markets" }, "notes": [ - "ordering — exchanges may reorder or add markets between requests. For stable iteration\r\nacross pages, use `loadMarkets()` and paginate over `Object.values(exchange.markets)`.", + "ordering — exchanges may reorder or add markets between requests. For stable iteration\nacross pages, use `loadMarkets()` and paginate over `Object.values(exchange.markets)`.", "Some exchanges (like Limitless) may only support status 'active' for search results." ], "source": "BaseExchange.ts:610" }, "fetchMarketsPaginated": { - "summary": "Fetch markets with cursor-based pagination backed by a stable in-memory snapshot.\r", - "description": "On the first call (or when no cursor is supplied), fetches all markets once and\r\ncaches them. Subsequent calls with a cursor returned from a previous call slice\r\ndirectly from the cached snapshot — no additional API calls are made.\r\n\nThe snapshot is invalidated after `snapshotTTL` ms (configured via `ExchangeOptions`\r\nin the constructor). A request using a cursor from an expired snapshot throws\r\n`'Cursor has expired'`.", + "summary": "Fetch markets with cursor-based pagination backed by a stable in-memory snapshot.", + "description": "On the first call (or when no cursor is supplied), fetches all markets once and\ncaches them. Subsequent calls with a cursor returned from a previous call slice\ndirectly from the cached snapshot — no additional API calls are made.\n\nThe snapshot is invalidated after `snapshotTTL` ms (configured via `ExchangeOptions`\nin the constructor). A request using a cursor from an expired snapshot throws\n`'Cursor has expired'`.", "params": [ { "name": "params", @@ -113,8 +113,8 @@ "source": "BaseExchange.ts:665" }, "fetchEventsPaginated": { - "summary": "Paginated variant of {@link fetchEvents}.\r", - "description": "On the first call (no `cursor`), all events are fetched from the exchange\r\nand cached in an in-memory snapshot. A cursor is returned along with the\r\nfirst page. Subsequent calls with that cursor serve additional pages\r\ndirectly from the cached snapshot -- no additional API calls are made.\r\n\nThe snapshot is invalidated after `snapshotTTL` ms (configured via `ExchangeOptions`\r\nin the constructor). A request using a cursor from an expired snapshot throws\r\n`'Cursor has expired'`.", + "summary": "Paginated variant of {@link fetchEvents}.", + "description": "On the first call (no `cursor`), all events are fetched from the exchange\nand cached in an in-memory snapshot. A cursor is returned along with the\nfirst page. Subsequent calls with that cursor serve additional pages\ndirectly from the cached snapshot -- no additional API calls are made.\n\nThe snapshot is invalidated after `snapshotTTL` ms (configured via `ExchangeOptions`\nin the constructor). A request using a cursor from an expired snapshot throws\n`'Cursor has expired'`.", "params": [ { "name": "params", @@ -140,7 +140,7 @@ "source": "BaseExchange.ts:734" }, "fetchEvents": { - "summary": "Fetch events with optional keyword search.\r", + "summary": "Fetch events with optional keyword search.", "description": "Events group related markets together (e.g., \"Who will be Fed Chair?\" contains multiple candidate markets).", "params": [ { @@ -178,8 +178,8 @@ "source": "BaseExchange.ts:803" }, "fetchSeries": { - "summary": "Fetch the recurring series (fourth tier above Event -> Market -> Outcome)\r", - "description": "that this venue exposes. Returns an empty array on venues without a\r\nseries concept (Limitless, Smarkets, Probable, Metaculus, Baozi,\r\nHyperliquid, SuiBets, Polymarket US).\r\n\n- `params.id` -> a single matching series with its events populated where supported.\r\n- no params -> the full list, typically without nested events for payload size.", + "summary": "Fetch the recurring series (fourth tier above Event -> Market -> Outcome)", + "description": "that this venue exposes. Returns an empty array on venues without a\nseries concept (Limitless, Smarkets, Probable, Metaculus, Baozi,\nHyperliquid, SuiBets, Polymarket US).\n\n- `params.id` -> a single matching series with its events populated where supported.\n- no params -> the full list, typically without nested events for payload size.", "params": [ { "name": "params", @@ -195,7 +195,7 @@ "source": "BaseExchange.ts:842" }, "fetchMarket": { - "summary": "Fetch a single market by lookup parameters.\r", + "summary": "Fetch a single market by lookup parameters.", "description": "Convenience wrapper around fetchMarkets() that returns a single result or throws MarketNotFound.", "params": [ { @@ -212,7 +212,7 @@ "source": "BaseExchange.ts:860" }, "fetchEvent": { - "summary": "Fetch a single event by lookup parameters.\r", + "summary": "Fetch a single event by lookup parameters.", "description": "Convenience wrapper around fetchEvents() that returns a single result or throws EventNotFound.", "params": [ { @@ -229,8 +229,8 @@ "source": "BaseExchange.ts:960" }, "fetchEventMetadata": { - "summary": "Fetch venue-native metadata for a specific event when the exchange\r", - "description": "exposes a dedicated metadata endpoint.\r\n\nKalshi implements this for `GET /events/{event_ticker}/metadata`.", + "summary": "Fetch venue-native metadata for a specific event when the exchange", + "description": "exposes a dedicated metadata endpoint.\n\nKalshi implements this for `GET /events/{event_ticker}/metadata`.", "params": [ { "name": "eventTicker", @@ -274,8 +274,8 @@ "source": "BaseExchange.ts:988" }, "fetchOrderBook": { - "summary": "Fetch the order book (bids/asks) for a specific outcome.\r", - "description": "Supports live and historical queries. For historical data, pass `since`\r\nto get a single snapshot, or `since` + `until` to get an array of fully\r\nreconstructed L2 books from the archive. Range queries return up to\r\n`limit` snapshots (default 100, max 1000).", + "summary": "Fetch the order book (bids/asks) for a specific outcome.", + "description": "Supports live and historical queries. For historical data, pass `since`\nto get a single snapshot, or `since` + `until` to get an array of fully\nreconstructed L2 books from the archive. Range queries return up to\n`limit` snapshots (default 100, max 1000).", "params": [ { "name": "outcomeId", @@ -303,7 +303,7 @@ "source": "BaseExchange.ts:1003" }, "fetchOrderBooks": { - "summary": "Batch variant of {@link fetchOrderBook}. Fetches order books for\r", + "summary": "Batch variant of {@link fetchOrderBook}. Fetches order books for", "description": "multiple outcomes in a single request where the exchange supports it.", "params": [ { @@ -363,8 +363,8 @@ "source": "BaseExchange.ts:1061" }, "buildOrder": { - "summary": "Build an order payload without submitting it to the exchange.\r", - "description": "Returns the exchange-native signed order or request body for inspection,\r\nforwarding through a middleware layer, or deferred submission via submitOrder().", + "summary": "Build an order payload without submitting it to the exchange.", + "description": "Returns the exchange-native signed order or request body for inspection,\nforwarding through a middleware layer, or deferred submission via submitOrder().", "params": [ { "name": "params", @@ -603,7 +603,7 @@ "source": "BaseExchange.ts:1183" }, "getExecutionPrice": { - "summary": "Calculate the volume-weighted average execution price for a given order size.\r", + "summary": "Calculate the volume-weighted average execution price for a given order size.", "description": "Returns 0 if the order cannot be fully filled.", "params": [ { @@ -661,7 +661,7 @@ "source": "BaseExchange.ts:1206" }, "filterMarkets": { - "summary": "Filter a list of markets by criteria.\r", + "summary": "Filter a list of markets by criteria.", "description": "Can filter by string query, structured criteria object, or custom filter function.", "params": [ { @@ -684,7 +684,7 @@ "source": "BaseExchange.ts:1222" }, "filterEvents": { - "summary": "Filter a list of events by criteria.\r", + "summary": "Filter a list of events by criteria.", "description": "Can filter by string query, structured criteria object, or custom filter function.", "params": [ { @@ -707,7 +707,7 @@ "source": "BaseExchange.ts:1382" }, "watchOrderBook": { - "summary": "Watch order book updates in real-time via WebSocket.\r", + "summary": "Watch order book updates in real-time via WebSocket.", "description": "Returns a promise that resolves with the next order book update. Call repeatedly in a loop to stream updates (CCXT Pro pattern).", "params": [ { @@ -736,8 +736,8 @@ "source": "BaseExchange.ts:1478" }, "watchOrderBooks": { - "summary": "Watch multiple order books simultaneously via WebSocket.\r", - "description": "Returns a promise that resolves with a record of order book snapshots keyed by ID.\r\nExchanges with native batch support (e.g. Kalshi) send a single subscribe message\r\nfor all tickers; others fall back to individual watchOrderBook calls.", + "summary": "Watch multiple order books simultaneously via WebSocket.", + "description": "Returns a promise that resolves with a record of order book snapshots keyed by ID.\nExchanges with native batch support (e.g. Kalshi) send a single subscribe message\nfor all tickers; others fall back to individual watchOrderBook calls.", "params": [ { "name": "outcomeIds", @@ -782,7 +782,7 @@ "source": "BaseExchange.ts:1519" }, "watchTrades": { - "summary": "Watch trade executions in real-time via WebSocket.\r", + "summary": "Watch trade executions in real-time via WebSocket.", "description": "Returns a promise that resolves with the next trade(s). Call repeatedly in a loop to stream updates (CCXT Pro pattern).", "params": [ { @@ -817,8 +817,8 @@ "source": "BaseExchange.ts:1532" }, "watchAddress": { - "summary": "Stream activity for a public wallet address\r", - "description": "Returns a promise that resolves with the next activity snapshot whenever a change\r\nis detected. Call repeatedly in a loop to stream updates (CCXT Pro pattern).", + "summary": "Stream activity for a public wallet address", + "description": "Returns a promise that resolves with the next activity snapshot whenever a change\nis detected. Call repeatedly in a loop to stream updates (CCXT Pro pattern).", "params": [ { "name": "address", @@ -857,7 +857,7 @@ "source": "BaseExchange.ts:1559" }, "close": { - "summary": "Close all WebSocket connections and clean up resources.\r", + "summary": "Close all WebSocket connections and clean up resources.", "description": "Call this when you're done streaming to properly release connections.", "params": [], "returns": { @@ -867,8 +867,8 @@ "source": "BaseExchange.ts:1568" }, "fetchMarketMatches": { - "summary": "Find the same or related market on other venues. Two modes:\r", - "description": "**Lookup mode** (marketId/slug/url provided): Given a market on one venue, discover\r\nsemantically equivalent markets across every other venue PMXT ingests.\r\n\n**Browse mode** (no identifier): Returns all matched market pairs from the catalog.\r\nSupports query, category, minDifference, and sort params for filtering.", + "summary": "Find the same or related market on other venues. Two modes:", + "description": "**Lookup mode** (marketId/slug/url provided): Given a market on one venue, discover\nsemantically equivalent markets across every other venue PMXT ingests.\n\n**Browse mode** (no identifier): Returns all matched market pairs from the catalog.\nSupports query, category, minDifference, and sort params for filtering.", "params": [ { "name": "params", @@ -901,8 +901,8 @@ "source": "BaseExchange.ts:1598" }, "fetchEventMatches": { - "summary": "Find the same or related event on other venues. Two modes:\r", - "description": "**Lookup mode** (eventId/slug provided): Given an event on one venue, discover\r\nsemantically equivalent events across every other venue PMXT ingests.\r\n\n**Browse mode** (no identifier): Returns all matched event pairs from the catalog.\r\nSupports query and category params for filtering.", + "summary": "Find the same or related event on other venues. Two modes:", + "description": "**Lookup mode** (eventId/slug provided): Given an event on one venue, discover\nsemantically equivalent events across every other venue PMXT ingests.\n\n**Browse mode** (no identifier): Returns all matched event pairs from the catalog.\nSupports query and category params for filtering.", "params": [ { "name": "params", @@ -935,7 +935,7 @@ "source": "BaseExchange.ts:1622" }, "fetchRelatedMarkets": { - "summary": "Find related markets across venues. Discovers subset/superset market relationships\r", + "summary": "Find related markets across venues. Discovers subset/superset market relationships", "description": "where one market's outcome implies another, with live prices.", "params": [ { @@ -1020,7 +1020,7 @@ "source": "BaseExchange.ts:1672" }, "watchPrices": { - "summary": "Watch AMM price updates for a market address (Limitless only).\r", + "summary": "Watch AMM price updates for a market address (Limitless only).", "description": "Requires WebSocket connection.", "params": [ { @@ -1044,7 +1044,7 @@ "source": "index.ts:492" }, "watchUserPositions": { - "summary": "Watch user positions in real-time (Limitless only).\r", + "summary": "Watch user positions in real-time (Limitless only).", "description": "Requires API key authentication.", "params": [ { @@ -1062,7 +1062,7 @@ "source": "index.ts:504" }, "watchUserTransactions": { - "summary": "Watch user transactions in real-time (Limitless only).\r", + "summary": "Watch user transactions in real-time (Limitless only).", "description": "Requires API key authentication.", "params": [ { @@ -1080,8 +1080,8 @@ "source": "index.ts:516" }, "initAuth": { - "summary": "Initialize L2 API credentials for implicit API signing.\r", - "description": "Must be called before using private implicit API endpoints if only\r\na privateKey was provided (not apiKey/apiSecret/passphrase).", + "summary": "Initialize L2 API credentials for implicit API signing.", + "description": "Must be called before using private implicit API endpoints if only\na privateKey was provided (not apiKey/apiSecret/passphrase).", "params": [], "returns": { "type": "void", @@ -1091,8 +1091,8 @@ "source": "index.ts:144" }, "preWarmMarket": { - "summary": "Pre-warm the SDK's internal caches for a market outcome.\r", - "description": "Fetches tick size, fee rate, and neg-risk in parallel so that subsequent\r\n`createOrder` calls skip those lookups and hit only `POST /order`.\r\nCall this when you start watching a market.", + "summary": "Pre-warm the SDK's internal caches for a market outcome.", + "description": "Fetches tick size, fee rate, and neg-risk in parallel so that subsequent\n`createOrder` calls skip those lookups and hit only `POST /order`.\nCall this when you start watching a market.", "params": [ { "name": "outcomeId", @@ -1145,8 +1145,8 @@ "source": "index.ts:171" }, "watchAllOrderBooks": { - "summary": "Stream all orderbook updates across venues via the hosted WebSocket API.\r", - "description": "Returns a promise that resolves with the next book event.\r\nCall repeatedly in a loop to stream updates (CCXT Pro pattern).\r\nRequires hosted mode (`pmxtApiKey` set).", + "summary": "Stream all orderbook updates across venues via the hosted WebSocket API.", + "description": "Returns a promise that resolves with the next book event.\nCall repeatedly in a loop to stream updates (CCXT Pro pattern).\nRequires hosted mode (`pmxtApiKey` set).", "params": [ { "name": "venues", diff --git a/sdks/python/API_REFERENCE.md b/sdks/python/API_REFERENCE.md index 04ac6356..3ec9dfb3 100644 --- a/sdks/python/API_REFERENCE.md +++ b/sdks/python/API_REFERENCE.md @@ -133,7 +133,6 @@ exchange.has Load and cache all markets from the exchange into `this.markets` and `this.marketsBySlug`. - **Signature:** ```python @@ -159,7 +158,6 @@ exchange.load_markets(reload=True) Fetch markets with optional filtering, search, or slug lookup. - **Signature:** ```python @@ -195,7 +193,6 @@ Some exchanges (like Limitless) may only support status 'active' for search resu Fetch markets with cursor-based pagination backed by a stable in-memory snapshot. - **Signature:** ```python @@ -223,7 +220,6 @@ exchange.fetch_markets_paginated(limit=10, cursor="...") Paginated variant of {@link fetchEvents}. - **Signature:** ```python @@ -251,7 +247,6 @@ exchange.fetch_events_paginated(limit=10, cursor="...") Fetch events with optional keyword search. - **Signature:** ```python @@ -283,7 +278,6 @@ Some exchanges (like Limitless) may only support status 'active' for search resu Fetch the recurring series (fourth tier above Event -> Market -> Outcome) - **Signature:** ```python @@ -309,7 +303,6 @@ exchange.fetch_series() Fetch a single market by lookup parameters. - **Signature:** ```python @@ -335,7 +328,6 @@ exchange.fetch_market() Fetch a single event by lookup parameters. - **Signature:** ```python @@ -361,7 +353,6 @@ exchange.fetch_event() Fetch venue-native metadata for a specific event when the exchange - **Signature:** ```python @@ -417,7 +408,6 @@ Common resolutions: '1m' | '5m' | '15m' | '1h' | '6h' | '1d'. Arbitrary interval Fetch the order book (bids/asks) for a specific outcome. - **Signature:** ```python @@ -445,7 +435,6 @@ exchange.fetch_order_book(outcome_id="abc123", limit=10, params={}) Batch variant of {@link fetchOrderBook}. Fetches order books for - **Signature:** ```python @@ -531,7 +520,6 @@ exchange.create_order( Build an order payload without submitting it to the exchange. - **Signature:** ```python @@ -813,7 +801,6 @@ exchange.fetch_balance(address="0xabc...") Calculate the volume-weighted average execution price for a given order size. - **Signature:** ```python @@ -870,7 +857,6 @@ exchange.get_execution_price_detailed(order_book=order_book, side="buy", amount= Filter a list of markets by criteria. - **Signature:** ```python @@ -898,7 +884,6 @@ exchange.filter_markets(markets=markets, criteria="Trump") Filter a list of events by criteria. - **Signature:** ```python @@ -926,7 +911,6 @@ exchange.filter_events(events=events, criteria="Trump") Watch order book updates in real-time via WebSocket. - **Signature:** ```python @@ -954,7 +938,6 @@ exchange.watch_order_book(outcome_id="abc123", limit=10, params={}) Watch multiple order books simultaneously via WebSocket. - **Signature:** ```python @@ -1007,7 +990,6 @@ exchange.unwatch_order_book(outcome_id="abc123") Watch trade executions in real-time via WebSocket. - **Signature:** ```python @@ -1036,7 +1018,6 @@ exchange.watch_trades(outcome_id="abc123", address="0xabc...", since=17100000000 Stream activity for a public wallet address - **Signature:** ```python @@ -1088,7 +1069,6 @@ exchange.unwatch_address(address="0xabc...") Close all WebSocket connections and clean up resources. - **Signature:** ```python @@ -1114,7 +1094,6 @@ exchange.close() Find the same or related market on other venues. Two modes: - **Signature:** ```python @@ -1165,7 +1144,6 @@ exchange.fetch_matches() Find the same or related event on other venues. Two modes: - **Signature:** ```python @@ -1216,7 +1194,6 @@ exchange.compare_market_prices() Find related markets across venues. Discovers subset/superset market relationships - **Signature:** ```python @@ -1341,7 +1318,6 @@ exchange.fetch_arbitrage() Watch AMM price updates for a market address (Limitless only). - > **Note**: This method is only available on **limitless** exchange. @@ -1372,7 +1348,6 @@ exchange.watch_prices(market_address="0xabc...", callback=handle_price_update) Watch user positions in real-time (Limitless only). - > **Note**: This method is only available on **limitless** exchange. @@ -1402,7 +1377,6 @@ exchange.watch_user_positions(callback=handle_position_update) Watch user transactions in real-time (Limitless only). - > **Note**: This method is only available on **limitless** exchange. @@ -1432,7 +1406,6 @@ exchange.watch_user_transactions(callback=handle_transaction_update) Initialize L2 API credentials for implicit API signing. - > **Note**: This method is only available on **polymarket** exchange. @@ -1460,7 +1433,6 @@ exchange.init_auth() Pre-warm the SDK's internal caches for a market outcome. - > **Note**: This method is only available on **polymarket** exchange. @@ -1543,7 +1515,6 @@ exchange.get_event_by_slug(slug="will-trump-win") Stream all orderbook updates across venues via the hosted WebSocket API. - **Signature:** ```python diff --git a/sdks/typescript/API_REFERENCE.md b/sdks/typescript/API_REFERENCE.md index f25b7756..63dd4365 100644 --- a/sdks/typescript/API_REFERENCE.md +++ b/sdks/typescript/API_REFERENCE.md @@ -135,7 +135,6 @@ exchange.has Load and cache all markets from the exchange into `this.markets` and `this.marketsBySlug`. - **Signature:** ```typescript @@ -161,7 +160,6 @@ await exchange.loadMarkets(true) Fetch markets with optional filtering, search, or slug lookup. - **Signature:** ```typescript @@ -197,7 +195,6 @@ Some exchanges (like Limitless) may only support status 'active' for search resu Fetch markets with cursor-based pagination backed by a stable in-memory snapshot. - **Signature:** ```typescript @@ -225,7 +222,6 @@ await exchange.fetchMarketsPaginated({ limit: 10, cursor: "..." }) Paginated variant of {@link fetchEvents}. - **Signature:** ```typescript @@ -253,7 +249,6 @@ await exchange.fetchEventsPaginated({ limit: 10, cursor: "..." }) Fetch events with optional keyword search. - **Signature:** ```typescript @@ -285,7 +280,6 @@ Some exchanges (like Limitless) may only support status 'active' for search resu Fetch the recurring series (fourth tier above Event -> Market -> Outcome) - **Signature:** ```typescript @@ -311,7 +305,6 @@ await exchange.fetchSeries() Fetch a single market by lookup parameters. - **Signature:** ```typescript @@ -337,7 +330,6 @@ await exchange.fetchMarket() Fetch a single event by lookup parameters. - **Signature:** ```typescript @@ -363,7 +355,6 @@ await exchange.fetchEvent() Fetch venue-native metadata for a specific event when the exchange - **Signature:** ```typescript @@ -419,7 +410,6 @@ Common resolutions: '1m' | '5m' | '15m' | '1h' | '6h' | '1d'. Arbitrary interval Fetch the order book (bids/asks) for a specific outcome. - **Signature:** ```typescript @@ -447,7 +437,6 @@ await exchange.fetchOrderBook("abc123", 10, {}) Batch variant of {@link fetchOrderBook}. Fetches order books for - **Signature:** ```typescript @@ -533,7 +522,6 @@ await exchange.createOrder({ Build an order payload without submitting it to the exchange. - **Signature:** ```typescript @@ -815,7 +803,6 @@ await exchange.fetchBalance("0xabc...") Calculate the volume-weighted average execution price for a given order size. - **Signature:** ```typescript @@ -872,7 +859,6 @@ await exchange.getExecutionPriceDetailed(orderBook, "buy", 50) Filter a list of markets by criteria. - **Signature:** ```typescript @@ -900,7 +886,6 @@ await exchange.filterMarkets(markets, "Trump") Filter a list of events by criteria. - **Signature:** ```typescript @@ -928,7 +913,6 @@ await exchange.filterEvents(events, "Trump") Watch order book updates in real-time via WebSocket. - **Signature:** ```typescript @@ -956,7 +940,6 @@ await exchange.watchOrderBook("abc123", 10, {}) Watch multiple order books simultaneously via WebSocket. - **Signature:** ```typescript @@ -1009,7 +992,6 @@ await exchange.unwatchOrderBook("abc123") Watch trade executions in real-time via WebSocket. - **Signature:** ```typescript @@ -1038,7 +1020,6 @@ await exchange.watchTrades("abc123", "0xabc...", 1710000000000, 50) Stream activity for a public wallet address - **Signature:** ```typescript @@ -1090,7 +1071,6 @@ await exchange.unwatchAddress("0xabc...") Close all WebSocket connections and clean up resources. - **Signature:** ```typescript @@ -1116,7 +1096,6 @@ await exchange.close() Find the same or related market on other venues. Two modes: - **Signature:** ```typescript @@ -1167,7 +1146,6 @@ await exchange.fetchMatches() Find the same or related event on other venues. Two modes: - **Signature:** ```typescript @@ -1218,7 +1196,6 @@ await exchange.compareMarketPrices() Find related markets across venues. Discovers subset/superset market relationships - **Signature:** ```typescript @@ -1343,7 +1320,6 @@ await exchange.fetchArbitrage() Watch AMM price updates for a market address (Limitless only). - > **Note**: This method is only available on **limitless** exchange. @@ -1372,7 +1348,6 @@ await exchange.watchPrices("0xabc...", (data) => { void data }) Watch user positions in real-time (Limitless only). - > **Note**: This method is only available on **limitless** exchange. @@ -1400,7 +1375,6 @@ await exchange.watchUserPositions((data) => { void data }) Watch user transactions in real-time (Limitless only). - > **Note**: This method is only available on **limitless** exchange. @@ -1428,7 +1402,6 @@ await exchange.watchUserTransactions((data) => { void data }) Initialize L2 API credentials for implicit API signing. - > **Note**: This method is only available on **polymarket** exchange. @@ -1456,7 +1429,6 @@ await exchange.initAuth() Pre-warm the SDK's internal caches for a market outcome. - > **Note**: This method is only available on **polymarket** exchange. @@ -1539,7 +1511,6 @@ await exchange.getEventBySlug("will-trump-win") Stream all orderbook updates across venues via the hosted WebSocket API. - **Signature:** ```typescript From d2c01a7872fc6af5abf62d60da63e9733566db70 Mon Sep 17 00:00:00 2001 From: AbhilashG12 Date: Sun, 12 Jul 2026 12:59:00 +0530 Subject: [PATCH 7/7] fix(typescript): add missing imports for router types and restore Python wallet_address/signer - Add GENERATED_IMPORTS to inject router types - Restore wallet_address and signer in Python generator - Regenerate client.ts, _exchanges.py, and docs Fixes #1403 --- core/api-doc-config.generated.json | 6 +- core/scripts/generate-python-exchanges.js | 4 ++ sdks/python/pmxt/_exchanges.py | 72 +++++++++++++++++++ sdks/typescript/pmxt/client.ts | 13 ++++ .../scripts/generate-client-methods.js | 16 ++++- 5 files changed, 107 insertions(+), 4 deletions(-) diff --git a/core/api-doc-config.generated.json b/core/api-doc-config.generated.json index a0edcfdd..39e836a9 100644 --- a/core/api-doc-config.generated.json +++ b/core/api-doc-config.generated.json @@ -1,5 +1,5 @@ { - "_generated": "Auto-generated by extract-jsdoc.js on 2026-07-10T14:11:41.904Z. Do not edit manually.", + "_generated": "Auto-generated by extract-jsdoc.js on 2026-07-12T07:28:50.334Z. Do not edit manually.", "methods": { "has": { "summary": "HTTP verb for the endpoint (e.g. GET, POST). */", @@ -1159,7 +1159,7 @@ "type": "FirehoseEvent", "description": "Next event with source, symbol, and orderbook" }, - "source": "client.ts:2057" + "source": "client.ts:2070" }, "firehose": { "summary": "Stream all orderbook updates across venues.", @@ -1176,7 +1176,7 @@ "type": "FirehoseEvent", "description": "Next event with source, symbol, and orderbook" }, - "source": "client.ts:2098" + "source": "client.ts:2111" } }, "workflowExample": { diff --git a/core/scripts/generate-python-exchanges.js b/core/scripts/generate-python-exchanges.js index ee0739d9..8aa4e198 100644 --- a/core/scripts/generate-python-exchanges.js +++ b/core/scripts/generate-python-exchanges.js @@ -173,6 +173,10 @@ function generateClass(exchange) { constructorParams.push('base_url: Optional[str] = None'); constructorParams.push('auto_start_server: Optional[bool] = None'); constructorParams.push('pmxt_api_key: Optional[str] = None'); + constructorParams.push('wallet_address: Optional[str] = None'); + constructorParams.push('signer: Optional[object] = None'); + superArgs.push('wallet_address=wallet_address'); + superArgs.push('signer=signer'); superArgs.push('base_url=base_url'); superArgs.push('auto_start_server=auto_start_server'); superArgs.push('pmxt_api_key=pmxt_api_key'); diff --git a/sdks/python/pmxt/_exchanges.py b/sdks/python/pmxt/_exchanges.py index 2c119cab..e6e2d8fd 100644 --- a/sdks/python/pmxt/_exchanges.py +++ b/sdks/python/pmxt/_exchanges.py @@ -21,6 +21,8 @@ def __init__( base_url: Optional[str] = None, auto_start_server: Optional[bool] = None, pmxt_api_key: Optional[str] = None, + wallet_address: Optional[str] = None, + signer: Optional[object] = None, ) -> None: """ Initialize Polymarket client. @@ -42,6 +44,8 @@ def __init__( private_key=private_key, proxy_address=proxy_address, signature_type=signature_type, + wallet_address=wallet_address, + signer=signer, base_url=base_url, auto_start_server=auto_start_server, pmxt_api_key=pmxt_api_key, @@ -76,6 +80,8 @@ def __init__( base_url: Optional[str] = None, auto_start_server: Optional[bool] = None, pmxt_api_key: Optional[str] = None, + wallet_address: Optional[str] = None, + signer: Optional[object] = None, ) -> None: """ Initialize Limitless client. @@ -93,6 +99,8 @@ def __init__( exchange_name="limitless", api_key=api_key, private_key=private_key, + wallet_address=wallet_address, + signer=signer, base_url=base_url, auto_start_server=auto_start_server, pmxt_api_key=pmxt_api_key, @@ -120,6 +128,8 @@ def __init__( base_url: Optional[str] = None, auto_start_server: Optional[bool] = None, pmxt_api_key: Optional[str] = None, + wallet_address: Optional[str] = None, + signer: Optional[object] = None, ) -> None: """ Initialize Kalshi client. @@ -135,6 +145,8 @@ def __init__( exchange_name="kalshi", api_key=api_key, private_key=private_key, + wallet_address=wallet_address, + signer=signer, base_url=base_url, auto_start_server=auto_start_server, pmxt_api_key=pmxt_api_key, @@ -151,6 +163,8 @@ def __init__( base_url: Optional[str] = None, auto_start_server: Optional[bool] = None, pmxt_api_key: Optional[str] = None, + wallet_address: Optional[str] = None, + signer: Optional[object] = None, ) -> None: """ Initialize KalshiDemo client. @@ -166,6 +180,8 @@ def __init__( exchange_name="kalshi-demo", api_key=api_key, private_key=private_key, + wallet_address=wallet_address, + signer=signer, base_url=base_url, auto_start_server=auto_start_server, pmxt_api_key=pmxt_api_key, @@ -184,6 +200,8 @@ def __init__( base_url: Optional[str] = None, auto_start_server: Optional[bool] = None, pmxt_api_key: Optional[str] = None, + wallet_address: Optional[str] = None, + signer: Optional[object] = None, ) -> None: """ Initialize Probable client. @@ -201,6 +219,8 @@ def __init__( exchange_name="probable", api_key=api_key, private_key=private_key, + wallet_address=wallet_address, + signer=signer, base_url=base_url, auto_start_server=auto_start_server, pmxt_api_key=pmxt_api_key, @@ -227,6 +247,8 @@ def __init__( base_url: Optional[str] = None, auto_start_server: Optional[bool] = None, pmxt_api_key: Optional[str] = None, + wallet_address: Optional[str] = None, + signer: Optional[object] = None, ) -> None: """ Initialize Baozi client. @@ -240,6 +262,8 @@ def __init__( super().__init__( exchange_name="baozi", private_key=private_key, + wallet_address=wallet_address, + signer=signer, base_url=base_url, auto_start_server=auto_start_server, pmxt_api_key=pmxt_api_key, @@ -256,6 +280,8 @@ def __init__( base_url: Optional[str] = None, auto_start_server: Optional[bool] = None, pmxt_api_key: Optional[str] = None, + wallet_address: Optional[str] = None, + signer: Optional[object] = None, ) -> None: """ Initialize Myriad client. @@ -271,6 +297,8 @@ def __init__( exchange_name="myriad", api_key=api_key, private_key=wallet_address, + wallet_address=wallet_address, + signer=signer, base_url=base_url, auto_start_server=auto_start_server, pmxt_api_key=pmxt_api_key, @@ -288,6 +316,8 @@ def __init__( base_url: Optional[str] = None, auto_start_server: Optional[bool] = None, pmxt_api_key: Optional[str] = None, + wallet_address: Optional[str] = None, + signer: Optional[object] = None, ) -> None: """ Initialize Opinion client. @@ -305,6 +335,8 @@ def __init__( api_key=api_key, private_key=private_key, proxy_address=proxy_address, + wallet_address=wallet_address, + signer=signer, base_url=base_url, auto_start_server=auto_start_server, pmxt_api_key=pmxt_api_key, @@ -320,6 +352,8 @@ def __init__( base_url: Optional[str] = None, auto_start_server: Optional[bool] = None, pmxt_api_key: Optional[str] = None, + wallet_address: Optional[str] = None, + signer: Optional[object] = None, ) -> None: """ Initialize Metaculus client. @@ -333,6 +367,8 @@ def __init__( super().__init__( exchange_name="metaculus", api_token=api_token, + wallet_address=wallet_address, + signer=signer, base_url=base_url, auto_start_server=auto_start_server, pmxt_api_key=pmxt_api_key, @@ -349,6 +385,8 @@ def __init__( base_url: Optional[str] = None, auto_start_server: Optional[bool] = None, pmxt_api_key: Optional[str] = None, + wallet_address: Optional[str] = None, + signer: Optional[object] = None, ) -> None: """ Initialize Smarkets client. @@ -364,6 +402,8 @@ def __init__( exchange_name="smarkets", api_key=api_key, private_key=private_key, + wallet_address=wallet_address, + signer=signer, base_url=base_url, auto_start_server=auto_start_server, pmxt_api_key=pmxt_api_key, @@ -380,6 +420,8 @@ def __init__( base_url: Optional[str] = None, auto_start_server: Optional[bool] = None, pmxt_api_key: Optional[str] = None, + wallet_address: Optional[str] = None, + signer: Optional[object] = None, ) -> None: """ Initialize PolymarketUS client. @@ -395,6 +437,8 @@ def __init__( exchange_name="polymarket_us", api_key=api_key, private_key=private_key, + wallet_address=wallet_address, + signer=signer, base_url=base_url, auto_start_server=auto_start_server, pmxt_api_key=pmxt_api_key, @@ -411,6 +455,8 @@ def __init__( base_url: Optional[str] = None, auto_start_server: Optional[bool] = None, pmxt_api_key: Optional[str] = None, + wallet_address: Optional[str] = None, + signer: Optional[object] = None, ) -> None: """ Initialize Hyperliquid client. @@ -426,6 +472,8 @@ def __init__( exchange_name="hyperliquid", api_key=api_key, private_key=private_key, + wallet_address=wallet_address, + signer=signer, base_url=base_url, auto_start_server=auto_start_server, pmxt_api_key=pmxt_api_key, @@ -442,6 +490,8 @@ def __init__( base_url: Optional[str] = None, auto_start_server: Optional[bool] = None, pmxt_api_key: Optional[str] = None, + wallet_address: Optional[str] = None, + signer: Optional[object] = None, ) -> None: """ Initialize GeminiTitan client. @@ -456,6 +506,8 @@ def __init__( super().__init__( exchange_name="gemini-titan", api_key=api_key, + wallet_address=wallet_address, + signer=signer, base_url=base_url, auto_start_server=auto_start_server, pmxt_api_key=pmxt_api_key, @@ -478,6 +530,8 @@ def __init__( base_url: Optional[str] = None, auto_start_server: Optional[bool] = None, pmxt_api_key: Optional[str] = None, + wallet_address: Optional[str] = None, + signer: Optional[object] = None, ) -> None: """ Initialize SuiBets client. @@ -489,6 +543,8 @@ def __init__( """ super().__init__( exchange_name="suibets", + wallet_address=wallet_address, + signer=signer, base_url=base_url, auto_start_server=auto_start_server, pmxt_api_key=pmxt_api_key, @@ -504,6 +560,8 @@ def __init__( base_url: Optional[str] = None, auto_start_server: Optional[bool] = None, pmxt_api_key: Optional[str] = None, + wallet_address: Optional[str] = None, + signer: Optional[object] = None, ) -> None: """ Initialize Rain client. @@ -517,6 +575,8 @@ def __init__( super().__init__( exchange_name="rain", private_key=private_key, + wallet_address=wallet_address, + signer=signer, base_url=base_url, auto_start_server=auto_start_server, pmxt_api_key=pmxt_api_key, @@ -532,6 +592,8 @@ def __init__( base_url: Optional[str] = None, auto_start_server: Optional[bool] = None, pmxt_api_key: Optional[str] = None, + wallet_address: Optional[str] = None, + signer: Optional[object] = None, ) -> None: """ Initialize Hunch client. @@ -545,6 +607,8 @@ def __init__( super().__init__( exchange_name="hunch", private_key=private_key, + wallet_address=wallet_address, + signer=signer, base_url=base_url, auto_start_server=auto_start_server, pmxt_api_key=pmxt_api_key, @@ -559,6 +623,8 @@ def __init__( base_url: Optional[str] = None, auto_start_server: Optional[bool] = None, pmxt_api_key: Optional[str] = None, + wallet_address: Optional[str] = None, + signer: Optional[object] = None, ) -> None: """ Initialize Mock client. @@ -570,6 +636,8 @@ def __init__( """ super().__init__( exchange_name="mock", + wallet_address=wallet_address, + signer=signer, base_url=base_url, auto_start_server=auto_start_server, pmxt_api_key=pmxt_api_key, @@ -584,6 +652,8 @@ def __init__( base_url: Optional[str] = None, auto_start_server: Optional[bool] = None, pmxt_api_key: Optional[str] = None, + wallet_address: Optional[str] = None, + signer: Optional[object] = None, ) -> None: """ Initialize Router client. @@ -595,6 +665,8 @@ def __init__( """ super().__init__( exchange_name="router", + wallet_address=wallet_address, + signer=signer, base_url=base_url, auto_start_server=auto_start_server, pmxt_api_key=pmxt_api_key, diff --git a/sdks/typescript/pmxt/client.ts b/sdks/typescript/pmxt/client.ts index 8842ffd0..28b63015 100644 --- a/sdks/typescript/pmxt/client.ts +++ b/sdks/typescript/pmxt/client.ts @@ -944,6 +944,19 @@ export abstract class Exchange { // BEGIN GENERATED METHODS +import { + // Router types + FetchMarketMatchesParams, + MatchResult, + FetchEventMatchesParams, + EventMatchResult, + CompareMarketPricesParams, + PriceComparison, + FetchMatchedPricesParams, + FetchArbitrageParams, + ArbitrageOpportunity, +} from './models.js'; + async loadMarkets(reload: boolean = false): Promise> { await this.initPromise; try { diff --git a/sdks/typescript/scripts/generate-client-methods.js b/sdks/typescript/scripts/generate-client-methods.js index 620046d0..8f30445c 100644 --- a/sdks/typescript/scripts/generate-client-methods.js +++ b/sdks/typescript/scripts/generate-client-methods.js @@ -48,6 +48,19 @@ function extractExistingTsMethod(generatedRegion, methodName) { return match ? match[0].replace(/\n+$/, '') : null; } +const GENERATED_IMPORTS = `import { + // Router types + FetchMarketMatchesParams, + MatchResult, + FetchEventMatchesParams, + EventMatchResult, + CompareMarketPricesParams, + PriceComparison, + FetchMatchedPricesParams, + FetchArbitrageParams, + ArbitrageOpportunity, +} from './models.js';`; + // Methods kept hand-maintained in client.ts (special logic, streaming, local-only) const SKIP_GENERATE = new Set([ 'callApi', @@ -530,7 +543,8 @@ function main() { throw new Error(`Generation markers not found in ${CLIENT_PATH}.\nAdd:\n ${MARKER_BEGIN}\n ${MARKER_END}`); } - const before = client.slice(0, beginIdx + MARKER_BEGIN.length); + + const before = client.slice(0, beginIdx + MARKER_BEGIN.length) + '\n\n' + GENERATED_IMPORTS; const existingRegion = client.slice(beginIdx + MARKER_BEGIN.length, endIdx); const after = client.slice(endIdx);