Documentation

How leave approvals work

The default chain, custom workflows, replacements, edits, cancellations, request history and who can see attachments

What happens between Submit and approved or rejected.

Where decisions happen

The request's review page, Review leave request, is at https://app.squadbear.com/approvals/<request id>. Inbox carries the badge and lists every request waiting on you; Home repeats those rows under Your day. Time off → All requests lists the leave records you may see and opens a pending row on the review page. The review page and Time off → All requests both require the manager or admin role. An approver on the employee role sees the request in Inbox but cannot open the review page; they decide through a connected agent (approve_leave_request / reject_leave_request, scope approval:write).

The default chain

Approval is set on each leave type: an approval workflow, Granted at once, manager notified, or Granted at once, nobody told. The chain is materialized at submission, one step per matching workflow step. Every preset routes its vacation and unpaid types through the built-in Simple manager approval workflow - one step, the direct manager - and grants sick leave at once with the manager notified. A step whose only approver is the requester is recorded as approved by them, not skipped; an approver away on approved leave that day is replaced by their manager or the first active admin.

Before you submit, the form says who the request goes to: Goes to: its first step's approvers, Goes to any admin: when no manager is set, or Granted at once, manager notified / Granted at once, nobody told. Once submitted, the request on Time off → My leave and its Team calendar row say who it is Waiting on.

Custom workflows

Admins define chains on the Approval workflows tab of Settings → Leave: 1-5 steps, each with 1-8 approvers - direct manager, manager's manager, team lead, a named employee, or any admin - and the first to respond decides the step. Each step takes an optional duration condition and an SLA in hours. A leave type picks its workflow in the Approval field of its request rules (Settings → Leave → Leave types → [type]); a new rule applies to requests made from its date. A workflow that a leave type uses cannot be switched off. An optional Same-day cut-off routes a request for today made after a set time through a different approval.

Replacements

When a leave type has Replacement required on - no preset turns it on - a request cannot be submitted without naming a colleague to cover, who cannot be the requester. A cover who is away or already covering someone else is a warning, never a refusal, also when the cover is assigned or changed later. Only they can accept or decline.

Editing and cancelling

Only the requester or an admin can edit a request, and only while it is pending - editing re-validates against the creation rules and restarts the chain from step one. Cancelling is open to the requester, their manager, or an admin, on pending or approved requests; the days return to the balance, and a partly-taken approved request can be cancelled from a date forward, keeping days already taken. A rejected or already-cancelled request cannot be cancelled again - the call is refused with a 409.

Closed time periods

Once an admin closes time through a date (Settings → Time tracking → Close time), approved leave on or before that date is locked for everyone, admins included, because payroll may already have used it. Approving a request with a day in the closed period, cancelling approved days in it, and booking leave there that would be approved at once (sick leave, say) are all refused with a 409 period_closed. A request can still be booked there as pending, with a warning that it cannot be approved until the period is reopened. To change leave in a closed period, an admin reopens it (with a reason), makes the change, and closes it again. Closing time needs the Team or Enterprise plan, but reopening never does: a workspace that moves to the Free plan can still move the date earlier or clear it. If the Time tracking module is turned off, turn it back on to reopen.

Request history

The request detail carries a Request history trail - up to 100 entries, oldest first: submission, edits with the fields that changed, step decisions, escalations, cancellations and cover events. The requester, anyone on an approval step, the requester's manager and admins see it.

Attachments

Attachments are added by the requester when submitting, or from the request's detail on My leave. The requester, admins, and any candidate on any step read them, whatever the request's status; get_request applies the same rule. Only the requester or an admin writes or deletes one; after the request leaves pending, deleting is admin-only.

Worked example

Tomasz requests 8 days of Vacation. Submitting counts the 8 days as pending on his Vacation allowance and materializes one step from Simple manager approval; his manager's approval turns them into used days. Had Marta added a second step for requests over 5 days, any active admin, to that workflow, it would wait on her too.