返回博客
Guide

Set a Slack Status With the API: users.profile.set, With Code

To set a Slack status through the API, call users.profile.set with a user token that has users.profile:write and a profile containing status_text, status_emoji and status_expiration. Curl and Python examples, how to read and clear a status, and why a bot token cannot set yours.

Slack Green Team
September 23, 2026
September 23, 2026
5 min read
Share:
slack api
slack status
developers

To set a Slack status with the API, call users.profile.set with a user token that has the users.profile:write scope, and send a profile object with status_text, status_emoji and, optionally, status_expiration as a Unix timestamp. Slack's developer docs say status text holds up to 100 characters without formatting, the emoji must be installed in the workspace, and an expiration of 0 means the status never clears. To clear a status, set both text and emoji to empty strings. Bot users have no profile, so a bot token cannot set your status; admins on paid plans can set another user's status by passing user.

Status is the emoji and text. Your green or grey dot is presence, a separate API with different rules: users.setPresence takes only auto or away. If you want the dot green during working hours, Slack Green handles that from the cloud.

Set a Slack status with the API: users.profile.set, users.profile:write, status_expiration, users.profile.get

Slack status fields

Slack status fields in the user profile: status_text, status_emoji, status_expiration, clearing
FieldTypeRules
status_textstringUp to 100 characters, no formatting or mentions
status_emojistringAn emoji code in the workspace, such as :palm_tree:
status_expirationintegerUnix time when it clears; 0 means never

Set your status with curl

Use a user token (xoxp-) with users.profile:write:

curl -s -X POST https://slack.com/api/users.profile.set \
  -H "Authorization: Bearer $SLACK_USER_TOKEN" \
  -H "Content-Type: application/json; charset=utf-8" \
  -d '{"profile": {"status_text": "Focus time", "status_emoji": ":headphones:", "status_expiration": 0}}'

Slack recommends JSON; with a form-encoded POST, profile must be a URL-encoded JSON string.

To clear it:

curl -s -X POST https://slack.com/api/users.profile.set \
  -H "Authorization: Bearer $SLACK_USER_TOKEN" \
  -H "Content-Type: application/json; charset=utf-8" \
  -d '{"profile": {"status_text": "", "status_emoji": ""}}'

Set a status that expires, in Python

再也不会在Slack上显示「离开」

云端运行。无需下载。即使笔记本关机也能24/7运行。

import os, time
from slack_sdk import WebClient

client = WebClient(token=os.environ["SLACK_USER_TOKEN"])

# "In a meeting" for the next 45 minutes
client.users_profile_set(profile={
    "status_text": "In a meeting",
    "status_emoji": ":calendar:",
    "status_expiration": int(time.time()) + 45 * 60,
})

Wire this to a calendar or a cron job to build your own status automation. Slack's Google Calendar and Outlook apps already do it for meetings; see sync Slack status with Google Calendar. To copy your Microsoft Teams presence into your Slack status, see how to connect Slack and Teams.

Read a user's status

profile = client.users_profile_get(user="U0123ABCD")["profile"]
print(profile["status_emoji"], profile["status_text"], profile["status_expiration"])

users.profile.get needs users.profile:read. Profiles returned by users.list and users.info also include status, with users:read. To be told when a status changes, subscribe to user_change in the Events API.

Which method and scope to use

Which Slack API method and scope to use for status and presence
TaskMethodScope
Set your own statususers.profile.setusers.profile:write (user token)
Set another user's statususers.profile.set with userAdmin on a paid team
Read one statususers.profile.getusers.profile:read
Read everyone'susers.listusers:read
Status changesuser_change eventEvents API
Set away or autousers.setPresenceusers:write

Getting a user token is covered in Slack bot token: xoxb vs xoxp. Presence methods, fields and rate limits are in our Slack presence API guide.

Set a Slack status from the terminal

再也不会在Slack上显示「离开」

云端运行。无需下载。即使笔记本关机也能24/7运行。

Put the curl command in a shell alias or script:

slack_status() {
  curl -s -X POST https://slack.com/api/users.profile.set \
    -H "Authorization: Bearer $SLACK_USER_TOKEN" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d "{\"profile\": {\"status_text\": \"$1\", \"status_emoji\": \"$2\"}}"
}
slack_status "Deploying" ":rocket:"

Keep the token in your keychain or an environment variable, never in the script file.

FAQ

How do I set my Slack status with the API?

Call users.profile.set with a user token that has users.profile:write, sending status_text and status_emoji inside profile.

Can a bot set my Slack status?

No. Bots have no profile. Use a user token; admins on paid plans can set other users' statuses.

How do I make an API status expire?

Set status_expiration to a Unix timestamp. 0 means it never clears.

How do I get a user's status with the API?

users.profile.get with users.profile:read, or read profile from users.info.

Can the API set me to active?

No. users.setPresence accepts only auto or away; see script to keep Slack active.

Always Active

别再晃动鼠标了。

数百名远程工作者再也不用担心Slack状态。设置一次,永远保持绿色。

Related Articles

Guide

Slack Jira Integration: Setup, /jira Commands and Notifications

Install the Jira Cloud for Slack app, type /jira connect in a channel to send a Jira space's updates there, /jira notify for personal notifications as DMs, and create work items from any message with More actions. Every /jira command, Jira automation to Slack, and fixes when previews or notifications stop.

Slack Green Team5 min read
Guide

How to Create a Slack Workspace, on Desktop or Phone

Go to slack.com/get-started, enter your email, type the confirmation code, and click Create a Workspace. It is free to start, you become the Primary Owner, and it takes about five minutes. Steps for desktop, iPhone and Android, and what to set up next.

Slack Green Team5 min read
Guide

Slack Sidebar Sections: Create, Sort, Share and Fix Them

Slack sidebar sections are custom groups of channels, DMs and apps in your sidebar. Only you see them, and they need a paid plan. How to create one on desktop and mobile, move many channels at once, sort and filter each section, share a section with your team, and get disappeared sections back.

Slack Green Team5 min read
    Slack API Set User Status: users.profile.set With Code