The same numbers the pages are built from, as three static files.
Everything this site measures is also published as JSON. There is no key, no account, no quota and no rate limit, and there never will be — it is three static files behind a CDN, so serving them costs nothing worth metering.
| Endpoint | Contains |
|---|---|
/api/v1/funding.json | Every contract quoted on two or more of the four venues, with each venue's funding rate, its own settlement interval, and 24h volume. |
/api/v1/venues.json | Standard-tier fees and live depth per venue. |
/api/v1/index.json | Machine-readable index of the above. |
Licensed CC BY 4.0: use it commercially, redistribute it, build on it.
The one condition is attribution to perpdesk.net. The payload
carries no referral parameters and no tracking of any kind — CORS is open, so
you can call it from the browser.
The four venues do not settle funding on the same clock, so a raw rate from
one is not comparable with a raw rate from another. Every rate is given
normalised to eight hours as funding_rate_per_8h, alongside that
venue's real funding_interval_hours, so you can undo the
normalisation. Spreads are given both per period and per day, because an
unqualified "spread" does not say per what.
Rebuilt daily, read from each exchange's public endpoint at build time.
Each file carries its own generated_utc; trust that over the
cache header. The methodology states what each
figure is and what it is not.
curl -s https://perpdesk.net/api/v1/funding.json | head -40
If you would rather not call anything, drop this into a page. It reads the feed itself, so it stays current without you touching it again, and it sets no cookie and tracks nothing — a widget that watched your readers would deserve to be removed.
<iframe src="https://perpdesk.net/embed/funding/?base=BTC" title="BTC funding rates by venue" width="100%" height="260" loading="lazy" style="border:0;max-width:420px"></iframe>
Change base=BTC to any contract in the feed. Attribution is
built into the widget, which satisfies the licence on its own.
Here it is running: