> ## Documentation Index
> Fetch the complete documentation index at: https://developer.dashsocial.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Schedule Social Media Posts with the Dash API

> Learn how to schedule social media posts across supported platforms using the Dash API.

# Overview

This guide shows you how to create and manage scheduled social media posts across supported platforms using the Dash API.

You can publish posts immediately, schedule them for a future time, or save them as drafts. This allows you to automate content publishing directly from your own tools or workflows.

## Supported Platforms

The Scheduler API supports the following platforms:

* Instagram
* Facebook
* TikTok
* YouTube
* X
* Threads
* LinkedIn
* Snapchat
* Pinterest
* Bluesky

# Use Case

You can use the scheduling API to automate and manage social publishing directly from your own tools.

<CardGroup cols={2}>
  <Card title="Content Calendar Automation">
    Schedule posts across multiple platforms from your internal CMS or content calendar. This allows marketing teams to plan campaigns without using the Dash UI.
  </Card>

  <Card title="Product Launch Scheduling">
    Queue posts to publish at exact times during launches, events, or announcements. Posts can be scheduled days or weeks in advance.
  </Card>

  <Card title="Draft Review Workflows">
    Save posts as drafts so teams can review content before publishing.
  </Card>

  <Card title="Bulk Post Scheduling">
    Programmatically schedule large batches of posts across platforms, useful for agencies or large content pipelines.
  </Card>
</CardGroup>

# Before You Start

You'll need:

* **API Key**: Get this from the Dash Social **Developer** section
* **Brand ID**: Available in your developer settings or next to your brand name in the platform

See more details here:

<CardGroup cols={1}>
  <Card title="API Quickstart" href="https://developer.dashsocial.com/guides/get-started/quickstart">
    Make your first API call in less than a minute and confirm your API key is working.
  </Card>
</CardGroup>

# Scheduling Workflow

Scheduling a post with the Dash API follows three steps:

1. **Upload media** to the Dash Library
2. **Create a scheduled post** for the platform
3. **Manage the post** using the returned `id` from the scheduler response

```mermaid theme={null}
flowchart TD
    A["Upload Media (optional)"] --> B["Create Scheduled Post"]
    B --> C["Receive id"]
    C --> D["Retrieve / Update / Delete Post"]
```

# Key Concepts

### Scheduler `id`

* Returned when a scheduled post is created
* Used to retrieve, update, or delete the post

### `status`

Defines how the post should behave.

| Status           | Behavior                                    |
| ---------------- | ------------------------------------------- |
| `AUTOPUBLISHING` | Post is set to publish immediately          |
| `SCHEDULED`      | Post publishes at the specified `timestamp` |
| `DRAFT`          | Post is saved as a draft                    |

### `auto_publish`

Controls whether the post will publish automatically or require manual publishing.

| Value   | Behavior                                                                                                                                                             |
| ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `true`  | The post will automatically publish at the scheduled time.                                                                                                           |
| `false` | The post will not publish automatically. Users associated with the brand will receive a push notification in the Dash mobile app reminding them to publish the post. |

Some fields are not available when `auto_publish` is disabled because they only work with automatic publishing:

* `first_comment` is not supported for Instagram and Facebook when `auto_publish` is disabled.

### `media_id`

* Returned when media is uploaded to Dash
* Used when attaching image or video media to a post
* When scheduling a post, include this value inside the `media_ids` array
* Required for some platforms, post types, and auto-publish posts
* Not required for supported caption-only posts or some draft posts without media

## Media Requirements by Platform

Media requirements vary by platform and post type.

| Platform  | Caption-only Post | Draft Without Media | Media Requirements                                                                                                 |
| --------- | ----------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------ |
| Instagram | ❌                 | ✅                   | `POST`, `REEL`, and `STORY` drafts can be created without media. Auto-publish posts require `media_ids`.           |
| TikTok    | ❌                 | ✅                   | Drafts can be created without media. Auto-publish posts require **video media**.                                   |
| Facebook  | ✅                 | ✅                   | Standard `POST` can be caption-only. `REEL` requires **video media**.                                              |
| X         | ✅                 | ✅                   | Caption-only posts are supported.                                                                                  |
| Threads   | ✅                 | ✅                   | Caption-only posts are supported.                                                                                  |
| LinkedIn  | ✅                 | ✅                   | Caption-only posts are supported.                                                                                  |
| YouTube   | ❌                 | ❌                   | Requires **video media**.                                                                                          |
| Snapchat  | ❌                 | ❌                   | `STORY` requires image or video. `SPOTLIGHT` requires **video media**.                                             |
| Pinterest | ✅                 | ✅                   | Drafts can be created without media. Auto-publish posts require media. `title` and a Pinterest board are required. |
| Bluesky   | ✅                 | ✅                   | Caption-only posts are supported. Image posts support up to **4 images**. Mixed media and video are not supported. |

<br />

## Media Support by Platform

Some platforms support multiple media items or mixed media types, while others require a single media asset.

| Platform           | Media Types  | Media Count                         | Mixed Media | Notes                                                                                       |
| ------------------ | ------------ | ----------------------------------- | ----------- | ------------------------------------------------------------------------------------------- |
| Instagram Post     | Image, Video | Up to 10                            | ✅           | Supports mixed media (images and videos in the same post).                                  |
| Instagram Reel     | Video        | 1                                   | ❌           | Reels only support a single video.                                                          |
| Instagram Story    | Image, Video | 1 auto-publish, multiple for drafts | ❌           | Multiple media can only be saved as drafts. Auto-publish posts support a single media item. |
| TikTok             | Video        | 1                                   | ❌           | TikTok posts must contain a single video.                                                   |
| Facebook Post      | Image, Video | Up to 10 images or 1 video          | ❌           | Images and videos cannot be mixed.                                                          |
| Facebook Reel      | Video        | 1                                   | ❌           | Reels must contain a single video.                                                          |
| LinkedIn           | Image, Video | 20 images or 1 video                | ❌           | Image posts support 20 images. Video posts support only one video.                          |
| YouTube            | Video        | 1                                   | ❌           | YouTube posts must contain a single video.                                                  |
| Threads            | Image        | 20                                  | ❌           | Threads currently supports multiple images only.                                            |
| X                  | Image, Video | Up to 4 images or 1 video           | ❌           | Images and videos cannot be mixed.                                                          |
| Snapchat Story     | Image, Video | 1                                   | ❌           | Stories support either image or video.                                                      |
| Snapchat Spotlight | Video        | 1                                   | ❌           | Spotlight posts must contain a single video.                                                |
| Pinterest          | Image, Video | 1                                   | ❌           | Pins support a single image or a single video. Mixed media is not supported.                |
| Bluesky            | Image        | Up to 4                             | ❌           | Bluesky supports image posts only. Mixed media and video are not supported.                 |

## Publishing Modes

Most platforms support three publishing behaviors.

| Mode                | `status`         | `auto_publish`    | `timestamp`  |
| :------------------ | :--------------- | :---------------- | :----------- |
| Publish Immediately | `AUTOPUBLISHING` | `true`            | Not required |
| Schedule for Later  | `SCHEDULED`      | `true`            | Required     |
| Save as Draft       | `DRAFT`          | `true` or `false` | Optional     |

**Note**

* Some platforms do not support `auto_publish: false`.
* LinkedIn, Snapchat and YouTube require `auto_publish: true`.
* Threads and Bluesky always publish with `auto_publish: true`, even if `false` is provided (the value is ignored).
* `status` controls the **state of the post** (draft, scheduled, or publishing immediately).
* `auto_publish` controls the **publishing method** (auto-publish vs. send notification / publish via mobile).
* A post with `status: "DRAFT"` can be created with either `auto_publish: true` or `false`, depending on platform support.

## Platform Comparison

