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

Create an agent template

POST
/v1/agent-media/agent-templates

Save a new template into the organization's own templates. config must reference every id declared in requirements, and every declared id must be referenced somewhere in config — a mismatch in either direction is rejected.

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

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

curl -X POST "https://example.com/v1/agent-media/agent-templates" \  -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"}