LatestIn
API REFERENCE · v0.1.0 · 6 OPERATIONS

LatestIn API

GETTING STARTED
Every request goes to https://api.latestin.com/ with your key in the X-API-Key header. What's left of your allowance rides back on every response in X-Gw-Remaining.
Get a key → · Sign in →
curl "https://api.latestin.com/v1/events" \
  -H "X-API-Key: YOUR_KEY"
FROM AN AI AGENT
This API is also an MCP server. Add https://mcp.latestin.com/ to Claude Code, Cursor or any MCP client with your key as a bearer token and every operation below becomes a tool — same key, same metering, same allowance. In a connector that only takes a URL, use the connector URL instead. Prompting a model by hand? Every operation has a Markdown version. An agent setting itself up can start from agents.md, and npx skills add https://developers.latestin.com/ installs this API as a skill.
claude mcp add --transport http latestin https://mcp.latestin.com/ \
  --header "Authorization: Bearer YOUR_KEY"
ERRORS
Every operation can also answer with this, so it is listed once here rather than on each card.
422Unprocessable Entity
[
  {
    "input": null,
    "loc": [],
    "msg": "string",
    "type": "string"
  }
]

Events

GET/v1/events

Clustered events with verified facts and sources

PARAMETERS
sincequery
Only events on or after this date (YYYY-MM-DD)
storyline_idquery
Filter to one storyline
limitquery · integer
e.g. 25
Open on its own page
REQUEST
curl "https://api.latestin.com/v1/events" \
  -H "X-API-Key: YOUR_KEY"
RESPONSE
200OK
{
  "count": 1,
  "events": [
    {
      "event_date": "string",
      "event_id": "string",
      "fact_count": 1,
      "facts": [
        {
          "claim": "string",
          "fact_id": "string",
          "first_reported_at": "string",
          "sources": [
            {
              "outlet": null,
              "source_url": null
            }
          ]
        }
      ],
      "source_count": 1,
      "storyline_id": "string",
      "storyline_title": "string",
      "title": "string"
    }
  ]
}
Try it — sign in first
Runs on a sandbox key: 200 requests a month. Your real key is for production.

Storylines

GET/v1/storylines

Long-running storylines with running totals

Open on its own page
REQUEST
curl "https://api.latestin.com/v1/storylines" \
  -H "X-API-Key: YOUR_KEY"
RESPONSE
200OK
{
  "count": 1,
  "storylines": [
    {
      "event_count": 1,
      "fact_count": 1,
      "last_event_at": "string",
      "opened_at": "string",
      "source_count": 1,
      "storyline_id": "string",
      "title": "string"
    }
  ]
}
Try it — sign in first
Runs on a sandbox key: 200 requests a month. Your real key is for production.

GET/v1/storylines/{storyline_id}/timeline

The accreted record of one storyline, oldest to newest

PARAMETERS
storyline_idpath · stringREQUIRED
e.g. string
Open on its own page
REQUEST
curl "https://api.latestin.com/v1/storylines/string/timeline" \
  -H "X-API-Key: YOUR_KEY"
RESPONSE
200OK
{
  "storyline": {
    "event_count": 1,
    "fact_count": 1,
    "last_event_at": "string",
    "opened_at": "string",
    "source_count": 1,
    "storyline_id": "string",
    "title": "string"
  },
  "timeline": [
    {
      "event_date": "string",
      "event_id": "string",
      "facts": [
        {
          "claim": "string",
          "fact_id": "string",
          "first_reported_at": "string",
          "sources": [
            {
              "outlet": null,
              "source_url": null
            }
          ]
        }
      ],
      "title": "string"
    }
  ]
}
Try it — sign in first
Runs on a sandbox key: 200 requests a month. Your real key is for production.

News

GET/v1/news

Company news by ticker: headlines, publisher summaries and share images

PARAMETERS
symbolquery · stringREQUIRED
Ticker symbol, e.g. KR. Case-insensitive.
e.g. string
sincequery
Only items published on or after this date (YYYY-MM-DD). Default: 14 days ago.
kindsquery
Comma-separated source kinds to include: wire, newsroom, outlet, aggregator. Default: all.
limitquery · integer
e.g. 20
Open on its own page
REQUEST
curl "https://api.latestin.com/v1/news?symbol=string" \
  -H "X-API-Key: YOUR_KEY"
RESPONSE
200OK
{
  "count": 1,
  "items": [
    {
      "author": "string",
      "item_id": "string",
      "published_at": "string",
      "symbols": [
        "string"
      ],
      "title": "string",
      "url": "string"
    }
  ],
  "since": "string",
  "symbol": "string"
}
Try it — sign in first
Runs on a sandbox key: 200 requests a month. Your real key is for production.

Quotes

GET/v1/quotes

Search verbatim quotes by person and date

PARAMETERS
personquery
Filter by speaker name (case-insensitive substring)
qquery
Filter by topic: case-insensitive substring of the quote text or its context line
sincequery
Only quotes reported on or after this date (YYYY-MM-DD)
limitquery · integer
e.g. 50
formatquery
'ndjson' streams one quote per line
Open on its own page
REQUEST
curl "https://api.latestin.com/v1/quotes" \
  -H "X-API-Key: YOUR_KEY"
RESPONSE
200OK
{
  "count": 1,
  "quotes": [
    {
      "context_line": "string",
      "date_reported": "string",
      "date_said": "string",
      "quote_id": "string",
      "source_count": 1,
      "sources": [
        {
          "outlet": "string",
          "source_url": "string"
        }
      ],
      "speaker_name": "string",
      "text": "string"
    }
  ]
}
Try it — sign in first
Runs on a sandbox key: 200 requests a month. Your real key is for production.

Speakers

GET/v1/speakers

Speakers on record, most quoted first

PARAMETERS
qquery
Filter by name (case-insensitive substring)
limitquery · integer
e.g. 50
Open on its own page
REQUEST
curl "https://api.latestin.com/v1/speakers" \
  -H "X-API-Key: YOUR_KEY"
RESPONSE
200OK
{
  "count": 1,
  "speakers": [
    {
      "last_quoted": "string",
      "name": "string",
      "page_url": "string",
      "quote_count": 1,
      "speaker_id": "string"
    }
  ]
}
Try it — sign in first
Runs on a sandbox key: 200 requests a month. Your real key is for production.