staqlydocs

Limits

Every limit a person, an agent or an integration can run into, in one place, with what happens when you reach it.

Edit on GitHub

Staqly has three kinds of limits: what each platform accepts, what the workspace's plan allows (cloud only), and what the API accepts per request or per minute. This page lists all of them. When a request goes over one, the error says which.

Platforms

Each channel checks a post against its platform before anything goes out: the text the channel will actually receive (its own text, else the post's, after link handling), its media and the settings the platform needs. A post over a limit is refused with 422 validation_failed keyed targets.<channel_id>.content (or .settings.<key>); GET /v1/posts/{id}/preview reports the same as warnings without failing.

PlatformTextMediaNeedsLinks
Your own automationno limitup to 10 images, videos, GIFs or files—kept
X280 characters4 pictures or 1 video—removed (or plain text)

The other platforms of the catalog are listed as soon with their published limits, so the composer and the preview already check them.

A channel's Links in posts setting decides what its links become when it publishes: kept, removed, or shown as plain text (https://example.com/a becomes example[.]com/a). X allows only the last two and removes links by default. The character count above uses the text after this change. See Channels.

Platforms on a server

Each platform can be turned off for a whole server with PROVIDER_<ID>_ENABLED=false in its environment, in the Community Edition and in the cloud. A turned-off platform leaves the catalog and the dashboard, connecting it answers 409 provider_disabled, and new posts or new targets on its channels are refused the same way. Posts that already had one of its channels keep it: they can still be edited and publish as planned. An OAuth platform without its app's keys (PROVIDER_<ID>_CLIENT_ID, PROVIDER_<ID>_CLIENT_SECRET) is listed as soon. See Developer apps.

Plans (cloud)

StarterPlusProBusiness
Price per user per month (billed yearly)€15 (€12)€29 (€23)€59 (€47)€99 (€79)
Posts per monthunlimitedunlimitedunlimitedunlimited
Channels51540unlimited
Posts to X per month (each post and reply; more in bundles)2504509501,600
Seats (members)billed per userbilled per userbilled per userbilled per user
Alerts310unlimitedunlimited
Webhooks310unlimitedunlimited
API keys210unlimitedunlimited
Storage10 GB50 GB200 GB1 TB
File size25 MB100 MB250 MB1 GB
Backups, activity log export, export with filesnoyesyesyes
Collections, schedules, MCP, historyunlimitedunlimitedunlimitedunlimited

The Community Edition has none of these limits. Going over one answers 402 plan_limit_exceeded with details.limit naming it. Starter starts with a 7-day trial (with Stripe billing: card required, nothing charged until it ends); when the trial or a paid period ends unpaid, the workspace becomes read-only (402 plan_expired) until a plan is paid for. Details: Plans.

Posts and schedules

WhatLimit
Post text50,000 characters (each channel then applies its own limit)
Files per post20
Channels per post, channels per schedule50
Tags per post20, each at most 40 characters
Comments (thread parts) after a post25, each up to a day (86,400 s) after the one before
Publish timein the future, at most a year ahead
Recurring scheduletimes of day (HH:MM) with weekdays, or every 5 to 10,080 minutes (a week)
A schedule's endpoint call60 seconds
Waiting for your own automation's resulta collection's processing timeout, 60 s to 24 h, default 1 hour (PROCESSING_TIMEOUT)

Publishing and other jobs

Publishing, schedule runs and sign-in refreshes are jobs.

WhatLimit
Tries per job3, then the job and its target are failed (Retry starts again)
Wait between triesabout 1, 5 and 15 minutes (up to 20% later, so retries spread out)
One run of a jobpublishing a target or a comment 10 min, a schedule run 3 min, a sign-in refresh 2 min
A job left running by a server that stoppedqueued again after 15 minutes
Jobs at onceJOB_CONCURRENCY (default 4, at most 64); one workspace gets at most half while another waits
Finished jobs kept7 days (done, failed and cancelled)

Webhooks and alerts

WhatLimit
Delivery triesmax_attempts, 1 to 20, default 8, with growing waits (15 s doubling, at most an hour apart)
Timeout per deliverytimeout_ms, 1,000 to 60,000, default 10,000
Test sends (webhooks, alerts, channels)10 per minute per key or session, burst 5
Alert digest window0 to 86,400 seconds

See Webhooks and Alerts.

Requests

WhatLimit
Page size of list endpointsdefault 50, at most 200 (pagination)
A listing5 seconds, then 503 unavailable: retry or narrow it with filters
UploadMAX_UPLOAD_MB on the server (default 100 MB), or the plan's file size if smaller (media)
Idempotency-Keyremembered for 24 hours (idempotency)
Invoices per page (billing details)24

Rate limits

LimiterApplies toDefault
Per client IPsign-in with an API key or recovery key, Google's callback, email codes (start and check), invitations, device links, creating a workspace10 per minute, burst 10
Per key or session cloudeverything else under /v1 and /mcp600 per minute, burst 100
Email codesone per address every 30 seconds, 5 per address per hour, 20 per client IP per hourfixed
Passkey sign-ins30 per client IP per 10 minutesfixed
New workspaces cloud5 per client IP per hourfixed

Over a limit: 429 rate_limited (or code_cooldown for a code asked too soon) with a Retry-After header. The Community Edition tunes its per-IP limit with RATE_LIMIT_*; see Monitoring.

WhatLasts
Browser session30 days (SESSION_TTL)
Email code10 minutes, one use, 5 wrong tries
Proof of the current address when changing it10 minutes
Passkey prompt5 minutes, one use
Google sign-in started in this browser10 minutes
Connect a device link (QR code)5 minutes, one use
Invitation7 days
Workspace export or backup download24 hours

Next steps

On this page