curl -X POST "https://app.runtm.com/api/v1/slack/integration" \
-H "Authorization: Bearer runtm_xxx" \
-H "X-Organization-Id: org_abc123" \
-H "Content-Type: application/json" \
-d '{
"bot_token": "xoxb-xxxx-xxxx-xxxx",
"signing_secret": "abc123def456ghi",
"service_user_id": "usr_xyz",
"default_agent": "claude-code",
"rate_limit_per_hour": 30
}'
import requests
resp = requests.post(
"https://app.runtm.com/api/v1/slack/integration",
headers={
"Authorization": "Bearer runtm_xxx",
"X-Organization-Id": "org_abc123",
"Content-Type": "application/json",
},
json={
"bot_token": "xoxb-xxxx-xxxx-xxxx",
"signing_secret": "abc123def456ghi",
"service_user_id": "usr_xyz",
"default_agent": "claude-code",
"rate_limit_per_hour": 30,
},
)
print(resp.json())
const resp = await fetch(
"https://app.runtm.com/api/v1/slack/integration",
{
method: "POST",
headers: {
Authorization: "Bearer runtm_xxx",
"X-Organization-Id": "org_abc123",
"Content-Type": "application/json",
},
body: JSON.stringify({
bot_token: "xoxb-xxxx-xxxx-xxxx",
signing_secret: "abc123def456ghi",
service_user_id: "usr_xyz",
default_agent: "claude-code",
rate_limit_per_hour: 30,
}),
}
);
const data = await resp.json();
{
"connected": true,
"connection_type": "manual",
"managed_app_available": true,
"team_name": "Acme Corp",
"bot_user_id": "U01ABC123",
"service_user_id": "usr_xyz",
"default_template": null,
"default_github_repo": null,
"default_agent": "claude-code",
"rate_limit_per_hour": 30,
"enabled": true,
"interactivity_confirmed": true,
"channel_repo_map": null,
"service_account_health": { "healthy": true, "issues": [] }
}
Slack
Save Integration
Save or update the Slack integration configuration.
POST
/
api
/
v1
/
slack
/
integration
curl -X POST "https://app.runtm.com/api/v1/slack/integration" \
-H "Authorization: Bearer runtm_xxx" \
-H "X-Organization-Id: org_abc123" \
-H "Content-Type: application/json" \
-d '{
"bot_token": "xoxb-xxxx-xxxx-xxxx",
"signing_secret": "abc123def456ghi",
"service_user_id": "usr_xyz",
"default_agent": "claude-code",
"rate_limit_per_hour": 30
}'
import requests
resp = requests.post(
"https://app.runtm.com/api/v1/slack/integration",
headers={
"Authorization": "Bearer runtm_xxx",
"X-Organization-Id": "org_abc123",
"Content-Type": "application/json",
},
json={
"bot_token": "xoxb-xxxx-xxxx-xxxx",
"signing_secret": "abc123def456ghi",
"service_user_id": "usr_xyz",
"default_agent": "claude-code",
"rate_limit_per_hour": 30,
},
)
print(resp.json())
const resp = await fetch(
"https://app.runtm.com/api/v1/slack/integration",
{
method: "POST",
headers: {
Authorization: "Bearer runtm_xxx",
"X-Organization-Id": "org_abc123",
"Content-Type": "application/json",
},
body: JSON.stringify({
bot_token: "xoxb-xxxx-xxxx-xxxx",
signing_secret: "abc123def456ghi",
service_user_id: "usr_xyz",
default_agent: "claude-code",
rate_limit_per_hour: 30,
}),
}
);
const data = await resp.json();
{
"connected": true,
"connection_type": "manual",
"managed_app_available": true,
"team_name": "Acme Corp",
"bot_user_id": "U01ABC123",
"service_user_id": "usr_xyz",
"default_template": null,
"default_github_repo": null,
"default_agent": "claude-code",
"rate_limit_per_hour": 30,
"enabled": true,
"interactivity_confirmed": true,
"channel_repo_map": null,
"service_account_health": { "healthy": true, "issues": [] }
}
Creates or updates the Slack integration for the active organization. For self-hosted setups, provide the bot token and signing secret. For settings-only updates on an existing integration, pass
"__unchanged__" as the bot_token.
Requires org admin role.
Required scope: integrations:write
Requires organization context via the
X-Organization-Id header.string
required
The organization to configure.
string
required
Slack Bot User OAuth Token (
xoxb-...). Use "__unchanged__" for settings-only updates.string
required
Slack App Signing Secret. Min 10 characters.
string
required
Runtime user ID for the service account that runs agent sessions.
string
Default sandbox template.
string
Default GitHub repo (
owner/repo).string
default:"claude-code"
Default coding agent.
integer
default:"30"
Maximum agent launches per hour. Range: 1–100.
object
Channel ID to GitHub repo mapping.
boolean
required
Always
true for a successful save.string
Slack workspace name.
boolean
required
Whether the integration is enabled.
curl -X POST "https://app.runtm.com/api/v1/slack/integration" \
-H "Authorization: Bearer runtm_xxx" \
-H "X-Organization-Id: org_abc123" \
-H "Content-Type: application/json" \
-d '{
"bot_token": "xoxb-xxxx-xxxx-xxxx",
"signing_secret": "abc123def456ghi",
"service_user_id": "usr_xyz",
"default_agent": "claude-code",
"rate_limit_per_hour": 30
}'
import requests
resp = requests.post(
"https://app.runtm.com/api/v1/slack/integration",
headers={
"Authorization": "Bearer runtm_xxx",
"X-Organization-Id": "org_abc123",
"Content-Type": "application/json",
},
json={
"bot_token": "xoxb-xxxx-xxxx-xxxx",
"signing_secret": "abc123def456ghi",
"service_user_id": "usr_xyz",
"default_agent": "claude-code",
"rate_limit_per_hour": 30,
},
)
print(resp.json())
const resp = await fetch(
"https://app.runtm.com/api/v1/slack/integration",
{
method: "POST",
headers: {
Authorization: "Bearer runtm_xxx",
"X-Organization-Id": "org_abc123",
"Content-Type": "application/json",
},
body: JSON.stringify({
bot_token: "xoxb-xxxx-xxxx-xxxx",
signing_secret: "abc123def456ghi",
service_user_id: "usr_xyz",
default_agent: "claude-code",
rate_limit_per_hour: 30,
}),
}
);
const data = await resp.json();
{
"connected": true,
"connection_type": "manual",
"managed_app_available": true,
"team_name": "Acme Corp",
"bot_user_id": "U01ABC123",
"service_user_id": "usr_xyz",
"default_template": null,
"default_github_repo": null,
"default_agent": "claude-code",
"rate_limit_per_hour": 30,
"enabled": true,
"interactivity_confirmed": true,
"channel_repo_map": null,
"service_account_health": { "healthy": true, "issues": [] }
}