---
title: "Get app tools"
method: GET
path: "/api/apps/{handle}/{appId}/tools"
---

# Get app tools

`GET /api/apps/{handle}/{appId}/tools`

## Request

- Base URL: `https://reduck.ai`
- URL: `https://reduck.ai/api/apps/{handle}/{appId}/tools`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

The tasks this app offers an agent, as its running release declares them under `tools` in its manifest: each one's name, what it does, and JSON Schemas for its arguments and its answer. An app serving an older release than its image answers what THAT release ships, because those are the tasks actually there to launch. An empty list is an answer — this app offers none. `skill` is the release's `SKILL.md`, its author's account of how to combine the tools for a purpose, or null when it ships none.

## Path parameters

- `handle` string, required: The owner a resource is addressed under: "@username" for a personal scope, or a bare slug for a project.
- `appId` string, uuid, required

## Response `200`

OK

- object
  - `tools` AppImageToolDeclaration[], required
    - `task` string, required: The task this calls, as in `tasks/<name>.ts`. Also the name an agent calls it by.
    - `description` string, required: What it does, in the words an agent chooses it by.
    - `inputSchema` unknown, required
    - `outputSchema` unknown, required
  - `skill` string, nullable, required: The release's `SKILL.md`: how to combine the tools for a purpose. Null when it ships none.

## Other responses

- `401`: Not authenticated
- `403`: Forbidden
- `404`: No such app under that handle, or a scope you are not in.

---

[API](https://skmtc.dev/reduck/apis/reduck-api.md) · [All operations](https://skmtc.dev/reduck/apis/reduck-api/llms.txt) · [OpenAPI document](https://skmtc.dev/reduck/apis/reduck-api/revisions/a573b91206d6?raw)
