late-sdk 0.0.1403 → 0.0.1404

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 84ed192f7d2fab4c093a63b652b45e42dc603b89a14113aaec86cdcc3cf585c7
4
- data.tar.gz: 717f05995fc3acf38b984e9d1b27afc8a3f2c2f0b50a1b317bfaab719dcec959
3
+ metadata.gz: 8510d16cc8e7290a7b4a225ffd0278824a63c3c9b2ae23b43a085973fc8e3e3f
4
+ data.tar.gz: 9eb7a35b71116a34e42d7339f227770045b14942aab2a60688e48015f5ace3f1
5
5
  SHA512:
6
- metadata.gz: 5632bf3a9981e9348a88ca199ed6d0ceea02106ecdf7cfb50e57c196f17f08c63ac7d34edbd0464349f8da0845e012efa9759536f51ca55afcdd049c58e67c6d
7
- data.tar.gz: bd6211d4bba84f4330d86e2507754bdbbf23f27e16bc3bddbc05cb840f66fb92ef4d2bc0bf044e0c52dea91de46793f788e4893bf62890b6c9fc1182a1f207fa
6
+ metadata.gz: 4a01e3c64d8e05a4e8126fa18203ed3d16da915fdaf937362860f0e5ece5eacc87b3b5fbcb8002955b4834d9ec8973ef7b377d61b0e69e5318ddc05e8e6fbdbb
7
+ data.tar.gz: 24952b6d468321c6f173d975237c87164a7f51704e1414103cff078aa46d9f9f6e14607675b0c767742d0cd5446f2b700157d33ef9a88749056dee6583d4bfae
data/README.md CHANGED
@@ -1295,6 +1295,8 @@ Class | Method | HTTP request | Description
1295
1295
  - [Zernio::CallRecordTranscriptInner](docs/CallRecordTranscriptInner.md)
1296
1296
  - [Zernio::CampaignAnalyticsResponse](docs/CampaignAnalyticsResponse.md)
1297
1297
  - [Zernio::CampaignAnalyticsResponseAnalytics](docs/CampaignAnalyticsResponseAnalytics.md)
1298
+ - [Zernio::CampaignAnalyticsResponseAnalyticsBreakdownErrorsInner](docs/CampaignAnalyticsResponseAnalyticsBreakdownErrorsInner.md)
1299
+ - [Zernio::CampaignAnalyticsResponseAnalyticsBreakdownsRange](docs/CampaignAnalyticsResponseAnalyticsBreakdownsRange.md)
1298
1300
  - [Zernio::CampaignAnalyticsResponseAnalyticsDailyInner](docs/CampaignAnalyticsResponseAnalyticsDailyInner.md)
1299
1301
  - [Zernio::CampaignAnalyticsResponseAnalyticsImpressionShareCache](docs/CampaignAnalyticsResponseAnalyticsImpressionShareCache.md)
1300
1302
  - [Zernio::CampaignAnalyticsResponseAnalyticsSummary](docs/CampaignAnalyticsResponseAnalyticsSummary.md)
@@ -6,7 +6,12 @@
6
6
  | ---- | ---- | ----------- | ----- |
7
7
  | **summary** | [**AdMetrics**](AdMetrics.md) | | [optional] |
8
8
  | **daily** | [**Array<CampaignAnalyticsResponseAnalyticsDailyInner>**](CampaignAnalyticsResponseAnalyticsDailyInner.md) | | [optional] |
9
- | **breakdowns** | **Hash<String, Array<Object>>** | Requested demographic breakdowns, keyed by dimension. Fetched live from the platform per request and never stored, so these rows can carry fields the stored `summary` and `daily` series do not. LinkedIn rows carry `value` (the pivot URN), `name` (resolved label where LinkedIn provides one), the usual spend/impressions/clicks/ctr/cpc/cpm/engagement figures, plus two reach fields: - `reach`: the segment's `approximateMemberReach`. - `audiencePenetration`: LinkedIn's own ratio of members reached to the size of the targeted audience, passed through verbatim. LinkedIn withholds both below its audience privacy threshold, in which case the keys are ABSENT rather than 0. `audiencePenetration` is available here only: it is not part of the stored metrics series. | [optional] |
9
+ | **breakdowns** | **Hash<String, Array<Object>>** | Requested demographic breakdowns, keyed by dimension. Fetched live from the platform per request and never stored, so these rows can carry fields the stored `summary` and `daily` series do not. LinkedIn rows carry `value` (the pivot URN), `name` (resolved label where LinkedIn provides one), the usual spend/impressions/clicks/ctr/cpc/cpm/engagement figures, plus two reach fields: - `reach`: the segment's `approximateMemberReach`. - `audiencePenetration`: LinkedIn's own ratio of members reached to the size of the targeted audience, passed through verbatim. LinkedIn withholds both below its audience privacy threshold, in which case the keys are ABSENT rather than 0. `audiencePenetration` is available here only: it is not part of the stored metrics series. TikTok rows are keyed by TikTok's own dimension name (`country_code` for `country`, `platform` for `publisher_platform`). `placement` rows carry the label TikTok Ads Manager shows (`TikTok`, `TikTok Ad Network`, `News Feed App Series`) in `placement` and TikTok's API value (`PLACEMENT_TIKTOK`, `PLACEMENT_PANGLE`, `PLACEMENT_GLOBAL_APP_BUNDLE`) in `placementRaw`; a value without a known label carries the raw value in both. A requested dimension with no data in the range is an empty array. | [optional] |
10
+ | **unsupported_breakdowns** | **Array<String>** | Requested breakdowns this platform cannot break down by (e.g. region on TikTok, any breakdown on Google). Absent when every requested breakdown is supported. | [optional] |
11
+ | **breakdown_hints** | **Hash<String, String>** | Guidance for some names in unsupportedBreakdowns, keyed by that name (e.g. placement on Meta points at publisher_platform and platform_position; platform_position on TikTok points at placement). Absent when no unsupported name has a hint. | [optional] |
12
+ | **breakdown_errors** | [**Array<CampaignAnalyticsResponseAnalyticsBreakdownErrorsInner>**](CampaignAnalyticsResponseAnalyticsBreakdownErrorsInner.md) | TikTok only: breakdowns the platform failed to return (rate limit, permission, rejected query). Each one is an empty array under breakdowns; summary and daily are unaffected. Absent when every breakdown answered. | [optional] |
13
+ | **breakdown_dropped_metrics** | **Hash<String, Array<String>>** | TikTok only: TikTok metric names TikTok refused for a breakdown, keyed by the requested breakdown (e.g. total_purchase and total_purchase_value have no relation to platform, ac or language). Every row value derived from a refused metric is null in that breakdown (purchaseValue and roas, or the matching actions and actionValues entries), never a number computed without it. Absent when no metric was refused. | [optional] |
14
+ | **breakdowns_range** | [**CampaignAnalyticsResponseAnalyticsBreakdownsRange**](CampaignAnalyticsResponseAnalyticsBreakdownsRange.md) | | [optional] |
10
15
 
11
16
  ## Example
12
17
 
@@ -16,7 +21,12 @@ require 'zernio-sdk'
16
21
  instance = Zernio::AdAnalyticsResponseAnalytics.new(
17
22
  summary: null,
18
23
  daily: null,
19
- breakdowns: null
24
+ breakdowns: null,
25
+ unsupported_breakdowns: null,
26
+ breakdown_hints: null,
27
+ breakdown_errors: null,
28
+ breakdown_dropped_metrics: {publisher_platform=[total_purchase, total_purchase_value, total_initiate_checkout_value]},
29
+ breakdowns_range: null
20
30
  )
21
31
  ```
22
32
 
@@ -230,7 +230,7 @@ end
230
230
 
231
231
  Get ad analytics
232
232
 
233
- Returns one ad's performance summary and daily timeline, with optional audience breakdowns on Meta and TikTok. Includes summary metrics, a daily timeline over the requested date range, and optional demographic breakdowns (Meta and TikTok only). If no date range is provided, defaults to the last 90 days. Date range is capped at 730 days max.
233
+ Returns one ad's performance summary and daily timeline, with optional audience breakdowns on Meta, TikTok and LinkedIn. Includes summary metrics, a daily timeline over the requested date range, and optional demographic breakdowns (Meta, TikTok and LinkedIn only). If no date range is provided, defaults to the last 90 days. Date range is capped at 730 days max.
234
234
 
235
235
  ### Examples
236
236
 
@@ -248,7 +248,7 @@ ad_id = 'ad_id_example' # String |
248
248
  opts = {
249
249
  from_date: Date.parse('2013-10-20'), # Date | Start of date range (YYYY-MM-DD). Defaults to 90 days ago.
250
250
  to_date: Date.parse('2013-10-20'), # Date | End of date range (YYYY-MM-DD). Defaults to today. Max 730-day range.
251
- breakdowns: 'breakdowns_example' # String | Comma-separated breakdown dimensions. **Meta**: age, gender, country, publisher_platform, device_platform, region. **TikTok**: gender, age, country_code, platform, ac, language. **LinkedIn** (firmographics): job_title, job_function, seniority, industry, company, company_size, country, region. Rows carry the raw pivot `value` plus a resolved `name`. LinkedIn serves these aggregated over the whole range, delays the data 12-24h, and omits segments with fewer than 3 events.
251
+ breakdowns: 'breakdowns_example' # String | Comma-separated breakdown dimensions. **Meta**: age, gender, country, publisher_platform, device_platform, region, platform_position, impression_device, video_asset, image_asset, body_asset, title_asset. **TikTok**: gender, age, country (or country_code), publisher_platform (or platform), ac, language, placement. TikTok serves at most 365 days per breakdown, so a longer range is read over its last 365 days and `analytics.breakdownsRange` says which window. **LinkedIn** (firmographics): job_title, job_function, seniority, industry, company, company_size, country, region. Rows carry the raw pivot `value` plus a resolved `name`. LinkedIn serves these aggregated over the whole range, delays the data 12-24h, and omits segments with fewer than 3 events. A known dimension the platform cannot break down by is listed in `analytics.unsupportedBreakdowns` instead of being dropped (with guidance in `analytics.breakdownHints` where there is an alternative); the rest of the response is unchanged. An unknown name returns 400. A TikTok dimension that fails is listed in `analytics.breakdownErrors` and the response stays 200. Metrics TikTok refuses for a dimension are listed in `analytics.breakdownDroppedMetrics`, and the row values derived from them are null.
252
252
  }
253
253
 
254
254
  begin
@@ -285,7 +285,7 @@ end
285
285
  | **ad_id** | **String** | | |
286
286
  | **from_date** | **Date** | Start of date range (YYYY-MM-DD). Defaults to 90 days ago. | [optional] |
287
287
  | **to_date** | **Date** | End of date range (YYYY-MM-DD). Defaults to today. Max 730-day range. | [optional] |
288
- | **breakdowns** | **String** | Comma-separated breakdown dimensions. **Meta**: age, gender, country, publisher_platform, device_platform, region. **TikTok**: gender, age, country_code, platform, ac, language. **LinkedIn** (firmographics): job_title, job_function, seniority, industry, company, company_size, country, region. Rows carry the raw pivot `value` plus a resolved `name`. LinkedIn serves these aggregated over the whole range, delays the data 12-24h, and omits segments with fewer than 3 events. | [optional] |
288
+ | **breakdowns** | **String** | Comma-separated breakdown dimensions. **Meta**: age, gender, country, publisher_platform, device_platform, region, platform_position, impression_device, video_asset, image_asset, body_asset, title_asset. **TikTok**: gender, age, country (or country_code), publisher_platform (or platform), ac, language, placement. TikTok serves at most 365 days per breakdown, so a longer range is read over its last 365 days and `analytics.breakdownsRange` says which window. **LinkedIn** (firmographics): job_title, job_function, seniority, industry, company, company_size, country, region. Rows carry the raw pivot `value` plus a resolved `name`. LinkedIn serves these aggregated over the whole range, delays the data 12-24h, and omits segments with fewer than 3 events. A known dimension the platform cannot break down by is listed in `analytics.unsupportedBreakdowns` instead of being dropped (with guidance in `analytics.breakdownHints` where there is an alternative); the rest of the response is unchanged. An unknown name returns 400. A TikTok dimension that fails is listed in `analytics.breakdownErrors` and the response stays 200. Metrics TikTok refuses for a dimension are listed in `analytics.breakdownDroppedMetrics`, and the row values derived from them are null. | [optional] |
289
289
 
290
290
  ### Return type
291
291
 
@@ -471,7 +471,7 @@ end
471
471
 
472
472
  Get campaign analytics
473
473
 
474
- Returns a campaign's performance summary and daily timeline, with optional breakdowns by age, gender and other audience dimensions. Returns performance analytics for a whole campaign in one call: summary metrics, a daily timeline over the requested date range (summed across the campaign's ads), and optional demographic breakdowns. Breakdowns are fetched live from Meta at the campaign level (one call per dimension, no per-ad fan-out), so an agency dashboard gets campaign-level age/gender/etc. without summing thousands of per-ad reads. `campaignId` is the platform campaign id; pass `platform` when a campaign id could be ambiguous across platforms. If no date range is provided, defaults to the last 90 days. Date range is capped at 730 days max. Google adds searchImpressionShare, searchBudgetLostImpressionShare, searchRankLostImpressionShare, searchTopImpressionShare and searchAbsoluteTopImpressionShare under analytics.summary for the requested inclusive range. These ratios are queried together without daily segmentation and cached for 10 minutes. Unavailable values are null. analytics.impressionShareCache reports cachedAt and stale independently of synced metrics.
474
+ Returns a campaign's performance summary and daily timeline, with optional breakdowns by age, gender and other audience dimensions. Returns performance analytics for a whole campaign in one call: summary metrics, a daily timeline over the requested date range (summed across the campaign's ads), and optional demographic breakdowns. Breakdowns are fetched live from Meta, TikTok or LinkedIn at the campaign level (one call per dimension, no per-ad fan-out), so an agency dashboard gets campaign-level age/gender/placement/etc. without summing thousands of per-ad reads. `campaignId` is the platform campaign id; pass `platform` when a campaign id could be ambiguous across platforms. If no date range is provided, defaults to the last 90 days. Date range is capped at 730 days max. Google adds searchImpressionShare, searchBudgetLostImpressionShare, searchRankLostImpressionShare, searchTopImpressionShare and searchAbsoluteTopImpressionShare under analytics.summary for the requested inclusive range. These ratios are queried together without daily segmentation and cached for 10 minutes. Unavailable values are null. analytics.impressionShareCache reports cachedAt and stale independently of synced metrics.
475
475
 
476
476
  ### Examples
477
477
 
@@ -490,7 +490,7 @@ opts = {
490
490
  platform: 'platform_example', # String | Disambiguate when the campaign id exists across platforms (e.g. facebook, instagram).
491
491
  from_date: Date.parse('2013-10-20'), # Date | Start of date range (YYYY-MM-DD). Defaults to 90 days ago.
492
492
  to_date: Date.parse('2013-10-20'), # Date | End of date range (YYYY-MM-DD). Defaults to today. Max 730-day range.
493
- breakdowns: 'breakdowns_example' # String | Comma-separated breakdown dimensions. **Meta**: age, gender, country, publisher_platform, device_platform, region, platform_position, impression_device, video_asset, image_asset, body_asset, title_asset. **LinkedIn** (firmographics): job_title, job_function, seniority, industry, company, company_size, country, region. Rows carry the raw pivot `value` plus a resolved `name`. LinkedIn serves these aggregated over the whole range, delays the data 12-24h, and omits segments with fewer than 3 events.
493
+ breakdowns: 'breakdowns_example' # String | Comma-separated breakdown dimensions. **Meta**: age, gender, country, publisher_platform, device_platform, region, platform_position, impression_device, video_asset, image_asset, body_asset, title_asset. **TikTok**: gender, age, country (or country_code), publisher_platform (or platform), ac, language, placement. TikTok serves at most 365 days per breakdown, so a longer range is read over its last 365 days and `analytics.breakdownsRange` says which window. **LinkedIn** (firmographics): job_title, job_function, seniority, industry, company, company_size, country, region. Rows carry the raw pivot `value` plus a resolved `name`. LinkedIn serves these aggregated over the whole range, delays the data 12-24h, and omits segments with fewer than 3 events. A known dimension the platform cannot break down by is listed in `analytics.unsupportedBreakdowns` instead of being dropped (with guidance in `analytics.breakdownHints` where there is an alternative); the rest of the response is unchanged. An unknown name returns 400. A TikTok dimension that fails is listed in `analytics.breakdownErrors` and the response stays 200. Metrics TikTok refuses for a dimension are listed in `analytics.breakdownDroppedMetrics`, and the row values derived from them are null.
494
494
  }
495
495
 
496
496
  begin
@@ -528,7 +528,7 @@ end
528
528
  | **platform** | **String** | Disambiguate when the campaign id exists across platforms (e.g. facebook, instagram). | [optional] |
529
529
  | **from_date** | **Date** | Start of date range (YYYY-MM-DD). Defaults to 90 days ago. | [optional] |
530
530
  | **to_date** | **Date** | End of date range (YYYY-MM-DD). Defaults to today. Max 730-day range. | [optional] |
531
- | **breakdowns** | **String** | Comma-separated breakdown dimensions. **Meta**: age, gender, country, publisher_platform, device_platform, region, platform_position, impression_device, video_asset, image_asset, body_asset, title_asset. **LinkedIn** (firmographics): job_title, job_function, seniority, industry, company, company_size, country, region. Rows carry the raw pivot `value` plus a resolved `name`. LinkedIn serves these aggregated over the whole range, delays the data 12-24h, and omits segments with fewer than 3 events. | [optional] |
531
+ | **breakdowns** | **String** | Comma-separated breakdown dimensions. **Meta**: age, gender, country, publisher_platform, device_platform, region, platform_position, impression_device, video_asset, image_asset, body_asset, title_asset. **TikTok**: gender, age, country (or country_code), publisher_platform (or platform), ac, language, placement. TikTok serves at most 365 days per breakdown, so a longer range is read over its last 365 days and `analytics.breakdownsRange` says which window. **LinkedIn** (firmographics): job_title, job_function, seniority, industry, company, company_size, country, region. Rows carry the raw pivot `value` plus a resolved `name`. LinkedIn serves these aggregated over the whole range, delays the data 12-24h, and omits segments with fewer than 3 events. A known dimension the platform cannot break down by is listed in `analytics.unsupportedBreakdowns` instead of being dropped (with guidance in `analytics.breakdownHints` where there is an alternative); the rest of the response is unchanged. An unknown name returns 400. A TikTok dimension that fails is listed in `analytics.breakdownErrors` and the response stays 200. Metrics TikTok refuses for a dimension are listed in `analytics.breakdownDroppedMetrics`, and the row values derived from them are null. | [optional] |
532
532
 
533
533
  ### Return type
534
534
 
@@ -832,7 +832,7 @@ opts = {
832
832
  page_token: 'page_token_example', # String | Google only: cursor from paging.nextPageToken of the previous page.
833
833
  level: 'ad', # String | Row granularity
834
834
  fields: 'fields_example', # String | Comma-separated Graph insights fields (e.g. spend,impressions,frequency,website_purchase_roas). Omitted = Meta's default set.
835
- breakdowns: 'breakdowns_example', # String | Comma-separated Graph breakdowns (e.g. age,gender or publisher_platform).
835
+ breakdowns: 'breakdowns_example', # String | Meta only: comma-separated Graph breakdowns (e.g. age,gender or publisher_platform). Returns 400 on TikTok (add the breakdown to dimensions with reportType=AUDIENCE, e.g. dimensions=campaign_id,placement) and on Google (select segments.* in the query).
836
836
  action_breakdowns: 'action_breakdowns_example', # String | Comma-separated Graph action breakdowns; segments the actions[] arrays in each row. Pass `none` to clear Meta's default action_type breakdown, required to combine some non-action breakdowns such as instagram_ads_follow_type (otherwise Meta returns a (#100) invalid-combination error).
837
837
  action_attribution_windows: 'action_attribution_windows_example', # String | Comma-separated Meta attribution windows. Action values are returned keyed per window.
838
838
  action_report_time: 'action_report_time_example', # String | When actions are counted: impression, conversion or mixed.
@@ -891,7 +891,7 @@ end
891
891
  | **page_token** | **String** | Google only: cursor from paging.nextPageToken of the previous page. | [optional] |
892
892
  | **level** | **String** | Row granularity | [optional] |
893
893
  | **fields** | **String** | Comma-separated Graph insights fields (e.g. spend,impressions,frequency,website_purchase_roas). Omitted = Meta's default set. | [optional] |
894
- | **breakdowns** | **String** | Comma-separated Graph breakdowns (e.g. age,gender or publisher_platform). | [optional] |
894
+ | **breakdowns** | **String** | Meta only: comma-separated Graph breakdowns (e.g. age,gender or publisher_platform). Returns 400 on TikTok (add the breakdown to dimensions with reportType=AUDIENCE, e.g. dimensions=campaign_id,placement) and on Google (select segments.* in the query). | [optional] |
895
895
  | **action_breakdowns** | **String** | Comma-separated Graph action breakdowns; segments the actions[] arrays in each row. Pass `none` to clear Meta's default action_type breakdown, required to combine some non-action breakdowns such as instagram_ads_follow_type (otherwise Meta returns a (#100) invalid-combination error). | [optional] |
896
896
  | **action_attribution_windows** | **String** | Comma-separated Meta attribution windows. Action values are returned keyed per window. | [optional] |
897
897
  | **action_report_time** | **String** | When actions are counted: impression, conversion or mixed. | [optional] |
@@ -7,7 +7,12 @@
7
7
  | **summary** | [**CampaignAnalyticsResponseAnalyticsSummary**](CampaignAnalyticsResponseAnalyticsSummary.md) | | [optional] |
8
8
  | **impression_share_cache** | [**CampaignAnalyticsResponseAnalyticsImpressionShareCache**](CampaignAnalyticsResponseAnalyticsImpressionShareCache.md) | | [optional] |
9
9
  | **daily** | [**Array<CampaignAnalyticsResponseAnalyticsDailyInner>**](CampaignAnalyticsResponseAnalyticsDailyInner.md) | | [optional] |
10
- | **breakdowns** | **Hash<String, Array<Object>>** | Requested demographic breakdowns, keyed by dimension. Fetched live from the platform per request and never stored, so these rows can carry fields the stored `summary` and `daily` series do not. LinkedIn rows carry `value` (the pivot URN), `name` (resolved label where LinkedIn provides one), the usual spend/impressions/clicks/ctr/cpc/cpm/engagement figures, plus two reach fields: - `reach`: the segment's `approximateMemberReach`. - `audiencePenetration`: LinkedIn's own ratio of members reached to the size of the targeted audience, passed through verbatim. LinkedIn withholds both below its audience privacy threshold, in which case the keys are ABSENT rather than 0. `audiencePenetration` is available here only: it is not part of the stored metrics series. | [optional] |
10
+ | **breakdowns** | **Hash<String, Array<Object>>** | Requested demographic breakdowns, keyed by dimension. Fetched live from the platform per request and never stored, so these rows can carry fields the stored `summary` and `daily` series do not. LinkedIn rows carry `value` (the pivot URN), `name` (resolved label where LinkedIn provides one), the usual spend/impressions/clicks/ctr/cpc/cpm/engagement figures, plus two reach fields: - `reach`: the segment's `approximateMemberReach`. - `audiencePenetration`: LinkedIn's own ratio of members reached to the size of the targeted audience, passed through verbatim. LinkedIn withholds both below its audience privacy threshold, in which case the keys are ABSENT rather than 0. `audiencePenetration` is available here only: it is not part of the stored metrics series. TikTok rows are keyed by TikTok's own dimension name (`country_code` for `country`, `platform` for `publisher_platform`). `placement` rows carry the label TikTok Ads Manager shows (`TikTok`, `TikTok Ad Network`, `News Feed App Series`) in `placement` and TikTok's API value (`PLACEMENT_TIKTOK`, `PLACEMENT_PANGLE`, `PLACEMENT_GLOBAL_APP_BUNDLE`) in `placementRaw`; a value without a known label carries the raw value in both. A requested dimension with no data in the range is an empty array. | [optional] |
11
+ | **unsupported_breakdowns** | **Array<String>** | Requested breakdowns this platform cannot break down by (e.g. region on TikTok, any breakdown on Google). Absent when every requested breakdown is supported. | [optional] |
12
+ | **breakdown_hints** | **Hash<String, String>** | Guidance for some names in unsupportedBreakdowns, keyed by that name (e.g. placement on Meta points at publisher_platform and platform_position; platform_position on TikTok points at placement). Absent when no unsupported name has a hint. | [optional] |
13
+ | **breakdown_errors** | [**Array<CampaignAnalyticsResponseAnalyticsBreakdownErrorsInner>**](CampaignAnalyticsResponseAnalyticsBreakdownErrorsInner.md) | TikTok only: breakdowns the platform failed to return (rate limit, permission, rejected query). Each one is an empty array under breakdowns; summary and daily are unaffected. Absent when every breakdown answered. | [optional] |
14
+ | **breakdown_dropped_metrics** | **Hash<String, Array<String>>** | TikTok only: TikTok metric names TikTok refused for a breakdown, keyed by the requested breakdown (e.g. total_purchase and total_purchase_value have no relation to platform, ac or language). Every row value derived from a refused metric is null in that breakdown (purchaseValue and roas, or the matching actions and actionValues entries), never a number computed without it. Absent when no metric was refused. | [optional] |
15
+ | **breakdowns_range** | [**CampaignAnalyticsResponseAnalyticsBreakdownsRange**](CampaignAnalyticsResponseAnalyticsBreakdownsRange.md) | | [optional] |
11
16
 
12
17
  ## Example
13
18
 
@@ -18,7 +23,12 @@ instance = Zernio::CampaignAnalyticsResponseAnalytics.new(
18
23
  summary: null,
19
24
  impression_share_cache: null,
20
25
  daily: null,
21
- breakdowns: null
26
+ breakdowns: null,
27
+ unsupported_breakdowns: null,
28
+ breakdown_hints: null,
29
+ breakdown_errors: null,
30
+ breakdown_dropped_metrics: {publisher_platform=[total_purchase, total_purchase_value, total_initiate_checkout_value]},
31
+ breakdowns_range: null
22
32
  )
23
33
  ```
