zernio-sdk 0.0.708 → 0.0.710
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 +1 -0
- data/docs/AdCampaignsApi.md +1 -1
- data/docs/CreateAdCampaignRequest.md +1 -1
- data/docs/CreateStandaloneAdRequest.md +3 -3
- data/docs/CreateStandaloneAdRequestPlatformSpecificData.md +49 -0
- data/docs/ListBroadcastRecipients200ResponseRecipientsInner.md +2 -0
- data/docs/MetaAdsPlatformData.md +2 -2
- data/docs/UpdateAdSetRequest.md +1 -1
- data/lib/zernio-sdk/api/ad_campaigns_api.rb +2 -2
- data/lib/zernio-sdk/models/create_ad_campaign_request.rb +1 -1
- data/lib/zernio-sdk/models/create_standalone_ad_request.rb +3 -3
- data/lib/zernio-sdk/models/create_standalone_ad_request_platform_specific_data.rb +105 -0
- data/lib/zernio-sdk/models/list_broadcast_recipients200_response_recipients_inner.rb +12 -1
- data/lib/zernio-sdk/models/meta_ads_platform_data.rb +2 -2
- data/lib/zernio-sdk/models/update_ad_set_request.rb +1 -1
- data/lib/zernio-sdk/version.rb +1 -1
- data/lib/zernio-sdk.rb +1 -0
- data/openapi.yaml +27 -8
- data/spec/api/ad_campaigns_api_spec.rb +1 -1
- data/spec/models/create_standalone_ad_request_platform_specific_data_spec.rb +32 -0
- data/spec/models/list_broadcast_recipients200_response_recipients_inner_spec.rb +6 -0
- metadata +5 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ac0c5d749398adc2d2a07de2e615d7270ba45fc4d297177d8dd2602a23efeadc
|
|
4
|
+
data.tar.gz: 29af766784ac4a5ef6b95cbf633b5104192ec3cbf16d02fbfe95d70dba967bbb
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6c061ff74bd0951b5110437a7361c2821ae7b8e951f396ae84ff8f757631c3090b4ee964352437f5316cb296926a2a3738a9b55fe0ca1e310ac8d72887dd739d
|
|
7
|
+
data.tar.gz: 74b4f25be2b199dfff8c2b12f81f861a3eda32a4319605b4fb661a12b0537cecffc4e3bbf5ee5b74f36b5ca0d4a19cda9abb2ef86dfdbfb66d50b693e01eb794
|
data/README.md
CHANGED
|
@@ -888,6 +888,7 @@ Class | Method | HTTP request | Description
|
|
|
888
888
|
- [Zernio::CreateStandaloneAdRequestPlacementAssetsRulesInner](docs/CreateStandaloneAdRequestPlacementAssetsRulesInner.md)
|
|
889
889
|
- [Zernio::CreateStandaloneAdRequestPlacementAssetsRulesInnerPlacements](docs/CreateStandaloneAdRequestPlacementAssetsRulesInnerPlacements.md)
|
|
890
890
|
- [Zernio::CreateStandaloneAdRequestPlacements](docs/CreateStandaloneAdRequestPlacements.md)
|
|
891
|
+
- [Zernio::CreateStandaloneAdRequestPlatformSpecificData](docs/CreateStandaloneAdRequestPlatformSpecificData.md)
|
|
891
892
|
- [Zernio::CreateStandaloneAdRequestPromotedObject](docs/CreateStandaloneAdRequestPromotedObject.md)
|
|
892
893
|
- [Zernio::CreateStandaloneAdRequestRegionsInner](docs/CreateStandaloneAdRequestRegionsInner.md)
|
|
893
894
|
- [Zernio::CreateStandaloneAdRequestTracking](docs/CreateStandaloneAdRequestTracking.md)
|
data/docs/AdCampaignsApi.md
CHANGED
|
@@ -1501,7 +1501,7 @@ end
|
|
|
1501
1501
|
|
|
1502
1502
|
Update an ad set
|
|
1503
1503
|
|
|
1504
|
-
Ad-set-level writes. Use this for ABO budget updates, ad-set-scoped pause/resume, bid-strategy edits, Meta value-rule-set attach/detach, and Meta-only post-launch delivery settings via `platformSpecificData`. At least one updatable field is required. Value rule sets (Meta only, see `/v1/ads/value-rule-sets`): - ATTACH or REPLACE: send `valueRuleSetId`. Attachment is driven by the id's presence, so `valueRulesApplied: true` is optional. Sending a different id replaces the previous association; there is no separate replace call. - DETACH: send `valueRulesApplied: false` and OMIT `valueRuleSetId`. - Sending `valueRulesApplied: false` TOGETHER with `valueRuleSetId` returns 400 `mutually_exclusive_fields`. This is deliberate: Meta attaches the rule set whenever `value_rule_set_id` is present, even with `value_rules_applied` false, so echoing stored state while asking to detach would silently keep the bid adjustments live. - Eligibility: only ad sets on `LOWEST_COST_WITHOUT_CAP` or `COST_CAP`. Meta rejects the rest server-side. - Read back with `GET /v1/ads/ad-sets/{adSetId}?fields=value_rule_set_id`. Meta does not document `value_rules_applied` as a readable ad-set field, so the boolean cannot be read back. Bid strategy compatibility (per Meta's spec): - `LOWEST_COST_WITHOUT_CAP`: no `bidAmount`, no `roasAverageFloor`. - `LOWEST_COST_WITH_BID_CAP` / `COST_CAP`: `bidAmount` REQUIRED (whole currency units). - `LOWEST_COST_WITH_MIN_ROAS`: `roasAverageFloor` REQUIRED (decimal multiplier, e.g. 2.0 = 2.0x ROAS). Delivery settings are validated by Meta against the campaign objective; incompatible combinations (e.g. a billingEvent the optimization goal doesn't allow) surface as 400s from Meta. When updating `budget` on an ABO campaign: if the parent campaign is CBO, the response is 409 with code BUDGET_LEVEL_MISMATCH — route to PUT /v1/ads/campaigns/{campaignId} instead.
|
|
1504
|
+
Ad-set-level writes. Use this for ABO budget updates, ad-set-scoped pause/resume, bid-strategy edits, Meta value-rule-set attach/detach, and Meta-only post-launch delivery settings via `platformSpecificData`. At least one updatable field is required. Value rule sets (Meta only, see `/v1/ads/value-rule-sets`): - ATTACH or REPLACE: send `valueRuleSetId`. Attachment is driven by the id's presence, so `valueRulesApplied: true` is optional. Sending a different id replaces the previous association; there is no separate replace call. - DETACH: send `valueRulesApplied: false` and OMIT `valueRuleSetId`. - Sending `valueRulesApplied: false` TOGETHER with `valueRuleSetId` returns 400 `mutually_exclusive_fields`. This is deliberate: Meta attaches the rule set whenever `value_rule_set_id` is present, even with `value_rules_applied` false, so echoing stored state while asking to detach would silently keep the bid adjustments live. - Eligibility: only ad sets on `LOWEST_COST_WITHOUT_CAP` or `COST_CAP`. Meta rejects the rest server-side. - Read back with `GET /v1/ads/ad-sets/{adSetId}?fields=value_rule_set_id`. Meta does not document `value_rules_applied` as a readable ad-set field, so the boolean cannot be read back. Bid strategy compatibility (per Meta's spec): - `LOWEST_COST_WITHOUT_CAP`: no `bidAmount`, no `roasAverageFloor`. - `LOWEST_COST_WITH_BID_CAP` / `COST_CAP`: `bidAmount` REQUIRED (whole currency units). - `LOWEST_COST_WITH_MIN_ROAS`: `roasAverageFloor` REQUIRED (decimal multiplier, e.g. 2.0 = 2.0x ROAS). - Meta only: send `bidAmount` WITHOUT `bidStrategy` to change the cap amount on an ad set under a COST_CAP / LOWEST_COST_WITH_BID_CAP parent campaign, leaving the strategy itself (inherited from the campaign) untouched. `roasAverageFloor` without `bidStrategy` is rejected (it has no meaning outside LOWEST_COST_WITH_MIN_ROAS). Delivery settings are validated by Meta against the campaign objective; incompatible combinations (e.g. a billingEvent the optimization goal doesn't allow) surface as 400s from Meta. When updating `budget` on an ABO campaign: if the parent campaign is CBO, the response is 409 with code BUDGET_LEVEL_MISMATCH — route to PUT /v1/ads/campaigns/{campaignId} instead.
|
|
1505
1505
|
|
|
1506
1506
|
### Examples
|
|
1507
1507
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
| **budget_type** | **String** | | [optional] |
|
|
14
14
|
| **status** | **String** | | [optional][default to 'PAUSED'] |
|
|
15
15
|
| **bid_strategy** | **String** | Campaign bid strategy. Meta stores `bid_strategy` alongside the budget, so this REQUIRES `budgetAmount` + `budgetType` on the same request; sending it without a campaign budget is a 400. A campaign carrying a strategy without its `bid_amount` makes every ad set created under it fail with an error that names the ad set (code 100, subcode 1815857), so the bad state is rejected up front rather than accepted. To bid at ad-set level, set the strategy there instead. | [optional] |
|
|
16
|
-
| **bid_amount** | **Float** | Whole currency units (USD: 5 = $5.00). Required for LOWEST_COST_WITH_BID_CAP and COST_CAP; ignored otherwise. | [optional] |
|
|
16
|
+
| **bid_amount** | **Float** | Whole currency units (USD: 5 = $5.00). Required for LOWEST_COST_WITH_BID_CAP and COST_CAP; ignored otherwise. Validated here but NOT stored by Meta: the campaign object has no bid_amount field, only bid_strategy lives on it. The amount takes effect once an ad set joins this campaign (existingCampaignId on POST /v1/ads/create) and supplies its own bidAmount there. | [optional] |
|
|
17
17
|
| **roas_average_floor** | **Float** | Decimal ROAS multiplier (2.0 = 2.0x). Required for LOWEST_COST_WITH_MIN_ROAS. | [optional] |
|
|
18
18
|
|
|
19
19
|
## Example
|
|
@@ -76,11 +76,11 @@
|
|
|
76
76
|
| **attribution_spec** | [**Array<CreateStandaloneAdRequestAttributionSpecInner>**](CreateStandaloneAdRequestAttributionSpecInner.md) | Meta only. Conversion attribution window for the ad set — maps 1:1 to Meta's ad-set `attribution_spec`. Only honored for conversion goals (`conversions`, `lead_generation`, `app_promotion`); ignored for awareness/traffic/engagement. Omit to use Meta's default (`7-day click` + `1-day view`). Meta enforces the valid combinations: `VIEW_THROUGH` only allows `windowDays: 1` (7d/28d view windows were removed Jan 2026); `ENGAGED_VIDEO_VIEW` only `1` and only alongside `VIEW_THROUGH: 1`; `CLICK_THROUGH: 28` only on certain objectives. Invalid combos surface as a Meta 400. Example: `[{ \"eventType\": \"CLICK_THROUGH\", \"windowDays\": 7 }, { \"eventType\": \"VIEW_THROUGH\", \"windowDays\": 1 }]` | [optional] |
|
|
77
77
|
| **gender** | **String** | Restrict the audience by gender. 'male' targets men only, 'female' targets women only, 'all' (default) targets everyone. Applied on Meta, TikTok and Pinterest. Ignored on Google, LinkedIn and X. | [optional][default to 'all'] |
|
|
78
78
|
| **bid_strategy** | [**BidStrategy**](BidStrategy.md) | Deprecated: send it inside `platformSpecificData` instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400. Meta bid strategy applied to the ad set. | [optional] |
|
|
79
|
-
| **bid_amount** | **Float** | Deprecated: send it inside `platformSpecificData` instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400. Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when `bidStrategy` is `LOWEST_COST_WITH_BID_CAP` or `COST_CAP`. | [optional] |
|
|
80
|
-
| **roas_average_floor** | **Float** | Deprecated: send it inside `platformSpecificData` instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400. Minimum ROAS as a decimal multiplier (e.g. 2.0 = 2.0x ROAS). Required when `bidStrategy` is `LOWEST_COST_WITH_MIN_ROAS`. Sent to Meta as `bid_constraints.roas_average_floor` × 10000. | [optional] |
|
|
79
|
+
| **bid_amount** | **Float** | Deprecated: send it inside `platformSpecificData` instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400. Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when `bidStrategy` is `LOWEST_COST_WITH_BID_CAP` or `COST_CAP`. Meta only: sending `bidAmount` WITHOUT `bidStrategy` requires `existingCampaignId` (400 otherwise), and sets the new ad set's cap under the joined campaign's COST_CAP / LOWEST_COST_WITH_BID_CAP parent. The strategy itself is inherited from the campaign. Restating bidStrategy here is accepted but has no effect on the ad set. Rejected with 400 in `adSetId` attach mode: that shape inherits its cap from the platform. Use `PUT /v1/ads/ad-sets/{adSetId}` there instead. | [optional] |
|
|
80
|
+
| **roas_average_floor** | **Float** | Deprecated: send it inside `platformSpecificData` instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400. Minimum ROAS as a decimal multiplier (e.g. 2.0 = 2.0x ROAS). Required when `bidStrategy` is `LOWEST_COST_WITH_MIN_ROAS`. Sending it without `bidStrategy` is a 400. Sent to Meta as `bid_constraints.roas_average_floor` × 10000. Known gap: a CBO campaign's ROAS floor lives on the campaign only (set via `POST /v1/ads/campaigns`); there is no supported way to set it while joining a CBO campaign here. | [optional] |
|
|
81
81
|
| **value_rule_set_id** | **String** | Meta only (facebook, instagram; other platforms return 400). Value rule set to attach to the new ad set, from `/v1/ads/value-rule-sets`. Attachment is driven by this id, so `valueRulesApplied` is optional alongside it. Rejected with 400 in `adSetId` attach mode: that shape inherits the existing ad set's attachment, so the field would be silently ignored. Use `PUT /v1/ads/ad-sets/{adSetId}` there instead. Ignored (stripped before the ad-set create) when `buyingType` is `RESERVED`: value rules only apply to auction ad sets on `LOWEST_COST_WITHOUT_CAP` or `COST_CAP`, and a Reach & Frequency reservation has no auction bid strategy. Read back with `GET /v1/ads/ad-sets/{adSetId}?fields=value_rule_set_id`; the attachment is not mirrored onto Zernio's ad documents. | [optional] |
|
|
82
82
|
| **value_rules_applied** | **Boolean** | Meta only (facebook, instagram; other platforms return 400). Optional when attaching, and requires `valueRuleSetId`. `false` is REJECTED here with 400: a newly created ad set has nothing to detach, so detaching lives on `PUT /v1/ads/ad-sets/{adSetId}`. | [optional] |
|
|
83
|
-
| **platform_specific_data** | [**
|
|
83
|
+
| **platform_specific_data** | [**CreateStandaloneAdRequestPlatformSpecificData**](CreateStandaloneAdRequestPlatformSpecificData.md) | | [optional] |
|
|
84
84
|
| **dsa_beneficiary** | **String** | Legal entity that benefits from the ad. Required when targeting EU users (EU DSA, Article 26). Optional if the ad account has a default beneficiary: set it once via `PATCH /v1/ads/accounts` or in Meta Ads Manager, and Meta fills it in whenever the field is omitted. | [optional] |
|
|
85
85
|
| **dsa_payor** | **String** | Legal entity that pays for the ad. Can differ from `dsaBeneficiary` (for example, an agency paying for a client's ads). Same rules as `dsaBeneficiary`: required for EU targeting unless the ad account has a default payor. | [optional] |
|
|
86
86
|
| **brand_identity** | [**CreateStandaloneAdRequestBrandIdentity**](CreateStandaloneAdRequestBrandIdentity.md) | | [optional] |
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Zernio::CreateStandaloneAdRequestPlatformSpecificData
|
|
2
|
+
|
|
3
|
+
## Class instance methods
|
|
4
|
+
|
|
5
|
+
### `openapi_one_of`
|
|
6
|
+
|
|
7
|
+
Returns the list of classes defined in oneOf.
|
|
8
|
+
|
|
9
|
+
#### Example
|
|
10
|
+
|
|
11
|
+
```ruby
|
|
12
|
+
require 'zernio-sdk'
|
|
13
|
+
|
|
14
|
+
Zernio::CreateStandaloneAdRequestPlatformSpecificData.openapi_one_of
|
|
15
|
+
# =>
|
|
16
|
+
# [
|
|
17
|
+
# :'LinkedInAdsPlatformData',
|
|
18
|
+
# :'MetaAdsPlatformData'
|
|
19
|
+
# ]
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### build
|
|
23
|
+
|
|
24
|
+
Find the appropriate object from the `openapi_one_of` list and casts the data into it.
|
|
25
|
+
|
|
26
|
+
#### Example
|
|
27
|
+
|
|
28
|
+
```ruby
|
|
29
|
+
require 'zernio-sdk'
|
|
30
|
+
|
|
31
|
+
Zernio::CreateStandaloneAdRequestPlatformSpecificData.build(data)
|
|
32
|
+
# => #<LinkedInAdsPlatformData:0x00007fdd4aab02a0>
|
|
33
|
+
|
|
34
|
+
Zernio::CreateStandaloneAdRequestPlatformSpecificData.build(data_that_doesnt_match)
|
|
35
|
+
# => nil
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
#### Parameters
|
|
39
|
+
|
|
40
|
+
| Name | Type | Description |
|
|
41
|
+
| ---- | ---- | ----------- |
|
|
42
|
+
| **data** | **Mixed** | data to be matched against the list of oneOf items |
|
|
43
|
+
|
|
44
|
+
#### Return type
|
|
45
|
+
|
|
46
|
+
- `LinkedInAdsPlatformData`
|
|
47
|
+
- `MetaAdsPlatformData`
|
|
48
|
+
- `nil` (if no type matches)
|
|
49
|
+
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
| **error** | **String** | | [optional] |
|
|
15
15
|
| **error_code** | **Integer** | Meta WhatsApp error code (e.g. 131049 for antispam, 131021 for invalid phone, 131026 for re-engagement required). Only populated for status=failed. | [optional] |
|
|
16
16
|
| **error_explanation** | **String** | Plain-language translation of errorCode (e.g. for 131026, that the recipient has likely opted out of marketing messages). Null for unmapped codes; fall back to error. | [optional] |
|
|
17
|
+
| **error_trace_id** | **String** | Meta trace id (fbtrace_id) for the failed send. Quote this when escalating to Meta Direct Support. Only populated for status=failed on Meta platforms. | [optional] |
|
|
17
18
|
| **sent_at** | **Time** | | [optional] |
|
|
18
19
|
| **delivered_at** | **Time** | | [optional] |
|
|
19
20
|
| **read_at** | **Time** | | [optional] |
|
|
@@ -34,6 +35,7 @@ instance = Zernio::ListBroadcastRecipients200ResponseRecipientsInner.new(
|
|
|
34
35
|
error: null,
|
|
35
36
|
error_code: null,
|
|
36
37
|
error_explanation: null,
|
|
38
|
+
error_trace_id: null,
|
|
37
39
|
sent_at: null,
|
|
38
40
|
delivered_at: null,
|
|
39
41
|
read_at: null
|
data/docs/MetaAdsPlatformData.md
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
| Name | Type | Description | Notes |
|
|
6
6
|
| ---- | ---- | ----------- | ----- |
|
|
7
7
|
| **bid_strategy** | [**BidStrategy**](BidStrategy.md) | | [optional] |
|
|
8
|
-
| **bid_amount** | **Float** | Whole currency units (USD: 5 = $5.00). Required when bidStrategy is LOWEST_COST_WITH_BID_CAP or COST_CAP. | [optional] |
|
|
9
|
-
| **roas_average_floor** | **Float** | Decimal ROAS multiplier (2.0 = 2.0x). Required when bidStrategy is LOWEST_COST_WITH_MIN_ROAS. | [optional] |
|
|
8
|
+
| **bid_amount** | **Float** | Whole currency units (USD: 5 = $5.00). Required when bidStrategy is LOWEST_COST_WITH_BID_CAP or COST_CAP. May also be sent alone, WITHOUT bidStrategy, to set the cap on an ad set joining a COST_CAP / LOWEST_COST_WITH_BID_CAP campaign (the strategy is inherited from the campaign). On POST /v1/ads/create that shape requires existingCampaignId and is a 400 otherwise; on POST /v1/ads/boost it is promoted to LOWEST_COST_WITH_BID_CAP. | [optional] |
|
|
9
|
+
| **roas_average_floor** | **Float** | Decimal ROAS multiplier (2.0 = 2.0x). Required when bidStrategy is LOWEST_COST_WITH_MIN_ROAS; sending it without bidStrategy is a 400. | [optional] |
|
|
10
10
|
|
|
11
11
|
## Example
|
|
12
12
|
|
data/docs/UpdateAdSetRequest.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
| **status** | **String** | Omit if not toggling delivery state | [optional] |
|
|
10
10
|
| **name** | **String** | Rename the ad set (Meta only; other platforms return 501). At least one of budget/status/bidStrategy/name is required. | [optional] |
|
|
11
11
|
| **bid_strategy** | [**BidStrategy**](BidStrategy.md) | Ad-set-level bid strategy. Overrides the campaign-level default. Supported on Meta (facebook, instagram), TikTok, and OpenAI. On TikTok the Meta-style enum is mapped to bid_type / bid_price / deep_bid_type automatically. On OpenAI, LOWEST_COST_WITH_BID_CAP and COST_CAP both map to the ad group's `bidding_config.max_bid_micros` (one knob covers both); LOWEST_COST_WITH_MIN_ROAS is rejected with 422 (OpenAI has no ROAS-based bidding). Other platforms (linkedin, pinterest, google, twitter) return 501 Not Implemented when bidStrategy is set. | [optional] |
|
|
12
|
-
| **bid_amount** | **Float** | Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when bidStrategy is LOWEST_COST_WITH_BID_CAP or COST_CAP. Internally converted to Meta's smallest-denomination integer, or (on OpenAI) to micros (× 1,000,000). | [optional] |
|
|
12
|
+
| **bid_amount** | **Float** | Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when bidStrategy is LOWEST_COST_WITH_BID_CAP or COST_CAP. Internally converted to Meta's smallest-denomination integer, or (on OpenAI) to micros (× 1,000,000). Meta only: may be sent alone, WITHOUT bidStrategy, to update the cap amount on an ad set whose parent campaign is COST_CAP or LOWEST_COST_WITH_BID_CAP (the strategy is inherited from the campaign and is left untouched). | [optional] |
|
|
13
13
|
| **roas_average_floor** | **Float** | Minimum ROAS as a decimal multiplier (2.0 = 2.0x). Required when bidStrategy is LOWEST_COST_WITH_MIN_ROAS. Sent to Meta as `bid_constraints.roas_average_floor` × 10000. Not supported on OpenAI (422). | [optional] |
|
|
14
14
|
| **value_rule_set_id** | **String** | Meta only (other platforms return 501). Value rule set to attach to this ad set, from `/v1/ads/value-rule-sets`. Sending a different id replaces the current association. To DETACH, send `valueRulesApplied: false` and omit this field. | [optional] |
|
|
15
15
|
| **value_rules_applied** | **Boolean** | Meta only (other platforms return 501). `false` DETACHES the ad set's value rule set and must be sent WITHOUT `valueRuleSetId`; the combination returns 400. `true` is optional when attaching, since attachment is driven by `valueRuleSetId`, and requires it to be present. | [optional] |
|
|
@@ -1603,7 +1603,7 @@ module Zernio
|
|
|
1603
1603
|
end
|
|
1604
1604
|
|
|
1605
1605
|
# Update an ad set
|
|
1606
|
-
# Ad-set-level writes. Use this for ABO budget updates, ad-set-scoped pause/resume, bid-strategy edits, Meta value-rule-set attach/detach, and Meta-only post-launch delivery settings via `platformSpecificData`. At least one updatable field is required. Value rule sets (Meta only, see `/v1/ads/value-rule-sets`): - ATTACH or REPLACE: send `valueRuleSetId`. Attachment is driven by the id's presence, so `valueRulesApplied: true` is optional. Sending a different id replaces the previous association; there is no separate replace call. - DETACH: send `valueRulesApplied: false` and OMIT `valueRuleSetId`. - Sending `valueRulesApplied: false` TOGETHER with `valueRuleSetId` returns 400 `mutually_exclusive_fields`. This is deliberate: Meta attaches the rule set whenever `value_rule_set_id` is present, even with `value_rules_applied` false, so echoing stored state while asking to detach would silently keep the bid adjustments live. - Eligibility: only ad sets on `LOWEST_COST_WITHOUT_CAP` or `COST_CAP`. Meta rejects the rest server-side. - Read back with `GET /v1/ads/ad-sets/{adSetId}?fields=value_rule_set_id`. Meta does not document `value_rules_applied` as a readable ad-set field, so the boolean cannot be read back. Bid strategy compatibility (per Meta's spec): - `LOWEST_COST_WITHOUT_CAP`: no `bidAmount`, no `roasAverageFloor`. - `LOWEST_COST_WITH_BID_CAP` / `COST_CAP`: `bidAmount` REQUIRED (whole currency units). - `LOWEST_COST_WITH_MIN_ROAS`: `roasAverageFloor` REQUIRED (decimal multiplier, e.g. 2.0 = 2.0x ROAS). Delivery settings are validated by Meta against the campaign objective; incompatible combinations (e.g. a billingEvent the optimization goal doesn't allow) surface as 400s from Meta. When updating `budget` on an ABO campaign: if the parent campaign is CBO, the response is 409 with code BUDGET_LEVEL_MISMATCH — route to PUT /v1/ads/campaigns/{campaignId} instead.
|
|
1606
|
+
# Ad-set-level writes. Use this for ABO budget updates, ad-set-scoped pause/resume, bid-strategy edits, Meta value-rule-set attach/detach, and Meta-only post-launch delivery settings via `platformSpecificData`. At least one updatable field is required. Value rule sets (Meta only, see `/v1/ads/value-rule-sets`): - ATTACH or REPLACE: send `valueRuleSetId`. Attachment is driven by the id's presence, so `valueRulesApplied: true` is optional. Sending a different id replaces the previous association; there is no separate replace call. - DETACH: send `valueRulesApplied: false` and OMIT `valueRuleSetId`. - Sending `valueRulesApplied: false` TOGETHER with `valueRuleSetId` returns 400 `mutually_exclusive_fields`. This is deliberate: Meta attaches the rule set whenever `value_rule_set_id` is present, even with `value_rules_applied` false, so echoing stored state while asking to detach would silently keep the bid adjustments live. - Eligibility: only ad sets on `LOWEST_COST_WITHOUT_CAP` or `COST_CAP`. Meta rejects the rest server-side. - Read back with `GET /v1/ads/ad-sets/{adSetId}?fields=value_rule_set_id`. Meta does not document `value_rules_applied` as a readable ad-set field, so the boolean cannot be read back. Bid strategy compatibility (per Meta's spec): - `LOWEST_COST_WITHOUT_CAP`: no `bidAmount`, no `roasAverageFloor`. - `LOWEST_COST_WITH_BID_CAP` / `COST_CAP`: `bidAmount` REQUIRED (whole currency units). - `LOWEST_COST_WITH_MIN_ROAS`: `roasAverageFloor` REQUIRED (decimal multiplier, e.g. 2.0 = 2.0x ROAS). - Meta only: send `bidAmount` WITHOUT `bidStrategy` to change the cap amount on an ad set under a COST_CAP / LOWEST_COST_WITH_BID_CAP parent campaign, leaving the strategy itself (inherited from the campaign) untouched. `roasAverageFloor` without `bidStrategy` is rejected (it has no meaning outside LOWEST_COST_WITH_MIN_ROAS). Delivery settings are validated by Meta against the campaign objective; incompatible combinations (e.g. a billingEvent the optimization goal doesn't allow) surface as 400s from Meta. When updating `budget` on an ABO campaign: if the parent campaign is CBO, the response is 409 with code BUDGET_LEVEL_MISMATCH — route to PUT /v1/ads/campaigns/{campaignId} instead.
|
|
1607
1607
|
# @param ad_set_id [String] Platform ad set ID
|
|
1608
1608
|
# @param update_ad_set_request [UpdateAdSetRequest]
|
|
1609
1609
|
# @param [Hash] opts the optional parameters
|
|
@@ -1614,7 +1614,7 @@ module Zernio
|
|
|
1614
1614
|
end
|
|
1615
1615
|
|
|
1616
1616
|
# Update an ad set
|
|
1617
|
-
# Ad-set-level writes. Use this for ABO budget updates, ad-set-scoped pause/resume, bid-strategy edits, Meta value-rule-set attach/detach, and Meta-only post-launch delivery settings via `platformSpecificData`. At least one updatable field is required. Value rule sets (Meta only, see `/v1/ads/value-rule-sets`): - ATTACH or REPLACE: send `valueRuleSetId`. Attachment is driven by the id's presence, so `valueRulesApplied: true` is optional. Sending a different id replaces the previous association; there is no separate replace call. - DETACH: send `valueRulesApplied: false` and OMIT `valueRuleSetId`. - Sending `valueRulesApplied: false` TOGETHER with `valueRuleSetId` returns 400 `mutually_exclusive_fields`. This is deliberate: Meta attaches the rule set whenever `value_rule_set_id` is present, even with `value_rules_applied` false, so echoing stored state while asking to detach would silently keep the bid adjustments live. - Eligibility: only ad sets on `LOWEST_COST_WITHOUT_CAP` or `COST_CAP`. Meta rejects the rest server-side. - Read back with `GET /v1/ads/ad-sets/{adSetId}?fields=value_rule_set_id`. Meta does not document `value_rules_applied` as a readable ad-set field, so the boolean cannot be read back. Bid strategy compatibility (per Meta's spec): - `LOWEST_COST_WITHOUT_CAP`: no `bidAmount`, no `roasAverageFloor`. - `LOWEST_COST_WITH_BID_CAP` / `COST_CAP`: `bidAmount` REQUIRED (whole currency units). - `LOWEST_COST_WITH_MIN_ROAS`: `roasAverageFloor` REQUIRED (decimal multiplier, e.g. 2.0 = 2.0x ROAS). Delivery settings are validated by Meta against the campaign objective; incompatible combinations (e.g. a billingEvent the optimization goal doesn't allow) surface as 400s from Meta. When updating `budget` on an ABO campaign: if the parent campaign is CBO, the response is 409 with code BUDGET_LEVEL_MISMATCH — route to PUT /v1/ads/campaigns/{campaignId} instead.
|
|
1617
|
+
# Ad-set-level writes. Use this for ABO budget updates, ad-set-scoped pause/resume, bid-strategy edits, Meta value-rule-set attach/detach, and Meta-only post-launch delivery settings via `platformSpecificData`. At least one updatable field is required. Value rule sets (Meta only, see `/v1/ads/value-rule-sets`): - ATTACH or REPLACE: send `valueRuleSetId`. Attachment is driven by the id's presence, so `valueRulesApplied: true` is optional. Sending a different id replaces the previous association; there is no separate replace call. - DETACH: send `valueRulesApplied: false` and OMIT `valueRuleSetId`. - Sending `valueRulesApplied: false` TOGETHER with `valueRuleSetId` returns 400 `mutually_exclusive_fields`. This is deliberate: Meta attaches the rule set whenever `value_rule_set_id` is present, even with `value_rules_applied` false, so echoing stored state while asking to detach would silently keep the bid adjustments live. - Eligibility: only ad sets on `LOWEST_COST_WITHOUT_CAP` or `COST_CAP`. Meta rejects the rest server-side. - Read back with `GET /v1/ads/ad-sets/{adSetId}?fields=value_rule_set_id`. Meta does not document `value_rules_applied` as a readable ad-set field, so the boolean cannot be read back. Bid strategy compatibility (per Meta's spec): - `LOWEST_COST_WITHOUT_CAP`: no `bidAmount`, no `roasAverageFloor`. - `LOWEST_COST_WITH_BID_CAP` / `COST_CAP`: `bidAmount` REQUIRED (whole currency units). - `LOWEST_COST_WITH_MIN_ROAS`: `roasAverageFloor` REQUIRED (decimal multiplier, e.g. 2.0 = 2.0x ROAS). - Meta only: send `bidAmount` WITHOUT `bidStrategy` to change the cap amount on an ad set under a COST_CAP / LOWEST_COST_WITH_BID_CAP parent campaign, leaving the strategy itself (inherited from the campaign) untouched. `roasAverageFloor` without `bidStrategy` is rejected (it has no meaning outside LOWEST_COST_WITH_MIN_ROAS). Delivery settings are validated by Meta against the campaign objective; incompatible combinations (e.g. a billingEvent the optimization goal doesn't allow) surface as 400s from Meta. When updating `budget` on an ABO campaign: if the parent campaign is CBO, the response is 409 with code BUDGET_LEVEL_MISMATCH — route to PUT /v1/ads/campaigns/{campaignId} instead.
|
|
1618
1618
|
# @param ad_set_id [String] Platform ad set ID
|
|
1619
1619
|
# @param update_ad_set_request [UpdateAdSetRequest]
|
|
1620
1620
|
# @param [Hash] opts the optional parameters
|
|
@@ -38,7 +38,7 @@ module Zernio
|
|
|
38
38
|
# Campaign bid strategy. Meta stores `bid_strategy` alongside the budget, so this REQUIRES `budgetAmount` + `budgetType` on the same request; sending it without a campaign budget is a 400. A campaign carrying a strategy without its `bid_amount` makes every ad set created under it fail with an error that names the ad set (code 100, subcode 1815857), so the bad state is rejected up front rather than accepted. To bid at ad-set level, set the strategy there instead.
|
|
39
39
|
attr_accessor :bid_strategy
|
|
40
40
|
|
|
41
|
-
# Whole currency units (USD: 5 = $5.00). Required for LOWEST_COST_WITH_BID_CAP and COST_CAP; ignored otherwise.
|
|
41
|
+
# Whole currency units (USD: 5 = $5.00). Required for LOWEST_COST_WITH_BID_CAP and COST_CAP; ignored otherwise. Validated here but NOT stored by Meta: the campaign object has no bid_amount field, only bid_strategy lives on it. The amount takes effect once an ad set joins this campaign (existingCampaignId on POST /v1/ads/create) and supplies its own bidAmount there.
|
|
42
42
|
attr_accessor :bid_amount
|
|
43
43
|
|
|
44
44
|
# Decimal ROAS multiplier (2.0 = 2.0x). Required for LOWEST_COST_WITH_MIN_ROAS.
|
|
@@ -219,10 +219,10 @@ module Zernio
|
|
|
219
219
|
# Deprecated: send it inside `platformSpecificData` instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400. Meta bid strategy applied to the ad set.
|
|
220
220
|
attr_accessor :bid_strategy
|
|
221
221
|
|
|
222
|
-
# Deprecated: send it inside `platformSpecificData` instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400. Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when `bidStrategy` is `LOWEST_COST_WITH_BID_CAP` or `COST_CAP`.
|
|
222
|
+
# Deprecated: send it inside `platformSpecificData` instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400. Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when `bidStrategy` is `LOWEST_COST_WITH_BID_CAP` or `COST_CAP`. Meta only: sending `bidAmount` WITHOUT `bidStrategy` requires `existingCampaignId` (400 otherwise), and sets the new ad set's cap under the joined campaign's COST_CAP / LOWEST_COST_WITH_BID_CAP parent. The strategy itself is inherited from the campaign. Restating bidStrategy here is accepted but has no effect on the ad set. Rejected with 400 in `adSetId` attach mode: that shape inherits its cap from the platform. Use `PUT /v1/ads/ad-sets/{adSetId}` there instead.
|
|
223
223
|
attr_accessor :bid_amount
|
|
224
224
|
|
|
225
|
-
# Deprecated: send it inside `platformSpecificData` instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400. Minimum ROAS as a decimal multiplier (e.g. 2.0 = 2.0x ROAS). Required when `bidStrategy` is `LOWEST_COST_WITH_MIN_ROAS`. Sent to Meta as `bid_constraints.roas_average_floor` × 10000.
|
|
225
|
+
# Deprecated: send it inside `platformSpecificData` instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400. Minimum ROAS as a decimal multiplier (e.g. 2.0 = 2.0x ROAS). Required when `bidStrategy` is `LOWEST_COST_WITH_MIN_ROAS`. Sending it without `bidStrategy` is a 400. Sent to Meta as `bid_constraints.roas_average_floor` × 10000. Known gap: a CBO campaign's ROAS floor lives on the campaign only (set via `POST /v1/ads/campaigns`); there is no supported way to set it while joining a CBO campaign here.
|
|
226
226
|
attr_accessor :roas_average_floor
|
|
227
227
|
|
|
228
228
|
# Meta only (facebook, instagram; other platforms return 400). Value rule set to attach to the new ad set, from `/v1/ads/value-rule-sets`. Attachment is driven by this id, so `valueRulesApplied` is optional alongside it. Rejected with 400 in `adSetId` attach mode: that shape inherits the existing ad set's attachment, so the field would be silently ignored. Use `PUT /v1/ads/ad-sets/{adSetId}` there instead. Ignored (stripped before the ad-set create) when `buyingType` is `RESERVED`: value rules only apply to auction ad sets on `LOWEST_COST_WITHOUT_CAP` or `COST_CAP`, and a Reach & Frequency reservation has no auction bid strategy. Read back with `GET /v1/ads/ad-sets/{adSetId}?fields=value_rule_set_id`; the attachment is not mirrored onto Zernio's ad documents.
|
|
@@ -445,7 +445,7 @@ module Zernio
|
|
|
445
445
|
:'roas_average_floor' => :'Float',
|
|
446
446
|
:'value_rule_set_id' => :'String',
|
|
447
447
|
:'value_rules_applied' => :'Boolean',
|
|
448
|
-
:'platform_specific_data' => :'
|
|
448
|
+
:'platform_specific_data' => :'CreateStandaloneAdRequestPlatformSpecificData',
|
|
449
449
|
:'dsa_beneficiary' => :'String',
|
|
450
450
|
:'dsa_payor' => :'String',
|
|
451
451
|
:'brand_identity' => :'CreateStandaloneAdRequestBrandIdentity',
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
#Zernio API
|
|
3
|
+
|
|
4
|
+
#API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api
|
|
5
|
+
|
|
6
|
+
The version of the OpenAPI document: 1.0.4
|
|
7
|
+
Contact: support@zernio.com
|
|
8
|
+
Generated by: https://openapi-generator.tech
|
|
9
|
+
Generator version: 7.19.0
|
|
10
|
+
|
|
11
|
+
=end
|
|
12
|
+
|
|
13
|
+
require 'date'
|
|
14
|
+
require 'time'
|
|
15
|
+
|
|
16
|
+
module Zernio
|
|
17
|
+
# Platform-specific options. The platform is derived from `accountId`; sending options for a different platform returns a 400. LinkedIn (campaign bidding and delivery controls) and Meta (the bid trio) have options today. **Meta**: `bidStrategy`, `bidAmount` and `roasAverageFloor` may be sent here instead of at the root — the preferred home going forward. Sending the bid fields in BOTH places returns a 400 (`mutually_exclusive_fields`), and sending any of them in `adSetId` attach mode is a 400 too (the ad set already has its bid).
|
|
18
|
+
module CreateStandaloneAdRequestPlatformSpecificData
|
|
19
|
+
class << self
|
|
20
|
+
# List of class defined in oneOf (OpenAPI v3)
|
|
21
|
+
def openapi_one_of
|
|
22
|
+
[
|
|
23
|
+
:'LinkedInAdsPlatformData',
|
|
24
|
+
:'MetaAdsPlatformData'
|
|
25
|
+
]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Builds the object
|
|
29
|
+
# @param [Mixed] Data to be matched against the list of oneOf items
|
|
30
|
+
# @return [Object] Returns the model or the data itself
|
|
31
|
+
def build(data)
|
|
32
|
+
# Go through the list of oneOf items and attempt to identify the appropriate one.
|
|
33
|
+
# Note:
|
|
34
|
+
# - We do not attempt to check whether exactly one item matches.
|
|
35
|
+
# - No advanced validation of types in some cases (e.g. "x: { type: string }" will happily match { x: 123 })
|
|
36
|
+
# due to the way the deserialization is made in the base_object template (it just casts without verifying).
|
|
37
|
+
# - TODO: scalar values are de facto behaving as if they were nullable.
|
|
38
|
+
# - TODO: logging when debugging is set.
|
|
39
|
+
openapi_one_of.each do |klass|
|
|
40
|
+
begin
|
|
41
|
+
next if klass == :AnyType # "nullable: true"
|
|
42
|
+
return find_and_cast_into_type(klass, data)
|
|
43
|
+
rescue # rescue all errors so we keep iterating even if the current item lookup raises
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
openapi_one_of.include?(:AnyType) ? data : nil
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
private
|
|
51
|
+
|
|
52
|
+
SchemaMismatchError = Class.new(StandardError)
|
|
53
|
+
|
|
54
|
+
# Note: 'File' is missing here because in the regular case we get the data _after_ a call to JSON.parse.
|
|
55
|
+
def find_and_cast_into_type(klass, data)
|
|
56
|
+
return if data.nil?
|
|
57
|
+
|
|
58
|
+
case klass.to_s
|
|
59
|
+
when 'Boolean'
|
|
60
|
+
return data if data.instance_of?(TrueClass) || data.instance_of?(FalseClass)
|
|
61
|
+
when 'Float'
|
|
62
|
+
return data if data.instance_of?(Float)
|
|
63
|
+
when 'Integer'
|
|
64
|
+
return data if data.instance_of?(Integer)
|
|
65
|
+
when 'Time'
|
|
66
|
+
return Time.parse(data)
|
|
67
|
+
when 'Date'
|
|
68
|
+
return Date.iso8601(data)
|
|
69
|
+
when 'String'
|
|
70
|
+
return data if data.instance_of?(String)
|
|
71
|
+
when 'Object' # "type: object"
|
|
72
|
+
return data if data.instance_of?(Hash)
|
|
73
|
+
when /\AArray<(?<sub_type>.+)>\z/ # "type: array"
|
|
74
|
+
if data.instance_of?(Array)
|
|
75
|
+
sub_type = Regexp.last_match[:sub_type]
|
|
76
|
+
return data.map { |item| find_and_cast_into_type(sub_type, item) }
|
|
77
|
+
end
|
|
78
|
+
when /\AHash<String, (?<sub_type>.+)>\z/ # "type: object" with "additionalProperties: { ... }"
|
|
79
|
+
if data.instance_of?(Hash) && data.keys.all? { |k| k.instance_of?(Symbol) || k.instance_of?(String) }
|
|
80
|
+
sub_type = Regexp.last_match[:sub_type]
|
|
81
|
+
return data.each_with_object({}) { |(k, v), hsh| hsh[k] = find_and_cast_into_type(sub_type, v) }
|
|
82
|
+
end
|
|
83
|
+
else # model
|
|
84
|
+
const = Zernio.const_get(klass)
|
|
85
|
+
if const
|
|
86
|
+
if const.respond_to?(:openapi_one_of) # nested oneOf model
|
|
87
|
+
model = const.build(data)
|
|
88
|
+
return model if model
|
|
89
|
+
else
|
|
90
|
+
# raise if data contains keys that are not known to the model
|
|
91
|
+
raise if const.respond_to?(:acceptable_attributes) && !(data.keys - const.acceptable_attributes).empty?
|
|
92
|
+
model = const.build_from_hash(data)
|
|
93
|
+
return model if model
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
raise # if no match by now, raise
|
|
99
|
+
rescue
|
|
100
|
+
raise SchemaMismatchError, "#{data} doesn't match the #{klass} type"
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
end
|
|
@@ -37,6 +37,9 @@ module Zernio
|
|
|
37
37
|
# Plain-language translation of errorCode (e.g. for 131026, that the recipient has likely opted out of marketing messages). Null for unmapped codes; fall back to error.
|
|
38
38
|
attr_accessor :error_explanation
|
|
39
39
|
|
|
40
|
+
# Meta trace id (fbtrace_id) for the failed send. Quote this when escalating to Meta Direct Support. Only populated for status=failed on Meta platforms.
|
|
41
|
+
attr_accessor :error_trace_id
|
|
42
|
+
|
|
40
43
|
attr_accessor :sent_at
|
|
41
44
|
|
|
42
45
|
attr_accessor :delivered_at
|
|
@@ -78,6 +81,7 @@ module Zernio
|
|
|
78
81
|
:'error' => :'error',
|
|
79
82
|
:'error_code' => :'errorCode',
|
|
80
83
|
:'error_explanation' => :'errorExplanation',
|
|
84
|
+
:'error_trace_id' => :'errorTraceId',
|
|
81
85
|
:'sent_at' => :'sentAt',
|
|
82
86
|
:'delivered_at' => :'deliveredAt',
|
|
83
87
|
:'read_at' => :'readAt'
|
|
@@ -107,6 +111,7 @@ module Zernio
|
|
|
107
111
|
:'error' => :'String',
|
|
108
112
|
:'error_code' => :'Integer',
|
|
109
113
|
:'error_explanation' => :'String',
|
|
114
|
+
:'error_trace_id' => :'String',
|
|
110
115
|
:'sent_at' => :'Time',
|
|
111
116
|
:'delivered_at' => :'Time',
|
|
112
117
|
:'read_at' => :'Time'
|
|
@@ -118,6 +123,7 @@ module Zernio
|
|
|
118
123
|
Set.new([
|
|
119
124
|
:'error_code',
|
|
120
125
|
:'error_explanation',
|
|
126
|
+
:'error_trace_id',
|
|
121
127
|
])
|
|
122
128
|
end
|
|
123
129
|
|
|
@@ -177,6 +183,10 @@ module Zernio
|
|
|
177
183
|
self.error_explanation = attributes[:'error_explanation']
|
|
178
184
|
end
|
|
179
185
|
|
|
186
|
+
if attributes.key?(:'error_trace_id')
|
|
187
|
+
self.error_trace_id = attributes[:'error_trace_id']
|
|
188
|
+
end
|
|
189
|
+
|
|
180
190
|
if attributes.key?(:'sent_at')
|
|
181
191
|
self.sent_at = attributes[:'sent_at']
|
|
182
192
|
end
|
|
@@ -232,6 +242,7 @@ module Zernio
|
|
|
232
242
|
error == o.error &&
|
|
233
243
|
error_code == o.error_code &&
|
|
234
244
|
error_explanation == o.error_explanation &&
|
|
245
|
+
error_trace_id == o.error_trace_id &&
|
|
235
246
|
sent_at == o.sent_at &&
|
|
236
247
|
delivered_at == o.delivered_at &&
|
|
237
248
|
read_at == o.read_at
|
|
@@ -246,7 +257,7 @@ module Zernio
|
|
|
246
257
|
# Calculates hash code according to all attributes.
|
|
247
258
|
# @return [Integer] Hash code
|
|
248
259
|
def hash
|
|
249
|
-
[id, contact_id, channel_id, platform_identifier, contact_name, status, message_id, error, error_code, error_explanation, sent_at, delivered_at, read_at].hash
|
|
260
|
+
[id, contact_id, channel_id, platform_identifier, contact_name, status, message_id, error, error_code, error_explanation, error_trace_id, sent_at, delivered_at, read_at].hash
|
|
250
261
|
end
|
|
251
262
|
|
|
252
263
|
# Builds the object from hash
|
|
@@ -18,10 +18,10 @@ module Zernio
|
|
|
18
18
|
class MetaAdsPlatformData < ApiModelBase
|
|
19
19
|
attr_accessor :bid_strategy
|
|
20
20
|
|
|
21
|
-
# Whole currency units (USD: 5 = $5.00). Required when bidStrategy is LOWEST_COST_WITH_BID_CAP or COST_CAP.
|
|
21
|
+
# Whole currency units (USD: 5 = $5.00). Required when bidStrategy is LOWEST_COST_WITH_BID_CAP or COST_CAP. May also be sent alone, WITHOUT bidStrategy, to set the cap on an ad set joining a COST_CAP / LOWEST_COST_WITH_BID_CAP campaign (the strategy is inherited from the campaign). On POST /v1/ads/create that shape requires existingCampaignId and is a 400 otherwise; on POST /v1/ads/boost it is promoted to LOWEST_COST_WITH_BID_CAP.
|
|
22
22
|
attr_accessor :bid_amount
|
|
23
23
|
|
|
24
|
-
# Decimal ROAS multiplier (2.0 = 2.0x). Required when bidStrategy is LOWEST_COST_WITH_MIN_ROAS.
|
|
24
|
+
# Decimal ROAS multiplier (2.0 = 2.0x). Required when bidStrategy is LOWEST_COST_WITH_MIN_ROAS; sending it without bidStrategy is a 400.
|
|
25
25
|
attr_accessor :roas_average_floor
|
|
26
26
|
|
|
27
27
|
class EnumAttributeValidator
|
|
@@ -28,7 +28,7 @@ module Zernio
|
|
|
28
28
|
# Ad-set-level bid strategy. Overrides the campaign-level default. Supported on Meta (facebook, instagram), TikTok, and OpenAI. On TikTok the Meta-style enum is mapped to bid_type / bid_price / deep_bid_type automatically. On OpenAI, LOWEST_COST_WITH_BID_CAP and COST_CAP both map to the ad group's `bidding_config.max_bid_micros` (one knob covers both); LOWEST_COST_WITH_MIN_ROAS is rejected with 422 (OpenAI has no ROAS-based bidding). Other platforms (linkedin, pinterest, google, twitter) return 501 Not Implemented when bidStrategy is set.
|
|
29
29
|
attr_accessor :bid_strategy
|
|
30
30
|
|
|
31
|
-
# Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when bidStrategy is LOWEST_COST_WITH_BID_CAP or COST_CAP. Internally converted to Meta's smallest-denomination integer, or (on OpenAI) to micros (× 1,000,000).
|
|
31
|
+
# Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when bidStrategy is LOWEST_COST_WITH_BID_CAP or COST_CAP. Internally converted to Meta's smallest-denomination integer, or (on OpenAI) to micros (× 1,000,000). Meta only: may be sent alone, WITHOUT bidStrategy, to update the cap amount on an ad set whose parent campaign is COST_CAP or LOWEST_COST_WITH_BID_CAP (the strategy is inherited from the campaign and is left untouched).
|
|
32
32
|
attr_accessor :bid_amount
|
|
33
33
|
|
|
34
34
|
# Minimum ROAS as a decimal multiplier (2.0 = 2.0x). Required when bidStrategy is LOWEST_COST_WITH_MIN_ROAS. Sent to Meta as `bid_constraints.roas_average_floor` × 10000. Not supported on OpenAI (422).
|
data/lib/zernio-sdk/version.rb
CHANGED
data/lib/zernio-sdk.rb
CHANGED
|
@@ -284,6 +284,7 @@ require 'zernio-sdk/models/create_standalone_ad_request_placement_assets'
|
|
|
284
284
|
require 'zernio-sdk/models/create_standalone_ad_request_placement_assets_rules_inner'
|
|
285
285
|
require 'zernio-sdk/models/create_standalone_ad_request_placement_assets_rules_inner_placements'
|
|
286
286
|
require 'zernio-sdk/models/create_standalone_ad_request_placements'
|
|
287
|
+
require 'zernio-sdk/models/create_standalone_ad_request_platform_specific_data'
|
|
287
288
|
require 'zernio-sdk/models/create_standalone_ad_request_promoted_object'
|
|
288
289
|
require 'zernio-sdk/models/create_standalone_ad_request_regions_inner'
|
|
289
290
|
require 'zernio-sdk/models/create_standalone_ad_request_tracking'
|
data/openapi.yaml
CHANGED
|
@@ -4932,8 +4932,8 @@ components:
|
|
|
4932
4932
|
description: 'Meta (facebook/instagram) options for platformSpecificData on POST /v1/ads/boost and /v1/ads/create. Unknown keys are rejected, not dropped.'
|
|
4933
4933
|
properties:
|
|
4934
4934
|
bidStrategy: { $ref: '#/components/schemas/BidStrategy' }
|
|
4935
|
-
bidAmount: { type: number, description: "Whole currency units (USD: 5 = $5.00). Required when bidStrategy is LOWEST_COST_WITH_BID_CAP or COST_CAP." }
|
|
4936
|
-
roasAverageFloor: { type: number, description: "Decimal ROAS multiplier (2.0 = 2.0x). Required when bidStrategy is LOWEST_COST_WITH_MIN_ROAS." }
|
|
4935
|
+
bidAmount: { type: number, description: "Whole currency units (USD: 5 = $5.00). Required when bidStrategy is LOWEST_COST_WITH_BID_CAP or COST_CAP. May also be sent alone, WITHOUT bidStrategy, to set the cap on an ad set joining a COST_CAP / LOWEST_COST_WITH_BID_CAP campaign (the strategy is inherited from the campaign). On POST /v1/ads/create that shape requires existingCampaignId and is a 400 otherwise; on POST /v1/ads/boost it is promoted to LOWEST_COST_WITH_BID_CAP." }
|
|
4936
|
+
roasAverageFloor: { type: number, description: "Decimal ROAS multiplier (2.0 = 2.0x). Required when bidStrategy is LOWEST_COST_WITH_MIN_ROAS; sending it without bidStrategy is a 400." }
|
|
4937
4937
|
LinkedInAdsPlatformData:
|
|
4938
4938
|
type: object
|
|
4939
4939
|
additionalProperties: false
|
|
@@ -35328,6 +35328,7 @@ paths:
|
|
|
35328
35328
|
error: { type: string }
|
|
35329
35329
|
errorCode: { type: [integer, "null"], description: 'Meta WhatsApp error code (e.g. 131049 for antispam, 131021 for invalid phone, 131026 for re-engagement required). Only populated for status=failed.' }
|
|
35330
35330
|
errorExplanation: { type: [string, "null"], description: 'Plain-language translation of errorCode (e.g. for 131026, that the recipient has likely opted out of marketing messages). Null for unmapped codes; fall back to error.' }
|
|
35331
|
+
errorTraceId: { type: [string, "null"], description: 'Meta trace id (fbtrace_id) for the failed send. Quote this when escalating to Meta Direct Support. Only populated for status=failed on Meta platforms.' }
|
|
35331
35332
|
sentAt: { type: string, format: date-time }
|
|
35332
35333
|
deliveredAt: { type: string, format: date-time }
|
|
35333
35334
|
readAt: { type: string, format: date-time }
|
|
@@ -37071,7 +37072,7 @@ paths:
|
|
|
37071
37072
|
type: string
|
|
37072
37073
|
enum: [LOWEST_COST_WITHOUT_CAP, LOWEST_COST_WITH_BID_CAP, COST_CAP, LOWEST_COST_WITH_MIN_ROAS]
|
|
37073
37074
|
description: "Campaign bid strategy. Meta stores `bid_strategy` alongside the budget, so this REQUIRES `budgetAmount` + `budgetType` on the same request; sending it without a campaign budget is a 400. A campaign carrying a strategy without its `bid_amount` makes every ad set created under it fail with an error that names the ad set (code 100, subcode 1815857), so the bad state is rejected up front rather than accepted. To bid at ad-set level, set the strategy there instead."
|
|
37074
|
-
bidAmount: { type: number, description: "Whole currency units (USD: 5 = $5.00). Required for LOWEST_COST_WITH_BID_CAP and COST_CAP; ignored otherwise." }
|
|
37075
|
+
bidAmount: { type: number, description: "Whole currency units (USD: 5 = $5.00). Required for LOWEST_COST_WITH_BID_CAP and COST_CAP; ignored otherwise. Validated here but NOT stored by Meta: the campaign object has no bid_amount field, only bid_strategy lives on it. The amount takes effect once an ad set joins this campaign (existingCampaignId on POST /v1/ads/create) and supplies its own bidAmount there." }
|
|
37075
37076
|
roasAverageFloor: { type: number, description: "Decimal ROAS multiplier (2.0 = 2.0x). Required for LOWEST_COST_WITH_MIN_ROAS." }
|
|
37076
37077
|
responses:
|
|
37077
37078
|
'201':
|
|
@@ -37596,6 +37597,10 @@ paths:
|
|
|
37596
37597
|
- `LOWEST_COST_WITHOUT_CAP`: no `bidAmount`, no `roasAverageFloor`.
|
|
37597
37598
|
- `LOWEST_COST_WITH_BID_CAP` / `COST_CAP`: `bidAmount` REQUIRED (whole currency units).
|
|
37598
37599
|
- `LOWEST_COST_WITH_MIN_ROAS`: `roasAverageFloor` REQUIRED (decimal multiplier, e.g. 2.0 = 2.0x ROAS).
|
|
37600
|
+
- Meta only: send `bidAmount` WITHOUT `bidStrategy` to change the cap amount on an ad set
|
|
37601
|
+
under a COST_CAP / LOWEST_COST_WITH_BID_CAP parent campaign, leaving the strategy itself
|
|
37602
|
+
(inherited from the campaign) untouched. `roasAverageFloor` without `bidStrategy` is
|
|
37603
|
+
rejected (it has no meaning outside LOWEST_COST_WITH_MIN_ROAS).
|
|
37599
37604
|
|
|
37600
37605
|
Delivery settings are validated by Meta against the campaign objective;
|
|
37601
37606
|
incompatible combinations (e.g. a billingEvent the optimization goal
|
|
@@ -37641,7 +37646,10 @@ paths:
|
|
|
37641
37646
|
description: |
|
|
37642
37647
|
Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when
|
|
37643
37648
|
bidStrategy is LOWEST_COST_WITH_BID_CAP or COST_CAP. Internally converted to Meta's
|
|
37644
|
-
smallest-denomination integer, or (on OpenAI) to micros (× 1,000,000).
|
|
37649
|
+
smallest-denomination integer, or (on OpenAI) to micros (× 1,000,000). Meta only:
|
|
37650
|
+
may be sent alone, WITHOUT bidStrategy, to update the cap amount on an ad set whose
|
|
37651
|
+
parent campaign is COST_CAP or LOWEST_COST_WITH_BID_CAP (the strategy is inherited
|
|
37652
|
+
from the campaign and is left untouched).
|
|
37645
37653
|
roasAverageFloor:
|
|
37646
37654
|
type: number
|
|
37647
37655
|
description: |
|
|
@@ -40901,7 +40909,14 @@ paths:
|
|
|
40901
40909
|
Deprecated: send it inside `platformSpecificData` instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400.
|
|
40902
40910
|
|
|
40903
40911
|
Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when
|
|
40904
|
-
`bidStrategy` is `LOWEST_COST_WITH_BID_CAP` or `COST_CAP`.
|
|
40912
|
+
`bidStrategy` is `LOWEST_COST_WITH_BID_CAP` or `COST_CAP`. Meta only: sending
|
|
40913
|
+
`bidAmount` WITHOUT `bidStrategy` requires `existingCampaignId` (400 otherwise),
|
|
40914
|
+
and sets the new ad set's cap under the joined campaign's COST_CAP /
|
|
40915
|
+
LOWEST_COST_WITH_BID_CAP parent. The strategy itself is inherited from the
|
|
40916
|
+
campaign. Restating bidStrategy here is accepted but has no effect on the ad set.
|
|
40917
|
+
|
|
40918
|
+
Rejected with 400 in `adSetId` attach mode: that shape inherits its cap from
|
|
40919
|
+
the platform. Use `PUT /v1/ads/ad-sets/{adSetId}` there instead.
|
|
40905
40920
|
roasAverageFloor:
|
|
40906
40921
|
type: number
|
|
40907
40922
|
deprecated: true
|
|
@@ -40909,8 +40924,11 @@ paths:
|
|
|
40909
40924
|
Deprecated: send it inside `platformSpecificData` instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400.
|
|
40910
40925
|
|
|
40911
40926
|
Minimum ROAS as a decimal multiplier (e.g. 2.0 = 2.0x ROAS). Required when
|
|
40912
|
-
`bidStrategy` is `LOWEST_COST_WITH_MIN_ROAS`.
|
|
40913
|
-
|
|
40927
|
+
`bidStrategy` is `LOWEST_COST_WITH_MIN_ROAS`. Sending it without `bidStrategy`
|
|
40928
|
+
is a 400. Sent to Meta as
|
|
40929
|
+
`bid_constraints.roas_average_floor` × 10000. Known gap: a CBO campaign's
|
|
40930
|
+
ROAS floor lives on the campaign only (set via `POST /v1/ads/campaigns`);
|
|
40931
|
+
there is no supported way to set it while joining a CBO campaign here.
|
|
40914
40932
|
valueRuleSetId:
|
|
40915
40933
|
type: string
|
|
40916
40934
|
pattern: '^\d+$'
|
|
@@ -40946,7 +40964,8 @@ paths:
|
|
|
40946
40964
|
**Meta**: `bidStrategy`, `bidAmount` and `roasAverageFloor` may be
|
|
40947
40965
|
sent here instead of at the root — the preferred home going forward.
|
|
40948
40966
|
Sending the bid fields in BOTH places returns a 400
|
|
40949
|
-
(`mutually_exclusive_fields`)
|
|
40967
|
+
(`mutually_exclusive_fields`), and sending any of them in
|
|
40968
|
+
`adSetId` attach mode is a 400 too (the ad set already has its bid).
|
|
40950
40969
|
oneOf:
|
|
40951
40970
|
- $ref: '#/components/schemas/LinkedInAdsPlatformData'
|
|
40952
40971
|
- $ref: '#/components/schemas/MetaAdsPlatformData'
|
|
@@ -329,7 +329,7 @@ describe 'AdCampaignsApi' do
|
|
|
329
329
|
|
|
330
330
|
# unit tests for update_ad_set
|
|
331
331
|
# Update an ad set
|
|
332
|
-
# Ad-set-level writes. Use this for ABO budget updates, ad-set-scoped pause/resume, bid-strategy edits, Meta value-rule-set attach/detach, and Meta-only post-launch delivery settings via `platformSpecificData`. At least one updatable field is required. Value rule sets (Meta only, see `/v1/ads/value-rule-sets`): - ATTACH or REPLACE: send `valueRuleSetId`. Attachment is driven by the id's presence, so `valueRulesApplied: true` is optional. Sending a different id replaces the previous association; there is no separate replace call. - DETACH: send `valueRulesApplied: false` and OMIT `valueRuleSetId`. - Sending `valueRulesApplied: false` TOGETHER with `valueRuleSetId` returns 400 `mutually_exclusive_fields`. This is deliberate: Meta attaches the rule set whenever `value_rule_set_id` is present, even with `value_rules_applied` false, so echoing stored state while asking to detach would silently keep the bid adjustments live. - Eligibility: only ad sets on `LOWEST_COST_WITHOUT_CAP` or `COST_CAP`. Meta rejects the rest server-side. - Read back with `GET /v1/ads/ad-sets/{adSetId}?fields=value_rule_set_id`. Meta does not document `value_rules_applied` as a readable ad-set field, so the boolean cannot be read back. Bid strategy compatibility (per Meta's spec): - `LOWEST_COST_WITHOUT_CAP`: no `bidAmount`, no `roasAverageFloor`. - `LOWEST_COST_WITH_BID_CAP` / `COST_CAP`: `bidAmount` REQUIRED (whole currency units). - `LOWEST_COST_WITH_MIN_ROAS`: `roasAverageFloor` REQUIRED (decimal multiplier, e.g. 2.0 = 2.0x ROAS). Delivery settings are validated by Meta against the campaign objective; incompatible combinations (e.g. a billingEvent the optimization goal doesn't allow) surface as 400s from Meta. When updating `budget` on an ABO campaign: if the parent campaign is CBO, the response is 409 with code BUDGET_LEVEL_MISMATCH — route to PUT /v1/ads/campaigns/{campaignId} instead.
|
|
332
|
+
# Ad-set-level writes. Use this for ABO budget updates, ad-set-scoped pause/resume, bid-strategy edits, Meta value-rule-set attach/detach, and Meta-only post-launch delivery settings via `platformSpecificData`. At least one updatable field is required. Value rule sets (Meta only, see `/v1/ads/value-rule-sets`): - ATTACH or REPLACE: send `valueRuleSetId`. Attachment is driven by the id's presence, so `valueRulesApplied: true` is optional. Sending a different id replaces the previous association; there is no separate replace call. - DETACH: send `valueRulesApplied: false` and OMIT `valueRuleSetId`. - Sending `valueRulesApplied: false` TOGETHER with `valueRuleSetId` returns 400 `mutually_exclusive_fields`. This is deliberate: Meta attaches the rule set whenever `value_rule_set_id` is present, even with `value_rules_applied` false, so echoing stored state while asking to detach would silently keep the bid adjustments live. - Eligibility: only ad sets on `LOWEST_COST_WITHOUT_CAP` or `COST_CAP`. Meta rejects the rest server-side. - Read back with `GET /v1/ads/ad-sets/{adSetId}?fields=value_rule_set_id`. Meta does not document `value_rules_applied` as a readable ad-set field, so the boolean cannot be read back. Bid strategy compatibility (per Meta's spec): - `LOWEST_COST_WITHOUT_CAP`: no `bidAmount`, no `roasAverageFloor`. - `LOWEST_COST_WITH_BID_CAP` / `COST_CAP`: `bidAmount` REQUIRED (whole currency units). - `LOWEST_COST_WITH_MIN_ROAS`: `roasAverageFloor` REQUIRED (decimal multiplier, e.g. 2.0 = 2.0x ROAS). - Meta only: send `bidAmount` WITHOUT `bidStrategy` to change the cap amount on an ad set under a COST_CAP / LOWEST_COST_WITH_BID_CAP parent campaign, leaving the strategy itself (inherited from the campaign) untouched. `roasAverageFloor` without `bidStrategy` is rejected (it has no meaning outside LOWEST_COST_WITH_MIN_ROAS). Delivery settings are validated by Meta against the campaign objective; incompatible combinations (e.g. a billingEvent the optimization goal doesn't allow) surface as 400s from Meta. When updating `budget` on an ABO campaign: if the parent campaign is CBO, the response is 409 with code BUDGET_LEVEL_MISMATCH — route to PUT /v1/ads/campaigns/{campaignId} instead.
|
|
333
333
|
# @param ad_set_id Platform ad set ID
|
|
334
334
|
# @param update_ad_set_request
|
|
335
335
|
# @param [Hash] opts the optional parameters
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
#Zernio API
|
|
3
|
+
|
|
4
|
+
#API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api
|
|
5
|
+
|
|
6
|
+
The version of the OpenAPI document: 1.0.4
|
|
7
|
+
Contact: support@zernio.com
|
|
8
|
+
Generated by: https://openapi-generator.tech
|
|
9
|
+
Generator version: 7.19.0
|
|
10
|
+
|
|
11
|
+
=end
|
|
12
|
+
|
|
13
|
+
require 'spec_helper'
|
|
14
|
+
require 'json'
|
|
15
|
+
require 'date'
|
|
16
|
+
|
|
17
|
+
# Unit tests for Zernio::CreateStandaloneAdRequestPlatformSpecificData
|
|
18
|
+
# Automatically generated by openapi-generator (https://openapi-generator.tech)
|
|
19
|
+
# Please update as you see appropriate
|
|
20
|
+
describe Zernio::CreateStandaloneAdRequestPlatformSpecificData do
|
|
21
|
+
describe '.openapi_one_of' do
|
|
22
|
+
it 'lists the items referenced in the oneOf array' do
|
|
23
|
+
expect(described_class.openapi_one_of).to_not be_empty
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe '.build' do
|
|
28
|
+
it 'returns the correct model' do
|
|
29
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -91,6 +91,12 @@ describe Zernio::ListBroadcastRecipients200ResponseRecipientsInner do
|
|
|
91
91
|
end
|
|
92
92
|
end
|
|
93
93
|
|
|
94
|
+
describe 'test attribute "error_trace_id"' do
|
|
95
|
+
it 'should work' do
|
|
96
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
94
100
|
describe 'test attribute "sent_at"' do
|
|
95
101
|
it 'should work' do
|
|
96
102
|
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: zernio-sdk
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.710
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- OpenAPI-Generator
|
|
@@ -348,6 +348,7 @@ files:
|
|
|
348
348
|
- docs/CreateStandaloneAdRequestPlacementAssetsRulesInner.md
|
|
349
349
|
- docs/CreateStandaloneAdRequestPlacementAssetsRulesInnerPlacements.md
|
|
350
350
|
- docs/CreateStandaloneAdRequestPlacements.md
|
|
351
|
+
- docs/CreateStandaloneAdRequestPlatformSpecificData.md
|
|
351
352
|
- docs/CreateStandaloneAdRequestPromotedObject.md
|
|
352
353
|
- docs/CreateStandaloneAdRequestRegionsInner.md
|
|
353
354
|
- docs/CreateStandaloneAdRequestTracking.md
|
|
@@ -2072,6 +2073,7 @@ files:
|
|
|
2072
2073
|
- lib/zernio-sdk/models/create_standalone_ad_request_placement_assets_rules_inner.rb
|
|
2073
2074
|
- lib/zernio-sdk/models/create_standalone_ad_request_placement_assets_rules_inner_placements.rb
|
|
2074
2075
|
- lib/zernio-sdk/models/create_standalone_ad_request_placements.rb
|
|
2076
|
+
- lib/zernio-sdk/models/create_standalone_ad_request_platform_specific_data.rb
|
|
2075
2077
|
- lib/zernio-sdk/models/create_standalone_ad_request_promoted_object.rb
|
|
2076
2078
|
- lib/zernio-sdk/models/create_standalone_ad_request_regions_inner.rb
|
|
2077
2079
|
- lib/zernio-sdk/models/create_standalone_ad_request_tracking.rb
|
|
@@ -3744,6 +3746,7 @@ files:
|
|
|
3744
3746
|
- spec/models/create_standalone_ad_request_placement_assets_rules_inner_spec.rb
|
|
3745
3747
|
- spec/models/create_standalone_ad_request_placement_assets_spec.rb
|
|
3746
3748
|
- spec/models/create_standalone_ad_request_placements_spec.rb
|
|
3749
|
+
- spec/models/create_standalone_ad_request_platform_specific_data_spec.rb
|
|
3747
3750
|
- spec/models/create_standalone_ad_request_promoted_object_spec.rb
|
|
3748
3751
|
- spec/models/create_standalone_ad_request_regions_inner_spec.rb
|
|
3749
3752
|
- spec/models/create_standalone_ad_request_spec.rb
|
|
@@ -5851,6 +5854,7 @@ test_files:
|
|
|
5851
5854
|
- spec/models/get_google_business_reviews200_response_reviews_inner_reviewer_spec.rb
|
|
5852
5855
|
- spec/models/delete_inbox_comment200_response_spec.rb
|
|
5853
5856
|
- spec/models/update_inbox_conversation_request_spec.rb
|
|
5857
|
+
- spec/models/create_standalone_ad_request_platform_specific_data_spec.rb
|
|
5854
5858
|
- spec/models/send_inbox_message_request_spec.rb
|
|
5855
5859
|
- spec/models/webhook_payload_comment_comment_author_instagram_profile_spec.rb
|
|
5856
5860
|
- spec/models/search_tweets200_response_tweets_inner_author_spec.rb
|