In short
Social Relay enforces about 300 API requests per minute per application API key. Network hard quotas (Instagram ~50/24h, LinkedIn ~150/24h, Facebook Reels ~30/24h) apply per connected social account, not fleet-wide. Duplicate post text within 48 hours, in-flight publish caps, and optional daily token budgets protect accounts and cost. On 429, honor Retry-After; call posts/validate before publish.
What is not limited by user count
Instagram’s ~50 posts per 24 hours is per connected Instagram professional account—not one shared quota for all of your customers or for Social Relay as a product. Each end customer’s linked Page/account has its own network bucket. You can onboard as many profiles as your tokens and resource ceilings allow.
API request rate limits
These protect the API plane (not Meta/LinkedIn account quotas).
- Application API key: about 300 requests/minute
- Dashboard session: about 1,200 requests/minute
- Client IP soft cap: about 2,000/minute when the IP is known
- JSON body: max 256 KiB; media URLs: max 10 HTTPS (no private/localhost hosts)
Network hard quotas (per connection)
Social Relay rejects create when a profile would exceed these rolling windows (quota_exceeded). Soft daily volumes may appear as validate warnings for engagement quality.
- Instagram: ~50 posts / rolling 24h
- LinkedIn: ~150 posts / rolling 24h per account
- Facebook Reels: ~30 / rolling 24h per Page (when reels is enabled in platformOptions)
- Soft recommended: Facebook ~25/day, Instagram ~30/day, LinkedIn ~25/day
Publish volume on Social Relay
- In-flight (queued + processing): ~20 per application, ~50 per platform account
- Scheduled backlog: up to ~5,000 per application
- Profile hard ceiling: ~200 posts / 24h across networks (abuse protection)
- New connection ramp: ~10 posts / 24h on that network for the first 7 days after connect
Content fair use
- Duplicate normalized text on the same profile within 48 hours → duplicate_content (409)
- Mention rate limits for repeating the same @handle across posts
- Instagram: ≤5 hashtags, ≤3 mentions; spam hashtags (e.g. f4f) rejected
Daily token budget (optional)
GET /api/v1/billing/limits shows dailyTokenBudget, spentTodayUtc, remainingToday, and a product limits snapshot. PATCH with { "dailyTokenBudget": number | null } to set or clear a UTC-day spend cap. Useful if a bug could loop publishes. Over budget returns rate_limited with details.reason = daily_token_budget.
curl -sS "https://api.socialrelay.dev/api/v1/billing/limits" \
-H "Authorization: Bearer sk_live_…"Error handling cheat sheet
- 429 rate_limited — back off; honor Retry-After; reuse Idempotency-Key on publish
- 429 quota_exceeded — wait for the network rolling window; show used/limit from details
- 409 duplicate_content — change text or wait 48h
- 422 validation_failed — fix payload (media, hashtags, resource caps)
- 402 insufficient_tokens — top up the prepaid wallet
Best practices
- Always POST /api/v1/posts/validate before multi-network publish in production UIs
- Send a unique Idempotency-Key on every create post
- Rate-limit your own product so end users cannot hammer a single IG connection to 50/day unexpectedly
- Do not treat 429 as an OAuth failure (never tell users to “relink” solely for rate limits)

