Skip to content

PERS-api docs (2.0.7)

Download OpenAPI description
Overview
Languages
Servers
Mock server
https://docs.pers.ninja/_mock/swagger/
https://explorins-loyalty.ngrok.io/
https://api.pers.ninja/v2/

Tenants

Operations

Admins

Operations

Tokens

Operations

Campaigns

Operations

Campaign Tags

Operations

Campaign Tokens

Operations

Campaign Triggers

Operations

Campaign Engagements

Operations

Campaign Claims

Operations

Redemptions

Operations

Purchases

Operations

Businesses

Operations

Transactions

Operations

Users

Operations

User Account Management

User account management and profile operations for loyalty platform participants. Handles user registration, authentication, profile management, and account lifecycle.
User Operations:

•
Account Registration:
User signup and profile creation with verification

•
Authentication:
Secure login and session management

•
Profile Management:
User profile updates and preference configuration

•
Account Security:
Password management and two-factor authentication

•
Privacy Controls:
Data management and privacy settings for users

Get current user info

Request

Get authenticated user account info without balances

Security
projectKey or authJWT
curl -i -X GET \
  https://docs.pers.ninja/_mock/swagger/users/me \
  -H 'x-project-key: YOUR_API_KEY_HERE'

Responses

User found

Bodyapplication/json
idstringrequired
emailobject
firstNameobject or nullrequired

User first name

lastNameobject or nullrequired

User last name

externalIdobject or nullrequired

User external id

instagramAccountIdobject or nullrequired

Instagram account id

googleAccountNameobject or nullrequired

Google account name

customDataobjectrequired

Custom data

publicProfileobject or nullrequired

Public profile data

isActivebooleanrequired

Is active

currentSigningAccountIdobject

Current active signing account ID for external wallet operations

walletsArray of objects(PublicWalletDTO)required

User-owned counterfactual smart contract wallets that can receive tokens

wallets[].​idstringrequired

Unique identifier for the internal wallet

wallets[].​ownerTypenumberrequired

Owner type for polymorphic ownership

Value{"USER":"user","BUSINESS":"business","TENANT":"tenant","SYSTEM":"system","EXTERNAL":"external"}
Example: "user"
wallets[].​ownerIdstringrequired

Owner ID for polymorphic ownership

Example: "user_123"
wallets[].​walletManagementTypenumberrequired

Type of internal wallet

Value{"CUSTODIAL":"custodial","NON_CUSTODIAL":"non-custodial"}
wallets[].​addressstringrequired

CREATE2 generated address that can receive tokens

wallets[].​chainIdnumberrequired

Blockchain network chain identifier

wallets[].​statusnumberrequired

Current status of the wallet

Value{"PENDING":"pending","ACTIVE":"active","SUSPENDED":"suspended","ARCHIVED":"archived"}
wallets[].​ownerSigningAccountIdobject or null

ID of signing account that owns this internal wallet

wallets[].​tagsArray of stringsrequired

Tags associated with the wallet for categorization

wallets[].​createdAtstring(date-time)required

Timestamp when the wallet was created

wallets[].​updatedAtstring(date-time)required

Timestamp when the wallet was last updated

accountAddressobject or nullDeprecatedrequired

User account address

Response
application/json
{ "id": "string", "email": {}, "firstName": {}, "lastName": {}, "externalId": {}, "accountAddress": {}, "instagramAccountId": {}, "googleAccountName": {}, "customData": {}, "publicProfile": {}, "isActive": true, "currentSigningAccountId": {}, "wallets": [ { … } ] }

Update current user

Request

Update authenticated user account

Security
projectKey or authUserJWT
Bodyapplication/jsonrequired
emailstring
instagramAccountIdstring

User Instagram account id

googleAccountNamestring

User Google account name

firstNamestring

User first name

lastNamestring

User last name

externalIdstring

User external id

customDataobject

Custom data

publicProfileobject

Public profile data

isActiveboolean

User active status

curl -i -X PUT \
  https://docs.pers.ninja/_mock/swagger/users/me \
  -H 'Content-Type: application/json' \
  -H 'x-project-key: YOUR_API_KEY_HERE' \
  -d '{
    "email": "string",
    "instagramAccountId": "string",
    "googleAccountName": "string",
    "firstName": "string",
    "lastName": "string",
    "externalId": "string",
    "customData": {},
    "publicProfile": {},
    "isActive": true
  }'

Responses

User updated

Bodyapplication/json
idstringrequired
emailobject
firstNameobject or nullrequired

User first name

lastNameobject or nullrequired

User last name

externalIdobject or nullrequired

User external id

instagramAccountIdobject or nullrequired

Instagram account id

googleAccountNameobject or nullrequired

Google account name

customDataobjectrequired

Custom data

publicProfileobject or nullrequired

Public profile data

isActivebooleanrequired

Is active

