Transcripts

Search the call corpus, pull full turn-by-turn detail with extracted insights, and stream call audio. All free tier.

List & search calls

GET/api/transcripts

Paginated, filterable list of calls — the Transcripts table. Every filter chip in the UI maps to a query parameter here.

ParamTypeDescription
range / start / endstringDate window (see Getting started).
pageint1-based page number.
page_sizeintRows per page.
searchstringFree-text match (also matches an exact call_sid).
impersonated_brandstringFilter by brand.
lure_categorystringFilter by lure category.
payment_methodstringFilter by requested payment method.
only_hookedboolOnly engaged calls.
only_tier1boolOnly calls with Tier-1 financial data.
min_confidencefloatMinimum auditor_confidence (0–1).
min_duration / max_durationintDuration bounds (seconds).
min_asked / max_askedfloatDollar-ask bounds (USD).
curl -H "Authorization: Bearer $BBO_API_KEY" \
  "https://dashboard.martha-honeypot.com/api/transcripts?range=7d&only_tier1=true&page=1&page_size=25"
{ "range": {...}, "total": 74, "page": 1, "page_size": 25, "items": [
  { "call_sid": "CA…", "call_started_at": "...", "call_ended_at": "...",
    "duration_sec": 210.0, "impersonated_brand": "Medicare",
    "lure_category": "HEALTHCARE_BENEFITS", "scam_detected": true,
    "monetary_ask_usd": 300.0, "payment_method": "Gift card",
    "is_tier1": true, "is_tier2": true, "is_tier3": true,
    "is_hooked": true, "auditor_confidence": 0.82 }, ... ] }

Full call detail

GET/api/transcripts/{call_sid}

The complete record for one call: every dialogue turn, the plain-text rendering, all extracted insights, the persona Martha used, GCS download URIs, and audio availability.

curl -H "Authorization: Bearer $BBO_API_KEY" \
  "https://dashboard.martha-honeypot.com/api/transcripts/CA0123456789"
{ "call_sid": "CA…", "call_started_at": "...", "call_ended_at": "...",
  "duration_sec": 210.0, "auditor_confidence": 0.82,
  "turns": [ { "speaker": "scammer", "text": "This is Medicare…", "timestamp_offset_sec": 0.0 },
             { "speaker": "martha",  "text": "Oh dear, is something wrong?", "timestamp_offset_sec": 3.4 } ],
  "transcript_text": "scammer: …\nmartha: …",
  "insights": { "event_classification": {...}, "infra_sticky_financial": {...}, ... },
  "persona_snapshot": { "name": "Renee", ... },
  "transcript_jsonl_uri": "gs://…", "transcript_txt_uri": "gs://…",
  "has_audio": true, "audio_combined_uri": "gs://…",
  "audio_caller_uri": "gs://…", "audio_martha_uri": "gs://…" }

The insights object mirrors the extraction record — see the data model for every field.

Call audio

GET/api/transcripts/{call_sid}/audio

Streams the call recording as WAV. Supports HTTP Range requests for seeking. Only available when the detail response has has_audio: true.

Query: variant = combined (default, stereo) | caller | martha.

curl -H "Authorization: Bearer $BBO_API_KEY" \
  "https://dashboard.martha-honeypot.com/api/transcripts/CA0123456789/audio?variant=combined" \
  -o call.wav
To pull many calls at once as a flat file, use the CSV export endpoints (pro tier) instead of paging this list.