| Platform  | Endpoint                     | Caption Field          | Media Types  | Special Fields                                      |
| --------- | ---------------------------- | ---------------------- | ------------ | --------------------------------------------------- |
| Instagram | `/instagram/scheduled_posts` | `caption`              | Image, Video | `post_type`, `first_comment`                        |
| X         | `/twitter/scheduled_posts`   | `tweet_status`         | Image, Video | —                                                   |
| Facebook  | `/facebook/scheduled_posts`  | `message`              | Image, Video | `post_type`,`first_comment`, `link`                 |
| TikTok    | `/tiktok/scheduled_posts`    | `text`                 | Video only   | `disable_comment`, `disable_duet`, `disable_stitch` |
| Threads   | `/threads/scheduled_posts`   | `text`                 | Image, Video | —                                                   |
| LinkedIn  | `/linkedin/scheduled_posts`  | `text`                 | Image, Video | —                                                   |
| YouTube   | `/youtube/scheduled_posts`   | `title`, `description` | Video only   | `declared_made_for_kids`                            |
| Snapchat  | `/snapchat/scheduled_posts`  | `description`          | Image, Video | `post_type`, `save_to_profile`, `locale`            |
| Pinterest | `/pinterest/scheduled_posts` | `note`                 | Image, Video | `meta.title`, `meta.pinterestBoard`, `link`         |
| Bluesky   | `/bluesky/scheduled_posts`\* | `text`                 | Image only   | —                                                   |

# Implementation

## Step 1: Upload Media (optional)

If your post includes images or videos, upload the media to the Dash Library first. This returns a `media_id` that you can include when creating the scheduled post.

