Slack document intake & table delivery
IN + OUT: /api/integrations/slack/*
Content reviewed .
Slack already holds the documents that teams pass around during reviews. DynamiteDocs imports supported files from one enabled channel and responds to export commands where the connected Slack user writes them. Each customer authorizes their own workspace. Tokens stay encrypted, and channels must invite the app.
Open this integration in the app or read the public API and webhook guide.
Keep Slack handoffs attached to the document workflow
- Downloading a file from Slack, finding the upload screen, and returning with a spreadsheet creates avoidable handoffs.
- A bot should not read every channel in a workspace. Teams need to invite it only where the workflow belongs.
- A posted table should come from a reviewed extraction, not an unchecked first pass.
- Workspace administrators need to see the exact permissions before approving the connection.
Connect Slack in five steps
01. Open Slack from Apps
Sign in to DynamiteDocs, open Apps, and choose Slack. The integration is available on Hobby, Pro, and Ultra plans. You can connect without selecting an extraction first.
02. Authorize your workspace
Choose Connect Slack, select the workspace you want, and review the permissions. Slack may send the request to a workspace administrator. After approval, you return to the same DynamiteDocs dialog with the workspace name shown as connected.
03. Invite the app to a channel
Open the destination channel in Slack and send /invite @DynamiteDocs. Do this for private channels too. The channel picker only lists channels where the app is already a member, so this invitation keeps access narrow and deliberate.
04. Choose intake or delivery
In the Import view, choose one intake channel for supported files shared by the connected Slack user. In the Export view, select a saved extraction and copy its export command.
05. Run a small test
Share a supported document or image in the intake channel and confirm that it reaches the Library. Then paste an export command into a joined channel and open the attachment Slack receives.
What the Slack connection can do
The connection uses Slack OAuth and stores a separate encrypted installation for each DynamiteDocs account:
- Workspace OAuth: each customer connects and approves their own workspace
- Channel discovery: public and private channels joined by the app
- Reviewed delivery: CSV, JSON, or Excel data posted from a channel command
- Channel intake: supported documents imported into the Library
- Event verification: Slack signing secret checked against the raw request
- Token storage: workspace tokens encrypted with AES-GCM
A realistic example
A practical accounts-payable channel can use both directions:
| Action | Where it happens | Result |
|---|---|---|
| A controller shares vendor-invoice.pdf | #invoice-review in Slack | The file is imported and queued for extraction |
| An analyst corrects a low-confidence total | DynamiteDocs review workspace | The saved extraction becomes the approved version |
| The analyst writes an export command | #invoice-review in Slack | The channel receives a file attachment with the reviewed rows |
What to validate before relying on it
Confirm that DynamiteDocs has joined the channel, then share one supported file and run one export command in Slack.
One Slack app, separate customer workspaces
The development workspace used to create the Slack app does not become the customer destination. Public distribution lets each customer start the OAuth flow from DynamiteDocs, choose a Slack workspace, and approve the same narrow set of bot permissions. Slack returns a workspace-specific token and team ID. DynamiteDocs encrypts that token and attaches it to the signed-in account, so one customer never uses another customer's Slack credentials.
The channel list is intentionally smaller than the whole workspace directory. DynamiteDocs requests channel metadata, but the dialog shows channels where the app is already a member. For a public channel, invite @DynamiteDocs before reopening the picker. For a private channel, a channel member must invite it. If the channel is missing, the usual cause is the invitation, not a stale browser cache.
Outbound delivery starts with a saved extraction. Select it in DynamiteDocs, copy the command for CSV, JSON, Excel, or its stored source file, and paste the command into a joined Slack channel. Only the Slack user who connected the workspace can request that account's exports. DynamiteDocs asks Slack for a temporary upload URL, uploads without sending the Slack authorization header to that host, and completes the upload into the command channel.
Inbound files follow a stricter rule. You enable exactly one intake channel in the dialog. Slack signs each file event, and the server rejects requests with an invalid signature or an old timestamp. The event must match the connected workspace, enabled channel, and Slack user who authorized the connection. That last check prevents another person in a shared channel from silently feeding documents into the account.
After verification, DynamiteDocs checks the file type and size, applies the account's storage and document limits, stores the file, and queues the normal extraction pipeline. The source does not get a weaker review path because it arrived through Slack. Page limits, provider policy, confidence review, and correction reuse work the same way as a file selected from the device.
Disconnecting removes the encrypted workspace connection from DynamiteDocs. It does not delete messages or files already posted in Slack. A Slack administrator can also remove the app from the workspace. If permissions change later, Slack may require the workspace to approve the connection again before new permissions take effect.
What the Slack connection does and does not do
Does
- Lists channels that have invited the app and lets the user choose one intake channel.
- Posts reviewed CSV, JSON, or Excel data and stored source files after an explicit Slack command.
- Imports supported files from one enabled channel when the connected Slack user shares them.
- Verifies signed Slack events before accepting imports or commands.
Does not
- Does not read message history or scan every channel in the workspace.
- Does not import files shared by every channel member. Intake is tied to the Slack user who connected the account.
- Does not post an unreviewed extraction automatically.
- Does not keep Slack tokens in browser storage or plaintext database fields.
Why the channel boundary matters
Slack works best as a handoff point, not a hidden document store. Requiring a channel invitation makes the boundary visible to the people already working there.
A user enables intake for one channel and writes each export request in its destination channel.
Signed events, encrypted workspace tokens, and per-account routing keep a convenient workflow from turning into broad workspace access.
Questions, answered
Can customers connect their own Slack workspace?
Yes. Each customer starts OAuth from DynamiteDocs, chooses their workspace, and approves the requested permissions. Workspace administrators can require approval before installation.
Why is my channel missing?
Invite @DynamiteDocs to the channel, then reopen the integration dialog. Private channels also require an invitation from a channel member.
Whose files can the intake channel import?
Only supported files shared in the enabled channel by the Slack user who connected the DynamiteDocs account. Other channel members' files are ignored.
What gets posted to Slack?
A CSV, JSON, or Excel attachment with the reviewed extraction, or a stored source file when the connected user requests original. DynamiteDocs does not export an unchecked extraction result.
Can I connect more than one workspace?
One DynamiteDocs account can hold one Slack workspace connection at a time. Reconnecting replaces that account's previous Slack connection.
Related integration articles
Open the integrations workspace, no payment details.