{"eid":"stoat","name":"Stoat","domain":"stoat.chat","resolved_by":"domain","topics":["storage"],"n_records":3,"best_vorder":1,"review":null,"aliases":["Stoat","Stoat (formerly Revolt) + Autumn file service","Stoat (formerly Revolt) — official instance","revolt/stoat public instance as bulk storage","stoat.chat"],"records":[{"rid":"storage/stoat-official-instance","card":{"rid":"storage/stoat-official-instance","eid":"stoat","topic":"storage","slug":"stoat-official-instance","provider":"Stoat (formerly Revolt) — official instance","url":"https://stoat.chat","domain":"stoat.chat","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":20000000,"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":"20,000,000 bytes (20 MB) per attachment as the server-enforced default, no paid tier to raise it, and no documented total storage cap.","duplicate_of":null,"n_unknown":5},"record":{"topic":"storage","slug":"stoat-official-instance","provider":"Stoat (formerly Revolt) — official instance","url":"https://stoat.chat","category":"messaging","free_tier":{"stated":"20,000,000 bytes (20 MB) per attachment as the server-enforced default, no paid tier to raise it, and no documented total storage cap.","unit":"MB","metered_on":"stored-bytes","source_url":"https://api.stoat.chat/","read_on":"2026-10-21","notes":null},"per_object_cap":{"stated":"20 MB per file","bytes":20000000,"source_url":"https://api.stoat.chat/","notes":"not stated"},"retention":{"stated":"| Critically different from Discord: attachment URLs are UNSIGNED and permanent","source_url":"https://api.stoat.chat/","notes":"not stated"},"egress":{"terms":"Free and unmetered from cdn.stoatusercontent.com (Cloudflare). The CDN responses I fetched carried `Cache-Control: public, max-age=2073600` — 24 days of edge caching — which is good for the 500 GB/day serving workload.","metered":false},"interface":["rest"],"interface_detail":"rest","tooling":"Autumn file service: `POST {autumn}/attachments` with multipart `file` and `X-Bot-Token`/`X-Session-Token`. Documented at stoatchat/stoatchat `docs/docs/developers/api/uploading-files.md`. Bots are first-class; 5 bots per account.","chaining":"100 servers per account x 200 channels per server (from the live `/` limits object) = 20,000 channels, each with unlimited messages. Servers are capped at 100 for existing accounts / 50 for new ones.","limits":[{"kind":"per-object-cap","value":"20 MB per file","source":"https://api.stoat.chat/"}],"limits_note":"20 MB per file; 5 attachments per message; body_limit_size 20,000,000 bytes globally. Live limits object also gives: emojis 500 KB, icons 2.5 MB, banners/backgrounds 6 MB, avatars 4 MB — those are separate, smaller buckets.","identity_cost":{"kind":"email","detail":null,"country":null},"reliability_note":"Critically different from Discord: attachment URLs are UNSIGNED and permanent. The platform renamed Revolt->Stoat in Oct 2025 and moved the CDN (autumn.revolt.chat -> cdn.revoltusercontent.com) in May 2025 with 301s still in place; old IDs from the pre-refactor Autumn do 404.","confidence":"reported","confidence_note":"One page read moves it to documented.","evidence":[{"url":"https://api.stoat.chat/","date":"2026-10-21","proved":"probe: GET -> features.limits.default.file_upload_size_limits.attachments = 20000000 (20 MB), server_channels = 200, servers = 100, message_attachments = 5"},{"url":"https://cdn.stoatusercontent.com/attachments/f749zVPTYPo_id3VY9IwZYMY83hgm9WV61MqWUV54D/image.png","date":"2026-10-21","proved":"probe: GET -> 200 OK, Content-Length 10886, Cache-Control: public, max-age=2073600 — no ex/is/hm, no expiry"},{"url":"https://cdn.stoatusercontent.com/attachments","date":"2026-10-21","proved":"probe: POST with no auth -> 401 (upload requires a token; read does not)"},{"url":"https://stoat.chat/","date":"2026-10-21","proved":"'Custom emojis, a 20MB file upload limit and a server-specific profile picture with no subscription required.'"}],"verdict":"qualifies-with-caveat","verified_at":"2026-10-21T00:00:00.000Z","notes":"20,000,000 bytes (20 MB) per attachment as the server-enforced default, no paid tier to raise it, and no documented total storage cap.","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":"MB","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"},{"path":"$.limits[0].value","kind":"limit:per-object-cap","num":20.0,"unit":"MB","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"]],"history":[],"drift":[{"kind":"duplicate-disagrees","subject":"storage/stoat-autumn-file-service","other":"storage/stoat-official-instance","field":"verdict","a":"fails-quota","b":"qualifies-with-caveat","detail":null}]},{"rid":"storage/revolt-stoat-public-instance-as-bulk-storage","card":{"rid":"storage/revolt-stoat-public-instance-as-bulk-storage","eid":"stoat","topic":"storage","slug":"revolt-stoat-public-instance-as-bulk-storage","provider":"revolt/stoat public instance as bulk storage","url":"https://stoat.chat/","domain":"stoat.chat","category":"rejected-provider","tier":null,"verdict":"fails-quota","vorder":6,"grp":"rejected","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":2,"usd_month":null,"usd_per_tb_month":null,"summary":"20 MB per file with no paid tier and no public way to raise it, and the public instance runs signup human-verification step. 1 TiB = 52,000 files. Only self-...","duplicate_of":null,"n_unknown":15},"record":{"topic":"storage","slug":"revolt-stoat-public-instance-as-bulk-storage","provider":"revolt/stoat public instance as bulk storage","url":"https://stoat.chat/","category":"rejected-provider","free_tier":{"stated":"20 MB per file with no paid tier and no public way to raise it, and the public instance runs signup human-verification step. 1 TiB = 52,000 files. Only self-hosting removes the cap, which is no longer free","unit":"none","metered_on":"none","source_url":"https://stoat.chat/","read_on":"2026-10-21","notes":null},"per_object_cap":{"stated":"not recorded","bytes":null,"source_url":"https://stoat.chat/","notes":"not recorded"},"retention":{"stated":"not recorded","days":null,"source_url":"https://stoat.chat/","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":"20 MB per file with no paid tier and no public way to raise it, and the public instance runs signup human-verification step. 1 TiB = 52,000 files. Only self-hosting removes the cap, which is no longer free","confidence":"reported","confidence_note":null,"evidence":[{"url":"https://stoat.chat/","date":"2026-10-21","proved":"20 MB per file with no paid tier and no public way to raise it, and the public instance runs signup human-verification step. 1 TiB = 52,000 files. Only self-hosting removes the cap, which is no longer free"},{"url":"https://github.com/revoltchat/self-hosted/issues/53","date":"2026-10-21","proved":"cited as the basis of the rejection: 20 MB per file with no paid tier and no public way to raise it, and the public instance runs signup human-verification step. 1 TiB = 52,000 files. Only self-hosting removes the cap, which is no longer free"}],"verdict":"fails-quota","verified_at":"2026-10-21T00:00:00.000Z","notes":"20 MB per file with no paid tier and no public way to raise it, and the public instance runs signup human-verification step. 1 TiB = 52,000 files. Only self-hosting removes the cap, which is no longer free","extras":{"dead_end":{"failure_class":"quota","why":"20 MB per file with no paid tier and no public way to raise it, and the public instance runs signup human-verification step. 1 TiB = 52,000 files. Only self-hosting removes the cap, which is no longer free","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":20.0,"unit":"MB","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":[]},{"rid":"storage/stoat-autumn-file-service","card":{"rid":"storage/stoat-autumn-file-service","eid":"stoat","topic":"storage","slug":"stoat-autumn-file-service","provider":"Stoat (formerly Revolt) + Autumn file service","url":"https://stoat.chat/","domain":"stoat.chat","category":"messaging","tier":null,"verdict":"fails-quota","vorder":6,"grp":"rejected","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":20000000,"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":3,"usd_month":null,"usd_per_tb_month":null,"summary":"20 MB per file, no subscription: 'Custom emojis, a 20MB file upload limit and a server-specific profile picture with no subscription required.' No published ...","duplicate_of":null,"n_unknown":7},"record":{"topic":"storage","slug":"stoat-autumn-file-service","provider":"Stoat (formerly Revolt) + Autumn file service","url":"https://stoat.chat/","category":"messaging","free_tier":{"stated":"20 MB per file, no subscription: 'Custom emojis, a 20MB file upload limit and a server-specific profile picture with no subscription required.' No published total-storage cap and no paid tier that raises the file size.","unit":"MB","metered_on":"stored-bytes","source_url":"https://stoat.chat/","read_on":"2026-10-21","notes":null},"per_object_cap":{"stated":"20 MB per file","bytes":20000000,"source_url":"https://stoat.chat/","notes":"not stated"},"retention":{"stated":"not stated","source_url":"https://stoat.chat/","notes":"not stated"},"egress":{"terms":"Free and — importantly — UNSIGNED. Autumn 301s to cdn.stoatusercontent.com and the object URL is a bare path with no expiry parameters, unlike Discord. So a stored URL stays valid and is trivially Cloudflare-cacheable.","metered":false},"interface":["rest"],"interface_detail":"rest","tooling":"Genuinely open: 'Our public API is so powerful that we use it ourselves for the official apps', API root answers live (GET https://api.revolt.chat/ -> {\"stoat\":\"0.16.2\",\"revolt\":\"0.16.2\", features...}). Backend is open source (revoltchat/autumn, stoatchat/*). Self-hostable, which is both the appeal and the caveat.","chaining":"Unlimited servers x unlimited channels with a 20 MB cap, so 1 TB needs ~52,000 uploads. With no signed URLs, the reads are the easy part; the writes are the bottleneck.","limits":[{"kind":"per-object-cap","value":"20 MB per file","source":"https://stoat.chat/"}],"limits_note":"20 MB per file is fixed and low; there is no path to a bigger unit. Upload limits are server-configurable only on SELF-hosted instances ('Upload limits are controlled via the Autumn config'), so on the public instance you are stuck at 20 MB.","identity_cost":{"kind":"email","detail":null,"country":null},"reliability_note":"Smaller operator, recent rebrand to Stoat, and the public instance runs human-verification step on signup. Data longevity is a real question for a 20 TiB cold archive; treat as experimental.","confidence":"reported","confidence_note":"One page read moves it to documented.","evidence":[{"url":"https://stoat.chat/","date":"2026-10-21","proved":"'Custom emojis, a 20MB file upload limit and a server-specific profile picture with no subscription required'"},{"url":"https://autumn.revolt.chat/attachments/abc123","date":"2026-10-21","proved":"probe: curl -D - -> 301 location: https://cdn.stoatusercontent.com/attachments/abc123 (no signature, no expiry params)"},{"url":"https://api.revolt.chat/","date":"2026-10-21","proved":"probe: curl -> 200, {\"stoat\":\"0.16.2\",...} — public API live"}],"verdict":"fails-quota","verified_at":"2026-10-21T00:00:00.000Z","notes":"20 MB per file, no subscription: 'Custom emojis, a 20MB file upload limit and a server-specific profile picture with no subscription required.' No published total-storage cap and no paid tier that raises the file size.","extras":{"dead_end":{"failure_class":"quota","why":"20 MB per file, no subscription: 'Custom emojis, a 20MB file upload limit and a server-specific profile picture with no subscription required.' No published total-storage cap and no paid tier that raises the file size.","retry_when":null,"first_recorded":"2026-10-21"}},"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":"MB","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"},{"path":"$.limits[0].value","kind":"limit:per-object-cap","num":20.0,"unit":"MB","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"}],"unknown":[["$.extras.dead_end.retry_when","process"],["$.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":[{"kind":"duplicate-disagrees","subject":"storage/stoat-autumn-file-service","other":"storage/stoat-official-instance","field":"verdict","a":"fails-quota","b":"qualifies-with-caveat","detail":null}]}]}