late-sdk 0.0.817 → 0.0.819

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d29b0cbbf50db66d905333a2e8fab599ca23fecd7969776b71fb4d807438b96f
4
- data.tar.gz: 438af5ae30990214dd632d4755009c50bc48515c6a9dbb67ded13fbfc378d0f0
3
+ metadata.gz: 48642ee1a05e3aba045bae3b8576d01c44f9634ce367147070d3a0a52ea7659e
4
+ data.tar.gz: 5a8367a4fc6adbb050901860aab845ac2de7c0502df4b2ab32cc87e14244d9ec
5
5
  SHA512:
6
- metadata.gz: 0bb4b19f6b93a0ba4bdb64c50fa4b1dc5492abb6b34053eb8bd84a15ec1645ded030723a811d066825d7f01213bbbabc8909c29040f586770235d4e69055c71c
7
- data.tar.gz: c51f482669a348335381d23a6a1d995359a208959bd0e35c978936201fa22cf6d3492ed771869cacce6b2c409e512e98c9e47a530ed2716756668d0a6e7bdda6
6
+ metadata.gz: 5092c3e4bebde157d4d8277d2614b9b194a7b858eebdef066217e2e65f79bc9746809753c0e0cd0857dced691e86447c8a2471a5445aa320f62b0e6aa75c006f
7
+ data.tar.gz: 5227df00afbc3c6e75fada2691b0b7783fcba69eeff894064dcd38e3f1eb15f6162717858ec2c2a8807e2994545c033621f15d6daf35143e30308b9299d86beb
@@ -249,7 +249,7 @@ end
249
249
 
250
250
  Create a standalone campaign
251
251
 
252
- Creates a campaign WITHOUT its first ad set / ad (the ODAX shell only). Ad sets join it later via `existingCampaignId` on the create endpoints. A budget here is campaign-level (CBO) by definition; omit it for ABO (each ad set carries its own budget). Created `PAUSED` unless `status: ACTIVE`. The campaign materializes in `/v1/ads/tree` via the next sync discovery pass. **Idempotency:** send an `Idempotency-Key` header to make retries safe.
252
+ Creates a campaign WITHOUT its first ad set / ad, on the platform of the given `accountId`. Ad sets join it later via `existingCampaignId` on the create endpoints. Platform notes: on Meta a budget here is campaign-level (CBO) by definition; omit it for ABO (each ad set carries its own budget), and `specialAdCategories` / `bidStrategy` are Meta-only (400 elsewhere). Google, X and OpenAI require a budget (422 without one; OpenAI accepts only `budgetType: lifetime`). LinkedIn creates the campaign GROUP (our campaign level) and rejects a budget, which lives on the campaign (ad set) level there; it comes back `status: DRAFT`. TikTok campaigns are created without a status and report `ENABLE`. Created `PAUSED` unless `status: ACTIVE` where the platform supports it. **Idempotency:** send an `Idempotency-Key` header to make retries safe.
253
253
 
254
254
  ### Examples
255
255
 
@@ -4,8 +4,8 @@
4
4
 
5
5
  | Name | Type | Description | Notes |
6
6
  | ---- | ---- | ----------- | ----- |
7
- | **account_id** | **String** | Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token. | |
8
- | **ad_account_id** | **String** | Meta ad account id (act_<n>). | |
7
+ | **account_id** | **String** | Zernio SocialAccount id (posting or ads variant); its platform decides where the campaign is created. | |
8
+ | **ad_account_id** | **String** | Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...). | |
9
9
  | **name** | **String** | | |
10
10
  | **goal** | **String** | Mapped to the ODAX objective (same mapping as POST /v1/ads/create). | |
11
11
  | **special_ad_categories** | **Array<String>** | | [optional] |
@@ -5,7 +5,7 @@
5
5
  | Name | Type | Description | Notes |
6
6
  | ---- | ---- | ----------- | ----- |
7
7
  | **account_id** | **String** | Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token and Page. | |
8
- | **ad_account_id** | **String** | Meta ad account id (act_<n>). | |
8
+ | **ad_account_id** | **String** | Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...). | |
9
9
  | **headline** | **String** | | |
10
10
  | **body** | **String** | Primary text | |
11
11
  | **description** | **String** | Link description below the headline; omitted = Meta scrapes the destination's OG description. | [optional] |
@@ -4,7 +4,7 @@
4
4
 
5
5
  | Name | Type | Description | Notes |
6
6
  | ---- | ---- | ----------- | ----- |
7
- | **ad_account_id** | **String** | Meta ad account id (act_<n>). | |
7
+ | **ad_account_id** | **String** | Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...). | |
8
8
  | **name** | **String** | Also the reuse key, together with pixelId. | |
9
9
  | **pixel_id** | **String** | Meta pixel id (event_source_id). From GET /v1/accounts/{accountId}/tracking-tags. | |
10
10
  | **custom_event_type** | **String** | Meta custom_event_type, e.g. LEAD, PURCHASE, OTHER. | |
@@ -5,7 +5,7 @@
5
5
  | Name | Type | Description | Notes |
6
6
  | ---- | ---- | ----------- | ----- |
