Perpetual futures data from 19 venues, as a request or as a tool

Funding rates now and for every settlement we hold, cross-venue spreads priced against real order-book depth, and the listings calendar. One key for programs, one connection for Claude, ChatGPT and Cursor. Every response names the page it came from.

Venues
19
Coins with a funding page
987
Data delay on paid plans
0 s
GET /api/v1/funding/BTC
curl https://arbitron.app/api/v1/funding/BTC \
  -H "Authorization: Bearer $ARBITRON_KEY"
200 RateLimit: "minute";r=119;t=41, "month";r=99871;t=1209600
{
  "data": {
    "coin": "BTC",
    "venue_count": 18,
    "spread_pct": 0.016532,
    "best_short_exchange": "Blofin",
    "best_long_exchange": "GateIo",
    "rates": [
      { "exchange": "Blofin", "symbol": "BTC-USDT", "rate_pct": 0.016532,
        "interval_hours": 8, "next_funding_at": "2026-09-21T00:00:00Z" },
      { "exchange": "Htx", "symbol": "BTC-USDT", "rate_pct": 0.01,
        "interval_hours": 8, "next_funding_at": "2026-09-21T00:00:00Z" },
      { "exchange": "Poloniex", "symbol": "BTC-USDT", "rate_pct": 0.01,
        "interval_hours": 8, "next_funding_at": "2026-09-21T00:00:00Z" },
      ... 15 more rows
    ]
  },
  "meta": {
    "as_of": "2026-09-20T17:41:31Z",
    "delayed_seconds": 0,
    "source": "arbitron.app",
    "url": "https://arbitron.app/funding-rates/coin/btc?utm_source=api"
  }
}
Live: rendered from the snapshot the API serves right now. Reload the page and the numbers move with the market.
01 Quickstart

Two minutes from a key to a response

  1. Create a key. In Settings, API keys. It is shown once and starts with arb_live_.
  2. Call one endpoint. Send the key as a bearer token. The response at the top of this page is what comes back.
  3. Read the RateLimit header. Every response says how much of the minute and of the month is left, so a client can pace itself and never see a 429.
  4. Connect an assistant. The MCP tab holds the config block for Claude Desktop, Cursor and ChatGPT.
curl "https://arbitron.app/api/v1/spreads?size_usd=100&limit=3" \
  -H "Authorization: Bearer $ARBITRON_KEY"
Claude Desktop, Cursor and ChatGPT take this block as is. An assistant can also sign in with your Arbitron account through OAuth and then needs no key at all.
02 Endpoints

Eight endpoints, one envelope

Read-only JSON over HTTPS at https://arbitron.app/api/v1. Percentages end in _pct and are percent values, timestamps are UTC ISO 8601, lists page with a cursor. The full parameter and schema reference is generated from the OpenAPI document.

Method Path Scope Returns
GET /api/v1/funding funding:read Current funding rate on every venue and symbol, sorted by absolute rate. Filter by coin or venue.
GET /api/v1/funding/{coin} funding:read One coin across venues: every rate, the spread between highest and lowest, and which venue pays a short or a long best right now.
GET /api/v1/funding/history history:read Funding history, one annualised point per day for every venue or every settlement print for one venue. Depth depends on the plan.
GET /api/v1/spreads spreads:read Executable cross-venue spreads from the public scanner, priced against real order-book depth for an order of size_usd.
GET /api/v1/listings listings:read Announced listings and delistings: what each venue announced, when it takes effect and where the announcement is.
GET /api/v1/exchanges The venues, with tracked instrument counts, maximum leverage, taker fee and links to their specs and funding pages.
GET /api/v1/coins Ticker lookup: q matches the start of a ticker. Each coin carries its venue count and 24h volume.
GET /api/v1/usage usage:read This key's plan, the month and minute windows, and what the plan includes.

Every response is an envelope: data, then meta with meta.as_of, meta.delayed_seconds, meta.url, meta.next_cursor.

The anonymous discovery document lists all of this in JSON: GET /api/v1 · /api/v1/openapi.json

03 MCP server

The same data as tools for an assistant

Eight read-only tools over the four datasets, for Claude, ChatGPT, Cursor and any other MCP client. An assistant with the connection uses them when a question is about funding, spreads or listings, and every result ends with the page to cite.

