Self Serve Migration
Self Serve Migration empowers organizations to migrate their customer data to LoginRadius independently using our comprehensive APIs and tools. This approach gives you complete control over the migration timeline, data handling, and process customization while maintaining the highest security standards.
Key Benefits
- Complete Control: Execute migrations on your schedule with custom data transformation
- Enhanced Security: Encrypted transfers with comprehensive audit trails and compliance support
- Cost Efficient: Leverage existing infrastructure without external dependencies
- Zero Downtime: Migrate users without impacting current operations
Supported Data Formats
Format | Use Case | Max File Size |
---|---|---|
JSON | API-based real-time migration | 10MB per request |
Password Hash Support
LoginRadius supports migration of existing password hashes to ensure users don't need to reset passwords.
Some of the supported hash types include:
- bcrypt
- scrypt
- SHA1, SHA256
- PBKDF2, and more
Refer to the Hashing Algorithm documentation for details.
For any other hash type, not directly listed on the above list, reach out to the LoginRadius Support Team at support@loginradius.com.
API-Based Migration
API-based migration provides real-time data transfer with immediate feedback and error handling. This method is ideal for applications that need to migrate users dynamically or maintain real-time synchronization.
Step 1: Authentication Setup
Obtain your API credentials from the LoginRadius Admin Console:
# Set your environment variables
export LR_API_KEY="your-lr-api-key"
export LR_API_SECRET="your-lr-api-secret"
Step 2: Bulk User Upload
Use the migration API to transfer user profiles:
curl -X POST "https://migration.loginradius.com/v2/bulk/upsert?apikey=${LR_API_KEY}&apisecret=${LR_API_SECRET}" \
-H "Content-Type: application/json" \
-d '{
"PasswordEncryption": {
"Type": "PBKDF2",
"IsPerPasswordSalt": true,
"NumberOfIteration": 100000,
"SaltKeyLength": 16,
"SubKeyLength": 32,
"Salt": "c2FsdFZhbHVlMTIz",
"SaltAttachType": "Prepend",
"PasswordHashEncodingType": "Base64",
"PasswordSaltEncodingType": "Base64"
},
"Profiles": [
{
"FirstName": "John",
"LastName": "Doe",
"FullName": "John Doe",
"UserName": "johndoe",
"Email": [
{
"Type": "Primary",
"Value": "john.doe@example.com"
}
],
"PhoneId": "+1234567890",
"PhoneNumbers": [
{
"PhoneType": "Mobile",
"PhoneNumber": "+1234567890"
}
],
"Password": "hashed_password_here",
"BirthDate": "1990-01-15",
"Gender": "M",
"Website": "https://johndoe.com",
"TimeZone": "America/New_York",
"LocalLanguage": "en",
"EmailVerified": true,
"IsActive": true,
"Addresses": [
{
"Type": "Home",
"Address1": "123 Main St",
"City": "New York",
"State": "NY",
"PostalCode": "10001",
"Country": "US"
}
],
"CustomFields": {
"user_id": "12345",
"registration_source": "web",
"subscription_tier": "premium"
}
}
]
}'
Data Mapping and Transformation
Standard Field Mapping
Refer to the following table to map your source fields to the LoginRadius user schema:
Source Field | LoginRadius Field | Data Type |
---|---|---|
email | Email[].Value | Array of Objects |
first_name | FirstName | String |
last_name | LastName | String |
full_name | FullName | String |
username | UserName | String |
phone | PhoneId | String |
phone_numbers | PhoneNumbers[] | Array of Objects |
password_hash | Password | String |
birth_date | BirthDate | String |
gender | Gender | String |
created_date | CreatedDate | String |
signup_date | SignupDate | String |
last_login | LastLoginDate | String |
is_verified | EmailVerified | Boolean |
is_active | IsActive | Boolean |
addresses | Addresses[] | Array of Objects |
website | Website | String |
profile_image | ImageUrl | String |
timezone | TimeZone | String |
language | LocalLanguage | String |
Custom Fields Support
LoginRadius supports custom fields for storing additional user attributes. Make sure that these custom fields are already added in our tenant:
{
"CustomFields": {
"user_id": "legacy_system_id_12345",
"subscription_tier": "premium",
"registration_source": "mobile_app",
"marketing_consent": true,
"last_purchase_date": "2023-12-15",
"preferred_language": "en-US",
"account_type": "business"
}
}
Troubleshooting
Common Issues and Solutions
Authentication Errors
- Invalid Credentials: Verify API key and secret are correct and active
- Permission Denied: Ensure your account has migration permissions enabled
- Token Expiration: Refresh authentication tokens as needed
Data Validation Failures
- Invalid Email Format: Check email addresses conform to RFC standards
- Missing Required Fields: Ensure all mandatory fields are provided
- Data Type Mismatches: Verify field types match the expected schema
Performance Issues
- Slow Upload Speed: Reduce batch sizes or increase processing intervals
- API Rate Limiting: Implement proper rate limiting and retry logic
- Memory Issues: Optimize data processing to handle large datasets efficiently