PUThttps://core-api.heysadie.ai/dictionaries/{id}
id name entries term soundsLike language word respell phonemes caseSensitive success data tenantId type createdAt updatedAt metadata timestamp version path error code message details fieldUpdate a dictionary
Update a dictionary's `name`, its `entries`, or both. Sending `entries` REPLACES the stored array in full rather than merging, so include every entry you want to keep and read the dictionary first if you are adding to it. `type` cannot be changed, and entries are validated against the stored type.
Try it in the API ExplorerExample request
curl -X PUT "https://core-api.heysadie.ai/dictionaries/DICTIONARIE_ID" \
-H "Authorization: ApiKey YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"entries": [
{
"term": "string",
"word": "string"
}
]
}'Authentication
Authenticate with an API key in the Authorization header using the ApiKey scheme. See Authentication for how keys work and where to get them.
AuthorizationstringrequiredAPI key in the ApiKey scheme: ApiKey YOUR_API_KEY. Tenant keys authorize their own tenant; organization keys can act on any tenant in the organization.
X-Tenant-Idstring (uuid)optionalRequired when authenticating with an organization key: it selects the tenant the request acts on. Omit with tenant keys.
Request
Path parameters
idstringrequiredThe resource's UUID.
Body application/json · required
namestringoptionalNew display name. Omit to leave it unchanged.
entriesobject[]optionalREPLACES the stored entries array in full rather than merging into it, so send every entry you want to keep. Read the dictionary first if you are adding to existing entries. Omit to leave entries unchanged. Validated against the dictionary's stored `type`.
Show 8 properties across 2 possible shapes
termstringrequiredRecognition-term entries only. The word to bias the transcriber toward, spelled the way you want it to appear in the transcript. At most 50 characters; longer terms are rejected because oversized terms degrade the surrounding transcript rather than simply failing.
soundsLikestring[]optionalRecognition-term entries only. Phonetic hints for the term. Accepted and stored, but not currently forwarded to any transcriber, so a rule must not depend on it today.
languagestring | nulloptionalRecognition-term entries only. One of the languages a call can settle on: `en`, `fr`, `de`, `es`, `it`, `pt`, `ar`, `nl`, `hi`, `ru`, `ja`. Locales such as `en-AU` are stored as the base code. `english` and any other string are rejected. Applied only when the assistant's transcriber is set to a single language: on a multilingual transcriber every term is sent whatever this says, because terms are handed to the transcriber as the call connects, before any language has been detected. Leave unset to apply on every call.
wordstringrequiredPronunciation entries only. The word whose pronunciation changes. Matched on whole words only, so `Quatre` does not fire inside `Quatres`, and case-insensitively unless `caseSensitive` is true. At most 50 characters.
respellstringoptionalPronunciation entries only. A plain-text spelling of how the word should sound, such as `Kat`. Works on nearly every voice and is the fallback whenever `phonemes` cannot be used, so supplying it keeps the rule alive everywhere. Letters are handed to the voice, so it is read with that voice's own accent. At most 100 characters.
phonemesstringoptionalPronunciation entries only. Space-separated IPA, one token per sound, such as `k a t`. Multi-character symbols stay in one token (`tʃ`, `eɪ`). Rendered into the live voice's own markup at synthesis time. Only Cartesia `sonic-3`, `sonic-3.5` and `sonic-3.6` speak phonemes; on every other voice the rule falls back to `respell`, and a rule with no `respell` then does nothing. Phonemes are read with the voice's accent too, so a rule that is only correct in one language needs a voice in that language. At most 200 characters, and may not contain `<`, `>` or `|`, which are provider markup.
languagestring | nulloptionalPronunciation entries only. One of the languages a call can settle on: `en`, `fr`, `de`, `es`, `it`, `pt`, `ar`, `nl`, `hi`, `ru`, `ja`. Locales such as `fr-CA` are stored as the base code. `english` and any other string are rejected. The rule applies only on replies the call has resolved to that language, re-evaluated on every turn, so it works even on a multilingual transcriber. Leave unset to apply on every reply.
caseSensitivebooleanoptionalPronunciation entries only. When true, only the exact capitalization in `word` matches. Defaults to false, which matches any capitalization.
Responses
successbooleanrequiredtrue on every 2xx
dataobjectoptionalThe result
Show 7 child properties
idstringrequiredThe dictionary's UUID. Link a dictionary to an assistant by this value.
tenantIdstringrequiredUUID of the tenant that owns the dictionary.
typeenumrequiredWhich entry shape `entries` holds. `keywords` holds recognition terms that bias what the transcriber hears; `pronunciations` holds rules that control how the assistant says a word. Fixed at creation and cannot be changed.
"keywords""pronunciations"namestringrequiredHuman-readable label, shown wherever the dictionary is listed or linked. Not used for matching.
entriesobject[]requiredThe dictionary's rules, in the shape `type` dictates. At most 100 entries per dictionary. Note a separate runtime limit: across an assistant's own entries plus every dictionary it links, only the first 100 recognition terms are sent, counted in linking order. Pronunciations have no combined limit.
Show 8 properties across 2 possible shapes
termstringrequiredRecognition-term entries only. The word to bias the transcriber toward, spelled the way you want it to appear in the transcript. At most 50 characters; longer terms are rejected because oversized terms degrade the surrounding transcript rather than simply failing.
soundsLikestring[]optionalRecognition-term entries only. Phonetic hints for the term. Accepted and stored, but not currently forwarded to any transcriber, so a rule must not depend on it today.
languagestring | nulloptionalRecognition-term entries only. One of the languages a call can settle on: `en`, `fr`, `de`, `es`, `it`, `pt`, `ar`, `nl`, `hi`, `ru`, `ja`. Locales such as `en-AU` are stored as the base code. `english` and any other string are rejected. Applied only when the assistant's transcriber is set to a single language: on a multilingual transcriber every term is sent whatever this says, because terms are handed to the transcriber as the call connects, before any language has been detected. Leave unset to apply on every call.
wordstringrequiredPronunciation entries only. The word whose pronunciation changes. Matched on whole words only, so `Quatre` does not fire inside `Quatres`, and case-insensitively unless `caseSensitive` is true. At most 50 characters.
respellstringoptionalPronunciation entries only. A plain-text spelling of how the word should sound, such as `Kat`. Works on nearly every voice and is the fallback whenever `phonemes` cannot be used, so supplying it keeps the rule alive everywhere. Letters are handed to the voice, so it is read with that voice's own accent. At most 100 characters.
phonemesstringoptionalPronunciation entries only. Space-separated IPA, one token per sound, such as `k a t`. Multi-character symbols stay in one token (`tʃ`, `eɪ`). Rendered into the live voice's own markup at synthesis time. Only Cartesia `sonic-3`, `sonic-3.5` and `sonic-3.6` speak phonemes; on every other voice the rule falls back to `respell`, and a rule with no `respell` then does nothing. Phonemes are read with the voice's accent too, so a rule that is only correct in one language needs a voice in that language. At most 200 characters, and may not contain `<`, `>` or `|`, which are provider markup.
languagestring | nulloptionalPronunciation entries only. One of the languages a call can settle on: `en`, `fr`, `de`, `es`, `it`, `pt`, `ar`, `nl`, `hi`, `ru`, `ja`. Locales such as `fr-CA` are stored as the base code. `english` and any other string are rejected. The rule applies only on replies the call has resolved to that language, re-evaluated on every turn, so it works even on a multilingual transcriber. Leave unset to apply on every reply.
caseSensitivebooleanoptionalPronunciation entries only. When true, only the exact capitalization in `word` matches. Defaults to false, which matches any capitalization.
createdAtstring (date-time) | string (date) | number | nullrequiredWhen the dictionary was created.
updatedAtstring (date-time) | string (date) | number | nullrequiredWhen the dictionary was last modified.
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
400The request is invalid. `details` lists each field that failed
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 3 child properties
codeenumrequiredA parameter or body field broke a rule
"VALIDATION_ERROR"messagestringrequiredHuman-readable explanation. Do not parse it; branch on `code`
detailsobject[]optionalOne entry per field that failed
Show 2 item properties
fieldstringrequiredThe offending field
messagestringrequiredThe rule it broke
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
401Missing or invalid credentials
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 2 child properties
codeenumrequiredNo valid credentials
"UNAUTHORIZED"messagestringrequiredHuman-readable explanation. Do not parse it; branch on `code`
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
403The credentials are valid but may not use this route
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 2 child properties
codeenumrequiredThe credentials may not use this route
"FORBIDDEN"messagestringrequiredHuman-readable explanation. Do not parse it; branch on `code`
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
404Not found, or outside the caller's scope
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 2 child properties
codeenumrequiredAn id names nothing the caller can see
"RESOURCE_NOT_FOUND"messagestringrequiredHuman-readable explanation. Do not parse it; branch on `code`
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
500An unexpected server error
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 2 child properties
codeenumrequiredAn unexpected server failure
"INTERNAL_SERVER_ERROR"messagestringrequiredHuman-readable explanation. Do not parse it; branch on `code`
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested