Skip to main content
POST
Create a tool

Authorizations

Authorization
string
header
required

API key (fam_..., created under Settings → API Keys) or an OAuth 2.0 access token (fam_at_...). REST operations also require API Access for the credential's workspace. Keys can be restricted to scopes such as assistants:read, calls:write, campaigns:write, automations:read, dashboards:read, dashboards:write, leads:write, segments:write, loop:read, loop:write, phone_numbers:write, sip_trunks:write, knowledge:write, voices:read, billing:read, billing:write, settings:write, platform:read, platform:write; a *:write scope implies the matching *:read. Automation and dashboard endpoints also accept the legacy calls:* scope. Keys without scope restrictions have full access within the workspace's available capabilities.

Body

application/json

Create/update payload for a reusable tool. On update, type is immutable and sending ••• for a secret config value keeps the stored value unchanged.

name
string
required

Tool name — becomes the LLM function name.

Pattern: ^[a-zA-Z][a-zA-Z0-9_-]{0,63}$
type
enum<string>
required

api = HTTP API tool, mcp = external MCP server, builtin = built-in capability (call transfer & co.). Immutable after creation.

Available options:
api,
mcp,
builtin
config
object
required

Type-specific configuration. api: { method, url, headers, parameters[], static_values, response_mapping, timeout_ms, async, filler_phrase, speak_after }. speak_after (default true): when false, the tool completes silently without an LLM spoken reply. mcp: { url, auth_type, auth_header_name, auth_value_encrypted, allowed_tools[], tool_options: { [toolName]: { cancellable, on_duplicate, report_progress } }, timeout_ms }; on_duplicate is allow, reject, replace, or confirm, and replace requires cancellation. builtin: exactly one built-in tool item { type: call_transfer|warm_call_transfer|end_call|…|collect_payment_card|set_variable, description?, stripe_connection_id? for collect_payment_card, allowed_keys? for set_variable, ... } — same shape as one element of an assistant's builtin_tools array; secrets are masked as ••• in responses. For warm_call_transfer, optional post_answer_dtmf accepts up to 32 characters (0-9*#A-D and w, case-insensitive); each w is a fixed half-second pause after answer and before the briefing. Omit or clear it for a direct destination. See BuiltinTool for field constraints. Saved caller-facing announcements, filler phrases and end-call farewells remain editable. With secondary languages configured on the assistant, they guide generated wording in the current supported conversation language without fixed saved audio. Otherwise their existing delivery behavior is preserved. An empty End call farewell adds no speech.

description
string

What the tool does — shown to the LLM as the function description.

Maximum string length: 1000
is_active
boolean

Whether the tool is active (default true).

expected_revision
integer

Required for PATCH to prevent lost concurrent updates.

Required range: x >= 1

Response

The created tool (secret values masked).

data
object
required

A reusable tool of the account. Secret values inside config (auth values, header values) are always masked as •••.