---
title: "Query the news feed"
method: GET
path: "/v1/feed"
tags: ["Feed"]
---

# Query the news feed

`GET /v1/feed`

## Request

- Base URL: `http://api.technooptimist.io`
- URL: `http://api.technooptimist.io/v1/feed`
- Auth: one of:
  - HTTP bearer
  - API key in query parameter `api_key`

Updates (news) across the knowledge base, filterable by frontier, field, company, program, or an explicit list of companies/programs.

Pagination: with `sort=latest`, pass the response's `nextCursor` as `before` to get the next page.

## Query parameters

- `frontier` string
- `field` string
- `company` string
- `program` string: Requires `company`.
- `window` 'day' | 'week' | 'month' | 'quarter' | 'all': Default `week`.
- `sort` 'top' | 'latest': Default `top`. Cursor pagination is only stable with `latest`.
- `majorOnly` boolean
- `companies` string: Comma-separated company slugs (e.g. a followed list).
- `programs` string: Comma-separated `company/program` pairs.
- `limit` integer: 1-100, default 20.
- `before` string: ISO timestamp or `nextCursor` from the previous page.
- `fallback` boolean: If the window is empty, return the most recent items instead (`fellBack: true`).

## Response `200`

A page of feed items

- Feed
  - `items` FeedItem[], required
    - `id` string, uuid, required
    - `occurredAt` string, date-time, required
    - `precision` 'day' | 'month' | 'quarter' | 'year', required
    - `headline` string, required
    - `kind` 'test' | 'hardware' | 'software' | 'manufacturing' | 'regulatory' | 'funding' | 'hiring' | 'commercial' | 'research' | 'partnership' | 'people' | 'other', required
    - `importance` 'major' | 'minor', required
    - `rank` integer, required
    - `sourceType` 'x' | 'blog' | 'filing' | 'press' | 'livestream' | 'paper' | 'job' | 'regulator' | 'interview' | 'other', required
    - `sourceUrl` string, uri, nullable, required: Link to the original story (article, press release, filing, video). Null when unknown.
    - `summary` string, nullable, required: The story in our words: 2–4 sentences on what happened and why it matters, written from the source. Null when not written yet.
    - `company` object, required
      - `slug` string, required
      - `name` string, required
    - `program` object, nullable, required
      - `slug` string, required
      - `name` string, required
      - `frontier` string, required
      - `path` string, required: Canonical site path. Programs live under their frontier.
    - `frontiers` string[], required
    - `createdAt` string, date-time, required
  - `window` 'day' | 'week' | 'month' | 'quarter' | 'all', required
  - `fellBack` boolean, required
  - `total` integer, required: Total matches for the filter (ignoring the cursor window).
  - `nextCursor` string, nullable, required: Pass as `before` to get the next page. Null when there are no more pages (or sort=top).

## Other responses

- `401`: Missing or invalid credentials
- `422`: Validation failed
- `429`: Rate limited

---

[API](https://skmtc.dev/technooptimist/apis/the-techno-optimist-api.md) · [All operations](https://skmtc.dev/technooptimist/apis/the-techno-optimist-api/llms.txt) · [OpenAPI document](https://skmtc.dev/technooptimist/apis/the-techno-optimist-api/revisions/b7bcde6a0f30?raw)
