SDKs
First-party clients for the DataMaxi+ API. All SDKs are generated from the same OpenAPI spec, so endpoint coverage is identical and types stay in lock-step across languages — when a new endpoint ships on the REST API, every SDK gains a typed wrapper for it in the next release.
| Language | Package | Full reference |
|---|---|---|
| Python | datamaxi | python.datamaxiplus.com |
| Rust | datamaxi | rust.datamaxiplus.com |
| TypeScript | @bisonai/datamaxi | See TypeScript |
Per-language deep dives (full method reference, type definitions, async/await patterns) live on the dedicated subdomains. The pages in this section give you enough to install, authenticate, and make a first call without bouncing.
Choosing an SDK
- Python — analysis, research notebooks, trading bots, anything that touches pandas/NumPy. Default choice for most users.
- Rust — low-latency systems, market-makers, anything where allocation and GC matter. Strongly-typed end to end.
- TypeScript — browser dashboards, Node services, Edge runtimes (Cloudflare Workers, Vercel Edge). Same package on both sides; see TypeScript page for browser-vs-server key safety.
Common patterns
All SDKs follow the same conventions; the language idioms differ but the moving parts don't.
▸ API key via env var. Set DTMX_API_KEY once and the client picks it up. Constructor-arg auth also works for multi-tenant code.
▸ Rate-limit handling. SDKs surface HTTP 429 as a typed error with retry-after metadata. Apply your own backoff or use the built-in retry helpers. See Rate Limits.
▸ Pagination. Most list/history endpoints return a tuple of (page, next_fn) (Python/TS) or (page, cursor) (Rust). Call the next function/cursor to fetch the following page; receive None/null when exhausted.
▸ Errors. All client errors map to a single SDK exception type with the upstream HTTP status, error code, and message preserved. See Errors.
▸ Streaming. WebSocket subscriptions are exposed as iterators / async iterators / Stream impls — same payload shape as the raw WS API.