curl --request GET \
--url https://data-tools.prd.arrays.org/api/v1/stocks/market-metrics \
--header 'X-API-Key: <api-key>'import requests
url = "https://data-tools.prd.arrays.org/api/v1/stocks/market-metrics"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://data-tools.prd.arrays.org/api/v1/stocks/market-metrics', 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://data-tools.prd.arrays.org/api/v1/stocks/market-metrics",
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-API-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://data-tools.prd.arrays.org/api/v1/stocks/market-metrics"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-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://data-tools.prd.arrays.org/api/v1/stocks/market-metrics")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data-tools.prd.arrays.org/api/v1/stocks/market-metrics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"symbol": "AAPL",
"type": "MA_20",
"values": [
{
"date": "2024-01-01 12:00:00",
"metric_component": "UPPER",
"observed_at": 1672531200,
"value": 150.25
}
]
}
],
"error": {
"code": "RESOURCE_NOT_FOUND",
"details": [
{
"field": "<string>",
"got": "<string>",
"reason": "<string>"
}
],
"docs_url": "<string>",
"examples": [
"<string>"
],
"hint": "<string>",
"message": "The requested resource was not found.",
"suggestions": [
"<string>"
]
},
"metadata": "<unknown>",
"pagination": "<unknown>",
"request_id": "<string>",
"success": true
}{
"data": "<unknown>",
"error": {
"code": "RESOURCE_NOT_FOUND",
"details": [
{
"field": "<string>",
"got": "<string>",
"reason": "<string>"
}
],
"docs_url": "<string>",
"examples": [
"<string>"
],
"hint": "<string>",
"message": "The requested resource was not found.",
"suggestions": [
"<string>"
]
},
"metadata": "<unknown>",
"pagination": "<unknown>",
"request_id": "<string>",
"success": true
}{
"data": "<unknown>",
"error": {
"code": "RESOURCE_NOT_FOUND",
"details": [
{
"field": "<string>",
"got": "<string>",
"reason": "<string>"
}
],
"docs_url": "<string>",
"examples": [
"<string>"
],
"hint": "<string>",
"message": "The requested resource was not found.",
"suggestions": [
"<string>"
]
},
"metadata": "<unknown>",
"pagination": "<unknown>",
"request_id": "<string>",
"success": true
}{
"data": "<unknown>",
"error": {
"code": "RESOURCE_NOT_FOUND",
"details": [
{
"field": "<string>",
"got": "<string>",
"reason": "<string>"
}
],
"docs_url": "<string>",
"examples": [
"<string>"
],
"hint": "<string>",
"message": "The requested resource was not found.",
"suggestions": [
"<string>"
]
},
"metadata": "<unknown>",
"pagination": "<unknown>",
"request_id": "<string>",
"success": true
}Get Market Metrics Time Series Data
US share-class symbols accept both BRK.B and BRK-B. When symbol is provided, matching scalar symbol fields in the response echo the request spelling.
OpenAPI JSON Spec Retrieve time series data for various market indicators, including technical and fundamental metrics.
Overview This endpoint provides market indicators for stocks across different time intervals (1d, 1w, 1m). Indicators include technical analysis tools (MA, EMA, RSI, etc.) and market fundamentals (Market Cap, P/E, etc.).
Indicator Formats
Indicators requiring a period are formatted as {INDICATOR}_{PERIOD}.
- PRICE_CHANGE:
PRICE_CHANGE_1d,PRICE_CHANGE_1w,PRICE_CHANGE_1M,PRICE_CHANGE_3M,PRICE_CHANGE_6M,PRICE_CHANGE_ytd,PRICE_CHANGE_1y,PRICE_CHANGE_3y,PRICE_CHANGE_5y - MA:
MA_5,MA_10,MA_20,MA_60,MA_120,MA_200 - EMA:
EMA_5,EMA_10,EMA_20,EMA_60,EMA_120,EMA_200 - VOLATILITY:
VOLATILITY_20,VOLATILITY_60,VOLATILITY_90 - RSI:
RSI_14 - MACD single components:
MACD_DIF,MACD_DEA,MACD_HIST - MACD legacy multi-component:
MACD_12,26,9(returns DIF, DEA, and HIST series) - BOLLINGER single components:
BOLLINGER_UPPER,BOLLINGER_MID,BOLLINGER_LOWER - BOLLINGER legacy multi-component:
BOLLINGER_20,2(returns UPPER, MID, and LOWER series) - VWAP:
VWAP_DAY - BETA:
BETA(default period isSPX_252; interval must be1d) - AVERAGE_DAILY_DOLLAR_VOLUME:
AVERAGE_DAILY_DOLLAR_VOLUME(default period is20; interval must be1d) - Fundamental indicators:
MARKET_CAP(market cap),PE_RATIO(P/E ratio),PS_RATIO(P/S ratio),PB_RATIO(P/B ratio),DIVIDEND_YIELD(dividend yield),ENTERPRISE_VALUE(EV),EV_EBITDA_RATIO(EV/EBITDA multiple)
Validation Rules
- Required Parameters: interval, indicator, start_time, end_time.
- Interval: Must be one of
1d,1w,1m. - Time Range:
start_timemust be less thanend_time. - All-symbols queries (
symbolomitted): the window may span at most 100 interval periods — 100 days for1d, 100 weeks for1w, 100 months for1m. A wider window returns 400INVALID_PARAMETER; pass asymbol, or walk the range one window at a time.
curl --request GET \
--url https://data-tools.prd.arrays.org/api/v1/stocks/market-metrics \
--header 'X-API-Key: <api-key>'import requests
url = "https://data-tools.prd.arrays.org/api/v1/stocks/market-metrics"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://data-tools.prd.arrays.org/api/v1/stocks/market-metrics', 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://data-tools.prd.arrays.org/api/v1/stocks/market-metrics",
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-API-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://data-tools.prd.arrays.org/api/v1/stocks/market-metrics"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-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://data-tools.prd.arrays.org/api/v1/stocks/market-metrics")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data-tools.prd.arrays.org/api/v1/stocks/market-metrics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"symbol": "AAPL",
"type": "MA_20",
"values": [
{
"date": "2024-01-01 12:00:00",
"metric_component": "UPPER",
"observed_at": 1672531200,
"value": 150.25
}
]
}
],
"error": {
"code": "RESOURCE_NOT_FOUND",
"details": [
{
"field": "<string>",
"got": "<string>",
"reason": "<string>"
}
],
"docs_url": "<string>",
"examples": [
"<string>"
],
"hint": "<string>",
"message": "The requested resource was not found.",
"suggestions": [
"<string>"
]
},
"metadata": "<unknown>",
"pagination": "<unknown>",
"request_id": "<string>",
"success": true
}{
"data": "<unknown>",
"error": {
"code": "RESOURCE_NOT_FOUND",
"details": [
{
"field": "<string>",
"got": "<string>",
"reason": "<string>"
}
],
"docs_url": "<string>",
"examples": [
"<string>"
],
"hint": "<string>",
"message": "The requested resource was not found.",
"suggestions": [
"<string>"
]
},
"metadata": "<unknown>",
"pagination": "<unknown>",
"request_id": "<string>",
"success": true
}{
"data": "<unknown>",
"error": {
"code": "RESOURCE_NOT_FOUND",
"details": [
{
"field": "<string>",
"got": "<string>",
"reason": "<string>"
}
],
"docs_url": "<string>",
"examples": [
"<string>"
],
"hint": "<string>",
"message": "The requested resource was not found.",
"suggestions": [
"<string>"
]
},
"metadata": "<unknown>",
"pagination": "<unknown>",
"request_id": "<string>",
"success": true
}{
"data": "<unknown>",
"error": {
"code": "RESOURCE_NOT_FOUND",
"details": [
{
"field": "<string>",
"got": "<string>",
"reason": "<string>"
}
],
"docs_url": "<string>",
"examples": [
"<string>"
],
"hint": "<string>",
"message": "The requested resource was not found.",
"suggestions": [
"<string>"
]
},
"metadata": "<unknown>",
"pagination": "<unknown>",
"request_id": "<string>",
"success": true
}Authorizations
API Key authentication. Example: "your-api-key-here"
Query Parameters
Time interval
1d, 1w, 1m Indicator type (e.g., MA_20, PRICE_CHANGE_1d)
Stock symbol (optional, e.g., AAPL). Omit it to get every symbol, which caps the window at 100 interval periods. US share classes accept both BRK.B and BRK-B.
Start time (Unix timestamp in seconds)
End time (Unix timestamp in seconds)

