@trillboards/api-client 3.2.1 → 3.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -333,6 +333,8 @@ type AudienceSegment = {
333
333
  type AudienceSocialAttention = {
334
334
  amplification_evidence: string;
335
335
  cascade_depth: number;
336
+ data_projection_version: number;
337
+ data_projection_xid: string;
336
338
  /** All 5 columns NOT NULL except primary_attention_anchor_face_index (only legit NULL: no anchor or solo scene). */
337
339
  primary_attention_anchor_face_index?: number | null;
338
340
  /** NUMERIC(4,3). */
@@ -2384,7 +2386,7 @@ type Partner = {
2384
2386
  type PartnerAdDeliveryProfile = {
2385
2387
  /** Android SDK API level as reported by the device; `null` when not reported, and then no Android rule fires at all. Below 23 forces `mode: vast_fallback` and turns `auto_recovery_enabled` off. 23-25 with desugaring reported off only appends a warning to `notes` and leaves the mode alone. */
2386
2388
  android_api_level?: number | null;
2387
- /** Whether the SERVER may auto-enqueue recovery device commands for this device — the `refresh_ads` and `restart` it issues when a screen heartbeats online without recent VAST requests, or with stalled playback. It is not a client-side setting, and it goes false alongside every `vast_fallback` verdict so we do not restart a device whose player we already know is the wrong one. */
2389
+ /** Whether the SERVER may auto-enqueue recovery device commands for this device — the `refresh_ads` and `restart` it issues when a screen heartbeats online without recent VAST requests, or with stalled playback. It is not a client-side setting, and it goes false alongside every `vast_fallback` verdict so we do not restart a device whose player we already know is the wrong one. Even when true, a recovery command is queued only for a device that acts on commands, meaning one that acknowledged a command (`POST /device/{deviceId}/command/{commandId}/ack`) in the last 7 days, or that was handed none in that time. A device that let a delivered command expire unacknowledged, and acknowledged none, is sent no recovery command until that command is 7 days old. */
2388
2390
  auto_recovery_enabled?: boolean;
2389
2391
  /** Echoed back from the device's own heartbeat telemetry, or `unknown` when the device never reported one. It selects which compatibility rules run: `android_native` enables the Android API-level gate, `html5_webview` the Chromium-version checks; `disabled` and `unknown` skip both, so no mode change can result from those. */
2390
2392
  ima_integration?: "android_native" | "html5_webview" | "disabled" | "unknown";
@@ -6275,7 +6277,7 @@ interface exportDatasetOperation {
6275
6277
  };
6276
6278
  }
6277
6279
  /**
6278
- * Geographic audience-density panel (data-licensing)
6280
+ * Geographic audience panel (data-licensing)
6279
6281
  * GET /v1/partner/data/geohash-audience-panel
6280
6282
  */
6281
6283
  interface getGeohashAudiencePanelOperation {
@@ -6292,8 +6294,12 @@ interface getGeohashAudiencePanelOperation {
6292
6294
  };
6293
6295
  response: {
6294
6296
  data?: {
6297
+ /** The build of the day this page read (UTC, `YYYY-MM-DD HH:MM:SS.mmm`). A day with no build is answered `404` `day_not_built`. */
6298
+ built_at: string;
6295
6299
  /** Day exported (UTC). */
6296
6300
  date: string;
6301
+ /** The panel's definition (2 since 2026-10-19). */
6302
+ definition_version: number;
6297
6303
  /** Rows per page this response was read with. */
6298
6304
  limit: number;
6299
6305
  /** The `offset` of the next page, or `null` on the last page. */
@@ -6302,28 +6308,82 @@ interface getGeohashAudiencePanelOperation {
6302
6308
  offset: number;
6303
6309
  /** Integer partner_id (`partners.partner_id`). */
6304
6310
  partner_id: number;
6305
- /** Per-row aggregates, every cell with its counts. */
6311
+ /** One row per (hour, geohash6, venue_category), every cell with its counts. */
6306
6312
  rows: Array<{
6307
- /** Average attention score. `null`: not measured in this panel, which is built from radio pings; camera-measured attention is in the camera datasets. */
6313
+ /** Mean device head-pose index 0-1 over the camera windows. `null` when the cell-hour holds no camera window. */
6308
6314
  avg_attention: number | null;
6309
- /** Average dwell seconds. `null`: not measured in this panel, which is built from radio pings; camera-measured dwell is in the camera datasets. */
6315
+ /** Mean dwell per window in milliseconds, each window's dwell capped at its own length, over the windows that carry a start time (dwell_capped_windows). `null`: No window of the row carries a start time (dwell_capped_windows = 0). */
6316
+ avg_dwell_ms: number | null;
6317
+ /** Mean capped dwell per camera window, seconds (`avg_dwell_ms` / 1000). `null` when no camera window of the cell-hour carries a start time. */
6310
6318
  avg_dwell_seconds: number | null;
6311
- /** Average face count per observation. `null`: not measured in this panel, which is built from radio pings; camera-measured faces are in the camera datasets. */
6319
+ /** Mean faces per camera window. `null` when the cell-hour holds no camera window. */
6312
6320
  avg_face_count: number | null;
6313
- /** 6-character geohash bucket. */
6321
+ /** The windows avg_dwell_ms averages: camera windows that carry a start time. */
6322
+ dwell_capped_windows: number;
6323
+ /** Of those, the face-backed windows. */
6324
+ face_backed_windows: number;
6325
+ /** Of those, the identifiers whose strongest signal was below it: the devices around the screen. Sources that report no signal strength (mDNS, SSDP, HTTP probe) are in neither split. `null`: No radio slot in the row (radio_slots = 0): only camera windows were placed there, and the radio was not read. */
6326
+ far_key_slots: number | null;
6327
+ /** far_key_slots / radio_slots. `null`: No radio slot in the row (radio_slots = 0): only camera windows were placed there, and the radio was not read. */
6328
+ far_keys_per_slot: number | null;
6329
+ /** Median age of those fixes at the window's instant. `null`: No camera window of the row was placed by a trail fix. */
6330
+ fix_age_p50_s: number | null;
6331
+ /** 90th-percentile age of those fixes. `null`: No camera window of the row was placed by a trail fix. */
6332
+ fix_age_p90_s: number | null;
6333
+ /** Camera windows of a fixed screen with no trail fix in the lookback, placed at its registered site. */
6334
+ fixed_site_positioned_windows: number;
6335
+ /** Geohash-6 cell (about 1.2 x 0.6 km) where the screen was at the unit's instant: on its map-matched path, else at its last GPS trail fix, else (a fixed screen) at its registered site. */
6314
6336
  geohash6: string;
6315
- /** Hour bucket as the integer hour (0..23) cast to string. */
6337
+ /** Start of the UTC hour, `YYYY-MM-DD HH:MM:SS`. A camera window counts in the hour it closed, a radio slot in the hour of its midpoint. */
6316
6338
  hour: string;
6317
- /** Income tier bucket (e.g. `low`, `mid`, `high`). */
6318
- income_tier: string;
6319
- /** Observation count. */
6320
- observation_count: number;
6321
- /** Distinct screen count contributing to this bucket. */
6322
- screen_count: number;
6323
- /** Unique-device count. */
6324
- unique_devices: number;
6325
- /** Venue category from `screens_live.venue_category`. */
6339
+ /** `null` on every row: no income source joins the panel (definition 1 wrote `unknown`). */
6340
+ income_tier: string | null;
6341
+ /** Camera windows placed at the screen's last GPS fix at or before their instant. */
6342
+ last_fix_positioned_windows: number;
6343
+ /** The near-field boundary of the row's day: the active pass_audience method register's rf_near_rssi_dbm, the boundary the in-cab radio uses. */
6344
+ near_field_rssi_dbm: number;
6345
+ /** Of those, the identifiers whose strongest signal in the slot was at or above near_field_rssi_dbm: in the vehicle or against the screen. `null`: No radio slot in the row (radio_slots = 0): only camera windows were placed there, and the radio was not read. */
6346
+ near_key_slots: number | null;
6347
+ /** near_key_slots / radio_slots: near-field identifiers concurrent in one slot. The approved metric radio_identifiers_per_person converts near-field passenger Bluetooth identifiers to people: it is measured in the cab, where the driver's phone and the vehicle's own devices are removed by role. `null`: No radio slot in the row (radio_slots = 0): only camera windows were placed there, and the radio was not read. */
6348
+ near_keys_per_slot: number | null;
6349
+ /** Radio observations (pings) of those identifiers in the cell-hour (`radio_pings`). `null`: No radio slot in the row (radio_slots = 0): only camera windows were placed there, and the radio was not read. */
6350
+ observation_count: number | null;
6351
+ /** Camera-graded windows (face- or person-backed, ~10 s each) placed in the cell. */
6352
+ observation_windows: number;
6353
+ /** Exact 95th percentile of the per-window face reading over the row's windows. `null`: No camera window in the row. */
6354
+ p95_face_count: number | null;
6355
+ /** Camera windows placed on the map-matched vehicle path at their instant. */
6356
+ path_positioned_windows: number;
6357
+ /** Of those, the person-backed windows. */
6358
+ person_backed_windows: number;
6359
+ /** The windows persons_per_window averages. */
6360
+ person_reading_windows: number;
6361
+ /** Mean people in view per camera window, faced or not: per window the larger of its mean person count and its mean face count (the in-cab panel's persons reading), over the windows that carry one. `null`: No camera window of the row carries a persons reading (person_reading_windows = 0). */
6362
+ persons_per_window: number | null;
6363
+ /** Radio slots of a fixed screen with no trail fix in the lookback, placed at its registered site. */
6364
+ radio_fixed_site_positioned_slots: number;
6365
+ /** Radio slots placed at the screen's last GPS fix at or before their midpoint. */
6366
+ radio_last_fix_positioned_slots: number;
6367
+ /** Radio slots placed on the map-matched path at their midpoint. */
6368
+ radio_path_positioned_slots: number;
6369
+ /** Radio observations of the visitor identifiers in the row's slots. `null`: No radio slot in the row (radio_slots = 0): only camera windows were placed there, and the radio was not read. */
6370
+ radio_pings: number | null;
6371
+ /** Distinct screens whose radio slots the row holds. `null`: No radio slot in the row (radio_slots = 0): only camera windows were placed there, and the radio was not read. */
6372
+ radio_screens: number | null;
6373
+ /** 6-minute radio slots of screens placed in the cell: a slot in which the screen's visitor radio read an identifier (a slot in which the scanner reported only the screen's own Wi-Fi access point does not show the visitor radio ran, and is no slot here). 0 when only camera windows fell in the row. */
6374
+ radio_slots: number;
6375
+ /** Distinct screens whose radio slots the cell-hour holds (`radio_screens`). `null`: No radio slot in the row (radio_slots = 0): only camera windows were placed there, and the radio was not read. */
6376
+ screen_count: number | null;
6377
+ /** Distinct screens whose camera windows the row holds. */
6378
+ screens: number;
6379
+ /** Distinct visitor-source radio identifiers (BLE, mDNS, SSDP, HTTP probe) over the cell-hour's radio slots, exact. A distinct count: rows do not add. `null`: No radio slot in the row (radio_slots = 0): only camera windows were placed there, and the radio was not read. */
6380
+ unique_devices: number | null;
6381
+ /** The screen's registered venue category (`transit` for a vehicle screen); empty when the registry holds none. */
6326
6382
  venue_category: string;
6383
+ /** Visitor-source radio identifiers (BLE, mDNS, SSDP, HTTP probe) distinct within each slot, summed over the slots. `null`: No radio slot in the row (radio_slots = 0): only camera windows were placed there, and the radio was not read. */
6384
+ visitor_key_slots: number | null;
6385
+ /** visitor_key_slots / radio_slots: identifiers concurrent in one 6-minute slot, every visitor source and both fields. `null`: No radio slot in the row (radio_slots = 0): only camera windows were placed there, and the radio was not read. */
6386
+ visitor_keys_per_slot: number | null;
6327
6387
  }>;
6328
6388
  /** `true` when more cells follow this page: request `next_offset`. */
6329
6389
  truncated: boolean;
@@ -333,6 +333,8 @@ type AudienceSegment = {
333
333
  type AudienceSocialAttention = {
334
334
  amplification_evidence: string;
335
335
  cascade_depth: number;
336
+ data_projection_version: number;
337
+ data_projection_xid: string;
336
338
  /** All 5 columns NOT NULL except primary_attention_anchor_face_index (only legit NULL: no anchor or solo scene). */
337
339
  primary_attention_anchor_face_index?: number | null;
338
340
  /** NUMERIC(4,3). */
@@ -2384,7 +2386,7 @@ type Partner = {
2384
2386
  type PartnerAdDeliveryProfile = {
2385
2387
  /** Android SDK API level as reported by the device; `null` when not reported, and then no Android rule fires at all. Below 23 forces `mode: vast_fallback` and turns `auto_recovery_enabled` off. 23-25 with desugaring reported off only appends a warning to `notes` and leaves the mode alone. */
2386
2388
  android_api_level?: number | null;
2387
- /** Whether the SERVER may auto-enqueue recovery device commands for this device — the `refresh_ads` and `restart` it issues when a screen heartbeats online without recent VAST requests, or with stalled playback. It is not a client-side setting, and it goes false alongside every `vast_fallback` verdict so we do not restart a device whose player we already know is the wrong one. */
2389
+ /** Whether the SERVER may auto-enqueue recovery device commands for this device — the `refresh_ads` and `restart` it issues when a screen heartbeats online without recent VAST requests, or with stalled playback. It is not a client-side setting, and it goes false alongside every `vast_fallback` verdict so we do not restart a device whose player we already know is the wrong one. Even when true, a recovery command is queued only for a device that acts on commands, meaning one that acknowledged a command (`POST /device/{deviceId}/command/{commandId}/ack`) in the last 7 days, or that was handed none in that time. A device that let a delivered command expire unacknowledged, and acknowledged none, is sent no recovery command until that command is 7 days old. */
2388
2390
  auto_recovery_enabled?: boolean;
2389
2391
  /** Echoed back from the device's own heartbeat telemetry, or `unknown` when the device never reported one. It selects which compatibility rules run: `android_native` enables the Android API-level gate, `html5_webview` the Chromium-version checks; `disabled` and `unknown` skip both, so no mode change can result from those. */
2390
2392
  ima_integration?: "android_native" | "html5_webview" | "disabled" | "unknown";
@@ -6275,7 +6277,7 @@ interface exportDatasetOperation {
6275
6277
  };
6276
6278
  }
6277
6279
  /**
6278
- * Geographic audience-density panel (data-licensing)
6280
+ * Geographic audience panel (data-licensing)
6279
6281
  * GET /v1/partner/data/geohash-audience-panel
6280
6282
  */
6281
6283
  interface getGeohashAudiencePanelOperation {
@@ -6292,8 +6294,12 @@ interface getGeohashAudiencePanelOperation {
6292
6294
  };
6293
6295
  response: {
6294
6296
  data?: {
6297
+ /** The build of the day this page read (UTC, `YYYY-MM-DD HH:MM:SS.mmm`). A day with no build is answered `404` `day_not_built`. */
6298
+ built_at: string;
6295
6299
  /** Day exported (UTC). */
6296
6300
  date: string;
6301
+ /** The panel's definition (2 since 2026-10-19). */
6302
+ definition_version: number;
6297
6303
  /** Rows per page this response was read with. */
6298
6304
  limit: number;
6299
6305
  /** The `offset` of the next page, or `null` on the last page. */
@@ -6302,28 +6308,82 @@ interface getGeohashAudiencePanelOperation {
6302
6308
  offset: number;
6303
6309
  /** Integer partner_id (`partners.partner_id`). */
6304
6310
  partner_id: number;
6305
- /** Per-row aggregates, every cell with its counts. */
6311
+ /** One row per (hour, geohash6, venue_category), every cell with its counts. */
6306
6312
  rows: Array<{
6307
- /** Average attention score. `null`: not measured in this panel, which is built from radio pings; camera-measured attention is in the camera datasets. */
6313
+ /** Mean device head-pose index 0-1 over the camera windows. `null` when the cell-hour holds no camera window. */
6308
6314
  avg_attention: number | null;
6309
- /** Average dwell seconds. `null`: not measured in this panel, which is built from radio pings; camera-measured dwell is in the camera datasets. */
6315
+ /** Mean dwell per window in milliseconds, each window's dwell capped at its own length, over the windows that carry a start time (dwell_capped_windows). `null`: No window of the row carries a start time (dwell_capped_windows = 0). */
6316
+ avg_dwell_ms: number | null;
6317
+ /** Mean capped dwell per camera window, seconds (`avg_dwell_ms` / 1000). `null` when no camera window of the cell-hour carries a start time. */
6310
6318
  avg_dwell_seconds: number | null;
6311
- /** Average face count per observation. `null`: not measured in this panel, which is built from radio pings; camera-measured faces are in the camera datasets. */
6319
+ /** Mean faces per camera window. `null` when the cell-hour holds no camera window. */
6312
6320
  avg_face_count: number | null;
6313
- /** 6-character geohash bucket. */
6321
+ /** The windows avg_dwell_ms averages: camera windows that carry a start time. */
6322
+ dwell_capped_windows: number;
6323
+ /** Of those, the face-backed windows. */
6324
+ face_backed_windows: number;
6325
+ /** Of those, the identifiers whose strongest signal was below it: the devices around the screen. Sources that report no signal strength (mDNS, SSDP, HTTP probe) are in neither split. `null`: No radio slot in the row (radio_slots = 0): only camera windows were placed there, and the radio was not read. */
6326
+ far_key_slots: number | null;
6327
+ /** far_key_slots / radio_slots. `null`: No radio slot in the row (radio_slots = 0): only camera windows were placed there, and the radio was not read. */
6328
+ far_keys_per_slot: number | null;
6329
+ /** Median age of those fixes at the window's instant. `null`: No camera window of the row was placed by a trail fix. */
6330
+ fix_age_p50_s: number | null;
6331
+ /** 90th-percentile age of those fixes. `null`: No camera window of the row was placed by a trail fix. */
6332
+ fix_age_p90_s: number | null;
6333
+ /** Camera windows of a fixed screen with no trail fix in the lookback, placed at its registered site. */
6334
+ fixed_site_positioned_windows: number;
6335
+ /** Geohash-6 cell (about 1.2 x 0.6 km) where the screen was at the unit's instant: on its map-matched path, else at its last GPS trail fix, else (a fixed screen) at its registered site. */
6314
6336
  geohash6: string;
6315
- /** Hour bucket as the integer hour (0..23) cast to string. */
6337
+ /** Start of the UTC hour, `YYYY-MM-DD HH:MM:SS`. A camera window counts in the hour it closed, a radio slot in the hour of its midpoint. */
6316
6338
  hour: string;
6317
- /** Income tier bucket (e.g. `low`, `mid`, `high`). */
6318
- income_tier: string;
6319
- /** Observation count. */
6320
- observation_count: number;
6321
- /** Distinct screen count contributing to this bucket. */
6322
- screen_count: number;
6323
- /** Unique-device count. */
6324
- unique_devices: number;
6325
- /** Venue category from `screens_live.venue_category`. */
6339
+ /** `null` on every row: no income source joins the panel (definition 1 wrote `unknown`). */
6340
+ income_tier: string | null;
6341
+ /** Camera windows placed at the screen's last GPS fix at or before their instant. */
6342
+ last_fix_positioned_windows: number;
6343
+ /** The near-field boundary of the row's day: the active pass_audience method register's rf_near_rssi_dbm, the boundary the in-cab radio uses. */
6344
+ near_field_rssi_dbm: number;
6345
+ /** Of those, the identifiers whose strongest signal in the slot was at or above near_field_rssi_dbm: in the vehicle or against the screen. `null`: No radio slot in the row (radio_slots = 0): only camera windows were placed there, and the radio was not read. */
6346
+ near_key_slots: number | null;
6347
+ /** near_key_slots / radio_slots: near-field identifiers concurrent in one slot. The approved metric radio_identifiers_per_person converts near-field passenger Bluetooth identifiers to people: it is measured in the cab, where the driver's phone and the vehicle's own devices are removed by role. `null`: No radio slot in the row (radio_slots = 0): only camera windows were placed there, and the radio was not read. */
6348
+ near_keys_per_slot: number | null;
6349
+ /** Radio observations (pings) of those identifiers in the cell-hour (`radio_pings`). `null`: No radio slot in the row (radio_slots = 0): only camera windows were placed there, and the radio was not read. */
6350
+ observation_count: number | null;
6351
+ /** Camera-graded windows (face- or person-backed, ~10 s each) placed in the cell. */
6352
+ observation_windows: number;
6353
+ /** Exact 95th percentile of the per-window face reading over the row's windows. `null`: No camera window in the row. */
6354
+ p95_face_count: number | null;
6355
+ /** Camera windows placed on the map-matched vehicle path at their instant. */
6356
+ path_positioned_windows: number;
6357
+ /** Of those, the person-backed windows. */
6358
+ person_backed_windows: number;
6359
+ /** The windows persons_per_window averages. */
6360
+ person_reading_windows: number;
6361
+ /** Mean people in view per camera window, faced or not: per window the larger of its mean person count and its mean face count (the in-cab panel's persons reading), over the windows that carry one. `null`: No camera window of the row carries a persons reading (person_reading_windows = 0). */
6362
+ persons_per_window: number | null;
6363
+ /** Radio slots of a fixed screen with no trail fix in the lookback, placed at its registered site. */
6364
+ radio_fixed_site_positioned_slots: number;
6365
+ /** Radio slots placed at the screen's last GPS fix at or before their midpoint. */
6366
+ radio_last_fix_positioned_slots: number;
6367
+ /** Radio slots placed on the map-matched path at their midpoint. */
6368
+ radio_path_positioned_slots: number;
6369
+ /** Radio observations of the visitor identifiers in the row's slots. `null`: No radio slot in the row (radio_slots = 0): only camera windows were placed there, and the radio was not read. */
6370
+ radio_pings: number | null;
6371
+ /** Distinct screens whose radio slots the row holds. `null`: No radio slot in the row (radio_slots = 0): only camera windows were placed there, and the radio was not read. */
6372
+ radio_screens: number | null;
6373
+ /** 6-minute radio slots of screens placed in the cell: a slot in which the screen's visitor radio read an identifier (a slot in which the scanner reported only the screen's own Wi-Fi access point does not show the visitor radio ran, and is no slot here). 0 when only camera windows fell in the row. */
6374
+ radio_slots: number;
6375
+ /** Distinct screens whose radio slots the cell-hour holds (`radio_screens`). `null`: No radio slot in the row (radio_slots = 0): only camera windows were placed there, and the radio was not read. */
6376
+ screen_count: number | null;
6377
+ /** Distinct screens whose camera windows the row holds. */
6378
+ screens: number;
6379
+ /** Distinct visitor-source radio identifiers (BLE, mDNS, SSDP, HTTP probe) over the cell-hour's radio slots, exact. A distinct count: rows do not add. `null`: No radio slot in the row (radio_slots = 0): only camera windows were placed there, and the radio was not read. */
6380
+ unique_devices: number | null;
6381
+ /** The screen's registered venue category (`transit` for a vehicle screen); empty when the registry holds none. */
6326
6382
  venue_category: string;
6383
+ /** Visitor-source radio identifiers (BLE, mDNS, SSDP, HTTP probe) distinct within each slot, summed over the slots. `null`: No radio slot in the row (radio_slots = 0): only camera windows were placed there, and the radio was not read. */
6384
+ visitor_key_slots: number | null;
6385
+ /** visitor_key_slots / radio_slots: identifiers concurrent in one 6-minute slot, every visitor source and both fields. `null`: No radio slot in the row (radio_slots = 0): only camera windows were placed there, and the radio was not read. */
6386
+ visitor_keys_per_slot: number | null;
6327
6387
  }>;
6328
6388
  /** `true` when more cells follow this page: request `next_offset`. */
6329
6389
  truncated: boolean;