API Documentation
Integrate Unfragile's capability-based AI search into your app. Every API call feeds the match graph — the graph learns from every interaction, regardless of where it happens.
Quick Start
curl "https://unfragile.ai/api/v1/search?q=best+code+editor+with+AI&limit=3"No authentication required for up to 60 requests/minute. Add an API key for 300 req/min.
Authentication
Authentication is optional. Unauthenticated requests are rate-limited to 60/min per IP. Authenticated requests get 300/min and are tracked for analytics.
Pass your API key via either header:
# Option 1: Authorization header
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://unfragile.ai/api/v1/search?q=mcp+server+for+slack"
# Option 2: X-API-Key header
curl -H "X-API-Key: YOUR_API_KEY" \
"https://unfragile.ai/api/v1/search?q=mcp+server+for+slack"GET /api/v1/search
Capability-based hybrid search. Returns matched artifacts with capabilities, UnfragileRank scores, and match graph social proof.
Parameters
| Param | Type | Required | Description |
|---|---|---|---|
| q | string | Yes | Search query (2-500 chars) |
| limit | integer | No | Max results, 1-20 (default: 5) |
| type | string | No | Filter by artifact type (agent, model, mcp, repo, etc.) |
| source | string | No | Your app name (for graph attribution) |
Response
{
"query": "best code editor with AI",
"intent": {
"type": "tool_search",
"category": "ai-coding",
"refined": "AI-powered code editor with chat and autocomplete"
},
"matches": [
{
"artifact": {
"id": "cursor",
"name": "Cursor",
"type": "product",
"url": "https://cursor.com",
"slug": "cursor",
"description": "AI-first code editor built on VS Code",
"categories": ["ai-coding"],
"pricing": { "model": "freemium", "free": false },
"verified": true,
"unfragileRank": 82.5,
"pageUrl": "https://unfragile.ai/artifact/cursor"
},
"capabilities": [
{
"name": "Codebase-Aware Code Editing",
"description": "Edits code with full project context...",
"matchScore": 0.94,
"bestFor": ["large codebases", "multi-file refactoring"],
"limitations": ["requires VS Code familiarity"]
}
],
"matchGraph": {
"timesMatched": 142,
"successRate": 0.87,
"topIntents": ["code editor", "AI coding", "cursor alternative"]
},
"compositeScore": 78
}
],
"matchCount": 5,
"graphSignal": {
"gapDetected": false,
"queryId": "api_1713456789_abc123"
},
"_links": {
"self": "https://unfragile.ai/api/v1/search?q=best+code+editor+with+AI",
"schema": "https://unfragile.ai/schema",
"hub": "https://unfragile.ai/hub"
}
}Rate Limits
| Tier | Limit | Window |
|---|---|---|
| Unauthenticated | 60 | per minute per IP |
| With API key | 300 | per minute |
When rate limited, the API returns 429 Too Many Requests with a Retry-After: 60 header.
Artifact Types
Use the type parameter to filter results. Valid types:
productagentmcpapirepomodelframeworkcliextensionworkflowpromptskilldatasetbenchmarkappwebapptemplateplatformfinetuneExamples
Search for MCP servers:
curl "https://unfragile.ai/api/v1/search?q=google+calendar&type=mcp&limit=3"Search for open-source agents:
curl "https://unfragile.ai/api/v1/search?q=autonomous+coding+agent&type=agent"Python integration:
import requests
resp = requests.get("https://unfragile.ai/api/v1/search", params={
"q": "best framework for building AI agents",
"limit": 5,
"source": "my-app"
})
data = resp.json()
for match in data["matches"]:
artifact = match["artifact"]
print(f"{artifact['name']} (rank: {artifact['unfragileRank']})")
for cap in match["capabilities"][:3]:
print(f" - {cap['name']} ({cap['matchScore']})")JavaScript/TypeScript:
const res = await fetch(
"https://unfragile.ai/api/v1/search?" +
new URLSearchParams({ q: "image generation API", limit: "3" })
);
const { matches, graphSignal } = await res.json();
if (graphSignal.gapDetected) {
console.log("No strong matches — submit at unfragile.ai/submit");
}
for (const match of matches) {
console.log(match.artifact.name, match.compositeScore);
}Graph Learning
Every API call generates match records that feed back into the graph. Over time, the graph learns which capabilities solve which intents. The queryId in the response uniquely identifies each search for tracking.
When gapDetected: true, the query had no strong capability matches — this is recorded as a demand signal visible on /gaps.
Streaming Search (SSE)
For the full AI synthesis experience (like the website), use the streaming endpoint:
curl -N -X POST "https://unfragile.ai/api/search" \
-H "Content-Type: application/json" \
-d '{"query": "best AI for building prototypes"}'Returns Server-Sent Events with progressive tool matches and AI synthesis. This is the same pipeline that powers the website search.
Capability Schema
The full capability schema — 10 standard categories, 19 artifact types, JSON-LD context — is published at unfragile.ai/schema.
Questions? Reach us at hello@unfragile.ai