late-sdk 0.0.857 → 0.0.859

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.
Files changed (149) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +45 -1
  3. data/docs/AdAccountsApi.md +214 -0
  4. data/docs/AdCampaignsApi.md +296 -0
  5. data/docs/AdTargetingApi.md +3 -3
  6. data/docs/AddAccountCallouts201Response.md +20 -0
  7. data/docs/AddAccountCallouts201ResponseCalloutsInner.md +20 -0
  8. data/docs/AddAccountCalloutsRequest.md +22 -0
  9. data/docs/BoostPostRequestTargeting.md +3 -3
  10. data/docs/ChannelPicker.md +20 -0
  11. data/docs/ChannelPickerChannelsInner.md +24 -0
  12. data/docs/ChannelPickerTeam.md +22 -0
  13. data/docs/ConnectApi.md +78 -0
  14. data/docs/ConversionAction.md +28 -0
  15. data/docs/ConversionActionTagSnippetsInner.md +24 -0
  16. data/docs/ConversionsApi.md +146 -0
  17. data/docs/CreateAdSet201Response.md +20 -0
  18. data/docs/CreateAdSetRequest.md +28 -0
  19. data/docs/CreateConversionAction201Response.md +18 -0
  20. data/docs/CreateConversionActionRequest.md +28 -0
  21. data/docs/CreatePost200Response.md +22 -0
  22. data/docs/CreatePost200ResponseTiktokInner.md +24 -0
  23. data/docs/CreatePostRequest.md +2 -0
  24. data/docs/CreateStandaloneAdRequest.md +3 -3
  25. data/docs/GetCampaignTargeting200Response.md +22 -0
  26. data/docs/GetCampaignTargeting200ResponseDevicesInner.md +22 -0
  27. data/docs/GetCampaignTargeting200ResponseLanguagesInner.md +22 -0
  28. data/docs/GetCampaignTargeting200ResponseLocationsInner.md +20 -0
  29. data/docs/ListAccountCallouts200Response.md +20 -0
  30. data/docs/ListAccountCallouts200ResponseCalloutsInner.md +22 -0
  31. data/docs/ListAdSets200Response.md +18 -0
  32. data/docs/ListAdSets200ResponseAdSetsInner.md +42 -0
  33. data/docs/ListConversionActions200Response.md +20 -0
  34. data/docs/ListSlackChannels200Response.md +49 -0
  35. data/docs/PlatformTarget.md +1 -1
  36. data/docs/Post.md +1 -1
  37. data/docs/PostsApi.md +4 -4
  38. data/docs/RemoveAccountCallout200Response.md +20 -0
  39. data/docs/RemoveAccountCalloutRequest.md +22 -0
  40. data/docs/StartOAuth.md +20 -0
  41. data/docs/TargetingSpec.md +3 -3
  42. data/docs/TargetingSpecExcludedLocations.md +2 -2
  43. data/docs/UpdateCampaignTargeting200Response.md +20 -0
  44. data/docs/UpdateCampaignTargetingRequest.md +20 -0
  45. data/docs/UpdateCampaignTargetingRequestTargeting.md +22 -0
  46. data/docs/UpdateCampaignTargetingRequestTargetingDevicesInner.md +49 -0
  47. data/docs/UpdateCampaignTargetingRequestTargetingDevicesInnerOneOf.md +20 -0
  48. data/docs/UpdateCampaignTargetingRequestTargetingLocations.md +49 -0
  49. data/docs/UpdateCampaignTargetingRequestTargetingLocationsOneOf.md +26 -0
  50. data/docs/{BoostPostRequestTargetingRegionsInner.md → UpdateCampaignTargetingRequestTargetingLocationsOneOfRegionsInner.md} +2 -2
  51. data/docs/WebhookLog.md +1 -1
  52. data/lib/zernio-sdk/api/ad_accounts_api.rb +203 -0
  53. data/lib/zernio-sdk/api/ad_campaigns_api.rb +289 -0
  54. data/lib/zernio-sdk/api/ad_targeting_api.rb +5 -5
  55. data/lib/zernio-sdk/api/connect_api.rb +77 -0
  56. data/lib/zernio-sdk/api/conversions_api.rb +138 -0
  57. data/lib/zernio-sdk/api/posts_api.rb +4 -4
  58. data/lib/zernio-sdk/models/add_account_callouts201_response.rb +158 -0
  59. data/lib/zernio-sdk/models/add_account_callouts201_response_callouts_inner.rb +156 -0
  60. data/lib/zernio-sdk/models/add_account_callouts_request.rb +222 -0
  61. data/lib/zernio-sdk/models/boost_post_request_targeting.rb +3 -3
  62. data/lib/zernio-sdk/models/channel_picker.rb +192 -0
  63. data/lib/zernio-sdk/models/channel_picker_channels_inner.rb +244 -0
  64. data/lib/zernio-sdk/models/channel_picker_team.rb +169 -0
  65. data/lib/zernio-sdk/models/conversion_action.rb +302 -0
  66. data/lib/zernio-sdk/models/conversion_action_tag_snippets_inner.rb +195 -0
  67. data/lib/zernio-sdk/models/create_ad_set201_response.rb +157 -0
  68. data/lib/zernio-sdk/models/create_ad_set_request.rb +320 -0
  69. data/lib/zernio-sdk/models/create_conversion_action201_response.rb +147 -0
  70. data/lib/zernio-sdk/models/create_conversion_action_request.rb +309 -0
  71. data/lib/zernio-sdk/models/create_post200_response.rb +221 -0
  72. data/lib/zernio-sdk/models/create_post200_response_tiktok_inner.rb +227 -0
  73. data/lib/zernio-sdk/models/create_post_request.rb +13 -1
  74. data/lib/zernio-sdk/models/create_standalone_ad_request.rb +3 -3
  75. data/lib/zernio-sdk/models/get_campaign_targeting200_response.rb +171 -0
  76. data/lib/zernio-sdk/models/get_campaign_targeting200_response_devices_inner.rb +201 -0
  77. data/lib/zernio-sdk/models/get_campaign_targeting200_response_languages_inner.rb +167 -0
  78. data/lib/zernio-sdk/models/get_campaign_targeting200_response_locations_inner.rb +158 -0
  79. data/lib/zernio-sdk/models/list_account_callouts200_response.rb +158 -0
  80. data/lib/zernio-sdk/models/list_account_callouts200_response_callouts_inner.rb +166 -0
  81. data/lib/zernio-sdk/models/list_ad_sets200_response.rb +149 -0
  82. data/lib/zernio-sdk/models/list_ad_sets200_response_ad_sets_inner.rb +264 -0
  83. data/lib/zernio-sdk/models/list_conversion_actions200_response.rb +159 -0
  84. data/lib/zernio-sdk/models/list_slack_channels200_response.rb +104 -0
  85. data/lib/zernio-sdk/models/platform_target.rb +1 -1
  86. data/lib/zernio-sdk/models/post.rb +3 -2
  87. data/lib/zernio-sdk/models/remove_account_callout200_response.rb +156 -0
  88. data/lib/zernio-sdk/models/remove_account_callout_request.rb +202 -0
  89. data/lib/zernio-sdk/models/start_o_auth.rb +190 -0
  90. data/lib/zernio-sdk/models/targeting_spec.rb +3 -3
  91. data/lib/zernio-sdk/models/targeting_spec_excluded_locations.rb +2 -2
  92. data/lib/zernio-sdk/models/update_campaign_targeting200_response.rb +181 -0
  93. data/lib/zernio-sdk/models/update_campaign_targeting_request.rb +214 -0
  94. data/lib/zernio-sdk/models/update_campaign_targeting_request_targeting.rb +171 -0
  95. data/lib/zernio-sdk/models/update_campaign_targeting_request_targeting_devices_inner.rb +104 -0
  96. data/lib/zernio-sdk/models/update_campaign_targeting_request_targeting_devices_inner_one_of.rb +215 -0
  97. data/lib/zernio-sdk/models/update_campaign_targeting_request_targeting_locations.rb +105 -0
  98. data/lib/zernio-sdk/models/update_campaign_targeting_request_targeting_locations_one_of.rb +193 -0
  99. data/lib/zernio-sdk/models/{boost_post_request_targeting_regions_inner.rb → update_campaign_targeting_request_targeting_locations_one_of_regions_inner.rb} +3 -3
  100. data/lib/zernio-sdk/models/webhook_log.rb +1 -1
  101. data/lib/zernio-sdk/version.rb +1 -1
  102. data/lib/zernio-sdk.rb +35 -1
  103. data/openapi.yaml +661 -13
  104. data/spec/api/ad_accounts_api_spec.rb +37 -0
  105. data/spec/api/ad_campaigns_api_spec.rb +53 -0
  106. data/spec/api/ad_targeting_api_spec.rb +2 -2
  107. data/spec/api/connect_api_spec.rb +15 -0
  108. data/spec/api/conversions_api_spec.rb +26 -0
  109. data/spec/api/posts_api_spec.rb +1 -1
  110. data/spec/models/add_account_callouts201_response_callouts_inner_spec.rb +42 -0
  111. data/spec/models/{boost_post_request_targeting_regions_inner_spec.rb → add_account_callouts201_response_spec.rb} +8 -8
  112. data/spec/models/add_account_callouts_request_spec.rb +48 -0
  113. data/spec/models/channel_picker_channels_inner_spec.rb +54 -0
  114. data/spec/models/channel_picker_spec.rb +42 -0
  115. data/spec/models/channel_picker_team_spec.rb +48 -0
  116. data/spec/models/conversion_action_spec.rb +66 -0
  117. data/spec/models/conversion_action_tag_snippets_inner_spec.rb +54 -0
  118. data/spec/models/create_ad_set201_response_spec.rb +42 -0
  119. data/spec/models/create_ad_set_request_spec.rb +74 -0
  120. data/spec/models/create_conversion_action201_response_spec.rb +36 -0
  121. data/spec/models/create_conversion_action_request_spec.rb +70 -0
  122. data/spec/models/create_post200_response_spec.rb +48 -0
  123. data/spec/models/create_post200_response_tiktok_inner_spec.rb +54 -0
  124. data/spec/models/create_post_request_spec.rb +6 -0
  125. data/spec/models/get_campaign_targeting200_response_devices_inner_spec.rb +52 -0
  126. data/spec/models/get_campaign_targeting200_response_languages_inner_spec.rb +48 -0
  127. data/spec/models/get_campaign_targeting200_response_locations_inner_spec.rb +42 -0
  128. data/spec/models/get_campaign_targeting200_response_spec.rb +48 -0
  129. data/spec/models/list_account_callouts200_response_callouts_inner_spec.rb +48 -0
  130. data/spec/models/list_account_callouts200_response_spec.rb +42 -0
  131. data/spec/models/list_ad_sets200_response_ad_sets_inner_spec.rb +108 -0
  132. data/spec/models/list_ad_sets200_response_spec.rb +36 -0
  133. data/spec/models/list_conversion_actions200_response_spec.rb +42 -0
  134. data/spec/models/list_slack_channels200_response_spec.rb +32 -0
  135. data/spec/models/post_spec.rb +1 -1
  136. data/spec/models/remove_account_callout200_response_spec.rb +42 -0
  137. data/spec/models/remove_account_callout_request_spec.rb +48 -0
  138. data/spec/models/start_o_auth_spec.rb +42 -0
  139. data/spec/models/update_campaign_targeting200_response_spec.rb +46 -0
  140. data/spec/models/update_campaign_targeting_request_spec.rb +46 -0
  141. data/spec/models/update_campaign_targeting_request_targeting_devices_inner_one_of_spec.rb +46 -0
  142. data/spec/models/update_campaign_targeting_request_targeting_devices_inner_spec.rb +32 -0
  143. data/spec/models/update_campaign_targeting_request_targeting_locations_one_of_regions_inner_spec.rb +42 -0
  144. data/spec/models/update_campaign_targeting_request_targeting_locations_one_of_spec.rb +60 -0
  145. data/spec/models/update_campaign_targeting_request_targeting_locations_spec.rb +32 -0
  146. data/spec/models/update_campaign_targeting_request_targeting_spec.rb +48 -0
  147. data/zernio-sdk-0.0.859.gem +0 -0
  148. metadata +142 -6
  149. data/zernio-sdk-0.0.857.gem +0 -0
