Repository navigation
Releases: QTSurfer/api-client-python
Releases · QTSurfer/api-client-python
Release list
v0.128.37
Added ✨
- Handle
POST /auth/tokenrefusing a valid API key without scopes:403now parses as
AuthTokenErrorwithAuthTokenErrorCode.APIKEY_WITHOUT_SCOPES. No token is minted;
create a key with at least one scope in the web app where the deployment requires scopes. - Discover CEX instruments and DEX pools through both instrument routes, with typed venue,
segment and live-segment metadata.InstrumentCatalogueResponsenames their response union. - Import centralized-exchange ticker or kline history with the
cexsource block and fifteen
cadence labels; retain typedResponseError.reasonandnext_recovery instructions. - Public
api.exchange.download_tickersanddownload_klinesadapters return successful
binary bytes for sync and async calls, including strict-status clients. Detailed calls preserve
provisional-hour metadata, timestamp units, and retry delays.
Changed 🔄
- Clarify that a scope is a resource and an action:
KeyScopeslists a resource only with
at least one action, and{}represents no scopes. Successful authentication examples
use the resource-to-actions map. - Token scopes are a
KeyScopesresource-to-actions map, also required on account responses.
The API reports grants but does not yet enforce them. - Live sources use
cex/dexenums. DEX runs require one pool address andklinedata;
discover valid exchange / live-segment combinations before starting a run. - Exchange metadata and instrument
symbolare required. Unknown market values are absent
(UNSET), never null. Instrument segment requests accept discovered protocol strings. - Hourly downloads cover seven days. Lastra
tsis microseconds with MIME type
application/vnd.qtsurfer.lastra; Parquet remains milliseconds. Handle provisional200,
404 NOT_YET_AVAILABLE/NO_DATA,400 OUTSIDE_WINDOWand retryable503.
Fixed 🐛
- Public download adapters encode quote currencies without colliding with the URL encoder.
Use the publicapi.exchangeimports rather than private generated download modules.
v0.128.25
[0.128.25] — 2026-10-09
Added ✨
StartLiveRequest.sandboxlets a strategy that already passed its sandbox trial start in
SANDBOXagain, for example to debug signals over the WebSocket connection. By default such a
strategy starts directly inLIVE.
Changed 🔧
- Document when a live run starts in
SANDBOXorLIVE, including the inherited gate verdict.
v0.128.24
[0.128.24] — 2026-10-07
Changed
- Sweep cancellation documentation now explains that
CANCELLEDcan arrive before in-flight runs finish; keep reading untilprogress.pendingShardsis0for the complete leaderboard.
v0.128.22
[0.128.22] — 2026-10-06
Added ✨
- Live-start sources use the new
LiveSourceRequestmodel, whereinstrumentsis optional. When
omitted (or set to["*"]), the server can use the strategy's declared instruments; otherwise
the run reads every instrument available on the exchange and segment. Wildcards can select one
side of a pair, such as*/USDT.
Changed 🔧
- Instrument symbols are case-insensitive and ignore surrounding spaces; malformed pairs are
rejected when a run starts. The run'sLiveSource.instrumentsstill reports what it actually
reads.
v0.128.17
[0.128.17] — 2026-10-05
Added ✨
get_live_runreads an owned live run byrun_idasLiveRunDetail, including monotonic
updated_at_msand an optionalLiveRunStatssnapshot.StartLiveRequest.streamrequests the secretstream_urlreturned bystart_liveand
get_live;rotate_live_streamandrevoke_live_streammanage that URL.
v0.128.14
[0.128.14] — 2026-09-30
Added ✨
send_live_commanddelivers an owner-only transient command to a running strategy and returns its command ID and effective market position.202means accepted;503guarantees it was not sent. Retries after an ambiguous network failure can create a second command because the endpoint has no idempotency key.- Paper-trading configuration, account snapshots, and paginated equity history are available on live runs.
- Strategy and dataset listings can include deleted entries with
deleted_at; account limits includemax_sweep_cartesian, and live runs expose an optional stop/failurereason.
v0.126.2
[0.126.2] — 2026-09-23
- Add the generated
list_liveendpoint for the caller's own live runs.
v0.126.1
[0.126.1] — 2026-09-23
- Represent nullable live-signal fields correctly.
v0.115.1
[0.115.1] — 2026-09-08
Regenerated against OpenAPI spec 0.115.1 (from 0.111.2).
Added ✨
ExecuteBacktestBody.paramsaccepts one scalar strategy-property vector for an execution, and
ResultMap.paramsechoes that vector in the result.ScalarStrategyParamValueis re-exported
as the corresponding public scalar alias.DatasetWithLinksandDatasetVersionexposedata_urlanddata_format(lastraor
parquet) once a dataset version is ready.
Changed 🔄
- Dataset creation accepts CSV or parquet data, directly or inside a gzip/zip containing one file.
DatasetVersion.bytesdescribes stored data rather than the original upload bytes. ResultMap.win_rateis a fraction from 0.0 to 1.0, andcagris a ratio (for example,0.15
represents 15%).
v0.111.2
[0.111.2] — 2026-08-28
Regenerated against OpenAPI spec 0.111.2 (from 0.110.3).
Added ✨
open_dataset_upload—POST /datasets/{datasetId}/uploads— returns aDatasetUploadSessionfor the current open upload or the next dataset version.DatasetUploadTargetnames the presigned upload target shape shared by this response andDatasetCreated.
Changed 🔄
finalize_dataset_uploadnow parses the documented409response when an upload session has already produced a version. Open a new upload session instead of reusing thatupload_id.DatasetCreatednow mirrors the immediate creation response: its upload session plusdataset_id,name,type_, andinstrument. Version-derived metadata is obtained throughget_datasetafter its lifecycle stage has completed.