For the complete documentation index, see llms.txt. Any page on this site can be fetched as Markdown by appending .md to its URL.

Voice agentsAgent templates

Update an agent template

PUT
/v1/agent-media/agent-templates/{templateId}

Replace an organization template's metadata and configuration. Only ever touches the organization's own templates — a curated template, even one that exists, is a 404 here rather than a 403; from this organization's point of view it has no template with that id.

Authorization

bearerAuth
AuthorizationBearer <token>

A Tandem bearer token. Requests are scoped to the organization the token belongs to; no organization header is required.

In: header

Path Parameters

templateId*string

The template's unique ID.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Every requirement id referenced by a tool's or knowledge's requires inside config must be declared in requirements, and every declared requirement must be referenced somewhere in config — a mismatch in either direction is rejected as invalid_config.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X PUT "https://example.com/v1/agent-media/agent-templates/string" \  -H "Content-Type: application/json" \  -d '{    "name": "string",    "category": "string",    "config": {      "name": "string"    }  }'
{  "template": {    "id": "string",    "name": "string",    "description": "string",    "category": "string",    "tags": [      "string"    ],    "status": "draft",    "scope": "org",    "config": {      "name": "string",      "systemPrompt": "string",      "greeting": "string",      "interruptable": true,      "channels": [        "voice",        "chat"      ],      "slots": {        "llm": {          "model": "string",          "settings": {            "maxTokens": 1,            "temperature": 0,            "reasoning": {              "enabled": false,              "budgetTokens": 1024            }          }        },        "stt": {          "provider": "string",          "settings": {            "language": "string"          }        },        "tts": {          "voiceProvider": "string",          "settings": {            "language": "string",            "voiceId": "string",            "engine": "string",            "polly": {              "rate": "string",              "volume": "string"            },            "elevenlabs": {              "speed": 0.7,              "stability": 0,              "similarityBoost": 0,              "style": 0,              "useSpeakerBoost": true,              "textNormalization": "auto",              "pronunciationDictionaries": [                {                  "id": "string",                  "versionId": "string"                }              ]            }          }        },        "additionalVoices": [          {            "voiceProvider": "string",            "settings": {              "language": "string",              "voiceId": "string",              "engine": "string",              "polly": {                "rate": "string",                "volume": "string"              },              "elevenlabs": {                "speed": 0.7,                "stability": 0,                "similarityBoost": 0,                "style": 0,                "useSpeakerBoost": true,                "textNormalization": "auto",                "pronunciationDictionaries": [                  {                    "id": "string",                    "versionId": "string"                  }                ]              }            }          }        ]      },      "greetingParts": [        {          "language": "string",          "text": "string"        }      ],      "variables": [],      "dispositions": [],      "builtinTools": {        "transferToExternal": {          "enabled": false,          "destinations": []        },        "transferToVoiceAgent": {          "enabled": false,          "contextCarryover": "none",          "destinations": []        },        "captureDtmf": {          "enabled": false,          "maxDigits": 16,          "terminator": "#",          "timeoutMs": 10000,          "interDigitTimeoutMs": 3000,          "interruptsSpeech": true        },        "recordingControl": {          "enabled": false        },        "currentTime": {          "enabled": false,          "timezone": "America/New_York"        },        "setWorkflowVariable": {          "enabled": false,          "variables": []        }      },      "dtmf": {        "enabled": false,        "interDigitGapMs": 1500,        "terminator": "#",        "maxDigits": 32,        "interruptsSpeech": true      },      "thinkingCue": {        "kind": "none"      },      "vad": {        "silenceMs": 200,        "threshold": 0.7,        "startMs": 200,        "minVolume": 0.6,        "endOfTurnGraceMs": 600,        "bargeInMinWords": 1      },      "turnDetection": {        "mode": "silence",        "smartStopMs": 3000,        "preSpeechMs": 500,        "maxDurationSecs": 8      },      "memory": {        "depth": "none",        "customizeGreeting": false      },      "safety": {        "redactPii": true,        "steeringRules": [          "string"        ]      },      "skills": {        "builtins": [],        "custom": []      },      "analysis": {        "enabled": false,        "builtins": {          "sentiment": {            "enabled": false,            "prompt": "string"          },          "outcome": {            "enabled": false,            "prompt": "string"          },          "summary": {            "enabled": false,            "prompt": "string"          }        },        "fields": []      },      "retention": {        "transcripts": true      },      "idle": {        "enabled": false,        "timeoutMs": 10000,        "action": "reprompt",        "prompt": "string",        "maxReprompts": 2,        "onExhausted": "endCall",        "disposition": "string"      },      "limits": {        "maxCallDurationMs": 60000,        "warnBeforeEndMs": 5000,        "warnPrompt": "string"      },      "reliability": {        "maxConsecutiveTurnFailures": 1,        "toolTimeoutMs": 1000,        "steeringJudgeTimeoutMs": 500,        "handoffMaxHistoryMessages": 1,        "modelRetryMaxAttempts": 1,        "modelRetryInitialDelayMs": 100,        "modelRetryMaxDelayMs": 100      },      "conversation": {        "strategy": "slidingWindow",        "windowSize": 10,        "summaryRatio": 0.1,        "preserveRecentMessages": 2,        "pinFirst": 1,        "proactiveCompressionThreshold": 0.3      },      "vocabulary": {        "terms": []      },      "dataCollection": {        "fields": [          {            "key": "string",            "label": "string",            "kind": "full_name",            "required": false,            "prompt": ""          }        ]      },      "tools": [],      "knowledge": {        "requires": "string",        "maxResults": 4,        "minScore": 0      }    },    "requirements": [      {        "id": "string",        "kind": "workflow",        "label": "string",        "description": "string",        "optional": false,        "integrationType": "string",        "defaultBinding": {          "workflowId": "string"        }      }    ],    "sourceAgentId": "string",    "createdBy": "string",    "updatedBy": "string",    "createdAt": "2019-08-24T14:15:22Z",    "updatedAt": "2019-08-24T14:15:22Z"  }}
{  "error": "string",  "errors": [    {      "field": "string",      "message": "string"    }  ]}
{  "error": "string",  "message": "string",  "limit": 0,  "length": 0,  "reason": "string"}
{  "error": "string",  "message": "string",  "limit": 0,  "length": 0,  "reason": "string"}
{  "error": "string",  "message": "string",  "limit": 0,  "length": 0,  "reason": "string"}