---
title: "POST (create) a social media post"
method: POST
path: "/social/posts"
tags: ["Social"]
---

# POST (create) a social media post

`POST /social/posts`

Creates a new social media post that can be published immediately or scheduled for later publication. A post can target one or more social profiles, and can include text, images, and network-specific settings.

Set `status` to `DRAFT` to save without publishing, or `SCHEDULED` to schedule for publication. Scheduled posts require a `scheduled_time` in ISO-8601 format.

Post content and settings can vary per profile — each `profile_posts` entry can have its own text, images, and network-specific settings (e.g., TikTok-specific settings like `disable_comment`).

## Request body

- PostCreateDto — Request body for creating a social media post campaign that can include multiple posts to multiple social profiles.
  - `name` string — Campaign name for this post. Optional on creation. If not provided, a default name will be generated. The value provided will be sanitized before saving, so the value returned may not exactly match what was sent.
  - `profile_posts` ProfilePostDto[], required — The list of per-profile posts that make up this campaign. Each entry specifies the content to post and the profiles to post it to.
    - `images` ImageDto[] — Images to include in the post. Each image must be accessible via a public URL.
      - `image_id` string — Unique identifier for this image. Generated by the server on creation.
      - `url` string, required — The URL of the image. Each component of the URL must be appropriately encoded to avoid illegal characters.
    - `post_content_id` string — Identifier for this post content. Generated by the server on creation. When updating a post, existing profile posts must include their original <code>post_content_id</code> unchanged.
    - `profiles` ProfilePostProfileDto[], required — The list of profiles to post to. Can be an empty list only when the post is in <code>DRAFT</code> status.
      - `account_username` string — The human-readable username of the account that owns this profile.
      - `campaign_activity_id` string — The campaign activity ID for this post on the specified profile. Generated by the server on creation. When updating a post, existing profile entries should include their original <code>campaign_activity_id</code>.
      - `campaign_activity_status` string — The status of the post activity for this profile.
      - `campaign_activity_status_date` string, date-time — The activity's timestamp. For <code>SCHEDULED</code> activities, this is typically the same as the scheduled publish time; otherwise, it is the last-modified timestamp.
      - `campaign_activity_status_message` string — A human-readable message describing the current status of the post activity. Can be a generic Constant Contact message or a specific message reported by the social network.
      - `image_url` string — The URL of the profile's image. This image may become stale and is only refreshed when retrieving profiles with <code>include=accessible</code>.
      - `network` string — The social network this profile belongs to.
      - `network_post_id` string — The social network's reference for this post. Only set when the status is <code>DONE</code>.
      - `post_url` string — The permalink URL to the published post on the social network. Only set when the status is <code>DONE</code>.
      - `profile_id` string, required — The unique identifier for the profile to post to. Use the <code>profile_id</code> from <code>GET /social/profiles</code>.
      - `profile_name` string — The display name of the profile.
    - `settings` object — Network-specific post settings. If no settings are provided, this field will be omitted in the JSON response. All values are persisted as strings. Currently, only TikTok has available settings: <pre>{ "settings": { "tiktok": { "disable_comment": "true", "disable_duet": "false", "disable_stitch": "true", "auto_add_music": "false" } } }</pre>
    - `text` string — The text/caption content for the post. Whether text is required depends on the target social network. In <code>DRAFT</code> status, this is always optional.
  - `scheduled_time` string — The date and time to publish the post, in ISO-8601 format. Only applies when <code>status</code> is <code>SCHEDULED</code>. If not specified for a scheduled post, the publish job is scheduled to execute immediately.
  - `status` string, required — The status of the post on creation. Valid values are <code>DRAFT</code> (save without publishing) or <code>SCHEDULED</code> (schedule for publication).

## Response `200`

OK

