curl --request GET \
--url https://data-tools.prd.arrays.org/api/v1/stocks/market-news \
--header 'X-API-Key: <api-key>'import requests
url = "https://data-tools.prd.arrays.org/api/v1/stocks/market-news"
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-news', 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-news",
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-news"
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-news")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data-tools.prd.arrays.org/api/v1/stocks/market-news")
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": [
{
"authors": [
"<string>"
],
"banner_image": "<string>",
"category_within_source": "<string>",
"id": 123,
"overall_sentiment_label": "<string>",
"overall_sentiment_score": 123,
"publish_time": 123,
"source": "<string>",
"source_domain": "<string>",
"summary": "<string>",
"tickers": [
{
"relevance_score": "<string>",
"ticker": "<string>",
"ticker_sentiment_label": "<string>",
"ticker_sentiment_score": "<string>"
}
],
"time_published": "<string>",
"title": "<string>",
"topics": [
{
"relevance_score": "<string>",
"topic": "<string>"
}
],
"updated_at": "<string>",
"url": "<string>"
}
],
"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
}{
"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 News
OpenAPI JSON Spec Retrieve market news articles within a specified time range, optionally filtered by symbol. Supports pagination and flexible filtering.
Use cases:
- Market news aggregation and monitoring
- Stock-specific news tracking
- News analysis and sentiment tracking
- Media applications and news feeds
Data & semantics:
- start_time: Start time (Unix seconds; required unless updated_after/updated_before are given)
- end_time: End time (Unix seconds; required unless updated_after/updated_before are given)
- symbol: Stock symbol filter (optional, e.g., AAPL, TSLA)
- topic: Topic filter (optional, lowercase). Valid values:
- blockchain, earnings, economy_fiscal, economy_macro, economy_monetary
- energy_and_transportation, finance, financial_markets, ipo, life_sciences
- manufacturing, mergers_and_acquisitions, real_estate_and_construction
- retail_and_wholesale, technology
- Deprecated aliases, still accepted; each resolves to a value above, and
- responses always carry the canonical form:
- energy_transportation, real_estate, retail_wholesale
- source: Media source filter (optional). Valid values:
- Reuters, AP News, BBC, The New York Times, The Washington Post, The Guardian
- Bloomberg, The Wall Street Journal, Financial Times, CNBC, Fortune
- Forbes, TechCrunch, MIT Technology Review, The Verge
- WIRED, South China Morning Post, Nikkei Asia, Business Wire, PR Newswire
- sort_by_type: Sort by type - PUBLISHED_TIME, OVERALL_SENTIMENT_SCORE, or RELEVANCE_SCORE (optional, default: PUBLISHED_TIME)
- sort_by: Sort order - “ASC” or “DESC” (optional, default: “DESC”)
- limit: Maximum number of results (optional, default: 10, max: 100)
- offset: Pagination offset (optional, default: 0, must be >= 0)
Update polling (see /docs/api/market-news-updates.md and update-polling.md): supplying both updated_after and updated_before selects the articles whose row data changed in [updated_after, updated_before), ordered by updated_at ASC, id ASC. In that mode start_time/end_time, symbol, topic and source become optional intersections, sort_by_type and sort_by are ignored, offset is not allowed, and paging is by pagination.cursor. Pass it back unchanged with the same window and filters; limit may change between pages. An omitted cursor with has_more=false means the window is drained. Each article carries updated_at, which advances only when a served column changes, so an hourly vendor re-scan is not an update.
curl --request GET \
--url https://data-tools.prd.arrays.org/api/v1/stocks/market-news \
--header 'X-API-Key: <api-key>'import requests
url = "https://data-tools.prd.arrays.org/api/v1/stocks/market-news"
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-news', 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-news",
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-news"
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-news")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data-tools.prd.arrays.org/api/v1/stocks/market-news")
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": [
{
"authors": [
"<string>"
],
"banner_image": "<string>",
"category_within_source": "<string>",
"id": 123,
"overall_sentiment_label": "<string>",
"overall_sentiment_score": 123,
"publish_time": 123,
"source": "<string>",
"source_domain": "<string>",
"summary": "<string>",
"tickers": [
{
"relevance_score": "<string>",
"ticker": "<string>",
"ticker_sentiment_label": "<string>",
"ticker_sentiment_score": "<string>"
}
],
"time_published": "<string>",
"title": "<string>",
"topics": [
{
"relevance_score": "<string>",
"topic": "<string>"
}
],
"updated_at": "<string>",
"url": "<string>"
}
],
"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
}{
"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
Stock symbol filter (optional)
Topic filter (optional; energy_transportation, real_estate and retail_wholesale are deprecated aliases)
blockchain, earnings, economy_fiscal, economy_macro, economy_monetary, energy_and_transportation, finance, financial_markets, ipo, life_sciences, manufacturing, mergers_and_acquisitions, real_estate_and_construction, retail_and_wholesale, technology, energy_transportation, real_estate, retail_wholesale Media source filter (optional, e.g. Reuters, Bloomberg, CNBC)
Start time (Unix seconds); required unless updated_after/updated_before are given, in which case it narrows publish_time as an optional filter
End time (Unix seconds); required unless updated_after/updated_before are given, in which case it narrows publish_time as an optional filter
Sort by type: PUBLISHED_TIME, OVERALL_SENTIMENT_SCORE, or RELEVANCE_SCORE (default: PUBLISHED_TIME)
PUBLISHED_TIME, OVERALL_SENTIMENT_SCORE, RELEVANCE_SCORE Sort order: ASC or DESC (default: DESC)
ASC, DESC Maximum number of results (1-100, default: 10)
1 <= x <= 100Pagination offset (>=0, default: 0)
x >= 0Inclusive article update bound (Unix seconds); requires updated_before
Exclusive article update bound (Unix seconds); must exceed updated_after
Opaque update-window continuation; incompatible with offset

