Public research data

Daily market research data, ready to query.

The Derivasys Data API serves published daily research snapshots as JSON. Browse verified history for BTC, ETH, SOL, XRP, HYPE, AVAX and TRX with ordinary HTTPS requests; no account or API key is required.

These are daily snapshots from published reports. They are not the live market feed, the full live surface, or raw historical ticks.

Public JSON API / Seven assets / No API key / Daily published snapshots.

By Sean GordonPublished Updated Daily data APIPublished daily metrics

Verified product scope

Current product coverage verified . Open the dashboard for current service state. Seven live markets: BTC, ETH, SOL, XRP, HYPE, AVAX, TRX.

Quick start

Make a request in seconds.

Every endpoint is a public GET request. For example, fetch the latest published BTC observation or request an inclusive range of daily observations:

curl -fsS https://api.derivasys.com/api/v1/data/BTC/latest

curl -fsS 'https://api.derivasys.com/api/v1/data/BTC/observations?start=2026-10-01&end=2026-10-15&limit=7'

The range endpoint returns dates in ascending order. When hasMore is true, send nextCursor as cursor on the next request and keep the same asset, start, and end. The cursor is exclusive, so the next page continues after the last date already returned.

from urllib.error import HTTPError, URLError
from urllib.parse import urlencode
from urllib.request import urlopen
import json

BASE = "https://api.derivasys.com/api/v1/data"

def get_json(url):
    try:
        with urlopen(url, timeout=20) as response:
            return json.load(response)
    except (HTTPError, URLError) as exc:
        raise RuntimeError(f"Data API request failed: {exc}") from exc

params = {"start": "2026-10-01", "end": "2026-10-15", "limit": 7}
cursor = None
observations = []
while True:
    query = dict(params)
    if cursor is not None:
        query["cursor"] = cursor
    page = get_json(f"{BASE}/BTC/observations?{urlencode(query)}")
    observations.extend(page["observations"])
    if not page["hasMore"]:
        break
    cursor = page["nextCursor"]

print(f"Received {len(observations)} observations")

Reference

Choose a catalog, date, or observation endpoint.

GET /catalog

Lists supported assets and each dataset's source report, observation count, earliest and latest dates, and limits.

GET /{asset}/dates

Lists all dates with a published observation for that asset, in ascending order.

GET /{asset}/latest

Returns the latest published observation. It does not represent the current market.

GET /{asset}/{date}

Returns the published observation for one YYYY-MM-DD report date.

GET /{asset}/observations

Pages through observations in an inclusive start/end date range. Optional limit and cursor control pagination.

Use the base URL https://api.derivasys.com/api/v1/data. Asset names are case-insensitive. Supported assets are BTC, ETH, SOL, XRP, HYPE, AVAX and TRX. The OpenAPI schema is available at https://api.derivasys.com/openapi.json.

Ranges and pagination

Bound requests and follow the cursor.

  • start and end are inclusive UTC calendar dates in YYYY-MM-DD format; the maximum span is 366 calendar days.
  • limit is the maximum observations per page, from 1 to 31. The default is 31.
  • A page can contain fewer observations than its limit because only published dates are returned. Missing publication dates are not filled in.
  • When hasMore is true, pass nextCursor as cursor and retain the original asset, start, and end values.
  • Responses are capped at 8 MiB. A request that exceeds the cap can return 422 response_too_large; reduce limit or narrow the requested range.

A range response includes schemaVersion, asset, start, end, limit, cursor, totalAvailable, returnedCount, hasMore, nextCursor, dates, and observations.

Reading the data

Keep report dates, timestamps, and unavailable values distinct.

An observation identifies schemaVersion, asset, reportDate, timestamps, comparison status and note, tenor metrics, optional realised volatility, and provenance. currentSnapshotAt, previousSnapshotAt, and generatedAt are UTC timestamps; reportDate is the report's calendar date. Snapshot time and report date describe different things, and the API does not promise one exact publication time each day.

Tenor metrics

Each tenor includes targetExpiry, availability and unavailableReason. Its atmIv, rr25 and bf25 objects contain current, previous, change and percentChange.

Units

ATMIV and realised volatility are annualised percentages: 34.11 means 34.11%. RR25, BF25, and their absolute changes are volatility points.

Null values

Unavailable measurements remain null with an availability state and reason where provided. Do not interpret a missing value as zero.

Percent change

percentChange is a relative percentage change. It is not an absolute volatility-point change.

Provenance

The provenance object includes sourceReport and sourceReportHref, plus source and convention metadata, so values can be traced to their research artifact.

These endpoints expose daily published research snapshots. Use the live dashboard or live API products for current market state; this archive does not provide raw historical ticks.

Operations and terms

Handle errors and cite the source artifact.

404 Not Found

The asset is unknown or there is no published observation for the requested date.

422 Unprocessable Entity

A date, range, limit, or cursor is invalid, or the response exceeds the 8 MiB cap. Correct the request or reduce its size.

503 Service Unavailable

Upstream verification or capacity is temporarily unavailable. Retry with backoff.

Caching

Successful responses use Cache-Control: public, max-age=60 and ETags. Send If-None-Match to validate a cached response; an unchanged representation may return 304.

The public API has no account or API key requirement. Research data is provided under the Derivasys Research Artifact License: https://www.derivasys.com/research-artifact-license/v1. Review the license and preserve the report provenance when using or redistributing results.

Start with the catalog.

Inspect available assets and published date coverage, then query the observations that fit your workflow.