Migrate Users Without Wallets (Bulk)
Migrates up to 500 users in a single request; wallets are generated asynchronously for each row. Failures are reported per row — the request itself succeeds with HTTP 200 even when individual rows are skipped.
Request
POST /v2/users/users/migrate/without-wallet/bulk
Headers
| Name | Description |
|---|---|
Authorization | Required. Bearer token for authentication |
Content-Type | Required. Must be application/json |
Request Body
| Field | Type | Description |
|---|---|---|
users | array | Required. 1–500 user objects. Each object follows the single endpoint schema. |
Example
curl --location '{{baseUrl}}/v2/users/users/migrate/without-wallet/bulk' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <token>' \
--data-raw '{
"users": [
{ "email": "classic@example.com", "name": "Classic", "surname": "User" },
{ "external_id": "EXT-A", "kyc_sent": true },
{ "external_id": "EXT-B", "email": "hybrid@example.com" }
]
}'
Response
Status Code: 200 OK
{
"total": 3,
"success": 3,
"skipped": 0,
"failed": 0,
"results": [
{
"email": "classic@example.com",
"user_id": "6913872755654191dede37da",
"status": "created"
},
{
"external_id": "EXT-A",
"user_id": "6913872755654191dede37db",
"status": "created"
},
{
"external_id": "EXT-B",
"email": "hybrid@example.com",
"user_id": "6913872755654191dede37dc",
"status": "created"
}
]
}
Each results[] entry uses the same shape documented for the with-wallet bulk endpoint.
Possible reason Values
| Reason | Meaning |
|---|---|
missing_email_and_external_id | Row had neither identifier. |
duplicate_email | A user with the same email already exists. |
duplicate_external_id | A user with the same external_id already exists. |
| free-text | Unexpected failure during create or publish. |
Note: duplicate_wallet does not apply to this flow — wallets are generated after creation.
Status Codes
| Status Code | Description |
|---|---|
| 200 | Success — per-row results returned. |
| 400 | Bad Request — empty array or > 500 rows. |
| 401 | Unauthorized — Invalid or missing authentication token. |
| 500 | Internal Server Error. |