speaker_statement_characteristics: four labels that describe how a line is said, not what it is about. Use them to tell a confident prediction from a hedged aside, or a pointed criticism from a passing remark, without reading every line.
The four axes
Combinations read naturally:
specific + future is a concrete prediction, confident + positive + future is a bullish call, and negative + specific is a pointed criticism.
What a label means
- A pole label means the line clearly reads that way.
positive,hedged,specific,futureand the other poles are assigned only when the reading is clear. - The middle label means “not clearly either pole”. A borderline line takes
neutral(orpresentfortemporal_orientation), so the middle label is not a measurement of neutrality. Most lines sit in the middle on at least one axis. - Labels describe one statement, not the speaker. A guest who is bullish on a company can still make a hedged, backward-looking remark about it.
- Labels are read from the words. Tone of voice is not part of the reading, so sarcasm and irony can be misread.
- Labels keep their meaning over time. When the model that reads lines improves, each new version is held to the same standard before it labels anything.
Which lines carry them
- Lines in topic-discussion and interview segments. Lines in intros, outros, ad reads and other structural segments carry none, and neither do short lines such as “Yeah.” or “I don’t know.”
- Every line of a returned window: the
is_matchandis_mentionlines and the context lines around them. - The object is absent, not
null, on a line without labels.
Filtering by characteristics
Both endpoints take the same labels as a filter,speaker_statement_characteristics, which keeps only lines said a certain way. Each axis is a key, and its value is one or more of that axis’s labels, comma-separated:
- Labels on one axis match any of them.
speaker_statement_characteristics[sentiment]=positive,negativekeeps lines that lean clearly either way. - Axes combine with AND. Add only the axes you mean. An axis you leave out does not constrain anything.
- Every marked line meets the filter. On a filtered search, every
is_matchline carries labels the filter accepts, and a segment is returned only when one of its lines does. On filtered mentions, everyis_mentionline does, and an episode is returned only when one of its mentions does. Context lines around them are returned as usual, with their own labels. - An unknown axis or label is a
422that names it and lists the valid labels.
semantic_search and how it is said in the filter. “Optimistic predictions about AI drug discovery” is semantic_search=AI drug discovery with positive and future, not a longer search phrase.
Recipes
What the filter serves
- Episode search needs
semantic_search, which names the topic. Akeyword_searchalone returns422, because the filter reads lines found by meaning. Unquotedkeyword_searchwords can joinsemantic_searchto require those words in the segment (the defaultkeyword_match=required). A quoted phrase returns422, because a matched line cannot be required to say the phrase as well, and so doeskeyword_match=ranked, because filtered segments rank by their lines’ meaning and a ranking hint would change nothing.entity_id,company_id,entity_type,role,podcast_id,episode_id,language,since,until,sort,speakerand theguest_filters all combine with the filter. - Mentions need a subject with a knowledge graph entity. A subject matched by name returns
422. A filtered page checks a bounded number of candidate episodes, so a rare combination can return a short page with acursor: follow it to keep reading. - Whose lines. With
speakeror theguest_filters, only the lines the people they select say count, on both endpoints: confident predictions by cardiologists areguest_occupation=cardiologistswithcertainty=confidentandtemporal_orientation=future, and everyis_matchoris_mentionline is one of theirs. On search:- When more than 10,000 of their lines carry the labels, the newest 10,000 are searched. Narrow with
since,until,podcast_idor another label to reach older ones. - The
guest_filters must nameguest_occupation,guest_fieldorguest_capacity, which the otherguest_filters narrow, and may select at most 5,000 guests with at most 50,000 appearances between them. A broader filter returns422; narrow it withguest_practicing,guest_seniority,guest_standingor a narrowerguest_occupation. speakermust be a person with a person record; one known only as an entity returns422.
- When more than 10,000 of their lines carry the labels, the newest 10,000 are searched. Narrow with
In MCP
particle_podcast_search_transcripts and particle_podcast_find_mentions end each line with its pole labels, for example _[confident · positive · future]_. Middle labels are left out of that short form; _[neutral]_ marks a line that leans clearly on no axis, and a line without brackets carries no labels. With output_format=json, each line has the full speaker_statement_characteristics object.
Both tools take the filter as one object argument, speaker_statement_characteristics, whose axes are arrays of labels: {"certainty": ["confident"], "temporal_orientation": ["future"]}.