Install
openclaw skills install publora-twitterPost or schedule content to X (Twitter) using the Publora API. Use this skill when the user wants to tweet, schedule a tweet, or post a thread to X/Twitter v...
openclaw skills install publora-twitterX/Twitter platform skill for the Publora API. For auth, core scheduling, media upload, and workspace/webhook docs, see the publora core skill.
Base URL: https://api.publora.com/api/v1
Header: x-publora-key: sk_YOUR_KEY
Platform ID format: twitter-{userId}
⚠️ Twitter/X requires Pro or Premium plan — excluded from the Starter plan.
⚠️ API limits differ from native app. Design against these.
| Property | API Limit | Notes |
|---|---|---|
| Text | 280 characters | 25,000 with Premium account |
| Images | Up to 4 × 5 MB | All formats auto-converted to PNG (max 1000px width) |
| Video | 2 min (120s) / 512 MB | ⚠️ Native allows 2:20 — API is stricter |
| Video format | MP4, MOV | — |
| Threading | ✅ Auto-split with (1/N) or manual --- | See Threading section |
| Text only | ✅ Yes | — |
Common errors:
This user is not allowed to post a video longer than 2 minutes — trim video to under 120sX has specific rules Publora handles automatically:
await fetch('https://api.publora.com/api/v1/create-post', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'x-publora-key': 'sk_YOUR_KEY' },
body: JSON.stringify({
content: 'Just shipped a new feature! 🚀 #buildinpublic',
platforms: ['twitter-123456789']
})
});
Publora automatically splits at paragraph/sentence/word breaks and adds (1/N) markers (e.g., (1/3), (2/3)). 10 characters reserved per tweet for the marker.
---Use --- on its own line to define exact split points:
body: JSON.stringify({
content: '1/ Everything I learned building in public this year.\n\n---\n\n2/ First lesson: ship early. Don\'t wait for perfect.\n\n---\n\n3/ Second lesson: your audience is your best product team.',
platforms: ['twitter-123456789']
})
[n/m]Use [1/3], [2/3] etc. — Publora detects these and splits at those points exactly (preserves as written).
body: JSON.stringify({
content: 'Scheduled announcement: our product launches tomorrow! 🎉',
platforms: ['twitter-123456789'],
scheduledTime: '2026-03-20T14:00:00.000Z'
})