Aidelly Docs
App Guides

Team Approvals

Flip a workspace switch and every member-submitted post lands in an owner/admin approval queue, with a reject-with-reason flow and a full audit trail.

What Team Approvals is for

Team Approvals is a server-side gate: when the workspace toggle is on, any scheduled post created by a workspace member is held in approval_status = pending until an owner or admin clears it. Approved posts ship at their original scheduled time. Rejected posts return to draft with a required rejection reason attached.

Useful for agencies who can't let a client misfire, brands with a regulated voice, and any team where the person hitting publish isn't the person signing off.

Where it lives

  • Workspace setting — Workspace Settings → Team Approvals → "Require member approval before publish". Owners and admins only.
  • Approval queue/w/[workspace]/team-approvals (or the matching workspace-scoped path your sidebar surfaces).

Plan availability

PlanTeam Approvals
LaunchNot included
ScaleIncluded
AgencyIncluded

The gate is workspace-scoped, so an Agency workspace can have the toggle on for one client and off for another.

How the gate decides

When a scheduled post is created via any surface (composer, calendar, chat, API, MCP), Aidelly evaluates the approval gate server-side:

Submitting roleGate result
OwnerAlways bypass — post publishes on schedule
AdminAlways bypass — post publishes on schedule
MemberGated when the workspace toggle is on

There is no client-side bypass. The decision is made in evaluateApprovalGate() at the API layer, before the post is enqueued.

Step 1 — Turn the gate on

  1. As the workspace owner or admin, open Workspace Settings → Team Approvals.
  2. Toggle "Require member approval before publish" to on.
  3. Save.

From this moment, every member submission lands in the approval queue.

Step 2 — Members submit as usual

Members compose and schedule like normal. There is no extra step in the composer — Aidelly silently sets approval_status = pending on the scheduled post. The post is visible to the submitting member as "Pending approval" on the calendar.

Step 3 — Owner / admin reviews

  1. Open the Team Approvals page.
  2. The queue shows every pending post: caption preview, platform, account, submitting member, scheduled time, and a strip of media thumbnails when the post has images or video.
  3. For each post you can:
    • Approve — flips approval_status to approved. Post enters the regular publish pipeline at its original scheduled_at.
    • Reject — opens a comment box; the rejection reason is required. Submitting member is notified in-app.
    • Open detail — click the caption, the media strip, or the 💬 icon on the row. A right-side panel opens with the full caption, every media item, scheduled time, campaign (if any), and a threaded discussion below. Use the discussion to ask the author a question before approving — they get notified the same way Draft Discussions work.

Members of the workspace who aren't approvers can still open the detail panel to read the discussion on their own submissions. Only Approve / Reject are gated to owners and admins.

Step 4 — Bulk-clear the queue

For a backlog, multi-select pending posts and:

  • Approve selected — applies to every selected post.
  • Reject selected — prompts for a single comment that applies to the whole batch.

Audit trail

Every approval action writes a row to post_approval_events:

Event typeTriggered when
submittedMember creates a gated post
approvedOwner/admin approves the post
rejectedOwner/admin rejects with a reason
returned_to_draftOwner/admin opens the post for redraft
commentedComment added to the approval timeline

Events are visible on the post detail drawer ("Approval timeline" tab) and roll up to the Activity Log.

How Team Approvals interacts with other Aidelly features

  • Draft Discussions — discuss the draft before submitting it for approval. Discussion is informal; approval is the formal sign-off.
  • Activity Log — every approval action shows up in the audit trail.
  • Version History — if a post is rejected, restore an earlier version before resubmitting.
  • Crosspost Routes — when a route fans a member's source post out, the fanned-out destinations inherit the source's approval state.
  • Calendar — pending posts show a "needs approval" badge on the calendar.

What approval does NOT do

  • It doesn't rewrite the schedule. Approved posts ship at their original scheduled_at. If a post sits in the queue past its scheduled time, it publishes immediately on approval (the publish pipeline treats "due in the past" as "publish now").
  • It doesn't lock the draft. Members can keep editing the draft while it's pending — every save creates a new version. The approver always reviews the latest version.
  • It doesn't notify out-of-band by default. Reviewers see the queue in-app. If you want email notifications, configure them via Warning Rules.

Troubleshooting

  • My post bypassed the gate — you're an owner or admin in this workspace. The gate only applies to members.
  • The toggle is greyed out — only the workspace owner can flip it. Admins can review approvals but can't change the workspace setting.
  • Approved post didn't publish — check the Activity Log for a publish failure event. The approval was honored; the failure is downstream.