7
7
  | **account_id** | **String** | Zernio SocialAccount id (posting or ads variant). | |
8
- | **ad_account_id** | **String** | Meta ad account id (act_<n>). | |
8
+ | **ad_account_id** | **String** | Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...). | |
9
9
  | **budget_amount** | **Float** | Whole currency units. Exactly one of budgetAmount / reach. | [optional] |
10
10
  | **reach** | **Integer** | Target unique reach. Exactly one of budgetAmount / reach. | [optional] |
11
11
  | **start_date** | **Time** | Campaign window start (must be in the future). | |
@@ -4,8 +4,8 @@
4
4
 
5
5
  | Name | Type | Description | Notes |
6
6
  | ---- | ---- | ----------- | ----- |
7
- | **account_id** | **String** | Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token. | |
8
- | **ad_account_id** | **String** | Meta ad account id (act_<n>). | |
7
+ | **account_id** | **String** | Zernio SocialAccount id (posting or ads variant); its platform decides where the campaign is created. | |
8
+ | **ad_account_id** | **String** | Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...). | |
9
9
  | **name** | **String** | | |
10
10
  | **rules** | [**Array<ValueRule>**](ValueRule.md) | Evaluated in order; the first matching rule wins. | |
11
11
 
@@ -5,7 +5,7 @@
5
5
  | Name | Type | Description | Notes |
6
6
  | ---- | ---- | ----------- | ----- |
7
7
  | **account_id** | **String** | Zernio SocialAccount id used to resolve the Meta token. | |
8
- | **ad_account_id** | **String** | Meta ad account id (act_<n>). | |
8
+ | **ad_account_id** | **String** | Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...). | |
9
9
  | **formats** | **Array<String>** | Meta ad_format values, one preview per format. Defaults to [DESKTOP_FEED_STANDARD]. | [optional] |
10
10
  | **existing_creative_id** | **String** | Preview an existing ad-account creative by id. Mutually exclusive with creativeSpec. | [optional] |
11
11
  | **creative_spec** | **Hash<String, Object>** | Raw Meta creative spec forwarded verbatim to /generatepreviews. Mutually exclusive with existingCreativeId. | [optional] |
@@ -4,7 +4,7 @@
4
4
 
5
5
  | Name | Type | Description | Notes |
6
6
  | ---- | ---- | ----------- | ----- |
7
- | **account_id** | **String** | Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token. | |
7
+ | **account_id** | **String** | Zernio SocialAccount id (posting or ads variant); its platform decides where the campaign is created. | |
8
8
  | **name** | **String** | | |
9
9
 
10
10
  ## Example
@@ -4,7 +4,7 @@
4
4
 
5
5
  | Name | Type | Description | Notes |
6
6
  | ---- | ---- | ----------- | ----- |
7
- | **account_id** | **String** | Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token. | |
7
+ | **account_id** | **String** | Zernio SocialAccount id (posting or ads variant); its platform decides where the campaign is created. | |
8
8
  | **name** | **String** | Required: the update replaces the whole set. | |
9
9
  | **rules** | [**Array<ValueRule>**](ValueRule.md) | The COMPLETE rule list. Omitting a rule deletes it on Meta. | |
10
10
 
@@ -4,8 +4,8 @@
4
4
 
5
5
  | Name | Type | Description | Notes |
6
6
  | ---- | ---- | ----------- | ----- |
7
- | **account_id** | **String** | Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token. | |
8
- | **ad_account_id** | **String** | Meta ad account id (act_<n>). | |
7
+ | **account_id** | **String** | Zernio SocialAccount id (posting or ads variant); its platform decides where the campaign is created. | |
8
+ | **ad_account_id** | **String** | Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...). | |
9
9
  | **image_base64** | **String** | Raw base64 image bytes, or a full data URL (the data:image/...;base64, prefix is stripped). | |
10
10
  | **filename** | **String** | Optional filename shown in Meta's image library. Defaults to ad_image.jpg. | [optional] |
11
11
 
@@ -4,8 +4,8 @@
4
4
 
5
5
  | Name | Type | Description | Notes |
6
6
  | ---- | ---- | ----------- | ----- |
7
- | **account_id** | **String** | Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token. | |
8
- | **ad_account_id** | **String** | Meta ad account id (act_<n>). | |
7
+ | **account_id** | **String** | Zernio SocialAccount id (posting or ads variant); its platform decides where the campaign is created. | |
8
+ | **ad_account_id** | **String** | Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...). | |
9
9
  | **video_url** | **String** | Public https URL of the video; downloaded server-side (SSRF-guarded) before chunked upload. Provide exactly one of videoUrl or videoBase64. | [optional] |
10
10
  | **video_base64** | **String** | Raw base64 video bytes, or a full data URL (the data:video/...;base64, prefix is stripped). Capped by Vercel's body limit (~4.5 MB payload). Provide exactly one of videoUrl or videoBase64. | [optional] |
11
11
  | **filename** | **String** | Optional filename shown alongside the upload session. Applied only when uploading via videoBase64. | [optional] |
@@ -237,7 +237,7 @@ module Zernio
237
237
  end
238
238
 
