ArbPing Public API v1
Access real-time funding rate arbitrage data programmatically. Build your own dashboards, trading bots, or analytics tools on top of ArbPing's live data.
Overview
The ArbPing API gives you programmatic access to the same real-time data powering the dashboard — funding rates from Binance, OKX, Bybit, Bitget, and Hyperliquid, along with computed arbitrage spreads and opportunity rankings.
All API responses are JSON. Timestamps are ISO 8601 in UTC. Rates are expressed as percentages (e.g., 87.4 means 87.4% annual).
- ✅ Active Pro subscription
- ✅ Valid API key (generate at Settings → API Access)
- ✅ Rate limit: 100 requests/minute
Authentication
All API requests must include your API key in the X-API-Key header.
X-API-Key: arbp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxGetting your API key
- Ensure you have an active Pro subscription at /pricing
- Go to Settings → API Access
- Click Generate API Key
- Copy and store your key securely — it is only shown once
⚠️ Keep your API key secret. Do not commit it to version control or expose it in client-side code.
Rate Limits
The API is rate-limited to 100 requests per minute per API key. When exceeded, you'll receive a 429 Too Many Requests response with a Retry-After: 60 header.
HTTP/1.1 429 Too Many Requests
Retry-After: 60
{
"detail": "Rate limit exceeded: 100 requests per minute"
}/api/v1/opportunitiesGet Opportunities
Returns current funding rate arbitrage opportunities, sorted by spread (highest first).
Query Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| min_apr | float | 0 | Minimum annual spread percentage filter |
| symbol | string | — | Filter by symbol (e.g. BTCUSDT) |
| limit | int | 50 | Results per page (max 200) |
| offset | int | 0 | Pagination offset |
curl -X GET "https://arbping.com/api/v1/opportunities?min_apr=20&limit=10" \
-H "X-API-Key: YOUR_API_KEY"import requests
resp = requests.get(
"https://arbping.com/api/v1/opportunities",
params={"min_apr": 20, "limit": 10},
headers={"X-API-Key": "YOUR_API_KEY"}
)
data = resp.json()
for opp in data["data"]:
print(f"{opp['symbol']}: {opp['spread_annual']:.1f}% APR")const res = await fetch(
"https://arbping.com/api/v1/opportunities?min_apr=20&limit=10",
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const { data } = await res.json();
data.forEach(opp =>
console.log(`${opp.symbol}: ${opp.spread_annual.toFixed(1)}% APR`)
);{
"status": "ok",
"data": [
{
"symbol": "BTCUSDT",
"long_exchange": "hyperliquid",
"short_exchange": "binance",
"spread_annual": 87.4,
"estimated_daily_yield_10k": 23.95,
"break_even_hours": 1.2,
"persistence_score": 0.92
}
],
"meta": {
"timestamp": "2024-01-15T12:00:00Z",
"count": 1,
"total": 24,
"limit": 50,
"offset": 0
}
}/api/v1/ratesGet Current Rates
Returns the current funding rates for all symbols and exchanges.
Query Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| symbol | string | — | Filter by symbol (optional) |
| exchange | string | — | Filter by exchange (optional) |
curl -X GET "https://arbping.com/api/v1/rates?symbol=BTCUSDT" \
-H "X-API-Key: YOUR_API_KEY"import requests
resp = requests.get(
"https://arbping.com/api/v1/rates",
params={"symbol": "BTCUSDT"},
headers={"X-API-Key": "YOUR_API_KEY"}
)
rates = resp.json()["data"]
for r in rates:
print(f"{r['exchange']}: {r['rate_annual']:.2f}% annual")const res = await fetch(
"https://arbping.com/api/v1/rates?symbol=BTCUSDT",
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const { data } = await res.json();
data.forEach(r =>
console.log(`${r.exchange}: ${r.rate_annual?.toFixed(2)}% annual`)
);{
"status": "ok",
"data": [
{
"symbol": "BTCUSDT",
"exchange": "binance",
"rate_8h": 0.0012,
"rate_annual": 13.14,
"fetched_at": "2024-01-15T12:00:00Z"
}
],
"meta": { "count": 120 }
}/api/v1/rates/historyGet Rate History
Returns historical funding rate data for a given symbol with configurable period and interval.
Query Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| symbol | string | required | Symbol to fetch (e.g. BTCUSDT) |
| exchange | string | — | Filter by exchange (optional) |
| period | enum | 24h | Time range: 24h, 7d, 30d, 90d, 1y |
| interval | enum | 1h | Bucket size: 1h, 4h, 1d |
curl -X GET "https://arbping.com/api/v1/rates/history?symbol=BTCUSDT&period=7d&interval=4h" \
-H "X-API-Key: YOUR_API_KEY"import requests
resp = requests.get(
"https://arbping.com/api/v1/rates/history",
params={"symbol": "BTCUSDT", "period": "7d", "interval": "4h"},
headers={"X-API-Key": "YOUR_API_KEY"}
)
history = resp.json()["data"]
print(f"Got {len(history)} data points")const res = await fetch(
"https://arbping.com/api/v1/rates/history?symbol=BTCUSDT&period=7d&interval=4h",
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const { data, meta } = await res.json();
console.log(`${meta.symbol} — ${data.length} data points over ${meta.period}`);{
"status": "ok",
"data": [
{
"time": "2024-01-15T11:00:00Z",
"exchange": "binance",
"rate_8h": 0.0012,
"rate_annual": 13.14
}
],
"meta": {
"symbol": "BTCUSDT",
"period": "24h",
"interval": "1h",
"count": 96
}
}/api/v1/symbolsGet Symbols
Returns all tracked symbols with metadata, including which exchanges are available and the best current spread.
curl -X GET "https://arbping.com/api/v1/symbols" \
-H "X-API-Key: YOUR_API_KEY"import requests
resp = requests.get(
"https://arbping.com/api/v1/symbols",
headers={"X-API-Key": "YOUR_API_KEY"}
)
symbols = resp.json()["data"]
# Find symbols available on 4+ exchanges
multi_exchange = [s for s in symbols if len(s["exchanges_available"]) >= 4]
print(f"{len(multi_exchange)} symbols on 4+ exchanges")const res = await fetch(
"https://arbping.com/api/v1/symbols",
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const { data } = await res.json();
// Sort by best spread
const sorted = data.sort((a, b) => b.current_best_spread_apr - a.current_best_spread_apr);
console.log("Best symbol:", sorted[0]?.symbol);{
"status": "ok",
"data": [
{
"symbol": "BTCUSDT",
"exchanges_available": ["binance", "okx", "bybit", "hyperliquid"],
"current_best_spread_apr": 87.4
}
],
"meta": { "count": 42 }
}Error Codes
All errors return JSON with a detail field describing the issue.
| Code | Status | Description |
|---|---|---|
| 200 | OK | Success |
| 400 | Bad Request | Invalid query parameters |
| 401 | Unauthorized | Missing or invalid X-API-Key header |
| 403 | Forbidden | API access requires a Pro subscription |
| 429 | Too Many Requests | Rate limit exceeded (100 req/min). Check Retry-After header. |
| 500 | Internal Server Error | Server error — contact support if persistent |
{
"detail": "Human-readable error message"
}Ready to build?
Get your API key from your account settings. Pro plan required.