# Hume AI

> Give your workflows a voice with Hume's Octave speech model: read any text aloud in a voice from Hume's library, design a new voice by describing it, or re-speak a recording in another voice. Then read back the conversations people have had with your Hume voice agents, with transcripts that carry what was said and how it sounded.

App · Voice AI · 13 actions. Web page: https://docs.lodol.com/docs/integrations/hume

## Actions

### Change the voice in a recording

Re-speak an existing recording in another voice, keeping the original timing, emphasis and feeling. The recording has to be speech, between 12 seconds and three minutes long.

**Inputs**

- Recording (`recording`, text, required): The speech to re-voice: upload an MP3, WAV, M4A or OGG file, or use one an earlier step produced.
- Voice (`voice`, text, required): The voice to speak in. The list holds your own saved voices and every voice in Hume's library. You can also type the name of one of your saved voices.
- Audio file type (`audio_format`, text): MP3 is small and plays anywhere. Choose WAV when the audio is going into editing software. One of: `mp3` (MP3 (recommended)), `wav` (WAV (uncompressed)). Default: `mp3`.

**Outputs**

- `content_type` (text): The file's type.
- `document_ref` (text): The saved file's reference.
- `documents` (list): The saved audio file, ready for a later step to use.
- `duration_seconds` (number): How long the audio runs, in seconds.
- `filename` (text): The file's name.
- `size_bytes` (number): The file's size.
- `spoken_text` (text): The words as they were actually spoken.
- `url` (text): Where the file can be played.
- `voice` (text): The voice that spoke.

**Example output**

```json
{
  "content_type": "audio/mpeg",
  "document_ref": "doc_01HZX8Q2F6",
  "documents": [
    {
      "content_type": "audio/mpeg",
      "document_ref": "doc_01HZX8Q2F6",
      "filename": "hume-converted.mp3",
      "size_bytes": 240118,
      "url": "/actions/core/serve-document/doc_01HZX8Q2F6"
    }
  ],
  "filename": "hume-converted.mp3",
  "size_bytes": 240118,
  "url": "/actions/core/serve-document/doc_01HZX8Q2F6",
  "voice": "f898a92e-685f-43fa-985b-a46920f0650b"
}
```

### Create a voice from a description

Describe a voice in words and Hume builds it, saves it under the name you give, and returns a sample so you can hear it. The saved voice can then be chosen in any speaking step.

**Inputs**

- Name it (`name`, text, required): What to call this voice. You will pick it by this name later, so make it recognisable, such as 'Support line greeting'.
- Describe the voice (`description`, text, required): What the voice should sound like: age, accent, pace and character. For example, 'a calm woman in her forties with a soft Scottish accent, speaking slowly and reassuringly'.
- Sample words (`sample_text`, text): What the sample should say. Use a line the voice will really be used for, so the sample is a fair test. Default: `Hello! This is what I sound like. I can be warm and calm, or bright and quick, depending on what you need.`.

**Outputs**

- `content_type` (text): The file's type.
- `document_ref` (text): The sample file's reference.
- `documents` (list): The sample, saved as an audio file.
- `duration_seconds` (number): How long the sample runs, in seconds.
- `filename` (text): The file's name.
- `sample_text` (text): The words the sample speaks.
- `size_bytes` (number): The file's size.
- `url` (text): Where the sample can be played.
- `voice` (object): The saved voice: its name, its id, and the value to put in a Voice field.

**Example output**

```json
{
  "content_type": "audio/mpeg",
  "document_ref": "doc_01HZX8Q2F5",
  "documents": [
    {
      "content_type": "audio/mpeg",
      "document_ref": "doc_01HZX8Q2F5",
      "filename": "hume-voice-support-line-greeting.mp3",
      "size_bytes": 61240,
      "url": "/actions/core/serve-document/doc_01HZX8Q2F5"
    }
  ],
  "duration_seconds": 6.8,
  "filename": "hume-voice-support-line-greeting.mp3",
  "sample_text": "Hello! This is what I sound like.",
  "size_bytes": 61240,
  "url": "/actions/core/serve-document/doc_01HZX8Q2F5",
  "voice": {
    "id": "c42352c0-4566-455d-b180-0f654b65b525",
    "library": "Your saved voices",
    "name": "Support line greeting",
    "value": "CUSTOM_VOICE:c42352c0-4566-455d-b180-0f654b65b525"
  }
}
```

