Postfast Mcp

io.github.peturgeorgievv-factory由 GitHub 帳號 peturgeorgievv-factory 發布v0.15.0更新於 Nov 8, 2026

MCP server for the PostFast API — schedule and manage social media posts via AI tools

已驗證STDIO僅桌面溝通與協作商業與電商

概覽

AI 產生的概覽

PostFast MCP 讓助理在 PostFast 工作區中為 11 個平台排程、管理並分析社群貼文,並處理留言收件匣。

可以做什麼
  • 列出已連結帳號、貼文,以及 Pinterest 看板、YouTube 播放清單、GBP 地點、TikTok 音樂等平台選項
  • 批次建立、排程或存成草稿的貼文,上傳媒體或取得簽章上傳網址,並從 PostFast 刪除貼文
  • 取得貼文成效數據與每日粉絲歷史,並搜尋地點用於地理標記
  • 處理留言收件匣:列出對話與項目、統計未讀數、公開或私密回覆、隱藏、取消隱藏或刪除留言,以及分類與指派對話
  • 產生可分享連結,讓外部客戶把社群帳號連結到工作區
適用情境
當你透過 PostFast 規劃並發布社群內容,希望助理代為起草、排程與批次發文,查看成效與粉絲數據,或整理並回覆留言時適用。
執行需求
透過 npx 以 stdio 在本機執行(需 Node.js)。需要 PostFast 工作區 API 金鑰,放在 POSTFAST_API_KEY 中,從 PostFast 後台產生;POSTFAST_API_URL 為選用。另提供託管 OAuth 端點作為替代方案。社群帳號需已連結至工作區。
安裝前請注意
API 金鑰以工作區為範圍,所有工具都會作用於整個工作區。工具會發布、排程、刪除貼文與媒體,送出公開與私密回覆,並在平台上隱藏或刪除留言;刪除留言無法復原。在 PostFast 刪除貼文不會移除平台上已發布的貼文。上傳的檔案與貼文內容會傳送給 PostFast,再送往各社群平台。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Postfast Mcp,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

PostFast MCP Server

MCP server for the PostFast API — schedule and manage social media posts via AI tools like Claude, Cursor, VS Code, and more.

Hosted connector (no install)

Prefer not to run anything locally? Connect to the hosted endpoint and authenticate with OAuth — no npx, no API key to manage:

https://mcp.postfa.st/mcp

Add it as a remote/streamable-HTTP MCP server in any client that supports OAuth (e.g. ChatGPT, Claude). You'll be prompted to sign in to PostFast and authorize access on first use.

Want to run the server yourself instead? Use the npx + API-key setup in Quick Start below.

Quick Start

1. Get your API key

Log in to PostFast, go to API in the sidebar, and generate a key.

2. Install

Choose your preferred method:

Claude Desktop (recommended)

Download the extension from the Claude Desktop extension directory or install manually:

  1. Add to claude_desktop_config.json:
json
{  "mcpServers": {    "postfast": {      "command": "npx",      "args": ["-y", "postfast-mcp"],      "env": {        "POSTFAST_API_KEY": "your-api-key-here"      }    }  }}
  1. Restart Claude Desktop.
Claude Code

Via plugin:

If you already added PostFast by hand, remove that entry before installing the plugin, or Claude Code shows two sets of PostFast tools.

shell
/plugin marketplace add peturgeorgievv-factory/postfast-mcp/plugin install postfast@postfast-mcp

After installing, set your API key — pick one of these:

bash
# Option A: Add to your shell profile (~/.zshrc or ~/.bashrc)export POSTFAST_API_KEY="your-api-key-here"
# Option B: Add to ~/.claude/settings.json# { "env": { "POSTFAST_API_KEY": "your-api-key-here" } }

Then restart Claude Code.

Via manual config:

Add to your project's .mcp.json:

json
{  "mcpServers": {    "postfast": {      "type": "stdio",      "command": "npx",      "args": ["-y", "postfast-mcp"],      "env": {        "POSTFAST_API_KEY": "your-api-key-here"      }    }  }}

