Call a tool
curl --request POST \
--url https://api.nango.dev/connections/{connectionId}/tools/{name}/calls \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"input": {
"owner": "NangoHQ",
"repo": "interactive-demo",
"title": "Bug report"
}
}
'import requests
url = "https://api.nango.dev/connections/{connectionId}/tools/{name}/calls"
payload = { "input": {
"owner": "NangoHQ",
"repo": "interactive-demo",
"title": "Bug report"
} }
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({input: {owner: 'NangoHQ', repo: 'interactive-demo', title: 'Bug report'}})
};
fetch('https://api.nango.dev/connections/{connectionId}/tools/{name}/calls', 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.nango.dev/connections/{connectionId}/tools/{name}/calls",
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([
'input' => [
'owner' => 'NangoHQ',
'repo' => 'interactive-demo',
'title' => 'Bug report'
]
]),
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.nango.dev/connections/{connectionId}/tools/{name}/calls"
payload := strings.NewReader("{\n \"input\": {\n \"owner\": \"NangoHQ\",\n \"repo\": \"interactive-demo\",\n \"title\": \"Bug report\"\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.nango.dev/connections/{connectionId}/tools/{name}/calls")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"input\": {\n \"owner\": \"NangoHQ\",\n \"repo\": \"interactive-demo\",\n \"title\": \"Bug report\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nango.dev/connections/{connectionId}/tools/{name}/calls")
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 \"input\": {\n \"owner\": \"NangoHQ\",\n \"repo\": \"interactive-demo\",\n \"title\": \"Bug report\"\n }\n}"
response = http.request(request)
puts response.read_body{
"error": {
"code": "<string>",
"message": "<string>",
"errors": [
{}
]
}
}Tools
Call a tool
Calls an enabled tool synchronously and returns its JSON output directly.
Requires the environment:tools:call scope.
POST
/
connections
/
{connectionId}
/
tools
/
{name}
/
calls
Call a tool
curl --request POST \
--url https://api.nango.dev/connections/{connectionId}/tools/{name}/calls \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"input": {
"owner": "NangoHQ",
"repo": "interactive-demo",
"title": "Bug report"
}
}
'import requests
url = "https://api.nango.dev/connections/{connectionId}/tools/{name}/calls"
payload = { "input": {
"owner": "NangoHQ",
"repo": "interactive-demo",
"title": "Bug report"
} }
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({input: {owner: 'NangoHQ', repo: 'interactive-demo', title: 'Bug report'}})
};
fetch('https://api.nango.dev/connections/{connectionId}/tools/{name}/calls', 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.nango.dev/connections/{connectionId}/tools/{name}/calls",
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([
'input' => [
'owner' => 'NangoHQ',
'repo' => 'interactive-demo',
'title' => 'Bug report'
]
]),
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.nango.dev/connections/{connectionId}/tools/{name}/calls"
payload := strings.NewReader("{\n \"input\": {\n \"owner\": \"NangoHQ\",\n \"repo\": \"interactive-demo\",\n \"title\": \"Bug report\"\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.nango.dev/connections/{connectionId}/tools/{name}/calls")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"input\": {\n \"owner\": \"NangoHQ\",\n \"repo\": \"interactive-demo\",\n \"title\": \"Bug report\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nango.dev/connections/{connectionId}/tools/{name}/calls")
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 \"input\": {\n \"owner\": \"NangoHQ\",\n \"repo\": \"interactive-demo\",\n \"title\": \"Bug report\"\n }\n}"
response = http.request(request)
puts response.read_body{
"error": {
"code": "<string>",
"message": "<string>",
"errors": [
{}
]
}
}Calls an enabled tool synchronously and returns its output directly. See Tools for an end-to-end example.
Requires a Nango Environment API key with
environment:tools:call. Learn more about API key scopes.Authorizations
An Environment API key from your Nango environment, or an Account API key for account-level endpoints.
Headers
Integration ID. Required when multiple integrations share the connection ID.
Path Parameters
The connection ID to execute the tool for.
The tool name on the integration.
Body
application/json
Input matching the tool's schema. Omit for tools that take no input.
Response
The tool's JSON output, returned directly without a data wrapper.
Was this page helpful?