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.
- checksums.yaml +4 -4
- data/README.md +5 -1
- data/docs/AdCampaignsApi.md +3 -3
- data/docs/BoostPostRequestTracking.md +1 -1
- data/docs/{CreateLeadFormRequestQuestionsInnerOptionsInner.md → BoostPostRequestTrackingUrlTagsInner.md} +2 -2
- data/docs/ConnectApi.md +70 -0
- data/docs/ConnectOpenAIAdsCredentials200Response.md +22 -0
- data/docs/ConnectOpenAIAdsCredentialsRequest.md +24 -0
- data/docs/ConversionEvent.md +1 -1
- data/docs/ConversionsApi.md +5 -5
- data/docs/CreateLeadFormRequestQuestionsInner.md +1 -1
- data/docs/CreateStandaloneAdRequest.md +8 -8
- data/docs/CreateTrackingTagRequest.md +1 -1
- data/docs/GetTrackingTag200Response.md +20 -0
- data/docs/ListConversionDestinations200ResponseDestinationsInner.md +1 -1
- data/docs/SendConversions200Response.md +1 -1
- data/docs/SendConversionsRequest.md +3 -3
- data/docs/TrackingTagsApi.md +17 -17
- data/docs/UpdateAdRequestBudget.md +1 -1
- data/lib/zernio-sdk/api/ad_campaigns_api.rb +10 -10
- data/lib/zernio-sdk/api/connect_api.rb +68 -0
- data/lib/zernio-sdk/api/conversions_api.rb +8 -8
- data/lib/zernio-sdk/api/tracking_tags_api.rb +18 -18
- data/lib/zernio-sdk/models/account_with_follower_stats.rb +2 -2
- data/lib/zernio-sdk/models/ad.rb +2 -2
- data/lib/zernio-sdk/models/ad_campaign.rb +2 -2
- data/lib/zernio-sdk/models/ad_tree_campaign.rb +2 -2
- data/lib/zernio-sdk/models/boost_post_request_tracking.rb +5 -2
- data/lib/zernio-sdk/models/{create_lead_form_request_questions_inner_options_inner.rb → boost_post_request_tracking_url_tags_inner.rb} +3 -3
- data/lib/zernio-sdk/models/bulk_update_ad_campaign_status_request_campaigns_inner.rb +2 -2
- data/lib/zernio-sdk/models/connect_open_ai_ads_credentials200_response.rb +165 -0
- data/lib/zernio-sdk/models/connect_open_ai_ads_credentials_request.rb +212 -0
- data/lib/zernio-sdk/models/conversion_event.rb +1 -1
- data/lib/zernio-sdk/models/create_lead_form_request_questions_inner.rb +1 -1
- data/lib/zernio-sdk/models/create_standalone_ad_request.rb +8 -8
- data/lib/zernio-sdk/models/create_tracking_tag201_response.rb +2 -2
- data/lib/zernio-sdk/models/create_tracking_tag_request.rb +1 -1
- data/lib/zernio-sdk/models/get_tracking_tag200_response.rb +190 -0
- data/lib/zernio-sdk/models/list_conversion_destinations200_response.rb +2 -2
- data/lib/zernio-sdk/models/list_conversion_destinations200_response_destinations_inner.rb +1 -1
- data/lib/zernio-sdk/models/list_tracking_tags200_response.rb +2 -2
- data/lib/zernio-sdk/models/send_conversions200_response.rb +3 -3
- data/lib/zernio-sdk/models/send_conversions_request.rb +3 -3
- data/lib/zernio-sdk/models/social_account.rb +2 -2
- data/lib/zernio-sdk/models/update_ad_campaign_status_request.rb +2 -2
- data/lib/zernio-sdk/models/update_ad_request_budget.rb +1 -0
- data/lib/zernio-sdk/models/update_ad_set_request.rb +2 -2
- data/lib/zernio-sdk/version.rb +1 -1
- data/lib/zernio-sdk.rb +4 -1
- data/openapi.yaml +173 -66
- data/spec/api/ad_campaigns_api_spec.rb +3 -3
- data/spec/api/connect_api_spec.rb +12 -0
- data/spec/api/conversions_api_spec.rb +4 -4
- data/spec/api/tracking_tags_api_spec.rb +8 -8
- data/spec/models/account_with_follower_stats_spec.rb +1 -1
- data/spec/models/ad_campaign_spec.rb +1 -1
- data/spec/models/ad_spec.rb +1 -1
- data/spec/models/ad_tree_campaign_spec.rb +1 -1
- data/spec/models/{create_lead_form_request_questions_inner_options_inner_spec.rb → boost_post_request_tracking_url_tags_inner_spec.rb} +6 -6
- data/spec/models/bulk_update_ad_campaign_status_request_campaigns_inner_spec.rb +1 -1
- data/spec/models/connect_open_ai_ads_credentials200_response_spec.rb +48 -0
- data/spec/models/connect_open_ai_ads_credentials_request_spec.rb +54 -0
- data/spec/models/create_tracking_tag201_response_spec.rb +1 -1
- data/spec/models/get_tracking_tag200_response_spec.rb +46 -0
- data/spec/models/list_conversion_destinations200_response_spec.rb +1 -1
- data/spec/models/list_tracking_tags200_response_spec.rb +1 -1
- data/spec/models/send_conversions200_response_spec.rb +1 -1
- data/spec/models/social_account_spec.rb +1 -1
- data/spec/models/update_ad_campaign_status_request_spec.rb +1 -1
- data/spec/models/update_ad_set_request_spec.rb +1 -1
- metadata +17 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2cb0f3bc4604dcf8646e158f9466a1acf7d5890cd902469ab2f19b2784eb70a4
|
|
4
|
+
data.tar.gz: db93724947c7625d852a01d3626dd31c124211a62e604fac3e0ca3562c8b3579
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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)
|
data/docs/AdCampaignsApi.md
CHANGED
|
@@ -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
|
|
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
|
|
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** | **
|
|
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::
|
|
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::
|
|
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'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
|
+
|
data/docs/ConversionEvent.md
CHANGED
|
@@ -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's built-ins. - Google: ignored — the conversion action's category determines the type. - LinkedIn: ignored — the conversion rule's `type` 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's built-ins. - Google: ignored — the conversion action's category determines the type. - LinkedIn: ignored — the conversion rule's `type` 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'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] |
|
data/docs/ConversionsApi.md
CHANGED
|
@@ -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
|
|
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),
|
|
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
|
|
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
|
|
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<
|
|
10
|
+
| **options** | [**Array<BoostPostRequestTrackingUrlTagsInner>**](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 `<name> - Ad Set`. (For per-ad names on the multi-creative shape, set `name` on each `creatives[]` entry.) | [optional] |
|
|
12
12
|
| **ad_name** | **String** | Meta only. Exact ad name (the single-creative ad object's name). Overrides the default, which is `name`. (For per-ad names on the multi-creative shape, set `name` on each `creatives[]` 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** - `conversions`: OUTCOME_SALES. Requires `promotedObject.pixelId` and `promotedObject.customEventType` with a commerce event such as PURCHASE or START_TRIAL. - `lead_conversion`: 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 `conversions`. - `lead_generation`: OUTCOME_LEADS with instant forms. Requires `leadGenFormId`. `promotedObject.pageId` is optional and auto-filled from the connected Page. - `app_promotion`: requires `promotedObject.applicationId` and `promotedObject.objectStoreUrl`. - `catalog_sales`: Advantage+ catalog ads, for example vehicle inventory. Requires `promotedObject.productSetId`, `promotedObject.pixelId` and `promotedObject.customEventType`. 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** - `conversions`: website-conversion ad group. Requires `promotedObject.pixelId`, your TikTok Pixel ID. Accepts an optional `promotedObject.customEventType` 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 `adSetId` instead. **LinkedIn** - `engagement`, `traffic`, `awareness` and `video_views` create standalone Direct Sponsored Content ads. `traffic` requires `linkUrl`; `video_views` requires `video`. - `job_applicants` requires a `platformSpecificData.jobs` creative. - For `lead_generation` or `conversions` 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** - `conversions`: OUTCOME_SALES. Requires `promotedObject.pixelId` and `promotedObject.customEventType` with a commerce event such as PURCHASE or START_TRIAL. - `lead_conversion`: 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 `conversions`. - `lead_generation`: OUTCOME_LEADS with instant forms. Requires `leadGenFormId`. `promotedObject.pageId` is optional and auto-filled from the connected Page. - `app_promotion`: requires `promotedObject.applicationId` and `promotedObject.objectStoreUrl`. - `catalog_sales`: Advantage+ catalog ads, for example vehicle inventory. Requires `promotedObject.productSetId`, `promotedObject.pixelId` and `promotedObject.customEventType`. 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** - `conversions`: website-conversion ad group. Requires `promotedObject.pixelId`, your TikTok Pixel ID. Accepts an optional `promotedObject.customEventType` 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 `adSetId` instead. **LinkedIn** - `engagement`, `traffic`, `awareness` and `video_views` create standalone Direct Sponsored Content ads. `traffic` requires `linkUrl`; `video_views` requires `video`. - `job_applicants` requires a `platformSpecificData.jobs` creative. - For `lead_generation` or `conversions` on LinkedIn, or to promote an existing post, use POST /v1/ads/boost. **OpenAI Ads** - Only `traffic`, `awareness`, and `conversions` are supported (other goals return 400). Maps to OpenAI's `bidding_type` (clicks, impressions, conversions respectively). `conversions` requires an active conversion event setting on the account; create a tracking tag with `defaultEventType` via the tracking-tags API (`POST /v1/accounts/{accountId}/tracking-tags`), 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 `optimization_goal` (e.g. `LANDING_PAGE_VIEWS`, `LINK_CLICKS`, `REACH`, `IMPRESSIONS`, `OFFSITE_CONVERSIONS`, `THRUPLAY`, `LEAD_GENERATION`). Overrides the default derived from `goal` (e.g. `traffic` defaults to `LINK_CLICKS`). 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 `billing_event`. Defaults to `IMPRESSIONS`. Forwarded verbatim to Meta, which validates compatibility with the optimization goal. | [optional] |
|
|
17
17
|
| **buying_type** | **String** | Meta only. RESERVED = Reach & Frequency: requires `rfPredictionId` (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&F ad set runs on (reserving mints a new id — pass that one). Requires buyingType RESERVED. | [optional] |
|
|
19
19
|
| **creative_features** | **Hash<String, String>** | 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'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 `endDate` 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 > ad group > ad hierarchy stays paused. | [optional] |
|
|
24
24
|
| **budget_level** | **String** | Meta only. Where the budget lives, which selects the Meta budget model: - `adset` (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. - `campaign`: CBO (Campaign Budget Optimization / Advantage Campaign Budget). The budget AND `bidStrategy` 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 (`adSetId`), which inherits the existing budget. | [optional][default to 'adset'] |
|
|
25
25
|
| **currency** | **String** | | [optional] |
|
|
26
|
-
| **headline** | **String** | Required for Meta, Google, Pinterest, and
|
|
26
|
+
| **headline** | **String** | Required for Meta, Google, Pinterest, LinkedIn, and OpenAI Ads on legacy + attach shapes (skip for multi-creative — use `creatives[].headline`). Ignored for TikTok and X/Twitter. Max: Meta=255, Google=30, Pinterest=100, LinkedIn=400, OpenAI=50 (min 3). On LinkedIn this is the ad's headline (the bold text on the creative); for traffic ads it's the link card title. On OpenAI Ads this is the chat card's title. | [optional] |
|
|
27
27
|
| **long_headline** | **String** | Google Display only — defaults to `headline` 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 `linkUrl` is set). On LinkedIn this is the post commentary (the intro text shown above the ad). Max: Google=90, Pinterest=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 `linkUrl` is set). On LinkedIn this is the post commentary (the intro text shown above the ad). On OpenAI Ads this is the chat card's body text. Max: Google=90, Pinterest=500, OpenAI=100. | [optional] |
|
|
29
29
|
| **description** | **String** | Meta only (facebook/instagram). Link description — the secondary text shown below the headline (Meta's link_data.description; on video creatives mapped to video_data.link_description). When omitted, Meta auto-pulls the destination URL'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's `call_to_action`) and on LinkedIn (the CTA button on the ad; defaults to LEARN_MORE when `linkUrl` 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's the ad's destination URL; required for `traffic` ads, optional for `engagement` / `awareness`. NOT required when `goal` is `lead_generation` (the ad opens a Lead Gen form instead of a destination). On LinkedIn, `imageUrl` + `linkUrl` publishes an ARTICLE-content creative; this is LinkedIn's article ad format, with the image as thumbnail and `longHeadline` as description. | [optional] |
|
|
31
|
+
| **link_url** | **String** | Required on legacy + attach shapes (skip for multi-creative). On LinkedIn it's the ad's destination URL; required for `traffic` ads, optional for `engagement` / `awareness`. NOT required when `goal` is `lead_generation` (the ad opens a Lead Gen form instead of a destination). On LinkedIn, `imageUrl` + `linkUrl` publishes an ARTICLE-content creative; this is LinkedIn's article ad format, with the image as thumbnail and `longHeadline` as description. Required for OpenAI Ads (the chat card'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's creative — create one via POST /v1/ads/lead-forms. REQUIRED when `goal` is `lead_generation`, and on every ATTACH (`adSetId`) 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's promoted_object.page_id + LEAD_GENERATION optimization + destination_type ON_AD are derived automatically from the goal. Both `placementAssets` (per-placement creative) and `dynamicCreative` (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 `dynamicCreative` 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 `imageUrls` entry plus your text variations to get Meta's \"Multiple Text Options\" behavior on a lead ad. | [optional] |
|
|
33
|
-
| **image_url** | **String** | Image creative for Meta/Google/Pinterest/LinkedIn on legacy + attach shapes (mutually exclusive with `video`). Required for LinkedIn ads unless `video` 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 `imageUrl` name for cross-platform consistency). Ignored for X/Twitter. For Google Display, treated as the landscape image (alias of `images.landscape`); supply `images.square` alongside or the request is rejected. For LinkedIn the image is uploaded to LinkedIn under the authoring Company Page (see `organizationId`); 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 `video`). Required for LinkedIn ads unless `video` 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 `imageUrl` name for cross-platform consistency). Ignored for X/Twitter. For Google Display, treated as the landscape image (alias of `images.landscape`); supply `images.square` alongside or the request is rejected. For LinkedIn the image is uploaded to LinkedIn under the authoring Company Page (see `organizationId`); recommended ratio 1.91:1 (e.g. 1200×627). Required for OpenAI Ads (uploaded as the chat card'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<CreateStandaloneAdRequestCreativesInner>**](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 `headline` / `body` / `imageUrl` / `linkUrl` / `callToAction` are ignored in this mode. Mutually exclusive with `adSetId`. | [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 (\"dark\") post backing the ad — accepts a numeric organization ID or a full `urn:li:organization:N` URN. Required unless the resolved `accountId` is a connected LinkedIn Company-Page account (defaults to that page) or the LinkedIn ad account is org-owned (defaults to the account'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 `POST /v1/ads/boost`, `POST /v1/ads/targeting/reach-estimate`, and `saved_targeting` audiences. Merged UNDER the flat inline targeting fields below: `savedTargetingId` < `targeting` < 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<String>** | ISO 3166-1 alpha-2 country codes (e.g. ['NL']). Defaults to ['US'] when no other geo targeting (flat or nested `targeting`) is provided. (LinkedIn currently
|
|
44
|
+
| **countries** | **Array<String>** | ISO 3166-1 alpha-2 country codes (e.g. ['NL']). Defaults to ['US'] when no other geo targeting (flat or nested `targeting`) 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<CreateStandaloneAdRequestCitiesInner>**](CreateStandaloneAdRequestCitiesInner.md) | City-level geo targeting (Meta and TikTok). Each city is targeted by the platform's opaque `key` (the city ID) which can be looked up via `GET /v1/ads/targeting/search?dimension=geo&q=<name>&countryCode=<ISO>`. Optional `radius` + `distance_unit` (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 `countries` (Meta returns a \"locations overlap\" error). Either drop the country or scope it to a different country. On TikTok, keys are numeric location ids and can be sent without `countries`. | [optional] |
|
|
46
46
|
| **regions** | [**Array<CreateStandaloneAdRequestRegionsInner>**](CreateStandaloneAdRequestRegionsInner.md) | Region-level (state/province) geo targeting (Meta and TikTok). Each region is targeted by the platform's opaque `key` (the region ID) which can be looked up via `GET /v1/ads/targeting/search?dimension=geo&q=<name>&countryCode=<ISO>`. | [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. `act_123456789`. | |
|
|
7
|
+
| **ad_account_id** | **String** | Meta ad account id, e.g. `act_123456789`. 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<SendConversions200ResponseFailuresInner>**](SendConversions200ResponseFailuresInner.md) | | [optional] |
|
|
11
|
-
| **trace_id** | **String** | Platform trace ID for debugging. fbtrace_id for Meta, requestId for Google. Absent for LinkedIn (LinkedIn'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'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
|
|
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 `urn:lla:llaPartnerConversion:{id}` 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 `urn:lla:llaPartnerConversion:{id}` URN. For OpenAI Ads, the pixel wire id. | |
|
|
9
9
|
| **events** | [**Array<ConversionEvent>**](ConversionEvent.md) | | |
|
|
10
|
-
| **test_code** | **String** | Meta `test_event_code` passthrough. Ignored by Google and
|
|
10
|
+
| **test_code** | **String** | Meta `test_event_code` passthrough. Ignored by Google, LinkedIn, and OpenAI Ads. | [optional] |
|
|
11
11
|
| **consent** | [**SendConversionsRequestConsent**](SendConversionsRequestConsent.md) | | [optional] |
|
|
12
12
|
|
|
13
13
|
## Example
|
data/docs/TrackingTagsApi.md
CHANGED
|
@@ -95,7 +95,7 @@ end
|
|
|
95
95
|
|
|
96
96
|
Create a tracking tag
|
|
97
97
|
|
|
98
|
-
|
|
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 |
|
|
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** |
|
|
146
|
+
| **account_id** | **String** | Ads SocialAccount id (platform `metaads` or `openaiads`). | |
|
|
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
|
-
> <
|
|
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(<
|
|
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 # => <
|
|
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
|
-
[**
|
|
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
|
|
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 |
|
|
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** |
|
|
510
|
-
| **ad_account_id** | **String** | Optional. Scope to one ad account, e.g. `act_123456789`. | [optional] |
|
|
509
|
+
| **account_id** | **String** | Ads SocialAccount id (platform `metaads` or `openaiads`). | |
|
|
510
|
+
| **ad_account_id** | **String** | Optional, Meta only. Scope to one ad account, e.g. `act_123456789`. 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
|
-
> <
|
|
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(<
|
|
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 # => <
|
|
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
|
-
[**
|
|
731
|
+
[**GetTrackingTag200Response**](GetTrackingTag200Response.md)
|
|
732
732
|
|
|
733
733
|
### Authorization
|
|
734
734
|
|