Signals & Surfaces

Fitted implied probability surfaces derived from multi-strike order books. Surface types: survival, density, and barrier.

GET/surfaces
sdkclient.signals.surfaces(**params)

Latest surface for each (series, event) pair.

Parameters
underlyingstr
Filter by underlying (e.g., "BTC").
surface_typestr
"survival", "density", or "barrier".
limitint= 100
Results per page.
takeint
SDK only. Caps total items returned across pages.
  • survival · P(X > strike), monotonically decreasing
  • density · P(lower < X < upper) across buckets
  • barrier · P(X hits strike before expiry)
surfaces = client.signals.surfaces( underlying="BTC", surface_type="survival", ) for s in surfaces: print(s.series_id, s.event_id, s.n_strikes)
jsonResponse
{ "data": [{ "series_id": "a54be2bf-3198-5f30-...", "event_id": "c2e9078c-c0be-5199-...", "surface_type": "survival", "underlying": "BTC", "computed_at": 1710400200000, "implied_mean": 84250.00, "implied_cv": 0.032, "implied_skew": -0.18, "n_strikes": 162 }], "meta": { "cursor": "...", "has_more": true } }
GET/surfaces/{series_id}/{event_id}
sdkclient.signals.surface(series_id, event_id)

Get the latest fitted surface for a specific series and event.

surface = client.signals.surface( "a54be2bf-3198-5f30-ad1b-68ee299fdbce", "c2e9078c-c0be-5199-8c77-4f65948d15c2", ) print(surface.implied_mean, surface.implied_cv)
jsonResponse
{ "data": { "series_id": "a54be2bf-3198-5f30-...", "event_id": "c2e9078c-c0be-5199-...", "surface_type": "survival", "underlying": "BTC", "computed_at": 1710400200000, "implied_mean": 84250.00, "implied_cv": 0.032, "implied_skew": -0.18, "n_strikes": 162, "strikes": [ { "strike": 80000, "raw_prob": 0.9120, "fitted_prob": 0.9085 }, { "strike": 84000, "raw_prob": 0.5810, "fitted_prob": 0.5775 }, { "strike": 88000, "raw_prob": 0.0890, "fitted_prob": 0.0862 } ] } }
GET/surfaces/{series_id}/{event_id}/history
sdkclient.signals.history(series_id, event_id, **params)

Historical surface snapshots, ordered by computation time.

Parameters
afterint | str
Surfaces computed after this time (ms epoch or ISO 8601).
beforeint | str
Surfaces computed before this time (ms epoch or ISO 8601).
orderstr= "desc"
Sort order.
history = client.signals.history( "a54be2bf-3198-5f30-ad1b-68ee299fdbce", "c2e9078c-c0be-5199-8c77-4f65948d15c2", after="2026-05-02T00:00:00Z", before="2026-05-03T00:00:00Z", ) for surface in history: print(surface.computed_at, surface.implied_mean)
jsonResponse
{ "data": [{ "series_id": "a54be2bf-3198-5f30-...", "event_id": "c2e9078c-c0be-5199-...", "surface_type": "survival", "underlying": "BTC", "computed_at": 1710400200000, "implied_mean": 84250.00, "implied_cv": 0.032, "implied_skew": -0.18, "n_strikes": 162, "strikes": [ { "strike": 80000, "raw_prob": 0.9120, "fitted_prob": 0.9085 }, { "strike": 84000, "raw_prob": 0.5810, "fitted_prob": 0.5775 }, { "strike": 88000, "raw_prob": 0.0890, "fitted_prob": 0.0862 } ] }], "meta": { "cursor": "eyJ0IjoxNzEwNDAwMjAwfQ", "has_more": true } }