# OpenPMM > Official documentation for the OpenPMM social publishing API, hosted MCP server, and first-party @openpmm/cli package - [OpenPMM API](https://www.openpmm.com/docs/index.md): Start with the OpenPMM API, learn the publishing model, and create your first Post. - [OpenPMM API quickstart](https://www.openpmm.com/docs/quickstart.md): Create an API key, find a Destination, and publish one Post safely. - [Create an account from an agent](https://www.openpmm.com/docs/guides/create-account.md): Create an OpenPMM signup link, then verify the requested email in your browser. - [Manage billing](https://www.openpmm.com/docs/guides/billing.md): Use the trial, manage the subscription, and understand Workspace and X limits. - [Accounts and workspaces](https://www.openpmm.com/docs/concepts/accounts-and-workspaces.md): Learn how Accounts, API credentials, and Workspaces control access to OpenPMM. - [Destinations](https://www.openpmm.com/docs/concepts/destinations.md): Learn how OpenPMM connects social accounts and manages publishable Destinations. - [Posts and publishing](https://www.openpmm.com/docs/concepts/posts-and-sends.md): Learn how an OpenPMM Post moves from draft to scheduled or published state. - [Connect a destination](https://www.openpmm.com/docs/guides/connect-a-destination.md): Authorize a provider account and create a Destination ID for publishing. - [Upload assets](https://www.openpmm.com/docs/guides/upload-assets.md): Upload a media file and attach it to an OpenPMM Post. - [Resolve media changes](https://www.openpmm.com/docs/guides/media-compatibility.md): Resolve media that cannot publish to one or more selected Destinations. - [Refine post copy](https://www.openpmm.com/docs/guides/refine-post-copy.md): Use the Writing Assistant in the web editor. - [Create posts](https://www.openpmm.com/docs/guides/publish-posts.md): Create an OpenPMM draft Post, publish it, and check its final status safely. - [Publish to LinkedIn with the OpenPMM API](https://www.openpmm.com/docs/guides/publish-to-linkedin.md): Publish text, images, and video to a LinkedIn Destination with the OpenPMM API, including media limits and review steps. - [Publish to Instagram with the OpenPMM API](https://www.openpmm.com/docs/guides/publish-to-instagram.md): Publish Instagram posts, Reels, and Stories with the OpenPMM API, including media choices, limits, and confirmation steps. - [Queue, schedule, and retry](https://www.openpmm.com/docs/guides/schedule-and-retry.md): Queue, schedule, move, and retry an OpenPMM Post with an explicit publication time. - [Receive webhook events](https://www.openpmm.com/docs/guides/webhooks.md): Create a webhook endpoint and verify signed Post events. - [Review post analytics](https://www.openpmm.com/docs/guides/post-analytics.md): Read current provider metrics for Posts, groups, and publication cohorts. - [Send product feedback](https://www.openpmm.com/docs/guides/send-feedback.md): Send product feedback from the dashboard, public API, or OpenPMM CLI and receive a receipt. - [Media guidelines](https://www.openpmm.com/docs/media/overview.md): Learn the video and image limits that OpenPMM applies to each supported Destination. - [Bluesky media guidelines](https://www.openpmm.com/docs/media/bluesky.md): See the image and video limits that OpenPMM applies to Bluesky Destinations and uploads. - [X media guidelines](https://www.openpmm.com/docs/media/x.md): See the video and image limits that OpenPMM applies to X Destinations and Posts. - [LinkedIn media guidelines](https://www.openpmm.com/docs/media/linkedin.md): See the video and image limits that OpenPMM applies to LinkedIn Destinations. - [Facebook media guidelines](https://www.openpmm.com/docs/media/facebook.md): See the video and image limits that OpenPMM applies to Facebook Destinations. - [Instagram media guidelines](https://www.openpmm.com/docs/media/instagram.md): See the video and image limits that OpenPMM applies to Instagram Destinations. - [Threads media guidelines](https://www.openpmm.com/docs/media/threads.md): See the video and image limits that OpenPMM applies to Threads Destinations. - [TikTok media guidelines](https://www.openpmm.com/docs/media/tiktok.md): See the video limits that OpenPMM applies to TikTok Destinations and uploads. - [YouTube media guidelines](https://www.openpmm.com/docs/media/youtube.md): See the video limits that OpenPMM applies to YouTube Destinations and uploads. - [Mastodon media guidelines](https://www.openpmm.com/docs/media/mastodon.md): See how OpenPMM applies the media limits reported by each Mastodon instance. - [OpenPMM MCP](https://www.openpmm.com/docs/mcp/overview.md): Connect an MCP-compatible agent to every public OpenPMM capability with browser-based OAuth. - [Connect an MCP client](https://www.openpmm.com/docs/mcp/connect.md): Add the OpenPMM remote MCP server to Codex, Claude Code, or another compatible client. - [Use OpenPMM from an agent](https://www.openpmm.com/docs/mcp/workflows.md): Use the OpenPMM MCP tools for discovery, drafts, assets, connections, and confirmed publication. - [MCP access and safety](https://www.openpmm.com/docs/mcp/access-and-safety.md): Understand OpenPMM MCP permissions, OAuth identity data, confirmation steps, and revocation. - [Troubleshoot MCP](https://www.openpmm.com/docs/mcp/troubleshooting.md): Resolve common OpenPMM MCP connection, OAuth, and authorization problems. - [OpenPMM CLI](https://www.openpmm.com/docs/cli/overview.md): Use the public OpenPMM API from a terminal, script, or coding agent to publish Posts. - [Create an account](https://www.openpmm.com/docs/cli/signup.md): Create an OpenPMM signup link and start a verified account and Workspace from the CLI. - [Authenticate the CLI](https://www.openpmm.com/docs/cli/authentication.md): Authorize the OpenPMM CLI in a browser and select a Workspace. - [Agent workflow](https://www.openpmm.com/docs/cli/agent-workflow.md): Use OpenPMM through the CLI with deterministic files, safe credentials, and bounded publication status checks. - [Draft and publish](https://www.openpmm.com/docs/cli/drafts-and-publishing.md): Create drafts, publish Posts, and inspect publishing status with the OpenPMM CLI. - [Analytics](https://www.openpmm.com/docs/cli/analytics.md): Read and refresh current Post analytics with the OpenPMM CLI. - [Manage assets and destinations](https://www.openpmm.com/docs/cli/assets-and-connections.md): Upload assets, manage Destinations, and configure Slack notifications with the OpenPMM CLI. - [Billing](https://www.openpmm.com/docs/cli/billing.md): Manage the Account subscription through public billing operations. - [Send feedback with the OpenPMM CLI](https://www.openpmm.com/docs/cli/feedback.md): Send product feedback for a Workspace with the public OpenPMM CLI and receive a feedback receipt. - [Manage webhooks](https://www.openpmm.com/docs/cli/webhooks.md): Manage webhook endpoints, signed post events, and delivery tests with the OpenPMM CLI. - [Automate with the CLI](https://www.openpmm.com/docs/cli/automation-and-safety.md): Use stable CLI output, exit codes, confirmations, and retries in automated workflows. - [API overview](https://www.openpmm.com/docs/reference/overview.md): Learn the OpenPMM API base URL, request rules, response format, and versioning. - [Authentication](https://www.openpmm.com/docs/reference/authentication.md): Authenticate API requests with an account-owned OpenPMM API credential. - [Pagination](https://www.openpmm.com/docs/reference/pagination.md): Read paginated OpenPMM list responses with cursors and request limits correctly. - [Idempotency](https://www.openpmm.com/docs/reference/idempotency.md): Retry a request safely with an idempotency key and avoid duplicate API work. - [Errors](https://www.openpmm.com/docs/reference/errors.md): Use OpenPMM error codes and request IDs to diagnose failed API requests. - [API changelog](https://www.openpmm.com/docs/reference/changelog.md): Review changes to the OpenPMM public API and CLI contract. - [Create Signup Link](https://www.openpmm.com/docs/api-reference/signup/create-signup-link.md): Create a short-lived signup link. Open the link in a browser. Then sign up with Google or an email address and password. The verified email address must match the request. - [Start CLI Authorization](https://www.openpmm.com/docs/api-reference/cli-authorization/start-cli-authorization.md): Start a short-lived CLI authorization. Open the returned browser URL, sign in, and approve a Workspace before exchanging the device secret. - [Get CLI Credential](https://www.openpmm.com/docs/api-reference/cli-authorization/get-cli-credential.md): Poll a browser authorization with its device secret. A successful exchange returns the API key once and consumes the authorization. - [Get Account](https://www.openpmm.com/docs/api-reference/account/get-account.md): Get the account that owns the API credential. - [List Account Members](https://www.openpmm.com/docs/api-reference/team/list-account-members.md): List all members in the account. - [Remove Account Member](https://www.openpmm.com/docs/api-reference/team/remove-account-member.md): Remove an account member. Send `confirmed: true` and the current member email as the confirmation value. - [List Invitations](https://www.openpmm.com/docs/api-reference/team/list-invitations.md): List pending and expired account invitations. - [Create Invitation](https://www.openpmm.com/docs/api-reference/team/create-invitation.md): Create an account invitation and send its email. - [Revoke Invitation](https://www.openpmm.com/docs/api-reference/team/revoke-invitation.md): Revoke a pending invitation. - [Resend Invitation](https://www.openpmm.com/docs/api-reference/team/resend-invitation.md): Send a new link for an existing pending invitation. - [List Workspaces](https://www.openpmm.com/docs/api-reference/account/list-workspaces.md): List the workspaces that the API credential can use. - [Get Workspace](https://www.openpmm.com/docs/api-reference/workspaces/get-workspace.md): Get a workspace and its current ETag. - [Update Workspace](https://www.openpmm.com/docs/api-reference/workspaces/update-workspace.md): Update the workspace name or IANA time zone. Send the current ETag in `If-Match`. - [Submit Feedback](https://www.openpmm.com/docs/api-reference/feedback/submit-feedback.md): Send product feedback for a workspace. OpenPMM sends replies to the email of the API credential creator. - [Create Post](https://www.openpmm.com/docs/api-reference/posts/create-post.md): Create one or more Posts. Set `when` to publish now, schedule, or save drafts. X, Bluesky, Mastodon, and Threads publish later body items as replies. Use `media_items` to attach Assets to a body item. A Bluesky body item accepts up to four images or one MP4 video. Bluesky images require alt text. A… - [List Posts](https://www.openpmm.com/docs/api-reference/posts/list-posts.md): List posts in cursor order. Each item includes destination and asset details. - [Move Queued Posts](https://www.openpmm.com/docs/api-reference/posts/move-queued-posts.md): Move one or more queued Posts to a local calendar date. OpenPMM selects a new time from each destination queue policy in the Workspace time zone. The move is atomic. - [Get Post](https://www.openpmm.com/docs/api-reference/posts/get-post.md): Get a post, its current status, its attempt count, and its publication receipts. - [Update Post](https://www.openpmm.com/docs/api-reference/posts/update-post.md): Update the content, publishing options, or assets of a draft Post. You can update content and publishing options on a scheduled Post. Cancel its schedule before you change its assets or thread structure. Send the current Post ETag in `If-Match`. - [Delete Post](https://www.openpmm.com/docs/api-reference/posts/delete-post.md): Delete a draft Post. A submitted Post cannot be deleted. Send the current Post ETag in `If-Match`. - [Publish Posts](https://www.openpmm.com/docs/api-reference/posts/publish-posts.md): Publish or schedule every draft Post in one group. The operation returns after OpenPMM accepts the state change. It does not wait for provider completion. Active provider work returns `202` and `Retry-After`. Read each Post while `terminal` and `action_required` are both false. Do not send Publish P… - [Cancel Post](https://www.openpmm.com/docs/api-reference/posts/cancel-post.md): Cancel a Post before provider delivery. A scheduled or queued Post returns to the draft state. An accepted immediate Post returns with the cancelled state. Send `confirmed: true` and the current Post ETag. - [Reschedule Post](https://www.openpmm.com/docs/api-reference/posts/reschedule-post.md): Set a new publication time for a scheduled post. Include a UTC offset in `scheduled_at`. Use `time_zone` to keep the local scheduling context. - [Retry Post](https://www.openpmm.com/docs/api-reference/posts/retry-post.md): Retry a failed Post. OpenPMM resumes items that have receipts. A Post in `needs-attention` can have a provider object without a receipt. Set `acknowledge_duplicate_risk` to true only after you verify the provider. - [List Assets](https://www.openpmm.com/docs/api-reference/assets/list-assets.md): List the assets in a workspace. Results use cursor order. - [Get Asset](https://www.openpmm.com/docs/api-reference/assets/get-asset.md): Get an asset. Set `include=download` to get a signed download URL that is valid for five minutes. - [Delete Asset](https://www.openpmm.com/docs/api-reference/assets/delete-asset.md): Delete an asset. You cannot delete an asset that a draft or post uses. - [Create Asset Upload](https://www.openpmm.com/docs/api-reference/assets/create-asset-upload.md): Create a multipart upload. Calculate one CRC64NVME checksum for each part. Send each part to its `upload_url` with all `required_headers`. Record each response ETag. Then complete the upload. - [Get Asset Upload](https://www.openpmm.com/docs/api-reference/assets/get-asset-upload.md): Get the status of an asset upload. - [Complete Asset Upload](https://www.openpmm.com/docs/api-reference/assets/complete-asset-upload.md): Complete a multipart asset upload. Send the full checksum and the ETag and checksum for each uploaded part. - [Get Analytics Report](https://www.openpmm.com/docs/api-reference/analytics/get-analytics-report.md): Get current totals for posts published in each day or week. The totals use the latest stored value for each Post. Past buckets can increase after a refresh. - [Get Post Analytics](https://www.openpmm.com/docs/api-reference/analytics/get-post-analytics.md): Get the latest stored analytics for one published Post. This operation does not call the provider. - [Refresh Post Analytics](https://www.openpmm.com/docs/api-reference/analytics/refresh-post-analytics.md): Request a provider refresh for one published Post. The request returns before provider work starts. Send an idempotency key. - [Get Group Analytics](https://www.openpmm.com/docs/api-reference/analytics/get-group-analytics.md): Get current totals and destination rows for one published Post group. - [Refresh Group Analytics](https://www.openpmm.com/docs/api-reference/analytics/refresh-group-analytics.md): Request provider refreshes for the published Posts in one group. Each Post has an independent outcome. Send an idempotency key. - [List Destinations](https://www.openpmm.com/docs/api-reference/destinations/list-destinations.md): List the connected publishing destinations in a workspace. This endpoint does not use pagination. - [Get Destination](https://www.openpmm.com/docs/api-reference/destinations/get-destination.md): Get a connected publishing destination and its ETag. - [Update Destination](https://www.openpmm.com/docs/api-reference/destinations/update-destination.md): Enable or disable a destination. You can also make it the default destination for its channel. Send the current ETag in `If-Match`. - [Refresh Destinations](https://www.openpmm.com/docs/api-reference/destinations/refresh-destinations.md): Refresh connection state and publishable targets for all destinations. A warning has a machine-readable reason. OpenPMM keeps the last known destination state when discovery is not authoritative. - [Disconnect Destination](https://www.openpmm.com/docs/api-reference/destinations/disconnect-destination.md): Disconnect the provider account for a destination and disable its publishable targets. For YouTube, this also permanently deletes the data OpenPMM retrieved from the YouTube API for this connection: the channel information, the stored performance statistics, and the upload status of each video. The… - [Start Destination Connection](https://www.openpmm.com/docs/api-reference/destinations/start-destination-connection.md): Start the provider authorization flow. Open `authorization_url` in a browser. Then use the session endpoint to check the status. The request schema lists all supported providers. - [Get Connection Status](https://www.openpmm.com/docs/api-reference/destinations/get-connection-status.md): Get the status of a provider connection. A pending session expires at `expires_at`. After Facebook authorization, select a Page when `selection_required` is true. - [Get Notification Settings](https://www.openpmm.com/docs/api-reference/slack-notifications/get-notification-settings.md): Get the Account Slack connection and this Workspace channel setting. - [Update Notification Settings](https://www.openpmm.com/docs/api-reference/slack-notifications/update-notification-settings.md): Select or clear the Slack notification channel. - [Start Slack Connection](https://www.openpmm.com/docs/api-reference/slack-notifications/start-slack-connection.md): Start an Account Slack browser consent session. Open the returned authorization URL. - [Get Slack Connection](https://www.openpmm.com/docs/api-reference/slack-notifications/get-slack-connection.md): Observe an Account Slack browser consent session. - [Disconnect Slack](https://www.openpmm.com/docs/api-reference/slack-notifications/disconnect-slack.md): Disconnect Slack from the Account and clear all Workspace channel settings. Send `confirmed: true`. - [List Slack Channels](https://www.openpmm.com/docs/api-reference/slack-notifications/list-slack-channels.md): List Slack channels available to the connected bot. - [Create Slack Test](https://www.openpmm.com/docs/api-reference/slack-notifications/create-slack-test.md): Send a real test message to the selected Slack channel. Send `confirmed: true`. - [List Webhook Endpoints](https://www.openpmm.com/docs/api-reference/webhooks/list-webhook-endpoints.md): List webhook endpoints in a workspace. The response never contains signing secrets. - [Create Webhook Endpoint](https://www.openpmm.com/docs/api-reference/webhooks/create-webhook-endpoint.md): Create a webhook endpoint. The response contains the signing secret once. Full-content delivery also requires `posts:read`. - [Get Webhook Endpoint](https://www.openpmm.com/docs/api-reference/webhooks/get-webhook-endpoint.md): Get a webhook endpoint. - [Update Webhook Endpoint](https://www.openpmm.com/docs/api-reference/webhooks/update-webhook-endpoint.md): Update a webhook endpoint. Full-content delivery also requires `posts:read`. Send the current ETag in `If-Match`. - [Delete Webhook Endpoint](https://www.openpmm.com/docs/api-reference/webhooks/delete-webhook-endpoint.md): Delete a webhook endpoint. Pending deliveries for the endpoint stop. Send the current ETag in `If-Match`. - [Rotate Webhook Secret](https://www.openpmm.com/docs/api-reference/webhooks/rotate-webhook-secret.md): Create a new signing secret. OpenPMM also signs with the previous secret for 24 hours. - [Test Webhook Endpoint](https://www.openpmm.com/docs/api-reference/webhooks/test-webhook-endpoint.md): Send one signed `webhook.test` event. The event contains no post or post content. ## OpenAPI Specs - [openapi](https://api.openpmm.com/v1/openapi.json) ## Optional - [OpenPMM](https://www.openpmm.com) - [Dashboard](https://app.openpmm.com)