List news
Search and filter stock news, press releases and legal notices, newest first.
GEThttps://api.marketnewsapi.com/v1/news
Returns articles matching every filter you pass. Filters combine with AND, and comma-separated values inside one filter are OR. Without filters you get the latest stock articles. Use cursor to page through results.
Requires an API key. See authentication.
Query parameters
|
tickersstring
Comma-separated symbols, up to 50. Matches articles tagged with any of them, on every exchange.
MRVL returns both the US stock and TSXV:MRVL. Example: AAPL,MSFT. |
|
exchangestring
Comma-separated exchange codes, such as
NASDAQ or TSXV. With tickers, only those symbols on those exchanges match. Alone, any article with a listing on one of the exchanges. Example: TSXV. |
|
categorystring
One or more categories, comma-separated.
stocks
|
|
typestring
One or more of
news, press_release, legal. Stock news is category=stocks&type=news. Press releases are category=stocks&type=press_release. Legal is category=stocks&type=legal. stock_news and stockNews mean stock news only. pressRelease means press_release and implies category=stocks.newspress_releaselegal
|
|
qstring
Full-text search over title, summary and snippet. Use quotes for phrases:
"rate cut". Max 200 characters. Example: "rate cut". |
|
sourcesstring
Only these publisher domains, comma-separated. Example:
globenewswire.com,businesswire.com. |
|
exclude_sourcesstring
Drop these publisher domains, comma-separated.
|
|
fromstring
Earliest
published_at (inclusive). ISO 8601 timestamp (2026-10-06T13:30:00Z) or date (2026-10-06). Dates are interpreted in UTC. |
|
tostring
Latest
published_at (inclusive). ISO 8601 timestamp (2026-10-06T13:30:00Z) or date (2026-10-06). Dates are interpreted in UTC. |
|
sortstring
Result order.
relevance only applies when q is set. Default: published_desc.published_descpublished_ascrelevance
|
|
limitinteger
Results per page, 1–100. Default:
20. |
|
cursorstring
Opaque cursor from
meta.next_cursor of the previous page. |
Example request
curl "https://api.marketnewsapi.com/v1/news?tickers=AAPL,MSFT&limit=10" \
-H "Authorization: Bearer $MARKETNEWSAPI_KEY"import json
import os
import requests
resp = requests.get(
"https://api.marketnewsapi.com/v1/news",
params={"tickers": "AAPL,MSFT", "limit": 10},
headers={"Authorization": f"Bearer {os.environ['MARKETNEWSAPI_KEY']}"},
timeout=10,
)
resp.raise_for_status()
print(json.dumps(resp.json(), indent=2))const params = new URLSearchParams({ tickers: "AAPL,MSFT", limit: "10" });
const res = await fetch(`https://api.marketnewsapi.com/v1/news?${params}`, {
headers: { Authorization: `Bearer ${process.env.MARKETNEWSAPI_KEY}` },
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
console.log(await res.json());package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
req, _ := http.NewRequest("GET", "https://api.marketnewsapi.com/v1/news?tickers=AAPL,MSFT&limit=10", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("MARKETNEWSAPI_KEY"))
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}<?php
$query = http_build_query(['tickers' => 'AAPL,MSFT', 'limit' => 10]);
$ch = curl_init("https://api.marketnewsapi.com/v1/news?$query");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('MARKETNEWSAPI_KEY')],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($body);require "json"
require "net/http"
uri = URI("https://api.marketnewsapi.com/v1/news")
uri.query = URI.encode_www_form(tickers: "AAPL,MSFT", limit: 10)
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer #{ENV.fetch('MARKETNEWSAPI_KEY')}"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
puts JSON.pretty_generate(JSON.parse(res.body))using System.Net.Http.Headers;
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
"Bearer", Environment.GetEnvironmentVariable("MARKETNEWSAPI_KEY"));
var json = await http.GetStringAsync("https://api.marketnewsapi.com/v1/news?tickers=AAPL,MSFT&limit=10");
Console.WriteLine(json);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://api.marketnewsapi.com/v1/news?tickers=AAPL,MSFT&limit=10"))
.header("Authorization", "Bearer " + System.getenv("MARKETNEWSAPI_KEY"))
.build();
HttpResponse<String> res = HttpClient.newHttpClient()
.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body());
}
}Example response
200 OK
{
"data": [
{
"id": "art_9f2c1d7e4b8a6035",
"title": "Apple unveils new on-device AI features, shares rise in premarket trading",
"url": "https://www.example-publisher.com/markets/apple-ai-features",
"source": {
"name": "Example Publisher",
"domain": "example-publisher.com"
},
"publisher": "Example Publisher",
"published_at": "2026-10-06T12:31:04Z",
"ingested_at": "2026-10-06T12:31:09Z",
"category": "stocks",
"type": "news",
"tickers": [
"AAPL"
],
"listings": [
{
"symbol": "AAPL",
"exchange": "NASDAQ"
}
],
"snippet": "Apple on Tuesday introduced a set of on-device AI features for iPhone and Mac, sending the stock higher before the open.",
"summary": "Apple announced new on-device AI features for iPhone and Mac. Shares rose about 2% in premarket trading as analysts called the update a catalyst for the upgrade cycle.",
"body": null,
"entities": [
{
"type": "company",
"name": "Apple Inc.",
"symbol": "AAPL"
},
{
"type": "product",
"name": "iPhone"
}
],
"language": "en"
}
],
"meta": {
"count": 1,
"next_cursor": "eyJ0IjoxNzU5NzUzODY0MDAwLCJpIjoiYXJ0XzlmMmMxZDdlNGI4YTYwMzUifQ",
"plan": "stream",
"delayed_minutes": 0
}
}Try it
GET
https://api.marketnewsapi.com/v1/newsResponse
Press Send to call the live API with your key. No key yet? Get one free.Errors
This endpoint returns the standard error format. The most common errors are 400 invalid_parameter, 401 invalid_api_key and 429 daily_limit_reached (Free plan).