@@ -9,6 +9,7 @@ All URIs are relative to *https://zernio.com/api*
9
9
  | [**boost_post**](AdCampaignsApi.md#boost_post) | **POST** /v1/ads/boost | Boost post as ad |
10
10
  | [**bulk_update_ad_campaign_status**](AdCampaignsApi.md#bulk_update_ad_campaign_status) | **POST** /v1/ads/campaigns/bulk-status | Pause or resume many campaigns |
11
11
  | [**create_ad_campaign**](AdCampaignsApi.md#create_ad_campaign) | **POST** /v1/ads/campaigns | Create a standalone campaign |
12
+ | [**create_ad_set**](AdCampaignsApi.md#create_ad_set) | **POST** /v1/ads/ad-sets | Create a standalone ad group |
12
13
  | [**create_standalone_ad**](AdCampaignsApi.md#create_standalone_ad) | **POST** /v1/ads/create | Create standalone ad |
13
14
  | [**delete_ad**](AdCampaignsApi.md#delete_ad) | **DELETE** /v1/ads/{adId} | Cancel an ad |
14
15
  | [**delete_ad_campaign**](AdCampaignsApi.md#delete_ad_campaign) | **DELETE** /v1/ads/campaigns/{campaignId} | Delete a campaign |
@@ -20,8 +21,10 @@ All URIs are relative to *https://zernio.com/api*
20
21
  | [**get_ad_set_details**](AdCampaignsApi.md#get_ad_set_details) | **GET** /v1/ads/ad-sets/{adSetId} | Live ad-set details incl. learning phase |
21
22
  | [**get_ad_tree**](AdCampaignsApi.md#get_ad_tree) | **GET** /v1/ads/tree | Get campaign tree |
22
23
  | [**get_ads_timeline**](AdCampaignsApi.md#get_ads_timeline) | **GET** /v1/ads/timeline | Get daily account metrics |
24
+ | [**get_campaign_targeting**](AdCampaignsApi.md#get_campaign_targeting) | **GET** /v1/ads/campaigns/{campaignId}/targeting | Read a Google campaign's device, location, and language targeting |
23
25
  | [**list_ad_campaigns**](AdCampaignsApi.md#list_ad_campaigns) | **GET** /v1/ads/campaigns | List campaigns |
24
26
  | [**list_ad_keywords**](AdCampaignsApi.md#list_ad_keywords) | **GET** /v1/ads/keywords | List Search keywords |
27
+ | [**list_ad_sets**](AdCampaignsApi.md#list_ad_sets) | **GET** /v1/ads/ad-sets | List ad sets |
25
28
  | [**list_ads**](AdCampaignsApi.md#list_ads) | **GET** /v1/ads | List ads |
26
29
  | [**list_campaign_negative_keywords**](AdCampaignsApi.md#list_campaign_negative_keywords) | **GET** /v1/ads/campaigns/{campaignId}/negative-keywords | List campaign-level negative keywords |
27
30
  | [**remove_ad_keyword**](AdCampaignsApi.md#remove_ad_keyword) | **DELETE** /v1/ads/keywords/{keywordId} | Remove a Search keyword |
@@ -33,6 +36,7 @@ All URIs are relative to *https://zernio.com/api*
33
36
  | [**update_ad_set**](AdCampaignsApi.md#update_ad_set) | **PUT** /v1/ads/ad-sets/{adSetId} | Update an ad set |
34
37
  | [**update_ad_set_status**](AdCampaignsApi.md#update_ad_set_status) | **PUT** /v1/ads/ad-sets/{adSetId}/status | Pause or resume a single ad set |
35
38
  | [**update_ad_status**](AdCampaignsApi.md#update_ad_status) | **PUT** /v1/ads/{adId}/status | Pause or resume a single ad |
39
+ | [**update_campaign_targeting**](AdCampaignsApi.md#update_campaign_targeting) | **PUT** /v1/ads/campaigns/{campaignId}/targeting | Edit a Google campaign's device, location, or language targeting |
36
40
 
37
41
 
38
42
  ## add_ad_keywords
@@ -390,6 +394,79 @@ end
390
394
  - **Accept**: application/json
391
395
 
392
396
 
397
+ ## create_ad_set
398
+
399
+ > <CreateAdSet201Response> create_ad_set(create_ad_set_request, opts)
400
+
401
+ Create a standalone ad group
402
+
403
+ Google Ads compliance row C.190: creates an ad group WITHOUT an ad, under an existing campaign. Ads join it later via `existingAdGroupId` on POST /v1/ads/create. Google only; every other platform returns 501. Created `PAUSED` unless `status: ACTIVE`. The new ad group has no ad yet, so it will not appear in GET /v1/ads/tree (built purely from `ads` rows) until one is added; use GET /v1/ads/ad-sets to see it in the meantime. **Idempotency:** send an `Idempotency-Key` header to make retries safe.
404
+
405
+ ### Examples
406
+
407
+ ```ruby
408
+ require 'time'
409
+ require 'zernio-sdk'
410
+ # setup authorization
411
+ Zernio.configure do |config|
412
+ # Configure Bearer authorization (JWT): bearerAuth
413
+ config.access_token = 'YOUR_BEARER_TOKEN'
414
+ end
415
+
416
+ api_instance = Zernio::AdCampaignsApi.new
417
+ create_ad_set_request = Zernio::CreateAdSetRequest.new({account_id: 'account_id_example', platform: 'facebook', campaign_id: 'campaign_id_example', name: 'name_example'}) # CreateAdSetRequest |
418
+ opts = {
419
+ idempotency_key: 'idempotency_key_example' # String | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. Only 2xx responses are stored, so a request that failed with a 4xx can be retried with a corrected body under the SAME key.
420
+ }
421
+
422
+ begin
423
+ # Create a standalone ad group
424
+ result = api_instance.create_ad_set(create_ad_set_request, opts)
425
+ p result
426
+ rescue Zernio::ApiError => e
427
+ puts "Error when calling AdCampaignsApi->create_ad_set: #{e}"
428
+ end
429
+ ```
430
+
431
+ #### Using the create_ad_set_with_http_info variant
432
+
433
+ This returns an Array which contains the response data, status code and headers.
434
+
435
+ > <Array(<CreateAdSet201Response>, Integer, Hash)> create_ad_set_with_http_info(create_ad_set_request, opts)
436
+
437
+ ```ruby
438
+ begin
439
+ # Create a standalone ad group
440
+ data, status_code, headers = api_instance.create_ad_set_with_http_info(create_ad_set_request, opts)
441
+ p status_code # => 2xx
442
+ p headers # => { ... }
443
+ p data # => <CreateAdSet201Response>
444
+ rescue Zernio::ApiError => e
445
+ puts "Error when calling AdCampaignsApi->create_ad_set_with_http_info: #{e}"
446
+ end
447
+ ```
448
+
449
+ ### Parameters
450
+
451
+ | Name | Type | Description | Notes |
452
+ | ---- | ---- | ----------- | ----- |
453
+ | **create_ad_set_request** | [**CreateAdSetRequest**](CreateAdSetRequest.md) | | |
454
+ | **idempotency_key** | **String** | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. Only 2xx responses are stored, so a request that failed with a 4xx can be retried with a corrected body under the SAME key. | [optional] |
455
+
456
+ ### Return type
457
+
458
+ [**CreateAdSet201Response**](CreateAdSet201Response.md)
459
+
460
+ ### Authorization
461
+
462
+ [bearerAuth](../README.md#bearerAuth)
463
+
464
+ ### HTTP request headers
465
+
466
+ - **Content-Type**: application/json
467
+ - **Accept**: application/json
468
+
469
+
393
470
  ## create_standalone_ad
394
471
 
395
472
  > <CreateStandaloneAd200Response> create_standalone_ad(create_standalone_ad_request, opts)
@@ -1223,6 +1300,79 @@ end
1223
1300
  - **Accept**: application/json
1224
1301
 
1225
1302
 
1303
+ ## get_campaign_targeting
1304
+
1305
+ > <GetCampaignTargeting200Response> get_campaign_targeting(campaign_id, opts)
1306
+
1307
+ Read a Google campaign's device, location, and language targeting
1308
+
1309
+ Google Ads compliance requires geo, language, budget, and bidding targeting set at creation to stay editable afterwards; this reads the live campaign state so an integrator can build an editor around it. Google only; every other platform returns 501. `devices` always lists all four device types with `included` reflecting Google's negative device criteria (a device absent from any negative criterion is included by default). This read has no bid-modifier source, so `bidModifier` is always `null` even for a device with one configured.
1310
+
1311
+ ### Examples
1312
+
1313
+ ```ruby
1314
+ require 'time'
1315
+ require 'zernio-sdk'
1316
+ # setup authorization
1317
+ Zernio.configure do |config|
1318
+ # Configure Bearer authorization (JWT): bearerAuth
1319
+ config.access_token = 'YOUR_BEARER_TOKEN'
1320
+ end
1321
+
1322
+ api_instance = Zernio::AdCampaignsApi.new
1323
+ campaign_id = 'campaign_id_example' # String | Google platform campaign ID
1324
+ opts = {
1325
+ platform: 'google' # String | Disambiguates when the same campaignId string exists on more than one connected platform.
1326
+ }
1327
+
1328
+ begin
1329
+ # Read a Google campaign's device, location, and language targeting
1330
+ result = api_instance.get_campaign_targeting(campaign_id, opts)
1331
+ p result
1332
+ rescue Zernio::ApiError => e
1333
+ puts "Error when calling AdCampaignsApi->get_campaign_targeting: #{e}"
1334
+ end
1335
+ ```
1336
+
1337
+ #### Using the get_campaign_targeting_with_http_info variant
1338
+
1339
+ This returns an Array which contains the response data, status code and headers.
1340
+
1341
+ > <Array(<GetCampaignTargeting200Response>, Integer, Hash)> get_campaign_targeting_with_http_info(campaign_id, opts)
1342
+
1343
+ ```ruby
1344
+ begin
1345
+ # Read a Google campaign's device, location, and language targeting
1346
+ data, status_code, headers = api_instance.get_campaign_targeting_with_http_info(campaign_id, opts)
1347
+ p status_code # => 2xx
1348
+ p headers # => { ... }
1349
+ p data # => <GetCampaignTargeting200Response>
1350
+ rescue Zernio::ApiError => e
1351
+ puts "Error when calling AdCampaignsApi->get_campaign_targeting_with_http_info: #{e}"
1352
+ end
1353
+ ```
1354
+
1355
+ ### Parameters
1356
+
1357
+ | Name | Type | Description | Notes |
1358
+ | ---- | ---- | ----------- | ----- |
1359
+ | **campaign_id** | **String** | Google platform campaign ID | |
1360
+ | **platform** | **String** | Disambiguates when the same campaignId string exists on more than one connected platform. | [optional] |
1361
+
1362
+ ### Return type
1363
+
1364
+ [**GetCampaignTargeting200Response**](GetCampaignTargeting200Response.md)
1365
+
1366
+ ### Authorization
1367
+
1368
+ [bearerAuth](../README.md#bearerAuth)
1369
+
1370
+ ### HTTP request headers
1371
+
1372
+ - **Content-Type**: Not defined
1373
+ - **Accept**: application/json
1374
+
1375
+
1226
1376
  ## list_ad_campaigns
1227
1377
 
1228
1378
  > <ListAdCampaigns200Response> list_ad_campaigns(opts)
@@ -1411,6 +1561,81 @@ end
1411
1561
  - **Accept**: application/json
1412
1562
 
1413
1563
 
1564
+ ## list_ad_sets
1565
+
1566
+ > <ListAdSets200Response> list_ad_sets(opts)
1567
+
1568
+ List ad sets
1569
+
1570
+ Ad sets (Google ad groups) synced for the connection, optionally filtered by platform and campaignId. Reads the `ad_sets` table directly, independent of the `ads` rollup GET /v1/ads/tree uses, so a just-created standalone ad group with no ad yet (POST /v1/ads/ad-sets, Google only) is visible here even though it is invisible in the tree until an ad joins it via `existingAdGroupId`. Returns at most 500 rows, newest first.
1571
+
1572
+ ### Examples
1573
+
1574
+ ```ruby
1575
+ require 'time'
1576
+ require 'zernio-sdk'
1577
+ # setup authorization
1578
+ Zernio.configure do |config|
1579
+ # Configure Bearer authorization (JWT): bearerAuth
1580
+ config.access_token = 'YOUR_BEARER_TOKEN'
1581
+ end
1582
+
1583
+ api_instance = Zernio::AdCampaignsApi.new
1584
+ opts = {
1585
+ account_id: 'account_id_example', # String | Social account ID
1586
+ campaign_id: 'campaign_id_example', # String | Platform campaign ID
1587
+ platform: 'facebook' # String |
1588
+ }
1589
+
1590
+ begin
1591
+ # List ad sets
1592
+ result = api_instance.list_ad_sets(opts)
1593
+ p result
1594
+ rescue Zernio::ApiError => e
1595
+ puts "Error when calling AdCampaignsApi->list_ad_sets: #{e}"
1596
+ end
1597
+ ```
1598
+
1599
+ #### Using the list_ad_sets_with_http_info variant
1600
+
1601
+ This returns an Array which contains the response data, status code and headers.
1602
+
1603
+ > <Array(<ListAdSets200Response>, Integer, Hash)> list_ad_sets_with_http_info(opts)
1604
+
1605
+ ```ruby
1606
+ begin
1607
+ # List ad sets
1608
+ data, status_code, headers = api_instance.list_ad_sets_with_http_info(opts)
1609
+ p status_code # => 2xx
1610
+ p headers # => { ... }
1611
+ p data # => <ListAdSets200Response>
1612
+ rescue Zernio::ApiError => e
1613
+ puts "Error when calling AdCampaignsApi->list_ad_sets_with_http_info: #{e}"
1614
+ end
1615
+ ```
1616
+
1617
+ ### Parameters
1618
+
1619
+ | Name | Type | Description | Notes |
1620
+ | ---- | ---- | ----------- | ----- |
1621
+ | **account_id** | **String** | Social account ID | [optional] |
1622
+ | **campaign_id** | **String** | Platform campaign ID | [optional] |
1623
+ | **platform** | **String** | | [optional] |
1624
+
1625
+ ### Return type
1626
+
1627
+ [**ListAdSets200Response**](ListAdSets200Response.md)
1628
+
1629
+ ### Authorization
1630
+
1631
+ [bearerAuth](../README.md#bearerAuth)
1632
+
1633
+ ### HTTP request headers
1634
+
1635
+ - **Content-Type**: Not defined
1636
+ - **Accept**: application/json
1637
+
1638
+
1414
1639
  ## list_ads
1415
1640
 
1416
1641
  > <AdsListResponse> list_ads(opts)
@@ -2221,3 +2446,74 @@ end
2221
2446
  - **Content-Type**: application/json
2222
2447
  - **Accept**: application/json
2223
2448
 
2449
+
2450
+ ## update_campaign_targeting
2451
+
2452
+ > <UpdateCampaignTargeting200Response> update_campaign_targeting(campaign_id, update_campaign_targeting_request)
2453
+
2454
+ Edit a Google campaign's device, location, or language targeting
2455
+
2456
+ Google Ads compliance row M.10: geo and language targeting set at creation must stay editable afterwards. Send at least one of `devices`, `locations`, `languages`; each provided field REPLACES that field's existing criteria on the campaign (a full set, not a delta). Fields left out of the body are untouched. Google only; every other platform returns 501. `locations` accepts the same shapes as campaign creation: a bare array of ISO country codes, or an object with `countries`/`regions`/`cities`/`zips`/`metros` key lists (`key` from GET /v1/ads/targeting/search?dimension=geo). Negative (excluded) locations are left untouched by this endpoint. `languages` is an array of Google's language codes (ISO 639-1, plus variants such as `zh_CN`); an unknown code returns 400.
2457
+
2458
+ ### Examples
2459
+
2460
+ ```ruby
2461
+ require 'time'
2462
+ require 'zernio-sdk'
2463
+ # setup authorization
2464
+ Zernio.configure do |config|
2465
+ # Configure Bearer authorization (JWT): bearerAuth
2466
+ config.access_token = 'YOUR_BEARER_TOKEN'
2467
+ end
2468
+
2469
+ api_instance = Zernio::AdCampaignsApi.new
2470
+ campaign_id = 'campaign_id_example' # String | Google platform campaign ID
2471
+ update_campaign_targeting_request = Zernio::UpdateCampaignTargetingRequest.new({platform: 'google', targeting: Zernio::UpdateCampaignTargetingRequestTargeting.new}) # UpdateCampaignTargetingRequest |
2472
+
2473
+ begin
2474
+ # Edit a Google campaign's device, location, or language targeting
2475
+ result = api_instance.update_campaign_targeting(campaign_id, update_campaign_targeting_request)
2476
+ p result
2477
+ rescue Zernio::ApiError => e
2478
+ puts "Error when calling AdCampaignsApi->update_campaign_targeting: #{e}"
2479
+ end
2480
+ ```
2481
+
2482
+ #### Using the update_campaign_targeting_with_http_info variant
2483
+
2484
+ This returns an Array which contains the response data, status code and headers.
2485
+
2486
+ > <Array(<UpdateCampaignTargeting200Response>, Integer, Hash)> update_campaign_targeting_with_http_info(campaign_id, update_campaign_targeting_request)
2487
+
2488
+ ```ruby
2489
+ begin
2490
+ # Edit a Google campaign's device, location, or language targeting
2491
+ data, status_code, headers = api_instance.update_campaign_targeting_with_http_info(campaign_id, update_campaign_targeting_request)
2492
+ p status_code # => 2xx
2493
+ p headers # => { ... }
2494
+ p data # => <UpdateCampaignTargeting200Response>
2495
+ rescue Zernio::ApiError => e
2496
+ puts "Error when calling AdCampaignsApi->update_campaign_targeting_with_http_info: #{e}"
2497
+ end
2498
+ ```
2499
+
2500
+ ### Parameters
2501
+
2502
+ | Name | Type | Description | Notes |
2503
+ | ---- | ---- | ----------- | ----- |
2504
+ | **campaign_id** | **String** | Google platform campaign ID | |
2505
+ | **update_campaign_targeting_request** | [**UpdateCampaignTargetingRequest**](UpdateCampaignTargetingRequest.md) | | |
2506
+
2507
+ ### Return type
2508
+
2509
+ [**UpdateCampaignTargeting200Response**](UpdateCampaignTargeting200Response.md)
2510
+
2511
+ ### Authorization
2512
+
2513
+ [bearerAuth](../README.md#bearerAuth)
2514
+
2515
+ ### HTTP request headers
2516
+
2517
+ - **Content-Type**: application/json
2518
+ - **Accept**: application/json
2519
+
@@ -295,7 +295,7 @@ end
295
295
 
296
296
  Search targeting options
297
297
 
298
- Resolve a human-readable query into the platform's opaque targeting ids used in the `TargetingSpec` (`countries`/`regions`/`cities`/`zips`/`metros` geo keys, and `interests`/`behaviors` entity ids) on `POST /v1/ads/create`, `POST /v1/ads/targeting/reach-estimate`, and `saved_targeting` audiences. The `dimension` param selects what is searched, `geo` (locations, further scoped by `geoType`), `interest`, `behavior`, `income`, or the Meta-only work demographics `workPosition`, `workEmployer` and `workIndustry` (their ids feed `TargetingSpec.workPositions`/`workEmployers`/`workIndustries`). Availability of each dimension varies by platform (e.g. behaviours are Meta/TikTok only). Work industries are a fixed ~30-entry Meta catalog with no server-side query, so `workIndustry` matching, ranking and `limit` happen in Zernio. Results are normalized across platforms into a single shape, so the same client code consumes Meta, TikTok, LinkedIn, X, Pinterest, and Google results. TikTok geo searches return every matching level in one list (`type` is `country`, `region`, `city`, `district`, or `metro` for DMA areas) — `geoType` is not applied. Results are scoped to the advertiser's targetable markets, and every id is usable in `regions`/`cities`/`metros` keys on `POST /v1/ads/create`. LinkedIn geo searches also return every matching level in one list, and neither `geoType` nor `countryCode` is applied: LinkedIn's typeahead only returns a name and a URN per result, with no level or country field to filter on. Every result has `type` set to `location`, and its id is a `urn:li:geo:*` URN usable as a `regions[].key` on `POST /v1/ads/create`, `POST /v1/ads/boost` and `POST /v1/ads/targeting/reach-estimate`. Google geo searches resolve against Google's geoTargetConstants and return every matching level in one list; `geoType` is not applied (Google's `target_type` is an open taxonomy that does not map one-to-one onto the `geoType` enum), so filter client-side on the returned `type` (`country`, `region`, `city`, `zip`, `metro`, or the lowercased Google target type for rarer levels). `countryCode` scopes the search to one country. Each id is Google's numeric criterion id, usable as a `regions`/`cities`/`zips`/`metros` `key` on `POST /v1/ads/create`. Google city radius is not supported (pass a `customLocations` lat/lng pin for a radius); country targeting also accepts plain ISO codes via `countries` with no search call. Pinterest resolves against three whole-catalog endpoints (interests, locations, regions) with no server-side query or pagination, so matching, ranking and the `limit` cutoff all happen in Zernio; the catalog is independent of any ad account and results never carry `audienceSize`. Names come back localized to the connected Pinterest account's language (there is no way to force a locale), so match against whatever language that account returns. `geoType` routes to a different catalog: `country` and `metro_area` read the locations catalog (`type` is `country` or `metro`); `region` reads the regions catalog (`type` is `region`, its id a `regions[].key` on `POST /v1/ads/create`); `all` and the default `city` merge both catalogs with honest per-entry `type`s, since Pinterest has no city-level catalog and `city` is an alias for `all`, not a literal city search. `zip`, `subcity`, `neighborhood`, `place` and `geo_market` return a 400: Pinterest exposes no postal-code catalog, pass postal codes directly as `targeting.zips: [{ key }]` on `POST /v1/ads/create`. For geo queries, `q` should contain only the locality name (e.g. `\"Amsterdam\"`, not `\"Amsterdam, NL\"`). Use `countryCode` to disambiguate.
298
+ Resolve a human-readable query into the platform's opaque targeting ids used in the `TargetingSpec` (`countries`/`regions`/`cities`/`zips`/`metros` geo keys, and `interests`/`behaviors` entity ids) on `POST /v1/ads/create`, `POST /v1/ads/targeting/reach-estimate`, and `saved_targeting` audiences. The `dimension` param selects what is searched, `geo` (locations, further scoped by `geoType`), `interest`, `behavior`, `income`, `language` (Google-only), or the Meta-only work demographics `workPosition`, `workEmployer` and `workIndustry` (their ids feed `TargetingSpec.workPositions`/`workEmployers`/`workIndustries`). Availability of each dimension varies by platform (e.g. behaviours are Meta/TikTok only). Work industries are a fixed ~30-entry Meta catalog with no server-side query, so `workIndustry` matching, ranking and `limit` happen in Zernio. `language` is likewise a fixed, checked-in table of Google's targetable `language_constant` rows (id, ISO code, name) matched by name or code, capped at 20, with no network call; its ids feed `TargetingSpec.languages`. Results are normalized across platforms into a single shape, so the same client code consumes Meta, TikTok, LinkedIn, X, Pinterest, and Google results. TikTok geo searches return every matching level in one list (`type` is `country`, `region`, `city`, `district`, or `metro` for DMA areas) — `geoType` is not applied. Results are scoped to the advertiser's targetable markets, and every id is usable in `regions`/`cities`/`metros` keys on `POST /v1/ads/create`. LinkedIn geo searches also return every matching level in one list, and neither `geoType` nor `countryCode` is applied: LinkedIn's typeahead only returns a name and a URN per result, with no level or country field to filter on. Every result has `type` set to `location`, and its id is a `urn:li:geo:*` URN usable as a `regions[].key` on `POST /v1/ads/create`, `POST /v1/ads/boost` and `POST /v1/ads/targeting/reach-estimate`. Google geo searches resolve against Google's geoTargetConstants and return every matching level in one list; `geoType` is not applied (Google's `target_type` is an open taxonomy that does not map one-to-one onto the `geoType` enum), so filter client-side on the returned `type` (`country`, `region`, `city`, `zip`, `metro`, or the lowercased Google target type for rarer levels). `countryCode` scopes the search to one country. Each id is Google's numeric criterion id, usable as a `regions`/`cities`/`zips`/`metros` `key` on `POST /v1/ads/create`. Google city radius is not supported (pass a `customLocations` lat/lng pin for a radius); country targeting also accepts plain ISO codes via `countries` with no search call. Pinterest resolves against three whole-catalog endpoints (interests, locations, regions) with no server-side query or pagination, so matching, ranking and the `limit` cutoff all happen in Zernio; the catalog is independent of any ad account and results never carry `audienceSize`. Names come back localized to the connected Pinterest account's language (there is no way to force a locale), so match against whatever language that account returns. `geoType` routes to a different catalog: `country` and `metro_area` read the locations catalog (`type` is `country` or `metro`); `region` reads the regions catalog (`type` is `region`, its id a `regions[].key` on `POST /v1/ads/create`); `all` and the default `city` merge both catalogs with honest per-entry `type`s, since Pinterest has no city-level catalog and `city` is an alias for `all`, not a literal city search. `zip`, `subcity`, `neighborhood`, `place` and `geo_market` return a 400: Pinterest exposes no postal-code catalog, pass postal codes directly as `targeting.zips: [{ key }]` on `POST /v1/ads/create`. For geo queries, `q` should contain only the locality name (e.g. `\"Amsterdam\"`, not `\"Amsterdam, NL\"`). Use `countryCode` to disambiguate.
299
299
 
300
300
  ### Examples
301
301
 
@@ -312,7 +312,7 @@ api_instance = Zernio::AdTargetingApi.new
312
312
  account_id = 'account_id_example' # String | Social account ID (a connected account on the target ad platform).
313
313
  q = 'q_example' # String | Search query. For geo, the locality name only (no region/country suffix).
314
314
  opts = {
315
- dimension: 'geo', # String | What to search. `geo` resolves locations (scope further with `geoType`), `interest`/`behavior` resolve audience entities, `income` resolves income-tier options, `workPosition`/`workEmployer`/`workIndustry` resolve Meta work demographics. Defaults to `interest` for backward compatibility with the deprecated /v1/ads/interests alias.
315
+ dimension: 'geo', # String | What to search. `geo` resolves locations (scope further with `geoType`), `interest`/`behavior` resolve audience entities, `income` resolves income-tier options, `language` resolves Google's targetable language_constant table (Google only), `workPosition`/`workEmployer`/`workIndustry` resolve Meta work demographics. Defaults to `interest` for backward compatibility with the deprecated /v1/ads/interests alias.
316
316
  geo_type: 'all', # String | Only used when `dimension=geo`. The kind of location to resolve. `all` searches every type in one relevance-ranked call. Defaults to `city`.
317
317
  country_code: 'country_code_example', # String | ISO 3166-1 alpha-2 country code (e.g. NL) to scope a geo search.
318
318
  limit: 56 # Integer | Maximum results to return.
@@ -351,7 +351,7 @@ end
351
351
  | ---- | ---- | ----------- | ----- |
352
352
  | **account_id** | **String** | Social account ID (a connected account on the target ad platform). | |
353
353
  | **q** | **String** | Search query. For geo, the locality name only (no region/country suffix). | |
354
- | **dimension** | **String** | What to search. &#x60;geo&#x60; resolves locations (scope further with &#x60;geoType&#x60;), &#x60;interest&#x60;/&#x60;behavior&#x60; resolve audience entities, &#x60;income&#x60; resolves income-tier options, &#x60;workPosition&#x60;/&#x60;workEmployer&#x60;/&#x60;workIndustry&#x60; resolve Meta work demographics. Defaults to &#x60;interest&#x60; for backward compatibility with the deprecated /v1/ads/interests alias. | [optional][default to &#39;interest&#39;] |
354
+ | **dimension** | **String** | What to search. &#x60;geo&#x60; resolves locations (scope further with &#x60;geoType&#x60;), &#x60;interest&#x60;/&#x60;behavior&#x60; resolve audience entities, &#x60;income&#x60; resolves income-tier options, &#x60;language&#x60; resolves Google&#39;s targetable language_constant table (Google only), &#x60;workPosition&#x60;/&#x60;workEmployer&#x60;/&#x60;workIndustry&#x60; resolve Meta work demographics. Defaults to &#x60;interest&#x60; for backward compatibility with the deprecated /v1/ads/interests alias. | [optional][default to &#39;interest&#39;] |
355
355
  | **geo_type** | **String** | Only used when &#x60;dimension&#x3D;geo&#x60;. The kind of location to resolve. &#x60;all&#x60; searches every type in one relevance-ranked call. Defaults to &#x60;city&#x60;. | [optional][default to &#39;city&#39;] |
356
356
  | **country_code** | **String** | ISO 3166-1 alpha-2 country code (e.g. NL) to scope a geo search. | [optional] |
357
357
  | **limit** | **Integer** | Maximum results to return. | [optional][default to 25] |
@@ -0,0 +1,20 @@
1
+ # Zernio::AddAccountCallouts201Response
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **customer_id** | **String** | | [optional] |
8
+ | **callouts** | [**Array&lt;AddAccountCallouts201ResponseCalloutsInner&gt;**](AddAccountCallouts201ResponseCalloutsInner.md) | | [optional] |
9
+
10
+ ## Example
11
+
12
+ ```ruby
13
+ require 'zernio-sdk'
14
+
15
+ instance = Zernio::AddAccountCallouts201Response.new(
16
+ customer_id: null,
17
+ callouts: null
18
+ )
19
+ ```
20
+
@@ -0,0 +1,20 @@
1
+ # Zernio::AddAccountCallouts201ResponseCalloutsInner
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **asset_id** | **String** | | [optional] |
8
+ | **text** | **String** | | [optional] |
9
+
10
+ ## Example
11
+
12
+ ```ruby
13
+ require 'zernio-sdk'
14
+
15
+ instance = Zernio::AddAccountCallouts201ResponseCalloutsInner.new(
16
+ asset_id: null,
17
+ text: null
18
+ )
19
+ ```
20
+
@@ -0,0 +1,22 @@
1
+ # Zernio::AddAccountCalloutsRequest
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **account_id** | **String** | Zernio SocialAccount id owning the Google Ads connection. | |
8
+ | **customer_id** | **String** | Numeric Google Ads customer id. Only required when the connection has more than one. | [optional] |
9
+ | **callouts** | **Array&lt;String&gt;** | Callout text, 1-25 characters each; up to 20 per request (Google&#39;s CalloutAsset limits). | |
10
+
11
+ ## Example
12
+
13
+ ```ruby
14
+ require 'zernio-sdk'
15
+
16
+ instance = Zernio::AddAccountCalloutsRequest.new(
17
+ account_id: null,
18
+ customer_id: null,
19
+ callouts: null
20
+ )
21
+ ```
22
+
@@ -9,10 +9,10 @@
9
9
  | **gender** | **String** | Applied on Meta, TikTok and Pinterest. Ignored on Google, LinkedIn and X. | [optional] |
10
10
  | **languages** | **Array&lt;String&gt;** | Meta locale ids (numeric), passed through as given. | [optional] |
11
11
  | **countries** | **Array&lt;String&gt;** | ISO country codes. Required for TikTok boosts (TikTok&#39;s ad group requires location_ids); optional on other platforms. | [optional] |
12
- | **regions** | [**Array&lt;BoostPostRequestTargetingRegionsInner&gt;**](BoostPostRequestTargetingRegionsInner.md) | Region/state targeting. &#x60;key&#x60; from /v1/ads/targeting/search?dimension&#x3D;geo&amp;geoType&#x3D;region. | [optional] |
12
+ | **regions** | [**Array&lt;UpdateCampaignTargetingRequestTargetingLocationsOneOfRegionsInner&gt;**](UpdateCampaignTargetingRequestTargetingLocationsOneOfRegionsInner.md) | Region/state targeting. &#x60;key&#x60; from /v1/ads/targeting/search?dimension&#x3D;geo&amp;geoType&#x3D;region. | [optional] |
13
13
  | **cities** | [**Array&lt;BoostPostRequestTargetingCitiesInner&gt;**](BoostPostRequestTargetingCitiesInner.md) | City targeting. Optional &#x60;radius&#x60; + &#x60;distanceUnit&#x60; extend beyond the city limits (both set together, Meta only). | [optional] |
14
- | **zips** | [**Array&lt;BoostPostRequestTargetingRegionsInner&gt;**](BoostPostRequestTargetingRegionsInner.md) | Postal/ZIP targeting. &#x60;key&#x60; is the platform&#39;s postal location ID (e.g. Meta &#x60;US:94304&#x60;). | [optional] |
15
- | **metros** | [**Array&lt;BoostPostRequestTargetingRegionsInner&gt;**](BoostPostRequestTargetingRegionsInner.md) | DMA / metro-area targeting. &#x60;key&#x60; is the platform&#39;s metro ID (e.g. Meta &#x60;DMA:807&#x60;). | [optional] |
14
+ | **zips** | [**Array&lt;UpdateCampaignTargetingRequestTargetingLocationsOneOfRegionsInner&gt;**](UpdateCampaignTargetingRequestTargetingLocationsOneOfRegionsInner.md) | Postal/ZIP targeting. &#x60;key&#x60; is the platform&#39;s postal location ID (e.g. Meta &#x60;US:94304&#x60;). | [optional] |
15
+ | **metros** | [**Array&lt;UpdateCampaignTargetingRequestTargetingLocationsOneOfRegionsInner&gt;**](UpdateCampaignTargetingRequestTargetingLocationsOneOfRegionsInner.md) | DMA / metro-area targeting. &#x60;key&#x60; is the platform&#39;s metro ID (e.g. Meta &#x60;DMA:807&#x60;). | [optional] |
16
16
  | **custom_locations** | [**Array&lt;BoostPostRequestTargetingCustomLocationsInner&gt;**](BoostPostRequestTargetingCustomLocationsInner.md) | Point-radius (lat/lng) targeting (Meta custom_locations). No geo &#x60;key&#x60; lookup needed. | [optional] |
17
17
  | **interests** | [**Array&lt;UpdateAdRequestTargetingInterestsInner&gt;**](UpdateAdRequestTargetingInterestsInner.md) | Interest objects from /v1/ads/interests. Each must include id and name. | [optional] |
18
18
  | **advantage_audience** | **Integer** | Meta only. 0 &#x3D; disabled (default), 1 &#x3D; enabled. | [optional] |
@@ -0,0 +1,20 @@
1
+ # Zernio::ChannelPicker
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **team** | [**ChannelPickerTeam**](ChannelPickerTeam.md) | | |
8
+ | **channels** | [**Array&lt;ChannelPickerChannelsInner&gt;**](ChannelPickerChannelsInner.md) | | |
9
+
10
+ ## Example
11
+
12
+ ```ruby
13
+ require 'zernio-sdk'
14
+
15
+ instance = Zernio::ChannelPicker.new(
16
+ team: null,
17
+ channels: null
18
+ )
19
+ ```
20
+
@@ -0,0 +1,24 @@
1
+ # Zernio::ChannelPickerChannelsInner
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **id** | **String** | Channel id (C... or G...), the value to send as channelId on POST | |
8
+ | **name** | **String** | | |
9
+ | **is_private** | **Boolean** | | |
10
+ | **is_member** | **Boolean** | Whether the Zernio bot is already a member of the channel | |
11
+
12
+ ## Example
13
+
14
+ ```ruby
15
+ require 'zernio-sdk'
16
+
17
+ instance = Zernio::ChannelPickerChannelsInner.new(
18
+ id: null,
19
+ name: null,
20
+ is_private: null,
21
+ is_member: null
22
+ )
23
+ ```
24
+
@@ -0,0 +1,22 @@
1
+ # Zernio::ChannelPickerTeam
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **id** | **String** | Slack workspace (team) id | [optional] |
8
+ | **name** | **String** | | [optional] |
9
+ | **icon** | **String** | Workspace icon URL | [optional] |
10
+
11
+ ## Example
12
+
13
+ ```ruby
14
+ require 'zernio-sdk'
15
+
16
+ instance = Zernio::ChannelPickerTeam.new(
17
+ id: null,
18
+ name: null,
19
+ icon: null
20
+ )
21
+ ```
22
+
data/docs/ConnectApi.md CHANGED
@@ -37,6 +37,7 @@ All URIs are relative to *https://zernio.com/api*
37
37
  | [**list_instagram_pages**](ConnectApi.md#list_instagram_pages) | **GET** /v1/connect/instagram/select-account | List Pages with a linked Instagram account |
38
38
  | [**list_linked_in_organizations**](ConnectApi.md#list_linked_in_organizations) | **GET** /v1/connect/linkedin/organizations | List LinkedIn orgs |
39
39
  | [**list_pinterest_boards_for_selection**](ConnectApi.md#list_pinterest_boards_for_selection) | **GET** /v1/connect/pinterest/select-board | List Pinterest boards |
40
+ | [**list_slack_channels**](ConnectApi.md#list_slack_channels) | **GET** /v1/connect/slack | List Slack channels for the channel picker |
40
41
  | [**list_snapchat_profiles**](ConnectApi.md#list_snapchat_profiles) | **GET** /v1/connect/snapchat/select-profile | List Snapchat profiles |
41
42
  | [**list_whats_app_phone_numbers**](ConnectApi.md#list_whats_app_phone_numbers) | **GET** /v1/connect/whatsapp/select-phone-number | List numbers for selection |
42
43
  | [**select_facebook_page**](ConnectApi.md#select_facebook_page) | **POST** /v1/connect/facebook/select-page | Select Facebook page |
@@ -2433,6 +2434,83 @@ end
2433
2434
  - **Accept**: application/json
2434
2435
 
2435
2436
 
2437
+ ## list_slack_channels
2438
+
2439
+ > <ListSlackChannels200Response> list_slack_channels(profile_id, opts)
2440
+
2441
+ List Slack channels for the channel picker
2442
+
2443
+ Serves the channel picker of the Slack connect flow. Slack's OAuth installs the bot into a workspace, not a channel, so after the redirect the caller lists the workspace's channels here and finalizes one with `POST /v1/connect/slack`. Served by a dedicated route that shadows `GET /v1/connect/{platform}` for `slack`. Send exactly one of `pendingDataToken` (first connect: the nonce from the OAuth redirect, bound to the same `profileId`) or `accountId` (add another channel to a workspace already connected: the existing Slack account's workspace token is reused, no re-OAuth). With neither, the endpoint behaves like `GET /v1/connect/{platform}` and returns `authUrl` and `state` to start the OAuth flow. Channels are read live from Slack (`conversations.list`, public and private, archived excluded, up to 2,000). `isMember` says whether the Zernio bot is already in the channel: a public channel is joined automatically on finalize, a private one must be invited (`/invite @Zernio`) first.
2444
+
2445
+ ### Examples
2446
+
2447
+ ```ruby
2448
+ require 'time'
2449
+ require 'zernio-sdk'
2450
+ # setup authorization
2451
+ Zernio.configure do |config|
2452
+ # Configure Bearer authorization (JWT): bearerAuth
2453
+ config.access_token = 'YOUR_BEARER_TOKEN'
2454
+ end
2455
+
2456
+ api_instance = Zernio::ConnectApi.new
2457
+ profile_id = 'profile_id_example' # String | Zernio profile the channel account will belong to. Must match the profile the OAuth flow was started on when `pendingDataToken` is used.
2458
+ opts = {
2459
+ pending_data_token: 'pending_data_token_example', # String | Nonce from the OAuth redirect (first connect).
2460
+ account_id: 'account_id_example', # String | Existing active Slack account (yours or a team member's) whose workspace token is reused.
2461
+ redirect_url: 'redirect_url_example' # String | Start-OAuth mode only: where to send the user after the connect completes. `redirectUrl` is accepted as an alias.
2462
+ }
2463
+
2464
+ begin
2465
+ # List Slack channels for the channel picker
2466
+ result = api_instance.list_slack_channels(profile_id, opts)
2467
+ p result
2468
+ rescue Zernio::ApiError => e
2469
+ puts "Error when calling ConnectApi->list_slack_channels: #{e}"
2470
+ end
2471
+ ```
2472
+
2473
+ #### Using the list_slack_channels_with_http_info variant
2474
+
2475
+ This returns an Array which contains the response data, status code and headers.
2476
+
2477
+ > <Array(<ListSlackChannels200Response>, Integer, Hash)> list_slack_channels_with_http_info(profile_id, opts)
2478
+
2479
+ ```ruby
2480
+ begin
2481
+ # List Slack channels for the channel picker
2482
+ data, status_code, headers = api_instance.list_slack_channels_with_http_info(profile_id, opts)
2483
+ p status_code # => 2xx
2484
+ p headers # => { ... }
2485
+ p data # => <ListSlackChannels200Response>
2486
+ rescue Zernio::ApiError => e
2487
+ puts "Error when calling ConnectApi->list_slack_channels_with_http_info: #{e}"
2488
+ end
2489
+ ```
2490
+
2491
+ ### Parameters
2492
+
2493
+ | Name | Type | Description | Notes |
2494
+ | ---- | ---- | ----------- | ----- |
2495
+ | **profile_id** | **String** | Zernio profile the channel account will belong to. Must match the profile the OAuth flow was started on when &#x60;pendingDataToken&#x60; is used. | |
2496
+ | **pending_data_token** | **String** | Nonce from the OAuth redirect (first connect). | [optional] |
2497
+ | **account_id** | **String** | Existing active Slack account (yours or a team member&#39;s) whose workspace token is reused. | [optional] |
2498
+ | **redirect_url** | **String** | Start-OAuth mode only: where to send the user after the connect completes. &#x60;redirectUrl&#x60; is accepted as an alias. | [optional] |
2499
+
2500
+ ### Return type
2501
+
2502
+ [**ListSlackChannels200Response**](ListSlackChannels200Response.md)
2503
+
2504
+ ### Authorization
2505
+
2506
+ [bearerAuth](../README.md#bearerAuth)
2507
+
2508
+ ### HTTP request headers
2509
+
2510
+ - **Content-Type**: Not defined
2511
+ - **Accept**: application/json
2512
+
2513
+
2436
2514
  ## list_snapchat_profiles
2437
2515
 
2438
2516
  > <ListSnapchatProfiles200Response> list_snapchat_profiles(x_connect_token, profile_id, temp_token)
@@ -0,0 +1,28 @@
1
+ # Zernio::ConversionAction
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **id** | **String** | Google Ads conversion action id. | |
8
+ | **name** | **String** | | |
9
+ | **type** | **String** | Google&#39;s ConversionActionType, e.g. WEBPAGE, UPLOAD_CLICKS. | |
10
+ | **status** | **String** | Google&#39;s ConversionActionStatus, e.g. ENABLED, REMOVED, HIDDEN. | |
11
+ | **category** | **String** | Google&#39;s ConversionActionCategory, e.g. DEFAULT, PURCHASE, LEAD. | |
12
+ | **tag_snippets** | [**Array&lt;ConversionActionTagSnippetsInner&gt;**](ConversionActionTagSnippetsInner.md) | The code a customer pastes onto their site. Present for types Google generates a snippet for (e.g. WEBPAGE); empty otherwise. | |
13
+
14
+ ## Example
15
+
16
+ ```ruby
17
+ require 'zernio-sdk'
18
+
19
+ instance = Zernio::ConversionAction.new(
20
+ id: null,
21
+ name: null,
22
+ type: null,
23
+ status: null,
24
+ category: null,
25
+ tag_snippets: null
26
+ )
27
+ ```
28
+