Skip to main content
Lines returned by episode search and mentions carry 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, future and the other poles are assigned only when the reading is clear.
  • The middle label means “not clearly either pole”. A borderline line takes neutral (or present for temporal_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_match and is_mention lines and the context lines around them.
  • The object is absent, not null, on a line without labels.
Labels ride on the lines a query returns. Whole-transcript endpoints, such as transcripts and segments, do not carry them.

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,negative keeps 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_match line carries labels the filter accepts, and a segment is returned only when one of its lines does. On filtered mentions, every is_mention line 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 422 that names it and lists the valid labels.
Put the topic in 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. A keyword_search alone returns 422, because the filter reads lines found by meaning. Unquoted keyword_search words can join semantic_search to require those words in the segment (the default keyword_match=required). A quoted phrase returns 422, because a matched line cannot be required to say the phrase as well, and so does keyword_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, speaker and the guest_ 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 a cursor: follow it to keep reading.
  • Whose lines. With speaker or the guest_ filters, only the lines the people they select say count, on both endpoints: confident predictions by cardiologists are guest_occupation=cardiologists with certainty=confident and temporal_orientation=future, and every is_match or is_mention line 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_id or another label to reach older ones.
    • The guest_ filters must name guest_occupation, guest_field or guest_capacity, which the other guest_ filters narrow, and may select at most 5,000 guests with at most 50,000 appearances between them. A broader filter returns 422; narrow it with guest_practicing, guest_seniority, guest_standing or a narrower guest_occupation.
    • speaker must be a person with a person record; one known only as an entity returns 422.

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"]}.