Or add it for every project:

bash
claude mcp add --scope user postfast --env POSTFAST_API_KEY=your-api-key-here -- npx -y postfast-mcp
Cursor

This repository is also a Cursor plugin: the PostFast MCP server together with its two skills, for scheduling posts and for the comments inbox.

To install it, open Customize in Cursor, search the marketplace for PostFast, select Install, and paste your API key when Cursor asks for it. Cursor starts the server with that key, so there is nothing else to configure. If PostFast doesn't show up in the marketplace yet, add the server by hand with the config below.

Cursor / VS Code / Windsurf / Other MCP clients

Add to your MCP config (.mcp.json, mcp.json, or the tool's settings UI):

json
{  "mcpServers": {    "postfast": {      "type": "stdio",      "command": "npx",      "args": ["-y", "postfast-mcp"],      "env": {        "POSTFAST_API_KEY": "your-api-key-here"      }    }  }}

3. Use it

Ask your AI assistant things like:

  • "List my connected social accounts"
  • "Schedule a post to Instagram for tomorrow at 9am"
  • "Show me all scheduled posts for this week"
  • "Upload this image and create a LinkedIn post with it"
  • "Create a Facebook reel with this video"
  • "Show me analytics for my Instagram posts this month"

Available Tools

ToolDescription
list_accountsList connected social media accounts (each with connectionStatus — CONNECTED/DISABLED — disabledReason, followerCount/followerCountUpdatedAt, and inboxCapable)
list_postsList posts with filters (specific IDs, accounts, platform, status, date range); each post carries its key settings in controls (Threads topic, Instagram/Facebook format, TikTok draft flag, YouTube privacy)
create_postsCreate and schedule posts (batch, up to 15)
delete_postDelete a post from PostFast by ID (does not remove an already-published post from the platform)
delete_postsDelete up to 100 posts from PostFast in one call; returns deletedIds and notFoundIds (does not remove already-published posts from the platform)
upload_mediaUpload a local file and get a media key (handles the full flow)
get_upload_urlsGet signed URLs to upload media files
list_pinterest_boardsGet Pinterest boards for an account
list_youtube_playlistsGet YouTube playlists for an account
list_gbp_locationsGet Google Business Profile locations for an account
search_placesFind a place to tag posts (the id works for both facebookPlaceId and instagramLocationId)
generate_connect_linkGenerate a link for clients to connect accounts — optionally scoped to specific platforms, with a redirectUrl the user returns to (carrying status, platform, accountId and your own externalId, plus accountIds after a Facebook or LinkedIn page step)
get_post_analyticsFetch published posts with performance metrics — Instagram, Facebook, TikTok, Threads, YouTube, LinkedIn (company pages), Pinterest (Business accounts)
get_follower_historyDaily follower-count history for an account (current count + delta over a date range) — Facebook Pages, Instagram, YouTube, Pinterest, Threads, Bluesky, Telegram, LinkedIn (company pages), TikTok
list_tiktok_soundsTrending pre-cleared Commercial Music Library tracks for a TikTok account (attach via controls.tiktokMusicSoundId)

Social Inbox (comments)

Comments on your posts — TikTok, Instagram, Facebook Pages, and Threads — in one inbox (an account's inboxCapable flag says what is live today). Comments only (no direct messages), from connect onward (no history backfill). Reply capability is always server-computed per conversation (canReply, maxReplyLength, windowState, disabledReason) — render from those fields, never platform assumptions.

ToolDescription
list_inbox_conversationsList comment conversations (filters: platforms, accounts, statuses, unread-only, assignee)
get_inbox_conversationFetch one conversation with its reply-capability fields
list_inbox_itemsList a conversation's comments and replies (with state and, on Instagram, canPrivateReply)
get_inbox_unread_countTotal unread comment count across the workspace
reply_to_inbox_itemReply publicly under a specific comment
send_inbox_private_replyInstagram only: one private reply per comment, within 7 days
set_inbox_item_stateHIDE / UNHIDE / DELETE a comment on the platform (DELETE cannot be undone)
mark_inbox_conversation_readZero a conversation's unread count
set_inbox_conversation_statusTriage: OPEN / SNOOZED / CLOSED
assign_inbox_conversationAssign a conversation to a workspace member (or unassign)

Supported Platforms

Facebook, Instagram, X (Twitter), TikTok, LinkedIn, YouTube, BlueSky, Threads, Pinterest, Telegram, Google Business Profile

Platform-Specific Controls

When creating posts, you can pass platform-specific settings via the controls parameter:

PlatformControls
X (Twitter)xRetweetUrl
InstagraminstagramPublishType (TIMELINE/STORY/REEL), instagramTrialReelStrategy (MANUAL/SS_PERFORMANCE — trial reel shown to non-followers; Reels only, no collaborators), instagramPostToGrid, instagramCollaborators, instagramLocationId/instagramLocationName (geotag from search_places), instagramIsAiGenerated (adds the "AI info" label; set at creation only)
FacebookfacebookContentType (POST/REEL/STORY), facebookAllowComments, facebookPrivacy, facebookCarouselMainLink, facebookCarouselShowEndCard, facebookReelsCollaborators, facebookTargetCountries (ISO alpha-2, max 25), facebookPlaceId/facebookPlaceName (geotag from search_places)
TikToktiktokTitle (photo posts, max 90 chars), tiktokMusicSoundId/tiktokMusicSoundName (Commercial Music Library sound from list_tiktok_sounds; photo, carousel and video posts — on video it plays at 50% volume over the original audio at 50%; exclusive with tiktokAutoAddMusic), tiktokIsDraft, tiktokAllowComments, tiktokAllowDuet, tiktokAllowStitch, tiktokBrandOrganic, tiktokBrandContent, tiktokAutoAddMusic (photo/carousel posts), tiktokIsAigc, tiktokPrivacy (deprecated — account default applies)
YouTubeyoutubeTitle, youtubePrivacy (PUBLIC/PRIVATE/UNLISTED), youtubeTags, youtubeCategoryId, youtubeIsShort, youtubeMadeForKids, youtubeContainsSyntheticMedia (altered/synthetic content disclosure; set at creation only), youtubePlaylistId, youtubeThumbnailKey, youtubeLanguage (BCP-47 code such as en-GB or pt-BR; sets the video language and the title and description language), youtubeCaptionKey (an uploaded .srt/.vtt file, added as the video's caption track in youtubeLanguage, which it requires)
PinterestpinterestBoardId (required), pinterestLink
LinkedInlinkedinAttachmentKey (an uploaded PDF, Word or PowerPoint file, max 60MB, shown in the post as pages to swipe through; not with images or video on the same post), linkedinAttachmentTitle (the document's title; "Document" if omitted)
ThreadsthreadsTopicTag (the post's topic: one topic, not a list; 1-50 chars, no . or &; takes precedence over a #hashtag in the content, which then stays plain text. Like every control it applies to every post in the call, so use separate calls for different topics)
Google Business ProfilegbpLocationId (required), gbpTopicType (STANDARD/EVENT/OFFER), gbpCallToActionType, gbpCallToActionUrl, gbpEventTitle, gbpEventStartDate, gbpEventEndDate, gbpOfferCouponCode, gbpOfferRedeemUrl, gbpOfferTerms

Media Upload

The upload_media tool handles the full flow in a single call:

  1. Detects content type from file extension
  2. Gets a signed upload URL from PostFast
  3. Uploads the file
  4. Returns a key and type ready to use in create_posts

Supported formats: JPEG, PNG, GIF, WebP, MP4, WebM, MOV, plus SRT and VTT caption files for YouTube and PDF, DOC, DOCX, PPT and PPTX documents for LinkedIn. A caption file comes back with type CAPTION: pass its key as controls.youtubeCaptionKey, never in mediaItems. A document comes back with type DOCUMENT: pass its key as controls.linkedinAttachmentKey, never in mediaItems.

You can also use get_upload_urls directly if you need more control over the upload process.

Environment Variables

VariableRequiredDescription
POSTFAST_API_KEYYesYour workspace API key
POSTFAST_API_URLNoAPI base URL (default: https://api.postfa.st)

Testing

Verify everything works with the MCP Inspector:

bash
POSTFAST_API_KEY=your-key npx @modelcontextprotocol/inspector npx postfast-mcp

API Docs

Full REST API documentation: postfa.st/docs

Development

bash
npm installnpm run buildnode dist/stdio/index.js

Tools are authored once in src/core (the catalog — schemas, descriptions, annotations, per-binding availability) and exposed to consumers as postfast-mcp/core; src/stdio binds the catalog to the public REST API. Releases: PRs add a .changeset/*.md; npm run version folds them into the bump + changelog, and pushing the vX.Y.Z tag publishes npm + MCP Registry + the MCPB release from CI (OIDC — no tokens anywhere).

Badges

[peturgeorgievv-factory/postfast-mcp MCP server]

License

MIT

來源:README.md,提交 05baa9d

工具

32

list_posts

List Posts

List social media posts with optional filters for specific IDs, accounts, platform, status, and date range. Failed or missed posts carry a lastError { message, code }; codes include MISSED_DISCONNECTED (the account was disconnected when the post was due — reconnect, then retry) and MISSED_NOT_PUBLISHED (passed its scheduled time plus a 2h grace window without publishing). Each post also carries controls { threadsTopicTag, instagramPublishType, facebookContentType, tiktokIsDraft, youtubePrivacy }, each null when unset. Only the field for the post's own platform (its account's platform in list_accounts) is meaningful: posts created through the API store every platform's defaults, so the other fields can be non-null.

輸入參數toidsfrompagelimitstatusesplatformssocialMediaIds

create_posts

Create Posts

Create and schedule social media posts (batch up to 15). Each post targets one social account (socialMediaId from list_accounts). SCHEDULED requires scheduledAt on every post; DRAFT must omit scheduledAt. Scheduling to a disconnected account (connectionStatus DISABLED in list_accounts) is rejected with HTTP 400 "socialMediaDisconnected" — pre-check connectionStatus before calling. Saving as DRAFT to a disconnected account is allowed. TikTok, Instagram, YouTube, and Pinterest require at least one media item EVEN FOR DRAFTS — attach media first (ask the user for an image/video, or generate+upload one, if none was provided). Google Business Profile accepts text-only posts, or one image and no video. A post carries at most 10 media items. Attach media via the key returned by upload_media / get_upload_urls. A Threads post can carry one topic, set with controls.threadsTopicTag; like every control it applies to every post in the call, so put Threads posts with different topics in separate calls.

輸入參數posts必填statuscontrolsapprovalStatus

delete_post

Delete Post

Delete a social media post by id. This removes the post from PostFast — its record, its schedule, and its stored media. It does NOT delete anything from the social platform: a post that has already published stays live there and must be removed on the platform itself. Deleting a SCHEDULED post that has not published yet does prevent it from publishing. The deletion cannot be undone.

輸入參數id必填

get_post_analytics

Get Post Analytics

Fetch published posts with their latest performance metrics (impressions, reach, likes, comments, shares). Only returns published posts that have a platform post ID. LinkedIn personal accounts are excluded. Supported: Instagram, Facebook, TikTok, Threads, YouTube, LinkedIn (company pages), Pinterest (Business accounts). Metric counts are returned as strings. Pinterest extras include pin_clicks, outbound_clicks, saves_90d, save_rate_90d (saves are 90-day rolling because Pinterest API does not expose lifetime totals); video pins additionally surface mrc_views, views_10s, avg_watch_time, v50_watch_time, video_starts, quartile_95_views. Video posts also include normalized watch-time on latestMetric: avgWatchTimeSeconds, totalWatchTimeSeconds, videoViews (Facebook, Instagram Reels, YouTube, Pinterest, LinkedIn company pages, TikTok). Instagram posts also include on latestMetric: saveRate (saves / reach as a percentage, rounded to 2 decimals — on IG feed posts, reels, and carousels with metrics) and reelsSkipRate (Instagram Reels only — percentage of viewers who skipped the reel in the first 3 seconds, as reported by Instagram, rounded to 2 decimals; may be absent on low-view reels or until metrics refresh). TikTok also exposes total_time_watched, average_time_watched, and full_video_watched_rate in metric.extras.

輸入參數endDate必填platformsstartDate必填socialMediaIds

list_accounts

List Accounts

List all social media accounts connected to the workspace. Each account includes connectionStatus (CONNECTED or DISABLED) and disabledReason (null unless DISABLED), plus followerCount (latest stored snapshot, a string; absent for platforms without follower data), followerCountUpdatedAt, and inboxCapable (whether the account can appear in the social inbox, i.e. comment ingestion is supported). A DISABLED account will not publish until the user reconnects it — pre-check before scheduling. For a follower trend over time, use get_follower_history.

無需輸入參數。

list_pinterest_boards

List Pinterest Boards

List Pinterest boards for a connected Pinterest account (pass its socialMediaId). Use a returned board’s boardId field as controls.pinterestBoardId in create_posts.

輸入參數socialMediaId必填

list_youtube_playlists

List YouTube Playlists

List YouTube playlists for a connected YouTube account (pass its socialMediaId). Use a returned playlist’s playlistId field as controls.youtubePlaylistId in create_posts.

輸入參數socialMediaId必填

list_gbp_locations

List Google Business Profile Locations

List Google Business Profile locations for a connected GBP account (pass its socialMediaId). Use a returned location’s locationId field as controls.gbpLocationId in create_posts.

輸入參數socialMediaId必填

get_follower_history

Get Follower History

Daily follower-count snapshots for one connected account (pass its socialMediaId from list_accounts). Returns currentFollowerCount, delta (current − first snapshot in range), trackingStartedAt (when PostFast began recording this account), and a series of { capturedAt, followerCount } points. All counts are strings (bigint); currentFollowerCount, delta, and trackingStartedAt may be absent until the account has its first snapshot. Optional from/to bound the range (ISO 8601; default last 90 days, capped at 365). Snapshots are forward-only — no data before trackingStartedAt. Coverage: Facebook Pages, Instagram, YouTube, Pinterest, Threads, Bluesky, Telegram, LinkedIn company pages, and TikTok. Not available: X, personal Facebook.

輸入參數tofromsocialMediaId必填

search_places

Search Places

Search for a place to geotag a post. Pass free text (min 2 chars, e.g. a venue name or address); returns matching places, each with an id that works as BOTH controls.facebookPlaceId (Facebook feed posts) and controls.instagramLocationId (Instagram single-media posts). Only Facebook Pages that carry location data are returned.

輸入參數query必填

get_upload_urls

Get Upload URLs

Get signed upload URLs for media, caption files and LinkedIn documents. Upload your file to the returned URL via PUT, then use the key in create_posts mediaItems; the key of a caption file (.srt or .vtt) goes in controls.youtubeCaptionKey instead, never in mediaItems; the key of a document (.pdf, .doc, .docx, .ppt or .pptx) goes in controls.linkedinAttachmentKey instead, never in mediaItems.

輸入參數countcontentType必填

upload_media

Upload Media

Upload a local file to PostFast and get back a media key for use in create_posts. Handles the full flow: detects content type, gets a signed URL, uploads the file, and returns the key and type. Images and videos come back as IMAGE or VIDEO, for mediaItems; an .srt or .vtt caption file comes back as CAPTION, and its key goes in controls.youtubeCaptionKey, never in mediaItems; a .pdf, .doc, .docx, .ppt or .pptx document comes back as DOCUMENT, and its key goes in controls.linkedinAttachmentKey, never in mediaItems.

輸入參數filePath必填

list_inbox_conversations

List Inbox Conversations

List comment conversations from the social inbox — comments on your connected accounts' posts, grouped per post, newest activity first. Covers TikTok, Instagram, Facebook Pages, and Threads; an account's inboxCapable flag (from list_accounts) tells you whether comments can flow for it today. Comments arrive within seconds of being posted and only from connect/launch onward (no history backfill). Each conversation carries a server-computed reply capability — canReply, maxReplyLength, windowState, disabledReason — plus unreadCount, status (OPEN | SNOOZED | CLOSED), and assignedToUserId. ALWAYS derive whether and how long you can reply from those fields; never assume platform rules. postPreview carries the post's caption and, when available, its public permalink — use the permalink to link the user to the post on the platform (null on Instagram for now).

輸入參數pagelimitstatusesplatformsunreadOnlysocialMediaIdsassignedToUserId

get_inbox_conversation

Get Inbox Conversation

Fetch one inbox conversation by id, including its server-computed reply capability (canReply, maxReplyLength, windowState, disabledReason) — derive reply ability from these fields, never from hardcoded platform rules. postPreview carries the post's caption and, when available, its public permalink — use the permalink to link the user to the post on the platform (null on Instagram for now). Returns null when the conversation does not exist in the workspace.

輸入參數id必填

list_inbox_items

List Inbox Items

List the items of one inbox conversation — the comments and the replies sent to them — oldest first by default (order=DESC for newest first). Items carry direction (INBOUND | OUTBOUND), state (VISIBLE | HIDDEN | DELETED), author info, and on Instagram comments canPrivateReply (eligibility for send_inbox_private_reply). Replies sent from PostFast appear exactly once — no duplicates when the platform reports them back.

輸入參數pagelimitorderconversationId必填

get_inbox_unread_count

Get Inbox Unread Count

Total unread comment count across all inbox conversations in the workspace (the sum of per-conversation unreadCount). Use mark_inbox_conversation_read after presenting a conversation to the user.

無需輸入參數。

reply_to_inbox_item

Reply to Inbox Comment

Reply publicly UNDER a specific comment — pass the comment item's id (from list_inbox_items), not the conversation id. BEFORE replying, check the conversation's canReply and maxReplyLength and stay within them; the caps are per platform (TikTok 1,200, Instagram 2,200, Facebook 8,000, Threads 500 characters) but the server-computed fields are authoritative — never assume. Failures return inbox.* codes (e.g. replyTooLong, replyNotSupported, rateLimited).

輸入參數text必填itemId必填

send_inbox_private_reply

Send Instagram Private Reply

Instagram only: send ONE private reply to a comment — it arrives as a direct message to the commenter and may land in their Message Requests folder. Allowed once per comment, within 7 days of the comment, up to 1,000 bytes (emoji and non-Latin text count multi-byte — roughly 1,000 characters, less with emoji). Check the item's canPrivateReply first (from list_inbox_items). A second attempt on the same comment fails with inbox.privateReplyAlreadySent; other failures include privateReplyWindowExpired and privateReplyNotSupported.

輸入參數text必填itemId必填

set_inbox_item_state

Moderate Inbox Comment

Moderate a comment on the platform: HIDE hides it from the public, UNHIDE restores it, DELETE removes the comment on the platform — cannot be undone. HIDE/UNHIDE work on TikTok, Instagram, Facebook, and Threads; DELETE is not supported on Threads (inbox.deleteNotSupported). State changes made on the platform itself sync back to the inbox automatically.

輸入參數action必填itemId必填

mark_inbox_conversation_read

Mark Inbox Conversation Read

Mark one conversation read (zeroes its unreadCount). Do this after presenting a conversation's comments to the user. Internal to PostFast — nothing changes on the platform.

輸入參數conversationId必填

set_inbox_conversation_status

Set Inbox Conversation Status

Triage a conversation: set its status to OPEN, SNOOZED, or CLOSED. Internal to PostFast — nothing changes on the platform.

輸入參數status必填conversationId必填

assign_inbox_conversation

Assign Inbox Conversation

Assign a conversation to a workspace member for follow-up, or omit assigneeUserId to unassign. The assignee must be a member of the workspace (inbox.assigneeNotMember otherwise). Internal to PostFast — nothing changes on the platform.

輸入參數assigneeUserIdconversationId必填

list_tiktok_sounds

List TikTok Sounds

List trending pre-cleared Commercial Music Library tracks for a connected TikTok account. Returns up to 100 trending sounds with musicSoundId, name, artist, duration, and preview/thumbnail URLs. Pass a musicSoundId to create_posts as tiktokMusicSoundId to attach that sound to a TikTok photo, carousel or video post. genre takes raw TikTok values like 'POP', 'HIP_HOP/RAP', 'R&B/SOUL', 'K-POP' (invalid values return the full valid list in the error). The list rotates daily — fetch fresh rather than reusing old ids for display. An unknown countryCode returns an empty list. If the API returns tiktokMusic.requiresBusinessApi, the TikTok account needs a one-time reconnect.

輸入參數genredateRangecountryCodesocialMediaId必填

delete_posts

Delete Posts

Delete several social media posts by id in one call (up to 100; use delete_post for a single post). This removes each post from PostFast — its record, its schedule, and its stored media. It does NOT delete anything from the social platform: a post that has already published stays live there and must be removed on the platform itself. Deleting a SCHEDULED post that has not published yet does prevent it from publishing. Returns { deletedIds, notFoundIds }; notFoundIds are the ids that don't exist in this workspace, listed once each. The deletion cannot be undone.

輸入參數ids必填

list_webhook_endpoints

List Webhook Endpoints

List the workspace's webhook endpoints: the URLs where PostFast sends a signed JSON event when a post publishes or fails for good, or when an account connects or disconnects. Oldest first, turned-off ones included. Each has id, url, events, description, active, disabledReason (GONE: its receiver answered 410 Gone; FAILING: its deliveries failed for five days and the workspace owner was emailed; null while it is active, or when a user turned it off), lastSuccessAt and lastFailureAt. The signing secret is never listed: create_webhook_endpoint returns it once. To see what was sent and how the receiver answered, use list_webhook_deliveries.

無需輸入參數。

get_webhook_endpoint

Get Webhook Endpoint

Fetch one webhook endpoint by id, with the fields list_webhook_endpoints gives (never the signing secret). An id that isn't in this workspace, or was deleted, fails with webhook.notFound.

輸入參數id必填

create_webhook_endpoint

Create Webhook Endpoint

Register a webhook endpoint: a URL where PostFast sends a signed JSON POST for every event of the chosen types, { id, type, timestamp, workspaceId, data }, where data.post is a post as list_posts returns it and data.account an account as list_accounts returns it. The endpoint gets these events from the whole workspace, for every account; a receiver that wants one account checks data.post.socialMediaId (or data.post.platform) or data.account.id. A workspace can have 5 active endpoints (turned-off ones don't count); one more fails with webhook.limitReached. The answer is the endpoint plus secret (whsec_…), shown this once: PostFast never returns it again, so give it to the user and tell them to store it in their receiver now (if it is lost, delete the endpoint and create a new one). The receiver checks every delivery with it as Standard Webhooks specifies: the webhook-id, webhook-timestamp and webhook-signature headers, verified over the raw request body; a Standard Webhooks library such as standardwebhooks does this. A delivery counts when the receiver answers 2xx within 15 seconds; redirects are not followed. Anything else is retried up to 7 more times over about a day (after 5 s, 5 min, 30 min, 2 h, 4 h, 6 h and 7 h). A 410 Gone answer turns the endpoint off at once, and five days of failures with no success turn it off and email the workspace owner. An event can arrive twice and events can arrive out of order, so the receiver should skip an id it has already handled. Offer test_webhook_endpoint to check the receiver.

輸入參數url必填events必填description

update_webhook_endpoint

Update Webhook Endpoint

Change a webhook endpoint: its url, events or description, or turn it off (active false) or back on (active true). Fields you omit keep their value; description null removes the description. A new url follows the rules of create_webhook_endpoint, keeps the same signing secret, and starts the endpoint's failure count afresh. active true turns an endpoint back on, whether PostFast turned it off (disabledReason GONE or FAILING) or a user did, and resets its failure count; it fails with webhook.limitReached when the workspace already has 5 active endpoints. Events that happen while an endpoint is off are never sent to it, not even after it is turned back on. An id that isn't in this workspace fails with webhook.notFound. Returns the updated endpoint.

輸入參數id必填urlactiveeventsdescription

delete_webhook_endpoint

Delete Webhook Endpoint

Delete a webhook endpoint by id. PostFast stops sending to it at once: deliveries still waiting are dropped, and its delivery log and signing secret are deleted with it. To pause an endpoint instead, set active false with update_webhook_endpoint. An id that isn't in this workspace fails with webhook.notFound. Returns { ok: true }. The deletion cannot be undone.

輸入參數id必填

test_webhook_endpoint

Test Webhook Endpoint

Send one signed test delivery to a webhook endpoint now and report how its receiver answered: { eventId, type, delivered, statusCode, latencyMs, error }. It waits up to 15 seconds for the receiver, and the call succeeds even when the receiver failed, so read delivered, statusCode and error (null when delivered; otherwise timeout, connection, tls, redirect, http_4xx, http_5xx, gone, blocked_address, payload_too_large, or internal, which is PostFast's own failure). Without sampleEvent it sends a webhook.test event, whose data is { webhook: { id, url }, message }. With sampleEvent it sends a fixed sample of that event type, built exactly like a real one so the receiver can be set up before any real event happens: ids of zeros, platform X, the post text "Sample post from PostFast" or the account @sample, and no real post or account data. A test counts like any delivery: it shows in list_webhook_deliveries, a failure adds to the endpoint's failure count, and a 410 Gone answer turns the endpoint off. webhook.disabled means PostFast has webhooks switched off for now, not that this endpoint is off.

輸入參數id必填sampleEvent

list_webhook_deliveries

List Webhook Deliveries

List a webhook endpoint's delivery log, newest first: every delivery to it from the last 30 days, with how the receiver answered. Use it to find out why an event did or didn't arrive. Each row has eventId (evt_…, the webhook-id header the receiver got), eventType, resourceId (the post id for post events, the account id for account events, the endpoint id for webhook.test, null for a sample), status, attempts (each with n, at, statusCode, latencyMs and error), lastStatusCode, lastErrorCode, nextAttemptAt, completedAt and payload (the body exactly as sent). status is SUCCEEDED, FAILED (every attempt failed, the receiver answered 410 Gone, or the event was too large to send), PENDING (still being delivered: a nextAttemptAt in the future means a retry is scheduled, up to 8 attempts over about a day) or SKIPPED (dropped before any attempt because the endpoint was off). Error codes: timeout, connection, tls, redirect (redirects are not followed), http_4xx, http_5xx, gone (410), blocked_address (PostFast refused to connect because the hostname resolved to a private address), exhausted, payload_too_large (the event was too large to send) and internal (PostFast's own failure, not the receiver's). Only the receiver's status code is kept, never its response body. totalCount and pageInfo.hasNextPage are filled only when getCount is true, so ask for it on the first page; without it, a full page may have more after it. An id that isn't in this workspace, or was deleted, gives an empty page rather than an error; get_webhook_endpoint tells whether it exists.

輸入參數pagelimitgetCountendpointId必填

版本歷史

16
  1. v0.14.0Oct 25, 2026
  2. v0.13.1Oct 12, 2026
  3. v0.13.0Oct 8, 2026
  4. v0.11.1Oct 5, 2026
  5. v0.11.0Oct 4, 2026
  6. v0.10.1Oct 4, 2026
  7. v0.10.0Oct 2, 2026
  8. v0.9.0Oct 1, 2026
  9. v0.8.3Sep 30, 2026
  10. v0.8.2Sep 27, 2026
  11. v0.8.1Sep 26, 2026
  12. v0.7.2Sep 25, 2026
  13. v0.7.1Sep 24, 2026
  14. v0.7.0Sep 24, 2026
  15. v0.6.2Sep 23, 2026
  16. v0.6.1Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分