zernio-sdk 0.0.551 → 0.0.553

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 (71) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -1
  3. data/docs/AdCampaignsApi.md +3 -3
  4. data/docs/BoostPostRequestTracking.md +1 -1
  5. data/docs/{CreateLeadFormRequestQuestionsInnerOptionsInner.md → BoostPostRequestTrackingUrlTagsInner.md} +2 -2
  6. data/docs/ConnectApi.md +70 -0
  7. data/docs/ConnectOpenAIAdsCredentials200Response.md +22 -0
  8. data/docs/ConnectOpenAIAdsCredentialsRequest.md +24 -0
  9. data/docs/ConversionEvent.md +1 -1
  10. data/docs/ConversionsApi.md +5 -5
  11. data/docs/CreateLeadFormRequestQuestionsInner.md +1 -1
  12. data/docs/CreateStandaloneAdRequest.md +8 -8
  13. data/docs/CreateTrackingTagRequest.md +1 -1
  14. data/docs/GetTrackingTag200Response.md +20 -0
  15. data/docs/ListConversionDestinations200ResponseDestinationsInner.md +1 -1
  16. data/docs/SendConversions200Response.md +1 -1
  17. data/docs/SendConversionsRequest.md +3 -3
  18. data/docs/TrackingTagsApi.md +17 -17
  19. data/docs/UpdateAdRequestBudget.md +1 -1
  20. data/lib/zernio-sdk/api/ad_campaigns_api.rb +10 -10
  21. data/lib/zernio-sdk/api/connect_api.rb +68 -0
  22. data/lib/zernio-sdk/api/conversions_api.rb +8 -8
  23. data/lib/zernio-sdk/api/tracking_tags_api.rb +18 -18
  24. data/lib/zernio-sdk/models/account_with_follower_stats.rb +2 -2
  25. data/lib/zernio-sdk/models/ad.rb +2 -2
  26. data/lib/zernio-sdk/models/ad_campaign.rb +2 -2
  27. data/lib/zernio-sdk/models/ad_tree_campaign.rb +2 -2
  28. data/lib/zernio-sdk/models/boost_post_request_tracking.rb +5 -2
  29. data/lib/zernio-sdk/models/{create_lead_form_request_questions_inner_options_inner.rb → boost_post_request_tracking_url_tags_inner.rb} +3 -3
  30. data/lib/zernio-sdk/models/bulk_update_ad_campaign_status_request_campaigns_inner.rb +2 -2
  31. data/lib/zernio-sdk/models/connect_open_ai_ads_credentials200_response.rb +165 -0
  32. data/lib/zernio-sdk/models/connect_open_ai_ads_credentials_request.rb +212 -0
  33. data/lib/zernio-sdk/models/conversion_event.rb +1 -1
  34. data/lib/zernio-sdk/models/create_lead_form_request_questions_inner.rb +1 -1
  35. data/lib/zernio-sdk/models/create_standalone_ad_request.rb +8 -8
  36. data/lib/zernio-sdk/models/create_tracking_tag201_response.rb +2 -2
  37. data/lib/zernio-sdk/models/create_tracking_tag_request.rb +1 -1
  38. data/lib/zernio-sdk/models/get_tracking_tag200_response.rb +190 -0
  39. data/lib/zernio-sdk/models/list_conversion_destinations200_response.rb +2 -2
  40. data/lib/zernio-sdk/models/list_conversion_destinations200_response_destinations_inner.rb +1 -1
  41. data/lib/zernio-sdk/models/list_tracking_tags200_response.rb +2 -2
  42. data/lib/zernio-sdk/models/send_conversions200_response.rb +3 -3
  43. data/lib/zernio-sdk/models/send_conversions_request.rb +3 -3
  44. data/lib/zernio-sdk/models/social_account.rb +2 -2
  45. data/lib/zernio-sdk/models/update_ad_campaign_status_request.rb +2 -2
  46. data/lib/zernio-sdk/models/update_ad_request_budget.rb +1 -0
  47. data/lib/zernio-sdk/models/update_ad_set_request.rb +2 -2
  48. data/lib/zernio-sdk/version.rb +1 -1
  49. data/lib/zernio-sdk.rb +4 -1
  50. data/openapi.yaml +173 -66
  51. data/spec/api/ad_campaigns_api_spec.rb +3 -3
  52. data/spec/api/connect_api_spec.rb +12 -0
  53. data/spec/api/conversions_api_spec.rb +4 -4
  54. data/spec/api/tracking_tags_api_spec.rb +8 -8
  55. data/spec/models/account_with_follower_stats_spec.rb +1 -1
  56. data/spec/models/ad_campaign_spec.rb +1 -1
  57. data/spec/models/ad_spec.rb +1 -1
  58. data/spec/models/ad_tree_campaign_spec.rb +1 -1
  59. data/spec/models/{create_lead_form_request_questions_inner_options_inner_spec.rb → boost_post_request_tracking_url_tags_inner_spec.rb} +6 -6
  60. data/spec/models/bulk_update_ad_campaign_status_request_campaigns_inner_spec.rb +1 -1
  61. data/spec/models/connect_open_ai_ads_credentials200_response_spec.rb +48 -0
  62. data/spec/models/connect_open_ai_ads_credentials_request_spec.rb +54 -0
  63. data/spec/models/create_tracking_tag201_response_spec.rb +1 -1
  64. data/spec/models/get_tracking_tag200_response_spec.rb +46 -0
  65. data/spec/models/list_conversion_destinations200_response_spec.rb +1 -1
  66. data/spec/models/list_tracking_tags200_response_spec.rb +1 -1
  67. data/spec/models/send_conversions200_response_spec.rb +1 -1
  68. data/spec/models/social_account_spec.rb +1 -1
  69. data/spec/models/update_ad_campaign_status_request_spec.rb +1 -1
  70. data/spec/models/update_ad_set_request_spec.rb +1 -1
  71. metadata +17 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 42a9943b2ee9c3eb7684318975d497ab4cfc78bb913ae7c9c03c2802cefce170
4
- data.tar.gz: 923e4c1e1665bb4d2347afce53a268e224f6cc07f0b12f7c43163b3f7073a580
3
+ metadata.gz: 2cb0f3bc4604dcf8646e158f9466a1acf7d5890cd902469ab2f19b2784eb70a4
4
+ data.tar.gz: db93724947c7625d852a01d3626dd31c124211a62e604fac3e0ca3562c8b3579
5
5
  SHA512:
