# GET /v2/events?kind=news

**News (events)**

Headlines as events on the timeline, one per article × tagged ticker. Opt in by naming `news` in `kind`.

## Query / path parameters

| Name | In | Type | Required | Description |
|------|----|----|----------|-------------|
| `kind` | query | string | yes | Include `news` explicitly — e.g. `kind=news` alone, or the full merge `kind=earnings,dividend,split,insider,analyst,signal,news`. Example: `news`. |
| `ticker` | query | string | no | Single symbol. Beats `tickers` when both are passed. Example: `AAPL`. |
| `tickers` | query | string[] | no | Comma-separated symbols, up to 50. Not combinable with `universe`; `ticker` wins when both are passed. Example: `AAPL,MSFT`. |
| `universe` | query | string | no | System or caller-owned universe slug. Example: `top_100`. |
| `from` | query | string | no | `YYYY-MM-DD` or ISO timestamp (inclusive). `since` is accepted as an alias. Example: `2026-09-14`. |
| `to` | query | string | no | `YYYY-MM-DD` or ISO timestamp — a bare `YYYY-MM-DD` means through the end of that day; timestamps are exclusive. `until` is accepted as an alias. Example: `2026-06-28`. |
| `q` | query | string | no | SQL filter. This kind's payload fields are first-class typed columns here: `sentiment_score` (numeric), `title`, `source`, `url`, `sentiment` (text) — e.g. `sentiment_score < -0.35`. `payload->>'…'` works too. Base columns: `ticker`, `ts`, `kind`, `payload`. Example: `sentiment_score < -0.35`. |
| `limit` | query | integer | no | Rows per page. Max 1000. Default: `50`. Example: `5`. |
| `cursor` | query | string | no | Opaque cursor from the previous response. |

## Returns

- `as_of` (string) — Server time this response was assembled (ISO 8601).
- `query` (object) — Your filters, echoed.
- `count` (number) — Rows in this page.
- `next_cursor` (string) — Opaque token for the next page; `null` on the last page. Pass it back as `cursor`.
- `results` (array) — One row per event, newest first.
  - `ticker` (string) — A tagged symbol — an article with several tags appears once per tag.
  - `ts` (string) — Publication time.
  - `kind` (string) — Always `news` on this view.
  - `payload` (object) — The headline.
    - `title` (string) — Headline text.
    - `source` (string) — Publisher.
    - `url` (string) — Article link.
    - `sentiment_score` (number, optional) — Per-ticker sentiment, signed.
    - `sentiment` (string, optional) — Label for the score (bullish/bearish/neutral bands).

## Sample response

```json
{
  "as_of": "2026-07-30T18:20:11.000Z",
  "query": { "kind": "news", "universe": "top_100", "since": "2026-07-30T00:00:00.000Z", "limit": 50 },
  "count": 1,
  "next_cursor": null,
  "results": [
    { "ticker": "TSLA", "ts": "2026-07-30T14:05:00.000Z", "kind": "news",
      "payload": { "title": "Deliveries miss widens", "source": "Reuters",
                   "url": "https://…", "sentiment_score": -0.41, "sentiment": "Bearish" } }
  ]
}
```

## More examples

### A ticker's full timeline, headlines included

Request:

```shell
curl "https://api.tickerbot.io/v2/events?ticker=AAPL&kind=earnings,dividend,split,insider,analyst,signal,news&from=2026-09-14" \
  -H "Authorization: Bearer YOUR_KEY"
```

Response (`200`):

```json
// One merged, newest-first timeline across all seven kinds.
```

## Notes

- This is [`GET /v2/events`](/docs/endpoints/events/query) with `kind=news`; it has its own page because the payload is its own contract. The full query grammar lives there and applies here unchanged.
- This kind is the timeline **mirror**, not a replacement: for search, publisher metadata, topic filters, and rollups use [`/v2/news`](/docs/endpoints/news/query). An unfiltered `/v2/events` stays the five corporate kinds. Latency: within 15 minutes via the live news feed.
- Event webhooks don't cover this kind — for push, watch the live `news_volume` / `news_volume_weighted_sentiment` signals with a [scan or ticker trigger](/docs/endpoints/webhooks/create).

---

Interactive sandbox + parameter editor: https://tickerbot.io/docs/endpoints/events/news
