Session.Unlink
Emitted when a verified parent link ends. Either side can end it: the player through POST /session/unlink-parent in your product, or the parent from Family Connect. Because a parent-initiated unlink never passes through your API, this event is the only way you learn about it.
The session isn't deleted. It stays ACTIVE and keeps the player's permissions and pushed data, and only the parent link is removed: the kuid, the parent's email, and the allowances and controls the parent had set. The player carries on with the same sessionId and can invite a parent again later.
A webhook endpoint receives only the event types it's subscribed to. Select Session.Unlink for your endpoint on the product's Developer Settings page in Compliance Studio, or k-ID drops the event without a delivery attempt or an error. It's listed only once verified parent linking is enabled for your organization.
Webhook events are retried up to 2 times on failure. If your server misses one, call GET /session/get with the sessionId and check hasApproverEmail. See Delivery, retries, and recovery for details.
Fields
| Field | Type | Required | Description |
|---|---|---|---|
eventType | string | yes | Always "Session.Unlink" |
data | object | yes | Unlink data |
data.sessionId | string (UUID) | yes | The session the parent was unlinked from |
data.productId | number | yes | The productId for the product |
data.unlinkedBy | string | yes | Which side ended the link. One of player, parent |
data.unlinkedAt | string (RFC 3339) | yes | When the link ended |
unlinkedBy
| Value | Meaning |
|---|---|
player | The unlink came through POST /session/unlink-parent, which is the player-facing surface in your product. k-ID also emails the parent to tell them the link ended |
parent | The parent unlinked from Family Connect |
Example
- player
- parent
{
"eventType": "Session.Unlink",
"data": {
"sessionId": "b1a6482d-5242-4b4a-aa88-3fa52595a672",
"productId": 12345,
"unlinkedBy": "player",
"unlinkedAt": "2026-04-20T18:42:11Z"
}
}
{
"eventType": "Session.Unlink",
"data": {
"sessionId": "b1a6482d-5242-4b4a-aa88-3fa52595a672",
"productId": 12345,
"unlinkedBy": "parent",
"unlinkedAt": "2026-07-23T06:13:07Z"
}
}
Handling the event
- Match
data.sessionIdback to your stored player record, and stop showing a parent as connected. - Stop applying the controls the parent had set. They're cleared on the k-ID side too, so
GET /screentime/get-stateno longer returns their schedule. - Keep the session. Don't send the player back through the age gate, and keep pushing usage data as before.
- Make your handler idempotent. Deliveries are at-least-once, so the same event can arrive more than once. A repeated
POST /session/unlink-parentdoesn't fire a second event: it returns the originalunlinkedAtand stops there.