---
title: "List the full tool registry"
method: GET
path: "/public/tools"
tags: ["Tools"]
---

# List the full tool registry

`GET /public/tools`

## Request

- Base URL: `https://api.johnsessentials.com/api/v1`
- URL: `https://api.johnsessentials.com/api/v1/public/tools`
- Auth: HTTP bearer

Returns the tools currently offered. The three query parameters narrow
the list and can be combined; each one is applied only when present.

## Query parameters

- `category` string
- `tier` string
- `enabled` boolean

## Response `200`

Tool list.

- object
  - `data` object: The tool registry plus counts (NOT a bare array).
    - `category_counts` object: Per-category tool counts.
    - `tools` Tool[]
      - `avg_duration_ms` integer
      - `category` string, required
      - `description` string, required
      - `display_name` string
      - `is_enabled` boolean
      - `name` string, required
      - `parameters_schema` object: JSON Schema for the tool's input. The schema and its properties may carry additional keys beginning `x-`; those are hints for our own interface, are not part of the API contract, may change without notice, and never affect the value a parameter accepts or returns — ignore them. A property-level `tier_required` is different and is NOT advisory: on some tools sending that property below the named tier is refused with 402. See "Schema extensions" in the introduction.
      - `tier_required` 'free' | 'starter' | 'business' | 'enterprise'
    - `total` integer: Number of tools returned after filters.
  - `error` ErrorBody: Additional fields per code (validation errors, retry_after, hints) appear at this level. additionalProperties: true is intentional.
    - `code` 'auth_missing_header' | 'auth_malformed_header' | 'auth_invalid_key' | 'auth_expired_key' | 'auth_inactive_key' | 'auth_scope_missing' | 'quota_calls_exceeded' | 'quota_cost_exceeded' | 'quota_storage_exceeded' | 'quota_agent_runs_exceeded' | 'credit_exhausted' | 'tool_not_found' | 'tool_input_invalid' | 'tool_file_too_large' | 'tool_file_not_found' | 'tool_unsupported' | 'tool_timeout' | 'tool_internal' | 'idempotency_key_in_use' | 'agent_max_iterations' | 'agent_unauthorized_tool' | 'agent_invalid_plan' | 'workflow_not_found' | 'workflow_invalid' | 'bad_request' | 'forbidden' | 'not_found' | 'conflict' | 'internal_error' | 'service_unavailable', required: Stable canonical code from the taxonomy. Branch on this, not on `message`. Full list at /api/errors.
    - `doc_url` string, uri, required
    - `message` string, required
    - `request_id` string, uuid
  - `meta` EnvelopeMeta, required
    - `rate_limit` object
      - `limit` integer
      - `remaining` integer
      - `reset` integer: Unix seconds
    - `timestamp` string, date-time, required
    - `version` string, required
  - `request_id` string, uuid, required
  - `success` boolean, required

---

[API](https://skmtc.dev/johnsessentials/apis/john-s-essentials-api.md) · [All operations](https://skmtc.dev/johnsessentials/apis/john-s-essentials-api/llms.txt) · [OpenAPI document](https://skmtc.dev/johnsessentials/apis/john-s-essentials-api/revisions/56586ff78e6d?raw)
