curl --request POST \
--url https://api.agents.slng.ai/v1/agents/tools/{tool_id}/introspect \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.agents.slng.ai/v1/agents/tools/{tool_id}/introspect"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.agents.slng.ai/v1/agents/tools/{tool_id}/introspect', 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://api.agents.slng.ai/v1/agents/tools/{tool_id}/introspect",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
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://api.agents.slng.ai/v1/agents/tools/{tool_id}/introspect"
req, _ := http.NewRequest("POST", 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.post("https://api.agents.slng.ai/v1/agents/tools/{tool_id}/introspect")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.agents.slng.ai/v1/agents/tools/{tool_id}/introspect")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "7b2a1c34-5d6e-4f70-8a90-1b2c3d4e5f60",
"organisation_id": "0a1b2c3d-4e5f-6071-8293-a4b5c6d7e8f9",
"name": "lookup_customer",
"tool_type": "api_request",
"config": {
"type": "api_request",
"url": "https://api.example.com/lookup",
"http_method": "POST"
},
"description": "Look up a customer by id",
"declared_secrets": [],
"dependencies": [],
"argument_defaults": {},
"code_src": null,
"last_run_status": "succeeded",
"source": "org",
"latest_version": 3,
"content_hash": "3f1ab2c4d5e6f708",
"is_current_hash_green": true,
"is_current_version": true,
"schema_stale": false,
"gate_status": {
"static": {
"config_valid": {
"passed": true
},
"secrets_exist": {
"passed": true
},
"name_unique": {
"passed": true
}
},
"green_run": {
"passed": true
}
}
}{
"detail": "The tool is attached to an active agent.",
"error": {
"code": "TOOL_DELETE_BLOCKED",
"message": "The tool is attached to an active agent.",
"retryable": false
}
}{
"detail": "The tool is attached to an active agent.",
"error": {
"code": "TOOL_DELETE_BLOCKED",
"message": "The tool is attached to an active agent.",
"retryable": false
}
}{
"detail": "The tool is attached to an active agent.",
"error": {
"code": "TOOL_DELETE_BLOCKED",
"message": "The tool is attached to an active agent.",
"retryable": false
}
}{
"detail": "The tool is attached to an active agent.",
"error": {
"code": "TOOL_DELETE_BLOCKED",
"message": "The tool is attached to an active agent.",
"retryable": false
}
}{
"detail": "The tool is attached to an active agent.",
"error": {
"code": "TOOL_DELETE_BLOCKED",
"message": "The tool is attached to an active agent.",
"retryable": false
}
}{
"detail": "The tool is attached to an active agent.",
"error": {
"code": "TOOL_DELETE_BLOCKED",
"message": "The tool is attached to an active agent.",
"retryable": false
}
}{
"detail": "The tool is attached to an active agent.",
"error": {
"code": "TOOL_DELETE_BLOCKED",
"message": "The tool is attached to an active agent.",
"retryable": false
}
}Introspect Tool
Run a Custom Code draft in a prepared sandbox to derive and validate its argument schema. Requires the code-tools feature. Returns 409 with code PREPARING while the sandbox is still starting, and can time out.
curl --request POST \
--url https://api.agents.slng.ai/v1/agents/tools/{tool_id}/introspect \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.agents.slng.ai/v1/agents/tools/{tool_id}/introspect"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.agents.slng.ai/v1/agents/tools/{tool_id}/introspect', 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://api.agents.slng.ai/v1/agents/tools/{tool_id}/introspect",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
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://api.agents.slng.ai/v1/agents/tools/{tool_id}/introspect"
req, _ := http.NewRequest("POST", 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.post("https://api.agents.slng.ai/v1/agents/tools/{tool_id}/introspect")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.agents.slng.ai/v1/agents/tools/{tool_id}/introspect")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "7b2a1c34-5d6e-4f70-8a90-1b2c3d4e5f60",
"organisation_id": "0a1b2c3d-4e5f-6071-8293-a4b5c6d7e8f9",
"name": "lookup_customer",
"tool_type": "api_request",
"config": {
"type": "api_request",
"url": "https://api.example.com/lookup",
"http_method": "POST"
},
"description": "Look up a customer by id",
"declared_secrets": [],
"dependencies": [],
"argument_defaults": {},
"code_src": null,
"last_run_status": "succeeded",
"source": "org",
"latest_version": 3,
"content_hash": "3f1ab2c4d5e6f708",
"is_current_hash_green": true,
"is_current_version": true,
"schema_stale": false,
"gate_status": {
"static": {
"config_valid": {
"passed": true
},
"secrets_exist": {
"passed": true
},
"name_unique": {
"passed": true
}
},
"green_run": {
"passed": true
}
}
}{
"detail": "The tool is attached to an active agent.",
"error": {
"code": "TOOL_DELETE_BLOCKED",
"message": "The tool is attached to an active agent.",
"retryable": false
}
}{
"detail": "The tool is attached to an active agent.",
"error": {
"code": "TOOL_DELETE_BLOCKED",
"message": "The tool is attached to an active agent.",
"retryable": false
}
}{
"detail": "The tool is attached to an active agent.",
"error": {
"code": "TOOL_DELETE_BLOCKED",
"message": "The tool is attached to an active agent.",
"retryable": false
}
}{
"detail": "The tool is attached to an active agent.",
"error": {
"code": "TOOL_DELETE_BLOCKED",
"message": "The tool is attached to an active agent.",
"retryable": false
}
}{
"detail": "The tool is attached to an active agent.",
"error": {
"code": "TOOL_DELETE_BLOCKED",
"message": "The tool is attached to an active agent.",
"retryable": false
}
}{
"detail": "The tool is attached to an active agent.",
"error": {
"code": "TOOL_DELETE_BLOCKED",
"message": "The tool is attached to an active agent.",
"retryable": false
}
}{
"detail": "The tool is attached to an active agent.",
"error": {
"code": "TOOL_DELETE_BLOCKED",
"message": "The tool is attached to an active agent.",
"retryable": false
}
}Authorizations
Your SLNG consumer API key.
Path Parameters
The tool UUID. Curated tools are visible but read-only, and a tool owned by another organisation returns 404.
Response
The tool after its Custom Code draft is built and validated, including the input and output argument schemas derived from the code.
A tool and its current draft state, including config, publish gates, and version info.
Vault secret names this tool is allowed to read at runtime.
Pinned Python package dependencies installed for this tool.
curated tools are built in and maintained by SLNG; org tools were created by your organisation.
curated, org Gate set is selected by tool_type (V2): data → static + green_run; code also reports config_valid; ctx-bound → config_valid ONLY.
Show child attributes
Show child attributes
code, api_request, end_call, voicemail_detection, transfer_call, send_sms, current_datetime, user_phone_number Configuration for a Custom Code tool. Custom code runs sandboxed with no internet access.
- CodeConfig
- ApiRequestConfig
- EndCallConfig
- VoicemailDetectionConfig
- TransferCallConfig
- SendSmsConfig
- CurrentDatetimeConfig
- UserPhoneNumberConfig
Show child attributes
Show child attributes
Current default values for the tool arguments, keyed by argument name. Each value is a literal (string, number, or boolean) or a Vault variable reference using the {{$NAME}} syntax. Applied when a caller does not supply that argument.
Current Python source for the tool, populated for Custom Code tools only. Custom Code runs sandboxed with no internet access.