Resolve the Post-Auth Journey
journey is:
returningwhen the user has an active membership, or an instance administrator can see an existing company;invitedwhen a pending human request belongs to the user or a currently open invite matches their verified email;founderwhen neither condition applies.
pendingInvitations contains companyId, companyName, inviteId, role,
createdAt, and filed. filed: false means an open verified-email match was
discovered but no request has been filed; the UI must obtain explicit consent
before claiming it. inviteToken is retained only for response compatibility
and is always null.
Returns 401 without an authenticated board user.
Read Progress
{ "progress": null } when no row exists, otherwise:
401 without a board
user.
Advance Progress
409; a version conflict that still loses after bounded retry
also returns 409. Invalid journey or state values return 400.
The shipped founder sequence is:
WALKTHROUGH_* and discussion/scope states exist as reserved enum
values. They are not driven by the current onboarding flow.
ORGANIZATION_CREATED is accepted as a legacy request alias and is normalized
to COMPANY_CREATED before transition checks and persistence. New clients must
send and display the canonical COMPANY_CREATED state.
Set Up the Local Environment
rootFolder is required and must be absolute. AoA performs a write probe before
persisting the environment:
200— probe passed; response identifies whether the environment was created or updated400— missing or non-absolute path401— no board authentication403— no instance-settings or company authority422— write probe failed; nothing is persisted
Global Human Operating Profile
{ "profile": ... }. PATCH accepts only
fields present in the request:
A social link requires a supported
type, a valid URL up to 2,048 characters,
and an optional label. Malformed links return 400. The onboarding UI requires
name, title, and timezone before it advances even though this general-purpose
PATCH route supports partial updates.
GET /api/auth/profile and PATCH /api/auth/profile are the smaller
compatibility profile used by account chrome. The richer /api/user-profile
record is the onboarding source of truth.
Finalize an Invited Journey
acceptOpenInvite: true is required only when
claiming a tokenless open invite or a fresh reinvite after rejection. Omitting
it must not reveal whether an open matching invite exists.
Responses use:
{ "admitted": false, "status": "pending" | "rejected" | "invite_invalid" }.
A verified-email match can auto-admit an ordinary member or lead. An unmatched
or unverified email and any invite carrying privileged authority remain
pending for founder approval. An already approved request is idempotently
reported as approved.
Returns 400 when companyId is missing, 401 without a board user, and 404
when there is no request or consented open invite.
Invite creation, expiry, revoke/resend, and manual approval belong to the
Team API.