Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion agents/build/configuration.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@

## Voice

The Voice panel selects the voice your agent speaks with (`voice_id`) and its speaking language (`speaking_language`: `en`, `ja`, `zh`, `ko`, `es`, `fr`, `de`). See [Voice & language](/agents/build/voice-language) for picking a voice and how automatic language detection interacts with this setting.
The Voice panel selects the voice your agent speaks with (`voice_id`) and its speaking language (`speaking_language`: `en`, `ja`, `zh`, `ko`, `es`, `fr`, `de`). See [Voice & language](/agents/build/voice-language) for picking a voice.

## Conversation settings

Expand Down Expand Up @@ -68,7 +68,7 @@

`conversation.timezone` is the default IANA timezone (like `Asia/Shanghai`) the agent uses for dates and times in conversation. Leave it empty for **automatic** — each session follows the caller's device or phone number, falling back to UTC. Set one when your agent serves a single region regardless of who calls. A per-session `timezone` on the [session request](/agents/build/time-timezone) overrides this. See [Time & timezone](/agents/build/time-timezone) for the full resolution order.

## Autosave and publishing

Check warning on line 71 in agents/build/configuration.mdx

View check run for this annotation

Mintlify / Mintlify Validation (hanabiaiinc) - vale-spellcheck

agents/build/configuration.mdx#L71

Did you really mean 'Autosave'?

There is no Save button. Each change is written to the agent's draft moments after you stop editing, and the **Saving… / Saved** indicator at the bottom-left of the page shows the current state. If a save fails, the Builder tells you and keeps your pending edits so nothing is lost.

Expand Down
6 changes: 2 additions & 4 deletions agents/build/system-tools.mdx
Original file line number Diff line number Diff line change
@@ -1,24 +1,22 @@
---
title: "System Tools"
description: "Built-in agent capabilities — language detection, hang up call, and call transfer — enabled per agent"
description: "Built-in agent capabilities like hanging up the call, enabled per agent"
icon: "toggle-on"
---

System tools are capabilities built into the platform. There is nothing to create or host — each agent simply enables the ones it needs.

| Tool | Key | What it does |
|---|---|---|
| Language detection | `language_detection` | Lets the agent detect the language the user is speaking. |
| Hang up call | `hang_up_call` | Lets the agent end the call itself. |
| Transfer call | `transfer_call` | Lets the agent hand a live phone call to another number. |

<Note>
Unlike [webhook tools](/agents/build/webhook-tools), system tools are not workspace resources shared across agents. The on/off state is stored per agent — toggling a system tool on one agent never affects another.
</Note>

## Toggle in the Builder

Open your agent's **Tools** page in the Builder. The **System tools** card holds the **Hang up call** switch. The **Language detection** switch lives on the agent's **Configuration** page, next to **Speaking language** — see [Voice & language](/agents/build/voice-language). Flip a switch to enable or disable that capability for this agent.
Open your agent's **Tools** page in the Builder. The **System tools** card holds the **Hang up call** switch — flip it to enable or disable that capability for this agent.

## Toggle via the API

Expand Down
2 changes: 1 addition & 1 deletion agents/build/tools.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@

| Type | Executed by | Use it for |
|---|---|---|
| [Webhook](/agents/build/webhook-tools) | Fish Audio — we call your HTTP endpoint during the conversation | Order lookups, CRM reads, bookings — anything your backend can answer |

Check warning on line 25 in agents/build/tools.mdx

View check run for this annotation

Mintlify / Mintlify Validation (hanabiaiinc) - vale-spellcheck

agents/build/tools.mdx#L25

Did you really mean 'lookups'?
| [Client](/agents/build/client-tools) | Your app — the SDK hands the call to code you register | Navigation, UI updates, device actions — anything only the client can do |
| [System](/agents/build/system-tools) | The platform — no code involved | Language detection, hanging up the call |
| [System](/agents/build/system-tools) | The platform — no code involved | Hanging up the call |

Webhook and client tools are **custom tools**: you define a name, a description, and arguments, and the agent fills in the argument values when it calls. System tools are ready-made — enable them with a switch on each agent.

Expand Down
13 changes: 2 additions & 11 deletions agents/build/voice-language.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -65,16 +65,7 @@ curl --request PATCH "https://api.fish.audio/v1/agent/agents/$AGENT_ID/config" \

## Speaking language

**Speaking language** sets the default language for the agent's conversations — one of `en`, `ja`, `zh`, `ko`, `es`, `fr`, or `de` (`voice.speaking_language` on the wire). Whether it is pinned or just a fallback depends on the **Language detection** [system tool](/agents/build/system-tools):

| Language detection | Session behavior |
|---|---|
| On | The session runs in automatic language mode — the agent follows the language the caller actually speaks. |
| Off (default) | Every session uses the configured speaking language. |

