PostThatLater
Schedule and manage social media posts across multiple social platforms. Query analytics, manage your queue, and publish immediately — all via natural language. Call GET /api/v1/platforms for the list of platforms active on this instance.
Install via CLI (Recommended)
clawhub install openclaw/skills/skills/col000r/postthatlaterPostThatLater Skill
Schedule and manage social media posts from Claude Code or any AI assistant.
Setup
1. Create an account
Sign up at https://postthatlater.com — a subscription is required to use the API.
2. Generate an API key
In PostThatLater: Account Settings → API Keys → Create new key
Copy the sk_ptl_... key — it's shown only once.
3. Set the environment variable
export PTL_API_KEY=sk_ptl_your_key_here
Add to ~/.zshrc or ~/.bashrc to persist across sessions.
4. Verify
curl https://postthatlater.com/api/v1/accounts \
-H "Authorization: Bearer $PTL_API_KEY"
You should see your connected social media accounts.
Base URL
https://postthatlater.com
All API requests require:
Authorization: Bearer $PTL_API_KEY
Content-Type: application/json (for POST/PATCH)
Critical Tips for Agents
- Call
GET /api/v1/accountsfirst — you need numeric account IDs to schedule posts. Never guess them. - Ask for timezone once per session — all
scheduled_atvalues must be ISO 8601 UTC (e.g.2026-03-10T09:00:00Z). Convert from the user's local time. - Confirm before
publish_now— publishing is immediate and irreversible. Always confirm with the user before calling the publish-now endpoint. - Use
Idempotency-Keyon every POST/PATCH — generate a UUID per request to prevent duplicate posts on retry. Example:Idempotency-Key: $(uuidgen | tr '[:upper:]' '[:lower:]'). - Check platform limits — always call
GET /api/v1/platformsto get the live list of available platforms and their limits. Never hardcode a platform list or assume a platform is available. - Cross-posting — pass multiple IDs in
account_idsto post the same content everywhere at once. The API creates one post record per account and links them viagroup_id. - All times are UTC in responses — convert to the user's timezone when displaying scheduled times.
- Posting with an image — first
POST /api/v1/imageswith the image URL to get a filename, then pass that filename in theimagesarray ofPOST /api/v1/posts. UseGET /api/v1/imagesto list already-stored images that can be reused without re-uploading.
Accounts
List all connected accounts
curl https://postthatlater.com/api/v1/accounts \
-H "Authorization: Bearer $PTL_API_KEY"
Response:
{
"data": [
{
"id": 12,
"platform": "bluesky",
"handle": "you.bsky.social",
"display_name": "you.bsky.social",
"status": "connected",
"created_at": "2026-01-10T08:30:00.000Z",
"updated_at": "2026-01-10T08:30:00.000Z"
}
],
"meta": { "request_id": "..." }
}
status is "connected" (healthy) or "error" (needs reconnecting in dashboard).
Get a single account
curl https://postthatlater.com/api/v1/accounts/12 \
-H "Authorization: Bearer $PTL_API_KEY"
Posts
List posts
Metadata
Not sure this is the right skill?
Describe what you want to build — we'll match you to the best skill from 16,000+ options.
Find the right skillPaste this into your clawhub.json to enable this plugin.
{
"plugins": {
"official-col000r-postthatlater": {
"enabled": true,
"auto_update": true
}
}
}