---
title: "Update a publication"
method: PUT
path: "/publications/{id}"
tags: ["Publications"]
---

# Update a publication

`PUT /publications/{id}`

## Request

- Base URL: `https://app.openpo.st/api/v1`
- URL: `https://app.openpo.st/api/v1/publications/{id}`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `openpost_session`

## Path parameters

- `id` string, required: Publication ID

## Headers

- `Idempotency-Key` string: Replay key scoped to the caller, Workspace, and operation

## Request body

- PublicationUpdateBody
  - `$schema` string, uri: A URL to the JSON Schema for this object.
  - `audience` string: Target audience
  - `clear_schedule` boolean: Clear the saved schedule and cancel its pending publication job
  - `content_profile` string: Content profile
  - `creation_preset` 'post' | 'thread' | 'story' | 'short_video' | 'video': Starter preset; destination renditions own their formats
  - `expected_revision` integer, required: Revision loaded by the editor
  - `goal` string: Publication goal
  - `inherit_random_delay` boolean: Use the Workspace random-delay setting the next time this Publication is scheduled
  - `intent` 'post' | 'thread' | 'story' | 'short_video' | 'video': Deprecated compatibility alias for creation_preset
  - `metadata` object: Publication metadata
  - `random_delay_minutes` integer: Replace the random schedule delay in minutes (±N)
  - `renditions` RenditionInput[], nullable: Replacement destination renditions saved in the same transaction
    - `body` string: Platform-specific body
    - `description` string: Platform-specific description
    - `format_locked` boolean: Preserve an explicitly selected format when source content changes
    - `id` string: Legacy client reference; replacement IDs are server-generated
    - `media` PublicationMediaInput[], nullable: Rendition-specific ordered media
      - `alt_text` string: Alt text override
      - `media_id` string, required: Media attachment ID
      - `role` string: Media role: attachment, cover, thumbnail
      - `settings` object: Media-item settings
      - `thumbnail_timestamp_ms` integer: Video thumbnail timestamp
    - `output_profile` string: Resolved provider-qualified output profile
    - `profile` string: Content profile override
    - `schedule_override` string, date-time: Optional destination-specific schedule
    - `segments` RenditionSegmentInput[], nullable: Ordered destination segments
      - `body` string: Destination segment body override
      - `body_override` string: Explicit destination body; omit or null to inherit
      - `description` string: Destination segment description override
      - `description_override` string: Explicit destination description; omit or null to inherit
      - `id` string: Legacy client reference; replacement IDs are server-generated
      - `media` PublicationMediaInput[], nullable: Destination segment ordered media
        - `alt_text` string: Alt text override
        - `media_id` string, required: Media attachment ID
        - `role` string: Media role: attachment, cover, thumbnail
        - `settings` object: Media-item settings
        - `thumbnail_timestamp_ms` integer: Video thumbnail timestamp
      - `media_inherited` boolean: Whether destination media follows the canonical segment
      - `publication_segment_id` string: Server canonical segment ID, or its matching client segment reference in the same request
      - `settings` object: Segment-scoped destination settings
      - `source_overrides` RenditionSourceOverride[], nullable: Authored canonical-source overrides for a single joined destination output
        - `body_override` string: Explicit source body; omit or null to inherit
        - `media` PublicationMediaInput[], nullable: Independent source media, including an explicit empty list
          - `alt_text` string: Alt text override
          - `media_id` string, required: Media attachment ID
          - `role` string: Media role: attachment, cover, thumbnail
          - `settings` object: Media-item settings
          - `thumbnail_timestamp_ms` integer: Video thumbnail timestamp
        - `media_inherited` boolean, required: Whether this source contributes its canonical media
        - `publication_segment_id` string, required: Canonical source segment ID, or matching client reference in the same request
      - `title` string: Destination segment title override
      - `title_override` string: Explicit destination title; omit or null to inherit
      - `url` string: Destination segment URL override
      - `url_override` string: Explicit destination URL; omit or null to inherit
    - `settings` object: Provider-specific settings
    - `social_account_id` string, required: Social account ID
    - `target_key` string: Provider subdestination key; defaults to the account destination
    - `title` string: Platform-specific title
  - `repost_override` Override
    - `mode` 'inherit' | 'off' | 'custom', required: Use workspace rules, disable reposts, or use this post's custom rule
    - `rule` Rule
      - `delay_seconds` integer, required: Wait after publishing before the first eligibility check
      - `evaluation_window_seconds` integer, required: How long OpenPost may wait for engagement gates
      - `min_comments` integer, required: Minimum comments; zero disables this gate
      - `min_likes` integer, required: Minimum likes; zero disables this gate
      - `min_reposts` integer, required: Minimum reposts or shares; zero disables this gate
      - `min_views` integer, required: Minimum views; zero disables this gate
      - `plateau_checks` integer, required: Consecutive unchanged analytics checks required
      - `require_plateau` boolean, required: Wait until stored engagement has stopped changing
      - `stages` Stage[], nullable: Ordered repost times measured from the original publish time
        - `delay_seconds` integer, required: Wait from the original publish time before this repost
        - `unrepost_previous` boolean, required: Remove the preceding repost before creating this one
      - `threshold_mode` 'all' | 'any', required: Require all configured thresholds or any one
    - `target_account_ids` string[], nullable: Target accounts for a custom override
  - `scheduled_at` string, date-time: Optional schedule time
  - `segments` PublicationSegmentInput[], nullable: Replacement ordered canonical segments
    - `body` string: Canonical segment body
    - `description` string: Canonical segment description
    - `id` string: Client segment reference on create, or an existing server segment ID on update
    - `media` PublicationMediaInput[], nullable: Ordered canonical segment media
      - `alt_text` string: Alt text override
      - `media_id` string, required: Media attachment ID
      - `role` string: Media role: attachment, cover, thumbnail
      - `settings` object: Media-item settings
      - `thumbnail_timestamp_ms` integer: Video thumbnail timestamp
    - `settings` object: Canonical segment settings
    - `title` string: Canonical segment title
    - `url` string: Canonical segment URL
  - `social_set_id` string: Social Set provenance; does not replace snapshotted destinations
  - `source_text` string: Canonical source text
  - `source_url` string: Source URL
  - `title` string: Internal publication title

