SignOff Approvals

SignOff Approvals for Confluence

Confluence's built-in page approvals are only on Premium and Enterprise. Atlassian's own help page says "Approvals are available only on Premium and Enterprise plans." SignOff adds page sign-off to Confluence Standard. You ask named people or groups to approve a page, they approve or send it back with a comment, and every step lands in an audit log.

The part people get wrong most often is what happens after someone edits an approved page. In SignOff an approval belongs to one page version. Publish a new version and the approval stops counting, the page shows "Awaiting approval" again, and the people who had approved get a comment asking them to look again.

It's a Forge app built with UI Kit. It runs on Atlassian's infrastructure and makes no calls outside Atlassian. Everything the panel shows is read with the viewer's own Confluence permissions. The app identity does three jobs only. It reads the new version number after an edit, posts the "please review again" comment, and checks whether each named approver can view the page.

What you get

The byline panel also has a History tab with every request, decision, withdrawal and reset, newest first. A CSV copy dialog sits under it for audits. Blog posts work the same way as pages.

How a request works

  1. Someone who can edit the page opens Approval in the byline and picks Request approval.
  2. SignOff asks Confluence whether every person they picked can view the page. If someone can't, nothing is saved and the form says how many approvers are blocked, so the author can fix access first. Confluence only lets site admins run this check for another person, so SignOff runs it as the app. Only a clear "can't view" from Confluence blocks the request. If Confluence gives the app no answer (it refuses, says the page isn't there because app access rules hide it from the app, or fails), the request is saved anyway and the panel warns that access couldn't be confirmed. Nobody has tried this on a live site yet, so treat the check as a safety net rather than a guarantee.
  3. If notifications are on (the default), SignOff posts a page comment as the author that @mentions each approver. Confluence then sends its normal mention notification.
  4. Approvers open Approval in the byline and approve or request changes. Their decision is tied to the version they saw. The panel sends that version with the decision, and if the page or the request has moved on since they opened it, the decision is refused and the panel shows the latest state.
  5. When enough people approve, the page is approved and a comment tells the author. One "request changes" sends the page back right away.

The rules, exactly

Who can do what.

How decisions count.

If a site admin uses app access rules to hide a space from SignOff, the app can't read pages there after an edit. The byline still checks the version as the viewer and shows "Awaiting approval" on the new version. But the reset itself waits until someone opens the Approval panel, and the "please review again" comment may not post. Approvers can't approve the old version either way, because every decision re-checks the version.

Due dates are informational, and SignOff doesn't send reminder emails. A pending request gets an Overdue badge once its due date has ended in every time zone, which is 12:00 UTC on the next day. The form accepts any date that's still today somewhere, so a date you can pick is never overdue the moment you save it.

Notifications

SignOff doesn't send its own email. It posts a footer comment that mentions people, and Confluence handles delivery the way it does for any mention. You can turn this off per request.

Groups can't be @mentioned in Confluence, so group members don't get a personal notification. They'll find the request on the Approvals page and in the page byline.

Limits

ItemLimit
Approvers per request (people plus groups)20
Request note500 characters
Approve or reject comment1,000 characters
Due dateup to 366 days ahead
Group memberships checked per person1,000
History page size50 entries, with Load more
CSV exportnewest 1,000 entries, 2 MB
Names in the CSVlooked up for the first 500 people
Decisions read per round300
Approvals pagescans 500 open requests, shows up to 50

The input limits come back as an error that names the limit. The CSV dialog says when entries were cut or names are missing, the Approvals page says when its list is cut, and the panel warns if a round ever holds more than 300 decisions. One limit is silent. A person in more than 1,000 groups may not be recognised as a member of a listed group.

Permissions and data

Scopes, and why each one is there.

ScopeUsed for
read:page:confluence, read:blogpost:confluencePage title and current version, as the viewer
read:confluence-content.summaryReceiving page and blog post update events
read:confluence-content.permissionChecking whether you can edit a page (as you) and whether each approver can view it (as the app)
read:confluence-groups, read:confluence-userGroup search, group names, group membership, names in the CSV
write:comment:confluenceThe optional notification comments
storage:appRequests, decisions and the audit log
report:personal-dataThe daily personal data report to Atlassian

SignOff never edits page content and has no scope that could. It stores Atlassian account IDs, group IDs and names, the request note, decision comments and timestamps in Forge storage, which Atlassian hosts.

Once a day it reports the stored account IDs to Atlassian with the Forge personal data reporting API. When Atlassian says an account is closed, SignOff swaps that ID for a "Closed account" placeholder everywhere it's stored and deletes the notes and comments that person wrote. Their decisions still count. Each run reports up to 4,500 accounts (90 per call) and saves its place after every call. Closed accounts go on an erase list right away. The run works through that list until it hits a 10-minute limit, and anything left is first in line the next day. At 4,500 a day, a site with up to 31,500 stored accounts gets a full pass within Atlassian's 7-day cycle.

One side effect. If a named approver's account is closed before they decide, an "Everyone listed" request can't finish, because nobody can approve in their place. Withdraw it and request again without them. See PRIVACY.md.

What it doesn't do

It doesn't lock or restrict a page while it's under review, and it doesn't build multi-stage workflows with states like Draft, Review and Published. It doesn't send reminders or digests, and it doesn't produce signed PDFs. If you need those, the bigger workflow apps on the Marketplace cover them.

Support Zovo

Zovo builds and maintains this app. If it saves you time, you can support the work on GitHub Sponsors. Sponsorship is optional, and the tool works the same without it.

Zovo is made by theluckystrike on GitHub.

More tools by Zovo

License

MIT. See LICENSE.

Support this work

If this app saves you time, you can support the work on GitHub Sponsors. Monthly tiers start at $5, and one-time tiers start at $15. Sponsorship is optional, and the tool works the same without it.

Sponsor on GitHubZovo on GitHub