Signal
News search
- Coverage
- US / CN / JP
- Billing
- 1 cr / call
Searches news across sources and returns storylines. Duplicate reports of the same occurrence are merged into one event, related events are grouped into a storyline, and statements with a named speaker and subject are returned separately as attributed claims (claims). Each item in results is a storyline, not an article; every result is an in-house summary with links to the original sources, and article text is not included.
Coverage is US / CN / JP. Provide at least one of query, theme, ticker, since, until; most macroeconomic, political and geopolitical events are not linked to a company, so search for them with query, theme or a time window rather than ticker alone. Passing only ticker or a time window and sorting by order_by=create_time turns the endpoint into a latest-news feed for a company.
The request must include Content-Type: application/json; parameters belong in the JSON body:
JSON body
At least one of query, theme, ticker, since or until is required.
| Parameter | Type | Required | Description |
|---|---|---|---|
| query | string | one of | English semantic query; when combined with other filters, hard filters run first and semantic relevance drives retrieval. |
| theme | string | one of | Theme phrase, resolved to the nearest canonical theme and echoed in theme_resolved; not accepted when search_type=claims. |
| ticker | string | string[] | one of | A single symbol, an array, or a comma-separated string; up to 50 canonical tickers, with multiple tickers acting as an OR filter. Use bare symbols for US, .SH / .SZ / .BJ for A-shares, and .T for Japan; company names are not resolved. |
| since | datetime | one of | ISO 8601; keeps events or claims where time_event >= since. |
| until | datetime | one of | ISO 8601; keeps events or claims where time_event < until. |
| search_type | stringenum | optional | all / events / claims; events returns storylines and claims returns attributed claims only. Default: all. |
| order_by | stringenum | optional | relevance / event_time / create_time; sorts by relevance, event time, or ingestion creation time respectively. Default: relevance. |
| top_k | int | optional | Number of storylines, capped at 50. Default: 10. |
| cursor | string | optional | Opaque next_cursor returned by the previous page; pass it back unchanged and never reuse it with different filters. |
Response fields
| Field | Type | Description |
|---|---|---|
| query | string | Semantic query actually executed; null when omitted |
| theme | string | Theme phrase supplied by the caller; null when omitted |
| theme_resolved | object | Theme-resolution result containing id, label, sim, and matched; null when theme is omitted, and below the match threshold matched=false with no storylines |
| ticker | string[] | Normalized, deduplicated ticker filter; an empty array when omitted |
| since | datetime | Time lower bound actually used; null when omitted |
| until | datetime | Time upper bound actually used; null when omitted |
| order_by | stringenum | Sort order actually used |
| count | int | Number of storylines returned on this page |
| results | object[] | Storyline array. Each item always contains story_id, title, summary, node_count, first_seen_at, last_seen_at, created_at, sim, events_in_window, tags, and events. tags always contains version, primary_class, event_types, regions, and sectors_gics; each event always contains id, time_event, summary, event_type, event_subtype, primary_entity_name, object_name, score, sim, sources_total, first_reported, last_reported, and source; source always contains name, url, time, and headline. Fields without a value are null; array fields without values are []. |
| claims | object[] | Attributed-claim array. Each item always contains id, time_event, claim_type, claim_subtype, claimant_name, target_name, summary, sources_total, first_reported, last_reported, and source; as with events, source always contains name, url, time, and headline. Fields without a value are null; when search_type=events, claims is an empty array. |
| next_cursor | string | Opaque cursor for the next page; null when there is no next page |
| claims_skipped | string | Explains why claims were skipped when search_type=all but a filter cannot be applied to claims; null when nothing was skipped |
No key yet? Create one under API Keys — it is shown once, so store it where your shell can read it. Connecting an agent over MCP instead? That signs in through the browser and needs no key at all.
Authentication, conventions, rate limits and error shapes are the same for every endpoint — they live on REST API.