MarketNewsAPI documentation
MarketNewsAPI gives you US stock news, press releases, and legal notices, with an AI summary and entity tags on every article. Query it over REST, or have it pushed to you over WebSocket.
Quickstart
Your first request in under two minutes.
REST API reference
Search, filter and paginate the archive.
WebSocket stream
Subscribe to tickers, types, keywords, and sources.
MCP server
Plug market news into Claude, ChatGPT and Cursor.
The article object
Every field, explained.
Base URLs
| Interface | URL |
|---|---|
| REST | https://api.marketnewsapi.com/v1 |
| WebSocket | wss://ws.marketnewsapi.com/v1/stream |
| WebSocket, with summaries | wss://ws.marketnewsapi.com/v1/stream/summaries |
| MCP | https://mcp.marketnewsapi.com/mcp |
At a glance
- Auth: one API key per request, sent as
Authorization: Bearer <key>. Details. - Format: JSON over HTTPS. Timestamps are ISO 8601 in UTC.
- Envelope: lists return
{"data": [...], "meta": {...}}; errors return{"error": {...}}. - Plans: a 7-day Pro trial (a card is required), then Pro at $15/month ($13.50/month billed annually) for unlimited real-time REST, WebSocket, and MCP. If you don't subscribe, the account stays on Free (100 requests/day, 15-minute delay). Limits.
- Machine-readable: OpenAPI 3.1 spec, llms.txt, pricing.md.
Your first request
curl "https://api.marketnewsapi.com/v1/news?tickers=AAPL&limit=5" \
-H "Authorization: Bearer $MARKETNEWSAPI_KEY"import json
import os
import requests
resp = requests.get(
"https://api.marketnewsapi.com/v1/news",
params={"tickers": "AAPL", "limit": 5},
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", limit: "5" });
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&limit=5", 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', 'limit' => 5]);
$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", limit: 5)
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&limit=5");
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&limit=5"))
.header("Authorization", "Bearer " + System.getenv("MARKETNEWSAPI_KEY"))
.build();
HttpResponse<String> res = HttpClient.newHttpClient()
.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body());
}
}Need a key? Create an account. It takes about 30 seconds. The 7-day Pro trial requires a card.