24
34
 
@@ -0,0 +1,20 @@
1
+ # Zernio::CampaignAnalyticsResponseAnalyticsBreakdownErrorsInner
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **breakdown** | **String** | | [optional] |
8
+ | **message** | **String** | The platform's error message. | [optional] |
9
+
10
+ ## Example
11
+
12
+ ```ruby
13
+ require 'zernio-sdk'
14
+
15
+ instance = Zernio::CampaignAnalyticsResponseAnalyticsBreakdownErrorsInner.new(
16
+ breakdown: null,
17
+ message: null
18
+ )
19
+ ```
20
+
@@ -0,0 +1,20 @@
1
+ # Zernio::CampaignAnalyticsResponseAnalyticsBreakdownsRange
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **from_date** | **Date** | | [optional] |
8
+ | **to_date** | **Date** | | [optional] |
9
+
10
+ ## Example
11
+
12
+ ```ruby
13
+ require 'zernio-sdk'
14
+
15
+ instance = Zernio::CampaignAnalyticsResponseAnalyticsBreakdownsRange.new(
16
+ from_date: null,
17
+ to_date: null
18
+ )
19
+ ```
20
+
@@ -224,12 +224,12 @@ module Zernio
224
224
  end
225
225
 
226
226
  # Get ad analytics
