Get post by publication ID and post slug
Retrieve a post using its publication ID and its URL-friendly slug
publicationId*stringUnique identifier of the publication
postSlug*stringURL-friendly identifier of the post
1 <= length <= 256includeContent?|Include full content fields (markdown, json, staticHtml). Default: false
Post details retrieved successfully
application/json- response
id*stringUnique identifier for the post
title*stringTitle of the post
length <= 200imageUrl?stringOptional URL to the post's main image
uriimageAlt?stringAlternative text describing the cover image, shown to screen readers and when the image fails to load
publishedAt?stringEpoch timestamp when the post was published
updatedAt?stringEpoch timestamp when the post was last updated
subtitle?stringOptional subtitle or brief summary
length <= 300slug*stringURL-friendly identifier for the post; accessible at paragraph.com/@[publicationSlug]/[slug]
1 <= length <= 256staticHtml?stringRendered HTML content of the post
json?stringTipTap JSON representation of the post content structure. This is the source of truth that the staticHtml and markdown is generated from
markdown?stringMarkdown source of the post content
coinId?stringID of the associated coin, if the post is coined
categories?array<string>Categories/tags associated with this post
canonicalUrl?stringCanonical URL used in rendered metadata. This does not change the Paragraph permalink.
uripublishOnline?booleanWhether the published post is visible on the public website
communityId?stringSubscriber segment id selected for newsletter delivery
authors?array<>Authors of this post
authorIds?array<string>IDs of the authors of this post
views?numberTotal views. Only included when fetching your own posts via GET /v1/posts
status?stringCurrent publish status. Only set on authenticated endpoints (listOwn, getById for your own post). Use this instead of publishedAt to determine publish state — publishedAt is preserved across unpublishing.
"published""draft""scheduled""archived"curl -X GET "https://example.com/v1/publications/string/posts/slug/string"{ "id": "string", "title": "string", "imageUrl": "http://example.com", "imageAlt": "string", "publishedAt": "string", "updatedAt": "string", "subtitle": "string", "slug": "string", "staticHtml": "string", "json": "string", "markdown": "string", "coinId": "string", "categories": [ "string" ], "canonicalUrl": "http://example.com", "publishOnline": true, "communityId": "string", "authors": [ { "id": "string", "walletAddress": "string", "avatarUrl": "http://example.com", "publicationId": "string", "name": "string", "bio": "string" } ], "authorIds": [ "string" ], "views": 0, "status": "published"}Update a post by ID PUT
Update an existing post in your publication. 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 — the markdown to editor conversion is lossy for blocks without a markdown equivalent - 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`.
Get post by publication slug and post slug GET
Retrieve a post using its publication's slug and the post's slug. This is useful for building user-facing URLs.