# Stock News

> Returns recent news articles for a specific stock.

`GET https://api.bavest.co/v2/news/stock`

Group: News. Route id: `v2_news_stock`. Included in: Growth.

## Description

Returns recent news articles for a specific stock. Optionally filter by date range using `from` and `to` parameters.

## Authentication

Send your API key in the `x-api-key` header on every request. No key yet? Sign up at https://dashboard.bavest.co/sign-up (free trial). The examples read the key from the `BAVEST_API_KEY` environment variable.

## Parameters

| Name | In | Type | Required | Description |
|---|---|---|---|---|
| `symbol` | query | string | one of symbol, isin | Stock ticker symbol (e.g., `AAPL`, `MSFT`, `GOOGL`). Provide exactly one of symbol or isin. Example `AAPL`. |
| `isin` | query | string | one of symbol, isin | ISIN code (e.g., `US0378331005`). Provide exactly one of symbol or isin. Clear the symbol example before using an ISIN. |
| `limit` | query | integer | no | Maximum number of articles to return (default 20, max 100) Default `20`. |
| `from` | query | string (date) | no | Start date (YYYY-MM-DD) |
| `to` | query | string (date) | no | End date (YYYY-MM-DD) |
| `cursor` | query | string | no | Opaque cursor for cursor-based pagination. When provided, returns results after the cursor position. Takes precedence over offset. |

Required: one of `symbol`, `isin`.

## Response

200 Successful response (`application/json`).

| Field | Type | Always present | Description |
|---|---|---|---|
| `data` | array of NewsArticle | no |  |
| `data[].symbol` | string \| null | no | Resolved ticker the article was matched to. Example: `AAPL`. |
| `data[].title` | string | no | Article headline. Example: `Apple Reports Record Q1 Revenue`. |
| `data[].text` | string | no | Article body or summary text. |
| `data[].site` | string | no | Publisher domain. Example: `benzinga.com`. |
| `data[].publishedDate` | string (date-time) | no | Publication date and time. |
| `data[].url` | string (uri) | no | Article URL. |
| `meta` | ResponseMeta | no | Response envelope metadata. Always present on a 200: `time` is set by `core/response.py` on every successful response. Errors carry the same block, built by the same code, so a client parses one meta shape whether the call succeeded or failed. |
| `meta.time` | integer | no | Server-side processing time in milliseconds. Example: `17`. |
| `meta.parameters` | object | no | Echo of the request parameters the endpoint resolved. |

## Example request

```bash
curl 'https://api.bavest.co/v2/news/stock?symbol=AAPL' \
  -H "x-api-key: $BAVEST_API_KEY"
```

## Example response

```json
{
  "data": [
    {
      "symbol": null,
      "publishedDate": "2026-09-27T15:45:00",
      "title": "Apple and Nvidia Are the Two Largest Companies in the World. Which is the Better Stock to Buy?",
      "site": "fool.com",
      "text": "Nvidia's growth rate will blow Apple away over the next year. Apple's stock is very pricey compared to Nvidia's.",
      "url": "https://www.fool.com/investing/2026/09/27/apple-nvidia-largest-companies-better-stock/"
    },
    {
      "symbol": null,
      "publishedDate": "2026-09-26T21:46:05",
      "title": "US jury says Apple owes record $5.7 billion in patent case against San Diego company",
      "site": "nypost.com",
      "text": "A US jury ruled that Apple owes Taction over $5.7 billion for infringing haptic technology patents in iPhones and Apple Watches.",
      "url": "https://nypost.com/2026/09/26/business/us-jury-says-apple-owes-record-5-7-billion-in-patent-case-against-san-diego-company/"
    }
  ],
  "meta": {
    "parameters": {
      "limit": "20",
      "symbol": "AAPL"
    },
    "time": 16
  }
}
```

## Errors

| Status | Meaning |
|---|---|
| 400 | Invalid request parameters. Returned when required query parameters are missing, have invalid types, or violate constraints (e.g., providing both symbol and isin when they are mutually exclusive). |
| 401 | Missing or invalid API key. |
| 404 | Resource not found. |
| 429 | Rate limit exceeded. Retry after the `Retry-After` header interval. |
| 500 | An unexpected error occurred on the server. If the issue persists, contact support with the X-Request-Id header value. |
| 502 | Upstream data provider returned an error or is temporarily unavailable. Retry after a short delay. |
| 504 | The request timed out waiting for a response from the upstream data provider. This may occur for complex queries or during peak load. |
| default | An unexpected error occurred on the server. If the issue persists, contact support with the X-Request-Id header value. |

- `403` from the gateway: the API key is invalid or switched off.
- `429` with message `Limit Exceeded`: the monthly quota of the key is used up. With `Too Many Requests`: the key is throttled, or this route is not in the key's plan. Wait for `Retry-After` when it is sent.

## Links

- HTML page: https://dashboard.bavest.co/docs/v2_news_stock
- OpenAPI: https://dashboard.bavest.co/openapi.json (YAML: https://dashboard.bavest.co/openapi.yaml)
- Authentication: https://dashboard.bavest.co/docs/authentication.md
- MCP server for AI agents: https://dashboard.bavest.co/docs/mcp.md
- All routes: https://dashboard.bavest.co/llms.txt