currentSigningAccountIdobject

Current active signing account ID for external wallet operations

walletsArray of objects(PublicWalletDTO)required

User-owned counterfactual smart contract wallets that can receive tokens

wallets[].​idstringrequired

Unique identifier for the internal wallet

wallets[].​ownerTypenumberrequired

Owner type for polymorphic ownership

Value{"USER":"user","BUSINESS":"business","TENANT":"tenant","SYSTEM":"system","EXTERNAL":"external"}
Example: "user"
wallets[].​ownerIdstringrequired

Owner ID for polymorphic ownership

Example: "user_123"
wallets[].​walletManagementTypenumberrequired

Type of internal wallet

Value{"CUSTODIAL":"custodial","NON_CUSTODIAL":"non-custodial"}
wallets[].​addressstringrequired

CREATE2 generated address that can receive tokens

wallets[].​chainIdnumberrequired

Blockchain network chain identifier

wallets[].​statusnumberrequired

Current status of the wallet

Value{"PENDING":"pending","ACTIVE":"active","SUSPENDED":"suspended","ARCHIVED":"archived"}
wallets[].​ownerSigningAccountIdobject or null

ID of signing account that owns this internal wallet

wallets[].​tagsArray of stringsrequired

Tags associated with the wallet for categorization

wallets[].​createdAtstring(date-time)required

Timestamp when the wallet was created

wallets[].​updatedAtstring(date-time)required

Timestamp when the wallet was last updated

accountAddressobject or nullDeprecatedrequired

User account address

Response
application/json
{ "id": "string", "email": {}, "firstName": {}, "lastName": {}, "externalId": {}, "accountAddress": {}, "instagramAccountId": {}, "googleAccountName": {}, "customData": {}, "publicProfile": {}, "isActive": true, "currentSigningAccountId": {}, "wallets": [ { … } ] }

Get current user balance

Request

Get authenticated user account with current token balances

Security
projectKey or authUserJWT
curl -i -X GET \
  https://docs.pers.ninja/_mock/swagger/users/me/balance \
  -H 'x-project-key: YOUR_API_KEY_HERE'

Responses

User found

Bodyapplication/json
idstringrequired
emailobject
firstNameobject or nullrequired

User first name

lastNameobject or nullrequired

User last name

externalIdobject or nullrequired

User external id

instagramAccountIdobject or nullrequired

Instagram account id

googleAccountNameobject or nullrequired

Google account name

customDataobjectrequired

Custom data

publicProfileobject or nullrequired

Public profile data

isActivebooleanrequired

Is active

currentSigningAccountIdobject

Current active signing account ID for external wallet operations

walletsArray of objects(PublicWalletDTO)required

User-owned counterfactual smart contract wallets that can receive tokens

wallets[].​idstringrequired

Unique identifier for the internal wallet

wallets[].​ownerTypenumberrequired

Owner type for polymorphic ownership

Value{"USER":"user","BUSINESS":"business","TENANT":"tenant","SYSTEM":"system","EXTERNAL":"external"}
Example: "user"
wallets[].​ownerIdstringrequired

Owner ID for polymorphic ownership

Example: "user_123"
wallets[].​walletManagementTypenumberrequired

Type of internal wallet

Value{"CUSTODIAL":"custodial","NON_CUSTODIAL":"non-custodial"}
wallets[].​addressstringrequired

CREATE2 generated address that can receive tokens

wallets[].​chainIdnumberrequired

Blockchain network chain identifier

wallets[].​statusnumberrequired

Current status of the wallet

Value{"PENDING":"pending","ACTIVE":"active","SUSPENDED":"suspended","ARCHIVED":"archived"}
wallets[].​ownerSigningAccountIdobject or null

ID of signing account that owns this internal wallet

wallets[].​tagsArray of stringsrequired

Tags associated with the wallet for categorization

wallets[].​createdAtstring(date-time)required

Timestamp when the wallet was created

wallets[].​updatedAtstring(date-time)required

Timestamp when the wallet was last updated

tokenBalancesArray of objects(AccountTokenBalancesDTO)required
tokenBalances[].​accountAddressstringrequired
tokenBalances[].​tokenBalancesArray of objects(TokenBalanceDTO)required
tokenBalances[].​tokenBalances[].​contractAddressstringrequired
tokenBalances[].​tokenBalances[].​chainIdnumberrequired
tokenBalances[].​tokenBalances[].​balancenumberrequired
tokenBalances[].​tokenBalances[].​tokenNamestring
tokenBalances[].​tokenBalances[].​tokenSymbolstring
tokenBalances[].​tokenBalances[].​tokenTypestringrequired
tokenBalances[].​tokenBalances[].​tokenIdstring or nullrequired
tokenBalances[].​tokenBalances[].​metadataUristring or nullrequired
accountAddressobject or nullDeprecatedrequired

User account address

