Skip to main content
GET /api/v1/search is the default discovery route. Use it when the question is a topic (“what are writers saying about AI capex?”) rather than a ticker, person, or named publication. Free, no auth. Results are candidates — ranked post cards with priceCents. The synthesizedSummary still comes from the paid publication-post route. MCP: search_posts.

Request

q is required (minimum 2 characters). Default limit is 10.
Do not combine a platform that conflicts with source (for example platform=podcast with source=newsletter) — that returns 400. publishedAfter must not be later than publishedBefore. Search starts with publications curated for chat and can fall back to other indexed publications when the initial matches are weak. publicationSlug restricts the search to that publication. Disabled publications are excluded from returned items.

Response

matchConfidence is strong, weak, or none. Present each item as {title} ({publicationSlug}, YYYY-MM-DD) — $X.XX when priceCents is known. Keep publicationSlug + slug for the paid fetch. searchTierUsed is scoped or non_scoped. timeWindow describes a date window inferred from the query, or is null; freshnessCoverage reports coverage of that window and whether older results were used as a fallback. count is the number of returned items. totalCount is the number of ranked candidates before the response limit and disabled-publication filter, not a count of every matching article in the catalog. isPodcast is true for episodes — the paid post response then includes a transcript when ready. Invalid params return 400. Unexpected failures return 500 with error: "Search failed. Please retry.", code: "internal_error", and a recovery hint.

Topic search vs entity search vs company lookup