Skip to main content

Create User

Creates a user. chain_id is optional and decides whether a custody wallet is created with the user:

  • With chain_id: a custody wallet is created asynchronously on that chain's default network. It appears in List User Wallets once the custody provider answers, and the platform then sends its KYC token to the new wallet on every network of the chain.
  • Without chain_id: the user is created with no wallet. Add one later with Create User Wallet, or import existing addresses through the migration endpoints.

The server never picks a chain for you. The user is stored before the chain is checked: if chain_id does not resolve, the request answers 400 but the user already exists without a wallet. Add the wallet with Create User Wallet instead of repeating the create (the email is now taken).

Required permission: user:create

Request​

POST /v2/users

Headers​

NameDescription
AuthorizationRequired. Bearer <access_token>
Content-TypeRequired. application/json

Body​

FieldTypeRequiredDescription
emailstringYesEmail address. Must be unique among live users
namestringYesFirst name
surnamestringYesLast name
identity_numberstringYesNational identity number
chain_idstringNoChain (24-character hex chains id) to create a custody wallet on. The chain must have a default network. Omit it to create the user without a wallet. Chains are listed by GET /v2/chains

Example​

curl --request POST \
--url '{{baseUrl}}/v2/users' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"email": "burkay.durdu@rudiq.com",
"name": "Burkay",
"surname": "Durdu",
"identity_number": "11111111111",
"chain_id": "6740e0a10000000000000101"
}'

Response​

Status Code: 201 Created

{
"id": "6a87455ad5f439809d488ac3",
"external_id": null,
"name": "Burkay",
"surname": "Durdu",
"email": "burkay.durdu@rudiq.com",
"identity_number": "11111111111",
"status": 0,
"created_at": "2026-08-21T09:14:02.511Z",
"kyc": null
}

The response has the shape of Get User by ID. It never contains a wallet: wallet creation is asynchronous.

Errors​

StatusCodeDescription
40010015Validation failed (missing field, malformed email, chain_id not 24 hex characters) — see details
40010015chain not found, or chain has no default network configured. The user has already been created
50010000Store failure. A second user with an email already in use is refused by the database and currently surfaces here

See Errors for the error format and common codes.