239
239
  # Create a standalone campaign
240
- # Creates a campaign WITHOUT its first ad set / ad (the ODAX shell only). Ad sets join it later via `existingCampaignId` on the create endpoints. A budget here is campaign-level (CBO) by definition; omit it for ABO (each ad set carries its own budget). Created `PAUSED` unless `status: ACTIVE`. The campaign materializes in `/v1/ads/tree` via the next sync discovery pass. **Idempotency:** send an `Idempotency-Key` header to make retries safe.
240
+ # Creates a campaign WITHOUT its first ad set / ad, on the platform of the given `accountId`. Ad sets join it later via `existingCampaignId` on the create endpoints. Platform notes: on Meta a budget here is campaign-level (CBO) by definition; omit it for ABO (each ad set carries its own budget), and `specialAdCategories` / `bidStrategy` are Meta-only (400 elsewhere). Google, X and OpenAI require a budget (422 without one; OpenAI accepts only `budgetType: lifetime`). LinkedIn creates the campaign GROUP (our campaign level) and rejects a budget, which lives on the campaign (ad set) level there; it comes back `status: DRAFT`. TikTok campaigns are created without a status and report `ENABLE`. Created `PAUSED` unless `status: ACTIVE` where the platform supports it. **Idempotency:** send an `Idempotency-Key` header to make retries safe.
241
241
  # @param create_ad_campaign_request [CreateAdCampaignRequest]
242
242
  # @param [Hash] opts the optional parameters
243
243
  # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. Only 2xx responses are stored, so a request that failed with a 4xx can be retried with a corrected body under the SAME key.
@@ -248,7 +248,7 @@ module Zernio
248
248
  end
249
249
 
250
250
  # Create a standalone campaign
251
- # Creates a campaign WITHOUT its first ad set / ad (the ODAX shell only). Ad sets join it later via `existingCampaignId` on the create endpoints. A budget here is campaign-level (CBO) by definition; omit it for ABO (each ad set carries its own budget). Created `PAUSED` unless `status: ACTIVE`. The campaign materializes in `/v1/ads/tree` via the next sync discovery pass. **Idempotency:** send an `Idempotency-Key` header to make retries safe.
251
+ # Creates a campaign WITHOUT its first ad set / ad, on the platform of the given `accountId`. Ad sets join it later via `existingCampaignId` on the create endpoints. Platform notes: on Meta a budget here is campaign-level (CBO) by definition; omit it for ABO (each ad set carries its own budget), and `specialAdCategories` / `bidStrategy` are Meta-only (400 elsewhere). Google, X and OpenAI require a budget (422 without one; OpenAI accepts only `budgetType: lifetime`). LinkedIn creates the campaign GROUP (our campaign level) and rejects a budget, which lives on the campaign (ad set) level there; it comes back `status: DRAFT`. TikTok campaigns are created without a status and report `ENABLE`. Created `PAUSED` unless `status: ACTIVE` where the platform supports it. **Idempotency:** send an `Idempotency-Key` header to make retries safe.
252
252
  # @param create_ad_campaign_request [CreateAdCampaignRequest]
253
253
  # @param [Hash] opts the optional parameters
254
254
  # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. Only 2xx responses are stored, so a request that failed with a 4xx can be retried with a corrected body under the SAME key.
@@ -15,10 +15,10 @@ require 'time'
15
15
 
16
16
  module Zernio
17
17
  class CreateAdCampaignRequest < ApiModelBase
18
- # Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token.
18
+ # Zernio SocialAccount id (posting or ads variant); its platform decides where the campaign is created.
19
19
  attr_accessor :account_id
20
20
 
21
- # Meta ad account id (act_<n>).
21
+ # Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...).
22
22
  attr_accessor :ad_account_id
23
23
 
24
24
  attr_accessor :name
@@ -18,7 +18,7 @@ module Zernio
18
18
  # Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token and Page.
19
19
  attr_accessor :account_id
20
20
 
21
- # Meta ad account id (act_<n>).
21
+ # Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...).
22
22
  attr_accessor :ad_account_id
23
23
 
24
24
  attr_accessor :headline
@@ -15,7 +15,7 @@ require 'time'
15
15
 
16
16
  module Zernio
17
17
  class CreateCustomConversionRequest < ApiModelBase
18
- # Meta ad account id (act_<n>).
18
+ # Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...).
19
19
  attr_accessor :ad_account_id
20
20
 
21
21
  # Also the reuse key, together with pixelId.
@@ -18,7 +18,7 @@ module Zernio
18
18
  # Zernio SocialAccount id (posting or ads variant).
19
19
  attr_accessor :account_id
20
20
 
21
- # Meta ad account id (act_<n>).
21
+ # Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...).
22
22
  attr_accessor :ad_account_id
23
23
 
24
24
  # Whole currency units. Exactly one of budgetAmount / reach.
@@ -15,10 +15,10 @@ require 'time'
15
15
 
16
16
  module Zernio
17
17
  class CreateValueRuleSetRequest < ApiModelBase
18
- # Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token.
18
+ # Zernio SocialAccount id (posting or ads variant); its platform decides where the campaign is created.
19
19
  attr_accessor :account_id
