Todo Lists
Full LLM thinking from the 4-phase benchmark pipeline.
Looking at this Todoist API specification, I can extract the following structured information:
```json
{
"service_type": "rest_api",
"base_url": "https://api.todoist.com",
"auth_method": "bearer_token",
"auth_config": {"header": "Authorization", "prefix": "Bearer"},
"endpoints": [
{
"path": "/api/v1/workspaces/invitations/delete",
"method": "POST",
"purpose": "Delete a workspace invitation (admin only)",
"params": {"invitation_id": {"type": "integer", "required": true}},
"response_format": "json",
"is_primary": false
},
{
"path": "/api/v1/workspaces/invitations/all",
"method": "GET",
"purpose": "Get all pending workspace invitations",
"params": {"workspace_id": {"type": "integer", "required": true}},
"response_format": "json",
"is_primary": false
}
],
"pricing_model": {
"type": "subscription",
"details": {"note": "Free to use but features may be restricted based on user's Todoist account plan"},
"free_tier": {"features": "limited", "period": "ongoing"},
"paid_tiers": ["Todoist Pro", "Todoist Business"]
},
"rate_limits": {"rpm": null, "tpm": null, "daily": null, "concurrent": null},
"capabilities": ["task_management", "project_management", "workspace_collaboration", "invitations", "team_management"],
"agent_readiness": {
"supports_x402": false,
"supports_streaming": false,
"has_sandbox": false,
"sdks": ["python", "javascript"],
"agent_auth_methods": ["api_key"]
}
}
```
```json
{
"tests": [
{
"name": "basic_auth_test",
"endpoint": "/rest/v2/tasks",
"method": "GET",
"headers": {
"Authorization": "Bearer {token}"
},
"payload": {},
"expected_status": 200,
"expected_behavior": "Returns user's tasks, verifying auth works",
"metrics": ["latency", "status_code", "auth_success"],
"validation": {
"type": "response_structure",
"check": "valid_json_response"
}
},
{
"name": "get_projects",
"endpoint": "/rest/v2/projects",
"method": "GET",
"headers": {
"Authorization": "Bearer {token}"
},
"payload": {},
"expected_status": 200,
"expected_behavior": "Returns user's projects list",
"metrics": ["latency", "accuracy", "status_code"],
"validation": {
"field": "root",
"type": "array"
}
},
{
"name": "get_workspace_invitations",
"endpoint": "/api/v1/workspaces/invitations/all",
"method": "GET",
"headers": {
"Authorization": "Bearer {token}"
},
"payload": {},
"expected_status": 200,
"expected_behavior": "Returns workspace invitations (may be empty)",
"metrics": ["latency", "status_code"],
"validation": {
"type": "json_response"
}
},
{
"name": "create_task",
"endpoint": "/rest/v2/tasks",
"method": "POST",
"headers": {
"Authorization": "Bearer {token}",
"Content-Type": "application/json"
},
"payload": {
"content": "Test task from Prowl benchmark",
"description": "Automated test task"
},
"expected_status": 200,
"expected_behavior": "Successfully creates a new task",
"metrics": ["latency", "accuracy", "status_code"],
"validation": {
"field": "id",
"type": "string",
"required": true
}
},
{
"name": "invalid_auth_test",
"endpoint": "/rest/v2/tasks",
"method": "GET",
"headers": {
"Authorization": "Bearer invalid_token_12345"
},
"payload": {},
"expected_status": 401,
"expected_behavior": "Returns unauthorized error for invalid token",
"metrics": ["status_code", "error_handling"],
"validation": {
"type": "error_response",
"expected_status": 401
}
},
{
"name": "missing_auth_test",
"endpoint": "/rest/v2/tasks",
"method": "GET",
"headers": {},
"payload": {},
"expected_status": 401,
"expected_behavior": "Returns unauthorized error when no auth provided",
"metrics": ["status_code", "error_handling"],
"validation": {
"type": "error_response",
"expected_status": 401
}
},
{
"name": "malformed_request_test",
"endpoint": "/rest/v2/tasks",
"method": "POST",
"headers": {
"Authorization": "Bearer {token}",
"Content-Type": "application/json"
},
"payload": {
"invalid_field": "test"
},
"expected_status": 400,
"expected_behavior": "Returns bad request error for missing required fields",
"metrics": ["status_code", "error_handling"],
"validation": {
"type": "error_response",
"expected_status": 400
}
}
],
"pricing_probes": [
{
"name": "verify_subscription_access",
"description": "Check if API access varies by subscription tier",
"endpoint": "/rest/v2/tasks",
"method": "GET",
"payload": {},
"check": "response should succeed for valid token, features may vary by plan"
},
{
"name": "check_rate_limiting",
"description": "Test if rate limits are enforced",
"endpoint": "/rest/v2/projects",
"method": "GET",
"payload": {},
"check": "monitor for 429 status codes or rate limit headers"
}
],
"stress_profile": {
"concurrent_requests": 3,
"duration_seconds": 15,
"ramp_up": true
}
}
```
0/7 tests passed
| Test | Endpoint | Status | Latency |
|---|---|---|---|
| basic_auth_test | GET /rest/v2/tasks | 410 | 72ms |
| get_projects | GET /rest/v2/projects | 410 | 45ms |
| get_workspace_invitations | GET /api/v1/workspaces/invitations/all | 400 | 457ms |
| create_task | POST /rest/v2/tasks | 410 | 41ms |
| invalid_auth_test | GET /rest/v2/tasks | 410 | 39ms |
| missing_auth_test | GET /rest/v2/tasks | 410 | 81ms |
| malformed_request_test | POST /rest/v2/tasks | 410 | 87ms |
```json
{
"overall": 0,
"dimensions": {
"token_efficiency": 2.0,
"first_try_success": 0.0,
"response_parseability": 3.0,
"error_clarity": 8.0,
"doc_quality": 5.0,
"auth_simplicity": 5.0,
"latency": 7.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": "Benchmark used wrong base URL — 6 out of 7 tests hit deprecated /rest/v2/ endpoints instead of current /api/v1/ API",
"endpoint": "/rest/v2/*"
},
{
"severity": "medium",
"detail": "The one v1 endpoint test failed due to missing required workspace_id parameter",
"endpoint": "/api/v1/workspaces/invitations/all"
}
],
"recommendations": [
"Re-run benchmark with correct API base URL (/api/v1/) from the vendor's guide",
"Include required parameters like workspace_id when testing workspace-specific endpoints",
"Test core task management endpoints like GET /api/v1/tasks and POST /api/v1/tasks",
"Verify authentication setup against current API documentation"
]
}
```
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/todoist">
<img src="https://prowl.world/badge/todoist.svg" height="56" alt="Agent-readiness on Prowl">
</a>
See operational metrics, LLM evaluations, agent readiness, and more.
Open in Dashboard