curl -X GET "https://api.danubeai.com/v1/tools/public/search?query=send%20email&limit=5&ready_only=true"
[
{
"id": "tool_abc123",
"name": "Resend - Send Email",
"slug": "resend-send-email",
"description": "Send an email through Resend",
"service_id": "svc_resend_001",
"parameters": {
"to": {
"name": "to",
"location": "body",
"description": "Recipient address",
"type": "string",
"required": true
},
"subject": {
"name": "subject",
"location": "body",
"description": "Subject line",
"type": "string",
"required": true
}
},
"readiness": "needs_credential",
"configuration_url": "/dashboard/services/svc_resend_001",
"reliability": {
"window_days": 30,
"calls_7d": 4,
"calls_30d": 18,
"success_rate_30d": 1.0,
"p50_seconds": 0.42,
"p95_seconds": 0.9,
"last_success_at": "2026-09-11T10:15:00Z",
"last_failure_at": null,
"last_error_class": null,
"last_error_type": null,
"error_classes": {},
"faults": {},
"auth_failures_30d": 0,
"caller_failures_30d": 0,
"danube_failures_30d": 0,
"upstream_failures_30d": 0,
"distinct_callers_30d": 2,
"flagged": false,
"refreshed_at": "2026-09-12T08:00:00Z"
},
"deprecated": false,
"deprecation_message": null,
"sunset_date": null
}
]
Tools
Public Search Tools
Search the catalog without an account and get a trimmed tool shape
GET
/
v1
/
tools
/
public
/
search
curl -X GET "https://api.danubeai.com/v1/tools/public/search?query=send%20email&limit=5&ready_only=true"
[
{
"id": "tool_abc123",
"name": "Resend - Send Email",
"slug": "resend-send-email",
"description": "Send an email through Resend",
"service_id": "svc_resend_001",
"parameters": {
"to": {
"name": "to",
"location": "body",
"description": "Recipient address",
"type": "string",
"required": true
},
"subject": {
"name": "subject",
"location": "body",
"description": "Subject line",
"type": "string",
"required": true
}
},
"readiness": "needs_credential",
"configuration_url": "/dashboard/services/svc_resend_001",
"reliability": {
"window_days": 30,
"calls_7d": 4,
"calls_30d": 18,
"success_rate_30d": 1.0,
"p50_seconds": 0.42,
"p95_seconds": 0.9,
"last_success_at": "2026-09-11T10:15:00Z",
"last_failure_at": null,
"last_error_class": null,
"last_error_type": null,
"error_classes": {},
"faults": {},
"auth_failures_30d": 0,
"caller_failures_30d": 0,
"danube_failures_30d": 0,
"upstream_failures_30d": 0,
"distinct_callers_30d": 2,
"flagged": false,
"refreshed_at": "2026-09-12T08:00:00Z"
},
"deprecated": false,
"deprecation_message": null,
"sunset_date": null
}
]
Overview
Natural-language search over the catalog, with no account needed. The response is a reduced tool shape: no security schemes, base URL or credential details, so it is safe to serve to anyone. The dashboard’s workflow builder uses it for tool discovery. Ordering: an exact name or slug match is pinned first. Sample-data services (JSONPlaceholder, DummyJSON) are moved behind every real service unless the query names them. Deprecated tools stay listed until their sunset date passes; the flag and its reason let you avoid them. When search could not run at all (a database timeout), the response is503 with Retry-After: 1, so it is never mistaken for zero matches. Requests are limited to 30 per minute per IP address by default.
Auth: None required. Sending an API key (danube-api-key header) or a JWT changes only readiness: signed-in callers see which results they can run right now, and those are ranked first. Anonymous callers see no-auth tools as ready and everything else as needs_credential, in the catalog’s own order.
Query Parameters
string
default:""
What you are looking for. An empty or whitespace-only query returns an empty list.
string
Restrict results to one service
integer
default:20
Maximum results to return. The search itself never produces more than 30 matches.
boolean
default:false
Keep only tools whose
readiness is ready. For an anonymous caller that means tools that need no credential. Applied before limit, so the page is not short.number
Between 0 and 1. Drops tools whose 30-day success rate is known and below the bar. Tools without a meaningful sample are kept, since unknown is not the same as bad.
Response
Returns an array of trimmed tool objects.string
Tool UUID
string
Tool name
string
Human-readable identifier, or
nullstring
Tool description
string
Parent service UUID
object
Keyed by parameter name. Each entry has
name, location, description, type and required, plus default, enum, minimum, maximum, encode_slashes and json_schema when set.string
ready, needs_credential or unavailable for this callerstring
Where to connect the service. Set only when
readiness is needs_credential.object
30-day reliability block, or
null when the tool has not been called in the window. Keys: window_days, calls_7d, calls_30d, success_rate_30d (null below 10 calls), p50_seconds, p95_seconds, last_success_at, last_failure_at, last_error_class, last_error_type, error_classes, faults, auth_failures_30d, caller_failures_30d, danube_failures_30d, upstream_failures_30d, distinct_callers_30d, flagged, refreshed_at.boolean
Whether the tool is deprecated
string
Why it was deprecated, or
nullstring
When a deprecated tool stops being listed, or
nullExample
The Python and TypeScript SDKs do not wrap this endpoint. Theirtools.search methods call the authenticated Search Tools endpoint, as does the search_tools MCP tool.
curl -X GET "https://api.danubeai.com/v1/tools/public/search?query=send%20email&limit=5&ready_only=true"
[
{
"id": "tool_abc123",
"name": "Resend - Send Email",
"slug": "resend-send-email",
"description": "Send an email through Resend",
"service_id": "svc_resend_001",
"parameters": {
"to": {
"name": "to",
"location": "body",
"description": "Recipient address",
"type": "string",
"required": true
},
"subject": {
"name": "subject",
"location": "body",
"description": "Subject line",
"type": "string",
"required": true
}
},
"readiness": "needs_credential",
"configuration_url": "/dashboard/services/svc_resend_001",
"reliability": {
"window_days": 30,
"calls_7d": 4,
"calls_30d": 18,
"success_rate_30d": 1.0,
"p50_seconds": 0.42,
"p95_seconds": 0.9,
"last_success_at": "2026-09-11T10:15:00Z",
"last_failure_at": null,
"last_error_class": null,
"last_error_type": null,
"error_classes": {},
"faults": {},
"auth_failures_30d": 0,
"caller_failures_30d": 0,
"danube_failures_30d": 0,
"upstream_failures_30d": 0,
"distinct_callers_30d": 2,
"flagged": false,
"refreshed_at": "2026-09-12T08:00:00Z"
},
"deprecated": false,
"deprecation_message": null,
"sunset_date": null
}
]
