curl "https://api.arcus.xyz/v1/fundingRates?market=BTC-USD&limit=100"import requests
r = requests.get(
"https://api.arcus.xyz/v1/fundingRates",
params={"market": "BTC-USD", "limit": 100},
)
print(r.json())
const url = new URL("https://api.arcus.xyz/v1/fundingRates");
url.searchParams.set("market", "BTC-USD");
url.searchParams.set("limit", "100");
const res = await fetch(url);
console.log(await res.json());
const options = {method: 'GET'};
fetch('https://api.arcus.xyz/v1/fundingRates', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.arcus.xyz/v1/fundingRates",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.arcus.xyz/v1/fundingRates"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.arcus.xyz/v1/fundingRates")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcus.xyz/v1/fundingRates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"fundingRates": [
{
"marketId": 32767,
"marketDisplayName": "BTC-USD",
"fundingRate": "0.0001",
"time": 1712345678000000
}
],
"total": 123
}{
"error": "Invalid request body",
"code": "GEO_RESTRICTED"
}{
"error": "rate limited",
"reason": "account_empty",
"retryAfterMs": 850,
"clientId": "my-order-42"
}Get market funding rates
Returns historical funding rates for a market, newest-first. Optional from/to (epoch microseconds, the unit of the time field in the response) bound the time window. No authentication header is required.
curl "https://api.arcus.xyz/v1/fundingRates?market=BTC-USD&limit=100"import requests
r = requests.get(
"https://api.arcus.xyz/v1/fundingRates",
params={"market": "BTC-USD", "limit": 100},
)
print(r.json())
const url = new URL("https://api.arcus.xyz/v1/fundingRates");
url.searchParams.set("market", "BTC-USD");
url.searchParams.set("limit", "100");
const res = await fetch(url);
console.log(await res.json());
const options = {method: 'GET'};
fetch('https://api.arcus.xyz/v1/fundingRates', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.arcus.xyz/v1/fundingRates",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.arcus.xyz/v1/fundingRates"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.arcus.xyz/v1/fundingRates")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcus.xyz/v1/fundingRates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"fundingRates": [
{
"marketId": 32767,
"marketDisplayName": "BTC-USD",
"fundingRate": "0.0001",
"time": 1712345678000000
}
],
"total": 123
}{
"error": "Invalid request body",
"code": "GEO_RESTRICTED"
}{
"error": "rate limited",
"reason": "account_empty",
"retryAfterMs": 850,
"clientId": "my-order-42"
}from/to (epoch microseconds, the unit of the time field in the response) bound the time window. No authentication header is required.Query Parameters
Start of the time window, filtering on time (epoch microseconds, inclusive) — the same unit and field the response reports, so a time read from one page is a valid bound for the next with no conversion.
Second- and millisecond-scale values are rejected with a 400 (the server requires at least 1e14). A millisecond bound read as microseconds would land in 1970 and quietly return nothing.
x >= 1000000000000001785801600000000
End of the time window, filtering on time (epoch microseconds, inclusive) — the same unit and field the response reports, so a time read from one page is a valid bound for the next with no conversion.
Funding ticks carry millisecond resolution, so an emitted time is always a whole millisecond and echoing it back resolves to exactly the tick it names. Bounds that fall mid-millisecond are narrowed to the range they fully cover.
Second- and millisecond-scale values are rejected with a 400 (the server requires at least 1e14). A millisecond bound read as microseconds would land in 1970 and quietly return nothing.
x >= 1000000000000001785805200000000
Was this page helpful?