Hiring workflows
Approvals
Optional sign-off before a job opens or an offer letter goes out for e-signature. Off unless an owner or admin turns it on.
Turn It On
- Settings → Approvals (owners and admins). Switch on Job Approvals, Offer Approvals, or both.
- Build a short chain (up to 5): named people, Any owner or admin, Any recruiter, or The job’s hiring manager. Pick In order (each approves, one after another) or Any one of them.
- For jobs, tick Also when reopening to require approval when a closed or archived job opens again. Jobs on hold can always go back to open.
- Turning a flow off cancels its waiting requests (offers waiting go back to draft).
Jobs
- Publishing a new job (or choosing Open on a draft) sends it for approval instead. It stays a draft, nothing appears on the careers page, and it opens by itself once the last approver says yes.
- The job page shows an approval strip with the status badge, who’s deciding now, and Request Approval or Ask Again after a rejection.
- Editing a job that’s been approved (or part-approved) but isn’t open yet resets the approval and asks again. The editor warns you first. Edits while nobody has decided yet don’t restart anything.
Offers
- Saving an offer letter sends it for approval; Email for Signature and Copy Signing Link appear only once it’s approved. The workspace chain replaces the single optional approver.
- A rejected letter goes back to draft with the comment. Edit it and press Ask Again.
- Editing an approved letter resets the approval and asks again, with a warning first.
Deciding
- Approvers get a Waiting for Your Approval card in My Work and a notification, both opening the approval’s own page with the job details or the letter. Named approvers can review and decide there even if they aren’t on the job’s hiring team. Approve, or reject with a comment (a comment is required to reject).
- Whoever asked can’t approve their own request. In a small team where an owner is the only one who could approve a step, they can still ask, then override with a reason.
- Owners can Override a waiting or rejected request with a reason. It approves it straight away (and opens the job) and the reason is kept.
- Every request, decision, reset and override is in the Audit Log on the job or offer.
- Email: approvers and requesters are also emailed when the workspace can send. Sample workspaces only send to test inboxes, and the read-only demo never sends or changes anything.
Enforced Everywhere
The database itself refuses to open a job or send an offer without approval, so the app, the API, MCP and imports all follow the same rule. Opening through the API answers 409 approval_required; imported jobs that were open arrive as drafts.
API, MCP and Webhooks
GET /api/v1/approvals(filter bystatus,kind,job_id,offer_id),GET /api/v1/approvals/:id(with the audit log),POST /api/v1/approvalswithjob_idoroffer_id.POST /api/v1/approvals/:id/approve,/reject(withcomment) and/override(owners, withreason) decide as the API key’s creator.- MCP:
list_approvals,request_approval,decide_approval. - Webhooks:
approval.requested,approval.approved(including overrides) andapproval.rejected, withdata.approval(steps, comments, who decided). Signed like every other webhook.