Dataset

Get a dataset by id

Changed on

Detail for one dataset, plus a self link.

get/datasets/{datasetId}

Request

  • Base URL: https://api.qtsurfer.net/v1
  • URL: https://api.qtsurfer.net/v1/datasets/{datasetId}
  • Auth: HTTP bearer

Path parameters

datasetIdstring required
Example:ds_3f9a1c2e7b0d4a5f

The id returned by POST /datasets

Response

Dataset detail

datasetIdstring required

Opaque id, returned by POST /datasets.

namestring required

Unique among your datasets.

type'ticker' | 'klines' required

ticker for an upload or a dex import with no cadence requested (native per-trade data). klines for a dex import that requested a candle cadence — pre-aggregated bars rather than raw ticks. Purely informational; both shapes are read the same way.

instrumentstring required

Exchange instrument identifier (e.g. a currency pair)

createdAtstring date-time required

When the dataset was created.

currentVersionIdstring

The id of the most recently finalized, successfully ingested version. Absent until at least one upload has finished ingesting.

deletedAtstring date-time

When you deleted this dataset. Only ever present in GET /datasets?includeDeleted=true, and only on datasets you have deleted.

updatedAtstring date-time

When currentVersionId last changed. Absent until it has a value.

fromstring date-time

Start of currentVersionId's own data range, as discovered at ingest time. Absent until a version exists.

tostring date-time

End of currentVersionId's own data range, as discovered at ingest time. Absent until a version exists.

cadencestring

currentVersionId's own discovered cadence — a fixed grid (e.g. 1s, 1m, 1h) or rt (see DatasetVersion.cadence). Absent until a version exists.

timestampUnit'iso' | 's' | 'ms' | 'us'

currentVersionId's own timestamp unit (see DatasetVersion.timestampUnit) — decode the timestamp column of dataUrl's file accordingly. Present only when status is ready.

status'ready' | 'failed' | 'pending' required
  • ready — currentVersionId is set; from/to/cadence/bytes/rows/gaps/ largestGapSteps describe it.
  • failed — the most recent upload/import attempt failed. currentVersionId and the fields above are absent — there is nothing to read yet. See error.
  • pending — nothing has ever been attempted (just created, or an upload was never finalized).
bytesinteger

Size of currentVersionId's own stored file. Present only when status is ready — see DatasetVersion.bytes for what it measures exactly.

rowsinteger

currentVersionId's own row count. Present only when status is ready.

gapsinteger

currentVersionId's own gap count at its discovered cadence. Present only when status is ready.

largestGapStepsinteger

currentVersionId's own largest gap, in units of its discovered cadence step. Present only when status is ready.

errorstring

A human-readable reason the most recent upload/import attempt failed. Present only when status is failed.

dataUrlstring

Presigned GET URL to the current version's stored file — see dataFormat for which format it's actually in. Present only once the current version's status is ready. Long-lived (day-scale, not permanent): a DuckDB-WASM/lastra-ts-style reader issues HTTP range requests against it lazily over an extended viewing session, not in one shot like a browser upload.

dataFormat'lastra' | 'parquet'

Which format dataUrl is actually in — check this rather than assuming it matches how you uploaded it. lastra — our native columnar format — for a CSV (or gzip/zip of one) upload, always converted on ingest, or for a lastra upload, stored as-is (the value alone doesn't tell you which). parquet for a parquet upload, also stored as-is today.

Example response

{
  "datasetId": "ds_3f9a1c2e7b0d4a5f",
  "name": "My BTC ticks",
  "type": "ticker",
  "instrument": "BTC/USDT",
  "createdAt": "2026-08-20T09:00:00Z",
  "currentVersionId": "dsv_8e2b4f19c6a03d7e",
  "updatedAt": "2026-08-20T09:04:12Z",
  "from": "2026-03-01T00:00:00Z",
  "to": "2026-03-08T00:00:00Z",
  "cadence": "1m",
  "timestampUnit": "iso",
  "status": "ready",
  "bytes": 4831022,
  "rows": 86400,
  "error": "line 3: column 'close' is not a number: not-a-number",
  "dataUrl": "https://storage.qtsurfer.com/00000000-.../ds_3f9a1c2e7b0d4a5f/dsv_8e2b4f19c6a03d7e/ticker_BTC_USDT_1700000000000_1700086400000_1m.lastra?X-Amz-...",
  "dataFormat": "lastra",
  "_links": {
    "self": {
      "href": "/v1/datasets/ds_3f9a1c2e7b0d4a5f"
    }
  }
}

Changes

    • info

      added the optional property //// to the response with the status

    • info

      added the optional property //// to the response with the status

    • info

      added the optional property //// to the response with the status

    • info

      added the optional property //// to the response with the status

    • info

      added the optional property //// to the response with the status

    • info

      added the optional property //// to the response with the status

    • info

      added the required property //// to the response with the status