GEX term structure and Open Interest
curl --request GET \
--url https://api.gammaflip.io/api/v1/gex/term-oi/{exchange}/{coin} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.gammaflip.io/api/v1/gex/term-oi/{exchange}/{coin}"
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.gammaflip.io/api/v1/gex/term-oi/{exchange}/{coin}', 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.gammaflip.io/api/v1/gex/term-oi/{exchange}/{coin}",
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.gammaflip.io/api/v1/gex/term-oi/{exchange}/{coin}"
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.gammaflip.io/api/v1/gex/term-oi/{exchange}/{coin}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gammaflip.io/api/v1/gex/term-oi/{exchange}/{coin}")
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": {},
"meta": {
"timestamp": "2026-04-14T10:00:00+00:00",
"exchange": "all",
"coin": "BTC",
"rate_limit": {
"limit": 500,
"remaining": 487,
"reset": "2026-04-15T00:00:00+00:00"
}
}
}{
"error": "rate_limit_exceeded",
"message": "Daily limit of 500 reached.",
"current_tier": "free"
}{
"error": "rate_limit_exceeded",
"message": "Daily limit of 500 reached.",
"current_tier": "free"
}{
"error": "rate_limit_exceeded",
"message": "Daily limit of 500 reached.",
"current_tier": "free"
}Data
GEX term structure and Open Interest
Returns OI and GEX per expiration date, broken down by exchange.
Use all as exchange to get aggregated data across all exchanges.
This is the most common endpoint for building term-structure dashboards.
GET
/
gex
/
term-oi
/
{exchange}
/
{coin}
GEX term structure and Open Interest
curl --request GET \
--url https://api.gammaflip.io/api/v1/gex/term-oi/{exchange}/{coin} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.gammaflip.io/api/v1/gex/term-oi/{exchange}/{coin}"
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.gammaflip.io/api/v1/gex/term-oi/{exchange}/{coin}', 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.gammaflip.io/api/v1/gex/term-oi/{exchange}/{coin}",
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.gammaflip.io/api/v1/gex/term-oi/{exchange}/{coin}"
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.gammaflip.io/api/v1/gex/term-oi/{exchange}/{coin}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gammaflip.io/api/v1/gex/term-oi/{exchange}/{coin}")
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": {},
"meta": {
"timestamp": "2026-04-14T10:00:00+00:00",
"exchange": "all",
"coin": "BTC",
"rate_limit": {
"limit": 500,
"remaining": 487,
"reset": "2026-04-15T00:00:00+00:00"
}
}
}{
"error": "rate_limit_exceeded",
"message": "Daily limit of 500 reached.",
"current_tier": "free"
}{
"error": "rate_limit_exceeded",
"message": "Daily limit of 500 reached.",
"current_tier": "free"
}{
"error": "rate_limit_exceeded",
"message": "Daily limit of 500 reached.",
"current_tier": "free"
}Authorizations
API key prefixed with gex_sk_. Create one in your
account dashboard.
Path Parameters
Exchange name (bybit, deribit, okx) or all for aggregated data.
Available options:
bybit, deribit, okx, all, combined Example:
"all"
Base coin symbol (uppercase).
Example:
"BTC"
⌘I