---
id: SCR-PFM-SEC-022
title: Accept invitation
route: /invite (also /acceptInvite)
surface: console
product_area: platform
module: security
revision: 1
status: draft
design_intent: proposed
implementation_evidence: observed
inference: []
source_sha:
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
purpose: Let the invited recipient accept the existing offer by password or Google.
supports:
- JNY-PFM-SEC-002
- CAP-PFM-SEC-005
permission: 'none: public; the invitation token is the authorization'
entry_from:
- The invitation e-mail link
exits_to:
- /auth/callback
- The console
displays:
- field: Token-bound first name, masked address, expiry, organization and account kind.
  source: getInvitationSummary
  provenance: observed
- field: Password guidance for the selected credential path.
  source: Console pool password policy
  provenance: observed
actions:
- label: Accept with a password
  operation_id: acceptInvitation
  permission: 'none: public'
  confirm: false
  provenance: observed
  source: react-console:components/auth/screens/accept-invite-screen.tsx
- label: Accept with Google
  operation_id: beginGoogleAcceptance
  permission: 'none: public'
  confirm: false
  provenance: observed
  source: react-console:components/auth/screens/accept-invite-screen.tsx
- label: Sign out (when another person is signed in)
  operation_id: Console logout route
  permission: none
  confirm: false
  provenance: observed
  source: react-console:components/auth/screens/accept-invite-screen.tsx
states:
- loading
- error
- inactive
validation:
- BR-CAP-PFM-SEC-005-02
- BR-CAP-PFM-SEC-005-03
- BR-CAP-PFM-SEC-005-04
- BR-CAP-PFM-SEC-005-10
patterns:
- Authentication layout
- FormAlert
- FieldError
- Password strength meter
component: components/auth/screens/accept-invite-screen.tsx (AcceptInviteScreen)
evidence:
- 'react-console at baf6dae: components/auth/screens/accept-invite-screen.tsx; the page route file; lib/security/api.ts,
  lib/hq/platform-ops.ts, lib/hq/platform.ts, lib/auth/*'
examined_at: '2026-10-23'
examiner: codex
controls: [TC-AVL-001, TC-AVL-005, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-AZ-006, TC-CRY-001, TC-CRY-002, TC-CRY-003, TC-CRY-004, TC-DAT-001, TC-DAT-002, TC-DAT-003, TC-DAT-004, TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-LOG-001, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-LOG-005, TC-MON-001, TC-MON-002, TC-MON-003, TC-PI-001, TC-PI-002, TC-PI-003, TC-PI-005, TC-PRV-001, TC-PRV-002, TC-SEC-001, TC-SEC-002, TC-SEC-003, TC-SEC-004, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-VEN-001, TC-VEN-002, TC-VEN-003]
---

# Accept invitation

## What the Screen Is For

Let the invited recipient accept the existing offer by password or Google.

## What It Shows and Lets People Do

The page loads the token summary and provides the permitted acceptance paths. A conflicting signed-in person must sign out before proceeding. Unusable-token reason codes select the next-step guidance without allowing the form to choose another identity.

## States and Errors

Password acceptance and Google linking use their dedicated operations. Provider changes precede database activation; the screen does not make those effects atomic or resolve the recorded concurrent-password race.

The state rows describe observed loading, empty, refusal or inactive handling where present. Linked validation rules belong to the planning layer; client feedback and authoritative service checks have distinct responsibilities.

## Patterns It Must Respect

The pattern list names the built shared components and interaction patterns checked for this screen. This contract describes the existing screen; it supplies no replacement visual design.
