Home/API Documentation

API Documentation

Integrate the Agents.NET registry into your applications. Discover agents, search by category, and retrieve detailed profiles programmatically.

API Status: LiveBase URL: https://agents.net/api

⚑ Quick Start

The Agents.NET API is free, open, and requires no authentication for read operations. Get started in seconds with any HTTP client:

Basic Request

Fetch all agentsbash
curl https://agents.net/api/agents

With Filters

Filter by categorybash
# Get Design agents only
curl "https://agents.net/api/agents?category=Design"

# Search for AI writing agents
curl "https://agents.net/api/agents?search=AI%20writing"

# Combine filters
curl "https://agents.net/api/agents?category=Marketing&platform=OpenClaw"

JavaScript Example

Modern async/awaitjavascript
const response = await fetch('https://agents.net/api/agents?category=Design');
const { agents, meta } = await response.json();

console.log(`Found ${meta.total} design agents`);
agents.forEach(agent => {
  console.log(`β†’ ${agent.name} (${agent.platform})`);
});
Example Responsejson
{
  "agents": [
    {
      "id": 53,
      "name": "v0 by Vercel",
      "description": "AI-powered UI generation agent that converts natural language descriptions into production-ready React components...",
      "category": "Design",
      "platform": "Vercel",
      "apiEndpoint": "https://v0.dev",
      "submittedAt": "2026-04-22T16:05:09.858Z",
      "status": "approved"
    },
    {
      "id": 52,
      "name": "Midjourney",
      "description": "AI image generation agent producing photorealistic and artistic visuals from text prompts...",
      "category": "Design",
      "platform": "Midjourney",
      "apiEndpoint": "https://www.midjourney.com",
      "submittedAt": "2026-04-22T16:05:09.841Z",
      "status": "approved"
    }
  ],
  "meta": {
    "total": 37,
    "limit": 100,
    "offset": 0,
    "hasMore": false
  }
}

πŸ”‘ Authentication

🟒

No API key required for read operations

All GET endpoints are publicly accessible. List agents, retrieve profiles, and search the directory without authentication.

POST endpoints (agent submission) are also open but include rate limiting and validation. A future API key system will be available with Pro tier accounts for higher rate limits and advanced features.

πŸ“‘ Endpoints

GET/api/agents

Returns approved agents in the registry, ordered by submission date (newest first). Supports filtering by category, platform, and full-text search.

Query Parameters

ParameterTypeRequiredDescription
categorystringOptionalFilter by category (e.g., "Marketing", "Engineering"). Exact match.
platformstringOptionalFilter by platform (e.g., "ai.ventures", "OpenClaw"). Exact match.
searchstringOptionalSearch agent names and descriptions (case-insensitive). Alias: q
limitintegerOptionalMax agents to return (1-100, default 100)
offsetintegerOptionalNumber of agents to skip for pagination (default 0)

Response Fields

ParameterTypeRequiredDescription
agentsarrayRequiredArray of agent objects
agents[].idintegerRequiredUnique agent identifier
agents[].namestringRequiredAgent display name
agents[].descriptionstringRequiredAgent description and capabilities
agents[].categorystringRequiredAgent category (e.g., "Marketing", "Engineering", "Analytics")
agents[].platformstringRequiredPlatform the agent runs on (e.g., "ai.ventures", "OpenClaw")
agents[].apiEndpointstringOptionalAgent API endpoint URL (if available)
agents[].submittedAtISO 8601RequiredWhen the agent was submitted to the registry
agents[].statusstringRequiredAlways "approved" for listed agents
meta.totalintegerRequiredTotal number of agents matching the query
meta.limitintegerRequiredMax results per page (mirrors request param)
meta.offsetintegerRequiredCurrent offset (mirrors request param)
meta.hasMorebooleanRequiredTrue if more results exist beyond current page

πŸ“Š Basic Queries

Get metadatabash
curl -s https://agents.net/api/agents | jq '.meta'
# β†’ { "total": 37, "limit": 100, "offset": 0, "hasMore": false }
Filter by categorybash
curl -s "https://agents.net/api/agents?category=Design" | jq '.agents[].name'
# β†’ "v0 by Vercel", "Midjourney", "Figma AI"
JavaScript with error handlingjavascript
async function getAgents(category) {
  try {
    const response = await fetch(`https://agents.net/api/agents?category=${category}`);
    if (!response.ok) throw new Error(`HTTP ${response.status}`);
    
    const { agents, meta } = await response.json();
    console.log(`Found ${meta.total} ${category} agents:`);
    
    agents.forEach(agent => {
      console.log(`  β†’ ${agent.name} (${agent.platform})`);
    });
    
    return agents;
  } catch (error) {
    console.error('Failed to fetch agents:', error.message);
    return [];
  }
}

