Get exchange details
curl --request GET \
--url https://api.rulebookcompany.com/api/v1/exchanges/{exchange_name} \
--header 'x-rulebook-api-access-key: <api-key>'import requests
url = "https://api.rulebookcompany.com/api/v1/exchanges/{exchange_name}"
headers = {"x-rulebook-api-access-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-rulebook-api-access-key': '<api-key>'}};
fetch('https://api.rulebookcompany.com/api/v1/exchanges/{exchange_name}', 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.rulebookcompany.com/api/v1/exchanges/{exchange_name}",
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-rulebook-api-access-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.rulebookcompany.com/api/v1/exchanges/{exchange_name}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-rulebook-api-access-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.rulebookcompany.com/api/v1/exchanges/{exchange_name}")
.header("x-rulebook-api-access-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rulebookcompany.com/api/v1/exchanges/{exchange_name}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-rulebook-api-access-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"error": {
"code": "UNAUTHORIZED",
"message": "Missing or invalid API key."
},
"meta": { "query_time_ms": 1 }
}
{
"error": {
"code": "FORBIDDEN",
"message": "You do not have access to the requested exchange."
},
"meta": { "query_time_ms": 1 }
}
{
"error": {
"code": "NOT_FOUND",
"message": "Exchange not found."
},
"meta": { "query_time_ms": 1 }
}
Exchanges
Get Exchange Details
Get full metadata and available filter values for a specific exchange
GET
/
exchanges
/
{exchange_name}
Get exchange details
curl --request GET \
--url https://api.rulebookcompany.com/api/v1/exchanges/{exchange_name} \
--header 'x-rulebook-api-access-key: <api-key>'import requests
url = "https://api.rulebookcompany.com/api/v1/exchanges/{exchange_name}"
headers = {"x-rulebook-api-access-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-rulebook-api-access-key': '<api-key>'}};
fetch('https://api.rulebookcompany.com/api/v1/exchanges/{exchange_name}', 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.rulebookcompany.com/api/v1/exchanges/{exchange_name}",
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-rulebook-api-access-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.rulebookcompany.com/api/v1/exchanges/{exchange_name}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-rulebook-api-access-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.rulebookcompany.com/api/v1/exchanges/{exchange_name}")
.header("x-rulebook-api-access-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rulebookcompany.com/api/v1/exchanges/{exchange_name}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-rulebook-api-access-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"error": {
"code": "UNAUTHORIZED",
"message": "Missing or invalid API key."
},
"meta": { "query_time_ms": 1 }
}
{
"error": {
"code": "FORBIDDEN",
"message": "You do not have access to the requested exchange."
},
"meta": { "query_time_ms": 1 }
}
{
"error": {
"code": "NOT_FOUND",
"message": "Exchange not found."
},
"meta": { "query_time_ms": 1 }
}
Overview
Returns full metadata for a single exchange, including all available filter values: fee types, fee categories, actions, participants, symbol classifications, symbol types, trade types, and the date range of available data. The values returned in the filter arrays are the exact values to pass as query parameters when calling List Fee Schedule Results.Authorization Required - Include your API key in the
x-rulebook-api-access-key header. Contact
aaron@rulebookcompany.com to obtain
access.This endpoint consolidates all discovery information into a single call.
Instead of making separate requests for fee types, categories, actions, and
participants, get everything at once.
Path Parameters
string
required
Exchange identifier (e.g.,
nasdaq, nasdaq_phlx). Get the list of
available exchanges from List
Exchanges.Request
curl -X GET https://api.rulebookcompany.com/api/v1/exchanges/nasdaq \
-H "x-rulebook-api-access-key: YOUR_API_KEY"
Response
object
Exchange detail object
Show Exchange Detail
Show Exchange Detail
string
Exchange identifier
string
Human-readable exchange name
object
string[]
Available fee types. Use these values in the
fee_type filter parameter.string[]
Available fee categories. Use these values in the
fee_category filter parameter.string[]
Available trading action types. Use these values in the
fee_action filter parameter.string[]
Available participant types. Use these values in the
fee_participant filter parameter.string[]
Available symbol classifications. Use these values in the
fee_symbol_classification filter parameter.string[]
Available symbol types. Use these values in the
fee_symbol_type filter parameter.string[]
Available trade types. Use these values in the
fee_trade_type filter parameter. May be empty if no trade type data exists for this exchange.object
Example Response
{
"data": {
"name": "nasdaq",
"display_name": "Nasdaq Stock Exchange",
"date_range": {
"earliest": "2025-12-19",
"latest": "2026-02-03"
},
"fee_types": ["option"],
"fee_categories": [
"fees_and_rebates",
"legal_regulatory_fee",
"market_data_fees",
"participant_fee",
"port_fees_and_other_services"
],
"actions": ["make", "open", "other", "routed", "take"],
"participants": [
"all",
"away_market_maker",
"broker_dealer",
"customer",
"firm",
"market_maker",
"other",
"professional"
],
"symbol_classifications": ["all"],
"symbol_types": ["both", "non_penny", "penny"],
"trade_types": []
},
"meta": {
"record_count": 512,
"query_time_ms": 102
}
}
Using Exchange Details to Build Queries
Use the returned filter values directly as query parameters:# Step 1: Get exchange details to see available filters
curl -X GET https://api.rulebookcompany.com/api/v1/exchanges/nasdaq \
-H "x-rulebook-api-access-key: YOUR_API_KEY"
# Step 2: Use the returned values as filter params
curl -X GET "https://api.rulebookcompany.com/api/v1/fee-schedule-results?exchange_name=nasdaq&fee_type=option&fee_action=make&fee_participant=market_maker&latest_only=true" \
-H "x-rulebook-api-access-key: YOUR_API_KEY"
Reference: Filter Value Descriptions
Fee Categories
Fee Categories
| Value | Description |
|---|---|
fees_and_rebates | Standard trading fees and liquidity rebates |
general_provisions | General rules and provisions applicable to fees |
legal_regulatory_fee | SEC fees, FINRA TAF, and other regulatory charges |
market_data_fees | Real-time and delayed market data subscription fees |
participant_fee | Membership and participation fees |
port_fees_and_other_services | Network connectivity, co-location, and port fees |
Actions
Actions
| Value | Description |
|---|---|
make | Orders that add liquidity (typically receive rebates) |
take | Orders that remove liquidity (typically charged fees) |
open | Opening auction transactions |
routed | Orders routed to other venues |
other | Miscellaneous action types |
Participants
Participants
| Value | Description |
|---|---|
all | Aggregated across all participant types |
market_maker | Exchange-designated market makers with quoting obligations |
away_market_maker | Market makers registered at other exchanges |
broker_dealer | Registered broker-dealer firms |
customer | Retail and institutional customers |
firm | Proprietary trading firms |
professional | Professional individual traders |
other | Other participant categories |
Symbol Classifications
Symbol Classifications
| Value | Description |
|---|---|
etf | Exchange Traded Funds |
etn | Exchange Traded Notes |
equity_class | Equity securities |
index | Index options |
all | All classifications |
not_applicable | Not applicable |
Symbol Types
Symbol Types
| Value | Description |
|---|---|
penny | Penny increment symbols |
non_penny | Non-penny increment symbols |
both | Applies to both |
not_applicable | Not applicable |
Trade Types
Trade Types
| Value | Description |
|---|---|
simple_order | Simple (single-leg) orders |
complex_order | Complex/multi-leg orders |
index_options | Index option trades |
multiply_traded_options | Multiply-listed options |
Error Responses
{
"error": {
"code": "UNAUTHORIZED",
"message": "Missing or invalid API key."
},
"meta": { "query_time_ms": 1 }
}
{
"error": {
"code": "FORBIDDEN",
"message": "You do not have access to the requested exchange."
},
"meta": { "query_time_ms": 1 }
}
{
"error": {
"code": "NOT_FOUND",
"message": "Exchange not found."
},
"meta": { "query_time_ms": 1 }
}
Authorizations
API access key provided by Rulebook Company. Contact aaron@rulebookcompany.com to obtain one.
Path Parameters
Exchange identifier (e.g., fee_cboe_us_bzx_options, nasdaqphlx). Use values from the List Exchanges endpoint.

