DELETE
/v1/posts/slug/{slug}

Permanently delete a post using its URL slug. The publication is identified by the API key provided in the Authorization header.

Warning: This action is irreversible. The post and all related data (notifications and drafts) will be permanently deleted.

Authorization

apiKey
headerAuthorizationBearer <token>

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

Path Parameters

slug*string

URL-friendly identifier of the post to delete

Length1 <= length <= 256

Request Body

Body

application/json
  1. body

Response Body

Post deleted successfully

application/json
  1. response
success*true

Whether the deletion succeeded

Value intrue
curl -X DELETE "https://example.com/v1/posts/slug/string" \  -H "Content-Type: application/json" \  -d '{}'
{  "success": true}

Create a new post POST

Create a new post in your publication. The publication is identified by the API key provided in the Authorization header. **Requirements:** - `title` field is required - Provide content as either `markdown` (converted to TipTap JSON) OR `bodyJson` (a Tiptap document for content with buttons/linked images) — exactly one is required, not both **Behavior:** - The post will be created as published by default. Set `status` to `"draft"` to create a draft instead - If `sendNewsletter` is true, an email will be sent to all subscribers when the post publishes - Set `scheduledAt` (Unix timestamp in milliseconds) to schedule first-publish for a future time. Must be in the future and at most 30 days out. Scheduling cannot be combined with `status: "draft"`. When scheduled, the response `status` is `"scheduled"` and the post publishes (plus sends newsletter, if requested) at the scheduled time.

Update a post by slug PUT

Update an existing post using its URL slug. The publication is identified by the API key provided in the Authorization header. **Behavior:** - Only provided fields are updated; omitted fields remain unchanged - When `markdown` is provided, it replaces the full content. Rich blocks (embeds, buttons, callouts) created in the editor will be lost - Set `status` to `"published"` to publish a draft, `"draft"` to unpublish, or `"archived"` to archive - When editing an already-live post that should remain live, include `status: "published"` in the update and verify the returned post status before telling the writer it is live - Set `scheduledAt` (Unix timestamp in milliseconds) to schedule a draft's first-publish for a future time. Must be in the future and at most 30 days out. Only valid for posts that haven't been published or already scheduled. Pass `scheduledAt: null` to cancel a previously scheduled publish (or to reschedule: cancel first, then schedule again with the new time). Set `sendNewsletter: true` alongside `scheduledAt` to email subscribers when the post publishes. - Set `imageUrl` to update the post's cover/hero image; the URL is fetched, re-hosted, and a placeholder is generated. Pass `clearImage: true` to remove the existing cover. - Set `imageAlt` to describe the cover image for screen readers. It renders everywhere the cover appears, so set it whenever you set `imageUrl`.