curl --request GET \
--url http://195.138.37.5:4410/api/v2/public/get_instrumentsimport requests
url = "http://195.138.37.5:4410/api/v2/public/get_instruments"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('http://195.138.37.5:4410/api/v2/public/get_instruments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "4410",
CURLOPT_URL => "http://195.138.37.5:4410/api/v2/public/get_instruments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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 := "http://195.138.37.5:4410/api/v2/public/get_instruments"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("http://195.138.37.5:4410/api/v2/public/get_instruments")
.asString();require 'uri'
require 'net/http'
url = URI("http://195.138.37.5:4410/api/v2/public/get_instruments")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": 1,
"result": [
{
"instrument_id": 124942,
"instrument_name": "ETH-PERPETUAL",
"kind": "perp_future",
"product_group": "ETH",
"base_currency": "ETH",
"quote_currency": "USDC",
"settlement_currency": "USDC",
"tick_size": 0.01,
"qty_tick_size": 1,
"is_active": true,
"creation_timestamp": 1747500000000
},
{
"instrument_id": 200001,
"instrument_name": "BTC-30MAY26-70000-C",
"kind": "option",
"product_group": "BTC",
"base_currency": "BTC",
"quote_currency": "USDC",
"settlement_currency": "USDC",
"tick_size": 0.5,
"qty_tick_size": 0.1,
"strike": 70000,
"option_type": "call",
"is_active": true,
"expiration_timestamp": 1779148800000,
"creation_timestamp": 1748400000000
}
]
}{
"jsonrpc": "2.0",
"error": {
"code": 123,
"message": "<string>",
"data": "<unknown>"
},
"id": 123
}List Instruments
Returns the list of tradeable instruments, including index_id and product_group, optionally filtered by base currency, instrument kind, expiration status, instrument id, product group, and lifecycle state.
This endpoint requires no authentication, but it is served by the Starbase REST gateway and is reachable only through hosted colocation, a cross-connect, or AWS Private Link. The internet-accessible classic JSON-RPC public/get_instruments method also documents index_id and product_group; backend rollout of those fields may temporarily differ between the two endpoints.
Filter semantics (supplied filters are combined):
currencyfilters by the base currency of the instrument’s currency pair (case-insensitive match).kindfilters by instrument type (case-insensitive match against thekindvalue enum).expired = truereturns only instruments whoseexpiration_timestampis in the past;expired = falsereturns only non-expired instruments. Omit the parameter to get both.instrument_idreturns the instrument with that numeric id.product_groupfilters by Starbase product group (case-insensitive match againstBTC,ETH,TIER_2,TIER_3).statefilters by instrument lifecycle state (case-insensitive). Values match SBEInstrumentStatus:open,inactive,settlement,delivered,locked,halted.
curl --request GET \
--url http://195.138.37.5:4410/api/v2/public/get_instrumentsimport requests
url = "http://195.138.37.5:4410/api/v2/public/get_instruments"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('http://195.138.37.5:4410/api/v2/public/get_instruments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "4410",
CURLOPT_URL => "http://195.138.37.5:4410/api/v2/public/get_instruments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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 := "http://195.138.37.5:4410/api/v2/public/get_instruments"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("http://195.138.37.5:4410/api/v2/public/get_instruments")
.asString();require 'uri'
require 'net/http'
url = URI("http://195.138.37.5:4410/api/v2/public/get_instruments")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": 1,
"result": [
{
"instrument_id": 124942,
"instrument_name": "ETH-PERPETUAL",
"kind": "perp_future",
"product_group": "ETH",
"base_currency": "ETH",
"quote_currency": "USDC",
"settlement_currency": "USDC",
"tick_size": 0.01,
"qty_tick_size": 1,
"is_active": true,
"creation_timestamp": 1747500000000
},
{
"instrument_id": 200001,
"instrument_name": "BTC-30MAY26-70000-C",
"kind": "option",
"product_group": "BTC",
"base_currency": "BTC",
"quote_currency": "USDC",
"settlement_currency": "USDC",
"tick_size": 0.5,
"qty_tick_size": 0.1,
"strike": 70000,
"option_type": "call",
"is_active": true,
"expiration_timestamp": 1779148800000,
"creation_timestamp": 1748400000000
}
]
}{
"jsonrpc": "2.0",
"error": {
"code": 123,
"message": "<string>",
"data": "<unknown>"
},
"id": 123
}Query Parameters
Filter by the base currency of the instrument's currency pair (e.g. BTC, ETH, AVAX). Case-insensitive.
Filter by instrument kind. Case-insensitive.
perp_future, option, spot, future_combo, option_combo, dated_future When true, return only expired instruments. When false, return only currently-active (non-expired) instruments. Omit to return both.
Return the instrument with this numeric id.
Filter by Starbase product group. Case-insensitive.
BTC, ETH, TIER_2, TIER_3 Filter by instrument lifecycle state. Case-insensitive. Values match SBE InstrumentStatus.
open, inactive, settlement, delivered, locked, halted Response
List of instruments matching the supplied filters.
The JSON-RPC version (2.0)
2.0 Array of instruments matching the supplied filters. May be empty.
Hide child attributes
Hide child attributes
Stable numeric identifier for the instrument.
124942
Human-readable instrument symbol (e.g. ETH-PERPETUAL, BTC-30MAY26-70000-C).
"ETH-PERPETUAL"
Instrument category.
perp_future, option, spot, future_combo, option_combo, dated_future Whether the instrument is currently enabled for trading.
Numeric identifier for the index associated with the instrument.
Starbase routing group resolved from the base symbol of the instrument's currency pair (for example BTC, ETH, TIER_2, or TIER_3).
"ETH"
Base currency of the instrument's currency pair.
"ETH"
Quote currency of the instrument's currency pair.
"USDC"
Settlement currency for the instrument. Currently equal to quote_currency.
"USDC"
Minimum price increment for the instrument.
0.01
Minimum quantity increment (step size) for order amounts on this instrument, expressed in the instrument's amount units. This is the same value the SBE InstrumentDefinition (10) message carries as minOrderQuantity × 10^quantityExponent. For example qty_tick_size = 0.1 corresponds to minOrderQuantity = 1 with quantityExponent = -1. Distinct from contract_size; do not assume the two values are equal. Classic JSON-RPC public/get_instruments does not return this field; the equivalent classic JSON-RPC name is min_trade_amount. See JSON-RPC overview.
0.1
Strike price (options only). null for non-option instruments.
70000
Option type (options only). null for non-option instruments.
call, put Instrument expiration time in milliseconds since the Unix epoch. null for perpetuals and other non-expiring instruments.
1779148800000
Instrument creation/listing time in milliseconds since the Unix epoch.
1747500000000
Optional classic JSON-RPC field of the same name (the quantity increment). May be null if not yet populated. For Starbase matching use qty_tick_size on this endpoint; on classic JSON-RPC the equivalent name is min_trade_amount.
Contract size for the instrument. May be null if not yet populated. Distinct from qty_tick_size; Starbase matching does not use this field, and the two values are not guaranteed to match. On classic JSON-RPC the quantity increment is min_trade_amount (not qty_tick_size).
Settlement period descriptor. May be null if not yet populated.
Maker commission rate. May be null if not yet populated.
Taker commission rate. May be null if not yet populated.
Block trade commission rate. May be null if not yet populated.
The id that was sent in the request
Was this page helpful?