# SixtyDBTools brings 60db speech to Agno agents

> Agno's SixtyDBTools toolkit connects an agent to the 60db speech API. The agent lists the voices in your 60db workspace with get_voices and speaks text through one of them with text_to_speech, which attaches a WAV file to the run.

- Published: 2026-10-08
- Author: Udit Goenka
- Categories: Changelog
- Canonical: https://www.agno.com/blog/sixtydbtools-brings-60db-speech-to-agno-agents
- Markdown: https://www.agno.com/blog/sixtydbtools-brings-60db-speech-to-agno-agents.md

Agno's `SixtyDBTools` registers two tools, `get_voices` and `text_to_speech`, against 60db's hosted speech API at `https://api.60db.ai`. Voices in 60db belong to a workspace, so the agent looks them up first and then speaks with one.

```python
from agno.agent import Agent
from agno.tools.sixtydb import SixtyDBTools

# Reads SIXTYDB_API_KEY from the environment
tools = SixtyDBTools(default_voice_id="your-workspace-voice-id", speed=1.0)

agent = Agent(name="Speech Agent", tools=[tools])
response = agent.run("Use text_to_speech to say: Welcome. How can I help you today?")

wav_bytes = response.audio[0].content  # mono PCM16 WAV at 24 kHz
```

`get_voices(model="quality")` returns a JSON list of voice objects with `voice_id`, `name`, `model`, `labels` and `description`. The `model` argument accepts `quality` or `fast`.

`text_to_speech(text, voice_id=None)` takes 1 to 5,000 characters and falls back to `default_voice_id` when the call names no voice. On success the tool answers `Audio generated and attached.` and the WAV lands on the run as an `Audio` artifact. The toolkit checks that the audio really is mono PCM16 at 24 kHz and caps a response at 32 MiB.

Failures come back to the model as short error strings, and the log line never includes your key or the response body. Real output from the toolkit's input checks, which run before any request:

```text
SixtyDBTools()                                  -> ValueError: Provide api_key or SIXTYDB_API_KEY
SixtyDBTools(api_key="k").functions             -> ['text_to_speech', 'get_voices']
text_to_speech("Welcome.")                      -> Error: provide a workspace voice_id or default_voice_id
text_to_speech("x" * 5001, voice_id="v")        -> Error: text must contain 1 to 5000 characters
SixtyDBTools(api_key="k", speed=3)              -> ValueError: speed must be finite and between 0.5 and 2.0
```

`timeout` defaults to 60 seconds, and `enable_get_voices=False` or `enable_text_to_speech=False` leaves that tool out of the toolkit.

See the [cookbook](https://github.com/agno-agi/agno/blob/main/cookbook/91_tools/sixtydb_tools.py), and learn more about [toolkits](https://docs.agno.com/tools/toolkits/overview) in the documentation.
