List API Tools
curl --request GET \
--url https://app.tuco.ai/api/campaign-tools \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.tuco.ai/api/campaign-tools"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.tuco.ai/api/campaign-tools', 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.tuco.ai/api/campaign-tools",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.tuco.ai/api/campaign-tools"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.tuco.ai/api/campaign-tools")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.tuco.ai/api/campaign-tools")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"tools": [
{
"_id": "<string>",
"name": "<string>",
"description": "<string>",
"method": "<string>",
"url": "<string>",
"headers": {},
"body": "<string>",
"responseMapping": "<string>",
"variableKey": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>"
}
]
}API Tools
List API Tools
List all custom API tools registered in your Tuco AI workspace — tools that goal bots and campaigns can call to fetch lead data or trigger external actions.
GET
/
api
/
campaign-tools
List API Tools
curl --request GET \
--url https://app.tuco.ai/api/campaign-tools \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.tuco.ai/api/campaign-tools"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.tuco.ai/api/campaign-tools', 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.tuco.ai/api/campaign-tools",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.tuco.ai/api/campaign-tools"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.tuco.ai/api/campaign-tools")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.tuco.ai/api/campaign-tools")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"tools": [
{
"_id": "<string>",
"name": "<string>",
"description": "<string>",
"method": "<string>",
"url": "<string>",
"headers": {},
"body": "<string>",
"responseMapping": "<string>",
"variableKey": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>"
}
]
}An API tool lets a goal bot call your endpoint mid-conversation — check stock, look up an
order, fetch a balance — and use the answer in its reply. Attach a tool to a bot by putting its
_id in that bot’s allowedToolIds.Authentication
Pass your workspace API key as a Bearer token, or use a Clerk session token.Authorization: Bearer tuco_xxxxxxxxxxxxx
Example
curl "https://app.tuco.ai/api/campaign-tools" \
-H "Authorization: Bearer tuco_xxxxxxxxxxxxx"
Success (200 OK)
{
"tools": [
{
"_id": "6ac3ed9271adb32c88d566e0",
"workspaceId": "org_3CzFir0Fps4hHL4nbU9WQ6FR4ur",
"name": "check_stock",
"description": "Returns current stock for a SKU",
"method": "GET",
"url": "https://api.example.com/stock",
"responseMapping": "data.quantity",
"variableKey": "api_check_stock",
"createdAt": "2026-10-05T18:33:54.781Z",
"updatedAt": "2026-10-05T18:33:54.781Z"
}
]
}
Response
object[]
Every tool in the workspace, oldest first. Empty array when there are none.
Show Tool fields
Show Tool fields
string
Tool id. Pass it as
id to update or delete.string
Tool name.
string
What the tool does — this is what the model reads when deciding to call it.
string
GET, POST, PUT, PATCH or DELETE.string
The endpoint Tuco calls.
object
Headers sent with the call.
string
Request body template, if any.
string
Dot path into the response that becomes the tool’s value.
string
Derived from
name — the variable the bot reads the result from, e.g. api_check_stock.string
ISO 8601 timestamp.
string
ISO 8601 timestamp.
Errors
| Status | When | Body |
|---|---|---|
401 | Missing or invalid API key | { "error": "Unauthorized" } |