20
20
 
21
- # Meta ad account id (act_<n>).
21
+ # Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...).
22
22
  attr_accessor :ad_account_id
23
23
 
24
24
  attr_accessor :name
@@ -18,7 +18,7 @@ module Zernio
18
18
  # Zernio SocialAccount id used to resolve the Meta token.
19
19
  attr_accessor :account_id
20
20
 
21
- # Meta ad account id (act_<n>).
21
+ # Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...).
22
22
  attr_accessor :ad_account_id
23
23
 
24
24
  # Meta ad_format values, one preview per format. Defaults to [DESKTOP_FEED_STANDARD].
@@ -15,7 +15,7 @@ require 'time'
15
15
 
16
16
  module Zernio
17
17
  class UpdateAdCreativeRequest < ApiModelBase
18
- # Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token.
18
+ # Zernio SocialAccount id (posting or ads variant); its platform decides where the campaign is created.
19
19
  attr_accessor :account_id
20
20
 
21
21
  attr_accessor :name
@@ -15,7 +15,7 @@ require 'time'
15
15
 
16
16
  module Zernio
17
17
  class UpdateValueRuleSetRequest < ApiModelBase
18
- # Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token.
18
+ # Zernio SocialAccount id (posting or ads variant); its platform decides where the campaign is created.
19
19
  attr_accessor :account_id
20
20
 
21
21
  # Required: the update replaces the whole set.
@@ -15,10 +15,10 @@ require 'time'
15
15
 
16
16
  module Zernio
17
17
  class UploadAdImageRequest < ApiModelBase
18
- # Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token.
18
+ # Zernio SocialAccount id (posting or ads variant); its platform decides where the campaign is created.
19
19
  attr_accessor :account_id
20
20
 
21
- # Meta ad account id (act_<n>).
21
+ # Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...).
22
22
  attr_accessor :ad_account_id
23
23
 
24
24
  # Raw base64 image bytes, or a full data URL (the data:image/...;base64, prefix is stripped).
@@ -15,10 +15,10 @@ require 'time'
15
15
 
16
16
  module Zernio
17
17
  class UploadAdVideoRequest < ApiModelBase
18
- # Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token.
18
+ # Zernio SocialAccount id (posting or ads variant); its platform decides where the campaign is created.
19
19
  attr_accessor :account_id
20
20
 
21
- # Meta ad account id (act_<n>).
21
+ # Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...).
22
22
  attr_accessor :ad_account_id
23
23
 
24
24
  # Public https URL of the video; downloaded server-side (SSRF-guarded) before chunked upload. Provide exactly one of videoUrl or videoBase64.
@@ -11,5 +11,5 @@ Generator version: 7.19.0
11
11
  =end
12
12
 
13
13
  module Zernio
14
- VERSION = '0.0.817'
14
+ VERSION = '0.0.819'
15
15
  end
data/openapi.yaml CHANGED
@@ -40605,14 +40605,19 @@ paths:
40605
40605
  x-resource-group: "ads"
40606
40606
  operationId: createAdCampaign
40607
40607
  tags: ["Ad Campaigns"]
40608
- x-platforms: ["meta"]
40608
+ x-platforms: ["meta", "google", "linkedin", "tiktok", "x", "pinterest", "openai"]
40609
40609
  summary: Create a standalone campaign
40610
40610
  description: |-
40611
- Creates a campaign WITHOUT its first ad set / ad (the ODAX shell only). Ad sets join it
40612
- later via `existingCampaignId` on the create endpoints. A budget here is campaign-level
40613
- (CBO) by definition; omit it for ABO (each ad set carries its own budget). Created
40614
- `PAUSED` unless `status: ACTIVE`. The campaign materializes in `/v1/ads/tree` via the
40615
- next sync discovery pass.
40611
+ Creates a campaign WITHOUT its first ad set / ad, on the platform of the given
40612
+ `accountId`. Ad sets join it later via `existingCampaignId` on the create endpoints.
40613
+ Platform notes: on Meta a budget here is campaign-level (CBO) by definition; omit it
40614
+ for ABO (each ad set carries its own budget), and `specialAdCategories` /
40615
+ `bidStrategy` are Meta-only (400 elsewhere). Google, X and OpenAI require a budget
40616
+ (422 without one; OpenAI accepts only `budgetType: lifetime`). LinkedIn creates the
40617
+ campaign GROUP (our campaign level) and rejects a budget, which lives on the
40618
+ campaign (ad set) level there; it comes back `status: DRAFT`. TikTok campaigns are
40619
+ created without a status and report `ENABLE`. Created `PAUSED` unless
40620
+ `status: ACTIVE` where the platform supports it.
40616
40621
 
40617
40622
  **Idempotency:** send an `Idempotency-Key` header to make retries safe.
40618
40623
  security:
@@ -40636,8 +40641,8 @@ paths:
40636
40641
  type: object
40637
40642
  required: [accountId, adAccountId, name, goal]
40638
40643
  properties:
