curl --request GET \
--url https://test.deribit.com/api/v2/public/get_expirations \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"id": 1,
"method": "public/get_expirations",
"params": {
"currency": "any",
"kind": "any"
}
}
'import requests
url = "https://test.deribit.com/api/v2/public/get_expirations"
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "public/get_expirations",
"params": {
"currency": "any",
"kind": "any"
}
}
headers = {"Content-Type": "application/json"}
response = requests.get(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
jsonrpc: '2.0',
id: 1,
method: 'public/get_expirations',
params: {currency: 'any', kind: 'any'}
})
};
fetch('https://test.deribit.com/api/v2/public/get_expirations', 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://test.deribit.com/api/v2/public/get_expirations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_POSTFIELDS => json_encode([
'jsonrpc' => '2.0',
'id' => 1,
'method' => 'public/get_expirations',
'params' => [
'currency' => 'any',
'kind' => 'any'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://test.deribit.com/api/v2/public/get_expirations"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"id\": 1,\n \"method\": \"public/get_expirations\",\n \"params\": {\n \"currency\": \"any\",\n \"kind\": \"any\"\n }\n}")
req, _ := http.NewRequest("GET", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://test.deribit.com/api/v2/public/get_expirations")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"id\": 1,\n \"method\": \"public/get_expirations\",\n \"params\": {\n \"currency\": \"any\",\n \"kind\": \"any\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://test.deribit.com/api/v2/public/get_expirations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"jsonrpc\": \"2.0\",\n \"id\": 1,\n \"method\": \"public/get_expirations\",\n \"params\": {\n \"currency\": \"any\",\n \"kind\": \"any\"\n }\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"result": {
"future": [
"21SEP24",
"22SEP24",
"PERPETUAL"
],
"option": [
"21SEP24",
"22SEP24",
"23SEP24"
]
}
}public/get_expirations
Retrieves expiration labels for listed futures and options. Values are instrument-style date strings such as 21SEP24, or PERPETUAL for perpetuals โ not Unix timestamps. Daily 08:00 UTC expirations are date-only; other expiration times include hour and minute.
Spots and combos are not included, even when kind is omitted or "any".
currency is a settlement currency, "any", or "grouped":
"any"โ a flat map keyed byfuture/option(dates merged across currencies). This is the shape in the example.- a named currency โ
{ "<currency>": { "future": [...], "option": [...] } }with a lowercase currency key (for examplebtc). "grouped"โ the same nested shape for every tradable settlement currency.
If currency is omitted, currency_pair is used (default: all pairs). When currency is set, currency_pair is ignored. kind defaults to "any" (future and option); "spot", "future_combo", and "option_combo" are not useful filters here.
๐ Related Article: Using the currency Parameter
curl --request GET \
--url https://test.deribit.com/api/v2/public/get_expirations \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"id": 1,
"method": "public/get_expirations",
"params": {
"currency": "any",
"kind": "any"
}
}
'import requests
url = "https://test.deribit.com/api/v2/public/get_expirations"
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "public/get_expirations",
"params": {
"currency": "any",
"kind": "any"
}
}
headers = {"Content-Type": "application/json"}
response = requests.get(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
jsonrpc: '2.0',
id: 1,
method: 'public/get_expirations',
params: {currency: 'any', kind: 'any'}
})
};
fetch('https://test.deribit.com/api/v2/public/get_expirations', 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://test.deribit.com/api/v2/public/get_expirations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_POSTFIELDS => json_encode([
'jsonrpc' => '2.0',
'id' => 1,
'method' => 'public/get_expirations',
'params' => [
'currency' => 'any',
'kind' => 'any'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://test.deribit.com/api/v2/public/get_expirations"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"id\": 1,\n \"method\": \"public/get_expirations\",\n \"params\": {\n \"currency\": \"any\",\n \"kind\": \"any\"\n }\n}")
req, _ := http.NewRequest("GET", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://test.deribit.com/api/v2/public/get_expirations")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"id\": 1,\n \"method\": \"public/get_expirations\",\n \"params\": {\n \"currency\": \"any\",\n \"kind\": \"any\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://test.deribit.com/api/v2/public/get_expirations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"jsonrpc\": \"2.0\",\n \"id\": 1,\n \"method\": \"public/get_expirations\",\n \"params\": {\n \"currency\": \"any\",\n \"kind\": \"any\"\n }\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"result": {
"future": [
"21SEP24",
"22SEP24",
"PERPETUAL"
],
"option": [
"21SEP24",
"22SEP24",
"23SEP24"
]
}
}Query Parameters
The currency symbol or "any" for all or "grouped" for all grouped by currency. Optional; if omitted, currency_pair is used (default: all pairs).
๐ Related Article: Using the currency Parameter
Currency name or "any" if don't care or "grouped" if grouped by currencies
BTC, ETH, USDC, USDT, any, grouped Instrument kind, "future" or "option" or "any" for both. If omitted, "any" is used. Spots and combos are not returned.
Instrument kind: "future", "option" or "any" for all
future, option, any The currency pair symbol Index identifier, matches (base) cryptocurrency with quote currency
btc_usd, eth_usd, ada_usdc, algo_usdc, avax_usdc, bch_usdc, bnb_usdc, btc_usdc, btcdvol_usdc, buidl_usdc, doge_usdc, dot_usdc, eurr_usdc, eth_usdc, ethdvol_usdc, hype_usdc, link_usdc, ltc_usdc, near_usdc, paxg_usdc, shib_usdc, sol_usdc, steth_usdc, ton_usdc, trump_usdc, trx_usdc, uni_usdc, usde_usdc, usyc_usdc, xrp_usdc, btc_usdt, eth_usdt, eurr_usdt, sol_usdt, steth_usdt, usdc_usdt, usde_usdt, btc_eurr, btc_usde, btc_usyc, eth_btc, eth_eurr, eth_usde, eth_usyc, steth_eth, paxg_btc, drbfix-btc_usdc, drbfix-eth_usdc Response
Success response
The JSON-RPC version (2.0)
2.0 Expiration labels for futures and options. Not Unix timestamps. Each value is a string such as 21SEP24 or PERPETUAL.
Shape depends on currency:
"any": keys arefutureand/oroption; values are lists of labels (merged across currencies).- a named settlement currency or
"grouped": keys are lowercase currency symbols (or a pair symbol whencurrency_pairwas used); values are maps of kind โ list of labels.
Hide child attributes
Hide child attributes
Expiration labels when currency=any.
The id that was sent in the request
Was this page helpful?