latestOpenAPI 3.1.0MITraw.githubusercontent.com2026-08-20510415.2 KB

d7ee6288035e

content

Create a draft

Save a finished piece of short-form content — an X post or thread, a LinkedIn post, a one-off email, or an X Article — to your publication's library.

What this does:

  • The piece is saved as a draft and shows up in the Paragraph app under Content, where you can edit it and send it.
  • Nothing is posted, emailed, or scheduled. Sending happens in the app, so a draft you upload can't go out without you.
  • Long-form Paragraph posts are a different resource — use POST /v1/posts for those.

The body:

  • body carries the artifact itself, in the shape its kind uses (see the field descriptions below).
  • It's validated the same way the Paragraph app validates it, so an X thread over 280 characters an entry, or an Article missing its headline, comes back with the same explanation you'd see in the app.
  • Drafts created here are text-only. Media has to be uploaded to X or LinkedIn first, which the API can't do yet.
post/v1/content

Request body

kind'tweet' | 'linkedin' | 'newsletter' | 'x_article' required

What kind of piece this is

titlestring required

What this piece is called in your library. Sentence case, no trailing period. Not published anywhere — for an X Article headline, use body.title.

Response

Draft created successfully

idstring required

Unique identifier for this piece of content

kindstring required

What this piece is: tweet, linkedin, newsletter, or x_article

titlestring required

What this piece is called in your library

excerptstring required

First readable line of the body, for listing views

status'draft' | 'published' | 'archived' required

Whether this piece has been delivered, is still a draft, or was archived

scheduledboolean required

Whether a scheduled send is queued against this piece

lockedReasonstring nullable required

Why this piece can't be edited right now, or null when it can. A queued or in-flight send locks the words, because they go out exactly as written.

publishedAtstring nullable required

ISO 8601 timestamp of the first delivery, or null

urlstring nullable required

Where this piece went live, from the same delivery publishedAt came from. Null when it hasn't been delivered, and null by design for a channel that publishes no page: a custom email renders into the message itself, so there is no address to link to. Never guessed — a delivery whose id isn't shaped like its channel reports null rather than a link that would 404.

archivedAtstring nullable required

ISO 8601 timestamp of when this piece was archived, or null

createdAtstring required

ISO 8601 timestamp of creation

updatedAtstring required

ISO 8601 timestamp of the last change

bodyobject required

The artifact itself, in the shape its kind uses