Slack Data API: workspace chat, users and files
Slack's Android client finds a workspace by email or domain (/v1/workspaces/lookup), signs the member in at /v1/workspaces/{workspaceId}/sessions (token, member_id, member_email), then hydrates Home with /v1/workspaces/{workspaceId}/boot — me, workspace, channels, direct_messages, prefs, dnd and plan_features — while sidebar dots come from /v1/workspaces/{workspaceId}/badge-counts.
The conversation view pages /v1/channels/{channelId}/timeline (messages, has_more, pin_count) and headers load from /v1/channels/{channelId}/details. Profile cards read /v1/members/{memberId}/card for email, title, phone, pronouns and presence; the Files tab lists /v1/channels/{channelId}/shared-files; Search runs /v1/workspace-search/{module}. Writes — /v1/channels/{channelId}/messages, /v1/me/presence and /v1/me/notification-pause — carry the same workspace session token, and /v1/realtime/socket-tickets issues the live-bus URL. Paths shown are an illustrative model of the data, not a published developer API.
Slack (package com.Slack, versionName 26.09.30.0) is Salesforce's Android client for workspace chat, channels, DMs, files, search and huddles. This page documents an illustrative data surface modelled on the app's screens: a workspace lookup at /v1/workspaces/lookup and a password or magic-link sign-in at /v1/workspaces/{workspaceId}/sessions (token, member_id, member_email), then a Home bootstrap at /v1/workspaces/{workspaceId}/boot (me, workspace, channels, direct_messages, prefs, dnd, plan_features) and sidebar badges from /v1/workspaces/{workspaceId}/badge-counts. Channel timelines page at /v1/channels/{channelId}/timeline (messages, has_more, pin_count), profile cards come from /v1/members/{memberId}/card (full_name, email, title, presence), shared files from /v1/channels/{channelId}/shared-files and full-text search from /v1/workspace-search/{module}. Writes such as posting a message, setting presence and pausing notifications ride the workspace session token, and /v1/realtime/socket-tickets returns the live message-bus URL.
Screenshots
API surface
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
Illustrative example reconstructed from the app's interface — not a live capture.
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" } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the 'find your workspace' step of the sign-in flowSSO provider list matches the single-sign-on chooser
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
Illustrative example reconstructed from the app's interface — not a live capture.
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]" }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the password / magic-link sign-in screentoken + member id pair matches what the app persists after login
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
Illustrative example reconstructed from the app's interface — not a live capture.
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": [] }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the Home tab's first paint after sign-infield groups mirror the sidebar sections (channels, DMs, starred)
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
Illustrative example reconstructed from the app's interface — not a live capture.
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" }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the sidebar unread dots and mention pillsapp_badge matches the launcher icon badge count
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
Illustrative example reconstructed from the app's interface — not a live capture.
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" }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the live typing indicators and instant message deliveryreconnect-with-fallback behaviour after network changes
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
Illustrative example reconstructed from the app's interface — not a live capture.
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=" }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the conversation view's scroll-back pagingpin count and 'N new messages' banner map to pin_count / unread_count_display
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
Illustrative example reconstructed from the app's interface — not a live capture.
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" } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the channel header and channel-details sheettopic / description / member count shown on the details screen
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
Illustrative example reconstructed from the app's interface — not a live capture.
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" } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the message composer and 'also send to channel' thread optionclient_msg_id de-duplication seen on optimistic sends
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
Illustrative example reconstructed from the app's interface — not a live capture.
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" } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the member profile card opened from a message avatarstatus, local time and pronouns rows on the card
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
Illustrative example reconstructed from the app's interface — not a live capture.
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 } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the channel Files tabpage / total counters match the file list's infinite scroll
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
Illustrative example reconstructed from the app's interface — not a live capture.
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" ] } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the Search tab's Messages / Files / People pivotsfrom: / in: filter chips map to filter_suggestions
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
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/me/presence HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json { "presence": "away" }{ "ok": true, "presence": "away" }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the 'set yourself as away' toggle in the You tab
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
Illustrative example reconstructed from the app's interface — not a live capture.
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 }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the 'pause notifications' duration pickerremaining-time countdown shown next to the bell icon
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
Illustrative example reconstructed from the app's interface — not a live capture.
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 } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the workspace directory header countsguest-type split mirrors the admin member filter
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.
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