curl --request POST \
--url https://api.devic.ai/v1/integrations/servers/{id}/tools/{toolName}/test \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"parameters": {
"max_results": 5
}
}
'import requests
url = "https://api.devic.ai/v1/integrations/servers/{id}/tools/{toolName}/test"
payload = { "parameters": { "max_results": 5 } }
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({parameters: {max_results: 5}})
};
fetch('https://api.devic.ai/v1/integrations/servers/{id}/tools/{toolName}/test', 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.devic.ai/v1/integrations/servers/{id}/tools/{toolName}/test",
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([
'parameters' => [
'max_results' => 5
]
]),
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.devic.ai/v1/integrations/servers/{id}/tools/{toolName}/test"
payload := strings.NewReader("{\n \"parameters\": {\n \"max_results\": 5\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.devic.ai/v1/integrations/servers/{id}/tools/{toolName}/test")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"parameters\": {\n \"max_results\": 5\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.devic.ai/v1/integrations/servers/{id}/tools/{toolName}/test")
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 \"parameters\": {\n \"max_results\": 5\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"executionTimeMs": 123,
"app": "gmail",
"tool": "GMAIL_GET_PROFILE",
"data": {},
"error": "<string>",
"requiresUserAction": true
}Test one of a connected integration’s tools
Runs the tool once against the connected account and returns what the app answered — the same call path an agent takes, so a green test means the agent will get the same result. It is a real call on real data: prefer read-only tools, and treat anything that creates, sends or deletes as a production action.
curl --request POST \
--url https://api.devic.ai/v1/integrations/servers/{id}/tools/{toolName}/test \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"parameters": {
"max_results": 5
}
}
'import requests
url = "https://api.devic.ai/v1/integrations/servers/{id}/tools/{toolName}/test"
payload = { "parameters": { "max_results": 5 } }
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({parameters: {max_results: 5}})
};
fetch('https://api.devic.ai/v1/integrations/servers/{id}/tools/{toolName}/test', 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.devic.ai/v1/integrations/servers/{id}/tools/{toolName}/test",
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([
'parameters' => [
'max_results' => 5
]
]),
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.devic.ai/v1/integrations/servers/{id}/tools/{toolName}/test"
payload := strings.NewReader("{\n \"parameters\": {\n \"max_results\": 5\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.devic.ai/v1/integrations/servers/{id}/tools/{toolName}/test")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"parameters\": {\n \"max_results\": 5\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.devic.ai/v1/integrations/servers/{id}/tools/{toolName}/test")
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 \"parameters\": {\n \"max_results\": 5\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"executionTimeMs": 123,
"app": "gmail",
"tool": "GMAIL_GET_PROFILE",
"data": {},
"error": "<string>",
"requiresUserAction": true
}Authorizations
An API key from your Devic console, sent as Authorization: Bearer <key>. An embedded front end sends a tenant-session token instead, so no API key reaches the browser, and an OAuth integration sends its access token. Missing, invalid or expired credentials get a 401. See Authentication.
Path Parameters
Integration id
Tool slug, e.g. GMAIL_GET_PROFILE
Body
Arguments passed to the tool, as the app expects them. Omit for a tool that takes none.
{ "max_results": 5 }
Response
Success
Whether the app accepted and ran the call
Round trip to the app, in milliseconds
App the tool belongs to
"gmail"
Tool slug that ran
"GMAIL_GET_PROFILE"
What the tool returned, exactly as the agent would receive it
Why it failed, in the app’s own words
True when the failure is the connection itself (expired or revoked account), not the arguments