Response
application/json
{ "id": "string", "email": {}, "firstName": {}, "lastName": {}, "externalId": {}, "accountAddress": {}, "instagramAccountId": {}, "googleAccountName": {}, "customData": {}, "publicProfile": {}, "isActive": true, "currentSigningAccountId": {}, "wallets": [ { … } ], "tokenBalances": [ { … } ] }

Get current user status

Request

Get authenticated user status types

Security
projectKey or authUserJWT
curl -i -X GET \
  https://docs.pers.ninja/_mock/swagger/users/me/status \
  -H 'x-project-key: YOUR_API_KEY_HERE'

Responses

User status found

Bodyapplication/jsonArray [
namestringrequired

User Status Type name

descriptionstring

User Status Type description

minTokenBalancenumberrequired

User Status Type eligible Token Addresses

discountPercentagenumberrequired

User Status Type discount Rate in percentage

imageUrlstring

User Status Type image Url

idnumberrequired

User Status Type id

eligibleTokenAddressesArray of stringsrequired

User Status Type eligible Token Addresses

]
Response
application/json
[ { "name": "string", "description": "string", "minTokenBalance": 0, "discountPercentage": 0, "imageUrl": "string", "id": 0, "eligibleTokenAddresses": [ … ] } ]

Check if user exists

Request

Check if a user exists using any identifier field (id, email, etc.)

Security
projectKey
Query
filterValuestringrequired

Value to search for

filterKeystring

Field to use for identification (id, email, instagramAccountId, etc.)

Enum"id""email""instagramAccountId""externalId"
curl -i -X GET \
  'https://docs.pers.ninja/_mock/swagger/users/exists?filterValue=string&filterKey=id' \
  -H 'x-project-key: YOUR_API_KEY_HERE'

Responses

User existence check result

Bodyapplication/json
existsboolean
Example: true
identifierstring
Example: "email"
Response
application/json
{ "exists": true, "identifier": "email" }

Get all public profiles

Request

Get all public user profiles

Security
projectKey
Query
filterKeystring

Property key in publicProfile to filter by

filterValuestring

Value to match in the publicProfile property

curl -i -X GET \
  'https://docs.pers.ninja/_mock/swagger/users/public?filterKey=string&filterValue=string' \
  -H 'x-project-key: YOUR_API_KEY_HERE'

Responses

Public profiles

Bodyapplication/jsonArray [
idstringrequired
publicProfileobjectrequired

Public profile data

]
Response
application/json
[ { "id": "string", "publicProfile": {} } ]

Get public profile

Request

Get a public profile by user ID

Security
projectKey
Path
idstringrequired
curl -i -X GET \
  'https://docs.pers.ninja/_mock/swagger/users/public/{id}' \
  -H 'x-project-key: YOUR_API_KEY_HERE'

Responses

Public profile

Bodyapplication/json
idstringrequired
publicProfileobjectrequired

Public profile data

Response
application/json
{ "id": "string", "publicProfile": {} }

Get all user status types

Request

Get all available user status types

Security
projectKey
curl -i -X GET \
  https://docs.pers.ninja/_mock/swagger/users/status-types \
  -H 'x-project-key: YOUR_API_KEY_HERE'

Responses

User status types

Bodyapplication/jsonArray [
namestringrequired

User Status Type name

descriptionstring

User Status Type description

minTokenBalancenumberrequired

User Status Type eligible Token Addresses

discountPercentagenumberrequired

User Status Type discount Rate in percentage

imageUrlstring

User Status Type image Url

idnumberrequired

User Status Type id

eligibleTokenAddressesArray of stringsrequired

User Status Type eligible Token Addresses

]
Response
application/json
[ { "name": "string", "description": "string", "minTokenBalance": 0, "discountPercentage": 0, "imageUrl": "string", "id": 0, "eligibleTokenAddresses": [ … ] } ]

Create user status type

Request

Create user status type as admin

Security
tenantAdminJWT
Bodyapplication/jsonrequired
namestringrequired

User Status Type name

descriptionstring

User Status Type description

minTokenBalancenumberrequired

User Status Type eligible Token Addresses

discountPercentagenumberrequired

User Status Type discount Rate in percentage

imageUrlstring

User Status Type image Url

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"
  }'

Responses

User status type created

Bodyapplication/json
namestringrequired

User Status Type name

descriptionstring

User Status Type description

minTokenBalancenumberrequired

User Status Type eligible Token Addresses

discountPercentagenumberrequired

User Status Type discount Rate in percentage

imageUrlstring

User Status Type image Url

idnumberrequired

User Status Type id

eligibleTokenAddressesArray of stringsrequired

User Status Type eligible Token Addresses

Response
application/json
{ "name": "string", "description": "string", "minTokenBalance": 0, "discountPercentage": 0, "imageUrl": "string", "id": 0, "eligibleTokenAddresses": [ "string" ] }