### Delete a saved voice

Permanently delete one of this account's saved voices. Voices from Hume's library belong to everyone and cannot be deleted. Any workflow still using the voice will stop speaking.

**Inputs**

- Voice (`name`, text, required): The saved voice to delete, by name.

**Outputs**

- `deleted` (true/false): True once the voice is gone.
- `name` (text): The voice that was deleted.

**Example output**

```json
{
  "deleted": true,
  "name": "Support line greeting"
}
```

### Get a conversation recording

Save the audio of a conversation as a file. Hume rebuilds the recording after the conversation ends, which takes a minute or two, so check 'is_ready' and try again after a Wait step if it is still being put together.

**Inputs**

- Conversation (`conversation_id`, text, required): The conversation's id, as given back by 'List conversations'.

**Outputs**

- `content_type` (text): The file's type.
- `conversation_id` (text): The conversation the recording is of.
- `document_ref` (text): The saved file's reference.
- `documents` (list): The saved recording, or nothing at all while it is not ready.
- `filename` (text): The file's name.
- `is_ready` (true/false): True when the recording was saved, false while Hume is still putting it together.
- `size_bytes` (number): The file's size.
- `status` (text): What Hume says about the recording.
- `url` (text): Where the recording can be played.

**Example output**

```json
{
  "content_type": "audio/mp4",
  "conversation_id": "470a49f6-1dec-4afe-8b61-035d3b2d63b0",
  "document_ref": "doc_01HZX8Q2F7",
  "documents": [
    {
      "content_type": "audio/mp4",
      "document_ref": "doc_01HZX8Q2F7",
      "filename": "hume-conversation.mp4",
      "size_bytes": 512044,
      "url": "/actions/core/serve-document/doc_01HZX8Q2F7"
    }
  ],
  "filename": "hume-conversation.mp4",
  "is_ready": true,
  "size_bytes": 512044,
  "status": "COMPLETE",
  "url": "/actions/core/serve-document/doc_01HZX8Q2F7"
}
```

### Get a conversation transcript

Read back everything said in one conversation, turn by turn, with the three strongest expressions heard in each one. It also comes back as plain text, ready for an AI step to summarise.

**Inputs**

- Conversation (`conversation_id`, text, required): The conversation's id, as given back by 'List conversations'.
- Include behind-the-scenes events (`include_system_events`, true/false): Also return the instructions the agent was given, the tools it called and the pauses in between. Off by default, so the transcript reads as a conversation. Default: `false`.

**Outputs**

- `duration_seconds` (number): How long it ran, in seconds.
- `ended_at` (text): When it ended.
- `id` (text): The conversation's id.
- `message_count` (number): How many turns were returned.
- `messages` (list): Every turn in order, with who spoke, what they said, when, and the three strongest expressions heard in their voice.
- `started_at` (text): When it started.
- `status` (text): How the conversation ended.
- `thread_id` (text): The thread this conversation belongs to.
- `transcript` (text): The whole conversation as plain text, ready to summarise.
- `turn_count` (number): How many events Hume recorded.
- `voice_agent_id` (text): The voice agent that answered.

**Example output**

