toCamelCaseKeys() in src/shared/utils.ts converts user-defined keys inside path_params_schema to camelCase. This breaks webhook tools whose URL templates reference those keys via {{snake_case}} placeholders — the URL string is preserved as-is, but the schema key is renamed, so the two no longer match.
Repro
Local tool config:
{
"name": "get_parties",
"type": "webhook",
"api_schema": {
"url": "https://example.com/{{transaction_id}}/get-parties",
"method": "POST",
"path_params_schema": {
"transaction_id": { "type": "string", "dynamic_variable": "transaction_id" }
}
}
}
After elevenlabs tools push, the agent sees:
{
"apiSchema": {
"url": "https://example.com/{{transaction_id}}/get-parties",
"pathParamsSchema": {
"transactionId": { "type": "string", "dynamicVariable": "transaction_id" }
}
}
}
URL template still references {{transaction_id}}; the schema now declares transactionId. The placeholder doesn't resolve.
Suggested fix
Same pattern as #57, #65, #72, #78 — add to PRESERVE_CHILD_KEYS:
const PRESERVE_CHILD_KEYS = new Set([
'request_headers', 'requestHeaders',
'dynamic_variables', 'dynamicVariables',
'language_presets', 'languagePresets',
'model_usage', 'modelUsage',
'data_collection', 'dataCollection',
+ 'path_params_schema', 'pathParamsSchema',
'nodes',
'edges',
]);
query_params_schema is likely affected by the same pattern — worth checking that and any other URL-template-binding param sets for completeness.
CLI version: 0.5.3.
toCamelCaseKeys()insrc/shared/utils.tsconverts user-defined keys insidepath_params_schemato camelCase. This breaks webhook tools whose URL templates reference those keys via{{snake_case}}placeholders — the URL string is preserved as-is, but the schema key is renamed, so the two no longer match.Repro
Local tool config:
{ "name": "get_parties", "type": "webhook", "api_schema": { "url": "https://example.com/{{transaction_id}}/get-parties", "method": "POST", "path_params_schema": { "transaction_id": { "type": "string", "dynamic_variable": "transaction_id" } } } }After
elevenlabs tools push, the agent sees:{ "apiSchema": { "url": "https://example.com/{{transaction_id}}/get-parties", "pathParamsSchema": { "transactionId": { "type": "string", "dynamicVariable": "transaction_id" } } } }URL template still references
{{transaction_id}}; the schema now declarestransactionId. The placeholder doesn't resolve.Suggested fix
Same pattern as #57, #65, #72, #78 — add to
PRESERVE_CHILD_KEYS:const PRESERVE_CHILD_KEYS = new Set([ 'request_headers', 'requestHeaders', 'dynamic_variables', 'dynamicVariables', 'language_presets', 'languagePresets', 'model_usage', 'modelUsage', 'data_collection', 'dataCollection', + 'path_params_schema', 'pathParamsSchema', 'nodes', 'edges', ]);query_params_schemais likely affected by the same pattern — worth checking that and any other URL-template-binding param sets for completeness.CLI version: 0.5.3.