---
title: "Create Post"
method: POST
path: "/workspaces/{workspace_id}/posts"
tags: ["posts"]
---

# Create Post

`POST /workspaces/{workspace_id}/posts`

## Request

- Base URL: `https://api.reeldrop.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.reeldrop.io/workspaces/{workspace_id}/posts`
- Auth: HTTP bearer

## Path parameters

- `workspace_id` string, required

## Request body

- PostCreate
  - `ig_account_id` string, required
  - `mode` 'post' | 'reel' | 'story' | 'carousel', required
  - `caption` string
  - `hashtags` string[]
  - `media_urls` string[]
  - `media_kinds` string[]
  - `video_s3_key` string, nullable
  - `thumbnail_s3_key` string, nullable
  - `reel_meta` ReelMeta: Reel-specific metadata fields.
    - `audio_name` string, nullable
    - `audio_artist` string, nullable
    - `audio_start_ms` integer, nullable
    - `cover_frame_ms` integer, nullable
    - `duration_ms` integer, nullable
    - `share_to_feed` boolean
    - `collaborators` string[]
    - `allow_comments` boolean
    - `allow_remixing` boolean
    - `is_trial` boolean
    - `trial_graduation` 'MANUAL' | 'SS_PERFORMANCE': Instagram's `trial_params.graduation_strategy` values, verbatim. MANUAL — the creator graduates (shares to followers) from the Instagram app. SS_PERFORMANCE — Instagram auto-graduates the reel if it performs well, by its own undisclosed threshold. These are the ONLY two options the Content Publishing API exposes: there is no endpoint to graduate a trial reel from outside the app, and no media field that reports whether it has graduated.
  - `carousel_meta` CarouselMeta: Carousel-specific metadata fields.
    - `carousel_id` string, nullable
    - `slide_count` integer
  - `story_meta` StoryMeta: Story-specific metadata fields. Deliberately minimal — Instagram's Content Publishing API only accepts image_url/video_url for media_type=STORIES; caption, share_to_feed, location_id, and comment settings are all invalid for stories and rejected by the container-create call. user_tags was dropped: IG only resolves tags for Business/Creator accounts, so most tags failed the whole story with a terminal "Invalid user id" error.
    - `is_video` boolean
  - `scheduled_at` string, date-time, nullable
  - `publish_now` boolean
  - `automation_id` string, nullable
  - `first_comment` string, nullable
  - `ai_caption_used` boolean
  - `ai_hashtags_used` boolean
  - `client_token` string, nullable

## Response `201`

Successful Response

- PostOut
  - `id` string, required
  - `workspace_id` string, required
  - `ig_account_id` string, required
  - `created_by` string, required
  - `mode` 'post' | 'reel' | 'story' | 'carousel', required
  - `status` 'draft' | 'scheduled' | 'publishing' | 'published' | 'failed', required
  - `caption` string, required
  - `hashtags` string[], required
  - `media_urls` string[], required
  - `media_kinds` string[], required
  - `reel_meta` ReelMeta, required: Reel-specific metadata fields.
    - `audio_name` string, nullable
    - `audio_artist` string, nullable
    - `audio_start_ms` integer, nullable
    - `cover_frame_ms` integer, nullable
    - `duration_ms` integer, nullable
    - `share_to_feed` boolean
    - `collaborators` string[]
    - `allow_comments` boolean
    - `allow_remixing` boolean
    - `is_trial` boolean
    - `trial_graduation` 'MANUAL' | 'SS_PERFORMANCE': Instagram's `trial_params.graduation_strategy` values, verbatim. MANUAL — the creator graduates (shares to followers) from the Instagram app. SS_PERFORMANCE — Instagram auto-graduates the reel if it performs well, by its own undisclosed threshold. These are the ONLY two options the Content Publishing API exposes: there is no endpoint to graduate a trial reel from outside the app, and no media field that reports whether it has graduated.
  - `carousel_meta` CarouselMeta, required: Carousel-specific metadata fields.
    - `carousel_id` string, nullable
    - `slide_count` integer
  - `story_meta` StoryMeta, required: Story-specific metadata fields. Deliberately minimal — Instagram's Content Publishing API only accepts image_url/video_url for media_type=STORIES; caption, share_to_feed, location_id, and comment settings are all invalid for stories and rejected by the container-create call. user_tags was dropped: IG only resolves tags for Business/Creator accounts, so most tags failed the whole story with a terminal "Invalid user id" error.
    - `is_video` boolean
  - `scheduled_at` string, date-time, nullable, required
  - `published_at` string, date-time, nullable, required
  - `schedule_arn` string, nullable, required
  - `ig_container_id` string, nullable, required
  - `ig_permalink` string, nullable, required
  - `publish_error` string, nullable, required
  - `automation_id` string, nullable, required
  - `first_comment` string, nullable, required
  - `first_comment_error` string, nullable, required
  - `ai_caption_used` boolean, required
  - `ai_hashtags_used` boolean, required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/reeldrop/apis/reeldrop-api.md) · [All operations](https://skmtc.dev/reeldrop/apis/reeldrop-api/llms.txt) · [OpenAPI document](https://skmtc.dev/reeldrop/apis/reeldrop-api/revisions/d3b2a338556c?raw)
