Client Node Integration

Client Node Integration

Client Nodes provide a unified portal at nodes.nexusrms.io/clients/{8-digit-id} where clients interact with multiple NexusRMS companies through a single account. The 8-digit identifier is stored in the node_client_id field on the Client model.

What Are Client Nodes?

Unlike the standard Client Portal (scoped to one tenant), a Client Node connects to multiple NexusRMS companies. A client working with several rental companies can view all projects, quotes, invoices, and documents across every company — with a single login.

Node Connection Workflow

  1. Client created in NexusRMS (or invited)
  2. node_invitation_sent_at timestamp recorded
  3. Client accepts invitation — node_joined_at timestamp recorded
  4. NodeConnection relationship created linking Node to your tenant

Connection Status

getNodeConnectionStatus() returns one of three values:

  • not_invited — No invitation sent (node_invitation_sent_at is null)
  • pending — Invitation sent, not yet accepted
  • connected — Client has an active Node account

Helper Methods

  • hasBeenInvitedToNodes() — True if node_invitation_sent_at is set
  • hasJoinedNodes() — True if both node_joined_at and node_user_id are set
  • hasNodeInvitationPending() — True if invited but not yet joined
  • getDaysSinceNodeInvitation() — Days since invitation, or null

Sending a Node Invitation

From the client detail page, the ClientNodeStatus card displays the current state and provides actions:

  • Not Invited (grey chip) — Send Client Portal Invitation button (email required)
  • Invited (warning chip) — Shows invitation date, Node ID, Resend Invitation and View Invitation Link buttons
  • Active (success chip) — Shows registration date, Node ID, last active time, View Client Portal Dashboard link, and multi-company indicator when connected to more than one company

Contact Syncing from Nodes

Node contacts are auto-synced to your ClientContact records:

  • synced_from_node — Boolean flag (true for synced contacts)
  • node_user_id — UUID from the Node database
  • last_synced_at — Most recent sync datetime

Synced contacts are read-only in Core — the Node is the source of truth. Changes propagate via SyncNodeUserToContacts and ClientContactRepository::syncFromNode(). The getTypeBadge() method returns "Node User" for synced contacts. Scopes: nodeSynced() and coreOnly().

Dual-Database Storage

Data such as time entries and signatures are stored in both the Core tenant database and the Node database, ensuring each party retains access even if the connection is later severed.

Multi-Company Associations

A single Client Node connects to multiple NexusRMS companies. The Node portal shows a unified view across all connected companies. On your side, the ClientNodeStatus card displays a message like "This client is connected to 3 companies via their Client Portal" when connectionCount exceeds one.

Portal URLs

Registration: https://nodes.nexusrms.io/clients/{id}/register. Dashboard: https://nodes.nexusrms.io/clients/{id}/dashboard. Copy URLs via the clipboard button on the ClientNodeStatus card.

Tips

  • Ensure every client has an email before sending a Node invitation.
  • Use getDaysSinceNodeInvitation() to follow up on pending invitations.
  • Node-synced contacts are read-only — ask clients to update via their Node portal.
  • Use Bulk Invite to onboard all eligible clients at once.
  • Monitor the multi-company indicator to understand cross-company relationships.

Was this article helpful?