<Note>
  If your post does not include media (for example, a text-only or link-based post), you can skip this step. [Jump to Step 2](#step-2-create-a-scheduled-post)
</Note>

```http theme={null}
POST https://library-backend.dashsocial.com/brands/{brand_id}/media
body:
{
  "source": "UPLOAD",
  "source_id": "your-internal-id",
  "type": "UPLOADED",
  "url": "https://example.com/media.jpg",
  "meta": "{ \"filename\": \"filename.jpg\" }",
  "source_created_at": "2026-03-06T12:00:00Z"
}
```

See more about this step here:

<CardGroup>
  <Card title="Upload Media To Dash Social Library" href="https://developer.dashsocial.com/guides/social-commerce/upload-media-to-dash-hudson-library">
    Upload media directly from your CMS to your Dash Social Library
  </Card>
</CardGroup>

### Response

```json theme={null}
{
    "ai_alternatives": [],
    "brand_id": 144,
    "campaigns": [],
    "caption_question": null,
    "caption_sentiment": null,
    "content_tags": [],
    "created_at": "2026-03-06T22:21:57+00:00",
    "duration": null,
    "elastic_search_index_status": null,
    "frame_rate": null,
    "galleries": [],
    "hide_in_widget": false,
    "id": 950680003,
    "image_sizes": {
        "medium_square": {
            "height": 640,
            "url": "https://images.dashsocial.com/aHR0cHM6Ly9jZG4uZGFzaHNvY2lhbC5jb20vbWVkaWEvZnVsbC8xNzcyODM1NzE2LjQzMTc0NDY3NDIzMi5qcGVn.jpg?w=640&h=640&fit=cover",
            "width": 640
        },
        "original": {
            "height": 534,
            "size": 72890,
            "url": "https://cdn.dashsocial.com/media/original/1772835716.24373761829.jpg",
            "width": 800
        },
        "original_converted": {
            "height": 534,
            "size": 72992,
            "url": "https://cdn.dashsocial.com/media/full/1772835716.431744674232.jpeg",
            "width": 800
        },
        "small": {
            "height": 400,
            "url": "https://images.dashsocial.com/aHR0cHM6Ly9jZG4uZGFzaHNvY2lhbC5jb20vbWVkaWEvZnVsbC8xNzcyODM1NzE2LjQzMTc0NDY3NDIzMi5qcGVn.jpg?w=599&h=400",
            "width": 599
        },
        "small_square": {
            "height": 400,
            "url": "https://images.dashsocial.com/aHR0cHM6Ly9jZG4uZGFzaHNvY2lhbC5jb20vbWVkaWEvZnVsbC8xNzcyODM1NzE2LjQzMTc0NDY3NDIzMi5qcGVn.jpg?w=400&h=400&fit=cover",
            "width": 400
        }
    },
    "likeshop_clicks": null,
    "media_group": null,
    "media_id": 647749496,
    "media_type": "IMAGE",
    "meta": {},
    "original_height": "534",
    "original_width": "800",
    "predictions": {},
    "source": "UPLOAD",
    "source_created_at": "2026-03-06T12:00:00+00:00",
    "source_data": {
        "avatar_url": null,
        "first_name": "sept 9 test",
        "last_name": "API"
    },
    "source_id": "NATGEO",
    "status": 2,
    "system_tags": [],
    "tags": [],
    "tiktok_likeshop_clicks": null,
    "triggered_content_automations": [],
    "type": "UPLOADED",
    "updated_at": "2026-03-06T22:21:57+00:00",
    "urls": {
        "640": "https://images.dashsocial.com/aHR0cHM6Ly9jZG4uZGFzaHNvY2lhbC5jb20vbWVkaWEvZnVsbC8xNzcyODM1NzE2LjQzMTc0NDY3NDIzMi5qcGVn.jpg?w=640&h=640&fit=cover",
        "full": "https://cdn.dashsocial.com/media/full/1772835716.431744674232.jpeg",
        "original": "https://cdn.dashsocial.com/media/original/1772835716.24373761829.jpg",
        "ratio": "https://images.dashsocial.com/aHR0cHM6Ly9jZG4uZGFzaHNvY2lhbC5jb20vbWVkaWEvZnVsbC8xNzcyODM1NzE2LjQzMTc0NDY3NDIzMi5qcGVn.jpg?w=599&h=400",
        "thumbs": "https://images.dashsocial.com/aHR0cHM6Ly9jZG4uZGFzaHNvY2lhbC5jb20vbWVkaWEvZnVsbC8xNzcyODM1NzE2LjQzMTc0NDY3NDIzMi5qcGVn.jpg?w=400&h=400&fit=cover"
    },
    "video_conversion_warnings": null,
    "video_sizes": {}
}
```

Save the returned `media_id`. You'll include this value in `media_ids` when creating the scheduled post.

## Step 2: Create a Scheduled Post

<Warning>
  This API can **publish posts directly to your social media accounts**.

  Posts with `auto_publish: true` will automatically publish at the scheduled time. Test with drafts or a test account before publishing to live channels.
</Warning>

When creating a scheduled post, include `media_ids` only when required by the platform or post type.

Some platforms support caption-only or link-based posts without media, while others require media for all posts or for auto-publish posts.

### Instagram

Use this endpoint to schedule feed posts, stories, or reels.

#### Endpoint

```http theme={null}
POST https://scheduler.dashsocial.com/instagram/scheduled_posts?media_v2=true
```

#### Request

```json theme={null}
{
  "auto_publish": true,
  "brand_id": 144,
  "status": "SCHEDULED",
  "caption": "Launching our new product today!",
  "first_comment": "Let us know what you think 👇",
  "media_ids": [621242772],
  "post_type": "FEED",
  "timestamp": "2026-03-10T15:00:00Z"
}
```

#### Instagram Fields

| Parameter       | Description                                                       |
| --------------- | ----------------------------------------------------------------- |
| `post_type`     | Required. Available value:`FEED`, `STORY`, or `REEL`              |
| `caption`       | Post caption                                                      |
| `first_comment` | Optional first comment (not supported when `auto_publish: false`) |

**Notes**

* `post_type` determines whether the post is a `FEED`, `STORY`, or `REEL`.
* `first_comment` is not supported when `auto_publish` is `false`.
* Auto-publish posts must include media.

### X (Twitter)

#### Endpoint

```http theme={null}
POST https://scheduler.dashsocial.com/twitter/scheduled_posts?media_v2=true
```

#### Request

```json theme={null}
{
  "auto_publish": true,
  "brand_id": 144,
  "status": "SCHEDULED",
  "timestamp": "2026-03-10T15:00:00Z",
  "tweet_status": "Launching something new today 🚀"
}
```

#### X Fields

| Parameter      | Description |
| -------------- | ----------- |
| `tweet_status` | Tweet text  |

**Note**

* Standard X posts support up to **280 characters**.
* Accounts with **X Premium** can publish posts up to **25,000 characters**.

### Facebook

#### Endpoint

```http theme={null}
POST https://scheduler.dashsocial.com/facebook/scheduled_posts?media_v2=true
```

#### Request

```json theme={null}
{
  "auto_publish": true,
  "brand_id": 144,
  "status": "SCHEDULED",
  "message": "Check out our newest launch!",
  "media_ids": [621242772],
  "timestamp": "2026-03-10T15:00:00Z",
  "first_comment": "Drop your thoughts below!",
  "post_type":"POST"
}
```

#### Facebook Fields

| Parameter       | Description                                                       |
| --------------- | ----------------------------------------------------------------- |
| `post_type`     | Required. Available value:`POST` or `REEL`                        |
| `message`       | Post caption                                                      |
| `first_comment` | Optional first comment (not supported when `auto_publish: false`) |
| `link`          | Optional link preview                                             |

**Notes**

* Standard `POST` can be created without media.
* `REEL` posts require **video media**.
* `first_comment` is not supported when `auto_publish` is `false`.

### TikTok

TikTok only supports **video uploads**.

#### Endpoint

```http theme={null}
POST https://scheduler.dashsocial.com/tiktok/scheduled_posts?media_v2=true
```

#### Request

```json theme={null}
{
  "auto_publish": true,
  "brand_id": 144,
  "status": "SCHEDULED",
  "text": "Behind the scenes of our launch",
  "media_ids": [621242772],
  "timestamp": "2026-03-10T15:00:00Z",
  "disable_comment": false,
  "disable_duet": false,
  "disable_stitch": false
}
```

#### TikTok Fields

| Parameter         | Description                                                                  |
| ----------------- | ---------------------------------------------------------------------------- |
| `text`            | Caption for the TikTok post.                                                 |
| `disable_comment` | Optional. Set to `true` to disable comments on the post.                     |
| `disable_duet`    | Optional. Set to `true` to prevent users from creating duets with the video. |
| `disable_stitch`  | Optional. Set to `true` to prevent users from stitching the video.           |

**Notes**

* TikTok posts require **video media** for auto-publish.
* Only **one video** can be attached to a TikTok post.

### Threads

#### Endpoint

```http theme={null}
POST https://scheduler.dashsocial.com/threads/scheduled_posts?media_v2=true
```

#### Request

```json theme={null}
{
  "auto_publish": true,
  "brand_id": 144,
  "status": "SCHEDULED",
  "text": "Something exciting is coming.",
  "media_ids": [621242772],
  "timestamp": "2026-03-10T15:00:00Z"
}
```

**Notes**

* `auto_publish` is always treated as `true`.
* Threads supports caption-only posts.
* Multiple images can be attached to a post.

### LinkedIn

#### Endpoint

```http theme={null}
POST https://scheduler.dashsocial.com/linkedin/scheduled_posts?media_v2=true
```

#### Request

```json theme={null}
{
  "auto_publish": true,
  "brand_id": 144,
  "status": "SCHEDULED",
  "text": "We're excited to share our newest launch.",
  "media_ids": [621242772],
  "timestamp": "2026-03-10T15:00:00Z"
}
```

**Notes**

* `auto_publish: false` is not supported.
* LinkedIn supports caption-only posts.
* Image posts can include multiple images, but video posts support **one video only**.

### YouTube

YouTube supports **video uploads only**.

#### Endpoint

```http theme={null}
POST https://scheduler.dashsocial.com/youtube/scheduled_posts?media_v2=true
```

#### Request

```json theme={null}
{
 "auto_publish": true,
  "brand_id": 144,
  "status": "SCHEDULED",
  "title": "Product Launch",
  "description": "Watch our newest launch announcement.",
  "media_ids": [621242772],
  "timestamp": "2026-03-10T15:00:00Z",
  "declared_made_for_kids": "false"
}
```

#### YouTube Fields

| Parameter                | Description                                                                                        |
| ------------------------ | -------------------------------------------------------------------------------------------------- |
| `title`                  | **Required**. Title of the YouTube video.                                                          |
| `description`            | Optional description for the video.                                                                |
| `declared_made_for_kids` | Required. Indicates whether the content is made for kids (`true` or `false`) for COPPA compliance. |

**Notes**

* `auto_publish: false` is not supported.
* `media_ids` is required for YouTube posts.
* Only **one video** can be attached to a post.
* The video must be uploaded to the Dash Library before scheduling.

### Snapchat

Snapchat supports two post types:

* **Story** posts can use **image or video** media
* **Spotlight** posts require a **video**

#### Endpoint

```http theme={null}
POST https://scheduler.dashsocial.com/snapchat/scheduled_posts?media_v2=true
```

**Story Request**

Use `post_type: "STORY"` to create a Snapchat Story post. Note that post caption (`description`) is **not** available for Snapchat Story post.

```json theme={null}
{
  "auto_publish": true,
  "brand_id": 144,
  "status": "SCHEDULED",
  "media_ids": [650029769],
  "timestamp": "2026-03-12T16:05:00.000Z",
  "post_type": "STORY"
}
```

**Spotlight Request**

Use `post_type: "SPOTLIGHT"` to create a Snapchat Spotlight post. Spotlight posts must use **video media**.

```json theme={null}
{
  "brand_id": 144,
  "status": "SCHEDULED",
  "media_ids": [648771867],
  "timestamp": "2026-03-12T18:00:00.000Z",
  "description": "3 quick ways to style oversized sweaters this fall 🍂",
  "post_type": "SPOTLIGHT",
  "save_to_profile": true,
  "locale": "en_US"
}
```

#### Snapchat Fields

| Parameter         | Description                                                                             |
| ----------------- | --------------------------------------------------------------------------------------- |
| `post_type`       | Required. Available values: `STORY` or `SPOTLIGHT`.                                     |
| `description`     | Optional caption text for `SPOTLIGHT` posts. Not supported for `STORY` posts.           |
| `save_to_profile` | Boolean. Required for `SPOTLIGHT` posts. Saves the post to the public Snapchat profile. |
| `locale`          | Required for `SPOTLIGHT` posts. Locale for the post, for example `en_US`.               |

**Notes**

* `auto_publish: false` is not supported.
* `media_ids` is required for Snapchat posts.
* `STORY` posts support image or video and do not support `description`.
* `SPOTLIGHT` posts support video only.
* `save_to_profile` and `locale` are required for `SPOTLIGHT` posts.

### Pinterest

Pinterest scheduled posts require:

* a valid **board ID**
* a **title**
* media for **auto-publish** posts

Pinterest supports image and video Pins. A Pin can include only **1 media item**.

#### Step 1: Get a Pinterest Board

Before creating a Pinterest scheduled post, retrieve the available boards for the brand.

```http theme={null}
GET https://pinterest.dashsocial.com/v5/brands/{brand_id}/boards
```

Response

```json theme={null}
[
  {
      "description": "",
      "id": "123456789012345678",
      "name": "Spring Style Inspiration",
      "preview_url": "https://example.com/board-preview.jpg",
      "protected": false
  }
]
```

Use the **entire board object** returned from this endpoint when creating the scheduler.

#### Step 2: Create the Scheduled Post

```http theme={null}
POST https://scheduler.dashsocial.com/pinterest/scheduled_posts?media_v2=true
```

Request

```json theme={null}
{
  "auto_publish": true,
  "brand_id": 144,
  "status": "SCHEDULED",
  "media_ids": [650431494],
  "link": "https://example.com/products/linen-oversized-blazer",
  "meta": {
    "pinterestBoard": {
      "description": "",
      "id": "123456789012345678",
      "name": "Spring Style Inspiration",
      "preview_url": "https://example.com/board-preview.jpg",
      "protected": false
    },
    "title": "Oversized Linen Blazer Outfit Ideas"
  },
  "note": "Lightweight linen blazer styled three ways for spring. Perfect layering piece for everyday outfits.",
  "timestamp": "2026-03-12T20:45:00.000Z"
}
```

#### Pinterest Fields

| Parameter             | Description                                                                                                                           |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `meta.pinterestBoard` | Required. The Pinterest board where the Pin will be published. Include the **entire board object** returned from the boards endpoint. |
| `meta.title`          | Required. Title of the Pin.                                                                                                           |
| `note`                | Optional description for the Pin.                                                                                                     |
| `link`                | Optional destination URL for the Pin.                                                                                                 |

**Notes**

* A valid Pinterest board is required to create a scheduled post.
* `title` is required for all Pinterest posts.
* Draft posts can be created **without media**.
* Auto-publish posts **require media**.
* Pinterest supports **image or video** Pins.
* Pins support **1 media item only**.
* When possible, link directly to the destination page. Pinterest may reject certain redirects or URL shorteners.

### Bluesky

Bluesky supports caption-only posts and image posts.

* Caption-only posts are supported
* Image posts can include up to **4 images**
* Video is not supported
* Mixed media is not supported

#### Endpoint

```http theme={null}
POST https://scheduler.dashsocial.com/bluesky/scheduled_posts?media_v2=true
```

Request

```json theme={null}
{
  "auto_publish": true,
  "brand_id": 144,
  "status": "SCHEDULED",
  "media_ids": [650431494, 650482495, 650419615, 650418969],
  "timestamp": "2026-03-12T22:30:00.000Z",
  "text": "A few recent favorites from our spring inspiration board."
}
```

**Notes**

* `auto_publish` is always treated as `true`.
* Bluesky supports **caption-only posts**.
* Image posts support up to **4 images**.
* Bluesky supports **image media only**.
* Mixed media and video are **not supported**.

## Scheduler Response Format

Creating a scheduled post returns the scheduled post object.

All platforms return the same core response structure, with some additional platform-specific fields depending on the channel.

### Common Response Fields

| Field               | Description                                                                              |
| ------------------- | ---------------------------------------------------------------------------------------- |
| `id`                | Unique ID of the scheduled post. Use this value to retrieve, update, or delete the post. |
| `brand_id`          | ID of the brand associated with the scheduled post.                                      |
| `status`            | Current post status, such as `DRAFT`, `SCHEDULED`, or `AUTOPUBLISHING`.                  |
| `auto_publish`      | Indicates whether the post will publish automatically.                                   |
| `timestamp`         | Scheduled publish time, if set.                                                          |
| `media_ids`         | Array of media IDs attached to the post.                                                 |
| `media`             | Expanded media objects attached to the post.                                             |
| `created_at`        | Time the scheduled post was created.                                                     |
| `updated_at`        | Time the scheduled post was last updated.                                                |
| `approval_policy`   | Approval policy applied to the post.                                                     |
| `approval_status`   | Current approval state of the post.                                                      |
| `approval_requests` | Approval requests associated with the post.                                              |

### Platform-Specific Fields

Some platforms return additional fields in the response. For example:

* Instagram may return fields such as `caption`, `first_comment`, and `post_type`
* X may return `tweet_status`
* Facebook may return `message`, `link`, and `post_type`
* Pinterest may return `note`, `link`, and `meta`
* Snapchat may return `description`, `post_type`, `save_to_profile`, and `locale`

### Example Response

```json theme={null}
{
  "approval_policy": "APPROVAL_REQUIRED",
  "approval_requests": [],
  "approval_status": "UNASSIGNED",
  "auto_publish": true,
  "auto_publish_error": null,
  "brand_id": 144,
  "created_at": "2026-03-12T20:34:11.048341+00:00",
  "has_scheduled_time": true,
  "id": 806262,
  "live_post_url": null,
  "media": [
    {
      "brand_id": 144,
      "created_at": "2026-03-12T18:00:12+00:00",
      "id": 650431494,
      "meta": {
        "filename": "example-image.png",
        "uploaded_by": 77315
      },
      "predictions": {
        "engagement": 0.278311
      },
      "source": "UPLOAD",
      "source_created_at": "2026-03-12T18:00:11+00:00",
      "source_id": "95987d98-7510-41f8-bacb-8683c7f7b0d5",
      "source_type": "OWNED",
      "type": "IMAGE",
      "updated_at": "2026-03-12T18:00:12+00:00",
      "variants": []
    }
  ],
  "media_ids": [650431494],
  "status": "SCHEDULED",
  "timestamp": "2026-03-12T22:45:00+00:00",
  "updated_at": "2026-03-12T20:34:11.048344+00:00"
}
```

<br />

## Manage Scheduled Posts

Once a post is scheduled, you can retrieve, update, or delete it using the `id` returned from the response.

### Get All Scheduled Posts

Retrieve all scheduled posts for a brand within a specified time range.

```http theme={null}
GET https://scheduler.dashsocial.com/{platform}/scheduled_posts?brand_ids={brand_id}&start={start}&end={end}&sort=TIMESTAMP&media_v2=true
```

Example:

```http theme={null}
GET https://scheduler.dashsocial.com/instagram/scheduled_posts?brand_ids=2000&start=2026-03-22T00:00:00&end=2026-03-28T23:59:59&sort=TIMESTAMP&media_v2=true
```

#### Query Parameters

| Parameter   | Description                                                                                                                                                      |
| ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `brand_ids` | **Required**. The ID of the brand whose scheduled posts you want to retrieve.                                                                                    |
| `start`     | Recommended. Start of the date range (ISO 8601 format with timezone offset, for example `2026-03-22T00:00:00`). Omitting this may result in slow response times. |
| `end`       | Recommended. End of the date range (ISO 8601 format with timezone offset, for example `2026-03-28T23:59:59`). Omitting this may result in slow response times.   |
| `sort`      | Sort order for results. Available values: `TIMESTAMP`, `UPDATED_AT`. Prefix with `-` for descending order (for example, `-TIMESTAMP`).                           |
| `media_v2`  | Set to `true` to returns media data in the current format.                                                                                                       |

**Notes**

* Replace `{platform}` in the URL with the platform path for the channel you want to query. See the [Platform Comparison](#platform-comparison) table for the full list of endpoint paths.
* `start` and `end` are optional but strongly recommended. Without them, the API will query all posts for the brand, which can result in slow response times.
* Timezone offsets are supported in the `start` and `end` parameters.

#### Query Parameters

| Parameter   | Description                                                                                                                            |
| ----------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| `brand_ids` | **Required**. The ID of the brand whose scheduled posts you want to retrieve.                                                          |
| `start`     | **Required**. Start of the date range (ISO 8601 format with timezone offset, for example `2026-03-22T00:00:00-04:00`).                 |
| `end`       | **Required**. End of the date range (ISO 8601 format with timezone offset, for example `2026-03-28T23:59:59-04:00`).                   |
| `sort`      | Sort order for results. Available values: `TIMESTAMP`, `UPDATED_AT`. Prefix with `-` for descending order (for example, `-TIMESTAMP`). |
| `media_v2`  | **Required**. Must be set to `true`. Returns media data in the current format.                                                         |

**Notes**

* Replace `{platform}` in the URL with the platform name (for example, `instagram`, `facebook`, `tiktok`).
* `start` and `end` define the window of scheduled post timestamps to return.
* Timezone offsets are supported in the `start` and `end` parameters.

### Get a Scheduled Post

Retrieve the full details of a scheduled post.

```http theme={null}
GET https://scheduler.dashsocial.com/{platform}/scheduled_posts/{id}
```

Example:

```http theme={null}
GET https://scheduler.dashsocial.com/instagram/scheduled_posts/12345
```

### Update a Scheduled Post

Use `PATCH` to update specific fields without replacing the entire post.

```http theme={null}
PATCH https://scheduler.dashsocial.com/{platform}/scheduled_posts/{id}?media_v2=true
body:
{
  "caption": "Updated caption",
  "timestamp": "2026-03-12T15:00:00Z"
}
```

Only the fields included in the request will be updated.

### Delete a Scheduled Post

Remove a scheduled post so it will not be published.

```http theme={null}
DELETE https://scheduler.dashsocial.com/{platform}/scheduled_posts/{id}
```

Example:

```http theme={null}
DELETE https://scheduler.dashsocial.com/instagram/scheduled_posts/12345
```

# Common Errors

| Error                  | Cause                                              |
| ---------------------- | -------------------------------------------------- |
| Invalid `media_id`     | Media was not uploaded or belongs to another brand |
| Missing `timestamp`    | Required when `status = SCHEDULED`                 |
| Unsupported media type | For example, using an image for TikTok             |
| Invalid platform field | Using the wrong caption parameter                  |

# Final Outcome

After completing this guide:

* Your media is uploaded to Dash
* Your post is scheduled for publishing
* You receive an `id` in the scheduler response that you can use to manage the post later

# Next Steps

You can extend this workflow by:

* Scheduling posts across multiple platforms
* Automating content calendars
* Retrieving scheduled posts for reporting
* Building internal publishing tools using the Scheduler API
