Skip to main content
Workspace messaging API for sending messages, reading channel history, and managing channels. Use GET with query params for read endpoints (conversations.list, conversations.history, users.list, users.lookupByEmail) — POST with a JSON body silently drops filter params on some reads. Use POST with JSON body for writes (chat.postMessage, conversations.open). External Slack Connect users are NOT in users.list — resolve them via conversations.list + conversations.history user_profile blocks. search.messages requires the umbrella search:read scope (granular variants do not satisfy it). 6 example endpoints available through Lava’s AI Gateway. See the Slack API docs for full documentation.
This provider requires your own credentials — connect your API key or OAuth account before use.
This is a catch-all provider — any valid URL under https://slack.com is supported. 200+ Slack Web API methods. Construct URL as https://slack.com/api/{method_name}. See https://api.slack.com/methods for full reference. The endpoints below are curated examples.

Endpoints

Send a message to a channel

POST https://slack.com/api/chat.postMessage — Free
const data = await lava.gateway('https://slack.com/api/chat.postMessage', { body: {"channel":"C01234567","text":"Hello from Lava!"} });

Get channel message history. GET with query params — passing filters in a JSON POST body is silently ignored by Slack for some read endpoints.

GET https://slack.com/api/conversations.history?channel=C01234567&limit=10 — Free
const data = await lava.gateway('https://slack.com/api/conversations.history?channel=C01234567&limit=10', { method: 'GET' });

List channels in workspace. GET with query params — POST with types in a JSON body is silently dropped and returns public channels regardless of the filter. Use types=im,mpim for DMs and group DMs, public_channel for public channels, private_channel for private.

GET https://slack.com/api/conversations.list?types=public_channel&limit=100 — Free
const data = await lava.gateway('https://slack.com/api/conversations.list?types=public_channel&limit=100', { method: 'GET' });

Open or resume a DM channel with a user. Required before chat.postMessage for DMs — pass the returned channel ID to chat.postMessage. Works even if the DM is already open (already_open: true is normal).

POST https://slack.com/api/conversations.open — Free
const data = await lava.gateway('https://slack.com/api/conversations.open', { body: {"users":"U01234567"} });

List users in the workspace. Internal members only — external Slack Connect users do NOT appear here. Resolve external users via conversations.list + conversations.history user_profile blocks.

GET https://slack.com/api/users.list — Free
const data = await lava.gateway('https://slack.com/api/users.list', { method: 'GET' });

Find a user by email. Confirm the exact email domain with the caller before using — corporate TLDs are often non-standard (e.g. .capital, .vc). GET with email as a query param.

GET https://slack.com/api/users.lookupByEmail?email=user@example.com — Free
const data = await lava.gateway('https://slack.com/api/users.lookupByEmail?email=user@example.com', { method: 'GET' });

Next Steps

All Providers

Browse all supported AI providers

Forward Proxy

Learn how to construct proxy URLs and authenticate requests