Merran documentation API & integrations
Read some text aloud
POST
/api/voice/speak
const url = 'http://localhost:3000/api/voice/speak';const options = { method: 'POST', headers: { cookie: 'merran.session_token=<merran.session_token>', 'Content-Type': 'application/json' }, body: '{"text":"Bring a large pot of salted water to the boil."}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url http://localhost:3000/api/voice/speak \ --header 'Content-Type: application/json' \ --cookie merran.session_token=<merran.session_token> \ --data '{ "text": "Bring a large pot of salted water to the boil." }'In the server’s voice, as MP3: a cook step, an amount, a timer. Each piece of text is read once per voice and kept, so it’s never paid for twice. When the server doesn’t read aloud for the household, it says so, and the device reads in its own voice. With an API key, it needs the recipes: read permission.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”Media typeapplication/json
object
text
required
string
Example
{ "text": "Bring a large pot of salted water to the boil."}Responses
Section titled “Responses”The reading, as MP3.
Media typeaudio/mpeg
string format: binary
Not signed in.
Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
fields
object
key
additional properties
string
Example
{ "error": { "code": "not_found", "message": "There's nothing here.", "fields": { "name": "Give it a name." } }}Not allowed.
Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
fields
object
key
additional properties
string
Example
{ "error": { "code": "not_found", "message": "There's nothing here.", "fields": { "name": "Give it a name." } }}The server doesn’t read aloud for the household.
Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
fields
object
key
additional properties
string
Example
{ "error": { "code": "not_found", "message": "There's nothing here.", "fields": { "name": "Give it a name." } }}© 2026 Kyle Johnson. Documentation: CC BY 4.0. Merran: AGPL-3.0-or-later.