227
- # Returns one ad's performance summary and daily timeline, with optional audience breakdowns on Meta and TikTok. Includes summary metrics, a daily timeline over the requested date range, and optional demographic breakdowns (Meta and TikTok only). If no date range is provided, defaults to the last 90 days. Date range is capped at 730 days max.
227
+ # Returns one ad's performance summary and daily timeline, with optional audience breakdowns on Meta, TikTok and LinkedIn. Includes summary metrics, a daily timeline over the requested date range, and optional demographic breakdowns (Meta, TikTok and LinkedIn only). If no date range is provided, defaults to the last 90 days. Date range is capped at 730 days max.
228
228
  # @param ad_id [String]
229
229
  # @param [Hash] opts the optional parameters
230
230
  # @option opts [Date] :from_date Start of date range (YYYY-MM-DD). Defaults to 90 days ago.
231
231
  # @option opts [Date] :to_date End of date range (YYYY-MM-DD). Defaults to today. Max 730-day range.
232
- # @option opts [String] :breakdowns Comma-separated breakdown dimensions. **Meta**: age, gender, country, publisher_platform, device_platform, region. **TikTok**: gender, age, country_code, platform, ac, language. **LinkedIn** (firmographics): job_title, job_function, seniority, industry, company, company_size, country, region. Rows carry the raw pivot `value` plus a resolved `name`. LinkedIn serves these aggregated over the whole range, delays the data 12-24h, and omits segments with fewer than 3 events.
232
+ # @option opts [String] :breakdowns Comma-separated breakdown dimensions. **Meta**: age, gender, country, publisher_platform, device_platform, region, platform_position, impression_device, video_asset, image_asset, body_asset, title_asset. **TikTok**: gender, age, country (or country_code), publisher_platform (or platform), ac, language, placement. TikTok serves at most 365 days per breakdown, so a longer range is read over its last 365 days and `analytics.breakdownsRange` says which window. **LinkedIn** (firmographics): job_title, job_function, seniority, industry, company, company_size, country, region. Rows carry the raw pivot `value` plus a resolved `name`. LinkedIn serves these aggregated over the whole range, delays the data 12-24h, and omits segments with fewer than 3 events. A known dimension the platform cannot break down by is listed in `analytics.unsupportedBreakdowns` instead of being dropped (with guidance in `analytics.breakdownHints` where there is an alternative); the rest of the response is unchanged. An unknown name returns 400. A TikTok dimension that fails is listed in `analytics.breakdownErrors` and the response stays 200. Metrics TikTok refuses for a dimension are listed in `analytics.breakdownDroppedMetrics`, and the row values derived from them are null.
233
233
  # @return [AdAnalyticsResponse]
234
234
  def get_ad_analytics(ad_id, opts = {})
235
235
  data, _status_code, _headers = get_ad_analytics_with_http_info(ad_id, opts)
@@ -237,12 +237,12 @@ module Zernio
237
237
  end
238
238
 
239
239
  # Get ad analytics
240
- # Returns one ad's performance summary and daily timeline, with optional audience breakdowns on Meta and TikTok. Includes summary metrics, a daily timeline over the requested date range, and optional demographic breakdowns (Meta and TikTok only). If no date range is provided, defaults to the last 90 days. Date range is capped at 730 days max.
240
+ # Returns one ad's performance summary and daily timeline, with optional audience breakdowns on Meta, TikTok and LinkedIn. Includes summary metrics, a daily timeline over the requested date range, and optional demographic breakdowns (Meta, TikTok and LinkedIn only). If no date range is provided, defaults to the last 90 days. Date range is capped at 730 days max.
241
241
  # @param ad_id [String]
242
242
  # @param [Hash] opts the optional parameters
243
243
  # @option opts [Date] :from_date Start of date range (YYYY-MM-DD). Defaults to 90 days ago.
244
244
  # @option opts [Date] :to_date End of date range (YYYY-MM-DD). Defaults to today. Max 730-day range.
245
- # @option opts [String] :breakdowns Comma-separated breakdown dimensions. **Meta**: age, gender, country, publisher_platform, device_platform, region. **TikTok**: gender, age, country_code, platform, ac, language. **LinkedIn** (firmographics): job_title, job_function, seniority, industry, company, company_size, country, region. Rows carry the raw pivot `value` plus a resolved `name`. LinkedIn serves these aggregated over the whole range, delays the data 12-24h, and omits segments with fewer than 3 events.
245
+ # @option opts [String] :breakdowns Comma-separated breakdown dimensions. **Meta**: age, gender, country, publisher_platform, device_platform, region, platform_position, impression_device, video_asset, image_asset, body_asset, title_asset. **TikTok**: gender, age, country (or country_code), publisher_platform (or platform), ac, language, placement. TikTok serves at most 365 days per breakdown, so a longer range is read over its last 365 days and `analytics.breakdownsRange` says which window. **LinkedIn** (firmographics): job_title, job_function, seniority, industry, company, company_size, country, region. Rows carry the raw pivot `value` plus a resolved `name`. LinkedIn serves these aggregated over the whole range, delays the data 12-24h, and omits segments with fewer than 3 events. A known dimension the platform cannot break down by is listed in `analytics.unsupportedBreakdowns` instead of being dropped (with guidance in `analytics.breakdownHints` where there is an alternative); the rest of the response is unchanged. An unknown name returns 400. A TikTok dimension that fails is listed in `analytics.breakdownErrors` and the response stays 200. Metrics TikTok refuses for a dimension are listed in `analytics.breakdownDroppedMetrics`, and the row values derived from them are null.
246
246
  # @return [Array<(AdAnalyticsResponse, Integer, Hash)>] AdAnalyticsResponse data, response status code and response headers
247
247
  def get_ad_analytics_with_http_info(ad_id, opts = {})
248
248
  if @api_client.config.debugging
@@ -468,13 +468,13 @@ module Zernio
468
468
  end
469
469
 
470
470
  # Get campaign analytics
471
- # Returns a campaign's performance summary and daily timeline, with optional breakdowns by age, gender and other audience dimensions. Returns performance analytics for a whole campaign in one call: summary metrics, a daily timeline over the requested date range (summed across the campaign's ads), and optional demographic breakdowns. Breakdowns are fetched live from Meta at the campaign level (one call per dimension, no per-ad fan-out), so an agency dashboard gets campaign-level age/gender/etc. without summing thousands of per-ad reads. `campaignId` is the platform campaign id; pass `platform` when a campaign id could be ambiguous across platforms. If no date range is provided, defaults to the last 90 days. Date range is capped at 730 days max. Google adds searchImpressionShare, searchBudgetLostImpressionShare, searchRankLostImpressionShare, searchTopImpressionShare and searchAbsoluteTopImpressionShare under analytics.summary for the requested inclusive range. These ratios are queried together without daily segmentation and cached for 10 minutes. Unavailable values are null. analytics.impressionShareCache reports cachedAt and stale independently of synced metrics.
471
+ # Returns a campaign's performance summary and daily timeline, with optional breakdowns by age, gender and other audience dimensions. Returns performance analytics for a whole campaign in one call: summary metrics, a daily timeline over the requested date range (summed across the campaign's ads), and optional demographic breakdowns. Breakdowns are fetched live from Meta, TikTok or LinkedIn at the campaign level (one call per dimension, no per-ad fan-out), so an agency dashboard gets campaign-level age/gender/placement/etc. without summing thousands of per-ad reads. `campaignId` is the platform campaign id; pass `platform` when a campaign id could be ambiguous across platforms. If no date range is provided, defaults to the last 90 days. Date range is capped at 730 days max. Google adds searchImpressionShare, searchBudgetLostImpressionShare, searchRankLostImpressionShare, searchTopImpressionShare and searchAbsoluteTopImpressionShare under analytics.summary for the requested inclusive range. These ratios are queried together without daily segmentation and cached for 10 minutes. Unavailable values are null. analytics.impressionShareCache reports cachedAt and stale independently of synced metrics.
472
472
  # @param campaign_id [String] Platform campaign id (platformCampaignId).
473
473
  # @param [Hash] opts the optional parameters
474
474
  # @option opts [String] :platform Disambiguate when the campaign id exists across platforms (e.g. facebook, instagram).
475
475
  # @option opts [Date] :from_date Start of date range (YYYY-MM-DD). Defaults to 90 days ago.
476
476
  # @option opts [Date] :to_date End of date range (YYYY-MM-DD). Defaults to today. Max 730-day range.
477
- # @option opts [String] :breakdowns Comma-separated breakdown dimensions. **Meta**: age, gender, country, publisher_platform, device_platform, region, platform_position, impression_device, video_asset, image_asset, body_asset, title_asset. **LinkedIn** (firmographics): job_title, job_function, seniority, industry, company, company_size, country, region. Rows carry the raw pivot &#x60;value&#x60; plus a resolved &#x60;name&#x60;. LinkedIn serves these aggregated over the whole range, delays the data 12-24h, and omits segments with fewer than 3 events.
477
+ # @option opts [String] :breakdowns Comma-separated breakdown dimensions. **Meta**: age, gender, country, publisher_platform, device_platform, region, platform_position, impression_device, video_asset, image_asset, body_asset, title_asset. **TikTok**: gender, age, country (or country_code), publisher_platform (or platform), ac, language, placement. TikTok serves at most 365 days per breakdown, so a longer range is read over its last 365 days and &#x60;analytics.breakdownsRange&#x60; says which window. **LinkedIn** (firmographics): job_title, job_function, seniority, industry, company, company_size, country, region. Rows carry the raw pivot &#x60;value&#x60; plus a resolved &#x60;name&#x60;. LinkedIn serves these aggregated over the whole range, delays the data 12-24h, and omits segments with fewer than 3 events. A known dimension the platform cannot break down by is listed in &#x60;analytics.unsupportedBreakdowns&#x60; instead of being dropped (with guidance in &#x60;analytics.breakdownHints&#x60; where there is an alternative); the rest of the response is unchanged. An unknown name returns 400. A TikTok dimension that fails is listed in &#x60;analytics.breakdownErrors&#x60; and the response stays 200. Metrics TikTok refuses for a dimension are listed in &#x60;analytics.breakdownDroppedMetrics&#x60;, and the row values derived from them are null.
478
478
  # @return [CampaignAnalyticsResponse]