40639
- accountId: { type: string, description: "Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token." }
40640
- adAccountId: { type: string, description: "Meta ad account id (act_<n>)." }
40644
+ accountId: { type: string, description: "Zernio SocialAccount id (posting or ads variant); its platform decides where the campaign is created." }
40645
+ adAccountId: { type: string, description: "Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...)." }
40641
40646
  name: { type: string, maxLength: 255 }
40642
40647
  goal:
40643
40648
  type: string
@@ -40722,6 +40727,8 @@ paths:
40722
40727
  '400':
40723
40728
  description: Invalid input or campaign spans multiple social accounts
40724
40729
  '401': { $ref: '#/components/responses/Unauthorized' }
40730
+ '403':
40731
+ description: 'Returned with code `ads_allowance_exceeded` when the team has no payment method on file and has reached the 500 free live ads: add a card to resume.'
40725
40732
  '404':
40726
40733
  description: No ads found for this campaign
40727
40734
 
@@ -40805,6 +40812,8 @@ paths:
40805
40812
  platformSpecificData: { type: object }
40806
40813
  '400': { description: "Invalid input, or a field the resolved platform does not support at the campaign level (see the support table)" }
40807
40814
  '401': { $ref: '#/components/responses/Unauthorized' }
40815
+ '403':
40816
+ description: 'Returned with code `ads_allowance_exceeded` when the team has no payment method on file and has reached the 500 free live ads: add a card to resume.'
40808
40817
  '404': { description: Campaign not found }
40809
40818
  '409': { description: "Campaign is ABO — route to /v1/ads/ad-sets/{adSetId} instead" }
40810
40819
  '501': { description: Operation not supported on this platform }
@@ -40914,6 +40923,8 @@ paths:
40914
40923
  '400': { description: Invalid input }
40915
40924
  '401': { $ref: '#/components/responses/Unauthorized' }
40916
40925
 
40926
+ '403':
40927
+ description: 'Returned with code `ads_allowance_exceeded` when the team has no payment method on file and has reached the 500 free live ads: add a card to resume.'
40917
40928
  /v1/ads/campaigns/{campaignId}/duplicate:
40918
40929
  post:
40919
40930
  x-resource-group: "ads"
@@ -41008,6 +41019,8 @@ paths:
41008
41019
  description: Platform-native response from the copy endpoint (Meta includes ad_object_ids for child copies)
41009
41020
  '400': { description: Invalid input }
41010
41021
  '401': { $ref: '#/components/responses/Unauthorized' }
41022
+ '403':
41023
+ description: 'Returned with code `ads_allowance_exceeded` when the team has no payment method on file and has reached the 500 free live ads: add a card to resume.'
41011
41024
  '404': { description: Source campaign not found }
41012
41025
  '501': { description: Operation not supported on this platform }
41013
41026
 
