socioi.comDocs

Errors & rate limits

HTTP status codes and quotas.

HTTP status

StatusMeaning
400Bad request / validation
401Missing or invalid credential
403Forbidden (e.g. trial expired, wrong org resource)
404Not found
429Rate limited
5xxServer error — retry with backoff

Rate limits (Public API + MCP)

Limits are per organization and shared across Public API and MCP so clients cannot double the quota by using both.

ActionLimitApplies to
Create post100 / hourPOST /posts, MCP socioi_create_post
GET / read600 / minuteAll Public API GETs (incl. TikTok creator-info / analytics), MCP read tools
Media upload-url60 / minutePOST /media/upload-url
Upload from URL30 / minutePOST /media/upload-from-url, MCP socioi_upload_media_from_url

429 responses include a Retry-After header and JSON retryAfter (seconds). Production uses Redis (REDIS_URL) so limits survive restarts and multi-instance deploys.

Plans also enforce channel quotas. Check GET /channels/quota.

Common validation errors

StatusMessage (example)Fix
403One or more channels are invalidUse channel ids from GET /channels that you can access
403One or more media items are invalidUse media ids from your own workspace (GET /media)
400YouTube title must be 100 characters or fewerShorten title; < and > are not allowed either
400YouTube madeForKids must be true or falseSend a boolean
400TikTok postMode must be direct or inboxUse direct or inbox
400TikTok branded content (brandContent) cannot use privacyLevel SELF_ONLYChoose another visibility or drop brandContent
400settings.__type "…" does not match channel provider "…"Match __type to the channel's provider

Publishing errors from the networks themselves (expired access, unsupported media, TikTok visibility no longer allowed) appear on the post target's errorMessage, not as an HTTP error on create.

Trial expired

JSON
{ "error": "TRIAL_EXPIRED", "message": "…", "trialEndsAt": "…" }

Upgrade on https://socioi.com/billing.