Prowl
66/100
prowl
Benchmarked Sep 03, 2026

OpenAPISearch

Show HN: OpenAPISearch – Make APIs Accessible for AI Codegen

searchdeveloperai api_benchmark public
Benchmark Your API

Score Breakdown

Auth Simplicity10/10
Latency8/10
Consistency7/10
Token Efficiency7/10
Documentation6/10
Error Clarity6/10
First-Try Success6/10
Parseability6/10

Benchmark Analysis Log

Full LLM thinking from the 4-phase benchmark pipeline.

Analyze
{
  "service_type": "rest_api",
  "base_url": "https://openapisearch.com",
  "auth_method": "none",
  "auth_config": null,
  "endpoints": [
    {
      "path": "/index.md",
      "method": "GET",
      "purpose": "Get list of OpenAPI providers as markdown",
      "params": {},
      "response_format": "text",
      "is_primary": false
    },
    {
      "path": "/redirect/{id}",
      "method": "GET",
      "purpose": "Redirect to OpenAPI specification for a given provider ID",
      "params": {
        "id": {
          "type": "string",
          "required": true
        }
      },
      "response_format": "text",
      "is_primary": true
    },
    {
      "path": "/providers.json",
      "method": "GET",
      "purpose": "Get provider information in JSON",
      "params": {},
      "response_format": "json",
      "is_primary": true
    }
  ],
  "pricing_model": {
    "type": "free_tier",
    "details": {},
    "free_tier": null,
    "paid_tiers": []
  },
  "rate_limits": {
    "rpm": null,
    "tpm": null,
    "daily": null,
    "concurrent": null
  },
  "capabilities": [
    "OpenAPI directory",
    "Searchable interface",
    "Programmatic registry",
    "Agent navigation",
    "Redirect to OpenAPI specs",
    "Provider information retrieval"
  ],
  "agent_readiness": {
    "supports_x402": false,
    "supports_streaming": false,
    "has_sandbox": false,
    "sdks": [],
    "agent_auth_methods": ["public"]
  }
}
Plan
```json
{
  "tests": [
    {
      "name": "get_markdown_index",
      "endpoint": "/index.md",
      "method": "GET",
      "headers": {},
      "payload": {},
      "expected_status": 200,
      "intent": "happy_path",
      "expected_behavior": "Returns markdown list of provider IDs",
      "metrics": ["latency", "status_code"],
      "validation": {"field": "body", "type": "string", "min_length": 100}
    },
    {
      "name": "get_providers_json",
      "endpoint": "/providers.json",
      "method": "GET",
      "headers": {},
      "payload": {},
      "expected_status": 200,
      "intent": "happy_path",
      "expected_behavior": "Returns JSON object with provider information",
      "metrics": ["latency", "status_code", "accuracy"],
      "validation": {"field": "data", "type": "object", "min_length": 1}
    },
    {
      "name": "redirect_openai",
      "endpoint": "/redirect/openai",
      "method": "GET",
      "headers": {},
      "payload": {},
      "expected_status": 302,
      "intent": "happy_path",
      "expected_behavior": "Redirect to OpenAI OpenAPI spec URL",
      "metrics": ["latency", "status_code"],
      "validation": {"field": "location", "type": "string", "min_length": 10}
    },
    {
      "name": "redirect_with_slug_tld",
      "endpoint": "/redirect/docs.socialdata.tools__openapi.yaml",
      "method": "GET",
      "headers": {},
      "payload": {},
      "expected_status": 302,
      "intent": "happy_path",
      "expected_behavior": "Redirect to custom path with double underscore notation",
      "metrics": ["latency", "status_code"],
      "validation": {"field": "location", "type": "string", "min_length": 10}
    },
    {
      "name": "redirect_invalid_id",
      "endpoint": "/redirect/nonexistent-id-that-does-not-exist",
      "method": "GET",
      "headers": {},
      "payload": {},
      "expected_status": 404,
      "intent": "validation",
      "expected_behavior": "Returns 404 for non-existent provider ID",
      "metrics": ["status_code"],
      "validation": {}
    },
    {
      "name": "redirect_empty_path",
      "endpoint": "/redirect/",
      "method": "GET",
      "headers": {},
      "payload": {},
      "expected_status": 404,
      "intent": "validation",
      "expected_behavior": "Returns error for missing provider ID",
      "metrics": ["status_code"],
      "validation": {}
    },
    {
      "name": "bad_method_post",
      "endpoint": "/providers.json",
      "method": "POST",
      "headers": {},
      "payload": {},
      "expected_status": 405,
      "intent": "validation",
      "expected_behavior": "HTTP method not allowed for GET-only endpoint",
      "metrics": ["status_code"],
      "validation": {}
    },
    {
      "name": "nonexistent_endpoint",
      "endpoint": "/does-not-exist",
      "method": "GET",
      "headers": {},
      "payload": {},
      "expected_status": 404,
      "intent": "validation",
      "expected_behavior": "404 for unknown endpoint",
      "metrics": ["status_code"],
      "validation": {}
    }
  ],
  "pricing_probes": [],
  "stress_profile": {
    "concurrent_requests": 5,
    "duration_seconds": 10,
    "ramp_up": true
  }
}
```
Execute