479
479
  def get_campaign_analytics(campaign_id, opts = {})
480
480
  data, _status_code, _headers = get_campaign_analytics_with_http_info(campaign_id, opts)
@@ -482,13 +482,13 @@ module Zernio
482
482
  end
483
483
 
484
484
  # Get campaign analytics
485
- # Returns a campaign&#39;s performance summary and daily timeline, with optional breakdowns by age, gender and other audience dimensions. Returns performance analytics for a whole campaign in one call: summary metrics, a daily timeline over the requested date range (summed across the campaign&#39;s ads), and optional demographic breakdowns. Breakdowns are fetched live from Meta at the campaign level (one call per dimension, no per-ad fan-out), so an agency dashboard gets campaign-level age/gender/etc. without summing thousands of per-ad reads. &#x60;campaignId&#x60; is the platform campaign id; pass &#x60;platform&#x60; when a campaign id could be ambiguous across platforms. If no date range is provided, defaults to the last 90 days. Date range is capped at 730 days max. Google adds searchImpressionShare, searchBudgetLostImpressionShare, searchRankLostImpressionShare, searchTopImpressionShare and searchAbsoluteTopImpressionShare under analytics.summary for the requested inclusive range. These ratios are queried together without daily segmentation and cached for 10 minutes. Unavailable values are null. analytics.impressionShareCache reports cachedAt and stale independently of synced metrics.
485
+ # Returns a campaign&#39;s performance summary and daily timeline, with optional breakdowns by age, gender and other audience dimensions. Returns performance analytics for a whole campaign in one call: summary metrics, a daily timeline over the requested date range (summed across the campaign&#39;s ads), and optional demographic breakdowns. Breakdowns are fetched live from Meta, TikTok or LinkedIn at the campaign level (one call per dimension, no per-ad fan-out), so an agency dashboard gets campaign-level age/gender/placement/etc. without summing thousands of per-ad reads. &#x60;campaignId&#x60; is the platform campaign id; pass &#x60;platform&#x60; when a campaign id could be ambiguous across platforms. If no date range is provided, defaults to the last 90 days. Date range is capped at 730 days max. Google adds searchImpressionShare, searchBudgetLostImpressionShare, searchRankLostImpressionShare, searchTopImpressionShare and searchAbsoluteTopImpressionShare under analytics.summary for the requested inclusive range. These ratios are queried together without daily segmentation and cached for 10 minutes. Unavailable values are null. analytics.impressionShareCache reports cachedAt and stale independently of synced metrics.
486
486
  # @param campaign_id [String] Platform campaign id (platformCampaignId).
487
487
  # @param [Hash] opts the optional parameters
488
488
  # @option opts [String] :platform Disambiguate when the campaign id exists across platforms (e.g. facebook, instagram).
489
489
  # @option opts [Date] :from_date Start of date range (YYYY-MM-DD). Defaults to 90 days ago.
490
490
  # @option opts [Date] :to_date End of date range (YYYY-MM-DD). Defaults to today. Max 730-day range.
491
- # @option opts [String] :breakdowns Comma-separated breakdown dimensions. **Meta**: age, gender, country, publisher_platform, device_platform, region, platform_position, impression_device, video_asset, image_asset, body_asset, title_asset. **LinkedIn** (firmographics): job_title, job_function, seniority, industry, company, company_size, country, region. Rows carry the raw pivot &#x60;value&#x60; plus a resolved &#x60;name&#x60;. LinkedIn serves these aggregated over the whole range, delays the data 12-24h, and omits segments with fewer than 3 events.
491
+ # @option opts [String] :breakdowns Comma-separated breakdown dimensions. **Meta**: age, gender, country, publisher_platform, device_platform, region, platform_position, impression_device, video_asset, image_asset, body_asset, title_asset. **TikTok**: gender, age, country (or country_code), publisher_platform (or platform), ac, language, placement. TikTok serves at most 365 days per breakdown, so a longer range is read over its last 365 days and &#x60;analytics.breakdownsRange&#x60; says which window. **LinkedIn** (firmographics): job_title, job_function, seniority, industry, company, company_size, country, region. Rows carry the raw pivot &#x60;value&#x60; plus a resolved &#x60;name&#x60;. LinkedIn serves these aggregated over the whole range, delays the data 12-24h, and omits segments with fewer than 3 events. A known dimension the platform cannot break down by is listed in &#x60;analytics.unsupportedBreakdowns&#x60; instead of being dropped (with guidance in &#x60;analytics.breakdownHints&#x60; where there is an alternative); the rest of the response is unchanged. An unknown name returns 400. A TikTok dimension that fails is listed in &#x60;analytics.breakdownErrors&#x60; and the response stays 200. Metrics TikTok refuses for a dimension are listed in &#x60;analytics.breakdownDroppedMetrics&#x60;, and the row values derived from them are null.
492
492
  # @return [Array<(CampaignAnalyticsResponse, Integer, Hash)>] CampaignAnalyticsResponse data, response status code and response headers
493
493
  def get_campaign_analytics_with_http_info(campaign_id, opts = {})
494
494
  if @api_client.config.debugging
@@ -846,7 +846,7 @@ module Zernio
846
846
  # @option opts [String] :page_token Google only: cursor from paging.nextPageToken of the previous page.
847
847
  # @option opts [String] :level Row granularity
848
848
  # @option opts [String] :fields Comma-separated Graph insights fields (e.g. spend,impressions,frequency,website_purchase_roas). Omitted &#x3D; Meta&#39;s default set.
849
- # @option opts [String] :breakdowns Comma-separated Graph breakdowns (e.g. age,gender or publisher_platform).
849
+ # @option opts [String] :breakdowns Meta only: comma-separated Graph breakdowns (e.g. age,gender or publisher_platform). Returns 400 on TikTok (add the breakdown to dimensions with reportType&#x3D;AUDIENCE, e.g. dimensions&#x3D;campaign_id,placement) and on Google (select segments.* in the query).
850
850
  # @option opts [String] :action_breakdowns Comma-separated Graph action breakdowns; segments the actions[] arrays in each row. Pass &#x60;none&#x60; to clear Meta&#39;s default action_type breakdown, required to combine some non-action breakdowns such as instagram_ads_follow_type (otherwise Meta returns a (#100) invalid-combination error).
851
851
  # @option opts [String] :action_attribution_windows Comma-separated Meta attribution windows. Action values are returned keyed per window.
852
852
  # @option opts [String] :action_report_time When actions are counted: impression, conversion or mixed.
@@ -881,7 +881,7 @@ module Zernio
881
881
  # @option opts [String] :page_token Google only: cursor from paging.nextPageToken of the previous page.
882
882
  # @option opts [String] :level Row granularity
883
883
  # @option opts [String] :fields Comma-separated Graph insights fields (e.g. spend,impressions,frequency,website_purchase_roas). Omitted &#x3D; Meta&#39;s default set.
884
- # @option opts [String] :breakdowns Comma-separated Graph breakdowns (e.g. age,gender or publisher_platform).
884
+ # @option opts [String] :breakdowns Meta only: comma-separated Graph breakdowns (e.g. age,gender or publisher_platform). Returns 400 on TikTok (add the breakdown to dimensions with reportType&#x3D;AUDIENCE, e.g. dimensions&#x3D;campaign_id,placement) and on Google (select segments.* in the query).
885
885
  # @option opts [String] :action_breakdowns Comma-separated Graph action breakdowns; segments the actions[] arrays in each row. Pass &#x60;none&#x60; to clear Meta&#39;s default action_type breakdown, required to combine some non-action breakdowns such as instagram_ads_follow_type (otherwise Meta returns a (#100) invalid-combination error).
