Skip to main content
GET
JavaScript
One row per tool invocation, carrying the arguments the model chose and where the call stands. This is what a bare tool harness polls, and what an approval UI reads.

Two statuses, and they sit on the call

status answers “may it run.” executionStatus answers “did it.” Both are top-level, not inside data, which is easy to get wrong because everything else lives under data.
A tool with requiresApproval: false reads AUTO_APPROVED before it ever runs. One behind approval sits at TOOL_CALL_STATUS_WAITING_FOR_APPROVAL until a person decides, then moves to APPROVED or DENIED. Both filter server-side:
That one filter is the bare-tool harness: every call waiting on your code, and nothing else.

The list omits results. Get by ID returns them.

A list row holds callable, arguments, and the two statuses. It carries no result, so paging a long objective stays cheap. Get a tool call returns the same call plus result, at the top level rather than under data, with no includeInfo needed. The response schema is named ObjectiveToolCallWithResult, which tells you where the line falls.

callable names what was invoked

A discriminated union, like an assignment: type reads tool, agent, or cadenyaProvidedTool, and the payload sits under the matching key.
Unlike the toolCalled event, which ships a built-in’s name empty, this endpoint fills it in. When a transcript rendered from the stream hits an unnamed built-in, this is where its name lives.

resolvedSecrets gives the key and source, never the value

Each entry gives the secret’s key and which scope supplied it, so you can prove a per-user token overrode a workspace credential without the value ever crossing the wire.
Sources rank RESOLVED_SECRET_SOURCE_OBJECTIVE, then _TOOLSET, then _WORKSPACE: the narrowest scope wins. The array is empty when the tool needs no secrets.

The harness loop

Poll, execute, answer. Cadenya never opens a connection into your network.

Set tool call content

Answer a parked call. Your code is the tool runtime.

Approve a tool call

Where WAITING_FOR_APPROVAL gets resolved.

Get a tool call

The same call, plus its result.

Store and use secrets

What resolvedSecrets.source is telling you.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Path Parameters

workspaceId
string
required
Example:

"workspace_01HXKD2E5NQM3T9AYWCF133E3Q"

objectiveId
string
required

The objective ID to return tool calls for

Example:

"obj_01HXKD2E5NQM3T9AYWCFQAZGFV"

Query Parameters

limit
integer<int32>

Maximum number of results to return

cursor
string

Pagination cursor from previous response

status
enum<string>

Filter by tool call status

Available options:
TOOL_CALL_STATUS_UNSPECIFIED,
TOOL_CALL_STATUS_AUTO_APPROVED,
TOOL_CALL_STATUS_WAITING_FOR_APPROVAL,
TOOL_CALL_STATUS_APPROVED,
TOOL_CALL_STATUS_DENIED
includeInfo
boolean

When set to true you may use more of your alloted API rate-limit

executionStatus
enum<string>

Filter by tool call execution status. Useful for reverse-harness polling of bare tool calls waiting for externally supplied content (TOOL_CALL_EXECUTION_STATUS_WAITING_FOR_CONTENT).

Available options:
TOOL_CALL_EXECUTION_STATUS_UNSPECIFIED,
TOOL_CALL_EXECUTION_STATUS_PENDING,
TOOL_CALL_EXECUTION_STATUS_RUNNING,
TOOL_CALL_EXECUTION_STATUS_COMPLETED,
TOOL_CALL_EXECUTION_STATUS_ERRORED,
TOOL_CALL_EXECUTION_STATUS_WAITING_FOR_CONTENT
labels
string

Filters by metadata labels. Comma-separated key=value pairs, e.g. "env=prod,team=ai". A resource matches only if every pair matches exactly (AND semantics).

Response

OK

items
object[]
pagination
object

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.