6
- metadata.gz: d8ce28810b4aff93717ac154e6d29601385df2d994c3a6de36f624a58fe50c9c35602414412a2a40f8e5f487681bc10854765c4c16651354473184cfad8ea142
7
- data.tar.gz: d13bf22eb97da4aafa66e4849b391817a7dfa710f9130c0e6660f61ba6c3546eb18a21c0131b8f1475f41438a2dff86e175fa206ab584c40fd97ab7f55612d44
6
+ metadata.gz: bfb2a29d234e3bbdef08052bbb8ea2bbb741ed240e8f2522da70f6b43a80cc00eef9a51f233294159501f0f06a45b89e03fd4d5ab3339ae00c978315a8163447
7
+ data.tar.gz: 9ae4916481ed0b33e538f918273b7eac8748c1192ff6b39242a5472fad038882c90d19125e7d454290ddad03ef39ab9cd255cab570573e4147e23670ae3bcaed
data/README.md CHANGED
@@ -210,6 +210,7 @@ Class | Method | HTTP request | Description
210
210
  *Zernio::ConnectApi* | [**configure_tik_tok_ads_brand_identity**](docs/ConnectApi.md#configure_tik_tok_ads_brand_identity) | **PATCH** /v1/connect/tiktok-ads | Set TikTok brand identity
211
211
  *Zernio::ConnectApi* | [**connect_ads**](docs/ConnectApi.md#connect_ads) | **GET** /v1/connect/{platform}/ads | Connect ads for a platform
212
212
  *Zernio::ConnectApi* | [**connect_bluesky_credentials**](docs/ConnectApi.md#connect_bluesky_credentials) | **POST** /v1/connect/bluesky/credentials | Connect Bluesky account
213
+ *Zernio::ConnectApi* | [**connect_open_ai_ads_credentials**](docs/ConnectApi.md#connect_open_ai_ads_credentials) | **POST** /v1/connect/openai-ads/credentials | Connect an OpenAI Ads account
213
214
  *Zernio::ConnectApi* | [**connect_whats_app_credentials**](docs/ConnectApi.md#connect_whats_app_credentials) | **POST** /v1/connect/whatsapp/credentials | Connect WhatsApp via credentials
214
215
  *Zernio::ConnectApi* | [**create_pinterest_board**](docs/ConnectApi.md#create_pinterest_board) | **POST** /v1/accounts/{accountId}/pinterest-boards | Create Pinterest board
215
216
  *Zernio::ConnectApi* | [**get_connect_url**](docs/ConnectApi.md#get_connect_url) | **GET** /v1/connect/{platform} | Get OAuth connect URL
@@ -670,6 +671,7 @@ Class | Method | HTTP request | Description
670
671
  - [Zernio::BoostPostRequestTargetingCustomLocationsInner](docs/BoostPostRequestTargetingCustomLocationsInner.md)
671
672
  - [Zernio::BoostPostRequestTargetingRegionsInner](docs/BoostPostRequestTargetingRegionsInner.md)
672
673
  - [Zernio::BoostPostRequestTracking](docs/BoostPostRequestTracking.md)
674
+ - [Zernio::BoostPostRequestTrackingUrlTagsInner](docs/BoostPostRequestTrackingUrlTagsInner.md)
673
675
  - [Zernio::BulkCreateContacts200Response](docs/BulkCreateContacts200Response.md)
674
676
  - [Zernio::BulkCreateContactsRequest](docs/BulkCreateContactsRequest.md)
675
677
  - [Zernio::BulkCreateContactsRequestContactsInner](docs/BulkCreateContactsRequestContactsInner.md)
@@ -706,6 +708,8 @@ Class | Method | HTTP request | Description
706
708
  - [Zernio::ConnectAds200ResponseOneOf1](docs/ConnectAds200ResponseOneOf1.md)
707
709
  - [Zernio::ConnectBlueskyCredentials200Response](docs/ConnectBlueskyCredentials200Response.md)
708
710
  - [Zernio::ConnectBlueskyCredentialsRequest](docs/ConnectBlueskyCredentialsRequest.md)
711
+ - [Zernio::ConnectOpenAIAdsCredentials200Response](docs/ConnectOpenAIAdsCredentials200Response.md)
712
+ - [Zernio::ConnectOpenAIAdsCredentialsRequest](docs/ConnectOpenAIAdsCredentialsRequest.md)
709
713
  - [Zernio::ConnectWhatsAppCredentials200Response](docs/ConnectWhatsAppCredentials200Response.md)
710
714
  - [Zernio::ConnectWhatsAppCredentials200ResponseAccount](docs/ConnectWhatsAppCredentials200ResponseAccount.md)
711
715
  - [Zernio::ConnectWhatsAppCredentialsRequest](docs/ConnectWhatsAppCredentialsRequest.md)
@@ -781,7 +785,6 @@ Class | Method | HTTP request | Description
781
785
  - [Zernio::CreateLeadForm200Response](docs/CreateLeadForm200Response.md)
782
786
  - [Zernio::CreateLeadFormRequest](docs/CreateLeadFormRequest.md)
783
787
  - [Zernio::CreateLeadFormRequestQuestionsInner](docs/CreateLeadFormRequestQuestionsInner.md)
784
- - [Zernio::CreateLeadFormRequestQuestionsInnerOptionsInner](docs/CreateLeadFormRequestQuestionsInnerOptionsInner.md)
785
788
  - [Zernio::CreateMessagingAdRequest](docs/CreateMessagingAdRequest.md)
786
789
  - [Zernio::CreatePhoneNumberKycLink200Response](docs/CreatePhoneNumberKycLink200Response.md)
787
790
  - [Zernio::CreatePhoneNumberKycLinkRequest](docs/CreatePhoneNumberKycLinkRequest.md)
@@ -1214,6 +1217,7 @@ Class | Method | HTTP request | Description
1214
1217
  - [Zernio::GetTikTokCreatorInfo200ResponseCreator](docs/GetTikTokCreatorInfo200ResponseCreator.md)
1215
1218
  - [Zernio::GetTikTokCreatorInfo200ResponsePostingLimits](docs/GetTikTokCreatorInfo200ResponsePostingLimits.md)
1216
1219
  - [Zernio::GetTikTokCreatorInfo200ResponsePrivacyLevelsInner](docs/GetTikTokCreatorInfo200ResponsePrivacyLevelsInner.md)
1220
+ - [Zernio::GetTrackingTag200Response](docs/GetTrackingTag200Response.md)
1217
1221
  - [Zernio::GetTrackingTagStats200Response](docs/GetTrackingTagStats200Response.md)
1218
1222
  - [Zernio::GetTrackingTagStats200ResponseStats](docs/GetTrackingTagStats200ResponseStats.md)
1219
1223
  - [Zernio::GetUsage200Response](docs/GetUsage200Response.md)
@@ -240,7 +240,7 @@ end
240
240
 
241
241
  Create standalone ad
242
242
 
243
- Creates a paid ad with custom creative across Meta, Google Ads, Pinterest, TikTok, X/Twitter, and LinkedIn. Supports three mutually-exclusive request shapes selected by the body, a legacy single-creative shape (all platforms, default), a Meta-only multi-creative shape via the creatives array (one ad set with N ads sharing budget and targeting), and a Meta-only attach shape via adSetId (adds one new ad to an existing ad set). Per-platform required fields, budget minimums, and video-ad rules are documented on each property below. LinkedIn creates a Single Image or Single Video Ad backed by a Direct Sponsored Content \"dark post\" authored by a Company Page (see `organizationId`); supported goals are engagement, traffic, awareness, and video_views (video ads use the `video` field; video_views requires a video), and traffic ads require `linkUrl`. **Idempotency:** this endpoint is not idempotent at the platform level (a blind retry creates a second campaign/ad set/ad). Send an `Idempotency-Key` header to make retries safe: the first request with a given key creates the ad and we store the response; a retry with the same key replays that exact response (with `Idempotent-Replayed: true`) instead of creating duplicates. Reusing a key with a different body returns 422; a key whose first request is still in flight returns 409 (retry after a short backoff). Keys are scoped to your credential and expire after 24h.
243
+ Creates a paid ad with custom creative across Meta, Google Ads, Pinterest, TikTok, X/Twitter, LinkedIn, and OpenAI Ads (ChatGPT Ads). Supports three mutually-exclusive request shapes selected by the body, a legacy single-creative shape (all platforms, default), a Meta-only multi-creative shape via the creatives array (one ad set with N ads sharing budget and targeting), and a Meta-only attach shape via adSetId (adds one new ad to an existing ad set). Per-platform required fields, budget minimums, and video-ad rules are documented on each property below. LinkedIn creates a Single Image or Single Video Ad backed by a Direct Sponsored Content \"dark post\" authored by a Company Page (see `organizationId`); supported goals are engagement, traffic, awareness, and video_views (video ads use the `video` field; video_views requires a video), and traffic ads require `linkUrl`. **Idempotency:** this endpoint is not idempotent at the platform level (a blind retry creates a second campaign/ad set/ad). Send an `Idempotency-Key` header to make retries safe: the first request with a given key creates the ad and we store the response; a retry with the same key replays that exact response (with `Idempotent-Replayed: true`) instead of creating duplicates. Reusing a key with a different body returns 422; a key whose first request is still in flight returns 409 (retry after a short backoff). Keys are scoped to your credential and expire after 24h.
244
244
 
245
245
  ### Examples
246
246
 
@@ -313,7 +313,7 @@ end
313
313
 
314
314
  Cancel an ad
315
315
 
316
- Cancels the ad on the platform and marks it as cancelled in the database. The ad is preserved for history.
316
+ Cancels the ad on the platform and marks it as cancelled in the database. The ad is preserved for history. OpenAI Ads has no delete API; the ad is archived instead (a terminal state, the closest equivalent).
317
317
 
318
318
  ### Examples
319
319
 
@@ -1174,7 +1174,7 @@ end
1174
1174
 
1175
1175
  Update ad
1176
1176
 
1177
- Patch one or more fields on an ad. Status, budget, targeting, and creative changes are propagated to the platform. Per-platform support: - **Meta** (Facebook + Instagram): all fields supported. - **TikTok**: status, budget, targeting (via `/v2/adgroup/update/`), and creative (via `/v2/ad/update/` patch-style — `headline` is ignored, `body` becomes `ad_text`). - **Pinterest / X / LinkedIn / Google**: status + budget only. Sending `targeting` or `creative` returns 501 with code `unsupported_platform_operation`.
1177
+ Patch one or more fields on an ad. Status, budget, targeting, and creative changes are propagated to the platform. Per-platform support: - **Meta** (Facebook + Instagram): all fields supported. - **TikTok**: status, budget, targeting (via `/v2/adgroup/update/`), and creative (via `/v2/ad/update/` patch-style — `headline` is ignored, `body` becomes `ad_text`). - **Pinterest / X / LinkedIn / Google / OpenAI Ads**: status + budget only. Sending `targeting` or `creative` returns 501 with code `unsupported_platform_operation`. OpenAI Ads budget is lifetime-only (see `budget.type` below).
1178
1178
 
1179
1179
  ### Examples
1180
1180
 
@@ -5,7 +5,7 @@
5
5
  | Name | Type | Description | Notes |
6
6
  | ---- | ---- | ----------- | ----- |
7
7
  | **pixel_id** | **String** | | [optional] |
8
- | **url_tags** | **String** | | [optional] |
8
+ | **url_tags** | [**Array<BoostPostRequestTrackingUrlTagsInner>**](BoostPostRequestTrackingUrlTagsInner.md) | URL parameters appended to the ad link, rendered as `key=value` pairs joined with `&`. | [optional] |
9
9
 
10
10
  ## Example
11
11
 
@@ -1,4 +1,4 @@
1
- # Zernio::CreateLeadFormRequestQuestionsInnerOptionsInner
1
+ # Zernio::BoostPostRequestTrackingUrlTagsInner
2
2
 
3
3
  ## Properties
4
4
 
@@ -12,7 +12,7 @@
12
12
  ```ruby
13
13
  require 'zernio-sdk'
14
14
 
15
- instance = Zernio::CreateLeadFormRequestQuestionsInnerOptionsInner.new(
15
+ instance = Zernio::BoostPostRequestTrackingUrlTagsInner.new(
16
16
  key: null,
17
17
  value: null
18
18
  )
data/docs/ConnectApi.md CHANGED
@@ -10,6 +10,7 @@ All URIs are relative to *https://zernio.com/api*
10
10
  | [**configure_tik_tok_ads_brand_identity**](ConnectApi.md#configure_tik_tok_ads_brand_identity) | **PATCH** /v1/connect/tiktok-ads | Set TikTok brand identity |
11
11
  | [**connect_ads**](ConnectApi.md#connect_ads) | **GET** /v1/connect/{platform}/ads | Connect ads for a platform |
12
12
  | [**connect_bluesky_credentials**](ConnectApi.md#connect_bluesky_credentials) | **POST** /v1/connect/bluesky/credentials | Connect Bluesky account |
13
+ | [**connect_open_ai_ads_credentials**](ConnectApi.md#connect_open_ai_ads_credentials) | **POST** /v1/connect/openai-ads/credentials | Connect an OpenAI Ads account |
13
14
  | [**connect_whats_app_credentials**](ConnectApi.md#connect_whats_app_credentials) | **POST** /v1/connect/whatsapp/credentials | Connect WhatsApp via credentials |
14
15
  | [**create_pinterest_board**](ConnectApi.md#create_pinterest_board) | **POST** /v1/accounts/{accountId}/pinterest-boards | Create Pinterest board |
15
16
  | [**get_connect_url**](ConnectApi.md#get_connect_url) | **GET** /v1/connect/{platform} | Get OAuth connect URL |
@@ -482,6 +483,75 @@ end
482
483
  - **Accept**: application/json
483
484
 
484
485
 
486
+ ## connect_open_ai_ads_credentials
487
+
488
+ > <ConnectOpenAIAdsCredentials200Response> connect_open_ai_ads_credentials(connect_open_ai_ads_credentials_request)
489
+
490
+ Connect an OpenAI Ads account
491
+
492
+ Connect an OpenAI Ads account using an API key from ChatGPT Ads Manager. The key grants full campaign write access on OpenAI's side (OpenAI does not offer a read-only key scope). Zernio uses it to read ads and performance, and to create and manage campaigns you set up through Zernio (create, status, budget, and cancel). Campaigns created directly in ChatGPT Ads Manager can still be managed there.
493
+
494
+ ### Examples
495
+
496
+ ```ruby
497
+ require 'time'
498
+ require 'zernio-sdk'
499
+ # setup authorization
500
+ Zernio.configure do |config|
501
+ # Configure Bearer authorization (JWT): bearerAuth
502
+ config.access_token = 'YOUR_BEARER_TOKEN'
503
+ end
504
+
505
+ api_instance = Zernio::ConnectApi.new
506
+ connect_open_ai_ads_credentials_request = Zernio::ConnectOpenAIAdsCredentialsRequest.new({api_key: 'api_key_example', profile_id: 'profile_id_example'}) # ConnectOpenAIAdsCredentialsRequest |
507
+
508
+ begin
509
+ # Connect an OpenAI Ads account
510
+ result = api_instance.connect_open_ai_ads_credentials(connect_open_ai_ads_credentials_request)
511
+ p result
512
+ rescue Zernio::ApiError => e
513
+ puts "Error when calling ConnectApi->connect_open_ai_ads_credentials: #{e}"
514
+ end
515
+ ```
516
+
517
+ #### Using the connect_open_ai_ads_credentials_with_http_info variant
518
+
519
+ This returns an Array which contains the response data, status code and headers.
520
+
521
+ > <Array(<ConnectOpenAIAdsCredentials200Response>, Integer, Hash)> connect_open_ai_ads_credentials_with_http_info(connect_open_ai_ads_credentials_request)
522
+
523
+ ```ruby
524
+ begin
525
+ # Connect an OpenAI Ads account
526
+ data, status_code, headers = api_instance.connect_open_ai_ads_credentials_with_http_info(connect_open_ai_ads_credentials_request)
527
+ p status_code # => 2xx
528
+ p headers # => { ... }
529
+ p data # => <ConnectOpenAIAdsCredentials200Response>
530
+ rescue Zernio::ApiError => e
531
+ puts "Error when calling ConnectApi->connect_open_ai_ads_credentials_with_http_info: #{e}"
532
+ end
533
+ ```
534
+
535
+ ### Parameters
536
+
537
+ | Name | Type | Description | Notes |
538
+ | ---- | ---- | ----------- | ----- |
539
+ | **connect_open_ai_ads_credentials_request** | [**ConnectOpenAIAdsCredentialsRequest**](ConnectOpenAIAdsCredentialsRequest.md) | | |
540
+
541
+ ### Return type
542
+
543
+ [**ConnectOpenAIAdsCredentials200Response**](ConnectOpenAIAdsCredentials200Response.md)
544
+
545
+ ### Authorization
546
+
547
+ [bearerAuth](../README.md#bearerAuth)
548
+
549
+ ### HTTP request headers
550
+
551
+ - **Content-Type**: application/json
552
+ - **Accept**: application/json
553
+
554
+
485
555
  ## connect_whats_app_credentials
486
556
 
487
557
  > <ConnectWhatsAppCredentials200Response> connect_whats_app_credentials(connect_whats_app_credentials_request)
@@ -0,0 +1,22 @@
1
+ # Zernio::ConnectOpenAIAdsCredentials200Response
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **account_id** | **String** | | [optional] |
8
+ | **ad_account_name** | **String** | | [optional] |
9
+ | **redirect_url** | **String** | | [optional] |
10
+
11
+ ## Example
12
+
13
+ ```ruby
14
+ require 'zernio-sdk'
15
+
16
+ instance = Zernio::ConnectOpenAIAdsCredentials200Response.new(
17
+ account_id: null,
18
+ ad_account_name: null,
19
+ redirect_url: null
20
+ )
21
+ ```
22
+
@@ -0,0 +1,24 @@
1
+ # Zernio::ConnectOpenAIAdsCredentialsRequest
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **api_key** | **String** | API key from ChatGPT Ads Manager (Settings). Grants full read/write access on OpenAI&#39;s side; Zernio only ever reads with it. | |
8
+ | **profile_id** | **String** | Your Zernio profile ID | |
9
+ | **state** | **String** | Optional state passthrough for the connect flow. | [optional] |
10
+ | **redirect_uri** | **String** | Optional URL to redirect to after successful connection | [optional] |
11
+
12
+ ## Example
13
+
14
+ ```ruby
15
+ require 'zernio-sdk'
16
+
17
+ instance = Zernio::ConnectOpenAIAdsCredentialsRequest.new(
18
+ api_key: null,
19
+ profile_id: null,
20
+ state: null,
21
+ redirect_uri: null
22
+ )
23
+ ```
24
+
@@ -4,7 +4,7 @@
4
4
 
5
5
  | Name | Type | Description | Notes |
6
6
  | ---- | ---- | ----------- | ----- |
7
- | **event_name** | **String** | Standard event name (Purchase, Lead, CompleteRegistration, AddToCart, InitiateCheckout, AddPaymentInfo, Subscribe, StartTrial, ViewContent, Search, Contact, SubmitApplication, Schedule) or a custom string (only supported on platforms that accept custom events — Meta). Per-platform behavior: - Meta: free-form; standard names match Meta&#39;s built-ins. - Google: ignored — the conversion action&#39;s category determines the type. - LinkedIn: ignored — the conversion rule&#39;s &#x60;type&#x60; is locked to the destination. | |
7
+ | **event_name** | **String** | Standard event name (Purchase, Lead, CompleteRegistration, AddToCart, InitiateCheckout, AddPaymentInfo, Subscribe, StartTrial, ViewContent, Search, Contact, SubmitApplication, Schedule) or a custom string (only supported on platforms that accept custom events — Meta and OpenAI Ads). Per-platform behavior: - Meta: free-form; standard names match Meta&#39;s built-ins. - Google: ignored — the conversion action&#39;s category determines the type. - LinkedIn: ignored — the conversion rule&#39;s &#x60;type&#x60; is locked to the destination. - OpenAI Ads: a fixed subset of standard names (Purchase, Lead, AddToCart, ViewContent, InitiateCheckout, CompleteRegistration, Subscribe, StartTrial, Schedule) maps 1:1 onto OpenAI&#39;s own event-type enum; anything else is sent as a custom event with the name preserved. | |
8
8
  | **event_time** | **Integer** | When the conversion happened, in unix seconds. | |
9
9
  | **event_id** | **String** | Unique dedup key. The same eventId must be used on pixel + CAPI to prevent double-counting. Mapped to event_id on Meta, transactionId on Google, eventId on LinkedIn (LinkedIn deduplicates against Insight Tag events with the same eventId; the Insight Tag event wins when both arrive). | |
10
10
  | **value** | **Float** | Conversion value in the specified currency. | [optional] |
@@ -166,7 +166,7 @@ end
166
166
 
167
167
  Create a conversion destination
168
168
 
169
- Create a new conversion destination on the platform. Supported for LinkedIn (conversion rule) and Google Ads (conversion action). Meta manages destinations in its own UI and returns 405. **LinkedIn:** creation is NOT idempotent. A retry creates a second destination. Deduplicate before retrying. **Google Ads:** calling with a name that already exists reuses the existing conversion action transparently (the response is identical to a fresh create). Calling with the same name but a different category returns a typed `IDEMPOTENCY_CONFLICT` (409) rather than silently returning the mismatched action. **LinkedIn:** the rule is created with `conversionMethod=CONVERSIONS_API` and (by default) auto-associated with all of the ad account's campaigns via `autoAssociationType=ALL_CAMPAIGNS`. Pass `autoAssociationType: NONE` to opt out and manage associations explicitly via the associations endpoints below. 365-day attribution windows are only valid for `SUBMIT_APPLICATION`, `PURCHASE`, `ADD_TO_CART`, `QUALIFIED_LEAD`, and `LEAD` rule types; the API rejects other combinations locally. **Google Ads:** the conversion action is created with `type=UPLOAD_CLICKS` (required for API-uploaded offline conversions, immutable after creation). The `type` field carries the Google `ConversionActionCategory` enum value, e.g. `PURCHASE`, `SUBSCRIBE_PAID`, `SIGNUP`, `IMPORTED_LEAD`, `BOOK_APPOINTMENT`. Unified standard event names (e.g. `Purchase`, `Subscribe`, `CompleteRegistration`, `Lead`, `Schedule`) are resolved to their Google category equivalents automatically. The action defaults to secondary (non-primary) to avoid immediately steering Smart Bidding; pass `primaryForGoal: true` to opt in.
169
+ Create a new conversion destination on the platform. Supported for LinkedIn (conversion rule) and Google Ads (conversion action). Meta and OpenAI Ads pixels are created via their own tracking-tags flow instead (`POST /v1/accounts/{accountId}/tracking-tags`); this endpoint returns 405 for both. **LinkedIn:** creation is NOT idempotent. A retry creates a second destination. Deduplicate before retrying. **Google Ads:** calling with a name that already exists reuses the existing conversion action transparently (the response is identical to a fresh create). Calling with the same name but a different category returns a typed `IDEMPOTENCY_CONFLICT` (409) rather than silently returning the mismatched action. **LinkedIn:** the rule is created with `conversionMethod=CONVERSIONS_API` and (by default) auto-associated with all of the ad account's campaigns via `autoAssociationType=ALL_CAMPAIGNS`. Pass `autoAssociationType: NONE` to opt out and manage associations explicitly via the associations endpoints below. 365-day attribution windows are only valid for `SUBMIT_APPLICATION`, `PURCHASE`, `ADD_TO_CART`, `QUALIFIED_LEAD`, and `LEAD` rule types; the API rejects other combinations locally. **Google Ads:** the conversion action is created with `type=UPLOAD_CLICKS` (required for API-uploaded offline conversions, immutable after creation). The `type` field carries the Google `ConversionActionCategory` enum value, e.g. `PURCHASE`, `SUBSCRIBE_PAID`, `SIGNUP`, `IMPORTED_LEAD`, `BOOK_APPOINTMENT`. Unified standard event names (e.g. `Purchase`, `Subscribe`, `CompleteRegistration`, `Lead`, `Schedule`) are resolved to their Google category equivalents automatically. The action defaults to secondary (non-primary) to avoid immediately steering Smart Bidding; pass `primaryForGoal: true` to opt in.
170
170
 
171
171
  ### Examples
172
172
 
@@ -609,7 +609,7 @@ end
609
609
 
610
610
  List conversion destinations
611
611
 
612
- Returns the list of pixels (Meta), conversion actions (Google), or conversion rules (LinkedIn) accessible to the connected ads account. Use the returned `id` as `destinationId` when posting to `POST /v1/ads/conversions`. For Google and LinkedIn, each destination's `type` reflects the conversion type (PURCHASE, LEAD, SIGN_UP, etc.) — the event type is locked to the destination. For Meta, `type` is absent: pixels accept any event name per request. For LinkedIn, destinations are returned across every sponsored ad account the connected token can access; the `adAccountId` field on each destination identifies the parent ad account and is required for subsequent CRUD calls (update, delete, associations, metrics).
612
+ Returns the list of pixels (Meta), conversion actions (Google), conversion rules (LinkedIn), or pixels (OpenAI Ads) accessible to the connected ads account. Use the returned `id` as `destinationId` when posting to `POST /v1/ads/conversions`. For Google and LinkedIn, each destination's `type` reflects the conversion type (PURCHASE, LEAD, SIGN_UP, etc.) — the event type is locked to the destination. For Meta and OpenAI Ads, `type` is absent: pixels accept any event name per request. For LinkedIn, destinations are returned across every sponsored ad account the connected token can access; the `adAccountId` field on each destination identifies the parent ad account and is required for subsequent CRUD calls (update, delete, associations, metrics).
613
613
 
614
614
  ### Examples
615
615
 
@@ -623,7 +623,7 @@ Zernio.configure do |config|
623
623
  end
624
624
 
625
625
  api_instance = Zernio::ConversionsApi.new
626
- account_id = 'account_id_example' # String | SocialAccount ID (metaads, googleads, linkedinads, or tiktokads).
626
+ account_id = 'account_id_example' # String | SocialAccount ID (metaads, googleads, linkedinads, tiktokads, or openaiads).
627
627
 
628
628
  begin
629
629
  # List conversion destinations
@@ -656,7 +656,7 @@ end
656
656
 
657
657
  | Name | Type | Description | Notes |
658
658
  | ---- | ---- | ----------- | ----- |
659
- | **account_id** | **String** | SocialAccount ID (metaads, googleads, linkedinads, or tiktokads). | |
659
+ | **account_id** | **String** | SocialAccount ID (metaads, googleads, linkedinads, tiktokads, or openaiads). | |
660
660
 
661
661
  ### Return type
662
662
 
@@ -753,7 +753,7 @@ end
753
753
 
754
754
  Send conversion events
755
755
 
756
- Relay one or more conversion events to the target ad platform's native Conversions API. Platform is inferred from the provided `accountId`. Requires the Ads add-on. Supported platforms: - Meta (`metaads`) via Graph API - Google Ads (`googleads`) via Data Manager API `ingestEvents` - LinkedIn (`linkedinads`) via `/rest/conversionEvents` - TikTok (`tiktokads`) via the Offline Events API `/offline/batch/` — OFFLINE conversions only `destinationId` semantics differ per platform: - Meta: pixel (dataset) ID, e.g. `123456789012345` - Google: conversion action resource name, e.g. `customers/1234567890/conversionActions/987654321` - LinkedIn: conversion rule ID or URN, e.g. `104012` or `urn:lla:llaPartnerConversion:104012` - TikTok: Offline Event Set ID, e.g. `7057103914977558530` TikTok notes: this path sends OFFLINE conversions (in-store / CRM / call-center), not web-pixel events. Each event must carry an email or phone (TikTok requires at least one). The connected TikTok ads account must have granted the Offline Events permission; older grants must reconnect. Callers can list valid destinations via `GET /v1/accounts/{accountId}/conversion-destinations`. All PII (email, phone, names, external IDs) is hashed with SHA-256 server-side per each platform's normalization spec, including Google's Gmail-specific dot/plus-suffix stripping. Send plaintext. LinkedIn `externalIds` are passed through as plaintext per LinkedIn's spec; only emails and phones are hashed. For LinkedIn, the connected account must have been authorized after the Conversions API rollout (i.e. the OAuth grant must include `rw_conversions`). Older accounts must reconnect. Batching is handled automatically. Meta caps at 1000 events per request and rejects the entire batch if any event is malformed. Google caps at 2000. LinkedIn caps at 5000 and is also all-or-nothing per chunk. Dedup: pass a stable `eventId` on every event. Meta and LinkedIn use it to dedupe against browser-side pixel/Insight Tag events; Google maps it to `transactionId`. Per-platform `eventName` semantics: - Meta: free-form. Standard names (Purchase, Lead, ...) match Meta's built-in events; custom strings are accepted. - Google: ignored. The conversion action's category determines the event type. Send the standard name closest to your action for documentation, but the platform will not branch on it. - LinkedIn: ignored. The conversion rule's `type` (LEAD, PURCHASE, etc.) is locked to the destination at rule-creation time. Send the standard name for documentation; LinkedIn does not branch on it.
756
+ Relay one or more conversion events to the target ad platform's native Conversions API. Platform is inferred from the provided `accountId`. Requires the Ads add-on. Supported platforms: - Meta (`metaads`) via Graph API - Google Ads (`googleads`) via Data Manager API `ingestEvents` - LinkedIn (`linkedinads`) via `/rest/conversionEvents` - TikTok (`tiktokads`) via the Offline Events API `/offline/batch/` — OFFLINE conversions only - OpenAI Ads (`openaiads`) via its Conversions API (a separate host, `bzr.openai.com`) `destinationId` semantics differ per platform: - Meta: pixel (dataset) ID, e.g. `123456789012345` - Google: conversion action resource name, e.g. `customers/1234567890/conversionActions/987654321` - LinkedIn: conversion rule ID or URN, e.g. `104012` or `urn:lla:llaPartnerConversion:104012` - TikTok: Offline Event Set ID, e.g. `7057103914977558530` - OpenAI Ads: pixel wire id (numeric `pixel_id`, distinct from the internal pixel id), as returned by `GET /v1/accounts/{accountId}/conversion-destinations` TikTok notes: this path sends OFFLINE conversions (in-store / CRM / call-center), not web-pixel events. Each event must carry an email or phone (TikTok requires at least one). The connected TikTok ads account must have granted the Offline Events permission; older grants must reconnect. OpenAI Ads notes: requires a tracking tag (pixel) to already exist on the account — returns 422 with code `TRACKING_TAG_REQUIRED` if `POST /v1/accounts/{accountId}/tracking-tags` hasn't been called yet. Callers can list valid destinations via `GET /v1/accounts/{accountId}/conversion-destinations`. All PII (email, phone, names, external IDs) is hashed with SHA-256 server-side per each platform's normalization spec, including Google's Gmail-specific dot/plus-suffix stripping. Send plaintext. LinkedIn `externalIds` are passed through as plaintext per LinkedIn's spec; only emails and phones are hashed. For LinkedIn, the connected account must have been authorized after the Conversions API rollout (i.e. the OAuth grant must include `rw_conversions`). Older accounts must reconnect. Batching is handled automatically. Meta caps at 1000 events per request and rejects the entire batch if any event is malformed. Google caps at 2000. LinkedIn caps at 5000 and is also all-or-nothing per chunk. OpenAI Ads caps at 1000 per request; larger submissions are split into 1000-event chunks, each all-or-nothing (a malformed event fails every event in that chunk, not the whole request). Dedup: pass a stable `eventId` on every event. Meta and LinkedIn use it to dedupe against browser-side pixel/Insight Tag events; Google maps it to `transactionId`. Per-platform `eventName` semantics: - Meta: free-form. Standard names (Purchase, Lead, ...) match Meta's built-in events; custom strings are accepted. - Google: ignored. The conversion action's category determines the event type. Send the standard name closest to your action for documentation, but the platform will not branch on it. - LinkedIn: ignored. The conversion rule's `type` (LEAD, PURCHASE, etc.) is locked to the destination at rule-creation time. Send the standard name for documentation; LinkedIn does not branch on it. - OpenAI Ads: a fixed subset of standard names (Purchase, Lead, AddToCart, ViewContent, InitiateCheckout, CompleteRegistration, Subscribe, StartTrial, Schedule) maps 1:1 onto OpenAI's own event-type enum; any other standard name or custom string is sent as `type: custom` with the name preserved.
757
757
 
758
758
  ### Examples
759
759
 
@@ -7,7 +7,7 @@
7
7
  | **type** | **String** | EMAIL, PHONE, FULL_NAME, FIRST_NAME, LAST_NAME, CUSTOM, … | |
8
8
  | **key** | **String** | CUSTOM questions only. | [optional] |
9
9
  | **label** | **String** | CUSTOM questions only. | [optional] |
10
- | **options** | [**Array&lt;CreateLeadFormRequestQuestionsInnerOptionsInner&gt;**](CreateLeadFormRequestQuestionsInnerOptionsInner.md) | | [optional] |
10
+ | **options** | [**Array&lt;BoostPostRequestTrackingUrlTagsInner&gt;**](BoostPostRequestTrackingUrlTagsInner.md) | | [optional] |
11
11
  | **inline_context** | **String** | | [optional] |
12
12
 
13
13
  ## Example
@@ -11,26 +11,26 @@
11
11
  | **ad_set_name** | **String** | Meta only. Exact ad set name. Overrides the default &#x60;&lt;name&gt; - Ad Set&#x60;. (For per-ad names on the multi-creative shape, set &#x60;name&#x60; on each &#x60;creatives[]&#x60; entry.) | [optional] |
12
12
  | **ad_name** | **String** | Meta only. Exact ad name (the single-creative ad object&#39;s name). Overrides the default, which is &#x60;name&#x60;. (For per-ad names on the multi-creative shape, set &#x60;name&#x60; on each &#x60;creatives[]&#x60; entry instead.) | [optional] |
13
13
  | **tracking** | [**CreateStandaloneAdRequestTracking**](CreateStandaloneAdRequestTracking.md) | | [optional] |
14
- | **goal** | **String** | Required on legacy and multi-creative shapes; the attach shape inherits it from the ad set. Available goals vary by platform. **Meta** - &#x60;conversions&#x60;: OUTCOME_SALES. Requires &#x60;promotedObject.pixelId&#x60; and &#x60;promotedObject.customEventType&#x60; with a commerce event such as PURCHASE or START_TRIAL. - &#x60;lead_conversion&#x60;: OUTCOME_LEADS optimizing website pixel leads. Same pixel and event fields, but with a leads-class event such as LEAD, SUBMIT_APPLICATION, SCHEDULE or CONTACT. Meta gates conversion events by objective, so leads-class events are rejected under &#x60;conversions&#x60;. - &#x60;lead_generation&#x60;: OUTCOME_LEADS with instant forms. Requires &#x60;leadGenFormId&#x60;. &#x60;promotedObject.pageId&#x60; is optional and auto-filled from the connected Page. - &#x60;app_promotion&#x60;: requires &#x60;promotedObject.applicationId&#x60; and &#x60;promotedObject.objectStoreUrl&#x60;. - &#x60;catalog_sales&#x60;: Advantage+ catalog ads, for example vehicle inventory. Requires &#x60;promotedObject.productSetId&#x60;, &#x60;promotedObject.pixelId&#x60; and &#x60;promotedObject.customEventType&#x60;. Builds a catalog TEMPLATE creative from the copy fields, which may carry template tags like {{product.name}} or {{vehicle.make}}. No imageUrl or video is sent; Meta renders the visuals per catalog item. Discover catalogs via GET /v1/ads/catalogs and product sets via GET /v1/ads/catalogs/{catalogId}/product-sets. Single shape only, no creatives[], adSetId, dynamicCreative or placementAssets. **TikTok** - &#x60;conversions&#x60;: website-conversion ad group. Requires &#x60;promotedObject.pixelId&#x60;, your TikTok Pixel ID. Accepts an optional &#x60;promotedObject.customEventType&#x60; with a TikTok optimization_event code your pixel tracks (newer pixels use e.g. SHOPPING for purchase events; legacy pixels use ON_WEB_ORDER, INITIATE_ORDER, ON_WEB_REGISTER or FORM). To inherit pixel and event from an existing ad group, pass &#x60;adSetId&#x60; instead. **LinkedIn** - &#x60;engagement&#x60;, &#x60;traffic&#x60;, &#x60;awareness&#x60; and &#x60;video_views&#x60; create standalone Direct Sponsored Content ads. &#x60;traffic&#x60; requires &#x60;linkUrl&#x60;; &#x60;video_views&#x60; requires &#x60;video&#x60;. - &#x60;job_applicants&#x60; requires a &#x60;platformSpecificData.jobs&#x60; creative. - For &#x60;lead_generation&#x60; or &#x60;conversions&#x60; on LinkedIn, or to promote an existing post, use POST /v1/ads/boost. | [optional] |
14
+ | **goal** | **String** | Required on legacy and multi-creative shapes; the attach shape inherits it from the ad set. Available goals vary by platform. **Meta** - &#x60;conversions&#x60;: OUTCOME_SALES. Requires &#x60;promotedObject.pixelId&#x60; and &#x60;promotedObject.customEventType&#x60; with a commerce event such as PURCHASE or START_TRIAL. - &#x60;lead_conversion&#x60;: OUTCOME_LEADS optimizing website pixel leads. Same pixel and event fields, but with a leads-class event such as LEAD, SUBMIT_APPLICATION, SCHEDULE or CONTACT. Meta gates conversion events by objective, so leads-class events are rejected under &#x60;conversions&#x60;. - &#x60;lead_generation&#x60;: OUTCOME_LEADS with instant forms. Requires &#x60;leadGenFormId&#x60;. &#x60;promotedObject.pageId&#x60; is optional and auto-filled from the connected Page. - &#x60;app_promotion&#x60;: requires &#x60;promotedObject.applicationId&#x60; and &#x60;promotedObject.objectStoreUrl&#x60;. - &#x60;catalog_sales&#x60;: Advantage+ catalog ads, for example vehicle inventory. Requires &#x60;promotedObject.productSetId&#x60;, &#x60;promotedObject.pixelId&#x60; and &#x60;promotedObject.customEventType&#x60;. Builds a catalog TEMPLATE creative from the copy fields, which may carry template tags like {{product.name}} or {{vehicle.make}}. No imageUrl or video is sent; Meta renders the visuals per catalog item. Discover catalogs via GET /v1/ads/catalogs and product sets via GET /v1/ads/catalogs/{catalogId}/product-sets. Single shape only, no creatives[], adSetId, dynamicCreative or placementAssets. **TikTok** - &#x60;conversions&#x60;: website-conversion ad group. Requires &#x60;promotedObject.pixelId&#x60;, your TikTok Pixel ID. Accepts an optional &#x60;promotedObject.customEventType&#x60; with a TikTok optimization_event code your pixel tracks (newer pixels use e.g. SHOPPING for purchase events; legacy pixels use ON_WEB_ORDER, INITIATE_ORDER, ON_WEB_REGISTER or FORM). To inherit pixel and event from an existing ad group, pass &#x60;adSetId&#x60; instead. **LinkedIn** - &#x60;engagement&#x60;, &#x60;traffic&#x60;, &#x60;awareness&#x60; and &#x60;video_views&#x60; create standalone Direct Sponsored Content ads. &#x60;traffic&#x60; requires &#x60;linkUrl&#x60;; &#x60;video_views&#x60; requires &#x60;video&#x60;. - &#x60;job_applicants&#x60; requires a &#x60;platformSpecificData.jobs&#x60; creative. - For &#x60;lead_generation&#x60; or &#x60;conversions&#x60; on LinkedIn, or to promote an existing post, use POST /v1/ads/boost. **OpenAI Ads** - Only &#x60;traffic&#x60;, &#x60;awareness&#x60;, and &#x60;conversions&#x60; are supported (other goals return 400). Maps to OpenAI&#39;s &#x60;bidding_type&#x60; (clicks, impressions, conversions respectively). &#x60;conversions&#x60; requires an active conversion event setting on the account; create a tracking tag with &#x60;defaultEventType&#x60; via the tracking-tags API (&#x60;POST /v1/accounts/{accountId}/tracking-tags&#x60;), or configure a conversion event in OpenAI Ads Manager, or the request returns 422. | [optional] |
15
15
  | **optimization_goal** | **String** | Meta only. Explicit ad-set &#x60;optimization_goal&#x60; (e.g. &#x60;LANDING_PAGE_VIEWS&#x60;, &#x60;LINK_CLICKS&#x60;, &#x60;REACH&#x60;, &#x60;IMPRESSIONS&#x60;, &#x60;OFFSITE_CONVERSIONS&#x60;, &#x60;THRUPLAY&#x60;, &#x60;LEAD_GENERATION&#x60;). Overrides the default derived from &#x60;goal&#x60; (e.g. &#x60;traffic&#x60; defaults to &#x60;LINK_CLICKS&#x60;). Forwarded verbatim to Meta, which validates compatibility with the campaign objective and rejects incompatible combinations. | [optional] |
16
16
  | **billing_event** | **String** | Meta only. Explicit ad-set &#x60;billing_event&#x60;. Defaults to &#x60;IMPRESSIONS&#x60;. Forwarded verbatim to Meta, which validates compatibility with the optimization goal. | [optional] |
17
17
  | **buying_type** | **String** | Meta only. RESERVED &#x3D; Reach &amp; Frequency: requires &#x60;rfPredictionId&#x60; (a RESERVED prediction from /v1/ads/rf-predictions + /reserve). Budget, schedule and pricing come from the reservation, so budgetAmount/budgetType are not required and bid fields are ignored. Only the plain single-ad shape (no creatives[], adSetId, existingCampaignId or dynamicCreative). | [optional] |
18
18
  | **rf_prediction_id** | **String** | Meta only. The RESERVED prediction id the R&amp;F ad set runs on (reserving mints a new id — pass that one). Requires buyingType RESERVED. | [optional] |
19
19
  | **creative_features** | **Hash&lt;String, String&gt;** | Meta only. Advantage+ creative enhancements: a partial map of Meta creative feature keys (snake_case, e.g. enhance_cta, image_brightness_and_contrast, text_optimizations) to enroll status, forwarded as degrees_of_freedom_spec.creative_features_spec. Meta validates the keys; unspecified features default to OPT_OUT. The legacy standard_enhancements bundle is deprecated by Meta and rejected. | [optional] |
20
20
  | **validate_only** | **Boolean** | Meta only, single standalone shape only (no creatives[], adSetId, or RESERVED). Dry-run: each node runs Meta&#39;s execution_options validate_only and NOTHING is created or persisted. Children need real parents, so a fresh tree validates the campaign + creative (the ad set needs its campaign to exist — pass existingCampaignId to validate it too; the ad itself is never validatable pre-create). A Meta validation failure returns the 400 verbatim; success returns 200 with per-node results instead of an ad. | [optional] |
21
- | **budget_amount** | **Float** | Required on legacy + multi-creative shapes. Inherited on attach. | [optional] |
22
- | **budget_type** | **String** | Required on legacy + multi-creative shapes. Inherited on attach. | [optional] |
21
+ | **budget_amount** | **Float** | Required on legacy + multi-creative shapes. Inherited on attach. OpenAI Ads requires a $1 minimum (its budget is lifetime-only, see budgetType). | [optional] |
22
+ | **budget_type** | **String** | Required on legacy + multi-creative shapes. Inherited on attach. OpenAI Ads accepts lifetime only (no daily-budget concept on the platform); sending daily returns 422. OpenAI Ads lifetime budgets require &#x60;endDate&#x60; to give the lifetime cap a spend window. | [optional] |
23
23
  | **status** | **String** | Meta and TikTok. Publish state of the created entities. Omitted or ACTIVE publishes live (default, back-compat); PAUSED creates them paused and skips activation, so you can review before they spend. On TikTok the whole campaign &gt; ad group &gt; ad hierarchy stays paused. | [optional] |
24
24
  | **budget_level** | **String** | Meta only. Where the budget lives, which selects the Meta budget model: - &#x60;adset&#x60; (default): ABO (Ad-set Budget Optimization). The budget is set on the ad set. This is the back-compatible behaviour — omit this field to keep it. - &#x60;campaign&#x60;: CBO (Campaign Budget Optimization / Advantage Campaign Budget). The budget AND &#x60;bidStrategy&#x60; are set on the CAMPAIGN, and Meta distributes spend across ad sets automatically. Meta requires the budget at exactly one level, never both. Non-Meta platforms ignore this field. Ignored on the attach shape (&#x60;adSetId&#x60;), which inherits the existing budget. | [optional][default to &#39;adset&#39;] |
25
25
  | **currency** | **String** | | [optional] |
26
- | **headline** | **String** | Required for Meta, Google, Pinterest, and LinkedIn on legacy + attach shapes (skip for multi-creative — use &#x60;creatives[].headline&#x60;). Ignored for TikTok and X/Twitter. Max: Meta&#x3D;255, Google&#x3D;30, Pinterest&#x3D;100, LinkedIn&#x3D;400. On LinkedIn this is the ad&#39;s headline (the bold text on the creative); for traffic ads it&#39;s the link card title. | [optional] |
26
+ | **headline** | **String** | Required for Meta, Google, Pinterest, LinkedIn, and OpenAI Ads on legacy + attach shapes (skip for multi-creative — use &#x60;creatives[].headline&#x60;). Ignored for TikTok and X/Twitter. Max: Meta&#x3D;255, Google&#x3D;30, Pinterest&#x3D;100, LinkedIn&#x3D;400, OpenAI&#x3D;50 (min 3). On LinkedIn this is the ad&#39;s headline (the bold text on the creative); for traffic ads it&#39;s the link card title. On OpenAI Ads this is the chat card&#39;s title. | [optional] |
27
27
  | **long_headline** | **String** | Google Display only — defaults to &#x60;headline&#x60; if omitted. On LinkedIn, reused as the optional secondary description text on traffic (link) ads; omitted if not provided. | [optional] |
28
- | **body** | **String** | Required on legacy + attach shapes. For X/Twitter this is the tweet text (max 280 chars including a ~24-char URL when &#x60;linkUrl&#x60; is set). On LinkedIn this is the post commentary (the intro text shown above the ad). Max: Google&#x3D;90, Pinterest&#x3D;500. | [optional] |
28
+ | **body** | **String** | Required on legacy + attach shapes. For X/Twitter this is the tweet text (max 280 chars including a ~24-char URL when &#x60;linkUrl&#x60; is set). On LinkedIn this is the post commentary (the intro text shown above the ad). On OpenAI Ads this is the chat card&#39;s body text. Max: Google&#x3D;90, Pinterest&#x3D;500, OpenAI&#x3D;100. | [optional] |
29
29
  | **description** | **String** | Meta only (facebook/instagram). Link description — the secondary text shown below the headline (Meta&#39;s link_data.description; on video creatives mapped to video_data.link_description). When omitted, Meta auto-pulls the destination URL&#39;s OpenGraph description. Applies on legacy, attach, and placementAssets shapes; for multi-creative use creatives[].description (this field is the shared fallback). For multi-text variations use dynamicCreative.descriptions instead. | [optional] |
30
30
  | **call_to_action** | **String** | Required on legacy + attach shapes for Meta. Honoured on TikTok (passes through to the Spark Ad creative&#39;s &#x60;call_to_action&#x60;) and on LinkedIn (the CTA button on the ad; defaults to LEARN_MORE when &#x60;linkUrl&#x60; is set). LinkedIn accepts: LEARN_MORE, SIGN_UP, DOWNLOAD, SUBSCRIBE, REGISTER, JOIN, ATTEND, REQUEST_DEMO, VIEW_QUOTE, APPLY, SEE_MORE, SHOP_NOW, BUY_NOW. Ignored by Google, Pinterest, and X/Twitter. | [optional] |
31
- | **link_url** | **String** | Required on legacy + attach shapes (skip for multi-creative). On LinkedIn it&#39;s the ad&#39;s destination URL; required for &#x60;traffic&#x60; ads, optional for &#x60;engagement&#x60; / &#x60;awareness&#x60;. NOT required when &#x60;goal&#x60; is &#x60;lead_generation&#x60; (the ad opens a Lead Gen form instead of a destination). On LinkedIn, &#x60;imageUrl&#x60; + &#x60;linkUrl&#x60; publishes an ARTICLE-content creative; this is LinkedIn&#39;s article ad format, with the image as thumbnail and &#x60;longHeadline&#x60; as description. | [optional] |
31
+ | **link_url** | **String** | Required on legacy + attach shapes (skip for multi-creative). On LinkedIn it&#39;s the ad&#39;s destination URL; required for &#x60;traffic&#x60; ads, optional for &#x60;engagement&#x60; / &#x60;awareness&#x60;. NOT required when &#x60;goal&#x60; is &#x60;lead_generation&#x60; (the ad opens a Lead Gen form instead of a destination). On LinkedIn, &#x60;imageUrl&#x60; + &#x60;linkUrl&#x60; publishes an ARTICLE-content creative; this is LinkedIn&#39;s article ad format, with the image as thumbnail and &#x60;longHeadline&#x60; as description. Required for OpenAI Ads (the chat card&#39;s target_url). | [optional] |
32
32
  | **lead_gen_form_id** | **String** | Meta Lead Gen forms only (facebook/instagram). The leadgen_forms ID to attach to the ad&#39;s creative — create one via POST /v1/ads/lead-forms. REQUIRED when &#x60;goal&#x60; is &#x60;lead_generation&#x60;, and on every ATTACH (&#x60;adSetId&#x60;) call that targets a lead ad set (the form attaches per-ad; Meta rejects a formless ad in a lead ad set). Ignored otherwise. The ad set&#39;s promoted_object.page_id + LEAD_GENERATION optimization + destination_type ON_AD are derived automatically from the goal. Both &#x60;placementAssets&#x60; (per-placement creative) and &#x60;dynamicCreative&#x60; (multi-text / multi-asset pool, e.g. multiple headlines and primary texts) ARE supported on instant-form lead ads — the form is attached for you, and for &#x60;dynamicCreative&#x60; the ad set is created as a Dynamic Creative ad set automatically (Meta requires that for any multi-text feed; there is no non-DCO multi-text path). Send a single &#x60;imageUrls&#x60; entry plus your text variations to get Meta&#39;s \&quot;Multiple Text Options\&quot; behavior on a lead ad. | [optional] |
33
- | **image_url** | **String** | Image creative for Meta/Google/Pinterest/LinkedIn on legacy + attach shapes (mutually exclusive with &#x60;video&#x60;). Required for LinkedIn ads unless &#x60;video&#x60; is set. Not required for Google Search campaigns. For TikTok, this field carries the VIDEO URL (the TikTok ads endpoint is video-only; the field retains the &#x60;imageUrl&#x60; name for cross-platform consistency). Ignored for X/Twitter. For Google Display, treated as the landscape image (alias of &#x60;images.landscape&#x60;); supply &#x60;images.square&#x60; alongside or the request is rejected. For LinkedIn the image is uploaded to LinkedIn under the authoring Company Page (see &#x60;organizationId&#x60;); recommended ratio 1.91:1 (e.g. 1200×627). | [optional] |
33
+ | **image_url** | **String** | Image creative for Meta/Google/Pinterest/LinkedIn on legacy + attach shapes (mutually exclusive with &#x60;video&#x60;). Required for LinkedIn ads unless &#x60;video&#x60; is set. Not required for Google Search campaigns. For TikTok, this field carries the VIDEO URL (the TikTok ads endpoint is video-only; the field retains the &#x60;imageUrl&#x60; name for cross-platform consistency). Ignored for X/Twitter. For Google Display, treated as the landscape image (alias of &#x60;images.landscape&#x60;); supply &#x60;images.square&#x60; alongside or the request is rejected. For LinkedIn the image is uploaded to LinkedIn under the authoring Company Page (see &#x60;organizationId&#x60;); recommended ratio 1.91:1 (e.g. 1200×627). Required for OpenAI Ads (uploaded as the chat card&#39;s image; OpenAI has no video ad format). | [optional] |
34
34
  | **images** | [**CreateStandaloneAdRequestImages**](CreateStandaloneAdRequestImages.md) | | [optional] |
35
35
  | **video** | [**CreateStandaloneAdRequestVideo**](CreateStandaloneAdRequestVideo.md) | | [optional] |
36
36
  | **creatives** | [**Array&lt;CreateStandaloneAdRequestCreativesInner&gt;**](CreateStandaloneAdRequestCreativesInner.md) | Meta-only. When present, switches to the multi-creative shape: creates 1 campaign + 1 ad set + N ads (one per entry here). Top-level &#x60;headline&#x60; / &#x60;body&#x60; / &#x60;imageUrl&#x60; / &#x60;linkUrl&#x60; / &#x60;callToAction&#x60; are ignored in this mode. Mutually exclusive with &#x60;adSetId&#x60;. | [optional] |
@@ -41,7 +41,7 @@
41
41
  | **board_id** | **String** | Pinterest only. Board ID (auto-creates if not provided). | [optional] |
42
42
  | **organization_id** | **String** | LinkedIn only. The Company Page that authors the Direct Sponsored Content (\&quot;dark\&quot;) post backing the ad — accepts a numeric organization ID or a full &#x60;urn:li:organization:N&#x60; URN. Required unless the resolved &#x60;accountId&#x60; is a connected LinkedIn Company-Page account (defaults to that page) or the LinkedIn ad account is org-owned (defaults to the account&#39;s owning organization). The authenticated member must be an ADMINISTRATOR or DIRECT_SPONSORED_CONTENT_POSTER of this page (and the page must be associated with the ad account), or LinkedIn returns 403. Ignored by every other platform. | [optional] |
43
43
  | **targeting** | [**TargetingSpec**](TargetingSpec.md) | Nested targeting object — the same TargetingSpec shape as &#x60;POST /v1/ads/boost&#x60;, &#x60;POST /v1/ads/targeting/reach-estimate&#x60;, and &#x60;saved_targeting&#x60; audiences. Merged UNDER the flat inline targeting fields below: &#x60;savedTargetingId&#x60; &lt; &#x60;targeting&#x60; &lt; flat fields (a flat field present on the body replaces the nested value entirely). Both forms are equivalent; use whichever your integration already builds. | [optional] |
44
- | **countries** | **Array&lt;String&gt;** | ISO 3166-1 alpha-2 country codes (e.g. [&#39;NL&#39;]). Defaults to [&#39;US&#39;] when no other geo targeting (flat or nested &#x60;targeting&#x60;) is provided. (LinkedIn currently honours country-level targeting only.) | [optional] |
44
+ | **countries** | **Array&lt;String&gt;** | ISO 3166-1 alpha-2 country codes (e.g. [&#39;NL&#39;]). Defaults to [&#39;US&#39;] when no other geo targeting (flat or nested &#x60;targeting&#x60;) is provided. (LinkedIn and OpenAI Ads currently honour country-level targeting only; any other targeting field returns 400 for OpenAI Ads.) | [optional] |
45
45
  | **cities** | [**Array&lt;CreateStandaloneAdRequestCitiesInner&gt;**](CreateStandaloneAdRequestCitiesInner.md) | City-level geo targeting (Meta and TikTok). Each city is targeted by the platform&#39;s opaque &#x60;key&#x60; (the city ID) which can be looked up via &#x60;GET /v1/ads/targeting/search?dimension&#x3D;geo&amp;q&#x3D;&lt;name&gt;&amp;countryCode&#x3D;&lt;ISO&gt;&#x60;. Optional &#x60;radius&#x60; + &#x60;distance_unit&#x60; (Meta only) extend the targeting beyond the city limits (e.g. radius 25 km around the city center). Both must be set together, or both omitted (Meta defaults to ~16 km when omitted). On Meta, cannot overlap with the same country in &#x60;countries&#x60; (Meta returns a \&quot;locations overlap\&quot; error). Either drop the country or scope it to a different country. On TikTok, keys are numeric location ids and can be sent without &#x60;countries&#x60;. | [optional] |
46
46
  | **regions** | [**Array&lt;CreateStandaloneAdRequestRegionsInner&gt;**](CreateStandaloneAdRequestRegionsInner.md) | Region-level (state/province) geo targeting (Meta and TikTok). Each region is targeted by the platform&#39;s opaque &#x60;key&#x60; (the region ID) which can be looked up via &#x60;GET /v1/ads/targeting/search?dimension&#x3D;geo&amp;q&#x3D;&lt;name&gt;&amp;countryCode&#x3D;&lt;ISO&gt;&#x60;. | [optional] |
47
47
  | **age_min** | **Integer** | | [optional] |
@@ -4,7 +4,7 @@
4
4
 
5
5
  | Name | Type | Description | Notes |
6
6
  | ---- | ---- | ----------- | ----- |
7
- | **ad_account_id** | **String** | Meta ad account id, e.g. &#x60;act_123456789&#x60;. | |
7
+ | **ad_account_id** | **String** | Meta ad account id, e.g. &#x60;act_123456789&#x60;. Required by this endpoint but ignored for OpenAI Ads. | |
8
8
  | **name** | **String** | | |
9
9
 
10
10
  ## Example
@@ -0,0 +1,20 @@
1
+ # Zernio::GetTrackingTag200Response
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **platform** | **String** | | [optional] |
8
+ | **tag** | [**TrackingTag**](TrackingTag.md) | | [optional] |
9
+
10
+ ## Example
11
+
12
+ ```ruby
13
+ require 'zernio-sdk'
14
+
15
+ instance = Zernio::GetTrackingTag200Response.new(
16
+ platform: null,
17
+ tag: null
18
+ )
19
+ ```
20
+
@@ -4,7 +4,7 @@
4
4
 
5
5
  | Name | Type | Description | Notes |
6
6
  | ---- | ---- | ----------- | ----- |
7
- | **id** | **String** | Destination identifier. Meta: pixel ID. Google: conversion action resource name. LinkedIn: numeric conversion rule ID. | [optional] |
7
+ | **id** | **String** | Destination identifier. Meta: pixel ID. Google: conversion action resource name. LinkedIn: numeric conversion rule ID. OpenAI Ads: pixel wire id. | [optional] |
8
8
  | **name** | **String** | | [optional] |
9
9
  | **type** | **String** | Present when the platform locks event type to the destination (Google conversion actions, LinkedIn conversion rules). | [optional] |
10
10
  | **status** | **String** | | [optional] |
@@ -8,7 +8,7 @@
8
8
  | **events_received** | **Integer** | Events accepted by the platform. | [optional] |
9
9
  | **events_failed** | **Integer** | Events rejected (see failures). | [optional] |
10
10
  | **failures** | [**Array&lt;SendConversions200ResponseFailuresInner&gt;**](SendConversions200ResponseFailuresInner.md) | | [optional] |
11
- | **trace_id** | **String** | Platform trace ID for debugging. fbtrace_id for Meta, requestId for Google. Absent for LinkedIn (LinkedIn&#39;s conversionEvents endpoint does not surface a trace ID). | [optional] |
11
+ | **trace_id** | **String** | Platform trace ID for debugging. fbtrace_id for Meta, requestId for Google. Absent for LinkedIn (LinkedIn&#39;s conversionEvents endpoint does not surface a trace ID) and OpenAI Ads (no trace ID surfaced). | [optional] |
12
12
 
13
13
  ## Example
14
14
 
@@ -4,10 +4,10 @@
4
4
 
5
5
  | Name | Type | Description | Notes |
6
6
  | ---- | ---- | ----------- | ----- |
7
- | **account_id** | **String** | SocialAccount ID (metaads, googleads, linkedinads, or tiktokads). | |
8
- | **destination_id** | **String** | Platform destination identifier. For Meta, the pixel/dataset ID. For Google, the conversion action resource name. For LinkedIn, the conversion rule ID or full &#x60;urn:lla:llaPartnerConversion:{id}&#x60; URN. | |
7
+ | **account_id** | **String** | SocialAccount ID (metaads, googleads, linkedinads, tiktokads, or openaiads). | |
8
+ | **destination_id** | **String** | Platform destination identifier. For Meta, the pixel/dataset ID. For Google, the conversion action resource name. For LinkedIn, the conversion rule ID or full &#x60;urn:lla:llaPartnerConversion:{id}&#x60; URN. For OpenAI Ads, the pixel wire id. | |
9
9
  | **events** | [**Array&lt;ConversionEvent&gt;**](ConversionEvent.md) | | |
10
- | **test_code** | **String** | Meta &#x60;test_event_code&#x60; passthrough. Ignored by Google and LinkedIn. | [optional] |
10
+ | **test_code** | **String** | Meta &#x60;test_event_code&#x60; passthrough. Ignored by Google, LinkedIn, and OpenAI Ads. | [optional] |
11
11
  | **consent** | [**SendConversionsRequestConsent**](SendConversionsRequestConsent.md) | | [optional] |
12
12
 
13
13
  ## Example
@@ -95,7 +95,7 @@ end
95
95
 
96
96
  Create a tracking tag
97
97
 
98
- Creates a Meta Pixel on the given ad account (`POST /act_{id}/adspixels` — `name` is the only input). Returns the created tag including its install `code`. The pixel is owned by the Business Manager that owns the ad account; a pixel created on a personal (non-BM) ad account ends up with `ownerBusinessId: null` and can't be shared with other ad accounts. Creating a pixel does NOT install it — install the returned `code` snippet on the site, or send events server-side via `POST /v1/ads/conversions`. The check `installed` is derived from `lastFiredTime`. NOT idempotent: each call creates a new pixel. Do not retry blindly on timeout. Meta only (platform `metaads`); other platforms return 405.
98
+ Meta: creates a Meta Pixel on the given ad account (`POST /act_{id}/adspixels` — `name` is the only input). Returns the created tag including its install `code`. The pixel is owned by the Business Manager that owns the ad account; a pixel created on a personal (non-BM) ad account ends up with `ownerBusinessId: null` and can't be shared with other ad accounts. Creating a Meta pixel does NOT install it — install the returned `code` snippet on the site, or send events server-side via `POST /v1/ads/conversions`. The check `installed` is derived from `lastFiredTime`. OpenAI Ads: creates an OpenAI pixel AND provisions a Conversions API key for it in the same call (`adAccountId` is required by this endpoint but ignored — one API key maps to exactly one ad account, so there's nothing to select). Returns 422 (`FEATURE_NOT_AVAILABLE`) if the ad account isn't enabled for pixel management; contact your OpenAI partner representative to enable it. There is no delete API for OpenAI pixels. If the pixel is created but the Conversions API key provisioning then fails, the pixel is left live on OpenAI (it cannot be cleaned up) and the error message names the surviving pixel id and warns against retrying, since a retry would create a second, orphaned pixel. NOT idempotent on either platform: each call creates a new pixel (and, for OpenAI, a new Conversions API key). Do not retry blindly on timeout. Meta (platform `metaads`) and OpenAI Ads (platform `openaiads`); other platforms return 405.
99
99
 
100
100
  ### Examples
101
101
 
@@ -109,7 +109,7 @@ Zernio.configure do |config|
109
109
  end
110
110
 
111
111
  api_instance = Zernio::TrackingTagsApi.new
112
- account_id = 'account_id_example' # String | Meta ads SocialAccount id (platform `metaads`).
112
+ account_id = 'account_id_example' # String | Ads SocialAccount id (platform `metaads` or `openaiads`).
113
113
  create_tracking_tag_request = Zernio::CreateTrackingTagRequest.new({ad_account_id: 'ad_account_id_example', name: 'name_example'}) # CreateTrackingTagRequest |
114
114
 
115
115
  begin
@@ -143,7 +143,7 @@ end
143
143
 
144
144
  | Name | Type | Description | Notes |
145
145
  | ---- | ---- | ----------- | ----- |
146
- | **account_id** | **String** | Meta ads SocialAccount id (platform &#x60;metaads&#x60;). | |
146
+ | **account_id** | **String** | Ads SocialAccount id (platform &#x60;metaads&#x60; or &#x60;openaiads&#x60;). | |
147
147
  | **create_tracking_tag_request** | [**CreateTrackingTagRequest**](CreateTrackingTagRequest.md) | | |
148
148
 
149
149
  ### Return type
@@ -231,11 +231,11 @@ end
231
231
 
232
232
  ## get_tracking_tag
233
233
 
234
- > <CreateTrackingTag201Response> get_tracking_tag(account_id, tag_id)
234
+ > <GetTrackingTag200Response> get_tracking_tag(account_id, tag_id)
235
235
 
236
236
  Get a tracking tag
237
237
 
238
- Returns the full tag record including the base-code `code` snippet, `lastFiredTime`, `ownerBusinessId`, `isUnavailable`, etc. Meta only (platform `metaads`); other platforms return 405.
238
+ Returns the full tag record including the base-code `code` snippet, `lastFiredTime`, `ownerBusinessId`, `isUnavailable`, etc. Meta only (platform `metaads`); other platforms return 405. OpenAI Ads has no get-by-id endpoint, so it 405s here too — use `GET /v1/accounts/{accountId}/tracking-tags` (list) instead.
239
239
 
240
240
  ### Examples
241
241
 
@@ -265,7 +265,7 @@ end
265
265
 
266
266
  This returns an Array which contains the response data, status code and headers.
267
267
 
268
- > <Array(<CreateTrackingTag201Response>, Integer, Hash)> get_tracking_tag_with_http_info(account_id, tag_id)
268
+ > <Array(<GetTrackingTag200Response>, Integer, Hash)> get_tracking_tag_with_http_info(account_id, tag_id)
269
269
 
270
270
  ```ruby
271
271
  begin
@@ -273,7 +273,7 @@ begin
273
273
  data, status_code, headers = api_instance.get_tracking_tag_with_http_info(account_id, tag_id)
274
274
  p status_code # => 2xx
275
275
  p headers # => { ... }
276
- p data # => <CreateTrackingTag201Response>
276
+ p data # => <GetTrackingTag200Response>
277
277
  rescue Zernio::ApiError => e
278
278
  puts "Error when calling TrackingTagsApi->get_tracking_tag_with_http_info: #{e}"
279
279
  end
@@ -288,7 +288,7 @@ end
288
288
 
289
289
  ### Return type
290
290
 
291
- [**CreateTrackingTag201Response**](CreateTrackingTag201Response.md)
291
+ [**GetTrackingTag200Response**](GetTrackingTag200Response.md)
292
292
 
293
293
  ### Authorization
294
294
 
@@ -456,7 +456,7 @@ end
456
456
 
457
457
  List tracking tags
458
458
 
459
- Returns the tracking tags (Meta Pixels) the connected ads account can see. Pass `?adAccountId=act_...` to scope the list to a single ad account; omit it to list every pixel reachable by the token (the name is then suffixed with the ad account it was discovered on, for disambiguation). The list view omits `code` — call `getTrackingTag` for the install snippet and full detail. Meta only today (platform `metaads`); other platforms return 405. The `accountId` must be the Meta *ads* SocialAccount created by the Ads add-on connect flow, not a Facebook/Instagram posting account. Get your `act_...` ids from `GET /v1/ads/accounts`.
459
+ Returns the tracking tags (Meta Pixels, or OpenAI Ads pixels) the connected ads account can see. Pass `?adAccountId=act_...` (Meta only) to scope the list to a single ad account; omit it to list every pixel reachable by the token (the name is then suffixed with the ad account it was discovered on, for disambiguation). The list view omits `code` — call `getTrackingTag` for the install snippet and full detail (Meta only; OpenAI Ads has no get-by-id endpoint). Meta (platform `metaads`) and OpenAI Ads (platform `openaiads`); other platforms return 405. The `accountId` must be the ads SocialAccount created by the Ads add-on connect flow (Meta) or the OpenAI Ads connect flow, not a Facebook/Instagram posting account. Get your Meta `act_...` ids from `GET /v1/ads/accounts`; `adAccountId` is ignored for OpenAI Ads (one API key maps to exactly one ad account).
460
460
 
461
461
  ### Examples
462
462
 
@@ -470,9 +470,9 @@ Zernio.configure do |config|
470
470
  end
471
471
 
472
472
  api_instance = Zernio::TrackingTagsApi.new
473
- account_id = 'account_id_example' # String | Meta ads SocialAccount id (platform `metaads`).
473
+ account_id = 'account_id_example' # String | Ads SocialAccount id (platform `metaads` or `openaiads`).
474
474
  opts = {
475
- ad_account_id: 'ad_account_id_example' # String | Optional. Scope to one ad account, e.g. `act_123456789`.
475
+ ad_account_id: 'ad_account_id_example' # String | Optional, Meta only. Scope to one ad account, e.g. `act_123456789`. Ignored for OpenAI Ads.
476
476
  }
477
477
 
478
478
  begin
@@ -506,8 +506,8 @@ end
506
506
 
507
507
  | Name | Type | Description | Notes |
508
508
  | ---- | ---- | ----------- | ----- |
509
- | **account_id** | **String** | Meta ads SocialAccount id (platform &#x60;metaads&#x60;). | |
510
- | **ad_account_id** | **String** | Optional. Scope to one ad account, e.g. &#x60;act_123456789&#x60;. | [optional] |
509
+ | **account_id** | **String** | Ads SocialAccount id (platform &#x60;metaads&#x60; or &#x60;openaiads&#x60;). | |
510
+ | **ad_account_id** | **String** | Optional, Meta only. Scope to one ad account, e.g. &#x60;act_123456789&#x60;. Ignored for OpenAI Ads. | [optional] |
511
511
 
512
512
  ### Return type
513
513
 
@@ -669,7 +669,7 @@ nil (empty response body)
669
669
 
670
670
  ## update_tracking_tag
671
671
 
672
- > <CreateTrackingTag201Response> update_tracking_tag(account_id, tag_id, update_tracking_tag_request)
672
+ > <GetTrackingTag200Response> update_tracking_tag(account_id, tag_id, update_tracking_tag_request)
673
673
 
674
674
  Update a tracking tag
675
675
 
@@ -704,7 +704,7 @@ end
704
704
 
705
705
  This returns an Array which contains the response data, status code and headers.
706
706
 
707
- > <Array(<CreateTrackingTag201Response>, Integer, Hash)> update_tracking_tag_with_http_info(account_id, tag_id, update_tracking_tag_request)
707
+ > <Array(<GetTrackingTag200Response>, Integer, Hash)> update_tracking_tag_with_http_info(account_id, tag_id, update_tracking_tag_request)
708
708
 
709
709
  ```ruby
710
710
  begin
@@ -712,7 +712,7 @@ begin
712
712
  data, status_code, headers = api_instance.update_tracking_tag_with_http_info(account_id, tag_id, update_tracking_tag_request)
713
713
  p status_code # => 2xx
714
714
  p headers # => { ... }
715
- p data # => <CreateTrackingTag201Response>
715
+ p data # => <GetTrackingTag200Response>
716
716
  rescue Zernio::ApiError => e
717
717
  puts "Error when calling TrackingTagsApi->update_tracking_tag_with_http_info: #{e}"
718
718
  end
@@ -728,7 +728,7 @@ end
728
728
 
729
729
  ### Return type
730
730
 
731
- [**CreateTrackingTag201Response**](CreateTrackingTag201Response.md)
731
+ [**GetTrackingTag200Response**](GetTrackingTag200Response.md)
732
732
 
733
733
  ### Authorization
734
734