curl --request GET \
--url https://tradingapi.dev/v1/markets \
--header 'Authorization: Bearer <token>'import requests
url = "https://tradingapi.dev/v1/markets"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://tradingapi.dev/v1/markets', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://tradingapi.dev/v1/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))
}{
"object": "list",
"data": [
{
"object": "market",
"symbol": "TSLA",
"name": "Tesla",
"category": "equity",
"status": "open",
"size_increment": "0.001",
"min_value": "10.00",
"max_value": "25.00",
"price": "438.12",
"funding_rate_hourly": "0.0000125"
}
]
}{
"error": {
"type": "authentication",
"code": "invalid_api_key",
"message": "This API key is not valid. It may have been revoked.",
"param": null,
"hint": "Send a current key as Authorization: Bearer tapi_…. Keys are created and revoked on the account page.",
"details": {},
"errors": [],
"retryable": false,
"doc_url": "https://docs.tradingapi.dev/api-reference/errors#invalid_api_key"
}
}{
"error": {
"type": "rate_limited",
"code": "rate_limited",
"message": "This key made too many requests; retry in 1 s.",
"param": null,
"hint": "Slow down: each key may make 10 requests at once, then 5 a second.",
"details": {},
"errors": [],
"retryable": true,
"retry_after": "2026-09-28T14:05:12.000Z",
"doc_url": "https://docs.tradingapi.dev/api-reference/errors#rate_limited"
}
}{
"error": {
"type": "unavailable",
"code": "unavailable",
"message": "The exchange could not be reached.",
"param": null,
"hint": "Retry the same request with the same client_order_id; an order may already have been recorded.",
"details": {},
"errors": [],
"retryable": true,
"doc_url": "https://docs.tradingapi.dev/api-reference/errors#unavailable"
}
}List markets
Returns every market you can trade, with its trading rules and current price. The list is short and is not paged.
Pass q to search by symbol, name or common alias, with tolerance for typos. Search is
forgiving; orders are not, so use the symbol a search returns when you place an order.
curl --request GET \
--url https://tradingapi.dev/v1/markets \
--header 'Authorization: Bearer <token>'import requests
url = "https://tradingapi.dev/v1/markets"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://tradingapi.dev/v1/markets', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://tradingapi.dev/v1/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))
}{
"object": "list",
"data": [
{
"object": "market",
"symbol": "TSLA",
"name": "Tesla",
"category": "equity",
"status": "open",
"size_increment": "0.001",
"min_value": "10.00",
"max_value": "25.00",
"price": "438.12",
"funding_rate_hourly": "0.0000125"
}
]
}{
"error": {
"type": "authentication",
"code": "invalid_api_key",
"message": "This API key is not valid. It may have been revoked.",
"param": null,
"hint": "Send a current key as Authorization: Bearer tapi_…. Keys are created and revoked on the account page.",
"details": {},
"errors": [],
"retryable": false,
"doc_url": "https://docs.tradingapi.dev/api-reference/errors#invalid_api_key"
}
}{
"error": {
"type": "rate_limited",
"code": "rate_limited",
"message": "This key made too many requests; retry in 1 s.",
"param": null,
"hint": "Slow down: each key may make 10 requests at once, then 5 a second.",
"details": {},
"errors": [],
"retryable": true,
"retry_after": "2026-09-28T14:05:12.000Z",
"doc_url": "https://docs.tradingapi.dev/api-reference/errors#rate_limited"
}
}{
"error": {
"type": "unavailable",
"code": "unavailable",
"message": "The exchange could not be reached.",
"param": null,
"hint": "Retry the same request with the same client_order_id; an order may already have been recorded.",
"details": {},
"errors": [],
"retryable": true,
"doc_url": "https://docs.tradingapi.dev/api-reference/errors#unavailable"
}
}Authorizations
An API key from the account page, sent as Authorization: Bearer tapi_….
Query Parameters
Search text, for example tesla or btc. Case-insensitive; tolerates typos.
64Response
The markets, best match first when q is given, otherwise in catalog order.
"list"Hide child attributes
Hide child attributes
"market"The market's identifier everywhere in the API, for example BTC or TSLA.
A human-readable name, for example Bitcoin or Tesla.
crypto, equity, index, commodity, fx open: all orders accepted. reduce_only: only orders that reduce a position. halted: no orders.
open, reduce_only, halted Sizes are multiples of this. Orders sized by value are rounded down to it.
^-?[0-9]+(\.[0-9]+)?$The smallest order, in USD, after rounding. Closing a whole position is exempt.
^-?[0-9]+(\.[0-9]+)?$The largest order, in USD. Your key may have a lower limit; see GET /v1/api_key.
^-?[0-9]+(\.[0-9]+)?$The current mark price, used for your positions' value and profit and loss.
^-?[0-9]+(\.[0-9]+)?$The current hourly funding rate as a fraction. Positive means longs pay shorts.
^-?[0-9]+(\.[0-9]+)?$