POST
/
v1
/
user
/
create
/
e2e
curl --request POST \
  --url https://staging.terminal3.io/v1/user/create/e2e \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --header 'x-api-token: <x-api-token>' \
  --data '{
  "encrypted_profile": {
    "version": "<string>",
    "nonce": "<string>",
    "ephem_public_key": "<string>",
    "ciphertext": "<string>"
  }
}'
{
  "data": {
    "user_id": 123
  }
}

This API allows you to create a Terminal 3 user account based on the user’s wallet address. User data will be securely stored in decentralized storage.

The UserProfile schema must adhere to the following format. Please ask us for more details on the validation rules for each field.

JSON
{
email_address: string;
first_name: string;
middle_name?: string;
last_name: string;
user_name?: string;
residence_country?: CountryOptions;
residence_province?: ProvinceOptions;
residence_city?: CityOptions;
mobile_number?: number;
mobile_country_code?: string;
gender?: GenderOptions;
date_of_birth?: string;
language_primary?: LanguageOptions;
language_others?: LanguageOptions;
employment_status?: EmploymentStatusOptions;
employment_industry?: EmploymentIndustryOptions;
marital_status?: MaritalStatusOptions;
education?: EducationOptions;
household_income?: HouseholdIncomeOptions;
}

We also provide an SDK with a function called makeEncryptedUserSignedMsgWithPubKey for enterprises to encrypt the user profile with our public key and user signature, please contact us for more details.

Example of usage:

JavaScript
import { makeEncryptedUserSignedMsgWithPubKey } from "@terminal3/messaging_client";
import { deriveEncryptionPublicKey } from "@terminal3/messaging_core";

const t3PublicKey = "b/fo6+4q2FpC0X5Tv32I7s4uT1yaGPPgClsTztVw+UY=";

const msg = {
  first_name: "tom",
  last_name: "jones",
  email_address: "truong.nguyen+392183281@terminal3.io",
};

const userPrivateKey = "0xYourPrivateKey";
const userPublickey = deriveEncryptionPublicKey(userPrivateKey);

const encryptedUserMsg = await makeEncryptedUserSignedMsgWithPubKey(
  msg,
  null,
  t3PublicKey,
  true,
  userPrivateKey,
  userPublickey
);

console.log(JSON.stringify(encryptedUserMsg));

Example of payload:

JSON
{
  "encrypted_profile": {
    "version": "x25519-xsalsa20-poly1305",
    "nonce": "j85PmoUS+XCR79RBnZpY68imEtluKK1t",
    "ephem_public_key": "ZYAFFnmvyt55Q8dhZ2vpVcp5LXS572/oWrMTFMJ+jhc=",
    "ciphertext": "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"
  }
}

The payload is only valid within 1 minute!

Authorizations

Authorization
string
header
required

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

Headers

x-api-token
string
required
x-api-subclient-id
string

Body

application/json
encrypted_profile
object
required

Response

200
application/json
Success
data
object
required