Skip to main content
WSS
wss://api.benzinga.com/api/v1/transcripts
stream
Messages
token
type:httpApiKey

Benzinga WebSocket API token

publish
type:object

WebSocket command to interact with transcript stream

subscribe
type:object

Real-time transcript message

Overview

Subscribe to real-time earnings call transcripts and receive sentence-by-sentence updates as they’re spoken during live earnings calls. Perfect for building real-time transcript viewers and analysis tools.

Key Features

  • Live Transcription: Get real-time sentence updates as speakers talk during earnings calls
  • Word-Level Timing: Each sentence includes individual word timestamps and confidence scores
  • Speaker Identification: Track who is speaking (executives, analysts, etc.)
  • Status Tracking: Monitor whether transcripts are in progress or complete
  • Flexible Subscription: Subscribe to specific tickers or all transcripts with *
  • Mock Testing: Test your integration with mock data when no live calls are active

Use Cases

  • Build real-time earnings call transcript viewers
  • Create live captioning and accessibility tools
  • Perform real-time sentiment analysis on earnings calls
  • Extract key phrases and metrics as they’re mentioned
  • Alert on specific keywords or topics during live calls
  • Archive complete transcripts with precise timing data

Quick Start

Use the interactive WebSocket tester above to connect and test the stream in real-time.

Connection URL

wss://api.benzinga.com/api/v1/transcripts/stream?token=YOUR_TOKEN

Query Parameters

ParameterRequiredDescription
tokenYesYour Benzinga WebSocket API token

Subscription Commands

Send JSON commands to control your subscriptions:

Subscribe to a Ticker

{
  "action": "subscribe",
  "ticker": "AAPL"
}

Subscribe to All Transcripts

{
  "action": "subscribe",
  "ticker": "*"
}

Unsubscribe from a Ticker

{
  "action": "unsubscribe",
  "ticker": "AAPL"
}

List Active Transcripts

{
  "action": "list"
}

Keep Connection Alive

{
  "action": "ping"
}

Test with Mock Data

When no live transcripts are available, use mock mode for testing:
{
  "action": "subscribe",
  "ticker": "AAPL",
  "mock": true
}
Supported mock tickers: AAPL, MSFT, TSLA

Message Example

{
  "call_id": "call_123456",
  "transcript_id": "550e8400-e29b-41d4-a716-446655440000",
  "call_title": "Apple Inc. Q4 2024 Earnings Call",
  "sentence": "Revenue for the quarter was 89.5 billion dollars.",
  "start_time": "2024-01-15T16:30:15Z",
  "end_time": "2024-01-15T16:30:19Z",
  "symbol": "AAPL",
  "exchange": "NASDAQ",
  "name": "Apple Inc.",
  "sequence": 42,
  "status": "IN_PROGRESS",
  "speaker": "Tim Cook, CEO",
  "type": "LIVE",
  "language": "en",
  "confidence": 0.98,
  "words": [
    {
      "text": "Revenue",
      "confidence": 0.99,
      "start": 0,
      "end": 450
    },
    {
      "text": "for",
      "confidence": 0.98,
      "start": 450,
      "end": 600
    }
  ],
  "created_time": "2024-01-15T16:30:19Z"
}

Key Fields

FieldDescription
sentenceThe complete sentence text spoken
sequenceOrder of this sentence in the transcript (0, 1, 2…)
speakerName/identifier of the person speaking
statusIN_PROGRESS (live) or COMPLETE (finished)
confidenceOverall accuracy confidence (0.0 - 1.0)
wordsArray of individual words with timing and confidence
start_time / end_timeISO 8601 timestamps for sentence timing

Transcript Status

StatusDescription
IN_PROGRESSTranscript is currently live and receiving updates
COMPLETETranscript has finished, no more updates expected

Word-Level Data

Each sentence includes detailed word-level information:
{
  "text": "Revenue",
  "confidence": 0.99,
  "start": 0,
  "end": 450
}
  • text: The word itself
  • confidence: Recognition confidence (0.0 - 1.0)
  • start/end: Timing offsets in milliseconds from sentence start

Interactive Commands

CommandParametersDescription
subscribetickerSubscribe to transcript updates for a ticker
unsubscribetickerStop receiving updates for a ticker
list-Get list of active/available transcripts
subscribed-Get list of your current subscriptions
ping-Keep connection alive (responds with pong)
echomessageEcho test (responds with your message)

Best Practices

Real-Time Display

  • Buffer Management: Display sentences in sequence order using the sequence field
  • Speaker Formatting: Format differently based on speaker (executives vs analysts)
  • Status Indicators: Show visual indicators for IN_PROGRESS vs COMPLETE status

Performance

  • Wildcard Caution: Using ticker: "*" subscribes to ALL transcripts, which can be high volume
  • Targeted Subscriptions: Subscribe only to tickers you need to reduce bandwidth
  • Heartbeat: Send ping every 30-60 seconds to maintain connection

Data Quality

  • Confidence Filtering: Consider ignoring or flagging sentences with low confidence scores
  • Word Accuracy: Use word-level confidence to identify uncertain transcriptions
  • Language Handling: Check language field for proper text rendering

Testing

  • Mock Mode: Use mock: true for development when no live calls are active
  • Echo Testing: Use echo action to verify connection and message handling
  • List Command: Check list to see what’s currently available

Example Integration

const ws = new WebSocket(
  'wss://api.benzinga.com/api/v1/transcripts/stream?token=YOUR_TOKEN'
);

ws.onopen = () => {
  // Subscribe to Apple transcripts
  ws.send(JSON.stringify({
    action: 'subscribe',
    ticker: 'AAPL'
  }));
};

ws.onmessage = (event) => {
  const data = JSON.parse(event.data);

  // Display the sentence with speaker
  console.log(`[${data.sequence}] ${data.speaker}: ${data.sentence}`);

  // Check if transcript is complete
  if (data.status === 'COMPLETE') {
    console.log('Transcript finished');
  }
};

// Keep connection alive
setInterval(() => {
  ws.send(JSON.stringify({ action: 'ping' }));
}, 30000);