- PostDto — Represents a social media post campaign that can include multiple posts to multiple social profiles, with either identical or network-specific content.
  - `campaign_id` string — Unique identifier for the post campaign. Generated by the server on creation. Use this value to reference the post in subsequent requests.
  - `name` string — Campaign name for this post. The value provided on creation is sanitized before saving, so the returned value may not exactly match what was sent.
  - `profile_posts` ProfilePostDto[], required — The list of per-profile posts that make up this campaign.
    - `images` ImageDto[] — Images to include in the post. Each image must be accessible via a public URL.
      - `image_id` string — Unique identifier for this image. Generated by the server on creation.
      - `url` string, required — The URL of the image. Each component of the URL must be appropriately encoded to avoid illegal characters.
    - `post_content_id` string — Identifier for this post content. Generated by the server on creation. When updating a post, existing profile posts must include their original <code>post_content_id</code> unchanged.
    - `profiles` ProfilePostProfileDto[], required — The list of profiles to post to. Can be an empty list only when the post is in <code>DRAFT</code> status.
      - `account_username` string — The human-readable username of the account that owns this profile.
      - `campaign_activity_id` string — The campaign activity ID for this post on the specified profile. Generated by the server on creation. When updating a post, existing profile entries should include their original <code>campaign_activity_id</code>.
      - `campaign_activity_status` string — The status of the post activity for this profile.
      - `campaign_activity_status_date` string, date-time — The activity's timestamp. For <code>SCHEDULED</code> activities, this is typically the same as the scheduled publish time; otherwise, it is the last-modified timestamp.
      - `campaign_activity_status_message` string — A human-readable message describing the current status of the post activity. Can be a generic Constant Contact message or a specific message reported by the social network.
      - `image_url` string — The URL of the profile's image. This image may become stale and is only refreshed when retrieving profiles with <code>include=accessible</code>.
      - `network` string — The social network this profile belongs to.
      - `network_post_id` string — The social network's reference for this post. Only set when the status is <code>DONE</code>.
      - `post_url` string — The permalink URL to the published post on the social network. Only set when the status is <code>DONE</code>.
      - `profile_id` string, required — The unique identifier for the profile to post to. Use the <code>profile_id</code> from <code>GET /social/profiles</code>.
      - `profile_name` string — The display name of the profile.
    - `settings` object — Network-specific post settings. If no settings are provided, this field will be omitted in the JSON response. All values are persisted as strings. Currently, only TikTok has available settings: <pre>{ "settings": { "tiktok": { "disable_comment": "true", "disable_duet": "false", "disable_stitch": "true", "auto_add_music": "false" } } }</pre>
    - `text` string — The text/caption content for the post. Whether text is required depends on the target social network. In <code>DRAFT</code> status, this is always optional.
  - `scheduled_time` string — The date and time to publish the post, in ISO-8601 format. Only set when <code>status</code> is <code>SCHEDULED</code>.
  - `status` string, required — The current status of the post. Possible values include: <ul> <li><code>DRAFT</code> — saved without being scheduled for publication</li> <li><code>SCHEDULED</code> — scheduled for future publication at <code>scheduled_time</code></li> <li><code>EXECUTING</code> — currently being published</li> <li><code>ACTIVE</code> — the post has been published and is active on the social network</li> <li><code>PAUSED</code> — publication has been paused</li> <li><code>SUSPENDED</code> — publication has been suspended</li> <li><code>REMOVED</code> — the post has been removed</li> <li><code>DONE</code> — publication has completed</li> <li><code>ERROR</code> — publication encountered an error</li> </ul>

## Other responses

- `201` — Post created successfully
- `400` — Bad request. Either the JSON was malformed or there was a data validation error.
- `401` — The Access Token used is invalid.
- `403` — Forbidden request. You lack the necessary scopes, you lack the necessary user privileges, or the application is deactivated.
- `404` — The requested resource was not found.
- `500` — There was a problem with our internal service.

---

[API](https://skmtc.net/cc/apis/appconnect-v3.md) · [All operations](https://skmtc.net/cc/apis/appconnect-v3/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/cc/appconnect-v3/revisions/4b4a534c818d/schema)
