Slack Data API: workspace chat, users and files
Slack is the workplace messaging app from Slack Technologies — the company co-founded by Stewart Butterfield that launched Slack publicly in 2014 and sold it to Salesforce in 2021 in a deal valued at about $27.7 billion — and it replaces internal email chains with a searchable workspace organized around channels. On Android, a member finds their workspace by email address or company domain and signs in with a password, a magic link or the company's single sign-on (for example Okta over SAML), landing on a Home tab whose sidebar groups starred items, public and private channels and direct messages, each marked with unread dots and mention badges that roll up into the count on the app icon. Conversations scroll back past pinned messages and an "N new messages" banner, replies branch into threads that can also be sent to the channel, a Saved list holds messages to come back to, and the channel-details sheet shows the topic, description and member count. New messages, typing indicators and presence arrive instantly over a live connection that fails over automatically when the network changes. Shared channels, branded Slack Connect, link a workspace with people at partner organizations, and multi-channel and single-channel guests sit alongside full members, admins, owners and bots; tapping an avatar opens a profile card with title, pronouns, local time, an active-or-away presence and a custom status such as "In a huddle", and members can start huddles for quick audio or video calls. The Files tab collects shared documents, images and canvases, the Search tab pivots across messages, files, people and channels with from: and in: filters, and the You tab lets a member set themselves away, pause notifications for a chosen duration with Do Not Disturb and switch between several workspaces from one app, with paid workspaces unlocking extras such as enterprise search. Slack competes in team chat with Microsoft Teams, Google Chat, Zoom Workplace, Discord, Mattermost and Cisco Webex, and its Android app is used by companies and distributed teams across the United States, India, Brazil and beyond to coordinate projects, share announcements and run incident response.
Channel, DM and thread messages come back as timeline records — author_id, text, ts, thread_ts and reply_count per message, a client-generated client_msg_id that de-duplicates optimistic sends, paging through has_more and next_cursor, deleted_ts for removed posts and the conversation's pin_count and unread_count_display on top. A posted message returns the canonical ts and channel_id, and a thread reply records whether it also went to the channel via also_send_to_channel; a live-connection ticket (primary_url, fallback_url, ttl_seconds, region) is what pushes new messages, typing and presence to the client between polls. Around the timelines sit per-conversation counters — has_unreads, mention_count, latest_ts, last_read_ts and a history_stale flag across channels, group DMs and DMs, plus thread and saved-item unread counts and the app_badge total with its fetched_at timestamp.
Before any of that, workspace discovery resolves an email or domain into workspace_id, workspace_name, workspace_url, email_domains, sso_enabled, password_signin_allowed, device_check_required, the sso_providers list and icons, and sign-in mints the session token alongside member_id and member_email. The post-sign-in boot record then carries the signed-in me and workspace, the channels and direct_messages lists, starred items, prefs, the dnd window, plan_features, other_workspaces and an optional rotated_token, all versioned by cache_version and unchanged_channel_ids. Channel records add topic, description, creator_id, created, member_count, unread_count and the is_private, is_archived, is_member, is_shared and is_external flags that separate Slack Connect channels from internal ones. Member profile cards carry handle, full_name, display_name, email, title, phone, pronouns, status, timezone, tz_offset, locale, presence, has_2fa, deactivated, avatar sizes and admin/owner/guest/bot role flags, while the workspace census splits headcount into full members, guests_multi_channel, guests_single_channel, admins, owners, bots, deactivated, invited, online and active. Shared-file listings return id, created, title, name, filetype, mimetype, size, owner_id, channel_ids, comments_count, is_external, download_url and permalink under a paging block with total and pages; search results come back as items with pagination and filter_suggestions for the messages, files, people and channels modules named in module; a manual presence write sets presence; and a Do Not Disturb pause reports paused, ends_at, remaining_seconds and indefinite.
HR and IT teams can keep a staff directory in sync with the census and profile cards without scraping the People tab, and security teams can check each member's has_2fa and role against the workspace's sso_enabled setting. A secondary inbox or on-call bot can poll the unread counters and page a timeline only when history_stale flips, surfacing just the conversations that still have unreads; compliance teams can walk shared files channel by channel to build retention or DLP inventories of documents and canvases keyed by the same file id values the Files tab shows; and postmortem wikis can store incident-keyword search hits — query, items and pagination — to cite exactly what the in-app Search tab returned. openData Studio turns these message, channel, member, file and workspace records into callable open data for those integrations.
Screenshots
API surface
The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.
Look up a workspace by email or domain
POST
/v1/workspaces/lookuposintResolves an email or workspace domain to the workspace id, name, URL and SSO flags the sign-in screen needs before a password, magic-link or SAML handoff.
Auth: None — public workspace discovery before sign-in. Later calls carry the session token minted at sign-in.
- workspace_id
- workspace_name
- workspace_url
- email_domains
- sso_enabled
- password_signin_allowed
- device_check_required
- sso_providers
- icons
POST /v1/workspaces/lookup HTTP/1.1 Content-Type: application/json { "email": "[email protected]" }{ "ok": true, "workspace_id": "W7Q2K9D", "workspace_name": "Example Corp", "workspace_url": "https://example-corp.example.com/", "email_domains": [ "example.com" ], "sso_enabled": true, "password_signin_allowed": false, "device_check_required": false, "sso_providers": [ { "name": "Okta", "type": "saml" } ], "icons": { "small": "https://cdn.example.com/ws/w7q2k9d_68.png", "large": "https://cdn.example.com/ws/w7q2k9d_132.png" } }Sign in and mint a workspace session token
POST
/v1/workspaces/{workspaceId}/sessionsosintAuthenticates the member against a workspace and returns the session token plus member and workspace ids that every subsequent signed-in call carries.
Auth: Email + password (or magic-link code). The returned token authorizes every later signed-in call.
- workspace_id
- token
- member_id
- member_email
POST /v1/workspaces/W7Q2K9D/sessions HTTP/1.1 Content-Type: application/json { "email": "[email protected]", "password": "<redacted>" }{ "ok": true, "workspace_id": "W7Q2K9D", "token": "sess_example_7f3a9c21", "member_id": "M4H8P2L", "member_email": "[email protected]" }Bootstrap the signed-in client session
POST
/v1/workspaces/{workspaceId}/bootopendataHydrates the Home tab after sign-in: the signed-in member, workspace, DM and channel lists, DND window, user prefs, plan feature flags and an optional rotated session token.
Auth: Authorization: Bearer <workspace session token> issued by the workspace sign-in call
- me
- workspace
- cache_version
- direct_messages
- channels
- dnd
- prefs
- emoji_cache_ts
- starred
- plan_features
- rotated_token
- other_workspaces
- unchanged_channel_ids
POST /v1/workspaces/W7Q2K9D/boot HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json { "cache_version": "v12", "since": 1759000000 }{ "ok": true, "me": { "id": "M4H8P2L", "handle": "alex.rivera", "full_name": "Alex Rivera", "workspace_id": "W7Q2K9D", "timezone": "America/Los_Angeles", "presence": "active" }, "workspace": { "id": "W7Q2K9D", "name": "Example Corp", "subdomain": "example-corp" }, "cache_version": "v12", "direct_messages": [ { "id": "DM91X2", "member_id": "M0A1B2C" } ], "channels": [ { "id": "CH55Y7", "name": "platform" } ], "dnd": { "enabled": false, "next_start": 0, "next_end": 0 }, "prefs": { "muted_channels": [], "highlight_words": [] }, "emoji_cache_ts": 1758900000, "starred": [ "CH55Y7" ], "plan_features": [ "enterprise_search" ], "rotated_token": "sess_example_rotated", "other_workspaces": [ { "id": "W7Q2K9D", "name": "Example Corp" } ], "unchanged_channel_ids": [] }Read unread, mention and thread counts
POST
/v1/workspaces/{workspaceId}/badge-countsopendataReturns per-channel, group-DM and DM unread/mention counters plus thread and saved-item badges that drive the sidebar dots and the app-icon badge.
Auth: Authorization: Bearer <workspace session token> issued by the workspace sign-in call
- channels
- group_dms
- direct_messages
- threads
- saved
- app_badge
- fetched_at
- has_unreads
- mention_count
- latest_ts
- last_read_ts
- history_stale
POST /v1/workspaces/W7Q2K9D/badge-counts HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json { "include_threads": true, "include_files": true }{ "ok": true, "channels": [ { "id": "CH55Y7", "has_unreads": true, "mention_count": 2, "latest_ts": "1759000123.000200", "last_read_ts": "1758996400.000100", "history_stale": false } ], "group_dms": [], "direct_messages": [ { "id": "DM91X2", "has_unreads": false, "mention_count": 0, "latest_ts": "1758980000.000050", "last_read_ts": "1758980000.000050", "history_stale": false } ], "threads": { "has_unreads": true, "mention_count": 1, "unread_count": 4 }, "saved": { "unread_count": 0 }, "app_badge": 3, "fetched_at": "1759000400.000000" }Issue a live-message socket ticket
POST
/v1/realtime/socket-ticketsopendataMints a short-lived websocket URL (plus fallback and TTL) the Android client uses for the real-time message, typing and presence bus.
Auth: Authorization: Bearer <workspace session token> issued by the workspace sign-in call
- primary_url
- fallback_url
- ttl_seconds
- region
POST /v1/realtime/socket-tickets HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json { "workspace_id": "W7Q2K9D" }{ "ok": true, "primary_url": "wss://rt.example.com/socket?ticket=<redacted>", "fallback_url": "wss://rt-backup.example.com/socket?ticket=<redacted>", "ttl_seconds": 3600, "region": "us-east" }Page a channel or DM message timeline
POST
/v1/channels/{channelId}/timelineopendataPages the message timeline for a channel, private group or DM (messages, has_more, pin_count, unread_count_display) that the conversation view renders.
Auth: Authorization: Bearer <workspace session token> issued by the workspace sign-in call
- messages
- has_more
- pin_count
- oldest_ts
- latest_ts
- is_limited
- unread_count_display
- deleted_ts
- next_cursor
- author_id
- text
- ts
- client_msg_id
- thread_ts
- reply_count
POST /v1/channels/CH55Y7/timeline HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json { "limit": 50, "before_ts": null, "inclusive": true }{ "ok": true, "messages": [ { "type": "message", "author_id": "M4H8P2L", "text": "Ship the billing hotfix after standup", "ts": "1759000123.000200", "client_msg_id": "8c3e1a90-4b11-4d2e-a7c4-0f8e6b1d2a33", "thread_ts": null, "reply_count": 0 } ], "has_more": true, "pin_count": 1, "oldest_ts": "1758800000.000001", "latest_ts": "1759000123.000200", "is_limited": false, "unread_count_display": 3, "deleted_ts": [], "next_cursor": "Y3Vyc29yOjE3NTg3OTk5MDA=" }Load channel metadata for the sidebar
POST
/v1/channels/{channelId}/detailsopendataReturns channel records (id, name, topic, description, membership flags, unread_count, member_count) used to paint channel headers and the sidebar roster.
Auth: Authorization: Bearer <workspace session token> issued by the workspace sign-in call
- channel
- id
- name
- created
- creator_id
- is_private
- is_archived
- is_member
- is_shared
- is_external
- topic
- description
- member_count
- unread_count
- last_read_ts
- latest_ts
- workspace_id
POST /v1/channels/CH55Y7/details HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json { "include_counts": true }{ "ok": true, "channel": { "id": "CH55Y7", "name": "platform", "created": 1609459200, "creator_id": "M4H8P2L", "is_private": false, "is_archived": false, "is_member": true, "is_shared": false, "is_external": false, "topic": { "value": "On-call + incidents", "set_by": "M4H8P2L", "set_at": 1758000000 }, "description": { "value": "Platform engineering", "set_by": "M4H8P2L", "set_at": 1609459300 }, "member_count": 42, "unread_count": 3, "last_read_ts": "1758996400.000100", "latest_ts": "1759000123.000200", "workspace_id": "W7Q2K9D" } }Post a channel or thread message
POST
/v1/channels/{channelId}/messagesopendataSends a composed message (or thread reply) into a channel or DM and returns the canonical ts, channel id and message payload the composer then pins locally.
Auth: Authorization: Bearer <workspace session token> issued by the workspace sign-in call
- ts
- channel_id
- message
- text
- client_msg_id
- thread_ts
- also_send_to_channel
- author_id
POST /v1/channels/CH55Y7/messages HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json { "text": "Ship the billing hotfix after standup", "client_msg_id": "8c3e1a90-4b11-4d2e-a7c4-0f8e6b1d2a33", "thread_ts": null, "also_send_to_channel": false }{ "ok": true, "ts": "1759000123.000200", "channel_id": "CH55Y7", "message": { "type": "message", "author_id": "M4H8P2L", "text": "Ship the billing hotfix after standup", "ts": "1759000123.000200", "client_msg_id": "8c3e1a90-4b11-4d2e-a7c4-0f8e6b1d2a33" } }Read a member profile card
POST
/v1/members/{memberId}/cardosintReturns the member record behind a profile card: id, workspace, full name, email, title, phone, pronouns, status, timezone, admin/guest flags and presence.
Auth: Authorization: Bearer <workspace session token> issued by the workspace sign-in call
- member
- id
- workspace_id
- handle
- deactivated
- full_name
- display_name
- title
- phone
- pronouns
- status
- timezone
- tz_offset
- avatar
- role
- presence
- has_2fa
- locale
POST /v1/members/M4H8P2L/card HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json { "include_locale": true }{ "ok": true, "member": { "id": "M4H8P2L", "workspace_id": "W7Q2K9D", "handle": "alex.rivera", "deactivated": false, "full_name": "Alex Rivera", "display_name": "alex", "email": "[email protected]", "title": "Product Manager", "phone": "+14255550123", "pronouns": "they/them", "status": { "text": "In a huddle", "emoji": ":headphones:", "expires_at": 1759004000 }, "timezone": "America/Los_Angeles", "tz_offset": -25200, "avatar": { "small": "https://cdn.example.com/avatars/alex_72.png", "large": "https://cdn.example.com/avatars/alex_192.png" }, "role": { "is_admin": false, "is_owner": false, "is_guest": false, "is_bot": false }, "presence": "active", "has_2fa": true, "locale": "en-US" } }List files shared in a channel
POST
/v1/channels/{channelId}/shared-filesopendataPages the Files tab for a channel or workspace (id, title, filetype, mimetype, owner, channels, paging.total) used to render shared documents, images and canvases.
Auth: Authorization: Bearer <workspace session token> issued by the workspace sign-in call
- files
- paging
- id
- created
- title
- name
- filetype
- mimetype
- owner_id
- channel_ids
- size
- download_url
- permalink
- is_external
- comments_count
- total
- pages
POST /v1/channels/CH55Y7/shared-files HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json { "page": 1, "per_page": 20, "types": "all" }{ "ok": true, "files": [ { "id": "FL31Z8", "created": 1758900123, "title": "Q3 billing hotfix.pdf", "name": "q3-billing-hotfix.pdf", "filetype": "pdf", "mimetype": "application/pdf", "owner_id": "M4H8P2L", "channel_ids": [ "CH55Y7" ], "size": 248832, "download_url": "https://files.example.com/FL31Z8/q3-billing-hotfix.pdf", "permalink": "https://example-corp.example.com/files/FL31Z8", "is_external": false, "comments_count": 1 } ], "paging": { "per_page": 20, "total": 54, "page": 1, "pages": 3 } }Search messages, files and people
POST
/v1/workspace-search/{module}opendataRuns the in-app search pivots (messages, files, people, channels) and returns query, items, pagination and filter_suggestions for the Search tab.
Auth: Authorization: Bearer <workspace session token> issued by the workspace sign-in call
- query
- module
- filters
- items
- pagination
- filter_suggestions
POST /v1/workspace-search/messages HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json { "query": "billing hotfix", "per_page": 20, "page": 1 }{ "ok": true, "query": "billing hotfix", "module": "messages", "filters": "in:#platform", "items": [ { "id": "1759000123.000200", "channel": { "id": "CH55Y7", "name": "platform" }, "author": "alex.rivera", "text": "Ship the billing hotfix after standup", "ts": "1759000123.000200" } ], "pagination": { "total_count": 12, "page": 1, "per_page": 20, "page_count": 1 }, "filter_suggestions": { "from": [ "M4H8P2L" ], "in": [ "CH55Y7" ] } }Set the member's manual presence
POST
/v1/me/presenceopendataWrites the signed-in member's manual presence (away or auto) that colleagues see on the profile card and DM header.
Auth: Authorization: Bearer <workspace session token> issued by the workspace sign-in call
- ok
- presence
POST /v1/me/presence HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json { "presence": "away" }{ "ok": true, "presence": "away" }Pause notifications (Do Not Disturb)
POST
/v1/me/notification-pauseopendataTurns on Do Not Disturb for a number of minutes and returns the paused flag, end time and remaining seconds for the pause-notifications control.
Auth: Authorization: Bearer <workspace session token> issued by the workspace sign-in call
- paused
- ends_at
- remaining_seconds
- indefinite
POST /v1/me/notification-pause HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json { "minutes": 60 }{ "ok": true, "paused": true, "ends_at": 1759004000, "remaining_seconds": 3600, "indefinite": false }Read workspace member-count breakdown
POST
/v1/workspaces/{workspaceId}/member-censusopendataReturns the workspace census (full members, multi- and single-channel guests, admins, owners, bots, invited, online, active) used by workspace-directory and admin surfaces.
Auth: Authorization: Bearer <workspace session token> issued by the workspace sign-in call
- members
- full
- guests_multi_channel
- guests_single_channel
- admins
- owners
- bots
- deactivated
- invited
- online
- active
POST /v1/workspaces/W7Q2K9D/member-census HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json {}{ "ok": true, "members": { "full": 412, "guests_multi_channel": 18, "guests_single_channel": 6, "admins": 9, "owners": 2, "bots": 27, "deactivated": 41, "invited": 5, "online": 86, "active": 390 } }
Data categories
- workspace identity
- session bootstrap
- unread counts
- channel metadata
- messages
- member profiles
- files
- search
- presence
- do-not-disturb
Where teams use this data
Workspace directory overlay
Pull /v1/members/{memberId}/card (full_name, email, title, phone, pronouns, timezone) plus /v1/workspaces/{workspaceId}/member-census (full, guests, admins, online, active) to keep an HR or IT directory in sync with the Slack workspace census without scraping the People tab.
Channel unread reconciliation
Poll /v1/workspaces/{workspaceId}/badge-counts for per-channel has_unreads, mention_count, latest_ts and last_read_ts, then page /v1/channels/{channelId}/timeline when history_stale flips, so a secondary inbox or on-call bot surfaces only conversations that still have unreads.
Shared-file inventory
Walk /v1/channels/{channelId}/shared-files (id, title, filetype, mimetype, owner_id, channel_ids, paging.total) per channel to build a retention or DLP inventory of documents and canvases sitting in Slack, keyed by the same file ids the Files tab shows.
Search-backed knowledge capture
Replay /v1/workspace-search/messages against incident keywords and store query, items and pagination so a postmortem wiki can cite the same hits the in-app Search tab returned.
Frequently asked questions
How does the Slack Android app authenticate data calls?
A public lookup at /v1/workspaces/lookup resolves the workspace and its SSO options, then /v1/workspaces/{workspaceId}/sessions returns a session token, member_id and member_email. Every later call — boot, timeline, profile card, files, posting — sends that token as a Bearer credential.
Which data powers unread badges and the Home tab?
/v1/workspaces/{workspaceId}/boot hydrates me, workspace, channels, direct_messages, prefs and dnd after sign-in. /v1/workspaces/{workspaceId}/badge-counts then returns per-channel has_unreads, mention_count, latest_ts and last_read_ts plus thread and saved-item badges; live updates arrive over the socket from /v1/realtime/socket-tickets.
Can I read channel messages, files and member profiles?
Yes. /v1/channels/{channelId}/timeline pages messages with ts, text, author_id and has_more; /v1/channels/{channelId}/shared-files returns file id, title, filetype, mimetype and paging; /v1/members/{memberId}/card returns full_name, email, title, phone, pronouns and presence. All require the signed-in workspace token.
Is this Slack's public Web API?
No. The paths on this page are an illustrative model of the data behind the app's screens — sign-in, Home, channels, profiles, files and search — rather than a copy of any production interface or Slack's documented developer platform.
Apps similar to Slack
- Microsoft Teams — Microsoft Teams is a team chat app with nested teams and channels plus meetings of up to 300 participants, and Zapier ranks it with Slack as a frontrunner in workplace chat.
- Google Chat — Google Chat is Google's workplace messenger with direct messages, group messages and spaces, and Zapier compares it directly with Slack for remote teams.
- Zoom Workplace — Zoom Workplace includes Zoom Chat for messages to contacts, groups and channels, and can start a video meeting from a thread or create a chat channel for each meeting.
- Discord — Discord is an instant-messaging and VoIP platform with text and always-on voice channels; Zapier notes people compare it with Slack because the layouts and channel-and-call options overlap.
- Mattermost — Mattermost is a self-hostable team messaging platform for internal company discussion, file sharing and integrations, and is widely described as an alternative to Slack.
- Cisco Webex — Cisco Webex is a collaboration suite whose products include Webex Messaging alongside meetings and calling, aimed at organizations on Cisco's conferencing stack.
More Communication apps
Topics
- slack data api
- slack android data model
- slack channel timeline
- slack unread badge counts
- slack member profile card
- slack shared files inventory
- slack workspace search
- slack workspace session token
- slack do not disturb
- slack workspace member census
Need this app's data API integrated?
We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.
- NDA + SOW on every engagement
- Delivery in 3–7 days
- Payment only after acceptance
- Work scoped to authorized use