Get user status type

Request

Get a user status type by ID

Security
projectKey
Path
idstringrequired
curl -i -X GET \
  'https://docs.pers.ninja/_mock/swagger/users/status-types/{id}' \
  -H 'x-project-key: YOUR_API_KEY_HERE'

Responses

User status type

Bodyapplication/json
namestringrequired

User Status Type name

descriptionstring

User Status Type description

minTokenBalancenumberrequired

User Status Type eligible Token Addresses

discountPercentagenumberrequired

User Status Type discount Rate in percentage

imageUrlstring

User Status Type image Url

idnumberrequired

User Status Type id

eligibleTokenAddressesArray of stringsrequired

User Status Type eligible Token Addresses

Response
application/json
{ "name": "string", "description": "string", "minTokenBalance": 0, "discountPercentage": 0, "imageUrl": "string", "id": 0, "eligibleTokenAddresses": [ "string" ] }

Update eligible token for status type

Request

Add or remove eligible token for user status type as admin

Security
tenantAdminJWT
Path
idstringrequired
tokenAddressstringrequired
curl -i -X PUT \
  'https://docs.pers.ninja/_mock/swagger/users/status-types/{id}/eligible-tokens/{tokenAddress}' \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>'

Responses

User status type updated

Bodyapplication/json
namestringrequired

User Status Type name

descriptionstring

User Status Type description

minTokenBalancenumberrequired

User Status Type eligible Token Addresses

discountPercentagenumberrequired

User Status Type discount Rate in percentage

imageUrlstring

User Status Type image Url

idnumberrequired

User Status Type id

eligibleTokenAddressesArray of stringsrequired

User Status Type eligible Token Addresses

Response
application/json
{ "name": "string", "description": "string", "minTokenBalance": 0, "discountPercentage": 0, "imageUrl": "string", "id": 0, "eligibleTokenAddresses": [ "string" ] }

Get user info

Request

Get user account info without balances (business with user management permission OR admin authentication required)

Security
tenantAdminJWT or projectKey
Bodyapplication/jsonrequired
emailstring
instagramAccountIdstring

User Instagram account id

googleAccountNamestring

User Google account name

firstNamestring

User first name

lastNamestring

User last name

externalIdstring

User external id

customDataobject

Custom data

publicProfileobject

Public profile data

isActiveboolean

User active status

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
  }'

Responses

User found

Bodyapplication/json
idstringrequired
emailobject
firstNameobject or nullrequired

User first name

lastNameobject or nullrequired

User last name

externalIdobject or nullrequired

User external id

instagramAccountIdobject or nullrequired

Instagram account id

googleAccountNameobject or nullrequired

Google account name

customDataobjectrequired

Custom data

publicProfileobject or nullrequired

Public profile data

isActivebooleanrequired

Is active

currentSigningAccountIdobject

Current active signing account ID for external wallet operations

walletsArray of objects(PublicWalletDTO)required

User-owned counterfactual smart contract wallets that can receive tokens

wallets[].​idstringrequired

Unique identifier for the internal wallet

wallets[].​ownerTypenumberrequired

Owner type for polymorphic ownership

Value{"USER":"user","BUSINESS":"business","TENANT":"tenant","SYSTEM":"system","EXTERNAL":"external"}
Example: "user"
wallets[].​ownerIdstringrequired

Owner ID for polymorphic ownership

Example: "user_123"
wallets[].​walletManagementTypenumberrequired

Type of internal wallet

Value{"CUSTODIAL":"custodial","NON_CUSTODIAL":"non-custodial"}
wallets[].​addressstringrequired

CREATE2 generated address that can receive tokens

wallets[].​chainIdnumberrequired

Blockchain network chain identifier

wallets[].​statusnumberrequired

Current status of the wallet

Value{"PENDING":"pending","ACTIVE":"active","SUSPENDED":"suspended","ARCHIVED":"archived"}
wallets[].​ownerSigningAccountIdobject or null

ID of signing account that owns this internal wallet

wallets[].​tagsArray of stringsrequired

Tags associated with the wallet for categorization

wallets[].​createdAtstring(date-time)required

Timestamp when the wallet was created

wallets[].​updatedAtstring(date-time)required

Timestamp when the wallet was last updated

accountAddressobject or nullDeprecatedrequired

User account address

Response
application/json
{ "id": "string", "email": {}, "firstName": {}, "lastName": {}, "externalId": {}, "accountAddress": {}, "instagramAccountId": {}, "googleAccountName": {}, "customData": {}, "publicProfile": {}, "isActive": true, "currentSigningAccountId": {}, "wallets": [ { … } ] }

Get user balance

Request

Get user account with current token balances (business with user management permission OR admin authentication required)

Security
tenantAdminJWT or projectKey
Bodyapplication/jsonrequired
emailstring
instagramAccountIdstring

