---
title: "List objective tools"
method: GET
path: "/v1/workspaces/{workspaceId}/objectives/{objectiveId}/tools"
tags: ["ObjectiveService", "Objectives"]
---

# List objective tools

`GET /v1/workspaces/{workspaceId}/objectives/{objectiveId}/tools`

Lists all tools that were assigned to an objective

## Path parameters

- `workspaceId` string, required
- `objectiveId` string, required

## Query parameters

- `limit` integer
- `cursor` string

## Response `200`

OK

- ListObjectiveToolsResponse
  - `items` ObjectiveTool[]
    - `metadata` BareMetadata, required — BareMetadata contains the minimal metadata for a resource: the ID and an optional human-readable name. These are used for reference fields where the full metadata (account scoping, timestamps, labels, external IDs) is not needed — e.g., the tool references inside an agent variation spec or the tools assigned to an objective. Both fields are server-populated; clients provide IDs through sibling fields rather than by constructing a BareMetadata themselves.
      - `id` string
      - `name` string — Human-readable name of the referenced resource, populated by the server on reads for convenience. Absent on references to resources that do not have a name (e.g., objective tasks).
    - `snapshot` Tool
      - `metadata` ResourceMetadata, required — Standard metadata for persistent, named resources (e.g., agents, tools, prompts)
        - `id` string, required — Unique identifier for the resource (prefixed ULID, e.g., "agent_01HXK...")
        - `accountId` string, required — Account this resource belongs to for multi-tenant isolation (prefixed ULID)
        - `workspaceId` string, required — Workspace this resource belongs to for organizational grouping (prefixed ULID)
        - `name` string, required — Human-readable name for the resource (e.g., "Customer Support Agent", "Email Tool") Required for resources that users interact with directly
        - `externalId` string — External ID for the resource (e.g., a workflow ID from an external system)
        - `labels` object — Key-value pairs for categorization and filtering. Values are 0-63 alphanumeric characters with "-", "_", or "." allowed between; keys follow the same shape and additionally accept an optional DNS-subdomain prefix (e.g. "cadenya.com/") of at most 253 characters. Examples: {"environment": "production", "team": "platform", "version": "v2"}
        - `profileId` string, required — ID of the actor (user or service account) that created this resource
        - `createdAt` string, date-time, required — Timestamp when this resource was created
        - `updatedAt` string, date-time — Timestamp when this resource was last updated
      - `spec` ToolSpec, required
        - `description` string, required
        - `requiresApproval` boolean, required
        - `parameters` object, required — The tool's JSON Schema, as handed to the LLM. Required, but may be the empty object `{}` for a tool that takes no arguments. Requiring it rather than defaulting it means a misspelled field name (`inputSchema`, say) is a 400 instead of a silently parameterless tool.
        - `config` union, required — Config defines the adapter to use for the tool. This is used to determine how the tool is called. For example, if the tool is an HTTP tool, the adapter will be Http. If the tool is an inline tool, the adapter will be Inline.
          - ToolSpecConfigHttp
            - `type` 'http', required
            - `http` ConfigHTTP, required
              - …
          - ToolSpecConfigMcp
            - `type` 'mcp', required
            - `mcp` ConfigMCP, required
              - …
          - ToolSpecConfigOpenapi
            - `type` 'openapi', required
            - `openapi` ConfigOpenAPI, required
              - …
          - ToolSpecConfigBare
            - `type` 'bare', required
            - `bare` ConfigBare, required — Marks the tool as bare: it has no execution adapter of its own and relies on the parent tool set being a Bare tool set. Present so a webhook consumer can tell a tool is bare from the tool data alone, without cross-referencing the tool set.
        - `llmToolName` string — The name provided to the LLM, which may differ from the metadata.name on the tool. LLMs have specific length and format requirements, and tool set sources may not comply with them, so Cadenya does its best to format names into a usable format.
      - `info` ToolInfo
        - `toolSet` ResourceMetadata — Standard metadata for persistent, named resources (e.g., agents, tools, prompts)
          - `id` string, required — Unique identifier for the resource (prefixed ULID, e.g., "agent_01HXK...")
          - `accountId` string, required — Account this resource belongs to for multi-tenant isolation (prefixed ULID)
          - `workspaceId` string, required — Workspace this resource belongs to for organizational grouping (prefixed ULID)
          - `name` string, required — Human-readable name for the resource (e.g., "Customer Support Agent", "Email Tool") Required for resources that users interact with directly
          - `externalId` string — External ID for the resource (e.g., a workflow ID from an external system)
          - `labels` object — Key-value pairs for categorization and filtering. Values are 0-63 alphanumeric characters with "-", "_", or "." allowed between; keys follow the same shape and additionally accept an optional DNS-subdomain prefix (e.g. "cadenya.com/") of at most 253 characters. Examples: {"environment": "production", "team": "platform", "version": "v2"}
          - `profileId` string, required — ID of the actor (user or service account) that created this resource
          - `createdAt` string, date-time, required — Timestamp when this resource was created
          - `updatedAt` string, date-time — Timestamp when this resource was last updated
        - `createdBy` Profile — A profile identifies a user or non-human principal (such as an API key) at the account level. Profiles are account-scoped and can be granted access to multiple workspaces.
          - `metadata` AccountResourceMetadata, required — AccountResourceMetadata is used to represent a resource that is associated to an account but not to a workspace.
            - `id` string, required — Unique identifier for the resource (prefixed ULID, e.g., "apikey_01HXK...")
            - `accountId` string, required — Account this resource belongs to for multi-tenant isolation (prefixed ULID)
            - `name` string, required — Human-readable name for the resource (e.g., "Customer Support Agent", "Email Tool") Required for resources that users interact with directly
            - `externalId` string — External ID for the resource (e.g., a workflow ID from an external system)
            - `labels` object — Key-value pairs for categorization and filtering. Values are 0-63 alphanumeric characters with "-", "_", or "." allowed between; keys follow the same shape and additionally accept an optional DNS-subdomain prefix (e.g. "cadenya.com/") of at most 253 characters. Examples: {"environment": "production", "team": "platform", "version": "v2"}
            - `profileId` string, required
            - `createdAt` string, date-time
          - `spec` ProfileSpec, required — Configuration for a profile.
            - `email` string — Email address of the profile. Required and unique within an account for user profiles.
            - `name` string — Display name (e.g., "Bobby Tables").
            - `type` 'PROFILE_TYPE_UNSPECIFIED' | 'PROFILE_TYPE_USER' | 'PROFILE_TYPE_API_KEY' | 'PROFILE_TYPE_SYSTEM', enum, required — Whether this profile represents a human user, an API key, or a system principal.
        - `signature` string — Content signature identifying the tool within its tool set: a hash of the sanitized llm_tool_name, description, and canonical parameters. Two tools with the same llm_tool_name but different parameters or description (as MCP servers may return per user) have distinct signatures.
      - `state` 'STATE_UNSPECIFIED' | 'STATE_AVAILABLE' | 'STATE_OMITTED' | 'STATE_ARCHIVED', enum, required — The current lifecycle state of the tool. Output only. Use the :omit and :restore actions to transition; tool set syncs may also update it.
  - `pagination` Page — Page carries cursor-based pagination state. There is no total: the cursor walks the result set without ever counting it, and a count would cost a second query on every list.
    - `nextCursor` string

