Social Media Publisher
Follow shared release-shell rules in:
postplus-sharedrelease-shell rules
Use this skill when the user wants to operate social publishing through the PostPlus-managed Postiz workspace.
This skill is for:
- guiding users through the invite-link channel onboarding flow
- listing integrations available on the PostPlus Postiz workspace
- preparing a local publish request draft
- creating a Postiz draft or schedule only after explicit approval
- promoting an existing Postiz draft into the queue only after a second approval
Ownership model
PostPlus holds one platform-owned Postiz org and API key. End users do not need their own Postiz accounts.
Channel onboarding uses the Postiz invite-link mechanism:
- the product calls
GET /public/v1/social/{integration}with the PostPlus Postiz API key - Postiz returns a social-platform OAuth URL (e.g. Instagram, TikTok) and stores a state → PostPlus org mapping in Redis for 1 hour
- the product delivers that URL to the end user (via UI or CLI)
- the user clicks the link and authorizes their social account on the platform's own OAuth consent screen — no Postiz registration required
- the resulting channel token lands in the PostPlus Postiz org
- the product labels the channel with the user's PostPlus account id via
PUT /integrations/:id/customer-name
Safe default
create_post.mjs defaults to preview mode.
Without --execute, it:
- validates the local request
- enforces the integration allowlist
- writes a local preview envelope
- emits an
approvalRequest - does not call Postiz
Actual remote mutation requires:
--execute--approval-file <approved.json>- a channel that has been onboarded via the invite-link flow above
Use change_post_status.mjs to move a real Postiz draft from draft to schedule after a second explicit approval.
Authentication
Read references/api-contract.md.
Release workflow rules:
- PostPlus backend holds the Postiz API key server-side; scripts never receive it directly
- all Postiz API calls are proxied through the hosted capability bridge
- do not ask users for Postiz credentials of any kind
Default workflow
- User requests channel onboarding via the product UI or CLI.
- Product generates an invite link for the target platform.
- User authorizes their social account via the platform OAuth screen.
- Product labels the new channel integration with the user's account id.
- List integrations to confirm the exact integration id for the user's channel.
- Build the local request JSON.
- Run
create_post.mjswithout--executeto produce an approval artifact. - After approval, re-run
create_post.mjs --execute --approval-file.... - If the post should stay reviewable, keep it in
draft. - Only after a second approval, run
change_post_status.mjs --status scheduleto queue it for publishing.
Main scripts
scripts/list_integrations.mjsscripts/integration_settings.mjsscripts/trigger_tool.mjsscripts/upload_media_from_url.mjsscripts/upload_file.mjsscripts/create_post.mjsscripts/change_post_status.mjsscripts/list_posts.mjsscripts/delete_post.mjsscripts/delete_post_group.mjsscripts/get_missing_content.mjsscripts/update_release_id.mjsscripts/platform_analytics.mjsscripts/post_analytics.mjsscripts/list_notifications.mjsscripts/render_publish_report.mjs
Command examples
Prepare a publish request preview:
node skills/50-publishing/social-media-publisher/scripts/create_post.mjs \
--request "<request.json>" \
--customer-config "<postiz.config.json>" \
--output "<create-post.preview.json>"Execute the approved create:
node skills/50-publishing/social-media-publisher/scripts/create_post.mjs \
--request "<request.json>" \
--customer-config "<postiz.config.json>" \
--output "<create-post.result.json>" \
--execute \
--approval-file "<approval.json>"Promote a draft into the publish queue:
node skills/50-publishing/social-media-publisher/scripts/change_post_status.mjs \
--post-id "<post-id>" \
--status schedule \
--output "<status.result.json>" \
--execute \
--approval-file "<approval.json>"