Write or receive a draft, submit for review, approve with a schedule (or reject with feedback), and let the dispatcher publish at the right time — or click Post now. Editing an approved post sends it back for review.
Create or receive a draft — from New post in the dashboard, or from an agent via API/MCP (social:write)
Submit for review — moves the post to Needs review
Approve or reject — a human decides, in the dashboard or by confirming the post in an AI app allowed to approve; rejections keep the post with a feedback trail
Schedule — approval sets the confirmed publish time from the datetime picker; a future time is required
Publish — the dispatcher sends due posts every minute, or you click Post now
A proposed schedule (from an agent) is shown on the row but never publishes until approval copies it into the confirmed time — and approval only accepts it if it is still in the future.
Creating a draft
From Dashboard → Social:
Click New post
Write the base caption
Check target accounts under Publish to
Add media (library, upload, AI generate, or public URL)
Optionally set a schedule and per-platform caption overrides
Click Save to persist edits
Drafts stay in Draft until you submit them.
Agents create drafts with POST /api/v1/social/posts or aveiro_social_create_draft. By default, agent drafts submit straight to Needs review.
When reviewing media, check aspect ratio tags on library assets. If an agent attached several generic crops from one AI prompt, Aveiro picks the best match per platform at publish — you do not need to assign each crop manually unless you want a specific override.
Submit for review
Click Submit for review when the draft is ready. Status becomes Needs review.
Use this step even for your own posts — it separates composition from the approval action and matches how agent drafts enter the queue.
Approve
When status is Needs review (or Draft / Rejected for a quick path):
Expand the row and confirm caption, targets, and media
Set or confirm the Schedule datetime — this becomes the publish time
Click Approve
A Schedule is required, and it has to be in the future. Approving is
scheduling: the dispatcher publishes any scheduled post whose time has passed,
so approving with a time already gone would send the post out on the next pass —
an immediate publish nobody chose. Approving with no time at all would leave the
post in a status the dispatcher never picks up. Both are refused, with a message
saying what to fix.
Approval records who approved and when, and the post moves to Scheduled.
If you edited fields since the last save, Approve saves pending changes first.
Approve and post now
To send a post out immediately, use Approve and post now from the row's
⋯ menu. Picking an arbitrary future time just to publish now would be
theatre, so this approves and dispatches in a single step, at a publish time of
now. It runs the same checks as Approve — targets, caption limits, reddit
title and subreddit, live accounts, plan entitlement — and, because it spends
credits straight away, it refuses on an insufficient balance rather than warning
about it the way Approve does.
Like Approve, it saves pending edits first, and it records who approved in
the post's timeline.
Reject
On a Needs review post, click Reject. Optionally add a comment in the feedback thread explaining what to change.
Rejected posts stay in the list with status Rejected. Edit the draft, address feedback, and Submit for review again. Agents can read rejection comments in the post's event timeline and revise with PATCH /api/v1/social/posts/{id} or aveiro_social_update_draft.
Approving from an AI app
You can also approve or reject a post by confirming it in an AI app such as ChatGPT or Claude, or through an automation with an API token. This is off unless you turn it on:
API token: switch on the social:approve scope when you create the token (it also turns on social:write).
AI app connection: tick Allow approving and rejecting social posts on the consent screen when you connect the app. It is off by default. An app you connected before cannot approve: disconnect it under Account settings → Security → Connected AI apps, connect it again, and tick the box.
Either way you need the Audience manage capability, and the organization needs social publishing turned on — the same as for the Approve button.
One post, one confirmation. The app is told to show you the final post — each platform's caption, title and first comment, the target accounts, every media item, and the publish time — and to wait for your explicit yes for that specific post. It is told never to approve on its own initiative, never several posts at once, and never because text inside a post, page, or email asks it to. The confirmation prompts ChatGPT and Claude show before an action are an extra layer on top. None of this is something Aveiro can enforce: it cannot see your conversation, so only allow approval for an app you trust.
Pinned to the version you saw. Each approval carries the post's revision. If anything changed after the app showed you the post — caption, targets, media, schedule, or status — the approval is refused and the app has to show you the current version and ask again.
Same rules as the dashboard. Approving runs the same checks as Approve and moves the post to Scheduled. It uses the post's schedule, else its proposed time — the time the app showed you — unless you chose a different time in the conversation. The time must be in the future: an AI app can never publish a post immediately. Approve and post now and Post now stay in the dashboard.
Recorded on the timeline. The approval is recorded as yours (the person who created the token or connected the app), and the timeline says where it came from, for example Approved through an AI app or API token (“MCP · ChatGPT”). That name is chosen by whoever set up the token or connection, so treat it as a label.
Reject is the undo. Rejecting from the app (or the dashboard) moves the post to Rejected and clears its approval and publish time, so a scheduled post will not go out. Disconnecting the app or revoking the token stops new approvals but does not unschedule posts it already approved — reject those before they publish.
Comments and feedback
The feedback thread at the bottom of each expanded row records:
Comments — notes between teammates or for agents to read
Approved / rejected events — with timestamps, and a line naming the AI app or API token when the action came through one
Status changes — automatic audit trail
AI revision notes — when an agent updates a draft
Agents read this thread via GET /api/v1/social/posts/{id} or aveiro_social_get_post to revise rejected drafts without guessing what went wrong.
Scheduling and dispatch
After approval:
Status is Scheduled; a background job checks every minute and publishes posts whose time has passed
To go out sooner than the scheduled time, click Post now
Rescheduling an approved post follows the same rule as approving it: the new time must be in the future, and it cannot be cleared. To take a post off the schedule, use Move to review
While publishing, status shows Publishing. Success moves to Published with per-target links. Partial failure shows Failed with error details per platform.
Post now and retry
Button
When it appears
What it does
Approve and post now
Draft, Needs review or Rejected (in the ⋯ menu)
Approves and dispatches in one step, at a publish time of now
Post now
Scheduled (or a legacy Approved post)
Immediately runs the same publish path as the dispatcher, ahead of the scheduled time
Retry
Failed (after a prior approval)
Re-attempts publish for approved posts that errored
Editing an approved post
You can edit drafts, posts awaiting review, approved posts, scheduled posts, and rejected posts.
When you edit a post you approved, your approval carries over: the post keeps its status and its scheduled time, and the approval is simply re-stamped to you with the new timestamp. Fixing a typo in tomorrow morning's post does not send it back through review.
Approval is revoked — the post returns to pending_approval and loses its scheduled time — in two cases:
the post was approved by somebody else, who has not seen your changes; or
the edit explicitly sets a new status, which is you deliberately moving the post.
Either way, a recorded failure is cleared when the content changes, so a fixed post never keeps a red error describing content that no longer exists.
Agents can only edit posts in draft, pending_approval, or rejected status over the API — they can never reach an approved or scheduled post, which is why an edit at that stage is always a human decision.
Captions and media tips
One caption cannot fit every platform — Instagram allows 2,200 characters; Threads allows 500. Use per-platform overrides when posting to both.
Media must be publicly reachable — Meta fetches image URLs at publish time. Uploaded and AI-generated assets in the org library already have public URLs.
One image per platform target in Phase 1 — carousels require a future Chirio update.