## Other responses

- `default` — Default error response

## Changes

- **2026-07-19** `3ecc1debabfa` — 2 breaking, 4 warning, 1 info
  - added `#/components/schemas/ToolSpec_Config_Http, #/components/schemas/ToolSpec_Config_Mcp, #/components/schemas/ToolSpec_Config_Openapi, #/components/schemas/ToolSpec_Config_Bare` to the `items/items/snapshot/allOf[#/components/schemas/Tool]/spec/config/allOf[#/components/schemas/ToolSpec_Config]/` response property `oneOf` list for the response status `200`
  - the `items/items/snapshot/allOf[#/components/schemas/Tool]/spec/config/allOf[#/components/schemas/ToolSpec_Config]/` response's property type/format changed from `object`/`` to ``/`` for status `200`
  - removed the optional property `items/items/snapshot/allOf[#/components/schemas/Tool]/spec/config/allOf[#/components/schemas/ToolSpec_Config]/bare` from the response with the `200` status
  - removed the optional property `items/items/snapshot/allOf[#/components/schemas/Tool]/spec/config/allOf[#/components/schemas/ToolSpec_Config]/http` from the response with the `200` status
  - …3 more
- **2026-07-08** `a99a473ee3ad` — 1 warning
  - removed the optional property `pagination/total` from the response with the `200` status
- **2026-07-06** `ca78d3d0b7c2` — 1 info
  - added the optional property `items/items/snapshot/allOf[#/components/schemas/Tool]/spec/config/allOf[#/components/schemas/ToolSpec_Config]/bare` to the response with the `200` status
- …earlier changes not shown

[Full history](https://skmtc.dev/cadenya/apis/cadenya-api/changes/v1/workspaces/:workspaceId/objectives/:objectiveId/tools/get.md)

---

[API](https://skmtc.dev/cadenya/apis/cadenya-api.md) · [All operations](https://skmtc.dev/cadenya/apis/cadenya-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/cadenya/cadenya-api/revisions/ac1a7f084068/schema)
