Overview
Postnomic enforces subscription plan limits at the API level to ensure fair resource usage. The SubscriptionQuotaService checks your current usage against your plan's limits before allowing create and upload operations. Understanding how enforcement works helps you plan your usage and avoid unexpected restrictions.
How Enforcement Works
Every time you perform a quota-controlled action (creating a blog, publishing a post, adding a user, or uploading media), the API:
- Identifies the blog owner via the
Blog.OwnerIdfield - Looks up the owner's active subscription
- Retrieves the associated
SubscriptionPlanwith its limits - Counts current usage against the plan's limits
- Allows the action if within limits, or rejects with a 403 response if limits are exceeded
Only subscriptions with an Active or Trialing status are considered valid. If no active subscription exists, the user falls back to Free plan limits.
Enforced Limits
Blog Limit
The number of blogs you can own is capped by your plan.
- How it is counted: Total blogs where
OwnerIdmatches your user ID - Free: 1 blog
- Plus: 3 blogs
- Pro: 10 blogs
- Enterprise: 999 (effectively unlimited)
Posts per Month
The number of posts you can create each calendar month is limited.
- How it is counted: Posts with
CreatedAton or after the first day of the current month, summed across all blogs you own - Free: 5 posts/month
- Plus: 25 posts/month
- Pro: 100 posts/month
- Enterprise: 9,999 (effectively unlimited)
The counter resets on the first day of each month at midnight UTC.
Storage
Total media storage across all your blogs is capped.
- How it is counted: Sum of
StorageUsedBytesacross all blogs whereOwnerIdmatches your user ID - Free: 100 MB
- Plus: 1 GB
- Pro: 10 GB
- Enterprise: 100 GB
Users per Blog
The number of team members on a single blog is limited.
- How it is counted: Number of
BlogUserrecords for the specific blog - Free: 1 user
- Plus: 3 users
- Pro: 10 users
- Enterprise: 999 (effectively unlimited)
This limit is enforced per blog, not across all blogs.
403 Forbidden Responses
When a quota is exceeded, the API returns a 403 Forbidden response with a structured ProblemDetails body:
{
"title": "Quota Exceeded",
"status": 403,
"detail": "Cannot create blog. Blog limit reached: 3 of 3 allowed on the Plus plan."
}
The detail field provides a specific, actionable message that includes:
- The action that was blocked
- The current usage count
- The plan limit
- The plan name
What Is NOT Blocked
Quota enforcement does not restrict:
- Reading content — You can always view, list, and search existing content
- Editing existing content — Updates to existing posts, settings, and metadata are always allowed
- Deleting content — You can delete resources at any time, which may bring you back within limits
- Changing statuses — Moving a post from Draft to Published does not count as creating a new post
Legacy Blogs
Blogs that existed before the ownership tracking system was introduced (blogs without an OwnerId) are treated as unrestricted and are not subject to quota enforcement. This ensures backward compatibility for early adopters.
Resolving Quota Issues
If you hit a quota limit, you have two options:
Reduce Usage
- Delete unused blogs to free up blog slots
- Delete old posts or wait for the monthly counter to reset
- Remove unused media to reclaim storage
- Remove inactive users from your blog
Upgrade Your Plan
Navigate to Settings → Subscription and upgrade to a plan with higher limits. Upgraded quotas take effect immediately after payment.
Checking Your Current Usage
The dashboard displays your current usage alongside your plan limits:
- Blogs: X of Y
- Posts this month: X of Y
- Storage: X MB of Y MB
- Users: X of Y (per blog)
Use these indicators to monitor your usage and plan upgrades proactively before reaching limits.