Token导航 LogoToken导航TokenDH.com
开发敏感数据clawhub未标认证来源可访问clear审计通过

postthatlaterpostthatlater 分析

Agent Skill

postthatlater 用于补充开发相关能力,适合在 OpenClaw 中需要让 Agent 承接开发相关任务时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

7,550

周安装

321

GitHub Stars

公开资料未说明

下载量

2,645
OpenClaw

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

MIT-0

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:postthatlater(postthatlater 分析)
来源仓库:https://github.com/col000r/postthatlater
安装命令:
openclaw skills install postthatlater
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install postthatlater

简介

用于跨多个社交平台安排和管理社交媒体帖子。

  • 支持通过自然语言查询分析、管理队列并立即发布内容。
  • 可通过安装命令集成到 OpenClaw,建议确认权限与维护状态。
  • 使用前需核实是否会触发联网、命令执行或文件读写操作。
  • 适合需要自动化社交媒体管理的开发场景。postthatlater 属于开发类 Skill,可作为该场景下的辅助能力补充。

SKILL.md

name
PostThatLater
description
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.
homepage
https://postthatlater.com
emoji
📅
requires
env
primaryEnv
PTL_API_KEY

PostThatLater 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

  1. Call GET /api/v1/accounts first — you need numeric account IDs to schedule posts. Never guess them.
  2. Ask for timezone once per session — all scheduled_at values must be ISO 8601 UTC (e.g. 2026-03-10T09:00:00Z). Convert from the user's local time.
  3. Confirm before publish_now — publishing is immediate and irreversible. Always confirm with the user before calling the publish-now endpoint.
  4. Use Idempotency-Key on every POST/PATCH — generate a UUID per request to prevent duplicate posts on retry. Example: Idempotency-Key: $(uuidgen | tr '[:upper:]' '[:lower:]').
  5. Check platform limits — always call GET /api/v1/platforms to get the live list of available platforms and their limits. Never hardcode a platform list or assume a platform is available.
  6. Cross-posting — pass multiple IDs in account_ids to post the same content everywhere at once. The API creates one post record per account and links them via group_id.
  7. All times are UTC in responses — convert to the user's timezone when displaying scheduled times.
  8. Posting with an image — first POST /api/v1/images with the image URL to get a filename, then pass that filename in the images array of POST /api/v1/posts. Use GET /api/v1/images to 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

curl "https://postthatlater.com/api/v1/posts?status=pending&limit=10&offset=0" \
  -H "Authorization: Bearer $PTL_API_KEY"

Query parameters:

  • statuspending, posted, or failed (omit for all)
  • platform — e.g. bluesky, mastodon, linkedin
  • limit — max results (default: 20, max: 100)
  • offset — skip N results for pagination (default: 0)

Response:

{
  "data": [
    {
      "id": 101,
      "text": "Hello from the API!",
      "scheduled_at": "2026-03-15T09:00:00.000Z",
      "status": "pending",
      "platform": "bluesky",
      "account_id": 12,
      "images": [],
      "platform_post_id": null,
      "platform_post_url": null,
      "error_message": null,
      "retry_count": 0,
      "likes": 0,
      "comments": 0,
      "shares": 0,
      "group_id": null,
      "created_at": "2026-03-01T12:00:00.000Z",
      "updated_at": null
    }
  ],
  "meta": { "request_id": "...", "total": 5, "limit": 10, "offset": 0 }
}

Create a post (schedule)

curl -X POST https://postthatlater.com/api/v1/posts \
  -H "Authorization: Bearer $PTL_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen | tr '[:upper:]' '[:lower:]')" \
  -d '{
    "text": "Hello from the PostThatLater API!",
    "scheduled_at": "2026-03-15T09:00:00.000Z",
    "account_ids": [12, 15]
  }'

Body parameters:

  • text *(required)* — post content; must not exceed platform char limit
  • scheduled_at *(required)* — ISO 8601 UTC datetime; must be in the future
  • account_ids *(required)* — array of account IDs (at least one)
  • images — optional array of image filenames

Returns HTTP 201 with the first created post. All posts share a group_id.

Get a single post

curl https://postthatlater.com/api/v1/posts/101 \
  -H "Authorization: Bearer $PTL_API_KEY"

Update a post

Only works on pending posts. Returns 409 conflict if already published or failed.

curl -X PATCH https://postthatlater.com/api/v1/posts/101 \
  -H "Authorization: Bearer $PTL_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen | tr '[:upper:]' '[:lower:]')" \
  -d '{
    "text": "Updated content for the post",
    "scheduled_at": "2026-03-16T10:00:00.000Z"
  }'

Delete a post

Cannot delete posted posts (returns 409). Failed posts can be deleted.

curl -X DELETE https://postthatlater.com/api/v1/posts/101 \
  -H "Authorization: Bearer $PTL_API_KEY"

Response:

{ "data": { "deleted": true, "id": 101 }, "meta": { "request_id": "..." } }

Publish immediately

Bypasses the scheduler. Post must be pending or failed. Irreversible — confirm with user first.

curl -X POST https://postthatlater.com/api/v1/posts/101/publish-now \
  -H "Authorization: Bearer $PTL_API_KEY"

Response:

{
  "data": {
    "id": 101,
    "status": "posted",
    "platform_post_url": "https://bsky.app/profile/you.bsky.social/post/...",
    ...
  },
  "meta": { "request_id": "..." }
}

Images

