---
title: "Cancel a scheduled post"
method: POST
path: "/posts/{id}/cancel"
tags: ["Posts"]
---

# Cancel a scheduled post

`POST /posts/{id}/cancel`

## Request

- Base URL: `https://api.postplanify.com/api/v1`
- URL: `https://api.postplanify.com/api/v1/posts/{id}/cancel`
- Auth: HTTP bearer

Cancels a scheduled post and removes it from the publish queue. Only posts with status `SCHEDULED` or `RESCHEDULED` can be cancelled.

The post is not deleted: its status changes to `CANCELLED` and it remains visible in your post list.

## Path parameters

- `id` string, uuid, required

## Response `200`

Post cancelled

- object
  - `ok` boolean
  - `data` Post
    - `id` string, uuid
    - `workspaceId` string, uuid
    - `caption` string, nullable
    - `status` 'SCHEDULED' | 'PUBLISHED' | 'CANCELLED' | 'RESCHEDULED'
    - `platform` 'FACEBOOK' | 'INSTAGRAM' | 'X' | 'LINKEDIN' | 'TIKTOK' | 'YOUTUBE' | 'THREADS' | 'BLUESKY' | 'PINTEREST' | 'GOOGLE_BUSINESS'
    - `socialPlatformPostId` string, nullable: The native post ID on the social platform
    - `isStory` boolean
    - `shortenLinks` boolean: Whether links are shortened with the workspace's Bitly account at publish time
    - `utmCampaign` string, nullable: The `utm_campaign` added to shortened links, if any
    - `scheduledAt` string, date-time, nullable
    - `publishedAt` string, date-time, nullable
    - `createdAt` string, date-time
    - `updatedAt` string, date-time
    - `socialAccount` SocialAccountSummary
      - `id` string, uuid
      - `platform` 'FACEBOOK' | 'INSTAGRAM' | 'X' | 'LINKEDIN' | 'TIKTOK' | 'YOUTUBE' | 'THREADS' | 'BLUESKY' | 'PINTEREST' | 'GOOGLE_BUSINESS'
      - `accountName` string
      - `accountUrl` string, nullable
      - `profilePictureUrl` string, nullable
      - `customLabel` string, nullable: User-set label to distinguish accounts (e.g. "Downtown")
    - `medias` PostMedia[]
      - `id` string, uuid
      - `name` string
      - `url` string
      - `type` string: Media type (e.g. IMAGE_JPEG, VIDEO_MP4)
      - `size` number: File size in bytes
      - `width` integer, nullable
      - `height` integer, nullable
      - `duration` number, nullable: Video duration in seconds
      - `coverImageUrl` string, nullable
    - `logs` PostLog[]
      - `type` 'SUCCESS' | 'ERROR' | 'WARNING' | 'INFO'
      - `message` string, nullable
      - `createdAt` string, date-time
    - `platformParams` object, nullable: Platform-specific parameters (YouTube, TikTok, Pinterest, or Google Business fields)
    - `label` PostLabel, nullable: A user-defined content label attached to a post (used for organizing content pillars)
      - `name` string
      - `color` string: Hex color code
    - `metrics` PostMetrics, nullable: A post's most recent daily analytics snapshot. Snapshots are collected once per day per post, so `measuredAt` shows how fresh these figures are.
      - `views` integer, nullable
      - `likes` integer, nullable
      - `comments` integer, nullable
      - `shares` integer, nullable
      - `engagementRate` number, float, nullable: Engagement as a share of views, where the platform reports it
      - `platformMetrics` object, nullable: Platform-specific extras, present only where the platform reports them. For example X returns bookmarks and quotes, Instagram returns reach and saves.
      - `measuredAt` string, date: The date this snapshot was taken

## Other responses

- `400`: Post is not in a cancellable state
- `404`: Post not found

---

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