Migrate to Kinde for user authentication
Get started
Use the Kinde Management API to create and provision users programmatically — the right approach when you need to intercept live sign-ups or password changes during a migration window, or when you control the login form in a custom auth system and can hook directly into the sign-in path.
For automated drip-feed migration (no code changes to your app), see Drip-feed migration instead.
create:users and update:user_passwordsBefore creating a user, check whether they already exist in Kinde to avoid duplicates.
GET https://your-kinde-domain.kinde.com/api/v1/users?email={user_email}Authorization: Bearer {access_token}POST https://your-kinde-domain.kinde.com/api/v1/userAuthorization: Bearer {access_token}Content-Type: application/json{ "profile": { "given_name": "Lee", "family_name": "Liu", "email": "lliu@company.com" }, "identities": [ { "type": "email", "details": { "email": "lliu@company.com" } } ]}A successful response returns the new user’s Kinde ID (id). Save this for the next step.
PUT https://your-kinde-domain.kinde.com/api/v1/users/{user_id}/passwordAuthorization: Bearer {access_token}Content-Type: application/json{ "hashed_password": "$2a$10$examplehashvalue", "hashing_method": "bcrypt", "is_temporary_password": false}Supported hashing_method values: bcrypt, md5, sha256, crypt, wordpress.
If you have access to the user’s plaintext password at the time of login (because your app owns the login form), you can set it directly:
{ "password": "userPlaintextPassword", "is_temporary_password": false}If a user changed their password during the migration window and their hash in Kinde is out of date, prompt them to reset it:
PATCH https://your-kinde-domain.kinde.com/api/v1/users/{user_id}Authorization: Bearer {access_token}Content-Type: application/json{ "is_password_reset_requested": true}The user will be prompted to set a new password on their next sign-in.
The typical pattern when running a migration window alongside live traffic:
GET /api/v1/users?email=).POST /api/v1/user) and set their password.PUT /api/v1/users/{id}/password).The Kinde Management API has rate limits. For large user bases:
For full API reference, see the Kinde Management API docs.