fshy

Home / Storage

Stoat

stoat.chat · 3 records in Storage · JSON

Records 3

stoat.chatMessagingstorage/stoat-official-instanceJSONcomparereport an error

Sibling records disagree:

Free allowance
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.
Verdict
caveatusable, with a named limit or an unprobed read path
Cost
free tier
Identity
email?placeholder, not evidence; card unknown, phone unknown
Binding limit
per-object-cap20 MB per file
Evidence
reported4 sources; a third party said so
Freshness
stale on 2026-11-05checked 2026-10-21 (inherited); stale on 2026-11-05
Free tier20,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
Pricenone stated
Limits
  • per-object-cap (binding) 20 MB per file source
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.
Identityemail (placeholder) not published
EgressFree and unmetered from cdn.stoatusercontent.com (Cloudflare).
Per-object cap20 MB per file (20000000 bytes)
Retention| Critically different from Discord: attachment URLs are UNSIGNED and permanent
Interfacerest rest
ToolingAutumn 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.
Composes with100 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.
ReliabilityCritically 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.
Parsed numbers
  • has-free-tier 1
  • per-object-cap 20 MB
Evidence 4
datesourcewhat it proved
2026-10-21api.stoat.chat/probe: GET -> features.limits.default.file_upload_size_limits.attachments = 20000000 (20 MB), server_channels = 200, servers = 100, message_attachments = 5
2026-10-21cdn.stoatusercontent.com/attachments/f749zVPTYPo_id3VY9IwZYMprobe: GET -> 200 OK, Content-Length 10886, Cache-Control: public, max-age=2073600 — no ex/is/hm, no expiry
2026-10-21cdn.stoatusercontent.com/attachmentsprobe: POST with no auth -> 401 (upload requires a token; read does not)
2026-10-21stoat.chat/'Custom emojis, a 20MB file upload limit and a server-specific profile picture with no subscription required.'
Unknown values 2
  • per object cap notes: the field may be stated in a source that was not read
  • retention notes: the field may be stated in a source that was not read

stoat.chat/storage/revolt-stoat-public-instance-as-bulk-storageJSONcomparereport an error

Free allowance
20 MB per file with no paid tier and no public way to raise it, and the public instance runs signup human-verification step.
Verdict
fails: quotathe free allowance is too small to matter
Cost
not stated
Identity
email?placeholder, not evidence; card unknown, phone unknown
Binding limit
noneno named constraint binds
Evidence
reported2 sources; a third party said so
Freshness
stale on 2026-11-05checked 2026-10-21 (inherited); stale on 2026-11-05
Free tier20 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
Pricenone stated
Identityemail (placeholder) not published
Egressnot recorded
Interfaceunknown
Toolingnot recorded
Evidence 2
datesourcewhat it proved
2026-10-21stoat.chat/the text of Free tier, above
2026-10-21github.com/revoltchat/self-hosted/issues/53cited 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
More fields 1
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"}
Unknown values 7
  • chaining: no value was recorded for this field
  • egress terms: no value was recorded for this field
  • interface: the access interface was not established
  • per object cap notes: no value was recorded for this field
  • per object cap stated: no value was recorded for this field
  • retention stated: no value was recorded for this field
  • tooling: no value was recorded for this field

stoat.chat/Messagingstorage/stoat-autumn-file-serviceJSONcomparereport an error

Sibling records disagree:

Free allowance
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.
Verdict
fails: quotathe free allowance is too small to matter
Cost
free tier
Identity
email?placeholder, not evidence; card unknown, phone unknown
Binding limit
per-object-cap20 MB per file
Evidence
reported3 sources; a third party said so
Freshness
stale on 2026-11-05checked 2026-10-21 (inherited); stale on 2026-11-05
Free tier20 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
Pricenone stated
Limits
  • per-object-cap (binding) 20 MB per file source
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.
Identityemail (placeholder) not published
EgressFree 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.
Per-object cap20 MB per file (20000000 bytes)
Retentionnot stated
Interfacerest rest
ToolingGenuinely 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.
Composes withUnlimited 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.
ReliabilitySmaller 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.
Parsed numbers
  • has-free-tier 1
  • per-object-cap 20 MB
Evidence 3
datesourcewhat it proved
2026-10-21stoat.chat/'Custom emojis, a 20MB file upload limit and a server-specific profile picture with no subscription required'
2026-10-21autumn.revolt.chat/attachments/abc123probe: curl -D - -> 301 location: https://cdn.stoatusercontent.com/attachments/abc123 (no signature, no expiry params)
2026-10-21api.revolt.chat/probe: curl -> 200, {"stoat":"0.16.2",...} — public API live
More fields 1
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"}
Unknown values 3
  • per object cap notes: the field may be stated in a source that was not read
  • retention notes: the field may be stated in a source that was not read
  • retention stated: the field may be stated in a source that was not read