Tool Answers
arbitron_get_funding_rates Current funding on every venue and symbol, filtered by coin or venue.
arbitron_get_coin_funding One coin across venues, with the best venue to be short and the best to be long.
arbitron_get_funding_history Daily or per-settlement funding history, to the depth of the plan.
arbitron_get_spreads Executable spreads at an order size, best first.
arbitron_get_listings What lists or delists in a window, per venue.
arbitron_get_exchanges The venue list with contract specs and links.
arbitron_get_usage This connection's remaining quota, so the assistant can explain a limit.
Endpoint
https://arbitron.app/mcp
Transport
Streamable HTTP, stateless: no session to keep, every call stands alone. One tool call counts as one request against the same quotas as the REST API.
Authentication
An API key as a bearer header for clients that take a static header, or OAuth 2.1 with PKCE: the assistant signs in with your Arbitron account and you approve the scopes on a consent screen.
Citation
Every result carries meta.url, the human page for the same numbers. That page is what the assistant cites, and it is the same data.
04 Plans

A free demo, then three sizes of the same product

Monthly, paid the way every Arbitron plan is paid. Quotas are hard caps: when a window is spent you get a 429 and never an invoice. Every tier includes the MCP server.

Demo

Every account. The shape of the data, delayed.

$0 /mo
Requests per month
3,000
Per minute
20
API keys
1
History depth
7 days
Data delay
15 min
Commercial use
No
MCP server
Yes

Developer

Most popular

Live funding, spreads and listings for your own scripts and dashboards.

$39 /mo
Requests per month
100,000
Per minute
120
API keys
3
History depth
90 days
Data delay
Live
Commercial use
No
MCP server
Yes

Pro

Deeper history and a commercial licence for the products you ship.

$129 /mo
Requests per month
500,000
Per minute
300
API keys
10
History depth
730 days
Data delay
Live
Commercial use
Yes
MCP server
Yes

Business

The full archive, the highest limits and keys for the whole team.

$399 /mo
Requests per month
2,000,000
Per minute
600
API keys
25
History depth
Everything we hold
Data delay
Live
Commercial use
Yes
MCP server
Yes

Prime includes Developer at no extra charge, so the top trading plan is also an entry to the API. Pricing

Demo data must be attributed to Arbitron with a link to the page it came from.

05 Rate limits and caching

Two windows, both on every response

Each key has a minute window and a month window. Both are advertised on every response in the standard RateLimit-Policy and RateLimit fields, so a client can pace itself without ever hitting a limit.

  • When a window is spent you get 429 with Retry-After in seconds and a problem body naming the window.
  • Every data response carries an ETag. Send it back as If-None-Match and an unchanged body answers 304, which is refunded on both windows.
  • Cache-Control is private, max-age=15 on live data and max-age=300 on delayed data, matching how often the snapshot behind it moves.
  • The month resets on the 1st at 00:00 UTC. Nothing is billed as overage.
  • One request is one request: history, spreads and funding cost the same, and an MCP tool call counts like a REST call.
Headers on a Developer key
RateLimit-Policy: "minute";q=120;w=60, "month";q=100000;w=2592000
RateLimit:        "minute";r=118;t=41, "month";r=99871;t=1209600
429 minute window spent
Retry-After: 19
RateLimit: "minute";r=0;t=19, "month";r=99870;t=1209581

{ "type": "https://arbitron.app/developers/errors#rate-limited",
  "title": "Too many requests this minute", "status": 429,
  "detail": "The api-developer plan allows 120 requests per minute; the window resets in 19 s. Cache responses (they carry ETag) or upgrade." }
06 Errors

Problem details you can switch on

Errors are RFC 9457 problem details: a stable type URL that points at a row of this table, a title, the HTTP status, a detail that says what to change, the request id as instance, and suggestions where a close match exists.

404 with suggestions
HTTP/1.1 404 Not Found
Content-Type: application/problem+json