```json
{
  "duration_seconds": 18,
  "ended_at": "2026-05-20T21:22:38Z",
  "id": "470a49f6-1dec-4afe-8b61-035d3b2d63b0",
  "message_count": 1,
  "messages": [
    {
      "conversation_id": "470a49f6-1dec-4afe-8b61-035d3b2d63b0",
      "expressions": [
        {
          "name": "Joy",
          "score": 0.2964
        },
        {
          "name": "Surprise (positive)",
          "score": 0.2161
        },
        {
          "name": "Interest",
          "score": 0.2142
        }
      ],
      "said_at": "2026-05-20T21:22:36Z",
      "speaker": "Person",
      "text": "Hello.",
      "type": "USER_MESSAGE"
    }
  ],
  "started_at": "2026-05-20T21:22:20Z",
  "status": "USER_ENDED",
  "thread_id": "9fc18597-3567-42d5-94d6-935bde84bf2f",
  "transcript": "Person: Hello.",
  "turn_count": 6,
  "voice_agent_id": "1b60e1a0-cc59-424a-8d2c-189d354db3f3"
}
```

### Get a thread transcript

Read everything said across every conversation in a thread, in order, with the expressions heard in each turn. Use it to catch up on someone's whole history in one step.

**Inputs**

- Thread (`thread_id`, text, required): The thread's id, as given back by 'List conversation threads'.
- Include behind-the-scenes events (`include_system_events`, true/false): Also return the instructions the agent was given, the tools it called and the pauses in between. Off by default, so the transcript reads as a conversation. Default: `false`.

**Outputs**

- `message_count` (number): How many turns were returned.
- `messages` (list): Every turn in order, with who spoke, what they said, when, and the three strongest expressions heard in their voice.
- `thread_id` (text): The thread that was read.
- `transcript` (text): The whole conversation as plain text, ready to summarise.

**Example output**

```json
{
  "message_count": 1,
  "messages": [
    {
      "conversation_id": "470a49f6-1dec-4afe-8b61-035d3b2d63b0",
      "expressions": [
        {
          "name": "Joy",
          "score": 0.2964
        },
        {
          "name": "Surprise (positive)",
          "score": 0.2161
        },
        {
          "name": "Interest",
          "score": 0.2142
        }
      ],
      "said_at": "2026-05-20T21:22:36Z",
      "speaker": "Person",
      "text": "Hello.",
      "type": "USER_MESSAGE"
    }
  ],
  "thread_id": "9fc18597-3567-42d5-94d6-935bde84bf2f",
  "transcript": "Person: Hello."
}
```

### Get a voice agent

Read a voice agent's current settings: the voice it speaks in, the instructions it follows, how it greets people and what it is allowed to do.

**Inputs**

- Voice agent (`voice_agent`, text, required): The voice agent to read.

**Outputs**

- `created_at` (text): When it was created.
- `evi_version` (text): Which version of EVI it runs on.
- `greeting` (text): What it says when a conversation starts.
- `id` (text): The voice agent's id.
- `instructions` (text): What it has been told to do.
- `language_model` (text): The model behind its answers.
- `name` (text): Its name.
- `tools` (list): What it is allowed to do during a call.
- `updated_at` (text): When it was last changed.
- `version` (number): Which version of it this is.
- `voice_name` (text): The voice it speaks in.

**Example output**

```json
{
  "created_at": "2026-04-02T09:14:00Z",
  "evi_version": "3",
  "greeting": "Hi there, how can I help with the weather today?",
  "id": "1b60e1a0-cc59-424a-8d2c-189d354db3f3",
  "instructions": "You are an AI weather assistant.",
  "language_model": "claude-sonnet-4-5",
  "name": "Weather assistant",
  "tools": [
    "get_current_weather"
  ],
  "updated_at": "2026-05-19T16:40:12Z",
  "version": 2,
  "voice_name": "Ava Song"
}
```

### List conversation threads

When someone picks up where they left off, Hume keeps the conversations together as a thread. This lists those threads, most recently active first, with how many conversations are in each.

**Inputs**

- Voice agent (`voice_agent`, text): Only include threads with this voice agent. Leave empty for all of them.
- Last spoken on or after (`last_talked_on_or_after`, date and time): Only include threads whose most recent conversation started at or after this time.
- Last spoken on or before (`last_talked_on_or_before`, date and time): Only include threads whose most recent conversation started before this time.
- How many to return (`limit`, number): The most results to return. From 1 to 200. Default: `25`.

