AlphAI
Server Details
Financial news for AI agents: search, trending, insider, earnings reads, macro, scored 1-10.
- Status
- Healthy
- Uptime
- 78.6% over 62 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- makeev/alphai-mcp
- GitHub Stars
- 3
- Server Listing
- alphai-news
TDQS
Scored across 21 tools
The news-retrieval surface is crowded: alphai_actionable_now, alphai_trending, alphai_macro, alphai_news_search, alphai_ticker_news, alphai_radar, alphai_stories and alphai_watchlist_brief all return ranked headlines, differing mainly by scope, and an agent can easily pick the wrong feed. There is also a near-duplicate pair: search/fetch are explicitly the 'ChatGPT connector contract' twins of alphai_news_search/alphai_article, yet they use a different id space (id vs uid), which invites misrouting. Descriptions do a lot of work to differentiate, so overlap is manageable but real.
Almost every tool follows a clean alphai_<noun>_<verb-ish> snake_case pattern (alphai_ticker_news, alphai_alerts_subscribe, alphai_insider_clusters), which is highly predictable. The only deviations are the bare fetch and search names, kept for the connector contract; readable but a break in the pattern.
21 tools is on the heavy side, but the domain genuinely spans several surfaces: news feeds, article enrichment, SEC insider data, earnings reads, macro calendar, ticker reference, alerts and watchlist. Most tools earn their place; only fetch/search are redundant with existing tools, so the count is slightly over rather than bloated.
Coverage is broad and lifecycle-aware: alert list/subscribe/unsubscribe, ticker lookup, earnings, insider news and clusters, macro calendar plus retrospective macro, article/story expansion, and a watchlist brief. The main gap is watchlist mutation (adding/removing tickers is only available on the website, per alphai_watchlist_brief), which agents cannot do through the tool set.
Available Tools
21 toolsalphai_actionable_nowActionable-now feedARead-onlyIdempotentInspect
Urgent financial news, ranked novelty-first. Default min_actionability='high' excludes medium-actionability stories even when novelty is high; widen the floor or hours for a broader tape. Empty quiet-period results are normal. The window uses article publication time, not the event date; min_novelty helps filter recaps. Macro events qualify without tickers. Reprints collapse by story by default (dedupe=false keeps all), with story_id, sources_count and sources. AI-generated context, not investment advice. Use detail='compact' for headlines, sources, times, tickers, scores and story/search metadata without summary, analysis or SEC detail blocks. Expand uids with alphai_article. detail='full' is default; selection, order, cursors and page metadata are identical.
| Name | Required | Description | Default |
|---|---|---|---|
| hours | No | Look-back window in hours; default 6. | |
| limit | No | Stories; capped at 20 Free/Basic, 50 Pro. | |
| dedupe | No | Collapse syndicated reprints by story (default true). | |
| detail | No | full (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item. | full |
| min_novelty | No | Min information_novelty 1-10; default 7. | |
| min_actionability | No | Actionability floor. 'high' (default) = only act-today items; 'medium' also includes stories that shape a position over days/weeks. | high |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Well beyond the readOnly/idempotent annotations, it discloses that the window uses publication time not event date, that macro events qualify without tickers, that reprints collapse by story, and that output is AI-generated context, not advice. These are exactly the non-obvious traits an agent needs to interpret empty or deduped results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense block, front-loaded with the purpose and the most consequential default (min_actionability='high'). Nearly every sentence carries distinct information; it is long but largely waste-free, with only minor compression possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full parameter coverage, the description need not document return fields, and it does supply the remaining operational caveats (quiet periods, publication-time window, dedupe, detail modes). Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3. The description earns above-baseline credit by explaining semantics the schema omits: the interaction of min_actionability with novelty, the publication-time window, min_novelty's role in filtering recaps, and what dedupe=false retains (story_id, sources_count, sources).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line ('Urgent financial news, ranked novelty-first') states a specific resource and a ranking behavior, which differentiates it from quieter list tools like alphai_news_search. It stops short of explicitly naming a sibling it replaces, so an agent still has to infer the boundary versus alphai_ticker_news or alphai_trending.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides actionable tuning guidance: 'widen the floor or hours for a broader tape', 'Empty quiet-period results are normal', and 'Use detail=compact for polling'. It also routes expansion to alphai_article. It lacks explicit when-not-to-use-this-instead-of-search guidance, keeping it below 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alphai_alerts_listList my alert subscriptionsARead-onlyIdempotentInspect
List the caller's active ticker news-alert subscriptions, including per-subscription filters (category whitelist, minimum relevance score, delivery mode).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| tier | Yes | |
| limit | Yes | |
| alerts | No | |
| current | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds useful behavioral context beyond annotations by specifying that only the caller's active subscriptions are returned and that per-subscription filters are included, which clarifies the scope and content of the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tight sentence that front-loads the primary action and resource, then adds the relevant detail about included filters. There is no redundancy with the title or schema, and every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only list tool with an output schema present, the description is complete: it states whose subscriptions are returned, that they are active, and what fields are included. The output schema covers return-value structure, so nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty, so the description has no parameter-level responsibility. Per the rubric baseline for 0-param tools, a score of 4 is appropriate; the description does not need to add parameter meaning that does not exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a clear resource ('the caller's active ticker news-alert subscriptions'), and the kind of data included ('filters: category whitelist, minimum relevance score, delivery mode'). It clearly differentiates this from sibling tools like alphai_alerts_subscribe and alphai_alerts_unsubscribe by focusing on read-only listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied strongly by the verb and noun phrase: use this when the agent needs to see the caller's existing alert subscriptions. However, there is no explicit guidance about when not to use it or how it compares to related alert-management tools, so the agent must infer usage from the name and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alphai_alerts_subscribeSubscribe to ticker alertsADestructiveIdempotentInspect
WRITE operation (creates/updates a saved subscription in the caller's account). Subscribe the caller to ticker news alerts. Optional category_filter (e.g. ['earnings','insider']) restricts which categories trigger; min_relevance_score raises the threshold. This is a partial update: omitting either field on an existing subscription preserves its current value, and a brand-new subscription defaults min_relevance_score to 7. Note the threshold applies to email and telegram delivery; a Pro webhook receives the full matched stream and filters on its own. Raises tier_not_paid / unknown_ticker / limit_reached. Crypto alerts use the -USD ticker (BTC-USD); subscribing to a collider string like BTC binds the stock/ETF that owns it and the response's note field says so.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | Ticker to subscribe to (active symbol). | |
| category_filter | No | Categories that trigger alerts. | |
| min_relevance_score | No | Min relevance to alert on. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| ticker | Yes | |
| is_active | Yes | |
| created_at | Yes | |
| delivery_mode | Yes | |
| category_filter | No | |
| min_relevance_score | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: documents partial-update semantics, the default threshold of 7, that the threshold governs email/telegram delivery while a Pro webhook receives the full stream, and enumerates domain error codes (tier_not_paid / unknown_ticker / limit_reached). Consistent with destructiveHint/idempotentHint and adds substantial, non-duplicative behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the WRITE marker and core purpose, then layers semantics, errors, and edge cases. Dense but almost every clause carries distinct information; slightly long for a 3-parameter tool but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the mutation contract, defaults, delivery-channel nuance, error conditions, and ticker-format edge cases. With an output schema present, return values need not be explained, and the description leaves no material gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema coverage, the description adds real meaning beyond the schema: an example category_filter value, the behavioral default of 7 for min_relevance_score (schema lists default null), the <SYM>-USD crypto ticker convention, and the collider-string binding caveat surfaced in the response note field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Subscribe the caller to ticker news alerts') and flags it as a WRITE operation that creates/updates a saved subscription. Clearly distinguishable from siblings like alphai_alerts_list and alphai_alerts_unsubscribe.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the partial-update contract and when each field matters (omitting preserves existing value; new subscription defaults min_relevance_score to 7), which implies usage context well. It does not explicitly name the alternate sibling tools (alerts_unsubscribe/alerts_list) as routing alternatives, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alphai_alerts_unsubscribeUnsubscribe from ticker alertsADestructiveIdempotentInspect
WRITE operation (deactivates a saved subscription in the caller's account). Soft-disable the caller's news-alert subscription for the given ticker. Idempotent — returns {removed: false} if the alert was already inactive. Raises unknown_ticker for an unrecognized symbol.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | Ticker to unsubscribe from. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint=true and destructiveHint=true, and the description adds valuable specifics: it is a soft-disable scoped to the caller's account, returns {removed: false} when already inactive, and raises unknown_ticker for unrecognized symbols. This goes well beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the operation type and effect. There is slight redundancy between 'deactivates a saved subscription' and 'soft-disable the caller's news-alert subscription,' but every sentence otherwise contributes behavioral or error information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with an output schema, the description is complete: it covers the operation, account scoping, idempotency behavior, a concrete return case, and the main error condition. Nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the ticker parameter is already documented. The description adds extra meaning by clarifying that an unrecognized symbol will raise unknown_ticker, so the agent knows the value must correspond to a recognized ticker, not merely match the pattern.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: it deactivates/soft-disables the caller's news-alert subscription for a given ticker. This distinguishes it from siblings like alphai_alerts_subscribe and alphai_alerts_list, even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the use case clear: the caller wants to deactivate an existing ticker alert subscription. It does not explicitly list alternatives or exclusion conditions, but the operation type and idempotent behavior give sufficient context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alphai_articleFetch article by uidARead-onlyIdempotentInspect
Load one article by its uid, with full enrichment (per-ticker analysis, context, key entities). Use it to expand an item from any feed requested with detail='compact', a condensed *_recent item from alphai_pair_analysis, or a uid from the user, connector search or alphai_insider_clusters. Feeds using detail='full' already carry the news analysis inline. SEC rows also carry insider on a Form 4 (shares, avg_price_usd, is_10b5_1, filed_at...) and filing on an 8-K. On an SEC earnings filing (source_type sec_form8k or sec_form6k), this tool adds earnings, AlphAI's structured read of the filing with every figure checked against the filing text; feed tools never populate it. To go from a ticker straight to those reads, use alphai_earnings instead. The full article body is intentionally not served (copyright). Raises not_found for an unknown uid.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | The article uid from any feed response. |
Output Schema
| Name | Required | Description |
|---|---|---|
| uid | Yes | |
| url | Yes | |
| title | Yes | |
| filing | No | |
| source | Yes | |
| insider | No | |
| sources | No | |
| summary | Yes | |
| tickers | No | |
| analysis | No | |
| category | Yes | |
| earnings | No | |
| story_id | No | |
| created_at | Yes | |
| source_type | No | |
| banner_image | No | |
| search_match | No | |
| source_domain | Yes | |
| sources_count | No | |
| ownership_form | No | |
| time_published | Yes | |
| relevance_score | Yes | |
| read_time_minutes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description adds real behavioral context: the article body is intentionally withheld for copyright, not_found is raised for an unknown uid, SEC rows carry extra insider/filing fields, and earnings is populated only for sec_form8k/sec_form6k filings (feed tools never fill it). That is substantial disclosure beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is dense but front-loaded: the core action and enrichment scope come first, then usage sources, then caveats about SEC rows, earnings, copyright, and errors. Every sentence carries information, though the block of conditional SEC/earnings detail makes it heavier than a typical single-parameter tool needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description fully covers invocation conditions, source of the uid, conditional enrichment, error behavior, and the copyright limitation on article body content. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and there is a single required uid parameter already documented in the schema. The description adds only that the uid comes from a feed response, which is minimal beyond the schema and does not warrant more than the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Load one article by its uid') and immediately scopes it with 'full enrichment (per-ticker analysis, context, key entities)'. It differentiates itself from sibling feed tools by naming which sources yield compact uids and pointing to alphai_earnings for the ticker-first path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it (expand a compact item, a condensed *_recent item from alphai_pair_analysis, a uid from the user/connector search/alphai_insider_clusters) and when it is unnecessary (feeds using detail='full' already carry the analysis inline). It also names the alternative for going from ticker to earnings reads.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alphai_calendarEconomic calendar (US macro releases)ARead-onlyIdempotentInspect
The forward half of the macro loop: the official US economic calendar — scheduled FOMC decisions (with SEP and press-conference markers) and minutes, CPI, PPI, the jobs report, GDP estimates, PCE, retail sales, weekly jobless claims and JOLTS, from the agencies' own schedules. Ask it 'what macro releases are coming this week', then read alphai_macro for what a release meant once it is out. Each occurrence carries a stable uid that survives reschedules, plus phase: 'elapsed' means the scheduled moment passed (NOT that the agency published — check schedule_status; schedule_basis='inferred' marks dates derived from the release cadence rather than printed by the agency). Elapsed SCHEDULED occurrences include coverage: the top feed stories about that release (uid + relevance score) — fetch depth per story via alphai_article; cancelled/postponed rows return coverage=null. days_back counts from today's UTC midnight, so the default 0 still includes today's already-released prints with their coverage. This tool is US MACRO only: for a company's next earnings date, read next_report_date on alphai_tickers. Informational and AI-generated — not investment advice.
| Name | Required | Description | Default |
|---|---|---|---|
| days_back | No | Days back from today's UTC midnight; default 0 still includes today's releases. Also capped by your archive depth. | |
| days_ahead | No | Days forward from now; default 7. | |
| event_keys | No | Narrow to specific series; default all. | |
| importance | No | Filter by importance tier. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnly/idempotent annotations by explaining subtle behaviors: elapsed means the scheduled moment passed, not that the agency published; schedule_basis='inferred' marks cadence-derived dates; cancelled/postponed rows return coverage=null; elapsed SCHEDULED occurrences include coverage with uid and relevance scores. It also clarifies days_back semantics around UTC midnight. This is rich, non-obvious behavioral disclosure that an agent needs to interpret results correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but dense and mostly front-loaded: the core purpose appears in the first sentence, with sibling routing early. The later caveats about phase, schedule_basis, coverage, and cancellation behavior are necessary for correct interpretation of results. It could be tightened slightly, but the length is justified by the complexity of the calendar semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the presence of an output schema, the description covers everything an agent needs: what data is included, how to filter, how to interpret elapsed/inferred/cancelled states, what coverage contains, and where to go for related data. The references to alphai_macro, alphai_article, and alphai_tickers close the remaining contextual gaps. Nothing critical is missing for correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the schema already describes days_back, days_ahead, event_keys, and importance. The description adds meaningful semantic nuance beyond the schema: days_back counts from today's UTC midnight so default 0 still includes today's already-released prints with coverage, and event occurrences carry stable uids and phase semantics. This elevates it above the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource: it provides the official US economic calendar with scheduled macro releases. It lists concrete event types (FOMC, CPI, PPI, jobs report, GDP, PCE, etc.) and explicitly distinguishes itself from siblings: alphai_macro for post-release interpretation and alphai_tickers for earnings dates. This makes the tool's scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage direction: ask it about upcoming macro releases, then use alphai_macro once a release is out. It also states an exclusion boundary: 'This tool is US MACRO only' and redirects earnings-date lookups to alphai_tickers.next_report_date. It even routes story depth retrieval to alphai_article, so the agent knows exactly when to pick this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alphai_earningsEarnings reads for a tickerARead-onlyIdempotentInspect
Structured reads of a company's earnings reports, newest first, plus its next confirmed report date. Reads are generated from SEC filings: 8-K item 2.02 for US filers and 6-K earnings releases for foreign private issuers. Carries reported metrics with year-over-year and sequential comparisons, segments, guidance, drivers, concerns and management quotes; each key_metrics and segments row also carries numeric, unit and scale next to the printed value (scale is null when the filing does not say), and table_scale names the unit of the filing's tables, which is the unit of any figure the notes and analysis quote bare. Reports can be returned across share classes; each row identifies the filing's share class. Depth is shallow: AlphAI's reads begin with filings from late July 2026 and reports are quarterly, so most tickers carry one or two reads and an empty list is a normal answer, not an error. Informational and AI-generated; not investment advice.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | Ticker symbol, e.g. 'NVDA'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ticker | Yes | |
| reports | No | |
| unknown_ticker | No | |
| next_report_date | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, and the description adds substantial context beyond them: data provenance (8-K item 2.02, 6-K), which fields carry YoY/sequential comparisons, the unit/scale/null-scale convention, table_scale semantics, cross-share-class rows, and explicit coverage depth limits. This is exactly the behavioral disclosure an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, then provenance, payload, unit caveats, and coverage limits follow in a single dense but non-redundant paragraph. Every sentence carries information an agent would otherwise have to guess.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return shapes, and it still supplies provenance, coverage depth, absence semantics and unit conventions. Nothing material for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (ticker) and schema description coverage is 100%, so the schema fully documents it with pattern and example. The description adds no ticker-specific semantics (e.g., class suffixes for share classes), so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Structured reads of a company's earnings reports') plus the added return of the next confirmed report date. An agent can immediately distinguish it from news/calendar siblings by the SEC-filing provenance and earnings-specific payload it names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides useful usage context – results start late July 2026, reports are quarterly, and 'an empty list is a normal answer, not an error' – but never names or compares against siblings that overlap (alphai_calendar for dates, alphai_ticker_news or alphai_article for earnings coverage). Usage is therefore implied rather than routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alphai_insider_clustersInsider cluster buysARead-onlyIdempotentInspect
Find issuers where several different insiders bought on the open market in one run of purchases (SEC Form 4, purchase dates chained while at most 10 days apart, an episode capped at 30 days). Every purchase is examined before a buyer counts: an IPO or PIPE allocation — by its price shape or by the filing's own footnote saying the shares came from the issuer, an offering or a negotiated block (buyer reason: placement, offering, private) — ESPP / DRIP / director-plan lots, units and note exchanges without a price, and the same transaction reported through two owners are labeled per buyer (role: independent, plan_like, unpriced, duplicate_of) and hidden from the default open_market list; ask pattern=plan_or_offering, holders_only or all to see them. buyers counts independent buyers, buyers_total everyone who bought. days is measured on known_at, the moment the episode's latest filing reached EDGAR, so 'what became known this month' is one call; a Free account reaches 30 days, Basic and Pro 90. Sort recent (default, newest known first), buyers or value; follow next_cursor with the same sort. Each result links every filing (accession number, EDGAR URL) and the news uids to open with alphai_article. Descriptive screen, not point-in-time and not a return forecast; coverage starts at meta.coverage_since (the table begins in August 2025).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback in days over known_at (latest filing); default 30. | |
| sort | No | recent = newest known first. | recent |
| limit | No | Rows per page, default 10; above 20 needs Pro. | |
| cursor | No | Opaque next_cursor, unchanged. | |
| symbol | No | One ticker; former names and share-class siblings match too. Empty for the whole market. | |
| min_usd | No | Drop episodes whose known total is below this many dollars. | |
| pattern | No | Which verdicts to return; open_market by default. | open_market |
| min_buyers | No | Minimum independent buyers for open_market rows (everyone who bought for plan rows). |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| results | No | |
| next_cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses substantial behavior: how purchases are classified and hidden by default, that buyers counts only independent buyers, that days is measured on known_at, account-tier limits on lookback, and that the table starts in August 2025. This is exactly the kind of non-obvious behavior an agent needs to interpret results correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded with the core purpose, and every sentence contributes meaningful detail. However, it is delivered as one long paragraph with many embedded clauses; breaking it into a few shorter blocks or bullets would make it easier to parse without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, eight parameters, and existing output schema, the description is remarkably complete. It covers the classification rules, default behavior, pagination with sort consistency, account limitations, links to filings and news uids, and the coverage start date. There are no obvious gaps an agent would need to fill by trial and error.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema already has 100% parameter description coverage, the tool description adds deeper meaning: it explains what each pattern value returns, clarifies that min_buyers counts independent buyers for open_market but everyone for plan rows, and discusses account-tier differences for days and limit. This goes well beyond the baseline expected when schema descriptions are already strong.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb and resource: 'Find issuers where several different insiders bought on the open market in one run of purchases.' It further specifies the SEC Form 4 basis, date-chaining rules, and episode cap, making it clearly distinct from sibling tools like alphai_insider_news or alphai_tickers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong contextual cues: 'what became known this month is one call', and explicitly states the tool is 'Descriptive screen, not point-in-time and not a return forecast', which sets expectations for appropriate use. It does not name alternative sibling tools for comparison, so it falls short of fully explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alphai_insider_newsInsider & ownership newsARead-onlyIdempotentInspect
SEC Form 4 trades by company officers, directors and 10% owners. Filter ticker, date, score or is_10b5_1; false keeps discretionary trades, true keeps planned trades. Full items carry structured insider details. Prefer ingested mode for new filings: they can arrive days after the transaction. Delisted symbols retain history; delisted/renamed_to and ticker_note explain lifecycle or stock/crypto collisions. unknown_ticker means unrecognized. Use detail='compact' for headlines, sources, times, tickers, scores and story/search metadata without summary, analysis or SEC detail blocks. Expand uids with alphai_article. detail='full' is default; selection, order, cursors and page metadata are identical. In ingested mode, prime may be partial/empty and starts at the feed head. Resume until empty success; short pages can continue. Errors are JSON: delta_scan_incomplete means use extra.next_cursor with unchanged filters/sort; delta_candidates_changed means retry the original request.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | published (default): newest first. ingested: delta polling — only Form 4 events added since your cursor, ascending; next_cursor is always returned (empty items = caught up, keep the cursor and poll later). Prefer this for watching insider activity: a filing arrives days after its transaction date, so it can land below the newest page of a publish-ordered feed. A cursor only works with the sort mode that issued it. With ingested, to_date must not be in the past. | |
| limit | No | Alias for page_size. | |
| cursor | No | Opaque cursor from a prior next_cursor. | |
| detail | No | full (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item. | full |
| ticker | No | Restrict to one ticker, e.g. 'AAPL'. | |
| to_date | No | On/before this ISO time (UTC if naive); a bare date covers that whole day. Bounds when the filing reached the feed, not the insider's transaction_date. | |
| from_date | No | On/after this ISO time (UTC if naive); a bare date means that day's midnight. | |
| is_10b5_1 | No | Rule 10b5-1 filter, on the same field each item's insider block reports. Omit for every event; false = discretionary trades only (a 10b5-1 ladder was scheduled months earlier, so it carries no timing decision); true = plan events only. Event-level: a filing mixing plan and discretionary tranches counts as a plan event. | |
| page_size | No | Items/page; capped at 20 Free/Basic, 50 Pro. | |
| min_relevance | No | Minimum AI relevance score, 1-10. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| items | No | |
| delisted | No | |
| renamed_to | No | |
| next_cursor | No | |
| ticker_note | No | |
| unknown_ticker | No | |
| query_interpretation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent/non-destructive, and the description goes well beyond that: cursor validity is tied to sort mode, ingested mode requires non-past to_date, delisted symbols retain history, unknown_ticker is flagged, and named error codes (delta_scan_incomplete, delta_candidates_changed) come with remediation steps. This is unusually rich behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and filters are front-loaded, then operational detail follows in a logical sequence. It is dense and long, bordering on overstuffed, but nearly every sentence carries a distinct constraint or edge case rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter polling tool with an output schema, the description covers the hard parts an agent needs: pagination/cursor lifecycle, resume-until-empty behavior, ingested vs published semantics, and error recovery. Return values are left to the output schema, which is appropriate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real meaning: it front-loads the filterable dimensions (ticker, date, score, is_10b5_1) and spells out that is_10b5_1=false keeps discretionary trades while true keeps planned ones. That extra semantics lifts it above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb+resource: SEC Form 4 trades by officers, directors and 10% owners. This is a precise, non-tautological statement of what the tool returns. It does not, however, explicitly distinguish itself from siblings like alphai_insider_clusters or alphai_news_search, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Offers clear operational guidance: prefer 'ingested' mode for new filings (with the reason - filings arrive days later), use detail='compact' for polling, expand uids with alphai_article. It never states when to choose a sibling tool instead (e.g. insider_clusters), so there are no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alphai_macroMacro tape (market-wide)ARead-onlyIdempotentInspect
Market-wide central-bank, inflation/jobs, commodity and geopolitical news, ranked novelty-first. Macro stories often have no tickers. Filter categories or min_relevance; dedupe=false keeps reprints, otherwise items carry story_id and distinct-source counts. result contains stories; releases contains scheduled US releases in the same window and the next 24h, with coverage. For 'did the jobs report come out', inspect releases first. Elapsed with empty coverage means stories have not arrived yet: poll later, and check schedule_status for postponements. Use alphai_calendar for future dates beyond 24h. AI-generated context, not investment advice. Use detail='compact' for headlines, sources, times, tickers, scores and story/search metadata without summary, analysis or SEC detail blocks. Expand uids with alphai_article. detail='full' is default; selection, order, cursors and page metadata are identical.
| Name | Required | Description | Default |
|---|---|---|---|
| hours | No | Look-back window in hours; default 24. | |
| limit | No | Items; capped at 20 Free/Basic, 50 Pro. | |
| dedupe | No | Collapse syndicated reprints by story (default true). | |
| detail | No | full (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item. | full |
| categories | No | Subset of the macro categories; default all three. | |
| min_relevance | No | Min AI relevance 1-10; default 4. 7+ keeps release-day events. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | |
| releases | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnly, idempotent, non-destructive, closed-world). The description adds real behavioral context: result vs releases payload split, coverage semantics, that empty coverage means stories have not arrived yet and should be polled, schedule_status for postponements, and that cursors/selection/order are identical across detail modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the identity and ranking rule, then layers operational guidance. It is dense and every clause carries information, but the mid-paragraph run of coverage/polling/schedule caveats is packed tightly enough that readability suffers slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still usefully sketches the result/releases shape and polling semantics for an agent deciding whether to call now or later. Nothing an agent needs to invoke this correctly, or to interpret an empty response, is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds semantics not in the schema: dedupe=false keeps reprints while deduped items carry story_id and distinct-source counts, min_relevance 7+ keeps release-day events, and detail='compact' enumerates exactly what is returned. That is genuine added meaning over the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and scope immediately: market-wide central-bank, inflation/jobs, commodity and geopolitical news, ranked novelty-first. It distinguishes itself from siblings by naming alphai_calendar and alphai_article as adjacent tools and by noting 'Macro stories often have no tickers', which separates it from ticker-scoped feeds.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use routing: use releases for 'did the jobs report come out', use alphai_calendar for dates beyond 24h, use alphai_article to expand uids, and poll later when coverage is empty. It lacks an explicit when-NOT-to-use against nearby siblings like alphai_news_search or alphai_stories, so it stops short of the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alphai_news_searchFilter financial newsARead-onlyIdempotentInspect
Search financial news by text or structured filters. Inspect query_interpretation and search_match: broadened results match only some terms; unresolved mode is a general-feed fallback. Explicit tickers/category are hard filters. query/q cannot use sort='ingested'. Default order without query is newest publication first. In ingested mode, collapse_stories=true returns story roots and source counts, not later member updates. For tickerless macro use categories or alphai_macro. Crypto uses -USD; bare stock/ETF symbols keep their equity meaning. Use detail='compact' for headlines, sources, times, tickers, scores and story/search metadata without summary, analysis or SEC detail blocks. Expand uids with alphai_article. detail='full' is default; selection, order, cursors and page metadata are identical. In ingested mode, prime may be partial/empty and starts at the feed head. Resume until empty success; short pages can continue. Errors are JSON: delta_scan_incomplete means use extra.next_cursor with unchanged filters/sort; delta_candidates_changed means retry the original request.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Alias for query. | |
| item | No | 8-K item code (e.g. '5.02', '8.01', '1.01'): keep only 8-K filings carrying it — any item of the filing. Implies source_type=['sec_form8k']; any other source_type is an error. | |
| sort | No | published (default): newest first, next_cursor pages into older history. ingested: delta polling — rows in the order they became available, ascending; next_cursor is always returned (empty items = caught up, keep the cursor and poll later); time_published is not monotonic within a page. A cursor only works with the sort mode that issued it. With ingested, to_date must not be in the past. | |
| limit | No | Alias for page_size. | |
| query | No | Full-text query over article titles, named entities and summaries (company names, people, topics, tickers), up to 200 characters; how it was read comes back in query_interpretation. | |
| cursor | No | Opaque cursor from a prior next_cursor. | |
| detail | No | full (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item. | full |
| tickers | No | Restrict to news mentioning these tickers (up to 50 symbols; duplicates are ignored). | |
| to_date | No | News on/before this ISO time (UTC if naive). A bare date (2026-06-01) covers that WHOLE day, so from_date=to_date=<day> returns the day — same reading as REST /api/news/. | |
| category | No | Restrict to one news category. | |
| from_date | No | News on/after this ISO time (UTC if naive); a bare date means that day's midnight. | |
| page_size | No | Items/page; capped at 20 Free/Basic, 50 Pro. | |
| source_type | No | Restrict to these ingest sources (OR): gdelt = press coverage, sec_form4 = insider transactions, sec_form8k = 8-K current reports, sec_form6k = foreign issuers' 6-K earnings releases. | |
| min_relevance | No | Minimum AI relevance score, 1-10. | |
| collapse_stories | No | Collapse syndicated reprints to one representative per story and populate story_id/sources_count/sources (default false). |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| items | No | |
| delisted | No | |
| renamed_to | No | |
| next_cursor | No | |
| ticker_note | No | |
| unknown_ticker | No | |
| query_interpretation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description adds substantial operational context beyond them: default ordering semantics, how ingested-mode polling behaves ('prime may be partial/empty', 'resume until empty success'), that cursors are sort-mode-bound, and the meaning/recovery path for specific JSON error codes (delta_scan_incomplete, delta_candidates_changed). This is exactly the delta-information the annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and nearly every sentence carries operative detail, but the body is a single dense paragraph mixing parameter rules, mode semantics, ticker conventions and error handling. Bullets or sentence-level grouping by mode would make the same content far easier to scan without cutting anything.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter, zero-required, high-complexity search tool with an output schema, the description covers the full decision surface: filter semantics, sort modes, cursor lifecycle, detail levels, ticker conventions, fallback behavior, and error recovery. Return-value explanation is legitimately delegated to the output schema, so nothing necessary is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description goes beyond it by explaining cross-parameter interactions and conventions the schema states only locally — explicit tickers/category act as hard filters, crypto must use <SYM>-USD while bare symbols keep equity meaning, and compact/full share identical selection, order, cursors and page metadata. Little is added about individual params, but the interaction semantics are genuinely useful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Search financial news by text or structured filters') and immediately differentiates from siblings by naming alphai_macro (tickerless macro), alphai_article (uid expansion), and the compact/full detail split. An agent can identify the tool's scope and its nearest alternatives without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete routing rules: 'For tickerless macro use categories or alphai_macro', 'Expand uids with alphai_article', 'Use detail=compact for headlines'. It states which parameter combinations are invalid (query/q with sort='ingested') and what to do on error codes. However, it never addresses the ~15 other news-adjacent siblings (alphai_ticker_news, alphai_stories, alphai_search) that an agent must choose between, so the guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alphai_pair_analysisTwo-ticker read-acrossARead-onlyIdempotentInspect
Compare two tickers (e.g. NVDA and AMD). Returns news naming BOTH companies — where the cross-ticker read-across lives (a peer's print resetting the other's setup, a shared supplier/customer) — plus each ticker's own recent news for context. The two recent lists are condensed (headline + scalar signals; the full analysis is on BOTH — fetch alphai_article(uid) for a recent item's full write-up). Pair analysis covers active tickers only: any symbol that isn't a recognized active ticker is listed in unknown_tickers and contributes no rows (delisted-symbol history lives in alphai_ticker_news). Informational and AI-generated — not investment advice. Use detail='compact' for headlines, sources, times, tickers, scores and story/search metadata without summary, analysis or SEC detail blocks. Expand uids with alphai_article. detail='full' is default; selection, order, cursors and page metadata are identical.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows per list (both / each ticker). | |
| detail | No | full (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item. | full |
| ticker_a | Yes | First ticker, e.g. 'NVDA'. | |
| ticker_b | Yes | Second ticker, e.g. 'AMD'. | |
| min_relevance | No | Minimum AI relevance score, 1-10. |
Output Schema
| Name | Required | Description |
|---|---|---|
| both | No | |
| a_recent | No | |
| b_recent | No | |
| ticker_a | Yes | |
| ticker_b | Yes | |
| unknown_tickers | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, yet the description adds real behavior: the two ticker lists are condensed (headline + scalar signals), non-active symbols contribute no rows and surface in unknown_tickers, and the output is AI-generated/informational. It does not describe the paired-list structure or empty-result behavior in more detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, and the pointer to alphai_article for expansion is useful. It is somewhat dense with em-dash asides and repeats the alphai_article expansion instruction twice (parenthetical and again at the end), a minor redundancy against the schema's own detail description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return shapes, and it still covers the non-obvious operational facts: active-ticker-only scope, the unknown_tickers bucket, list condensation, and the expansion path. Nothing an agent needs to invoke this correctly across the 5 parameters is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so 3 is the baseline, but the description adds meaning beyond it: compact omits summary, analysis and SEC detail blocks, and detail selection does not change selection, order, cursors or page metadata. This tells the agent the trade-off of switching detail rather than just the field values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a concrete verb+resource (compare two tickers) and the body states exactly what is returned: news naming BOTH companies as the cross-ticker read-across, plus each ticker's own recent news for context. It is clearly separable from alphai_ticker_news (single-ticker/delisted history) and alphai_article (per-item expansion).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It routes the agent away from this tool for non-active/delisted symbols (unknown_tickers, alphai_ticker_news) and tells it to expand results with alphai_article(uid). It stops short of an explicit when-to-use rule for single-ticker lookups (e.g. 'use alphai_ticker_news instead when you only need one symbol'), so routing for the most likely adjacent case is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alphai_radarNews RadarARead-onlyIdempotentInspect
Rank news activity across the market or your saved AlphAI watchlist. Returns total story counts, model counts versus market-adjusted expectations, news tone and linked supporting headlines. Default: 20 tickers, 24h window, highest activity first. Use sentiment=negative or sort=sentiment_change with order=asc to find deteriorating news tone. Exact tickers intersect the selected scope; no alias expansion. Plans change added delay: Free 60 minutes, Basic 15 minutes, Pro none. Read as_of and freshness before describing recency; historical_preview means a fixed historical dataset, never a live reading. Only tickers with news in the chosen window appear. Missing metrics are null with a reason, not neutral. Scores describe observed news, not price forecasts or confirmed alerts. Follow next_cursor with identical filters and limit to keep the same snapshot; restart without cursor after snapshot_expired. Open a news evidence uid with alphai_article for the full enriched article. event_context adds separate issuer-CIK observations: 7-day 8-K/selected earnings 6-K filings and 30-day open-market insider clusters by latest SEC filing time, with sec_url links. For filings with has_article=true, open news_uid with alphai_article; news_title and news_published build its AlphAI URL. Article availability is frozen at the context cutoff; older snapshots default to false with null title/publication metadata. Read top-level event_context status/as_of and each row's event_context status before using counts. Null means unavailable, not zero; available does not certify complete SEC coverage. Context follows the same snapshot delay and cursors. It does not change news scores or row eligibility.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Ranking metric; stories means total stories; sentiment_change is current minus prior tone. | score |
| limit | No | Rows per page, default 20; not a ticker entitlement. | |
| min_z | No | Optional minimum descriptive activity score. | |
| order | No | Sort direction; null metrics always last. | desc |
| scope | No | Market discovery or the authenticated caller's saved watchlist. | market |
| cursor | No | Opaque next_cursor or previous_cursor, unchanged. | |
| market | No | Market filter within the selected scope. | all |
| window | No | News window ending at as_of. | 24h |
| tickers | No | Optional comma-separated exact symbols, e.g. AAPL,MSFT,BTC-USD; no tier ticker cap. | |
| sentiment | No | Positive >0.15, negative <−0.15, mixed within those bounds. Null matches only all. | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | |
| total | Yes | |
| access | Yes | |
| offset | Yes | |
| window | Yes | |
| results | Yes | |
| freshness | Yes | |
| limitations | Yes | |
| next_cursor | Yes | |
| snapshot_id | Yes | |
| event_context | No | |
| point_in_time | Yes | |
| research_only | Yes | |
| previous_cursor | Yes | |
| watchlist_coverage | Yes | |
| methodology_version | Yes | |
| preview_reference_at | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds substantial non-obvious behavior: plan-based delay (Free 60m, Basic 15m, Pro none), as_of/freshness caveats, historical_preview semantics, null-means-unavailable reasoning, exact-ticker intersection without alias expansion, and snapshot cursor requirements. This goes far beyond the annotations and leaves no hidden behavior unaddressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but every sentence contributes essential operational detail for a complex tool. It is front-loaded with the core ranking function and return contents before diving into caveats. Some clauses are dense and could be broken up (e.g., the delay sentence and cursor sentence), but there is no filler or redundancy, so the length is justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity—10 parameters, cursor pagination, plan-based delays, event_context sub-observations, and snapshot semantics—the description is remarkably complete. An output schema exists, so return values need not be re-explained. The description covers scoping, ordering, filtering, pagination, freshness, null semantics, article linking, and event_context status handling, leaving no critical operational aspect unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the schema already documents every parameter including defaults, enums, and ranges. The description adds meaningful semantics beyond the schema: exact tickers intersect the selected scope with no alias expansion, cursor must be reused with identical filters to keep the same snapshot, and the sentiment parameter is tied to a concrete use case for finding deteriorating tone. This raises it above baseline without duplicating schema details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Rank news activity across the market or your saved AlphAI watchlist.' It lists concrete returned data (story counts, model counts versus market-adjusted expectations, tone, linked headlines), which makes the tool's function unmistakable. The 'Radar' title is generic, but the description fully disambiguates the tool from a plain search or article fetcher.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete operational guidance: use sentiment=negative or sort=sentiment_change with order=asc to find deteriorating tone, and open a news evidence uid with alphai_article for full articles. It also explains defaults and cursor restriction rules. However, it does not explicitly contrast this tool with siblings like alphai_news_search or alphai_ticker_news, so the 'when not to use' side is only partially covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alphai_storiesStories (top or latest)ARead-onlyIdempotentInspect
Stories: market events that two or more publishers reported, each summarised by AlphAI from its articles. list=top (default) ranks the last 48 hours — importance (the feed's 1-10 scale, 7 and above) plus a coverage bonus, minus one point per 12 hours since the facts last changed, one slot per ticker — use it for 'what matters today'. list=latest pages every story newest-first by its latest article; follow next_cursor. Each card carries story_id, the summary's title and lead, importance, publishers, materials (articles) and summary_state (published / stale = new articles since the summary / preparing = no summary yet, texts are the lead article's). Call alphai_story with a story_id for the full summary — key facts with their sources, why it matters, the per-ticker read, open questions — and the articles behind it. Compared with alphai_trending, which ranks single articles, this ranks events and only those with independent coverage; most feed items are carried by one outlet and never become a story. Summaries are AI-generated financial information for research, not investment advice.
| Name | Required | Description | Default |
|---|---|---|---|
| list | No | top = ranked last 48 hours (default); latest = newest-first, paginated. | top |
| limit | No | Stories per page, 1-50; default 10. | |
| cursor | No | Opaque next_cursor from a latest page, unchanged. |
Output Schema
| Name | Required | Description |
|---|---|---|
| list | Yes | |
| as_of | No | |
| results | Yes | |
| next_cursor | No | |
| research_only | No | |
| ranking_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description adds substantial behavioral context beyond them: the exact ranking formula (importance 1-10, coverage bonus, -1 per 12h stale, one slot per ticker), the summary_state lifecycle (published/stale/preparing), pagination via next_cursor, and the card fields returned. This is well past the lower bar annotations set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource definition, then mode behavior, card fields, routing, and sibling comparison. Dense but essentially every clause carries actionable information; the only minor cost is that it reads as one long block rather than discrete scannable statements.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-param read tool with full annotations and an output schema, the description covers scope, mode semantics, ranking behavior, lifecycle states of summary_state, pagination, routing to the detail tool, and a research-not-advice disclaimer. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it explains what 'top' actually computes (48h window, importance scoring, coverage bonus, decay) and that 'latest' should be followed via next_cursor. It goes beyond the terse enum default notes without fully specifying cursor semantics beyond 'follow next_cursor'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource with a precise definition ('market events that two or more publishers reported, each summarised by AlphAI from its articles') and distinguishes itself from siblings by naming alphai_trending (single-article ranking) and pointing to alphai_story for the full read. An agent can tell exactly what this returns without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance for both modes ('list=top ... use it for what matters today'; 'list=latest pages every story newest-first'), names the alternative (alphai_trending) with the condition that separates them (events with independent coverage vs. single articles), and routes to alphai_story by story_id for detail. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alphai_storyStory summary and sourcesARead-onlyIdempotentInspect
One story by story_id — the value every news item carries, or an id from alphai_stories. Returns the summary AlphAI wrote from the articles (title, lead, why_it_matters, up to six key_facts each with the publisher and the source_uid of the article it was read from, ticker_takes with a direction per ticker, uncertainties the sources leave open), the story's importance and publisher count, and the first page of its articles (materials: uid, publisher, time, URL, relevance) — open any of them with alphai_article. status tells you what the id is: found (a story), merged (folded into another story; call again with redirect_to), not_a_story (one publisher carried this event, so there is no summary; article names the row for alphai_article — the normal answer for most feed items). summary_state published / stale (new_materials articles joined since the summary; a rewrite is queued) / preparing (no summary yet; texts are the lead article's). Every figure in the summary appears in a source article; it is AI-generated financial information for research, not investment advice. Article bodies are never returned.
| Name | Required | Description | Default |
|---|---|---|---|
| story_id | Yes | story_id of a news item or story. | |
| materials_limit | No | Articles to include, oldest first; default 20, 0 for none. |
Output Schema
| Name | Required | Description |
|---|---|---|
| story | No | |
| status | Yes | |
| article | No | |
| materials | No | |
| redirect_to | No | |
| research_only | No | |
| materials_next_cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint/idempotent already given by annotations, the description adds rich behavioral context beyond them: the status enum semantics (found/merged/not_a_story), summary_state lifecycle (published/stale/preparing), the 'Article bodies are never returned' limitation, and an AI-generated research disclaimer. This is substantially more than the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and every clause carries information, but it is delivered as one very dense paragraph with stacked parentheticals, which is heavier than ideal for scanning. No truly wasted sentences, just tight structure could improve.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists and a rich status/summary_state model, the description covers the id-source, all status branches, lifecycle states, and the no-body limitation — nothing an agent needs to invoke and interpret results correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning by explaining where story_id comes from ('the value every news item carries, or an id from alphai_stories'), which the schema's generic 'story_id of a news item or story' does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — returning one story by story_id, including the summary, importance, and article list. It distinguishes itself from siblings by naming alphai_stories (source of ids) and alphai_article (for article bodies), so an agent can tell them apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use and when-not: 'not_a_story' is the normal answer for most feed items (route to alphai_article), 'merged' means call again with redirect_to, materials are opened with alphai_article. Alternatives and the conditions selecting them are all named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alphai_ticker_newsTicker news feedARead-onlyIdempotentInspect
News for one ticker, including SEC Form 4 trades by default. Use include_insider=false to omit those trades. Published mode serves older history; ingested mode polls new arrivals. collapse_stories=true selects story roots, not later member updates. Delisted symbols retain history with delisted/renamed_to metadata; unknown_ticker means unrecognized. Rename aliases and issuer share classes are included. Coins use -USD; ticker_note flags stock/ETF collisions. Use detail='compact' for headlines, sources, times, tickers, scores and story/search metadata without summary, analysis or SEC detail blocks. Expand uids with alphai_article. detail='full' is default; selection, order, cursors and page metadata are identical. In ingested mode, prime may be partial/empty and starts at the feed head. Resume until empty success; short pages can continue. Errors are JSON: delta_scan_incomplete means use extra.next_cursor with unchanged filters/sort; delta_candidates_changed means retry the original request.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | published (default): newest first. ingested: delta polling — only rows added since your cursor, ascending; next_cursor is always returned (empty items = caught up, keep the cursor and poll later). A cursor only works with the sort mode that issued it. | |
| limit | No | Alias for page_size. | |
| cursor | No | Opaque cursor from a prior next_cursor. | |
| detail | No | full (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item. | full |
| ticker | Yes | Ticker symbol, e.g. 'AAPL'. | |
| page_size | No | Items/page; capped at 20 Free/Basic, 50 Pro. | |
| min_relevance | No | Minimum AI relevance score, 1-10. | |
| include_insider | No | Include SEC Form 4 insider news; default true. | |
| collapse_stories | No | Collapse syndicated reprints to one representative per story and populate story_id/sources_count/sources (default false). |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| items | No | |
| delisted | No | |
| renamed_to | No | |
| next_cursor | No | |
| ticker_note | No | |
| unknown_ticker | No | |
| query_interpretation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish read-only, idempotent, non-destructive behavior, and the description adds rich operational context beyond them: default SEC Form 4 inclusion, published/ingested mode semantics, collapse_stories behavior, delisted/unknown ticker handling, coin symbol format, compact detail behavior, ingested-mode partial priming, resume logic, and specific error responses.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and remains dense but generally purposeful across a complex tool. It is a long paragraph rather than structured bullets, and some parameter details overlap the schema, but most sentences carry operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, 9 parameters, mode-specific behavior, error handling, and the presence of an output schema, the description is complete enough for correct invocation. It covers the major edge cases and operational flows an agent needs without needing to explain return value structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description still adds useful meaning beyond the schema: include_insider=false omits Form 4 trades, collapse_stories selects story roots rather than later member updates, detail='compact' returns headlines/sources/times without summaries/analysis, and sort modes imply different cursor behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: news for one ticker, including SEC Form 4 trades by default. It distinguishes this ticker-feed from broader news tools by naming the single-ticker scope and specific content types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear operational guidance: use include_insider=false to omit trades, published vs ingested modes for different history/polling needs, detail='compact' for lighter payloads, and alphai_article for expanding uids. It does not explicitly compare against sibling tools like alphai_news_search or alphai_insider_news, so it misses full when/when-not alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alphai_tickersList supported tickersARead-onlyIdempotentInspect
List supported tickers (US stocks/ETFs, crypto, and foreign listings). Optionally filter by query (prefix on ticker, substring on name, or the company's brand name where that differs from its registered one — q='spacex' finds SPCX, registered as SPACE EXPLORATION TECHNOLOGIES CORP) or by sector. currency is the trading currency (USD for US listings and crypto pairs, the local currency for foreign ones); country is the ISO alpha-2 country of domicile and is null for crypto, which has no jurisdiction of incorporation. Also answers 'when does X next report': next_report_date is the company-confirmed date of the next earnings report, in America/New_York. It is NEVER an estimate — null means AlphAI holds no confirmed date, which is not the same as the company not reporting. A confirmed date typically surfaces about five weeks ahead, so a null this far out is normal. When the report lands, alphai_earnings(ticker) returns AlphAI's read of it.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Ticker-prefix matches first, then company-name substring matches. | |
| limit | No | Max rows to return. | |
| offset | No | Pagination offset. | |
| sector | No | Filter by sector (case-insensitive). |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | No | |
| total | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial behavior beyond that: the q matching semantics (ticker-prefix first, then name substring, then brand-name matching with the spacex→SPCX example), currency and country field semantics (null for crypto), and critically the next_report_date null semantics — that null means 'no confirmed date' rather than 'no report', with the ~5-week lead-time context. This prevents a real mis-invocation failure mode where an agent treats null as a fact. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence earns its place — there is no filler. It is logically structured, moving from purpose to filters to field semantics to the special next_report_date capability. It is on the verbose side for a listing tool, but the subtle semantics it must convey justify the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values need no explanation. The description covers all non-obvious semantics that would cause an agent to mis-invoke: brand-name q matching, crypto country nulls, and the next_report_date null meaning with its timing context. Nothing an agent needs in order to use the filters or interpret results correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds genuine value for q by explaining brand-name matching (where a company's brand differs from its registered name, with a concrete example), which goes well beyond the schema's 'ticker-prefix matches first, then company-name substring'. limit/offset/sector are already fully covered by the schema, so the description need not repeat them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List supported tickers') and defines the scope precisely (US stocks/ETFs, crypto, foreign listings). The purpose is unmistakable and clearly distinct from the sibling tools, which are all about alerts, news, earnings, radar, and watchlists rather than the ticker catalog itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives one concrete routing hint — 'When the report lands, alphai_earnings(ticker) returns AlphAI's read of it' — which tells the agent where to go after using this tool. However, it never states when to use this tool versus the many siblings, nor any exclusion conditions. The usage is implied by its role as the ticker catalog rather than made explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alphai_trendingTrending news (48h)ARead-onlyIdempotentInspect
Top news from the last 48h ranked by AI-assigned relevance decayed by article age (fresh stories lead; at most two stories per ticker, and market-wide macro stories — Fed/CPI, commodities, geopolitics, carrying no tickers — capped per category). Use this when the user asks 'what's moving' / 'what's the big story'. Lower min_relevance to surface weaker movers. By default each item carries the full AI analysis inline — no follow-up alphai_article call needed for depth. Syndicated reprints of one story are collapsed to a single representative by default (dedupe=false to keep all), and each item reports story_id (the story root's uid — a stable story key, the same value the other news tools report for that story), sources_count and sources. Most stories run at a single outlet, so sources_count is usually 1; a value above 1 is the signal, not the number itself. Use detail='compact' for headlines, sources, times, tickers, scores and story/search metadata without summary, analysis or SEC detail blocks. Expand uids with alphai_article. detail='full' is default; selection, order, cursors and page metadata are identical.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Stories; capped at 20 Free/Basic, 50 Pro. | |
| dedupe | No | Collapse syndicated reprints by story (default true). | |
| detail | No | full (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item. | full |
| min_relevance | No | Min AI relevance 1-10; default 8. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: it discloses the default dedupe behavior and how to disable it, that full AI analysis is inlined so no follow-up call is needed, that selection/order/cursors are identical across detail modes, and the interpretive semantics of sources_count ('usually 1; a value above 1 is the signal'). This is exactly the kind of behavioral context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and trigger are front-loaded in the first fraction of the text, and most sentences carry operative detail. The remainder is a single dense paragraph with heavy parentheticals (macro-category capping, sources_count caveat) that is harder to scan than it needs to be, but little is pure filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return shape needn't be explained, yet the description still clarifies key fields (story_id as a stable cross-tool key, sources_count semantics). Across detail modes, dedupe, relevance tuning, and expansion routing, an agent has everything needed to call it correctly in one place.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: min_relevance is framed as a weaker-mover dial, dedupe=false is explained as keeping all reprints, and detail='compact' is enumerated as headlines/sources/times/tickers/scores without summary or analysis. It enriches the schema rather than repeating it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and scope: 'Top news from the last 48h ranked by AI-assigned relevance decayed by article age,' with ranking mechanics and per-ticker/category caps spelled out. It also differentiates itself from siblings by naming alphai_article for expansion and contrasting detail modes, so an agent can place it against alphai_news_search / alphai_story without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit trigger phrasing ('what's moving' / 'what's the big story') and routing guidance (use detail='compact' for polling, expand with alphai_article). It also explains the tuning lever ('Lower min_relevance to surface weaker movers'). It stops short of disambiguating against the other news siblings (search, ticker_news, stories), so it is clear context without full exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alphai_watchlist_briefMy watchlist briefARead-onlyIdempotentInspect
Summarize the caller's saved AlphAI watchlist in one read. Returns recent news grouped by story, a separate SEC filings section and the next confirmed earnings dates. Manage tickers at https://alphai.io/account/watchlist. Each story names the watched tickers it affects, carries a short summary and links to the article and its original source. Windows use article publication timestamps, not ingestion time; this is a ranked snapshot, not a changes cursor. Events and filings each contain up to limit items, with explicit truncation flags when more exist. Each section groups the newest 500 matching articles, then ranks by relevance, novelty and recency. Narrow hours or open the ticker feed when a section is truncated. Unknown tickers are listed separately. An empty tickers list means the caller has not saved a watchlist. A missing earnings date means no confirmed date is held, not that the company will not report. Available on every tier.
| Name | Required | Description | Default |
|---|---|---|---|
| hours | No | Publication look-back in hours; default 24. | |
| limit | No | Maximum stories per section (news and filings). |
Output Schema
| Name | Required | Description |
|---|---|---|
| hours | Yes | |
| events | Yes | |
| filings | Yes | |
| tickers | Yes | |
| window_end | Yes | |
| generated_at | Yes | |
| window_start | Yes | |
| unknown_tickers | Yes | |
| events_truncated | No | |
| filings_truncated | No | |
| upcoming_earnings | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and the description adds extensive behavioral detail: publication timestamps vs ingestion time, truncation flags, ranked snapshot semantics, unknown ticker handling, and missing-date semantics. This goes well beyond the structured annotations and gives the agent a precise mental model. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, but it is long and includes non-essential details such as the account management URL and 'Available on every tier.' While most sentences add behavioral value, the extra operational noise slightly dilutes conciseness, so it earns a 3 rather than higher.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, read-only tool with a full output schema and rich annotations, the description covers all practical edge cases: truncation, empty watchlist, missing earnings dates, unknown tickers, and ranking behavior. The only minor omission is explicit pagination details, but the output schema and truncation flags cover that, so the description is complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds extra semantics by clarifying that 'Windows use article publication timestamps, not ingestion time' (defines hours) and that 'Events and filings each contain up to limit items' (defines scope of limit). This adds meaning beyond the schema, so a 4 is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Summarize the caller's saved AlphAI watchlist in one read.' It further clarifies outputs: recent news grouped by story, SEC filings section, and earnings dates, which distinguishes it from sibling tools like alphai_ticker_news or alphai_news_search. The 'caller's saved watchlist' scoping makes the tool's unique role clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context on when to use this tool: as a one-read summary of the saved watchlist, and explicitly advises 'Narrow hours or open the ticker feed when a section is truncated.' It also clarifies that it is a ranked snapshot, not a changes cursor, which implies it isn't for change detection. It does not explicitly name alternative tools or state when not to use it, so not a perfect 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetchFetch article (ChatGPT connector)ARead-onlyIdempotentInspect
ChatGPT connector contract: fetch one article by the id returned from search. Returns the enriched digest (summary, per-ticker analysis, category, relevance) — not the full article body — plus the canonical alphai.io URL for citation. When the article has a published SEC earnings read, text also includes its reported metrics with year-over-year and sequential comparisons, segments, guidance, concerns and missing items. Raises not_found for an unknown id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Article id from a search result. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| text | Yes | |
| title | Yes | |
| metadata | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description correctly adds non-obvious behavior: it returns a digest rather than the full body, includes SEC earnings data conditionally, and raises not_found for unknown ids. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense and front-loaded with the core action, followed by return behavior, conditional content, and error handling. The opening phrase 'ChatGPT connector contract' is slightly redundant with the title, but every other clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter fetch tool with rich annotations and an output schema, the description covers the input source, the exact return shape, a conditional enrichment behavior, and error semantics. An agent has enough context to invoke the tool correctly without needing to open sibling schemas.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for the single id parameter, and the description reinforces the same guidance ('id returned from search') without adding new syntax or format details. Baseline 3 is appropriate because the schema already carries the parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'fetch one article by the id returned from search.' It clearly differentiates itself by saying it returns the enriched digest and 'not the full article body,' which separates it from sibling tools like alphai_article and search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context: use after search, with an id returned from search, when you want the enriched digest rather than the full article body. It does not explicitly name an alternative tool for retrieving the full body, so it stops short of full when-to-use vs. alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearch financial news (ChatGPT connector)ARead-onlyIdempotentInspect
ChatGPT connector contract: search AlphAI's AI-enriched financial news with a natural-language query. Ticker symbols (NVDA, BTC-USD), company names (nvidia, tesla) and topic words (insider, earnings, ipo, crypto…) in the query are resolved to structured filters; a query that names nothing known returns the freshest high-relevance market stories. Each result carries an id for the fetch tool. For precise filtered queries prefer alphai_news_search.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural-language search query (up to 300 characters). |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, covering the safety profile. The description adds behavioral detail beyond annotations: it explains entity resolution (tickers, companies, topics), the fallback to freshest stories when nothing is recognized, and that each result carries an id for the fetch tool. This provides useful context without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core purpose, and includes necessary usage guidance, behavioral notes, and a pointer to an alternative. No fluff or redundancy. It is concise while covering essential information, though it could arguably be slightly tightened without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter), existing output schema, and annotations that cover safety, the description is nearly complete. It covers query interpretation, fallback behavior, and the link to the fetch tool, and it names an alternative. The only minor gap is that it doesn't explicitly describe the output format, but the output schema handles that, so the description is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100% (the 'query' parameter has a basic description). The tool description adds semantic meaning by explaining that the query is natural-language and how it is interpreted (resolved to structured filters, with a fallback). This goes beyond the schema's simple 'Natural-language search query' description, giving the agent a richer understanding of the parameter's role.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'search AlphAI's AI-enriched financial news' with a natural-language query. It explicitly distinguishes itself from the sibling alphai_news_search by saying 'For precise filtered queries prefer alphai_news_search.' This makes the tool's scope and differentiation clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: it explains that the query is natural-language and that known entities are resolved to filters, while a query with no known names returns freshest high-relevance stories. It also explicitly names the alternative (alphai_news_search) and the condition for preferring it ('precise filtered queries'). This covers when and when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
alphai_insider_news1 field changed- changed
Input schema / properties / sort / descriptionPrevious value: -"published (default): newest first. ingested: delta polling — only Form 4 events added since your cursor, ascending; next_cursor is always returned (empty items = caught up, keep the cursor and poll later). Prefer this for watching insider activity: a filing arrives days after its transaction date, so it can land below the newest page of a publish-ordered feed. A cursor only works with the sort mode that issued it."New value: +"published (default): newest first. ingested: delta polling — only Form 4 events added since your cursor, ascending; next_cursor is always returned (empty items = caught up, keep the cursor and poll later). Prefer this for watching insider activity: a filing arrives days after its transaction date, so it can land below the newest page of a publish-ordered feed. A cursor only works with the sort mode that issued it. With ingested, to_date must not be in the past."
- Changed
alphai_news_search1 field changed- changed
Input schema / properties / sort / descriptionPrevious value: -"published (default): newest first, next_cursor pages into older history. ingested: delta polling — rows in the order they became available, ascending; next_cursor is always returned (empty items = caught up, keep the cursor and poll later); time_published is not monotonic within a page. A cursor only works with the sort mode that issued it."New value: +"published (default): newest first, next_cursor pages into older history. ingested: delta polling — rows in the order they became available, ascending; next_cursor is always returned (empty items = caught up, keep the cursor and poll later); time_published is not monotonic within a page. A cursor only works with the sort mode that issued it. With ingested, to_date must not be in the past."
7 tool updates
- Changed
alphai_actionable_now5 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "full", + "description": "full (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item.", + "enum": [ + "full", + "compact" + ], + "type": "string" +} - added
Output schema / properties / result / items / anyOfAdded value: +[ + { + "properties": { + "analysis": { + "anyOf": [ + { + "properties": { + "actionability": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "alternative_perspectives": { + "anyOf": [ + { + "properties": { + "contrarian_view": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "overlooked_factors": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "background_context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "indirect_market_effects": { + "anyOf": [ + { + "properties": { + "global_market_relevance": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "regional_market_impact": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sector_implications": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "information_novelty": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "key_entities": { + "items": { + "properties": { + "description": { + "default": "", + "type": "string" + }, + "entity_type": { + "default": "", + "type": "string" + }, + "name": { + "default": "", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "market_relevance_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "market_sentiment_alignment": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ticker_analysis": { + "items": { + "properties": { + "confidence": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "price_impact_prediction": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "reasoning": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "relevance_context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sentiment": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker" + ], + "type": "object" + }, + "type": "array" + }, + "timing_relevance": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "banner_image": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "category": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "earnings": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "filing": { + "anyOf": [ + { + "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", + "properties": { + "accession_number": { + "type": "string" + }, + "event_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "exhibit_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "primary_item": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "items", + "accession_number", + "filed_at" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "insider": { + "anyOf": [ + { + "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", + "properties": { + "avg_price_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "insider_name": { + "type": "string" + }, + "insider_title": { + "type": "string" + }, + "is_10b5_1": { + "type": "boolean" + }, + "is_director": { + "type": "boolean" + }, + "is_officer": { + "type": "boolean" + }, + "is_ten_percent_owner": { + "type": "boolean" + }, + "late_filing": { + "type": "boolean" + }, + "shares": { + "type": "string" + }, + "side": { + "type": "string" + }, + "total_value_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "transaction_code": { + "type": "string" + }, + "transaction_date": { + "type": "string" + } + }, + "required": [ + "side", + "transaction_code", + "shares", + "is_10b5_1", + "insider_name", + "insider_title", + "is_officer", + "is_director", + "is_ten_percent_owner", + "transaction_date", + "filed_at", + "late_filing" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ownership_form": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "read_time_minutes": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "relevance_score": { + "type": "integer" + }, + "search_match": { + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "source": { + "type": "string" + }, + "source_domain": { + "type": "string" + }, + "source_type": { + "default": "", + "type": "string" + }, + "sources": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "sources_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "story_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "summary": { + "type": "string" + }, + "tickers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "time_published": { + "type": "string" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "uid", + "title", + "url", + "source", + "source_domain", + "summary", + "category", + "relevance_score", + "time_published", + "created_at" + ], + "type": "object" + }, + { + "description": "Opt-in feed projection. Expand ``uid`` with ``alphai_article``.\n\nOnly the two scalar analysis signals survive, at the top level. Summary,\nanalysis prose, images and SEC detail blocks are absent, not truncated.\nSearch evidence and Form 4 ownership remain so triage keeps its meaning.", + "properties": { + "actionability": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "category": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "information_novelty": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "ownership_form": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "relevance_score": { + "type": "integer" + }, + "search_match": { + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "source": { + "type": "string" + }, + "source_domain": { + "type": "string" + }, + "source_type": { + "type": "string" + }, + "sources": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "sources_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "story_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tickers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "time_published": { + "type": "string" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "uid", + "title", + "url", + "source", + "source_domain", + "source_type", + "time_published", + "created_at", + "tickers", + "category", + "relevance_score", + "actionability", + "information_novelty", + "story_id", + "sources_count", + "sources", + "ownership_form", + "search_match" + ], + "type": "object" + } +] - removed
Output schema / properties / result / items / propertiesRemoved value: -{ - "analysis": { - "anyOf": [ - { - "properties": { - "actionability": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "alternative_perspectives": { - "anyOf": [ - { - "properties": { - "contrarian_view": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "overlooked_factors": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "background_context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "indirect_market_effects": { - "anyOf": [ - { - "properties": { - "global_market_relevance": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "regional_market_impact": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "sector_implications": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "information_novelty": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "key_entities": { - "items": { - "properties": { - "description": { - "default": "", - "type": "string" - }, - "entity_type": { - "default": "", - "type": "string" - }, - "name": { - "default": "", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "market_relevance_summary": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "market_sentiment_alignment": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "ticker_analysis": { - "items": { - "properties": { - "confidence": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "price_impact_prediction": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "reasoning": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "relevance_context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "sentiment": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "ticker": { - "type": "string" - } - }, - "required": [ - "ticker" - ], - "type": "object" - }, - "type": "array" - }, - "timing_relevance": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "banner_image": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "category": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "earnings": { - "anyOf": [ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "filing": { - "anyOf": [ - { - "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", - "properties": { - "accession_number": { - "type": "string" - }, - "event_date": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "exhibit_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "filed_at": { - "type": "string" - }, - "items": { - "items": { - "type": "string" - }, - "type": "array" - }, - "primary_item": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "items", - "accession_number", - "filed_at" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "insider": { - "anyOf": [ - { - "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", - "properties": { - "avg_price_usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "filed_at": { - "type": "string" - }, - "insider_name": { - "type": "string" - }, - "insider_title": { - "type": "string" - }, - "is_10b5_1": { - "type": "boolean" - }, - "is_director": { - "type": "boolean" - }, - "is_officer": { - "type": "boolean" - }, - "is_ten_percent_owner": { - "type": "boolean" - }, - "late_filing": { - "type": "boolean" - }, - "shares": { - "type": "string" - }, - "side": { - "type": "string" - }, - "total_value_usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "transaction_code": { - "type": "string" - }, - "transaction_date": { - "type": "string" - } - }, - "required": [ - "side", - "transaction_code", - "shares", - "is_10b5_1", - "insider_name", - "insider_title", - "is_officer", - "is_director", - "is_ten_percent_owner", - "transaction_date", - "filed_at", - "late_filing" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ownership_form": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "read_time_minutes": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "relevance_score": { - "type": "integer" - }, - "search_match": { - "anyOf": [ - { - "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", - "properties": { - "context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "score": { - "type": "number" - }, - "terms_matched": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "score" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "source": { - "type": "string" - }, - "source_domain": { - "type": "string" - }, - "source_type": { - "default": "", - "type": "string" - }, - "sources": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - }, - "sources_count": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "story_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "summary": { - "type": "string" - }, - "tickers": { - "items": { - "type": "string" - }, - "type": "array" - }, - "time_published": { - "type": "string" - }, - "title": { - "type": "string" - }, - "uid": { - "type": "string" - }, - "url": { - "type": "string" - } -} - removed
Output schema / properties / result / items / requiredRemoved value: -[ - "uid", - "title", - "url", - "source", - "source_domain", - "summary", - "category", - "relevance_score", - "time_published", - "created_at" -] - removed
Output schema / properties / result / items / typeRemoved value: -"object"
- Changed
alphai_insider_news5 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "full", + "description": "full (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item.", + "enum": [ + "full", + "compact" + ], + "type": "string" +} - added
Output schema / properties / items / items / anyOfAdded value: +[ + { + "properties": { + "analysis": { + "anyOf": [ + { + "properties": { + "actionability": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "alternative_perspectives": { + "anyOf": [ + { + "properties": { + "contrarian_view": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "overlooked_factors": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "background_context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "indirect_market_effects": { + "anyOf": [ + { + "properties": { + "global_market_relevance": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "regional_market_impact": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sector_implications": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "information_novelty": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "key_entities": { + "items": { + "properties": { + "description": { + "default": "", + "type": "string" + }, + "entity_type": { + "default": "", + "type": "string" + }, + "name": { + "default": "", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "market_relevance_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "market_sentiment_alignment": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ticker_analysis": { + "items": { + "properties": { + "confidence": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "price_impact_prediction": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "reasoning": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "relevance_context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sentiment": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker" + ], + "type": "object" + }, + "type": "array" + }, + "timing_relevance": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "banner_image": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "category": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "earnings": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "filing": { + "anyOf": [ + { + "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", + "properties": { + "accession_number": { + "type": "string" + }, + "event_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "exhibit_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "primary_item": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "items", + "accession_number", + "filed_at" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "insider": { + "anyOf": [ + { + "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", + "properties": { + "avg_price_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "insider_name": { + "type": "string" + }, + "insider_title": { + "type": "string" + }, + "is_10b5_1": { + "type": "boolean" + }, + "is_director": { + "type": "boolean" + }, + "is_officer": { + "type": "boolean" + }, + "is_ten_percent_owner": { + "type": "boolean" + }, + "late_filing": { + "type": "boolean" + }, + "shares": { + "type": "string" + }, + "side": { + "type": "string" + }, + "total_value_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "transaction_code": { + "type": "string" + }, + "transaction_date": { + "type": "string" + } + }, + "required": [ + "side", + "transaction_code", + "shares", + "is_10b5_1", + "insider_name", + "insider_title", + "is_officer", + "is_director", + "is_ten_percent_owner", + "transaction_date", + "filed_at", + "late_filing" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ownership_form": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "read_time_minutes": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "relevance_score": { + "type": "integer" + }, + "search_match": { + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "source": { + "type": "string" + }, + "source_domain": { + "type": "string" + }, + "source_type": { + "default": "", + "type": "string" + }, + "sources": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "sources_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "story_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "summary": { + "type": "string" + }, + "tickers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "time_published": { + "type": "string" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "uid", + "title", + "url", + "source", + "source_domain", + "summary", + "category", + "relevance_score", + "time_published", + "created_at" + ], + "type": "object" + }, + { + "description": "Opt-in feed projection. Expand ``uid`` with ``alphai_article``.\n\nOnly the two scalar analysis signals survive, at the top level. Summary,\nanalysis prose, images and SEC detail blocks are absent, not truncated.\nSearch evidence and Form 4 ownership remain so triage keeps its meaning.", + "properties": { + "actionability": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "category": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "information_novelty": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "ownership_form": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "relevance_score": { + "type": "integer" + }, + "search_match": { + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "source": { + "type": "string" + }, + "source_domain": { + "type": "string" + }, + "source_type": { + "type": "string" + }, + "sources": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "sources_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "story_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tickers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "time_published": { + "type": "string" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "uid", + "title", + "url", + "source", + "source_domain", + "source_type", + "time_published", + "created_at", + "tickers", + "category", + "relevance_score", + "actionability", + "information_novelty", + "story_id", + "sources_count", + "sources", + "ownership_form", + "search_match" + ], + "type": "object" + } +] - removed
Output schema / properties / items / items / propertiesRemoved value: -{ - "analysis": { - "anyOf": [ - { - "properties": { - "actionability": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "alternative_perspectives": { - "anyOf": [ - { - "properties": { - "contrarian_view": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "overlooked_factors": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "background_context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "indirect_market_effects": { - "anyOf": [ - { - "properties": { - "global_market_relevance": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "regional_market_impact": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "sector_implications": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "information_novelty": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "key_entities": { - "items": { - "properties": { - "description": { - "default": "", - "type": "string" - }, - "entity_type": { - "default": "", - "type": "string" - }, - "name": { - "default": "", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "market_relevance_summary": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "market_sentiment_alignment": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "ticker_analysis": { - "items": { - "properties": { - "confidence": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "price_impact_prediction": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "reasoning": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "relevance_context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "sentiment": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "ticker": { - "type": "string" - } - }, - "required": [ - "ticker" - ], - "type": "object" - }, - "type": "array" - }, - "timing_relevance": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "banner_image": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "category": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "earnings": { - "anyOf": [ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "filing": { - "anyOf": [ - { - "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", - "properties": { - "accession_number": { - "type": "string" - }, - "event_date": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "exhibit_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "filed_at": { - "type": "string" - }, - "items": { - "items": { - "type": "string" - }, - "type": "array" - }, - "primary_item": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "items", - "accession_number", - "filed_at" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "insider": { - "anyOf": [ - { - "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", - "properties": { - "avg_price_usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "filed_at": { - "type": "string" - }, - "insider_name": { - "type": "string" - }, - "insider_title": { - "type": "string" - }, - "is_10b5_1": { - "type": "boolean" - }, - "is_director": { - "type": "boolean" - }, - "is_officer": { - "type": "boolean" - }, - "is_ten_percent_owner": { - "type": "boolean" - }, - "late_filing": { - "type": "boolean" - }, - "shares": { - "type": "string" - }, - "side": { - "type": "string" - }, - "total_value_usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "transaction_code": { - "type": "string" - }, - "transaction_date": { - "type": "string" - } - }, - "required": [ - "side", - "transaction_code", - "shares", - "is_10b5_1", - "insider_name", - "insider_title", - "is_officer", - "is_director", - "is_ten_percent_owner", - "transaction_date", - "filed_at", - "late_filing" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ownership_form": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "read_time_minutes": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "relevance_score": { - "type": "integer" - }, - "search_match": { - "anyOf": [ - { - "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", - "properties": { - "context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "score": { - "type": "number" - }, - "terms_matched": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "score" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "source": { - "type": "string" - }, - "source_domain": { - "type": "string" - }, - "source_type": { - "default": "", - "type": "string" - }, - "sources": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - }, - "sources_count": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "story_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "summary": { - "type": "string" - }, - "tickers": { - "items": { - "type": "string" - }, - "type": "array" - }, - "time_published": { - "type": "string" - }, - "title": { - "type": "string" - }, - "uid": { - "type": "string" - }, - "url": { - "type": "string" - } -} - removed
Output schema / properties / items / items / requiredRemoved value: -[ - "uid", - "title", - "url", - "source", - "source_domain", - "summary", - "category", - "relevance_score", - "time_published", - "created_at" -] - removed
Output schema / properties / items / items / typeRemoved value: -"object"
- Changed
alphai_macro5 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "full", + "description": "full (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item.", + "enum": [ + "full", + "compact" + ], + "type": "string" +} - added
Output schema / properties / result / items / anyOfAdded value: +[ + { + "properties": { + "analysis": { + "anyOf": [ + { + "properties": { + "actionability": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "alternative_perspectives": { + "anyOf": [ + { + "properties": { + "contrarian_view": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "overlooked_factors": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "background_context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "indirect_market_effects": { + "anyOf": [ + { + "properties": { + "global_market_relevance": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "regional_market_impact": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sector_implications": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "information_novelty": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "key_entities": { + "items": { + "properties": { + "description": { + "default": "", + "type": "string" + }, + "entity_type": { + "default": "", + "type": "string" + }, + "name": { + "default": "", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "market_relevance_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "market_sentiment_alignment": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ticker_analysis": { + "items": { + "properties": { + "confidence": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "price_impact_prediction": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "reasoning": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "relevance_context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sentiment": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker" + ], + "type": "object" + }, + "type": "array" + }, + "timing_relevance": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "banner_image": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "category": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "earnings": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "filing": { + "anyOf": [ + { + "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", + "properties": { + "accession_number": { + "type": "string" + }, + "event_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "exhibit_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "primary_item": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "items", + "accession_number", + "filed_at" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "insider": { + "anyOf": [ + { + "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", + "properties": { + "avg_price_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "insider_name": { + "type": "string" + }, + "insider_title": { + "type": "string" + }, + "is_10b5_1": { + "type": "boolean" + }, + "is_director": { + "type": "boolean" + }, + "is_officer": { + "type": "boolean" + }, + "is_ten_percent_owner": { + "type": "boolean" + }, + "late_filing": { + "type": "boolean" + }, + "shares": { + "type": "string" + }, + "side": { + "type": "string" + }, + "total_value_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "transaction_code": { + "type": "string" + }, + "transaction_date": { + "type": "string" + } + }, + "required": [ + "side", + "transaction_code", + "shares", + "is_10b5_1", + "insider_name", + "insider_title", + "is_officer", + "is_director", + "is_ten_percent_owner", + "transaction_date", + "filed_at", + "late_filing" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ownership_form": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "read_time_minutes": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "relevance_score": { + "type": "integer" + }, + "search_match": { + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "source": { + "type": "string" + }, + "source_domain": { + "type": "string" + }, + "source_type": { + "default": "", + "type": "string" + }, + "sources": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "sources_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "story_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "summary": { + "type": "string" + }, + "tickers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "time_published": { + "type": "string" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "uid", + "title", + "url", + "source", + "source_domain", + "summary", + "category", + "relevance_score", + "time_published", + "created_at" + ], + "type": "object" + }, + { + "description": "Opt-in feed projection. Expand ``uid`` with ``alphai_article``.\n\nOnly the two scalar analysis signals survive, at the top level. Summary,\nanalysis prose, images and SEC detail blocks are absent, not truncated.\nSearch evidence and Form 4 ownership remain so triage keeps its meaning.", + "properties": { + "actionability": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "category": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "information_novelty": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "ownership_form": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "relevance_score": { + "type": "integer" + }, + "search_match": { + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "source": { + "type": "string" + }, + "source_domain": { + "type": "string" + }, + "source_type": { + "type": "string" + }, + "sources": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "sources_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "story_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tickers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "time_published": { + "type": "string" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "uid", + "title", + "url", + "source", + "source_domain", + "source_type", + "time_published", + "created_at", + "tickers", + "category", + "relevance_score", + "actionability", + "information_novelty", + "story_id", + "sources_count", + "sources", + "ownership_form", + "search_match" + ], + "type": "object" + } +] - removed
Output schema / properties / result / items / propertiesRemoved value: -{ - "analysis": { - "anyOf": [ - { - "properties": { - "actionability": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "alternative_perspectives": { - "anyOf": [ - { - "properties": { - "contrarian_view": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "overlooked_factors": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "background_context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "indirect_market_effects": { - "anyOf": [ - { - "properties": { - "global_market_relevance": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "regional_market_impact": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "sector_implications": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "information_novelty": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "key_entities": { - "items": { - "properties": { - "description": { - "default": "", - "type": "string" - }, - "entity_type": { - "default": "", - "type": "string" - }, - "name": { - "default": "", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "market_relevance_summary": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "market_sentiment_alignment": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "ticker_analysis": { - "items": { - "properties": { - "confidence": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "price_impact_prediction": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "reasoning": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "relevance_context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "sentiment": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "ticker": { - "type": "string" - } - }, - "required": [ - "ticker" - ], - "type": "object" - }, - "type": "array" - }, - "timing_relevance": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "banner_image": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "category": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "earnings": { - "anyOf": [ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "filing": { - "anyOf": [ - { - "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", - "properties": { - "accession_number": { - "type": "string" - }, - "event_date": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "exhibit_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "filed_at": { - "type": "string" - }, - "items": { - "items": { - "type": "string" - }, - "type": "array" - }, - "primary_item": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "items", - "accession_number", - "filed_at" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "insider": { - "anyOf": [ - { - "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", - "properties": { - "avg_price_usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "filed_at": { - "type": "string" - }, - "insider_name": { - "type": "string" - }, - "insider_title": { - "type": "string" - }, - "is_10b5_1": { - "type": "boolean" - }, - "is_director": { - "type": "boolean" - }, - "is_officer": { - "type": "boolean" - }, - "is_ten_percent_owner": { - "type": "boolean" - }, - "late_filing": { - "type": "boolean" - }, - "shares": { - "type": "string" - }, - "side": { - "type": "string" - }, - "total_value_usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "transaction_code": { - "type": "string" - }, - "transaction_date": { - "type": "string" - } - }, - "required": [ - "side", - "transaction_code", - "shares", - "is_10b5_1", - "insider_name", - "insider_title", - "is_officer", - "is_director", - "is_ten_percent_owner", - "transaction_date", - "filed_at", - "late_filing" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ownership_form": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "read_time_minutes": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "relevance_score": { - "type": "integer" - }, - "search_match": { - "anyOf": [ - { - "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", - "properties": { - "context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "score": { - "type": "number" - }, - "terms_matched": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "score" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "source": { - "type": "string" - }, - "source_domain": { - "type": "string" - }, - "source_type": { - "default": "", - "type": "string" - }, - "sources": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - }, - "sources_count": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "story_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "summary": { - "type": "string" - }, - "tickers": { - "items": { - "type": "string" - }, - "type": "array" - }, - "time_published": { - "type": "string" - }, - "title": { - "type": "string" - }, - "uid": { - "type": "string" - }, - "url": { - "type": "string" - } -} - removed
Output schema / properties / result / items / requiredRemoved value: -[ - "uid", - "title", - "url", - "source", - "source_domain", - "summary", - "category", - "relevance_score", - "time_published", - "created_at" -] - removed
Output schema / properties / result / items / typeRemoved value: -"object"
- Changed
alphai_news_search5 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "full", + "description": "full (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item.", + "enum": [ + "full", + "compact" + ], + "type": "string" +} - added
Output schema / properties / items / items / anyOfAdded value: +[ + { + "properties": { + "analysis": { + "anyOf": [ + { + "properties": { + "actionability": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "alternative_perspectives": { + "anyOf": [ + { + "properties": { + "contrarian_view": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "overlooked_factors": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "background_context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "indirect_market_effects": { + "anyOf": [ + { + "properties": { + "global_market_relevance": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "regional_market_impact": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sector_implications": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "information_novelty": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "key_entities": { + "items": { + "properties": { + "description": { + "default": "", + "type": "string" + }, + "entity_type": { + "default": "", + "type": "string" + }, + "name": { + "default": "", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "market_relevance_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "market_sentiment_alignment": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ticker_analysis": { + "items": { + "properties": { + "confidence": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "price_impact_prediction": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "reasoning": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "relevance_context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sentiment": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker" + ], + "type": "object" + }, + "type": "array" + }, + "timing_relevance": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "banner_image": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "category": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "earnings": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "filing": { + "anyOf": [ + { + "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", + "properties": { + "accession_number": { + "type": "string" + }, + "event_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "exhibit_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "primary_item": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "items", + "accession_number", + "filed_at" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "insider": { + "anyOf": [ + { + "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", + "properties": { + "avg_price_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "insider_name": { + "type": "string" + }, + "insider_title": { + "type": "string" + }, + "is_10b5_1": { + "type": "boolean" + }, + "is_director": { + "type": "boolean" + }, + "is_officer": { + "type": "boolean" + }, + "is_ten_percent_owner": { + "type": "boolean" + }, + "late_filing": { + "type": "boolean" + }, + "shares": { + "type": "string" + }, + "side": { + "type": "string" + }, + "total_value_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "transaction_code": { + "type": "string" + }, + "transaction_date": { + "type": "string" + } + }, + "required": [ + "side", + "transaction_code", + "shares", + "is_10b5_1", + "insider_name", + "insider_title", + "is_officer", + "is_director", + "is_ten_percent_owner", + "transaction_date", + "filed_at", + "late_filing" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ownership_form": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "read_time_minutes": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "relevance_score": { + "type": "integer" + }, + "search_match": { + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "source": { + "type": "string" + }, + "source_domain": { + "type": "string" + }, + "source_type": { + "default": "", + "type": "string" + }, + "sources": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "sources_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "story_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "summary": { + "type": "string" + }, + "tickers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "time_published": { + "type": "string" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "uid", + "title", + "url", + "source", + "source_domain", + "summary", + "category", + "relevance_score", + "time_published", + "created_at" + ], + "type": "object" + }, + { + "description": "Opt-in feed projection. Expand ``uid`` with ``alphai_article``.\n\nOnly the two scalar analysis signals survive, at the top level. Summary,\nanalysis prose, images and SEC detail blocks are absent, not truncated.\nSearch evidence and Form 4 ownership remain so triage keeps its meaning.", + "properties": { + "actionability": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "category": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "information_novelty": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "ownership_form": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "relevance_score": { + "type": "integer" + }, + "search_match": { + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "source": { + "type": "string" + }, + "source_domain": { + "type": "string" + }, + "source_type": { + "type": "string" + }, + "sources": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "sources_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "story_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tickers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "time_published": { + "type": "string" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "uid", + "title", + "url", + "source", + "source_domain", + "source_type", + "time_published", + "created_at", + "tickers", + "category", + "relevance_score", + "actionability", + "information_novelty", + "story_id", + "sources_count", + "sources", + "ownership_form", + "search_match" + ], + "type": "object" + } +] - removed
Output schema / properties / items / items / propertiesRemoved value: -{ - "analysis": { - "anyOf": [ - { - "properties": { - "actionability": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "alternative_perspectives": { - "anyOf": [ - { - "properties": { - "contrarian_view": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "overlooked_factors": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "background_context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "indirect_market_effects": { - "anyOf": [ - { - "properties": { - "global_market_relevance": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "regional_market_impact": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "sector_implications": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "information_novelty": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "key_entities": { - "items": { - "properties": { - "description": { - "default": "", - "type": "string" - }, - "entity_type": { - "default": "", - "type": "string" - }, - "name": { - "default": "", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "market_relevance_summary": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "market_sentiment_alignment": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "ticker_analysis": { - "items": { - "properties": { - "confidence": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "price_impact_prediction": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "reasoning": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "relevance_context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "sentiment": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "ticker": { - "type": "string" - } - }, - "required": [ - "ticker" - ], - "type": "object" - }, - "type": "array" - }, - "timing_relevance": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "banner_image": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "category": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "earnings": { - "anyOf": [ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "filing": { - "anyOf": [ - { - "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", - "properties": { - "accession_number": { - "type": "string" - }, - "event_date": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "exhibit_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "filed_at": { - "type": "string" - }, - "items": { - "items": { - "type": "string" - }, - "type": "array" - }, - "primary_item": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "items", - "accession_number", - "filed_at" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "insider": { - "anyOf": [ - { - "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", - "properties": { - "avg_price_usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "filed_at": { - "type": "string" - }, - "insider_name": { - "type": "string" - }, - "insider_title": { - "type": "string" - }, - "is_10b5_1": { - "type": "boolean" - }, - "is_director": { - "type": "boolean" - }, - "is_officer": { - "type": "boolean" - }, - "is_ten_percent_owner": { - "type": "boolean" - }, - "late_filing": { - "type": "boolean" - }, - "shares": { - "type": "string" - }, - "side": { - "type": "string" - }, - "total_value_usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "transaction_code": { - "type": "string" - }, - "transaction_date": { - "type": "string" - } - }, - "required": [ - "side", - "transaction_code", - "shares", - "is_10b5_1", - "insider_name", - "insider_title", - "is_officer", - "is_director", - "is_ten_percent_owner", - "transaction_date", - "filed_at", - "late_filing" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ownership_form": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "read_time_minutes": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "relevance_score": { - "type": "integer" - }, - "search_match": { - "anyOf": [ - { - "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", - "properties": { - "context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "score": { - "type": "number" - }, - "terms_matched": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "score" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "source": { - "type": "string" - }, - "source_domain": { - "type": "string" - }, - "source_type": { - "default": "", - "type": "string" - }, - "sources": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - }, - "sources_count": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "story_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "summary": { - "type": "string" - }, - "tickers": { - "items": { - "type": "string" - }, - "type": "array" - }, - "time_published": { - "type": "string" - }, - "title": { - "type": "string" - }, - "uid": { - "type": "string" - }, - "url": { - "type": "string" - } -} - removed
Output schema / properties / items / items / requiredRemoved value: -[ - "uid", - "title", - "url", - "source", - "source_domain", - "summary", - "category", - "relevance_score", - "time_published", - "created_at" -] - removed
Output schema / properties / items / items / typeRemoved value: -"object"
- Changed
alphai_pair_analysis13 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "full", + "description": "full (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item.", + "enum": [ + "full", + "compact" + ], + "type": "string" +} - added
Output schema / properties / a_recent / items / anyOfAdded value: +[ + { + "properties": { + "analysis": { + "anyOf": [ + { + "properties": { + "actionability": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "alternative_perspectives": { + "anyOf": [ + { + "properties": { + "contrarian_view": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "overlooked_factors": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "background_context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "indirect_market_effects": { + "anyOf": [ + { + "properties": { + "global_market_relevance": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "regional_market_impact": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sector_implications": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "information_novelty": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "key_entities": { + "items": { + "properties": { + "description": { + "default": "", + "type": "string" + }, + "entity_type": { + "default": "", + "type": "string" + }, + "name": { + "default": "", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "market_relevance_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "market_sentiment_alignment": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ticker_analysis": { + "items": { + "properties": { + "confidence": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "price_impact_prediction": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "reasoning": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "relevance_context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sentiment": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker" + ], + "type": "object" + }, + "type": "array" + }, + "timing_relevance": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "banner_image": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "category": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "earnings": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "filing": { + "anyOf": [ + { + "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", + "properties": { + "accession_number": { + "type": "string" + }, + "event_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "exhibit_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "primary_item": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "items", + "accession_number", + "filed_at" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "insider": { + "anyOf": [ + { + "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", + "properties": { + "avg_price_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "insider_name": { + "type": "string" + }, + "insider_title": { + "type": "string" + }, + "is_10b5_1": { + "type": "boolean" + }, + "is_director": { + "type": "boolean" + }, + "is_officer": { + "type": "boolean" + }, + "is_ten_percent_owner": { + "type": "boolean" + }, + "late_filing": { + "type": "boolean" + }, + "shares": { + "type": "string" + }, + "side": { + "type": "string" + }, + "total_value_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "transaction_code": { + "type": "string" + }, + "transaction_date": { + "type": "string" + } + }, + "required": [ + "side", + "transaction_code", + "shares", + "is_10b5_1", + "insider_name", + "insider_title", + "is_officer", + "is_director", + "is_ten_percent_owner", + "transaction_date", + "filed_at", + "late_filing" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ownership_form": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "read_time_minutes": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "relevance_score": { + "type": "integer" + }, + "search_match": { + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "source": { + "type": "string" + }, + "source_domain": { + "type": "string" + }, + "source_type": { + "default": "", + "type": "string" + }, + "sources": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "sources_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "story_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "summary": { + "type": "string" + }, + "tickers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "time_published": { + "type": "string" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "uid", + "title", + "url", + "source", + "source_domain", + "summary", + "category", + "relevance_score", + "time_published", + "created_at" + ], + "type": "object" + }, + { + "description": "Opt-in feed projection. Expand ``uid`` with ``alphai_article``.\n\nOnly the two scalar analysis signals survive, at the top level. Summary,\nanalysis prose, images and SEC detail blocks are absent, not truncated.\nSearch evidence and Form 4 ownership remain so triage keeps its meaning.", + "properties": { + "actionability": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "category": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "information_novelty": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "ownership_form": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "relevance_score": { + "type": "integer" + }, + "search_match": { + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "source": { + "type": "string" + }, + "source_domain": { + "type": "string" + }, + "source_type": { + "type": "string" + }, + "sources": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "sources_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "story_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tickers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "time_published": { + "type": "string" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "uid", + "title", + "url", + "source", + "source_domain", + "source_type", + "time_published", + "created_at", + "tickers", + "category", + "relevance_score", + "actionability", + "information_novelty", + "story_id", + "sources_count", + "sources", + "ownership_form", + "search_match" + ], + "type": "object" + } +] - removed
Output schema / properties / a_recent / items / propertiesRemoved value: -{ - "analysis": { - "anyOf": [ - { - "properties": { - "actionability": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "alternative_perspectives": { - "anyOf": [ - { - "properties": { - "contrarian_view": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "overlooked_factors": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "background_context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "indirect_market_effects": { - "anyOf": [ - { - "properties": { - "global_market_relevance": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "regional_market_impact": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "sector_implications": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "information_novelty": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "key_entities": { - "items": { - "properties": { - "description": { - "default": "", - "type": "string" - }, - "entity_type": { - "default": "", - "type": "string" - }, - "name": { - "default": "", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "market_relevance_summary": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "market_sentiment_alignment": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "ticker_analysis": { - "items": { - "properties": { - "confidence": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "price_impact_prediction": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "reasoning": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "relevance_context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "sentiment": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "ticker": { - "type": "string" - } - }, - "required": [ - "ticker" - ], - "type": "object" - }, - "type": "array" - }, - "timing_relevance": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "banner_image": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "category": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "earnings": { - "anyOf": [ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "filing": { - "anyOf": [ - { - "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", - "properties": { - "accession_number": { - "type": "string" - }, - "event_date": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "exhibit_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "filed_at": { - "type": "string" - }, - "items": { - "items": { - "type": "string" - }, - "type": "array" - }, - "primary_item": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "items", - "accession_number", - "filed_at" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "insider": { - "anyOf": [ - { - "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", - "properties": { - "avg_price_usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "filed_at": { - "type": "string" - }, - "insider_name": { - "type": "string" - }, - "insider_title": { - "type": "string" - }, - "is_10b5_1": { - "type": "boolean" - }, - "is_director": { - "type": "boolean" - }, - "is_officer": { - "type": "boolean" - }, - "is_ten_percent_owner": { - "type": "boolean" - }, - "late_filing": { - "type": "boolean" - }, - "shares": { - "type": "string" - }, - "side": { - "type": "string" - }, - "total_value_usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "transaction_code": { - "type": "string" - }, - "transaction_date": { - "type": "string" - } - }, - "required": [ - "side", - "transaction_code", - "shares", - "is_10b5_1", - "insider_name", - "insider_title", - "is_officer", - "is_director", - "is_ten_percent_owner", - "transaction_date", - "filed_at", - "late_filing" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ownership_form": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "read_time_minutes": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "relevance_score": { - "type": "integer" - }, - "search_match": { - "anyOf": [ - { - "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", - "properties": { - "context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "score": { - "type": "number" - }, - "terms_matched": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "score" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "source": { - "type": "string" - }, - "source_domain": { - "type": "string" - }, - "source_type": { - "default": "", - "type": "string" - }, - "sources": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - }, - "sources_count": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "story_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "summary": { - "type": "string" - }, - "tickers": { - "items": { - "type": "string" - }, - "type": "array" - }, - "time_published": { - "type": "string" - }, - "title": { - "type": "string" - }, - "uid": { - "type": "string" - }, - "url": { - "type": "string" - } -} - removed
Output schema / properties / a_recent / items / requiredRemoved value: -[ - "uid", - "title", - "url", - "source", - "source_domain", - "summary", - "category", - "relevance_score", - "time_published", - "created_at" -] - removed
Output schema / properties / a_recent / items / typeRemoved value: -"object" - added
Output schema / properties / b_recent / items / anyOfAdded value: +[ + { + "properties": { + "analysis": { + "anyOf": [ + { + "properties": { + "actionability": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "alternative_perspectives": { + "anyOf": [ + { + "properties": { + "contrarian_view": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "overlooked_factors": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "background_context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "indirect_market_effects": { + "anyOf": [ + { + "properties": { + "global_market_relevance": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "regional_market_impact": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sector_implications": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "information_novelty": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "key_entities": { + "items": { + "properties": { + "description": { + "default": "", + "type": "string" + }, + "entity_type": { + "default": "", + "type": "string" + }, + "name": { + "default": "", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "market_relevance_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "market_sentiment_alignment": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ticker_analysis": { + "items": { + "properties": { + "confidence": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "price_impact_prediction": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "reasoning": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "relevance_context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sentiment": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker" + ], + "type": "object" + }, + "type": "array" + }, + "timing_relevance": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "banner_image": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "category": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "earnings": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "filing": { + "anyOf": [ + { + "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", + "properties": { + "accession_number": { + "type": "string" + }, + "event_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "exhibit_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "primary_item": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "items", + "accession_number", + "filed_at" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "insider": { + "anyOf": [ + { + "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", + "properties": { + "avg_price_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "insider_name": { + "type": "string" + }, + "insider_title": { + "type": "string" + }, + "is_10b5_1": { + "type": "boolean" + }, + "is_director": { + "type": "boolean" + }, + "is_officer": { + "type": "boolean" + }, + "is_ten_percent_owner": { + "type": "boolean" + }, + "late_filing": { + "type": "boolean" + }, + "shares": { + "type": "string" + }, + "side": { + "type": "string" + }, + "total_value_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "transaction_code": { + "type": "string" + }, + "transaction_date": { + "type": "string" + } + }, + "required": [ + "side", + "transaction_code", + "shares", + "is_10b5_1", + "insider_name", + "insider_title", + "is_officer", + "is_director", + "is_ten_percent_owner", + "transaction_date", + "filed_at", + "late_filing" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ownership_form": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "read_time_minutes": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "relevance_score": { + "type": "integer" + }, + "search_match": { + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "source": { + "type": "string" + }, + "source_domain": { + "type": "string" + }, + "source_type": { + "default": "", + "type": "string" + }, + "sources": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "sources_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "story_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "summary": { + "type": "string" + }, + "tickers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "time_published": { + "type": "string" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "uid", + "title", + "url", + "source", + "source_domain", + "summary", + "category", + "relevance_score", + "time_published", + "created_at" + ], + "type": "object" + }, + { + "description": "Opt-in feed projection. Expand ``uid`` with ``alphai_article``.\n\nOnly the two scalar analysis signals survive, at the top level. Summary,\nanalysis prose, images and SEC detail blocks are absent, not truncated.\nSearch evidence and Form 4 ownership remain so triage keeps its meaning.", + "properties": { + "actionability": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "category": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "information_novelty": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "ownership_form": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "relevance_score": { + "type": "integer" + }, + "search_match": { + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "source": { + "type": "string" + }, + "source_domain": { + "type": "string" + }, + "source_type": { + "type": "string" + }, + "sources": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "sources_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "story_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tickers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "time_published": { + "type": "string" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "uid", + "title", + "url", + "source", + "source_domain", + "source_type", + "time_published", + "created_at", + "tickers", + "category", + "relevance_score", + "actionability", + "information_novelty", + "story_id", + "sources_count", + "sources", + "ownership_form", + "search_match" + ], + "type": "object" + } +] - removed
Output schema / properties / b_recent / items / propertiesRemoved value: -{ - "analysis": { - "anyOf": [ - { - "properties": { - "actionability": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "alternative_perspectives": { - "anyOf": [ - { - "properties": { - "contrarian_view": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "overlooked_factors": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "background_context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "indirect_market_effects": { - "anyOf": [ - { - "properties": { - "global_market_relevance": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "regional_market_impact": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "sector_implications": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "information_novelty": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "key_entities": { - "items": { - "properties": { - "description": { - "default": "", - "type": "string" - }, - "entity_type": { - "default": "", - "type": "string" - }, - "name": { - "default": "", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "market_relevance_summary": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "market_sentiment_alignment": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "ticker_analysis": { - "items": { - "properties": { - "confidence": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "price_impact_prediction": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "reasoning": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "relevance_context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "sentiment": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "ticker": { - "type": "string" - } - }, - "required": [ - "ticker" - ], - "type": "object" - }, - "type": "array" - }, - "timing_relevance": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "banner_image": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "category": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "earnings": { - "anyOf": [ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "filing": { - "anyOf": [ - { - "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", - "properties": { - "accession_number": { - "type": "string" - }, - "event_date": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "exhibit_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "filed_at": { - "type": "string" - }, - "items": { - "items": { - "type": "string" - }, - "type": "array" - }, - "primary_item": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "items", - "accession_number", - "filed_at" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "insider": { - "anyOf": [ - { - "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", - "properties": { - "avg_price_usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "filed_at": { - "type": "string" - }, - "insider_name": { - "type": "string" - }, - "insider_title": { - "type": "string" - }, - "is_10b5_1": { - "type": "boolean" - }, - "is_director": { - "type": "boolean" - }, - "is_officer": { - "type": "boolean" - }, - "is_ten_percent_owner": { - "type": "boolean" - }, - "late_filing": { - "type": "boolean" - }, - "shares": { - "type": "string" - }, - "side": { - "type": "string" - }, - "total_value_usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "transaction_code": { - "type": "string" - }, - "transaction_date": { - "type": "string" - } - }, - "required": [ - "side", - "transaction_code", - "shares", - "is_10b5_1", - "insider_name", - "insider_title", - "is_officer", - "is_director", - "is_ten_percent_owner", - "transaction_date", - "filed_at", - "late_filing" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ownership_form": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "read_time_minutes": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "relevance_score": { - "type": "integer" - }, - "search_match": { - "anyOf": [ - { - "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", - "properties": { - "context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "score": { - "type": "number" - }, - "terms_matched": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "score" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "source": { - "type": "string" - }, - "source_domain": { - "type": "string" - }, - "source_type": { - "default": "", - "type": "string" - }, - "sources": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - }, - "sources_count": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "story_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "summary": { - "type": "string" - }, - "tickers": { - "items": { - "type": "string" - }, - "type": "array" - }, - "time_published": { - "type": "string" - }, - "title": { - "type": "string" - }, - "uid": { - "type": "string" - }, - "url": { - "type": "string" - } -} - removed
Output schema / properties / b_recent / items / requiredRemoved value: -[ - "uid", - "title", - "url", - "source", - "source_domain", - "summary", - "category", - "relevance_score", - "time_published", - "created_at" -] - removed
Output schema / properties / b_recent / items / typeRemoved value: -"object" - added
Output schema / properties / both / items / anyOfAdded value: +[ + { + "properties": { + "analysis": { + "anyOf": [ + { + "properties": { + "actionability": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "alternative_perspectives": { + "anyOf": [ + { + "properties": { + "contrarian_view": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "overlooked_factors": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "background_context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "indirect_market_effects": { + "anyOf": [ + { + "properties": { + "global_market_relevance": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "regional_market_impact": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sector_implications": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "information_novelty": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "key_entities": { + "items": { + "properties": { + "description": { + "default": "", + "type": "string" + }, + "entity_type": { + "default": "", + "type": "string" + }, + "name": { + "default": "", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "market_relevance_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "market_sentiment_alignment": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ticker_analysis": { + "items": { + "properties": { + "confidence": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "price_impact_prediction": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "reasoning": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "relevance_context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sentiment": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker" + ], + "type": "object" + }, + "type": "array" + }, + "timing_relevance": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "banner_image": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "category": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "earnings": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "filing": { + "anyOf": [ + { + "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", + "properties": { + "accession_number": { + "type": "string" + }, + "event_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "exhibit_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "primary_item": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "items", + "accession_number", + "filed_at" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "insider": { + "anyOf": [ + { + "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", + "properties": { + "avg_price_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "insider_name": { + "type": "string" + }, + "insider_title": { + "type": "string" + }, + "is_10b5_1": { + "type": "boolean" + }, + "is_director": { + "type": "boolean" + }, + "is_officer": { + "type": "boolean" + }, + "is_ten_percent_owner": { + "type": "boolean" + }, + "late_filing": { + "type": "boolean" + }, + "shares": { + "type": "string" + }, + "side": { + "type": "string" + }, + "total_value_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "transaction_code": { + "type": "string" + }, + "transaction_date": { + "type": "string" + } + }, + "required": [ + "side", + "transaction_code", + "shares", + "is_10b5_1", + "insider_name", + "insider_title", + "is_officer", + "is_director", + "is_ten_percent_owner", + "transaction_date", + "filed_at", + "late_filing" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ownership_form": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "read_time_minutes": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "relevance_score": { + "type": "integer" + }, + "search_match": { + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "source": { + "type": "string" + }, + "source_domain": { + "type": "string" + }, + "source_type": { + "default": "", + "type": "string" + }, + "sources": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "sources_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "story_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "summary": { + "type": "string" + }, + "tickers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "time_published": { + "type": "string" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "uid", + "title", + "url", + "source", + "source_domain", + "summary", + "category", + "relevance_score", + "time_published", + "created_at" + ], + "type": "object" + }, + { + "description": "Opt-in feed projection. Expand ``uid`` with ``alphai_article``.\n\nOnly the two scalar analysis signals survive, at the top level. Summary,\nanalysis prose, images and SEC detail blocks are absent, not truncated.\nSearch evidence and Form 4 ownership remain so triage keeps its meaning.", + "properties": { + "actionability": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "category": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "information_novelty": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "ownership_form": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "relevance_score": { + "type": "integer" + }, + "search_match": { + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "source": { + "type": "string" + }, + "source_domain": { + "type": "string" + }, + "source_type": { + "type": "string" + }, + "sources": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "sources_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "story_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tickers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "time_published": { + "type": "string" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "uid", + "title", + "url", + "source", + "source_domain", + "source_type", + "time_published", + "created_at", + "tickers", + "category", + "relevance_score", + "actionability", + "information_novelty", + "story_id", + "sources_count", + "sources", + "ownership_form", + "search_match" + ], + "type": "object" + } +] - removed
Output schema / properties / both / items / propertiesRemoved value: -{ - "analysis": { - "anyOf": [ - { - "properties": { - "actionability": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "alternative_perspectives": { - "anyOf": [ - { - "properties": { - "contrarian_view": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "overlooked_factors": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "background_context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "indirect_market_effects": { - "anyOf": [ - { - "properties": { - "global_market_relevance": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "regional_market_impact": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "sector_implications": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "information_novelty": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "key_entities": { - "items": { - "properties": { - "description": { - "default": "", - "type": "string" - }, - "entity_type": { - "default": "", - "type": "string" - }, - "name": { - "default": "", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "market_relevance_summary": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "market_sentiment_alignment": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "ticker_analysis": { - "items": { - "properties": { - "confidence": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "price_impact_prediction": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "reasoning": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "relevance_context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "sentiment": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "ticker": { - "type": "string" - } - }, - "required": [ - "ticker" - ], - "type": "object" - }, - "type": "array" - }, - "timing_relevance": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "banner_image": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "category": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "earnings": { - "anyOf": [ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "filing": { - "anyOf": [ - { - "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", - "properties": { - "accession_number": { - "type": "string" - }, - "event_date": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "exhibit_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "filed_at": { - "type": "string" - }, - "items": { - "items": { - "type": "string" - }, - "type": "array" - }, - "primary_item": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "items", - "accession_number", - "filed_at" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "insider": { - "anyOf": [ - { - "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", - "properties": { - "avg_price_usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "filed_at": { - "type": "string" - }, - "insider_name": { - "type": "string" - }, - "insider_title": { - "type": "string" - }, - "is_10b5_1": { - "type": "boolean" - }, - "is_director": { - "type": "boolean" - }, - "is_officer": { - "type": "boolean" - }, - "is_ten_percent_owner": { - "type": "boolean" - }, - "late_filing": { - "type": "boolean" - }, - "shares": { - "type": "string" - }, - "side": { - "type": "string" - }, - "total_value_usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "transaction_code": { - "type": "string" - }, - "transaction_date": { - "type": "string" - } - }, - "required": [ - "side", - "transaction_code", - "shares", - "is_10b5_1", - "insider_name", - "insider_title", - "is_officer", - "is_director", - "is_ten_percent_owner", - "transaction_date", - "filed_at", - "late_filing" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ownership_form": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "read_time_minutes": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "relevance_score": { - "type": "integer" - }, - "search_match": { - "anyOf": [ - { - "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", - "properties": { - "context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "score": { - "type": "number" - }, - "terms_matched": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "score" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "source": { - "type": "string" - }, - "source_domain": { - "type": "string" - }, - "source_type": { - "default": "", - "type": "string" - }, - "sources": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - }, - "sources_count": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "story_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "summary": { - "type": "string" - }, - "tickers": { - "items": { - "type": "string" - }, - "type": "array" - }, - "time_published": { - "type": "string" - }, - "title": { - "type": "string" - }, - "uid": { - "type": "string" - }, - "url": { - "type": "string" - } -} - removed
Output schema / properties / both / items / requiredRemoved value: -[ - "uid", - "title", - "url", - "source", - "source_domain", - "summary", - "category", - "relevance_score", - "time_published", - "created_at" -] - removed
Output schema / properties / both / items / typeRemoved value: -"object"
- Changed
alphai_ticker_news5 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "full", + "description": "full (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item.", + "enum": [ + "full", + "compact" + ], + "type": "string" +} - added
Output schema / properties / items / items / anyOfAdded value: +[ + { + "properties": { + "analysis": { + "anyOf": [ + { + "properties": { + "actionability": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "alternative_perspectives": { + "anyOf": [ + { + "properties": { + "contrarian_view": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "overlooked_factors": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "background_context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "indirect_market_effects": { + "anyOf": [ + { + "properties": { + "global_market_relevance": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "regional_market_impact": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sector_implications": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "information_novelty": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "key_entities": { + "items": { + "properties": { + "description": { + "default": "", + "type": "string" + }, + "entity_type": { + "default": "", + "type": "string" + }, + "name": { + "default": "", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "market_relevance_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "market_sentiment_alignment": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ticker_analysis": { + "items": { + "properties": { + "confidence": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "price_impact_prediction": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "reasoning": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "relevance_context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sentiment": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker" + ], + "type": "object" + }, + "type": "array" + }, + "timing_relevance": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "banner_image": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "category": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "earnings": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "filing": { + "anyOf": [ + { + "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", + "properties": { + "accession_number": { + "type": "string" + }, + "event_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "exhibit_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "primary_item": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "items", + "accession_number", + "filed_at" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "insider": { + "anyOf": [ + { + "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", + "properties": { + "avg_price_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "insider_name": { + "type": "string" + }, + "insider_title": { + "type": "string" + }, + "is_10b5_1": { + "type": "boolean" + }, + "is_director": { + "type": "boolean" + }, + "is_officer": { + "type": "boolean" + }, + "is_ten_percent_owner": { + "type": "boolean" + }, + "late_filing": { + "type": "boolean" + }, + "shares": { + "type": "string" + }, + "side": { + "type": "string" + }, + "total_value_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "transaction_code": { + "type": "string" + }, + "transaction_date": { + "type": "string" + } + }, + "required": [ + "side", + "transaction_code", + "shares", + "is_10b5_1", + "insider_name", + "insider_title", + "is_officer", + "is_director", + "is_ten_percent_owner", + "transaction_date", + "filed_at", + "late_filing" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ownership_form": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "read_time_minutes": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "relevance_score": { + "type": "integer" + }, + "search_match": { + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "source": { + "type": "string" + }, + "source_domain": { + "type": "string" + }, + "source_type": { + "default": "", + "type": "string" + }, + "sources": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "sources_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "story_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "summary": { + "type": "string" + }, + "tickers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "time_published": { + "type": "string" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "uid", + "title", + "url", + "source", + "source_domain", + "summary", + "category", + "relevance_score", + "time_published", + "created_at" + ], + "type": "object" + }, + { + "description": "Opt-in feed projection. Expand ``uid`` with ``alphai_article``.\n\nOnly the two scalar analysis signals survive, at the top level. Summary,\nanalysis prose, images and SEC detail blocks are absent, not truncated.\nSearch evidence and Form 4 ownership remain so triage keeps its meaning.", + "properties": { + "actionability": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "category": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "information_novelty": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "ownership_form": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "relevance_score": { + "type": "integer" + }, + "search_match": { + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "source": { + "type": "string" + }, + "source_domain": { + "type": "string" + }, + "source_type": { + "type": "string" + }, + "sources": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "sources_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "story_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tickers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "time_published": { + "type": "string" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "uid", + "title", + "url", + "source", + "source_domain", + "source_type", + "time_published", + "created_at", + "tickers", + "category", + "relevance_score", + "actionability", + "information_novelty", + "story_id", + "sources_count", + "sources", + "ownership_form", + "search_match" + ], + "type": "object" + } +] - removed
Output schema / properties / items / items / propertiesRemoved value: -{ - "analysis": { - "anyOf": [ - { - "properties": { - "actionability": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "alternative_perspectives": { - "anyOf": [ - { - "properties": { - "contrarian_view": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "overlooked_factors": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "background_context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "indirect_market_effects": { - "anyOf": [ - { - "properties": { - "global_market_relevance": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "regional_market_impact": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "sector_implications": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "information_novelty": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "key_entities": { - "items": { - "properties": { - "description": { - "default": "", - "type": "string" - }, - "entity_type": { - "default": "", - "type": "string" - }, - "name": { - "default": "", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "market_relevance_summary": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "market_sentiment_alignment": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "ticker_analysis": { - "items": { - "properties": { - "confidence": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "price_impact_prediction": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "reasoning": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "relevance_context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "sentiment": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "ticker": { - "type": "string" - } - }, - "required": [ - "ticker" - ], - "type": "object" - }, - "type": "array" - }, - "timing_relevance": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "banner_image": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "category": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "earnings": { - "anyOf": [ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "filing": { - "anyOf": [ - { - "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", - "properties": { - "accession_number": { - "type": "string" - }, - "event_date": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "exhibit_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "filed_at": { - "type": "string" - }, - "items": { - "items": { - "type": "string" - }, - "type": "array" - }, - "primary_item": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "items", - "accession_number", - "filed_at" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "insider": { - "anyOf": [ - { - "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", - "properties": { - "avg_price_usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "filed_at": { - "type": "string" - }, - "insider_name": { - "type": "string" - }, - "insider_title": { - "type": "string" - }, - "is_10b5_1": { - "type": "boolean" - }, - "is_director": { - "type": "boolean" - }, - "is_officer": { - "type": "boolean" - }, - "is_ten_percent_owner": { - "type": "boolean" - }, - "late_filing": { - "type": "boolean" - }, - "shares": { - "type": "string" - }, - "side": { - "type": "string" - }, - "total_value_usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "transaction_code": { - "type": "string" - }, - "transaction_date": { - "type": "string" - } - }, - "required": [ - "side", - "transaction_code", - "shares", - "is_10b5_1", - "insider_name", - "insider_title", - "is_officer", - "is_director", - "is_ten_percent_owner", - "transaction_date", - "filed_at", - "late_filing" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ownership_form": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "read_time_minutes": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "relevance_score": { - "type": "integer" - }, - "search_match": { - "anyOf": [ - { - "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", - "properties": { - "context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "score": { - "type": "number" - }, - "terms_matched": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "score" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "source": { - "type": "string" - }, - "source_domain": { - "type": "string" - }, - "source_type": { - "default": "", - "type": "string" - }, - "sources": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - }, - "sources_count": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "story_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "summary": { - "type": "string" - }, - "tickers": { - "items": { - "type": "string" - }, - "type": "array" - }, - "time_published": { - "type": "string" - }, - "title": { - "type": "string" - }, - "uid": { - "type": "string" - }, - "url": { - "type": "string" - } -} - removed
Output schema / properties / items / items / requiredRemoved value: -[ - "uid", - "title", - "url", - "source", - "source_domain", - "summary", - "category", - "relevance_score", - "time_published", - "created_at" -] - removed
Output schema / properties / items / items / typeRemoved value: -"object"
- Changed
alphai_trending5 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "full", + "description": "full (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item.", + "enum": [ + "full", + "compact" + ], + "type": "string" +} - added
Output schema / properties / result / items / anyOfAdded value: +[ + { + "properties": { + "analysis": { + "anyOf": [ + { + "properties": { + "actionability": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "alternative_perspectives": { + "anyOf": [ + { + "properties": { + "contrarian_view": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "overlooked_factors": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "background_context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "indirect_market_effects": { + "anyOf": [ + { + "properties": { + "global_market_relevance": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "regional_market_impact": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sector_implications": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "information_novelty": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "key_entities": { + "items": { + "properties": { + "description": { + "default": "", + "type": "string" + }, + "entity_type": { + "default": "", + "type": "string" + }, + "name": { + "default": "", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "market_relevance_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "market_sentiment_alignment": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ticker_analysis": { + "items": { + "properties": { + "confidence": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "price_impact_prediction": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "reasoning": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "relevance_context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sentiment": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker" + ], + "type": "object" + }, + "type": "array" + }, + "timing_relevance": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "banner_image": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "category": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "earnings": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "filing": { + "anyOf": [ + { + "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", + "properties": { + "accession_number": { + "type": "string" + }, + "event_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "exhibit_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "primary_item": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "items", + "accession_number", + "filed_at" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "insider": { + "anyOf": [ + { + "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", + "properties": { + "avg_price_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "insider_name": { + "type": "string" + }, + "insider_title": { + "type": "string" + }, + "is_10b5_1": { + "type": "boolean" + }, + "is_director": { + "type": "boolean" + }, + "is_officer": { + "type": "boolean" + }, + "is_ten_percent_owner": { + "type": "boolean" + }, + "late_filing": { + "type": "boolean" + }, + "shares": { + "type": "string" + }, + "side": { + "type": "string" + }, + "total_value_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "transaction_code": { + "type": "string" + }, + "transaction_date": { + "type": "string" + } + }, + "required": [ + "side", + "transaction_code", + "shares", + "is_10b5_1", + "insider_name", + "insider_title", + "is_officer", + "is_director", + "is_ten_percent_owner", + "transaction_date", + "filed_at", + "late_filing" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ownership_form": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "read_time_minutes": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "relevance_score": { + "type": "integer" + }, + "search_match": { + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "source": { + "type": "string" + }, + "source_domain": { + "type": "string" + }, + "source_type": { + "default": "", + "type": "string" + }, + "sources": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "sources_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "story_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "summary": { + "type": "string" + }, + "tickers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "time_published": { + "type": "string" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "uid", + "title", + "url", + "source", + "source_domain", + "summary", + "category", + "relevance_score", + "time_published", + "created_at" + ], + "type": "object" + }, + { + "description": "Opt-in feed projection. Expand ``uid`` with ``alphai_article``.\n\nOnly the two scalar analysis signals survive, at the top level. Summary,\nanalysis prose, images and SEC detail blocks are absent, not truncated.\nSearch evidence and Form 4 ownership remain so triage keeps its meaning.", + "properties": { + "actionability": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "category": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "information_novelty": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "ownership_form": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "relevance_score": { + "type": "integer" + }, + "search_match": { + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "source": { + "type": "string" + }, + "source_domain": { + "type": "string" + }, + "source_type": { + "type": "string" + }, + "sources": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "sources_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "story_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tickers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "time_published": { + "type": "string" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "uid", + "title", + "url", + "source", + "source_domain", + "source_type", + "time_published", + "created_at", + "tickers", + "category", + "relevance_score", + "actionability", + "information_novelty", + "story_id", + "sources_count", + "sources", + "ownership_form", + "search_match" + ], + "type": "object" + } +] - removed
Output schema / properties / result / items / propertiesRemoved value: -{ - "analysis": { - "anyOf": [ - { - "properties": { - "actionability": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "alternative_perspectives": { - "anyOf": [ - { - "properties": { - "contrarian_view": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "overlooked_factors": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "background_context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "indirect_market_effects": { - "anyOf": [ - { - "properties": { - "global_market_relevance": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "regional_market_impact": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "sector_implications": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "information_novelty": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "key_entities": { - "items": { - "properties": { - "description": { - "default": "", - "type": "string" - }, - "entity_type": { - "default": "", - "type": "string" - }, - "name": { - "default": "", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "market_relevance_summary": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "market_sentiment_alignment": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "ticker_analysis": { - "items": { - "properties": { - "confidence": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "price_impact_prediction": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "reasoning": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "relevance_context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "sentiment": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "ticker": { - "type": "string" - } - }, - "required": [ - "ticker" - ], - "type": "object" - }, - "type": "array" - }, - "timing_relevance": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "banner_image": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "category": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "earnings": { - "anyOf": [ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "filing": { - "anyOf": [ - { - "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", - "properties": { - "accession_number": { - "type": "string" - }, - "event_date": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "exhibit_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "filed_at": { - "type": "string" - }, - "items": { - "items": { - "type": "string" - }, - "type": "array" - }, - "primary_item": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "items", - "accession_number", - "filed_at" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "insider": { - "anyOf": [ - { - "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", - "properties": { - "avg_price_usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "filed_at": { - "type": "string" - }, - "insider_name": { - "type": "string" - }, - "insider_title": { - "type": "string" - }, - "is_10b5_1": { - "type": "boolean" - }, - "is_director": { - "type": "boolean" - }, - "is_officer": { - "type": "boolean" - }, - "is_ten_percent_owner": { - "type": "boolean" - }, - "late_filing": { - "type": "boolean" - }, - "shares": { - "type": "string" - }, - "side": { - "type": "string" - }, - "total_value_usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "transaction_code": { - "type": "string" - }, - "transaction_date": { - "type": "string" - } - }, - "required": [ - "side", - "transaction_code", - "shares", - "is_10b5_1", - "insider_name", - "insider_title", - "is_officer", - "is_director", - "is_ten_percent_owner", - "transaction_date", - "filed_at", - "late_filing" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ownership_form": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "read_time_minutes": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "relevance_score": { - "type": "integer" - }, - "search_match": { - "anyOf": [ - { - "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", - "properties": { - "context": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "score": { - "type": "number" - }, - "terms_matched": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "score" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "source": { - "type": "string" - }, - "source_domain": { - "type": "string" - }, - "source_type": { - "default": "", - "type": "string" - }, - "sources": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - }, - "sources_count": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "story_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "summary": { - "type": "string" - }, - "tickers": { - "items": { - "type": "string" - }, - "type": "array" - }, - "time_published": { - "type": "string" - }, - "title": { - "type": "string" - }, - "uid": { - "type": "string" - }, - "url": { - "type": "string" - } -} - removed
Output schema / properties / result / items / requiredRemoved value: -[ - "uid", - "title", - "url", - "source", - "source_domain", - "summary", - "category", - "relevance_score", - "time_published", - "created_at" -] - removed
Output schema / properties / result / items / typeRemoved value: -"object"
2 tool updates
- Added
alphai_stories - Added
alphai_story
1 tool update
- Changed
alphai_macro4 fields changed- added
Output schema / descriptionAdded value: +"``alphai_macro``: the stories of the window under ``result`` (the key the\ntool always answered with, so existing clients read it unchanged) and, since\n2026-10-02, ``releases`` — the scheduled US releases of the same window with\ntheir coverage, newest first, then the ones due in the next 24 hours.\n\nAn agent asked at 08:49 ET on jobs day, found no story and concluded nothing\nhad come out; the release had, our stories were still arriving. An elapsed\nrelease with ``coverage == []`` says exactly that." - added
Output schema / properties / releasesAdded value: +{ + "items": { + "description": "One scheduled occurrence of a US macro release (``alphai_calendar``).\n\n``phase`` says only that the scheduled moment passed (``elapsed``), NOT\nthat the agency published — check ``schedule_status`` first. ``coverage``\nis present on elapsed occurrences: ``[]`` means the join ran and found\nnothing yet; ``None`` means upcoming (nothing to cover).", + "properties": { + "category": { + "type": "string" + }, + "country": { + "type": "string" + }, + "coverage": { + "anyOf": [ + { + "items": { + "description": "One matched feed story for an elapsed calendar occurrence — a pointer,\nnot the article: follow up with ``alphai_article`` for the analysis.", + "properties": { + "relevance_score": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "required": [ + "uid", + "title", + "relevance_score" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "event_key": { + "type": "string" + }, + "has_sep": { + "default": false, + "type": "boolean" + }, + "importance": { + "type": "string" + }, + "phase": { + "type": "string" + }, + "press_conference_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "reference_period": { + "type": "string" + }, + "release_stage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "schedule_basis": { + "type": "string" + }, + "schedule_status": { + "type": "string" + }, + "scheduled_at": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "required": [ + "uid", + "event_key", + "title", + "reference_period", + "scheduled_at", + "phase", + "schedule_status", + "schedule_basis", + "importance", + "category", + "country", + "source_url" + ], + "type": "object" + }, + "type": "array" +} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / x-fastmcp-wrap-resultRemoved value: -true
1 tool update
- Changed
alphai_insider_clusters1 field changed- added
Output schema / properties / results / items / properties / buyers_detail / items / properties / reasonAdded value: +{ + "anyOf": [ + { + "enum": [ + "placement", + "offering", + "private" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
11 tool updates
- Changed
alphai_alerts_subscribe2 fields changed- added
Input schema / properties / ticker / maxLengthAdded value: +16 - added
Input schema / properties / ticker / patternAdded value: +"^[A-Za-z0-9.\\-]+$"
- Changed
alphai_alerts_unsubscribe2 fields changed- added
Input schema / properties / ticker / maxLengthAdded value: +16 - added
Input schema / properties / ticker / patternAdded value: +"^[A-Za-z0-9.\\-]+$"
- Changed
alphai_article1 field changed- added
Input schema / properties / uid / maxLengthAdded value: +64
- Changed
alphai_earnings2 fields changed- added
Input schema / properties / ticker / maxLengthAdded value: +16 - added
Input schema / properties / ticker / patternAdded value: +"^[A-Za-z0-9.\\-]+$"
- Changed
alphai_insider_news2 fields changed- changed
Input schema / properties / cursor / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 1024, + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / ticker / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 16, + "pattern": "^[A-Za-z0-9.\\-]+$", + "type": "string" + }, + { + "type": "null" + } +]
- Changed
alphai_news_search6 fields changed- changed
Input schema / properties / cursor / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 1024, + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / q / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / query / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / query / descriptionPrevious value: -"Full-text query over article titles, named entities and summaries (company names, people, topics, tickers); how it was read comes back in query_interpretation."New value: +"Full-text query over article titles, named entities and summaries (company names, people, topics, tickers), up to 200 characters; how it was read comes back in query_interpretation." - changed
Input schema / properties / tickers / anyOfPrevious value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "maxLength": 16, + "pattern": "^[A-Za-z0-9.\\-]+$", + "type": "string" + }, + "maxItems": 50, + "type": "array" + }, + { + "type": "null" + } +] - changed
Input schema / properties / tickers / descriptionPrevious value: -"Restrict to news mentioning these tickers."New value: +"Restrict to news mentioning these tickers (up to 50 symbols; duplicates are ignored)."
- Changed
alphai_pair_analysis4 fields changed- added
Input schema / properties / ticker_a / maxLengthAdded value: +16 - added
Input schema / properties / ticker_a / patternAdded value: +"^[A-Za-z0-9.\\-]+$" - added
Input schema / properties / ticker_b / maxLengthAdded value: +16 - added
Input schema / properties / ticker_b / patternAdded value: +"^[A-Za-z0-9.\\-]+$"
- Changed
alphai_ticker_news3 fields changed- changed
Input schema / properties / cursor / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 1024, + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / ticker / maxLengthAdded value: +16 - added
Input schema / properties / ticker / patternAdded value: +"^[A-Za-z0-9.\\-]+$"
- Changed
alphai_tickers2 fields changed- changed
Input schema / properties / q / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 64, + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / sector / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 64, + "type": "string" + }, + { + "type": "null" + } +]
- Changed
fetch1 field changed- added
Input schema / properties / id / maxLengthAdded value: +64
- Changed
search2 fields changed- changed
Input schema / properties / query / descriptionPrevious value: -"Natural-language search query."New value: +"Natural-language search query (up to 300 characters)." - added
Input schema / properties / query / maxLengthAdded value: +300
1 tool update
- Changed
alphai_radar1 field changed- changed
Output schema / properties / results / items / properties / event_context / anyOfPrevious value: -[ - { - "properties": { - "cik": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "cluster_buys": { - "default": [], - "items": { - "properties": { - "buyers": { - "type": "integer" - }, - "evidence": { - "items": { - "properties": { - "accession_number": { - "type": "string" - }, - "filed_at": { - "format": "date-time", - "type": "string" - }, - "sec_url": { - "type": "string" - } - }, - "required": [ - "accession_number", - "filed_at", - "sec_url" - ], - "type": "object" - }, - "type": "array" - }, - "evidence_truncated": { - "type": "boolean" - }, - "filings_count": { - "type": "integer" - }, - "known_at": { - "format": "date-time", - "type": "string" - }, - "officer_director_buyers": { - "type": "integer" - }, - "pattern": { - "const": "open_market", - "default": "open_market", - "type": "string" - }, - "window_end": { - "format": "date", - "type": "string" - }, - "window_start": { - "format": "date", - "type": "string" - } - }, - "required": [ - "window_start", - "window_end", - "known_at", - "buyers", - "officer_director_buyers", - "filings_count", - "evidence", - "evidence_truncated" - ], - "type": "object" - }, - "type": "array" - }, - "cluster_buys_count": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "filings": { - "default": [], - "items": { - "properties": { - "accession_number": { - "type": "string" - }, - "event_date": { - "anyOf": [ - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "filed_at": { - "format": "date-time", - "type": "string" - }, - "form": { - "enum": [ - "8-K", - "6-K" - ], - "type": "string" - }, - "items": { - "default": [], - "items": { - "type": "string" - }, - "type": "array" - }, - "kind": { - "anyOf": [ - { - "const": "earnings_release", - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "news_uid": { - "type": "string" - }, - "observed_at": { - "format": "date-time", - "type": "string" - }, - "period_label": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "primary_item": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "sec_url": { - "type": "string" - } - }, - "required": [ - "form", - "accession_number", - "filed_at", - "observed_at", - "sec_url", - "news_uid" - ], - "type": "object" - }, - "type": "array" - }, - "filings_count": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "reason": { - "anyOf": [ - { - "enum": [ - "non_sec_symbol", - "unknown_symbol", - "missing_cik", - "issuer_changed" - ], - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "status": { - "enum": [ - "available", - "unsupported", - "unavailable" - ], - "type": "string" - }, - "ticker": { - "type": "string" - } - }, - "required": [ - "ticker", - "cik", - "status" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "properties": { + "cik": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "cluster_buys": { + "default": [], + "items": { + "properties": { + "buyers": { + "type": "integer" + }, + "evidence": { + "items": { + "properties": { + "accession_number": { + "type": "string" + }, + "filed_at": { + "format": "date-time", + "type": "string" + }, + "sec_url": { + "type": "string" + } + }, + "required": [ + "accession_number", + "filed_at", + "sec_url" + ], + "type": "object" + }, + "type": "array" + }, + "evidence_truncated": { + "type": "boolean" + }, + "filings_count": { + "type": "integer" + }, + "known_at": { + "format": "date-time", + "type": "string" + }, + "officer_director_buyers": { + "type": "integer" + }, + "pattern": { + "const": "open_market", + "default": "open_market", + "type": "string" + }, + "window_end": { + "format": "date", + "type": "string" + }, + "window_start": { + "format": "date", + "type": "string" + } + }, + "required": [ + "window_start", + "window_end", + "known_at", + "buyers", + "officer_director_buyers", + "filings_count", + "evidence", + "evidence_truncated" + ], + "type": "object" + }, + "type": "array" + }, + "cluster_buys_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "filings": { + "default": [], + "items": { + "properties": { + "accession_number": { + "type": "string" + }, + "event_date": { + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "format": "date-time", + "type": "string" + }, + "form": { + "enum": [ + "8-K", + "6-K" + ], + "type": "string" + }, + "has_article": { + "default": false, + "description": "An enriched article existed before the context cutoff. False on older snapshots without metadata.", + "type": "boolean" + }, + "items": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "kind": { + "anyOf": [ + { + "const": "earnings_release", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "news_published": { + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Article publication time for its AlphAI URL." + }, + "news_title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Article title frozen at the context cutoff." + }, + "news_uid": { + "type": "string" + }, + "observed_at": { + "format": "date-time", + "type": "string" + }, + "period_label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "primary_item": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sec_url": { + "type": "string" + } + }, + "required": [ + "form", + "accession_number", + "filed_at", + "observed_at", + "sec_url", + "news_uid" + ], + "type": "object" + }, + "type": "array" + }, + "filings_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "reason": { + "anyOf": [ + { + "enum": [ + "non_sec_symbol", + "unknown_symbol", + "missing_cik", + "issuer_changed" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "status": { + "enum": [ + "available", + "unsupported", + "unavailable" + ], + "type": "string" + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker", + "cik", + "status" + ], + "type": "object" + }, + { + "type": "null" + } +]
3 tool updates
- Changed
alphai_insider_news1 field changed- changed
Output schema / properties / query_interpretation / anyOfPrevious value: -[ - { - "description": "How ``alphai_news_search`` read a free-text ``query`` — the echo that makes\na resolver miss legible. Before it, a query read as the wrong company or\ndiscarded entirely came back indistinguishable from a hit\n(issues/2026-08-16-freetext-query-resolves-jane-street-to-janl.md).\n\n``mode``: ``resolved`` — at least one query word became a filter that is\napplied to the items; ``overridden`` — the query resolved, but explicit\n``tickers``/``category`` replaced every filter it produced; ``unresolved`` —\nno query word matched a ticker, company name or topic word, so the items\nare NOT matches for the query (``note`` says what they are instead).\n``ignored_terms`` lists the content words that matched nothing; stopwords\nare dropped silently. ``note`` is one or two plain sentences an agent can act\non, same role as ``ticker_note``.", - "properties": { - "category": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "category_term": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "ignored_terms": { - "items": { - "type": "string" - }, - "type": "array" - }, - "mode": { - "enum": [ - "resolved", - "overridden", - "unresolved" - ], - "type": "string" - }, - "note": { - "default": "", - "type": "string" - }, - "search": { - "anyOf": [ - { - "description": "How the text search read the query (docs/HYBRID_NEWS_SEARCH_PLAN.md\nstep 2): ``strict`` = every term required; ``broadened`` = fewer strict\nmatches than the threshold, so any rare term plus at least two of the\nterms; ``no_match``; ``no_terms``. ``sort`` is ``published`` when every\nterm is a very common word (newest matches, not best). ``terms`` are the\nnormalized (stemmed) lexemes the index holds. ``matched`` counts the\nvisible matches inside the bounded candidate set, never a global total.", - "properties": { - "engine": { - "default": "postgres", - "enum": [ - "postgres", - "meilisearch" - ], - "type": "string" - }, - "matched": { - "default": 0, - "type": "integer" - }, - "mode": { - "enum": [ - "strict", - "broadened", - "no_match", - "no_terms" - ], - "type": "string" - }, - "optional_terms": { - "items": { - "type": "string" - }, - "type": "array" - }, - "required_terms": { - "items": { - "type": "string" - }, - "type": "array" - }, - "sort": { - "enum": [ - "relevance", - "published" - ], - "type": "string" - }, - "terms": { - "items": { - "type": "string" - }, - "type": "array" - }, - "window_from": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "mode", - "sort" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "tickers": { - "items": { - "description": "One ticker a free-text ``query`` resolved to (docs/HYBRID_NEWS_SEARCH_PLAN.md\nstep 1). ``name`` is the issuer's registered name, so an agent can see that\n\"PMI\" was read as Picard Medical rather than the ISM purchasing-managers\nindex; ``term`` is the query word that produced it (share-class siblings\ninherit the seed word's term).", - "properties": { - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "term": { - "type": "string" - }, - "ticker": { - "type": "string" - } - }, - "required": [ - "ticker", - "term" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "mode" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "How ``alphai_news_search`` read a free-text ``query`` — the echo that makes\na resolver miss legible. Before it, a query read as the wrong company or\ndiscarded entirely came back indistinguishable from a hit\n(issues/2026-08-16-freetext-query-resolves-jane-street-to-janl.md).\n\n``mode``: ``searched`` — the text search served the items\n(``NEWS_SEARCH_MODE=on``, the normal state since 2026-09-23): ``search``\nsays what selected them, ``tickers``/``category`` only say what the words\nwere ALSO read as (reference, never a filter) and ``ignored_terms`` is\nempty, because nothing was ignored — the whole text was searched. Before\nthis (review finding 1a/1b, 2026-09-23) the text path echoed the\nresolver's ``resolved`` + its ``ignored_terms`` next to a ``search`` block\nwhose ``terms`` were those very words, and a read category looked applied\nwhile nothing but the text filtered the items. The resolver modes describe\nthe fallback when the text search is switched off: ``resolved`` — at least\none query word became a filter that is applied to the items;\n``overridden`` — the query resolved, but explicit ``tickers``/``category``\nreplaced every filter it produced; ``unresolved`` — no query word matched a\nticker, company name or topic word, so the items are NOT matches for the\nquery (``note`` says what they are instead). ``ignored_terms`` then lists\nthe content words that matched nothing; stopwords are dropped silently.\n``note`` is one or two plain sentences an agent can act on, same role as\n``ticker_note``.", + "properties": { + "category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "category_term": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ignored_terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "mode": { + "enum": [ + "searched", + "resolved", + "overridden", + "unresolved" + ], + "type": "string" + }, + "note": { + "default": "", + "type": "string" + }, + "search": { + "anyOf": [ + { + "description": "How the text search read the query (docs/HYBRID_NEWS_SEARCH_PLAN.md\nstep 2): ``strict`` = every term required; ``broadened`` = fewer strict\nmatches than the threshold, so the most common words were dropped first\nand every item carries at least two of the terms; ``no_match``;\n``no_terms``. ``sort`` is ``published`` when every term is a very common\nword (newest matches, not best). ``terms`` are the normalized words that\nwere searched. ``required_terms`` is filled only when the search reports\nwhich words every broadened row had to carry (the Postgres path does, the\nengine does not) — ``search_match.terms_matched`` on each item is the\ncount to trust. ``matched`` counts the visible matches inside the bounded\ncandidate set, never a global total. Which engine answered is NOT part of\nthe contract: it goes to the search log (``ranking_version``). The\n``engine`` field that shipped with 1.41.0 was read by an external review\nas an implementation leak, and it was one — a client has no action on\n\"meilisearch\" (issues/2026-09-23-news-search-review-triage.md).", + "properties": { + "matched": { + "default": 0, + "type": "integer" + }, + "mode": { + "enum": [ + "strict", + "broadened", + "no_match", + "no_terms" + ], + "type": "string" + }, + "optional_terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "required_terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sort": { + "enum": [ + "relevance", + "published" + ], + "type": "string" + }, + "terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "window_from": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "mode", + "sort" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "tickers": { + "items": { + "description": "One ticker a free-text ``query`` resolved to (docs/HYBRID_NEWS_SEARCH_PLAN.md\nstep 1). ``name`` is the issuer's registered name, so an agent can see that\n\"PMI\" was read as Picard Medical rather than the ISM purchasing-managers\nindex; ``term`` is the query word that produced it (share-class siblings\ninherit the seed word's term).", + "properties": { + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "term": { + "type": "string" + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker", + "term" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "mode" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
alphai_news_search2 fields changed- changed
Input schema / properties / query / descriptionPrevious value: -"Free-text query (company names / tickers / topic words) resolved to ticker + category filters; how it was read comes back in query_interpretation."New value: +"Full-text query over article titles, named entities and summaries (company names, people, topics, tickers); how it was read comes back in query_interpretation." - changed
Output schema / properties / query_interpretation / anyOfPrevious value: -[ - { - "description": "How ``alphai_news_search`` read a free-text ``query`` — the echo that makes\na resolver miss legible. Before it, a query read as the wrong company or\ndiscarded entirely came back indistinguishable from a hit\n(issues/2026-08-16-freetext-query-resolves-jane-street-to-janl.md).\n\n``mode``: ``resolved`` — at least one query word became a filter that is\napplied to the items; ``overridden`` — the query resolved, but explicit\n``tickers``/``category`` replaced every filter it produced; ``unresolved`` —\nno query word matched a ticker, company name or topic word, so the items\nare NOT matches for the query (``note`` says what they are instead).\n``ignored_terms`` lists the content words that matched nothing; stopwords\nare dropped silently. ``note`` is one or two plain sentences an agent can act\non, same role as ``ticker_note``.", - "properties": { - "category": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "category_term": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "ignored_terms": { - "items": { - "type": "string" - }, - "type": "array" - }, - "mode": { - "enum": [ - "resolved", - "overridden", - "unresolved" - ], - "type": "string" - }, - "note": { - "default": "", - "type": "string" - }, - "search": { - "anyOf": [ - { - "description": "How the text search read the query (docs/HYBRID_NEWS_SEARCH_PLAN.md\nstep 2): ``strict`` = every term required; ``broadened`` = fewer strict\nmatches than the threshold, so any rare term plus at least two of the\nterms; ``no_match``; ``no_terms``. ``sort`` is ``published`` when every\nterm is a very common word (newest matches, not best). ``terms`` are the\nnormalized (stemmed) lexemes the index holds. ``matched`` counts the\nvisible matches inside the bounded candidate set, never a global total.", - "properties": { - "engine": { - "default": "postgres", - "enum": [ - "postgres", - "meilisearch" - ], - "type": "string" - }, - "matched": { - "default": 0, - "type": "integer" - }, - "mode": { - "enum": [ - "strict", - "broadened", - "no_match", - "no_terms" - ], - "type": "string" - }, - "optional_terms": { - "items": { - "type": "string" - }, - "type": "array" - }, - "required_terms": { - "items": { - "type": "string" - }, - "type": "array" - }, - "sort": { - "enum": [ - "relevance", - "published" - ], - "type": "string" - }, - "terms": { - "items": { - "type": "string" - }, - "type": "array" - }, - "window_from": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "mode", - "sort" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "tickers": { - "items": { - "description": "One ticker a free-text ``query`` resolved to (docs/HYBRID_NEWS_SEARCH_PLAN.md\nstep 1). ``name`` is the issuer's registered name, so an agent can see that\n\"PMI\" was read as Picard Medical rather than the ISM purchasing-managers\nindex; ``term`` is the query word that produced it (share-class siblings\ninherit the seed word's term).", - "properties": { - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "term": { - "type": "string" - }, - "ticker": { - "type": "string" - } - }, - "required": [ - "ticker", - "term" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "mode" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "How ``alphai_news_search`` read a free-text ``query`` — the echo that makes\na resolver miss legible. Before it, a query read as the wrong company or\ndiscarded entirely came back indistinguishable from a hit\n(issues/2026-08-16-freetext-query-resolves-jane-street-to-janl.md).\n\n``mode``: ``searched`` — the text search served the items\n(``NEWS_SEARCH_MODE=on``, the normal state since 2026-09-23): ``search``\nsays what selected them, ``tickers``/``category`` only say what the words\nwere ALSO read as (reference, never a filter) and ``ignored_terms`` is\nempty, because nothing was ignored — the whole text was searched. Before\nthis (review finding 1a/1b, 2026-09-23) the text path echoed the\nresolver's ``resolved`` + its ``ignored_terms`` next to a ``search`` block\nwhose ``terms`` were those very words, and a read category looked applied\nwhile nothing but the text filtered the items. The resolver modes describe\nthe fallback when the text search is switched off: ``resolved`` — at least\none query word became a filter that is applied to the items;\n``overridden`` — the query resolved, but explicit ``tickers``/``category``\nreplaced every filter it produced; ``unresolved`` — no query word matched a\nticker, company name or topic word, so the items are NOT matches for the\nquery (``note`` says what they are instead). ``ignored_terms`` then lists\nthe content words that matched nothing; stopwords are dropped silently.\n``note`` is one or two plain sentences an agent can act on, same role as\n``ticker_note``.", + "properties": { + "category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "category_term": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ignored_terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "mode": { + "enum": [ + "searched", + "resolved", + "overridden", + "unresolved" + ], + "type": "string" + }, + "note": { + "default": "", + "type": "string" + }, + "search": { + "anyOf": [ + { + "description": "How the text search read the query (docs/HYBRID_NEWS_SEARCH_PLAN.md\nstep 2): ``strict`` = every term required; ``broadened`` = fewer strict\nmatches than the threshold, so the most common words were dropped first\nand every item carries at least two of the terms; ``no_match``;\n``no_terms``. ``sort`` is ``published`` when every term is a very common\nword (newest matches, not best). ``terms`` are the normalized words that\nwere searched. ``required_terms`` is filled only when the search reports\nwhich words every broadened row had to carry (the Postgres path does, the\nengine does not) — ``search_match.terms_matched`` on each item is the\ncount to trust. ``matched`` counts the visible matches inside the bounded\ncandidate set, never a global total. Which engine answered is NOT part of\nthe contract: it goes to the search log (``ranking_version``). The\n``engine`` field that shipped with 1.41.0 was read by an external review\nas an implementation leak, and it was one — a client has no action on\n\"meilisearch\" (issues/2026-09-23-news-search-review-triage.md).", + "properties": { + "matched": { + "default": 0, + "type": "integer" + }, + "mode": { + "enum": [ + "strict", + "broadened", + "no_match", + "no_terms" + ], + "type": "string" + }, + "optional_terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "required_terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sort": { + "enum": [ + "relevance", + "published" + ], + "type": "string" + }, + "terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "window_from": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "mode", + "sort" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "tickers": { + "items": { + "description": "One ticker a free-text ``query`` resolved to (docs/HYBRID_NEWS_SEARCH_PLAN.md\nstep 1). ``name`` is the issuer's registered name, so an agent can see that\n\"PMI\" was read as Picard Medical rather than the ISM purchasing-managers\nindex; ``term`` is the query word that produced it (share-class siblings\ninherit the seed word's term).", + "properties": { + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "term": { + "type": "string" + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker", + "term" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "mode" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
alphai_ticker_news1 field changed- changed
Output schema / properties / query_interpretation / anyOfPrevious value: -[ - { - "description": "How ``alphai_news_search`` read a free-text ``query`` — the echo that makes\na resolver miss legible. Before it, a query read as the wrong company or\ndiscarded entirely came back indistinguishable from a hit\n(issues/2026-08-16-freetext-query-resolves-jane-street-to-janl.md).\n\n``mode``: ``resolved`` — at least one query word became a filter that is\napplied to the items; ``overridden`` — the query resolved, but explicit\n``tickers``/``category`` replaced every filter it produced; ``unresolved`` —\nno query word matched a ticker, company name or topic word, so the items\nare NOT matches for the query (``note`` says what they are instead).\n``ignored_terms`` lists the content words that matched nothing; stopwords\nare dropped silently. ``note`` is one or two plain sentences an agent can act\non, same role as ``ticker_note``.", - "properties": { - "category": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "category_term": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "ignored_terms": { - "items": { - "type": "string" - }, - "type": "array" - }, - "mode": { - "enum": [ - "resolved", - "overridden", - "unresolved" - ], - "type": "string" - }, - "note": { - "default": "", - "type": "string" - }, - "search": { - "anyOf": [ - { - "description": "How the text search read the query (docs/HYBRID_NEWS_SEARCH_PLAN.md\nstep 2): ``strict`` = every term required; ``broadened`` = fewer strict\nmatches than the threshold, so any rare term plus at least two of the\nterms; ``no_match``; ``no_terms``. ``sort`` is ``published`` when every\nterm is a very common word (newest matches, not best). ``terms`` are the\nnormalized (stemmed) lexemes the index holds. ``matched`` counts the\nvisible matches inside the bounded candidate set, never a global total.", - "properties": { - "engine": { - "default": "postgres", - "enum": [ - "postgres", - "meilisearch" - ], - "type": "string" - }, - "matched": { - "default": 0, - "type": "integer" - }, - "mode": { - "enum": [ - "strict", - "broadened", - "no_match", - "no_terms" - ], - "type": "string" - }, - "optional_terms": { - "items": { - "type": "string" - }, - "type": "array" - }, - "required_terms": { - "items": { - "type": "string" - }, - "type": "array" - }, - "sort": { - "enum": [ - "relevance", - "published" - ], - "type": "string" - }, - "terms": { - "items": { - "type": "string" - }, - "type": "array" - }, - "window_from": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "mode", - "sort" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "tickers": { - "items": { - "description": "One ticker a free-text ``query`` resolved to (docs/HYBRID_NEWS_SEARCH_PLAN.md\nstep 1). ``name`` is the issuer's registered name, so an agent can see that\n\"PMI\" was read as Picard Medical rather than the ISM purchasing-managers\nindex; ``term`` is the query word that produced it (share-class siblings\ninherit the seed word's term).", - "properties": { - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "term": { - "type": "string" - }, - "ticker": { - "type": "string" - } - }, - "required": [ - "ticker", - "term" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "mode" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "How ``alphai_news_search`` read a free-text ``query`` — the echo that makes\na resolver miss legible. Before it, a query read as the wrong company or\ndiscarded entirely came back indistinguishable from a hit\n(issues/2026-08-16-freetext-query-resolves-jane-street-to-janl.md).\n\n``mode``: ``searched`` — the text search served the items\n(``NEWS_SEARCH_MODE=on``, the normal state since 2026-09-23): ``search``\nsays what selected them, ``tickers``/``category`` only say what the words\nwere ALSO read as (reference, never a filter) and ``ignored_terms`` is\nempty, because nothing was ignored — the whole text was searched. Before\nthis (review finding 1a/1b, 2026-09-23) the text path echoed the\nresolver's ``resolved`` + its ``ignored_terms`` next to a ``search`` block\nwhose ``terms`` were those very words, and a read category looked applied\nwhile nothing but the text filtered the items. The resolver modes describe\nthe fallback when the text search is switched off: ``resolved`` — at least\none query word became a filter that is applied to the items;\n``overridden`` — the query resolved, but explicit ``tickers``/``category``\nreplaced every filter it produced; ``unresolved`` — no query word matched a\nticker, company name or topic word, so the items are NOT matches for the\nquery (``note`` says what they are instead). ``ignored_terms`` then lists\nthe content words that matched nothing; stopwords are dropped silently.\n``note`` is one or two plain sentences an agent can act on, same role as\n``ticker_note``.", + "properties": { + "category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "category_term": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ignored_terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "mode": { + "enum": [ + "searched", + "resolved", + "overridden", + "unresolved" + ], + "type": "string" + }, + "note": { + "default": "", + "type": "string" + }, + "search": { + "anyOf": [ + { + "description": "How the text search read the query (docs/HYBRID_NEWS_SEARCH_PLAN.md\nstep 2): ``strict`` = every term required; ``broadened`` = fewer strict\nmatches than the threshold, so the most common words were dropped first\nand every item carries at least two of the terms; ``no_match``;\n``no_terms``. ``sort`` is ``published`` when every term is a very common\nword (newest matches, not best). ``terms`` are the normalized words that\nwere searched. ``required_terms`` is filled only when the search reports\nwhich words every broadened row had to carry (the Postgres path does, the\nengine does not) — ``search_match.terms_matched`` on each item is the\ncount to trust. ``matched`` counts the visible matches inside the bounded\ncandidate set, never a global total. Which engine answered is NOT part of\nthe contract: it goes to the search log (``ranking_version``). The\n``engine`` field that shipped with 1.41.0 was read by an external review\nas an implementation leak, and it was one — a client has no action on\n\"meilisearch\" (issues/2026-09-23-news-search-review-triage.md).", + "properties": { + "matched": { + "default": 0, + "type": "integer" + }, + "mode": { + "enum": [ + "strict", + "broadened", + "no_match", + "no_terms" + ], + "type": "string" + }, + "optional_terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "required_terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sort": { + "enum": [ + "relevance", + "published" + ], + "type": "string" + }, + "terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "window_from": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "mode", + "sort" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "tickers": { + "items": { + "description": "One ticker a free-text ``query`` resolved to (docs/HYBRID_NEWS_SEARCH_PLAN.md\nstep 1). ``name`` is the issuer's registered name, so an agent can see that\n\"PMI\" was read as Picard Medical rather than the ISM purchasing-managers\nindex; ``term`` is the query word that produced it (share-class siblings\ninherit the seed word's term).", + "properties": { + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "term": { + "type": "string" + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker", + "term" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "mode" + ], + "type": "object" + }, + { + "type": "null" + } +]
9 tool updates
- Changed
alphai_actionable_now1 field changed- added
Output schema / properties / result / items / properties / search_matchAdded value: +{ + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
alphai_article1 field changed- added
Output schema / properties / search_matchAdded value: +{ + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
alphai_insider_news2 fields changed- added
Output schema / properties / items / items / properties / search_matchAdded value: +{ + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / query_interpretationAdded value: +{ + "anyOf": [ + { + "description": "How ``alphai_news_search`` read a free-text ``query`` — the echo that makes\na resolver miss legible. Before it, a query read as the wrong company or\ndiscarded entirely came back indistinguishable from a hit\n(issues/2026-08-16-freetext-query-resolves-jane-street-to-janl.md).\n\n``mode``: ``resolved`` — at least one query word became a filter that is\napplied to the items; ``overridden`` — the query resolved, but explicit\n``tickers``/``category`` replaced every filter it produced; ``unresolved`` —\nno query word matched a ticker, company name or topic word, so the items\nare NOT matches for the query (``note`` says what they are instead).\n``ignored_terms`` lists the content words that matched nothing; stopwords\nare dropped silently. ``note`` is one or two plain sentences an agent can act\non, same role as ``ticker_note``.", + "properties": { + "category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "category_term": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ignored_terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "mode": { + "enum": [ + "resolved", + "overridden", + "unresolved" + ], + "type": "string" + }, + "note": { + "default": "", + "type": "string" + }, + "search": { + "anyOf": [ + { + "description": "How the text search read the query (docs/HYBRID_NEWS_SEARCH_PLAN.md\nstep 2): ``strict`` = every term required; ``broadened`` = fewer strict\nmatches than the threshold, so any rare term plus at least two of the\nterms; ``no_match``; ``no_terms``. ``sort`` is ``published`` when every\nterm is a very common word (newest matches, not best). ``terms`` are the\nnormalized (stemmed) lexemes the index holds. ``matched`` counts the\nvisible matches inside the bounded candidate set, never a global total.", + "properties": { + "engine": { + "default": "postgres", + "enum": [ + "postgres", + "meilisearch" + ], + "type": "string" + }, + "matched": { + "default": 0, + "type": "integer" + }, + "mode": { + "enum": [ + "strict", + "broadened", + "no_match", + "no_terms" + ], + "type": "string" + }, + "optional_terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "required_terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sort": { + "enum": [ + "relevance", + "published" + ], + "type": "string" + }, + "terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "window_from": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "mode", + "sort" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "tickers": { + "items": { + "description": "One ticker a free-text ``query`` resolved to (docs/HYBRID_NEWS_SEARCH_PLAN.md\nstep 1). ``name`` is the issuer's registered name, so an agent can see that\n\"PMI\" was read as Picard Medical rather than the ISM purchasing-managers\nindex; ``term`` is the query word that produced it (share-class siblings\ninherit the seed word's term).", + "properties": { + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "term": { + "type": "string" + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker", + "term" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "mode" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
alphai_macro1 field changed- added
Output schema / properties / result / items / properties / search_matchAdded value: +{ + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
alphai_news_search3 fields changed- changed
Input schema / properties / query / descriptionPrevious value: -"Free-text query (company names / tickers / topic words) resolved to ticker + category filters."New value: +"Free-text query (company names / tickers / topic words) resolved to ticker + category filters; how it was read comes back in query_interpretation." - added
Output schema / properties / items / items / properties / search_matchAdded value: +{ + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / query_interpretationAdded value: +{ + "anyOf": [ + { + "description": "How ``alphai_news_search`` read a free-text ``query`` — the echo that makes\na resolver miss legible. Before it, a query read as the wrong company or\ndiscarded entirely came back indistinguishable from a hit\n(issues/2026-08-16-freetext-query-resolves-jane-street-to-janl.md).\n\n``mode``: ``resolved`` — at least one query word became a filter that is\napplied to the items; ``overridden`` — the query resolved, but explicit\n``tickers``/``category`` replaced every filter it produced; ``unresolved`` —\nno query word matched a ticker, company name or topic word, so the items\nare NOT matches for the query (``note`` says what they are instead).\n``ignored_terms`` lists the content words that matched nothing; stopwords\nare dropped silently. ``note`` is one or two plain sentences an agent can act\non, same role as ``ticker_note``.", + "properties": { + "category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "category_term": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ignored_terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "mode": { + "enum": [ + "resolved", + "overridden", + "unresolved" + ], + "type": "string" + }, + "note": { + "default": "", + "type": "string" + }, + "search": { + "anyOf": [ + { + "description": "How the text search read the query (docs/HYBRID_NEWS_SEARCH_PLAN.md\nstep 2): ``strict`` = every term required; ``broadened`` = fewer strict\nmatches than the threshold, so any rare term plus at least two of the\nterms; ``no_match``; ``no_terms``. ``sort`` is ``published`` when every\nterm is a very common word (newest matches, not best). ``terms`` are the\nnormalized (stemmed) lexemes the index holds. ``matched`` counts the\nvisible matches inside the bounded candidate set, never a global total.", + "properties": { + "engine": { + "default": "postgres", + "enum": [ + "postgres", + "meilisearch" + ], + "type": "string" + }, + "matched": { + "default": 0, + "type": "integer" + }, + "mode": { + "enum": [ + "strict", + "broadened", + "no_match", + "no_terms" + ], + "type": "string" + }, + "optional_terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "required_terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sort": { + "enum": [ + "relevance", + "published" + ], + "type": "string" + }, + "terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "window_from": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "mode", + "sort" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "tickers": { + "items": { + "description": "One ticker a free-text ``query`` resolved to (docs/HYBRID_NEWS_SEARCH_PLAN.md\nstep 1). ``name`` is the issuer's registered name, so an agent can see that\n\"PMI\" was read as Picard Medical rather than the ISM purchasing-managers\nindex; ``term`` is the query word that produced it (share-class siblings\ninherit the seed word's term).", + "properties": { + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "term": { + "type": "string" + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker", + "term" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "mode" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
alphai_pair_analysis3 fields changed- added
Output schema / properties / a_recent / items / properties / search_matchAdded value: +{ + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / b_recent / items / properties / search_matchAdded value: +{ + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / both / items / properties / search_matchAdded value: +{ + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
alphai_radar2 fields changed- added
Output schema / properties / event_contextAdded value: +{ + "properties": { + "age_seconds": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "as_of": { + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "cluster_lookback_days": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "filings_lookback_days": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "generated_at": { + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "identity_scope": { + "const": "issuer_cik", + "default": "issuer_cik", + "type": "string" + }, + "max_age_seconds": { + "const": 300, + "default": 300, + "type": "integer" + }, + "point_in_time": { + "const": false, + "default": false, + "type": "boolean" + }, + "reason": { + "anyOf": [ + { + "enum": [ + "disabled", + "missing", + "stale", + "future", + "invalid", + "read_failed" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": "missing" + }, + "status": { + "default": "unavailable", + "enum": [ + "available", + "unavailable" + ], + "type": "string" + } + }, + "type": "object" +} - added
Output schema / properties / results / items / properties / event_contextAdded value: +{ + "anyOf": [ + { + "properties": { + "cik": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "cluster_buys": { + "default": [], + "items": { + "properties": { + "buyers": { + "type": "integer" + }, + "evidence": { + "items": { + "properties": { + "accession_number": { + "type": "string" + }, + "filed_at": { + "format": "date-time", + "type": "string" + }, + "sec_url": { + "type": "string" + } + }, + "required": [ + "accession_number", + "filed_at", + "sec_url" + ], + "type": "object" + }, + "type": "array" + }, + "evidence_truncated": { + "type": "boolean" + }, + "filings_count": { + "type": "integer" + }, + "known_at": { + "format": "date-time", + "type": "string" + }, + "officer_director_buyers": { + "type": "integer" + }, + "pattern": { + "const": "open_market", + "default": "open_market", + "type": "string" + }, + "window_end": { + "format": "date", + "type": "string" + }, + "window_start": { + "format": "date", + "type": "string" + } + }, + "required": [ + "window_start", + "window_end", + "known_at", + "buyers", + "officer_director_buyers", + "filings_count", + "evidence", + "evidence_truncated" + ], + "type": "object" + }, + "type": "array" + }, + "cluster_buys_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "filings": { + "default": [], + "items": { + "properties": { + "accession_number": { + "type": "string" + }, + "event_date": { + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "format": "date-time", + "type": "string" + }, + "form": { + "enum": [ + "8-K", + "6-K" + ], + "type": "string" + }, + "items": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "kind": { + "anyOf": [ + { + "const": "earnings_release", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "news_uid": { + "type": "string" + }, + "observed_at": { + "format": "date-time", + "type": "string" + }, + "period_label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "primary_item": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sec_url": { + "type": "string" + } + }, + "required": [ + "form", + "accession_number", + "filed_at", + "observed_at", + "sec_url", + "news_uid" + ], + "type": "object" + }, + "type": "array" + }, + "filings_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "reason": { + "anyOf": [ + { + "enum": [ + "non_sec_symbol", + "unknown_symbol", + "missing_cik", + "issuer_changed" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "status": { + "enum": [ + "available", + "unsupported", + "unavailable" + ], + "type": "string" + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker", + "cik", + "status" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
alphai_ticker_news2 fields changed- added
Output schema / properties / items / items / properties / search_matchAdded value: +{ + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / query_interpretationAdded value: +{ + "anyOf": [ + { + "description": "How ``alphai_news_search`` read a free-text ``query`` — the echo that makes\na resolver miss legible. Before it, a query read as the wrong company or\ndiscarded entirely came back indistinguishable from a hit\n(issues/2026-08-16-freetext-query-resolves-jane-street-to-janl.md).\n\n``mode``: ``resolved`` — at least one query word became a filter that is\napplied to the items; ``overridden`` — the query resolved, but explicit\n``tickers``/``category`` replaced every filter it produced; ``unresolved`` —\nno query word matched a ticker, company name or topic word, so the items\nare NOT matches for the query (``note`` says what they are instead).\n``ignored_terms`` lists the content words that matched nothing; stopwords\nare dropped silently. ``note`` is one or two plain sentences an agent can act\non, same role as ``ticker_note``.", + "properties": { + "category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "category_term": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ignored_terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "mode": { + "enum": [ + "resolved", + "overridden", + "unresolved" + ], + "type": "string" + }, + "note": { + "default": "", + "type": "string" + }, + "search": { + "anyOf": [ + { + "description": "How the text search read the query (docs/HYBRID_NEWS_SEARCH_PLAN.md\nstep 2): ``strict`` = every term required; ``broadened`` = fewer strict\nmatches than the threshold, so any rare term plus at least two of the\nterms; ``no_match``; ``no_terms``. ``sort`` is ``published`` when every\nterm is a very common word (newest matches, not best). ``terms`` are the\nnormalized (stemmed) lexemes the index holds. ``matched`` counts the\nvisible matches inside the bounded candidate set, never a global total.", + "properties": { + "engine": { + "default": "postgres", + "enum": [ + "postgres", + "meilisearch" + ], + "type": "string" + }, + "matched": { + "default": 0, + "type": "integer" + }, + "mode": { + "enum": [ + "strict", + "broadened", + "no_match", + "no_terms" + ], + "type": "string" + }, + "optional_terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "required_terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sort": { + "enum": [ + "relevance", + "published" + ], + "type": "string" + }, + "terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "window_from": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "mode", + "sort" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "tickers": { + "items": { + "description": "One ticker a free-text ``query`` resolved to (docs/HYBRID_NEWS_SEARCH_PLAN.md\nstep 1). ``name`` is the issuer's registered name, so an agent can see that\n\"PMI\" was read as Picard Medical rather than the ISM purchasing-managers\nindex; ``term`` is the query word that produced it (share-class siblings\ninherit the seed word's term).", + "properties": { + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "term": { + "type": "string" + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker", + "term" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "mode" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
alphai_trending1 field changed- added
Output schema / properties / result / items / properties / search_matchAdded value: +{ + "anyOf": [ + { + "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.", + "properties": { + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "score": { + "type": "number" + }, + "terms_matched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "score" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +}
1 tool update
- Added
alphai_insider_clusters
8 tool updates
- Changed
alphai_actionable_now1 field changed- added
Output schema / properties / result / items / properties / filingAdded value: +{ + "anyOf": [ + { + "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", + "properties": { + "accession_number": { + "type": "string" + }, + "event_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "exhibit_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "primary_item": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "items", + "accession_number", + "filed_at" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
alphai_article1 field changed- added
Output schema / properties / filingAdded value: +{ + "anyOf": [ + { + "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", + "properties": { + "accession_number": { + "type": "string" + }, + "event_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "exhibit_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "primary_item": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "items", + "accession_number", + "filed_at" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
alphai_insider_news1 field changed- added
Output schema / properties / items / items / properties / filingAdded value: +{ + "anyOf": [ + { + "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", + "properties": { + "accession_number": { + "type": "string" + }, + "event_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "exhibit_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "primary_item": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "items", + "accession_number", + "filed_at" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
alphai_macro1 field changed- added
Output schema / properties / result / items / properties / filingAdded value: +{ + "anyOf": [ + { + "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", + "properties": { + "accession_number": { + "type": "string" + }, + "event_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "exhibit_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "primary_item": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "items", + "accession_number", + "filed_at" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
alphai_news_search3 fields changed- added
Input schema / properties / itemAdded value: +{ + "anyOf": [ + { + "pattern": "^\\d\\.\\d{2}$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "8-K item code (e.g. '5.02', '8.01', '1.01'): keep only 8-K filings carrying it — any item of the filing. Implies source_type=['sec_form8k']; any other source_type is an error." +} - added
Input schema / properties / source_typeAdded value: +{ + "anyOf": [ + { + "items": { + "description": "Ingestion source of a news row.", + "enum": [ + "alpha_vantage", + "gdelt", + "sec_form4", + "sec_form8k", + "sec_form6k" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Restrict to these ingest sources (OR): gdelt = press coverage, sec_form4 = insider transactions, sec_form8k = 8-K current reports, sec_form6k = foreign issuers' 6-K earnings releases." +} - added
Output schema / properties / items / items / properties / filingAdded value: +{ + "anyOf": [ + { + "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", + "properties": { + "accession_number": { + "type": "string" + }, + "event_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "exhibit_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "primary_item": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "items", + "accession_number", + "filed_at" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
alphai_pair_analysis3 fields changed- added
Output schema / properties / a_recent / items / properties / filingAdded value: +{ + "anyOf": [ + { + "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", + "properties": { + "accession_number": { + "type": "string" + }, + "event_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "exhibit_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "primary_item": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "items", + "accession_number", + "filed_at" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / b_recent / items / properties / filingAdded value: +{ + "anyOf": [ + { + "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", + "properties": { + "accession_number": { + "type": "string" + }, + "event_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "exhibit_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "primary_item": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "items", + "accession_number", + "filed_at" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / both / items / properties / filingAdded value: +{ + "anyOf": [ + { + "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", + "properties": { + "accession_number": { + "type": "string" + }, + "event_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "exhibit_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "primary_item": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "items", + "accession_number", + "filed_at" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
alphai_ticker_news1 field changed- added
Output schema / properties / items / items / properties / filingAdded value: +{ + "anyOf": [ + { + "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", + "properties": { + "accession_number": { + "type": "string" + }, + "event_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "exhibit_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "primary_item": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "items", + "accession_number", + "filed_at" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
alphai_trending1 field changed- added
Output schema / properties / result / items / properties / filingAdded value: +{ + "anyOf": [ + { + "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.", + "properties": { + "accession_number": { + "type": "string" + }, + "event_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "exhibit_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "primary_item": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "items", + "accession_number", + "filed_at" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +}
1 tool update
- Added
alphai_radar
1 tool update
- Added
alphai_watchlist_brief
1 tool update
- Changed
alphai_earnings1 field changed- changed
Output schema / properties / reports / items / descriptionPrevious value: -"One published AlphaAI earnings read, as served by ``alphai_earnings``."New value: +"One published AlphAI earnings read, as served by ``alphai_earnings``."
13 tool updates
- Changed
alphai_actionable_now6 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Stories; capped at 10 Basic / 50 Pro."New value: +"Stories; capped at 20 Free/Basic, 50 Pro." - added
Output schema / properties / result / items / properties / created_atAdded value: +{ + "type": "string" +} - added
Output schema / properties / result / items / properties / earningsAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / result / items / properties / insiderAdded value: +{ + "anyOf": [ + { + "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", + "properties": { + "avg_price_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "insider_name": { + "type": "string" + }, + "insider_title": { + "type": "string" + }, + "is_10b5_1": { + "type": "boolean" + }, + "is_director": { + "type": "boolean" + }, + "is_officer": { + "type": "boolean" + }, + "is_ten_percent_owner": { + "type": "boolean" + }, + "late_filing": { + "type": "boolean" + }, + "shares": { + "type": "string" + }, + "side": { + "type": "string" + }, + "total_value_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "transaction_code": { + "type": "string" + }, + "transaction_date": { + "type": "string" + } + }, + "required": [ + "side", + "transaction_code", + "shares", + "is_10b5_1", + "insider_name", + "insider_title", + "is_officer", + "is_director", + "is_ten_percent_owner", + "transaction_date", + "filed_at", + "late_filing" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / result / items / properties / source_typeAdded value: +{ + "default": "", + "type": "string" +} - changed
Output schema / properties / result / items / requiredPrevious value: -[ - "uid", - "title", - "url", - "source", - "source_domain", - "summary", - "category", - "relevance_score", - "time_published" -]New value: +[ + "uid", + "title", + "url", + "source", + "source_domain", + "summary", + "category", + "relevance_score", + "time_published", + "created_at" +]
- Changed
alphai_alerts_list1 field changed- added
Output schema / properties / alerts / items / properties / noteAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
alphai_alerts_subscribe1 field changed- added
Output schema / properties / noteAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
alphai_article5 fields changed- added
Output schema / properties / created_atAdded value: +{ + "type": "string" +} - added
Output schema / properties / earningsAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / insiderAdded value: +{ + "anyOf": [ + { + "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", + "properties": { + "avg_price_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "insider_name": { + "type": "string" + }, + "insider_title": { + "type": "string" + }, + "is_10b5_1": { + "type": "boolean" + }, + "is_director": { + "type": "boolean" + }, + "is_officer": { + "type": "boolean" + }, + "is_ten_percent_owner": { + "type": "boolean" + }, + "late_filing": { + "type": "boolean" + }, + "shares": { + "type": "string" + }, + "side": { + "type": "string" + }, + "total_value_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "transaction_code": { + "type": "string" + }, + "transaction_date": { + "type": "string" + } + }, + "required": [ + "side", + "transaction_code", + "shares", + "is_10b5_1", + "insider_name", + "insider_title", + "is_officer", + "is_director", + "is_ten_percent_owner", + "transaction_date", + "filed_at", + "late_filing" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / source_typeAdded value: +{ + "default": "", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "uid", - "title", - "url", - "source", - "source_domain", - "summary", - "category", - "relevance_score", - "time_published" -]New value: +[ + "uid", + "title", + "url", + "source", + "source_domain", + "summary", + "category", + "relevance_score", + "time_published", + "created_at" +]
- Added
alphai_calendar - Added
alphai_earnings - Changed
alphai_insider_news13 fields changed- changed
Input schema / properties / from_date / descriptionPrevious value: -"On/after this ISO time (UTC if naive)."New value: +"On/after this ISO time (UTC if naive); a bare date means that day's midnight." - added
Input schema / properties / is_10b5_1Added value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Rule 10b5-1 filter, on the same field each item's insider block reports. Omit for every event; false = discretionary trades only (a 10b5-1 ladder was scheduled months earlier, so it carries no timing decision); true = plan events only. Event-level: a filing mixing plan and discretionary tranches counts as a plan event." +} - changed
Input schema / properties / page_size / descriptionPrevious value: -"Items/page; capped at 10 Basic / 50 Pro."New value: +"Items/page; capped at 20 Free/Basic, 50 Pro." - added
Input schema / properties / sortAdded value: +{ + "anyOf": [ + { + "enum": [ + "published", + "ingested" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "published (default): newest first. ingested: delta polling — only Form 4 events added since your cursor, ascending; next_cursor is always returned (empty items = caught up, keep the cursor and poll later). Prefer this for watching insider activity: a filing arrives days after its transaction date, so it can land below the newest page of a publish-ordered feed. A cursor only works with the sort mode that issued it." +} - changed
Input schema / properties / to_date / descriptionPrevious value: -"On/before this ISO time (UTC if naive)."New value: +"On/before this ISO time (UTC if naive); a bare date covers that whole day. Bounds when the filing reached the feed, not the insider's transaction_date." - added
Output schema / properties / delistedAdded value: +{ + "default": false, + "type": "boolean" +} - added
Output schema / properties / items / items / properties / created_atAdded value: +{ + "type": "string" +} - added
Output schema / properties / items / items / properties / earningsAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / items / items / properties / insiderAdded value: +{ + "anyOf": [ + { + "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", + "properties": { + "avg_price_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "insider_name": { + "type": "string" + }, + "insider_title": { + "type": "string" + }, + "is_10b5_1": { + "type": "boolean" + }, + "is_director": { + "type": "boolean" + }, + "is_officer": { + "type": "boolean" + }, + "is_ten_percent_owner": { + "type": "boolean" + }, + "late_filing": { + "type": "boolean" + }, + "shares": { + "type": "string" + }, + "side": { + "type": "string" + }, + "total_value_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "transaction_code": { + "type": "string" + }, + "transaction_date": { + "type": "string" + } + }, + "required": [ + "side", + "transaction_code", + "shares", + "is_10b5_1", + "insider_name", + "insider_title", + "is_officer", + "is_director", + "is_ten_percent_owner", + "transaction_date", + "filed_at", + "late_filing" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / items / items / properties / source_typeAdded value: +{ + "default": "", + "type": "string" +} - changed
Output schema / properties / items / items / requiredPrevious value: -[ - "uid", - "title", - "url", - "source", - "source_domain", - "summary", - "category", - "relevance_score", - "time_published" -]New value: +[ + "uid", + "title", + "url", + "source", + "source_domain", + "summary", + "category", + "relevance_score", + "time_published", + "created_at" +] - added
Output schema / properties / renamed_toAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / ticker_noteAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
- Added
alphai_macro - Changed
alphai_news_search12 fields changed- changed
Input schema / properties / from_date / descriptionPrevious value: -"News on/after this ISO time (UTC if naive)."New value: +"News on/after this ISO time (UTC if naive); a bare date means that day's midnight." - changed
Input schema / properties / page_size / descriptionPrevious value: -"Items/page; capped at 10 Basic / 50 Pro."New value: +"Items/page; capped at 20 Free/Basic, 50 Pro." - added
Input schema / properties / sortAdded value: +{ + "anyOf": [ + { + "enum": [ + "published", + "ingested" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "published (default): newest first, next_cursor pages into older history. ingested: delta polling — rows in the order they became available, ascending; next_cursor is always returned (empty items = caught up, keep the cursor and poll later); time_published is not monotonic within a page. A cursor only works with the sort mode that issued it." +} - changed
Input schema / properties / to_date / descriptionPrevious value: -"News on/before this ISO time (UTC if naive)."New value: +"News on/before this ISO time (UTC if naive). A bare date (2026-06-01) covers that WHOLE day, so from_date=to_date=<day> returns the day — same reading as REST /api/news/." - added
Output schema / properties / delistedAdded value: +{ + "default": false, + "type": "boolean" +} - added
Output schema / properties / items / items / properties / created_atAdded value: +{ + "type": "string" +} - added
Output schema / properties / items / items / properties / earningsAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / items / items / properties / insiderAdded value: +{ + "anyOf": [ + { + "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", + "properties": { + "avg_price_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "insider_name": { + "type": "string" + }, + "insider_title": { + "type": "string" + }, + "is_10b5_1": { + "type": "boolean" + }, + "is_director": { + "type": "boolean" + }, + "is_officer": { + "type": "boolean" + }, + "is_ten_percent_owner": { + "type": "boolean" + }, + "late_filing": { + "type": "boolean" + }, + "shares": { + "type": "string" + }, + "side": { + "type": "string" + }, + "total_value_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "transaction_code": { + "type": "string" + }, + "transaction_date": { + "type": "string" + } + }, + "required": [ + "side", + "transaction_code", + "shares", + "is_10b5_1", + "insider_name", + "insider_title", + "is_officer", + "is_director", + "is_ten_percent_owner", + "transaction_date", + "filed_at", + "late_filing" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / items / items / properties / source_typeAdded value: +{ + "default": "", + "type": "string" +} - changed
Output schema / properties / items / items / requiredPrevious value: -[ - "uid", - "title", - "url", - "source", - "source_domain", - "summary", - "category", - "relevance_score", - "time_published" -]New value: +[ + "uid", + "title", + "url", + "source", + "source_domain", + "summary", + "category", + "relevance_score", + "time_published", + "created_at" +] - added
Output schema / properties / renamed_toAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / ticker_noteAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
alphai_pair_analysis15 fields changed- added
Output schema / properties / a_recent / items / properties / created_atAdded value: +{ + "type": "string" +} - added
Output schema / properties / a_recent / items / properties / earningsAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / a_recent / items / properties / insiderAdded value: +{ + "anyOf": [ + { + "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", + "properties": { + "avg_price_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "insider_name": { + "type": "string" + }, + "insider_title": { + "type": "string" + }, + "is_10b5_1": { + "type": "boolean" + }, + "is_director": { + "type": "boolean" + }, + "is_officer": { + "type": "boolean" + }, + "is_ten_percent_owner": { + "type": "boolean" + }, + "late_filing": { + "type": "boolean" + }, + "shares": { + "type": "string" + }, + "side": { + "type": "string" + }, + "total_value_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "transaction_code": { + "type": "string" + }, + "transaction_date": { + "type": "string" + } + }, + "required": [ + "side", + "transaction_code", + "shares", + "is_10b5_1", + "insider_name", + "insider_title", + "is_officer", + "is_director", + "is_ten_percent_owner", + "transaction_date", + "filed_at", + "late_filing" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / a_recent / items / properties / source_typeAdded value: +{ + "default": "", + "type": "string" +} - changed
Output schema / properties / a_recent / items / requiredPrevious value: -[ - "uid", - "title", - "url", - "source", - "source_domain", - "summary", - "category", - "relevance_score", - "time_published" -]New value: +[ + "uid", + "title", + "url", + "source", + "source_domain", + "summary", + "category", + "relevance_score", + "time_published", + "created_at" +] - added
Output schema / properties / b_recent / items / properties / created_atAdded value: +{ + "type": "string" +} - added
Output schema / properties / b_recent / items / properties / earningsAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / b_recent / items / properties / insiderAdded value: +{ + "anyOf": [ + { + "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", + "properties": { + "avg_price_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "insider_name": { + "type": "string" + }, + "insider_title": { + "type": "string" + }, + "is_10b5_1": { + "type": "boolean" + }, + "is_director": { + "type": "boolean" + }, + "is_officer": { + "type": "boolean" + }, + "is_ten_percent_owner": { + "type": "boolean" + }, + "late_filing": { + "type": "boolean" + }, + "shares": { + "type": "string" + }, + "side": { + "type": "string" + }, + "total_value_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "transaction_code": { + "type": "string" + }, + "transaction_date": { + "type": "string" + } + }, + "required": [ + "side", + "transaction_code", + "shares", + "is_10b5_1", + "insider_name", + "insider_title", + "is_officer", + "is_director", + "is_ten_percent_owner", + "transaction_date", + "filed_at", + "late_filing" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / b_recent / items / properties / source_typeAdded value: +{ + "default": "", + "type": "string" +} - changed
Output schema / properties / b_recent / items / requiredPrevious value: -[ - "uid", - "title", - "url", - "source", - "source_domain", - "summary", - "category", - "relevance_score", - "time_published" -]New value: +[ + "uid", + "title", + "url", + "source", + "source_domain", + "summary", + "category", + "relevance_score", + "time_published", + "created_at" +] - added
Output schema / properties / both / items / properties / created_atAdded value: +{ + "type": "string" +} - added
Output schema / properties / both / items / properties / earningsAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / both / items / properties / insiderAdded value: +{ + "anyOf": [ + { + "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", + "properties": { + "avg_price_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "insider_name": { + "type": "string" + }, + "insider_title": { + "type": "string" + }, + "is_10b5_1": { + "type": "boolean" + }, + "is_director": { + "type": "boolean" + }, + "is_officer": { + "type": "boolean" + }, + "is_ten_percent_owner": { + "type": "boolean" + }, + "late_filing": { + "type": "boolean" + }, + "shares": { + "type": "string" + }, + "side": { + "type": "string" + }, + "total_value_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "transaction_code": { + "type": "string" + }, + "transaction_date": { + "type": "string" + } + }, + "required": [ + "side", + "transaction_code", + "shares", + "is_10b5_1", + "insider_name", + "insider_title", + "is_officer", + "is_director", + "is_ten_percent_owner", + "transaction_date", + "filed_at", + "late_filing" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / both / items / properties / source_typeAdded value: +{ + "default": "", + "type": "string" +} - changed
Output schema / properties / both / items / requiredPrevious value: -[ - "uid", - "title", - "url", - "source", - "source_domain", - "summary", - "category", - "relevance_score", - "time_published" -]New value: +[ + "uid", + "title", + "url", + "source", + "source_domain", + "summary", + "category", + "relevance_score", + "time_published", + "created_at" +]
- Changed
alphai_ticker_news11 fields changed- added
Input schema / properties / min_relevanceAdded value: +{ + "default": 4, + "description": "Minimum AI relevance score, 1-10.", + "maximum": 10, + "minimum": 1, + "type": "integer" +} - changed
Input schema / properties / page_size / descriptionPrevious value: -"Items/page; capped at 10 Basic / 50 Pro."New value: +"Items/page; capped at 20 Free/Basic, 50 Pro." - added
Input schema / properties / sortAdded value: +{ + "anyOf": [ + { + "enum": [ + "published", + "ingested" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "published (default): newest first. ingested: delta polling — only rows added since your cursor, ascending; next_cursor is always returned (empty items = caught up, keep the cursor and poll later). A cursor only works with the sort mode that issued it." +} - added
Output schema / properties / delistedAdded value: +{ + "default": false, + "type": "boolean" +} - added
Output schema / properties / items / items / properties / created_atAdded value: +{ + "type": "string" +} - added
Output schema / properties / items / items / properties / earningsAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / items / items / properties / insiderAdded value: +{ + "anyOf": [ + { + "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", + "properties": { + "avg_price_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "insider_name": { + "type": "string" + }, + "insider_title": { + "type": "string" + }, + "is_10b5_1": { + "type": "boolean" + }, + "is_director": { + "type": "boolean" + }, + "is_officer": { + "type": "boolean" + }, + "is_ten_percent_owner": { + "type": "boolean" + }, + "late_filing": { + "type": "boolean" + }, + "shares": { + "type": "string" + }, + "side": { + "type": "string" + }, + "total_value_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "transaction_code": { + "type": "string" + }, + "transaction_date": { + "type": "string" + } + }, + "required": [ + "side", + "transaction_code", + "shares", + "is_10b5_1", + "insider_name", + "insider_title", + "is_officer", + "is_director", + "is_ten_percent_owner", + "transaction_date", + "filed_at", + "late_filing" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / items / items / properties / source_typeAdded value: +{ + "default": "", + "type": "string" +} - changed
Output schema / properties / items / items / requiredPrevious value: -[ - "uid", - "title", - "url", - "source", - "source_domain", - "summary", - "category", - "relevance_score", - "time_published" -]New value: +[ + "uid", + "title", + "url", + "source", + "source_domain", + "summary", + "category", + "relevance_score", + "time_published", + "created_at" +] - added
Output schema / properties / renamed_toAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / ticker_noteAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
alphai_tickers1 field changed- added
Output schema / properties / items / items / properties / next_report_dateAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
alphai_trending6 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Stories; capped at 10 Basic / 50 Pro."New value: +"Stories; capped at 20 Free/Basic, 50 Pro." - added
Output schema / properties / result / items / properties / created_atAdded value: +{ + "type": "string" +} - added
Output schema / properties / result / items / properties / earningsAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / result / items / properties / insiderAdded value: +{ + "anyOf": [ + { + "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).", + "properties": { + "avg_price_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filed_at": { + "type": "string" + }, + "insider_name": { + "type": "string" + }, + "insider_title": { + "type": "string" + }, + "is_10b5_1": { + "type": "boolean" + }, + "is_director": { + "type": "boolean" + }, + "is_officer": { + "type": "boolean" + }, + "is_ten_percent_owner": { + "type": "boolean" + }, + "late_filing": { + "type": "boolean" + }, + "shares": { + "type": "string" + }, + "side": { + "type": "string" + }, + "total_value_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "transaction_code": { + "type": "string" + }, + "transaction_date": { + "type": "string" + } + }, + "required": [ + "side", + "transaction_code", + "shares", + "is_10b5_1", + "insider_name", + "insider_title", + "is_officer", + "is_director", + "is_ten_percent_owner", + "transaction_date", + "filed_at", + "late_filing" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / result / items / properties / source_typeAdded value: +{ + "default": "", + "type": "string" +} - changed
Output schema / properties / result / items / requiredPrevious value: -[ - "uid", - "title", - "url", - "source", - "source_domain", - "summary", - "category", - "relevance_score", - "time_published" -]New value: +[ + "uid", + "title", + "url", + "source", + "source_domain", + "summary", + "category", + "relevance_score", + "time_published", + "created_at" +]
Related MCP Connectors
Real-time financial news for AI agents: search by ticker and source, with sentiment and entities.
Financial intelligence for AI agents: market events, sentiment, technicals, news feed.
US stock market data for AI agents: SEC filings, financials, insider trades, 13F, options, macro.
Licensed, cited financial data for AI agents: news, filings, transcripts, research and tearsheets.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceProvides derived financial intelligence for AI agents, including insider activity analysis, earnings surprises, institutional moves, stock screening with a proprietary composite value score, and macro indicators.MIT

ultralayer-v0official
AlicenseNot gradedqualityBmaintenanceRealtime financial context for AI agents: what changed, who is affected, and what to watch next. One suite covering news, events, guidance, filing changes, sentiment, stakeholders, and alerts. Information-efficient responses with evidence for every result. First-class point-in-time safety for backtests. Pairs well with web search and a market-data API. All data is our own.3MIT- AlicenseAqualityAmaintenanceRead-only, source-linked news intelligence for AI agents: search The Neural Ledger's stories, retrieve story details with citations and revision history, and resolve related entities and assets. It is an evidence layer, not a trading or execution service.82MIT
- AlicenseAqualityAmaintenancePre-computed financial market intelligence for AI agents. Stocks, crypto, and ETFs.978 npm5MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.