Viral posts to your take

Find posts that took off in your niche, then have Postel write your own version as a draft.

Postel keeps a library of posts and videos that did far better than their creator usually does. You can search it, pick a post or a format, and have Postel write your own take on it in your voice.

The library only holds individual creators. Postel keeps brands, politicians and aggregator pages out.

Find viral posts

ParameterTypeDefaultDescription
querystringTopic or keywords, up to 200 characters. Leave it out to browse what is doing best.
networkstringxx for posts, or youtube, tiktok or instagram for videos.
formatstringX only. Only posts in this format, an id from GET /v1/viral/formats.
lengthstringVideos only. short or long.
daysinteger7How far back to look, 1 to 60 days.
minOutlierScorenumberOnly posts with at least this outlier score.
minViewsintegerOnly posts with at least this many views. On X, results start at 10,000 views when you leave it out.
limitinteger20Results, 1 to 50.
curl "https://www.postel.app/api/v1/viral/posts?query=pricing&days=14&minOutlierScore=5" \
  -H "Authorization: Bearer $POSTEL_API_KEY"
Response
{
  "posts": [
    {
      "id": "1853921047712395264",
      "network": "x",
      "url": "https://x.com/jonaslindqvist/status/1853921047712395264",
      "title": null,
      "text": "We raised prices 40% last month. Churn went down.\n\nHere's what we changed first.",
      "author": {
        "handle": "jonaslindqvist",
        "name": "Jonas Lindqvist",
        "followers": 8200
      },
      "postedAt": "2026-10-29T07:41:00.000Z",
      "views": 214000,
      "likes": 3120,
      "comments": 184,
      "reposts": 402,
      "outlierScore": 26.1,
      "outlierBasis": "followers",
      "format": "the-numbers",
      "isShort": null
    }
  ]
}

X results come most viewed first. Searching allows 30 requests a minute per workspace. See Rate limits.

Returns one viral post or video by its id, or 404 not_found.

Outlier score

The outlier score says how far a post outran what its creator normally gets. Higher means more unusual.

  • On X, it is views divided by the author's followers. A score of 26 means the post got 26 times as many views as the author has followers.
  • On videos, it is how many times more views the video got than a baseline. The baseline is the creator's usual views, their followers, or what videos on the same topic usually get. outlierBasis says which: usual, followers or topic.

The score is null when Postel can't compute it, for example when it doesn't know the author's follower count.

The viral post object

FieldTypeDescription
idstringPostel's id for the post. Use it to write your take.
networkstringx, youtube, tiktok or instagram.
urlstringThe post on its network.
titlestring or nullVideos only.
textstringThe post text, or the video's description.
author.handlestringThe creator's handle.
author.namestring or nullThe creator's name.
author.followersnumber or nullTheir followers when Postel last checked.
postedAtstringUTC ISO 8601.
views, likes, comments, repostsnumber or nullCounts when Postel last checked. reposts is null for videos.
outlierScorenumber or nullSee Outlier score.
outlierBasisstring or nullfollowers, usual or topic.
formatstring or nullX only. The format the post follows.
isShortboolean or nullVideos only. true for short-form.

Formats

Viral posts keep reusing the same shapes, like a real number with the decisions behind it, or a before and after. This endpoint lists them. Each format has a question. Your answer to it gives Postel the facts to write the post from.

Response
{
  "formats": [
    {
      "id": "the-numbers",
      "name": "The numbers",
      "why": "A real figure stops the scroll, and the decisions behind it are what readers save.",
      "question": "What's a number from your work you'd stand behind?",
      "placeholder": "40 demo calls in October, all from replying to posts, about 20 minutes a day"
    },
    {
      "id": "then-now",
      "name": "Then vs now",
      "why": "A concrete before and after shows a shift the reader can act on.",
      "question": "What changed in how you work?",
      "placeholder": "We used to write every SEO page by hand. Now we publish fewer pages and update the ones that rank."
    }
  ]
}

Write your take

Postel writes your own post from a viral X post or from a format, in your voice, and saves one draft per network.

FieldTypeDefaultDescription
viralPostIdstringAn X post from GET /v1/viral/posts to use as the template. Send this or format.
formatstringA format id from GET /v1/viral/formats. Send this or viralPostId.
answerstringYour answer to the format's question: the facts the post is about. Required with format, optional with viralPostId. Up to 2,000 characters.
platformsstring[]["linkedin"]x, linkedin or both. Postel writes one draft for each.
curl https://www.postel.app/api/v1/viral/takes \
  -H "Authorization: Bearer $POSTEL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "format": "the-numbers",
    "answer": "We raised prices 25% in September. Two customers left, revenue went up 21%.",
    "platforms": ["linkedin", "x"]
  }'

It answers 201 with:

FieldTypeDescription
postobjectThe first draft, as a post.
postsobject[]Every draft Postel wrote, one per network.
failedstring[]Networks whose draft Postel couldn't write. Usually empty.

Things to know:

  • Each draft uses 1 AI credit. A network whose draft fails costs nothing. Writing takes works on every plan.
  • Writing takes 10 to 40 seconds. Set your HTTP client's timeout to at least 90 seconds.
  • Takes share the limit of 3 posts written at once per workspace with POST /v1/posts/generate.
  • Takes work from X posts and formats. A video's id gets 422 not_supported, because Postel writes from the post's text.
  • If no draft could be written, the response is 502 generate_failed and nothing is charged.
  • Send an Idempotency-Key only when it is unique per run. A daily job with a fixed key would get the same drafts back for 24 hours.

On this page