Find out before an app runs out of room. When an app reaches a share of one of its plan's limits, Fileboy emails you, shows a banner in the dashboard and sends a
usage.threshold_reachedLimits
files
How many files the app has, counted the way the upload limit counts them (resized copies don't count). This is a hard limit: at 100% new uploads are refused.
videos
How many videos the app has, against the plan's video allowance.
storage
Every byte the app stores: originals, resized copies, video renditions, posters and captions, against the plan's storage allowance.
A limit the app's plan doesn't set is never alerted on. Data transfer is not measured per app yet, so it can't send alerts. See pricing for each plan's limits.
Fileboy checks every app's usage every few minutes. A threshold is reached when usage is at least that share of the limit, so 800 of 1,000 files reaches 80%.
Channels
Email
To everyone on the app, and up to 10 more addresses. A failed email is retried for up to a day.
Dashboard banner
Across the top of every page of the app while it is over a threshold. Dismissing it hides that threshold until the next one or the next month.
Webhook
A usage.threshold_reached event to every endpoint that receives it or every event. Signed and retried like every other event.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16{ "id": "b7c2d9e4-1f3a-5b6c-8d7e-9f0a1b2c3d4e", "type": "usage.threshold_reached", "created": "2026-11-14T10:05:00Z", "appId": "0b9e3b4c-5b52-4b5e-9d2e-1b0c2c8a4f77", "resource": { "metric": "files", "threshold": 80, "used": 812, "limit": 1000, "unit": "count", "percent": 81.2, "period": { "start": "2026-11-01T00:00:00Z", "end": "2026-12-01T00:00:00Z" }, "plan": "Free" } }
The resource fields are listed in the webhooks reference.
Open your app in the dashboard and go to Usage alerts. You can:
"test": trueThe page also lists the alerts the app has had.
GET /usage/alertsPATCH /usage/alertsmetrics1curl 'https://api.fileboy.io/usage/alerts' -H 'Authorization: token 0000000....'
1curl -X PATCH 'https://api.fileboy.io/usage/alerts' -H 'Authorization: token 0000000....' -H 'Content-Type: application/json' -d '{ "thresholds": [50, 80, 90, 100], "recipients": ["ops@example.com"], "metrics": { "videos": false } }'
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29{ "data": { "settings": { "enabled": true, "thresholds": [50, 80, 90, 100], "metrics": { "files": true, "videos": false, "storage": true }, "emailMembers": true, "recipients": ["ops@example.com"], "webhook": true }, "period": { "key": "2026-11", "start": "2026-11-01T00:00:00Z", "end": "2026-12-01T00:00:00Z" }, "alerts": [ { "id": "8d2b4f0e-5a1c-5e3b-9f7d-2c4e6a8b0d13", "metric": "files", "threshold": 80, "used": 812, "limit": 1000, "notified": true, "email": "sent", "createdAt": "2026-11-14T10:05:00Z" } ] } }
400 validation_errorinvalid_jsonempty_update