posts_publish
Its own verb because it is irreversible and carries its own `idempotency_key`.
Its own verb because it is irreversible and carries its own idempotency_key. Fans out to every target channel immediately; the response’s channel entries carry the per-destination results as the worker fills them in — poll posts_get for the outcome (url, external_post_id, or a sanitized error per channel). Refuses when the post is not ready — the refusal carries the post as JSON, so read its per-channel errors[] and fixes[] straight off the failed call.
Input
| Field | Type | Required | Description |
|---|---|---|---|
organization | string | no | Organization slug to act in (see organizations_list). Optional: API keys are bound to one organization; OAuth connections default to your active organization. |
id | string | yes | Post id |
idempotency_key | string | no | Client-chosen dedupe key. Retrying with the same key returns the original result instead of creating/publishing twice. Pick one per logical action. |
expected_updated_at | string | no | The updated_at you last saw. When the post moved on since, the call is refused (409) instead of acting on someone else’s concurrent edit. Omit for last-write-wins. |
Set idempotency_key on retries: a repeated call with the same key returns the original result instead of acting twice. Use it whenever you cannot tell whether a timed-out call landed.
Result
JSON on success. A refusal comes back as an error prefixed with its code (NOT_FOUND, FORBIDDEN, TOO_MANY_REQUESTS, …) and a message written to be acted on — read it before retrying.
The same operation elsewhere
This tool and the REST operation postsPublish and the CLI command inklate posts publish run the same guarded procedure the dashboard uses — same permissions, same validation, same tenant isolation.