Skip to main content
A post publishes content to one or more platforms connected to a profile. You send one request; MADIAD Hub fans it out to every platform you list and returns a per-platform result.

Choose an endpoint by media type

EndpointUse for
POST /v1/posts/textText-only updates
POST /v1/posts/photosOne or more images (and photo carousels)
POST /v1/posts/videoA single video
The photo and video endpoints use multipart/form-data. Text uses JSON.

Fan out with platforms[]

List every target platform. The same content goes to each, unless you override per platform.
curl -X POST https://api.madiad.com/v1/posts/photos \
  -H "Authorization: Bearer $MADIAD_API_KEY" \
  -H "Idempotency-Key: launch-001" \
  -F "profile_id=prof_01HZX9F2K4M7N6QR8T0V2W4Y6Z" \
  -F "platforms[]=instagram" \
  -F "platforms[]=facebook" \
  -F "platforms[]=tiktok" \
  -F "caption=New blend dropping today" \
  -F "photos[]=@./launch.jpg"

Per-platform overrides

caption is the shared default. Override it for a single platform with a <platform>_caption field — handy for hashtags, mentions, or length limits.
  -F "caption=New blend dropping today" \
  -F "instagram_caption=New blend dropping today ☕ #specialtycoffee" \
  -F "x_caption=New blend out now →"
The same prefix pattern applies to other per-platform options, such as instagram_first_comment.

Platform requirements

Facebook posts go to a Page, not a personal profile. If the profile has exactly one Page it is used automatically; if it has several, pass facebook_page_id to choose one.
Send photos as binary file uploads (photos[]=@file). For video you can upload a file or pass a public video_url.
Reddit posts require a title in addition to the caption — pass reddit_title.

Read the response

A post returns an id and a results object keyed by platform:
{
  "id": "post_01HZX9G4P6R8S0T2V4W6X8Y0Z2",
  "status": "published",
  "results": {
    "instagram": { "status": "published", "url": "https://instagram.com/p/abc123" },
    "facebook":  { "status": "published", "url": "https://facebook.com/12345/posts/67890" },
    "tiktok":    { "status": "processing" }
  }
}
  • published — live, with a url.
  • processing — still uploading (common for video). Check back or subscribe to webhooks.
  • failed — includes an error explaining why that platform rejected the post.
A post can partially succeed — one platform publishes while another fails. Inspect results per platform rather than the top-level status alone.

Check status later

Long-running uploads finish asynchronously. Poll the post, or let MADIAD Hub call you:
curl https://api.madiad.com/v1/posts/post_01HZX9G4P6R8S0T2V4W6X8Y0Z2 \
  -H "Authorization: Bearer $MADIAD_API_KEY"
For push updates instead of polling, see Webhooks.