Full LLM thinking from the 4-phase benchmark pipeline.
{
"service_type": "rest_api",
"base_url": "https://api.datamuse.com",
"auth_method": "none",
"auth_config": null,
"endpoints": [
{
"path": "/words",
"method": "GET",
"purpose": "Gets words",
"params": {
"tags": {
"type": "array",
"required": false
},
"limit": {
"type": "integer",
"required": false
}
},
"response_format": "json",
"is_primary": true
},
{
"path": "/words",
"method": "POST",
"purpose": "Creates a new pet in the store. Duplicates are allowed",
"params": {
"pet": {
"type": "object",
"required": true
}
},
"response_format": "json",
"is_primary": false
},
{
"path": "/pets/{id}",
"method": "GET",
"purpose": "Returns a user based on a single ID, if the user does not have access to the pet",
"params": {
"id": {
"type": "integer",
"required": true
}
},
"response_format": "json",
"is_primary": false
},
{
"path": "/pets/{id}",
"method": "DELETE",
"purpose": "deletes a single pet based on the ID supplied",
"params": {
"id": {
"type": "integer",
"required": true
}
},
"response_format": "json",
"is_primary": false
}
],
"pricing_model": {
"type": "unknown",
"details": {},
"free_tier": null,
"paid_tiers": []
},
"rate_limits": {
"rpm": null,
"tpm": null,
"daily": null,
"concurrent": null
},
"capabilities": [],
"agent_readiness": {
"supports_x402": false,
"supports_streaming": false,
"has_sandbox": false,
"sdks": [],
"agent_auth_methods": []
}
}{
"tests": [
{
"name": "words_get_basic",
"endpoint": "/words",
"method": "GET",
"headers": {},
"payload": {},
"expected_status": 200,
"intent": "happy_path",
"expected_behavior": "Returns a JSON array of word objects (the API returns words without any query, defaulting to common words).",
"metrics": ["latency", "status_code", "response_size"],
"validation": {"field": "", "type": "array", "min_length": 1}
},
{
"name": "words_get_with_limit",
"endpoint": "/words",
"method": "GET",
"headers": {},
"payload": {"limit": 5},
"expected_status": 200,
"intent": "happy_path",
"expected_behavior": "Returns exactly 5 word results.",
"metrics": ["latency", "accuracy", "status_code"],
"validation": {"field": "", "type": "array", "min_length": 5, "max_length": 5}
},
{
"name": "words_get_invalid_limit_type",
"endpoint": "/words",
"method": "GET",
"headers": {},
"payload": {"limit": "abc"},
"expected_status": 400,
"intent": "validation",
"expected_behavior": "API should reject non-integer limit (or ignore it gracefully but we mark as validation).",
"metrics": ["status_code"],
"validation": {}
},
{
"name": "words_post_missing_pet",
"endpoint": "/words",
"method": "POST",
"headers": {"Content-Type": "application/json"},
"payload": {},
"expected_status": 400,
"intent": "validation",
"expected_behavior": "Missing required body parameter 'pet' should be rejected with 400.",
"metrics": ["status_code"],
"validation": {}
},
{
"name": "words_post_valid_pet",
"endpoint": "/words",
"method": "POST",
"headers": {"Content-Type": "application/json"},
"payload": {"pet": {"name": "test-pet", "tag": "test"}},
"expected_status": 200,
"intent": "happy_path",
"expected_behavior": "Creates a pet and returns the pet object with an id.",
"metrics": ["latency", "status_code"],
"validation": {"field": "id", "type": "integer", "min_value": 1}
},
{
"name": "pets_get_by_id",
"endpoint": "/pets/1",
"method": "GET",
"headers": {},
"payload": {},
"expected_status": 200,
"intent": "happy_path",
"expected_behavior": "Fetches an existing pet by ID 1 (assuming seeded data).",
"metrics": ["latency", "status_code"],
"validation": {"field": "id", "type": "integer", "min_value": 1}
},
{
"name": "pets_get_nonexistent_id",
"endpoint": "/pets/999999",
"method": "GET",
"headers": {},
"payload": {},
"expected_status": 404,
"intent": "validation",
"expected_behavior": "Returns 404 for non-existent pet ID, this is correct rejection.",
"metrics": ["status_code"],
"validation": {}
},
{
"name": "pets_get_invalid_id_type",
"endpoint": "/pets/abc",
"method": "GET",
"headers": {},
"payload": {},
"expected_status": 400,
"intent": "validation",
"expected_behavior": "Non-integer ID should be rejected.",
"metrics": ["status_code"],
"validation": {}
},
{
"name": "pets_delete_by_id",
"endpoint": "/pets/1",
"method": "DELETE",
"headers": {},
"payload": {},
"expected_status": 204,
"intent": "happy_path",
"expected_behavior": "Deletes pet with ID 1, returns 204 No Content.",
"metrics": ["latency", "status_code"],
"validation": {}
},
{
"name": "pets_delete_nonexistent",
"endpoint": "/pets/999999",
"method": "DELETE",
"headers": {},
"payload": {},
"expected_status": 404,
"intent": "validation",
"expected_behavior": "Deleting non-existent pet should return 404.",
"metrics": ["status_code"],
"validation": {}
}
],
"pricing_probes": [],
"stress_profile": {
"concurrent_requests": 5,
"duration_seconds": 10,
"ramp_up": true
}
}3/10 tests passed
| Test | Endpoint | Status | Latency |
|---|---|---|---|
| words_get_basic | GET /words | 200 | 49ms |
| words_get_with_limit | GET /words | 200 | 15ms |
| words_get_invalid_limit_type | GET /words | 200 | 18ms |
| words_post_missing_pet | POST /words | 405 | 61ms |
| words_post_valid_pet | POST /words | 405 | 37ms |
| pets_get_by_id | GET /pets/1 | 404 | 41ms |
| pets_get_nonexistent_id | GET /pets/999999 | 404 | 41ms |
| pets_get_invalid_id_type | GET /pets/abc | 404 | 38ms |
| pets_delete_by_id | DELETE /pets/1 | 404 | 57ms |
| pets_delete_nonexistent | DELETE /pets/999999 | 404 | 39ms |
{"model": "deepseek", "data": {"overall": 28, "dimensions": {"token_efficiency": 6.0, "first_try_success": 4.0, "response_parseability": 7.0, "error_clarity": 2.0, "doc_quality": 3.0, "auth_simplicity": 10.0, "latency": 8.0, "consistency": 6.0}, "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": null, "estimated_monthly_cost_heavy": null}, "issues": [{"severity": "critical", "detail": "Endpoint /words only supports GET \u2014 POST returns 405, making the documented POST operation unusable", "endpoint": "/words"}, {"severity": "critical", "detail": "The /pets/{id} GET and DELETE endpoints always return 404 \u2014 no valid pet exists and no way to create one (POST is on /words and works differently, not on /pets)", "endpoint": "/pets/{id}"}, {"severity": "high", "detail": "Invalid limit type returns 200 instead of 400 \u2014 the API silently accepts wrong types", "endpoint": "/words?limit=abc"}, {"severity": "high", "detail": "Invalid pet ID type 'abc' returns 404 instead of 400 \u2014 no validation on path parameter types", "endpoint": "/pets/abc"}, {"severity": "medium", "detail": "Error responses are minimalist \u2014 only {code, message} with no hints on how to fix requests; validation errors indistinguishable from resource-not-found", "endpoint": "all"}], "recommendations": ["Implement POST on /words instead of returning 405 \u2014 this endpoint is documented but non-functional", "Add a POST endpoint on /pets to create pet resources, otherwise GET/DELETE /pets/{id} will always return 404", "Return 400 (not 404) for type violations on path parameters like /pets/abc", "Reject invalid query parameter types with 400 and a descriptive error body", "Expand error responses to include details about the failing field and resolution hints", "Update API documentation to accurately reflect which endpoints and methods actually work"]}}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/datamuse">
<img src="https://prowl.world/badge/datamuse.svg" height="56" alt="Agent-readiness on Prowl">
</a>
See operational metrics, LLM evaluations, agent readiness, and more.
Open in Dashboard