레퍼런스HTTP APIAgents

Create the agent's Slack app

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

Creates one Slack app for the agent with the workspace's App Configuration Token (apps.manifest.create): the agent's name, its bot, the agent view and the bot scopes, with no event subscriptions yet. The app is recorded as creating before Slack is asked; its signing and client secrets are stored by the server under the app and never returned. Asking again for an agent that has its app returns the same app with created: false. If Slack's answer was lost the app stays creating and the next request answers 409 SLACK_APP_CREATING; once uncertain, check api.slack.com/apps, delete any app made then, and retry with replace_uncertain: true. warnings says when the config token now belongs to another Slack user than the one who made the workspace's previous app (config_token_issuer_changed), and, as on GET, when the active release cannot start a session (profile_unavailable, repository_required); none stops the request. The agent needs an active release. Installing it into Slack starts at POST /v1/agents/{id}/slack/install/start. Owners, admins and the agent's admins from a signed-in console; API keys are refused.

Auth: cookie session only; no scope. Idempotency-Key: ignored.

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

Header Parameters

X-Requested-With?"werft-web"

Required with a cookie session: the literal werft-web.

Value in"werft-web"

Request Body

application/json
  1. body
replace_uncertain?boolean
Defaultfalse

Response Body

The agent's app, whether this request created it, and any warnings.

application/json
  1. response
slack_app*
created*boolean
warnings*array<|||>
Example Request
curl -X POST 'https://example.com/v1/agents/497f6eca-6276-4993-bfeb-53cbbbba6f08/slack/app' \  -H 'Content-Type: application/json' \  -d '{  "replace_uncertain": false}'
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      }    }  },  "created": true,  "warnings": []}