deleteUser performs a hard delete of the authenticated user. All associated data — wallets, embedded wallets, verified credentials, metadata — is permanently removed. Once the API call succeeds, the SDK automatically logs the user out and clears all client-side authentication state.
Account deletion is permanent and cannot be undone. All associated data will be irrecoverably deleted.
Usage
import { deleteUser } from '@dynamic-labs-sdk/client';
const handleDelete = async () => {
try {
await deleteUser();
// Auto-logout has already happened — redirect or update UI.
} catch (error) {
console.error('Failed to delete account:', error);
}
};
import { deleteUser } from '@dynamic-labs-sdk/client';
import { useState } from 'react';
function DeleteAccountButton() {
const [isDeleting, setIsDeleting] = useState(false);
const [error, setError] = useState<unknown>(null);
const handleDelete = async () => {
if (!confirm('Permanently delete your account? This cannot be undone.')) {
return;
}
setIsDeleting(true);
setError(null);
try {
await deleteUser();
} catch (err) {
setError(err);
} finally {
setIsDeleting(false);
}
};
return (
<div>
<button onClick={handleDelete} disabled={isDeleting}>
{isDeleting ? 'Deleting…' : 'Delete account'}
</button>
{error instanceof Error && <p>Error: {error.message}</p>}
</div>
);
}
Behavior
- Requires an authenticated user — call only when
dynamicClient.user is set (see Check if signed in).
- The API call is gated by MFA: if the user has MFA enabled and the action requires step-up, you’ll see an MFA challenge surface. Handle it with
isMfaRequiredForAction before invoking deleteUser.
- On success, the client emits
logout (with reason: 'user-deleted') and userChanged ({ user: null }). Subscribe via onEvent or use the React hook useUser to react to the change.
Best practices
- Confirm first. Always require an explicit confirmation step (a typed-in account name or a “Delete” word match works well).
- Explain scope. Tell the user what is removed — wallets, balances, credentials, metadata — and that the action is irreversible.
- Clear local state. If you cache user data outside the SDK (Redux, query caches, IndexedDB), clear it on success.