Skip to content
AXOWLDevelopers
Quickstart

End users

End users are your application’s users (distinct from org members — see Authentication model). Create or import each customer in the target app group. Active email addresses are unique within that group’s member scope, so the same email can identify separate members in two groups. Each member carries an identity badge — see Connected ID — but is not a member of your organization and carries no membership grade. Base path: /api/org/{slug}/endusers (authenticated org member). Each route needs the listed scope; the organization Owner and Admin hold them all. Missing permission returns 403 with errorCode: "PERMISSION_DENIED".

Method · RoutePurposeRequired scope
GET /List end users (paged: page, pageSize, search, status, appGroupId)org.end_user.list
GET /by-group/{groupId}The end users who have access to one app grouporg.end_user.list
POST /Create and invite an end user: { email, appGroupId, displayName? }. Returns { id, email, status: "Pending", emailSent }. 409 when the email already exists in the group’s member scope. In a development app group this adds a tester; beyond 100 active testers: 409 TESTER_LIMIT_REACHED (see Development and production).org.end_user.create
POST /bulk-importBulk import — body { appGroupId, users: [{ email, displayName? }] }, up to 500 rows. Same creation path as single create: each user is created Pending in the target group’s member scope, granted app access, and sent a Magic Link invite (in the background — failures recover via resend). Returns { total, created, duplicates, invalid, results }; each row in results is created / duplicate / invalid, or limit for rows beyond 100 testers in a development app group.org.end_user.create
POST /{endUserId}/resend-inviteResend the invite. Only for users still Pending (400 otherwise).org.end_user.update
PATCH /{endUserId}/suspendSuspendorg.end_user.suspend
PATCH /{endUserId}/activateActivateorg.end_user.activate
DELETE /{endUserId}Delete. Also cancels the member’s live subscriptions — see App member purchases.org.end_user.delete
DELETE /{endUserId}/groups/{groupId}Remove from an app grouporg.end_user.delete

The invite verification is a public route — POST /api/enduser/verify-invite with { token }; it activates the Pending user and answers { message, alreadyActive, appName, appIconUrl } (400 for an invalid or expired link). End-user authentication flows (passkey / magic-link / social) live under /api/public/apps/{applicationKey}/auth/* — see Quickstart and the OIDC reference.