User Instagram account id

googleAccountNamestring

User Google account name

firstNamestring

User first name

lastNamestring

User last name

externalIdstring

User external id

customDataobject

Custom data

publicProfileobject

Public profile data

isActiveboolean

User active status

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
  }'

Responses

User found

Bodyapplication/json
idstringrequired
emailobject
firstNameobject or nullrequired

User first name

lastNameobject or nullrequired

User last name

externalIdobject or nullrequired

User external id

instagramAccountIdobject or nullrequired

Instagram account id

googleAccountNameobject or nullrequired

Google account name

customDataobjectrequired

Custom data

publicProfileobject or nullrequired

Public profile data

isActivebooleanrequired

Is active

currentSigningAccountIdobject

Current active signing account ID for external wallet operations

walletsArray of objects(PublicWalletDTO)required

User-owned counterfactual smart contract wallets that can receive tokens

wallets[].​idstringrequired

Unique identifier for the internal wallet

wallets[].​ownerTypenumberrequired

Owner type for polymorphic ownership

Value{"USER":"user","BUSINESS":"business","TENANT":"tenant","SYSTEM":"system","EXTERNAL":"external"}
Example: "user"
wallets[].​ownerIdstringrequired

Owner ID for polymorphic ownership

Example: "user_123"
wallets[].​walletManagementTypenumberrequired

Type of internal wallet

Value{"CUSTODIAL":"custodial","NON_CUSTODIAL":"non-custodial"}
wallets[].​addressstringrequired

CREATE2 generated address that can receive tokens

wallets[].​chainIdnumberrequired

Blockchain network chain identifier

wallets[].​statusnumberrequired

Current status of the wallet

Value{"PENDING":"pending","ACTIVE":"active","SUSPENDED":"suspended","ARCHIVED":"archived"}
wallets[].​ownerSigningAccountIdobject or null

ID of signing account that owns this internal wallet

wallets[].​tagsArray of stringsrequired

Tags associated with the wallet for categorization

wallets[].​createdAtstring(date-time)required

Timestamp when the wallet was created

wallets[].​updatedAtstring(date-time)required

Timestamp when the wallet was last updated

tokenBalancesArray of objects(AccountTokenBalancesDTO)required
tokenBalances[].​accountAddressstringrequired
tokenBalances[].​tokenBalancesArray of objects(TokenBalanceDTO)required
tokenBalances[].​tokenBalances[].​contractAddressstringrequired
tokenBalances[].​tokenBalances[].​chainIdnumberrequired
tokenBalances[].​tokenBalances[].​balancenumberrequired
tokenBalances[].​tokenBalances[].​tokenNamestring
tokenBalances[].​tokenBalances[].​tokenSymbolstring
tokenBalances[].​tokenBalances[].​tokenTypestringrequired
tokenBalances[].​tokenBalances[].​tokenIdstring or nullrequired
tokenBalances[].​tokenBalances[].​metadataUristring or nullrequired
accountAddressobject or nullDeprecatedrequired

User account address

Response
application/json
{ "id": "string", "email": {}, "firstName": {}, "lastName": {}, "externalId": {}, "accountAddress": {}, "instagramAccountId": {}, "googleAccountName": {}, "customData": {}, "publicProfile": {}, "isActive": true, "currentSigningAccountId": {}, "wallets": [ { … } ], "tokenBalances": [ { … } ] }

Create or update user account

Request

Create or update user account(s). Supports single user (business/admin) or bulk operations (admin only)

Security
tenantAdminJWT or projectKey
Bodyapplication/jsonrequired

Single user object or array of users (bulk operations require admin authentication)

One of:
emailstring
instagramAccountIdstring

User Instagram account id

googleAccountNamestring

User Google account name

firstNamestring

User first name

lastNamestring

User last name

externalIdstring

User external id

customDataobject

Custom data

publicProfileobject

Public profile data

isActiveboolean

User active status

curl -i -X POST \
  https://docs.pers.ninja/_mock/swagger/users \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{}'

Responses

User(s) created/updated

Bodyapplication/json
One of:
idstringrequired
emailobject
firstNameobject or nullrequired

User first name

lastNameobject or nullrequired

User last name

externalIdobject or nullrequired

User external id

instagramAccountIdobject or nullrequired

Instagram account id

googleAccountNameobject or nullrequired

Google account name

customDataobjectrequired

Custom data

publicProfileobject or nullrequired

Public profile data

isActivebooleanrequired

Is active

currentSigningAccountIdobject

Current active signing account ID for external wallet operations

walletsArray of objects(PublicWalletDTO)required

User-owned counterfactual smart contract wallets that can receive tokens

wallets[].​idstringrequired

Unique identifier for the internal wallet

wallets[].​ownerTypenumberrequired

Owner type for polymorphic ownership

