curl --request GET \
--url https://www.asteragents.com/api/tools \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.asteragents.com/api/tools"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://www.asteragents.com/api/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://www.asteragents.com/api/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 => [
"Authorization: Bearer <token>"
],
]);
$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://www.asteragents.com/api/tools"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://www.asteragents.com/api/tools")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.asteragents.com/api/tools")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"total": 3,
"tools": [
{
"name": "scrape_url",
"displayName": "Scrape URL",
"description": "Scrape content from a given URL using the Firecrawl API",
"category": "Research",
"requiredIntegration": null,
"isPrivate": false,
"available": true,
"parameters": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The URL to scrape"
}
}
}
},
{
"name": "search_knowledge_base",
"displayName": "Search Knowledge Base",
"description": "Search through a specific knowledge base for relevant information.",
"category": "Aster Agents Platform",
"requiredIntegration": null,
"isPrivate": false,
"available": true,
"parameters": {
"type": "object",
"required": [
"query",
"knowledge_base_id"
],
"properties": {
"query": {
"type": "string",
"description": "The search query"
},
"knowledge_base_id": {
"type": "integer",
"description": "The ID of the knowledge base to search"
}
}
}
},
{
"name": "google:code_execution",
"displayName": "Code Execution",
"description": "Generate and run Python code",
"category": "Google AI",
"isProviderTool": true,
"provider": "google",
"available": true
}
]
}List available tools
Returns the catalog of tools the caller’s organization can attach to an agent.
The default response is filtered to only include tools the org can use right now:
- Tools requiring an integration are excluded if the org hasn’t connected it
- Private tools are excluded unless enabled by an org admin
- Companion tools (auto-attached when their parent is enabled) are excluded
Each entry’s name + parameters + description matches the shape stored
under an agent’s tools JSONB. To attach a tool to an agent, copy the
relevant entries from this response into the tools field of POST /agents,
keyed by name. Provider tools (isProviderTool: true) are passed under
their name (e.g., google:code_execution) with { isProviderTool: true }.
The set of available tools changes as integrations are connected, private tools are toggled in org settings, and new platform tools ship. Call this endpoint at agent-build time rather than caching the catalog.
curl --request GET \
--url https://www.asteragents.com/api/tools \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.asteragents.com/api/tools"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://www.asteragents.com/api/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://www.asteragents.com/api/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 => [
"Authorization: Bearer <token>"
],
]);
$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://www.asteragents.com/api/tools"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://www.asteragents.com/api/tools")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.asteragents.com/api/tools")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"total": 3,
"tools": [
{
"name": "scrape_url",
"displayName": "Scrape URL",
"description": "Scrape content from a given URL using the Firecrawl API",
"category": "Research",
"requiredIntegration": null,
"isPrivate": false,
"available": true,
"parameters": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The URL to scrape"
}
}
}
},
{
"name": "search_knowledge_base",
"displayName": "Search Knowledge Base",
"description": "Search through a specific knowledge base for relevant information.",
"category": "Aster Agents Platform",
"requiredIntegration": null,
"isPrivate": false,
"available": true,
"parameters": {
"type": "object",
"required": [
"query",
"knowledge_base_id"
],
"properties": {
"query": {
"type": "string",
"description": "The search query"
},
"knowledge_base_id": {
"type": "integer",
"description": "The ID of the knowledge base to search"
}
}
}
},
{
"name": "google:code_execution",
"displayName": "Code Execution",
"description": "Generate and run Python code",
"category": "Google AI",
"isProviderTool": true,
"provider": "google",
"available": true
}
]
}Authorizations
JWT token from Clerk authentication.
Must be from a user with org:admin role.
Query Parameters
When true, include every tool with available: false and an
unavailableReason instead of filtering them out. Useful for
surfacing "connect this integration to unlock X" hints.