**Outputs**

- `thread_count` (number): How many threads were returned.
- `threads` (list): One entry per thread.

**Example output**

```json
{
  "thread_count": 1,
  "threads": [
    {
      "conversation_count": 3,
      "first_talked_at": "2026-05-18T14:02:11Z",
      "id": "9fc18597-3567-42d5-94d6-935bde84bf2f",
      "is_active": false,
      "last_talked_at": "2026-05-20T21:22:20Z",
      "most_recent_conversation_id": "470a49f6-1dec-4afe-8b61-035d3b2d63b0",
      "voice_agent_id": "1b60e1a0-cc59-424a-8d2c-189d354db3f3"
    }
  ]
}
```

### List conversations

List the conversations people have had with this account's voice agents, newest first, with how each one ended and how long it ran.

**Inputs**

- Voice agent (`voice_agent`, text): Only include conversations with this voice agent. Leave empty for all of them.
- How it ended (`status`, text): Only include conversations that ended this way. One of: `ACTIVE` (Still going), `USER_ENDED` (The person hung up), `USER_TIMEOUT` (The person stopped responding), `MAX_DURATION_TIMEOUT` (Reached the time limit), `INACTIVITY_TIMEOUT` (Went quiet and timed out), `ERROR` (Ended with an error).
- Started on or after (`started_on_or_after`, date and time): Only include conversations from this time onwards.
- Started on or before (`started_on_or_before`, date and time): Only include conversations from before this time.
- How many to return (`limit`, number): The most results to return. From 1 to 200. Default: `25`.

**Outputs**

- `conversation_count` (number): How many conversations were returned.
- `conversations` (list): One entry per conversation, newest first.
- `thread_id` (text): The thread these conversations belong to.

**Example output**

```json
{
  "conversation_count": 1,
  "conversations": [
    {
      "duration_seconds": 18,
      "ended_at": "2026-05-20T21:22:38Z",
      "id": "470a49f6-1dec-4afe-8b61-035d3b2d63b0",
      "started_at": "2026-05-20T21:22:20Z",
      "status": "USER_ENDED",
      "thread_id": "9fc18597-3567-42d5-94d6-935bde84bf2f",
      "turn_count": 6,
      "voice_agent_id": "1b60e1a0-cc59-424a-8d2c-189d354db3f3"
    }
  ]
}
```

### List the conversations in a thread

List every conversation in one thread, newest first, so you can see how often someone came back and how each visit went.

**Inputs**

- Thread (`thread_id`, text, required): The thread's id, as given back by 'List conversation threads'.
- How it ended (`status`, text): Only include conversations that ended this way. One of: `ACTIVE` (Still going), `USER_ENDED` (The person hung up), `USER_TIMEOUT` (The person stopped responding), `MAX_DURATION_TIMEOUT` (Reached the time limit), `INACTIVITY_TIMEOUT` (Went quiet and timed out), `ERROR` (Ended with an error).
- How many to return (`limit`, number): The most results to return. From 1 to 200. Default: `25`.

**Outputs**

- `conversation_count` (number): How many conversations were returned.
- `conversations` (list): One entry per conversation, newest first.
- `thread_id` (text): The thread these conversations belong to.

**Example output**

```json
{
  "conversation_count": 1,
  "conversations": [
    {
      "duration_seconds": 18,
      "ended_at": "2026-05-20T21:22:38Z",
      "id": "470a49f6-1dec-4afe-8b61-035d3b2d63b0",
      "started_at": "2026-05-20T21:22:20Z",
      "status": "USER_ENDED",
      "thread_id": "9fc18597-3567-42d5-94d6-935bde84bf2f",
      "turn_count": 6,
      "voice_agent_id": "1b60e1a0-cc59-424a-8d2c-189d354db3f3"
    }
  ],
  "thread_id": "9fc18597-3567-42d5-94d6-935bde84bf2f"
}
```

