Skip to main content
POST
/
posts
Create post
curl --request POST \
  --url https://api.postflow.app/v1/posts \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "content": "<string>",
  "selectedAccountIds": [
    "<string>"
  ],
  "selected_media_ids": [
    "<string>"
  ],
  "publication_date": "2026-06-14T09:00",
  "assigneesIds": [
    "<string>"
  ],
  "isDraft": true,
  "isPublishNow": true,
  "name": "<string>",
  "note": "<string>",
  "visible_for_client": true,
  "publication_delay_between": 29,
  "fb_post_type": 1,
  "fb_video_title": "<string>",
  "ig_post_type": 1,
  "ig_collaborators": [
    "<string>"
  ],
  "ig_share_to_feed": true,
  "ig_allow_comments": true,
  "ig_audio_name": "<string>",
  "li_post_type": 1,
  "li_carousel_title": "<string>",
  "tt_post_type": 1,
  "tt_privacy_level": 1,
  "tt_carousel_title": "<string>",
  "tt_disable_duet": true,
  "tt_disable_stitch": true,
  "tt_disable_comment": true,
  "tt_brand_content": true,
  "tt_brand_organic": true,
  "tt_auto_music": true,
  "tt_is_aigc": true,
  "pi_pin_title": "<string>",
  "pi_url_link": "<string>",
  "pi_boards": {
    "101870452302622738": {
      "id": "944355735095378956"
    }
  },
  "pi_sections": {
    "101870452302622738": {
      "id": "944577895350359536"
    }
  },
  "gb_post_type": 1,
  "gb_event_title": "<string>",
  "gb_start_date": "2026-06-14 09:00:00",
  "gb_end_date": "2026-06-15 09:00:00",
  "gb_use_time": true,
  "gb_action_type": 1,
  "gb_action_url": "<string>",
  "gb_coupon_code": "<string>",
  "gb_redeem_url": "<string>",
  "gb_term_conditions": "<string>",
  "yt_post_type": 1,
  "yt_video_title": "<string>",
  "yt_categories": {
    "103662144775271141": "18"
  },
  "yt_playlists": {
    "105589781181582167": "PLIYX39FN2TYcHJgovb4Vy1Q3aZqRTDJSP"
  },
  "yt_privacy_level": 1,
  "yt_license": 1,
  "yt_embeddable": true,
  "yt_notify_subscribers": true,
  "yt_made_for_kids": true,
  "dr_title": "<string>",
  "tw_post_type": 1,
  "tw_reply_settings": 1,
  "th_post_type": 1,
  "th_topic_tag": "<string>",
  "everyone_must_approve": true,
  "notify_assignee": true,
  "should_skip": true,
  "labelIds": [
    "<string>"
  ],
  "li_poll": {
    "question": "<string>",
    "option_1": "<string>",
    "option_2": "<string>",
    "option_3": "<string>",
    "option_4": "<string>",
    "duration": "ONE_DAY"
  },
  "yt_video_tags": [
    "<string>"
  ],
  "dr_tags": [
    "<string>"
  ],
  "tw_poll": {
    "option_1": "<string>",
    "option_2": "<string>",
    "option_3": "<string>",
    "option_4": "<string>",
    "duration_minutes": 123
  },
  "th_poll": {
    "option_1": "<string>",
    "option_2": "<string>",
    "option_3": "<string>",
    "option_4": "<string>"
  },
  "customized": {
    "facebook": {
      "content": "customized content for Facebook",
      "media_ids": [
        "168057885972398982"
      ]
    },
    "instagram": {
      "content": "customized content for Instagram",
      "media_ids": [
        "168057885972398982"
      ]
    }
  },
  "first_comments": {
    "enabled": true,
    "socialAccountIds": [
      "<string>"
    ],
    "conditionType": 1,
    "conditionValue": 123,
    "content": "<string>",
    "customized": [
      {
        "enabled": true,
        "socialAccountIds": [
          "<string>"
        ],
        "conditionType": 1,
        "conditionValue": 123,
        "content": "<string>"
      }
    ]
  }
}
'
{
  "id": "<string>",
  "public_id": "<string>",
  "organization_id": "<string>",
  "user_id": "<string>",
  "post_id": "<string>",
  "cu_task_id": "<string>",
  "name": "<string>",
  "status": 1,
  "note": "<string>",
  "visible_for_client": true,
  "content": "<string>",
  "content_weighted_length": 123,
  "has_customized_content": true,
  "locations": [
    {
      "id": "<string>",
      "name": "<string>",
      "location": [
        "<string>"
      ],
      "network": "twitter",
      "followers_count": 123,
      "username": "<string>"
    }
  ],
  "image_tags": [
    {
      "id": "<string>",
      "media_id": "<string>",
      "network": "twitter",
      "x": 123,
      "y": 123,
      "mode": "user",
      "username": "<string>",
      "social_account_id": "<string>",
      "product": [
        "<string>"
      ]
    }
  ],
  "selected_media_ids": [
    "<string>"
  ],
  "first_comments": {
    "enabled": true,
    "socialAccountIds": [
      "<string>"
    ],
    "conditionType": 1,
    "conditionValue": 123,
    "content": "<string>",
    "customized": {
      "linkedin": {
        "enabled": true,
        "socialAccountIds": [
          "<string>"
        ],
        "conditionType": 1,
        "conditionValue": 123,
        "content": "<string>"
      },
      "instagram": {
        "enabled": true,
        "socialAccountIds": [
          "<string>"
        ],
        "conditionType": 1,
        "conditionValue": 123,
        "content": "<string>"
      },
      "facebook": {
        "enabled": true,
        "socialAccountIds": [
          "<string>"
        ],
        "conditionType": 1,
        "conditionValue": 123,
        "content": "<string>"
      },
      "youtube": {
        "enabled": true,
        "socialAccountIds": [
          "<string>"
        ],
        "conditionType": 1,
        "conditionValue": 123,
        "content": "<string>"
      },
      "threads": {
        "enabled": true,
        "socialAccountIds": [
          "<string>"
        ],
        "conditionType": 1,
        "conditionValue": 123,
        "content": "<string>"
      },
      "bluesky": {
        "enabled": true,
        "socialAccountIds": [
          "<string>"
        ],
        "conditionType": 1,
        "conditionValue": 123,
        "content": "<string>"
      },
      "twitter": {
        "enabled": true,
        "socialAccountIds": [
          "<string>"
        ],
        "conditionType": 1,
        "conditionValue": 123,
        "content": "<string>"
      }
    }
  },
  "publication_date": "2023-11-07T05:31:56Z",
  "publication_timestamp": 123,
  "customized_publication_date": [
    "<string>"
  ],
  "publication_delay_between": 123,
  "fb_post_type": 1,
  "fb_video_title": "<string>",
  "ig_post_type": 1,
  "ig_collaborators": [
    "<string>"
  ],
  "ig_share_to_feed": true,
  "ig_allow_comments": true,
  "ig_audio_name": "<string>",
  "li_post_type": 1,
  "li_carousel_title": "<string>",
  "li_poll": {
    "question": "<string>",
    "option_1": "<string>",
    "option_2": "<string>",
    "option_3": "<string>",
    "option_4": "<string>",
    "duration": "ONE_DAY"
  },
  "tt_post_type": 1,
  "tt_privacy_level": 1,
  "tt_carousel_title": "<string>",
  "tt_disable_duet": true,
  "tt_disable_stitch": true,
  "tt_disable_comment": true,
  "tt_brand_content": true,
  "tt_brand_organic": true,
  "tt_auto_music": true,
  "tt_is_aigc": true,
  "pi_pin_title": "<string>",
  "pi_url_link": "<string>",
  "pi_boards": [
    "<string>"
  ],
  "pi_sections": [
    "<string>"
  ],
  "pi_is_standard_pin": true,
  "gb_post_type": 1,
  "gb_event_title": "<string>",
  "gb_start_date": "2023-11-07T05:31:56Z",
  "gb_end_date": "2023-11-07T05:31:56Z",
  "gb_use_time": true,
  "gb_action_type": 1,
  "gb_action_url": "<string>",
  "gb_coupon_code": "<string>",
  "gb_redeem_url": "<string>",
  "gb_term_conditions": "<string>",
  "yt_post_type": 1,
  "yt_video_title": "<string>",
  "yt_video_tags": [
    "<string>"
  ],
  "yt_categories": [
    "<string>"
  ],
  "yt_playlists": [
    "<string>"
  ],
  "yt_privacy_level": 1,
  "yt_license": 1,
  "yt_embeddable": true,
  "yt_notify_subscribers": true,
  "yt_made_for_kids": true,
  "dr_title": "<string>",
  "dr_tags": [
    "<string>"
  ],
  "tw_post_type": 1,
  "tw_poll": [
    "<string>"
  ],
  "tw_reply_settings": 1,
  "th_post_type": 1,
  "th_poll": [
    "<string>"
  ],
  "th_topic_tag": "<string>",
  "customized": {},
  "is_publicly_shared": true,
  "guest_approver_name": "<string>",
  "everyone_must_approve": true,
  "should_skip": true,
  "approved_at": "2023-11-07T05:31:56Z",
  "published_at": "2023-11-07T05:31:56Z",
  "created_at": "2023-11-07T05:31:56Z",
  "updated_at": "2023-11-07T05:31:56Z",
  "user": {
    "id": "<string>",
    "name": "<string>",
    "email": "<string>",
    "phone": "<string>",
    "inviter_id": "<string>",
    "organization_id": "<string>",
    "role": "owner",
    "is_client": true,
    "can_approve": true,
    "can_connect_account": true,
    "can_access_all_groups": true,
    "self_approval": true,
    "time_format_24": true,
    "week_start_day": 0,
    "date_format": 1,
    "color": 1,
    "avatar": "<string>",
    "invited_at": "2023-11-07T05:31:56Z",
    "created_at": "2023-11-07T05:31:56Z",
    "open_cu_links_in_app": false,
    "groupIds": []
  },
  "socialAccounts": [],
  "comments": [],
  "tasks": [],
  "details": [],
  "media": [],
  "labels": [],
  "approvals": [],
  "selectedAccountIds": [],
  "assigneesIds": [],
  "source": 1,
  "cu_creator_name": "<string>"
}

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

