Changelog
Changes that affect integrators. Breaking changes are called out explicitly and never ship without notice — see How we version below.
Every page carries the build revision in its footer; quote it if you report something that looks wrong.
Unreleased
Section titled “Unreleased”Known issues on the integration environments, being worked on. Listed here so you do not lose time to them.
?trading=trueis not applied onGET /api/v1/markets. The response is identical with or without it. Filter on thetradingfield client-side — see Market status.- WebSocket handshake requires
X-prefixed headers. Sending the REST names connects the socket anonymously and fails later withunauthorizedon a private channel, which reads like a key problem. See Integrate.
2026-08-25
Section titled “2026-08-25”First public release of these docs.
REST API
- 16 endpoints documented across Identity, Orders, Trades, Events, Markets, Account and Portfolio, generated from the OpenAPI document
- Interactive API console with a live Try it
- Postman collection with the Ed25519 signing script wired into the pre-request hook
Documented and verified against demo.stxapp.io
priceis whole cents, 1–99. A value above 99 returns422 The order's price must be lower than 1.00— the message states the cap in dollars, the field is centsPOST /api/v1/orderstakes a flat body and returns 200, not 201- Collections return
{ cursor, <resource>: [...] }, not{ data } - Every
/api/v1route requires a signature; there are no public REST endpoints - The signed path includes the query string
WebSockets
- All eight channels documented, with the snapshot each private channel pushes on join
cancel_on_disconnectwith an interactive demo- The
market_updatestopic is plural; older docs show it singular
Concepts
- United States and Canada — two separate exchanges, different regulators, one API surface
- Market status — the seven stored statuses, and why a
response can say
suspendedwhen you filtered foropen
How we version
Section titled “How we version”The REST API is versioned in its path (/api/v1). Within a live version we make
only additive changes — new optional fields, new endpoints, new enum values.
A client that ignores unknown fields will not break.
Anything that would break an existing client goes to a new version, and the old one keeps working through a stated sunset window. When an endpoint is deprecated you will see it three ways before it goes away:
DeprecationandSunsetheaders on the response itselfdeprecated: truein the OpenAPI document, which surfaces as a banner on the endpoint page- an entry here, dated, ahead of the change
If you are integrating seriously, watch this page.

