Crew_acceptance_agreements holds a body, a version and an active flag per org. A default agreement is seeded on first read so signing is never blocked. Editing writes a NEW version and deactivates the old one. Tokens like {{labor.amount}}, {{project.name}}, {{customer.name}} and {{date.today}} are filled at view and sign time.
Also called: sub agreement template · edit the crew contract · our own terms
- 1GET /api/crew-agreement returns the active template; PUT saves a new version and deactivates the previous.
- 2getActiveAgreement seeds the default body on first read.
- 3getAgreementContext resolves labor.amount from the APPROVED estimate's frozen laborTotal, rendering 'TBD' when there is no approval.
- 4signAssignment freezes the RENDERED body onto the signature row, tokens already filled.
- 5Admin-only, with a 50-character minimum and a 50k ceiling.
Builders have their own crew agreements, wording their lawyers have already been through, and a generic one they cannot change is one they will not use. Each company keeps its own, and editing it saves a new version and retires the old one rather than overwriting it, because every signed acceptance points at the exact version its signer read and that history has to stay reconstructable. Only an admin may touch it — a crew agreement is a legal instrument, not a preference. The labour figure written into the document is frozen from the approved estimate at the moment of signing, so the signed record carries the amount the lead actually agreed to rather than a placeholder that later reads whatever the job has since become.
- A one-size default agreement no builder's counsel approved.
- Editing a template in place invalidating the provenance of past signatures.
- Hand-typing the labour amount into every agreement.
See it on your own jobs
Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.
or keep browsing features →