Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion web-search-api/api-reference/catch-all-api.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
openapi: 3.1.0
info:
title: NewsCatcher CatchAll API
version: 1.9.0
version: 1.10.0
description: |
CatchAll is a web search API that generates unique datasets that don't exist anywhere else on the web. Built on NewsCatcher's proprietary real-world event index, it delivers state-of-the-art recall—finding all relevant events, not just top results.

Expand Down
15 changes: 15 additions & 0 deletions web-search-api/concepts/company-monitors.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,13 @@ industry**, **headquarters location**, **founding year and founders**, and
**concrete products or services**. Generic adjectives ("leading," "innovative,"
"world-class") carry no disambiguating signal — drop them.

<Note>
When a company name or alias is a common word, such as "Apple" or "Target",
CatchAll matches it using named-entity recognition instead of searching for
the word anywhere in article text. This reduces false matches from ordinary
uses of the word.
</Note>

<Tip>
Before saving: *Could this description be true of a different company with the
same name?* If yes, add the attribute that breaks the tie — usually industry,
Expand Down Expand Up @@ -1169,6 +1176,14 @@ results.getAllRecords().forEach(record -> {

</Expandable>

### Records per company

Connected jobs cluster articles separately for each company in the dataset, so
articles about different companies never end up in the same record. When an
article covers several companies from your watchlist, each of those companies
can get its own record built from that article. Articles with no connected
company are clustered together.

## See also

- [Jobs](/web-search-api/concepts/jobs)
Expand Down
17 changes: 16 additions & 1 deletion web-search-api/concepts/jobs.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,8 @@ System.out.println("Job created: " + jobId);
returns the current processing stage. Poll every 30-60 seconds until status is
`completed`. Jobs typically take 10-15 minutes.

Jobs progress through these stages in order:
Jobs progress through these stages in order. A job can repeat `fetching`,
`clustering`, and `enriching` when it moves to a new [search turn](#search-turns).

| Stage | Description |
| ------------ | ------------------------------------------------------ |
Expand Down Expand Up @@ -375,6 +376,20 @@ while (true) {
without waiting for completion. See [Get job results](#get-job-results) below.
</Note>

### Search turns

CatchAll searches in up to four turns. The first turn runs a strict precision
search that matches your query against article titles and summaries. If the job
runs out of candidates before reaching its `limit`, it moves to the next turn,
which searches a broader set of sources and repeats `fetching`, `clustering`,
and `enriching`. The job completes when it reaches the limit or finishes the
last turn. Jobs without a `limit` can run all four turns.

Because of this, a job can return to `fetching` after `enriching`. Treat this
as continued progress on the same job, and keep polling until the status is
`completed` or `failed`. Records from earlier turns keep their IDs; articles
found in later turns can be added to them as new citations.

## Get job results

[`GET /catchAll/pull/{job_id}`](/web-search-api/api-reference/jobs/get-job-results)
Expand Down
40 changes: 40 additions & 0 deletions web-search-api/get-started/changelog.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,46 @@ description: Track updates, improvements, and fixes to the CatchAll API.
rss: true
---

<Update label="1.10.0" description="2026-09-30">
## Multi-turn search and per-company clustering

A quality release with no request or response schema changes. Jobs now start
with a narrow precision search and widen only when they need more results, so
small jobs finish faster. Company Monitors results no longer mix different
companies in the same record. Existing jobs and event monitors pick up these
changes automatically.

### Multi-turn search

Jobs now search in up to four turns. The first turn runs a strict precision
search that matches your query against article titles and summaries. If the
job runs out of candidates before reaching its `limit`, it searches the next,
broader set of sources and runs fetching, clustering, and enrichment again. The
job completes when it reaches the limit or finishes the last turn.

- Jobs with a low `limit` often finish after the first turn, in around four
minutes.
- Records you already pulled keep their IDs and content. Articles found in later
turns can join existing records as additional citations.
- A job can return to `fetching` after `enriching`. Keep polling until the
status is `completed` or `failed`. See
[Jobs](/web-search-api/concepts/jobs#search-turns).

### Per-company clustering for Company Monitors

Jobs submitted with `connected_dataset_ids` now cluster articles separately for
each connected company, so articles about different companies no longer end up
in the same record. An article about several companies from your watchlist can
produce a record for each of them. See
[Company Monitors](/web-search-api/concepts/company-monitors#records-per-company).

### Fixes and improvements

- Fewer false matches for companies whose name or alias is a common word. For
these names, matching relies on named-entity recognition instead of matching
the word anywhere in article text.
</Update>

<Update label="1.9.0" description="2026-09-18">
## Paused event monitor alerts and better watchlist recall

Expand Down
Loading