curl --request GET \
--url https://flowra.dev/api/v1/tools \
--header 'x-api-key: <api-key>'import requests
url = "https://flowra.dev/api/v1/tools"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://flowra.dev/api/v1/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://flowra.dev/api/v1/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 => [
"x-api-key: <api-key>"
],
]);
$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://flowra.dev/api/v1/tools"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://flowra.dev/api/v1/tools")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://flowra.dev/api/v1/tools")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Data retrieved successfully",
"data": [
{
"id": "",
"slug": "slack_send_message",
"name": "Send Message",
"description": "Send a message to a Slack channel or user",
"type": "action",
"toolkit": {
"slug": "slack",
"name": "Slack",
"logo": "https://example.com/slack-logo.png"
},
"inputParameters": {},
"outputParameters": {},
"noAuth": false,
"meta": {
"createdAt": "2023-01-01T00:00:00Z",
"updatedAt": "2023-01-01T00:00:00Z",
"version": "2.0.0",
"availableVersions": [
"1.0.0",
"2.0.0"
],
"scopes": [
"chat:write",
"channels:read"
],
"tags": [
"productivity",
"communication"
],
"isImportant": true
},
"provider": "LOCAL",
"toolkitSlug": "",
"owner": true
}
],
"total": 100,
"totalTools": 5000,
"page": 1,
"limit": 20,
"totalPages": 5,
"hasNextPage": true,
"hasPreviousPage": false
}List available tools
List all tools you can use in workflows and agents. Supports filtering, sorting, and search. Tools can be custom (API calls, scripts) or from toolkits/MCP.
curl --request GET \
--url https://flowra.dev/api/v1/tools \
--header 'x-api-key: <api-key>'import requests
url = "https://flowra.dev/api/v1/tools"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://flowra.dev/api/v1/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://flowra.dev/api/v1/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 => [
"x-api-key: <api-key>"
],
]);
$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://flowra.dev/api/v1/tools"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://flowra.dev/api/v1/tools")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://flowra.dev/api/v1/tools")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Data retrieved successfully",
"data": [
{
"id": "",
"slug": "slack_send_message",
"name": "Send Message",
"description": "Send a message to a Slack channel or user",
"type": "action",
"toolkit": {
"slug": "slack",
"name": "Slack",
"logo": "https://example.com/slack-logo.png"
},
"inputParameters": {},
"outputParameters": {},
"noAuth": false,
"meta": {
"createdAt": "2023-01-01T00:00:00Z",
"updatedAt": "2023-01-01T00:00:00Z",
"version": "2.0.0",
"availableVersions": [
"1.0.0",
"2.0.0"
],
"scopes": [
"chat:write",
"channels:read"
],
"tags": [
"productivity",
"communication"
],
"isImportant": true
},
"provider": "LOCAL",
"toolkitSlug": "",
"owner": true
}
],
"total": 100,
"totalTools": 5000,
"page": 1,
"limit": 20,
"totalPages": 5,
"hasNextPage": true,
"hasPreviousPage": false
}Authorizations
Project API key. Create and manage keys in the dashboard under Project → API Keys. Send as header: x-api-key:
Query Parameters
Search keyword for filtering results
"john doe"
Page number (1-based)
x >= 11
Number of items per page
1 <= x <= 10020
Number of items to skip (for offset-based pagination)
x >= 00
Field name to sort by
"createdAt"
Sort order
ASC, DESC "DESC"
Comma-separated list of fields to include in response
"id,name,email"
Filter tools by curated toolkit category id
developer-tools-&-devops, collaboration-&-communication, ai-&-machine-learning, document-&-file-management, productivity-&-project-management, crm, analytics-&-data, entertainment-&-media, education-&-lms, design-&-creative-tools, marketing-&-social-media, scheduling-&-booking, e-commerce, finance-&-accounting, sales-&-customer-support, hr-&-recruiting, social-media, workflow-automation, data-&-analytics, advertising-&-marketing "crm"
Filter tools by provider
COMPOSIO, LOCAL "LOCAL"
The slug of the toolkit to filter by
"slack"
Comma-separated list of specific tool slugs to retrieve (overrides other filters). Must fit in a GET query.
2048"slack_send_message,slack_get_channels"
Comma-separated list of auth config IDs to filter tools by
"auth_config_1,auth_config_2"
Filter to only show important/featured tools (set to "true" to enable)
true, false "true"
Filter tools by one or more tags (can be specified multiple times)
"productivity,communication"
Array of scopes to filter tools by
"read,write,admin"
Include deprecated tools in the response
false
Toolkit version specification. Use "latest" for latest versions or bracket notation for specific versions per toolkit.
"latest"
Filter by tool kind: "actions" (default, callable tools), "triggers" (webhook/poll), or "all"
all, actions, triggers "actions"
Cursor for pagination. The cursor is a base64 encoded string of the page and limit.
"eyJwYWdlIjoxLCJsaW1pdCI6MjB9"
Response
Tools retrieved successfully
Success status
true
Response message
"Data retrieved successfully"
Array of items
Show child attributes
Show child attributes
[
{
"id": "",
"slug": "slack_send_message",
"name": "Send Message",
"description": "Send a message to a Slack channel or user",
"type": "action",
"toolkit": {
"slug": "slack",
"name": "Slack",
"logo": "https://example.com/slack-logo.png"
},
"inputParameters": {},
"outputParameters": {},
"noAuth": false,
"meta": {
"createdAt": "2023-01-01T00:00:00Z",
"updatedAt": "2023-01-01T00:00:00Z",
"version": "2.0.0",
"availableVersions": ["1.0.0", "2.0.0"],
"scopes": ["chat:write", "channels:read"],
"tags": ["productivity", "communication"],
"isImportant": true
},
"provider": "LOCAL",
"toolkitSlug": "",
"owner": true
}
]
Total number of items across all pages
100
Optional secondary total (e.g. nested tools across all matching toolkits)
5000
Current page number (1-based)
1
Number of items per page
20
Total number of pages
5
Whether there is a next page
true
Whether there is a previous page
false
Was this page helpful?