Value{"USER":"user","BUSINESS":"business","TENANT":"tenant","SYSTEM":"system","EXTERNAL":"external"}
Example: "user"
wallets[].​ownerIdstringrequired

Owner ID for polymorphic ownership

Example: "user_123"
wallets[].​walletManagementTypenumberrequired

Type of internal wallet

Value{"CUSTODIAL":"custodial","NON_CUSTODIAL":"non-custodial"}
wallets[].​addressstringrequired

CREATE2 generated address that can receive tokens

wallets[].​chainIdnumberrequired

Blockchain network chain identifier

wallets[].​statusnumberrequired

Current status of the wallet

Value{"PENDING":"pending","ACTIVE":"active","SUSPENDED":"suspended","ARCHIVED":"archived"}
wallets[].​ownerSigningAccountIdobject or null

ID of signing account that owns this internal wallet

wallets[].​tagsArray of stringsrequired

Tags associated with the wallet for categorization

wallets[].​createdAtstring(date-time)required

Timestamp when the wallet was created

wallets[].​updatedAtstring(date-time)required

Timestamp when the wallet was last updated

accountAddressobject or nullDeprecatedrequired

User account address

Response
application/json
[]

Get all users

Request

Get all users with role-based access. Project API key users get public profiles only. Admin users get full access with query parameters.

Security
tenantAdminJWT or projectKey
Query
sanitizestring

Sanitize user models: soft checks for current wallet address, hard overwrites wallet in case of update (use with caution, admin only)

mergestring

Merge user models: soft checks for current wallet address, hard overwrites wallet in case of update (use with caution, admin only)

curl -i -X GET \
  'https://docs.pers.ninja/_mock/swagger/users?sanitize=string&merge=string' \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>'

Responses

Users found

Bodyapplication/jsonArray [
idstringrequired
emailobject
firstNameobject or nullrequired

User first name

lastNameobject or nullrequired

User last name

externalIdobject or nullrequired

User external id

instagramAccountIdobject or nullrequired

Instagram account id

googleAccountNameobject or nullrequired

Google account name

customDataobjectrequired

Custom data

publicProfileobject or nullrequired

Public profile data

isActivebooleanrequired

Is active

currentSigningAccountIdobject

Current active signing account ID for external wallet operations

walletsArray of objects(PublicWalletDTO)required

User-owned counterfactual smart contract wallets that can receive tokens

wallets[].​idstringrequired

Unique identifier for the internal wallet

wallets[].​ownerTypenumberrequired

Owner type for polymorphic ownership

Value{"USER":"user","BUSINESS":"business","TENANT":"tenant","SYSTEM":"system","EXTERNAL":"external"}
Example: "user"
wallets[].​ownerIdstringrequired

Owner ID for polymorphic ownership

Example: "user_123"
wallets[].​walletManagementTypenumberrequired

Type of internal wallet

Value{"CUSTODIAL":"custodial","NON_CUSTODIAL":"non-custodial"}
wallets[].​addressstringrequired

CREATE2 generated address that can receive tokens

wallets[].​chainIdnumberrequired

Blockchain network chain identifier

wallets[].​statusnumberrequired

Current status of the wallet

Value{"PENDING":"pending","ACTIVE":"active","SUSPENDED":"suspended","ARCHIVED":"archived"}
wallets[].​ownerSigningAccountIdobject or null

ID of signing account that owns this internal wallet

wallets[].​tagsArray of stringsrequired

Tags associated with the wallet for categorization

wallets[].​createdAtstring(date-time)required

Timestamp when the wallet was created

wallets[].​updatedAtstring(date-time)required

Timestamp when the wallet was last updated

accountAddressobject or nullDeprecatedrequired

User account address

]
Response
application/json
[ { "id": "string", "email": {}, "firstName": {}, "lastName": {}, "externalId": {}, "accountAddress": {}, "instagramAccountId": {}, "googleAccountName": {}, "customData": {}, "publicProfile": {}, "isActive": true, "currentSigningAccountId": {}, "wallets": [ … ] } ]

Get user by ID

Request

Get user by any identifier field (admin only)

Security
tenantAdminJWT
Path
idstringrequired
curl -i -X GET \
  'https://docs.pers.ninja/_mock/swagger/users/{id}' \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>'

Responses

User found

Bodyapplication/json
idstringrequired
emailobject
firstNameobject or nullrequired

User first name

lastNameobject or nullrequired

User last name

externalIdobject or nullrequired

User external id

instagramAccountIdobject or nullrequired

Instagram account id

googleAccountNameobject or nullrequired

Google account name

customDataobjectrequired

Custom data

publicProfileobject or nullrequired

Public profile data

isActivebooleanrequired

Is active

currentSigningAccountIdobject

Current active signing account ID for external wallet operations

walletsArray of objects(PublicWalletDTO)required

User-owned counterfactual smart contract wallets that can receive tokens

