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
| Property | Type | Required | Description |
|---|---|---|---|
origin | string | required | cloned from a real speaker’s recordings, or designed from a description and sounding like no real person. |
speaker | Person | The real person a cloned Voice sounds like. | |
consent | Consent | The speaker’s Consent, recorded in that voice, naming the Startup and the uses allowed; required for a cloned Voice. Never randomized. | |
scope | string | required | Who may speak in it: every sibling, one Startup, or one Customer. |
samples | list of File | The recordings it was trained from, kept forever. | |
status | string | required | training until the upstream finishes, ready for speech, retired once its trained copy is deleted. |
Object
{
"$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, inversevoices.
Lifecycle
| State | Meaning | Moves to |
|---|---|---|
training (first) | The upstream is training it from the speaker’s recordings. | ready on Voice.trained; retired by Voice.retire |
ready | Speech Files render in it, within its scope. | retired by Voice.retire |
retired | Its trained copy is deleted at the upstream; its record and every File made in it stay. | None: it ends here. |
Verbs
getReturns one Voice by id.GET /{namespace}/voices/{id}listReturns Voices, newest first, one page at a time.GET /{namespace}/voicesupdateChanges the given properties of a Voice.PATCH /{namespace}/voices/{id}cloneClone trains a Voice from a real speaker’s recordings after the speaker records Consent in that same voice.POST /{namespace}/voices/cloneretireRetire 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}/retire
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.
| Field | Type | Required | Description |
|---|---|---|---|
name | string | required | Voice.trained. |
at | datetime | required | When it happened. |
seq | integer | Its position in the namespace, one more than the Event before; any seq is a cursor into the history. | |
data | json | required | The Thing as the Action left it. |
data.voice | Voice | required | The Voice as the change left it. |
data.voice.origin | string | required | cloned from a real speaker’s recordings, or designed from a description and sounding like no real person. |
data.voice.speaker | Person | The real person a cloned Voice sounds like. | |
data.voice.consent | Consent | The speaker’s Consent, recorded in that voice, naming the Startup and the uses allowed; required for a cloned Voice. | |
data.voice.scope | string | required | Who may speak in it: every sibling, one Startup, or one Customer. |
data.voice.samples | list of File | The recordings it was trained from, kept forever. | |
data.voice.status | string | required | training until the upstream finishes, ready for speech, retired once its trained copy is deleted. |
data.previous.status | string | required | The status before this Event: training. |
{
"$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.
| Operation | owner | admin | member | viewer |
|---|---|---|---|---|
Voice.get | Yes | Yes | Yes | Yes |
Voice.list | Yes | Yes | Yes | Yes |
Voice.update | Yes | Yes | Yes | No |
Voice.clone | Yes | Yes | Yes | No |
Voice.retire | Yes | No | No | No |
Call it
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.