Skills clawpost
AI-powered social media publishing for LinkedIn and X (Twitter) with algorithm optimization and scheduling.
git clone https://github.com/openclaw/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/acidias/clawpost-2" ~/.claude/skills/openclaw-skills-clawpost && rm -rf "$T"
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/acidias/clawpost-2" ~/.openclaw/skills/openclaw-skills-clawpost && rm -rf "$T"
skills/acidias/clawpost-2/SKILL.mdSocial Media Publisher Skill
ClawPost helps you create, manage, and publish content to LinkedIn and X (Twitter) — with AI-assisted writing, drafts, scheduling, and direct publishing via API.
Getting Started
If the user doesn't have an account or API key yet, walk them through these steps:
- Sign up at clawpost.dev — sign in with LinkedIn.
- Connect platforms — In the Dashboard, connect LinkedIn and/or X (Twitter) accounts.
- Add credits — Go to Dashboard → Billing and top up credits (minimum $5). Credits are used for AI generation features.
- Generate an API key — Go to Dashboard → Settings → API Keys → Generate New Key. The key starts with
.claw_ - Set the environment variable:
export CLAW_API_KEY="claw_your_key_here"
Setup
Required environment variable:
— your API key (starts withCLAW_API_KEY
). Generate one following the steps above.claw_
Optional:
— defaults toCLAW_API_URL
. Only set this if using a self-hosted instance.https://clawpost.dev
All endpoints are under
{{CLAW_API_URL}}/api/claw/v1/ (default: https://clawpost.dev/api/claw/v1/).
Authentication
Every request needs the header:
Authorization: Bearer {{CLAW_API_KEY}}
Important: Passing JSON in shell commands
When sending JSON data with curl, always use a heredoc to avoid shell escaping issues with quotes and special characters:
curl -s -X POST URL \ -H "Authorization: Bearer {{CLAW_API_KEY}}" \ -H "Content-Type: application/json" \ -d @- <<'EOF' {"key": "value"} EOF
All examples below use this pattern. Do not use
-d '{...}' with single quotes — it breaks when content contains quotes, newlines, or special characters.
Response Format
All responses follow this shape:
{ "success": true, "message": "Human-readable summary", "data": { ... }, "error": { "code": "ERROR_CODE", "details": "..." } }
Always read the
message field — it's designed to be relayed directly to the user.
Endpoints
Check Status
Verify your API key works and see what's connected.
curl -s {{CLAW_API_URL}}/api/claw/v1/status \ -H "Authorization: Bearer {{CLAW_API_KEY}}"
List Connected Platforms
curl -s {{CLAW_API_URL}}/api/claw/v1/platforms \ -H "Authorization: Bearer {{CLAW_API_KEY}}"
Check Credits
curl -s {{CLAW_API_URL}}/api/claw/v1/credits \ -H "Authorization: Bearer {{CLAW_API_KEY}}"
List Posts
Filter by status (
draft, published, scheduled, failed) and platform (linkedin, twitter).
curl -s "{{CLAW_API_URL}}/api/claw/v1/posts?status=draft&platform=linkedin&limit=10" \ -H "Authorization: Bearer {{CLAW_API_KEY}}"
X Post History
Retrieve your X (Twitter) post history from the cached profile data. This is a read-only endpoint - no credits are used.
Query parameters:
-type
,posts
, orreplies
(default:all
)all
- max results, 1-100 (default:limit
)20
-period
,7d
,30d
, or90d
(default:all
)all
curl -s "{{CLAW_API_URL}}/api/claw/v1/history/x?type=posts&period=30d&limit=10" \ -H "Authorization: Bearer {{CLAW_API_KEY}}"
The response includes a
summary object with aggregated metrics (totalPosts, totalReplies, totalLikes, totalRetweets, totalRepliesReceived, totalImpressions, topPost) and a posts array with individual tweet details, metrics, media, and reply context.
Get Single Post
curl -s {{CLAW_API_URL}}/api/claw/v1/posts/POST_ID \ -H "Authorization: Bearer {{CLAW_API_KEY}}"
Each post includes an
availableActions array (e.g., ["publish", "schedule", "update", "delete"]).
Post Object Fields
Every post includes a
postType field:
— a regular post composed by the user"original"
— a quote tweet of another post (X only)"quote"
— a reply to another post (X only)"reply"
— an original tweet inspired by another post (X only)"remix"
When
postType is "quote", "reply", or "remix", the post also includes a reference object with the original tweet's context:
{ "postType": "quote", "content": "User's commentary text", "reference": { "tweetId": "1234567890", "text": "The original tweet text that was quoted", "author": "originalAuthor" } }
This lets you see exactly what was quoted/replied to alongside the user's own text.
Create a Draft
curl -s -X POST {{CLAW_API_URL}}/api/claw/v1/drafts \ -H "Authorization: Bearer {{CLAW_API_KEY}}" \ -H "Content-Type: application/json" \ -d @- <<'EOF' {"content": "Your post text here", "platform": "linkedin"} EOF
Platform:
"linkedin" or "twitter". Twitter content must be ≤ 280 characters.
Update a Draft
curl -s -X PUT {{CLAW_API_URL}}/api/claw/v1/posts/POST_ID \ -H "Authorization: Bearer {{CLAW_API_KEY}}" \ -H "Content-Type: application/json" \ -d @- <<'EOF' {"content": "Updated post text"} EOF
Delete a Draft
curl -s -X DELETE {{CLAW_API_URL}}/api/claw/v1/posts/POST_ID \ -H "Authorization: Bearer {{CLAW_API_KEY}}"
Publish a Draft
curl -s -X POST {{CLAW_API_URL}}/api/claw/v1/posts/POST_ID/publish \ -H "Authorization: Bearer {{CLAW_API_KEY}}"
Direct Publish (No Draft Step)
curl -s -X POST {{CLAW_API_URL}}/api/claw/v1/publish \ -H "Authorization: Bearer {{CLAW_API_KEY}}" \ -H "Content-Type: application/json" \ -d @- <<'EOF' {"content": "Publishing this directly!", "platform": "linkedin"} EOF
Schedule a Draft
curl -s -X POST {{CLAW_API_URL}}/api/claw/v1/posts/POST_ID/schedule \ -H "Authorization: Bearer {{CLAW_API_KEY}}" \ -H "Content-Type: application/json" \ -d @- <<'EOF' {"scheduledAt": "2026-06-15T10:00:00Z"} EOF
Direct Schedule (No Draft Step)
curl -s -X POST {{CLAW_API_URL}}/api/claw/v1/schedule \ -H "Authorization: Bearer {{CLAW_API_KEY}}" \ -H "Content-Type: application/json" \ -d @- <<'EOF' {"content": "Scheduled post!", "platform": "linkedin", "scheduledAt": "2026-06-15T10:00:00Z"} EOF
AI Generate Post
Let AI write a post based on your prompt. Optional:
tone and platform.
curl -s -X POST {{CLAW_API_URL}}/api/claw/v1/ai/generate \ -H "Authorization: Bearer {{CLAW_API_KEY}}" \ -H "Content-Type: application/json" \ -d @- <<'EOF' {"prompt": "Write about the importance of code reviews", "platform": "linkedin"} EOF
AI Refine Post
Improve existing content with instructions.
curl -s -X POST {{CLAW_API_URL}}/api/claw/v1/ai/refine \ -H "Authorization: Bearer {{CLAW_API_KEY}}" \ -H "Content-Type: application/json" \ -d @- <<'EOF' {"content": "Original post text...", "instructions": "Make it shorter and punchier", "platform": "linkedin"} EOF
Workflow Tips
- Quick publish: Use
to post immediately without creating a draft./publish - Review flow: Create a draft with
, refine with/drafts
, then publish with/ai/refine
./posts/ID/publish - Cross-post: Make separate calls for LinkedIn and Twitter — each is a separate post.
- Check before publishing: Call
to verify the target platform is connected./platforms - Twitter limit: Tweets must be ≤ 280 characters. The API will reject longer content with a clear message.
Error Codes
| Code | Meaning |
|---|---|
| Invalid or revoked API key |
| Post or resource doesn't exist |
| Bad input (missing content, too long, invalid date) |
| Can't perform action (e.g., already published) |
| Target social platform isn't linked |
| Not enough credits for AI operations |
| No AI API key configured |
| Too many requests (60/min general, 10/min publish) |
| Something went wrong server-side |