Skip to main content

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

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

Request Body

FieldTypeDescription
usersarrayRequired. 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

ReasonMeaning
missing_email_and_external_idRow had neither identifier.
duplicate_emailA user with the same email already exists.
duplicate_external_idA user with the same external_id already exists.
free-textUnexpected failure during create or publish.

Note: duplicate_wallet does not apply to this flow — wallets are generated after creation.

Status Codes

Status CodeDescription
200Success — per-row results returned.
400Bad Request — empty array or > 500 rows.
401Unauthorized — Invalid or missing authentication token.
500Internal Server Error.