# Get all users

Get all users with role-based access. Use pagination parameters (page & limit) for optimal performance. With merge param, only checks duplicates for users on current page (smart merge). Project API key users get public profiles only. Admin users get full access.

Endpoint: GET /users
Version: 2.0.59
Security: authJWT, projectKey

## Security:

  - `authJWT` (unknown)
    http bearer JWT

  - `projectKey` (unknown)
    apiKey in header x-project-key

## Query parameters:

  - `merge` (string)
    Merge duplicate users: soft = detect only, hard = auto-merge. Only checks duplicates for current page (fast). Admin only.

  - `search` (string)
    Search users by email, firstName, lastName, userIdentifier, externalId, or accountAddress (partial match, case-insensitive)

  - `page` (number)
    Page number (1-based)

  - `limit` (number)
    Items per page

  - `sortBy` (string)
    Sort by field (any scalar UserDTO field: id, email, identifierEmail, firstName, lastName, externalId, accountAddress, isActive, createdAt, updatedAt, etc.). Default: createdAt

  - `sortOrder` (string)
    Sort order: ASC or DESC. Default: DESC

## Response 200:

  - `200` (unknown)
    Users found

## Response 200 fields (application/json):

  - `id` (string, required)

  - `email` (string)

  - `identifierEmail` (string, required)
    Universal identifier email for deterministic operations. Generated from B2B inputs (email, externalId) for wallet salt generation and external integrations.
    Example: user123@user.pers.internal

  - `firstName` (string, required)
    User first name

  - `lastName` (string, required)
    User last name

  - `externalId` (string, required)
    User external id

  - `accountAddress` (string, required)
    User account address

  - `instagramAccountId` (string, required)
    Instagram account id

  - `googleAccountName` (string, required)
    Google account name

  - `customData` (object, required)
    Custom data

  - `publicProfile` (object, required)
    Public profile data

  - `isActive` (boolean, required)
    Is active

  - `currentSigningAccountId` (string)
    Current active signing account ID for external wallet operations

  - `wallets` (array, required)
    User-owned counterfactual smart contract wallets that can receive tokens

  - `wallets.id` (string, required)
    Unique identifier for the internal wallet

  - `wallets.ownerType` (string, required)
    Owner type for polymorphic ownership
    Enum: "user", "business", "tenant", "system", "external"

  - `wallets.ownerId` (string, required)
    Owner ID for polymorphic ownership
    Example: user_123

  - `wallets.walletManagementType` (string, required)
    Type of internal wallet
    Enum: "custodial", "non-custodial"

  - `wallets.address` (string, required)
    CREATE2 generated address that can receive tokens

  - `wallets.chainId` (number, required)
    Blockchain network chain identifier

  - `wallets.status` (string, required)
    Current status of the wallet
    Enum: "pending", "active", "suspended", "archived"

  - `wallets.ownerSigningAccountId` (string)
    ID of signing account that owns this internal wallet

  - `wallets.tags` (array, required)
    Tags associated with the wallet for categorization

  - `wallets.createdAt` (string, required)
    Timestamp when the wallet was created

  - `wallets.updatedAt` (string, required)
    Timestamp when the wallet was last updated

  - `createdAt` (string, required)
    Timestamp when the user was created

  - `updatedAt` (string, required)
    Timestamp when the user was last updated

  - `registrationSource` (object)
    Registration source tracking for analytics - captures channel and attribution when user was created
    Example: {"channel":"web","medium":"referral","campaign":"launch_2026"}

  - `lastActivityAt` (string)
    Last activity timestamp. Updated whenever user generates tokens (login or refresh). Tracks last time user was active (~1 hour precision).

  - `activityCount` (number)
    Total activity count. Increments on every token generation (login + refresh). Measures true user engagement.
    Example: 42

  - `included` (object)
    Included related entities. Only populated when include parameter is specified.

  - `included.statusTypes` (array)
    User status types earned based on token balances (via ?include=status)

  - `included.statusTypes.name` (string, required)
    User Status Type name

  - `included.statusTypes.description` (string)
    User Status Type description

  - `included.statusTypes.minTokenBalance` (string, required)
    User Status Type eligible Token Addresses

  - `included.statusTypes.discountPercentage` (number, required)
    User Status Type discount Rate in percentage

  - `included.statusTypes.imageUrl` (string)
    User Status Type image Url

  - `included.statusTypes.eligibleTokenAddresses` (array)
    Eligible token contract addresses for this status type
    Example: ["0x1234...","0x5678..."]

  - `included.statusTypes.tags` (array)
    Tags for categorization and filtering
    Example: ["vip","premium","gold"]

  - `included.statusTypes.order` (number)
    Explicit ordering for status hierarchy (higher = more prestigious). If not set, falls back to minTokenBalance for ordering.
    Example: 100

  - `included.statusTypes.id` (number, required)
    User Status Type id

  - `included.tokenBalances` (array)
    Token balances for user wallets (via ?include=balances)

  - `included.tokenBalances.accountAddress` (string, required)

  - `included.tokenBalances.tokenBalances` (array, required)

  - `included.tokenBalances.tokenBalances.contractAddress` (string, required)

  - `included.tokenBalances.tokenBalances.chainId` (number, required)

  - `included.tokenBalances.tokenBalances.balance` (number, required)

  - `included.tokenBalances.tokenBalances.tokenName` (string)

  - `included.tokenBalances.tokenBalances.tokenSymbol` (string)

  - `included.tokenBalances.tokenBalances.tokenType` (string, required)

  - `included.tokenBalances.tokenBalances.tokenId` (string, required)

  - `included.tokenBalances.tokenBalances.metadataUri` (string, required)

  - `included.tokenBalances.tokenBalances.metadata` (object, required)
    Token metadata (loaded from IPFS/storage when needed for filtering)

