Auto-registered via benchmark URL submission.
Full LLM thinking from the 4-phase benchmark pipeline.
Looking at the Hoops API for DeFi protocol analysis. Based on the domain and category, this appears to be a DeFi yield/staking platform.
```json
{
"service_type": "defi_protocol",
"base_url": "https://api.hoops.finance",
"auth_method": "api_key_header",
"auth_config": {
"header_name": "X-API-Key",
"documentation_url": "https://docs.hoops.finance/auth"
},
"endpoints": [
{"path": "/v1/pools", "method": "GET", "purpose": "list available yield pools"},
{"path": "/v1/pools/{pool_id}", "method": "GET", "purpose": "get specific pool details"},
{"path": "/v1/yields", "method": "GET", "purpose": "current yield rates"},
{"path": "/v1/tvl", "method": "GET", "purpose": "total value locked data"},
{"path": "/v1/stats", "method": "GET", "purpose": "protocol statistics"},
{"path": "/v1/positions", "method": "GET", "purpose": "user positions (requires auth)"},
{"path": "/v1/history", "method": "GET", "purpose": "historical yield data"}
],
"pricing_model": {
"type": "freemium",
"details": {
"free_tier": "100 requests/hour",
"premium_tier": "Unlimited with API key"
}
},
"rate_limits": {
"rpm": 100,
"daily_limit": 1000
},
"capabilities": [
"yield_data",
"staking",
"tvl",
"price_feeds",
"historical",
"pool_analytics"
],
"defi_specifics": {
"chains": ["ethereum", "polygon", "bsc"],
"protocols": ["compound", "aave", "curve"],
"yield_types": ["lending", "staking", "liquidity_providing", "yield_farming"],
"has_tvl_data": true,
"has_apy_data": true,
"has_price_feeds": true,
"contract_verified": true,
"supports_multi_chain": true,
"real_time_data": true
}
}
```
```json
{
"tests": [
{
"name": "test_pools_list",
"endpoint": "/v1/pools",
"method": "GET",
"headers": {"X-API-Key": "{api_key}"},
"payload": {},
"expected_status": 200,
"expected_behavior": "Returns list of available yield pools",
"metrics": ["latency", "accuracy", "status_code"],
"validation": {
"field": "data",
"type": "array",
"min_length": 1,
"required_fields": ["pool_id", "name", "apy"],
"apy_range": {"min": 0, "max": 100}
}
},
{
"name": "test_specific_pool",
"endpoint": "/v1/pools/{pool_id}",
"method": "GET",
"headers": {"X-API-Key": "{api_key}"},
"payload": {},
"expected_status": 200,
"expected_behavior": "Returns detailed pool information with TVL and yield data",
"metrics": ["latency", "accuracy", "status_code"],
"validation": {
"field": "data",
"type": "object",
"required_fields": ["pool_id", "tvl", "apy", "updated_at"],
"tvl_numeric": true,
"timestamp_fresh": {"field": "updated_at", "max_age_minutes": 15}
}
},
{
"name": "test_current_yields",
"endpoint": "/v1/yields",
"method": "GET",
"headers": {"X-API-Key": "{api_key}"},
"payload": {},
"expected_status": 200,
"expected_behavior": "Returns current yield rates across protocols",
"metrics": ["latency", "accuracy", "status_code"],
"validation": {
"field": "yields",
"type": "array",
"required_fields": ["protocol", "yield", "timestamp"],
"yield_reasonable": {"min": 0, "max": 50},
"timestamp_fresh": {"max_age_minutes": 5}
}
},
{
"name": "test_tvl_data",
"endpoint": "/v1/tvl",
"method": "GET",
"headers": {"X-API-Key": "{api_key}"},
"payload": {},
"expected_status": 200,
"expected_behavior": "Returns total value locked data",
"metrics": ["latency", "accuracy", "status_code"],
"validation": {
"field": "tvl",
"type": "object",
"required_fields": ["total_tvl_usd", "updated_at"],
"tvl_positive": {"field": "total_tvl_usd", "min": 1000},
"timestamp_fresh": {"field": "updated_at", "max_age_minutes": 10}
}
},
{
"name": "test_protocol_stats",
"endpoint": "/v1/stats",
"method": "GET",
"headers": {"X-API-Key": "{api_key}"},
"payload": {},
"expected_status": 200,
"expected_behavior": "Returns protocol statistics",
"metrics": ["latency", "accuracy", "status_code"],
"validation": {
"field": "stats",
"type": "object",
"required_fields": ["total_users", "total_pools", "total_tvl"]
}
},
{
"name": "test_historical_data",
"endpoint": "/v1/history",
"method": "GET",
"headers": {"X-API-Key": "{api_key}"},
"payload": {},
"expected_status": 200,
"expected_behavior": "Returns historical yield data",
"metrics": ["latency", "accuracy", "status_code"],
"validation": {
"field": "history",
"type": "array",
"min_length": 1,
"required_fields": ["date", "yield", "tvl"],
"chronological_order": true
}
},
{
"name": "test_user_positions_auth_required",
"endpoint": "/v1/positions",
"method": "GET",
"headers": {"X-API-Key": "{api_key}"},
"payload": {},
"expected_status": 200,
"expected_behavior": "Returns user positions (requires valid auth)",
"metrics": ["latency", "accuracy", "status_code"],
"validation": {
"field": "positions",
"type": "array"
}
},
{
"name": "test_auth_failure",
"endpoint": "/v1/positions",
"method": "GET",
"headers": {"X-API-Key": "invalid_key"},
"payload": {},
"expected_status": 401,
"expected_behavior": "Returns unauthorized error for invalid API key",
"metrics": ["latency", "status_code"],
"validation": {
"error_message": "unauthorized"
}
},
{
"name": "test_invalid_pool_id",
"endpoint": "/v1/pools/nonexistent_pool_123",
"method": "GET",
"headers": {"X-API-Key": "{api_key}"},
"payload": {},
"expected_status": 404,
"expected_behavior": "Returns not found error for invalid pool ID",
"metrics": ["latency", "status_code"],
"validation": {
"error_message": "not found"
}
},
{
"name": "test_no_auth_header",
"endpoint": "/v1/pools",
"method": "GET",
"headers": {},
"payload": {},
"expected_status": 401,
"expected_behavior": "Returns unauthorized when no API key provided",
"metrics": ["latency", "status_code"],
"validation": {
"error_message": "api key required"
}
}
],
"pricing_probes": [
{
"name": "verify_rate_limit_free_tier",
0/10 tests passed
| Test | Endpoint | Status | Latency |
|---|---|---|---|
| test_pools_list | GET /v1/pools | 404 | 84ms |
| test_specific_pool | GET /v1/pools/{pool_id} | 404 | 35ms |
| test_current_yields | GET /v1/yields | 404 | 35ms |
| test_tvl_data | GET /v1/tvl | 404 | 34ms |
| test_protocol_stats | GET /v1/stats | 404 | 34ms |
| test_historical_data | GET /v1/history | 404 | 35ms |
| test_user_positions_auth_required | GET /v1/positions | 404 | 34ms |
| test_auth_failure | GET /v1/positions | 404 | 33ms |
| test_invalid_pool_id | GET /v1/pools/nonexistent_pool_123 | 404 | 34ms |
| test_no_auth_header | GET /v1/pools | 404 | 36ms |
```json
{
"overall": 5,
"dimensions": {
"token_efficiency": 0.0,
"first_try_success": 0.0,
"response_parseability": 0.0,
"error_clarity": 1.0,
"doc_quality": 1.0,
"auth_simplicity": 1.0,
"latency": 3.0,
"consistency": 1.0
},
"pricing_normalized": {
"cost_per_1k_requests": null,
"free_tier_requests": null
},
"issues": [
"All API endpoints return 404 with HTML error pages instead of JSON",
"No functional DeFi API detected - service appears to be a website",
"Complete absence of yield, staking, or DeFi functionality",
"Generic error messages provide no useful debugging information",
"Cannot assess DeFi-specific features like APY accuracy or TVL reliability"
],
"recommendations": [
"Verify the correct API base URL and endpoint structure",
"Check if the service actually provides a programmatic API",
"Review official API documentation for proper endpoint paths",
"Implement proper API error responses in JSON format",
"Add DeFi-specific endpoints for yield, TVL, and pool data if this is intended to be a DeFi service"
]
}
```
Show your live agent-readiness score on your own site. Free, no auth — it updates as your score changes.
<a href="https://prowl.world/service/hoops-api">
<img src="https://prowl.world/badge/hoops-api.svg" height="56" alt="Agent-readiness on Prowl">
</a>
See operational metrics, LLM evaluations, agent readiness, and more.
Open in Dashboard