curl --request GET \
--url https://api.portfobit.com/api/v1/market-data/markets \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.portfobit.com/api/v1/market-data/markets"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.portfobit.com/api/v1/market-data/markets', 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.portfobit.com/api/v1/market-data/markets",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.portfobit.com/api/v1/market-data/markets"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.portfobit.com/api/v1/market-data/markets")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.portfobit.com/api/v1/market-data/markets")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "BTCUSDT",
"symbol": "BTC/USDT:USDT",
"type": "swap",
"base": "BTC",
"quote": "USDT",
"settle": "USDT",
"active": true,
"margin": false,
"contract": true,
"linear": true,
"inverse": false,
"contract_size": "1",
"expiry": null,
"strike": null,
"option_type": null,
"precision_mode": "tick_size",
"precision": {
"amount": "0.001",
"price": "0.1",
"cost": null,
"base": null,
"quote": null
},
"limits": {
"amount": {
"min": "0.001",
"max": null
},
"price": {
"min": null,
"max": null
},
"cost": {
"min": "5",
"max": null
},
"leverage": {
"min": "1",
"max": "100"
}
}
}
],
"meta": {
"total": 1,
"limit": 50,
"offset": 0,
"has_next": false,
"source": "ccxt",
"source_venue": "bybit",
"markets_loaded_at": "2026-11-04T05:50:00Z",
"request_id": "req_market_catalog_01",
"generated_at": "2026-11-04T06:00:00Z"
}
}List connected CEX markets
Requires marketdata:read; available on Free, Plus and Pro subject to connected-resource eligibility. Lists cached CCXT unified market definitions from the specified connected exchange without forcing a refresh. Filters combine with AND. Strings match exactly and case-sensitively except for venue normalization. Only documented parameters are accepted, and duplicates are rejected. Results include inactive and unknown states unless filtered. The data array contains the current page; meta.total counts all filtered matches. No match or an offset beyond the end returns an empty array. Each response uses one directory snapshot, but the directory may change between requests; restart at offset zero if it changes. Results may not include every regional, historical or delisted market. A listed market does not guarantee that your account can trade it or that an order will be accepted.
curl --request GET \
--url https://api.portfobit.com/api/v1/market-data/markets \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.portfobit.com/api/v1/market-data/markets"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.portfobit.com/api/v1/market-data/markets', 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.portfobit.com/api/v1/market-data/markets",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.portfobit.com/api/v1/market-data/markets"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.portfobit.com/api/v1/market-data/markets")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.portfobit.com/api/v1/market-data/markets")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "BTCUSDT",
"symbol": "BTC/USDT:USDT",
"type": "swap",
"base": "BTC",
"quote": "USDT",
"settle": "USDT",
"active": true,
"margin": false,
"contract": true,
"linear": true,
"inverse": false,
"contract_size": "1",
"expiry": null,
"strike": null,
"option_type": null,
"precision_mode": "tick_size",
"precision": {
"amount": "0.001",
"price": "0.1",
"cost": null,
"base": null,
"quote": null
},
"limits": {
"amount": {
"min": "0.001",
"max": null
},
"price": {
"min": null,
"max": null
},
"cost": {
"min": "5",
"max": null
},
"leverage": {
"min": "1",
"max": "100"
}
}
}
],
"meta": {
"total": 1,
"limit": 50,
"offset": 0,
"has_next": false,
"source": "ccxt",
"source_venue": "bybit",
"markets_loaded_at": "2026-11-04T05:50:00Z",
"request_id": "req_market_catalog_01",
"generated_at": "2026-11-04T06:00:00Z"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Connected CEX venue, such as bybit or okx. Leading and trailing whitespace is removed and the value is normalized to lowercase. Results come only from the specified exchange.
1Exact unified market type. Omit to include all four types present in the loaded directory; margin is an independent capability flag.
spot, swap, future, option Exact, case-sensitive CCXT unified symbol, such as BTC/USDT or BTC/USDT:USDT. Do not substitute the exchange-native market id.
1Exact unified base currency, such as BTC.
1Exact unified quote currency, such as USDT.
1Exact unified settlement currency; does not match null.
1Exact active flag. Omit to include true, false and unknown; an explicit true or false does not match null.
Exact margin flag. Omit to include true, false and unknown; an explicit true or false does not match null.
Exact linear flag. Omit to include true, false and unknown; an explicit true or false does not match null.
Exact inverse flag. Omit to include true, false and unknown; an explicit true or false does not match null.
Page size, applied after all filters.
1 <= x <= 100Non-negative offset into the filtered directory, ordered by unified symbol ascending.
x >= 0Response
Loaded market definitions, classifications, precision and limits. All nullable fields and bound objects are present; unknown values are not replaced with zero or false. Example values are illustrative, not current trading rules.