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
| Name | Description |
|---|---|
Authorization | Required. Bearer token for authentication |
Content-Type | Required. Must be application/json |
Request Body
| Field | Type | Description |
|---|---|---|
email | string | Optional. Standard identifier. Required if external_id is absent. |
external_id | string | Optional. Opaque identifier for KVKK-anonymized migration. Required if email is absent. |
name | string | Optional. Dropped if absent. |
surname | string | Optional. Dropped if absent. |
kyc_sent | boolean | Optional, 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
| HTTP | Reason | Meaning |
|---|---|---|
| 400 | missing_email_and_external_id | Neither identifier was supplied. |
| 400 | duplicate_email | A user with the same email already exists. |
| 400 | duplicate_external_id | A user with the same external_id already exists. |
| 401 | — | Invalid or missing authentication token. |
| 500 | — | Internal Server Error. |
For batched imports use the Bulk endpoint or CSV upload instead.