<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Why doesn&#x27;t user.update.complete fire when email verification changes verified flag?]]></title><description><![CDATA[<p dir="auto">When using FusionAuth's email verification flow, the <code>verified</code> flag in <code>user.data</code> changes, but the <code>user.update.complete</code> webhook event does not fire.</p>
<p dir="auto">We sync user state to external systems through the Kafka integration (using Azure Event Hub's Kafka endpoints). We expected <code>user.update.complete</code> to fire for all user mutations, including when the <code>verified</code> flag changes during the email verification process.</p>
<p dir="auto">Without this event firing, we have to listen to both <code>user.update.complete</code> and <code>user.email.verified</code> events. However, since both events contain the <code>verified</code> flag on the <code>user</code> object and can fire simultaneously, this creates race conditions downstream — the Kafka integration doesn't guarantee ordering unless the partitioning strategy is keyed on userId.</p>
<p dir="auto">Why doesn't <code>user.update.complete</code> fire when email verification changes the verified state? Is there a recommended approach to handle this scenario without encountering race conditions?</p>
]]></description><link>https://fusionauth.io/community/forum/topic/3200/why-doesn-t-user-update-complete-fire-when-email-verification-changes-verified-flag</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 00:09:21 GMT</lastBuildDate><atom:link href="https://fusionauth.io/community/forum/topic/3200.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 02 Oct 2026 23:48:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Why doesn&#x27;t user.update.complete fire when email verification changes verified flag? on Fri, 02 Oct 2026 23:48:17 GMT]]></title><description><![CDATA[<p dir="auto">The <code>user.update.complete</code> event intentionally does <strong>not</strong> fire when the <code>verified</code> flag changes through email verification. This is by design.</p>
<p dir="auto">Email verification is considered a distinct workflow separate from the general user update process in FusionAuth's event model. As noted in a related GitHub issue, the decision was made to introduce dedicated verification events rather than triggering <code>user.update.complete</code> because email verification "does not occur due to the Update User API, but because of a separate workflow." The <code>user.update.complete</code> event is reserved for changes made through the Update User API, while verification-specific changes trigger their own dedicated events.</p>
<h2>Recommended Solution</h2>
<p dir="auto">You should listen to these specific webhook events for verification state changes:</p>
<ul>
<li><a href="https://fusionauth.io/docs/extend/events-and-webhooks/events/user/user-email-verified" rel="nofollow ugc"><code>user.email.verified</code></a> — fires when an email address is verified (available since 1.8.0)</li>
<li><a href="https://fusionauth.io/docs/extend/events-and-webhooks/events/user/user-identity-verified" rel="nofollow ugc"><code>user.identity.verified</code></a> — fires when an identity (email or phone number) is verified (available since 1.59.0)</li>
</ul>
<h2>Handling Race Conditions</h2>
<p dir="auto">If you're concerned about race conditions when multiple events fire simultaneously:</p>
<ol>
<li><strong>Adjust your Kafka partitioning strategy</strong> to key on <code>userId</code> — this ensures all events for the same user go to the same partition and are processed in order</li>
<li><strong>Use event timestamps</strong> in your downstream consumers to deduplicate or order events correctly. Each event includes a <code>createInstant</code> field in the event object that can be used for ordering</li>
<li><strong>Design your sync logic to be idempotent</strong> so that processing events out of order doesn't cause inconsistent state</li>
</ol>
<p dir="auto">The separate <code>user.email.verified</code> and <code>user.identity.verified</code> events provide more granular control over what verification changes you respond to, which is generally more useful than a generic user update event.</p>
<h2>Related Documentation</h2>
<ul>
<li><a href="https://fusionauth.io/docs/extend/events-and-webhooks/events/user/user-update-complete" rel="nofollow ugc">User Update Complete Event</a> — documentation for the <code>user.update.complete</code> event</li>
<li><a href="https://fusionauth.io/docs/extend/events-and-webhooks/events/user/user-email-verified" rel="nofollow ugc">User Email Verified Event</a> — documentation for the <code>user.email.verified</code> event</li>
<li><a href="https://fusionauth.io/docs/extend/events-and-webhooks/events/user/user-identity-verified" rel="nofollow ugc">User Identity Verified Event</a> — documentation for the <code>user.identity.verified</code> event</li>
<li><a href="https://fusionauth.io/docs/extend/events-and-webhooks/kafka" rel="nofollow ugc">Kafka Integration</a> — comprehensive guide to FusionAuth's Kafka integration for consuming webhook events</li>
<li><a href="https://fusionauth.io/docs/extend/events-and-webhooks/webhook-event-log" rel="nofollow ugc">Webhook Event Log</a> — review events sent by FusionAuth with timing and result information</li>
</ul>
]]></description><link>https://fusionauth.io/community/forum/post/8737</link><guid isPermaLink="true">https://fusionauth.io/community/forum/post/8737</guid><dc:creator><![CDATA[FASupportBot]]></dc:creator><pubDate>Fri, 02 Oct 2026 23:48:17 GMT</pubDate></item></channel></rss>