wallets[].​idstringrequired

Unique identifier for the internal wallet

wallets[].​ownerTypenumberrequired

Owner type for polymorphic ownership

Value{"USER":"user","BUSINESS":"business","TENANT":"tenant","SYSTEM":"system","EXTERNAL":"external"}
Example: "user"
wallets[].​ownerIdstringrequired

Owner ID for polymorphic ownership

Example: "user_123"
wallets[].​walletManagementTypenumberrequired

Type of internal wallet

Value{"CUSTODIAL":"custodial","NON_CUSTODIAL":"non-custodial"}
wallets[].​addressstringrequired

CREATE2 generated address that can receive tokens

wallets[].​chainIdnumberrequired

Blockchain network chain identifier

wallets[].​statusnumberrequired

Current status of the wallet

Value{"PENDING":"pending","ACTIVE":"active","SUSPENDED":"suspended","ARCHIVED":"archived"}
wallets[].​ownerSigningAccountIdobject or null

ID of signing account that owns this internal wallet

wallets[].​tagsArray of stringsrequired

Tags associated with the wallet for categorization

wallets[].​createdAtstring(date-time)required

Timestamp when the wallet was created

wallets[].​updatedAtstring(date-time)required

Timestamp when the wallet was last updated

accountAddressobject or nullDeprecatedrequired

User account address

Response
application/json
{ "id": "string", "email": {}, "firstName": {}, "lastName": {}, "externalId": {}, "accountAddress": {}, "instagramAccountId": {}, "googleAccountName": {}, "customData": {}, "publicProfile": {}, "isActive": true, "currentSigningAccountId": {}, "wallets": [ { … } ] }

Update user (admin)

Request

Update user account as admin

Security
tenantAdminJWT
Path
idstringrequired
Bodyapplication/jsonrequired
emailstring
instagramAccountIdstring

User Instagram account id

googleAccountNamestring

User Google account name

firstNamestring

User first name

lastNamestring

User last name

externalIdstring

User external id

customDataobject

Custom data

publicProfileobject

Public profile data

isActiveboolean

User active status

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
  }'

Responses

User updated

Bodyapplication/json
idstringrequired
emailobject
firstNameobject or nullrequired

User first name

lastNameobject or nullrequired

User last name

externalIdobject or nullrequired

User external id

instagramAccountIdobject or nullrequired

Instagram account id

googleAccountNameobject or nullrequired

Google account name

customDataobjectrequired

Custom data

publicProfileobject or nullrequired

Public profile data

isActivebooleanrequired

Is active

currentSigningAccountIdobject

Current active signing account ID for external wallet operations

walletsArray of objects(PublicWalletDTO)required

User-owned counterfactual smart contract wallets that can receive tokens

wallets[].​idstringrequired

Unique identifier for the internal wallet

wallets[].​ownerTypenumberrequired

Owner type for polymorphic ownership

Value{"USER":"user","BUSINESS":"business","TENANT":"tenant","SYSTEM":"system","EXTERNAL":"external"}
Example: "user"
wallets[].​ownerIdstringrequired

Owner ID for polymorphic ownership

Example: "user_123"
wallets[].​walletManagementTypenumberrequired

Type of internal wallet

Value{"CUSTODIAL":"custodial","NON_CUSTODIAL":"non-custodial"}
wallets[].​addressstringrequired

CREATE2 generated address that can receive tokens

wallets[].​chainIdnumberrequired

Blockchain network chain identifier

wallets[].​statusnumberrequired

Current status of the wallet

Value{"PENDING":"pending","ACTIVE":"active","SUSPENDED":"suspended","ARCHIVED":"archived"}
wallets[].​ownerSigningAccountIdobject or null

ID of signing account that owns this internal wallet

wallets[].​tagsArray of stringsrequired

Tags associated with the wallet for categorization

wallets[].​createdAtstring(date-time)required

Timestamp when the wallet was created

wallets[].​updatedAtstring(date-time)required

Timestamp when the wallet was last updated

accountAddressobject or nullDeprecatedrequired

User account address

Response
application/json
{ "id": "string", "email": {}, "firstName": {}, "lastName": {}, "externalId": {}, "accountAddress": {}, "instagramAccountId": {}, "googleAccountName": {}, "customData": {}, "publicProfile": {}, "isActive": true, "currentSigningAccountId": {}, "wallets": [ { … } ] }

Create users from URL (admin)

Request

Create user accounts from external URL as admin

Security
tenantAdminJWT
Bodyapplication/jsonrequired
urlstringrequired
Example: "https://example.com/user-data"
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"
  }'

Responses

Users created

