Set or replace the Slack App Configuration Token (owner or admin)
Paste the refresh token from api.slack.com/apps. It is rotated with Slack at once (tooling.tokens.rotate), which proves Slack takes it; the new access and refresh tokens are stored encrypted together and the pasted one is spent. A token Slack refuses changes nothing stored (409 CONFIG_TOKEN_INVALID, rejected). When the token belongs to another Slack user than before, warnings says so: that user becomes the collaborator of every app made from now on. The response and the set_slack_secret receipt carry the last four characters only, and the value is in no log or error. API keys are refused.
Auth: cookie session only; no scope. Idempotency-Key: ignored.
cookieSession__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.
id*stringThe workspace's id.
^([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)$uuidX-Requested-With?"werft-web"Required with a cookie session: the literal werft-web.
"werft-web"application/json- body
value*string^[\x21-\x7e]+$8 <= length <= 4096Stored; the summary as GET now answers it, the receipt and any warnings.
application/json- response
configured*booleanlast4*|nullupdated_at*|nullupdated_by*|nullurls*state*string"unset""active""needs_reentry"expires_at*|nullissuer*|nullreceipt_id*string^([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)$uuidwarnings*array<>curl -X PUT 'https://example.com/v1/workspaces/497f6eca-6276-4993-bfeb-53cbbbba6f08/slack/config-token' \ -H 'Content-Type: application/json' \ -d '{ "value": "<refresh-token-from-api.slack.com>"}'{ "configured": true, "last4": "a9f3", "updated_at": "2026-10-23T09:00:00Z", "updated_by": { "user_id": "3e7f1a90-5c2d-4b8e-8f61-2a9d0c4b7e35", "display_name": "Jae" }, "urls": { "redirect_url": "https://werft.example.com/settings/linked-accounts/slack", "events_url_template": "https://werft.example.com/v1/slack/events/{agent_id}" }, "state": "active", "expires_at": "2026-10-23T21:00:00Z", "issuer": { "user_id": "U0ISSUER", "team_id": "T0TEAM" }, "receipt_id": "c4a1e9d2-7b3f-4e8a-a6c5-1d2e3f4a5b6c", "warnings": []}