EPIC Data API
Normalised equity-perpetual data
Market, reference, funding, liquidity, specification and risk fields under one contract. This page documents it. It does not serve a live feed.
Audience: quant developers, brokers, research platforms, risk teams, market makers and media. Keys, rate limits, webhooks and a sandbox would exist on a licensed gateway. Sample keys in Settings do not authorise an external call.
| Endpoint | Purpose |
|---|---|
| GET /v1/markets | Normalised contract list |
| GET /v1/markets/{market_id} | One contract |
| GET /v1/underlyings | Underlying directory |
| GET /v1/underlyings/{ticker} | One underlying and its venues |
| GET /v1/venues | Venue directory |
| GET /v1/venues/{venue_id} | Venue profile |
| GET /v1/funding | Current funding |
| GET /v1/funding/history | Funding history |
| GET /v1/basis | Current basis |
| GET /v1/basis/history | Basis history |
| GET /v1/liquidity | Spread, depth, volume, open interest |
| GET /v1/reference-prices | Reference anchors |
| GET /v1/market-status | Cash-session state |
| GET /v1/corporate-actions | Events and venue treatments |
| GET /v1/eligibility | Stated access phrases |
| GET /v1/risk-disclosures | Disclosure matrix |
| GET /v1/specifications | Effective-dated specs |
| GET /v1/methodology | Method identifiers |
| GET /v1/changes | Public change log |
| GET /v1/alerts | Account alerts, scoped key |
| GET /v1/status | Feed status |
| GET /v1/dispersion | Cross-venue mark and funding ranges |
| GET /v1/screen | Filter the normalised book |
| GET /v1/book | Constructed depth ladder for one contract |
| GET /v1/paths | Constructed path ending at the snapshot |
| GET /v1/calendar | Events, holidays and funding clocks |
| GET /v1/fields | Field dictionary |
Streams that a licence would include
Funding, mark, reference, basis, liquidity, market status, corporate actions, specification changes, risk-disclosure changes. Not connected here.
Sandbox console
{
"data": [
{
"market_id": "northline:NVDA",
"symbol": "NL-NVDA-PERP",
"venue": "northline",
"mark_price": 178.7297,
"reference_price": 178.4,
"basis_pct": 0.1848,
"funding_rate": 0.00009679,
"funding_direction": "Longs pay shorts",
"source": "EPIC demonstration dataset",
"captured_at": "2026-09-25T20:00:00Z",
"methodology": "demo-snapshot-v1",
"verified": false
},
{
"market_id": "harbor:NVDA",
"symbol": "HNVDAPERP",
"venue": "harbor",
"mark_price": 177.6402,
"reference_price": 178.4,
"basis_pct": -0.4259,
"funding_rate": -0.0001158,
"funding_direction": "Shorts pay longs",
"source": "EPIC demonstration dataset",
"captured_at": "2026-09-25T20:00:00Z",
"methodology": "demo-snapshot-v1",
"verified": false
}
],
"demo": true
}curl
curl https://api.equityperpetual.com/v1/markets?underlying=NVDA \ -H "Authorization: Bearer $EPIC_KEY"
That host is documentation. The response shape is the JSON beside this panel, generated in the browser from the demonstration book.
TypeScript
const res = await fetch(url, { headers: { Authorization: `Bearer ${key}` }});
const body = await res.json();
body.data.forEach((row) => row.verified);Python
import requests
r = requests.get(url, headers={"Authorization": f"Bearer {key}"})
assert r.json()["demo"] is True