85
/100
prowl
Benchmarked Apr 06, 2026

httpbin Test API Verified

HTTP request/response testing service. Endpoints for testing headers, auth, status codes, redirects, and more. No auth required.

testingdevtools api_benchmark Sandbox public
Benchmark Your API

Score Breakdown

Auth Simplicity 10/10
Token Efficiency 10/10
Latency 9/10
Consistency 9/10
Documentation 9/10
Parseability 9/10
First-Try Success 7/10
Error Clarity 6/10

Benchmark Analysis Log

Full LLM thinking from the 4-phase benchmark pipeline.

Analyze
Looking at the httpbin service documentation and vendor benchmark guide, I can extract the following structured information:

```json
{
  "service_type": "rest_api",
  "base_url": "https://httpbin.org",
  "auth_method": "none",
  "auth_config": null,
  "endpoints": [
    {
      "path": "/get",
      "method": "GET",
      "purpose": "Returns GET request data including headers, args, and origin",
      "params": {},
      "response_format": "json",
      "is_primary": true
    },
    {
      "path": "/post",
      "method": "POST",
      "purpose": "Returns POST request data including headers, form data, and JSON payload",
      "params": {},
      "response_format": "json",
      "is_primary": true
    },
    {
      "path": "/status/{code}",
      "method": "GET",
      "purpose": "Returns the specified HTTP status code for testing",
      "params": {
        "code": {"type": "integer", "required": true}
      },
      "response_format": "json",
      "is_primary": true
    },
    {
      "path": "/anything",
      "method": "GET",
      "purpose": "Returns anything passed in request data",
      "params": {},
      "response_format": "json",
      "is_primary": false
    },
    {
      "path": "/anything",
      "method": "POST",
      "purpose": "Returns anything passed in request data",
      "params": {},
      "response_format": "json",
      "is_primary": false
    }
  ],
  "pricing_model": {
    "type": "free_tier",
    "details": {},
    "free_tier": {"requests": null, "period": "unlimited"},
    "paid_tiers": []
  },
  "rate_limits": {
    "rpm": null,
    "tpm": null,
    "daily": null,
    "concurrent": null
  },
  "capabilities": [
    "http_request_testing",
    "response_inspection", 
    "status_code_testing",
    "header_manipulation",
    "redirect_testing",
    "authentication_testing",
    "payload_echoing"
  ],
  "agent_readiness": {
    "supports_x402": false,
    "supports_streaming": false,
    "has_sandbox": true,
    "sdks": [],
    "agent_auth_methods": ["public"]
  }
}
```
Plan
```json
{
  "tests": [
    {
      "name": "basic_connectivity",
      "endpoint": "/get",
      "method": "GET",
      "headers": {
        "User-Agent": "Prowl-Benchmark/1.0"
      },
      "payload": {},
      "expected_status": 200,
      "expected_behavior": "Returns request metadata including headers and origin",
      "metrics": ["latency", "accuracy", "status_code"],
      "validation": {
        "field": "headers",
        "type": "object",
        "required_keys": ["User-Agent"]
      }
    },
    {
      "name": "post_data_echo",
      "endpoint": "/post",
      "method": "POST",
      "headers": {
        "Content-Type": "application/json",
        "X-Test-Header": "prowl-test"
      },
      "payload": {
        "test_data": "benchmark_payload",
        "timestamp": "2026-04-06T00:00:00Z",
        "number": 42
      },
      "expected_status": 200,
      "expected_behavior": "Echoes back POST data including JSON payload and headers",
      "metrics": ["latency", "accuracy", "status_code"],
      "validation": {
        "field": "json",
        "type": "object",
        "contains": {"test_data": "benchmark_payload"}
      }
    },
    {
      "name": "status_code_success",
      "endpoint": "/status/200",
      "method": "GET",
      "headers": {},
      "payload": {},
      "expected_status": 200,
      "expected_behavior": "Returns HTTP 200 status code as requested",
      "metrics": ["latency", "accuracy", "status_code"],
      "validation": {
        "field": "status",
        "type": "integer",
        "equals": 200
      }
    },
    {
      "name": "error_handling_404",
      "endpoint": "/status/404",
      "method": "GET",
      "headers": {},
      "payload": {},
      "expected_status": 404,
      "expected_behavior": "Returns HTTP 404 status code for error handling test",
      "metrics": ["latency", "accuracy", "status_code"],
      "validation": {
        "field": "status",
        "type": "integer",
        "equals": 404
      }
    },
    {
      "name": "header_manipulation",
      "endpoint": "/get",
      "method": "GET",
      "headers": {
        "X-Custom-Header": "test-value",
        "Authorization": "Bearer fake-token"
      },
      "payload": {},
      "expected_status": 200,
      "expected_behavior": "Echoes back custom headers in response",
      "metrics": ["latency", "accuracy", "status_code"],
      "validation": {
        "field": "headers.X-Custom-Header",
        "type": "string",
        "equals": "test-value"
      }
    },
    {
      "name": "large_payload_test",
      "endpoint": "/post",
      "method": "POST",
      "headers": {
        "Content-Type": "application/json"
      },
      "payload": {
        "large_array": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
        "description": "This is a larger payload to test performance with bigger data sets and measure how the service handles more substantial JSON payloads",
        "metadata": {
          "test_type": "performance",
          "benchmark_tool": "prowl",
          "data_size": "medium"
        }
      },
      "expected_status": 200,
      "expected_behavior": "Handles and echoes back larger JSON payloads efficiently",
      "metrics": ["latency", "accuracy", "status_code"],
      "validation": {
        "field": "json.large_array",
        "type": "array",
        "min_length": 20
      }
    },
    {
      "name": "anything_endpoint",
      "endpoint": "/anything",
      "method": "GET",
      "headers": {
        "X-Prowl-Test": "anything-endpoint"
      },
      "payload": {},
      "expected_status": 200,
      "expected_behavior": "Returns comprehensive request information via catch-all endpoint",
      "metrics": ["latency", "accuracy", "status_code"],
      "validation": {
        "field": "method",
        "type": "string",
        "equals": "GET"
      }
    }
  ],
  "pricing_probes": [
    {
      "name": "verify_free_tier",
      "description": "Confirm service remains free with no usage tracking headers",
      "endpoint": "/get",
      "method": "GET",
      "payload": {},
      "check": "response should not contain billing or usage headers since service is completely free"
    }
  ],
  "stress_profile": {
    "concurrent_requests": 8,
    "duration_seconds": 15,
    "ramp_up": true
  }
}
```
Execute

6/7 tests passed

TestEndpointStatusLatency
basic_connectivityGET /get200129ms
post_data_echoPOST /post20031ms
status_code_successGET /status/200200128ms
error_handling_404GET /status/40440431ms
header_manipulationGET /get20036ms
large_payload_testPOST /post200235ms
anything_endpointGET /anything20029ms
Interpret
{"multi_model": true, "models_used": ["openai", "claude_cli"], "model_scores": {"GPT-4o": {"overall": 85, "dimensions": {"token_efficiency": 10.0, "first_try_success": 7.0, "response_parseability": 9.0, "error_clarity": 7.0, "doc_quality": 9.0, "auth_simplicity": 10.0, "latency": 10.0, "consistency": 10.0}}, "Claude CLI": {"overall": 82, "dimensions": {"token_efficiency": 9.5, "first_try_success": 7.0, "response_parseability": 8.5, "error_clarity": 6.0, "doc_quality": 9.0, "auth_simplicity": 10.0, "latency": 8.5, "consistency": 8.0}}}, "averaged": true}

Agent Readiness

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

Want the full interactive view?

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

Open in Dashboard