AI-powered climate risk analytics API. Property-level flood/fire/storm risk, 30-year projections, and adaptation recommendations. Free tier: 1000 calls/month. REST API, API key auth.
Full LLM thinking from the 4-phase benchmark pipeline.
Looking at the ClimateIQ service based on the vendor benchmark guide:
```json
{
"service_type": "rest_api",
"base_url": "https://climateiq.io/v1",
"auth_method": "api_key_header",
"auth_config": {"header": "X-API-Key", "prefix": null},
"endpoints": [
{
"path": "/risk",
"method": "GET",
"purpose": "Climate risk score for a location",
"params": {
"lat": {"type": "number", "required": true},
"lon": {"type": "number", "required": true}
},
"response_format": "json",
"is_primary": true
},
{
"path": "/projections",
"method": "GET",
"purpose": "30-year climate projections",
"params": {
"lat": {"type": "number", "required": true},
"lon": {"type": "number", "required": true}
},
"response_format": "json",
"is_primary": false
},
{
"path": "/batch",
"method": "POST",
"purpose": "Batch risk for multiple locations",
"params": {
"locations": {"type": "array", "required": true}
},
"response_format": "json",
"is_primary": false
}
],
"pricing_model": {
"type": "unknown",
"details": {},
"free_tier": null,
"paid_tiers": []
},
"rate_limits": {"rpm": 60, "tpm": null, "daily": null, "concurrent": null},
"capabilities": ["climate_risk_assessment", "flood_zone_analysis", "fire_risk_evaluation", "storm_probability", "climate_projections", "batch_processing", "geospatial_analysis"],
"agent_readiness": {
"supports_x402": false,
"supports_streaming": false,
"has_sandbox": true,
"sdks": [],
"agent_auth_methods": ["api_key"]
}
}
```
```json
{
"tests": [
{
"name": "test_risk_endpoint_san_francisco",
"endpoint": "/risk",
"method": "GET",
"headers": {},
"payload": {},
"params": {"lat": 37.7749, "lon": -122.4194},
"expected_status": 200,
"expected_behavior": "Returns climate risk assessment for San Francisco",
"metrics": ["latency", "accuracy", "status_code"],
"validation": {
"field": "risk_score",
"type": "number",
"min_value": 0,
"max_value": 100
}
},
{
"name": "test_risk_endpoint_miami",
"endpoint": "/risk",
"method": "GET",
"headers": {},
"payload": {},
"params": {"lat": 25.7617, "lon": -80.1918},
"expected_status": 200,
"expected_behavior": "Returns climate risk assessment for Miami (high hurricane/flood risk area)",
"metrics": ["latency", "accuracy", "status_code"],
"validation": {
"field": "risk_score",
"type": "number",
"min_value": 0,
"max_value": 100
}
},
{
"name": "test_projections_endpoint",
"endpoint": "/projections",
"method": "GET",
"headers": {},
"payload": {},
"params": {"lat": 40.7128, "lon": -74.0060},
"expected_status": 200,
"expected_behavior": "Returns 30-year climate projections for New York",
"metrics": ["latency", "accuracy", "status_code"],
"validation": {
"field": "projections",
"type": "array",
"min_length": 1
}
},
{
"name": "test_batch_endpoint",
"endpoint": "/batch",
"method": "POST",
"headers": {"Content-Type": "application/json"},
"payload": {
"locations": [
{"lat": 37.7749, "lon": -122.4194},
{"lat": 25.7617, "lon": -80.1918},
{"lat": 40.7128, "lon": -74.0060}
]
},
"expected_status": 200,
"expected_behavior": "Returns batch climate risk scores for multiple locations",
"metrics": ["latency", "accuracy", "status_code"],
"validation": {
"field": "results",
"type": "array",
"min_length": 3
}
},
{
"name": "test_invalid_coordinates",
"endpoint": "/risk",
"method": "GET",
"headers": {},
"payload": {},
"params": {"lat": 999, "lon": 999},
"expected_status": 400,
"expected_behavior": "Returns error for invalid coordinates",
"metrics": ["latency", "status_code"],
"validation": {
"field": "error",
"type": "string"
}
},
{
"name": "test_missing_lat_parameter",
"endpoint": "/risk",
"method": "GET",
"headers": {},
"payload": {},
"params": {"lon": -122.4194},
"expected_status": 400,
"expected_behavior": "Returns error when latitude parameter is missing",
"metrics": ["latency", "status_code"],
"validation": {
"field": "error",
"type": "string"
}
},
{
"name": "test_missing_lon_parameter",
"endpoint": "/risk",
"method": "GET",
"headers": {},
"payload": {},
"params": {"lat": 37.7749},
"expected_status": 400,
"expected_behavior": "Returns error when longitude parameter is missing",
"metrics": ["latency", "status_code"],
"validation": {
"field": "error",
"type": "string"
}
},
{
"name": "test_unauthenticated_request",
"endpoint": "/risk",
"method": "GET",
"headers": {},
"payload": {},
"params": {"lat": 37.7749, "lon": -122.4194},
"expected_status": 401,
"expected_behavior": "Returns unauthorized error without API key",
"metrics": ["latency", "status_code"],
"validation": {
"field": "error",
"type": "string"
},
"skip_auth": true
}
],
"pricing_probes": [
{
"name": "verify_request_usage",
"description": "Check if API returns usage metrics or rate limit headers",
"endpoint": "/risk",
"method": "GET",
"payload": {"lat": 37.7749, "lon": -122.4194},
"check": "response.headers should contain rate limit or usage information"
},
{
"name": "verify_batch_vs_individual_cost",
"description": "Compare batch request cost vs individual requests",
"endpoint": "/batch",
"method": "POST",
"payload": {
"locations": [
{"lat": 37.7749, "lon": -122.4194},
{"lat": 25.7617, "lon": -80.1918}
]
},
"check": "batch request should be more efficient than 2 individual requests"
}
],
"stress_profile": {
"concurrent_requests": 3,
"duration_seconds": 15,
"ramp_up": true,
"notes": "Respecting 60 RPM rate limit (1 req/sec), using 3 concurrent for brief periods"
}
}
```
7/8 tests passed
| Test | Endpoint | Status | Latency |
|---|---|---|---|
| test_risk_endpoint_san_francisco | GET /risk | 200 | 108ms |
| test_risk_endpoint_miami | GET /risk | 200 | 34ms |
| test_projections_endpoint | GET /projections | 200 | 34ms |
| test_batch_endpoint | POST /batch | 405 | 34ms |
| test_invalid_coordinates | GET /risk | 200 | 34ms |
| test_missing_lat_parameter | GET /risk | 200 | 34ms |
| test_missing_lon_parameter | GET /risk | 200 | 34ms |
| test_unauthenticated_request | GET /risk | 200 | 34ms |
{"multi_model": true, "models_used": ["openai", "claude_cli"], "model_scores": {"GPT-4o": {"overall": 0, "dimensions": {"token_efficiency": 0.0, "first_try_success": 0.0, "response_parseability": 0.0, "error_clarity": 0.0, "doc_quality": 0.0, "auth_simplicity": 0.0, "latency": 0.0, "consistency": 0.0}}, "Claude CLI": {"overall": 0, "dimensions": {"token_efficiency": 0.0, "first_try_success": 0.0, "response_parseability": 0.0, "error_clarity": 0.0, "doc_quality": 0.0, "auth_simplicity": 0.0, "latency": 0.0, "consistency": 0.0}}}, "averaged": true}ClimateIQ helps AI agents assess climate risk for any location worldwide. Get flood zones, fire risk, storm probability, and 30-year projections in a single API call. Structured JSON responses optimized for low-token agent consumption.
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/climateiq">
<img src="https://prowl.world/badge/climateiq.svg" height="56" alt="Agent-readiness on Prowl">
</a>
See operational metrics, LLM evaluations, agent readiness, and more.
Open in Dashboard