Slack icon

Slack Data API: workspace chat, users and files

SLACK TECHNOLOGIES L.L.C. · Communication

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

  • Slack screenshot 1
  • Slack screenshot 2
  • Slack screenshot 3
  • Slack screenshot 4
  • Slack screenshot 5
  • Slack screenshot 6
  • Slack screenshot 7
  • Slack screenshot 8

API surface

  • Look up a workspace by email or domain

    POST /v1/workspaces/lookup osint

    Resolves 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 flow
    • SSO provider list matches the single-sign-on chooser
  • Sign in and mint a workspace session token

    POST /v1/workspaces/{workspaceId}/sessions osint

    Authenticates 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 screen
    • token + member id pair matches what the app persists after login
  • Bootstrap the signed-in client session

    POST /v1/workspaces/{workspaceId}/boot opendata

    Hydrates 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-in
    • field groups mirror the sidebar sections (channels, DMs, starred)
  • Read unread, mention and thread counts

    POST /v1/workspaces/{workspaceId}/badge-counts opendata

    Returns 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 pills
    • app_badge matches the launcher icon badge count
  • Issue a live-message socket ticket

    POST /v1/realtime/socket-tickets opendata

    Mints 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 delivery
    • reconnect-with-fallback behaviour after network changes
  • Page a channel or DM message timeline

    POST /v1/channels/{channelId}/timeline opendata

    Pages 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 paging
    • pin count and 'N new messages' banner map to pin_count / unread_count_display
  • Load channel metadata for the sidebar

    POST /v1/channels/{channelId}/details opendata

    Returns 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 sheet
    • topic / description / member count shown on the details screen
  • Post a channel or thread message

    POST /v1/channels/{channelId}/messages opendata

    Sends 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 option
    • client_msg_id de-duplication seen on optimistic sends
  • Read a member profile card

    POST /v1/members/{memberId}/card osint

    Returns 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
    • email
    • 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 avatar
    • status, local time and pronouns rows on the card
  • List files shared in a channel

    POST /v1/channels/{channelId}/shared-files opendata

    Pages 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 tab
    • page / total counters match the file list's infinite scroll
  • Search messages, files and people

    POST /v1/workspace-search/{module} opendata

    Runs 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 pivots
    • from: / in: filter chips map to filter_suggestions
  • Set the member's manual presence

    POST /v1/me/presence opendata

    Writes 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-pause opendata

    Turns 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 picker
    • remaining-time countdown shown next to the bell icon
  • Read workspace member-count breakdown

    POST /v1/workspaces/{workspaceId}/member-census opendata

    Returns 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 counts
    • guest-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

Get a quote