Data
Signals & Surfaces
Fitted implied probability surfaces derived from multi-strike order books. Surface types: survival, density, and barrier.
GET
/surfacessdk
client.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 decreasingdensity· P(lower < X < upper) across bucketsbarrier· 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}sdk
client.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}/historysdk
client.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 }
}