# 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](/docs/authentication).
- **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](/docs/rate-limits).
- **Machine-readable:** [OpenAPI 3.1 spec](/openapi.json), [llms.txt](/llms.txt), [pricing.md](/pricing.md).

## Your first request

```curl
curl "https://api.marketnewsapi.com/v1/news?tickers=AAPL&limit=5" \
 -H "Authorization: Bearer $MARKETNEWSAPI_KEY"
```

```python
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))
```

```javascript
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());
```

```go
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
<?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);
```

```ruby
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))
```

```csharp
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);
```

```java
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](/signup). It takes about 30 seconds. The 7-day Pro trial requires a card.