// Usage
const marketingAgents = await getAgents('Marketing');

πŸ” Advanced Filtering

Combine filters with paginationpython
import requests

def search_agents(category=None, platform=None, search=None, limit=10):
    """Search agents with comprehensive filtering."""
    params = {'limit': limit}
    if category: params['category'] = category
    if platform: params['platform'] = platform  
    if search: params['search'] = search
    
    try:
        response = requests.get('https://agents.net/api/agents', params=params)
        response.raise_for_status()
        data = response.json()
        
        print(f"Found {data['meta']['total']} agents matching criteria:")
        for agent in data['agents']:
            print(f"  [{agent['category']}] {agent['name']} β€” {agent['platform']}")
            
        return data['agents']
        
    except requests.RequestException as e:
        print(f"API Error: {e}")
        return []

# Examples
search_agents(category='Design', search='UI generation')
search_agents(platform='Vercel')
search_agents(search='analytics', limit=20)
GET/api/agents/:id

Returns a single agent by ID. Returns 404 if the agent doesn't exist or isn't approved.

Path Parameters

ParameterTypeRequiredDescription
idintegerRequiredThe agent's unique ID (from the directory listing)

Response Fields

ParameterTypeRequiredDescription
agentobjectRequiredAgent object with full profile data
agent.idintegerRequiredUnique agent identifier
agent.namestringRequiredAgent display name
agent.descriptionstringRequiredAgent description and capabilities
agent.categorystringRequiredAgent category
agent.platformstringRequiredPlatform the agent runs on
agent.apiEndpointstringOptionalAgent API endpoint URL
agent.submittedAtISO 8601RequiredSubmission timestamp
agent.statusstringRequiredAgent approval status
agent.capabilitiesarrayOptionalStructured capabilities with name, level, and description
agent.useCasesstringOptionalDetailed use case descriptions
agent.tagsarrayOptionalSearchable tags for categorization
Example β€” Fetch agent #17bash
curl https://agents.net/api/agents/17
Responsejson
{
  "agent": {
    "id": 17,
    "name": "Patrick",
    "description": "Performance marketing strategist...",
    "category": "Marketing",
    "platform": "ai.ventures",
    "apiEndpoint": "https://ai.ventures/api/agents/patrick",
    "submittedAt": "2026-03-30T12:00:00.000Z",
    "status": "approved"
  }
}
404 Responsejson
{
  "error": "Agent not found"
}
POST/api/agents/submit

Submit a new agent to the registry. Agents go through a review process before appearing in the public directory.

Request Body (JSON)

ParameterTypeRequiredDescription
namestringRequiredAgent name (minimum 3 characters)
descriptionstringRequiredAgent description and capabilities (minimum 20 characters)
categorystringRequiredAgent category (e.g., Marketing, Engineering, Analytics, Design, Finance, Sales, Legal, Operations, Governance, Education, Management, Executive)
contactEmailstringRequiredContact email for the agent publisher
apiEndpointstringOptionalAgent's API endpoint URL
platformstringOptionalPlatform the agent runs on (defaults to "other")
Example β€” Submit an agentbash
curl -X POST https://agents.net/api/agents/submit \
  -H "Content-Type: application/json" \
  -d '{
    "name": "DataBot",
    "description": "An automated data pipeline agent that extracts, transforms, and loads data from multiple sources into your warehouse.",
    "category": "Engineering",
    "contactEmail": "dev@example.com",
    "apiEndpoint": "https://api.example.com/databot/v1",
    "platform": "Custom"
  }'
Success Response (201)json
{
  "success": true,
  "message": "Agent submitted successfully! We'll review it and get back to you within 2-3 business days.",
  "submissionId": 42
}

Error Responses

400Validation error β€” missing or invalid required fields
409Conflict β€” agent with that name already exists
503Service unavailable β€” database not ready

⏱️ Rate Limits & Best Practices

πŸš₯ Current Limits

GET Read Endpoints

  • β€’ Limit: 1000 requests/hour per IP
  • β€’ Burst: 100 requests/minute
  • β€’ Cache: 60s server-side caching
  • β€’ Recommendation: Poll max once/minute

POST Write Endpoints

  • β€’ Limit: 10 submissions/hour per IP
  • β€’ Validation: Duplicate detection enabled
  • β€’ Review: 2-3 business days
  • β€’ Abuse protection: Auto-blocking enabled

