REST API v1
Base URL https://onelesstool.com/api/v1 · JSON · no auth · CORS enabled · 120 requests/minute per IP · OpenAPI 3.1
Every response has the same envelope:
{ "data": { … }, "meta": { "apiVersion": "v1", "dataVersion": "…", "dataGeneratedAt": "…", "docs": "/docs/api", "disclaimer": "…" } }
Errors: { "error": { "code", "message", "details" }, "meta" } with 400 (validation), 404, 429 (rate limit) or 500.
Discovery
GET /search?q=&kinds=&limit=
Natural-language search. Returns toolMatch (if the query names a product), capabilityMatches (the jobs it most likely refers to) and ranked hits with matchedVia explanations.
curl "https://onelesstool.com/api/v1/search?q=make%20thumbnails"
Knowledge
| Endpoint | Returns |
|---|---|
GET /tools?category=&capability=&q=&limit=&offset= |
Tool summaries with starting paid price and evidence status |
GET /tools/{slug} |
Plans (each with evidence, date, source), capabilities (fit, scores, limitations, plans), reasons to keep paying, risks, workflows, overlaps, sources |
GET /capabilities |
All capabilities with solution counts |
GET /capabilities/{slug} |
Every tool that does this job, ranked by fit, with cheapest qualifying plan |
GET /workflows?tool=&capability= |
Workflow summaries |
GET /workflows/{slug} |
Full instructions: steps, prompts, artifacts, limitations, risks, verification checklist, savings methodology |
GET /pricing?tool= |
Every plan price with evidence status, verification date and source URL |
Decisions
GET /alternatives?tool=&capabilities=&owned=&team_size=
For one tool, per capability: verdict (covered_by_owned, covered_by_free_plan, partially_covered_by_owned, needs_new_tool, no_known_solution), ranked options with incremental monthly cost, and the honest case for keeping the tool.
POST /recommend
{
"query": "I need 15 YouTube thumbnails a month and a simple CRM",
"ownedTools": [{ "tool": "chatgpt", "plan": "plus" }, { "tool": "google-workspace" }],
"constraints": { "skill": "basic", "teamSize": 3, "needsCollaboration": true, "sensitiveData": false }
}
Returns per-capability recommendations plus a minimal stack covering everything at the lowest incremental cost.
<a id="audit"></a>
POST /audit
Stateless — nothing is stored.
{
"subscriptions": [
{ "tool": "chatgpt", "plan": "plus", "monthlyCostUSD": 20, "usage": "daily", "capabilitiesUsed": ["writing-copy", "grammar-editing"] },
{ "tool": "grammarly", "monthlyCostUSD": 12, "capabilitiesUsed": ["grammar-editing"] },
{ "tool": "salesforce", "monthlyCostUSD": 500, "seats": 5, "criticality": "high" }
],
"skill": "basic"
}
Each finding has a verdict (keep, keep_critical, downgrade, redundant, test_replacement, review_unused, unknown_tool), monthlySavingsUSD, savingsConfidence (likely/possible/none), the calculation lines, coverage, risks and next steps. Totals separate likely and possible savings, monthly and annual. See methodology.
Versioning
Breaking changes get a new version prefix. meta.dataVersion changes whenever content changes — cache on it.