curl --request GET \
--url https://flowra.dev/api/v1/toolkits/with-tools \
--header 'x-api-key: <api-key>'import requests
url = "https://flowra.dev/api/v1/toolkits/with-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/toolkits/with-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/toolkits/with-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/toolkits/with-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/toolkits/with-tools")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://flowra.dev/api/v1/toolkits/with-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",
"name": "Slack",
"authSchemes": [
"OAUTH2",
"API_KEY"
],
"providerManagedAuthSchemes": [
"OAUTH2"
],
"isDisabled": true,
"noAuth": false,
"createdAt": "2023-01-01T00:00:00Z",
"updatedAt": "2023-01-01T00:00:00Z",
"description": "A comprehensive toolkit for productivity applications",
"logo": "https://example.com/logo.png",
"appUrl": "https://app.example.com",
"triggersCount": 15,
"toolsCount": 25,
"version": "1.0.0",
"availableVersions": [
"1.0.0",
"1.1.0",
"2.0.0"
],
"authConfigDetails": [
{
"name": "oauth2",
"mode": "OAUTH2",
"fields": {
"authConfigCreation": {},
"connectedAccountInitiation": {}
},
"proxy": {
"baseUrl": ""
},
"deprecatedAuthProviderDetails": {
"authorization_url": "",
"token_url": ""
}
}
],
"getCurrentUserEndpoint": "/api/user",
"baseUrl": "https://api.slack.com",
"provider": "LOCAL",
"owner": true,
"popularityScore": 0,
"regions": [
"IR",
"US"
],
"categories": [
"crm",
"sales-&-customer-support"
],
"seatBilled": false,
"tools": [
{
"id": "",
"slug": "",
"toolkitSlug": "",
"description": "",
"inputParameters": {},
"outputParameters": {},
"type": "",
"popularityScore": 0,
"isDisabled": true,
"isDeprecated": true,
"isProjectTool": true,
"noAuth": true
}
]
}
],
"total": 100,
"totalTools": 5000,
"page": 1,
"limit": 20,
"totalPages": 5,
"hasNextPage": true,
"hasPreviousPage": false
}Get toolkits with nested tools
List toolkits including the full list of tools in each. Use when building a tool picker (e.g. for agents or MCP) so users can see which tools belong to which toolkit.
curl --request GET \
--url https://flowra.dev/api/v1/toolkits/with-tools \
--header 'x-api-key: <api-key>'import requests
url = "https://flowra.dev/api/v1/toolkits/with-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/toolkits/with-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/toolkits/with-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/toolkits/with-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/toolkits/with-tools")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://flowra.dev/api/v1/toolkits/with-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",
"name": "Slack",
"authSchemes": [
"OAUTH2",
"API_KEY"
],
"providerManagedAuthSchemes": [
"OAUTH2"
],
"isDisabled": true,
"noAuth": false,
"createdAt": "2023-01-01T00:00:00Z",
"updatedAt": "2023-01-01T00:00:00Z",
"description": "A comprehensive toolkit for productivity applications",
"logo": "https://example.com/logo.png",
"appUrl": "https://app.example.com",
"triggersCount": 15,
"toolsCount": 25,
"version": "1.0.0",
"availableVersions": [
"1.0.0",
"1.1.0",
"2.0.0"
],
"authConfigDetails": [
{
"name": "oauth2",
"mode": "OAUTH2",
"fields": {
"authConfigCreation": {},
"connectedAccountInitiation": {}
},
"proxy": {
"baseUrl": ""
},
"deprecatedAuthProviderDetails": {
"authorization_url": "",
"token_url": ""
}
}
],
"getCurrentUserEndpoint": "/api/user",
"baseUrl": "https://api.slack.com",
"provider": "LOCAL",
"owner": true,
"popularityScore": 0,
"regions": [
"IR",
"US"
],
"categories": [
"crm",
"sales-&-customer-support"
],
"seatBilled": false,
"tools": [
{
"id": "",
"slug": "",
"toolkitSlug": "",
"description": "",
"inputParameters": {},
"outputParameters": {},
"type": "",
"popularityScore": 0,
"isDisabled": true,
"isDeprecated": true,
"isProjectTool": true,
"noAuth": 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 toolkits that include this curated 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"
Comma-separated toolkit slugs to filter exact matches
2048"gmail,slack"
Filter by tool type: "all" (default), "triggers" (webhook/poll only), "actions" (action only)
all, triggers, actions Ownership scope: "all" (default) or "mine" (only your project's own toolkits and tools)
all, mine Region filter: ISO country code, "global" (worldwide-only), or "all" (no region filter; admin browse)
"IR"
How country region=CODE matches: include_global (default) = global ∪ country; exact = only toolkits tagged for that country
include_global, exact "exact"
Filter by specific tool; format toolkitSlug:toolSlug (e.g. composio_slack:send_message)
"composio_slack:send_message"
Comma-separated toolkit slugs to sort first (apps the user already picked). Prefer this over selectedToolSlugs.
2048"shopify,gmail"
Deprecated. Comma-separated tool slugs for sort-order. Use selectedToolkitSlugs.
2048"tool_a,tool_b"
Exclude bidirectional messaging-channel trigger tools from results
Response
Toolkits with tools retrieved successfully
Success status
true
Response message
"Data retrieved successfully"
Array of items
Show child attributes
Show child attributes
[
{
"id": "",
"slug": "slack",
"name": "Slack",
"authSchemes": ["OAUTH2", "API_KEY"],
"providerManagedAuthSchemes": ["OAUTH2"],
"isDisabled": true,
"noAuth": false,
"createdAt": "2023-01-01T00:00:00Z",
"updatedAt": "2023-01-01T00:00:00Z",
"description": "A comprehensive toolkit for productivity applications",
"logo": "https://example.com/logo.png",
"appUrl": "https://app.example.com",
"triggersCount": 15,
"toolsCount": 25,
"version": "1.0.0",
"availableVersions": ["1.0.0", "1.1.0", "2.0.0"],
"authConfigDetails": [
{
"name": "oauth2",
"mode": "OAUTH2",
"fields": {
"authConfigCreation": {},
"connectedAccountInitiation": {}
},
"proxy": { "baseUrl": "" },
"deprecatedAuthProviderDetails": { "authorization_url": "", "token_url": "" }
}
],
"getCurrentUserEndpoint": "/api/user",
"baseUrl": "https://api.slack.com",
"provider": "LOCAL",
"owner": true,
"popularityScore": 0,
"regions": ["IR", "US"],
"categories": ["crm", "sales-&-customer-support"],
"seatBilled": false,
"tools": [
{
"id": "",
"slug": "",
"toolkitSlug": "",
"description": "",
"inputParameters": {},
"outputParameters": {},
"type": "",
"popularityScore": 0,
"isDisabled": true,
"isDeprecated": true,
"isProjectTool": true,
"noAuth": 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?