Privacy and VPPA: the two-channel data flow

Genuin keeps what a viewer watched in one channel and who the viewer is in another, and joins them only under your agreement and the viewer's consent, which is how the Onsite player and the Extended O&O player meet video privacy requirements such as the Video Privacy Protection Act. Reading time about 5 minutes.

The two channels

ChannelHoldsLeaves it only when
Viewing channelPlayback, watch time, follows, posts, keyed to an anonymous sessionNever as identified history; aggregated for reports
Identity channelYour user ID and the claims you pass (see Auto login and token exchange), hashed identifiers in the ID graphJoined to viewing for personalization and attribution under consent and agreement

What you control

  • Consent source and default (auto, granted, denied) per property.
  • Which claims enter the identity channel and for which purposes.
  • Retention windows per channel.
  • Whether partners receive cohort membership (never identities).
  • A privacy notice link shown in the player.

What Genuin never does

Share identified viewing history with a partner or buyer, sell identifiers, or use your data to serve another customer's network.

How it runs

The policies here are applied to every proposal made on your account and the records are kept; questions about them are answered in BCC first and by the Trust team when needed.

Support. Help is available 24/7 from Brand Control Center and from every page of these docs. Ask in plain language; when a person is needed, an account manager, developer, or Ops engineer joins the same thread and stays on it until it is resolved. Every Business Account owner has this on every plan (see 24/7 Octo-enabled support: how Octo brings in account managers, developers, and Ops).

API & SDK

Access: the calls in the table are the proposed Business Account API (see Business Account API: provisioning, OAuth, and the resource map), authenticated with a key scoped to the account and a role or an OAuth client acting for it; every confirmation in this article becomes a proposal you can approve by API (POST /proposals/{proposalId}:approve). Live today, the server API under /api/thirdparty authenticates with a gn-access-token (see Generate an access token), and Live API today and the Business Account API roadmap maps what is live to what is proposed.

CallPurpose
PUT /accounts/{accountId}/privacyData residency, retention, consent defaults, DSAR endpoint
PUT /brands/{brandId}/identityID graph settings: hashed identifiers, consent, channels
POST /sessionsAuto login token exchange: your signed user token for a Genuin session
js
js
// proposed server SDK (Business Account API)
import { Genuin } from '@genuin/sdk';
const genuin = new Genuin({ apiKey: process.env.GENUIN_KEY });
await genuin.privacy.update(accountId, { residency: 'eu' });
await genuin.identity.update(brandId, { hashedEmail: true });
await genuin.sessions.create({ token });

Live today: Embed the Genuin Web SDK on your website · Integrate the Genuin iOS SDK · Receive engagement events in your own analytics · Serve your first ad.

SDKs: Web SDK 2.0.6 (see Embed the Genuin Web SDK on your website), iOS SDK 2.1.5 (see Integrate the Genuin iOS SDK), Android SDK 2.1.5 (see Integrate the Genuin Android SDK), React Native 3.0.3 (see Integrate the Genuin SDK with React Native apps), and Flutter (see Integrate the Genuin SDK with Flutter apps) render Genuin and sign members in; the Node (@genuin/sdk) and Python (genuin) server SDKs are proposed with Business Account API: provisioning, OAuth, and the resource map.

TRUST AND COMPLIANCE

© 2026 Genuin Inc.

Genuin Footer