ReferenceHTTP APIAgents

The agent's Slack app, if the platform made one

GET
/v1/agents/{id}/slack/app

The agent's live Slack app (creating, created or deleting), or null when it has none. Secrets appear only as whether each is stored; secrets.slack_bot_token.configured says whether Slack handed over a bot token; an install refused after the code exchange keeps it, so the agent's slack_bot identity is what says the app is installed. The install link comes from POST /v1/agents/{id}/slack/install/start. warnings says why every Slack mention and DM would be refused with a notice in the thread: no_active_release before an activation, profile_unavailable (with the profile_id) while the catalog no longer has the active release's profile, defines it otherwise than it was released, or an owner blocked it, and repository_required (with the profile_id) while a session cannot start: the agent has no settings row and its release names no repository its profile needs, or names one the profile or the workspace's repository ceiling does not allow, or the agent's GitHub settings cannot be read. Connecting is not blocked. config_token_issuer_changed (with the app's maker as previous_user_id and the token's issuer as user_id) says the App Configuration Token now belongs to another Slack user than the one who made this app, who may not be able to manage it or install it. config_token is the workspace's App Configuration Token state (unset, active, needs_reentry), readable here by the agent's admins too: only active can create the app, and only an owner or admin can set it. Owners, admins, the agent's admins and the live members of its managing team; API keys are refused.

Auth: cookie session only; no scope.

Authorization

cookieSession
cookie__Host-werft_session<token>

For the web console: the browser session cookie set by POST /v1/auth/login. It holds the scopes of the user's workspace role (owner: all; admin and member: all but sessions:recover). Requests other than GET must also send X-Requested-With: werft-web.

Path Parameters

id*string

The agent's id.

Match^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
Formatuuid

Response Body

The agent's app, or null.

application/json
  1. response
slack_app*|null
event_url*|null
events*
warnings*array<|||>
config_token*string
Value in"unset""active""needs_reentry"
Example Request
curl -X GET 'https://example.com/v1/agents/497f6eca-6276-4993-bfeb-53cbbbba6f08/slack/app'
Example Response
{  "slack_app": {    "id": "6a1d3e5f-2b4c-4d8e-9f0a-1b2c3d4e5f60",    "kind": "agent",    "agent_id": "8d2c4f1a-6b3e-4a9d-b7c5-2e1f0a9b8c7d",    "state": "created",    "app_id": "A0B1C2D3E4F",    "client_id": "1234567890.9876543210",    "redirect_url": "https://console.example.ts.net/agents/8d2c4f1a-6b3e-4a9d-b7c5-2e1f0a9b8c7d/slack/callback",    "created_by_token_user": "U0ISSUER",    "created_at": "2026-10-23T09:00:00Z",    "updated_at": "2026-10-23T09:00:00Z",    "secrets": {      "slack_signing_secret": {        "configured": true,        "last4": "c3d4",        "updated_at": "2026-10-23T09:00:00Z",        "updated_by": null      },      "slack_client_secret": {        "configured": true,        "last4": "e5f6",        "updated_at": "2026-10-23T09:00:00Z",        "updated_by": null      },      "slack_bot_token": {        "configured": false,        "last4": null,        "updated_at": null,        "updated_by": null      }    }  },  "event_url": "https://agents.example.test/v1/slack/events/019a0000-0000-7000-8000-0000000000c1",  "events": {    "state": "pending",    "checked_at": "2026-10-28T00:00:00.000Z",    "url": "https://agents.example.test/v1/slack/events/019a0000-0000-7000-8000-0000000000c1"  },  "warnings": [],  "config_token": "active"}