Threads & replies
Multi-tweet threads and reply chains
Threads and reply chains are first-class in OpenPost. A thread publishes as a native thread — reply-chained from tweet to tweet or post to post — not as separate posts with numbers in front.
What counts as a thread
X (Twitter)
Reply-chained tweets
Threads (Meta)
Native thread chain
Bluesky
Reply-chained posts
Not supported (single post only)
Not supported (single caption)
Others
Not supported; single post only
Split rules
The composer splits your content into thread parts using these rules, in order:
- Explicit break — three dashes on their own line (
---) force a split. - Double newline— a blank line between paragraphs.
- Character cap— if no splits are found and content exceeds the platform limit, we split on the nearest sentence boundary.
Intro tweet — the hook.
---
Details of point 1.
Numbers and a link.
---
Details of point 2.
---
CTA tweet with link.
Thread in the API
{
"content": "Intro tweet — the hook.\n\n---\n\nDetails of point 1…",
"integrations": ["int_x_abc"],
"post_type": "thread"
}
Or pass an explicit array if you prefer to bypass parsing:
{
"integrations": ["int_x_abc"],
"post_type": "thread",
"thread_parts": [
{ "content": "Intro tweet — the hook." },
{ "content": "Details of point 1…" },
{ "content": "Details of point 2…", "media": ["med_chart"] },
{ "content": "CTA tweet with link." }
]
}
Media per thread part
Each part can have its own media. Useful when part 2 of a thread shows a chart and part 3 shows a screenshot. Just attach different assets to different parts in the composer, or use thread_parts[n].media in the API.
Partial-failure handling
If part 3 of a 5-part thread fails, we stop publishing the later parts to avoid an out-of-order chain. The post moves to partial_failure with a list of which parts succeeded. You can manually retry from the failed index with a single click.
Replies
Reply to an existing post by passing its URL:
{
"content": "Great point — we already shipped this.",
"integrations": ["int_x_abc"],
"reply_to": "https://x.com/someone/status/1234567890"
}
OpenPost validates the URL before scheduling — broken links are rejected at create-time, not at publish-time, so you don’t get a failure hours later.
Quote posts
Quote a post with quote_of:
{
"content": "💯",
"integrations": ["int_x_abc"],
"quote_of": "https://x.com/someone/status/1234567890"
}
The referenced post is embedded as a native quote card. Works on X, Threads, and Bluesky.