πŸš€ Performance Tips

πŸ“‹

Cache Responses Locally

Agent data changes infrequently. Cache for 5-15 minutes in production.

// Simple in-memory cache
const cache = new Map();
const CACHE_TTL = 5 * 60 * 1000; // 5 minutes

async function getCachedAgents(url) {
  const cached = cache.get(url);
  if (cached && Date.now() - cached.timestamp < CACHE_TTL) {
    return cached.data;
  }
  
  const response = await fetch(url);
  const data = await response.json();
  
  cache.set(url, { data, timestamp: Date.now() });
  return data;
}
⚑

Use Server-Side Filtering

Filter on the server instead of fetching all and filtering client-side.

βœ“ EFFICIENT

// Server filters 37 β†’ 3 agents
const url = 'agents.net/api/agents?category=Marketing';
const { agents } = await fetch(url).then(r => r.json());
console.log(agents.length); // 3

βœ— WASTEFUL

// Client filters 37 β†’ 3 agents
const { agents } = await fetch('agents.net/api/agents').then(r => r.json());
const marketing = agents.filter(a => a.category === 'Marketing');
console.log(marketing.length); // 3
Pro Tier (Coming Soon): Higher limits (10k requests/hour), guaranteed SLA, webhook notifications, and priority support.

πŸ“‚ Agent Categories

Agents in the registry are organized into the following categories. Use these values when submitting agents or filtering the directory.

πŸ“ŠAnalytics
🎨Design
πŸ“šEducation
πŸ› οΈEngineering
🧠Executive
πŸ’°Finance
πŸ›οΈGovernance
βš–οΈLegal
πŸ“‹Management
🎯Marketing
βš™οΈOperations
🀝Sales

πŸ”§ Integration Examples

Build an Agent Picker Widget

Fetch agents by category using server-side filtering:

agent-picker.jsjavascript
async function getAgentsByCategory(category) {
  const res = await fetch(`https://agents.net/api/agents?category=${category}`);
  const { agents, meta } = await res.json();
  console.log(`${meta.total} agents in ${category}`);
  return agents;
}

// Get all Marketing agents β€” filtered server-side
const marketingAgents = await getAgentsByCategory('Marketing');
// β†’ [{ id: 17, name: "Patrick", ... }, { id: 35, name: "Sophie", ... }]

Agent Discovery for Multi-Agent Workflows

Dynamically discover and chain agents at runtime using query parameters:

orchestrator.pypython
import requests

def discover_agents(category=None, platform=None):
    """Discover agents from the Agents.NET registry with server-side filtering."""
    params = {}
    if category:
        params["category"] = category
    if platform:
        params["platform"] = platform
    
    resp = requests.get("https://agents.net/api/agents", params=params)
    data = resp.json()
    print(f"  Found {data['meta']['total']} agents")
    return data["agents"]

def build_pipeline(categories):
    """Build a multi-agent pipeline from category sequence."""
    pipeline = []
    for cat in categories:
        agents = discover_agents(category=cat)
        if agents:
            pipeline.append(agents[0])  # Pick top-rated agent
    return pipeline

# Build: Analytics β†’ Engineering β†’ Marketing pipeline
pipeline = build_pipeline(["Analytics", "Engineering", "Marketing"])
for step in pipeline:
    print(f"  Step: {step['name']} ({step['category']}) via {step['apiEndpoint']}")

Monitor Directory Changes

Poll the directory to detect new agents (webhook support coming soon):

monitor.shbash
#!/bin/bash
# Check for new agents every hour
PREV_COUNT=$(curl -s https://agents.net/api/agents | jq '.agents | length')

while true; do
  sleep 3600
  CURR_COUNT=$(curl -s https://agents.net/api/agents | jq '.agents | length')
  if [ "$CURR_COUNT" -gt "$PREV_COUNT" ]; then
    echo "πŸ†• New agents added! Count: $PREV_COUNT β†’ $CURR_COUNT"
    PREV_COUNT=$CURR_COUNT
  fi
done

πŸ—ΊοΈ API Roadmap

Agent directory API (list, get, submit)Live
Open access (no API key for reads)Live
Search & filter query parameters (?category, ?platform, ?search, ?limit, ?offset)Live
API keys for Pro tier (higher rate limits)Coming Soon
Webhook notifications for new agentsComing Soon
Agent ratings and reviews APIPlanned
Agent orchestration protocol (A2A discovery)Planned
Official SDKs (TypeScript, Python)Planned

Ready to integrate?

Start building with the Agents.NET API today. Browse the directory, submit your agents, or join the community.