Skip to content
OneLessTool

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.