<Tip>
If your agent must always converse in one specific language, leave Language detection off — the session then sticks to `speaking_language` regardless of what it hears.
</Tip>
**Speaking language** sets the language for the agent's conversations — one of `en`, `ja`, `zh`, `ko`, `es`, `fr`, or `de` (`voice.speaking_language` on the wire). Every session converses in this language.

<Note>
The voice model and the speaking language are independent settings: picking a voice does not change the language, and vice versa. Choose a voice that sounds natural in the language you configure.
Expand All @@ -89,7 +80,7 @@ Both settings can also be replaced for a single session — send `overrides.voic
System prompt, first message, and conversation settings.
</Card>
<Card title="System tools" icon="wrench" href="/agents/build/system-tools">
Language detection and other built-in capabilities.
Built-in capabilities like hanging up the call.
</Card>
<Card title="Preview calls" icon="phone" href="/agents/test/preview-calls">
Talk to your draft agent and hear the voice live.
Expand Down
2 changes: 1 addition & 1 deletion agents/deploy/authenticated-sessions.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
<Note>
No backend, and anyone may talk to the agent? A [public
agent](/agents/deploy/public-agents) lets the SDK create sessions with just an
`agentId` — no token involved, gated by an origin allowlist and rate limits.

Check warning on line 21 in agents/deploy/authenticated-sessions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (hanabiaiinc) - vale-spellcheck

agents/deploy/authenticated-sessions.mdx#L21

Did you really mean 'allowlist'?
</Note>

## Create a token on your backend
Expand Down Expand Up @@ -109,7 +109,7 @@

<Note>
`overrides`, `dynamic_variables`, `language`, `tool_events`, `timezone`, and
`world_context` belong in your backend's creation request — the SDK forwards

Check warning on line 112 in agents/deploy/authenticated-sessions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (hanabiaiinc) - vale-spellcheck

agents/deploy/authenticated-sessions.mdx#L112

Did you really mean 'backend's'?
these options only in [public agent](/agents/deploy/public-agents) mode.
</Note>

Expand All @@ -118,12 +118,12 @@
| Field | Type | Description |
| ------------------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `agent_id` | string, required | The agent to talk to. It must have a [published version](/agents/deploy/versions-publishing). |
| `name` | string, optional | Display name for this session in the console's Conversations list, up to 128 characters. Omit it to show the session's start time instead. API-key requests only — keyless (public) creation rejects it with `400`. |

Check warning on line 121 in agents/deploy/authenticated-sessions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (hanabiaiinc) - vale-spellcheck

agents/deploy/authenticated-sessions.mdx#L121

Did you really mean 'keyless'?
| `overrides` | object, optional | Replace parts of the published configuration for this session — see [Overrides](#overrides). |
| `dynamic_variables` | object, optional | Up to 50 entries of string, number, or boolean values, substituted into `{{placeholders}}`. See [Dynamic variables](/agents/build/dynamic-variables). |
| `tool_events` | boolean, optional | Stream tool lifecycle events (`toolCallStarted` / `toolCallCompleted` / `toolCallFailed`) to the client. Default `true`; set `false` to keep tool inputs and outputs off the client. |
| `end_user_id` | string, optional | Your identifier for the end user, for attribution in [conversation history](/agents/monitor/conversation-history). |
| `metadata` | object, optional | Your own key-value namespace. Stored and returned verbatim on session queries and webhooks — never read or interpreted by the platform. |

Check warning on line 126 in agents/deploy/authenticated-sessions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (hanabiaiinc) - vale-spellcheck

agents/deploy/authenticated-sessions.mdx#L126

Did you really mean 'namespace'?
| `record_audio` | boolean, optional | Whether to record this session's audio. Overrides the agent's [recording setting](/agents/monitor/conversation-history#what-gets-stored) for this session only — it never changes the agent; omit it to use the agent's configuration. |
| `timezone` | string, optional | IANA timezone (like `Asia/Shanghai`) for the agent's sense of local time. Invalid names are rejected with `422`. See [Time & timezone](/agents/build/time-timezone). |
| `client_timezone` | string, optional | The end user's browser timezone, filled automatically by the SDK in public-agent mode. A hint, not a demand: it applies only when neither `timezone` nor the agent's configured timezone is set, and invalid values are ignored. See the [resolution order](/agents/build/time-timezone). |
Expand All @@ -141,14 +141,14 @@
| `first_message_prompt` | string, up to 10,000 characters | Instructions the agent generates its opener from, replacing the configured first-message behavior. `{{placeholders}}` render inside it. Mutually exclusive with `first_message` — sending both is `422`. |
| `system_prompt` | string, up to 8,000 characters | Replaces the configured system prompt entirely. `{{placeholders}}` render inside it. |
| `voice_id` | string | The voice the agent speaks with — any [voice model id](/agents/build/voice-language#use-any-voice-model) from the Voice Library. Voices bias pronunciation toward their own language, so pair it with `language`. |
| `language` | `en`, `ja`, `zh`, `ko`, `es`, `fr`, `de` | Pins the conversation language, taking precedence over the configured [speaking language](/agents/build/voice-language#speaking-language) and automatic language detection. |
| `language` | `en`, `ja`, `zh`, `ko`, `es`, `fr`, `de` | Pins the conversation language, taking precedence over the configured [speaking language](/agents/build/voice-language#speaking-language). |

```json
{
"agent_id": "YOUR_AGENT_ID",
"overrides": {
"first_message": "Welcome back, {{name}} — picking up where we left off.",
"voice_id": "802e3bc2b27e49c2995d23ef70e6ac89",

Check warning on line 151 in agents/deploy/authenticated-sessions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (hanabiaiinc) - vale-spellcheck

agents/deploy/authenticated-sessions.mdx#L151

Did you really mean 'voice_id'?
"language": "ja"
}
}
Expand Down Expand Up @@ -215,7 +215,7 @@

