Gap
docs/api-reference/configuration.mdx documents, as first-class ExchangeOptions constructor kwargs and env vars shared identically by both SDKs:
trade_base_url / tradeBaseUrl — override the default https://trade.pmxt.dev
local_port / localPort — override the default pmxt-core port (3847)
timeout — default per-request timeout in seconds
- Env vars
PMXT_TRADE_BASE_URL, PMXT_LOCAL_PORT, PMXT_TIMEOUT
- A full three-tier "Base URL resolution" precedence system (explicit kwarg → env var → default) for
trade_base_url, mirroring the one that genuinely exists for base_url/PMXT_BASE_URL.
None of trade_base_url/tradeBaseUrl, local_port/localPort, timeout, PMXT_TRADE_BASE_URL, PMXT_LOCAL_PORT, or PMXT_TIMEOUT appear anywhere in either SDK. HOSTED_TRADING_BASE_URL = "https://trade.pmxt.dev" is a hardcoded constant with zero override mechanism in both SDKs; the local server port is hardcoded (DEFAULT_PORT = 3847) with no dedicated port option or env var; no per-request timeout kwarg exists in either client constructor (TS hardcodes a 30s AbortSignal.timeout; Python hardcodes scattered timeout=10/timeout=30 on individual internal calls). Separately, PMXT_LOG_LEVEL (also documented on this page as shared) is real but TypeScript-only — there is no equivalent anywhere in the Python SDK, contradicting the doc's framing of a single shared configuration surface across both languages. This same PMXT_LOCAL_PORT claim is repeated as a working self-hosted feature in docs/guides/self-hosted.mdx:148.
Core
N/A — these are pure SDK-side configuration knobs; core has no notion of them.
TypeScript SDK
sdks/typescript/pmxt/constants.ts:31-34 — ENV object only has BASE_URL and API_KEY keys, no TRADE_BASE_URL/LOCAL_PORT/TIMEOUT.
sdks/typescript/pmxt/hosted-routing.ts:23 — HOSTED_TRADING_BASE_URL hardcoded, no override path.
sdks/typescript/pmxt/server-manager.ts:33,59 — DEFAULT_PORT = 3847 hardcoded.
sdks/typescript/pmxt/client.ts:557 — hardcoded AbortSignal.timeout(30_000).
PMXT_LOG_LEVEL exists here: sdks/typescript/pmxt/logger.ts:22-23, server-manager.ts:211.
Python SDK
sdks/python/pmxt/constants.py:32 — ENV = SimpleNamespace(BASE_URL=..., API_KEY=...), same two-key limitation.
sdks/python/pmxt/server_manager.py:36 — DEFAULT_PORT = 3847 hardcoded.
- No
trade_base_url, local_port, or timeout kwarg anywhere in sdks/python/pmxt/client.py.
PMXT_LOG_LEVEL — missing entirely, no match anywhere under sdks/python/pmxt/.
Evidence
grep -rn "PMXT_TRADE_BASE_URL\|PMXT_LOCAL_PORT\|PMXT_TIMEOUT" sdks/typescript/pmxt sdks/python/pmxt → zero matches in either tree. grep -rn "tradeBaseUrl\|trade_base_url\|localPort\|local_port" sdks/typescript/pmxt/*.ts sdks/python/pmxt/*.py (excluding tests) → zero matches. grep -rn "PMXT_LOG_LEVEL" sdks/typescript/pmxt sdks/python/pmxt confirms it exists only in the TypeScript files listed above.
Impact
Medium-high — this is the most detailed page in the docs for configuring hosted-vs-self-hosted routing, and roughly a third of its documented surface (3 of 7 constructor kwargs called out, 3 of 6 env vars, and the entire "trade base URL precedence" section) describes behavior that doesn't exist. A user following this page to point a staging environment at a custom trading-API mirror, override the local sidecar port, or tune request timeouts would find none of those knobs work, with no error or fallback — the unrecognized env vars are silently ignored since the SDKs never read them.
Found by automated Core-to-SDK surface coverage audit
Gap
docs/api-reference/configuration.mdxdocuments, as first-classExchangeOptionsconstructor kwargs and env vars shared identically by both SDKs:trade_base_url/tradeBaseUrl— override the defaulthttps://trade.pmxt.devlocal_port/localPort— override the default pmxt-core port (3847)timeout— default per-request timeout in secondsPMXT_TRADE_BASE_URL,PMXT_LOCAL_PORT,PMXT_TIMEOUTtrade_base_url, mirroring the one that genuinely exists forbase_url/PMXT_BASE_URL.None of
trade_base_url/tradeBaseUrl,local_port/localPort,timeout,PMXT_TRADE_BASE_URL,PMXT_LOCAL_PORT, orPMXT_TIMEOUTappear anywhere in either SDK.HOSTED_TRADING_BASE_URL = "https://trade.pmxt.dev"is a hardcoded constant with zero override mechanism in both SDKs; the local server port is hardcoded (DEFAULT_PORT = 3847) with no dedicated port option or env var; no per-requesttimeoutkwarg exists in either client constructor (TS hardcodes a 30sAbortSignal.timeout; Python hardcodes scatteredtimeout=10/timeout=30on individual internal calls). Separately,PMXT_LOG_LEVEL(also documented on this page as shared) is real but TypeScript-only — there is no equivalent anywhere in the Python SDK, contradicting the doc's framing of a single shared configuration surface across both languages. This samePMXT_LOCAL_PORTclaim is repeated as a working self-hosted feature indocs/guides/self-hosted.mdx:148.Core
N/A — these are pure SDK-side configuration knobs; core has no notion of them.
TypeScript SDK
sdks/typescript/pmxt/constants.ts:31-34—ENVobject only hasBASE_URLandAPI_KEYkeys, noTRADE_BASE_URL/LOCAL_PORT/TIMEOUT.sdks/typescript/pmxt/hosted-routing.ts:23—HOSTED_TRADING_BASE_URLhardcoded, no override path.sdks/typescript/pmxt/server-manager.ts:33,59—DEFAULT_PORT = 3847hardcoded.sdks/typescript/pmxt/client.ts:557— hardcodedAbortSignal.timeout(30_000).PMXT_LOG_LEVELexists here:sdks/typescript/pmxt/logger.ts:22-23,server-manager.ts:211.Python SDK
sdks/python/pmxt/constants.py:32—ENV = SimpleNamespace(BASE_URL=..., API_KEY=...), same two-key limitation.sdks/python/pmxt/server_manager.py:36—DEFAULT_PORT = 3847hardcoded.trade_base_url,local_port, ortimeoutkwarg anywhere insdks/python/pmxt/client.py.PMXT_LOG_LEVEL— missing entirely, no match anywhere undersdks/python/pmxt/.Evidence
grep -rn "PMXT_TRADE_BASE_URL\|PMXT_LOCAL_PORT\|PMXT_TIMEOUT" sdks/typescript/pmxt sdks/python/pmxt→ zero matches in either tree.grep -rn "tradeBaseUrl\|trade_base_url\|localPort\|local_port" sdks/typescript/pmxt/*.ts sdks/python/pmxt/*.py(excluding tests) → zero matches.grep -rn "PMXT_LOG_LEVEL" sdks/typescript/pmxt sdks/python/pmxtconfirms it exists only in the TypeScript files listed above.Impact
Medium-high — this is the most detailed page in the docs for configuring hosted-vs-self-hosted routing, and roughly a third of its documented surface (3 of 7 constructor kwargs called out, 3 of 6 env vars, and the entire "trade base URL precedence" section) describes behavior that doesn't exist. A user following this page to point a staging environment at a custom trading-API mirror, override the local sidecar port, or tune request timeouts would find none of those knobs work, with no error or fallback — the unrecognized env vars are silently ignored since the SDKs never read them.
Found by automated Core-to-SDK surface coverage audit