Keyword Boosting
Keyword boosting lets you bias the Pulse speech-to-text model toward specific words or phrases. Useful for proper nouns, brand names, technical terms, and any domain vocabulary the model might otherwise misrecognize.
Supported on both surfaces:
- Realtime WebSocket (
WSS /waves/v1/stt/live?model=pulse): passkeywordson the connection URL. - Pre-recorded HTTP (
POST /waves/v1/pulse/get_text): passkeywordsas a query parameter on the request.
The parameter name, format, and tuning guidance are the same on both.
Format
Keywords are passed in the keywords query parameter. Each entry follows this shape:
Intensifier scale
1 is the default when the intensifier is omitted. Start there and raise only if the word still isn’t recognized.
Keep the same starting point across all keywords in a list. Tuning one keyword up while others stay at 1 skews the balance of the boost.
Casing
Keyword matching is case-sensitive. Provide the exact casing you want the transcript to render.
- Brand names, product names, and proper nouns: capitalize them.
- Acronyms: keep them uppercase.
- Common words that happen to be homophones of a proper noun (
Sonnetthe model vssonnetthe poem): boost the cased form you want, and the model will emit that spelling.
Realtime (WebSocket)
Add keywords to the WebSocket connection URL. Keywords stay in effect for the whole session.
Single keyword
Multiple keywords
Mix of boosted and default-intensity keywords
CEO and Jensen have no explicit intensifier, so both default to 1.0.
Pre-recorded (HTTP)
Add keywords to the query string on the pre-recorded endpoint. Both paths accept it:
POST /waves/v1/pulse/get_text: the legacy Pulse route.POST /waves/v1/stt/?model=pulse: the unified STT route (recommended for new integrations).
The boost applies to that request only.
Accepted encodings
Three query-string encodings are accepted for multiple keywords. Comma-string is the recommended shape (shortest URL, single parameter, easiest to log).
Do not wrap the value in a JSON array literal (keywords=["Blackwell:2","Jensen Huang:2"]). The request succeeds but nothing is boosted. Use one of the three encodings above.
URLSearchParams in JavaScript and urlencode() in Python handle the URL-encoding for you; pass the raw comma-string.
cURL, legacy route
cURL, unified route
Python
JavaScript / TypeScript
Works with
keywords combines freely with diarize, word_timestamps, redact_pii, and redact_pci on both surfaces, and with webhook_url on the pre-recorded endpoint.
Reuse your keyword list
Keep the same keyword list across requests when the vocabulary is stable (a caller’s brand names, a product’s technical terms, a customer’s account glossary). Regenerate the list only when the vocabulary changes.
Limits
- Max 100 keywords. Sending more returns
400withkeywords too large (max 100)inerrors[]. - Intensifier: default
1, recommended1to3. Above10is not recommended. - Each keyword is a string. Phrases can include spaces (
small language model:2). A phrase cannot contain a comma; commas separate entries. - Matching is case-sensitive. Use the exact casing you want in the transcript.
- Duplicates: last-wins.
NVIDIA:1,NVIDIA:5is equivalent toNVIDIA:5. - Non-numeric intensifier: must be a number.
Pulse:notanumberis read as the whole phrase at intensifier1. - Negative intensifier suppresses instead of boosting (
checkout:-5), to prefer against a homograph.
Colons in a phrase
The intensifier is the number after the last :. A brand name that contains a colon (re:Invent) round-trips as the whole phrase at the default intensifier:
Add an explicit intensifier by suffixing :N. x:y:2 is phrase x:y at intensifier 2:
Start every keyword at 1. Raise to 2 or 3 only if the base intensity is missing the word. The maximum is 10; above that the model may insert the keyword when it was not spoken. Keep intensifiers in the 1 to 3 range.