@clerk/backend
3.26.1 · 21 Oct 2026MIT3.5M / weekRepositoryHomepagenpmAtom feed
418 stable releases, newest first, by release line. Notes are quoted as the maintainers published them.
3.26.1
21 Oct 2026Stop accepting the legacy
cl_I7d4PD111IIIJWT category as a session or handshake token. Clerk no longer issues it, soauthenticateRequest()now returns a signed-out state with reasontoken-type-mismatchfor a token carrying it, the same as for other non-session categories.
3.26.0
20 Oct 2026Add webhook types for transactional email delivery, delays, bounces, complaints, failures, and suppressions. Bounce events distinguish
Permanent,Transient, andUndeterminedclassifications.verifyWebhook()preserves the original event timestamp and instance ID for outcome handlers. These types prepare for the transactional email pilot; receiving the events requires the corresponding backend rollout.Clarify issuer validation for session tokens and document that machine token verification ignores the issuer option.
Minor Changes
Add webhook types for transactional email delivery, delays, bounces, complaints, failures, and suppressions. Bounce events distinguish
Permanent,Transient, andUndeterminedclassifications.verifyWebhook()preserves the original event timestamp and instance ID for outcome handlers. These types prepare for the transactional email pilot; receiving the events requires the corresponding backend rollout.
Patch Changes
Clarify issuer validation for session tokens and document that machine token verification ignores the issuer option.
3.25.0
16 Oct 2026Added an optional
issueroption toverifyJwt(),verifyToken(), andauthenticateRequest()to validate the JWTissclaim against a string or list of allowed strings. ForverifyToken()andauthenticateRequest(), this applies only to session tokens. Omittingissuerpreserves existing behavior.
3.24.0
15 Oct 2026Add
deprovisionedto the BackendUserobject andUserJSON, so you can tell when Directory Sync has deactivated a user, including inuser.updatedwebhook payloads, without casting. It's separate frombanned: Directory Sync sets and clearsdeprovisioned, while you setbannedthrough the Dashboard or Backend API.
3.23.1 – 3.23.22 releases that only update dependencies@clerk/shared 4.40.0Show each
- 3.23.29 Oct 2026@clerk/shared 4.40.0
- 3.23.17 Oct 2026@clerk/shared 4.39.1
3.23.0
5 Oct 2026Add
clerkClient.invitations.deleteInvitation(invitationId), which permanently deletes an instance invitation and the stored copies of its invitation email. UnlikerevokeInvitation, this removes the invitation record itself, so it can be used to honor a data erasure request from someone who was invited but never signed up.Verified OAuth access tokens now expose
act, the RFC 8693 actor chain, when the token was issued by an OAuth 2.0 Token Exchange. It is available on theIdPOAuthAccessTokenreturned for both opaque and JWT access tokens.
Minor Changes
Add
clerkClient.invitations.deleteInvitation(invitationId), which permanently deletes an instance invitation and the stored copies of its invitation email. UnlikerevokeInvitation, this removes the invitation record itself, so it can be used to honor a data erasure request from someone who was invited but never signed up.Verified OAuth access tokens now expose
act, the RFC 8693 actor chain, when the token was issued by an OAuth 2.0 Token Exchange. It is available on theIdPOAuthAccessTokenreturned for both opaque and JWT access tokens.
3.22.0
1 Oct 2026- deprecated
SAML connections can trust several Identity Provider signing certificates at once.
SamlConnectionandEnterpriseConnection.samlConnectionnow includeidpCertificates, every trusted certificate with its validity window, andcreateSamlConnection(),updateSamlConnection(),createEnterpriseConnection()andupdateEnterpriseConnection()accept anidpCertificatesarray that replaces the connection's whole set. The singleidpCertificateparameter is deprecated in favor of the array; it keeps working and still replaces the whole set.
Minor Changes
- deprecated
SAML connections can trust several Identity Provider signing certificates at once.
SamlConnectionandEnterpriseConnection.samlConnectionnow includeidpCertificates, every trusted certificate with its validity window, andcreateSamlConnection(),updateSamlConnection(),createEnterpriseConnection()andupdateEnterpriseConnection()accept anidpCertificatesarray that replaces the connection's whole set. The singleidpCertificateparameter is deprecated in favor of the array; it keeps working and still replaces the whole set.
3.21.1
30 Sep 2026Update the
allowedOriginsJSDoc onclerkClient.instances.update()and theInstanceresource to note that Electron apps using@clerk/electronalso need the renderer's dev server origin, for examplehttp://localhost:5173, during development.Update the
lockUser()JSDoc to link the Dashboard's current Protect rules page.
Patch Changes
Update the
allowedOriginsJSDoc onclerkClient.instances.update()and theInstanceresource to note that Electron apps using@clerk/electronalso need the renderer's dev server origin, for examplehttp://localhost:5173, during development.Update the
lockUser()JSDoc to link the Dashboard's current Protect rules page.
3.21.0
29 Sep 2026verifyWebhook()now returns the event's top-leveltimestamp(milliseconds since epoch when the event occurred) andinstance_id, so webhook handlers can order events and identify the instance that sent them.Update the
allowedOriginsJSDoc for Electron apps to describe the custom renderer scheme used by@clerk/electron.Capture authentication timezones so Clerk emails can display timestamps in a stored user timezone.
Minor Changes
verifyWebhook()now returns the event's top-leveltimestamp(milliseconds since epoch when the event occurred) andinstance_id, so webhook handlers can order events and identify the instance that sent them.
Patch Changes
Update the
allowedOriginsJSDoc for Electron apps to describe the custom renderer scheme used by@clerk/electron.Capture authentication timezones so Clerk emails can display timestamps in a stored user timezone.
3.20.1
25 Sep 2026Only updates a dependency:@clerk/shared 4.36.0
3.20.0
24 Sep 2026Add an optional
nameQueryfilter tooauthApplications.list()to search OAuth applications by name or exact client ID.
Minor Changes
Add an optional
nameQueryfilter tooauthApplications.list()to search OAuth applications by name or exact client ID.
3.19.0
23 Sep 2026Fixes an issue where OAuth token validation did not correctly validate audience (
aud) claims. Previous usages that specifiedaudiencewere falsely passing. This upgrade will cause those to start rejecting if theaudienceindeed does not match the OAuth token'saudclaim, including cases where theaudclaim is omitted.Expose the optional
audaudience on verified OAuth access tokens.Clarify domain API documentation and deletion parameter names. The active domain cannot be deleted.
Minor Changes
Fixes an issue where OAuth token validation did not correctly validate audience (
aud) claims. Previous usages that specifiedaudiencewere falsely passing. This upgrade will cause those to start rejecting if theaudienceindeed does not match the OAuth token'saudclaim, including cases where theaudclaim is omitted.Adds an optional
audienceparameter toidPOAuthAccessToken.verify()
Expose the optional
audaudience on verified OAuth access tokens.
Patch Changes
Clarify domain API documentation and deletion parameter names. The active domain cannot be deleted.
3.18.1
15 Sep 2026Only updates a dependency:@clerk/shared 4.33.0
3.18.0
15 Sep 2026Add experimental
emails.createBatch()for submitting up to 100 transactional emails. Each message supports its own idempotency key and returns an independent success or error result.Transactional messages now support sender and reply-to display names, cross-domain Reply-To addresses, CC/BCC recipients, attachments, and custom headers. These options require a backend deployment that supports them.
Update docs deep links in JSDoc comments to match clerk.com's new heading anchors (
#get-tokenis now#gettoken,#o-auth-strategyis now#oauthstrategy, and so on).Update the
lockUser()JSDoc to point at the System page under Protect > Rules (/~/protect/rules/system), matching the Clerk Dashboard's Protect navigation.
Minor Changes
Add experimental
emails.createBatch()for submitting up to 100 transactional emails. Each message supports its own idempotency key and returns an independent success or error result.Transactional messages now support sender and reply-to display names, cross-domain Reply-To addresses, CC/BCC recipients, attachments, and custom headers. These options require a backend deployment that supports them.
Patch Changes
Update docs deep links in JSDoc comments to match clerk.com's new heading anchors (
#get-tokenis now#gettoken,#o-auth-strategyis now#oauthstrategy, and so on).Update the
lockUser()JSDoc to point at the System page under Protect > Rules (/~/protect/rules/system), matching the Clerk Dashboard's Protect navigation.
3.17.2
9 Sep 2026Update Clerk Dashboard links in option descriptions, error messages, and READMEs to use the active-instance shortcut (
https://dashboard.clerk.com/~/…) instead of the legacy/last-active?path=…URL.
Patch Changes
Update Clerk Dashboard links in option descriptions, error messages, and READMEs to use the active-instance shortcut (
https://dashboard.clerk.com/~/…) instead of the legacy/last-active?path=…URL.
3.17.1
2 Sep 2026Only updates a dependency:@clerk/shared 4.31.0
3.17.0
1 Sep 2026Add experimental methods for sending and retrieving internal transactional emails, including Clerk suppression state and reasons.
Reject JWT-template tokens presented as session tokens in the
Authorizationheader whenacceptsTokenis'any'or an array that includes'session_token'.authenticateRequest()now returns a signed-out state with reasontoken-type-mismatchfor such a token, matching the existingacceptsToken: 'session_token'behavior.
3.16.13
28 Aug 2026Align JSDoc link targets with the docs link rules: internal docs links don't open in a new tab (removed
{{ target: '_blank' }}from theInvitationMetadata link), while API reference links do (added it to theExternalAccountBackend API link and thecurrentUser()endpoint link).
Patch Changes
Align JSDoc link targets with the docs link rules: internal docs links don't open in a new tab (removed
{{ target: '_blank' }}from theInvitationMetadata link), while API reference links do (added it to theExternalAccountBackend API link and thecurrentUser()endpoint link).
3.16.11 – 3.16.122 releases that only update dependencies@clerk/shared 4.30.1Show each
- 3.16.1225 Aug 2026@clerk/shared 4.30.1
- 3.16.1124 Aug 2026@clerk/shared 4.30.0
3.16.10
20 Aug 2026Mark the internal
createBootstrapSignedOutStateas deprecated. It is no longer used by@clerk/nextjsand is kept only for older published SDK versions.
Patch Changes
Mark the internal
createBootstrapSignedOutStateas deprecated. It is no longer used by@clerk/nextjsand is kept only for older published SDK versions.
3.16.9
19 Aug 2026Reject JWT-template tokens where a session or handshake token is expected.
authenticateRequest()now returns a signed-out state with reasontoken-type-mismatchfor such a token in theAuthorizationheader or__sessioncookie. Tokens with no category tag, and instances configured to omit it, are unaffected.
3.16.8
18 Aug 2026Scope the JWKS cache per Clerk instance. The cache was keyed on the JWT
kidalone and shared across the whole process, so an application verifying tokens for more than one Clerk instance (for example the Dynamic Keys / multi-tenant pattern) could resolve a signing key that was fetched for a different instance. Keys are now cached separately per secret key and API URL, so a token can only be verified against the instance whose credentials fetched its signing key.Networkless verification with
jwtKeyhad the same flaw: the JWK derived from the PEM was cached bykidalone, so a process verifying tokens with differentjwtKeyvalues could resolve a key derived from another instance's PEM. The JWK is now always derived from thejwtKeythat was passed in.The
jwk-kid-mismatcherror message no longer lists the key IDs currently held in the cache.
3.16.7
18 Aug 2026Fix
Cookieheader parsing inauthenticateRequest()to follow RFC 6265 and guard against a non-stringiss. Legitimate cookies and JWTs are unaffected.
Patch Changes
Fix
Cookieheader parsing inauthenticateRequest()to follow RFC 6265 and guard against a non-stringiss. Legitimate cookies and JWTs are unaffected.
3.16.6
14 Aug 2026Only updates a dependency:@clerk/shared 4.29.1
3.16.5
13 Aug 2026Billing applied-discount snapshots now include optional
durationInCycles. Payment attempt and statement UIs use the original discount length instead of cycles remaining, and omit the duration copy when it is unavailable.
Patch Changes
Billing applied-discount snapshots now include optional
durationInCycles. Payment attempt and statement UIs use the original discount length instead of cycles remaining, and omit the duration copy when it is unavailable.
3.16.4
11 Aug 2026Update the
lockUser()documentation to link to the current Rules page in the Clerk Dashboard.
3.16.3
10 Aug 2026Only updates a dependency:@clerk/shared 4.28.1
3.16.1
7 Aug 2026Use a root-relative link (
/contact/support) for thepasswordHasher"contact support" reference so the generated API reference renders it as an internal same-tab link instead of an external one.
Patch Changes
Use a root-relative link (
/contact/support) for thepasswordHasher"contact support" reference so the generated API reference renders it as an internal same-tab link instead of an external one.
3.16.0
6 Aug 2026Add
clerkClient.users.removePassword(userId, params?)to remove a user's password through the Backend API. Password removal is allowed even when the user has no alternate sign-in method configured. Existing sessions remain active by default; pass{ signOutOfOtherSessions: true }to revoke them.Improve generated API reference links, expose
BillingSubscriptionItemStatus, and clarify thecreateUser()identification status documentation.
Minor Changes
Add
clerkClient.users.removePassword(userId, params?)to remove a user's password through the Backend API. Password removal is allowed even when the user has no alternate sign-in method configured. Existing sessions remain active by default; pass{ signOutOfOtherSessions: true }to revoke them.
Patch Changes
Improve generated API reference links, expose
BillingSubscriptionItemStatus, and clarify thecreateUser()identification status documentation.
3.15.1
4 Aug 2026Add the optional
emailAddressIdentificationStatusandphoneNumberIdentificationStatusparameters toCreateUserParams. The Backend API has supported these arrays onPOST /v1/userssince they shipped, butcreateUser()had no way to pass them, so every email address and phone number was necessarily created verified. Each array runs parallel toemailAddress/phoneNumber— one item per identifier, applied by position — and an item set to'reserved'creates that identifier unverified but still usable for sign-in and locked so no other user can claim it.The
createUser()documentation is corrected accordingly: it stated unconditionally that created email addresses and phone numbers are automatically verified, which is only the default.
Patch Changes
Add the optional
emailAddressIdentificationStatusandphoneNumberIdentificationStatusparameters toCreateUserParams. The Backend API has supported these arrays onPOST /v1/userssince they shipped, butcreateUser()had no way to pass them, so every email address and phone number was necessarily created verified. Each array runs parallel toemailAddress/phoneNumber— one item per identifier, applied by position — and an item set to'reserved'creates that identifier unverified but still usable for sign-in and locked so no other user can claim it.The
createUser()documentation is corrected accordingly: it stated unconditionally that created email addresses and phone numbers are automatically verified, which is only the default.
3.15.0
31 Jul 2026Update fields for BillingSubscription and BillingSubscriptionItem
Return a
TokenVerificationErrorfromdecodeJwtandverifyTokenfor tokens whose header, payload, or signature cannot be decoded.
Minor Changes
Update fields for BillingSubscription and BillingSubscriptionItem
Patch Changes
Return a
TokenVerificationErrorfromdecodeJwtandverifyTokenfor tokens whose header, payload, or signature cannot be decoded.
3.14.0
29 Jul 2026Align the
EnterpriseConnectionresponse resource with what the Backend API actually returns:
Minor Changes
Align the
EnterpriseConnectionresponse resource with what the Backend API actually returns:EnterpriseConnectionnow exposesprovider,logoPublicUrl,allowOrganizationAccountLinking,authenticatable,disableJitProvisioning, andcustomAttributes.EnterpriseConnectionSamlConnectionnow exposesactive,forceAuthn, andloginHint.EnterpriseConnectionOauthConfignow exposesproviderKey,authUrl,tokenUrl,userInfoUrl, andrequiresPkce.Deprecated properties the Backend API never returns, which were always
undefineddespite their declared types:allowSubdomainsonEnterpriseConnection(usesamlConnection.allowSubdomains), andidpMetadataandsyncUserAttributesonEnterpriseConnectionSamlConnection(use the top-levelsyncUserAttributes).organizationIdis now normalized tonullwhen the Backend API omits it, matching its declaredstring | nulltype. Properties backed by optional API fields (for exampleoauthConfig.clientIdand the SAML IdP fields) are now typed as possiblyundefinedto match runtime behavior.
3.13.2
27 Jul 2026Only updates dependencies, nothing else changes.
3.13.1
24 Jul 2026Reading the note…
3.13.0
23 Jul 2026Reading the note…
3.12.0
21 Jul 2026Reading the note…
3.11.7
16 Jul 2026Reading the note…
3.11.6
15 Jul 2026Reading the note…
3.11.5
14 Jul 2026Reading the note…
3.11.4
10 Jul 2026Reading the note…
3.11.3
9 Jul 2026Reading the note…
3.11.2
9 Jul 2026Reading the note…
3.11.1
7 Jul 2026Reading the note…
3.11.0
6 Jul 2026Reading the note…
3.10.0
1 Jul 2026Reading the note…
3.9.0
30 Jun 2026Reading the note…
3.8.5
29 Jun 2026Reading the note…
3.8.4
25 Jun 2026Reading the note…