> 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.

# Crea bozza dell'agente

POST https://api.elevenlabs.io/v1/convai/agents/{agent_id}/drafts
Content-Type: application/json

Crea una nuova bozza per un agente

Reference: https://elevenlabs.io/docs/api-reference/agents/drafts/create

## 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) — L'ID di un agente. Viene restituito alla creazione dell'agente.

### Query parameters

- `branch_id` (string, required) — L'ID del branch dell'agente da usare

### Body (application/json)

This endpoint expects a Body_Create_agent_draft_v1_convai_agents__agent_id__drafts_post.

- `conversation_config` (map from string to any, required) — Configurazione della conversazione per la bozza
- `platform_settings` (map from string to any, required) — Impostazioni della piattaforma per la bozza
- `workflow` (AgentWorkflowRequestModel, required) — Workflow della bozza
- `name` (string, required) — Nome della bozza
- `tags` (list of string, optional, nullable) — Tag per classificare e filtrare l'agente

## Response

### 200

Risposta riuscita

- `any`

## Errors

### 422 Unprocessable Entity Error

Errore di convalida

- `detail` (list of ValidationError, optional)

## Types

### AgentWorkflowRequestModel

- `edges` (map from string to WorkflowEdgeModel-Input, optional)
- `nodes` (map from string to AgentWorkflowRequestModelNodes, optional)
- `prevent_subagent_loops` (boolean, optional, default: false) — Indica se impedire i loop nell'esecuzione del workflow.

### ValidationError

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

### WorkflowEdgeModel-Input

- `source` (string, required) — ID del nodo di origine.
- `target` (string, required) — ID del nodo di destinazione.
- `forward_condition` (WorkflowEdgeModelInputForwardCondition, optional, nullable) — Condizione che deve essere soddisfatta per percorrere l'arco nella direzione diretta (dalla sorgente al target).
- `backward_condition` (WorkflowEdgeModelInputBackwardCondition, optional, nullable) — Condizione che deve essere soddisfatta per percorrere l'arco nella direzione inversa (dal target alla sorgente).

### AgentWorkflowRequestModelNodes

- `type`: `end` (WorkflowEndNodeModel)
  - `edge_order` (list of string, optional) — Gli ID degli edge in uscita nell'ordine in cui devono essere valutati.
  - `position` (Position-Input, optional) — Posizione del nodo nel workflow.
- `type`: `override_agent` (WorkflowOverrideAgentNodeModel)
  - `label` (string, required) — Etichetta leggibile del nodo usata nell'interfaccia utente.
  - `additional_knowledge_base` (list of KnowledgeBaseLocator, optional) — Documenti aggiuntivi della knowledge base a cui il sottoagente ha accesso. Verranno usati insieme ai documenti dell'agente principale.
  - `additional_prompt` (string, optional) — Obiettivo specifico per questo sottoagente. Verrà aggiunto al prompt di sistema e potrà essere utilizzato per perfezionare ulteriormente il comportamento dell'agente in questo contesto specifico.
  - `additional_tool_ids` (list of string, optional) — ID di strumenti aggiuntivi a cui il sottoagente ha accesso. Verranno usati oltre agli strumenti dell'agente principale.
  - `conversation_config` (ConversationalConfigAPIModelWorkflowOverride-Input, optional) — Override della configurazione applicati mentre il sottoagente gestisce la conversazione.
  - `edge_order` (list of string, optional) — Gli ID degli edge in uscita nell'ordine in cui devono essere valutati.
  - `entry_behavior` (enum, optional, default: auto) — Stabilisce se questo nodo deve generare immediatamente una risposta all'ingresso o attendere l'input dell'utente. Se impostato su "auto", il comportamento viene deciso in base al tipo del nodo precedente: "wait_for_user" dopo i nodi "say" e "start", altrimenti "generate_immediately".
    - Allowed values: `generate_immediately`, `wait_for_user`, `auto`
  - `position` (Position-Input, optional) — Posizione del nodo nel workflow.
