curl --request POST \
--url https://api.conduit.ai/v1/custom-tools/{id}/run \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"workspace_id": "j57demo8f8x7c9v0n2q4r6t8y1u3i5o",
"parameters": {
"order_id": "ord_12345"
}
}
'import requests
url = "https://api.conduit.ai/v1/custom-tools/{id}/run"
payload = {
"workspace_id": "j57demo8f8x7c9v0n2q4r6t8y1u3i5o",
"parameters": { "order_id": "ord_12345" }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
workspace_id: 'j57demo8f8x7c9v0n2q4r6t8y1u3i5o',
parameters: {order_id: 'ord_12345'}
})
};
fetch('https://api.conduit.ai/v1/custom-tools/{id}/run', 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.conduit.ai/v1/custom-tools/{id}/run",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'workspace_id' => 'j57demo8f8x7c9v0n2q4r6t8y1u3i5o',
'parameters' => [
'order_id' => 'ord_12345'
]
]),
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://api.conduit.ai/v1/custom-tools/{id}/run"
payload := strings.NewReader("{\n \"workspace_id\": \"j57demo8f8x7c9v0n2q4r6t8y1u3i5o\",\n \"parameters\": {\n \"order_id\": \"ord_12345\"\n }\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.conduit.ai/v1/custom-tools/{id}/run")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"workspace_id\": \"j57demo8f8x7c9v0n2q4r6t8y1u3i5o\",\n \"parameters\": {\n \"order_id\": \"ord_12345\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.conduit.ai/v1/custom-tools/{id}/run")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"workspace_id\": \"j57demo8f8x7c9v0n2q4r6t8y1u3i5o\",\n \"parameters\": {\n \"order_id\": \"ord_12345\"\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"success": true,
"message": "Order ord_12345 is shipped",
"result": {
"message": "Order ord_12345 is shipped",
"rawData": {
"status": "shipped"
}
},
"error": null,
"logs": null,
"run_time_ms": 842
}
}{
"error": "Invalid workspace id"
}{
"error": "Invalid workspace id"
}{
"error": "Invalid workspace id"
}{
"error": "Invalid workspace id"
}{
"error": "Invalid workspace id"
}Run Custom Tool
Executes a custom code tool with the given parameters and returns its result. The code runs in the sandbox exactly as an agent would invoke it. A tool whose own code fails still returns 200 with success: false. Requires a token with write access.
curl --request POST \
--url https://api.conduit.ai/v1/custom-tools/{id}/run \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"workspace_id": "j57demo8f8x7c9v0n2q4r6t8y1u3i5o",
"parameters": {
"order_id": "ord_12345"
}
}
'import requests
url = "https://api.conduit.ai/v1/custom-tools/{id}/run"
payload = {
"workspace_id": "j57demo8f8x7c9v0n2q4r6t8y1u3i5o",
"parameters": { "order_id": "ord_12345" }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
workspace_id: 'j57demo8f8x7c9v0n2q4r6t8y1u3i5o',
parameters: {order_id: 'ord_12345'}
})
};
fetch('https://api.conduit.ai/v1/custom-tools/{id}/run', 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.conduit.ai/v1/custom-tools/{id}/run",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'workspace_id' => 'j57demo8f8x7c9v0n2q4r6t8y1u3i5o',
'parameters' => [
'order_id' => 'ord_12345'
]
]),
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://api.conduit.ai/v1/custom-tools/{id}/run"
payload := strings.NewReader("{\n \"workspace_id\": \"j57demo8f8x7c9v0n2q4r6t8y1u3i5o\",\n \"parameters\": {\n \"order_id\": \"ord_12345\"\n }\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.conduit.ai/v1/custom-tools/{id}/run")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"workspace_id\": \"j57demo8f8x7c9v0n2q4r6t8y1u3i5o\",\n \"parameters\": {\n \"order_id\": \"ord_12345\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.conduit.ai/v1/custom-tools/{id}/run")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"workspace_id\": \"j57demo8f8x7c9v0n2q4r6t8y1u3i5o\",\n \"parameters\": {\n \"order_id\": \"ord_12345\"\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"success": true,
"message": "Order ord_12345 is shipped",
"result": {
"message": "Order ord_12345 is shipped",
"rawData": {
"status": "shipped"
}
},
"error": null,
"logs": null,
"run_time_ms": 842
}
}{
"error": "Invalid workspace id"
}{
"error": "Invalid workspace id"
}{
"error": "Invalid workspace id"
}{
"error": "Invalid workspace id"
}{
"error": "Invalid workspace id"
}Authorizations
Conduit API token. Use Authorization: Bearer <token>. Read/write endpoints require a token with write access.
Path Parameters
Custom tool id.
"kg77c0dy0mgdpzmqz6tesry8w184002s"
Body
Request body for running a custom code tool. Requires a token with write access since execution can have side effects.
Optional workspace override. If omitted, Conduit resolves the tool's workspace automatically.
"j57demo8f8x7c9v0n2q4r6t8y1u3i5o"
Arguments passed to the tool's main entrypoint, keyed by parameter name. Every parameter the tool marks as required must be present.
Show child attributes
Show child attributes
Response
Custom tool run result
Result of executing a custom code tool. A non-2xx is only returned when the tool could not be found or the arguments were rejected; a tool whose code fails returns 200 with success: false.
Show child attributes
Show child attributes
Was this page helpful?