> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# Update Receptionist

PATCH https://api.elevenlabs.io/v1/reception/customer-facing-agents/{agent_id}
Content-Type: application/json

Update a receptionist's display name, config and/or widget appearance.

Reference: https://elevenlabs.io/docs/api-reference/reception/receptionists/update

## Servers

- `https://api.elevenlabs.io` (Production, default)
- `https://api.us.elevenlabs.io` (Production US)
- `https://api.eu.residency.elevenlabs.io` (Production EU)
- `https://api.in.residency.elevenlabs.io` (Production India)
- `https://api.sg.residency.elevenlabs.io` (Production Singapore)

## Request

### Path parameters

- `agent_id` (string, required)

### Headers

- `xi-workspace-id` (string, optional, nullable) — The customer workspace a reseller's API key acts on.

### Body (application/json)

This endpoint expects a SMBUpdateCustomerFacingAgentRequest.

- `config` (CustomerFacingConfigPatch, optional, nullable) — Rules, procedures and transfer rules are changed through their own endpoints, not here.
- `name` (string, optional, nullable)
- `widget` (SMBWidgetAppearance, optional, nullable) — How the website widget looks. A null label follows the receptionist's language.

## Response

### 200

Pomyślna odpowiedź

- `is_active` (boolean, required)
- `agent_id` (string, optional, default: ) — ID of the ElevenLabs agent behind this receptionist.
- `config` (CustomerFacingConfig-Output, optional)
- `deactivated_at_unix` (integer, optional, nullable) — Unix timestamp when this receptionist was deactivated. None when active.
- `deactivation_reason` (enum, optional, nullable) — Why this receptionist was deactivated. None when active.
  - Allowed values: `tier_downgrade`, `user`
- `name` (string, optional, default: Receptionist) — Display name of the receptionist.
- `agent_exists` (boolean, optional, default: true) — False when the receptionist's underlying agent was deleted; it cannot take calls until it is set up again.
- `is_transfer_allowed` (boolean, optional, default: false) — Whether this receptionist can configure and use transfer rules.
- `widget` (SMBWidgetAppearance, optional, nullable) — How the website widget looks. Null when the agent is missing. Unset labels follow the receptionist's language.

## Errors

### 422 Unprocessable Entity Error

Błąd walidacji

- `detail` (list of ValidationError, optional)

## Types

### CustomerFacingConfigPatch

Rules, procedures and transfer rules are changed through their own endpoints, not here.

