Skip to main content
POST
Search Call Transcripts

Authorizations

api_key
string
header
required

Body

application/json

Transcript search query and filters

query
string
required

What to find in call transcripts, e.g. 'objections about pricing' or 'how prospects describe onboarding pain'

Minimum string length: 1
Example:

"objections about pricing"

companyDomain
string

Restrict to calls with one company by its website domain (e.g. 'acme.com')

Example:

"acme.com"

entityOId
string

Restrict to moments linked to a library entity (competitor, objection, persona, etc.) by its oId

speakerSide
enum<string>
default:any

'external' finds customer/prospect voice, 'internal' finds rep talk tracks

Available options:
external,
internal,
any
speakerEmail
string

Only moments where this person spoke (contact email)

attributedPersonaOIds
string[]

Only moments spoken BY contacts classified into any of these personas, e.g. 'objections raised by CTOs or CISOs'. Different from entityOId, which finds moments ABOUT an entity

attributedSegmentOIds
string[]

Only calls with companies classified into any of these segments — quotes from within a market segment, resolved live from company classifications

eventOIds
string[]

Restrict to specific calls (Event oIds) — chain from /event/list results

contentFilter
object

Exact-phrase content criteria. Within each list ANY phrase matches (OR — list synonyms); across fields all conditions apply (AND)

opportunityId
string

Restrict to calls linked to one CRM opportunity/deal. Accepts either an Octave oId (crmo_*) or the CRM's native id (Salesforce Id / HubSpot object id / Attio record UUID, e.g. pasted from a CRM URL) — pass whichever you have

dealOutcome
enum<string>

Restrict to calls on deals with this outcome (resolved live from CRM), e.g. 'objection quotes on deals we lost'

Available options:
WON,
LOST,
OPEN
sentiment
enum<string>

Only calls with this overall pipeline-extracted sentiment

Available options:
POSITIVE,
NEUTRAL,
NEGATIVE,
UNKNOWN
callPurposes
enum<string>[]

Only calls classified with any of these purposes (OR). E.g. ['ESCALATION_CHURN_RISK'] for save-attempt voice, ['DISCOVERY','DEMO'] for early-funnel calls

Available options:
DISCOVERY,
DEMO,
TECHNICAL_EVALUATION,
WORKING_SESSION,
NEGOTIATION_PRICING,
ONBOARDING,
CHECK_IN_SUCCESS,
QBR_RENEWAL,
EXPANSION_UPSELL,
ESCALATION_CHURN_RISK,
SUPPORT,
INTERNAL_SYNC,
OTHER
expandQuery
boolean
default:false

Set true when the query is a short or abstract topic (a bare entity name, 'pricing pushback') — it gets rewritten into a hypothetical transcript passage before matching, improving recall. Leave false when the query already reads like something a speaker would say verbatim. Adds ~1s latency

minRelevance
number

Relative relevance floor (0-1): drop moments scoring below this fraction of the BEST match's score. Use ~0.5-0.7 when fewer, higher-confidence quotes beat volume; omit for exploratory searches

Required range: 0 <= x <= 1
preferRecent
boolean
default:false

Decay scores by call age (90-day half-life) so newer calls win ties. Use for 'current objections', 'latest messaging', trend questions; leave false for all-time or historical evidence. For a hard cutoff use sinceDate instead

alpha
number

Semantic-vs-keyword weight (default 0.7). Lower toward 0.3 when exact words must appear verbatim (product names, jargon, quoted phrases); raise toward 0.9 for conceptual/paraphrase matching where wording will differ

Required range: 0 <= x <= 1
sinceDate
string

Only calls on or after this ISO date (e.g. 2026-04-01)

Example:

"2026-04-01"

untilDate
string

Only calls on or before this ISO date (a date-only value is inclusive of the whole day it names)

includeInternalMeetings
boolean
default:false

Also search calls with no external participant (internal meetings)

limit
integer
default:8

Maximum number of moments to return (default: 8, max: 25)

Required range: 1 <= x <= 25
Example:

8

Response

Matching calls with their moments

_metadata
object
required
query
string
required
calls
object[]
required

Matching calls with their moments

totalMoments
number
required
latestCallAt
string | null
required

Timestamp of the workspace's most recent processed call

indexedThrough
string | null
required

Timestamp of the newest call present in the transcript index. When this is older than latestCallAt (or null), the newest call(s) are not searchable yet — results may miss them.