curl --request GET \
--url https://test.deribit.com/api/v2/public/get_instrument \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"id": 2,
"method": "public/get_instrument",
"params": {
"instrument_name": "BTC-13JAN23-16000-P"
}
}
'import requests
url = "https://test.deribit.com/api/v2/public/get_instrument"
payload = {
"jsonrpc": "2.0",
"id": 2,
"method": "public/get_instrument",
"params": { "instrument_name": "BTC-13JAN23-16000-P" }
}
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: 2,
method: 'public/get_instrument',
params: {instrument_name: 'BTC-13JAN23-16000-P'}
})
};
fetch('https://test.deribit.com/api/v2/public/get_instrument', 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_instrument",
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' => 2,
'method' => 'public/get_instrument',
'params' => [
'instrument_name' => 'BTC-13JAN23-16000-P'
]
]),
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_instrument"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"id\": 2,\n \"method\": \"public/get_instrument\",\n \"params\": {\n \"instrument_name\": \"BTC-13JAN23-16000-P\"\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_instrument")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"id\": 2,\n \"method\": \"public/get_instrument\",\n \"params\": {\n \"instrument_name\": \"BTC-13JAN23-16000-P\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://test.deribit.com/api/v2/public/get_instrument")
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\": 2,\n \"method\": \"public/get_instrument\",\n \"params\": {\n \"instrument_name\": \"BTC-13JAN23-16000-P\"\n }\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": 2,
"result": {
"tick_size": 0.0005,
"tick_size_steps": [
{
"above_price": 120,
"tick_size": 0.001
},
{
"above_price": 200,
"tick_size": 0.003
}
],
"taker_commission": 0.0003,
"strike": 16000,
"settlement_period": "week",
"settlement_currency": "BTC",
"quote_currency": "BTC",
"price_index": "btc_usd",
"option_type": "put",
"min_trade_amount": 0.1,
"maker_commission": 0.0003,
"kind": "option",
"is_active": true,
"instrument_name": "BTC-13JAN23-16000-P",
"instrument_id": 144613,
"expiration_timestamp": 1673596800000,
"creation_timestamp": 1671696002000,
"counter_currency": "USD",
"contract_size": 1,
"lot_size": 1,
"block_trade_tick_size": 0.0001,
"block_trade_min_trade_amount": 25,
"block_trade_commission": 0.00015,
"base_currency": "BTC",
"state": "open",
"index_id": 1000033,
"product_group": "BTC",
"underlying_type": "crypto"
}
}public/get_instrument
Retrieves detailed information about a specific instrument, including instrument specifications, contract details, tick size, settlement currency, expiration date (for futures and options), strike price (for options), underlying type, and other instrument parameters.
Looks up by instrument_name, including combo IDs and expired or archivized instruments that public/get_instruments no longer lists. Unknown names fail with instrument not found. For live combo legs and combo-book state, use public/get_combo_details / public/get_combos instead of this method.
is_active is true while the order book is visible (open, settlement, locked, or halted). It is not the same as tradable: only state open accepts new orders. After delivery the book becomes delivered (is_active false) and is later archivized.
Spot instruments omit settlement_currency and settlement_period. Spot routed to Coinbase Exchange also omit block-trade fields and include is_cbe_routed / is_csr (present only when true). Futures include max_leverage and max_non_default_leverage. Some USDC spot pairs that support margin loans also include max_leverage. Perpetuals still have expiration_timestamp.
๐ Related Article: Spot Trading: Deribit and Coinbase-Routed Instruments
curl --request GET \
--url https://test.deribit.com/api/v2/public/get_instrument \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"id": 2,
"method": "public/get_instrument",
"params": {
"instrument_name": "BTC-13JAN23-16000-P"
}
}
'import requests
url = "https://test.deribit.com/api/v2/public/get_instrument"
payload = {
"jsonrpc": "2.0",
"id": 2,
"method": "public/get_instrument",
"params": { "instrument_name": "BTC-13JAN23-16000-P" }
}
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: 2,
method: 'public/get_instrument',
params: {instrument_name: 'BTC-13JAN23-16000-P'}
})
};
fetch('https://test.deribit.com/api/v2/public/get_instrument', 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_instrument",
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' => 2,
'method' => 'public/get_instrument',
'params' => [
'instrument_name' => 'BTC-13JAN23-16000-P'
]
]),
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_instrument"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"id\": 2,\n \"method\": \"public/get_instrument\",\n \"params\": {\n \"instrument_name\": \"BTC-13JAN23-16000-P\"\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_instrument")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"id\": 2,\n \"method\": \"public/get_instrument\",\n \"params\": {\n \"instrument_name\": \"BTC-13JAN23-16000-P\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://test.deribit.com/api/v2/public/get_instrument")
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\": 2,\n \"method\": \"public/get_instrument\",\n \"params\": {\n \"instrument_name\": \"BTC-13JAN23-16000-P\"\n }\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": 2,
"result": {
"tick_size": 0.0005,
"tick_size_steps": [
{
"above_price": 120,
"tick_size": 0.001
},
{
"above_price": 200,
"tick_size": 0.003
}
],
"taker_commission": 0.0003,
"strike": 16000,
"settlement_period": "week",
"settlement_currency": "BTC",
"quote_currency": "BTC",
"price_index": "btc_usd",
"option_type": "put",
"min_trade_amount": 0.1,
"maker_commission": 0.0003,
"kind": "option",
"is_active": true,
"instrument_name": "BTC-13JAN23-16000-P",
"instrument_id": 144613,
"expiration_timestamp": 1673596800000,
"creation_timestamp": 1671696002000,
"counter_currency": "USD",
"contract_size": 1,
"lot_size": 1,
"block_trade_tick_size": 0.0001,
"block_trade_min_trade_amount": 25,
"block_trade_commission": 0.00015,
"base_currency": "BTC",
"state": "open",
"index_id": 1000033,
"product_group": "BTC",
"underlying_type": "crypto"
}
}Query Parameters
Instrument name Unique instrument identifier
"BTC-PERPETUAL"
Response
Success response
The JSON-RPC version (2.0)
2.0 Hide child attributes
Hide child attributes
Instrument kind: "future", "option", "spot", "future_combo", "option_combo"
future, option, spot, future_combo, option_combo The underlying currency being traded. Not limited to BTC/ETH โ altcoins, RWAs, and other listed bases are returned as their currency symbol.
The currency in which the instrument prices are quoted. Inverse options and futures are typically quoted in USD; linear and spot instruments are typically quoted in USDC or the quote coin.
Minimum amount for trading and the quantity increment (step size) for order amounts. For perpetual and inverse futures the amount is in USD units. For options and linear futures it is the underlying base currency coin.
This is the JSON-RPC name for the Starbase quantity increment (qty_tick_size on Starbase REST, SBE minOrderQuantity ร 10^quantityExponent). JSON-RPC does not return a qty_tick_size field. Distinct from contract_size; do not assume the two values are equal.
0.1
Unique instrument identifier
"BTC-PERPETUAL"
true while the order book is visible (open, settlement, locked, or halted). false for delivered, inactive, and archivized.
This is not the same as tradable. Only state open accepts new orders; locked allows cancels only, and settlement / halted reject new orders even when is_active is true.
The time when the instrument was first created (milliseconds since the UNIX epoch).
1536569522277
Specifies minimal price change and, as follows, the number of decimal places for instrument prices.
0.0001
The time when the instrument will expire (milliseconds since the UNIX epoch). Present for perpetuals as well (a far-future timestamp); do not treat a non-zero value as proof the instrument is dated.
Contract size for the instrument, expressed in the same unit as the order amount. For inverse (reversed) futures and perpetuals this is USD โ BTC-PERPETUAL has a contract size of 10 USD. For options, spots, and for linear futures and perpetuals it is the base currency coin โ BTC_USDC-PERPETUAL has a contract size of 0.0001 BTC. Note that on an inverse instrument base_currency identifies the underlying and settlement coin and does not indicate the unit of contract_size.
Distinct from min_trade_amount. contract_size converts between amount and contracts. Starbase matching uses the quantity increment, which JSON-RPC exposes as min_trade_amount (Starbase REST name: qty_tick_size). The two values may currently coincide on some instruments, but that is not a guarantee.
1
Name of price index that is used for this instrument
"btc_usdc"
The type of the underlying asset.
crypto, equity, commodity, preipo, equity_etf, crypto_index, adr, foreign_equity, equity_index, commodity_index, commodity_etf, otc Numeric identifier of the price index used by this instrument. Derived from the index currency pair, so all instruments sharing the same price_index also share the same index_id.
1000004
Product group classification of the instrument's base currency. Determines gateway and multicast channel assignment โ see Underlying Tiers.
BTC, ETH, TIER_2, TIER_3, RWA "BTC"
Optional (omitted for spot). Settlement currency for the instrument. For inverse (reversed) contracts this is the base coin (e.g. BTC); for linear contracts it is typically the quote currency (e.g. USDC).
Counter currency of the instrument's currency pair (e.g. USD or USDC).
Instrument ID
Optional (omitted for spot). Calendar unit of the instrument's settlement/expiration period (minute, hour, day, week, month, or perpetual). Biweekly contracts still report week.
minute, hour, day, week, month, perpetual The strike value (only for options).
The option type (only for options).
call, put Future type (only for futures)(field is deprecated and will be removed in the future, instrument_type should be used instead).
linear, reversed Type of the instrument. linear or reversed. Present for options and spots as well as futures; do not assume it is futures-only.
Lot size for instrument, used as the unit for fee lot counting. Omitted when the instrument has no configured lot size.
1
Maker commission for instrument.
0.0001
Taker commission for instrument.
0.0005
Maximal liquidation trade commission for instrument (only for futures).
0.001
Optional. Maximum maker commission. Returned only when extended=true on public/get_instruments.
Optional. Maximum taker commission. Returned only when extended=true on public/get_instruments.
Optional. Maximum liquidation commission. Returned only when extended=true on public/get_instruments. Distinct from max_liquidation_commission, which is present on futures without extended.
Optional. Maximum settlement commission. Returned only when extended=true on public/get_instruments.
Optional (futures only). Formatted margin parameters. Returned only when extended=true on public/get_instruments.
Optional (futures only). Trading bandwidth fraction used in mark-price logic. Returned only when extended=true on public/get_instruments.
Optional (perpetual futures only). Perpetual funding dampener. Returned only when extended=true on public/get_instruments. The JSON field name is spelled dempener.
Optional (perpetual futures only). Maximum funding rate. Returned only when extended=true on public/get_instruments.
Block Trade commission for instrument. Omitted for spot routed to Coinbase Exchange (CSR), which does not support block trades.
0.0005
Specifies minimal price change for block trading.
0.01
Minimum amount for block trading.
25
Maximal leverage for the default risk profile. Present on futures. Also present on some USDC spot pairs when spot margin loans are enabled (borrowable base, USDC quote); other spots omit the field. Not present on options.
100
Maximal leverage for the non-default risk profile (futures only). Omitted on options and spots.
The state of the order book. Represents the current lifecycle stage of the instrument.
State Lifecycle and Meanings:
open: Default state for running books. In this state book is accepting new orders, edits, cancels; prices should be updated, trading is live.settlement: Books enters to this state during settlement/delivery. New orders, edits, cancels are not accepted. After this state normally next state should beopenif it was settlement, ordeliveredif it was delivery. On enter to this state good till day orders in book are canceled.delivered: Final state of book that has been delivered. New orders, edits, cancels are not accepted. After some time book process will be terminated and, instrument moved toexpired_instrumentsand itsinstrument_statewill become archivized. On enter to this all open orders in book are canceled.inactive: After a book is deactivated, this state is set on book. New orders, edits, cancels are not accepted. On enter to this all open orders in book are canceled. Book in this state is not considered as open. This can be also final state for book.locked: New orders, edits, are not accepted, only cancels ARE accepted. In some cases when configured books can start as locked or it may become locked on admin request. Settlement is possible on locked books.halted: The state that books enter as a result of an error. Settlement is not possible when there is at least one book in this state.archivized: Set when instrument is moved toexpired_instrumentstable, final state.
open, settlement, delivered, inactive, locked, halted, archivized Internal identifier for the base currency. Absent if the base currency does not have an assigned identifier.
"5b71fc48-3dd3-540c-809b-f8c94d0e68b5"
Internal identifier for the quote currency. Absent if the quote currency does not have an assigned identifier.
"2b92315d-eab7-5bef-84fa-089a131333f5"
Optional (only for spot routed to Coinbase Exchange). When present it is always true, meaning orders on this instrument are routed to Coinbase Exchange (CBE) for matching instead of the native Deribit matching engine. The field is omitted for every other instrument, so test for its presence rather than for a false value.
Optional (only for spot routed to Coinbase Exchange). Alias of is_csr added by public/get_instrument and public/get_instruments; other surfaces that return instrument metadata, such as the instrument.creation.{kind}.{currency} notification, carry is_csr only. When present it is always true and is omitted for every other instrument, so test for its presence rather than for a false value.
The id that was sent in the request
Was this page helpful?