ProductApprovals
You decide what goes out.Approve your own posts, or require a second teammate.
Every post waits for approval before it can be scheduled. Working alone? You can approve your own posts. Teams can give writing, approving, and publishing to different people. The server enforces these rules for the browser, the API, and the AI.
- DRAFT
- submit · owner, admin, creatorREADY_FOR_REVIEW
- approve · owner, admin, approverAPPROVED
- schedule · owner, admin, publisherSCHEDULED
- confirmation · delivery workerPUBLISHED
- request changes · owner, admin, approverNEEDS_CHANGESfrom READY_FOR_REVIEW
- edit, then resubmit · owner, admin, creatorREADY_FOR_REVIEWfrom NEEDS_CHANGES
- reject · owner, admin, approverREJECTEDfrom READY_FOR_REVIEW
Transitions
Four decisions move a post,and the server checks each one.
This table comes straight from the rules the server enforces. Every decision needs a signed-in teammate. A decision made from the wrong starting state is refused, and no admin override exists.
| Decision | From | To | Roles allowed |
|---|---|---|---|
| Submit for review | DRAFT, NEEDS_CHANGES | READY_FOR_REVIEW | owner, admin, creator |
| Approve | READY_FOR_REVIEW | APPROVED | owner, admin, approver |
| Reject | READY_FOR_REVIEW | REJECTED | owner, admin, approver |
| Request changes | READY_FOR_REVIEW | NEEDS_CHANGES | owner, admin, approver |
Every approval records the teammate who gave it. An API key can create a release, but it cannot approve a post.
Roles
Approving and publishingare separate permissions.
There are six fixed roles. An approver can sign off without publishing rights, and a publisher can schedule without approval rights. A solo founder holds every role and can approve their own posts.
| Permission | owner | admin | creator | approver | publisher | viewer |
|---|---|---|---|---|---|---|
| Read launches and visuals | ||||||
| Create releases and submit posts | ||||||
| Edit drafts and visuals | ||||||
| Approve, reject, request changes | ||||||
| Schedule and cancel posts | ||||||
| Manage brand and product | ||||||
| Invite teammates | ||||||
| Read the audit log | ||||||
| Configure SSO and SCIM | ||||||
| Delete the workspace |
Batch
Approve every post in one click,or pick exactly the ones you want.
Approving six posts takes one click and writes one audit entry.
postIds: omittedEvery eligible post
Leave the list out and the decision applies to every post in the launch that can take it. That is the Approve all button.postIds: [a, b, c]Exactly these posts
Name the posts and the call is all or nothing. If one is not eligible, nothing changes and the call returns 409.409 · nothing eligibleNo silent success
Click Approve twice and the second click returns a clear conflict error.one winner, one 409Concurrent reviewers
Two approvers acting at once get one success and one conflict. Nothing is locked while a reviewer reads.
Scheduling
Six checks run before a post is scheduled,and the visual is checked again at send time.
Approval and scheduling are separate steps. Scheduling checks the post again. Right before sending, Shots checks the visual a third time.
Approval
A signed-in teammate with approval rights: owner, admin, approver.
- Signed in, never an API key or the AI
- Holds approval rights
Schedule checks
A teammate with publishing rights: owner, admin, publisher.
- The post belongs to your workspace
- The post is approved
- A visual is attached
- The copy is within the length limit
- The destination channel is active and yours
- The visual itself is approved
Send-time recheck
The delivery worker, just before it calls the network.
- The visual is still approved
- The workspace is still active
- The channel is still connected
Audit
The audit log shows who decided whatand on which version.
Every decision is saved together with its audit entry, so neither can exist without the other. Entries carry the teammate, the request ID, and the outcome.
| Event | What it records |
|---|---|
| product.campaign_created | A campaign and its post count |
| product.campaign_post_status_changed | A decision and how many posts it covered |
| product.campaign_post_scheduled | The campaign and the scheduled post |
| post.scheduled | The destination and the visual |
| post.cancelled | Who cancelled it |
| post.published | The provider post ID |
| post.publish_recovery_required | The failure code, for a teammate to resolve |
What is next
Automatic approval rules are plannedand stay off until you turn them on.
Approval rules and the Copilot and Autopilot modes are designed and written down. None of them ship today, so every post still needs a teammate.
Manual
AI creates things when you ask. Nothing proactive.
Copilot
AI suggests launches and plans. Every suggestion waits for a person.
Autopilot
Publishes only what your approval policies permit. Everything else queues for review.
A mode gates triggers and automatic approval. It never widens what a role may do.
Approval rules
Rules your workspace writes for what may publish automatically, such as educational posts. Announcements, metrics, pricing, and competitor mentions always need review.
Autonomy modes
Manual, Copilot, and Autopilot. A mode controls what starts on its own and what is approved automatically. It never gives a role more permissions.
Questions
Anything else? Talk to us.
Can I approve my own posts?
Can an API key or the AI approve anything?
Does typing "approve them" in chat approve anything?
What happens to a post that needs changes?
Do release emails need approval too?
Related