{"eid":"discord","name":"Discord","domain":"discord.com","resolved_by":"domain","topics":["storage"],"n_records":3,"best_vorder":1,"review":null,"aliases":["Discord","Discord + ddrive (Discord as a datastore)","Discord free account (attachment CDN)","discord as a durable cdn origin","discord.com"],"records":[{"rid":"storage/discord-ddrive","card":{"rid":"storage/discord-ddrive","eid":"discord","topic":"storage","slug":"discord-ddrive","provider":"Discord + ddrive (Discord as a datastore)","url":"https://discord.com","domain":"discord.com","category":"messaging","tier":null,"verdict":"qualifies-with-caveat","vorder":1,"grp":"usable","confidence":"reported","binding":"per-object-cap","identity_kind":"email","identity_basis":"defaulted","needs_card":null,"needs_phone":null,"needs_id":null,"needs_institution":null,"country":null,"crypto":null,"interfaces":"rest","egress_metered":0,"per_object_bytes":10000000,"retention_days":null,"verified_at":"2026-10-21T00:00:00.000Z","verified_basis":"inherited","checked_on":"2026-10-21","stale_on":"2026-11-04","n_evidence":4,"usd_month":null,"usd_per_tb_month":null,"summary":"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 uplo...","duplicate_of":null,"n_unknown":6},"record":{"topic":"storage","slug":"discord-ddrive","provider":"Discord + ddrive (Discord as a datastore)","url":"https://discord.com","category":"messaging","free_tier":{"stated":"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","source_url":"https://support.discord.com/hc/en-us/articles/25444343291031-File-Attachments-FAQ","read_on":"2026-10-21","notes":null},"per_object_cap":{"stated":"10 MB per file","bytes":10000000,"source_url":"https://support.discord.com/hc/en-us/articles/25444343291031-File-Attachments-FAQ","notes":"not stated"},"retention":{"stated":"not stated","source_url":"https://support.discord.com/hc/en-us/articles/25444343291031-File-Attachments-FAQ","notes":"not stated"},"egress":{"terms":"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","metered":false},"interface":["rest"],"interface_detail":"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","chaining":"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.","limits":[{"kind":"per-object-cap","value":"10 MB per file","source":"https://support.discord.com/hc/en-us/articles/25444343291031-File-Attachments-FAQ"},{"kind":"per-object-cap","value":"500 MiB per file","source":"https://support.discord.com/hc/en-us/articles/25444343291031-File-Attachments-FAQ"}],"limits_note":"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","identity_cost":{"kind":"email","detail":null,"country":null},"reliability_note":"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.","confidence":"reported","confidence_note":"One page read moves it to documented.","evidence":[{"url":"https://support.discord.com/hc/en-us/articles/25444343291031-File-Attachments-FAQ","date":"2026-10-21","proved":"'For non-Nitro subscribers, the maximum file upload is 20MB.' (page updated 2026-09-30)"},{"url":"https://raw.githubusercontent.com/forscht/ddrive/master/README.md","date":"2026-10-21","proved":"'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)"},{"url":"https://raw.githubusercontent.com/discord-userdoccers/discord-userdoccers/main/pages/topics/cloud-uploads.mdx","date":"2026-10-21","proved":"'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'"},{"url":"https://cdn.discordapp.com/embed/avatars/0.png","date":"2026-10-21","proved":"probe: GET -> 200 image/png via Cloudflare edge; GET https://ddrive.forscht.dev/ -> 522 (demo down)"}],"verdict":"qualifies-with-caveat","verified_at":"2026-10-21T00:00:00.000Z","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","extras":{},"binding":"per-object-cap","binding_note":"the per-object cap sets the shard size and therefore the object count; it bounds the total more tightly than any headline quota"},"claims":[{"path":"$.free_tier.stated","kind":"free-quota","num":10.0,"unit":"MB","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"},{"path":"$.limits[0].value","kind":"limit:per-object-cap","num":10.0,"unit":"MB","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"},{"path":"$.limits[1].value","kind":"limit:per-object-cap","num":500.0,"unit":"MiB","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"}],"unknown":[["$.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"]],"history":[],"drift":[]},{"rid":"storage/discord-free-account","card":{"rid":"storage/discord-free-account","eid":"discord","topic":"storage","slug":"discord-free-account","provider":"Discord free account (attachment CDN)","url":"https://discord.com","domain":"discord.com","category":"messaging","tier":null,"verdict":"qualifies-with-caveat","vorder":1,"grp":"usable","confidence":"reported","binding":"per-object-cap","identity_kind":"institution","identity_basis":"stated","needs_card":0,"needs_phone":0,"needs_id":0,"needs_institution":1,"country":null,"crypto":null,"interfaces":"rest,rclone","egress_metered":0,"per_object_bytes":20971520,"retention_days":null,"verified_at":"2026-10-21T00:00:00.000Z","verified_basis":"inherited","checked_on":"2026-10-21","stale_on":"2026-11-04","n_evidence":4,"usd_month":null,"usd_per_tb_month":null,"summary":"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....","duplicate_of":null,"n_unknown":4},"record":{"topic":"storage","slug":"discord-free-account","provider":"Discord free account (attachment CDN)","url":"https://discord.com","category":"messaging","free_tier":{"stated":"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","source_url":"https://docs.discord.com/developers/change-log","read_on":"2026-10-21","notes":null},"per_object_cap":{"stated":"20 MiB per file","bytes":20971520,"source_url":"https://docs.discord.com/developers/change-log","notes":"not stated"},"retention":{"stated":"| 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","source_url":"https://docs.discord.com/developers/change-log","notes":"not stated"},"egress":{"terms":"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.","metered":false},"interface":["rest","rclone"],"interface_detail":"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.","chaining":"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.","limits":[{"kind":"per-object-cap","value":"20 MiB per file","source":"https://docs.discord.com/developers/change-log"}],"limits_note":"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.","identity_cost":{"kind":"institution","detail":"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","country":null},"reliability_note":"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.'","confidence":"reported","confidence_note":"One page read moves it to documented.","evidence":[{"url":"https://docs.discord.com/developers/change-log","date":"2026-10-21","proved":"'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'"},{"url":"https://docs.discord.com/developers/reference","date":"2026-10-21","proved":"'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'"},{"url":null,"date":"2026-10-21","proved":"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.'"},{"url":"https://support.discord.com/hc/en-us/articles/33694251638295","date":"2026-10-21","proved":"'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'"}],"verdict":"qualifies-with-caveat","verified_at":"2026-10-21T00:00:00.000Z","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).","extras":{},"binding":"per-object-cap","binding_note":"the per-object cap sets the shard size and therefore the object count; it bounds the total more tightly than any headline quota"},"claims":[{"path":"$.free_tier.stated","kind":"free-quota","num":20.0,"unit":"MiB","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"},{"path":"$.limits[0].value","kind":"limit:per-object-cap","num":20.0,"unit":"MiB","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"}],"unknown":[["$.evidence[2].url","private-url"],["$.free_tier.notes","process"],["$.per_object_cap.notes","not-extracted"],["$.retention.notes","not-extracted"]],"history":[],"drift":[]},{"rid":"storage/discord-as-a-durable-cdn-origin","card":{"rid":"storage/discord-as-a-durable-cdn-origin","eid":"discord","topic":"storage","slug":"discord-as-a-durable-cdn-origin","provider":"discord as a durable cdn origin","url":"https://docs.discord.com/developers/resources/message#signed-attachment-cdn-urls","domain":"discord.com","category":"rejected-provider","tier":null,"verdict":"dead","vorder":7,"grp":"dead","confidence":"reported","binding":"none","identity_kind":"email","identity_basis":"defaulted","needs_card":null,"needs_phone":null,"needs_id":null,"needs_institution":null,"country":null,"crypto":null,"interfaces":null,"egress_metered":0,"per_object_bytes":null,"retention_days":null,"verified_at":"2026-10-21T00:00:00.000Z","verified_basis":"inherited","checked_on":"2026-10-21","stale_on":"2026-11-04","n_evidence":1,"usd_month":null,"usd_per_tb_month":null,"summary":"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 re...","duplicate_of":null,"n_unknown":15},"record":{"topic":"storage","slug":"discord-as-a-durable-cdn-origin","provider":"discord as a durable cdn origin","url":"https://docs.discord.com/developers/resources/message#signed-attachment-cdn-urls","category":"rejected-provider","free_tier":{"stated":"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","source_url":"https://docs.discord.com/developers/resources/message#signed-attachment-cdn-urls","read_on":"2026-10-21","notes":null},"per_object_cap":{"stated":"not recorded","bytes":null,"source_url":"https://docs.discord.com/developers/resources/message#signed-attachment-cdn-urls","notes":"not recorded"},"retention":{"stated":"not recorded","days":null,"source_url":"https://docs.discord.com/developers/resources/message#signed-attachment-cdn-urls","notes":null},"egress":{"terms":"not recorded","metered":false},"interface":["unknown"],"interface_detail":null,"tooling":"not recorded","chaining":"not recorded","limits":[],"limits_note":null,"identity_cost":{"kind":"email","detail":null,"country":null},"reliability_note":"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","confidence":"reported","confidence_note":null,"evidence":[{"url":"https://docs.discord.com/developers/resources/message#signed-attachment-cdn-urls","date":"2026-10-21","proved":"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"}],"verdict":"dead","verified_at":"2026-10-21T00:00:00.000Z","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","extras":{"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"}},"binding":"none","binding_note":"no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit"},"claims":[{"path":"$.free_tier.stated","kind":"free-quota","num":24.0,"unit":"hours","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"}],"unknown":[["$.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"]],"history":[],"drift":[]}]}