Screener
curl --request GET \
--url https://api.polynode.dev/v3/perps/screener \
--header 'x-api-key: <api-key>'import requests
url = "https://api.polynode.dev/v3/perps/screener"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.polynode.dev/v3/perps/screener', 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.polynode.dev/v3/perps/screener",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$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.polynode.dev/v3/perps/screener"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
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.polynode.dev/v3/perps/screener")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.polynode.dev/v3/perps/screener")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"basis": "-0.012000",
"basis_bps": "-1.77",
"funding_rate": "0.0000125",
"index_price": "67.638",
"instrument_id": 10,
"mark_price": "67.626",
"open_interest": "485.754",
"symbol": "HYPE-USD"
},
{
"basis": "-20.000000",
"basis_bps": "-3.19",
"funding_rate": "0.0000125",
"index_price": "62781",
"instrument_id": 6,
"mark_price": "62761",
"open_interest": "66.53743",
"symbol": "BTC-USD"
},
{
"basis": "0.016000",
"basis_bps": "2.68",
"funding_rate": "0.00000625",
"index_price": "59.602",
"instrument_id": 5,
"mark_price": "59.618",
"open_interest": "8641.76",
"symbol": "SILVER-USD"
},
{
"basis": "-0.030000",
"basis_bps": "-4.07",
"funding_rate": "0.00000625",
"index_price": "73.648",
"instrument_id": 3,
"mark_price": "73.618",
"open_interest": "3790.472",
"symbol": "WTIOIL-USD"
},
{
"basis": "-3.000000",
"basis_bps": "-1.02",
"funding_rate": "0.00000625",
"index_price": "29515",
"instrument_id": 4,
"mark_price": "29512",
"open_interest": "153.1141",
"symbol": "NAS100-USD"
},
{
"basis": "-1.800000",
"basis_bps": "-2.40",
"funding_rate": "0.00000625",
"index_price": "7498.9",
"instrument_id": 1,
"mark_price": "7497.1",
"open_interest": "793.42066",
"symbol": "SP500-USD"
},
{
"basis": "-0.020000",
"basis_bps": "-1.32",
"funding_rate": "0.00000625",
"index_price": "151.38",
"instrument_id": 9,
"mark_price": "151.36",
"open_interest": "1880.1307",
"symbol": "SPCX-USD"
},
{
"basis": "-1.300000",
"basis_bps": "-3.16",
"funding_rate": "0.00000625",
"index_price": "4116.4",
"instrument_id": 2,
"mark_price": "4115.1",
"open_interest": "226.72911",
"symbol": "GOLD-USD"
},
{
"basis": "-0.043000",
"basis_bps": "-5.52",
"funding_rate": "-0.00000525",
"index_price": "77.92",
"instrument_id": 8,
"mark_price": "77.877",
"open_interest": "1389.3",
"symbol": "SOL-USD"
},
{
"basis": "-1.000000",
"basis_bps": "-5.73",
"funding_rate": "-0.00000623",
"index_price": "1746.7",
"instrument_id": 7,
"mark_price": "1745.7",
"open_interest": "2357.9583",
"symbol": "ETH-USD"
}
]
}Perps Market Data
Screener
Live cross-instrument screen: per-instrument funding rate, open interest, and the basis (mark minus index, in bps). Sort by funding, oi, or basis, and filter by min_funding. Computed on demand — Polymarket has no cross-instrument screen.
GET
/
v3
/
perps
/
screener
Screener
curl --request GET \
--url https://api.polynode.dev/v3/perps/screener \
--header 'x-api-key: <api-key>'import requests
url = "https://api.polynode.dev/v3/perps/screener"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.polynode.dev/v3/perps/screener', 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.polynode.dev/v3/perps/screener",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$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.polynode.dev/v3/perps/screener"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
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.polynode.dev/v3/perps/screener")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.polynode.dev/v3/perps/screener")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"basis": "-0.012000",
"basis_bps": "-1.77",
"funding_rate": "0.0000125",
"index_price": "67.638",
"instrument_id": 10,
"mark_price": "67.626",
"open_interest": "485.754",
"symbol": "HYPE-USD"
},
{
"basis": "-20.000000",
"basis_bps": "-3.19",
"funding_rate": "0.0000125",
"index_price": "62781",
"instrument_id": 6,
"mark_price": "62761",
"open_interest": "66.53743",
"symbol": "BTC-USD"
},
{
"basis": "0.016000",
"basis_bps": "2.68",
"funding_rate": "0.00000625",
"index_price": "59.602",
"instrument_id": 5,
"mark_price": "59.618",
"open_interest": "8641.76",
"symbol": "SILVER-USD"
},
{
"basis": "-0.030000",
"basis_bps": "-4.07",
"funding_rate": "0.00000625",
"index_price": "73.648",
"instrument_id": 3,
"mark_price": "73.618",
"open_interest": "3790.472",
"symbol": "WTIOIL-USD"
},
{
"basis": "-3.000000",
"basis_bps": "-1.02",
"funding_rate": "0.00000625",
"index_price": "29515",
"instrument_id": 4,
"mark_price": "29512",
"open_interest": "153.1141",
"symbol": "NAS100-USD"
},
{
"basis": "-1.800000",
"basis_bps": "-2.40",
"funding_rate": "0.00000625",
"index_price": "7498.9",
"instrument_id": 1,
"mark_price": "7497.1",
"open_interest": "793.42066",
"symbol": "SP500-USD"
},
{
"basis": "-0.020000",
"basis_bps": "-1.32",
"funding_rate": "0.00000625",
"index_price": "151.38",
"instrument_id": 9,
"mark_price": "151.36",
"open_interest": "1880.1307",
"symbol": "SPCX-USD"
},
{
"basis": "-1.300000",
"basis_bps": "-3.16",
"funding_rate": "0.00000625",
"index_price": "4116.4",
"instrument_id": 2,
"mark_price": "4115.1",
"open_interest": "226.72911",
"symbol": "GOLD-USD"
},
{
"basis": "-0.043000",
"basis_bps": "-5.52",
"funding_rate": "-0.00000525",
"index_price": "77.92",
"instrument_id": 8,
"mark_price": "77.877",
"open_interest": "1389.3",
"symbol": "SOL-USD"
},
{
"basis": "-1.000000",
"basis_bps": "-5.73",
"funding_rate": "-0.00000623",
"index_price": "1746.7",
"instrument_id": 7,
"mark_price": "1745.7",
"open_interest": "2357.9583",
"symbol": "ETH-USD"
}
]
}A cross-instrument screen computed live from current prices. For every instrument it returns the funding rate, open interest, and the basis — the mark price minus the index price, both as an absolute number and in basis points (the perp’s premium or discount to spot).
Sort by
funding, oi, or basis (widest first), and filter with min_funding to surface only instruments paying above a threshold. Polymarket returns tickers but offers no way to sort or screen across them — this does it in one call, always on current data.⌘I

