---
title: "Get a program by its canonical address"
method: GET
path: "/v1/frontiers/{frontier}/programs/{program}"
tags: ["Programs"]
---

# Get a program by its canonical address

`GET /v1/frontiers/{frontier}/programs/{program}`

## Request

- Base URL: `http://api.technooptimist.io`
- URL: `http://api.technooptimist.io/v1/frontiers/{frontier}/programs/{program}`
- Auth: one of:
  - HTTP bearer
  - API key in query parameter `api_key`

Programs are addressed by frontier + slug (the site URL is `/<frontier>/<program>`). Same model as `GET /companies/{company}/programs/{program}`.

## Path parameters

- `frontier` string, required
- `program` string, required

## Response `200`

Program page

- ProgramPage
  - `company` object, required
    - `slug` string, required
    - `name` string, required
    - `hq` string[], required
    - `logoUrl` string, nullable, required
    - `keywords` string, required
    - `description` string, required
    - `brief` string[], required
    - `foundedYear` number, nullable, required
    - `status` string, required
    - `parent` string, nullable, required
    - `employees` number, nullable, required
    - `valuationUsd` number, nullable, required
    - `valuationKind` 'market_cap' | 'private_valuation' | 'deal_value' | 'none', required
    - `people` object[], required
      - `name` string, required
      - `role` string, required
      - `url` string, uri, nullable, required
    - `checkedAt` string, date-time, nullable, required: When we last verified these facts (null = never stamped).
  - `program` object, required
    - `slug` string, required
    - `name` string, required
    - `keywords` string, required
    - `description` string, required
    - `goal` string, nullable, required: What the program is trying to achieve and why it matters.
    - `statusLine` string, required
    - `stage` 'research' | 'proto' | 'pilot' | 'deploy' | 'scaling', required
    - `isFlagship` boolean, required
    - `previousGeneration` string, nullable, required
    - `imageUrl` string, nullable, required
    - `frontier` object, required
      - `slug` string, required
      - `name` string, required
    - `field` object, nullable, required
      - `slug` string, required
      - `name` string, required
    - `lastUpdateAt` string, date-time, nullable, required
    - `path` string, required: Canonical site path. Programs live under their frontier.
    - `checkedAt` string, date-time, nullable, required: When we last verified these facts (null = never stamped).
  - `milestones` object[], required
    - `title` string, required
    - `status` 'done' | 'current' | 'planned' | 'missed', required
    - `date` LooseDate, nullable, required
      - `date` string, date, required
      - `precision` 'day' | 'month' | 'quarter' | 'year', required
    - `originalTarget` LooseDate, nullable, required
      - `date` string, date, required
      - `precision` 'day' | 'month' | 'quarter' | 'year', required
    - `note` string, nullable, required
  - `specs` object[], required
    - `key` string, required
    - `label` string, required
    - `value` string, required
    - `numeric` number, nullable, required
    - `unit` string, nullable, required
    - `previous` string, nullable, required
    - `provenance` 'reported' | 'estimated' | 'sample', required
  - `howItWorks` object[], required
    - `label` string, nullable, required
    - `title` string, required
    - `body` string, required
  - `obstacles` object[], required: The program's own current obstacles.
    - `title` string, required
    - `body` string, required
    - `status` 'open' | 'active_research' | 'partially_solved' | 'solved', nullable, required
  - `limits` object[], required: Fundamental physics/technology limits of this kind of technology: why it can't simply be made better.
    - `title` string, required
    - `body` string, required
  - `important` object, required: Most important updates: the top-ranked of the last 3 months, topped up with the most important older ones to at least 5.
    - `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
    - `recentOnly` boolean, required: True when every item is from the last 3 months; false when older items were added to reach at least 5.
  - `events` object, required: Important events (at most 20 per list).
    - `upcoming` ProgramEvent[], required: Catalysts and planned/current milestones with a date, soonest first.
      - `title` string, required
      - `date` object, nullable, required
        - `date` string, date, required
        - `precision` 'day' | 'month' | 'quarter' | 'year', required
      - `source` 'catalyst' | 'milestone' | 'update', required
      - `status` 'done' | 'current' | 'planned' | 'missed', nullable, required: Milestones only.
      - `originalTarget` object, nullable, required: Milestones only: the original target when the date slipped.
        - `date` string, date, required
        - `precision` 'day' | 'month' | 'quarter' | 'year', required
      - `slipMonths` integer, nullable, required
      - `kind` string, nullable, required: Catalyst kind or update kind.
      - `update` object, nullable, required: The story behind the event (updates, and milestones matched to the update that reported them).
        - `id` string, uuid, required
        - `headline` string, required
        - `sourceType` 'x' | 'blog' | 'filing' | 'press' | 'livestream' | 'paper' | 'job' | 'regulator' | 'interview' | 'other', required
        - `sourceUrl` string, nullable, required
    - `past` ProgramEvent[], required: Done/missed milestones and major updates, newest first. A milestone and the update reporting it appear once.
      - `title` string, required
      - `date` object, nullable, required
        - `date` string, date, required
        - `precision` 'day' | 'month' | 'quarter' | 'year', required
      - `source` 'catalyst' | 'milestone' | 'update', required
      - `status` 'done' | 'current' | 'planned' | 'missed', nullable, required: Milestones only.
      - `originalTarget` object, nullable, required: Milestones only: the original target when the date slipped.
        - `date` string, date, required
        - `precision` 'day' | 'month' | 'quarter' | 'year', required
      - `slipMonths` integer, nullable, required
      - `kind` string, nullable, required: Catalyst kind or update kind.
      - `update` object, nullable, required: The story behind the event (updates, and milestones matched to the update that reported them).
        - `id` string, uuid, required
        - `headline` string, required
        - `sourceType` 'x' | 'blog' | 'filing' | 'press' | 'livestream' | 'paper' | 'job' | 'regulator' | 'interview' | 'other', required
        - `sourceUrl` string, nullable, required
  - `catalysts` object[], required
    - `title` string, required
    - `date` string, date, required
    - `precision` 'day' | 'month' | 'quarter' | 'year', required
    - `kind` string, nullable, required
  - `research` object[], required
    - `date` string, date, required
    - `precision` 'day' | 'month' | 'quarter' | 'year', required
    - `kind` 'paper' | 'blog' | 'demo' | 'talk' | 'dataset' | 'code', required
    - `title` string, required
    - `why` string, required
    - `url` string, uri, nullable, required
  - `siblings` object[], required
    - `slug` string, required
    - `name` string, required
    - `stage` 'research' | 'proto' | 'pilot' | 'deploy' | 'scaling', required
    - `frontier` string, required
    - `path` string, required: Canonical site path. Programs live under their frontier.
  - `peers` object[], required
    - `company` object, required
      - `slug` string, required
      - `name` string, required
    - `slug` string, required
    - `name` string, required
    - `stage` 'research' | 'proto' | 'pilot' | 'deploy' | 'scaling', required
    - `path` string, required: Canonical site path. Programs live under their frontier.
    - `specs` object, required

## Other responses

- `401`: Missing or invalid credentials
- `404`: Not found
- `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)
