Discovery
GET /api/discover returns the full Proxagora API catalog. Filter by category, cost, or search term. Each entry has an ID, name, cost in USDC, and endpoint.
Discovery
The discovery endpoint returns the complete Proxagora API catalog. It's the starting point for any agent that needs to find and call external data APIs.
Endpoint
GET https://proxagora.com/api/discover
No authentication required. No payment. Free catalog access.
Response
{
"apis": [
{
"id": "ip-geo",
"name": "IP Geo",
"category": "Network",
"cost_usdc": 0.001,
"description": "Geographic location, ASN, and carrier data for any IPv4/IPv6 address",
"endpoint": "/api/ip-geo"
},
{
"id": "domain-reputation",
"name": "Domain Reputation",
"category": "Domain",
"cost_usdc": 0.005,
"description": "Risk score, blacklist status, and threat intelligence for any domain"
},
{
"id": "email-validation",
"name": "Email Validation",
"category": "Contact",
"cost_usdc": 0.002,
"description": "Deliverability check, MX validation, and disposable domain detection"
}
],
"total": 32
}
API Object Fields
| Field | Type | Description |
|-------|------|-------------|
| id | string | Unique identifier — used as {id} in call endpoint |
| name | string | Human-readable name |
| category | string | Category: Domain, Network, Contact, Tech, Intelligence, Business, Media, Travel |
| cost_usdc | number | Per-call cost in USDC |
| description | string | What the API returns |
| endpoint | string | Full path (same as /api/{id}) |
Filtering
By Category
curl "https://proxagora.com/api/discover?category=Domain"
Available categories: Domain, Network, Contact, Tech, Intelligence, Business, Media, Travel
By Max Cost
curl "https://proxagora.com/api/discover?max_cost=0.005"
Returns only APIs at or below the specified USDC cost.
Combined Filters
curl "https://proxagora.com/api/discover?category=Contact&max_cost=0.01"
Current API Catalog
| ID | Name | Category | Cost |
|----|------|----------|------|
| ip-geo | IP Geo | Network | $0.001 |
| whois | WHOIS | Domain | $0.001 |
| weather | Weather | Travel | $0.001 |
| github-stats | GitHub Stats | Tech | $0.001 |
| youtube-metadata | YouTube Metadata | Media | $0.002 |
| email-validation | Email Validation | Contact | $0.002 |
| news-search | News Search | Media | $0.005 |
| domain-reputation | Domain Reputation | Domain | $0.005 |
| tech-stack | Tech Stack | Tech | $0.005 |
| hackernews-search | HackerNews Search | Media | $0.005 |
| reddit-search | Reddit Search | Media | $0.005 |
| wikipedia-summary | Wikipedia Summary | Intelligence | $0.005 |
| webpage-content | Webpage Content | Intelligence | $0.005 |
| phone-validation | Phone Validation | Contact | $0.002 |
| vat-validation | VAT Validation | Business | $0.002 |
| exchange-rates | Exchange Rates | Business | $0.001 |
| serp-results | SERP Results | Intelligence | $0.01 |
| email-finder | Email Finder | Contact | $0.01 |
| linkedin-enrichment | LinkedIn Enrichment | Business | $0.02 |
| url-screenshot | URL Screenshot | Tech | $0.01 |
| youtube-transcript | YouTube Transcript | Media | $0.005 |
| reddit-thread | Reddit Thread | Media | $0.005 |
Using Discovery in Agent Code
import requests
def discover_apis(category: str = None, max_cost: float = None) -> list[dict]:
params = {}
if category:
params["category"] = category
if max_cost is not None:
params["max_cost"] = max_cost
response = requests.get("https://proxagora.com/api/discover", params=params)
return response.json()["apis"]
# Find all cheap Network APIs
network_apis = discover_apis(category="Network", max_cost=0.005)
# Let an LLM pick the right API for a task
import json
catalog = discover_apis()
catalog_str = json.dumps([{"id": a["id"], "description": a["description"]} for a in catalog])
# Include in LLM system prompt or tool definition
const catalog = await fetch('https://proxagora.com/api/discover')
.then(r => r.json())
.then(d => d.apis)
// Find API by name
const ipGeo = catalog.find((a: any) => a.id === 'ip-geo')
console.log(`Call /api/${ipGeo.id} — costs $${ipGeo.cost_usdc} USDC`)
Caching
The catalog changes infrequently (new APIs added, existing ones updated). For production agents:
- Cache the response for 5–60 minutes
- Refresh on startup
- Don't call discover on every API call — it's expensive in latency
import time
_catalog_cache = None
_cache_time = 0
CACHE_TTL = 300 # 5 minutes
def get_catalog():
global _catalog_cache, _cache_time
if _catalog_cache is None or time.time() - _cache_time > CACHE_TTL:
_catalog_cache = discover_apis()
_cache_time = time.time()
return _catalog_cache