86
/100
prowl
Benchmarked Apr 25, 2026

Postcodes.io

Postcode lookup & Geolocation for the UK

saas api_benchmark public
Benchmark Your API

Score Breakdown

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

Benchmark Analysis Log

Full LLM thinking from the 4-phase benchmark pipeline.

Analyze
```json
{
  "service_type": "rest_api",
  "base_url": "https://api.postcodes.io",
  "auth_method": "none",
  "auth_config": {
    "header": "",
    "prefix": ""
  },
  "endpoints": [
    {
      "path": "/postcodes/{postcode}",
      "method": "GET",
      "purpose": "Lookup a postcode",
      "params": {
        "postcode": {
          "type": "string",
          "required": true
        }
      },
      "response_format": "json",
      "is_primary": true
    },
    {
      "path": "/postcodes",
      "method": "GET",
      "purpose": "Autocomplete search for a postcode or return nearest postcodes for a given geolocation",
      "params": {
        "query": {
          "type": "string",
          "required": false
        },
        "limit": {
          "type": "integer",
          "required": false
        },
        "longitude": {
          "type": "number",
          "required": false
        },
        "latitude": {
          "type": "number",
          "required": false
        }
      },
      "response_format": "json",
      "is_primary": false
    }
  ],
  "pricing_model": {
    "type": "free_tier",
    "details": {},
    "free_tier": {
      "requests": null,
      "period": null
    },
    "paid_tiers": []
  },
  "rate_limits": {
    "rpm": null,
    "tpm": null,
    "daily": null,
    "concurrent": null
  },
  "capabilities": ["postcode lookup", "autocomplete search", "geolocation query"],
  "agent_readiness": {
    "supports_x402": false,
    "supports_streaming": false,
    "has_sandbox": false,
    "sdks": [],
    "agent_auth_methods": ["public"]
  }
}
```
Plan
```json
{
  "tests": [
    {
      "name": "basic_connectivity_and_auth",
      "endpoint": "/postcodes/EC1A1BB",
      "method": "GET",
      "headers": {},
      "payload": {},
      "expected_status": 200,
      "expected_behavior": "Returns details for the given postcode",
      "metrics": ["latency", "status_code"],
      "validation": {"field": "result", "type": "object", "min_length": 1}
    },
    {
      "name": "primary_endpoint_with_realistic_payload",
      "endpoint": "/postcodes",
      "method": "GET",
      "headers": {},
      "payload": {"query": "EC1A", "limit": 5},
      "expected_status": 200,
      "expected_behavior": "Returns a list of suggestions for the given query",
      "metrics": ["latency", "accuracy", "status_code"],
      "validation": {"field": "result", "type": "array", "min_length": 1}
    },
    {
      "name": "measure_latency_normal_conditions",
      "endpoint": "/postcodes/EC1A1BB",
      "method": "GET",
      "headers": {},
      "payload": {},
      "expected_status": 200,
      "expected_behavior": "Returns quickly with valid response",
      "metrics": ["latency"],
      "validation": {"field": "result", "type": "object", "min_length": 1}
    },
    {
      "name": "error_handling_bad_input",
      "endpoint": "/postcodes/INVALID_POSTCODE",
      "method": "GET",
      "headers": {},
      "payload": {},
      "expected_status": 404,
      "expected_behavior": "Returns an error for invalid postcode",
      "metrics": ["latency", "status_code"],
      "validation": {"field": "error", "type": "string", "min_length": 1}
    },
    {
      "name": "error_handling_missing_params",
      "endpoint": "/postcodes",
      "method": "GET",
      "headers": {},
      "payload": {"longitude": 0.1276, "latitude": 51.5074},
      "expected_status": 200,
      "expected_behavior": "Returns nearest postcodes for given geolocation",
      "metrics": ["latency", "accuracy", "status_code"],
      "validation": {"field": "result", "type": "array", "min_length": 1}
    }
  ],
  "pricing_probes": [],
  "stress_profile": {
    "concurrent_requests": 5,
    "duration_seconds": 10,
    "ramp_up": true
  }
}
```
Execute

2/5 tests passed

TestEndpointStatusLatency
basic_connectivity_and_authGET /postcodes/EC1A1BB20068ms
primary_endpoint_with_realistic_payloadGET /postcodes400114ms
measure_latency_normal_conditionsGET /postcodes/EC1A1BB20018ms
error_handling_bad_inputGET /postcodes/INVALID_POSTCODE404115ms
error_handling_missing_paramsGET /postcodes400113ms
Interpret
```json
{
  "overall": 77,
  "dimensions": {
    "token_efficiency": 9.0,
    "first_try_success": 8.0,
    "response_parseability": 10.0,
    "error_clarity": 8.0,
    "doc_quality": 7.0,
    "auth_simplicity": 10.0,
    "latency": 9.0,
    "consistency": 9.0
  },
  "pricing_normalized": {
    "cost_per_1k_requests": 0.0,
    "cost_per_1m_input_tokens": 0.0,
    "cost_per_1m_output_tokens": 0.0,
    "free_tier_requests": null,
    "estimated_monthly_cost_light": 0.0,
    "estimated_monthly_cost_heavy": 0.0
  },
  "issues": [
    {
      "severity": "medium",
      "detail": "Error message could be more descriptive for better agent guidance.",
      "endpoint": "/postcodes"
    }
  ],
  "recommendations": [
    "Improve error messages to provide more guidance on solving the issue.",
    "Enhance documentation with more examples and detailed descriptions for each endpoint."
  ]
}
```

Agent Readiness

x402 Payments
Not supported
Streaming
No
Sandbox
None
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