3/8 tests passed

TestEndpointStatusLatency
get_markdown_indexGET /index.md200129ms
get_providers_jsonGET /providers.json20067ms
redirect_openaiGET /redirect/openai3071421ms
redirect_with_slug_tldGET /redirect/docs.socialdata.tools__openapi.yaml404352ms
redirect_invalid_idGET /redirect/nonexistent-id-that-does-not-exist404366ms
redirect_empty_pathGET /redirect/404188ms
bad_method_postPOST /providers.json40530ms
nonexistent_endpointGET /does-not-exist20033ms
Interpret
{"model": "deepseek", "data": {"overall": 55, "dimensions": {"token_efficiency": 7, "first_try_success": 6, "response_parseability": 6, "error_clarity": 6, "doc_quality": 6, "auth_simplicity": 10, "latency": 8, "consistency": 7}, "pricing_normalized": {"cost_per_1k_requests": null, "cost_per_1m_input_tokens": null, "cost_per_1m_output_tokens": null, "free_tier_requests": null, "estimated_monthly_cost_light": 0, "estimated_monthly_cost_heavy": 0}, "issues": [{"severity": "medium", "detail": "Redirect endpoint returns 307 instead of documented 302, which violates RFC semantics for permanent redirects and could cause agent to not follow correctly.", "endpoint": "/redirect/{id}"}, {"severity": "medium", "detail": "Redirect with slug containing underscores and file extension returns 404; provider ID convention appears stricter than documented.", "endpoint": "/redirect/{id}"}, {"severity": "low", "detail": "Nonexistent paths return an HTML marketing page with 200 status instead of a 404 JSON error, which is confusing for agents.", "endpoint": "/does-not-exist"}, {"severity": "low", "detail": "Validation errors return plain text rather than structured JSON error bodies, making it harder for agents to programmatically parse.", "endpoint": "/redirect/{id}"}], "recommendations": ["Use 302 or 308 consistently for redirects and document the exact status code.", "Ensure the provider ID matching logic aligns with documented examples (e.g., handle underscores and file extensions).", "Return JSON 404s for unknown paths instead of HTML pages with 200 status.", "Provide structured JSON error bodies for all error cases (e.g., {'error': 'provider_not_found'}).", "Add an endpoint to fetch the OpenAPI spec itself so agents don't need to parse HTML pages for unknown paths."]}}

Agent Readiness

x402 Payments
Not supported
Streaming
No
Sandbox
None
Agent Auth
public
SDKs
None listed
MCP Support
No

Embed your Prowl badge

Show your live agent-readiness score on your own site. Free, no auth — it updates as your score changes.

Prowl agent-readiness badge
<a href="https://prowl.world/service/openapisearch">
  <img src="https://prowl.world/badge/openapisearch.svg" height="56" alt="Agent-readiness on Prowl">
</a>

Options: ?style=light|dark · ?size=sm|md · ?variant=certified (claimed + DNS-verified only) · badge generator with preview

Want the full interactive view?

See operational metrics, LLM evaluations, agent readiness, and more.

Open in Dashboard