# List tools

`GET https://api.endless.app/tools`

Source: https://endless.app/docs/api/tools/list

Lists the tools the caller can read.

## Authentication

- `bearerAuth`: HTTP bearer (JWT)

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `organization_id` | query | string | yes |  |
| `user_id` | query | string | no |  |
| `Endless-Api-Version` | header | string | no | Pin the caller to an API major (`1`). Omit to accept the current version. A major this deployment cannot serve is refused with 400 `unsupported_api_version`. |

## Responses

### 200 OK

Content type: `application/json` — object

- `can_manage_tools` (boolean, required)
- `can_create_connectors` (boolean, required)
- `connectors` (array<object>, required)
  - `id` (string (uuid), required)
  - `codename` (string | null, required)
  - `organization_id` (string | null, required)
  - `label` (string, required)
  - `description` (string | null, required)
  - `url` (string, required)
  - `transport` ("http" | "sse", required)
  - `auth_kind` ("clerk" | "mcp_oauth" | "bearer" | "slack_oauth", required)
  - `provider` (string | null, required)
  - `scopes` (string | number | boolean | null | object | array<any | null> | null, required)
  - `client_env_prefix` (string | null, required)
  - `enabled` (boolean, required)
  - `catalog` (string | number | boolean | null | object | array<any | null> | null, required)
  - `catalog_fingerprint` (string | null, required)
  - `catalog_at` (string (date-time) | null, required)
  - `created_by_id` (string | null, required)
  - `deleted_at` (string (date-time) | null, required)
  - `deleted_by_id` (string | null, required)
  - `created_at` (string (date-time), required)
  - `updated_at` (string (date-time), required)
  - `state` (object, required)
    - `workspace_enabled` (boolean, required)
    - `user_enabled` (boolean | null, required)
    - `effective` (boolean, required)
  - `can_edit` (boolean, required)
  - `can_delete` (boolean, required)
- `skills` (array<object>, required)
  - `id` (string (uuid), required)
  - `codename` (string | null, required)
  - `organization_id` (string | null, required)
  - `source` ("built-in" | "custom" | "community", required)
  - `name` (string, required)
  - `description` (string, required)
  - `body` (string, required)
  - `author` (string | null, required)
  - `project_scoped` (boolean, required)
  - `visibility` ("private" | "workspace" | "public", required)
  - `workspace_role` ("viewer" | "editor" | "owner", required)
  - `created_by_id` (string | null, required)
  - `mod_shortcut_id` (string | null, required)
  - `deleted_at` (string (date-time) | null, required)
  - `deleted_by_id` (string | null, required)
  - `created_at` (string (date-time), required)
  - `updated_at` (string (date-time), required)
  - `resources` (object, required)
    - `scripts` (number, required)
    - `references` (number, required)
    - `assets` (number, required)
  - `state` (object, required)
    - `workspace_enabled` (boolean, required)
    - `user_enabled` (boolean | null, required)
    - `effective` (boolean, required)
  - `can_edit` (boolean, required)
  - `can_delete` (boolean, required)
  - `shared` (boolean, required)

### Errors

- `400` (Error): The request is malformed, or failed input validation. `message` names the field and the rule it broke; `data.issues` carries them individually.
- `401` (Error): No bearer token, or a token that failed verification.
- `402` (Error): The workspace has no credits left, or the caller is over a spending limit.
- `403` (Error): Authenticated, but the caller's role in this workspace does not carry the permission this operation needs.
- `409` (Error): The request is well-formed, but the resource's current state forbids it — a taken name, a last admin, a limit already reached.
- `429` (Error): The caller has spent its rate-limit window. `Retry-After` says when to come back.
- `500` (Error): The request failed on our side. Safe to retry an idempotent operation with backoff.
