Skip to content

Plan limits, quotas and rate limits ​

Socifyr limits come from three places: your plan, per-API-key guardrails, and API rate limits. Plan numbers below come from the shared limits table the API enforces, so they match what the dashboard shows. For prices, see the Billing page in the dashboard or socifyr.com/pricing.

What does each plan include? ​

LimitFreeProBusiness
Posts per month30UnlimitedUnlimited
Connected accounts31040
Posts to X per month550300
Media storage1 GB50 GB500 GB
SchedulingNoYesYes
WebhooksNoNoYes
Webhook endpoints0025
API keys15Unlimited
Team members (owner counts as one)13Unlimited
Media libraryYesYesYes
Content history visibleLast 30 daysFullFull

Self-hosted installs skip the plan checks.

How are the limits enforced? ​

  • Posts per month. Every create or publish call counts once, however many accounts it targets. Drafts count when they publish. At the limit the API returns Upload limit reached for your plan. Upgrade to continue. with status 403.
  • Connected accounts. Checked only when you add a new account. Reconnecting never counts against the cap, and workspaces already over a lowered cap keep their accounts.
  • X posts. X bills per post, so the monthly allowance is a hard cap. Over it, posts to X are blocked until the monthly reset. Error: X (Twitter) post allowance reached (N/month on your plan). ...
  • Storage. Uploads that would pass the limit fail with Storage limit reached for your plan. Delete unused media or upgrade to continue.
  • Scheduling. A request with scheduledAt on the Free plan fails with Scheduling is not available on your current plan. Upgrade to continue.
  • Webhooks. Creating one off Business fails with Webhooks are not available on your current plan. Upgrade to Business to continue.

All plan blocks return 403, not 402, even though the SDK has a UsageLimitError class for 402.

How do I check my current usage? ​

bash
socifyr usage
typescript
const usage = await socifyr.workspaces.usage()
console.log(usage.tier, usage.uploads, usage.accounts, usage.xPosts, usage.storage)
python
usage = client.usage()
bash
curl https://api.socifyr.com/api/usage -H "Authorization: Bearer $SOCIFYR_API_KEY"
json
{ "tool": "get_usage", "arguments": {} }

Each dimension (uploads, accounts, xPosts, storage) returns used, limit, remaining and unlimited. limit and remaining are null when unlimited. The response also has tier and xSpendUsd, the estimated X spend this month.

What per-key guardrails exist? ​

Set on an API key, they apply only to requests using that key.

GuardrailMeaning
dailyPostLimitPosts per UTC day through the key.
monthlyXSpendCentsCapEstimated X spend per month, in US cents.
requireApprovalPosts wait for a human to approve.

See Approvals and guardrails.

What are the API rate limits? ​

Route groupLimit
Most routes60 requests per minute
GET /content, GET /content/:id240 per minute
/ai/*10 per minute
POST /analytics/sync5 per 10 minutes
Hosted MCP endpoint /api/mcp120 per minute per IP

A rate-limited request returns 429. Plan limits are separate.

What are the size and length limits on a request? ​

FieldLimit
text25,000 characters
title500 characters
description5,000 characters
firstComment.text2,200 characters
idempotencyKey64 characters
Bulk schedule500 rows, 500,000 characters of CSV
Video multipart upload to /content/video512 MB
Media library upload500 MB
post_image (MCP)10 images

Each platform adds its own caption, file size and duration limits. See platform constraints.

FAQ ​

Do drafts use my post allowance? ​

No. The counter moves when a draft publishes.

Why can I not post to X when I have posts left on my plan? ​

The X allowance is separate from the monthly post count. Check xPosts in usage.

Next steps ​