Search insights

Authentication

AuthorizationBearer

Bearer authentication of the form Bearer <token>, where token is your auth token.

OR
X-API-Keystring
API Key authentication via header

Request

This endpoint expects an object.
querystring or nullOptional<=2000 characters

Natural-language query, up to 2000 characters. When present, embedded and used for vector ANN ranking unless rank_by overrides. Whitespace-only is treated as absent.

tickerslist of strings or nullOptional
Filter to insights mentioning at least one of these tickers. OMIT to include untickered insights too.
typeslist of enums or nullOptional
mentionslist of objects or nullOptional
sentimentslist of enums or nullOptional

Coarse: insight has any mention with this sentiment. Set strict_ticker_sentiment_pair=true to enforce that the sentiment is on one of the requested tickers.

speaker_roleslist of enums or nullOptional
date_fromdatetime or nullOptional
date_todatetime or nullOptional
idslist of strings or nullOptional

Filter to specific insight ids (the id field on each hit, format in-...). Use this for deep-link / refresh round-trips where the FE already knows which insights it wants.

episode_idslist of strings or nullOptional

Filter to specific episodes (sonic_ingest_id). Powers the /episode/[id] page.

podcast_idslist of strings or nullOptional

Filter to all episodes of these podcasts (our minted sonic_podcast_id; the raw podscan_podcast_id is also accepted for back-compat). Resolved at request time via Mongo lookup, then expanded to episode_ids before the TPUF query. Powers the /pod/[id] page.

top_kintegerOptional1-25Defaults to 25

Results per page, up to 25. Further results are reachable via next_cursor.

cursorstring or nullOptional

Opaque pagination token from a previous response’s next_cursor. When set, every other field is ignored — the original query’s parameters are replayed server-side. Cursors expire after ~15 minutes. Client-tier keys only (internal callers page with top_k).

include_quotesbooleanOptionalDefaults to false

Attach the verbatim transcript passage to each hit as quote (same rendered text as GET /insights/{id}/quote). Transcripts are fetched from cold storage — expect roughly +0.5-1.5s per 25 results. Quotes are resolved for at most the first 100 hits; a hit whose transcript is unavailable carries quote: null and the search succeeds regardless.

Response

Successful Response
resultslist of objects
took_msinteger
next_cursorstring or null
pagination_endenum

Null while more pages exist. Otherwise why paging stopped: ranking_exhausted = the relevance ranking’s quality boundary (narrow the query for more depth); end_of_results = the browse window is fully paged.

Errors

400
Bad Request Error
401
Unauthorized Error
422
Unprocessable Entity Error
429
Too Many Requests Error
500
Internal Server Error