| Status | Meaning |
| ------ | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `400` | An `overrides` field is not enabled for this agent, or a keyless request sent an override [public sessions don't accept](#overrides). |

Check warning on line 218 in agents/deploy/authenticated-sessions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (hanabiaiinc) - vale-spellcheck

agents/deploy/authenticated-sessions.mdx#L218

Did you really mean 'keyless'?
| `401` | Invalid API key. A request with no `Authorization` header at all is treated as a public-agent request instead. |
| `402` | Quota exceeded. |
| `403` | Public-agent request rejected: the agent is not public, or the page's `Origin` is not on the allow-list. |
Expand Down
19 changes: 1 addition & 18 deletions api-reference/openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -671,7 +671,7 @@
},
"post": {
"summary": "Create Agent Session",
"description": "Start a conversation session with an agent and receive a join token for the\nsession transport (currently LiveKit WebRTC). Authenticate with an API key to\nstart sessions with any agent in your team; without credentials only agents\npublished as public are reachable, and the request `Origin` must match the\nagent's allowed origins.\n\n`language` (and `overrides.language`) accepts `en`, `ja`, `zh`, `ko`, `es`,\n`fr`, `de`; anything else is 422. Omit it to use the agent's configured\nbehavior (including automatic language detection when enabled).",
"description": "Start a conversation session with an agent and receive a join token for the\nsession transport (currently LiveKit WebRTC). Authenticate with an API key to\nstart sessions with any agent in your team; without credentials only agents\npublished as public are reachable, and the request `Origin` must match the\nagent's allowed origins.\n\n`language` (and `overrides.language`) accepts `en`, `ja`, `zh`, `ko`, `es`,\n`fr`, `de`; anything else is 422. Omit it to use the agent's configured\nspeaking language.",
"security": [
{
"BearerAuth": []
Expand Down Expand Up @@ -11704,18 +11704,6 @@
"PublicSystemToolsPatch": {
"additionalProperties": false,
"properties": {
"language_detection": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Language Detection"
},
"hang_up_call": {
"anyOf": [
{
Expand Down Expand Up @@ -12058,11 +12046,6 @@
},
"AgentSystemToolsConfig": {
"properties": {
"language_detection": {
"default": false,
"title": "Language Detection",
"type": "boolean"
},
"hang_up_call": {
"default": false,
"title": "Hang Up Call",
Expand Down
2 changes: 1 addition & 1 deletion llms.txt
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@
- [Tools Overview](https://docs.fish.audio/agents/build/tools.md): Webhook, client, and system tools for voice agents.
- [Webhook Tools](https://docs.fish.audio/agents/build/webhook-tools.md): Let the agent call your HTTP endpoints, with templating and testing.
- [Client Tools](https://docs.fish.audio/agents/build/client-tools.md): Tools your app executes in the browser through the SDK.
- [System Tools](https://docs.fish.audio/agents/build/system-tools.md): Built-in language detection and hang-up capabilities.
- [System Tools](https://docs.fish.audio/agents/build/system-tools.md): Built-in capabilities like hanging up the call.
- [Dynamic Variables & Overrides](https://docs.fish.audio/agents/build/dynamic-variables.md): Personalize each session with variables and whitelisted overrides.
- [Versions & Publishing](https://docs.fish.audio/agents/deploy/versions-publishing.md): Draft, publish, clone, and restore agent configurations.
- [Deployment Overview](https://docs.fish.audio/agents/deploy/overview.md): Pick a deployment channel — widget, public agents, authenticated sessions, or a phone number.
Expand Down
Loading