Tizen Consent API
Consent for Tizen (Samsung TV) apps is captured through the web consent banner rather than the mobile SDK, and is stored separately from mobile consent. It therefore has its own endpoint, and its record is shaped closer to a web consent than a mobile one.
For Android TV and tvOS apps, see TV Consent. For Android and iOS phone apps, see Mobile Consent.
Endpoints
Section titled “Endpoints”GET /api/tizenconsents
Section titled “GET /api/tizenconsents”[Authentication required]
Section titled “[Authentication required]”Get a page of consent records for a single Tizen application. Records are returned newest first, ordered by
LastUpdated.
Query parameters:
| Parameter | Type | Description |
|---|---|---|
TvAppId |
string | Required. Id of the Tizen application. |
FromDate |
DateTime | Optional. Only return consents last updated on or after this date (UTC). |
ToDate |
DateTime | Optional. Only return consents last updated on or before this date (UTC, inclusive of the day). |
CustomUserId |
string | Optional. Only return consents whose CustomUserId starts with this value. |
Status |
string | Optional. One of Accepted, Declined, Partial. |
Country |
string | Optional. ISO 3166-1 alpha-2 code or country name. |
State |
string | Optional. |
City |
string | Optional. |
ConsentId |
string | Optional. Return a single record by its id. |
PageNumber |
integer | Optional. 1-based page number. Defaults to 1. |
ResultsPerPage |
integer | Optional. Defaults to 100, maximum 1000. Larger values are clamped to the maximum. |
OrderBy |
string | Optional. Defaults to -LastUpdated (newest first). Prefix with - for descending. |
A TvAppId that does not match an application on your account returns 403 Forbidden.
Example request:
curl -G "https://api-prod.secureprivacy.ai/api/tizenconsents" \ -H "Authorization: Bearer {token}" \ -d "TvAppId=64b2f0a1c3d4e5f6a7b8c9d2" \ -d "FromDate=2026-01-01"Response: 200 OK
{ "PagedResults": [ { "ConsentId": "string", "ClientId": "string", "CustomUserId": "string", "TvAppId": "string", "PageUrl": "string", "Status": "string", "Created": "string", "LastUpdated": "string", "Expiration": "string", "Categories": [ { "Category": "string", "CategoryId": "string", "ConsentGiven": "boolean", "Services": [ { "Name": "string", "IsEnabled": "boolean" } ] } ], "Device": { "Browser": "string", "City": "string", "State": "string", "Country": "string" } } ], "TotalResultsCount": "integer"}Field reference:
| Field | Description |
|---|---|
TotalResultsCount |
Number of records matching your filters across all pages. |
ConsentId |
Unique id of the stored consent record. |
CustomUserId |
Your own user identifier, when one was linked to the consent. |
PageUrl |
URL of the page the consent was captured on. |
Status |
Overall outcome: Accepted, Declined or Partial. |
LastUpdated |
When the consent was last updated (UTC). This is the field filtered by FromDate / ToDate. |
Expiration |
When the record is due to be purged under the applied data retention period (UTC). |
Categories |
Per-category decisions. ConsentGiven is a boolean, and Services lists the individual services in that category, each with a Name and whether it was allowed. |
Device |
Browser and location context. Directly identifying device data is not exposed by this API. |
How this differs from the mobile record: TvAppId rather than MobileApplicationId; PageUrl rather
than ScreenUri; a Status of Accepted /
Declined / Partial rather than a tri-state ConsentGiven; categories carrying a boolean decision over named
Services rather than a tri-state over identified Packages (the same shape as
Web Consent); and no IabConsents.
Paging through a full extract:
Keep requesting pages until you have read TotalResultsCount records:
const perPage = 1000;let page = 1;let total = Infinity;const all = [];
while (all.length < total) { const res = await fetch( `https://api-prod.secureprivacy.ai/api/tizenconsents?TvAppId=${appId}&PageNumber=${page}&ResultsPerPage=${perPage}`, { headers: { Authorization: `Bearer ${token}` } } );
const body = await res.json(); total = body.TotalResultsCount; all.push(...body.PagedResults); page++;}Because consents are updated as users change their preferences, a record can move between pages while you are
reading. For a stable extract, pin the window with FromDate and ToDate and page within it, then run a
smaller incremental job for the most recent period. For large extracts, see the
Rate Limits documentation.
