All posts
· Postizsocial automationagent ops

Scheduled is not published

Postiz is useful because it separates drafting from distribution. The dangerous part is pretending a scheduled row is proof that a platform accepted the post.

A scheduled post is a promise. A published post is evidence.

That difference sounds tiny until an agent reports "posted" because Postiz accepted a payload, while the provider quietly rejected it five minutes later. I like Postiz as a boundary for social automation precisely because it makes the boundary visible. It gives agents a place to list integrations, read platform rules, create drafts, schedule posts, and inspect the queue. But the queue is not the public internet.

Sources: Postiz MCP tools reference, Postiz CLI introduction, Postiz public API documentation.

The useful failure mode

Postiz's MCP tool reference is explicit about the shape of the work. integrationList returns connected accounts. integrationSchema returns rules, character limits, required settings, and helper tools for a platform. schedulePostTool creates a draft, scheduled post, or immediate post and returns a postId plus the integration used.

That return value is valuable. It is also not a receipt from LinkedIn, Threads, X, or any other provider.

The honest automation pattern is boring:

  1. Pick the exact integration, not just "LinkedIn" or "Threads".
  2. Read the platform schema before writing copy.
  3. Create the post.
  4. Wait until the scheduled time has passed.
  5. Read back the post state and provider permalink.
  6. Only then say it published.

The fifth step is where most agent demos cheat. They stop at creation because creation feels like success. It prints an ID. The terminal looks happy. Everyone can go home.

Except the provider may still fail.

Platform rules belong before the draft

The integrationSchema call is one of the less glamorous parts of Postiz, and it is probably the part agents should respect most. Platform rules are not decorative. They decide whether the post is valid.

A social agent that writes one generic caption and sprays it across accounts is not being efficient. It is ignoring the product surface. X has different length and settings constraints than LinkedIn. Threads behaves differently from comment-based platforms. Postiz documents that thread-based platforms treat each item in postsAndComments as a separate post in a thread, while LinkedIn and Facebook treat later items as comments.

That changes how you write. A LinkedIn post can carry more context. Threads needs the thought to survive in smaller pieces. X may need a stricter version than the platform's public character limit if the active integration schema says so.

I do not want an agent to "know" those rules from memory. I want it to ask the scheduler.

Exact integrations prevent embarrassing bugs

Postiz also forces a useful bit of humility: an account is not a platform. It is an integration with an ID.

That matters once you have personal accounts, brand accounts, test accounts, and client accounts connected to the same scheduler. "Post this to Threads" is not enough. Which Threads account? Which group? Which profile? The MCP reference returns the integration ID, display name, profile picture, platform, and group data because routing by platform alone is how you publish the right thought to the wrong audience.

This is not a theoretical risk. It is the kind of dull operational mistake that makes automation feel unsafe even when the writing was fine.

The fix is not complicated. Pin the integration ID in the job. Put the account name in the report. Verify the resulting provider URL. If the ID is missing or ambiguous, do not publish.

The report should be a read-back, not a victory lap

A good social automation report should look more like an audit log than a marketing dashboard.

For each post, I want the target integration, scheduled time, local post ID, final state, provider URL, and any error. If the state is still queued, say queued. If the provider returned an error, say error. If the post is live but no permalink is available yet, say that too.

This is the same habit I want in every agent workflow: create is not verify. A database row is not a deployment. A branch is not production. A scheduled post is not a public post.

Postiz does not remove the need for judgment. It gives the agent a cleaner place to prove what happened.

Get in Touch

Want to discuss this further?

Always happy to chat about design, AI, or product craft.