curl --request GET \
--url https://api.danubeai.com/v1/tools/search \
--header 'danube-api-key: <api-key>'import requests
url = "https://api.danubeai.com/v1/tools/search"
headers = {"danube-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'danube-api-key': '<api-key>'}};
fetch('https://api.danubeai.com/v1/tools/search', 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.danubeai.com/v1/tools/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"danube-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://api.danubeai.com/v1/tools/search"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("danube-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://api.danubeai.com/v1/tools/search")
.header("danube-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.danubeai.com/v1/tools/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["danube-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"id": "<string>",
"slug": "<string>",
"name": "<string>",
"description": "<string>",
"service_id": "<string>",
"tags": [
"<string>"
],
"method": "<string>",
"path": "<string>",
"parameters": {},
"output": {},
"tips": "<string>",
"version": "<string>",
"is_paid": true,
"price_per_call_cents": 123,
"readiness": "ready",
"configuration_url": "<string>",
"reliability": {},
"deprecated": true,
"deprecation_message": "<string>",
"sunset_date": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
]{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}Search Tools
Search for tools by query. Matches against tool names and descriptions using semantic search.
curl --request GET \
--url https://api.danubeai.com/v1/tools/search \
--header 'danube-api-key: <api-key>'import requests
url = "https://api.danubeai.com/v1/tools/search"
headers = {"danube-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'danube-api-key': '<api-key>'}};
fetch('https://api.danubeai.com/v1/tools/search', 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.danubeai.com/v1/tools/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"danube-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://api.danubeai.com/v1/tools/search"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("danube-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://api.danubeai.com/v1/tools/search")
.header("danube-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.danubeai.com/v1/tools/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["danube-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"id": "<string>",
"slug": "<string>",
"name": "<string>",
"description": "<string>",
"service_id": "<string>",
"tags": [
"<string>"
],
"method": "<string>",
"path": "<string>",
"parameters": {},
"output": {},
"tips": "<string>",
"version": "<string>",
"is_paid": true,
"price_per_call_cents": 123,
"readiness": "ready",
"configuration_url": "<string>",
"reliability": {},
"deprecated": true,
"deprecation_message": "<string>",
"sunset_date": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
]{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}Query parameters
| Parameter | Meaning |
|---|---|
query | What you want to do, in plain words |
service_id | Only tools of this service |
tags | Only tools carrying every tag given (repeat the parameter) |
ready_only | true keeps only tools this key can run right now |
min_success_rate | Drop tools whose 30-day success rate is known and below this (0 to 1); tools without a meaningful sample are kept |
limit | 1 to 100, applied after every filter. num_results is an older alias; limit wins if both are sent |
readiness (ready, needs_credential, unavailable), configuration_url when a credential is missing, slug, and, for tools called in the last 30 days, a reliability block.
Example
curl -X GET "https://api.danubeai.com/v1/tools/search?query=weather" \
-H "danube-api-key: YOUR_API_KEY"
Authorizations
Your Danube API key
Query Parameters
Search query to match tool names and descriptions (e.g., 'get weather', 'fetch news')
Filter results to a specific service
Filter by tags
Maximum number of results (1-100). Applied after every filter. A tool whose name or slug is exactly the query is always first, so limit=1 resolves a tool by name.
1 <= x <= 100Keep only tools this key can run right now
Drop tools whose 30-day success rate is known and below this (0 to 1); tools without a meaningful sample are kept
0 <= x <= 1Response
List of matching tools
Unique identifier for the tool
Human-readable identifier (e.g. gmail-send-email); accepted anywhere a tool id is
Display name of the tool
What the tool does
ID of the service this tool belongs to
Tags for categorizing the tool
HTTP method, for tools on an api service
Request path, or service_id/ for MCP tools
Map of parameter name to its schema (type, location, description, required, default, enum)
Declared output fields, when the publisher provided them
Usage tips for agents, when set
Whether the caller can run the tool right now
ready, needs_credential, unavailable Where to connect the service when readiness is needs_credential
30-day reliability block for tools called recently: calls_30d, success_rate_30d, p50_seconds, last_error_class, faults, flagged, ...
After this date the tool leaves search and refuses calls
