curl --request POST \
--url https://pria.praxislxp.com/api/admin/users/merge \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"sourceUserId": "<string>",
"targetUserId": "<string>",
"dryRun": false,
"confirm": true
}
'{
"success": true,
"summary": {}
}Merge a source user into a target user
Admin/super operation. Repoints every ref:‘user’ across both connections (main + embeddings), unions user_institution memberships (higher role, unioned entitlements/favorites, summed credits), revokes the source’s auth/session/credential artifacts, hard-deletes the source, and writes a userMergeAuditLog. Authorization is dual-RAP (source users.delete + target users.edit). A dryRun returns the preview; applying requires confirm:true.
curl --request POST \
--url https://pria.praxislxp.com/api/admin/users/merge \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"sourceUserId": "<string>",
"targetUserId": "<string>",
"dryRun": false,
"confirm": true
}
'{
"success": true,
"summary": {}
}Authorizations
JWT token passed in x-access-token header
Body
The user to merge FROM. Hard-deleted on a successful apply; must not be a super-admin.
The user to merge INTO (survives). Every ref:'user' on the source is repointed here.
When true, returns the preview (per-collection counts + conflicts) and writes nothing.
Required (true) to APPLY a merge (when dryRun is not true). Forces dry-run-then-confirm.
Was this page helpful?