- `additional_instructions` (string, optional) — Extra instructions for the agent (e.g., 'Always ask callers to spell out their name')
- `tone_traits` (list of string, optional) — Personality traits for the receptionist, e.g. `['professional', 'concise']`.
- `details_to_collect` (list of string, optional) — Details the agent should always try to collect from callers (presets + custom labels, e.g. ['full name', 'phone number']).
- `llm` (enum, optional, nullable) — Model the receptionist runs on. Null uses the default.
  - Allowed values: `gpt-4o-mini`, `gpt-4o`, `gpt-4`, `gpt-4-turbo`, `gpt-4.1`, `gpt-4.1-mini`, `gpt-4.1-nano`, `gpt-5`, `gpt-5.1`, `gpt-5.2`, `gpt-5.2-chat-latest`, `gpt-5.4`, `gpt-5.4-mini`, `gpt-5.4-nano`, `gpt-5.5`, `gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna`, `gpt-6-astra`, `gpt-6-sol`, `gpt-6-luna`, `gpt-6.1-sol`, `gpt-6.1-terra`, `gpt-5-mini`, `gpt-5-nano`, `gpt-3.5-turbo`, `gemini-1.5-pro`, `gemini-1.5-flash`, `gemini-2.0-flash`, `gemini-2.0-flash-lite`, `gemini-2.5-flash-lite`, `gemini-2.5-flash`, `gemini-3-pro-preview`, `gemini-3-flash-preview`, `gemini-3.1-pro-preview`, `gemini-3.1-flash-lite-preview`, `gemini-3.1-flash-lite`, `gemini-3.5-flash`, `gemini-3.5-flash-lite`, `gemini-3.6-flash`, `gemini-3.7-flash`, `gemini-3.8-flash`, `gemini-4-argon`, `claude-sonnet-4-5`, `claude-opus-4-6`, `claude-opus-4-7`, `claude-opus-4-8`, `claude-opus-5`, `claude-opus-5-5`, `claude-sonnet-4-6`, `claude-sonnet-5`, `claude-sonnet-5-5`, `claude-sonnet-4`, `claude-haiku-4-5`, `claude-haiku-5-5`, `claude-3-7-sonnet`, `claude-3-5-sonnet`, `claude-3-5-sonnet-v1`, `claude-3-haiku`, `grok-beta`, `custom-llm`, `qwen3-4b`, `qwen3-30b-a3b`, `qwen36-35b-a3b`, `qwen35-397b-a17b`, `gpt-oss-20b`, `gpt-oss-120b`, `glm-45-air-fp8`, `glm-52`, `deepseek-v41-flash`, `nemotron-35-super-vl-nvfp4`, `gemini-2.5-flash-preview-09-2025`, `gemini-2.5-flash-lite-preview-09-2025`, `gemini-2.5-flash-preview-05-20`, `gemini-2.5-flash-preview-04-17`, `gemini-2.5-flash-lite-preview-06-17`, `gemini-2.0-flash-lite-001`, `gemini-2.0-flash-001`, `gemini-1.5-flash-002`, `gemini-1.5-flash-001`, `gemini-1.5-pro-002`, `gemini-1.5-pro-001`, `claude-sonnet-4@20250514`, `claude-sonnet-4-5@20250929`, `claude-haiku-4-5@20251001`, `claude-3-7-sonnet@20250219`, `claude-3-5-sonnet@20240620`, `claude-3-5-sonnet-v2@20241022`, `claude-3-haiku@20240307`, `gpt-5-2025-08-07`, `gpt-5.1-2025-11-13`, `gpt-5.2-2025-12-11`, `gpt-5.4-2026-03-05`, `gpt-5.4-mini-2026-03-17`, `gpt-5.4-nano-2026-03-17`, `gpt-5.5-2026-04-23`, `gpt-5-mini-2025-08-07`, `gpt-5-nano-2025-08-07`, `gpt-4.1-2025-04-14`, `gpt-4.1-mini-2025-04-14`, `gpt-4.1-nano-2025-04-14`, `gpt-4o-mini-2024-07-18`, `gpt-4o-2024-11-20`, `gpt-4o-2024-08-06`, `gpt-4o-2024-05-13`, `gpt-4-0613`, `gpt-4-0314`, `gpt-4-turbo-2024-04-09`, `gpt-3.5-turbo-0125`, `gpt-3.5-turbo-1106`, `watt-tool-8b`, `watt-tool-70b`
