NextRouteNextRoute

Team Management

Manage your team — invite owners, dispatchers, and drivers, configure permissions, and handle password resets.

Team Management

NextRoute supports multi-user teams. As your operation grows, you can invite dispatchers to manage routes from the web dashboard and drivers to execute routes from the mobile app.

Settings page

Roles

Every team member has one of three roles:

RoleDashboard accessMobile appCan inviteCan dispatchCan manage billing
OwnerFullYesYesYesYes
DispatcherRoutes, customers, calendarNoNoYesNo
DriverNoneYesNoNoNo

Owner

Owners have full access to the dashboard, settings, billing, and team management. Only owners can invite new team members, change roles, remove users, or reset passwords. There can be multiple owners on a single account.

Dispatcher

Dispatchers can view the customer list, routes, calendar, and reports. They can create and dispatch routes but cannot access billing, settings, or team management.

Driver

Drivers access NextRoute exclusively through the mobile app. They see only the routes assigned to them for the current day, complete stops, submit photos and checklists, and send GPS pings.

Inviting a Team Member

  1. Go to Settings > Team in the dashboard
  2. Click Invite Team Member
  3. Enter the new member's name, email, and role
  4. Click Send Invite

The invited user receives an email with a link that expires in 24 hours. When they click the link, they set a password and are automatically logged in.

What happens behind the scenes

  • A user record is created immediately (with no password)
  • An HMAC-signed invite token is generated with a 24-hour expiry
  • An invitation email is sent via the configured email provider
  • For drivers, Stripe seat billing is synced only after the invite is accepted

Resending an invitation

If the invite expires or was lost, you can resend it from the team list. Click the Resend button next to any pending team member. This generates a fresh 24-hour token and sends a new email.

Accepting an Invitation

When a team member clicks the invite link:

  1. They are taken to the login page with the invite token pre-filled
  2. They set a password (minimum 6 characters)
  3. A JWT is generated and they are automatically logged into their account
  4. If the user is a driver, the Stripe driver seat count is synced

Updating a Team Member

Owners can update any team member's profile:

  • Name — display name used in routes and reports
  • Phone — optional, used for driver contact info
  • Role — change between owner, dispatcher, and driver
  • Active status — deactivate a user without deleting them

You cannot change your own role. This prevents accidentally removing the last owner from an account.

Removing a Team Member

Removing a team member performs a soft delete — the user is deactivated rather than permanently deleted. This preserves historical data such as route assignments and audit log entries.

  1. Go to Settings > Team
  2. Click the menu icon next to the team member
  3. Select Remove

If the removed user was a driver, the Stripe driver seat count is automatically decremented.

You cannot remove yourself.

Password Resets

Owners can trigger a password reset for any team member:

  1. Go to Settings > Team
  2. Click the menu icon next to the team member
  3. Select Reset Password

The user receives an email with a reset link valid for 1 hour. The reset token is signed using HMAC with a combination of the application secret and the user's current password hash, so the token is automatically invalidated if the password changes.

Vehicles

Vehicles can be configured from the Settings page and assigned as defaults on service zones or route templates. Each vehicle record includes:

  • Name — a friendly label (e.g., "Truck 1")
  • Type — vehicle classification
  • License plate, year, make, model
  • Active status

Vehicles are listed at GET /api/vehicles and can be assigned to routes at dispatch time.

API Reference

List team members

curl "https://api.nextroute.app/api/team?role=driver" \
  -H "Authorization: Bearer YOUR_TOKEN"

Response (200):

{
  "data": [
    {
      "id": "usr_abc123",
      "name": "Alex Rivera",
      "email": "alex@example.com",
      "role": "driver",
      "phone": "555-0123",
      "is_active": 1,
      "invited_at": "2026-03-10T14:00:00Z",
      "last_login_at": "2026-03-24T08:15:00Z",
      "created_at": "2026-03-10T14:00:00Z"
    }
  ]
}

Invite a team member

curl -X POST "https://api.nextroute.app/api/team/invite" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Jamie Smith",
    "email": "jamie@example.com",
    "role": "dispatcher"
  }'

Update a team member

curl -X PUT "https://api.nextroute.app/api/team/usr_abc123" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "role": "owner",
    "phone": "555-0456"
  }'

Driver Seat Billing

Driver seats are billed through Stripe. The seat count is automatically synced when:

  • A driver accepts an invitation (seat added)
  • A driver is removed from the team (seat removed)

This means pending invitations do not incur charges until the driver sets their password.