Invite someone to the app

Invite a person by name, email, phone and role, delivered by text, email, both, or a link you copy yourself.

What it is

An invitation creates a single-use token tied to a role and optionally a crew, mails and/or texts a branded invite, and hands back a copyable link. Accepting the link stamps the invitee's role and crew onto their account, marks the invitation accepted, and syncs them into the crew.

Also called: add a user · invite crew · send an invite · invite link · onboard an employee

See it
Invite someone to the app
Area
Platform & Admin
Group
Team & access
System
Team & Access
Solves
3 named problems
01Add Member takes full name, email, phone and role, plus a Send Via choice of SMS / Email / Both / Link Only.
02POST /api/invite mints a URL-safe token, stores the invitation with a 48-hour expiry, and sends on the chosen channels.
03The invite URL is built from the ORIGIN of the request, so an invite sent from a tenant subdomain returns to that subdomain.
The Invite New Member form with the four-way Send Via chips and the green Invite Created panel showing the copyable link. SettingsView.tsx. Sample data — no customer information appears here.
How it works
  1. 1Add Member takes full name, email, phone and role, plus a Send Via choice of SMS / Email / Both / Link Only.
  2. 2POST /api/invite mints a URL-safe token, stores the invitation with a 48-hour expiry, and sends on the chosen channels.
  3. 3The invite URL is built from the ORIGIN of the request, so an invite sent from a tenant subdomain returns to that subdomain.
  4. 4The new person signs up at /sign-up?invite=<token>; /api/invite/accept verifies the session matches the claimed user, writes role + crew into their account metadata, marks the row accepted, and upserts crew_members_sync when the invite was crew-scoped.
  5. 5Crew leaders can invite too, but their invite is locked to worker role and their own crew — enforced server-side, not just in the UI.
Why we built it

Field crews often have a phone and no work email, so an email-only invite excludes exactly the people who need the app in their hand — hence SMS, both, and a raw link. The origin logic carries its own bug story in the code: invite links used to point at the platform apex, so middleware blocked the accept call with 'No organization — visit /onboarding', and even when it didn't the user landed on the apex instead of their own dashboard.

The problem
  • Email-only invitations excluded field crews.
  • Invite links pointed at the wrong host and failed to attach the user to the tenant.
  • Every new person had to go through the owner.
Sound familiar?
What you get
A worker with only a phone number can be onboarded by text.
Accepting an invite lands the person on their own company's dashboard with the right role already set.
Crew leaders can staff their own crew without being able to promote anyone.
What's inside
Send the invite by text, email, both or link
A four-way choice of how the invitation reaches the person, including Link Only for handing it over in person.
Invitations expire
Every invite link is good for 48 hours, after which it stops granting access and shows as expired in the pending list.
Pending invitations list
A live list of invitations that have been sent but not accepted, with resend, cancel and repair actions.
Phone-only invites that actually match
Phone numbers are normalised to a canonical form on both sides so an invitee who signs up with a phone is recognised as the person invited.
Invitations can only be accepted by the person signed in
The accept endpoint verifies the signed-in session matches the account the request claims to be, so a token alone cannot attach an arbitrary user to your company.

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 →