886
886
  # @option opts [String] :action_attribution_windows Comma-separated Meta attribution windows. Action values are returned keyed per window.
887
887
  # @option opts [String] :action_report_time When actions are counted: impression, conversion or mixed.
@@ -19,15 +19,34 @@ module Zernio
19
19
 
20
20
  attr_accessor :daily
21
21
 
22
- # Requested demographic breakdowns, keyed by dimension. Fetched live from the platform per request and never stored, so these rows can carry fields the stored `summary` and `daily` series do not. LinkedIn rows carry `value` (the pivot URN), `name` (resolved label where LinkedIn provides one), the usual spend/impressions/clicks/ctr/cpc/cpm/engagement figures, plus two reach fields: - `reach`: the segment's `approximateMemberReach`. - `audiencePenetration`: LinkedIn's own ratio of members reached to the size of the targeted audience, passed through verbatim. LinkedIn withholds both below its audience privacy threshold, in which case the keys are ABSENT rather than 0. `audiencePenetration` is available here only: it is not part of the stored metrics series.
22
+ # Requested demographic breakdowns, keyed by dimension. Fetched live from the platform per request and never stored, so these rows can carry fields the stored `summary` and `daily` series do not. LinkedIn rows carry `value` (the pivot URN), `name` (resolved label where LinkedIn provides one), the usual spend/impressions/clicks/ctr/cpc/cpm/engagement figures, plus two reach fields: - `reach`: the segment's `approximateMemberReach`. - `audiencePenetration`: LinkedIn's own ratio of members reached to the size of the targeted audience, passed through verbatim. LinkedIn withholds both below its audience privacy threshold, in which case the keys are ABSENT rather than 0. `audiencePenetration` is available here only: it is not part of the stored metrics series. TikTok rows are keyed by TikTok's own dimension name (`country_code` for `country`, `platform` for `publisher_platform`). `placement` rows carry the label TikTok Ads Manager shows (`TikTok`, `TikTok Ad Network`, `News Feed App Series`) in `placement` and TikTok's API value (`PLACEMENT_TIKTOK`, `PLACEMENT_PANGLE`, `PLACEMENT_GLOBAL_APP_BUNDLE`) in `placementRaw`; a value without a known label carries the raw value in both. A requested dimension with no data in the range is an empty array.
23
23
  attr_accessor :breakdowns
24
24
 
25
+ # Requested breakdowns this platform cannot break down by (e.g. region on TikTok, any breakdown on Google). Absent when every requested breakdown is supported.
26
+ attr_accessor :unsupported_breakdowns
27
+
28
+ # Guidance for some names in unsupportedBreakdowns, keyed by that name (e.g. placement on Meta points at publisher_platform and platform_position; platform_position on TikTok points at placement). Absent when no unsupported name has a hint.
29
+ attr_accessor :breakdown_hints
30
+
31
+ # TikTok only: breakdowns the platform failed to return (rate limit, permission, rejected query). Each one is an empty array under breakdowns; summary and daily are unaffected. Absent when every breakdown answered.
32
+ attr_accessor :breakdown_errors
33
+
34
+ # TikTok only: TikTok metric names TikTok refused for a breakdown, keyed by the requested breakdown (e.g. total_purchase and total_purchase_value have no relation to platform, ac or language). Every row value derived from a refused metric is null in that breakdown (purchaseValue and roas, or the matching actions and actionValues entries), never a number computed without it. Absent when no metric was refused.
35
+ attr_accessor :breakdown_dropped_metrics
36
+
37
+ attr_accessor :breakdowns_range
38
+
25
39
  # Attribute mapping from ruby-style variable name to JSON key.
26
40
  def self.attribute_map
27
41
  {
28
42
  :'summary' => :'summary',
29
43
  :'daily' => :'daily',
30
- :'breakdowns' => :'breakdowns'
44
+ :'breakdowns' => :'breakdowns',
45
+ :'unsupported_breakdowns' => :'unsupportedBreakdowns',
46
+ :'breakdown_hints' => :'breakdownHints',
47
+ :'breakdown_errors' => :'breakdownErrors',
48
+ :'breakdown_dropped_metrics' => :'breakdownDroppedMetrics',
49
+ :'breakdowns_range' => :'breakdownsRange'
31
50
  }
32
51
  end
33
52
 
@@ -46,7 +65,12 @@ module Zernio
46
65
  {
47
66
  :'summary' => :'AdMetrics',
48
67
  :'daily' => :'Array<CampaignAnalyticsResponseAnalyticsDailyInner>',
49
- :'breakdowns' => :'Hash<String, Array<Object>>'
68
+ :'breakdowns' => :'Hash<String, Array<Object>>',
69
+ :'unsupported_breakdowns' => :'Array<String>',
70
+ :'breakdown_hints' => :'Hash<String, String>',
71
+ :'breakdown_errors' => :'Array<CampaignAnalyticsResponseAnalyticsBreakdownErrorsInner>',
72
+ :'breakdown_dropped_metrics' => :'Hash<String, Array<String>>',
73
+ :'breakdowns_range' => :'CampaignAnalyticsResponseAnalyticsBreakdownsRange'
50
74
  }
51
75
  end
52
76
 
@@ -87,6 +111,34 @@ module Zernio
87
111
  self.breakdowns = value
88
112
  end
89
113
  end
114
+
115
+ if attributes.key?(:'unsupported_breakdowns')
116
+ if (value = attributes[:'unsupported_breakdowns']).is_a?(Array)
117
+ self.unsupported_breakdowns = value
118
+ end
119
+ end
120
+
121
+ if attributes.key?(:'breakdown_hints')
122
+ if (value = attributes[:'breakdown_hints']).is_a?(Hash)
123
+ self.breakdown_hints = value
124
+ end
125
+ end
126
+
127
+ if attributes.key?(:'breakdown_errors')
128
+ if (value = attributes[:'breakdown_errors']).is_a?(Array)
129
+ self.breakdown_errors = value
130
+ end
131
+ end
132
+
133
+ if attributes.key?(:'breakdown_dropped_metrics')
134
+ if (value = attributes[:'breakdown_dropped_metrics']).is_a?(Hash)
135
+ self.breakdown_dropped_metrics = value
136
+ end
137
+ end
138
+
139
+ if attributes.key?(:'breakdowns_range')
140
+ self.breakdowns_range = attributes[:'breakdowns_range']
141
+ end
90
142
  end
91
143
 
92
144
  # Show invalid properties with the reasons. Usually used together with valid?
@@ -111,7 +163,12 @@ module Zernio
111
163
  self.class == o.class &&
112
164
  summary == o.summary &&
113
165
  daily == o.daily &&
114
- breakdowns == o.breakdowns
166
+ breakdowns == o.breakdowns &&
167
+ unsupported_breakdowns == o.unsupported_breakdowns &&
168
+ breakdown_hints == o.breakdown_hints &&
169
+ breakdown_errors == o.breakdown_errors &&
170
+ breakdown_dropped_metrics == o.breakdown_dropped_metrics &&
171
+ breakdowns_range == o.breakdowns_range
115
172
  end
116
173
 
117
174
  # @see the `==` method
@@ -123,7 +180,7 @@ module Zernio
123
180
  # Calculates hash code according to all attributes.
124
181
  # @return [Integer] Hash code
125
182
  def hash
126
- [summary, daily, breakdowns].hash
183
+ [summary, daily, breakdowns, unsupported_breakdowns, breakdown_hints, breakdown_errors, breakdown_dropped_metrics, breakdowns_range].hash
127
184
  end
128
185
 
