Update mid call tool
curl --request PUT \
--url https://app.autocalls.ai/api/user/tools/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"description": "<string>",
"endpoint": "<string>",
"method": "<string>",
"body_format": "<string>",
"timeout": 123,
"headers": [
{
"name": "<string>",
"value": "<string>"
}
],
"static_fields": [
{
"key": "<string>",
"value": "<string>"
}
],
"schema": [
{
"name": "<string>",
"type": "<string>",
"description": "<string>",
"required": true
}
]
}
'import requests
url = "https://app.autocalls.ai/api/user/tools/{id}"
payload = {
"name": "<string>",
"description": "<string>",
"endpoint": "<string>",
"method": "<string>",
"body_format": "<string>",
"timeout": 123,
"headers": [
{
"name": "<string>",
"value": "<string>"
}
],
"static_fields": [
{
"key": "<string>",
"value": "<string>"
}
],
"schema": [
{
"name": "<string>",
"type": "<string>",
"description": "<string>",
"required": True
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
description: '<string>',
endpoint: '<string>',
method: '<string>',
body_format: '<string>',
timeout: 123,
headers: [{name: '<string>', value: '<string>'}],
static_fields: [{key: '<string>', value: '<string>'}],
schema: [{name: '<string>', type: '<string>', description: '<string>', required: true}]
})
};
fetch('https://app.autocalls.ai/api/user/tools/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.autocalls.ai/api/user/tools/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'description' => '<string>',
'endpoint' => '<string>',
'method' => '<string>',
'body_format' => '<string>',
'timeout' => 123,
'headers' => [
[
'name' => '<string>',
'value' => '<string>'
]
],
'static_fields' => [
[
'key' => '<string>',
'value' => '<string>'
]
],
'schema' => [
[
'name' => '<string>',
'type' => '<string>',
'description' => '<string>',
'required' => true
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.autocalls.ai/api/user/tools/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"endpoint\": \"<string>\",\n \"method\": \"<string>\",\n \"body_format\": \"<string>\",\n \"timeout\": 123,\n \"headers\": [\n {\n \"name\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"static_fields\": [\n {\n \"key\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"schema\": [\n {\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"description\": \"<string>\",\n \"required\": true\n }\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://app.autocalls.ai/api/user/tools/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"endpoint\": \"<string>\",\n \"method\": \"<string>\",\n \"body_format\": \"<string>\",\n \"timeout\": 123,\n \"headers\": [\n {\n \"name\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"static_fields\": [\n {\n \"key\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"schema\": [\n {\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"description\": \"<string>\",\n \"required\": true\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.autocalls.ai/api/user/tools/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"endpoint\": \"<string>\",\n \"method\": \"<string>\",\n \"body_format\": \"<string>\",\n \"timeout\": 123,\n \"headers\": [\n {\n \"name\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"static_fields\": [\n {\n \"key\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"schema\": [\n {\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"description\": \"<string>\",\n \"required\": true\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"message": "Tool updated successfully",
"data": {
"id": 1,
"name": "update_customer_info",
"description": "Use this tool to update customer information in the system.",
"type": "http",
"endpoint": "https://api.yourcompany.com/customers/update",
"method": "POST",
"body_format": "json",
"timeout": 15,
"headers": [
{
"name": "Content-Type",
"value": "application/json"
}
],
"static_fields": [
{
"key": "source",
"value": "autocalls"
}
],
"schema": [
{
"name": "customer_name",
"type": "string",
"description": "Full name of the customer",
"required": true
},
{
"name": "balance",
"type": "float",
"description": "Account balance as a decimal",
"required": false
},
{
"name": "newsletter_subscription",
"type": "boolean",
"description": "Whether customer wants to subscribe to newsletter",
"required": false
}
],
"created_at": "2025-10-10T12:00:00.000000Z",
"updated_at": "2025-10-10T14:30:00.000000Z"
}
}
{
"message": "Tool not found"
}
{
"message": "Validation failed",
"errors": {
"name": ["Tool name must start with a letter or underscore and contain only letters, numbers, and underscores (max 64 characters)."]
}
}
Mid Call Tools
Update mid call tool
Update an existing mid call tool
PUT
/
user
/
tools
/
{id}
Update mid call tool
curl --request PUT \
--url https://app.autocalls.ai/api/user/tools/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"description": "<string>",
"endpoint": "<string>",
"method": "<string>",
"body_format": "<string>",
"timeout": 123,
"headers": [
{
"name": "<string>",
"value": "<string>"
}
],
"static_fields": [
{
"key": "<string>",
"value": "<string>"
}
],
"schema": [
{
"name": "<string>",
"type": "<string>",
"description": "<string>",
"required": true
}
]
}
'import requests
url = "https://app.autocalls.ai/api/user/tools/{id}"
payload = {
"name": "<string>",
"description": "<string>",
"endpoint": "<string>",
"method": "<string>",
"body_format": "<string>",
"timeout": 123,
"headers": [
{
"name": "<string>",
"value": "<string>"
}
],
"static_fields": [
{
"key": "<string>",
"value": "<string>"
}
],
"schema": [
{
"name": "<string>",
"type": "<string>",
"description": "<string>",
"required": True
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
description: '<string>',
endpoint: '<string>',
method: '<string>',
body_format: '<string>',
timeout: 123,
headers: [{name: '<string>', value: '<string>'}],
static_fields: [{key: '<string>', value: '<string>'}],
schema: [{name: '<string>', type: '<string>', description: '<string>', required: true}]
})
};
fetch('https://app.autocalls.ai/api/user/tools/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.autocalls.ai/api/user/tools/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'description' => '<string>',
'endpoint' => '<string>',
'method' => '<string>',
'body_format' => '<string>',
'timeout' => 123,
'headers' => [
[
'name' => '<string>',
'value' => '<string>'
]
],
'static_fields' => [
[
'key' => '<string>',
'value' => '<string>'
]
],
'schema' => [
[
'name' => '<string>',
'type' => '<string>',
'description' => '<string>',
'required' => true
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.autocalls.ai/api/user/tools/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"endpoint\": \"<string>\",\n \"method\": \"<string>\",\n \"body_format\": \"<string>\",\n \"timeout\": 123,\n \"headers\": [\n {\n \"name\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"static_fields\": [\n {\n \"key\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"schema\": [\n {\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"description\": \"<string>\",\n \"required\": true\n }\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://app.autocalls.ai/api/user/tools/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"endpoint\": \"<string>\",\n \"method\": \"<string>\",\n \"body_format\": \"<string>\",\n \"timeout\": 123,\n \"headers\": [\n {\n \"name\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"static_fields\": [\n {\n \"key\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"schema\": [\n {\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"description\": \"<string>\",\n \"required\": true\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.autocalls.ai/api/user/tools/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"endpoint\": \"<string>\",\n \"method\": \"<string>\",\n \"body_format\": \"<string>\",\n \"timeout\": 123,\n \"headers\": [\n {\n \"name\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"static_fields\": [\n {\n \"key\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"schema\": [\n {\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"description\": \"<string>\",\n \"required\": true\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"message": "Tool updated successfully",
"data": {
"id": 1,
"name": "update_customer_info",
"description": "Use this tool to update customer information in the system.",
"type": "http",
"endpoint": "https://api.yourcompany.com/customers/update",
"method": "POST",
"body_format": "json",
"timeout": 15,
"headers": [
{
"name": "Content-Type",
"value": "application/json"
}
],
"static_fields": [
{
"key": "source",
"value": "autocalls"
}
],
"schema": [
{
"name": "customer_name",
"type": "string",
"description": "Full name of the customer",
"required": true
},
{
"name": "balance",
"type": "float",
"description": "Account balance as a decimal",
"required": false
},
{
"name": "newsletter_subscription",
"type": "boolean",
"description": "Whether customer wants to subscribe to newsletter",
"required": false
}
],
"created_at": "2025-10-10T12:00:00.000000Z",
"updated_at": "2025-10-10T14:30:00.000000Z"
}
}
{
"message": "Tool not found"
}
{
"message": "Validation failed",
"errors": {
"name": ["Tool name must start with a letter or underscore and contain only letters, numbers, and underscores (max 64 characters)."]
}
}
This endpoint allows you to update an existing mid call tool. All fields are optional - only provide the fields you want to update.
Path Parameters
The unique identifier of the tool to update
Body Parameters
For tools linked to an Automation Platform flow, the
endpoint, method, and
body_format fields are ignored to protect the flow connection.Tool name — letters, numbers and underscores, starting with a letter or underscore (max 64 characters)
Detailed explanation of when and how the AI should use this tool (max 255 characters)
Valid URL of the API endpoint to call (max 2048 characters)
HTTP method:
GET, POST, PUT, PATCH, or DELETERequest body encoding for write methods:
json (default) or formRequest timeout in seconds (1-30)
Parameters schema (replaces existing schema)
Show schema properties
Show schema properties
Response fields
Success message
The updated tool object with all current values
{
"message": "Tool updated successfully",
"data": {
"id": 1,
"name": "update_customer_info",
"description": "Use this tool to update customer information in the system.",
"type": "http",
"endpoint": "https://api.yourcompany.com/customers/update",
"method": "POST",
"body_format": "json",
"timeout": 15,
"headers": [
{
"name": "Content-Type",
"value": "application/json"
}
],
"static_fields": [
{
"key": "source",
"value": "autocalls"
}
],
"schema": [
{
"name": "customer_name",
"type": "string",
"description": "Full name of the customer",
"required": true
},
{
"name": "balance",
"type": "float",
"description": "Account balance as a decimal",
"required": false
},
{
"name": "newsletter_subscription",
"type": "boolean",
"description": "Whether customer wants to subscribe to newsletter",
"required": false
}
],
"created_at": "2025-10-10T12:00:00.000000Z",
"updated_at": "2025-10-10T14:30:00.000000Z"
}
}
{
"message": "Tool not found"
}
{
"message": "Validation failed",
"errors": {
"name": ["Tool name must start with a letter or underscore and contain only letters, numbers, and underscores (max 64 characters)."]
}
}
Managing Tool Assignments
To attach or detach this tool from assistants, use the Assistant API:- Create Assistant - Use the
tool_idsparameter to attach tools when creating an assistant - Update Assistant - Use the
tool_idsparameter to manage which tools are assigned to an assistant
⌘I