{
  "type": "https://arbitron.app/developers/errors#unknown-coin",
  "title": "Unknown coin",
  "status": 404,
  "detail": "No venue quotes a perpetual on 'ETHEREUM'. GET /api/v1/coins?q=ETHEREUM lists close matches.",
  "instance": "0HN7Q2K3J9R4P:00000001",
  "code": "unknown-coin",
  "docs": "https://arbitron.app/developers",
  "suggestions": ["ETH", "ETC", "ETHFI"]
}
Status Code What to change
400 invalid-parameter A query value is out of range or the wrong shape. detail names the parameter and the accepted values.
401 unauthenticated No key, or one that is mistyped, revoked, expired or rotated out. Send Authorization: Bearer with a key from Settings, API keys.
403 scope-missing The key was created without the scope this endpoint needs; detail lists the scopes it has. Create a key with that scope.
403 plan-limit The request reaches past the plan: a history window deeper than it includes, or a page larger than the Demo plan returns. Narrow the request or upgrade.
404 unknown-coin No venue quotes a perpetual on that ticker. suggestions carries close matches, and GET /api/v1/coins?q= searches.
404 unknown-exchange The venue is not one the API serves. suggestions lists the venues, as does GET /api/v1/exchanges.
404 not-found No endpoint at that path under /api/v1. GET /api/v1 lists the ones that exist.
429 rate-limited The minute window is spent, or too many rejected keys came from one address. Wait Retry-After seconds, or pace the client from the RateLimit header.
429 quota-exhausted The month's requests are used up. The quota resets on the 1st at 00:00 UTC; a higher plan has more.
503 snapshot-unavailable The snapshot behind the endpoint is still warming up after a restart. Retry in a minute.
503 api-disabled The API is not enabled on this host. Nothing to change on your side; it is a configuration fault on ours.
07 Versioning

v1 is the contract

/api/v1 is the contract. Fields, endpoints, enum values and optional parameters are added without a version change. Removing or renaming anything, changing a type or changing a default is v2, and v1 keeps working for twelve months after v2 ships.

A deprecated endpoint or field announces itself in the response with Deprecation and Sunset headers and a Link to the changelog entry that names the replacement. The MCP server's version follows the same number, and tool names never change within a major version.

The OpenAPI document is versioned with the API; a diff of it is part of every release note. /api/v1/openapi.json

a deprecated field
Deprecation: @1789500000
Sunset: Mon, 20 Sep 2027 00:00:00 GMT
Link: <https://arbitron.app/developers#versioning>; rel="deprecation"

Changelog

2026-09-20
v1 published: funding, funding history, spreads, listings, exchanges, coins and usage. MCP server with seven tools, key or OAuth.
Questions

Frequently Asked Questions

Is there a free tier?
Yes. Every account holds a Demo key: 3,000 requests a month, 20 a minute, and data 15 minutes behind the live snapshot. Create it in Settings, API keys. No card and no plan needed.
Why is Demo data delayed?
The Demo tier reads a snapshot 15 minutes old. That is enough to build against and to show an assistant the shape of the data, and useless to trade on. Paid plans read the live snapshot, which refreshes every minute.
Can I use the data commercially?
Commercial use is included in Pro, Business. Developer covers personal and internal use, and Demo data must be attributed to Arbitron with a link to the page it came from.
How are keys stored?
We keep a keyed hash, never the key. The plaintext is shown once at creation and cannot be shown again; the console lists the prefix so you can tell keys apart. Authorization headers are never written to logs.
How do I rotate a key?
Rotate it in Settings, API keys: a new key is issued and the old one keeps working for 24 hours, so nothing goes dark mid-deploy. Revoke stops a key at once. Keys expire after a year by default; the expiry is editable.
Do assistants need a key?
No. Claude, ChatGPT and other MCP clients sign in with your Arbitron account through OAuth, and you approve the scopes on a consent screen. Clients that take a static header, such as Cursor, can use a key on the MCP endpoint instead. Either way the calls meter against the same plan.
Do 304 responses count against my quota?
No. A conditional request whose ETag still matches moves no data, so it is refunded on both the minute and the month window. Cache the ETag and send If-None-Match.
What happens when I hit a limit?
You get 429 with Retry-After and the RateLimit header naming the spent window. Nothing is billed as overage, and the month resets on the 1st at 00:00 UTC. A higher plan has larger windows.

Start with the free key

The first request takes two minutes. The reference has a try-it panel that uses your key.

Reconnecting…

Retrying in s…

Reconnecting…

Arbitron is updating. Back in a few seconds…

No internet connection. Waiting to reconnect…

Session paused

Reloading…

Something went wrong on this page. Arbitron is updating. This page will reload itself once the new version is up… No internet connection. Waiting to reconnect… Reload