@@ -41069,6 +41082,8 @@ paths:
41069
41082
  raw: { type: object, description: Meta's native copy response (includes ad_object_ids for child copies) }
41070
41083
  '400': { description: Invalid input }
41071
41084
  '401': { $ref: '#/components/responses/Unauthorized' }
41085
+ '403':
41086
+ description: 'Returned with code `ads_allowance_exceeded` when the team has no payment method on file and has reached the 500 free live ads: add a card to resume.'
41072
41087
  '404': { description: Source ad set not found }
41073
41088
  '501': { description: Only supported on Meta (facebook/instagram) }
41074
41089
 
@@ -41124,6 +41139,8 @@ paths:
41124
41139
  raw: { type: object }
41125
41140
  '400': { description: Invalid input }
41126
41141
  '401': { $ref: '#/components/responses/Unauthorized' }
41142
+ '403':
41143
+ description: 'Returned with code `ads_allowance_exceeded` when the team has no payment method on file and has reached the 500 free live ads: add a card to resume.'
41127
41144
  '404': { description: Ad not found }
41128
41145
  '501': { description: Only supported on Meta (facebook/instagram) }
41129
41146
 
@@ -41311,6 +41328,8 @@ paths:
41311
41328
  platformSpecificData: { type: object }
41312
41329
  '400': { description: Invalid input }
41313
41330
  '401': { $ref: '#/components/responses/Unauthorized' }
41331
+ '403':
41332
+ description: 'Returned with code `ads_allowance_exceeded` when the team has no payment method on file and has reached the 500 free live ads: add a card to resume.'
41314
41333
  '404': { description: Ad set not found }
41315
41334
  '409': { description: "Campaign is CBO — route to /v1/ads/campaigns/{campaignId} instead" }
41316
41335
  '422': { description: "bidStrategy is LOWEST_COST_WITH_MIN_ROAS on OpenAI (unsupported: no ROAS-based bidding)" }
@@ -41406,6 +41425,8 @@ paths:
41406
41425
  message: { type: string, description: 'Present only where the platform has no ad-set switch and no child ad was actionable' }
41407
41426
  '400': { description: Invalid input }
41408
41427
  '401': { $ref: '#/components/responses/Unauthorized' }
41428
+ '403':
41429
+ description: 'Returned with code `ads_allowance_exceeded` when the team has no payment method on file and has reached the 500 free live ads: add a card to resume.'
41409
41430
  '404': { description: Ad set not found }
41410
41431
 
41411
41432
  /v1/ads/tree:
@@ -41692,6 +41713,8 @@ paths:
41692
41713
  '400':
41693
41714
  description: 'Invalid status transition, budget below minimum, or a LinkedIn creative update without imageUrl or videoUrl'
41694
41715
  '401': { $ref: '#/components/responses/Unauthorized' }
41716
+ '403':
41717
+ description: 'Returned with code `ads_allowance_exceeded` when the team has no payment method on file and has reached the 500 free live ads: add a card to resume.'
41695
41718
  '404': { $ref: '#/components/responses/NotFound' }
41696
41719
  '501': { description: "targeting or creative not supported on the platform (supported on Meta, TikTok, and LinkedIn)" }
41697
41720
  '502': { description: "Meta accepted the request then failed to produce the media (upload session, chunk transfer, processing timeout, or a response with no image hash). Inspect `platformError.reason`." }
@@ -41762,6 +41785,8 @@ paths:
41762
41785
  message: { type: string, description: "Human-readable summary (present only when skipped)" }
41763
41786
  '400': { description: Invalid input }
41764
41787
  '401': { $ref: '#/components/responses/Unauthorized' }
41788
+ '403':
41789
+ description: 'Returned with code `ads_allowance_exceeded` when the team has no payment method on file and has reached the 500 free live ads: add a card to resume.'
41765
41790
  '404': { description: Ad not found }
41766
41791
 
41767
41792
  /v1/ads/campaigns/{campaignId}/assets:
@@ -41842,6 +41867,8 @@ paths:
41842
41867
  structuredSnippetAssetResourceNames: { type: array, items: { type: string } }
41843
41868
  '400': { description: "Invalid input, Google rejected the assets, an unknown customerId (not one of this connection's Google Ads accounts), or a required customerId missing when the connection has multiple Google Ads accounts" }
41844
41869
  '401': { $ref: '#/components/responses/Unauthorized' }
41870
+ '403':
41871
+ description: 'Returned with code `ads_allowance_exceeded` when the team has no payment method on file and has reached the 500 free live ads: add a card to resume.'
41845
41872
  '422': { description: "No Google Ads customer accounts on this connection. Reconnect Google Ads." }
41846
41873
  '501': { description: Only supported on Google Ads }
41847
41874
 
@@ -41933,7 +41960,7 @@ paths:
41933
41960
  required: [accountId, adAccountId]
41934
41961
  properties:
41935
41962
  accountId: { type: string, description: "Zernio SocialAccount id used to resolve the Meta token." }
41936
- adAccountId: { type: string, description: "Meta ad account id (act_<n>)." }
41963
+ adAccountId: { type: string, description: "Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...)." }
41937
41964
  formats:
41938
41965
  type: array
41939
41966
  minItems: 1
@@ -42488,6 +42515,8 @@ paths:
42488
42515
  responses:
42489
42516
  '200': { description: "Updated" }
42490
42517
  '401': { $ref: '#/components/responses/Unauthorized' }
42518
+ '403':
42519
+ description: 'Returned with code `ads_allowance_exceeded` when the team has no payment method on file and has reached the 500 free live ads: add a card to resume.'
42491
42520
  '404': { description: "Ad not found" }
42492
42521
  '405': { description: "Platform has no click-URL tracking surface" }
42493
42522
  '422': { description: "Meta creative cannot be rebuilt (e.g. placement-customized/asset-feed/dark creative)" }
@@ -42698,7 +42727,7 @@ paths:
42698
42727
  required: [accountId, adAccountId, startDate, endDate]
42699
42728
  properties:
42700
42729
  accountId: { type: string, description: "Zernio SocialAccount id (posting or ads variant)." }
42701
- adAccountId: { type: string, description: "Meta ad account id (act_<n>)." }
42730
+ adAccountId: { type: string, description: "Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...)." }
42702
42731
  budgetAmount: { type: number, description: "Whole currency units. Exactly one of budgetAmount / reach." }
42703
42732
  reach: { type: integer, description: "Target unique reach. Exactly one of budgetAmount / reach." }
42704
42733
  startDate: { type: string, format: date-time, description: "Campaign window start (must be in the future)." }
@@ -43072,7 +43101,7 @@ paths:
43072
43101
  required: [accountId, adAccountId, headline, body, linkUrl]
43073
43102
  properties:
43074
43103
  accountId: { type: string, description: "Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token and Page." }
43075
- adAccountId: { type: string, description: "Meta ad account id (act_<n>)." }
43104
+ adAccountId: { type: string, description: "Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...)." }
43076
43105
  headline: { type: string, maxLength: 255 }
43077
43106
  body: { type: string, description: Primary text }
43078
43107
  description: { type: string, maxLength: 255, description: "Link description below the headline; omitted = Meta scrapes the destination's OG description." }
@@ -43168,7 +43197,7 @@ paths:
43168
43197
  type: object
43169
43198
  required: [accountId, name]
43170
43199
  properties:
43171
- accountId: { type: string, description: "Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token." }
43200
+ accountId: { type: string, description: "Zernio SocialAccount id (posting or ads variant); its platform decides where the campaign is created." }
43172
43201
  name: { type: string, maxLength: 255 }
43173
43202
  responses:
43174
43203
  '200':
@@ -43311,8 +43340,8 @@ paths:
43311
43340
  type: object
43312
43341
  required: [accountId, adAccountId, name, rules]
43313
43342
  properties:
43314
- accountId: { type: string, description: "Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token." }
43315
- adAccountId: { type: string, description: "Meta ad account id (act_<n>)." }
43343
+ accountId: { type: string, description: "Zernio SocialAccount id (posting or ads variant); its platform decides where the campaign is created." }
43344
+ adAccountId: { type: string, description: "Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...)." }
43316
43345
  name: { type: string, minLength: 1, maxLength: 255 }
43317
43346
  rules:
43318
43347
  type: array
@@ -43402,7 +43431,7 @@ paths:
43402
43431
  type: object
43403
43432
  required: [accountId, name, rules]
43404
43433
  properties:
43405
- accountId: { type: string, description: "Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token." }
43434
+ accountId: { type: string, description: "Zernio SocialAccount id (posting or ads variant); its platform decides where the campaign is created." }
43406
43435
  name: { type: string, minLength: 1, maxLength: 255, description: "Required: the update replaces the whole set." }
43407
43436
  rules:
43408
43437
  type: array
@@ -44012,7 +44041,7 @@ paths:
44012
44041
  description: Missing required fields or invalid values
44013
44042
  '401': { $ref: '#/components/responses/Unauthorized' }
44014
44043
  '403':
44015
- description: Ads access required. Legacy plans need the Ads add-on; included by default on usage-based plans.
44044
+ description: 'Ads access required. Legacy plans need the Ads add-on; included by default on usage-based plans. Also returned with code `ads_allowance_exceeded` when the team has no payment method on file and has reached the 500 free live ads: add a card to resume.'
44016
44045
  '409':
44017
44046
  description: |
44018
44047
  An identical boost request is already in progress (with or without
@@ -45069,7 +45098,7 @@ paths:
45069
45098
  description: 'Missing required fields, invalid values, non-Meta platform used with creatives[] / adSetId, or a Meta validateOnly validation failure (verbatim)'
45070
45099
  '401': { $ref: '#/components/responses/Unauthorized' }
45071
45100
  '403':
45072
- description: Ads access required. Legacy plans need the Ads add-on; included by default on usage-based plans.
45101
+ description: 'Ads access required. Legacy plans need the Ads add-on; included by default on usage-based plans. Also returned with code `ads_allowance_exceeded` when the team has no payment method on file and has reached the 500 free live ads: add a card to resume.'
45073
45102
  '422':
45074
45103
  description: Platform ads connection required (TikTok Ads, X Ads) or missing linked account
45075
45104
  '502':
@@ -45468,8 +45497,8 @@ paths:
45468
45497
  type: object
45469
45498
  required: [accountId, adAccountId, imageBase64]
45470
45499
  properties:
45471
- accountId: { type: string, description: "Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token." }
45472
- adAccountId: { type: string, description: "Meta ad account id (act_<n>)." }
45500
+ accountId: { type: string, description: "Zernio SocialAccount id (posting or ads variant); its platform decides where the campaign is created." }
45501
+ adAccountId: { type: string, description: "Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...)." }
45473
45502
  imageBase64: { type: string, description: "Raw base64 image bytes, or a full data URL (the data:image/...;base64, prefix is stripped)." }
45474
45503
  filename: { type: string, description: "Optional filename shown in Meta's image library. Defaults to ad_image.jpg." }
45475
45504
  responses:
@@ -45560,8 +45589,8 @@ paths:
45560
45589
  type: object
45561
45590
  required: [accountId, adAccountId]
45562
45591
  properties:
45563
- accountId: { type: string, description: "Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token." }
45564
- adAccountId: { type: string, description: "Meta ad account id (act_<n>)." }
45592
+ accountId: { type: string, description: "Zernio SocialAccount id (posting or ads variant); its platform decides where the campaign is created." }
45593
+ adAccountId: { type: string, description: "Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...)." }
45565
45594
  videoUrl: { type: string, description: "Public https URL of the video; downloaded server-side (SSRF-guarded) before chunked upload. Provide exactly one of videoUrl or videoBase64." }
45566
45595
  videoBase64: { type: string, description: "Raw base64 video bytes, or a full data URL (the data:video/...;base64, prefix is stripped). Capped by Vercel's body limit (~4.5 MB payload). Provide exactly one of videoUrl or videoBase64." }
45567
45596
  filename: { type: string, description: "Optional filename shown alongside the upload session. Applied only when uploading via videoBase64." }
@@ -47759,6 +47788,8 @@ paths:
47759
47788
  description: Ad(s) created and submitted for review
47760
47789
  '400': { description: Invalid input }
47761
47790
  '401': { $ref: '#/components/responses/Unauthorized' }
47791
+ '403':
47792
+ description: 'Returned with code `ads_allowance_exceeded` when the team has no payment method on file and has reached the 500 free live ads: add a card to resume.'
47762
47793
  '404': { description: Account not found }
47763
47794
  '422': { description: "No Facebook Page resolved for the account" }
47764
47795
  '502': { description: "Meta accepted the request then failed to produce the media (upload session, chunk transfer, processing timeout, or a response with no image hash). Inspect `platformError.reason`." }
@@ -47799,6 +47830,8 @@ paths:
47799
47830
  description: Ad(s) created and submitted for review
47800
47831
  '400': { description: Invalid input }
47801
47832
  '401': { $ref: '#/components/responses/Unauthorized' }
47833
+ '403':
47834
+ description: 'Returned with code `ads_allowance_exceeded` when the team has no payment method on file and has reached the 500 free live ads: add a card to resume.'
47802
47835
  '404': { description: Account not found }
47803
47836
  '422': { description: "No Facebook Page resolved for the account" }
47804
47837
  '502': { description: "Meta accepted the request then failed to produce the media (upload session, chunk transfer, processing timeout, or a response with no image hash). Inspect `platformError.reason`." }
@@ -47861,7 +47894,8 @@ paths:
47861
47894
  multi: '#/components/schemas/CtwaMultiResponse'
47862
47895
  '400': { description: Invalid body. }
47863
47896
  '401': { $ref: '#/components/responses/Unauthorized' }
47864
- '403': { description: "Ads access required. Legacy plans need the Ads add-on; included by default on usage-based plans." }
47897
+ '403':
47898
+ description: 'Forbidden. Also returned with code `ads_allowance_exceeded` when the team has no payment method on file and has reached the 500 free live ads: add a card to resume.'
47865
47899
  '404': { description: SocialAccount not found. }
47866
47900
  '422':
47867
47901
  description: Page is not connected to a verified WhatsApp number.
@@ -47929,7 +47963,7 @@ paths:
47929
47963
  type: object
47930
47964
  required: [adAccountId, name, pixelId, customEventType, rule]
47931
47965
  properties:
47932
- adAccountId: { type: string, description: "Meta ad account id (act_<n>)." }
47966
+ adAccountId: { type: string, description: "Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...)." }
47933
47967
  name: { type: string, maxLength: 255, description: "Also the reuse key, together with pixelId." }
47934
47968
  pixelId: { type: string, description: "Meta pixel id (event_source_id). From GET /v1/accounts/{accountId}/tracking-tags." }
47935
47969
  customEventType: { type: string, description: "Meta custom_event_type, e.g. LEAD, PURCHASE, OTHER." }
@@ -72,7 +72,7 @@ describe 'AdCampaignsApi' do
72
72
 
73
73
  # unit tests for create_ad_campaign
74
74
  # Create a standalone campaign
75
- # Creates a campaign WITHOUT its first ad set / ad (the ODAX shell only). Ad sets join it later via &#x60;existingCampaignId&#x60; on the create endpoints. A budget here is campaign-level (CBO) by definition; omit it for ABO (each ad set carries its own budget). Created &#x60;PAUSED&#x60; unless &#x60;status: ACTIVE&#x60;. The campaign materializes in &#x60;/v1/ads/tree&#x60; via the next sync discovery pass. **Idempotency:** send an &#x60;Idempotency-Key&#x60; header to make retries safe.
75
+ # Creates a campaign WITHOUT its first ad set / ad, on the platform of the given &#x60;accountId&#x60;. Ad sets join it later via &#x60;existingCampaignId&#x60; on the create endpoints. Platform notes: on Meta a budget here is campaign-level (CBO) by definition; omit it for ABO (each ad set carries its own budget), and &#x60;specialAdCategories&#x60; / &#x60;bidStrategy&#x60; are Meta-only (400 elsewhere). Google, X and OpenAI require a budget (422 without one; OpenAI accepts only &#x60;budgetType: lifetime&#x60;). LinkedIn creates the campaign GROUP (our campaign level) and rejects a budget, which lives on the campaign (ad set) level there; it comes back &#x60;status: DRAFT&#x60;. TikTok campaigns are created without a status and report &#x60;ENABLE&#x60;. Created &#x60;PAUSED&#x60; unless &#x60;status: ACTIVE&#x60; where the platform supports it. **Idempotency:** send an &#x60;Idempotency-Key&#x60; header to make retries safe.
76
76
  # @param create_ad_campaign_request
77
77
  # @param [Hash] opts the optional parameters
78
78
  # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. Only 2xx responses are stored, so a request that failed with a 4xx can be retried with a corrected body under the SAME key.
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: late-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.817
4
+ version: 0.0.819
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenAPI-Generator
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-09-01 00:00:00.000000000 Z
11
+ date: 2026-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: typhoeus
@@ -5557,7 +5557,7 @@ files:
5557
5557
  - spec/models/you_tube_video_retention_response_retention_curve_inner_spec.rb
5558
5558
  - spec/models/you_tube_video_retention_response_spec.rb
5559
5559
  - spec/spec_helper.rb
5560
- - zernio-sdk-0.0.817.gem
5560
+ - zernio-sdk-0.0.819.gem
5561
5561
  - zernio-sdk.gemspec
5562
5562
  homepage: https://openapi-generator.tech
5563
5563
  licenses:
Binary file