application/json
content
string | null

Post text content

Maximum string length: 65000
selectedAccountIds
string[]

The IDs of the social accounts where the post will be published.

selected_media_ids
string[]

An array of media IDs to be used for the post. The order of the media in the published post depends on the order in this field.

publication_date
string<date-time> | null

The publication date for post in RFC 3339 format. Supports timezone offset (e.g. 2026-06-14T09:00:00+02:00). If no offset is provided, UTC is assumed.

Example:

"2026-06-14T09:00"

assigneesIds
string[]

IDs of users selected as approval assignees.

isDraft
boolean

If true, the post is set to Draft status

isPublishNow
boolean

Set to true to publish the post immediately. To publish, selectedAccountIds and content or media are required.

The post will have a status of 30 (InProgress) during publication.

To retrieve the public URL of a post, call the GET POST endpoint with the post ID provided by this endpoint.

name
string | null

Post name for better visibility. Only for internal post annotation in PostFlow.

Maximum string length: 100
note
string | null

Internal note for the post.

Maximum string length: 2000
visible_for_client
boolean
publication_delay_between
integer

Delay in minutes between posts during publishing. Example:

  • 3 social accounts selected
  • publication_delay_between = 10

The first post will be published at 9:00, the second at 9:10, and the third at 9:20

Required range: x <= 30
fb_post_type
enum<integer>

