Discord
discord.com · Storage · 3 records · JSON
- Discord + ddrive (Discord as a datastore) Storagecaveatemail?card?Rper-object-cap
- Discord free account (attachment CDN) Storagecaveatinstitutionno cardRper-object-cap
- discord as a durable cdn origin Storagedeademail?card?R
Discord + ddrive (Discord as a datastore) Storage
caveatemail?card?Rper-object-cap
| Free tier | No total storage cap on free accounts; 10 MB per file on free (20 MB per Discord's own File Attachments FAQ), 50 MB Nitro Basic, 1 GB Nitro; attachments upload up to 500 MiB per file via the cloud-upload endpoint before the message-time limit applies unit GB; metered on stored-bytes |
|---|---|
| Price | none stated |
| Per-object cap | 10 MB per file (10000000 bytes) |
| Retention | not stated |
| Egress | Free and CDN-served; every attachment URL is signed with ex/is/hm params, so links are time-limited but re-mintable via the API at zero cost |
| Identity | email (placeholder) not published |
| Limits | 24 MB chunk size in ddrive; 500 MiB per-file ceiling on the cloud-upload path; aggressive per-channel message and upload rate limits (ddrive moves to webhooks specifically to route around them); attachment URLs expire (hex ex timestamp) and must be re-fetched |
| Binding | per-object-cap the per-object cap sets the shard size and therefore the object count; it bounds the total more tightly than any headline quota |
| Interface | rest rest |
| Tooling | forscht/ddrive (533 stars, MIT, active 4.x line, Docker image, OpenAPI 3.1 REST front end, Postgres metadata, webhook-based to avoid rate limits) - explicitly 'unlimited file size and unlimited storage'; also theseyan/distore, iShibi/discord-drive |
| Composes with | Per-file cap x shard count is irrelevant because ddrive splits into 24 MB chunks. Author reports 'tested with storing 4000 GB of data on single discord channel'. Several free Discord accounts, servers and channels each carry a separate allowance, and a bot token can span many channels. |
| Reliability | Highest operational risk of the set: Discord rate-limits uploads hard, CDN URLs expire, and the reference demo (ddrive.forscht.dev) is currently down (HTTP 522), so the wrapper is battle-tested but its hosted instance is not. |
| Notes | No total storage cap on free accounts; 10 MB per file on free (20 MB per Discord's own File Attachments FAQ), 50 MB Nitro Basic, 1 GB Nitro; attachments upload up to 500 MiB per file via the cloud-upload endpoint before the message-time limit applies |
| Evidence rung | reported One page read moves it to documented. |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
| Parsed numbers |
|
Evidence (4)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | support.discord.com/hc/en-us/articles/25444343291031-File-At | 'For non-Nitro subscribers, the maximum file upload is 20MB.' (page updated 2026-09-30) |
| 2026-10-21 | raw.githubusercontent.com/forscht/ddrive/master/README.md | 'Supports an unlimited file size and unlimited storage... Tested with storing 4000 GB of data on single discord channel'; 'splitting the file in 24mb chunks'; 'Now uses webhooks instead of bot/user tokens to bypass the discord rate limit' (the author's own phrase for moving uploads to a webhook, which is outside the per-channel message limit) |
| 2026-10-21 | raw.githubusercontent.com/discord-userdoccers/discord-userdo | 'upload up a file up to 500 MiB directly to Google Cloud'; reference.mdx documents ex as 'Hex timestamp indicating when an attachment CDN URL will expire' |
| 2026-10-21 | cdn.discordapp.com/embed/avatars/0.png | probe: GET -> 200 image/png via Cloudflare edge; GET https://ddrive.forscht.dev/ -> 522 (demo down) |
Unknown or withheld values (6)
$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.per_object_cap.notesnot-extracted$.retention.notesnot-extracted$.retention.statednot-extracted
Discord free account (attachment CDN) Storage
caveatinstitutionno cardRper-object-cap
| Free tier | No total storage cap documented anywhere. Per-file only: 20 MiB per attachment on a free account since 2026-09-03 (raised from 10 MiB). 10 files per message. Server Boost tiers raise it for all members in that server: Tier 2 = 50 MB, Tier 3 = 100 MB; Nitro Basic 50 MB, Nitro 500 MB (1 GB per the Nitro marketing page). unit objects; metered on stored-bytes |
|---|---|
| Price | none stated |
| Per-object cap | 20 MiB per file (20971520 bytes) |
| Retention | | Attachment CDN URLs are signed and expire in exactly 24 h; the bytes stay on Discord's servers indefinitely but the link must be re-derived via POST /api/v10/attachments/refresh-urls (401 without a token) or by re-reading the message |
| Egress | Unmetered and free — cdn.discordapp.com is Cloudflare-fronted and there is no bandwidth metering or egress billing of any kind. This is the strongest egress position in the whole survey. |
| Identity | institution derived from the record's prose, not from an identity field, and no signup was executed: rs indefinitely but the link must be re-derived via POST /api/v10/attachments/refresh-urls (401 without a token) or by re-reading the message. Any un-refreshed link returns 404 'Th |
| Limits |
20 MiB per file is the hard bite. Message create is ~5 messages / 5 s per channel; global ~50 req/s per token; 10,000 invalid requests per 10 min triggers a 24 h Cloudflare ban. Attachment URLs carry ex/is/hm and stop working after 24 h — see reliability_note. |
| Binding | per-object-cap the per-object cap sets the shard size and therefore the object count; it bounds the total more tightly than any headline quota |
| Interface | rest, rclone rest |
| Tooling | Official Bot HTTP API (POST /channels/{id}/messages with files[], or the two-step cloud-upload path). Mature wrappers: forscht/ddrive (533 stars, Discord-as-filesystem with REST + OpenAPI 3.1), missuo/discord-image (212 stars, Go, refreshes CDN links), ShufflePerson/Discord_CDN (link refresher proxy), DisboxApp/server. No rclone backend. |
| Composes with | 100 servers per free account (200 with Nitro) x 500 channels per server = 50,000 text channels per account, and every channel takes unlimited messages. This is the multiplier: not per-file size but per-message count. ddrive's author reports storing 4,000 GB in a single Discord channel, so the practical ceiling is account count x rate limit, not storage. |
| Reliability | Attachment CDN URLs are signed and expire in exactly 24 h; the bytes stay on Discord's servers indefinitely but the link must be re-derived via POST /api/v10/attachments/refresh-urls (401 without a token) or by re-reading the message. Any un-refreshed link returns 404 'This content is no longer available.' |
| Notes | No total storage cap documented anywhere. Per-file only: 20 MiB per attachment on a free account since 2026-09-03 (raised from 10 MiB). 10 files per message. Server Boost tiers raise it for all members in that server: Tier 2 = 50 MB, Tier 3 = 100 MB; Nitro Basic 50 MB, Nitro 500 MB (1 GB per the Nitro marketing page). |
| Evidence rung | reported One page read moves it to documented. |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
| Parsed numbers |
|
Evidence (4)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | docs.discord.com/developers/change-log | 'September 3, 2026 — Default File Upload Limit Increase: The default file upload limit has been increased from 10 MiB to 20 MiB for users, bots, webhooks, and interaction responses' |
| 2026-10-21 | docs.discord.com/developers/reference | 'Attachments uploaded to Discord's CDN have signed URLs with a preset expiry time'; example ?ex=65d903de&is=65c68ede&hm=...; 'ex — Hex timestamp indicating when an attachment CDN URL will expire' |
| 2026-10-21 | withheld | probe: decoded ex/is from a real signed URL (ex=66424c96, is=6640fb16) -> ex-is = 86400 s = exactly 24.0 h; GET that URL today -> 404; GET the same path with no query string -> 404 'This content is no longer available.' |
| 2026-10-21 | support.discord.com/hc/en-us/articles/33694251638295 | 'Number of servers: 100 | Number of servers Nitro: 200 | Channels (includes voice/text/categories): 500 | Upload Base 10MB, Level 2 50MB for all members, Level 3 100MB for all members' |
Unknown or withheld values (4)
$.evidence[2].urlprivate-url$.free_tier.notesprocess$.per_object_cap.notesnot-extracted$.retention.notesnot-extracted
discord as a durable cdn origin Storage
deademail?card?R
| Free tier | Signed attachment URLs expire in exactly 24 hours (measured ex-is = 86400) and unsigned fetches 404. A URL cannot be stored in a catalog and reused; every read needs an authenticated message unit none; metered on none |
|---|---|
| Price | none stated |
| Per-object cap | not recorded |
| Retention | not recorded |
| Egress | not recorded |
| Identity | email (placeholder) not published |
| Binding | none no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit |
| Interface | unknown |
| Tooling | not recorded |
| Composes with | not recorded |
| Reliability | Signed attachment URLs expire in exactly 24 hours (measured ex-is = 86400) and unsigned fetches 404. A URL cannot be stored in a catalog and reused; every read needs an authenticated message |
| Notes | Signed attachment URLs expire in exactly 24 hours (measured ex-is = 86400) and unsigned fetches 404. A URL cannot be stored in a catalog and reused; every read needs an authenticated message |
| Evidence rung | reported |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (1)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | docs.discord.com/developers/resources/message#signed-attachm | Signed attachment URLs expire in exactly 24 hours (measured ex-is = 86400) and unsigned fetches 404. A URL cannot be stored in a catalog and reused; every read needs an authenticated message |
More fields (1)
{
"dead_end": {
"failure_class": "dead-service",
"why": "Signed attachment URLs expire in exactly 24 hours (measured ex-is = 86400) and unsigned fetches 404. A URL cannot be stored in a catalog and reused; every read needs an authenticated message",
"retry_when": null,
"first_recorded": "2026-10-21"
}
}Unknown or withheld values (15)
$.chainingnot-recorded$.confidence_notewithheld$.egress.termsnot-recorded$.extras.dead_end.retry_whenprocess$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.interfaceinterface-unknown$.interface_detailwithheld$.limits_noteprocess$.per_object_cap.notesnot-recorded$.per_object_cap.statednot-recorded$.retention.notesprocess$.retention.statednot-recorded$.toolingnot-recorded