Currently, the Atomicwork Assistant branding requires a manifest file from the Atomicwork team that you then need to upload to your Slack workspace.
A manifest file is a configuration file written in YAML or JSON that defines the structure of a Slack app.
What You’ll Need
A Slack workspace with app creation privileges
A Slack account
Your app’s manifest file (YAML or JSON)
Step-by-Step Instructions
Go to https://<domain>.atomicwork.com/settings/apps/SLACK. If there is an app that is already connected, please disconnect the app.
Generate the manifest using API.
curl --location 'https://<domain>.atomicwork.com/api/channel/slack/customise' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <bearer token>' \ --data '{ "app_name": "<Custom App Name>", "long_description": "<Description, should be atleast 170 characters.>", "type": "SLACK", "short_description": "<Should be atleast 20 characters>" }' curl --location 'https://<domain>.atomicwork.com/api/v1/channel/slack/customise' \ --header 'Content-Type: application/json' \ --header 'X-Api-Key:Access Key' \ --data '{ "app_name": "<Custom App Name>", "long_description": "<Description, should be atleast 170 characters.>", "type": "SLACK", "short_description": "<Should be atleast 20 characters>" }'Copy the response from key “manifest” and unescape string.
Note: Easiest way to do it is using a command line utility called JQ. Copy the
response, and run the command -
pbpaste | jq -r '.manifest' | sed 's/\\n/\n/g' | jq '.’{"manifest":"{ "display_information": { "name": "Test Abhinay", "description": "Test short description", "background_color": "#676f78", "long_description": "Test Test custom slack app for testing the atom slack custom branding apps and credentials. This may need an update in the branding also as well. Test custom slack app for testing the atom slack custom branding apps and credentials. This may need an update in the branding also as well." }, "features": { "app_home": { "home_tab_enabled": true, "messages_tab_enabled": true, "messages_tab_read_only_enabled": false }, "bot_user": { "display_name": "Test Abhinay", "always_online": true }, "shortcuts": [ { "name": "Save as Verified Answer", "type": "message", "callback_id": "atom_add_verified_answer", "description": "Saves message response as Verified Answer" } ] }, "oauth_config": { "redirect_urls": [ "https://esd.atomicwork.com" ], "scopes": { "bot": [ "app_mentions:read", "channels:history", "channels:join", "channels:manage", "channels:read", "chat:write", "chat:write.customize", "chat:write.public", "commands", "conversations.connect:read", "dnd:read", "emoji:read", "files:write", "groups:history", "groups:read", "groups:write", "im:history", "im:read", "im:write", "links:write", "metadata.message:read", "mpim:write", "reactions:read", "reactions:write", "team.preferences:read", "team:read", "users.profile:read", "users:read", "users:read.email", "files:read" ] } }, "settings": { "event_subscriptions": { "request_url": "https://bot.atomicwork.com/api/v1/slack/events/custom-app", "bot_events": [ "app_home_opened", "app_mention", "message.channels", "message.groups", "message.im", "reaction_added", "reaction_removed" ] }, "interactivity": { "is_enabled": true, "request_url": "https://bot.atomicwork.com/api/v1/slack/form/interactive/custom-app", "message_menu_options_url": "https://bot.atomicwork.com/api/v1/slack/form/select-data-sources/custom-app" }, "org_deploy_enabled": false, "socket_mode_enabled": false, "token_rotation_enabled": false } }"}From that copy the entire response from manifest key. It should look like:
{"display_information": {"name": "Test Abhinay", "description": "Test short description", "background_color": "#676f78", "long_description": "Test Test custom slack app for testing the atom slack custom branding apps and credentials. This may need an update in the branding also as well. Test custom slack app for testing the atom slack custom branding apps and credentials. This may need an update in the branding also as well." }, "features": {"app_home": {"home_tab_enabled": true, "messages_tab_enabled": true, "messages_tab_read_only_enabled": false}, "bot_user": {"display_name": "Test Abhinay", "always_online": true}, "shortcuts": [{ "name": "Save as Verified Answer", "type": "message", "callback_id": "atom_add_verified_answer", "description": "Saves message response as Verified Answer" }]}, "oauth_config": {"redirect_urls": [ "https://esd.atomicwork.com"], "scopes": { "bot": ["app_mentions:read", "channels:history", "channels:join", "channels:manage", "channels:read", "chat:write", "chat:write.customize", "chat:write.public", "commands", "conversations.connect:read", "dnd:read", "emoji:read", "files:write", "groups:history", "groups:read", "groups:write", "im:history", "im:read", "im:write", "links:write", "metadata.message:read", "mpim:write", "reactions:read", "reactions:write", "team.preferences:read", "team:read", "users.profile:read", "users:read", "users:read.email", "files:read"]}}, "settings": {"event_subscriptions": {"request_url":"https://bot.atomicwork.com/api/v1/slack/events/custom-app", "bot_events": [ "app_home_opened", "app_mention", "message.channels", "message.groups", "message.im", "reaction_added", "reaction_removed"]}, "interactivity": { "is_enabled": true, "request_url": "https://bot.atomicwork.com/api/v1/slack/form/interactive/custom-app", "message_menu_options_url":"https://bot.atomicwork.com/api/v1/slack/form/select-data-sources/custom-app"}, "org_deploy_enabled": false, "socket_mode_enabled": false, "token_rotation_enabled": false } }Copy the JSON code and navigate to https://api.slack.com/apps. Click on Create New App. Select From a manifest.
Pick a workspace and click on Next
Select the type as JSON and copy in the JSON code.
Ensure these scopes haven't been changed and click on Create.
Permission | Purpose |
app_mentions:read | Receive and process messages where @Atom is mentioned, so the app can respond contextually and trigger relevant workflows. |
channels:history | Read messages in public channels where the app has been added. This lets the app fetch full thread context when a user creates a request from a conversation. |
channels:join | Join public channels when prompted by a workflow action or user request, so the app can post messages and execute actions in those channels. |
channels:read | Read basic information about public channels (names, IDs) to display available channels for routing and workflow configuration. Does not access message content. |
chat:write | Post messages, reply in threads, and update or delete messages sent by the app. Limited to messages the app itself has sent. |
chat:write.customize | Customize the display name and avatar of messages sent by the app, so replies can appear as the relevant agent or responder. |
chat:write.public | Post messages in public channels where the app hasn't been added as a member. Used for workflow notifications and updates that need to reach specific channels. |
conversations.connect:read | Read metadata about Slack Connect shared channels, so users can include shared channels when configuring routing or learning from conversations. Does not access message content. |
files:read | View and download files shared in the workspace. Used when workflows need to process or reference files shared in conversations. |
files:write | Upload and share files within Slack, such as reports, summaries, or workflow-related documents. Limited to files generated by the app. |
groups:read | Read basic metadata of private channels (name, topic, member list) to display them for routing and workflow configuration. Does not access message content. |
groups:write | Post messages in private channels where the app has been added. Used for updates, notifications, and workflow-related messages. |
im:history | Read message history in direct messages between a user and the app. This lets the app reference prior interactions and maintain conversational context. |
im:read | Read basic metadata for DM conversations (channel IDs, user IDs) to identify and manage DMs where the app is active. Does not access message content. |
im:write | Send direct messages to users — for example, to share workflow updates, confirmations, or contextual assistance. |
metadata.message:read | Read structured metadata attached to messages via the Slack Message Metadata API. This lets the app process contextual information (such as workflow identifiers) without accessing message text. |
reactions:read | Read emoji reactions added to messages. Used to detect user signals like acknowledgment or approval within conversations. |
reactions:write | Add emoji reactions to messages to acknowledge user actions, confirm workflow completion, or provide lightweight feedback. |
team.preferences:read | Read workspace-level preferences so the app can align its behavior with workspace configurations. Limited to non-sensitive workspace information. |
team:read | Read basic workspace information (name, domain, icon) to identify the workspace context the app is operating in. |
users.profile:read | Read basic user profile information (name, title, contact details) to personalize interactions and attribute actions correctly. Limited to publicly available profile fields. |
users:read | Identify and reference users within the workspace for routing, assignments, and workflow attribution. Limited to basic user identity information. |
users:read.email | Read user email addresses to map Slack users to their corresponding Atomicwork profiles. This enables cross-system linking and ensures workflows are attributed to the correct user. |
9. Navigate to App settings > Event Subscriptions. Click on the Retry button in the Request URL field. This is to verify the app with Atomicwork.
10. Click Save changes
11. Go to Install app > Install to your <workspace>
12. After you install the app, a Bot User OAuth Token is generated. Copy the token into your notes application.
13. Go to App settings > Basic information. Copy the signing secret key into your notes app as well.
14. Make a call to this API and save.
curl --location 'https://<domain>.atomicwork.com/api/v1/channel-access-config' \
--header 'Content-Type: application/json' \
--header 'x-api-key: <Api Access Key>' \
--data '{
"config_data": {
"channel_type": "SLACK",
"token": "<Bot user token>",
"signing_secret": "<Signing secret>"
},
"description": "Slack channel config",
"channel_type": "SLACK"
}'15. Go to Atomicwork > Settings > Apps > Slack. If the status is "Connected to your <Slack domain>", the app has been successfully uploaded.