- `reasoning_effort` (enum, optional, nullable) — Reasoning effort for the receptionist's model, up to `medium` and only among the efforts the model supports. Null uses the model's default.
  - Allowed values: `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, `max`
- `disable_rag` (boolean, optional) — When true, the whole knowledge base is given to the receptionist up front instead of searched on each turn. Faster, but only for small knowledge bases; larger ones are still searched.
- `background_voice_detection` (boolean, optional) — Filter out far-field human speech before transcription.
- `turn_eagerness` (enum, optional, default: eager) — How quickly the receptionist decides the caller has finished speaking. Eager replies soonest; patient waits for a clearer end of turn.
  - Allowed values: `patient`, `normal`, `eager`
- `voice_id` (string, optional) — ElevenLabs voice ID
- `language` (string, optional) — Primary language code
- `additional_languages` (list of string, optional) — Additional language codes the agent can communicate in
- `first_message` (string, optional) — The first message the agent says when starting a conversation
- `disable_first_message_interruptions` (boolean, optional) — When true, callers cannot interrupt the receptionist while the first message is being delivered. Use when the greeting carries a recording or legal notice callers must hear in full.
- `enable_end_call_tool` (boolean, optional) — Allow the end_call system tool during conversations.
- `enable_skip_turn_tool` (boolean, optional) — Allow the skip_turn system tool during conversations.
- `enable_play_keypad_touch_tone_tool` (boolean, optional) — Allow the play_keypad_touch_tone (DTMF) system tool during conversations. When enabled, the receptionist can play touch-tone digits on a live call to navigate automated phone menus or answer carrier prompts such as a 'press 1 to accept' call-screening step.
- `hide_caller_number_on_transfers` (boolean, optional) — Show the business's own number, rather than the caller's, as the caller ID on transferred calls.
- `record_after_transfers` (boolean, optional) — Keep recording after a call is transferred and add that audio to the call recording.
- `enable_secure_mode` (boolean, optional) — When enabled, the receptionist may only look up or modify appointments and client records tied to the caller's verified phone number.
- `enable_spam_protection` (boolean, optional) — When enabled, inbound calls to US numbers are screened before the receptionist answers: calls whose caller ID failed carrier (STIR/SHAKEN) verification are rejected, and unknown callers whose caller ID the carrier could not vouch for must press a key to be connected.

### SMBWidgetAppearance

How the website widget looks. A null label follows the receptionist's language.

- `orb_color_1` (string, required)
- `orb_color_2` (string, required)
- `variant` (enum, required)
  - Allowed values: `tiny`, `compact`, `full`
- `placement` (enum, required)
  - Allowed values: `top-left`, `top`, `top-right`, `bottom-left`, `bottom`, `bottom-right`
- `dismissible` (boolean, required)
- `main_label` (string, optional, nullable)
- `start_call` (string, optional, nullable)

### CustomerFacingConfig-Output

- `additional_instructions` (string, optional) — Extra instructions for the agent (e.g., 'Always ask callers to spell out their name')
- `tone_traits` (list of string, optional) — Personality traits for the receptionist, e.g. `['professional', 'concise']`.
- `details_to_collect` (list of string, optional) — Details the agent should always try to collect from callers (presets + custom labels, e.g. ['full name', 'phone number']).
- `llm` (enum, optional, nullable) — Model the receptionist runs on. Null uses the default.
  - Allowed values: `gpt-4o-mini`, `gpt-4o`, `gpt-4`, `gpt-4-turbo`, `gpt-4.1`, `gpt-4.1-mini`, `gpt-4.1-nano`, `gpt-5`, `gpt-5.1`, `gpt-5.2`, `gpt-5.2-chat-latest`, `gpt-5.4`, `gpt-5.4-mini`, `gpt-5.4-nano`, `gpt-5.5`, `gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna`, `gpt-6-astra`, `gpt-6-sol`, `gpt-6-luna`, `gpt-6.1-sol`, `gpt-6.1-terra`, `gpt-5-mini`, `gpt-5-nano`, `gpt-3.5-turbo`, `gemini-1.5-pro`, `gemini-1.5-flash`, `gemini-2.0-flash`, `gemini-2.0-flash-lite`, `gemini-2.5-flash-lite`, `gemini-2.5-flash`, `gemini-3-pro-preview`, `gemini-3-flash-preview`, `gemini-3.1-pro-preview`, `gemini-3.1-flash-lite-preview`, `gemini-3.1-flash-lite`, `gemini-3.5-flash`, `gemini-3.5-flash-lite`, `gemini-3.6-flash`, `gemini-3.7-flash`, `gemini-3.8-flash`, `gemini-4-argon`, `claude-sonnet-4-5`, `claude-opus-4-6`, `claude-opus-4-7`, `claude-opus-4-8`, `claude-opus-5`, `claude-opus-5-5`, `claude-sonnet-4-6`, `claude-sonnet-5`, `claude-sonnet-5-5`, `claude-sonnet-4`, `claude-haiku-4-5`, `claude-haiku-5-5`, `claude-3-7-sonnet`, `claude-3-5-sonnet`, `claude-3-5-sonnet-v1`, `claude-3-haiku`, `grok-beta`, `custom-llm`, `qwen3-4b`, `qwen3-30b-a3b`, `qwen36-35b-a3b`, `qwen35-397b-a17b`, `gpt-oss-20b`, `gpt-oss-120b`, `glm-45-air-fp8`, `glm-52`, `deepseek-v41-flash`, `nemotron-35-super-vl-nvfp4`, `gemini-2.5-flash-preview-09-2025`, `gemini-2.5-flash-lite-preview-09-2025`, `gemini-2.5-flash-preview-05-20`, `gemini-2.5-flash-preview-04-17`, `gemini-2.5-flash-lite-preview-06-17`, `gemini-2.0-flash-lite-001`, `gemini-2.0-flash-001`, `gemini-1.5-flash-002`, `gemini-1.5-flash-001`, `gemini-1.5-pro-002`, `gemini-1.5-pro-001`, `claude-sonnet-4@20250514`, `claude-sonnet-4-5@20250929`, `claude-haiku-4-5@20251001`, `claude-3-7-sonnet@20250219`, `claude-3-5-sonnet@20240620`, `claude-3-5-sonnet-v2@20241022`, `claude-3-haiku@20240307`, `gpt-5-2025-08-07`, `gpt-5.1-2025-11-13`, `gpt-5.2-2025-12-11`, `gpt-5.4-2026-03-05`, `gpt-5.4-mini-2026-03-17`, `gpt-5.4-nano-2026-03-17`, `gpt-5.5-2026-04-23`, `gpt-5-mini-2025-08-07`, `gpt-5-nano-2025-08-07`, `gpt-4.1-2025-04-14`, `gpt-4.1-mini-2025-04-14`, `gpt-4.1-nano-2025-04-14`, `gpt-4o-mini-2024-07-18`, `gpt-4o-2024-11-20`, `gpt-4o-2024-08-06`, `gpt-4o-2024-05-13`, `gpt-4-0613`, `gpt-4-0314`, `gpt-4-turbo-2024-04-09`, `gpt-3.5-turbo-0125`, `gpt-3.5-turbo-1106`, `watt-tool-8b`, `watt-tool-70b`
- `reasoning_effort` (enum, optional, nullable) — Reasoning effort for the receptionist's model, up to `medium` and only among the efforts the model supports. Null uses the model's default.
  - Allowed values: `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, `max`
