<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://docs.k-id.com/changelog</id>
    <title>k-ID Developer Hub Changelog</title>
    <updated>2026-09-08T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://docs.k-id.com/changelog"/>
    <subtitle>Stay up to date with the latest updates, improvements, and changes to the k-ID Developer platform.</subtitle>
    <icon>https://docs.k-id.com/img/favicon.ico</icon>
    <rights>Copyright © 2026 k-ID. All rights reserved.</rights>
    <entry>
        <title type="html"><![CDATA[PROHIBITED status documented for age gate widget redirects]]></title>
        <id>https://docs.k-id.com/changelog/age-gate-widget-prohibited-status</id>
        <link href="https://docs.k-id.com/changelog/age-gate-widget-prohibited-status"/>
        <updated>2026-09-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The age gate and end-to-end widgets return status=PROHIBITED when a player is below your product's minimum age. That status is now documented on the widget redirect URL, in the Widget.AgeGate.Result event, and in the API reference, so you can reliably detect and block below-minimum-age players.]]></summary>
        <content type="html"><![CDATA[<p>The age gate and end-to-end widgets return <code>status=PROHIBITED</code> when a player is below your product's minimum age. That status is now documented on the widget redirect URL, in the <code>Widget.AgeGate.Result</code> event, and in the API reference, so you can reliably detect and block below-minimum-age players.</p>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="whats-new">What's new<a href="https://docs.k-id.com/changelog/age-gate-widget-prohibited-status#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_KPhn" id="cdk-embedded-flow">CDK: Embedded flow<a href="https://docs.k-id.com/changelog/age-gate-widget-prohibited-status#cdk-embedded-flow" class="hash-link" aria-label="Direct link to CDK: Embedded flow" title="Direct link to CDK: Embedded flow" translate="no">​</a></h3>
<ul>
<li class=""><strong><a class="" href="https://docs.k-id.com/cdk/embedded-flow#redirect-callback">Receiving the result on the redirect URL</a></strong>: New section covering the <code>redirectUrl</code> callback query parameters (<code>status</code>, <code>sessionId</code>, <code>challengeId</code>, <code>age</code>) for both the age gate and end-to-end widgets, with a below-minimum-age example.</li>
<li class="">The event-handling example now branches on all three statuses (<code>PASS</code>, <code>FAIL</code>, <code>PROHIBITED</code>).</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_KPhn" id="event-reference">Event reference<a href="https://docs.k-id.com/changelog/age-gate-widget-prohibited-status#event-reference" class="hash-link" aria-label="Direct link to Event reference" title="Direct link to Event reference" translate="no">​</a></h3>
<ul>
<li class=""><strong><a class="" href="https://docs.k-id.com/events/dom-events/event-structures/widget-agegate-result"><code>Widget.AgeGate.Result</code></a></strong>: Added a status-values table (<code>PASS</code> / <code>FAIL</code> / <code>PROHIBITED</code>), the <code>data.age</code> field returned on <code>PROHIBITED</code>, and a <code>PROHIBITED</code> example.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_KPhn" id="api-reference-openapi">API reference (OpenAPI)<a href="https://docs.k-id.com/changelog/age-gate-widget-prohibited-status#api-reference-openapi" class="hash-link" aria-label="Direct link to API reference (OpenAPI)" title="Direct link to API reference (OpenAPI)" translate="no">​</a></h3>
<ul>
<li class="">The <code>redirectUrl</code> descriptions for <a class="" href="https://docs.k-id.com/api/endpoints/generate-age-gate-url"><code>/widget/generate-age-gate-url</code></a> and <a class="" href="https://docs.k-id.com/api/endpoints/generate-e-2-eurl"><code>/widget/generate-e2e-url</code></a> now list <code>PASS</code>, <code>FAIL</code>, and <code>PROHIBITED</code>, and explain that <code>PROHIBITED</code> appends the entered <code>age</code> and creates no session.</li>
</ul>
<p>Treat the redirect and event <code>status</code> as a UX hint: confirm the outcome server-side via the <a class="" href="https://docs.k-id.com/events/webhooks/event-types/challenge-statechange"><code>Challenge.StateChange</code></a> webhook or <a class="" href="https://docs.k-id.com/api/endpoints/get-session"><code>/session/get</code></a> before granting access.</p>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="documentation">Documentation<a href="https://docs.k-id.com/changelog/age-gate-widget-prohibited-status#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://docs.k-id.com/cdk/embedded-flow#redirect-callback">Embedded flow</a></li>
<li class=""><a class="" href="https://docs.k-id.com/events/dom-events/event-structures/widget-agegate-result"><code>Widget.AgeGate.Result</code></a></li>
</ul>]]></content>
        <category label="changelog" term="changelog"/>
        <category label="documentation" term="documentation"/>
        <category label="cdk" term="cdk"/>
        <category label="widgets" term="widgets"/>
        <category label="age-gate" term="age-gate"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Verification results now name the vendor]]></title>
        <id>https://docs.k-id.com/changelog/verification-provider-field</id>
        <link href="https://docs.k-id.com/changelog/verification-provider-field"/>
        <updated>2026-09-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Verification.Result webhooks and GET /age-verification/get-status now return provider, the vendor that ran the verification method.]]></summary>
        <content type="html"><![CDATA[<p><code>Verification.Result</code> webhooks and <code>GET /age-verification/get-status</code> now return <code>provider</code>, the vendor that ran the verification method.</p>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="whats-new">What's new<a href="https://docs.k-id.com/changelog/verification-provider-field#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new" translate="no">​</a></h2>
<ul>
<li class=""><strong><code>provider</code> on both the webhook and the endpoint.</strong> Present whenever <code>method</code> is present, so a completed verification tells you which vendor produced the result.</li>
<li class=""><strong>A method doesn't imply a vendor.</strong> <code>age-estimation-scan</code> is served by several, and <code>credit-card</code> carries the merchant of record when a payment stood in for the check. Use <code>provider</code> for your own logs and analytics, not for access-control decisions.</li>
<li class=""><strong>Nothing else changes.</strong> Every other field keeps its shape and presence rules.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="documentation">Documentation<a href="https://docs.k-id.com/changelog/verification-provider-field#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://docs.k-id.com/events/webhooks/event-types/verification-result"><code>Verification.Result</code> event reference</a></li>
<li class=""><a class="" href="https://docs.k-id.com/api/endpoints/get-age-verification-status"><code>GET /age-verification/get-status</code></a></li>
</ul>]]></content>
        <category label="changelog" term="changelog"/>
        <category label="api" term="api"/>
        <category label="webhooks" term="webhooks"/>
        <category label="age-verification" term="age-verification"/>
        <category label="verification-methods" term="verification-methods"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[New webhook for parent email address changes]]></title>
        <id>https://docs.k-id.com/changelog/session-approver-email-update-webhook</id>
        <link href="https://docs.k-id.com/changelog/session-approver-email-update-webhook"/>
        <updated>2026-09-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A parent can change the email address on their k-ID account, and the new Session.ApproverEmailUpdate webhook tells your product when they do.]]></summary>
        <content type="html"><![CDATA[<p>A parent can change the email address on their k-ID account, and the new <code>Session.ApproverEmailUpdate</code> webhook tells your product when they do.</p>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="whats-new">What's new<a href="https://docs.k-id.com/changelog/session-approver-email-update-webhook#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new" translate="no">​</a></h2>
<ul>
<li class=""><strong><code>Session.ApproverEmailUpdate</code>.</strong> Emitted once per child session when a parent commits an email change, so your server can update the parent email you store against that player. The payload carries <code>id</code> (the session), <code>productId</code>, <code>oldEmail</code>, and <code>newEmail</code>.</li>
<li class=""><strong>Nothing else about the session changes.</strong> It stays <code>ACTIVE</code>, keeps the same <code>sessionId</code> and permissions, and the child carries on uninterrupted. Don't send the player back through the age gate or consent.</li>
<li class=""><strong>Only children who have an active session.</strong> A child with no active session in your product has nothing to move, so no event fires for them. If that child later gets a session, it's created against the new address.</li>
<li class=""><strong>Opt in per endpoint.</strong> Select <code>Session.ApproverEmailUpdate</code> for your webhook endpoint on the product's <a class="" href="https://docs.k-id.com/compliance-studio/developer-settings">Developer Settings</a> page in Compliance Studio, or k-ID drops the event without a delivery attempt or an error. It's listed only once parent email change is enabled for your organization.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="documentation">Documentation<a href="https://docs.k-id.com/changelog/session-approver-email-update-webhook#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://docs.k-id.com/events/webhooks/event-types/session-approveremailupdate"><code>Session.ApproverEmailUpdate</code> event reference</a></li>
<li class=""><a class="" href="https://docs.k-id.com/events/webhooks/overview">Webhooks overview</a></li>
</ul>]]></content>
        <category label="changelog" term="changelog"/>
        <category label="api" term="api"/>
        <category label="webhooks" term="webhooks"/>
        <category label="sessions" term="sessions"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Guides for transactions and payment-as-verification]]></title>
        <id>https://docs.k-id.com/changelog/transactions-payment-verification-docs</id>
        <link href="https://docs.k-id.com/changelog/transactions-payment-verification-docs"/>
        <updated>2026-08-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Transactions and payment-as-verification now have full documentation on the developer hub.]]></summary>
        <content type="html"><![CDATA[<p>Transactions and payment-as-verification now have full documentation on the developer hub.</p>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="whats-new">What's new<a href="https://docs.k-id.com/changelog/transactions-payment-verification-docs#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new" translate="no">​</a></h2>
<ul>
<li class=""><strong>Transactions.</strong> Your product reports a child's purchases to k-ID, which surfaces them to the linked parent as a per-child Purchases view in Family Connect and in the recurring activity digest. Where you want a parent in the loop before a charge, a purchase-approval request asks them to approve it first, and the outcome arrives as the <code>Transaction.PurchaseApprovalResult</code> webhook. Both parts are configured per product in Compliance Studio.</li>
<li class=""><strong>Payment-as-verification.</strong> A completed card payment can stand in for the parental-consent step, mirroring the credit-card verification method one-to-one: it's honored exactly where that method is enabled for the session, credit-card funding only, and everywhere else the parent completes the standard verified parental consent flow unchanged.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="documentation">Documentation<a href="https://docs.k-id.com/changelog/transactions-payment-verification-docs#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://docs.k-id.com/concepts/transactions">Transactions</a> and the <a class="" href="https://docs.k-id.com/cdk/transactions">transactions integration guide</a></li>
<li class=""><a class="" href="https://docs.k-id.com/concepts/payment-verification">Payment-as-verification</a> and its <a class="" href="https://docs.k-id.com/cdk/transactions#payment-as-verification">integration section</a></li>
<li class=""><a class="" href="https://docs.k-id.com/events/webhooks/event-types/transaction-purchaseapprovalresult"><code>Transaction.PurchaseApprovalResult</code></a> webhook</li>
</ul>]]></content>
        <category label="changelog" term="changelog"/>
        <category label="api" term="api"/>
        <category label="webhooks" term="webhooks"/>
        <category label="transactions" term="transactions"/>
        <category label="compliance-studio" term="compliance-studio"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Guides for verified parent linking, screentime, and activity ingestion]]></title>
        <id>https://docs.k-id.com/changelog/parent-linking-screentime-activity-docs</id>
        <link href="https://docs.k-id.com/changelog/parent-linking-screentime-activity-docs"/>
        <updated>2026-08-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Three parent-controls capabilities now have full documentation on the developer hub: verified parent linking, screentime, and activity ingestion.]]></summary>
        <content type="html"><![CDATA[<p>Three parent-controls capabilities now have full documentation on the developer hub: verified parent linking, screentime, and activity ingestion.</p>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="whats-new">What's new<a href="https://docs.k-id.com/changelog/parent-linking-screentime-activity-docs#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new" translate="no">​</a></h2>
<ul>
<li class=""><strong>Verified parent linking (VPL).</strong> A player can invite their own parent into your product; once the parent verifies their identity, they can see and set that player's controls, for example, screentime. VPL is a link, not a gate: nothing is blocked, and your product keeps working whether or not the parent accepts. The <code>Session.Unlink</code> webhook tells you when either side ends a link. VPL is enabled per developer organization.</li>
<li class=""><strong>Screentime.</strong> A parent sets daily limits, quiet hours, and break reminders for their child in Family Connect. Your product reports usage and honors the verdict k-ID returns; k-ID holds the rules, counts usage per child per day, and evaluates the schedule. Each limit is preceded by a warning event so a player can reach a save point, and a child can ask for more time through a screentime override.</li>
<li class=""><strong>Activity ingestion.</strong> Your product reports what a child did by pushing records against activity types you declare per product in Compliance Studio. k-ID stores and aggregates those records into the surfaces a trusted adult reads in Family Connect, including a recurring digest email. Activity is inbound only.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="documentation">Documentation<a href="https://docs.k-id.com/changelog/parent-linking-screentime-activity-docs#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://docs.k-id.com/concepts/access-features-consent/vpl">Verified parent linking</a> and the <a class="" href="https://docs.k-id.com/get-started/quickstart-guides/parent-linking">parent linking quick start</a></li>
<li class=""><a class="" href="https://docs.k-id.com/concepts/screentime">Screentime</a> and the <a class="" href="https://docs.k-id.com/cdk/screentime">screentime integration guide</a></li>
<li class=""><a class="" href="https://docs.k-id.com/concepts/activity">Activity</a> and the <a class="" href="https://docs.k-id.com/cdk/activity-ingestion">activity ingestion guide</a></li>
</ul>]]></content>
        <category label="changelog" term="changelog"/>
        <category label="api" term="api"/>
        <category label="webhooks" term="webhooks"/>
        <category label="screentime" term="screentime"/>
        <category label="activity" term="activity"/>
        <category label="compliance-studio" term="compliance-studio"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Version history and rollback in Compliance Studio]]></title>
        <id>https://docs.k-id.com/changelog/version-history-and-rollback</id>
        <link href="https://docs.k-id.com/changelog/version-history-and-rollback"/>
        <updated>2026-08-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Every configuration a product has published is now kept and listed, and an administrator can point Live back at a configuration it served before without waiting on k-ID.]]></summary>
        <content type="html"><![CDATA[<p>Every configuration a product has published is now kept and listed, and an administrator can point <strong>Live</strong> back at a configuration it served before without waiting on k-ID.</p>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="whats-new">What's new<a href="https://docs.k-id.com/changelog/version-history-and-rollback#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new" translate="no">​</a></h2>
<ul>
<li class=""><strong>The History tab.</strong> A product now has a History tab holding two sections. <strong>Activity</strong> lists everything that has happened to the product, and any entry that changed the configuration carries a <strong>View changes</strong> link showing exactly what that one entry changed. <strong>Versions</strong> lists every configuration published to Live and to Test, newest first, with the one being served marked <strong>Current</strong>.</li>
<li class=""><strong>Rollback.</strong> The version Live is serving offers <strong>Rollback</strong>, which repoints Live at the configuration published before it. It doesn't create a new version, so numbering is unaffected and the version you rolled off stays in the list and can be made current again. A rollback takes effect within minutes, with no review step, so the confirmation shows the full diff of what Live would serve.</li>
<li class=""><strong>Reset to published.</strong> A working copy with unpublished edits can be reset back to whatever Live or Test is serving, previewed the same way. This is separate from a rollback: a rollback changes what players are served and leaves your working copy alone, a reset does the opposite.</li>
<li class=""><strong>Naming a version.</strong> Versions can be given a name, so <code>Live v7</code> can also read as "pre-launch tuning" when someone comes looking a month later.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="documentation">Documentation<a href="https://docs.k-id.com/changelog/version-history-and-rollback#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://docs.k-id.com/compliance-studio/version-history">Version history and rollback</a></li>
<li class=""><a class="" href="https://docs.k-id.com/compliance-studio/testing-and-publishing">Testing and publishing</a></li>
</ul>]]></content>
        <category label="changelog" term="changelog"/>
        <category label="compliance-studio" term="compliance-studio"/>
        <category label="version-history" term="version-history"/>
        <category label="rollback" term="rollback"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Protect essential product dependencies with a new mode on /session/delete]]></title>
        <id>https://docs.k-id.com/changelog/session-delete-essential-dependencies</id>
        <link href="https://docs.k-id.com/changelog/session-delete-essential-dependencies"/>
        <updated>2026-08-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[/session/delete can now protect (or clean up) other products that depend on the session being deleted.]]></summary>
        <content type="html"><![CDATA[<p><code>/session/delete</code> can now protect (or clean up) other products that depend on the session being deleted.</p>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="whats-new">What's new<a href="https://docs.k-id.com/changelog/session-delete-essential-dependencies#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new" translate="no">​</a></h2>
<ul>
<li class=""><strong><code>essentialDependencies</code> on <code>POST /session/delete</code>.</strong> When a product is configured as <em>essential</em> to other products, deleting its session used to silently leave the dependent products' sessions behind, without the consent basis they relied on. The new field lets you choose what happens instead, on both the default revoke and <code>hardDelete</code> paths.</li>
<li class=""><strong><code>block</code> refuses the delete instead of stranding a dependent.</strong> While the player still holds an active product that depends on the one being deleted, the call returns <code>ESSENTIAL_DEPENDENTS_EXIST</code> and names the dependent product IDs. No enablement needed.</li>
<li class=""><strong><code>cascade</code> deletes the dependent sessions too</strong>, then the addressed session, each with its own webhook and (for hard deletes) its own deletion record. Opt-in per developer, because it removes sessions you didn't name (sending it without enablement returns <code>FEATURE_DISABLED</code>), and it requires a server-side API key rather than a client access token.</li>
<li class=""><strong>Every existing call is unaffected.</strong> Omitting the field, or sending <code>ignore</code>, behaves exactly as <code>/session/delete</code> always has, permanently. This is stable, opt-in surface, not a step ahead of a default change.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="documentation">Documentation<a href="https://docs.k-id.com/changelog/session-delete-essential-dependencies#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://docs.k-id.com/api/endpoints/delete-session"><code>/session/delete</code> API reference</a></li>
<li class=""><a class="" href="https://docs.k-id.com/concepts/access-features-consent/sessions#deleting-sessions-from-your-integration">Sessions → Deleting sessions from your integration</a></li>
</ul>]]></content>
        <category label="changelog" term="changelog"/>
        <category label="api" term="api"/>
        <category label="sessions" term="sessions"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Google Play Age Signals v0.0.4 `ageRangeSource` is now accepted]]></title>
        <id>https://docs.k-id.com/changelog/google-play-age-range-source</id>
        <link href="https://docs.k-id.com/changelog/google-play-age-range-source"/>
        <updated>2026-08-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[k-ID now accepts the ageRangeSource value from Google Play Age Signals v0.0.4 as the declarationType on a google-play platform age signal.]]></summary>
        <content type="html"><![CDATA[<p>k-ID now accepts the <code>ageRangeSource</code> value from Google Play Age Signals v0.0.4 as the <code>declarationType</code> on a <code>google-play</code> platform age signal.</p>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="whats-new">What's new<a href="https://docs.k-id.com/changelog/google-play-age-range-source#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new" translate="no">​</a></h2>
<ul>
<li class=""><strong><code>ageRangeSource</code> on the <code>google-play</code> signal.</strong> Google Play Age Signals v0.0.4 replaced <code>userStatus</code> with <code>ageRangeSource</code>. Provide the <code>ageRangeSource</code> value from the <a href="https://developer.android.com/google/play/age-signals/understand-age-signals-responses" target="_blank" rel="noopener noreferrer" class="">Google Play age signals responses</a> as the <code>declarationType</code> on your <code>PlatformAgeSignal</code> when you call the age gate and session endpoints.</li>
<li class=""><strong>Deprecated <code>userStatus</code> values still work.</strong> k-ID continues to accept the legacy <code>userStatus</code> values for stores still on the earlier schema, so signals from apps that haven't migrated are unaffected.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="documentation">Documentation<a href="https://docs.k-id.com/changelog/google-play-age-range-source#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://docs.k-id.com/cdk/age-signals/overview">Platform age signals overview</a></li>
<li class=""><a class="" href="https://docs.k-id.com/cdk/age-signals/platform-details#google-play">Platform signal details → Google Play</a></li>
</ul>]]></content>
        <category label="changelog" term="changelog"/>
        <category label="cdk" term="cdk"/>
        <category label="age-signals" term="age-signals"/>
        <category label="platform-age-signals" term="platform-age-signals"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Email age estimation-only age verification endpoint]]></title>
        <id>https://docs.k-id.com/changelog/perform-email-age-estimation-endpoint</id>
        <link href="https://docs.k-id.com/changelog/perform-email-age-estimation-endpoint"/>
        <updated>2026-07-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[There is now a dedicated /age-verification/perform-email-age-estimation endpoint for running age verification with email age estimation as the only method, alongside the existing single-method endpoints (ID, AgeKey, ConnectID).]]></summary>
        <content type="html"><![CDATA[<p>There is now a dedicated <code>/age-verification/perform-email-age-estimation</code> endpoint for running age verification with email age estimation as the only method, alongside the existing single-method endpoints (ID, AgeKey, ConnectID).</p>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="whats-new">What's new<a href="https://docs.k-id.com/changelog/perform-email-age-estimation-endpoint#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new" translate="no">​</a></h2>
<ul>
<li class=""><strong><code>POST /age-verification/perform-email-age-estimation</code>.</strong> Bypasses automatic method selection and verifies the user with email age estimation only. It takes the same request shape as the other single-method endpoints (<code>jurisdiction</code>, <code>subject</code>, <code>criteria</code>, and optional <code>options.redirectUrl</code> / <code>options.locale</code>) and returns <code>id</code>, <code>url</code>, and <code>shortUrl</code>. The <code>subject.email</code> field is optional; if you omit it, the user provides their email on the hosted verification page.</li>
<li class=""><strong>18+ signal.</strong> Email age estimation is an 18+ signal, not a precise age estimate. It can only establish that a subject is 18 or older and cannot distinguish younger age bands, so matching the request criteria to that capability is your responsibility.</li>
<li class=""><strong>Status and results unchanged.</strong> Poll <a class="" href="https://docs.k-id.com/api/endpoints/get-age-verification-status"><code>/age-verification/get-status</code></a> or handle the <code>Verification.Result</code> webhook as usual.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="documentation">Documentation<a href="https://docs.k-id.com/changelog/perform-email-age-estimation-endpoint#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://docs.k-id.com/agekit-plus/single-method-flow">Single-method verification flow</a></li>
<li class=""><a class="" href="https://docs.k-id.com/concepts/verification-methods">Verification methods → Email address age estimation</a></li>
</ul>]]></content>
        <category label="changelog" term="changelog"/>
        <category label="api" term="api"/>
        <category label="age-verification" term="age-verification"/>
        <category label="verification-methods" term="verification-methods"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Apple iOS "confirmed" age signals are now accepted]]></title>
        <id>https://docs.k-id.com/changelog/apple-ios-confirmed-declaration-type</id>
        <link href="https://docs.k-id.com/changelog/apple-ios-confirmed-declaration-type"/>
        <updated>2026-07-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[k-ID now accepts Apple's confirmed declaration type as a verified platform age signal for players on iOS 26.5 and later.]]></summary>
        <content type="html"><![CDATA[<p>k-ID now accepts Apple's <code>confirmed</code> declaration type as a verified platform age signal for players on iOS 26.5 and later.</p>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="whats-new">What's new<a href="https://docs.k-id.com/changelog/apple-ios-confirmed-declaration-type#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new" translate="no">​</a></h2>
<ul>
<li class=""><strong><code>confirmed</code> is a verified Apple declaration type.</strong> Starting in iOS 26.5, Apple's Age Range Service returns only <code>selfDeclared</code>, <code>guardianDeclared</code>, or <code>confirmed</code>, where <code>confirmed</code> means the age range was set using a scrutinized method such as a credit card or government ID. k-ID treats <code>confirmed</code> as verified, so it can suppress the age gate, satisfy verification thresholds, and record an <code>ageVerification</code>.</li>
<li class=""><strong>Deprecated types still work.</strong> Apple deprecated <code>paymentChecked</code>, <code>governmentIDChecked</code>, <code>guardianPaymentChecked</code>, and <code>guardianGovernmentIDChecked</code>. k-ID continues to accept these for backwards compatibility, so signals from earlier iOS versions are unaffected.</li>
<li class=""><strong><code>selfDeclared</code> and <code>guardianDeclared</code> remain unverified.</strong> They don't bypass age verification requirements.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="documentation">Documentation<a href="https://docs.k-id.com/changelog/apple-ios-confirmed-declaration-type#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://docs.k-id.com/cdk/age-signals/overview">Platform age signals overview</a></li>
<li class=""><a class="" href="https://docs.k-id.com/cdk/age-signals/platform-details#apple-ios">Platform signal details → Apple iOS</a></li>
</ul>]]></content>
        <category label="changelog" term="changelog"/>
        <category label="cdk" term="cdk"/>
        <category label="age-signals" term="age-signals"/>
        <category label="platform-age-signals" term="platform-age-signals"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Mobile Integration Guidance for Widgets and Age Verification]]></title>
        <id>https://docs.k-id.com/changelog/mobile-integration-age-verification-guidance</id>
        <link href="https://docs.k-id.com/changelog/mobile-integration-age-verification-guidance"/>
        <updated>2026-07-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We've updated the documentation to clarify how k-ID is best integrated on mobile: for the age gate and consent steps, a natively built UX gives players the most seamless experience, and web embeds such as the age verification and age assurance URLs are displayed through system browser surfaces.]]></summary>
        <content type="html"><![CDATA[<p>We've updated the documentation to clarify how k-ID is best integrated on mobile: for the age gate and consent steps, a natively built UX gives players the most seamless experience, and web embeds such as the age verification and age assurance URLs are displayed through system browser surfaces.</p>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="whats-new">What's New<a href="https://docs.k-id.com/changelog/mobile-integration-age-verification-guidance#whats-new" class="hash-link" aria-label="Direct link to What's New" title="Direct link to What's New" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_KPhn" id="mobile-guidance-for-age-gate-and-end-to-end-widgets">Mobile Guidance for Age Gate and End-to-End Widgets<a href="https://docs.k-id.com/changelog/mobile-integration-age-verification-guidance#mobile-guidance-for-age-gate-and-end-to-end-widgets" class="hash-link" aria-label="Direct link to Mobile Guidance for Age Gate and End-to-End Widgets" title="Direct link to Mobile Guidance for Age Gate and End-to-End Widgets" translate="no">​</a></h3>
<p>The <strong>age gate</strong> and <strong>end-to-end</strong> widgets are fully supported on mobile. For the age gate and consent steps, we encourage building the UX natively with the <a class="" href="https://docs.k-id.com/cdk/custom-workflow">custom workflow</a>, following the <a class="" href="https://docs.k-id.com/cdk/ux-guidelines">CDK UX guidelines</a>, for the most brand-integrated experience.</p>
<p>The age verification and age assurance URLs returned by the k-ID API are displayed the same way. See the <a class="" href="https://docs.k-id.com/get-started/quickstart-guides/mobile-apps">mobile apps guide</a> for the specific endpoints and challenge types.</p>
<h3 class="anchor anchorTargetStickyNavbar_KPhn" id="reworked-mobile-apps-guide">Reworked Mobile Apps Guide<a href="https://docs.k-id.com/changelog/mobile-integration-age-verification-guidance#reworked-mobile-apps-guide" class="hash-link" aria-label="Direct link to Reworked Mobile Apps Guide" title="Direct link to Reworked Mobile Apps Guide" translate="no">​</a></h3>
<p>The <a class="" href="https://docs.k-id.com/get-started/quickstart-guides/mobile-apps">Mobile apps guide</a> has been re-centered on age verification, the most common web embed on mobile:</p>
<ul>
<li class="">All examples (server request, client fetch, display, and callback handling) now use the age verification URL from <a class="" href="https://docs.k-id.com/api/endpoints/perform-access-age-verification"><code>/age-verification/perform-access-age-verification</code></a></li>
<li class="">Result handling covers the <code>Verification.Result</code> DOM event and server-side confirmation via <a class="" href="https://docs.k-id.com/api/endpoints/get-age-verification-status"><code>/age-verification/get-status</code></a></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_KPhn" id="default-browser-method">Default Browser Method<a href="https://docs.k-id.com/changelog/mobile-integration-age-verification-guidance#default-browser-method" class="hash-link" aria-label="Direct link to Default Browser Method" title="Direct link to Default Browser Method" translate="no">​</a></h3>
<p>A <strong>default external browser</strong> method has been documented under the mobile implementation methods. It works on both Android (<a href="https://developer.android.com/reference/android/content/Intent#ACTION_VIEW" target="_blank" rel="noopener noreferrer" class=""><code>Intent.ACTION_VIEW</code></a>) and iOS (<a href="https://developer.apple.com/documentation/uikit/uiapplication/1648685-open" target="_blank" rel="noopener noreferrer" class=""><code>UIApplication.open</code></a>), fully supports AgeKeys, and returns focus to your app through the <code>redirectUrl</code> callback.</p>
<h3 class="anchor anchorTargetStickyNavbar_KPhn" id="device-orientation-guidance">Device Orientation Guidance<a href="https://docs.k-id.com/changelog/mobile-integration-age-verification-guidance#device-orientation-guidance" class="hash-link" aria-label="Direct link to Device Orientation Guidance" title="Direct link to Device Orientation Guidance" translate="no">​</a></h3>
<p>Age verification works best in <strong>portrait</strong> orientation. Because in-app browser surfaces inherit your app's orientation lock, apps with a <strong>locked landscape orientation</strong> should open the verification URL in the default external browser. The browser manages its own orientation, so users can rotate to portrait, and the <code>redirectUrl</code> callback returns them to your app when the flow completes.</p>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="updated-documentation">Updated Documentation<a href="https://docs.k-id.com/changelog/mobile-integration-age-verification-guidance#updated-documentation" class="hash-link" aria-label="Direct link to Updated Documentation" title="Direct link to Updated Documentation" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://docs.k-id.com/get-started/quickstart-guides/mobile-apps">Mobile apps</a>: Re-centered on age verification, plus new default browser and device orientation sections</li>
<li class=""><a class="" href="https://docs.k-id.com/cdk/embedded-flow">CDK Embedded flow</a>: Added mobile display guidance for the end-to-end and age gate widgets</li>
<li class=""><a class="" href="https://docs.k-id.com/cdk/overview">CDK Overview</a>: Added mobile guidance to the integration approaches comparison</li>
<li class=""><a class="" href="https://docs.k-id.com/cdk/custom-workflow">CDK Custom workflow</a>: Noted the custom workflow as the recommended approach for mobile apps</li>
<li class=""><a class="" href="https://docs.k-id.com/get-started/quickstart-guides/vpc">Verifiable Parental Consent (VPC)</a>: Added a note on mobile usage for this widget-based guide</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="next-steps">Next Steps<a href="https://docs.k-id.com/changelog/mobile-integration-age-verification-guidance#next-steps" class="hash-link" aria-label="Direct link to Next Steps" title="Direct link to Next Steps" translate="no">​</a></h2>
<ul>
<li class="">If you're integrating on mobile, consider building your age gate and consent UX natively using the <a class="" href="https://docs.k-id.com/cdk/custom-workflow">custom workflow</a> and <a class="" href="https://docs.k-id.com/cdk/ux-guidelines">CDK UX guidelines</a> for the most seamless experience</li>
<li class="">Use the default browser method for landscape-locked apps when displaying verification URLs</li>
</ul>]]></content>
        <category label="changelog" term="changelog"/>
        <category label="cdk" term="cdk"/>
        <category label="mobile" term="mobile"/>
        <category label="age-verification" term="age-verification"/>
        <category label="widgets" term="widgets"/>
        <category label="documentation" term="documentation"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Permanently erase a session with a new flag on /session/delete]]></title>
        <id>https://docs.k-id.com/changelog/session-hard-delete-flag</id>
        <link href="https://docs.k-id.com/changelog/session-hard-delete-flag"/>
        <updated>2026-07-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[/session/delete can now permanently erase a session instead of only revoking it.]]></summary>
        <content type="html"><![CDATA[<p><code>/session/delete</code> can now permanently erase a session instead of only revoking it.</p>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="whats-new">What's new<a href="https://docs.k-id.com/changelog/session-hard-delete-flag#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new" translate="no">​</a></h2>
<ul>
<li class=""><strong><code>hardDelete</code> on <code>POST /session/delete</code>.</strong> Set to <code>true</code> to permanently delete a player session and its embedded consent, scoped to the calling product. Unlike the default revoke (which is internally retained), this physically removes the record and can't be undone.</li>
<li class=""><strong>Opt-in per developer.</strong> Available only to developers explicitly enabled for hard delete. Setting <code>hardDelete: true</code> without enablement returns <code>FEATURE_DISABLED</code>.</li>
<li class=""><strong>Every existing call is unaffected.</strong> Omitting <code>hardDelete</code>, or setting it to <code>false</code>, behaves exactly as <code>/session/delete</code> always has: a reversible revoke.</li>
<li class=""><strong>In-flight challenges are failed too.</strong> Any pending challenge tied to that exact session is set to <code>FAIL</code>, scoped to that session only (other sessions for the same player are untouched).</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="documentation">Documentation<a href="https://docs.k-id.com/changelog/session-hard-delete-flag#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://docs.k-id.com/api/endpoints/delete-session"><code>/session/delete</code> API reference</a></li>
</ul>]]></content>
        <category label="changelog" term="changelog"/>
        <category label="api" term="api"/>
        <category label="sessions" term="sessions"/>
        <category label="privacy" term="privacy"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Credit card–only age verification endpoint]]></title>
        <id>https://docs.k-id.com/changelog/perform-credit-card-verification-endpoint</id>
        <link href="https://docs.k-id.com/changelog/perform-credit-card-verification-endpoint"/>
        <updated>2026-07-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[There is now a dedicated /age-verification/perform-credit-card-verification endpoint for running age verification with credit card as the only method, alongside the existing single-method endpoints (ID, AgeKey, ConnectID).]]></summary>
        <content type="html"><![CDATA[<p>There is now a dedicated <code>/age-verification/perform-credit-card-verification</code> endpoint for running age verification with credit card as the only method, alongside the existing single-method endpoints (ID, AgeKey, ConnectID).</p>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="whats-new">What's new<a href="https://docs.k-id.com/changelog/perform-credit-card-verification-endpoint#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new" translate="no">​</a></h2>
<ul>
<li class=""><strong><code>POST /age-verification/perform-credit-card-verification</code>.</strong> Bypasses automatic method selection and verifies the user with credit card only. It takes the same request shape as the other single-method endpoints (<code>jurisdiction</code>, <code>subject</code>, <code>criteria</code>, and optional <code>options.redirectUrl</code> / <code>options.locale</code>) and returns <code>id</code>, <code>url</code>, and <code>shortUrl</code>.</li>
<li class=""><strong>Adult (18+) assurance.</strong> Credit card verification is an adult assurance signal, not a precise age estimate. It is best suited to jurisdictions where card ownership is restricted to adults.</li>
<li class=""><strong>Status and results unchanged.</strong> Poll <a class="" href="https://docs.k-id.com/api/endpoints/get-age-verification-status"><code>/age-verification/get-status</code></a> or handle the <code>Verification.Result</code> webhook as usual; results report <code>credit-card</code> as the verification <code>method</code>.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="documentation">Documentation<a href="https://docs.k-id.com/changelog/perform-credit-card-verification-endpoint#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://docs.k-id.com/api/endpoints/perform-credit-card-verification"><code>/age-verification/perform-credit-card-verification</code> API reference</a></li>
<li class=""><a class="" href="https://docs.k-id.com/agekit-plus/single-method-flow">Single-method verification flow</a></li>
<li class=""><a class="" href="https://docs.k-id.com/concepts/verification-methods">Verification methods → Credit card verification</a></li>
</ul>]]></content>
        <category label="changelog" term="changelog"/>
        <category label="api" term="api"/>
        <category label="age-verification" term="age-verification"/>
        <category label="verification-methods" term="verification-methods"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Redirect URL for Automatic age assurance flows]]></title>
        <id>https://docs.k-id.com/changelog/age-gate-age-assurance-redirect</id>
        <link href="https://docs.k-id.com/changelog/age-gate-age-assurance-redirect"/>
        <updated>2026-06-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[/age-gate/check now accepts a redirect URL that k-ID navigates to once an Automatic age assurance challenge completes. This is intended for top-level browser handoffs (such as a mobile webview that bounces out to k-ID and back) where an iframe-based result handler isn't an option.]]></summary>
        <content type="html"><![CDATA[<p><code>/age-gate/check</code> now accepts a redirect URL that k-ID navigates to once an Automatic age assurance challenge completes. This is intended for top-level browser handoffs (such as a mobile webview that bounces out to k-ID and back) where an iframe-based result handler isn't an option.</p>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="whats-new">What's new<a href="https://docs.k-id.com/changelog/age-gate-age-assurance-redirect#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new" translate="no">​</a></h2>
<ul>
<li class=""><strong><code>options.playerAgeAssurance.redirectUrl</code>.</strong> Pass an <code>http(s)</code> URL or a custom-scheme mobile deeplink (for example <code>myapp://age-gate/return</code>) on <code>/age-gate/check</code>. After the player completes or dismisses the <code>CHALLENGE_AGE_GATE_AGE_ASSURANCE</code> flow, k-ID redirects to that URL with <code>challengeId</code>, <code>productId</code>, <code>sessionId</code> (on <code>PASS</code>), and <code>status</code> (<code>PASS</code> or <code>FAIL</code>) appended as query parameters. Existing query parameters on the URL are preserved.</li>
<li class=""><strong>Scope.</strong> The option is only honored for <code>CHALLENGE_AGE_GATE_AGE_ASSURANCE</code>. <code>CHALLENGE_PARENTAL_CONSENT</code> is unaffected and continues to return through the trusted-adult flow.</li>
<li class=""><strong>Confirm outcomes server-side.</strong> The redirect query parameters are a UX hint. Treat the <code>Challenge.StateChange</code> webhook or <code>/challenge/get-status</code> as the source of truth before granting access.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="documentation">Documentation<a href="https://docs.k-id.com/changelog/age-gate-age-assurance-redirect#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://docs.k-id.com/cdk/age-gate#redirecting-after-the-challenge">Age gate → Redirecting after the challenge</a></li>
<li class=""><a class="" href="https://docs.k-id.com/api/endpoints/check-age-gate"><code>/age-gate/check</code> API reference</a></li>
<li class=""><a class="" href="https://docs.k-id.com/events/webhooks/event-types/challenge-statechange"><code>Challenge.StateChange</code> webhook</a></li>
</ul>]]></content>
        <category label="changelog" term="changelog"/>
        <category label="documentation" term="documentation"/>
        <category label="api" term="api"/>
        <category label="age-gate" term="age-gate"/>
        <category label="age-assurance" term="age-assurance"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Official k-ID Agent Skills bundle for AI coding agents]]></title>
        <id>https://docs.k-id.com/changelog/agent-skills-public-launch</id>
        <link href="https://docs.k-id.com/changelog/agent-skills-public-launch"/>
        <updated>2026-05-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[k-ID now publishes an official bundle of Agent Skills — small, composable instruction packs that teach an AI coding agent how to integrate k-ID correctly across every jurisdictional regime k-ID supports: COPPA (US), GDPR-Kids (EU), UK AADC, the UK Online Safety Act, Brazil ECA Digital, Australia Online Safety / social media minimum age, and other regional requirements. They work with 35+ AI coding tools, including Claude Code, Cursor, OpenAI Codex, GitHub Copilot, and Gemini CLI.]]></summary>
        <content type="html"><![CDATA[<p>k-ID now publishes an official bundle of <a href="https://agentskills.io/specification" target="_blank" rel="noopener noreferrer" class="">Agent Skills</a> — small, composable instruction packs that teach an AI coding agent how to integrate k-ID correctly across every jurisdictional regime k-ID supports: COPPA (US), GDPR-Kids (EU), UK AADC, the UK Online Safety Act, Brazil ECA Digital, Australia Online Safety / social media minimum age, and other regional requirements. They work with 35+ AI coding tools, including Claude Code, Cursor, OpenAI Codex, GitHub Copilot, and Gemini CLI.</p>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="whats-new">What's new<a href="https://docs.k-id.com/changelog/agent-skills-public-launch#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new" translate="no">​</a></h2>
<ul>
<li class=""><strong>Eight focused skills</strong> cover the k-ID integration surface end-to-end: age gate, parental consent, age verification and assurance (including <code>verifiedAgeThreshold</code> flows for high-risk permissions), sessions and permissions, webhooks, plus cross-cutting adjuncts for server trust boundary and mobile/native.</li>
<li class=""><strong>Cross-jurisdictional by design.</strong> The same skills drive integrations for COPPA, GDPR-Kids, UK AADC, UK OSA, Brazil ECA Digital, and Australia Online Safety — jurisdictional behaviour is configured server-side in Compliance Studio, not branched in client code.</li>
<li class=""><strong>One-command install</strong> for Claude Code via the plugin marketplace; one-line <code>git clone</code> for all other compatible tools.</li>
<li class=""><strong>Open standard</strong> — the skills follow the <a href="https://agentskills.io/specification" target="_blank" rel="noopener noreferrer" class="">Agent Skills specification</a> and work with any compatible agent, not just one vendor.</li>
<li class=""><strong>Doc-first contract</strong> — skills encode integration patterns and known pitfalls, and link back to this documentation site for API shapes, so they never drift out of sync with the API.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="try-it">Try it<a href="https://docs.k-id.com/changelog/agent-skills-public-launch#try-it" class="hash-link" aria-label="Direct link to Try it" title="Direct link to Try it" translate="no">​</a></h2>
<ul>
<li class="">Read <a class="" href="https://docs.k-id.com/get-started/agent-skills">Integrate with AI coding agents</a> for the per-tool install matrix and usage guide.</li>
<li class="">Visit the repo at <a href="https://github.com/kidentify/skills" target="_blank" rel="noopener noreferrer" class=""><code>github.com/kidentify/skills</code></a>.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="learn-more">Learn more<a href="https://docs.k-id.com/changelog/agent-skills-public-launch#learn-more" class="hash-link" aria-label="Direct link to Learn more" title="Direct link to Learn more" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://docs.k-id.com/get-started/agent-skills">Integrate with AI coding agents</a></li>
<li class=""><a href="https://agentskills.io/specification" target="_blank" rel="noopener noreferrer" class="">Agent Skills specification</a></li>
<li class=""><a href="https://agentskills.io/clients" target="_blank" rel="noopener noreferrer" class="">Agent Skills client showcase</a></li>
<li class=""><a class="" href="https://docs.k-id.com/api/overview">API overview</a></li>
</ul>]]></content>
        <category label="changelog" term="changelog"/>
        <category label="developer-tools" term="developer-tools"/>
        <category label="ai" term="ai"/>
        <category label="documentation" term="documentation"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[AI products quick start guide]]></title>
        <id>https://docs.k-id.com/changelog/ai-products-quickstart</id>
        <link href="https://docs.k-id.com/changelog/ai-products-quickstart"/>
        <updated>2026-05-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A new quick start guide for AI-specific products is now available, alongside an AI permissions category in the Compliance Studio reference.]]></summary>
        <content type="html"><![CDATA[<p>A new quick start guide for AI-specific products is now available, alongside an AI permissions category in the Compliance Studio reference.</p>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="whats-new">What's new<a href="https://docs.k-id.com/changelog/ai-products-quickstart#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new" translate="no">​</a></h2>
<ul>
<li class=""><strong>AI products quick start.</strong> Walks you through end-to-end integration for AI products: configuring AI permissions in Compliance Studio, collecting parental consent, gating AI features, and responding to permission changes.</li>
<li class=""><strong>AI permissions category.</strong> The permissions reference now lists the AI category with its seven permissions: <code>ai-chat</code>, <code>ai-media-generation</code>, <code>ai-voice-mode</code>, <code>ai-memory</code>, <code>ai-companion-chatbot</code>, <code>ai-media-upload</code>, and <code>ai-model-training</code>.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="documentation">Documentation<a href="https://docs.k-id.com/changelog/ai-products-quickstart#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://docs.k-id.com/get-started/quickstart-guides/ai-products">AI products quick start</a></li>
<li class=""><a class="" href="https://docs.k-id.com/concepts/access-features-consent/permissions#available-permissions">Permissions</a></li>
</ul>]]></content>
        <category label="changelog" term="changelog"/>
        <category label="documentation" term="documentation"/>
        <category label="ai" term="ai"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Rate limits documentation]]></title>
        <id>https://docs.k-id.com/changelog/rate-limits-documentation</id>
        <link href="https://docs.k-id.com/changelog/rate-limits-documentation"/>
        <updated>2026-04-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Default rate limits for the k-ID API and for user-facing age verification and parental consent flows are now documented on a dedicated page.]]></summary>
        <content type="html"><![CDATA[<p>Default rate limits for the k-ID API and for user-facing age verification and parental consent flows are now documented on a dedicated page.</p>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="whats-new">What's new<a href="https://docs.k-id.com/changelog/rate-limits-documentation#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new" translate="no">​</a></h2>
<ul>
<li class=""><strong>API rate limits.</strong> Calls to the k-ID API are limited per product: <strong>500 RPS</strong> in live mode and <strong>10 RPS</strong> in test mode. Requests over the limit return HTTP <code>429 Too Many Requests</code>.</li>
<li class=""><strong>Age verification and parental consent flow rate limits.</strong> User-facing flows are limited per product: <strong>100 RPS</strong> in live mode and <strong>20 RPS</strong> in test mode. When the limit is hit, the user sees an in-flow error asking them to wait and try again (no <code>429</code> is surfaced to your server).</li>
<li class=""><strong>Requesting an increase.</strong> These are defaults. Contact your k-ID representative if your product needs higher capacity.</li>
<li class=""><strong>Prelaunch checklists updated.</strong> Both the CDK and AgeKit+ prelaunch checklists now reference rate limits explicitly and link to the new page, since live mode ceilings are significantly higher than test mode.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="documentation">Documentation<a href="https://docs.k-id.com/changelog/rate-limits-documentation#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://docs.k-id.com/api/rate-limits">Rate limits</a></li>
<li class=""><a class="" href="https://docs.k-id.com/api/error-handling">Error handling</a></li>
<li class=""><a class="" href="https://docs.k-id.com/cdk/prelaunch-checklist">CDK prelaunch checklist</a></li>
<li class=""><a class="" href="https://docs.k-id.com/agekit-plus/prelaunch-checklist">AgeKit+ prelaunch checklist</a></li>
</ul>]]></content>
        <category label="changelog" term="changelog"/>
        <category label="documentation" term="documentation"/>
        <category label="api" term="api"/>
        <category label="rate-limits" term="rate-limits"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Mock Providers toggle, reorderable verification methods, and COPPA 2026 guide]]></title>
        <id>https://docs.k-id.com/changelog/mock-providers-method-ordering-and-coppa-2026</id>
        <link href="https://docs.k-id.com/changelog/mock-providers-method-ordering-and-coppa-2026"/>
        <updated>2026-04-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Today's release adds two new Compliance Studio capabilities and a new developer guide for the COPPA 2026 Rule Amendments.]]></summary>
        <content type="html"><![CDATA[<p>Today's release adds two new Compliance Studio capabilities and a new developer guide for the COPPA 2026 Rule Amendments.</p>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="whats-new">What's new<a href="https://docs.k-id.com/changelog/mock-providers-method-ordering-and-coppa-2026#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new" translate="no">​</a></h2>
<ul>
<li class=""><strong>Mock Providers / Real Providers toggle.</strong> Verification flows running in Test Mode now show a <strong>TEST MODE</strong> toolbar with a switch between <strong>Mock Providers</strong> (the default) and <strong>Real Providers</strong>. Mock Providers presents a built-in simulator that lets you submit personas (<code>Adult</code>, <code>Teen</code>, <code>Child</code>, or <code>Passes</code> / <code>Fails Age Check</code>), enter a custom age range or date of birth, and simulate <code>Inconclusive</code> or <code>Fraudulent</code> failures. Submissions flow through the same server path as real providers, so webhooks, sessions, and DOM events behave identically.</li>
<li class=""><strong>Verification method ordering.</strong> Each enabled method on the <strong>Assurance and Verification</strong> tab now has a drag handle. Drag methods to change the order shown to users in the Family Connect widget, use <strong>Reset to default order</strong> to restore the k-ID default, and apply different orders per-market via <strong>Market Specific Rules</strong>.</li>
<li class=""><strong>New Compliance Guides section.</strong> A new top-level docs section for compliance playbooks launches today with its first entry: <strong>2026 COPPA Rule Amendments</strong>. The guide walks COPPA-subject operators through the configuration updates needed before the <strong>April 22, 2026</strong> enforcement date.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="documentation">Documentation<a href="https://docs.k-id.com/changelog/mock-providers-method-ordering-and-coppa-2026#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://docs.k-id.com/concepts/verification-methods#mock-and-real-providers">Verification methods: mock and real providers</a></li>
<li class=""><a class="" href="https://docs.k-id.com/compliance-studio/product-verification">Adult verification</a></li>
<li class=""><a class="" href="https://docs.k-id.com/compliance-guides/coppa-2026-amendment">Compliance Guides → 2026 COPPA Rule Amendments</a></li>
</ul>]]></content>
        <category label="changelog" term="changelog"/>
        <category label="documentation" term="documentation"/>
        <category label="age-verification" term="age-verification"/>
        <category label="verification-methods" term="verification-methods"/>
        <category label="compliance-guides" term="compliance-guides"/>
        <category label="COPPA" term="COPPA"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Configure verification methods as fallbacks]]></title>
        <id>https://docs.k-id.com/changelog/verification-methods-fallback-only</id>
        <link href="https://docs.k-id.com/changelog/verification-methods-fallback-only"/>
        <updated>2026-04-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[You can now configure each verification method listed under the Assurance and Verification tab as Fallback only, in addition to enabled or disabled.]]></summary>
        <content type="html"><![CDATA[<p>You can now configure each <strong>verification method</strong> listed under the <strong>Assurance and Verification</strong> tab as <strong><code>Fallback only</code></strong>, in addition to enabled or disabled.</p>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="whats-new">What's new<a href="https://docs.k-id.com/changelog/verification-methods-fallback-only#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new" translate="no">​</a></h2>
<ul>
<li class=""><strong><code>Fallback only</code></strong>: A method with this setting is offered only after the user has attempted another verification method and that attempt <strong>didn't produce an age signal</strong> (no conclusive age determination). It won't appear in the initial list of methods.</li>
<li class=""><strong>Why it helps</strong>: You can keep a stronger or alternative method in reserve for cases where a lighter method couldn't reach a verification outcome, without showing every option up front.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="documentation">Documentation<a href="https://docs.k-id.com/changelog/verification-methods-fallback-only#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://docs.k-id.com/compliance-studio/product-verification">Adult verification</a>: <strong>Assurance and Verification</strong> tab, where you enable, disable, or set <strong>Fallback only</strong> on each verification method</li>
<li class=""><a class="" href="https://docs.k-id.com/concepts/verification-methods">Verification methods</a>: overview of verification behavior, including a callout on <strong>Fallback only</strong></li>
</ul>]]></content>
        <category label="changelog" term="changelog"/>
        <category label="documentation" term="documentation"/>
        <category label="age-verification" term="age-verification"/>
        <category label="verification-methods" term="verification-methods"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Short URL field in age verification API responses]]></title>
        <id>https://docs.k-id.com/changelog/age-verification-response-shortlink-field</id>
        <link href="https://docs.k-id.com/changelog/age-verification-response-shortlink-field"/>
        <updated>2026-04-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Age verification creation responses (from endpoints such as POST /age-verification/perform-access-age-verification) now include shortUrl in addition to id and url.]]></summary>
        <content type="html"><![CDATA[<p>Age verification <strong>creation</strong> responses (from endpoints such as <a class="" href="https://docs.k-id.com/api/endpoints/perform-access-age-verification"><code>POST /age-verification/perform-access-age-verification</code></a>) now include <strong><code>shortUrl</code></strong> in addition to <strong><code>id</code></strong> and <strong><code>url</code></strong>.</p>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="whats-new">What's new<a href="https://docs.k-id.com/changelog/age-verification-response-shortlink-field#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new" translate="no">​</a></h2>
<ul>
<li class=""><strong>Compact link</strong>: <code>shortUrl</code> is a shorter link that redirects to the same verification experience as the full <code>url</code>. Use it when a long query string is a poor fit, for example for QR codes or when the user completes verification on another device.</li>
<li class=""><strong>Full URL unchanged</strong>: The session JWT remains on the full <code>url</code> (<code>token</code> query parameter). Don't try to shorten or rebuild that URL yourself.</li>
<li class=""><strong>Opaque value</strong>: Treat <code>shortUrl</code> as an opaque string. Display or encode it as returned, and don't rely on a fixed path or query layout, which might change in the future.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_KPhn" id="learn-more">Learn more<a href="https://docs.k-id.com/changelog/age-verification-response-shortlink-field#learn-more" class="hash-link" aria-label="Direct link to Learn more" title="Direct link to Learn more" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://docs.k-id.com/api/endpoints/perform-access-age-verification">Perform access age verification</a></li>
<li class=""><a class="" href="https://docs.k-id.com/agekit-plus/waterfall-flow">Waterfall flow</a></li>
<li class=""><a class="" href="https://docs.k-id.com/get-started/quickstart-guides/age-verification">Age verification quick start</a></li>
<li class=""><a class="" href="https://docs.k-id.com/agekit-plus/single-method-flow">Single-method flow</a></li>
<li class=""><a class="" href="https://docs.k-id.com/get-started/quickstart-guides/mobile-apps">Mobile apps</a></li>
</ul>]]></content>
        <category label="changelog" term="changelog"/>
        <category label="age-verification" term="age-verification"/>
        <category label="api" term="api"/>
        <category label="documentation" term="documentation"/>
    </entry>
</feed>