Skip to main content

Migrate User Without Wallet (Single)

Migrates a single user whose wallet should be generated by the platform. The user record is persisted synchronously; the wallet is generated asynchronously via the same mechanism as the standard Create User flow.

Request

POST /v2/users/users/migrate/without-wallet

Headers

NameDescription
AuthorizationRequired. Bearer token for authentication
Content-TypeRequired. Must be application/json

Request Body

FieldTypeDescription
emailstringOptional. Standard identifier. Required if external_id is absent.
external_idstringOptional. Opaque identifier for KVKK-anonymized migration. Required if email is absent.
namestringOptional. Dropped if absent.
surnamestringOptional. Dropped if absent.
kyc_sentbooleanOptional, default false. When true, the downstream wallet-generation consumer receives skip_kyc=true and does not publish a KYC token event.

At least one of email or external_id must be present.

Example — Classic mode

curl --location '{{baseUrl}}/v2/users/users/migrate/without-wallet' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <token>' \
--data-raw '{
"email": "auto@example.com",
"name": "Auto",
"surname": "Wallet",
"kyc_sent": false
}'

Example — KVKK mode

curl --location '{{baseUrl}}/v2/users/users/migrate/without-wallet' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <token>' \
--data-raw '{
"external_id": "EXT-9001",
"kyc_sent": true
}'

Response

Status Code: 201 Created

{
"id": "6913872755654191dede37da",
"external_id": "EXT-9001",
"name": "",
"surname": "",
"email": "",
"address": null,
"identity_number": "",
"kyc": {
"is_verified": true,
"token_sent": true,
"token_sent_at": "2026-06-01T12:34:56Z",
"token_tx_hash": null
}
}

address is null at creation time — the wallet is generated asynchronously. Use Get User By ID to poll for the populated address once the wallet has been provisioned.

Failure Modes

HTTPReasonMeaning
400missing_email_and_external_idNeither identifier was supplied.
400duplicate_emailA user with the same email already exists.
400duplicate_external_idA user with the same external_id already exists.
401Invalid or missing authentication token.
500Internal Server Error.

For batched imports use the Bulk endpoint or CSV upload instead.