GET
/api/v1/futures/basisStartup tier+ · 80 req/minLatest annualised perp-vs-spot basis per base asset. Cash-and-carry telemetry.
Basis is the perp mark minus the spot last-trade. A persistently positive basis invites the classic cash-and-carry: long spot, short perp, capture the funding spread. Both legs need collectors — the endpoint returns `tableMissing: true` while either perp_mark_price or spot_price adapters are still pending.
Query parameters
This endpoint takes no query parameters.
Response shape
Always wrapped in the standard envelope. Nullable fields are explicitly marked — treat missing numeric data as a real data-source gap, not as an error.
data payloadtypescript
// Wrapped in the standard envelope:
// {
// data: /* shape below */,
// meta?: { total?: number; limit?: number; offset?: number; ... }
// }
{
rows: Array<{
base: string;
spotPrice: number;
perpPrice: number;
basisAbs: number;
basisPct: number;
annualizedPct: number;
perpSource: string;
spotSource: string;
venueCount: number;
ts: number;
}>;
tableMissing: boolean;
lastTs: number | null;
}Example
Copy the curl, replace YOUR_KEY with a real key from your dashboard, and run.
Requestbash
curl -sS "http://localhost:3000/api/v1/futures/basis" \
-H "Authorization: Bearer cg_live_YOUR_KEY"Responsejson
{
"data": {
"rows": [
{
"base": "BTC",
"spotPrice": 63120.5,
"perpPrice": 63210.0,
"basisAbs": 89.5,
"basisPct": 0.1418,
"annualizedPct": 51.75,
"perpSource": "binance_futures",
"spotSource": "binance",
"venueCount": 6,
"ts": 1744835000000
}
],
"tableMissing": false,
"lastTs": 1744835000000
},
"meta": { "total": 1, "tableMissing": false }
}Notes
- Annualisation uses 365x since perps have no expiry — treat it as a running yield, not a term structure.
Next
Check the error code reference, or get an API key to try the request against your own account.