API
Public, read-only JSON endpoints. No authentication required.
Base URL: https://goodgoodbad.com
GET /api/tools
List all tools with their categories and review count.
Response
[
{
"id": 1,
"name": "GPT-4.1",
"slug": "gpt-4-1",
"categories": ["Text", "Image", "Voice"],
"website": "https://openai.com",
"logo": "/assets/logos/gpt-4-1.png",
"review_count": 42
},
...
]
GET /api/tools/:slug
Get a single tool by its URL slug.
Example
GET /api/tools/claude-3-7-sonnet
Response
{
"id": 2,
"name": "Claude 3.7 Sonnet",
"slug": "claude-3-7-sonnet",
"categories": ["Text"],
"website": "https://claude.ai",
"review_count": 17
}
Errors
404 — Tool not found.
GET /api/tools/:slug/reviews
Get paginated reviews for a specific tool.
Query Parameters
| Param | Type | Default | Description |
|---|---|---|---|
page | int | 1 | Page number (1-based) |
per_page | int | 20 | Results per page (max 100) |
Example
GET /api/tools/gpt-4-1/reviews?page=1&per_page=10
Response
{
"tool": "gpt-4-1",
"page": 1,
"per_page": 10,
"total": 42,
"reviews": [
{
"id": 123,
"good1": "Incredible at following complex instructions",
"good2": "Very fast response times",
"bad1": "Expensive at scale",
"created_at": "2026-03-15 14:22:01"
},
...
]
}
Errors
404 — Tool not found.
GET /api/categories
List all available categories.
Response
["Text", "Image", "Video", "Voice", "Music", "Agent", "MCP", "Tool"]
Notes
- All responses are
application/json; charset=utf-8. - There is no authentication — all endpoints listed above are public and read-only.
- Please be respectful with request volume. There are no formal rate limits on read endpoints, but excessive automated traffic may be blocked.