- `type`: `phone_number` (WorkflowPhoneNumberNodeModel)
  - `transfer_destination` (WorkflowPhoneNumberNodeModelInputTransferDestination, required)
  - `custom_sip_headers` (list of WorkflowPhoneNumberNodeModelInputCustomSipHeadersItems, optional) — Header SIP personalizzati da includere durante il trasferimento della chiamata. Ogni header può essere un valore statico o un riferimento a variabile dinamica.
  - `edge_order` (list of string, optional) — Gli ID degli edge in uscita nell'ordine in cui devono essere valutati.
  - `position` (Position-Input, optional) — Posizione del nodo nel workflow.
  - `post_dial_digits` (WorkflowPhoneNumberNodeModelInputPostDialDigits, optional, nullable) — Cifre DTMF da inviare dopo la connessione della chiamata (ad esempio, 'ww1234' per l'interno). Possono essere un valore statico o un riferimento a una variabile dinamica. Usa 'w' per una pausa di 0,5 s. Supportato solo per i trasferimenti Twilio.
  - `sip_refer_play_dialtone` (boolean, optional, default: true) — Se True, viene riprodotto un tono di chiamata sulla tratta di chiamata originale durante il completamento di un trasferimento SIP REFER. Il tono viene trasmesso tramite RTP al peer SIP che esegue il REFER, quindi disabilita questa opzione se il sistema ricevente (ad esempio un SBC o un contact center) non deve sentirlo. Se disabilitata, il chiamante sente silenzio fino al completamento del trasferimento. Solo per trasferimenti SIP REFER.
  - `transfer_type` (enum, optional, default: conference)
    - Allowed values: `blind`, `conference`, `sip_refer`
  - `uui` (UUITransferConfig, optional, nullable) — Informazioni User-to-User (RFC 7433) da allegare ai trasferimenti SIP REFER. Trasporta il contesto della chiamata, come identificatori CRM o il motivo dell'escalation, oltre il confine del trasferimento.
- `type`: `standalone_agent` (WorkflowStandaloneAgentNodeModel)
  - `agent_id` (string, optional, nullable) — L'ID dell'agente a cui trasferire la conversazione. None indica un trasferimento all'interno dell'agente corrente.
  - `branch_id` (string, optional, nullable) — ID branch facoltativo per l'agente di destinazione. None segue il deployment del traffico dell'agente di destinazione oppure usa il suo branch principale quando node_id è impostato.
  - `delay_ms` (integer, optional, default: 0) — Ritardo artificiale in millisecondi applicato prima di trasferire la conversazione.
  - `edge_order` (list of string, optional) — Gli ID degli edge in uscita nell'ordine in cui devono essere valutati.
  - `enable_transferred_agent_first_message` (boolean, optional, default: false) — Indica se consentire all'agente trasferito di inviare il primo messaggio configurato dopo il trasferimento.
  - `node_id` (string, optional, nullable) — ID nodo di destinazione facoltativo nel workflow dell'agente di destinazione. Se impostato, il trasferimento inizia da questo nodo anziché dal nodo di ingresso predefinito.
  - `position` (Position-Input, optional) — Posizione del nodo nel workflow.
  - `preserve_client_tts_overrides` (boolean, optional, default: false) — Definisce se gli override del client TTS debbano essere trasferiti all'agente di destinazione.
  - `preserve_voice_settings` (boolean, optional, default: false) — Definisce se la voce di base, il modello TTS e le impostazioni vocali debbano essere trasferiti all'agente di destinazione.
  - `transfer_message` (string, optional, nullable) — Messaggio facoltativo inviato all'utente prima dell'avvio del trasferimento.
- `type`: `start` (WorkflowStartNodeModel)
  - `edge_order` (list of string, optional) — Gli ID degli edge in uscita nell'ordine in cui devono essere valutati.
  - `position` (Position-Input, optional) — Posizione del nodo nel workflow.
- `type`: `tool` (WorkflowToolNodeModel)
  - `edge_order` (list of string, optional) — Gli ID degli edge in uscita nell'ordine in cui devono essere valutati.
  - `position` (Position-Input, optional) — Posizione del nodo nel workflow.
  - `tools` (list of WorkflowToolLocator, optional) — Elenco di strumenti da eseguire in parallelo. L'intero nodo è considerato completato con successo se tutti gli strumenti vengono eseguiti correttamente.
- `type`: `say` (WorkflowSayNodeModel)
  - `label` (string, required) — Etichetta leggibile del nodo usata nell'interfaccia utente.
  - `message` (WorkflowSayNodeModelInputMessage, required) — Messaggio pronunciato da questo nodo. Usa `literal` per il testo esatto oppure `prompt` per far generare all'LLM il messaggio da una descrizione.
  - `additional_knowledge_base` (list of KnowledgeBaseLocator, optional) — Documenti della knowledge base disponibili al LLM mentre questo nodo genera il messaggio, oltre ai documenti dell'agente.
  - `additional_prompt` (string, optional) — Accettato per coerenza con i nodi dei sottoagenti, ma non utilizzato. Descrivi il messaggio in `message.prompt` oppure sostituisci il prompt di sistema con `conversation_config.agent.prompt.prompt`.
  - `additional_tool_ids` (list of string, optional) — Accettato per coerenza con i nodi dei sottoagenti, ma non utilizzato. Un nodo say non può chiamare strumenti.
  - `conversation_config` (ConversationalConfigAPIModelWorkflowOverride-Input, optional) — Override della configurazione applicati mentre questo nodo parla, come la voce o, per i messaggi prompt, l'LLM e il prompt di sistema.
  - `edge_order` (list of string, optional) — Gli ID degli edge in uscita nell'ordine in cui devono essere valutati.
  - `position` (Position-Input, optional) — Posizione del nodo nel workflow.
  - `wait_for_speech_completion` (boolean, optional, default: false) — Se true, il workflow passa al nodo successivo solo dopo che il messaggio è stato pronunciato completamente.
  - `wait_for_user_response` (boolean, optional, default: false) — Se true, il nodo pronuncia il suo messaggio e poi attende la risposta dell'utente prima di valutare gli archi in uscita, in modo che possano diramarsi in base alla risposta. Se l'utente rimane in silenzio, il workflow avanza dopo il timeout del turno.
- `type`: `update_state` (WorkflowUpdateStateNodeModel)
  - `label` (string, required) — Etichetta leggibile del nodo usata nell'interfaccia utente.
  - `updates` (list of WorkflowStateUpdate-Input, required) — Aggiornamenti dello stato applicati quando il workflow raggiunge questo nodo. Un nodo accetta al massimo 50 aggiornamenti.
  - `edge_order` (list of string, optional) — Gli ID degli edge in uscita nell'ordine in cui devono essere valutati.
  - `position` (Position-Input, optional) — Posizione del nodo nel workflow.

### ValidationErrorLocItems

### WorkflowEdgeModelInputForwardCondition

Condizione che deve essere soddisfatta per percorrere l'arco nella direzione diretta (dalla sorgente al target).

- `type`: `expression` (WorkflowExpressionConditionModel)
  - `expression` (ASTNode-Input, required) — Espressione da valutare.
  - `label` (string, optional, nullable) — Etichetta facoltativa leggibile per la condizione usata nell'intera interfaccia utente.
- `type`: `llm` (WorkflowLLMConditionModel)
  - `condition` (string, required) — Condizione da valutare
  - `label` (string, optional, nullable) — Etichetta facoltativa leggibile per la condizione usata nell'intera interfaccia utente.
- `type`: `result` (WorkflowResultConditionModel)
  - `successful` (boolean, required) — Se tutti i tool nel nodo di tool eseguito in precedenza sono stati eseguiti correttamente.
  - `label` (string, optional, nullable) — Etichetta facoltativa leggibile per la condizione usata nell'intera interfaccia utente.
- `type`: `unconditional` (WorkflowUnconditionalModel)
  - `label` (string, optional, nullable) — Etichetta facoltativa leggibile per la condizione usata nell'intera interfaccia utente.

### WorkflowEdgeModelInputBackwardCondition

Condizione che deve essere soddisfatta per percorrere l'arco nella direzione inversa (dal target alla sorgente).

- `type`: `expression` (WorkflowExpressionConditionModel)
  - `expression` (ASTNode-Input, required) — Espressione da valutare.
  - `label` (string, optional, nullable) — Etichetta facoltativa leggibile per la condizione usata nell'intera interfaccia utente.
- `type`: `llm` (WorkflowLLMConditionModel)
  - `condition` (string, required) — Condizione da valutare
  - `label` (string, optional, nullable) — Etichetta facoltativa leggibile per la condizione usata nell'intera interfaccia utente.
- `type`: `result` (WorkflowResultConditionModel)
  - `successful` (boolean, required) — Se tutti i tool nel nodo di tool eseguito in precedenza sono stati eseguiti correttamente.
  - `label` (string, optional, nullable) — Etichetta facoltativa leggibile per la condizione usata nell'intera interfaccia utente.
- `type`: `unconditional` (WorkflowUnconditionalModel)
  - `label` (string, optional, nullable) — Etichetta facoltativa leggibile per la condizione usata nell'intera interfaccia utente.

### Position-Input

- `x` (double, optional, default: 0)
- `y` (double, optional, default: 0)

### KnowledgeBaseLocator

- `type` (enum, required) — Il tipo di knowledge base
  - Allowed values: `file`, `url`, `text`, `folder`
- `name` (string, required) — Il nome della knowledge base
- `id` (string, required) — L'ID della knowledge base
- `usage_mode` (enum, optional, default: auto) — La modalità di utilizzo della knowledge base
  - Allowed values: `prompt`, `auto`

### ConversationalConfigAPIModelWorkflowOverride-Input

- `asr` (ASRConversationalConfigWorkflowOverride, optional, nullable) — Configurazione per la trascrizione conversazionale
- `turn` (TurnConfigWorkflowOverride, optional, nullable) — Configurazione per il rilevamento dei turni
- `tts` (TTSConversationalConfigWorkflowOverride-Input, optional, nullable) — Configurazione per la sintesi vocale conversazionale
- `conversation` (ConversationConfigWorkflowOverride-Input, optional, nullable) — Configurazione per gli eventi conversazionali
- `language_presets` (map from string to LanguagePreset-Input, optional, nullable) — Preimpostazioni della lingua per le conversazioni
- `vad` (VADConfigWorkflowOverride, optional, nullable) — Configurazione per il rilevamento dell'attività vocale
- `agent` (AgentConfigAPIModelWorkflowOverride-Input, optional, nullable) — Configurazione specifica dell'agente

### WorkflowPhoneNumberNodeModelInputTransferDestination

- `type`: `phone` (PhoneNumberTransferDestination)
  - `phone_number` (string, required)
- `type`: `phone_dynamic_variable` (PhoneNumberDynamicVariableTransferDestination)
  - `phone_number` (string, required)
- `type`: `sip_uri` (SIPUriTransferDestination)
  - `sip_uri` (string, required)
- `type`: `sip_uri_dynamic_variable` (SIPUriDynamicVariableTransferDestination)
  - `sip_uri` (string, required)

### WorkflowPhoneNumberNodeModelInputCustomSipHeadersItems

- `type`: `dynamic` (CustomSIPHeaderWithDynamicVariable)
  - `key` (string, required) — Il nome dell'header SIP (ad es. 'X-Customer-ID')
  - `value` (string, required) — Il nome della variabile dinamica da risolvere
- `type`: `static` (CustomSIPHeader)
  - `key` (string, required) — Il nome dell'header SIP (ad es. 'X-Customer-ID')
  - `value` (string, required) — Il valore dell'header

### WorkflowPhoneNumberNodeModelInputPostDialDigits

Cifre DTMF da inviare dopo la connessione della chiamata (ad esempio, 'ww1234' per l'interno). Possono essere un valore statico o un riferimento a una variabile dinamica. Usa 'w' per una pausa di 0,5 s. Supportato solo per i trasferimenti Twilio.

- `type`: `dynamic` (PostDialDigitsDynamicVariable)
  - `value` (string, required) — Il nome della variabile dinamica da risolvere
- `type`: `static` (PostDialDigitsStatic)
  - `value` (string, required) — Cifre DTMF da inviare dopo la connessione della chiamata (ad esempio, 'ww1234' per l'interno)

### UUITransferConfig

Contenitore User-to-User Information per trasferimenti SIP REFER (RFC 7433). I payload in uscita sono codificati in esadecimale (l'unica codifica definita da RFC 7433). L'asse del discriminatore di protocollo consente di esprimere tramite configurazione i formati per piattaforma (Talkdesk, Genesys, ...) anziché mediante flag di trasferimento distribuiti. È possibile aggiungere qui ulteriori assi (codifica ASCII, nome dell'header, parametri di scopo/contenuto) senza modificare il modello di trasferimento.

- `data` (string, required) — Payload UUI da inviare nei trasferimenti SIP REFER. Supporta variabili dinamiche inline ed è codificato in esadecimale al momento del trasferimento.
- `protocol_discriminator` (string, optional, nullable) — Discriminatore di protocollo facoltativo di un ottetto, composto da due cifre esadecimali, ad esempio '00'. È richiesto da piattaforme come Genesys Cloud, che altrimenti rimuovono il primo ottetto del payload. Lascialo non impostato per piattaforme come Talkdesk, che prevedono un payload esadecimale senza prefisso.
- `protocol_discriminator_mode` (enum, optional, default: prefix) — Come allegare protocol\_discriminator. 'prefix' antepone l'ottetto al payload esadecimale (User-to-User=XX\<hex>;encoding=hex). 'pd\_parameter' lo invia come parametro separato (User-to-User=\<hex>;pd=XX;encoding=hex). Ignorato quando protocol\_discriminator non è impostato.
  - Allowed values: `prefix`, `pd_parameter`

### WorkflowToolLocator

- `tool_id` (string, required)
- `schema_overrides` (map from string to WorkflowToolLocatorSchemaOverrides, optional, nullable) — Sostituzioni dei parametri per nodo applicate in aggiunta alla configurazione dello strumento. Le chiavi sono path di parametri separati da punti (gli strumenti webhook antepongono alle chiavi path_params./query_params./request_body.). Hanno la precedenza su eventuali sostituzioni già definite nello strumento.

### WorkflowSayNodeModelInputMessage

Messaggio pronunciato da questo nodo. Usa `literal` per il testo esatto oppure `prompt` per far generare all'LLM il messaggio da una descrizione.

- `type`: `literal` (SayNodeLiteralMessage)
  - `text` (string, required) — Testo esatto pronunciato dall'agente. Supporta i segnaposto per variabili dinamiche `{{variable_name}}`.
  - `text_translations` (map from string to TranslatedString, optional) — Traduzioni di `text`, indicizzate per codice lingua. Quando è presente una voce per la lingua della conversazione, viene pronunciato il relativo valore anziché `text`.
- `type`: `prompt` (SayNodePromptMessage)
  - `prompt` (string, required) — Descrizione del messaggio che l'LLM deve generare. Viene aggiunta al prompt di sistema dell'agente mentre questo nodo è attivo.

### WorkflowStateUpdate-Input

- `variable_name` (string, required) — Nome della variabile dinamica da assegnare.
- `expression` (ASTNode-Input, required) — Espressione il cui risultato viene assegnato alla variabile. Può combinare costanti, altre variabili dinamiche, valori estratti dall'LLM e operatori.
- `type` ("dynamic_variable", optional, default: dynamic_variable)
- `required` (boolean, optional, default: true) — Quando è false, l'LLM può omettere i valori da cui dipende questo aggiornamento. L'aggiornamento viene quindi ignorato e la variabile mantiene il valore corrente.

### ASTNode-Input

- `type`: `add_operator` (ASTAdditionOperatorNode)
  - `left` (ASTNode-Input, required) — Operando sinistro dell'operatore binario.
  - `right` (ASTNode-Input, required) — Operando destro dell'operatore binario.
- `type`: `and_operator` (ASTAndOperatorNode)
  - `children` (list of ASTNode-Input, required) — Nodi figli dell'operatore logico.
- `type`: `boolean_literal` (ASTBooleanNode)
  - `value` (boolean, required) — Valore di questo letterale.
- `type`: `conditional_operator` (ASTConditionalOperatorNode)
  - `condition` (ASTNode-Input, required) — Condizione che determina quale espressione selezionare.
  - `falseExpression` (ASTNode-Input, required) — Espressione selezionata se la condizione è false.
  - `trueExpression` (ASTNode-Input, required) — Espressione selezionata se la condizione è true.
- `type`: `div_operator` (ASTDivisionOperatorNode)
  - `left` (ASTNode-Input, required) — Operando sinistro dell'operatore binario.
  - `right` (ASTNode-Input, required) — Operando destro dell'operatore binario.
- `type`: `dynamic_variable` (ASTDynamicVariableNode)
  - `name` (string, required) — Il nome della variabile dinamica.
- `type`: `eq_operator` (ASTEqualsOperatorNode)
  - `left` (ASTNode-Input, required) — Operando sinistro dell'operatore binario.
  - `right` (ASTNode-Input, required) — Operando destro dell'operatore binario.
- `type`: `gt_operator` (ASTGreaterThanOperatorNode)
  - `left` (ASTNode-Input, required) — Operando sinistro dell'operatore binario.
  - `right` (ASTNode-Input, required) — Operando destro dell'operatore binario.
- `type`: `gte_operator` (ASTGreaterThanOrEqualsOperatorNode)
  - `left` (ASTNode-Input, required) — Operando sinistro dell'operatore binario.
  - `right` (ASTNode-Input, required) — Operando destro dell'operatore binario.
- `type`: `llm` (llm)
- `type`: `lt_operator` (ASTLessThanOperatorNode)
  - `left` (ASTNode-Input, required) — Operando sinistro dell'operatore binario.
  - `right` (ASTNode-Input, required) — Operando destro dell'operatore binario.
- `type`: `lte_operator` (ASTLessThanOrEqualsOperatorNode)
  - `left` (ASTNode-Input, required) — Operando sinistro dell'operatore binario.
  - `right` (ASTNode-Input, required) — Operando destro dell'operatore binario.
- `type`: `mul_operator` (ASTMultiplicationOperatorNode)
  - `left` (ASTNode-Input, required) — Operando sinistro dell'operatore binario.
  - `right` (ASTNode-Input, required) — Operando destro dell'operatore binario.
- `type`: `neq_operator` (ASTNotEqualsOperatorNode)
  - `left` (ASTNode-Input, required) — Operando sinistro dell'operatore binario.
  - `right` (ASTNode-Input, required) — Operando destro dell'operatore binario.
- `type`: `null_literal` (ASTNullNode)
- `type`: `number_literal` (ASTNumberNode)
  - `value` (AstNumberNodeInputValue, required) — Valore di questo letterale.
- `type`: `or_operator` (ASTOrOperatorNode)
  - `children` (list of ASTNode-Input, required) — Nodi figli dell'operatore logico.
- `type`: `string_literal` (ASTStringNode)
  - `value` (string, required) — Valore di questo letterale.
- `type`: `sub_operator` (ASTSubtractionOperatorNode)
  - `left` (ASTNode-Input, required) — Operando sinistro dell'operatore binario.
  - `right` (ASTNode-Input, required) — Operando destro dell'operatore binario.

### ASRConversationalConfigWorkflowOverride

- `quality` (enum, optional, nullable, default: high) — La qualità della trascrizione
  - Allowed values: `high`
- `provider` (enum, optional, nullable, default: scribe_realtime) — Il provider del servizio di trascrizione
  - Allowed values: `elevenlabs`, `scribe_realtime`, `scribe_v2_turbo`
- `user_input_audio_format` (enum, optional, nullable, default: pcm_16000) — Il formato dell'audio da trascrivere
  - Allowed values: `pcm_8000`, `pcm_16000`, `pcm_22050`, `pcm_24000`, `pcm_44100`, `pcm_48000`, `ulaw_8000`
- `keywords` (list of string, optional, nullable) — Parole chiave per aumentare la probabilità di previsione per

### TurnConfigWorkflowOverride

- `turn_timeout` (double, optional, nullable) — Tempo massimo di attesa della risposta dell'utente prima di ricontattarlo
- `initial_wait_time` (double, optional, nullable) — Per quanto tempo l'agente attenderà che l'utente avvii la conversazione se il primo messaggio è vuoto. Se non impostato, usa il normale turn_timeout.
- `silence_end_call_timeout` (double, optional, nullable) — Tempo massimo di attesa dall'ultima volta che l'utente ha parlato prima di terminare la chiamata
- `turn_eagerness` (enum, optional, nullable, default: normal) — Controlla quanto rapidamente l'agente risponde. Low = meno rapido (attende più a lungo), Standard = rapidità predefinita, High = più rapido (risponde prima)
  - Allowed values: `patient`, `normal`, `eager`
- `spelling_patience` (enum, optional, nullable, default: auto) — Controlla se l'agente deve essere più paziente quando l'utente scandisce numeri ed entità denominate. Auto = basato sul modello, Off = non attende mai più a lungo
  - Allowed values: `auto`, `off`
- `speculative_turn` (boolean, optional, nullable) — Quando è abilitata, inizia a generare risposte dell'LLM durante il silenzio prima che venga raggiunta la piena confidenza del turno, riducendo la latenza percepita. Può aumentare i costi dell'LLM.
- `retranscribe_on_turn_timeout` (boolean, optional, nullable) — Quando è abilitata, se il VAD non rileva parlato, tenta di ritrascrivere l'audio accumulato allo scadere del timeout del turno. Disabilita la fatturazione con sconto per il silenzio mentre è abilitata per l'agente o il nodo del workflow attivo.
- `turn_model` (enum, optional, nullable, default: turn_v3) — Versione del modello di rilevamento dei turni da usare.
  - Allowed values: `turn_v2`, `turn_v3`
- `interruption_ignore_terms` (list of string, optional, nullable) — Elenco dei termini che non devono attivare un'interruzione quando vengono pronunciati dall'utente, ad esempio 'gotcha' o 'understood'. Usa una corrispondenza esatta senza distinzione tra maiuscole e minuscole.
- `interruption_ignore_term_languages` (list of string, optional, nullable) — Codici lingua per cui sono state attivate categorie predefinite di termini da ignorare. Memorizzati esplicitamente affinché la visualizzazione non venga dedotta dalla sovrapposizione dei termini.
- `merge_with_default_ignore_terms` (boolean, optional, nullable) — Quando è abilitata, i termini predefiniti selezionati per interruption_ignore_term_languages vengono usati in aggiunta a interruption_ignore_terms.
- `transcribe_on_disabled_interruptions` (boolean, optional, nullable) — Quando le interruzioni sono disabilitate, trascrive comunque ciò che dice l'utente affinché possa essere riportato nel turno successivo. Quando è disattivata, il parlato dell'utente durante un turno non interrompibile viene ignorato e non attiva un turno.
- `soft_timeout_config` (SoftTimeoutConfigWorkflowOverride, optional, nullable) — Configurazione della funzionalità di soft timeout. Fornisce feedback immediato durante risposte LLM più lunghe.

### TTSConversationalConfigWorkflowOverride-Input

- `model_id` (enum, optional, nullable, default: eleven_v4_turbo) — Il modello da usare per il TTS
  - Allowed values: `eleven_turbo_v2`, `eleven_turbo_v2_5`, `eleven_flash_v2`, `eleven_flash_v2_5`, `eleven_multilingual_v2`, `eleven_v3_conversational`, `eleven_v4`, `eleven_v4_turbo`
- `voice_id` (string, optional, nullable) — L'ID della voce da usare per TTS
- `supported_voices` (list of SupportedVoice, optional, nullable) — Voci supportate aggiuntive per l'agente
- `expressive_mode` (boolean, optional, nullable) — Quando è abilitata, applica il prompt per i tag audio espressivi. Viene disabilitata automaticamente per i modelli non v3.
- `suggested_audio_tags` (list of SuggestedAudioTag, optional, nullable) — Tag audio consigliati per migliorare l'espressività del parlato (per i modelli eleven_v3 e eleven_v3_conversational). L'agente può comunque usare altri tag non elencati qui.
- `agent_output_audio_format` (enum, optional, nullable, default: pcm_16000) — Il formato audio da usare per TTS
  - Allowed values: `pcm_8000`, `pcm_16000`, `pcm_22050`, `pcm_24000`, `pcm_44100`, `pcm_48000`, `ulaw_8000`
- `optimize_streaming_latency` (enum, optional, nullable) — Deprecato: questo campo non ha effetto e viene ignorato.
  - Allowed values: `0`, `1`, `2`, `3`, `4`
- `stability` (double, optional, nullable) — La stabilità del parlato generato
- `speed` (double, optional, nullable) — La velocità del parlato generato
- `similarity_boost` (double, optional, nullable) — L'aumento di somiglianza per il parlato generato
- `text_normalisation_type` (enum, optional, nullable, default: system_prompt) — Metodo per convertire i numeri in parole prima di convertire il testo in parlato. Se impostato su SYSTEM_PROMPT, il prompt di sistema verrà aggiornato per includere istruzioni di normalizzazione. Se impostato su ELEVENLABS, il testo verrà normalizzato dopo la generazione, con un lieve aumento della latenza.
  - Allowed values: `system_prompt`, `elevenlabs`
- `pronunciation_dictionary_locators` (list of PydanticPronunciationDictionaryVersionLocator, optional, nullable) — I locator del dizionario di pronuncia
- `enable_phoneme_tags` (boolean, optional, nullable) — Abilita la gestione dei tag fonema SSML per i modelli V3. Se attivata, i tag fonema, sia inline sia provenienti dai dizionari di pronuncia, vengono analizzati in IPA inline prima di essere inviati al modello.
- `audio_effects` (EffectsSpec-Input, optional, nullable) — Specifica facoltativa degli effetti TTS: preset del filtro, distanza (EQ di prossimità) e ambiente (riverbero a convoluzione).

### ConversationConfigWorkflowOverride-Input

- `text_only` (boolean, optional, nullable) — Se abilitato, l'audio non verrà elaborato e verrà usato solo il testo, per evitare i costi dell'audio.
- `max_duration_seconds` (integer, optional, nullable) — La durata massima di una conversazione in secondi
- `client_events` (list of enum, optional, nullable) — Gli eventi che verranno inviati al client
  - Allowed values: `conversation_initiation_metadata`, `asr_initiation_metadata`, `ping`, `audio`, `interruption`, `user_transcript`, `tentative_user_transcript`, `agent_response`, `agent_response_correction`, `client_tool_call`, `mcp_tool_call`, `mcp_connection_status`, `agent_tool_request`, `agent_tool_response`, `agent_tool_response_full_payload`, `agent_response_metadata`, `vad_score`, `agent_chat_response_part`, `client_error`, `guardrail_triggered`, `dtmf_request`, `agent_response_complete`, `context_usage`, `internal_turn_probability`, `internal_tentative_agent_response`
- `file_input` (FileInputConfigWorkflowOverride, optional, nullable) — Configurazione per l'input di file (caricamenti di immagini/PDF) durante le conversazioni.
- `monitoring_enabled` (boolean, optional, nullable) — Abilita il monitoraggio in tempo reale delle conversazioni tramite WebSocket
- `monitoring_events` (list of enum, optional, nullable) — Gli eventi che verranno inviati alle connessioni di monitoraggio.
  - Allowed values: `conversation_initiation_metadata`, `asr_initiation_metadata`, `ping`, `audio`, `interruption`, `user_transcript`, `tentative_user_transcript`, `agent_response`, `agent_response_correction`, `client_tool_call`, `mcp_tool_call`, `mcp_connection_status`, `agent_tool_request`, `agent_tool_response`, `agent_tool_response_full_payload`, `agent_response_metadata`, `vad_score`, `agent_chat_response_part`, `client_error`, `guardrail_triggered`, `dtmf_request`, `agent_response_complete`, `context_usage`, `internal_turn_probability`, `internal_tentative_agent_response`
- `dtmf_input_settings` (DTMFInputConfig, optional, nullable) — Configura la raccolta dell'input DTMF (tastierino) durante le chiamate telefoniche
- `background_sound` (BackgroundSoundConfigWorkflowOverride, optional, nullable) — Configurazione del suono di sottofondo durante le conversazioni.
- `source_attribution` (boolean, optional, nullable) — Quando è abilitata ed è presente contenuto nella knowledge base, l'LLM riceve istruzioni per indicare quali fonti ha usato.

### LanguagePreset-Input

- `overrides` (ConversationConfigClientOverride-Input, required) — Gli override per il preset della lingua
- `first_message_translation` (LanguagePresetTranslation, optional, nullable) — La traduzione del primo messaggio
- `soft_timeout_translation` (LanguagePresetTranslation, optional, nullable) — La traduzione del messaggio di soft timeout

### VADConfigWorkflowOverride

### AgentConfigAPIModelWorkflowOverride-Input

- `first_message` (string, optional, nullable) — Se non è vuoto, è il primo messaggio che l'agente pronuncerà. Se è vuoto, l'agente attende che l'utente avvii la conversazione.
- `language` (string, optional, nullable) — Lingua dell'agente, usata per ASR e TTS
- `hinglish_mode` (boolean, optional, nullable) — Quando è abilitata e la lingua è l'hindi, l'agente risponderà in hinglish
- `dynamic_variables` (DynamicVariablesConfigWorkflowOverride, optional, nullable) — Configurazione per le variabili dinamiche
- `disable_first_message_interruptions` (boolean, optional, nullable) — Se true, l'utente non potrà interrompere l'agente durante la riproduzione del primo messaggio.
- `max_conversation_duration_message` (string, optional, nullable) — Se non è vuoto, è il messaggio che l'agente invierà al raggiungimento della durata massima della conversazione.
- `text_behavior_overrides` (map from string to BehaviorOverride, optional, nullable) — Sostituzioni del comportamento di risposta per canale nelle conversazioni testuali. Se non impostate, si applicano le impostazioni predefinite integrate del canale.
- `prompt` (PromptAgentAPIModelWorkflowOverride-Input, optional, nullable) — Il prompt per l'agente

### WorkflowToolLocatorSchemaOverrides

- `source`: `constant` (ConstantSchemaOverride)
  - `constant_value` (WorkflowToolLocatorSchemaOverridesDiscriminatorMappingConstantConstantValue, required, nullable) — Il valore costante da usare
- `source`: `dynamic_variable` (DynamicVariableSchemaOverride)
  - `dynamic_variable` (string, required) — Il nome della variabile dinamica da usare
- `source`: `llm` (LLMSchemaOverride)
  - `prompt` (string, optional, nullable) — Sostituzione del prompt per l'LLM. Se non fornita, viene utilizzata la descrizione originale dello schema.
- `source`: `omit` (OmitSchemaOverride)

### TranslatedString

- `value` (string, required)

### AstNumberNodeInputValue

Valore di questo letterale.

### SoftTimeoutConfigWorkflowOverride

- `timeout_seconds` (double, optional, nullable) — Tempo in secondi prima di mostrare il messaggio predefinito durante l'attesa della risposta dell'LLM. Imposta -1 per disabilitare.
- `message` (string, optional, nullable) — Messaggio da mostrare quando viene raggiunto il primo timeout flessibile durante l'attesa della risposta LLM. Supporta le variabili dinamiche (ad esempio \{\{system\_\_time}}, \{\{custom\_variable}}).
- `additional_soft_timeout_messages` (list of string, optional, nullable) — Messaggi di riempimento statici aggiuntivi per i soft timeout successivi nella stessa generazione LLM. Il primo timeout usa `message`. Se sono configurati meno messaggi di `max_soft_timeouts_per_generation`, viene ripetuto l'ultimo messaggio configurato; altrimenti viene usato un messaggio di riempimento integrato.
- `use_llm_generated_message` (boolean, optional, nullable) — Se abilitato, il messaggio di soft timeout verrà generato dinamicamente invece di usare il messaggio statico.
- `randomize_fillers` (boolean, optional, nullable) — Se abilitato, mescola una volta l'ordine dei messaggi statici di soft timeout all'inizio di ogni turno. Si applica solo quando use_llm_generated_message è false.
- `max_soft_timeouts_per_generation` (integer, optional, nullable) — Numero massimo di messaggi di riempimento durante l'attesa di una singola risposta LLM. Viene attivato ogni timeout_seconds finché l'LLM non trasmette contenuti in streaming o non viene raggiunto questo limite.
- `llm_generated_message_prompt_override` (string, optional, nullable) — Prompt personalizzato per generare il messaggio di riempimento per il soft timeout quando use\_llm\_generated\_message è abilitato. Il contesto recente della conversazione viene fornito come messaggio utente separato. Se non impostato, verrà utilizzato il prompt predefinito. Supporta variabili dinamiche (ad es. \{\{system\_\_time}}, \{\{custom\_variable}}).
- `disable_until_first_user_message` (boolean, optional, nullable) — Se true, i riempitivi per soft timeout vengono soppressi finché la conversazione non contiene almeno un messaggio reale dell'utente. Evita i riempitivi nel turno iniziale dell'agente (ad esempio workflow con generazione immediata o chiamate di tool prima che l'utente parli).

### SupportedVoice

- `label` (string, required)
- `voice_id` (string, required)
- `description` (string, optional, nullable)
- `language` (string, optional, nullable)
- `model_family` (enum, optional, nullable)
  - Allowed values: `turbo`, `flash`, `multilingual`, `v3_conversational`, `v4`, `v4_turbo`
- `optimize_streaming_latency` (enum, optional, nullable)
  - Allowed values: `0`, `1`, `2`, `3`, `4`
- `stability` (double, optional, nullable)
- `speed` (double, optional, nullable)
- `similarity_boost` (double, optional, nullable)

### SuggestedAudioTag

- `tag` (string, required) — Tag audio da usare (per prestazioni ottimali, 1-2 parole, ad esempio 'happy', 'excited')
- `description` (string, optional, nullable) — Descrizione facoltativa di quando usare questo tag

### PydanticPronunciationDictionaryVersionLocator

Un locator che consente ad altri documenti di fare riferimento a un dizionario specifico e alla sua versione. Questa è una versione Pydantic di PronunciationDictionaryVersionLocatorDBModel. Necessaria per garantire la compatibilità con gli altri modelli di dati dell'agente.

- `pronunciation_dictionary_id` (string, required) — L'ID del dizionario di pronuncia
- `version_id` (string, required, nullable) — L'ID della versione del dizionario di pronuncia

### EffectsSpec-Input

Filtra preset, distanza (EQ di prossimità) e ambiente (riverbero a convoluzione).

- `filter_preset_id` (string, optional, nullable)
- `distance` (double, optional, default: 0)
- `environment_id` (string, optional, nullable)
- `background_noise_id` (string, optional, nullable)
- `send_level` (double, optional, default: 1)
- `seed` (integer, optional, nullable)

### FileInputConfigWorkflowOverride

- `enabled` (boolean, optional, nullable) — Quando è abilitata, gli utenti possono allegare immagini o PDF nella chat se l'LLM supporta input multimodali.
- `max_files_in_memory` (integer, optional, nullable) — Numero di file più recenti mantenuti in memoria durante una conversazione. I file meno recenti vengono riepilogati e la relativa memoria viene liberata.
- `max_files_per_conversation` (integer, optional, nullable) — Numero totale di file che un utente può caricare in una conversazione. I caricamenti sono fatturati per file. Usa -1 per nessun limite oppure un valore >= max_files_in_memory.

### DTMFInputConfig

Configurazione per la raccolta dell'input DTMF (tastierino) durante le chiamate telefoniche.

- `dtmf_input_timeout` (double, optional, default: 2) — Timeout in secondi per attendere ulteriori cifre DTMF
- `hash_terminator` (boolean, optional, default: true) — Se true, premendo # l'input DTMF viene completato immediatamente.
- `redact_input` (boolean, optional, default: false) — Se true, sostituisce le immissioni DTMF, ovvero da tastierino, del chiamante con un indicatore di oscuramento nella trascrizione, nel log della conversazione e nell'analisi. Le cifre che l'agente ripete o passa a uno strumento non sono interessate.

### BackgroundSoundConfigWorkflowOverride

- `source_type` (enum, optional, nullable) — Il tipo di sorgente del suono di sottofondo.
  - Allowed values: `preset`
- `source_id` (enum, optional, nullable) — Identificatore della sorgente sonora.
  - Allowed values: `office2`, `office1`, `restaurant`, `city`, `typing`, `elevator1`, `elevator2`, `elevator3`, `elevator4`
- `volume` (double, optional, nullable) — Livello di volume del suono di sottofondo (da 0,01 a 1,0).
- `crossfade_loop` (boolean, optional, nullable) — Applica una dissolvenza incrociata al confine del loop per evitare scoppiettii udibili durante la riproduzione in loop.

### ConversationConfigClientOverride-Input

- `asr` (ASRConversationalConfigOverride, optional, nullable) — Configurazione per la trascrizione conversazionale
- `turn` (TurnConfigOverride, optional, nullable) — Configurazione per il rilevamento dei turni
- `tts` (TTSConversationalConfigOverride, optional, nullable) — Configurazione per la sintesi vocale conversazionale
- `conversation` (ConversationConfigOverride, optional, nullable) — Configurazione per gli eventi conversazionali
- `agent` (AgentConfigOverride-Input, optional, nullable) — Configurazione specifica dell'agente

### LanguagePresetTranslation

- `source_hash` (string, required)
- `text` (string, required)

### DynamicVariablesConfigWorkflowOverride

- `dynamic_variable_placeholders` (map from string to any, optional, nullable) — Un dizionario di segnaposto di variabili dinamiche e dei relativi valori.

### BehaviorOverride

- `verbosity` (enum, optional, nullable) — Override della verbosità. Se non impostato, viene applicato il valore predefinito sottostante.
  - Allowed values: `auto`, `concise`, `thorough`
- `output_format` (enum, optional, nullable) — Override del formato di output. Se non impostato, si applica il valore predefinito sottostante.
  - Allowed values: `mp3_22050_32`, `mp3_44100_32`, `mp3_44100_64`, `mp3_44100_96`, `mp3_44100_128`, `mp3_44100_192`, `pcm_16000`, `pcm_22050`, `pcm_24000`, `pcm_44100`, `ulaw_8000`
- `interaction_budget` (enum, optional, nullable) — Override del budget di interazione. Se non impostato, si applica il valore predefinito sottostante.
  - Allowed values: `realtime`, `5_minutes`, `10_minutes`, `1_hour`

### PromptAgentAPIModelWorkflowOverride-Input

- `prompt` (string, optional, nullable) — Il prompt per l'agente
- `llm` (enum, optional, nullable) — L'LLM da interrogare con il prompt e la cronologia della chat. Se utilizzi la residenza dei dati, l'LLM deve essere supportato nell'ambiente di residenza dei dati.
  - 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-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`, `claude-sonnet-4-5`, `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-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`, `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) — Livello di ragionamento del modello. Disponibile solo per alcuni modelli.
  - Allowed values: `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, `max`
- `thinking_budget` (integer, optional, nullable) — Numero massimo di token utilizzati per il ragionamento. Usa 0 per disattivarlo, se supportato dal modello.
- `enable_reasoning_summary` (boolean, optional, nullable) — Abilita i riepiloghi del ragionamento del modello. Se disabilitati, quando possibile non richiediamo riepiloghi al provider per un TTFB più rapido. Non compatibile con ZRM.
- `temperature` (double, optional, nullable) — La temperatura per l'LLM. Il valore predefinito è 0. Imposta null per omettere completamente il parametro dalla richiesta all'LLM, utile per LLM personalizzati che rifiutano il campo della temperatura.
- `max_tokens` (integer, optional, nullable) — Se maggiore di 0, numero massimo di token che l'LLM può prevedere
- `tool_ids` (list of string, optional, nullable) — Un elenco di ID degli strumenti usati dall'agente.
- `built_in_tools` (BuiltInToolsWorkflowOverride-Input, optional, nullable) — Strumenti di sistema integrati da usare con l'agente
- `enable_parallel_tool_calls` (boolean, optional, nullable) — Abilita le chiamate parallele agli strumenti. Se abilitata, l'agente può eseguire più strumenti in parallelo in un singolo turno. Non supportata da tutti i modelli.
- `mcp_server_ids` (list of string, optional, nullable) — Un elenco di ID dei server MCP da usare con l'agente
- `native_mcp_server_ids` (list of string, optional, nullable) — Un elenco di ID dei server MCP nativi da usare con l'agente
- `knowledge_base` (list of KnowledgeBaseLocator, optional, nullable) — Un elenco di knowledge base da usare con l'agente
- `custom_llm` (CustomLLM, optional, nullable) — Definizione di un LLM personalizzato se il campo LLM è impostato su 'CUSTOM_LLM'
- `ignore_default_personality` (boolean, optional, nullable) — Indica se rimuovere le righe di personalità predefinite dal prompt di sistema
- `rag` (RagConfigWorkflowOverride-Input, optional, nullable) — Configurazione per RAG
- `timezone` (string, optional, nullable) — Fuso orario per visualizzare l'ora corrente nel prompt di sistema. Se impostato, l'ora corrente verrà inclusa nel prompt di sistema usando questo fuso orario. Deve essere un nome di fuso orario valido (ad es. 'America/New_York', 'Europe/London', 'UTC'). È consigliato per risposte accurate basate sull'orario; senza questa impostazione, l'agente non conosce la data e l'ora correnti, a meno che non vengano fornite tramite variabili dinamiche o strumenti, e potrebbe quindi fare riferimenti temporali errati o allucinati.
- `backup_llm_config` (PromptAgentApiModelWorkflowOverrideInputBackupLlmConfig, optional, nullable) — Configurazione della cascata di LLM di backup. Può essere disabilitata, usare le impostazioni predefinite del sistema o specificare un ordine personalizzato.
- `cascade_timeout_seconds` (double, optional, nullable) — Tempo in secondi prima di passare all'LLM di backup. Deve essere compreso tra 2 e 15 secondi.
- `tools` (list of PromptAgentApiModelWorkflowOverrideInputToolsItems, optional, nullable) — Un elenco di strumenti che l'agente può usare durante la conversazione; usa invece tool_ids.

### WorkflowToolLocatorSchemaOverridesDiscriminatorMappingConstantConstantValue

Il valore costante da usare

### ASRConversationalConfigOverride

- `keywords` (list of string, optional, nullable) — Parole chiave per aumentare la probabilità di previsione per

### TurnConfigOverride

- `soft_timeout_config` (SoftTimeoutConfigOverride, optional, nullable) — Configurazione della funzionalità di soft timeout. Fornisce feedback immediato durante risposte LLM più lunghe.

### TTSConversationalConfigOverride

- `model_id` (enum, optional, nullable, default: eleven_v4_turbo) — Il modello da usare per il TTS
  - Allowed values: `eleven_turbo_v2`, `eleven_turbo_v2_5`, `eleven_flash_v2`, `eleven_flash_v2_5`, `eleven_multilingual_v2`, `eleven_v3_conversational`, `eleven_v4`, `eleven_v4_turbo`
- `voice_id` (string, optional, nullable) — L'ID della voce da usare per TTS
- `supported_voices` (list of SupportedVoice, optional, nullable) — Voci supportate aggiuntive per l'agente
- `stability` (double, optional, nullable) — La stabilità del parlato generato
- `speed` (double, optional, nullable) — La velocità del parlato generato
- `similarity_boost` (double, optional, nullable) — L'aumento di somiglianza per il parlato generato
- `pronunciation_dictionary_locators` (list of PydanticPronunciationDictionaryVersionLocator, optional, nullable) — I locator del dizionario di pronuncia

### ConversationConfigOverride

- `text_only` (boolean, optional, nullable) — Se abilitato, l'audio non verrà elaborato e verrà usato solo il testo, per evitare i costi dell'audio.
- `max_duration_seconds` (integer, optional, nullable) — La durata massima di una conversazione in secondi

### AgentConfigOverride-Input

- `first_message` (string, optional, nullable) — Se non è vuoto, è il primo messaggio che l'agente pronuncerà. Se è vuoto, l'agente attende che l'utente avvii la conversazione.
- `language` (string, optional, nullable) — Lingua dell'agente, usata per ASR e TTS
- `max_conversation_duration_message` (string, optional, nullable) — Se non è vuoto, è il messaggio che l'agente invierà al raggiungimento della durata massima della conversazione.
- `prompt` (PromptAgentAPIModelOverride-Input, optional, nullable) — Il prompt per l'agente

### BuiltInToolsWorkflowOverride-Input

- `transfer_to_agent` (SystemToolConfig, optional, nullable) — Lo strumento di trasferimento all'agente
- `end_call` (SystemToolConfig, optional, nullable) — Lo strumento di fine chiamata
- `language_detection` (SystemToolConfig, optional, nullable) — Lo strumento di rilevamento della lingua
- `transfer_to_number` (SystemToolConfig, optional, nullable) — Lo strumento di trasferimento al numero
- `skip_turn` (SystemToolConfig, optional, nullable) — Lo strumento per saltare il turno
- `play_keypad_touch_tone` (SystemToolConfig, optional, nullable) — Lo strumento di riproduzione DTMF
- `voicemail_detection` (SystemToolConfig, optional, nullable) — Lo strumento di rilevamento della segreteria telefonica

### CustomLLM

- `url` (string, required) — L'URL dell'endpoint compatibile con Chat Completions
- `model_id` (string, optional, nullable) — L'ID del modello da utilizzare se l'URL serve più modelli
- `api_key` (CustomLlmApiKey, optional, nullable) — La chiave API per l'autenticazione. Può essere un riferimento a un segreto del workspace \{'secret\_id': '...'} o un riferimento a una variabile d'ambiente \{'env\_var\_label': '...'}.
- `auth_connection` (CustomLlmAuthConnection, optional, nullable) — Connessione di autenticazione del workspace facoltativa. Sono supportate solo le connessioni di autenticazione che producono un token Authorization Bearer; non sono supportate le connessioni Basic auth, mTLS, con header personalizzato e con segreto URL.
- `request_headers` (map from string to CustomLlmRequestHeaders, optional) — Header da includere nella richiesta
- `api_version` (string, optional, nullable) — La versione dell'API da usare per la richiesta
- `api_type` (enum, optional, default: chat_completions) — Il tipo di API da usare (chat_completions, responses o websocket)
  - Allowed values: `chat_completions`, `responses`, `websocket`

### RagConfigWorkflowOverride-Input

- `enabled` (boolean, optional, nullable)
- `embedding_model` (enum, optional, nullable, default: e5_mistral_7b_instruct)
  - Allowed values: `e5_mistral_7b_instruct`, `multilingual_e5_large_instruct`
- `max_vector_distance` (double, optional, nullable) — Distanza vettoriale massima dei chunk recuperati.
- `max_documents_length` (integer, optional, nullable) — Lunghezza totale massima dei chunk di documenti recuperati da RAG.
- `max_retrieved_rag_chunks_count` (integer, optional, nullable) — Numero massimo di chunk di documenti RAG da recuperare inizialmente dal vector store. Vengono poi ulteriormente filtrati in base alla distanza vettoriale e alla lunghezza totale.
- `num_candidates` (integer, optional, nullable) — Numero di candidati valutati nella ricerca vettoriale ANN. Un numero maggiore offre risultati migliori, ma aumenta la latenza. Il valore minimo consigliato è 100. Se disabilitato, viene usato il valore predefinito.
- `query_rewrite_prompt_override` (string, optional, nullable) — Prompt personalizzato per riscrivere le query degli utenti prima del recupero RAG. La cronologia della conversazione verrà aggiunta automaticamente alla fine. Se non impostato, verrà utilizzato il prompt predefinito.
- `knowledge_base_tool_info` (KnowledgeBaseToolInfo, optional, nullable) — Quando è impostato, l'agente usa lo strumento knowledge_base anziché lo strumento legacy knowledge_base_rag. None indica che l'agente non ha aderito.

### PromptAgentApiModelWorkflowOverrideInputBackupLlmConfig

Configurazione della cascata di LLM di backup. Può essere disabilitata, usare le impostazioni predefinite del sistema o specificare un ordine personalizzato.

### PromptAgentApiModelWorkflowOverrideInputToolsItems

Il tipo di strumento

- `type`: `api_integration_webhook` (ApiIntegrationWebhookToolConfig)
  - `api_integration_connection_id` (string, required)
  - `api_integration_id` (string, required)
  - `description` (string, required) — Descrizione di quando usare lo strumento e di cosa fa.
  - `name` (string, required)
  - `api_schema_overrides` (ApiIntegrationWebhookOverrides, optional, nullable) — Override utente applicati sopra l'api_schema di base
  - `assignments` (list of DynamicVariableAssignment, optional) — Configurazione per estrarre valori dalle risposte degli strumenti e assegnarli alle variabili dinamiche
  - `dynamic_variables` (DynamicVariablesConfig, optional) — Configurazione per le variabili dinamiche
  - `execution_mode` (enum, optional, default: immediate) — Determina quando e come viene eseguito lo strumento: 'immediate' esegue subito lo strumento quando viene richiesto dall'LLM, 'post_tool_speech' attende che l'agente finisca di parlare prima di eseguirlo, 'async' esegue lo strumento in background senza bloccare: ideale per operazioni di lunga durata.
    - Allowed values: `immediate`, `post_tool_speech`, `async`
  - `interruption_mode` (enum, optional, default: allow) — Controlla se l'utente può interrompere l'agente durante questa chiamata allo strumento. 'allow' (predefinito) consente all'utente di interrompere in qualsiasi momento, 'disable_during_tool' sopprime le interruzioni solo mentre lo strumento è in esecuzione, 'disable_during_tool_and_turn' sopprime le interruzioni mentre lo strumento è in esecuzione e per la risposta dell'agente successiva.
    - Allowed values: `allow`, `disable_during_tool`, `disable_during_tool_and_turn`
  - `pre_tool_speech` (enum, optional, default: auto) — Controlla se l'agente parla prima che venga chiamato questo strumento. 'auto' (predefinito) decide in base alla latenza recente dello strumento, 'force' chiede sempre all'agente di parlare, 'off' disattiva completamente questa funzione indipendentemente dalla latenza.
    - Allowed values: `auto`, `force`, `off`
  - `response_timeout_secs` (integer, optional, default: 20) — Il tempo massimo in secondi di attesa per il completamento della chiamata allo strumento. Deve essere compreso tra 5 e 300 secondi inclusi.
  - `tool_call_sound` (enum, optional, nullable) — Tipo di suono di chiamata dello strumento predefinito da riprodurre durante l'esecuzione. Se non specificato, non verrà riprodotto alcun suono di chiamata dello strumento.
    - Allowed values: `typing`, `elevator1`, `elevator2`, `elevator3`, `elevator4`
  - `tool_call_sound_behavior` (enum, optional, default: auto) — Determina quando deve essere riprodotto il suono della chiamata dello strumento. 'auto' viene riprodotto solo quando è presente parlato prima dello strumento, mentre 'always' viene riprodotto a ogni chiamata dello strumento.
    - Allowed values: `auto`, `always`
  - `tool_error_handling_mode` (enum, optional, default: auto) — Controlla come vengono elaborati gli errori degli strumenti prima di essere condivisi con l'agente. 'auto' determina la gestione in base al tipo di strumento (riassunto per le integrazioni native, nascosto per gli altri), 'summarized' invia un riepilogo generato da un LLM, 'passthrough' invia l'errore non elaborato, 'hide' non condivide l'errore con l'agente.
    - Allowed values: `auto`, `summarized`, `passthrough`, `hide`
  - `tool_version` (string, optional, default: 1.0.0) — La versione dello strumento di integrazione API
  - `disable_interruptions` (boolean, optional, default: false, deprecated) — DEPRECATO: usa invece `interruption_mode`. Se true, l'utente non potrà interrompere l'agente mentre questo strumento è in esecuzione.
  - `force_pre_tool_speech` (boolean, optional, default: false, deprecated) — DEPRECATO: usa invece `pre_tool_speech`. Se true, l'agente parlerà prima della chiamata allo strumento.
- `type`: `client` (ClientToolConfig)
  - `description` (string, required) — Descrizione di quando usare lo strumento e di cosa fa.
  - `name` (string, required)
  - `assignments` (list of DynamicVariableAssignment, optional) — Configurazione per estrarre valori dalle risposte degli strumenti e assegnarli alle variabili dinamiche
  - `dynamic_variables` (DynamicVariablesConfig, optional) — Configurazione per le variabili dinamiche
  - `execution_mode` (enum, optional, default: immediate) — Determina quando e come viene eseguito lo strumento: 'immediate' esegue subito lo strumento quando viene richiesto dall'LLM, 'post_tool_speech' attende che l'agente finisca di parlare prima di eseguirlo, 'async' esegue lo strumento in background senza bloccare: ideale per operazioni di lunga durata.
    - Allowed values: `immediate`, `post_tool_speech`, `async`
  - `expects_response` (boolean, optional, default: false) — Se true, la chiamata di questo strumento deve bloccare la conversazione finché il client non risponde con una risposta passata all'llm. Se false, la conversazione continuerà senza attendere la risposta del client; è utile per mostrare contenuti a un utente senza bloccare la conversazione.
  - `interruption_mode` (enum, optional, default: allow) — Controlla se l'utente può interrompere l'agente durante questa chiamata allo strumento. 'allow' (predefinito) consente all'utente di interrompere in qualsiasi momento, 'disable_during_tool' sopprime le interruzioni solo mentre lo strumento è in esecuzione, 'disable_during_tool_and_turn' sopprime le interruzioni mentre lo strumento è in esecuzione e per la risposta dell'agente successiva.
    - Allowed values: `allow`, `disable_during_tool`, `disable_during_tool_and_turn`
  - `parameters` (ObjectJsonSchemaProperty-Input, optional, nullable) — Schema per tutti i parametri da passare al client
  - `pre_tool_speech` (enum, optional, default: auto) — Controlla se l'agente parla prima che venga chiamato questo strumento. 'auto' (predefinito) decide in base alla latenza recente dello strumento, 'force' chiede sempre all'agente di parlare, 'off' disattiva completamente questa funzione indipendentemente dalla latenza.
    - Allowed values: `auto`, `force`, `off`
  - `response_timeout_secs` (integer, optional, default: 20) — Il tempo massimo in secondi di attesa per il completamento della chiamata allo strumento. Deve essere compreso tra 1 e 120 secondi inclusi, oppure -1 per attendere indefinitamente la risposta del client (richiede expects_response).
  - `tool_call_sound` (enum, optional, nullable) — Tipo di suono di chiamata dello strumento predefinito da riprodurre durante l'esecuzione. Se non specificato, non verrà riprodotto alcun suono di chiamata dello strumento.
    - Allowed values: `typing`, `elevator1`, `elevator2`, `elevator3`, `elevator4`
  - `tool_call_sound_behavior` (enum, optional, default: auto) — Determina quando deve essere riprodotto il suono della chiamata dello strumento. 'auto' viene riprodotto solo quando è presente parlato prima dello strumento, mentre 'always' viene riprodotto a ogni chiamata dello strumento.
    - Allowed values: `auto`, `always`
  - `tool_error_handling_mode` (enum, optional, default: auto) — Controlla come vengono elaborati gli errori degli strumenti prima di essere condivisi con l'agente. 'auto' determina la gestione in base al tipo di strumento (riassunto per le integrazioni native, nascosto per gli altri), 'summarized' invia un riepilogo generato da un LLM, 'passthrough' invia l'errore non elaborato, 'hide' non condivide l'errore con l'agente.
    - Allowed values: `auto`, `summarized`, `passthrough`, `hide`
  - `disable_interruptions` (boolean, optional, default: false, deprecated) — DEPRECATO: usa invece `interruption_mode`. Se true, l'utente non potrà interrompere l'agente mentre questo strumento è in esecuzione.
  - `force_pre_tool_speech` (boolean, optional, default: false, deprecated) — DEPRECATO: usa invece `pre_tool_speech`. Se true, l'agente parlerà prima della chiamata allo strumento.
- `type`: `mcp` (mcp)
- `type`: `smb` (smb)
- `type`: `system` (SystemToolConfig)
  - `name` (string, required)
  - `params` (ToolRequestModelToolConfigDiscriminatorMappingSystemParams, required)
  - `assignments` (list of DynamicVariableAssignment, optional) — Configurazione per estrarre valori dalle risposte degli strumenti e assegnarli alle variabili dinamiche
  - `description` (string, optional, default: ) — Descrizione di quando usare lo strumento e di cosa fa. Lascia vuoto per utilizzare la descrizione predefinita ottimizzata per il tipo di strumento specifico.
  - `interruption_mode` (enum, optional, default: allow) — Controlla se l'utente può interrompere l'agente durante questa chiamata allo strumento. 'allow' (predefinito) consente all'utente di interrompere in qualsiasi momento, 'disable_during_tool' sopprime le interruzioni solo mentre lo strumento è in esecuzione, 'disable_during_tool_and_turn' sopprime le interruzioni mentre lo strumento è in esecuzione e per la risposta dell'agente successiva.
    - Allowed values: `allow`, `disable_during_tool`, `disable_during_tool_and_turn`
  - `pre_tool_speech` (enum, optional, default: auto) — Controlla se l'agente parla prima che venga chiamato questo strumento. 'auto' (predefinito) decide in base alla latenza recente dello strumento, 'force' chiede sempre all'agente di parlare, 'off' disattiva completamente questa funzione indipendentemente dalla latenza.
    - Allowed values: `auto`, `force`, `off`
  - `response_timeout_secs` (integer, optional, default: 20) — Il tempo massimo in secondi di attesa per il completamento della chiamata allo strumento.
  - `tool_call_sound` (enum, optional, nullable) — Tipo di suono di chiamata dello strumento predefinito da riprodurre durante l'esecuzione. Se non specificato, non verrà riprodotto alcun suono di chiamata dello strumento.
    - Allowed values: `typing`, `elevator1`, `elevator2`, `elevator3`, `elevator4`
  - `tool_call_sound_behavior` (enum, optional, default: auto) — Determina quando deve essere riprodotto il suono della chiamata dello strumento. 'auto' viene riprodotto solo quando è presente parlato prima dello strumento, mentre 'always' viene riprodotto a ogni chiamata dello strumento.
    - Allowed values: `auto`, `always`
  - `tool_error_handling_mode` (enum, optional, default: auto) — Controlla come vengono elaborati gli errori degli strumenti prima di essere condivisi con l'agente. 'auto' determina la gestione in base al tipo di strumento (riassunto per le integrazioni native, nascosto per gli altri), 'summarized' invia un riepilogo generato da un LLM, 'passthrough' invia l'errore non elaborato, 'hide' non condivide l'errore con l'agente.
    - Allowed values: `auto`, `summarized`, `passthrough`, `hide`
  - `disable_interruptions` (boolean, optional, default: false, deprecated) — DEPRECATO: usa invece `interruption_mode`. Se true, l'utente non potrà interrompere l'agente mentre questo strumento è in esecuzione.
  - `force_pre_tool_speech` (boolean, optional, default: false, deprecated) — DEPRECATO: usa invece `pre_tool_speech`. Se true, l'agente parlerà prima della chiamata allo strumento.
- `type`: `webhook` (WebhookToolConfig)
  - `api_schema` (WebhookToolApiSchemaConfig-Input, required) — Lo schema per il webhook in uscita, inclusi i parametri e la specifica dell'URL
  - `description` (string, required) — Descrizione di quando usare lo strumento e di cosa fa.
  - `name` (string, required)
  - `assignments` (list of DynamicVariableAssignment, optional) — Configurazione per estrarre valori dalle risposte degli strumenti e assegnarli alle variabili dinamiche
  - `dynamic_variables` (DynamicVariablesConfig, optional) — Configurazione per le variabili dinamiche
  - `execution_mode` (enum, optional, default: immediate) — Determina quando e come viene eseguito lo strumento: 'immediate' esegue subito lo strumento quando viene richiesto dall'LLM, 'post_tool_speech' attende che l'agente finisca di parlare prima di eseguirlo, 'async' esegue lo strumento in background senza bloccare: ideale per operazioni di lunga durata.
    - Allowed values: `immediate`, `post_tool_speech`, `async`
  - `follow_redirects` (boolean, optional, default: false) — Indica se risolvere un redirect dall'endpoint e restituire la risposta finale. Viene seguito un solo redirect, come richiesta GET senza il body della richiesta; nessuna configurazione di questo strumento (header, autenticazione, certificato client) viene inviata alla destinazione del redirect. Sia l'endpoint sia la destinazione del redirect devono usare HTTPS. Non supportato per gli strumenti di integrazione API.
  - `follow_redirects_allowed_domains` (list of string, optional) — Domini a cui può puntare un reindirizzamento, ad esempio 'test.example.com'. Obbligatorio quando si seguono i reindirizzamenti; una destinazione esterna all'elenco viene rifiutata.
  - `interruption_mode` (enum, optional, default: allow) — Controlla se l'utente può interrompere l'agente durante questa chiamata allo strumento. 'allow' (predefinito) consente all'utente di interrompere in qualsiasi momento, 'disable_during_tool' sopprime le interruzioni solo mentre lo strumento è in esecuzione, 'disable_during_tool_and_turn' sopprime le interruzioni mentre lo strumento è in esecuzione e per la risposta dell'agente successiva.
    - Allowed values: `allow`, `disable_during_tool`, `disable_during_tool_and_turn`
  - `pre_tool_speech` (enum, optional, default: auto) — Controlla se l'agente parla prima che venga chiamato questo strumento. 'auto' (predefinito) decide in base alla latenza recente dello strumento, 'force' chiede sempre all'agente di parlare, 'off' disattiva completamente questa funzione indipendentemente dalla latenza.
    - Allowed values: `auto`, `force`, `off`
  - `response_timeout_secs` (integer, optional, default: 20) — Il tempo massimo in secondi di attesa per il completamento della chiamata allo strumento. Deve essere compreso tra 5 e 300 secondi inclusi.
  - `tool_call_sound` (enum, optional, nullable) — Tipo di suono di chiamata dello strumento predefinito da riprodurre durante l'esecuzione. Se non specificato, non verrà riprodotto alcun suono di chiamata dello strumento.
    - Allowed values: `typing`, `elevator1`, `elevator2`, `elevator3`, `elevator4`
  - `tool_call_sound_behavior` (enum, optional, default: auto) — Determina quando deve essere riprodotto il suono della chiamata dello strumento. 'auto' viene riprodotto solo quando è presente parlato prima dello strumento, mentre 'always' viene riprodotto a ogni chiamata dello strumento.
    - Allowed values: `auto`, `always`
  - `tool_error_handling_mode` (enum, optional, default: auto) — Controlla come vengono elaborati gli errori degli strumenti prima di essere condivisi con l'agente. 'auto' determina la gestione in base al tipo di strumento (riassunto per le integrazioni native, nascosto per gli altri), 'summarized' invia un riepilogo generato da un LLM, 'passthrough' invia l'errore non elaborato, 'hide' non condivide l'errore con l'agente.
    - Allowed values: `auto`, `summarized`, `passthrough`, `hide`
  - `disable_interruptions` (boolean, optional, default: false, deprecated) — DEPRECATO: usa invece `interruption_mode`. Se true, l'utente non potrà interrompere l'agente mentre questo strumento è in esecuzione.
  - `force_pre_tool_speech` (boolean, optional, default: false, deprecated) — DEPRECATO: usa invece `pre_tool_speech`. Se true, l'agente parlerà prima della chiamata allo strumento.

### SoftTimeoutConfigOverride

- `message` (string, optional, nullable) — Messaggio da mostrare quando viene raggiunto il primo timeout flessibile durante l'attesa della risposta LLM. Supporta le variabili dinamiche (ad esempio \{\{system\_\_time}}, \{\{custom\_variable}}).
- `additional_soft_timeout_messages` (list of string, optional, nullable) — Messaggi di riempimento statici aggiuntivi per i soft timeout successivi nella stessa generazione LLM. Il primo timeout usa `message`. Se sono configurati meno messaggi di `max_soft_timeouts_per_generation`, viene ripetuto l'ultimo messaggio configurato; altrimenti viene usato un messaggio di riempimento integrato.

### PromptAgentAPIModelOverride-Input

- `prompt` (string, optional, nullable) — Il prompt per l'agente
- `llm` (enum, optional, nullable) — L'LLM da interrogare con il prompt e la cronologia della chat. Se utilizzi la residenza dei dati, l'LLM deve essere supportato nell'ambiente di residenza dei dati.
  - 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-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`, `claude-sonnet-4-5`, `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-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`, `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`
- `tool_ids` (list of string, optional, nullable) — Un elenco di ID degli strumenti usati dall'agente.
- `native_mcp_server_ids` (list of string, optional, nullable) — Un elenco di ID dei server MCP nativi da usare con l'agente
- `knowledge_base` (list of KnowledgeBaseLocator, optional, nullable) — Un elenco di knowledge base da usare con l'agente

### SystemToolConfig

Uno strumento di sistema è uno strumento usato per chiamare un metodo di sistema sul server

- `name` (string, required)
- `params` (ToolRequestModelToolConfigDiscriminatorMappingSystemParams, required)
- `description` (string, optional, default: ) — Descrizione di quando usare lo strumento e di cosa fa. Lascia vuoto per utilizzare la descrizione predefinita ottimizzata per il tipo di strumento specifico.
- `response_timeout_secs` (integer, optional, default: 20) — Il tempo massimo in secondi di attesa per il completamento della chiamata allo strumento.
- `interruption_mode` (enum, optional, default: allow) — Controlla se l'utente può interrompere l'agente durante questa chiamata allo strumento. 'allow' (predefinito) consente all'utente di interrompere in qualsiasi momento, 'disable_during_tool' sopprime le interruzioni solo mentre lo strumento è in esecuzione, 'disable_during_tool_and_turn' sopprime le interruzioni mentre lo strumento è in esecuzione e per la risposta dell'agente successiva.
  - Allowed values: `allow`, `disable_during_tool`, `disable_during_tool_and_turn`
- `pre_tool_speech` (enum, optional, default: auto) — Controlla se l'agente parla prima che venga chiamato questo strumento. 'auto' (predefinito) decide in base alla latenza recente dello strumento, 'force' chiede sempre all'agente di parlare, 'off' disattiva completamente questa funzione indipendentemente dalla latenza.
  - Allowed values: `auto`, `force`, `off`
- `assignments` (list of DynamicVariableAssignment, optional) — Configurazione per estrarre valori dalle risposte degli strumenti e assegnarli alle variabili dinamiche
- `tool_call_sound` (enum, optional, nullable) — Tipo di suono di chiamata dello strumento predefinito da riprodurre durante l'esecuzione. Se non specificato, non verrà riprodotto alcun suono di chiamata dello strumento.
  - Allowed values: `typing`, `elevator1`, `elevator2`, `elevator3`, `elevator4`
- `tool_call_sound_behavior` (enum, optional, default: auto) — Determina quando deve essere riprodotto il suono della chiamata dello strumento. 'auto' viene riprodotto solo quando è presente parlato prima dello strumento, mentre 'always' viene riprodotto a ogni chiamata dello strumento.
  - Allowed values: `auto`, `always`
- `tool_error_handling_mode` (enum, optional, default: auto) — Controlla come vengono elaborati gli errori degli strumenti prima di essere condivisi con l'agente. 'auto' determina la gestione in base al tipo di strumento (riassunto per le integrazioni native, nascosto per gli altri), 'summarized' invia un riepilogo generato da un LLM, 'passthrough' invia l'errore non elaborato, 'hide' non condivide l'errore con l'agente.
  - Allowed values: `auto`, `summarized`, `passthrough`, `hide`
- `disable_interruptions` (boolean, optional, default: false, deprecated) — DEPRECATO: usa invece `interruption_mode`. Se true, l'utente non potrà interrompere l'agente mentre questo strumento è in esecuzione.
- `force_pre_tool_speech` (boolean, optional, default: false, deprecated) — DEPRECATO: usa invece `pre_tool_speech`. Se true, l'agente parlerà prima della chiamata allo strumento.

### CustomLlmApiKey

La chiave API per l'autenticazione. Può essere un riferimento a un segreto del workspace \{'secret\_id': '...'} o un riferimento a una variabile d'ambiente \{'env\_var\_label': '...'}.

### CustomLlmAuthConnection

Connessione di autenticazione del workspace facoltativa. Sono supportate solo le connessioni di autenticazione che producono un token Authorization Bearer; non sono supportate le connessioni Basic auth, mTLS, con header personalizzato e con segreto URL.

### CustomLlmRequestHeaders

### KnowledgeBaseToolInfo

- `enabled_strategies` (list of enum, optional) — Strategie di ricerca esposte al modello. Non può essere vuoto.
  - Allowed values: `cat`, `keyword`, `semantic`, `ls`

### BackupLLMDefault

### BackupLLMDisabled

### BackupLLMOverride

- `order` (list of enum, required)
  - 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-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`, `claude-sonnet-4-5`, `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-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`, `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`

### ApiIntegrationWebhookOverrides

- `schema_overrides` (map from string to ApiIntegrationWebhookOverridesSchemaOverrides, optional, nullable)
- `response_filter_mode` (enum, optional, nullable, default: all) — Controlla come vengono filtrate le risposte degli strumenti prima di essere visibili all'agente.
  - Allowed values: `all`, `allow`, `hide_all`
- `response_filters` (list of string, optional, nullable)
- `request_headers` (map from string to ApiIntegrationWebhookOverridesRequestHeaders, optional, nullable)

### DynamicVariableAssignment

Configurazione per estrarre valori dalle risposte degli strumenti e assegnarli alle variabili dinamiche.

- `dynamic_variable` (string, required) — Il nome della variabile dinamica a cui assegnare il valore estratto
- `value_path` (string, required) — Path in notazione puntata per estrarre il valore dalla sorgente (ad esempio, 'user.name' o 'data.0.id')
- `source` ("response", optional, default: response) — La sorgente da cui estrarre il valore. Al momento è supportato solo 'response'.
- `sanitize` (boolean, optional, default: false) — Se true, il valore di questa assegnazione verrà rimosso dalla risposta dello strumento prima dell'invio all'LLM e alla trascrizione, ma verrà comunque elaborato per l'assegnazione delle variabili.
- `preserve_native_type` (boolean, optional, default: false) — Se true, i valori non scalari, come elenchi e oggetti, estratti dalla risposta dello strumento vengono archiviati nel loro tipo nativo anziché essere convertiti in stringhe JSON. Abilita questa opzione per usare direttamente gli array estratti come variabili dinamiche di elenco.

### DynamicVariablesConfig

- `dynamic_variable_placeholders` (map from string to any, optional) — Un dizionario di segnaposto di variabili dinamiche e dei relativi valori.

### ObjectJsonSchemaProperty-Input

- `property_kind` (enum, optional, default: object)
  - Allowed values: `array`, `object`
- `description` (string, optional, default: )
- `dynamic_variable` (string, optional, default: ) — Quando è impostato, l'intero parametro viene popolato da questa variabile dinamica in fase di runtime. Si esclude a vicenda con description (valore fornito dall'LLM), constant_value e is_omitted.
- `constant_value` (map from string to any, optional, nullable) — Quando è impostato, l'intero oggetto usa questo valore JSON costante in fase di runtime. Si esclude a vicenda con description (oggetto fornito dall'LLM), dynamic_variable e is_omitted.
- `is_omitted` (boolean, optional, default: false) — Se true, questo parametro verrà completamente omesso dalla richiesta. Valido solo per i parametri facoltativi. Si esclude a vicenda con description, dynamic_variable e constant_value.
- `type` ("object", optional, default: object)
- `required` (list of string, optional)
- `properties` (map from string to ObjectJsonSchemaPropertyInput, optional)
- `required_constraints` (RequiredConstraints, optional, nullable) — Wrapper per i vincoli di composizione anyOf/allOf limitati ai campi obbligatori.

### ToolRequestModelToolConfigDiscriminatorMappingSystemParams

- `system_tool_type`: `end_call` (EndCallToolConfig)
- `system_tool_type`: `end_procedure` (EndProcedureToolConfig)
  - `procedures` (map from string to ToolResponseModelToolConfigDiscriminatorMappingSystemParamsDiscriminatorMappingEndProcedureProcedures, optional)
- `system_tool_type`: `knowledge_base` (KnowledgeBaseToolConfig)
  - `enabled_strategies` (list of enum, optional)
    - Allowed values: `cat`, `keyword`, `semantic`, `ls`
- `system_tool_type`: `knowledge_base_rag` (KnowledgeBaseRagToolConfig)
- `system_tool_type`: `language_detection` (LanguageDetectionToolConfig)
  - `only_at_conversation_start` (boolean, optional, default: false) — Se non avviene alcun cambio di lingua nei primi 2 turni dell'utente, i tentativi successivi non riusciranno e la conversazione rimarrà nella lingua corrente. Se la lingua cambia durante questi turni, i cambi successivi restano disponibili. Abilita questa opzione per ridurre la possibilità di cambi errati.
- `system_tool_type`: `play_keypad_touch_tone` (PlayDTMFToolConfig)
  - `suppress_turn_after_dtmf` (boolean, optional, default: false) — Se true, l'agente non genererà altro parlato dopo aver riprodotto i toni DTMF. Ciò impedisce che il parlato dell'agente interferisca con i sistemi IVR.
  - `use_out_of_band_dtmf` (boolean, optional, default: true) — Invia i toni DTMF come eventi RTP out-of-band (RFC 4733) anziché come audio in-band. Efficace solo per i numeri importati da trunk SIP.
- `system_tool_type`: `skip_turn` (SkipTurnToolConfig)
  - `wait_timeout_secs` (double, optional, default: -1) — Secondi di attesa dopo skip_turn prima che l'agente generi un messaggio di verifica contestuale. Il timer "End conversation after silence" viene sospeso durante l'attesa. -1 disabilita l'attesa: dopo skip_turn l'agente resta in silenzio finché il chiamante non parla e il timer continua a scorrere. Si applica solo alle conversazioni vocali.
- `system_tool_type`: `start_procedure` (StartProcedureToolConfig)
  - `procedures` (map from string to ToolResponseModelToolConfigDiscriminatorMappingSystemParamsDiscriminatorMappingStartProcedureProcedures, optional)
- `system_tool_type`: `transfer_to_agent` (TransferToAgentToolConfig)
  - `transfers` (list of AgentTransfer-Input, required)
- `system_tool_type`: `transfer_to_number` (TransferToNumberToolConfig)
  - `transfers` (list of PhoneNumberTransfer, required)
  - `enable_client_message` (boolean, optional, default: true) — Indica se riprodurre un messaggio al cliente mentre attende il trasferimento. Per la retrocompatibilità, il valore predefinito è true.
- `system_tool_type`: `voicemail_detection` (VoicemailDetectionToolConfig)
  - `voicemail_message` (string, optional, nullable) — Messaggio facoltativo da lasciare nella segreteria telefonica quando viene rilevata. Se non viene fornito, la chiamata termina immediatamente al rilevamento della segreteria. Supporta variabili dinamiche, ad esempio \{\{system\_\_time}}, \{\{system\_\_call\_duration\_secs}}, \{\{custom\_variable}}.

### WebhookToolApiSchemaConfig-Input

- `url` (string, required) — L'URL a cui verrà inviato il webhook. Può includere parametri path, ad es. [https://example.com/agents/\{agent\_id}](https://example.com/agents/\{agent_id})
- `request_headers` (map from string to WebhookToolApiSchemaConfigInputRequestHeaders, optional) — Header da includere nella richiesta
- `method` (enum, optional, default: GET) — Il metodo HTTP da usare per il webhook
  - Allowed values: `GET`, `POST`, `PUT`, `PATCH`, `DELETE`
- `path_params_schema` (map from string to LiteralJsonSchemaProperty, optional) — Schema per eventuali parametri del path. Le chiavi devono corrispondere ai segnaposto nell'URL.
- `query_params_schema` (QueryParamsJsonSchema-Input, optional, nullable) — Schema per eventuali query params. Verranno aggiunti alla fine dell'URL come query params. Nota: le proprietà in un query param devono essere tutte di tipi letterali.
- `request_body_schema` (ObjectJsonSchemaProperty-Input, optional, nullable) — Schema per eventuali parametri del body. Utilizzato per le richieste POST/PATCH/PUT. Lo schema deve essere un oggetto che verrà inviato come body JSON.
- `response_body_schema` (ObjectJsonSchemaProperty-Input, optional, nullable) — Schema che descrive la struttura prevista del body della risposta. Solo a scopo di documentazione; non viene esposto al LLM.
- `response_filter` (ResponseFilter, optional, nullable) — Filtro facoltativo di allow-list applicato alla risposta prima che l'LLM la elabori, affinché le risposte di grandi dimensioni non sovraccarichino il contesto. Per impostazione predefinita viene usata la risposta completa.
- `content_type` (enum, optional, default: application/json) — Tipo di contenuto per il body della richiesta. Si applica solo alle richieste POST/PUT/PATCH.
  - Allowed values: `application/json`, `application/x-www-form-urlencoded`
- `auth_resolved_params` (list of string, optional) — Segnaposto URL risolti dalla connessione di autenticazione (ad esempio, segreti inseriti tramite UrlSecretAuthConnection) anziché da path_params_schema.
- `auth_connection` (WebhookToolApiSchemaConfigInputAuthConnection, optional, nullable) — Connessione di autenticazione facoltativa da usare per l'autenticazione con questo webhook

### ConvAISecretLocator

Usato per fare riferimento a un segreto dall'archivio dei segreti dell'agente.

- `secret_id` (string, required)

### ConvAIEnvVarLocator

Usato per fare riferimento a una variabile d'ambiente tramite etichetta.

- `env_var_label` (string, required)

### AuthConnectionLocator

Usato per fare riferimento a una connessione di autenticazione dall'archivio delle connessioni di autenticazione del workspace.

- `auth_connection_id` (string, required)

### EnvironmentAuthConnectionLocator

Fa riferimento tramite etichetta a una variabile di ambiente di tipo 'auth_connection'. In fase di runtime, viene risolta nella connessione di autenticazione dell'ambiente corrente, con fallback all'ambiente predefinito.

- `env_var_label` (string, required)

### ConvAIDynamicVariable

Usato per fare riferimento a una variabile dinamica.

- `variable_name` (string, required)

### ApiIntegrationWebhookOverridesSchemaOverrides

- `source`: `constant` (ConstantSchemaOverride)
  - `constant_value` (WorkflowToolLocatorSchemaOverridesDiscriminatorMappingConstantConstantValue, required, nullable) — Il valore costante da usare
- `source`: `dynamic_variable` (DynamicVariableSchemaOverride)
  - `dynamic_variable` (string, required) — Il nome della variabile dinamica da usare
- `source`: `llm` (LLMSchemaOverride)
  - `prompt` (string, optional, nullable) — Sostituzione del prompt per l'LLM. Se non fornita, viene utilizzata la descrizione originale dello schema.
- `source`: `omit` (OmitSchemaOverride)

### ApiIntegrationWebhookOverridesRequestHeaders

### ObjectJsonSchemaPropertyInput

### RequiredConstraints

Wrapper per i vincoli di composizione anyOf/allOf limitati ai campi obbligatori.

- `any_of` (list of RequiredConstraint, optional)
- `all_of` (list of RequiredConstraint, optional)

### ToolResponseModelToolConfigDiscriminatorMappingSystemParamsDiscriminatorMappingEndProcedureProcedures

### ToolResponseModelToolConfigDiscriminatorMappingSystemParamsDiscriminatorMappingStartProcedureProcedures

### AgentTransfer-Input

- `condition` (string, required)
- `agent_id` (string, optional, nullable)
- `branch_id` (string, optional, nullable)
- `node_id` (string, optional, nullable)
- `delay_ms` (integer, optional, default: 0)
- `transfer_message` (string, optional, nullable)
- `enable_transferred_agent_first_message` (boolean, optional, default: false)
- `is_workflow_node_transfer` (boolean, optional, default: false)
- `preserve_client_tts_overrides` (boolean, optional, default: false) — Definisce se gli override del client TTS debbano essere trasferiti all'agente di destinazione.
- `preserve_voice_settings` (boolean, optional, default: false) — Definisce se la voce di base, il modello TTS e le impostazioni vocali debbano essere trasferiti all'agente di destinazione.

### PhoneNumberTransfer

- `transfer_destination` (PhoneNumberTransferTransferDestination, required)
- `condition` (string, required)
- `custom_sip_headers` (list of PhoneNumberTransferCustomSipHeadersItems, optional) — Header SIP personalizzati da includere durante il trasferimento della chiamata. Ogni header può essere un valore statico o un riferimento a variabile dinamica.
- `transfer_type` (enum, optional, default: conference)
  - Allowed values: `blind`, `conference`, `sip_refer`
- `sip_refer_play_dialtone` (boolean, optional, default: true) — Se True, viene riprodotto un tono di chiamata sulla tratta di chiamata originale durante il completamento di un trasferimento SIP REFER. Il tono viene trasmesso tramite RTP al peer SIP che esegue il REFER, quindi disabilita questa opzione se il sistema ricevente (ad esempio un SBC o un contact center) non deve sentirlo. Se disabilitata, il chiamante sente silenzio fino al completamento del trasferimento. Solo per trasferimenti SIP REFER.
- `uui` (UUITransferConfig, optional, nullable) — Informazioni User-to-User (RFC 7433) da allegare ai trasferimenti SIP REFER. Trasporta il contesto della chiamata, come identificatori CRM o il motivo dell'escalation, oltre il confine del trasferimento.
- `post_dial_digits` (PhoneNumberTransferPostDialDigits, optional, nullable) — Cifre DTMF da inviare dopo la connessione della chiamata (ad esempio, 'ww1234' per l'interno). Possono essere un valore statico o un riferimento a una variabile dinamica. Usa 'w' per una pausa di 0,5 s. Supportato solo per i trasferimenti Twilio.
- `phone_number` (string, optional, nullable, deprecated)

### WebhookToolApiSchemaConfigInputRequestHeaders

### LiteralJsonSchemaProperty

Proprietà dello schema per tipi JSON letterali. IMPORTANTE: puoi impostare UN SOLO dei seguenti campi: description (il LLM fornisce il valore), dynamic_variable (valore da variabile), is_system_provided (il sistema fornisce il valore), constant_value (valore fisso) oppure is_omitted (il parametro viene omesso). Sono mutuamente esclusivi.

- `type` (LiteralJsonSchemaPropertyType, required)
- `description` (string, optional, default: ) — La descrizione della proprietà. Se impostata, l'LLM fornirà il valore in base a questa descrizione. Si esclude a vicenda con dynamic_variable, is_system_provided, constant_value e is_omitted.
- `enum` (list of string, optional, nullable) — List of allowed string values for string type parameters
- `is_system_provided` (boolean, optional, default: false) — Se true, il valore verrà popolato dal sistema a runtime. Utilizzato dagli strumenti Webhook di integrazione API per i template. Si esclude a vicenda con description, dynamic_variable, constant_value e is_omitted.
- `dynamic_variable` (string, optional, default: ) — Il nome della variabile dinamica da usare per il valore di questa proprietà. Si esclude a vicenda con description, is_system_provided, constant_value e is_omitted.
- `allowed_values` (AllowedValues, optional, nullable) — Controllo di rifiuto lato server per un valore fornito da un LLM: il runtime rifiuta qualsiasi valore esterno all'insieme consentito specificato da questo oggetto e l'insieme non viene comunicato all'LLM come enum. Supportato solo quando l'origine del valore è `description`; la combinazione con dynamic_variable, is_system_provided, constant_value o is_omitted viene rifiutata.
- `constant_value` (LiteralJsonSchemaPropertyConstantValue, optional, nullable, default: ) — Un valore costante da usare per questa proprietà. È mutuamente esclusivo con description, dynamic_variable, is_system_provided e is_omitted.
- `is_omitted` (boolean, optional, default: false) — Se true, questo parametro verrà completamente omesso dalla richiesta. Valido solo per i parametri facoltativi. Si esclude a vicenda con description, dynamic_variable, is_system_provided e constant_value.
- `allowed_values_dynamic_variable` (string, optional, default: , deprecated) — DEPRECATO: usa invece `allowed_values`. Se impostato, l'LLM fornisce il valore, ma il runtime rifiuta qualsiasi valore non presente nell'elenco contenuto in questa variabile dinamica (deve essere un array JSON come ["ws_alpha", "ws_beta"]). Usalo per consentire all'LLM di scegliere da un insieme verificato dal server, ad esempio gli ID a cui l'utente corrente può accedere. Richiede description; è mutuamente esclusivo con dynamic_variable, is_system_provided, constant_value e is_omitted.

### QueryParamsJsonSchema-Input

- `properties` (map from string to LiteralJsonSchemaProperty, required)
- `required` (list of string, optional)

### ResponseFilter

Configurazione per filtrare le risposte degli strumenti prima che siano visibili all'agente.

- `mode` (enum, optional, default: all) — Controlla come vengono filtrate le risposte degli strumenti. 'all' restituisce l'intera risposta, 'allow' restituisce solo i path specificati, 'hide_all' nasconde l'intera risposta.
  - Allowed values: `all`, `allow`, `hide_all`
- `filters` (list of string, optional) — Path in notazione puntata da includere quando mode è 'allow' (ad esempio, ['ticket.id', 'ticket.status']).
- `content_type` ("application/json", optional, default: application/json) — Tipo di contenuto per il filtro delle risposte. Vengono filtrate solo le risposte 'application/json'.

### WebhookToolApiSchemaConfigInputAuthConnection

Connessione di autenticazione facoltativa da usare per l'autenticazione con questo webhook

### ArrayJsonSchemaProperty-Input

- `property_kind` (enum, optional, default: array)
  - Allowed values: `array`, `object`
- `description` (string, optional, default: )
- `dynamic_variable` (string, optional, default: ) — Quando è impostato, l'intero parametro viene popolato da questa variabile dinamica in fase di runtime. Si esclude a vicenda con description (valore fornito dall'LLM), constant_value e is_omitted.
- `constant_value` (list of any, optional, nullable) — Quando è impostato, l'intero array usa questo valore costante in fase di runtime. Si esclude a vicenda con description (array fornito dall'LLM), dynamic_variable e is_omitted.
- `is_omitted` (boolean, optional, default: false) — Se true, questo parametro verrà completamente omesso dalla richiesta. Valido solo per i parametri facoltativi. Si esclude a vicenda con description, dynamic_variable e constant_value.
- `type` ("array", optional, default: array)
- `items` (ArrayJsonSchemaPropertyInputItems, optional, default: {"allowed_values_dynamic_variable":"","constant_value":"","description":"Array element","dynamic_variable":"","is_omitted":false,"is_system_provided":false,"type":"string"}) — Schema per gli elementi dell'array.

### RequiredConstraint

Un insieme di campi che devono essere tutti presenti per soddisfare questo vincolo.

- `required` (list of string, required)

### ProcedureVersionRef

- `procedure_id` (string, required) — ID della procedura
- `version_id` (string, required) — ID della versione della procedura.

### ProcedureDraftRef

- `procedure_id` (string, required) — ID della procedura
- `version_id` (any, optional)

### PhoneNumberTransferTransferDestination

- `type`: `phone` (PhoneNumberTransferDestination)
  - `phone_number` (string, required)
- `type`: `phone_dynamic_variable` (PhoneNumberDynamicVariableTransferDestination)
  - `phone_number` (string, required)
- `type`: `sip_uri` (SIPUriTransferDestination)
  - `sip_uri` (string, required)
- `type`: `sip_uri_dynamic_variable` (SIPUriDynamicVariableTransferDestination)
  - `sip_uri` (string, required)

### PhoneNumberTransferCustomSipHeadersItems

- `type`: `dynamic` (CustomSIPHeaderWithDynamicVariable)
  - `key` (string, required) — Il nome dell'header SIP (ad es. 'X-Customer-ID')
  - `value` (string, required) — Il nome della variabile dinamica da risolvere
- `type`: `static` (CustomSIPHeader)
  - `key` (string, required) — Il nome dell'header SIP (ad es. 'X-Customer-ID')
  - `value` (string, required) — Il valore dell'header

### PhoneNumberTransferPostDialDigits

Cifre DTMF da inviare dopo la connessione della chiamata (ad esempio, 'ww1234' per l'interno). Possono essere un valore statico o un riferimento a una variabile dinamica. Usa 'w' per una pausa di 0,5 s. Supportato solo per i trasferimenti Twilio.

- `type`: `dynamic` (PostDialDigitsDynamicVariable)
  - `value` (string, required) — Il nome della variabile dinamica da risolvere
- `type`: `static` (PostDialDigitsStatic)
  - `value` (string, required) — Cifre DTMF da inviare dopo la connessione della chiamata (ad esempio, 'ww1234' per l'interno)

### LiteralJsonSchemaPropertyType

### AllowedValues

- `dynamic_variable` (string, required) — Nome di una variabile dinamica che deve risolversi in un array JSON di valori consentiti, ad esempio ["ws_alpha", "ws_beta"]. Le variabili di sistema funzionano solo se si risolvono in un elenco.

### LiteralJsonSchemaPropertyConstantValue

Un valore costante da usare per questa proprietà. È mutuamente esclusivo con description, dynamic_variable, is_system_provided e is_omitted.

### ArrayJsonSchemaPropertyInputItems

Schema per gli elementi dell'array.

## Examples

**Request**

```json
{
  "workflow": {
    "edges": {
      "entry_to_tool_a": {
        "source": "entry_node",
        "target": "tool_node_a",
        "forward_condition": {
          "condition": "Tool A condition"
        }
      },
      "start_to_entry": {
        "source": "start_node",
        "target": "entry_node",
        "forward_condition": {}
      },
      "tool_a_to_failure": {
        "source": "tool_node_a",
        "target": "failure_node",
        "forward_condition": {
          "successful": false
        }
      },
      "tool_a_to_tool_b": {
        "source": "tool_node_a",
        "target": "tool_node_b",
        "forward_condition": {
          "successful": true
        }
      },
      "tool_b_to_agent_transfer": {
        "source": "tool_node_b",
        "target": "success_transfer",
        "forward_condition": {}
      },
      "tool_b_to_conversation": {
        "source": "tool_node_b",
        "target": "success_conversation",
        "forward_condition": {
          "condition": "Conversation condition"
        }
      },
      "tool_b_to_end": {
        "source": "tool_node_b",
        "target": "success_end",
        "forward_condition": {
          "condition": "End condition"
        }
      },
      "tool_b_to_phone": {
        "source": "tool_node_b",
        "target": "success_phone",
        "forward_condition": {
          "expression": {
            "children": [
              {
                "name": "force_phone_transfer"
              },
              {
                "prompt": "Phone condition",
                "value_schema": {
                  "description": "Phone condition",
                  "type": "boolean"
                }
              },
              {
                "left": {
                  "name": "mode"
                },
                "right": {
                  "value": "dev"
                }
              }
            ]
          }
        }
      }
    },
    "nodes": {
      "entry_node": {
        "conversation_config": {},
        "edge_order": [
          "entry_to_tool_a"
        ],
        "label": "Entry"
      },
      "failure_node": {
        "conversation_config": {},
        "label": "Failure"
      },
      "start_node": {
        "edge_order": [
          "start_to_entry"
        ]
      },
      "success_conversation": {
        "conversation_config": {},
        "label": "Success A"
      },
      "success_end": {},
      "success_phone": {
        "transfer_destination": {
          "phone_number": "+1234567890"
        }
      },
      "success_transfer": {
        "agent_id": "success_transfer_agent"
      },
      "tool_node_a": {
        "edge_order": [
          "tool_a_to_failure",
          "tool_a_to_tool_b"
        ],
        "tools": [
          {
            "tool_id": "tool_a"
          },
          {
            "tool_id": "tool_b"
          }
        ]
      },
      "tool_node_b": {
        "edge_order": [
          "tool_b_to_conversation",
          "tool_b_to_end",
          "tool_b_to_phone",
          "tool_b_to_agent_transfer"
        ],
        "tools": [
          {
            "tool_id": "tool_a"
          }
        ]
      }
    }
  },
  "name": "string"
}
```

**SDK Code**

```python
import requests

url = "https://api.elevenlabs.io/v1/convai/agents/agent_3701k3ttaq12ewp8b7qv5rfyszkz/drafts"

querystring = {"branch_id":"agtbrch_8901k4t9z5defmb8vh3e9361y7nj"}

payload = {
    "workflow": {
        "edges": {
            "entry_to_tool_a": {
                "source": "entry_node",
                "target": "tool_node_a",
                "forward_condition": { "condition": "Tool A condition" }
            },
            "start_to_entry": {
                "source": "start_node",
                "target": "entry_node",
                "forward_condition": {}
            },
            "tool_a_to_failure": {
                "source": "tool_node_a",
                "target": "failure_node",
                "forward_condition": { "successful": False }
            },
            "tool_a_to_tool_b": {
                "source": "tool_node_a",
                "target": "tool_node_b",
                "forward_condition": { "successful": True }
            },
            "tool_b_to_agent_transfer": {
                "source": "tool_node_b",
                "target": "success_transfer",
                "forward_condition": {}
            },
            "tool_b_to_conversation": {
                "source": "tool_node_b",
                "target": "success_conversation",
                "forward_condition": { "condition": "Conversation condition" }
            },
            "tool_b_to_end": {
                "source": "tool_node_b",
                "target": "success_end",
                "forward_condition": { "condition": "End condition" }
            },
            "tool_b_to_phone": {
                "source": "tool_node_b",
                "target": "success_phone",
                "forward_condition": { "expression": { "children": [
                            { "name": "force_phone_transfer" },
                            {
                                "prompt": "Phone condition",
                                "value_schema": {
                                    "description": "Phone condition",
                                    "type": "boolean"
                                }
                            },
                            {
                                "left": { "name": "mode" },
                                "right": { "value": "dev" }
                            }
                        ] } }
            }
        },
        "nodes": {
            "entry_node": {
                "conversation_config": {},
                "edge_order": ["entry_to_tool_a"],
                "label": "Entry"
            },
            "failure_node": {
                "conversation_config": {},
                "label": "Failure"
            },
            "start_node": { "edge_order": ["start_to_entry"] },
            "success_conversation": {
                "conversation_config": {},
                "label": "Success A"
            },
            "success_end": {},
            "success_phone": { "transfer_destination": { "phone_number": "+1234567890" } },
            "success_transfer": { "agent_id": "success_transfer_agent" },
            "tool_node_a": {
                "edge_order": ["tool_a_to_failure", "tool_a_to_tool_b"],
                "tools": [{ "tool_id": "tool_a" }, { "tool_id": "tool_b" }]
            },
            "tool_node_b": {
                "edge_order": ["tool_b_to_conversation", "tool_b_to_end", "tool_b_to_phone", "tool_b_to_agent_transfer"],
                "tools": [{ "tool_id": "tool_a" }]
            }
        }
    },
    "name": "string"
}
headers = {"Content-Type": "application/json"}

response = requests.post(url, json=payload, headers=headers, params=querystring)

print(response.json())
```

```javascript
const url = 'https://api.elevenlabs.io/v1/convai/agents/agent_3701k3ttaq12ewp8b7qv5rfyszkz/drafts?branch_id=agtbrch_8901k4t9z5defmb8vh3e9361y7nj';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: '{"workflow":{"edges":{"entry_to_tool_a":{"source":"entry_node","target":"tool_node_a","forward_condition":{"condition":"Tool A condition"}},"start_to_entry":{"source":"start_node","target":"entry_node","forward_condition":{}},"tool_a_to_failure":{"source":"tool_node_a","target":"failure_node","forward_condition":{"successful":false}},"tool_a_to_tool_b":{"source":"tool_node_a","target":"tool_node_b","forward_condition":{"successful":true}},"tool_b_to_agent_transfer":{"source":"tool_node_b","target":"success_transfer","forward_condition":{}},"tool_b_to_conversation":{"source":"tool_node_b","target":"success_conversation","forward_condition":{"condition":"Conversation condition"}},"tool_b_to_end":{"source":"tool_node_b","target":"success_end","forward_condition":{"condition":"End condition"}},"tool_b_to_phone":{"source":"tool_node_b","target":"success_phone","forward_condition":{"expression":{"children":[{"name":"force_phone_transfer"},{"prompt":"Phone condition","value_schema":{"description":"Phone condition","type":"boolean"}},{"left":{"name":"mode"},"right":{"value":"dev"}}]}}}},"nodes":{"entry_node":{"conversation_config":{},"edge_order":["entry_to_tool_a"],"label":"Entry"},"failure_node":{"conversation_config":{},"label":"Failure"},"start_node":{"edge_order":["start_to_entry"]},"success_conversation":{"conversation_config":{},"label":"Success A"},"success_end":{},"success_phone":{"transfer_destination":{"phone_number":"+1234567890"}},"success_transfer":{"agent_id":"success_transfer_agent"},"tool_node_a":{"edge_order":["tool_a_to_failure","tool_a_to_tool_b"],"tools":[{"tool_id":"tool_a"},{"tool_id":"tool_b"}]},"tool_node_b":{"edge_order":["tool_b_to_conversation","tool_b_to_end","tool_b_to_phone","tool_b_to_agent_transfer"],"tools":[{"tool_id":"tool_a"}]}}},"name":"string"}'
};

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/convai/agents/agent_3701k3ttaq12ewp8b7qv5rfyszkz/drafts?branch_id=agtbrch_8901k4t9z5defmb8vh3e9361y7nj"

	payload := strings.NewReader("{\n  \"workflow\": {\n    \"edges\": {\n      \"entry_to_tool_a\": {\n        \"source\": \"entry_node\",\n        \"target\": \"tool_node_a\",\n        \"forward_condition\": {\n          \"condition\": \"Tool A condition\"\n        }\n      },\n      \"start_to_entry\": {\n        \"source\": \"start_node\",\n        \"target\": \"entry_node\",\n        \"forward_condition\": {}\n      },\n      \"tool_a_to_failure\": {\n        \"source\": \"tool_node_a\",\n        \"target\": \"failure_node\",\n        \"forward_condition\": {\n          \"successful\": false\n        }\n      },\n      \"tool_a_to_tool_b\": {\n        \"source\": \"tool_node_a\",\n        \"target\": \"tool_node_b\",\n        \"forward_condition\": {\n          \"successful\": true\n        }\n      },\n      \"tool_b_to_agent_transfer\": {\n        \"source\": \"tool_node_b\",\n        \"target\": \"success_transfer\",\n        \"forward_condition\": {}\n      },\n      \"tool_b_to_conversation\": {\n        \"source\": \"tool_node_b\",\n        \"target\": \"success_conversation\",\n        \"forward_condition\": {\n          \"condition\": \"Conversation condition\"\n        }\n      },\n      \"tool_b_to_end\": {\n        \"source\": \"tool_node_b\",\n        \"target\": \"success_end\",\n        \"forward_condition\": {\n          \"condition\": \"End condition\"\n        }\n      },\n      \"tool_b_to_phone\": {\n        \"source\": \"tool_node_b\",\n        \"target\": \"success_phone\",\n        \"forward_condition\": {\n          \"expression\": {\n            \"children\": [\n              {\n                \"name\": \"force_phone_transfer\"\n              },\n              {\n                \"prompt\": \"Phone condition\",\n                \"value_schema\": {\n                  \"description\": \"Phone condition\",\n                  \"type\": \"boolean\"\n                }\n              },\n              {\n                \"left\": {\n                  \"name\": \"mode\"\n                },\n                \"right\": {\n                  \"value\": \"dev\"\n                }\n              }\n            ]\n          }\n        }\n      }\n    },\n    \"nodes\": {\n      \"entry_node\": {\n        \"conversation_config\": {},\n        \"edge_order\": [\n          \"entry_to_tool_a\"\n        ],\n        \"label\": \"Entry\"\n      },\n      \"failure_node\": {\n        \"conversation_config\": {},\n        \"label\": \"Failure\"\n      },\n      \"start_node\": {\n        \"edge_order\": [\n          \"start_to_entry\"\n        ]\n      },\n      \"success_conversation\": {\n        \"conversation_config\": {},\n        \"label\": \"Success A\"\n      },\n      \"success_end\": {},\n      \"success_phone\": {\n        \"transfer_destination\": {\n          \"phone_number\": \"+1234567890\"\n        }\n      },\n      \"success_transfer\": {\n        \"agent_id\": \"success_transfer_agent\"\n      },\n      \"tool_node_a\": {\n        \"edge_order\": [\n          \"tool_a_to_failure\",\n          \"tool_a_to_tool_b\"\n        ],\n        \"tools\": [\n          {\n            \"tool_id\": \"tool_a\"\n          },\n          {\n            \"tool_id\": \"tool_b\"\n          }\n        ]\n      },\n      \"tool_node_b\": {\n        \"edge_order\": [\n          \"tool_b_to_conversation\",\n          \"tool_b_to_end\",\n          \"tool_b_to_phone\",\n          \"tool_b_to_agent_transfer\"\n        ],\n        \"tools\": [\n          {\n            \"tool_id\": \"tool_a\"\n          }\n        ]\n      }\n    }\n  },\n  \"name\": \"string\"\n}")

	req, _ := http.NewRequest("POST", 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/convai/agents/agent_3701k3ttaq12ewp8b7qv5rfyszkz/drafts?branch_id=agtbrch_8901k4t9z5defmb8vh3e9361y7nj")

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

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n  \"workflow\": {\n    \"edges\": {\n      \"entry_to_tool_a\": {\n        \"source\": \"entry_node\",\n        \"target\": \"tool_node_a\",\n        \"forward_condition\": {\n          \"condition\": \"Tool A condition\"\n        }\n      },\n      \"start_to_entry\": {\n        \"source\": \"start_node\",\n        \"target\": \"entry_node\",\n        \"forward_condition\": {}\n      },\n      \"tool_a_to_failure\": {\n        \"source\": \"tool_node_a\",\n        \"target\": \"failure_node\",\n        \"forward_condition\": {\n          \"successful\": false\n        }\n      },\n      \"tool_a_to_tool_b\": {\n        \"source\": \"tool_node_a\",\n        \"target\": \"tool_node_b\",\n        \"forward_condition\": {\n          \"successful\": true\n        }\n      },\n      \"tool_b_to_agent_transfer\": {\n        \"source\": \"tool_node_b\",\n        \"target\": \"success_transfer\",\n        \"forward_condition\": {}\n      },\n      \"tool_b_to_conversation\": {\n        \"source\": \"tool_node_b\",\n        \"target\": \"success_conversation\",\n        \"forward_condition\": {\n          \"condition\": \"Conversation condition\"\n        }\n      },\n      \"tool_b_to_end\": {\n        \"source\": \"tool_node_b\",\n        \"target\": \"success_end\",\n        \"forward_condition\": {\n          \"condition\": \"End condition\"\n        }\n      },\n      \"tool_b_to_phone\": {\n        \"source\": \"tool_node_b\",\n        \"target\": \"success_phone\",\n        \"forward_condition\": {\n          \"expression\": {\n            \"children\": [\n              {\n                \"name\": \"force_phone_transfer\"\n              },\n              {\n                \"prompt\": \"Phone condition\",\n                \"value_schema\": {\n                  \"description\": \"Phone condition\",\n                  \"type\": \"boolean\"\n                }\n              },\n              {\n                \"left\": {\n                  \"name\": \"mode\"\n                },\n                \"right\": {\n                  \"value\": \"dev\"\n                }\n              }\n            ]\n          }\n        }\n      }\n    },\n    \"nodes\": {\n      \"entry_node\": {\n        \"conversation_config\": {},\n        \"edge_order\": [\n          \"entry_to_tool_a\"\n        ],\n        \"label\": \"Entry\"\n      },\n      \"failure_node\": {\n        \"conversation_config\": {},\n        \"label\": \"Failure\"\n      },\n      \"start_node\": {\n        \"edge_order\": [\n          \"start_to_entry\"\n        ]\n      },\n      \"success_conversation\": {\n        \"conversation_config\": {},\n        \"label\": \"Success A\"\n      },\n      \"success_end\": {},\n      \"success_phone\": {\n        \"transfer_destination\": {\n          \"phone_number\": \"+1234567890\"\n        }\n      },\n      \"success_transfer\": {\n        \"agent_id\": \"success_transfer_agent\"\n      },\n      \"tool_node_a\": {\n        \"edge_order\": [\n          \"tool_a_to_failure\",\n          \"tool_a_to_tool_b\"\n        ],\n        \"tools\": [\n          {\n            \"tool_id\": \"tool_a\"\n          },\n          {\n            \"tool_id\": \"tool_b\"\n          }\n        ]\n      },\n      \"tool_node_b\": {\n        \"edge_order\": [\n          \"tool_b_to_conversation\",\n          \"tool_b_to_end\",\n          \"tool_b_to_phone\",\n          \"tool_b_to_agent_transfer\"\n        ],\n        \"tools\": [\n          {\n            \"tool_id\": \"tool_a\"\n          }\n        ]\n      }\n    }\n  },\n  \"name\": \"string\"\n}"

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.post("https://api.elevenlabs.io/v1/convai/agents/agent_3701k3ttaq12ewp8b7qv5rfyszkz/drafts?branch_id=agtbrch_8901k4t9z5defmb8vh3e9361y7nj")
  .header("Content-Type", "application/json")
  .body("{\n  \"workflow\": {\n    \"edges\": {\n      \"entry_to_tool_a\": {\n        \"source\": \"entry_node\",\n        \"target\": \"tool_node_a\",\n        \"forward_condition\": {\n          \"condition\": \"Tool A condition\"\n        }\n      },\n      \"start_to_entry\": {\n        \"source\": \"start_node\",\n        \"target\": \"entry_node\",\n        \"forward_condition\": {}\n      },\n      \"tool_a_to_failure\": {\n        \"source\": \"tool_node_a\",\n        \"target\": \"failure_node\",\n        \"forward_condition\": {\n          \"successful\": false\n        }\n      },\n      \"tool_a_to_tool_b\": {\n        \"source\": \"tool_node_a\",\n        \"target\": \"tool_node_b\",\n        \"forward_condition\": {\n          \"successful\": true\n        }\n      },\n      \"tool_b_to_agent_transfer\": {\n        \"source\": \"tool_node_b\",\n        \"target\": \"success_transfer\",\n        \"forward_condition\": {}\n      },\n      \"tool_b_to_conversation\": {\n        \"source\": \"tool_node_b\",\n        \"target\": \"success_conversation\",\n        \"forward_condition\": {\n          \"condition\": \"Conversation condition\"\n        }\n      },\n      \"tool_b_to_end\": {\n        \"source\": \"tool_node_b\",\n        \"target\": \"success_end\",\n        \"forward_condition\": {\n          \"condition\": \"End condition\"\n        }\n      },\n      \"tool_b_to_phone\": {\n        \"source\": \"tool_node_b\",\n        \"target\": \"success_phone\",\n        \"forward_condition\": {\n          \"expression\": {\n            \"children\": [\n              {\n                \"name\": \"force_phone_transfer\"\n              },\n              {\n                \"prompt\": \"Phone condition\",\n                \"value_schema\": {\n                  \"description\": \"Phone condition\",\n                  \"type\": \"boolean\"\n                }\n              },\n              {\n                \"left\": {\n                  \"name\": \"mode\"\n                },\n                \"right\": {\n                  \"value\": \"dev\"\n                }\n              }\n            ]\n          }\n        }\n      }\n    },\n    \"nodes\": {\n      \"entry_node\": {\n        \"conversation_config\": {},\n        \"edge_order\": [\n          \"entry_to_tool_a\"\n        ],\n        \"label\": \"Entry\"\n      },\n      \"failure_node\": {\n        \"conversation_config\": {},\n        \"label\": \"Failure\"\n      },\n      \"start_node\": {\n        \"edge_order\": [\n          \"start_to_entry\"\n        ]\n      },\n      \"success_conversation\": {\n        \"conversation_config\": {},\n        \"label\": \"Success A\"\n      },\n      \"success_end\": {},\n      \"success_phone\": {\n        \"transfer_destination\": {\n          \"phone_number\": \"+1234567890\"\n        }\n      },\n      \"success_transfer\": {\n        \"agent_id\": \"success_transfer_agent\"\n      },\n      \"tool_node_a\": {\n        \"edge_order\": [\n          \"tool_a_to_failure\",\n          \"tool_a_to_tool_b\"\n        ],\n        \"tools\": [\n          {\n            \"tool_id\": \"tool_a\"\n          },\n          {\n            \"tool_id\": \"tool_b\"\n          }\n        ]\n      },\n      \"tool_node_b\": {\n        \"edge_order\": [\n          \"tool_b_to_conversation\",\n          \"tool_b_to_end\",\n          \"tool_b_to_phone\",\n          \"tool_b_to_agent_transfer\"\n        ],\n        \"tools\": [\n          {\n            \"tool_id\": \"tool_a\"\n          }\n        ]\n      }\n    }\n  },\n  \"name\": \"string\"\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.elevenlabs.io/v1/convai/agents/agent_3701k3ttaq12ewp8b7qv5rfyszkz/drafts?branch_id=agtbrch_8901k4t9z5defmb8vh3e9361y7nj', [
  'body' => '{
  "workflow": {
    "edges": {
      "entry_to_tool_a": {
        "source": "entry_node",
        "target": "tool_node_a",
        "forward_condition": {
          "condition": "Tool A condition"
        }
      },
      "start_to_entry": {
        "source": "start_node",
        "target": "entry_node",
        "forward_condition": {}
      },
      "tool_a_to_failure": {
        "source": "tool_node_a",
        "target": "failure_node",
        "forward_condition": {
          "successful": false
        }
      },
      "tool_a_to_tool_b": {
        "source": "tool_node_a",
        "target": "tool_node_b",
        "forward_condition": {
          "successful": true
        }
      },
      "tool_b_to_agent_transfer": {
        "source": "tool_node_b",
        "target": "success_transfer",
        "forward_condition": {}
      },
      "tool_b_to_conversation": {
        "source": "tool_node_b",
        "target": "success_conversation",
        "forward_condition": {
          "condition": "Conversation condition"
        }
      },
      "tool_b_to_end": {
        "source": "tool_node_b",
        "target": "success_end",
        "forward_condition": {
          "condition": "End condition"
        }
      },
      "tool_b_to_phone": {
        "source": "tool_node_b",
        "target": "success_phone",
        "forward_condition": {
          "expression": {
            "children": [
              {
                "name": "force_phone_transfer"
              },
              {
                "prompt": "Phone condition",
                "value_schema": {
                  "description": "Phone condition",
                  "type": "boolean"
                }
              },
              {
                "left": {
                  "name": "mode"
                },
                "right": {
                  "value": "dev"
                }
              }
            ]
          }
        }
      }
    },
    "nodes": {
      "entry_node": {
        "conversation_config": {},
        "edge_order": [
          "entry_to_tool_a"
        ],
        "label": "Entry"
      },
      "failure_node": {
        "conversation_config": {},
        "label": "Failure"
      },
      "start_node": {
        "edge_order": [
          "start_to_entry"
        ]
      },
      "success_conversation": {
        "conversation_config": {},
        "label": "Success A"
      },
      "success_end": {},
      "success_phone": {
        "transfer_destination": {
          "phone_number": "+1234567890"
        }
      },
      "success_transfer": {
        "agent_id": "success_transfer_agent"
      },
      "tool_node_a": {
        "edge_order": [
          "tool_a_to_failure",
          "tool_a_to_tool_b"
        ],
        "tools": [
          {
            "tool_id": "tool_a"
          },
          {
            "tool_id": "tool_b"
          }
        ]
      },
      "tool_node_b": {
        "edge_order": [
          "tool_b_to_conversation",
          "tool_b_to_end",
          "tool_b_to_phone",
          "tool_b_to_agent_transfer"
        ],
        "tools": [
          {
            "tool_id": "tool_a"
          }
        ]
      }
    }
  },
  "name": "string"
}',
  'headers' => [
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://api.elevenlabs.io/v1/convai/agents/agent_3701k3ttaq12ewp8b7qv5rfyszkz/drafts?branch_id=agtbrch_8901k4t9z5defmb8vh3e9361y7nj");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"workflow\": {\n    \"edges\": {\n      \"entry_to_tool_a\": {\n        \"source\": \"entry_node\",\n        \"target\": \"tool_node_a\",\n        \"forward_condition\": {\n          \"condition\": \"Tool A condition\"\n        }\n      },\n      \"start_to_entry\": {\n        \"source\": \"start_node\",\n        \"target\": \"entry_node\",\n        \"forward_condition\": {}\n      },\n      \"tool_a_to_failure\": {\n        \"source\": \"tool_node_a\",\n        \"target\": \"failure_node\",\n        \"forward_condition\": {\n          \"successful\": false\n        }\n      },\n      \"tool_a_to_tool_b\": {\n        \"source\": \"tool_node_a\",\n        \"target\": \"tool_node_b\",\n        \"forward_condition\": {\n          \"successful\": true\n        }\n      },\n      \"tool_b_to_agent_transfer\": {\n        \"source\": \"tool_node_b\",\n        \"target\": \"success_transfer\",\n        \"forward_condition\": {}\n      },\n      \"tool_b_to_conversation\": {\n        \"source\": \"tool_node_b\",\n        \"target\": \"success_conversation\",\n        \"forward_condition\": {\n          \"condition\": \"Conversation condition\"\n        }\n      },\n      \"tool_b_to_end\": {\n        \"source\": \"tool_node_b\",\n        \"target\": \"success_end\",\n        \"forward_condition\": {\n          \"condition\": \"End condition\"\n        }\n      },\n      \"tool_b_to_phone\": {\n        \"source\": \"tool_node_b\",\n        \"target\": \"success_phone\",\n        \"forward_condition\": {\n          \"expression\": {\n            \"children\": [\n              {\n                \"name\": \"force_phone_transfer\"\n              },\n              {\n                \"prompt\": \"Phone condition\",\n                \"value_schema\": {\n                  \"description\": \"Phone condition\",\n                  \"type\": \"boolean\"\n                }\n              },\n              {\n                \"left\": {\n                  \"name\": \"mode\"\n                },\n                \"right\": {\n                  \"value\": \"dev\"\n                }\n              }\n            ]\n          }\n        }\n      }\n    },\n    \"nodes\": {\n      \"entry_node\": {\n        \"conversation_config\": {},\n        \"edge_order\": [\n          \"entry_to_tool_a\"\n        ],\n        \"label\": \"Entry\"\n      },\n      \"failure_node\": {\n        \"conversation_config\": {},\n        \"label\": \"Failure\"\n      },\n      \"start_node\": {\n        \"edge_order\": [\n          \"start_to_entry\"\n        ]\n      },\n      \"success_conversation\": {\n        \"conversation_config\": {},\n        \"label\": \"Success A\"\n      },\n      \"success_end\": {},\n      \"success_phone\": {\n        \"transfer_destination\": {\n          \"phone_number\": \"+1234567890\"\n        }\n      },\n      \"success_transfer\": {\n        \"agent_id\": \"success_transfer_agent\"\n      },\n      \"tool_node_a\": {\n        \"edge_order\": [\n          \"tool_a_to_failure\",\n          \"tool_a_to_tool_b\"\n        ],\n        \"tools\": [\n          {\n            \"tool_id\": \"tool_a\"\n          },\n          {\n            \"tool_id\": \"tool_b\"\n          }\n        ]\n      },\n      \"tool_node_b\": {\n        \"edge_order\": [\n          \"tool_b_to_conversation\",\n          \"tool_b_to_end\",\n          \"tool_b_to_phone\",\n          \"tool_b_to_agent_transfer\"\n        ],\n        \"tools\": [\n          {\n            \"tool_id\": \"tool_a\"\n          }\n        ]\n      }\n    }\n  },\n  \"name\": \"string\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Content-Type": "application/json"]
let parameters = [
  "workflow": [
    "edges": [
      "entry_to_tool_a": [
        "source": "entry_node",
        "target": "tool_node_a",
        "forward_condition": ["condition": "Tool A condition"]
      ],
      "start_to_entry": [
        "source": "start_node",
        "target": "entry_node",
        "forward_condition": []
      ],
      "tool_a_to_failure": [
        "source": "tool_node_a",
        "target": "failure_node",
        "forward_condition": ["successful": false]
      ],
      "tool_a_to_tool_b": [
        "source": "tool_node_a",
        "target": "tool_node_b",
        "forward_condition": ["successful": true]
      ],
      "tool_b_to_agent_transfer": [
        "source": "tool_node_b",
        "target": "success_transfer",
        "forward_condition": []
      ],
      "tool_b_to_conversation": [
        "source": "tool_node_b",
        "target": "success_conversation",
        "forward_condition": ["condition": "Conversation condition"]
      ],
      "tool_b_to_end": [
        "source": "tool_node_b",
        "target": "success_end",
        "forward_condition": ["condition": "End condition"]
      ],
      "tool_b_to_phone": [
        "source": "tool_node_b",
        "target": "success_phone",
        "forward_condition": ["expression": ["children": [
              ["name": "force_phone_transfer"],
              [
                "prompt": "Phone condition",
                "value_schema": [
                  "description": "Phone condition",
                  "type": "boolean"
                ]
              ],
              [
                "left": ["name": "mode"],
                "right": ["value": "dev"]
              ]
            ]]]
      ]
    ],
    "nodes": [
      "entry_node": [
        "conversation_config": [],
        "edge_order": ["entry_to_tool_a"],
        "label": "Entry"
      ],
      "failure_node": [
        "conversation_config": [],
        "label": "Failure"
      ],
      "start_node": ["edge_order": ["start_to_entry"]],
      "success_conversation": [
        "conversation_config": [],
        "label": "Success A"
      ],
      "success_end": [],
      "success_phone": ["transfer_destination": ["phone_number": "+1234567890"]],
      "success_transfer": ["agent_id": "success_transfer_agent"],
      "tool_node_a": [
        "edge_order": ["tool_a_to_failure", "tool_a_to_tool_b"],
        "tools": [["tool_id": "tool_a"], ["tool_id": "tool_b"]]
      ],
      "tool_node_b": [
        "edge_order": ["tool_b_to_conversation", "tool_b_to_end", "tool_b_to_phone", "tool_b_to_agent_transfer"],
        "tools": [["tool_id": "tool_a"]]
      ]
    ]
  ],
  "name": "string"
] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://api.elevenlabs.io/v1/convai/agents/agent_3701k3ttaq12ewp8b7qv5rfyszkz/drafts?branch_id=agtbrch_8901k4t9z5defmb8vh3e9361y7nj")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
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()
```