Behavioral Signals API · Focus

Tell it which moments matter.

With Focus, you list the labels you care about and pick a sensitivity. The Behavioral Signals API flags moments worth a look, right next to the results you already get.

Batch and streaming. No credit card needed. From $0.10/min batch, $0.15/min streaming.

01 · Focus in plain words

How Focus works

01

List the labels you want flagged

Choose the labels that matter to your app. For example, Focus can flag moments that sound angry, or moments of stress or confidence.

02

Pick a sensitivity

low, default or high. High flags more moments, low flags fewer.

03

Read the flag rows

Where a label you chose is likely but isn’t already the top result, a flag row comes back next to your results, with the same id, start time and end time as its utterance or segment.

04

Ask for nothing and nothing changes

If you don’t request focus, your results are exactly what you get today.

On the request you already make

Focus is a parameter on the results request you already make, and a focus block in your stream config. Your existing integration keeps working, and there’s nothing to migrate.

You don’t need to be a voice expert

Labels like high stress and low confidence each draw on several voice signals at once. Focus combines them for you, so your code reads a flag, not a formula.

A flag marks a moment worth a look, based on how the speech sounds. It isn’t a statement about what the speaker feels, and what your app does with it is your call.

Recorded audio · Batch

Re-tune.
Don’t re-upload.

Upload your audio as usual. Then add focus and, if you like, sensitivity to your results request. Flag rows come right after the rows of the utterance they belong to.

GET …/v5/clients/{client-id}/processes/{pid}/results?focus=<labels>&sensitivity=<low|default|high>

Focus is worked out when you read results, so you can read the same job again with other labels or another sensitivity, with no new upload. Past jobs work too.

Live streams · gRPC

Batch or live.
Same flags.

For a live gRPC stream, add a focus block, with your labels and an optional sensitivity, to the first config message. Flag rows arrive next to your other results, at segment level, utterance level, or both.

// AudioConfig of the first message
focus: FocusConfig { labels, sensitivity }

The labels and sensitivity settings are the same in batch and streaming, so one choice of what matters carries across both.

02 · Before and after

One utterance, without and with Focus.

Before · without Focus

[
  {
    "id": "0",
    "startTime": "0.031",
    "endTime": "7.473",
    "task": "asr",
    "prediction": [
      {"label": " Can you at least send a cab or a car or something? I can't stay here all night. I have to go to work in the morning."}
    ],
    "finalLabel": " Can you at least send a cab or a car or something? I can't stay here all night. I have to go to work in the morning.",
    "level": "utterance"
  },
  {
    "id": "0",
    "startTime": "0.031",
    "endTime": "7.473",
    "task": "emotion",
    "prediction": [
      {"label": "neutral", "posterior": "0.6221"},
      {"label": "angry", "posterior": "0.291"},
      {"label": "happy", "posterior": "0.0799"},
      {"label": "sad", "posterior": "0.0071"}
    ],
    "finalLabel": "neutral",
    "level": "utterance"
  },
  {
    "id": "0",
    "startTime": "0.031",
    "endTime": "7.473",
    "task": "positivity",
    "prediction": [
      {"label": "neutral", "posterior": "0.8237"},
      {"label": "negative", "posterior": "0.1248"},
      {"label": "positive", "posterior": "0.0515"}
    ],
    "finalLabel": "neutral",
    "level": "utterance"
  }
]

After · with focus=negative_tone&sensitivity=low

[
  {
    "id": "0",
    "startTime": "0.031",
    "endTime": "7.473",
    "task": "asr",
    "prediction": [
      {"label": " Can you at least send a cab or a car or something? I can't stay here all night. I have to go to work in the morning."}
    ],
    "finalLabel": " Can you at least send a cab or a car or something? I can't stay here all night. I have to go to work in the morning.",
    "level": "utterance"
  },
  {
    "id": "0",
    "startTime": "0.031",
    "endTime": "7.473",
    "task": "emotion",
    "prediction": [
      {"label": "neutral", "posterior": "0.6221"},
      {"label": "angry", "posterior": "0.291"},
      {"label": "happy", "posterior": "0.0799"},
      {"label": "sad", "posterior": "0.0071"}
    ],
    "finalLabel": "neutral",
    "level": "utterance"
  },
  {
    "id": "0",
    "startTime": "0.031",
    "endTime": "7.473",
    "task": "positivity",
    "prediction": [
      {"label": "neutral", "posterior": "0.8237"},
      {"label": "negative", "posterior": "0.1248"},
      {"label": "positive", "posterior": "0.0515"}
    ],
    "finalLabel": "neutral",
    "level": "utterance"
  },
  {
    "id": "0",
    "startTime": "0.031",
    "endTime": "7.473",
    "task": "focus",
    "prediction": [
      {"label": "negative_tone", "posterior": "0.6072"}
    ],
    "finalLabel": "suspected_negative_tone",
    "level": "utterance"
  }
]

One utterance from a roadside-assistance call, read without Focus and then with focus=negative_tone&sensitivity=low. Everything else in the response stays the same. Emotion and positivity both come back neutral. With Focus, the same response gets one extra row: suspected_negative_tone (0.61).

03 · How to start

Start with 30 free minutes.

Sign up on the portal and try Focus on your own audio.

30 free minutes

The free minutes cover both batch and streaming.

No credit card

No credit card needed to start.

Then per minute

$0.10 per minute for batch and $0.15 per minute for streaming.

Focus docs

Labels, sensitivity settings and batch and streaming examples are in the Focus docs.

04 · FAQ

Focus FAQ

Is Focus a separate API?

No. It’s a parameter on the results request you already use for batch, and a focus block in the first config message of a stream.

What happens if I don’t use it?

Nothing changes. Without a focus request, results are exactly what you get today.

Does Focus remove the rest of my results?

No. It adds flag rows next to them. Everything else in the response is unchanged.

Can I try different labels on a job I already ran?

Yes, in batch. Read the results again with other labels or another sensitivity. No new upload needed.

What does a flag mean?

A moment worth a look, based on how the speech sounds. It isn’t a statement about what the speaker feels.

Which labels can I ask for?

You can ask for angry, happy, negative, positive, slow, fast and negative tone, and Focus can also flag moments of stress or confidence. In your request, use the label names from the Focus docs, such as high_stress. The current list is in the Focus docs.

Does Focus cover deepfake detection?

No. Focus is part of the behavioral API. Voice deepfake detection runs through its own Deepfakes API, in batch or in real time on live audio such as calls. Video deepfake detection is batch-only and experimental.