---
title: GET /v1/news
description: The main news feed endpoint — filter by ticker, event type, or both, and page through results with a cursor.
sidebar:
  label: News
  order: 2
---

Returns a page of news articles, newest first. This is the core endpoint of the API.

## Request

```
GET /v1/news
Authorization: Bearer <key>
```

### Query parameters

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `limit` | number | `10` | Articles per page. Clamped to a maximum of `50`. |
| `cursor` | string | — | Opaque cursor from a previous response's `pagination.next_cursor`. Omit for the first page. |
| `event_type` / `event_types` | string | — | Filter to one event category. Accepts a [slug](/docs/reference/events) (`legal-action`) or the raw label (`Legal Action`). |
| `ticker` / `tickers` | string | — | Filter to one or more tickers. Comma-separated for multiple (`AAPL,MSFT`), case-insensitive. |

`event_type` and `ticker` filters can be combined — e.g. `event_type=corporate-earnings&ticker=AAPL` returns only AAPL earnings news.

**Latest news**

```bash
curl "https://newsapi.insighthread.com/api/v1/news?limit=10" \
  -H "Authorization: Bearer ik_test_xxxxxxxxxxxxxxxx"
```

**By ticker**

```bash
curl "https://newsapi.insighthread.com/api/v1/news?ticker=AAPL&limit=5" \
  -H "Authorization: Bearer ik_test_xxxxxxxxxxxxxxxx"
```

**By event type**

```bash
curl "https://newsapi.insighthread.com/api/v1/news?event_type=legal-action" \
  -H "Authorization: Bearer ik_test_xxxxxxxxxxxxxxxx"
```

**Multiple tickers**

```bash
curl "https://newsapi.insighthread.com/api/v1/news?tickers=AAPL,MSFT,TSLA" \
  -H "Authorization: Bearer ik_test_xxxxxxxxxxxxxxxx"
```

## Response

`200 OK`

```json
{
  "count": 2,
  "pagination": {
    "next_cursor": "eyJwdWJsaXNoZWRfYXQiOi4uLn0",
    "has_more": true
  },
  "data": [
    {
      "id": 48213,
      "ticker": "AAPL",
      "company_name": "Apple Inc.",
      "event_types": ["Corporate Earnings"],
      "headline": "AAPL beats Q4 earnings expectations",
      "summary": "AAPL reported Q4 revenue of $X.X billion, beating analyst consensus by 5%. Adjusted EPS came in at $1.20 vs. $1.05 estimate.",
      "published_at": "2026-08-20T14:32:00.000Z",
      "source": { "name": "Reuters", "url": "https://example.com/article" },
      "impact": { "direction": "positive", "confidence": 87, "signal_strength": 5 },
      "market": { "price": 231.45, "change": 3.12, "change_percentage": 1.37 }
    }
  ]
}
```

### Fields

| Field | Type | Description |
| --- | --- | --- |
| `count` | number | Number of articles in this page. |
| `pagination.next_cursor` | string \| null | Pass as `cursor` to fetch the next page. `null` when there's no more data. |
| `pagination.has_more` | boolean | Whether another page exists. |
| `data[].id` | number | Article ID. |
| `data[].ticker` | string \| null | Primary ticker the article is about. |
| `data[].company_name` | string \| null | Company name. |
| `data[].event_types` | string[] | One or more event category labels. |
| `data[].headline` | string | Article headline. |
| `data[].summary` | string \| null | Plain-text summary (Markdown emphasis stripped). |
| `data[].published_at` | string (ISO 8601) | Publish timestamp. |
| `data[].source.name` | string \| null | Publisher name. |
| `data[].source.url` | string \| null | Link to the original article. |
| `data[].impact.direction` | `"positive"` \| `"negative"` \| `"neutral"` | Sentiment direction. |
| `data[].impact.confidence` | number | 0–100 confidence score. |
| `data[].impact.signal_strength` | number | 1–5 bars derived from confidence — a quick-glance strength indicator. |
| `data[].market.price` | number \| null | Price at time of publish. |
| `data[].market.change` | number \| null | Absolute price change. |
| `data[].market.change_percentage` | number \| null | Percentage price change. |

## Pagination

Use `pagination.next_cursor` from a response as the `cursor` on your next request to continue from where you left off:

```bash
curl "https://newsapi.insighthread.com/api/v1/news?limit=10&cursor=eyJwdWJsaXNoZWRfYXQiOi4uLn0" \
  -H "Authorization: Bearer ik_test_xxxxxxxxxxxxxxxx"
```

Stop paging once `pagination.has_more` is `false`.

## Test vs. live keys

With a **test key** (`ik_test_...`), this endpoint returns deterministic sample data — 5 fixed tickers (`AAPL`, `MSFT`, `GOOGL`, `TSLA`, `NVDA`) with realistic articles — and honors all the same filters and pagination, so client code behaves identically once you switch to a live key. Test responses include an `X-Key-Type: test` header.

## Errors

| Type | Status | Cause |
| --- | --- | --- |
| `unauthorized` | 401 | Missing or invalid API key. |
| `invalid_request` | 400 | `event_type` doesn't match any known category — response includes `valid_event_types`. |
| `server_error` | 502 | Upstream data fetch failed. |

See [Errors](/docs/errors) for the full shape.