129
186
  # Builds the object from hash
@@ -21,16 +21,35 @@ module Zernio
21
21
 
22
22
  attr_accessor :daily
23
23
 
24
- # Requested demographic breakdowns, keyed by dimension. Fetched live from the platform per request and never stored, so these rows can carry fields the stored `summary` and `daily` series do not. LinkedIn rows carry `value` (the pivot URN), `name` (resolved label where LinkedIn provides one), the usual spend/impressions/clicks/ctr/cpc/cpm/engagement figures, plus two reach fields: - `reach`: the segment's `approximateMemberReach`. - `audiencePenetration`: LinkedIn's own ratio of members reached to the size of the targeted audience, passed through verbatim. LinkedIn withholds both below its audience privacy threshold, in which case the keys are ABSENT rather than 0. `audiencePenetration` is available here only: it is not part of the stored metrics series.
24
+ # Requested demographic breakdowns, keyed by dimension. Fetched live from the platform per request and never stored, so these rows can carry fields the stored `summary` and `daily` series do not. LinkedIn rows carry `value` (the pivot URN), `name` (resolved label where LinkedIn provides one), the usual spend/impressions/clicks/ctr/cpc/cpm/engagement figures, plus two reach fields: - `reach`: the segment's `approximateMemberReach`. - `audiencePenetration`: LinkedIn's own ratio of members reached to the size of the targeted audience, passed through verbatim. LinkedIn withholds both below its audience privacy threshold, in which case the keys are ABSENT rather than 0. `audiencePenetration` is available here only: it is not part of the stored metrics series. TikTok rows are keyed by TikTok's own dimension name (`country_code` for `country`, `platform` for `publisher_platform`). `placement` rows carry the label TikTok Ads Manager shows (`TikTok`, `TikTok Ad Network`, `News Feed App Series`) in `placement` and TikTok's API value (`PLACEMENT_TIKTOK`, `PLACEMENT_PANGLE`, `PLACEMENT_GLOBAL_APP_BUNDLE`) in `placementRaw`; a value without a known label carries the raw value in both. A requested dimension with no data in the range is an empty array.
25
25
  attr_accessor :breakdowns
26
26
 
27
+ # Requested breakdowns this platform cannot break down by (e.g. region on TikTok, any breakdown on Google). Absent when every requested breakdown is supported.
28
+ attr_accessor :unsupported_breakdowns
29
+
30
+ # Guidance for some names in unsupportedBreakdowns, keyed by that name (e.g. placement on Meta points at publisher_platform and platform_position; platform_position on TikTok points at placement). Absent when no unsupported name has a hint.
31
+ attr_accessor :breakdown_hints
32
+
33
+ # TikTok only: breakdowns the platform failed to return (rate limit, permission, rejected query). Each one is an empty array under breakdowns; summary and daily are unaffected. Absent when every breakdown answered.
34
+ attr_accessor :breakdown_errors
35
+
36
+ # TikTok only: TikTok metric names TikTok refused for a breakdown, keyed by the requested breakdown (e.g. total_purchase and total_purchase_value have no relation to platform, ac or language). Every row value derived from a refused metric is null in that breakdown (purchaseValue and roas, or the matching actions and actionValues entries), never a number computed without it. Absent when no metric was refused.
37
+ attr_accessor :breakdown_dropped_metrics
38
+
39
+ attr_accessor :breakdowns_range
40
+
27
41
  # Attribute mapping from ruby-style variable name to JSON key.
28
42
  def self.attribute_map
29
43
  {
30
44
  :'summary' => :'summary',
31
45
  :'impression_share_cache' => :'impressionShareCache',
32
46
  :'daily' => :'daily',
33
- :'breakdowns' => :'breakdowns'
47
+ :'breakdowns' => :'breakdowns',
48
+ :'unsupported_breakdowns' => :'unsupportedBreakdowns',
49
+ :'breakdown_hints' => :'breakdownHints',
50
+ :'breakdown_errors' => :'breakdownErrors',
51
+ :'breakdown_dropped_metrics' => :'breakdownDroppedMetrics',
52
+ :'breakdowns_range' => :'breakdownsRange'
34
53
  }
35
54
  end
36
55
 
@@ -50,7 +69,12 @@ module Zernio
50
69
  :'summary' => :'CampaignAnalyticsResponseAnalyticsSummary',
51
70
  :'impression_share_cache' => :'CampaignAnalyticsResponseAnalyticsImpressionShareCache',
52
71
  :'daily' => :'Array<CampaignAnalyticsResponseAnalyticsDailyInner>',
53
- :'breakdowns' => :'Hash<String, Array<Object>>'
72
+ :'breakdowns' => :'Hash<String, Array<Object>>',
73
+ :'unsupported_breakdowns' => :'Array<String>',
74
+ :'breakdown_hints' => :'Hash<String, String>',
75
+ :'breakdown_errors' => :'Array<CampaignAnalyticsResponseAnalyticsBreakdownErrorsInner>',
76
+ :'breakdown_dropped_metrics' => :'Hash<String, Array<String>>',
77
+ :'breakdowns_range' => :'CampaignAnalyticsResponseAnalyticsBreakdownsRange'
54
78
  }
55
79
  end
56
80
 
@@ -95,6 +119,34 @@ module Zernio
95
119
  self.breakdowns = value
96
120
  end
97
121
  end
122
+
123
+ if attributes.key?(:'unsupported_breakdowns')
124
+ if (value = attributes[:'unsupported_breakdowns']).is_a?(Array)
125
+ self.unsupported_breakdowns = value
126
+ end
127
+ end
128
+
129
+ if attributes.key?(:'breakdown_hints')
130
+ if (value = attributes[:'breakdown_hints']).is_a?(Hash)
131
+ self.breakdown_hints = value
132
+ end
133
+ end
134
+
135
+ if attributes.key?(:'breakdown_errors')
136
+ if (value = attributes[:'breakdown_errors']).is_a?(Array)
137
+ self.breakdown_errors = value
138
+ end
139
+ end
140
+
141
+ if attributes.key?(:'breakdown_dropped_metrics')
142
+ if (value = attributes[:'breakdown_dropped_metrics']).is_a?(Hash)
143
+ self.breakdown_dropped_metrics = value
144
+ end
145
+ end
146
+
147
+ if attributes.key?(:'breakdowns_range')
148
+ self.breakdowns_range = attributes[:'breakdowns_range']
149
+ end
98
150
  end
99
151
 
100
152
  # Show invalid properties with the reasons. Usually used together with valid?
@@ -120,7 +172,12 @@ module Zernio
120
172
  summary == o.summary &&
121
173
  impression_share_cache == o.impression_share_cache &&
122
174
  daily == o.daily &&
123
- breakdowns == o.breakdowns
175
+ breakdowns == o.breakdowns &&
176
+ unsupported_breakdowns == o.unsupported_breakdowns &&
177
+ breakdown_hints == o.breakdown_hints &&
178
+ breakdown_errors == o.breakdown_errors &&
179
+ breakdown_dropped_metrics == o.breakdown_dropped_metrics &&
180
+ breakdowns_range == o.breakdowns_range
124
181
  end
125
182
 
126
183
  # @see the `==` method
@@ -132,7 +189,7 @@ module Zernio
132
189
  # Calculates hash code according to all attributes.
133
190
  # @return [Integer] Hash code
134
191
  def hash
135
- [summary, impression_share_cache, daily, breakdowns].hash
192
+ [summary, impression_share_cache, daily, breakdowns, unsupported_breakdowns, breakdown_hints, breakdown_errors, breakdown_dropped_metrics, breakdowns_range].hash
136
193
  end
137
194
 
138
195
  # Builds the object from hash