fshy

fshy / Storage

Discord

discord.com · Storage · 3 records · JSON

Discord + ddrive (Discord as a datastore) Storage

caveatemail?card?Rper-object-cap

discord.com · messaging · storage/discord-ddrive · JSON · compare

Free tierNo 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
Pricenone stated
Per-object cap10 MB per file (10000000 bytes)
Retentionnot stated
EgressFree 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
Identityemail (placeholder) not published
Limits
  • per-object-cap 10 MB per file source
  • per-object-cap 500 MiB per file source
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
Bindingper-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
Interfacerest rest
Toolingforscht/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 withPer-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.
ReliabilityHighest 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.
NotesNo 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 rungreported One page read moves it to documented.
Checked2026-10-21 (inherited); stale on 2026-11-04
Parsed numbers
  • $.limits[0].value limit:per-object-cap 10.0 MB
  • $.limits[1].value limit:per-object-cap 500.0 MiB
Evidence (4)
datesourcewhat it proved
2026-10-21support.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-21raw.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-21raw.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-21cdn.discordapp.com/embed/avatars/0.pngprobe: GET -> 200 image/png via Cloudflare edge; GET https://ddrive.forscht.dev/ -> 522 (demo down)
Unknown or withheld values (6)
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.per_object_cap.notes not-extracted
  • $.retention.notes not-extracted
  • $.retention.stated not-extracted

Discord free account (attachment CDN) Storage

caveatinstitutionno cardRper-object-cap

discord.com · messaging · storage/discord-free-account · JSON · compare

Free tierNo 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
Pricenone stated
Per-object cap20 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
EgressUnmetered 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.
Identityinstitution 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
  • per-object-cap 20 MiB per file source
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.
Bindingper-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
Interfacerest, rclone rest
ToolingOfficial 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 with100 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.
ReliabilityAttachment 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.'
NotesNo 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 rungreported One page read moves it to documented.
Checked2026-10-21 (inherited); stale on 2026-11-04
Parsed numbers
  • $.limits[0].value limit:per-object-cap 20.0 MiB
Evidence (4)
datesourcewhat it proved
2026-10-21docs.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-21docs.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-21withheldprobe: 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-21support.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].url private-url
  • $.free_tier.notes process
  • $.per_object_cap.notes not-extracted
  • $.retention.notes not-extracted

discord as a durable cdn origin Storage

deademail?card?R

docs.discord.com/developers/resources/message#signed-attachm · rejected-provider · storage/discord-as-a-durable-cdn-origin · JSON · compare

Free tierSigned 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
Pricenone stated
Per-object capnot recorded
Retentionnot recorded
Egressnot recorded
Identityemail (placeholder) not published
Bindingnone no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit
Interfaceunknown
Toolingnot recorded
Composes withnot recorded
ReliabilitySigned 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
NotesSigned 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 rungreported
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (1)
datesourcewhat it proved
2026-10-21docs.discord.com/developers/resources/message#signed-attachmSigned 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)
  • $.chaining not-recorded
  • $.confidence_note withheld
  • $.egress.terms not-recorded
  • $.extras.dead_end.retry_when process
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.interface interface-unknown
  • $.interface_detail withheld
  • $.limits_note process
  • $.per_object_cap.notes not-recorded
  • $.per_object_cap.stated not-recorded
  • $.retention.notes process
  • $.retention.stated not-recorded
  • $.tooling not-recorded