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

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/postcodesio">
  <img src="https://prowl.world/badge/postcodesio.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