- `disable_rag` (boolean, optional, default: false) — When true, the whole knowledge base is given to the receptionist up front instead of searched on each turn. Faster, but only for small knowledge bases; larger ones are still searched.
- `background_voice_detection` (boolean, optional, default: true) — Filter out far-field human speech before transcription.
- `turn_eagerness` (enum, optional, default: eager) — How quickly the receptionist decides the caller has finished speaking. Eager replies soonest; patient waits for a clearer end of turn.
  - Allowed values: `patient`, `normal`, `eager`
- `voice_id` (string, optional, default: 5kMbtRSEKIkRZSdXxrZg) — ElevenLabs voice ID
- `language` (string, optional) — Primary language code
- `additional_languages` (list of string, optional) — Additional language codes the agent can communicate in
- `first_message` (string, optional, default: Hello! Thanks for calling. How can I help you today?) — The first message the agent says when starting a conversation
- `disable_first_message_interruptions` (boolean, optional, default: false) — When true, callers cannot interrupt the receptionist while the first message is being delivered. Use when the greeting carries a recording or legal notice callers must hear in full.
- `enable_end_call_tool` (boolean, optional, default: true) — Allow the end_call system tool during conversations.
- `enable_skip_turn_tool` (boolean, optional, default: true) — Allow the skip_turn system tool during conversations.
- `enable_play_keypad_touch_tone_tool` (boolean, optional, default: false) — Allow the play_keypad_touch_tone (DTMF) system tool during conversations. When enabled, the receptionist can play touch-tone digits on a live call to navigate automated phone menus or answer carrier prompts such as a 'press 1 to accept' call-screening step.
- `agent_rules` (list of AgentRule, optional) — Behavioral rules this agent must follow.
- `transfer_rules` (list of SMBTransferRule, optional) — Phone numbers this agent can transfer calls to.
- `hide_caller_number_on_transfers` (boolean, optional, default: false) — Show the business's own number, rather than the caller's, as the caller ID on transferred calls.
- `record_after_transfers` (boolean, optional, default: false) — Keep recording after a call is transferred and add that audio to the call recording.
- `procedures` (list of SMBProcedure, optional) — Standard operating procedures (SOPs) this agent can run on calls.
- `enable_secure_mode` (boolean, optional, default: false) — When enabled, the receptionist may only look up or modify appointments and client records tied to the caller's verified phone number.
- `enable_spam_protection` (boolean, optional, default: false) — When enabled, inbound calls to US numbers are screened before the receptionist answers: calls whose caller ID failed carrier (STIR/SHAKEN) verification are rejected, and unknown callers whose caller ID the carrier could not vouch for must press a key to be connected.

### ValidationError

- `loc` (list of ValidationErrorLocItems, required)
- `msg` (string, required)
- `type` (string, required)

### AgentRule

A single behavioral rule for the agent.

- `title` (string, required) — Title of the rule.
- `description` (string, required) — What the agent should do, in detail.
- `priority` (enum, optional, default: strict) — strict: the agent must always follow the rule; suggestion: a guideline.
  - Allowed values: `strict`, `suggestion`
- `id` (string, optional)
- `created_at_unix` (integer, optional) — Unix timestamp (seconds since epoch)

### SMBTransferRule

A configured phone number that the agent can transfer calls to.

