curl --request GET \
--url https://test.deribit.com/api/v2/public/get_combo_details \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"id": 3,
"method": "public/get_combo_details",
"params": {
"combo_id": "BTC-FS-29APR22_PERP"
}
}
'import requests
url = "https://test.deribit.com/api/v2/public/get_combo_details"
payload = {
"jsonrpc": "2.0",
"id": 3,
"method": "public/get_combo_details",
"params": { "combo_id": "BTC-FS-29APR22_PERP" }
}
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: 3,
method: 'public/get_combo_details',
params: {combo_id: 'BTC-FS-29APR22_PERP'}
})
};
fetch('https://test.deribit.com/api/v2/public/get_combo_details', 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_combo_details",
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' => 3,
'method' => 'public/get_combo_details',
'params' => [
'combo_id' => 'BTC-FS-29APR22_PERP'
]
]),
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_combo_details"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"id\": 3,\n \"method\": \"public/get_combo_details\",\n \"params\": {\n \"combo_id\": \"BTC-FS-29APR22_PERP\"\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_combo_details")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"id\": 3,\n \"method\": \"public/get_combo_details\",\n \"params\": {\n \"combo_id\": \"BTC-FS-29APR22_PERP\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://test.deribit.com/api/v2/public/get_combo_details")
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\": 3,\n \"method\": \"public/get_combo_details\",\n \"params\": {\n \"combo_id\": \"BTC-FS-29APR22_PERP\"\n }\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": 3,
"result": {
"state_timestamp": 1650620605150,
"state": "active",
"legs": [
{
"instrument_name": "BTC-PERPETUAL",
"amount": -1
},
{
"instrument_name": "BTC-29APR22",
"amount": 1
}
],
"id": "BTC-FS-29APR22_PERP",
"instrument_id": 27,
"creation_timestamp": 1650620575000
}
}public/get_combo_details
Retrieves a live combo by combo_id: legs, combo state, state_timestamp, creation_timestamp, and instrument_id. This is not the full instrument spec โ use public/get_instrument with the same ID for tick size, commissions, and book state.
Looks up the live combo table only. Unknown IDs fail with combo not found; malformed IDs fail with wrong format. Expired or archivized combos that public/get_combo_ids no longer lists can still be loaded as instruments via public/get_instrument.
Use public/get_combo_ids to list live combo IDs.
๐ Related Article: Options Data Collection Best Practices
curl --request GET \
--url https://test.deribit.com/api/v2/public/get_combo_details \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"id": 3,
"method": "public/get_combo_details",
"params": {
"combo_id": "BTC-FS-29APR22_PERP"
}
}
'import requests
url = "https://test.deribit.com/api/v2/public/get_combo_details"
payload = {
"jsonrpc": "2.0",
"id": 3,
"method": "public/get_combo_details",
"params": { "combo_id": "BTC-FS-29APR22_PERP" }
}
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: 3,
method: 'public/get_combo_details',
params: {combo_id: 'BTC-FS-29APR22_PERP'}
})
};
fetch('https://test.deribit.com/api/v2/public/get_combo_details', 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_combo_details",
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' => 3,
'method' => 'public/get_combo_details',
'params' => [
'combo_id' => 'BTC-FS-29APR22_PERP'
]
]),
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_combo_details"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"id\": 3,\n \"method\": \"public/get_combo_details\",\n \"params\": {\n \"combo_id\": \"BTC-FS-29APR22_PERP\"\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_combo_details")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"id\": 3,\n \"method\": \"public/get_combo_details\",\n \"params\": {\n \"combo_id\": \"BTC-FS-29APR22_PERP\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://test.deribit.com/api/v2/public/get_combo_details")
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\": 3,\n \"method\": \"public/get_combo_details\",\n \"params\": {\n \"combo_id\": \"BTC-FS-29APR22_PERP\"\n }\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": 3,
"result": {
"state_timestamp": 1650620605150,
"state": "active",
"legs": [
{
"instrument_name": "BTC-PERPETUAL",
"amount": -1
},
{
"instrument_name": "BTC-29APR22",
"amount": 1
}
],
"id": "BTC-FS-29APR22_PERP",
"instrument_id": 27,
"creation_timestamp": 1650620575000
}
}Query Parameters
Combo ID (same string as the combo instrument name, for example BTC-FS-31DEC21-PERP). Malformed values fail with wrong format.
Unique combo identifier
"BTC-FS-31DEC21-PERP"
Response
Success response
The JSON-RPC version (2.0)
2.0 Combo book metadata from public/get_combos, public/get_combo_details, and private/create_combo. Not the full instrument object returned by public/get_instrument.
Hide child attributes
Hide child attributes
Unique combo identifier
"BTC-FS-31DEC21-PERP"
Instrument ID
Combo book state: "active" or "inactive". Distinct from the instrument order-book state (open, locked, and so on).
active, inactive Time the combo book last changed state (milliseconds since the UNIX epoch).
1536569522277
Time the combo instrument was created (milliseconds since the UNIX epoch).
1536569522277
The id that was sent in the request
Was this page helpful?