Audience — the configured magic-link audience (default mj-magic-link).
Expiry (epoch seconds).
Optionalfamily_Optionalgiven_Issued-at (epoch seconds).
Issuer — MJ's public URL; resolves to the registered magic-link auth provider.
Optionalmj_True when this session resolves to the shared Anonymous principal (claims-based enforcement).
The single Application this session is scoped to.
Optionalmj_Host-asserted visitor email for a widget host-identity session (additive). The
authoritative email/sub still resolve the constrained shared Anonymous principal;
this carries WHO the host says the visitor is, for the agent to look up their account —
without granting that account's permissions. Absent on anonymous/ordinary sessions.
Optionalmj_UserID of the internal user who issued the invite (attribution/audit). Absent on links whose inviter could not be resolved.
Optionalmj_The prior conversation this visit chains from (RV2), for the voice path to stamp Conversation.LastConversationID.
Optionalmj_Resolved polymorphic identity entity id (RV4), for the voice path to stamp the existing Conversation.LinkedEntityID / AIAgentSession.LinkedEntityID.
Optionalmj_Resolved polymorphic identity record id (RV4), for the voice path to stamp the existing Conversation.LinkedRecordID / AIAgentSession.LinkedRecordID.
Marks the session as magic-link so the Explorer can confine the UI.
The restricted role name assigned to this user (informational; enforcement is server-side via the role's entity permissions).
Optionalmj_Per-session scope UNION (Phase 4+). Each entry is one redeemed link's grant. The server enforces anonymous sessions against THIS set (not the user's role set), which is why two anon visitors sharing the Anonymous principal can hold different scopes without accretion. For email sessions the singular mj_app_id/ mj_role remain authoritative; this carries the union when links are stacked.
Optionalmj_Opaque per-session id — correlates one anonymous session's activity across audit rows without a real user.
Optionalmj_Returning-visitor anchor for a widget guest session (additive, RV1). Carried so the VOICE path — whose conversation is created server-side — can stamp the same Conversation.VisitorKey the text path stamps client-side. Present only when the widget remembers returning visitors.
Optionalmj_Public web widget instance id (additive — set only for widget guest sessions minted by WidgetSessionService). Binds the synthesized guest principal to one widget instance so its pinned agent / guest role can be locked down. Absent on ordinary magic-link sessions.
OptionalnameSubject — magic-link|<inviteId>.
Claims carried by a MJ-issued magic-link session JWT. Identity claims (email/given_name/family_name) follow standard OIDC so the existing provider extraction works; the
mj_*claims describe the scope.