Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?


Failed to load latest commit information.
Latest commit message
Commit time


This repository contains API specifications of Slack platform features and APIs.

⚠️ Not Accepting Contributions

Because our specifications are artifacts of an incredible machine, we cannot accept pull requests for this repo. Please file issues with suggestions or bugs with the spec itself. Feedback about the APIs or features the specs describe should be directed to Slack's developer support team.


You'll find OpenAPI specs for the Slack Web API and AsyncAPI specs for the Events API.

Read more about our open specification strategy in this announcement.

Specification menu

We continue to refine and expand schema and example coverage throughout all of our specifications.

How the specs are made

We use a combination of internal metadata, custom scripting, and old fashioned writing-by-hand to produce these specifications. They don't always tell the whole truth and are subject to author and operator error. They are really useful though.

Recent changes

Now we'll recount the major changes found in each new release of our specifications.

Using with external tools


It's possible to use slack_web_openapi_v2.json to generate a Postman Collection, but you must first modify the spec to be technically and factually invalid unfortunately.

Add a top-level "openapi": "3.0" attribute near where "swagger": "2.0" is defined. While openapi isn't a valid attribute for OpenAPI 2.0 schemas, and if it were, the version should be 2.0. Being wrong this way instructs Postman to do continue importing as a collection.

Postman doesn't pick up the defined hostname and path that precedes all Web API methods (for example, as the {{baseUrl}} variable for the collection.

Populate {{baseUrl}} by first hovering over your collection in the navigation bar click on the action menu that appears. Then, select "Edit". A modal will appear. Click into the rightmost section, Variables which should have a green dot next to it. In the Initial Value column next to baseUrl, enter and then click Reset All. Once you see that both the initial and current values have been set, click update and your imported collection will properly use "" as its base domain.