Usage and limits
What counts toward storage, delivery, and API usage, what happens at 50, 80, and 100 percent, and the limits on each plan.
On this page
SteadyLink meters a few resources separately, and each limit stops only the work that uses it. Running out of delivery does not stop uploads; running out of storage does not stop delivery. This page is for workspace owners and admins who want to predict usage, understand a limit error, and choose what happens when a limit is reached.
What is metered#
| Resource | Unit | Resets |
|---|---|---|
| Storage | Bytes kept across every retained revision | Never; it is a running total |
| Delivery | Bytes in successful file responses | Every usage period |
| Management API operations | One per request made with an API key | Every usage period |
| Conversion credits | Weighted credits per conversion job | Every usage period |
The usage period follows your subscription's billing period on monthly paid plans. On the free plan and on annual plans it is the calendar month (UTC).
Conversions have their own credit model; see File conversions.
Storage#
Storage counts:
- The current revision of every file.
- Every older revision you have kept. Revisions are not removed automatically yet, so history grows until you delete it. See Revisions.
- Space reserved for uploads in progress. Each open upload session holds its declared size until it finishes, fails, expires, or is cancelled.
Deleting a revision releases its bytes immediately. Deleting a file or a bucket releases everything in it.
Delivery#
Delivery counts successful (2xx) responses from stable and pinned links. Each response counts as its actual size or 64 KB, whichever is larger, so a 3 KB icon counts as 64 KB and a 2 MB photo counts as 2 MB. The minimum keeps very small, very frequent requests from being free to serve.
These do not count toward delivery:
HEADrequests.- Failed and refused responses:
403,404,423, and other errors. - Previews in the dashboard.
Analytics always show the real number of bytes sent, without the 64 KB minimum, so analytics totals and metered delivery can differ for workspaces with many small files.
Management API operations#
Every request authenticated with a workspace API key counts as one operation, whatever it does. Requests made by signed-in people in the dashboard do not count, and neither do file downloads from delivery links or byte uploads sent to presigned URLs.
API keys are also rate-limited per minute (see the table below). Going over a rate limit returns 429 for a short time and does not use your monthly allowance. See Errors.
Thresholds#
SteadyLink tracks each resource against your plan's allowance for the period:
- 50%: a notification lets the workspace know. Nothing is restricted.
- 80%: a second notification, so an owner can upgrade or plan ahead.
- 100%: the workspace's limit rule applies (below).
Each threshold notifies once per resource per period.
What happens at 100%#
The owner chooses one rule for the workspace:
| Rule | What happens to work that would go over the limit |
|---|---|
Stop (hard_stop) | Refused until the period resets or the plan changes. |
Throttle (throttle) | Refused with the code usage_throttled and a Retry-After header, so clients back off and try again later. |
Require an upgrade (require_upgrade) | Refused with an upgrade suggestion until the plan changes. |
Continue with paid usage (billed_overage) | Allowed and billed as overage, up to the owner's monthly spending cap. Past the cap, the cap rule (stop or throttle) applies. |
New workspaces on Free and Personal start with Require an upgrade; Pro and Business start with Stop. Only the owner can change the rule.
Paid overage is available on paid plans billed monthly; it is not available on Free or on annual billing. It requires the owner's explicit consent and a monthly spending cap, and it applies to storage, delivery, and conversions. Management API operations never go into overage; at 100% they stop, throttle, or require an upgrade.
Errors at the limit#
Refused work returns a structured error your code can branch on:
{
"detail": {
"code": "usage_limit_exceeded",
"resource": "delivery_bytes",
"usage": 53687091200,
"reserved": 0,
"requested": 65536,
"limit": 53687091200,
"resetAt": "2026-11-01T00:00:00Z",
"behavior": "require_upgrade",
"upgrade": { "recommendedPlan": "personal", "url": "/dashboard/settings?section=plans" }
}
}- Delivery and API limits return
429withRetry-After: 3600. - Storage limits return
413. A new upload that would not fit is refused withusage_limit_exceededorstorage_quota_exceeded. Existing files keep being delivered. - Branch on
codeandresource, not on message text.
Plan limits#
Paid limits apply while the subscription is active. If a paid subscription lapses, the workspace falls back to Free limits.
| Free | Personal | Pro | Business | |
|---|---|---|---|---|
| Storage | 10 GB | 15 GB | 100 GB | 500 GB |
| Delivery per period | 50 GB | 100 GB | 1 TB | 3 TB |
| Members | 1 | 1 | 5 | 20 |
| Largest file | 100 MB | 250 MB | 500 MB | 2 GB |
| Management API operations per period | 50,000 | 250,000 | 2,000,000 | 25,000,000 |
| API requests per minute (read / write) | 120 / 30 | 300 / 75 | 1,200 / 300 | 6,000 / 1,500 |
| Active API keys | 1 | 2 | 10 | 50 |
| Revision history window | 30 days | 90 days | Long-term | Long-term |
| Single sign-on | No | No | No | Yes |
Enterprise limits are set by contract. Plan prices and the full feature comparison are on the pricing page.
The revision history window is the published policy for each plan; automatic expiry is not active yet, so revisions are kept until deleted on every plan.
Where to see usage#
Owners and admins can open Settings > Billing in the dashboard to see each metered resource for the current period and the plan's feature limits. Over the API, GET /api/usage/summary returns the same figures, and GET /api/analytics/storage breaks storage down by bucket and file.