### List voice agents

List the voice agents set up on this account, with the voice each one speaks in and when it was last changed.

**Inputs**

- How many to return (`limit`, number): The most results to return. From 1 to 200. Default: `25`.

**Outputs**

- `voice_agent_count` (number): How many voice agents were returned.
- `voice_agents` (list): One entry per voice agent.

**Example output**

```json
{
  "voice_agent_count": 1,
  "voice_agents": [
    {
      "created_at": "2026-04-02T09:14:00Z",
      "id": "1b60e1a0-cc59-424a-8d2c-189d354db3f3",
      "language_model": "claude-sonnet-4-5",
      "name": "Weather assistant",
      "updated_at": "2026-05-19T16:40:12Z",
      "version": 2,
      "voice_name": "Ava Song"
    }
  ]
}
```

### List voices

List the voices this account can speak with: the ones saved in the account, or the ones in Hume's library. Each entry carries the value to put in a Voice field.

**Inputs**

- Which voices (`source`, text): Where to list voices from. One of: `CUSTOM_VOICE` (Your saved voices), `HUME_AI` (Hume's voice library). Default: `CUSTOM_VOICE`.
- How many to return (`limit`, number): The most results to return. From 1 to 200. Default: `25`.

**Outputs**

- `voice_count` (number): How many voices were returned.
- `voices` (list): One entry per voice.

**Example output**

```json
{
  "voice_count": 1,
  "voices": [
    {
      "id": "c42352c0-4566-455d-b180-0f654b65b525",
      "library": "Your saved voices",
      "name": "Support line greeting",
      "value": "CUSTOM_VOICE:c42352c0-4566-455d-b180-0f654b65b525"
    }
  ]
}
```

### Turn text into speech

Read text aloud in a voice you choose and save it as an audio file. Hume's Octave model reads for meaning, so a question sounds like a question and an apology sounds like one.

**Inputs**

- What to say (`text`, text, required): The words to speak. Punctuation guides the delivery, so write it the way you would want it read.
- Voice (`voice`, text, required): The voice to speak in. The list holds your own saved voices and every voice in Hume's library. You can also type the name of one of your saved voices.
- How to say it (`acting_instructions`, text): Direction for the delivery, such as 'warm and unhurried, like giving a friend good news'. Keep it under 100 characters. Leave empty for a natural read.
- Speaking speed (`speed`, number): 1 is the voice's natural pace. Below 1 is slower, above 1 is faster. From 0.75 to 1.5. Default: `1.0`.
- Audio file type (`audio_format`, text): MP3 is small and plays anywhere. Choose WAV when the audio is going into editing software. One of: `mp3` (MP3 (recommended)), `wav` (WAV (uncompressed)). Default: `mp3`.

**Outputs**

- `content_type` (text): The file's type.
- `document_ref` (text): The saved file's reference.
- `documents` (list): The saved audio file, ready for a later step to use.
- `duration_seconds` (number): How long the audio runs, in seconds.
- `filename` (text): The file's name.
- `size_bytes` (number): The file's size.
- `spoken_text` (text): The words as they were actually spoken.
- `url` (text): Where the file can be played.
- `voice` (text): The voice that spoke.

**Example output**

```json
{
  "content_type": "audio/mpeg",
  "document_ref": "doc_01HZX8Q2F4",
  "documents": [
    {
      "content_type": "audio/mpeg",
      "document_ref": "doc_01HZX8Q2F4",
      "filename": "hume-speech.mp3",
      "size_bytes": 84213,
      "url": "/actions/core/serve-document/doc_01HZX8Q2F4"
    }
  ],
  "duration_seconds": 5.24,
  "filename": "hume-speech.mp3",
  "size_bytes": 84213,
  "spoken_text": "Your order shipped this morning.",
  "url": "/actions/core/serve-document/doc_01HZX8Q2F4",
  "voice": "c42352c0-4566-455d-b180-0f654b65b525"
}
```