- `label` (string, required) — Name of the transfer destination, e.g. 'Alvin' or 'Billing team'.
- `phone_number` (string, required) — Number to transfer to. Without a country code it is dialed locally in the business's country, so include the country code for a number abroad.
- `condition` (string, required) — What the caller does that triggers the transfer, e.g. 'The caller asks to speak to a human or to Alvin'. Describe only the trigger; do not restate the phone number or the word 'transfer'.
- `post_dial_digits` (string, optional, nullable) — DTMF digits automatically played after the transfer destination picks up (e.g. '1' to answer a 'press 1 to accept' screen, or 'www1234' to key an extension after a pause). Valid characters are 0-9, *, #, w (0.5s pause) and W (1s pause). Twilio transfers only.
- `id` (string, optional)
- `created_at_unix` (integer, optional) — Unix timestamp (seconds since epoch)

### SMBProcedure

A standard operating procedure (SOP) the receptionist can run on calls.

- `name` (string, required) — Name of the procedure.
- `trigger` (string, required) — When the receptionist should run the procedure, in natural language. The receptionist matches caller requests against it, e.g. 'When the caller wants to book an appointment'.
- `body` (string, optional, default: ) — Step-by-step instructions, as markdown.
- `id` (string, optional)
- `created_at_unix` (integer, optional) — Unix timestamp (seconds since epoch)
- `source_key` (string, optional, nullable)

### ValidationErrorLocItems

- string
- integer

## Examples

**Request**

```json
{}
```

**Response**

```json
{
  "is_active": true,
  "agent_id": "",
  "config": {
    "additional_instructions": "string",
    "tone_traits": [
      "string"
    ],
    "details_to_collect": [
      "string"
    ],
    "llm": "gpt-4o-mini",
    "reasoning_effort": "none",
    "disable_rag": false,
    "background_voice_detection": true,
    "turn_eagerness": "eager",
    "voice_id": "5kMbtRSEKIkRZSdXxrZg",
    "language": "string",
    "additional_languages": [
      "string"
    ],
    "first_message": "Hello! Thanks for calling. How can I help you today?",
    "disable_first_message_interruptions": false,
    "enable_end_call_tool": true,
    "enable_skip_turn_tool": true,
    "enable_play_keypad_touch_tone_tool": false,
    "agent_rules": [
      {
        "title": "string",
        "description": "string",
        "priority": "strict",
        "id": "string",
        "created_at_unix": 1
      }
    ],
    "transfer_rules": [
      {
        "label": "string",
        "phone_number": "string",
        "condition": "string",
        "post_dial_digits": "string",
        "id": "string",
        "created_at_unix": 1
      }
    ],
    "hide_caller_number_on_transfers": false,
    "record_after_transfers": false,
    "procedures": [
      {
        "name": "string",
        "trigger": "string",
        "body": "",
        "id": "string",
        "created_at_unix": 1,
        "source_key": "string"
      }
    ],
    "enable_secure_mode": false,
    "enable_spam_protection": false
  },
  "deactivated_at_unix": 1,
  "deactivation_reason": "tier_downgrade",
  "name": "Receptionist",
  "agent_exists": true,
  "is_transfer_allowed": false,
  "widget": {
    "orb_color_1": "string",
    "orb_color_2": "string",
    "variant": "tiny",
    "placement": "top-left",
    "dismissible": true,
    "main_label": "string",
    "start_call": "string"
  }
}
```

**SDK Code**

```python
import requests

url = "https://api.elevenlabs.io/v1/reception/customer-facing-agents/agent_id"

payload = {}
headers = {"Content-Type": "application/json"}

response = requests.patch(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.elevenlabs.io/v1/reception/customer-facing-agents/agent_id';
const options = {method: 'PATCH', headers: {'Content-Type': 'application/json'}, body: '{}'};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.elevenlabs.io/v1/reception/customer-facing-agents/agent_id"

	payload := strings.NewReader("{}")

	req, _ := http.NewRequest("PATCH", url, payload)

	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.elevenlabs.io/v1/reception/customer-facing-agents/agent_id")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Content-Type"] = 'application/json'
request.body = "{}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.patch("https://api.elevenlabs.io/v1/reception/customer-facing-agents/agent_id")
  .header("Content-Type", "application/json")
  .body("{}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('PATCH', 'https://api.elevenlabs.io/v1/reception/customer-facing-agents/agent_id', [
  'body' => '{}',
  'headers' => [
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.elevenlabs.io/v1/reception/customer-facing-agents/agent_id");
var request = new RestRequest(Method.PATCH);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Content-Type": "application/json"]
let parameters = [] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.elevenlabs.io/v1/reception/customer-facing-agents/agent_id")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "PATCH"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```