Get authenticated user account info without balances
- Get all users
PERS-api Documentation (2.2.2)
PERS API Documentation
This RESTful API enables seamless integration of Web3 loyalty, token management, and engagement features into your applications.
Usage Guidelines:
- RESTful Design: Resources are accessed via standard HTTP methods (GET, POST, PUT, DELETE) with predictable, resource-oriented URLs.
- Authentication: Secure access is enforced via Bearer Tokens (JWT) and Project Keys (defining the Tenant context).
- Data Format: All requests and responses utilize standard JSON formatting.
Explore the modules below for detailed endpoint specifications, schemas, and testing capabilities.
- Mock serverhttps://docs.pers.ninja/_mock/swagger/users/me
- https://api.pers.ninja/v2/users/me
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
https://docs.pers.ninja/_mock/swagger/users/me \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'User found
Universal identifier email for deterministic operations. Generated from B2B inputs (email, externalId) for wallet salt generation and external integrations.
User-owned counterfactual smart contract wallets that can receive tokens
Owner type for polymorphic ownership
Type of internal wallet
Current status of the wallet
ID of signing account that owns this internal wallet
{ "id": "string", "email": {}, "identifierEmail": "user123@user.pers.internal", "firstName": {}, "lastName": {}, "externalId": {}, "accountAddress": {}, "instagramAccountId": {}, "googleAccountName": {}, "customData": {}, "publicProfile": {}, "isActive": true, "currentSigningAccountId": {}, "wallets": [ { … } ], "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }
- Mock serverhttps://docs.pers.ninja/_mock/swagger/users/me
- https://api.pers.ninja/v2/users/me
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X PUT \
https://docs.pers.ninja/_mock/swagger/users/me \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"email": "string",
"instagramAccountId": "string",
"googleAccountName": "string",
"firstName": "string",
"lastName": "string",
"externalId": "string",
"customData": {},
"publicProfile": {},
"isActive": true
}'User updated
Universal identifier email for deterministic operations. Generated from B2B inputs (email, externalId) for wallet salt generation and external integrations.
User-owned counterfactual smart contract wallets that can receive tokens
Owner type for polymorphic ownership
Type of internal wallet
Current status of the wallet
ID of signing account that owns this internal wallet
{ "id": "string", "email": {}, "identifierEmail": "user123@user.pers.internal", "firstName": {}, "lastName": {}, "externalId": {}, "accountAddress": {}, "instagramAccountId": {}, "googleAccountName": {}, "customData": {}, "publicProfile": {}, "isActive": true, "currentSigningAccountId": {}, "wallets": [ { … } ], "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }
- Mock serverhttps://docs.pers.ninja/_mock/swagger/users/me/balance
- https://api.pers.ninja/v2/users/me/balance
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
https://docs.pers.ninja/_mock/swagger/users/me/balance \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'User found
Universal identifier email for deterministic operations. Generated from B2B inputs (email, externalId) for wallet salt generation and external integrations.
User-owned counterfactual smart contract wallets that can receive tokens
Owner type for polymorphic ownership
Type of internal wallet
Current status of the wallet
ID of signing account that owns this internal wallet
{ "id": "string", "email": {}, "identifierEmail": "user123@user.pers.internal", "firstName": {}, "lastName": {}, "externalId": {}, "accountAddress": {}, "instagramAccountId": {}, "googleAccountName": {}, "customData": {}, "publicProfile": {}, "isActive": true, "currentSigningAccountId": {}, "wallets": [ { … } ], "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "tokenBalances": [ { … } ] }
- Mock serverhttps://docs.pers.ninja/_mock/swagger/users/me/status
- https://api.pers.ninja/v2/users/me/status
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://docs.pers.ninja/_mock/swagger/users/me/status?page=0&limit=0' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'[ { "name": "string", "description": "string", "minTokenBalance": 0, "discountPercentage": 0, "imageUrl": "string", "id": 0, "eligibleTokenAddresses": [ … ] } ]
- Mock serverhttps://docs.pers.ninja/_mock/swagger/users/exists
- https://api.pers.ninja/v2/users/exists
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://docs.pers.ninja/_mock/swagger/users/exists?filterValue=string&filterKey=id' \
-H 'x-project-key: YOUR_API_KEY_HERE'{ "exists": true, "identifier": "email" }
- Mock serverhttps://docs.pers.ninja/_mock/swagger/users/public
- https://api.pers.ninja/v2/users/public
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://docs.pers.ninja/_mock/swagger/users/public?filterKey=string&filterValue=string&page=0&limit=0' \
-H 'x-project-key: YOUR_API_KEY_HERE'[ { "id": "string", "publicProfile": {} } ]
- Mock serverhttps://docs.pers.ninja/_mock/swagger/users/public/{id}
- https://api.pers.ninja/v2/users/public/{id}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://docs.pers.ninja/_mock/swagger/users/public/{id}' \
-H 'x-project-key: YOUR_API_KEY_HERE'{ "id": "string", "publicProfile": {} }
- Mock serverhttps://docs.pers.ninja/_mock/swagger/users/status-types
- https://api.pers.ninja/v2/users/status-types
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://docs.pers.ninja/_mock/swagger/users/status-types?page=0&limit=0' \
-H 'x-project-key: YOUR_API_KEY_HERE'[ { "name": "string", "description": "string", "minTokenBalance": 0, "discountPercentage": 0, "imageUrl": "string", "id": 0, "eligibleTokenAddresses": [ … ] } ]
- Mock serverhttps://docs.pers.ninja/_mock/swagger/users/status-types
- https://api.pers.ninja/v2/users/status-types
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://docs.pers.ninja/_mock/swagger/users/status-types \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"name": "string",
"description": "string",
"minTokenBalance": 0,
"discountPercentage": 0,
"imageUrl": "string"
}'{ "name": "string", "description": "string", "minTokenBalance": 0, "discountPercentage": 0, "imageUrl": "string", "id": 0, "eligibleTokenAddresses": [ "string" ] }
- Mock serverhttps://docs.pers.ninja/_mock/swagger/users/status-types/{id}
- https://api.pers.ninja/v2/users/status-types/{id}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://docs.pers.ninja/_mock/swagger/users/status-types/{id}' \
-H 'x-project-key: YOUR_API_KEY_HERE'{ "name": "string", "description": "string", "minTokenBalance": 0, "discountPercentage": 0, "imageUrl": "string", "id": 0, "eligibleTokenAddresses": [ "string" ] }
- Mock serverhttps://docs.pers.ninja/_mock/swagger/users/status-types/{id}/eligible-tokens/{tokenAddress}
- https://api.pers.ninja/v2/users/status-types/{id}/eligible-tokens/{tokenAddress}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X PUT \
'https://docs.pers.ninja/_mock/swagger/users/status-types/{id}/eligible-tokens/{tokenAddress}' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'{ "name": "string", "description": "string", "minTokenBalance": 0, "discountPercentage": 0, "imageUrl": "string", "id": 0, "eligibleTokenAddresses": [ "string" ] }
Request
Get user account info without balances (business with user management permission OR admin authentication required)
- Mock serverhttps://docs.pers.ninja/_mock/swagger/users/info
- https://api.pers.ninja/v2/users/info
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://docs.pers.ninja/_mock/swagger/users/info \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"email": "string",
"instagramAccountId": "string",
"googleAccountName": "string",
"firstName": "string",
"lastName": "string",
"externalId": "string",
"customData": {},
"publicProfile": {},
"isActive": true
}'User found
Universal identifier email for deterministic operations. Generated from B2B inputs (email, externalId) for wallet salt generation and external integrations.
User-owned counterfactual smart contract wallets that can receive tokens
Owner type for polymorphic ownership
Type of internal wallet
Current status of the wallet
ID of signing account that owns this internal wallet
{ "id": "string", "email": {}, "identifierEmail": "user123@user.pers.internal", "firstName": {}, "lastName": {}, "externalId": {}, "accountAddress": {}, "instagramAccountId": {}, "googleAccountName": {}, "customData": {}, "publicProfile": {}, "isActive": true, "currentSigningAccountId": {}, "wallets": [ { … } ], "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }
Request
Get user account with current token balances (business with user management permission OR admin authentication required)
- Mock serverhttps://docs.pers.ninja/_mock/swagger/users/balance
- https://api.pers.ninja/v2/users/balance
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://docs.pers.ninja/_mock/swagger/users/balance \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"email": "string",
"instagramAccountId": "string",
"googleAccountName": "string",
"firstName": "string",
"lastName": "string",
"externalId": "string",
"customData": {},
"publicProfile": {},
"isActive": true
}'User found
Universal identifier email for deterministic operations. Generated from B2B inputs (email, externalId) for wallet salt generation and external integrations.
User-owned counterfactual smart contract wallets that can receive tokens
Owner type for polymorphic ownership
Type of internal wallet
Current status of the wallet
ID of signing account that owns this internal wallet
{ "id": "string", "email": {}, "identifierEmail": "user123@user.pers.internal", "firstName": {}, "lastName": {}, "externalId": {}, "accountAddress": {}, "instagramAccountId": {}, "googleAccountName": {}, "customData": {}, "publicProfile": {}, "isActive": true, "currentSigningAccountId": {}, "wallets": [ { … } ], "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "tokenBalances": [ { … } ] }
Request
Create or update user account(s). Supports single user (business/admin) or bulk operations (admin only)
Single user object or array of users (bulk operations require admin authentication)
- Mock serverhttps://docs.pers.ninja/_mock/swagger/users
- https://api.pers.ninja/v2/users
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://docs.pers.ninja/_mock/swagger/users \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{}'User(s) created/updated
Universal identifier email for deterministic operations. Generated from B2B inputs (email, externalId) for wallet salt generation and external integrations.
User-owned counterfactual smart contract wallets that can receive tokens
Owner type for polymorphic ownership
Type of internal wallet
Current status of the wallet
ID of signing account that owns this internal wallet
[]
Request
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.
Merge duplicate users: soft = detect only, hard = auto-merge. Only checks duplicates for current page (fast). Admin only.
Search users by email, firstName, lastName, userIdentifier, externalId, or accountAddress (partial match, case-insensitive)
Sort by field (any scalar UserDTO field: id, email, identifierEmail, firstName, lastName, externalId, accountAddress, isActive, createdAt, updatedAt, etc.). Default: createdAt
- Mock serverhttps://docs.pers.ninja/_mock/swagger/users
- https://api.pers.ninja/v2/users
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://docs.pers.ninja/_mock/swagger/users?merge=soft&search=string&page=0&limit=0&sortBy=string&sortOrder=ASC' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'Users found
Universal identifier email for deterministic operations. Generated from B2B inputs (email, externalId) for wallet salt generation and external integrations.
User-owned counterfactual smart contract wallets that can receive tokens
Owner type for polymorphic ownership
Type of internal wallet
Current status of the wallet
ID of signing account that owns this internal wallet
[ { "id": "string", "email": {}, "identifierEmail": "user123@user.pers.internal", "firstName": {}, "lastName": {}, "externalId": {}, "accountAddress": {}, "instagramAccountId": {}, "googleAccountName": {}, "customData": {}, "publicProfile": {}, "isActive": true, "currentSigningAccountId": {}, "wallets": [ … ], "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" } ]
- Mock serverhttps://docs.pers.ninja/_mock/swagger/users/{id}
- https://api.pers.ninja/v2/users/{id}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://docs.pers.ninja/_mock/swagger/users/{id}' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'User found
Universal identifier email for deterministic operations. Generated from B2B inputs (email, externalId) for wallet salt generation and external integrations.
User-owned counterfactual smart contract wallets that can receive tokens
Owner type for polymorphic ownership
Type of internal wallet
Current status of the wallet
ID of signing account that owns this internal wallet
{ "id": "string", "email": {}, "identifierEmail": "user123@user.pers.internal", "firstName": {}, "lastName": {}, "externalId": {}, "accountAddress": {}, "instagramAccountId": {}, "googleAccountName": {}, "customData": {}, "publicProfile": {}, "isActive": true, "currentSigningAccountId": {}, "wallets": [ { … } ], "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }
- Mock serverhttps://docs.pers.ninja/_mock/swagger/users/{id}
- https://api.pers.ninja/v2/users/{id}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X PUT \
'https://docs.pers.ninja/_mock/swagger/users/{id}' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"email": "string",
"instagramAccountId": "string",
"googleAccountName": "string",
"firstName": "string",
"lastName": "string",
"externalId": "string",
"customData": {},
"publicProfile": {},
"isActive": true
}'User updated
Universal identifier email for deterministic operations. Generated from B2B inputs (email, externalId) for wallet salt generation and external integrations.
User-owned counterfactual smart contract wallets that can receive tokens
Owner type for polymorphic ownership
Type of internal wallet
Current status of the wallet
ID of signing account that owns this internal wallet
{ "id": "string", "email": {}, "identifierEmail": "user123@user.pers.internal", "firstName": {}, "lastName": {}, "externalId": {}, "accountAddress": {}, "instagramAccountId": {}, "googleAccountName": {}, "customData": {}, "publicProfile": {}, "isActive": true, "currentSigningAccountId": {}, "wallets": [ { … } ], "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }
- Mock serverhttps://docs.pers.ninja/_mock/swagger/users/bulk/url
- https://api.pers.ninja/v2/users/bulk/url
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://docs.pers.ninja/_mock/swagger/users/bulk/url \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"url": "https://example.com/user-data"
}'Users created
Universal identifier email for deterministic operations. Generated from B2B inputs (email, externalId) for wallet salt generation and external integrations.
User-owned counterfactual smart contract wallets that can receive tokens
Owner type for polymorphic ownership
Type of internal wallet
Current status of the wallet
ID of signing account that owns this internal wallet
[ { "id": "string", "email": {}, "identifierEmail": "user123@user.pers.internal", "firstName": {}, "lastName": {}, "externalId": {}, "accountAddress": {}, "instagramAccountId": {}, "googleAccountName": {}, "customData": {}, "publicProfile": {}, "isActive": true, "currentSigningAccountId": {}, "wallets": [ … ], "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" } ]
- Mock serverhttps://docs.pers.ninja/_mock/swagger/users/{id}/status
- https://api.pers.ninja/v2/users/{id}/status
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X PUT \
'https://docs.pers.ninja/_mock/swagger/users/{id}/status' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'User status updated
Universal identifier email for deterministic operations. Generated from B2B inputs (email, externalId) for wallet salt generation and external integrations.
User-owned counterfactual smart contract wallets that can receive tokens
Owner type for polymorphic ownership
Type of internal wallet
Current status of the wallet
ID of signing account that owns this internal wallet
{ "id": "string", "email": {}, "identifierEmail": "user123@user.pers.internal", "firstName": {}, "lastName": {}, "externalId": {}, "accountAddress": {}, "instagramAccountId": {}, "googleAccountName": {}, "customData": {}, "publicProfile": {}, "isActive": true, "currentSigningAccountId": {}, "wallets": [ { … } ], "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }