Create post
Authorization
Request Body
platform_posts[]
size_bytes is only needed for POST/v1/media local-file uploads.Response Body
202
201
400
401
402
422
500
Media Inputs
Hosted URL: if your image or video is already publicly reachable, send it in platform_posts[].media_urls. Do not call POST/v1/media for this path.
Local file bytes: reserve an upload with POST/v1/media, PUT the bytes to the returned upload URL, then publish with platform_posts[].media_ids. size_bytes is optional; UniPost hydrates the actual byte length after upload.
Scheduling Limits
Free active backlog: Free workspaces can keep up to 50 undeleted parent posts in scheduled status. Exceeding that cap returns PLAN_SCHEDULED_POST_LIMIT_EXCEEDED. The existing 100 posts/month quota still applies when posts are created and delivered. Paid plans do not cap active scheduled backlog.
Media retention: scheduled posts keep uploaded media until they reach a final status. After success, failed, partial, or cancellation, UniPost retains media according to the workspace plan before cleanup.
Publishing Result
Poll Model: immediate publish returns 202 after UniPost accepts and queues delivery. Poll GET/v1/posts/:post_id to read the final publishing result.
Failure Model: failed result rows include error_source, error_temporality, provider_error, and retry_policy. Use retry_policy.will_retry for automatic retries and avoid parsing error_message.
Push Model: create a webhook subscription with POST/v1/webhooks to receive final publishing events from UniPost.