Facebook post type

1 Feed
2 Reel
3 Story
4 Carousel
5 PageCover

Available options:
1,
2,
3,
4,
5
fb_video_title
string | null

Video title for Facebook

Maximum string length: 250
ig_post_type
enum<integer>

Instagram post type

1 Feed
2 Reel
3 Story

Available options:
1,
2,
3
ig_collaborators
string[] | null

Array of Instagram usernames that will be tagged as collaborators. The user must exist and must have a public profile.

Maximum array length: 5
ig_share_to_feed
boolean
ig_allow_comments
boolean
ig_audio_name
string | null
Maximum string length: 50
li_post_type
enum<integer>

LinkedIn post type

1 Normal
2 Poll
3 Carousel

Available options:
1,
2,
3

Required if a LinkedIn account is selected.

Maximum string length: 58
tt_post_type
enum<integer>

TikTok post type

1 Video
2 ImageCarousel

Available options:
1,
2
tt_privacy_level
enum<integer>

1 PublicToEveryone
2 MutualFollowFriends
3 SelfOnly
4 FollowerOfCreator

Available options:
1,
2,
3,
4
Maximum string length: 90
tt_disable_duet
boolean
tt_disable_stitch
boolean
tt_disable_comment
boolean
tt_brand_content
boolean
tt_brand_organic
boolean
tt_auto_music
boolean

