Skip to content

Voice

A Voice is a reusable synthetic speaking voice, cloned from a consenting speaker or designed from a description, that speech Files are rendered in.

Properties

PropertyTypeRequiredDescription
originstringrequiredcloned from a real speaker’s recordings, or designed from a description and sounding like no real person.
speakerPersonThe real person a cloned Voice sounds like.
consentConsentThe speaker’s Consent, recorded in that voice, naming the Startup and the uses allowed; required for a cloned Voice. Never randomized.
scopestringrequiredWho may speak in it: every sibling, one Startup, or one Customer.
sampleslist of FileThe recordings it was trained from, kept forever.
statusstringrequiredtraining until the upstream finishes, ready for speech, retired once its trained copy is deleted.

Object

JSON
{
  "$id": "https://api.sb/kilnbakery.com/voices/voice_1",
  "$type": "Voice",
  "origin": "cloned",
  "speaker": "person_1",
  "consent": "consent_1",
  "scope": "studio",
  "samples": [
    "file_1"
  ],
  "status": "training"
}

Relationships

  • A Voice sounds like one Person: a cloned Voice sounds like one real person, and exists only while that person’s Consent holds. soundsLike, inverse voices.

Lifecycle

Voice lifecycle: training, ready, retired (ends)training → ready: on Voice.trainedtraining → retired: Voice.retireready → retired: Voice.retiretrainingreadyretired
StateMeaningMoves to
training (first)The upstream is training it from the speaker’s recordings.ready on Voice.trained; retired by Voice.retire
readySpeech Files render in it, within its scope.retired by Voice.retire
retiredIts trained copy is deleted at the upstream; its record and every File made in it stay.None: it ends here.

Verbs

  1. getReturns one Voice by id.
    GET /{namespace}/voices/{id}readNo Event
  2. listReturns Voices, newest first, one page at a time.
    GET /{namespace}/voicesreadNo Event
  3. updateChanges the given properties of a Voice.
    PATCH /{namespace}/voices/{id}doVoice.updated
  4. cloneClone trains a Voice from a real speaker’s recordings after the speaker records Consent in that same voice.
    POST /{namespace}/voices/clonedoVoice.cloned
  5. retireRetire deletes a Voice’s trained copy at the upstream and refuses new speech in it, keeping the record and every File made.
    POST /{namespace}/voices/{voice}/retiredoVoice.retired

A Voice is never deleted: it ends by Voice.retire, and its records stay.

Events

Events no Verb emits. Each Verb’s Event is in the Verbs table above; every Event is delivered in the same shape.

Voice.trained

The upstream finished training a cloned or designed Voice, so speech renders in it. Raised by the rail.

FieldTypeRequiredDescription
namestringrequiredVoice.trained.
atdatetimerequiredWhen it happened.
seqintegerIts position in the namespace, one more than the Event before; any seq is a cursor into the history.
datajsonrequiredThe Thing as the Action left it.
data.voiceVoicerequiredThe Voice as the change left it.
data.voice.originstringrequiredcloned from a real speaker’s recordings, or designed from a description and sounding like no real person.
data.voice.speakerPersonThe real person a cloned Voice sounds like.
data.voice.consentConsentThe speaker’s Consent, recorded in that voice, naming the Startup and the uses allowed; required for a cloned Voice.
data.voice.scopestringrequiredWho may speak in it: every sibling, one Startup, or one Customer.
data.voice.sampleslist of FileThe recordings it was trained from, kept forever.
data.voice.statusstringrequiredtraining until the upstream finishes, ready for speech, retired once its trained copy is deleted.
data.previous.statusstringrequiredThe status before this Event: training.
JSON
{
  "$id": "https://api.sb/kilnbakery.com/events/event_1",
  "$type": "Event",
  "name": "Voice.trained",
  "at": "2026-10-22T12:00:00Z",
  "data": {
    "voice": {
      "$id": "https://api.sb/kilnbakery.com/voices/voice_1",
      "$type": "Voice",
      "origin": "cloned",
      "speaker": "person_1",
      "consent": "consent_1",
      "scope": "studio",
      "samples": [
        "file_1"
      ],
      "status": "ready"
    },
    "previous": {
      "status": "training"
    }
  },
  "seq": 1
}

Permissions

Which Access level may call each Verb. One-way Verbs wait their delay window.

Operationowneradminmemberviewer
Voice.getYesYesYesYes
Voice.listYesYesYesYes
Voice.updateYesYesYesNo
Voice.cloneYesYesYesNo
Voice.retireYesNoNoNo

Call it

Text
Clone the latest voice with a person and a file and consent.

Example

A language-learning app designs a Voice from the description "warm, mid-pitch, unhurried". Its scope is the one Startup, and every lesson's audio File renders in it.