Skip to main content

postfast

Schedule and manage social media posts across TikTok, Instagram, Facebook, X (Twitter), YouTube, LinkedIn, Threads, Bluesky, Pinterest, Telegram, and Google Business Profile using the PostFast API. Use when the user wants to schedule social media posts, manage social media content, upload media for social posting, list connected social accounts, check scheduled posts, delete scheduled posts, cross-post content to multiple platforms, manage Google Business Profile posts, or automate their social media workflow. PostFast is a SaaS tool — no self-hosting required.

소스 정보

저장소
alextiannus/acm-skill-packs
최근 소스 활동
2026년 7월 25일 10:50
감지된 SKILL.md 언어
영어
스타
0
포크
0

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
33 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
postfast
description
Schedule and manage social media posts across TikTok, Instagram, Facebook, X (Twitter), YouTube, LinkedIn, Threads, Bluesky, Pinterest, Telegram, and Google Business Profile using the PostFast API. Use when the user wants to schedule social media posts, manage social media content, upload media for social posting, list connected social accounts, check scheduled posts, delete scheduled posts, cross-post content to multiple platforms, manage Google Business Profile posts, or automate their social media workflow. PostFast is a SaaS tool — no self-hosting required.
version
1.8.1
tier
community
category
platform-mastery
author
PostFast / ClawHub
license
MIT
homepage
https://postfa.st
metadata
{"openclaw":{"emoji":"⚡","primaryEnv":"POSTFAST_API_KEY","requires":{"env":"[Truncated]"}}}
min_plugin_version
0.6.0
# PostFast Schedule social media posts across 11 platforms from one API. SaaS — no self-hosting needed. ## Setup 1. Sign up at https://app.postfa.st/register (7-day free trial, no credit card) 2. Go to Workspace Settings → generate an API key 3. Set the environment variable: ```bash export POSTFAST_API_KEY="your-api-key" ``` Base URL: `https://api.postfa.st` Auth header: `pf-api-key: $POSTFAST_API_KEY` **Important:** The header name is `pf-api-key` (not `Authorization: Bearer` or `x-api-key`). Regenerating your key in settings permanently invalidates the previous one. See [Troubleshooting](#troubleshooting) if you get 403 errors. ## Core Workflow ### 1. List connected accounts ```bash curl -s -H "pf-api-key: $POSTFAST_API_KEY" https://api.postfa.st/social-media/my-social-accounts ``` Returns array of `{ id, platform, platformUsername, displayName }`. Save the `id` — it's the `socialMediaId` required for every post. Platform values: `TIKTOK`, `INSTAGRAM`, `FACEBOOK`, `X`, `YOUTUBE`, `LINKEDIN`, `THREADS`, `BLUESKY`, `PINTEREST`, `TELEGRAM`, `GOOGLE_BUSINESS_PROFILE` ### 2. Schedule a text post (no media) ```bash curl -X POST https://api.postfa.st/social-posts \ -H "pf-api-key: $POSTFAST_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "posts": [{ "content": "Your post text here", "mediaItems": [], "scheduledAt": "2026-06-15T10:00:00.000Z", "socialMediaId": "ACCOUNT_ID_HERE" }], "controls": {} }' ``` Returns `{ "postIds": ["uuid-1"] }`. ### 3. Schedule a post with media (3-step flow) **Step A** — Get signed upload URLs: ```bash curl -X POST https://api.postfa.st/file/get-signed-upload-urls \ -H "pf-api-key: $POSTFAST_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "contentType": "image/png", "count": 1 }' ``` Returns `[{ "key": "image/uuid.png", "signedUrl": "https://..." }]`. **Step B** — Upload file to S3: ```bash curl -X PUT "SIGNED_URL_HERE" \ -H "Content-Type: image/png" \ --data-binary @/path/to/file.png ``` **Step C** — Create post with media key: ```bash curl -X POST https://api.postfa.st/social-posts \ -H "pf-api-key: $POSTFAST_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "posts": [{ "content": "Post with image!", "mediaItems": [{ "key": "image/uuid.png", "type": "IMAGE", "sortOrder": 0 }], "scheduledAt": "2026-06-15T10:00:00.000Z", "socialMediaId": "ACCOUNT_ID_HERE" }], "controls": {} }' ``` For video: use `contentType: "video/mp4"`, `type: "VIDEO"`, key prefix `video/`. ### 4. List scheduled posts ```bash curl -s -H "pf-api-key: $POSTFAST_API_KEY" "https://api.postfa.st/social-posts?page=0&limit=20" ``` Returns `{ "data": [...], "totalCount": 25, "pageInfo": { "page": 1, "hasNextPage": true, "perPage": 20 } }`. **Query parameters:** - `page` (int, default 0) — 0-based page index. Response shows 1-based display page in `pageInfo.page` - `limit` (int, default 20, max 50) — items per page - `platforms` (string) — comma-separated filter: `FACEBOOK,INSTAGRAM,X` - `statuses` (string) — comma-separated: `DRAFT`, `SCHEDULED`, `PUBLISHED`, `FAILED` - `from` / `to` (ISO 8601 UTC) — date range filter on `scheduledAt` Example: `GET /social-posts?page=0&limit=50&platforms=X,LINKEDIN&statuses=SCHEDULED&from=2026-06-01T00:00:00Z&to=2026-06-30T23:59:59Z` ### 5. Delete a scheduled post ```bash curl -X DELETE -H "pf-api-key: $POSTFAST_API_KEY" https://api.postfa.st/social-posts/POST_ID ``` ### 6. Cross-post to multiple platforms Include multiple entries in the `posts` array, each with a different `socialMediaId`. They share the same `controls` and `mediaItems` keys. ### 7. Generate a connect link (for clients) Let clients connect their social accounts to your workspace without creating a PostFast account: ```bash curl -X POST https://api.postfa.st/social-media/connect-link \ -H "pf-api-key: $POSTFAST_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "expiryDays": 7, "sendEmail": true, "email": "client@example.com" }' ``` Returns `{ "connectUrl": "https://app.postfa.st/connect?token=..." }`. Share the URL — they can connect accounts directly. Rate limit: 50/hour. ### 8. Create a draft post Omit `scheduledAt` and set `status: "DRAFT"` to save without scheduling: ```bash curl -X POST https://api.postfa.st/social-posts \ -H "pf-api-key: $POSTFAST_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "posts": [{ "content": "Draft idea...", "mediaItems": [], "socialMediaId": "ACCOUNT_ID" }], "status": "DRAFT", "controls": {} }' ``` ### 9. Get post analytics Fetch published posts with their performance metrics: ```bash curl -s -H "pf-api-key: $POSTFAST_API_KEY" \ "https://api.postfa.st/social-posts/analytics?startDate=2026-03-01T00:00:00.000Z&endDate=2026-03-31T23:59:59.999Z&platforms=TIKTOK,INSTAGRAM" ``` **Query parameters:** - `startDate` (ISO 8601, required) — start of date range - `endDate` (ISO 8601, required) — end of date range - `platforms` (string, optional) — comma-separated filter - `socialMediaIds` (string, optional) — comma-separated account UUIDs Returns `{ "data": [{ id, content, socialMediaId, platformPostId, publishedAt, latestMetric }] }`. `latestMetric` fields: `impressions`, `reach`, `likes`, `comments`, `shares`, `totalInteractions`, `fetchedAt`, `extras`. All numbers are strings (bigint). `latestMetric` is null if metrics haven't been fetched yet. **Supported platforms for analytics:** Facebook, Instagram, Threads, LinkedIn, TikTok, YouTube, Pinterest. LinkedIn personal accounts are excluded. YouTube returns views, likes, comments, and total interactions (no reach or shares). **Pinterest specifics** (requires a Pinterest business account): Canonical fields: - `impressions`, `likes` (reactions: heart/applaud/idea/etc.), `comments` — **lifetime** totals from Pinterest's pin endpoint. - `shares` — **90-day rolling save count**. This is the only canonical field that isn't lifetime; Pinterest's v5 API does not expose lifetime save totals. - `totalInteractions` — sum of pin clicks + outbound clicks + saves + reactions + comments. Mostly lifetime, but the saves portion is 90-day, so treat it as a "best available" interaction total rather than strictly lifetime. - `reach` — always null (Pinterest doesn't return it). `extras` (lifetime): - `pin_clicks` — opens of the pin's close-up view - `outbound_clicks` — clicks to the destination URL - `engagement`, `engagement_rate`, `pin_click_rate`, `outbound_click_rate` — Pinterest's lifetime analytics fields, passed through when present `extras` (90-day rolling): - `impressions_90d`, `pin_clicks_90d`, `outbound_clicks_90d` — same metrics as their lifetime counterparts but for the last 90 days - `save_rate` — saves ÷ impressions over the 90-day window `extras` for video pins (when present): - `video_mrc_views`, `video_avg_watch_time`, `video_v50_watch_time`, `video_10s_views`, `video_start`, `quartile_95_percent_view` Refresh cadence: every 6 hours for pins under 14 days old, once a day for pins 14–60 days old. You can also trigger a manual refresh from the dashboard. Rate limit: 350/hour. ## Common Patterns ### Pattern 1: Cross-platform campaign Post the same content to LinkedIn, X, and Threads at the same time: ```bash curl -X POST https://api.postfa.st/social-posts \ -H "pf-api-key: $POSTFAST_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "posts": [ { "content": "Big announcement!", "mediaItems": [], "scheduledAt": "2026-06-15T09:00:00.000Z", "socialMediaId": "LINKEDIN_ID" }, { "content": "Big announcement!", "mediaItems": [], "scheduledAt": "2026-06-15T09:00:00.000Z", "socialMediaId": "X_ID" }, { "content": "Big announcement!", "mediaItems": [], "scheduledAt": "2026-06-15T09:00:00.000Z", "socialMediaId": "THREADS_ID" } ], "controls": {} }' ``` See [examples/cross-platform-post.json](examples/cross-platform-post.json) for a complete example. ### Pattern 2: Instagram Reel with upload 1. Get signed URL with `contentType: "video/mp4"` 2. PUT video to signed URL 3. Create post with `instagramPublishType: "REEL"` Optional: add a custom cover image by uploading a JPEG (max 8MB) via the same 3-step flow, then set `coverImageKey` in the media item. You can also set `coverTimestamp` (milliseconds) as a fallback frame. See [examples/instagram-reel.json](examples/instagram-reel.json) for the basic request, or [examples/instagram-reel-cover.json](examples/instagram-reel-cover.json) for a Reel with a custom cover image. ### Pattern 3: TikTok video with privacy settings Upload video, then post with privacy controls: ```bash # controls object: { "tiktokPrivacy": "PUBLIC", "tiktokAllowComments": true, "tiktokAllowDuet": false, "tiktokAllowStitch": false, "tiktokBrandContent": true } ``` See [examples/tiktok-video.json](examples/tiktok-video.json). ### Pattern 4: Pinterest pin (board required) Always fetch boards first, then post: ```bash # Step 1: Get boards curl -s -H "pf-api-key: $POSTFAST_API_KEY" \ https://api.postfa.st/social-media/PINTEREST_ACCOUNT_ID/pinterest-boards # Step 2: Post with board ID # controls: { "pinterestBoardId": "BOARD_ID", "pinterestLink": "https://yoursite.com" } ``` See [examples/pinterest-pin.json](examples/pinterest-pin.json). ### Pattern 5: YouTube Short with tags and playlist Upload video, then post with YouTube controls: ```bash # controls object: { "youtubeIsShort": true, "youtubeTitle": "Quick Tip: Batch Your Content", "youtubePrivacy": "PUBLIC", "youtubePlaylistId": "PLxxxxxx", "youtubeTags": ["tips", "productivity", "social media"], "youtubeMadeForKids": false } ``` See [examples/youtube-short.json](examples/youtube-short.json). ### Pattern 5b: YouTube video with custom thumbnail Upload both video and thumbnail image, then reference the thumbnail key in controls: ```bash # 1. Upload thumbnail image (separate from video upload) curl -X POST https://api.postfa.st/file/get-signed-upload-urls \ -H "pf-api-key: $POSTFAST_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "contentType": "image/jpeg", "count": 1 }' # PUT thumbnail to signed URL # 2. Upload video (same 3-step flow as always) # 3. Create post with thumbnail key in controls: { "youtubeIsShort": false, "youtubeTitle": "Full Tutorial: Social Media Strategy", "youtubePrivacy": "PUBLIC", "youtubeThumbnailKey": "image/abc123.jpg", "youtubeTags": ["tutorial", "social media"], "youtubeMadeForKids": false }
GitHub에서 보기
이 SKILL.md는 매우 커서 SkillsMP가 여기에는 첫 섹션만 미리 보여줍니다. GitHub에서 보기