If set to true, recommended music will be automatically added.

tt_is_aigc
boolean

Set to true if the video is AI generated content.

pi_pin_title
string | null
Maximum string length: 100
Maximum string length: 250
pi_boards
string[] | null

Required if a Pinterest account is selected. Pinterest board per selected Pinterest accounts. Key is the social account ID, value must be an object with an id property containing the board ID.

Use values from social_account.pi_boards.*.id.

Example:
{
"101870452302622738": { "id": "944355735095378956" }
}
pi_sections
string[] | null

Pinterest board section per selected Pinterest accounts. Key is the social account ID, value must be an object with an id property containing the section ID. Use values from social_account.pi_boards.*.sections.*.id.

Example:
{
"101870452302622738": { "id": "944577895350359536" }
}
gb_post_type
enum<integer>

Google Business Profile post type

1 Standard
2 Event
3 Offer

Available options:
1,
2,
3
gb_event_title
string | null
Maximum string length: 250
gb_start_date
string<date-time> | null
Example:

"2026-06-14 09:00:00"

gb_end_date
string<date-time> | null
Example:

"2026-06-15 09:00:00"

gb_use_time
boolean
gb_action_type
enum<integer>

1 Book
2 Order
3 Shop
4 LearnMore
5 SignUp
6 Call

Available options:
1,
2,
3,
4,
5,
6
gb_action_url
string<uri> | null
Maximum string length: 250
gb_coupon_code
string | null
Maximum string length: 250
gb_redeem_url
string<uri> | null
Maximum string length: 250
gb_term_conditions
string | null
Maximum string length: 5000
yt_post_type
enum<integer>

YouTube post type

1 Video
2 Shorts

Available options:
1,
2
yt_video_title
string | null

YouTube video title

Maximum string length: 100
yt_categories
object

YouTube category per social account. Key is the social account ID, value is the YouTube category ID (use values from social_account.yt_categories).

Example:
{ "103662144775271141": "18" }
yt_playlists
object

YouTube playlist per social account. Key is the social account ID, value is the YouTube playlist ID (use values from social_account.yt_playlists).

Example:
{
"105589781181582167": "PLIYX39FN2TYcHJgovb4Vy1Q3aZqRTDJSP"
}
yt_privacy_level
enum<integer>

1 Public
2 Private
3 Unlisted

Available options:
1,
2,
3
yt_license
enum<integer>

1 StandardYouTubeLicense
2 CreativeCommons

Available options:
1,
2
yt_embeddable
boolean
yt_notify_subscribers
boolean
yt_made_for_kids
boolean
dr_title
string | null

Dribbble shot title

Maximum string length: 250
tw_post_type
enum<integer>

𝕏 post type

1 Normal
2 Poll

Available options:
1,
2
tw_reply_settings
enum<integer>

1 Following
2 MentionedUsers
3 Subscribers
4 Verified

Available options:
1,
2,
3,
4
th_post_type
enum<integer>

Threads post type

1 Normal
2 Poll

Available options:
1,
2
th_topic_tag
string | null
Maximum string length: 100
everyone_must_approve
boolean

If multiple assignees are selected, this determines whether all of them must approve or if just one approval is needed.

notify_assignee
boolean
should_skip
boolean

If true, post will not be published. The post will change its status to Skipped.

labelIds
string[]

The IDs of the labels that will be assigned to the post.

Maximum array length: 20
li_poll
object
yt_video_tags
string[] | null

YouTube video tags.

Maximum string length: 250
dr_tags
string[] | null
Maximum string length: 250
tw_poll
object
th_poll
object
customized
object[] | null

Per-network content customization, keyed by social network identifier (e.g. twitter, facebook).

Example:
{
"facebook": {
"content": "customized content for Facebook",
"media_ids": ["168057885972398982"]
},
"instagram": {
"content": "customized content for Instagram",
"media_ids": ["168057885972398982"]
}
}
first_comments
object

Response

PostData

id
string
required
public_id
string
required

If is_publicly_shared is true, you can use this ID to construct a link for public sharing.

https://new.postflow.app/p/PUBLIC_ID

organization_id
string
required
user_id
string | null
required

The ID of the user who created the post

post_id
string | null
required
cu_task_id
string | null
required

The ClickUp task ID associated with this PostFlow post.

Available only if you have an active ClickUp integration

name
string | null
required

Post name for better visibility. Only for internal post annotation in PostFlow

status
enum<integer>
required

1 NotSchedule
5 Draft
10 InReview
15 ReviewRejected
20 ReviewMissed
25 Scheduled
30 InProgress
35 Failed
37 Skipped
40 Published
50 Deleted

Available options:
1,
5,
10,
15,
20,
25,
30,
35,
37,
40,
50
note
string | null
required

Internal note for the post

visible_for_client
boolean
required
content
string | null
required
content_weighted_length
integer
required

The content length calculated using weighted character counting, where some characters (such as emojis or certain Unicode characters) may count as multiple characters

has_customized_content
boolean
required

Indicates whether the content is customized for some social networks

locations
MetaPageLocationData · object[]
required
image_tags
MediaTagData · object[]
required
selected_media_ids
string[]
required

A list of media IDs to be used for the post. The order of the media in the published post depends on the order in this field

first_comments
FirstComments · object
required
publication_date
string<date-time> | null
required

The publication date for this post in UTC timezone

Example:

"2026-06-14T09:00:00.000Z"

publication_timestamp
integer | null
required

UNIX timestamp format of publication_date

Example:

1781427600000

customized_publication_date
string[] | null
required
publication_delay_between
integer
required

Delay in minutes between posts during publishing.

Example:

  • 3 social accounts selected
  • publication_delay_between = 10

The first post will be published at 9:00, the second at 9:10, and the third at 9:20

fb_post_type
enum<integer> | null
required

1 Feed
2 Reel
3 Story
4 Carousel
5 PageCover

Available options:
1,
2,
3,
4,
5
fb_video_title
string | null
required
ig_post_type
enum<integer> | null
required

1 Feed
2 Reel
3 Story

Available options:
1,
2,
3
ig_collaborators
string[]
required
ig_share_to_feed
boolean
required
ig_allow_comments
boolean
required
ig_audio_name
string | null
required
li_post_type
enum<integer> | null
required

1 Normal
2 Poll
3 Carousel

Available options:
1,
2,
3
li_poll
LinkedInPoll · object
required
tt_post_type
enum<integer> | null
required

1 Video
2 ImageCarousel

Available options:
1,
2
tt_privacy_level
enum<integer> | null
required

1 PublicToEveryone
2 MutualFollowFriends
3 SelfOnly
4 FollowerOfCreator

Available options:
1,
2,
3,
4
tt_disable_duet
boolean
required
tt_disable_stitch
boolean
required
tt_disable_comment
boolean
required
tt_brand_content
boolean
required
tt_brand_organic
boolean
required
tt_auto_music
boolean
required
tt_is_aigc
boolean
required
pi_pin_title
string | null
required
pi_boards
string[] | null
required
pi_sections
string[] | null
required
pi_is_standard_pin
boolean
required
gb_post_type
enum<integer> | null
required

1 Standard
2 Event
3 Offer

Available options:
1,
2,
3
gb_event_title
string | null
required
gb_start_date
string<date-time> | null
required
gb_end_date
string<date-time> | null
required
gb_use_time
boolean
required
gb_action_type
enum<integer> | null
required

1 Book
2 Order
3 Shop
4 LearnMore
5 SignUp
6 Call

Available options:
1,
2,
3,
4,
5,
6
gb_action_url
string | null
required
gb_coupon_code
string | null
required
gb_redeem_url
string | null
required
gb_term_conditions
string | null
required
yt_post_type
enum<integer> | null
required

1 Video
2 Shorts

Available options:
1,
2
yt_video_title
string | null
required
yt_video_tags
string[]
required
yt_categories
string[] | null
required
yt_playlists
string[] | null
required
yt_privacy_level
enum<integer> | null
required

1 Public
2 Private
3 Unlisted

Available options:
1,
2,
3
yt_license
enum<integer> | null
required

1 StandardYouTubeLicense
2 CreativeCommons

Available options:
1,
2
yt_embeddable
boolean
required
yt_notify_subscribers
boolean
required
yt_made_for_kids
boolean
required
dr_title
string | null
required
dr_tags
string[]
required
tw_post_type
enum<integer> | null
required

1 Normal
2 Poll

Available options:
1,
2
tw_poll
string[] | null
required
tw_reply_settings
enum<integer> | null
required

1 Following
2 MentionedUsers
3 Subscribers
4 Verified

Available options:
1,
2,
3,
4
th_post_type
enum<integer> | null
required

1 Normal
2 Poll

Available options:
1,
2
th_poll
string[] | null
required
th_topic_tag
string | null
required
customized
object
required

Per-network content customization, keyed by social network identifier

is_publicly_shared
boolean
required
guest_approver_name
string | null
required
everyone_must_approve
boolean
required

If multiple assignees are selected, this determines whether all of them must approve or if just one approval is needed.

Only for Strict approval workflows

should_skip
boolean
required

If true, post will not be published. The post will change its status to Skipped

approved_at
string<date-time> | null
required
published_at
string<date-time> | null
required
created_at
string<date-time> | null
required
updated_at
string<date-time> | null
required
user
UserData · object
required

Relationships data on request. Depends on the endpoint and the include parameter

socialAccounts
SocialAccountData · object[]
required

Relationships data on request. Depends on the endpoint and the include parameter

comments
PostCommentData · object[]
required

Relationships data on request. Depends on the endpoint and the include parameter

tasks
PostTaskData · object[]
required

Relationships data on request. Depends on the endpoint and the include parameter

details
PostDetailData · object[]
required

Relationships data on request. Depends on the endpoint and the include parameter

media
MediaData · object[]
required

Relationships data on request. Depends on the endpoint and the include parameter

labels
LabelData · object[]
required

Relationships data on request. Depends on the endpoint and the include parameter

approvals
PostApprovalData · object[]
required

Relationships data on request. Depends on the endpoint and the include parameter

selectedAccountIds
string[]
required

The IDs of the social media accounts selected where the post will be published

assigneesIds
string[]
required

IDs of users selected as assignees

source
enum<integer> | null
required

Describes how the post was created

1 Web
2 Api
3 Mcp
4 ClickUp
5 CsvImport

Available options:
1,
2,
3,
4,
5
cu_creator_name
string | null
required

Creator name of the post in Clickup. Will only be available if the post was created in ClickUp