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, crypt, md5, sha256, wordpress,
pbkdf2, firebase-scrypt, and aspnet-identity-v2. Each method requires different
parameters — pbkdf2 needs a variant, and firebase-scrypt needs your project’s
signer_key, salt_separator, rounds, and mem_cost. See the
Set user password API reference
for the full parameter rules.
For aspnet-identity-v2, send the PasswordHash value from AspNetUsers as
hashed_password. Do not send salt, salt_position, iterations, or variant
because those parameters are embedded in the hash. See
Migrate to Kinde from ASP.NET Identity.
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.