Slack File Storage
Permanent, API-Accessible File Storage for Slack Bots and Apps
External storage for Slack bots and integrations with global access.
Slack is a messaging surface, not a file store. On the free plan, files (and the messages they're attached to) age out after 90 days, and even on paid plans a file is bound to the message it was shared in and the workspace's retention settings. Worse for builders: a Slack file's download URL requires the bot token to fetch, isn't a clean public link, and isn't meant to be embedded elsewhere.
If your Slack app generates reports, accepts user uploads, or needs to hand someone a durable link, you want storage outside Slack. files.link gives your bot a permanent home for files plus a global CDN, with a REST API that fits naturally into an event-driven Slack app.
Two flows cover most apps. Inbound: when a user shares a file (a file_shared or message event with files), your bot downloads it from Slack's API using the bot token, then uploads it to files.link — POST /v1/files/{folderId} → PUT presigned URL → POST /v1/files/confirm-upload — and stores the returned permanent URL keyed to the user, channel, or ticket. The file now survives past Slack's retention window and is retrievable without a Slack token.
Outbound: when your bot generates an artifact (a PDF export, a chart image, a CSV), upload it to files.link first, then post the permanent CDN URL into the channel. Slack unfurls it with a preview for images and supported types, and the link keeps working in the message history, in an email, or wherever it's later referenced.
The distinction from leaning on Slack's own storage is durability and addressability: your archive doesn't evaporate on a free workspace, and every file is a stable URL you control rather than a token-gated handle. For sensitive artifacts — an exported report containing customer data — upload private and post a signed URL that expires (10-minute default) so it can't be scraped out of channel history and reused indefinitely.
Run your bot's upload calls server-side so the API key never lands in a Slack message or client. Billing is prepaid credits with no separate egress fee, so a chatty bot that serves a lot of files draws down one balance instead of generating a bandwidth bill. files.link is purely the storage and delivery layer behind your bot — your Slack app's commands, events, and Block Kit UI stay exactly as you built them.
Benefits With No Complexity
Global CDN delivery
Edge-cached worldwide
Signed-URL security
What You Get
Unlimited files
Unlimited storage
Public + Private storage
CDN ready links
Prepaid credits
More coming soon
How files.link Works
1. Upload
2. Copy
3. Use Anywhere
Why Developers Choose files.link
A Better Way to Store & Deliver Files
| Slack Built-in Files | Amazon S3 | Cloudflare R2 | files.link | |
|---|---|---|---|---|
| Permanent storage (no 90-day expiry) | ||||
| Global CDN delivery | ||||
| Clean public/permanent URLs (no token) | ||||
| Simple REST API for bots | ||||
| Signed URLs for sensitive exports | ||||
| Prepaid credits (no egress fees) |
Calculate Your Needs
Storage
Egress
CDN Bandwidth
Start Slack Storage
- Global CDN delivery
- Edge-cached worldwide
- Signed-URL security
- Unlimited files
- Unlimited storage
- Public + Private storage
- No subscription — prepaid credits keep spend predictable