Skip to main content
This guide assumes you’ve already followed the Quickstart — you’ve got an API token, a workspace ID, and at least one connected social profile. Here we’ll go deeper into what each step does and the options you have at each one.

1. Choose a target profile

A post targets exactly one profile. Decide where the post should land first.
Pick the relevant profile from the response (note its id and the network it belongs to — this determines what fields apply). See Social profiles for the per-network field guide.

2. Prepare media (optional)

If your post needs an image or video, upload it first. Uploads go directly to storage in three steps — presign, PUT the bytes, then confirm:
The temporary media id returned by presign is the id you’ll reference from the post. See Upload and manage media for the full flow, or reuse an existing media library file if you already have one.
For text-only posts (e.g. an X update with no image), skip this step entirely.

3. Create the post

The minimum required fields are profile_id, text (or media_content_ids), and publish_type.
The response immediately includes the post object with status: "publishing". The actual handoff to the social network happens asynchronously.

4. Wait for it to publish

Poll the post until its status leaves publishing:
When status becomes published:
  • url contains the live link on the social network
  • published_at contains the publish timestamp
  • social_post contains network-specific IDs (useful for fetching metrics later)
If status becomes failed:
  • error_message explains why
  • The most common causes are: expired profile connection, media that violates the network’s spec (size, aspect ratio, duration), or rate limiting on the social network’s side
Polling every 5–10 seconds is plenty — most posts complete within seconds. For high-volume integrations, consider polling only the posts you’ve recently created instead of the whole list endpoint.

5. Inspect the result

For a successful Instagram post you might see:
That’s it — you’ve published programmatically. Now learn how to schedule for later or queue across the week.