Skip to main content
PATCH
Partial-field update

Authorizations

Authorization
string
header
required

Token from the discovery file. Required on every endpoint except /health.

Path Parameters

id
string<uuid>
required

Body

application/json

Partial Mode. Any field omitted is left untouched on the server. All fields are optional. id, isSystemProvided, createdDate and modifiedDate are read-only: the server ignores them here, and sets modifiedDate itself on each patch. On macOS, an explicit JSON null clears customInstructions, userSystemPrompt, languageModel, cloudTranscriptionModel, cloudTranscriptionDomain, cloudProvider, postProcessingProvider, englishSpelling, cloudAccuracyTier, geminiCustomPrompt, or cloudPostProcessingModel. Windows treats null like omission for nullable PATCH fields. A key that is not listed here is IGNORED, on every platform. The value bounds are the same as on Mode; only the required-key rule is create-only.

name
string

Must not be empty after normalization and must be unique. Two names are the same name when they are equal after trimming Unicode whitespace and lowercasing. Windows and Linux trim boundary whitespace first; macOS also normalizes Unicode, trims invisible boundary characters, and rejects names with no visible base character. Lengths are counted in Unicode scalar values.

Required string length: 1 - 100
preset
string

hyper | message | mail | note | meeting | code | custom

Required string length: 1 - 64
language
string
Required string length: 1 - 32
model
string
punctuation
boolean
capitalization
boolean
profanityFilter
boolean
customInstructions
string | null
userSystemPrompt
string | null
Maximum string length: 8000
isDefault
boolean | null
sortOrder
integer | null

Every platform accepts values from -32768 through 32767.

Required range: -32768 <= x <= 32767
languageModel
string | null
cloudTranscriptionModel
string | null
cloudProvider
string | null

The cloud vendor this Mode dictates on. A value you WRITE is normalized before it is stored, on every platform: it is lowercased, and the two LEGACY names googlespeech and microsoftazurespeech (either casing) are folded onto hyperwhisper plus the matching cloudAccuracyTier (geminiTranscribe, azureMaiTranscribe) — those providers are HyperWhisper Cloud accuracy tiers now, not standalone vendors. So a Mode read back may not carry the string you sent. On CREATE the folded tier wins over a cloudAccuracyTier in the same body; on PATCH a cloudAccuracyTier in the same request wins — so PATCHING BACK A WHOLE DOCUMENT YOU FETCHED WITH GET folds the provider but PINS the tier the Mode already had, which may not be the tier the name implies. Send only the keys you are changing. A Mode that ALREADY holds a legacy name is not rewritten by this endpoint and is reported as stored. Windows, macOS and Linux fold such a row once at app startup.

postProcessingMode
integer

0 = off, 1 = cloud, 2 = local. Every platform rejects all other values.

Required range: 0 <= x <= 2
postProcessingProvider
string | null
englishSpelling
string | null

american | british | australian | canadian

useStreamingTranscription
boolean | null
cloudAccuracyTier
string | null
removeTrailingPeriod
boolean | null
enableScreenOCR
boolean | null
geminiCustomPrompt
string | null
Maximum string length: 2000
cloudPostProcessingModel
string | null
cloudTranscriptionDomain
string | null
localEngine
string | null

Windows and Linux. macOS ignores this key.

localParakeetModel
string | null

Windows and Linux. macOS ignores this key.

localPostProcessingModel
string | null

Windows and Linux. macOS ignores this key.

customVocabulary
string[] | null

Windows and Linux. macOS ignores this key.

Maximum array length: 1000
Maximum string length: 200
providerType
string | null

Windows and Linux. macOS ignores this key. Windows accepts local or cloud in any casing, stores it lowercase, and refuses any other value with INVALID_REQUEST. A mode written before that rule may still return another value; Windows runs it on-device. Linux stores any value other than cloud as local and does not refuse it.

Response

200 - application/json

Updated mode

ok
boolean
mode
object

A key that is not listed here is IGNORED, on every platform. That is what makes the "Windows and Linux" keys below safe to send from a cross-platform client. The seven required keys are required on POST /modes only; a body missing one is refused on every platform with HTTP 200 and INVALID_REQUEST, naming the keys that are missing. A well-formed JSON object that is merely incomplete is a business failure, not a protocol failure — see the envelope rule in this document's introduction. A body that is not a JSON object, or that carries a value of the wrong type, is still the protocol failure that rule describes: HTTP 400.