Post with images by first ingesting the image from a URL, then passing the returned filename when creating a post.

Ingest an image from a URL

Downloads, processes (EXIF rotation, compression, format conversion), and stores the image server-side. Returns a filename to use in posts.

curl -X POST https://postthatlater.com/api/v1/images \
  -H "Authorization: Bearer $PTL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/photo.jpg"}'

Response:

{
  "data": { "filename": "1741036800000-123456789.jpeg" },
  "meta": { "request_id": "..." }
}

Pass the filename in the images array of POST /api/v1/posts. Check GET /api/v1/platforms for the max_images limit per platform.

List stored images

Returns all images referenced by your posts with file metadata and which post IDs use each image. Use this to reuse an already-uploaded image without re-ingesting.

curl https://postthatlater.com/api/v1/images \
  -H "Authorization: Bearer $PTL_API_KEY"

Response:

{
  "data": [
    {
      "filename": "1741036800000-123456789.jpeg",
      "url": "/uploads/1741036800000-123456789.jpeg",
      "size": 284672,
      "created_at": "2026-03-01T09:00:00.000Z",
      "referenced_by_post_ids": [101, 104]
    }
  ],
  "meta": { "request_id": "...", "total": 1 }
}

Analytics

Overall posting health summary

curl "https://postthatlater.com/api/v1/analytics/summary?period=30d" \
  -H "Authorization: Bearer $PTL_API_KEY"

Query parameters: period7d, 30d, 90d, or all (default: 30d)

Response:

{
  "data": {
    "period": "30d",
    "total_posts": 45,
    "by_status": {
      "posted": 40,
      "pending": 3,
      "failed": 2
    },
    "success_rate": 95.2,
    "total_likes": 312,
    "total_comments": 48,
    "total_shares": 91,
    "total_engagement": 451
  },
  "meta": { "request_id": "..." }
}

Top posts by engagement

curl "https://postthatlater.com/api/v1/analytics/top-posts?period=30d&limit=5" \
  -H "Authorization: Bearer $PTL_API_KEY"

Query parameters:

  • period7d, 30d, or all (default: 30d)
  • limit — number of posts (default: 5, max: 20)

Per-post metrics

curl https://postthatlater.com/api/v1/posts/101/metrics \
  -H "Authorization: Bearer $PTL_API_KEY"

Response:

{
  "data": {
    "post_id": 101,
    "platform": "bluesky",
    "likes": 42,
    "comments": 8,
    "shares": 15,
    "engagement": 65,
    "published_at": "2026-03-01T09:00:00.000Z"
  },
  "meta": { "request_id": "..." }
}

Breakdown by platform

curl "https://postthatlater.com/api/v1/analytics/by-platform?period=30d" \
  -H "Authorization: Bearer $PTL_API_KEY"

Timeline (daily post counts)

curl "https://postthatlater.com/api/v1/analytics/timeline?period=7d" \
  -H "Authorization: Bearer $PTL_API_KEY"

Platform Capabilities

Public endpoint — no authentication required.

Returns character limits and capabilities for all currently available platforms. New platforms may be added over time, so always fetch this list rather than hardcoding platform names or limits.

curl https://postthatlater.com/api/v1/platforms

Response fields per platform:

  • name — slug used in API calls (e.g. bluesky)
  • display_name — human-readable name
  • char_limit — maximum post length in characters
  • max_images — maximum images per post
  • supports_video — whether video uploads are accepted
  • notes — platform-specific connection or usage notes

---

## Error Handling

All errors follow:

{ "error": { "code": "validation_error", "message": "Validation failed.", "details": [ { "field": "text", "message": "Text exceeds Bluesky character limit (300 chars)." }, { "field": "scheduled_at", "message": "scheduled_at must be a future datetime." } ] } }


| Code | HTTP | Meaning |
|------|------|---------|
| `invalid_api_key` | 401 | Missing, malformed, or revoked Bearer token |
| `subscription_required` | 402 | No active subscription |
| `not_found` | 404 | Resource doesn't exist or belongs to another user |
| `conflict` | 409 | Action not allowed in current state (e.g. editing a published post) |
| `validation_error` | 400 | Request body failed validation — check `details` array for field-level errors |
| `rate_limited` | 429 | 60 req/min per key — check `Retry-After` header |
| `internal_error` | 500 | Unexpected server error |

---

## Example Session

User: Schedule a post about our summer sale on Bluesky and Mastodon for tomorrow at 10am EST

Agent workflow:

  1. GET /api/v1/accounts → find Bluesky (id: 12) and Mastodon (id: 15)
  2. GET /api/v1/platforms → confirm char limits (300 / 500)
  3. Convert 10am EST → 15:00 UTC (March 5 → 2026-03-05T15:00:00Z)
  4. Confirm with user: "Ready to schedule 'Summer sale...' to Bluesky + Mastodon for Mar 5 at 10am EST?"
  5. POST /api/v1/posts with account_ids: [12, 15] and Idempotency-Key header
  6. Report back: "Scheduled! Post #101 and #102 will go out March 5 at 10am EST."

适合场景

01

OpenClaw 用户查找和安装 Skill 时

02

用户想查找某类 Agent Skill 时

03

需要根据任务场景推荐可安装能力包时

04

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

补充不同宿主或平台的使用分布数据

能力 5

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

OpenClaw

93.84%
按下载量换算2,482

安全审计

VirusTotal

通过

ClawScan

通过

Static analysis

通过

权限和风险

敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills