Skip to main content
POST
/
api
/
v1
/
admin
/
register
/
personal
curl --request POST \
  --url https://staging.qash.ai/api/v1/admin/register/personal \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "email": "user@example.com"
}
'
{
  "success": true,
  "user": {
    "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "email": "user@example.com",
    "userType": "personal",
    "status": "pending"
  },
  "walletAddress": "0x71C7656EC7ab88b098defB751B7401B5f6d8976F",
  "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Requires an admin token with the owner or admin role in Authorization: Bearer <admin-token>.
Only email is required. All other fields are optional and can be provided later through profile update endpoints.

Returned tokens

TokenLifetimePurpose
accessTokenShort-livedAuthenticate API requests on behalf of the user
refreshToken30 daysObtain a new accessToken when it expires
Store both tokens securely. The refreshToken must be kept confidential — treat it with the same care as a password.

User status

The user.status field is always pending at registration. It transitions to active once the user completes KYC. You can use the issued tokens to authenticate requests regardless of status.
Each new registration triggers an internal notification to the QASH team.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

application/json

Personal user registration payload.

email
string<email>
required

Email address for the new user.

phone
string

Phone number in E.164 format.

Example:

"+15551234567"

firstName
string

First name of the user.

lastName
string

Last name of the user.

dateOfBirth
string<date>

Date of birth in ISO 8601 format.

Example:

"1990-05-20"

countryCode
string
default:US

ISO 3166-1 alpha-2 country code. Defaults to US.

Example:

"GT"

languagePreference
string
default:en

Preferred language code. Defaults to en.

Example:

"es"

Response

User created and tokens returned.

success
boolean
required
Example:

true

user
object
required
walletAddress
string
required

Blockchain wallet address generated for the user.

accessToken
string
required

Short-lived JWT for authenticating requests on behalf of the user.

refreshToken
string
required

Long-lived JWT (30 days) for obtaining new access tokens.