Skip to main content
PUT
/
v1
/
posts
/
slug
/
{slug}
Update a post by slug
import { ParagraphAPI } from "@paragraph-com/sdk"

const api = new ParagraphAPI({ apiKey: "your-api-key" })
await api.posts.update({
  slug: "my-first-post",
  title: "Updated Title",
  markdown: "## New content"
})
{}

Authorizations

Authorization
string
header
required

API key for authenticating protected endpoints. Pass as Bearer token in Authorization header.

Path Parameters

slug
string
required

URL-friendly identifier of the post to update

Required string length: 1 - 256

Body

application/json

Body

markdown
string

Post content in Markdown format. Replaces full content — rich blocks created in the editor will be lost

title
string

Title of the post

Maximum string length: 200
subtitle
string

Optional subtitle or brief summary

Maximum string length: 300
slug
string

URL-friendly identifier for the post

Required string length: 1 - 256
postPreview
string

Preview text for the post

Maximum string length: 500
categories

Category tags for the post. Can also be a comma-separated string.

status
enum<string>

Set to 'published' to publish a draft or keep an already-live post published after edits, 'draft' to unpublish, or 'archived' to archive

Available options:
draft,
published,
archived
scheduledAt
integer | null

Unix timestamp (milliseconds) to schedule the post's first publish at a future time. Must be in the future and at most 30 days out. Only valid for draft posts that haven't been published or already scheduled. Cannot be combined with status: 'draft' or 'archived'. Pass null to cancel a previously scheduled publish. The value 0 is treated the same as omitting the field (no scheduling request); note that on an already-scheduled post, omitting scheduledAt while changing status cancels the schedule.

Required range: x >= 0
sendNewsletter

Whether to send an email newsletter to subscribers when the post publishes. Only meaningful when publishing (status: 'published') or scheduling (scheduledAt set). Default: false

publishedAt
integer

Unix timestamp (milliseconds) to set as the post's publish date. Once set, the date is preserved across re-publishes.

Required range: x > 0
imageUrl
string<uri>

URL of an image to set as the post's cover/hero image. The image is fetched, re-hosted on Paragraph's CDN, and a placeholder is generated. Pass clearImage: true instead to remove the existing cover.

clearImage
boolean

When true, removes the post's existing cover/hero image. Ignored if imageUrl is also provided.

Response

Post updated successfully

success
enum<boolean>
required

Whether the update succeeded

Available options:
true