## Response `200`

OK

- PublicationResponse
  - `$schema` string, uri: A URL to the JSON Schema for this object.
  - `actual_run_at` string
  - `audience` string
  - `content_profile` string, required
  - `created_at` string, required
  - `created_by` string, required
  - `creation_preset` string, required
  - `creation_source` 'web' | 'api' | 'sdk' | 'mcp' | 'cli' | 'autopost' | 'unknown', required: Low-cardinality channel that created the Publication
  - `failure_dismissed_at` string
  - `goal` string
  - `id` string, required
  - `intent` string, required
  - `media` MediaSummary[], nullable, required
    - `alt_text` string
    - `analysis_error` string
    - `analysis_status` string, required
    - `aspect_ratio` string, required
    - `display_order` integer
    - `dominant_type` string, required
    - `duration_ms` integer, required
    - `frame_rate` number, double, required
    - `height` integer, required
    - `id` string, required
    - `mime_type` string, required
    - `original_filename` string, required
    - `poster_thumbnail_url` string
    - `public_url_checked_at` string
    - `public_url_error` string
    - `public_url_ready` boolean, required
    - `public_url_status` integer, required
    - `role` string
    - `settings` object
    - `size` integer, required
    - `thumbnail_timestamp_ms` integer
    - `url` string, required
    - `width` integer, required
  - `metadata` object, required
  - `random_delay_inherited` boolean, required
  - `random_delay_minutes` integer, required
  - `renditions` RenditionResponse[], nullable, required
    - `body` string, required
    - `delivery` ProviderDeliveryResponse
      - `current_attempt_created_at` string, required
      - `current_attempt_id` string, required
      - `current_attempt_number` integer, required
      - `error_code` string: Safe normalized provider failure code
      - `error_http_status` integer
      - `error_kind` string: Safe normalized provider failure class
      - `external_id` string
      - `external_url` string
      - `last_reconciled_at` string
      - `next_reconciliation_at` string
      - `recovery_action` 'none' | 'retry' | 'reconcile' | 'manual_resolution', required
      - `state` string, required
      - `target_key` string, required
      - `terminal_reason` string
    - `description` string, required
    - `error_action` string
    - `error_code` string
    - `error_http_status` integer
    - `error_kind` string
    - `error_message` string
    - `error_retry_at` string
    - `error_retryable` boolean, required
    - `external_id` string
    - `external_url` string
    - `format_locked` boolean, required
    - `id` string, required
    - `media` MediaSummary[], nullable, required
      - `alt_text` string
      - `analysis_error` string
      - `analysis_status` string, required
      - `aspect_ratio` string, required
      - `display_order` integer
      - `dominant_type` string, required
      - `duration_ms` integer, required
      - `frame_rate` number, double, required
      - `height` integer, required
      - `id` string, required
      - `mime_type` string, required
      - `original_filename` string, required
      - `poster_thumbnail_url` string
      - `public_url_checked_at` string
      - `public_url_error` string
      - `public_url_ready` boolean, required
      - `public_url_status` integer, required
      - `role` string
      - `settings` object
      - `size` integer, required
      - `thumbnail_timestamp_ms` integer
      - `url` string, required
      - `width` integer, required
    - `output_profile` string, required
    - `platform` string, required
    - `profile` string, required
    - `publication_id` string, required
    - `schedule_override` string
    - `segments` RenditionSegmentResponse[], nullable, required
      - `body` string, required
      - `body_override` string
      - `description` string, required
      - `description_override` string
      - `error_action` string
      - `error_code` string
      - `error_http_status` integer
      - `error_kind` string
      - `error_message` string
      - `error_retry_at` string
      - `error_retryable` boolean, required
      - `external_id` string
      - `external_url` string
      - `id` string, required
      - `media` MediaSummary[], nullable, required
        - `alt_text` string
        - `analysis_error` string
        - `analysis_status` string, required
        - `aspect_ratio` string, required
        - `display_order` integer
        - `dominant_type` string, required
        - `duration_ms` integer, required
        - `frame_rate` number, double, required
        - `height` integer, required
        - `id` string, required
        - `mime_type` string, required
        - `original_filename` string, required
        - `poster_thumbnail_url` string
        - `public_url_checked_at` string
        - `public_url_error` string
        - `public_url_ready` boolean, required
        - `public_url_status` integer, required
        - `role` string
        - `settings` object
        - `size` integer, required
        - `thumbnail_timestamp_ms` integer
        - `url` string, required
        - `width` integer, required
      - `media_inherited` boolean, required
      - `output_media` MediaSummary[], nullable: Ordered delivery media, including generated text cards. Use media for editing source attachments.
        - `alt_text` string
        - `analysis_error` string
        - `analysis_status` string, required
        - `aspect_ratio` string, required
        - `display_order` integer
        - `dominant_type` string, required
        - `duration_ms` integer, required
        - `frame_rate` number, double, required
        - `height` integer, required
        - `id` string, required
        - `mime_type` string, required
        - `original_filename` string, required
        - `poster_thumbnail_url` string
        - `public_url_checked_at` string
        - `public_url_error` string
        - `public_url_ready` boolean, required
        - `public_url_status` integer, required
        - `role` string
        - `settings` object
        - `size` integer, required
        - `thumbnail_timestamp_ms` integer
        - `url` string, required
        - `width` integer, required
      - `position` integer, required
      - `publication_segment_id` string, required
      - `settings` object, required
      - `source_overrides` RenditionSourceOverride[], nullable
        - `body_override` string: Explicit source body; omit or null to inherit
        - `media` PublicationMediaInput[], nullable: Independent source media, including an explicit empty list
          - `alt_text` string: Alt text override
          - `media_id` string, required: Media attachment ID
          - `role` string: Media role: attachment, cover, thumbnail
          - `settings` object: Media-item settings
          - `thumbnail_timestamp_ms` integer: Video thumbnail timestamp
        - `media_inherited` boolean, required: Whether this source contributes its canonical media
        - `publication_segment_id` string, required: Canonical source segment ID, or matching client reference in the same request
      - `status` string, required
      - `title` string, required
      - `title_override` string
      - `url` string
      - `url_override` string
    - `settings` object, required
    - `social_account_id` string, required
    - `status` string, required
    - `target_key` string, required
    - `title` string, required
  - `repost_override` Override, required
    - `mode` 'inherit' | 'off' | 'custom', required: Use workspace rules, disable reposts, or use this post's custom rule
    - `rule` Rule
      - `delay_seconds` integer, required: Wait after publishing before the first eligibility check
      - `evaluation_window_seconds` integer, required: How long OpenPost may wait for engagement gates
      - `min_comments` integer, required: Minimum comments; zero disables this gate
      - `min_likes` integer, required: Minimum likes; zero disables this gate
      - `min_reposts` integer, required: Minimum reposts or shares; zero disables this gate
      - `min_views` integer, required: Minimum views; zero disables this gate
      - `plateau_checks` integer, required: Consecutive unchanged analytics checks required
      - `require_plateau` boolean, required: Wait until stored engagement has stopped changing
      - `stages` Stage[], nullable: Ordered repost times measured from the original publish time
        - `delay_seconds` integer, required: Wait from the original publish time before this repost
        - `unrepost_previous` boolean, required: Remove the preceding repost before creating this one
      - `threshold_mode` 'all' | 'any', required: Require all configured thresholds or any one
    - `target_account_ids` string[], nullable: Target accounts for a custom override
  - `review_epoch` integer
  - `review_id` string
  - `review_state` 'pending' | 'approved' | 'changes_requested' | 'needs_review'
  - `revision` integer, required
  - `scheduled_at` string
  - `segments` PublicationSegmentResponse[], nullable, required
    - `body` string, required
    - `description` string, required
    - `id` string, required
    - `media` MediaSummary[], nullable, required
      - `alt_text` string
      - `analysis_error` string
      - `analysis_status` string, required
      - `aspect_ratio` string, required
      - `display_order` integer
      - `dominant_type` string, required
      - `duration_ms` integer, required
      - `frame_rate` number, double, required
      - `height` integer, required
      - `id` string, required
      - `mime_type` string, required
      - `original_filename` string, required
      - `poster_thumbnail_url` string
      - `public_url_checked_at` string
      - `public_url_error` string
      - `public_url_ready` boolean, required
      - `public_url_status` integer, required
      - `role` string
      - `settings` object
      - `size` integer, required
      - `thumbnail_timestamp_ms` integer
      - `url` string, required
      - `width` integer, required
    - `position` integer, required
    - `settings` object, required
    - `title` string, required
    - `url` string
  - `social_set_id` string
  - `source_text` string, required
  - `source_url` string
  - `status` string, required
  - `title` string, required
  - `updated_at` string, required
  - `workspace_id` string, required

## Other responses

- `default`: Error

---

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