Bodyapplication/jsonArray [
idstringrequired
emailobject
firstNameobject or nullrequired

User first name

lastNameobject or nullrequired

User last name

externalIdobject or nullrequired

User external id

instagramAccountIdobject or nullrequired

Instagram account id

googleAccountNameobject or nullrequired

Google account name

customDataobjectrequired

Custom data

publicProfileobject or nullrequired

Public profile data

isActivebooleanrequired

Is active

currentSigningAccountIdobject

Current active signing account ID for external wallet operations

walletsArray of objects(PublicWalletDTO)required

User-owned counterfactual smart contract wallets that can receive tokens

wallets[].​idstringrequired

Unique identifier for the internal wallet

wallets[].​ownerTypenumberrequired

Owner type for polymorphic ownership

Value{"USER":"user","BUSINESS":"business","TENANT":"tenant","SYSTEM":"system","EXTERNAL":"external"}
Example: "user"
wallets[].​ownerIdstringrequired

Owner ID for polymorphic ownership

Example: "user_123"
wallets[].​walletManagementTypenumberrequired

Type of internal wallet

Value{"CUSTODIAL":"custodial","NON_CUSTODIAL":"non-custodial"}
wallets[].​addressstringrequired

CREATE2 generated address that can receive tokens

wallets[].​chainIdnumberrequired

Blockchain network chain identifier

wallets[].​statusnumberrequired

Current status of the wallet

Value{"PENDING":"pending","ACTIVE":"active","SUSPENDED":"suspended","ARCHIVED":"archived"}
wallets[].​ownerSigningAccountIdobject or null

ID of signing account that owns this internal wallet

wallets[].​tagsArray of stringsrequired

Tags associated with the wallet for categorization

wallets[].​createdAtstring(date-time)required

Timestamp when the wallet was created

wallets[].​updatedAtstring(date-time)required

Timestamp when the wallet was last updated

accountAddressobject or nullDeprecatedrequired

User account address

]
Response
application/json
[ { "id": "string", "email": {}, "firstName": {}, "lastName": {}, "externalId": {}, "accountAddress": {}, "instagramAccountId": {}, "googleAccountName": {}, "customData": {}, "publicProfile": {}, "isActive": true, "currentSigningAccountId": {}, "wallets": [ … ] } ]

Toggle user status

Request

Toggle user active status as admin

Security
tenantAdminJWT
Path
idstringrequired
curl -i -X PUT \
  'https://docs.pers.ninja/_mock/swagger/users/{id}/status' \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>'

Responses

User status updated

Bodyapplication/json
idstringrequired
emailobject
firstNameobject or nullrequired

User first name

lastNameobject or nullrequired

User last name

externalIdobject or nullrequired

User external id

instagramAccountIdobject or nullrequired

Instagram account id

googleAccountNameobject or nullrequired

Google account name

customDataobjectrequired

Custom data

publicProfileobject or nullrequired

Public profile data

isActivebooleanrequired

Is active

currentSigningAccountIdobject

Current active signing account ID for external wallet operations

walletsArray of objects(PublicWalletDTO)required

User-owned counterfactual smart contract wallets that can receive tokens

wallets[].​idstringrequired

Unique identifier for the internal wallet

wallets[].​ownerTypenumberrequired

Owner type for polymorphic ownership

Value{"USER":"user","BUSINESS":"business","TENANT":"tenant","SYSTEM":"system","EXTERNAL":"external"}
Example: "user"
wallets[].​ownerIdstringrequired

Owner ID for polymorphic ownership

Example: "user_123"
wallets[].​walletManagementTypenumberrequired

Type of internal wallet

Value{"CUSTODIAL":"custodial","NON_CUSTODIAL":"non-custodial"}
wallets[].​addressstringrequired

CREATE2 generated address that can receive tokens

wallets[].​chainIdnumberrequired

Blockchain network chain identifier

wallets[].​statusnumberrequired

Current status of the wallet

Value{"PENDING":"pending","ACTIVE":"active","SUSPENDED":"suspended","ARCHIVED":"archived"}
wallets[].​ownerSigningAccountIdobject or null

ID of signing account that owns this internal wallet

wallets[].​tagsArray of stringsrequired

Tags associated with the wallet for categorization

wallets[].​createdAtstring(date-time)required

Timestamp when the wallet was created

wallets[].​updatedAtstring(date-time)required

Timestamp when the wallet was last updated

accountAddressobject or nullDeprecatedrequired

User account address

Response
application/json
{ "id": "string", "email": {}, "firstName": {}, "lastName": {}, "externalId": {}, "accountAddress": {}, "instagramAccountId": {}, "googleAccountName": {}, "customData": {}, "publicProfile": {}, "isActive": true, "currentSigningAccountId": {}, "wallets": [ { … } ] }

Balances

Operations

Files

Operations

Web3 Chains

Operations

Contracts

Operations

Auth

Operations

Root

Operations

Well-known

Operations

webhooks

Business Types

Operations

Redemption Types

Operations

Redemption Redeems

Operations

Redemption Tokens

Operations

API Keys

Operations