late-sdk 0.0.909 → 0.0.910
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 +32 -19
- data/docs/AdAccountsApi.md +88 -12
- data/docs/AdCampaignsApi.md +20 -20
- data/docs/AdCreativesApi.md +222 -0
- data/docs/AdInsightsApi.md +16 -16
- data/docs/AdTargetingApi.md +4 -4
- data/docs/ConversionsApi.md +8 -8
- data/docs/ListPartnershipAdContent200Response.md +18 -0
- data/docs/ListPartnershipAdContent200ResponseMediaInner.md +30 -0
- data/docs/ListPartnershipAdPermissions200Response.md +18 -0
- data/docs/ListPartnershipAdPermissions200ResponsePermissionsInner.md +22 -0
- data/docs/ListTikTokAdPixels200Response.md +20 -0
- data/docs/ListTikTokAdPixels200ResponsePixelsInner.md +26 -0
- data/docs/ListTikTokAdPixels200ResponsePixelsInnerEventDetailsInner.md +22 -0
- data/docs/ReachAndFrequencyApi.md +16 -16
- data/docs/SetPartnershipAdPermission200Response.md +18 -0
- data/docs/SetPartnershipAdPermissionRequest.md +22 -0
- data/lib/zernio-sdk/api/ad_accounts_api.rb +81 -6
- data/lib/zernio-sdk/api/ad_campaigns_api.rb +10 -10
- data/lib/zernio-sdk/api/ad_creatives_api.rb +218 -0
- data/lib/zernio-sdk/api/ad_insights_api.rb +8 -8
- data/lib/zernio-sdk/api/ad_targeting_api.rb +2 -2
- data/lib/zernio-sdk/api/conversions_api.rb +4 -4
- data/lib/zernio-sdk/api/reach_and_frequency_api.rb +8 -8
- data/lib/zernio-sdk/models/list_partnership_ad_content200_response.rb +149 -0
- data/lib/zernio-sdk/models/list_partnership_ad_content200_response_media_inner.rb +205 -0
- data/lib/zernio-sdk/models/list_partnership_ad_permissions200_response.rb +149 -0
- data/lib/zernio-sdk/models/list_partnership_ad_permissions200_response_permissions_inner.rb +165 -0
- data/lib/zernio-sdk/models/list_tik_tok_ad_pixels200_response.rb +158 -0
- data/lib/zernio-sdk/models/list_tik_tok_ad_pixels200_response_pixels_inner.rb +187 -0
- data/lib/zernio-sdk/models/list_tik_tok_ad_pixels200_response_pixels_inner_event_details_inner.rb +166 -0
- data/lib/zernio-sdk/models/set_partnership_ad_permission200_response.rb +147 -0
- data/lib/zernio-sdk/models/set_partnership_ad_permission_request.rb +219 -0
- data/lib/zernio-sdk/version.rb +1 -1
- data/lib/zernio-sdk.rb +9 -0
- data/openapi.yaml +632 -154
- data/spec/api/ad_accounts_api_spec.rb +17 -3
- data/spec/api/ad_campaigns_api_spec.rb +5 -5
- data/spec/api/ad_creatives_api_spec.rb +40 -0
- data/spec/api/ad_insights_api_spec.rb +4 -4
- data/spec/api/ad_targeting_api_spec.rb +1 -1
- data/spec/api/conversions_api_spec.rb +2 -2
- data/spec/api/reach_and_frequency_api_spec.rb +4 -4
- data/spec/models/list_partnership_ad_content200_response_media_inner_spec.rb +72 -0
- data/spec/models/list_partnership_ad_content200_response_spec.rb +36 -0
- data/spec/models/list_partnership_ad_permissions200_response_permissions_inner_spec.rb +48 -0
- data/spec/models/list_partnership_ad_permissions200_response_spec.rb +36 -0
- data/spec/models/list_tik_tok_ad_pixels200_response_pixels_inner_event_details_inner_spec.rb +48 -0
- data/spec/models/list_tik_tok_ad_pixels200_response_pixels_inner_spec.rb +60 -0
- data/spec/models/list_tik_tok_ad_pixels200_response_spec.rb +42 -0
- data/spec/models/set_partnership_ad_permission200_response_spec.rb +36 -0
- data/spec/models/set_partnership_ad_permission_request_spec.rb +48 -0
- data/zernio-sdk-0.0.910.gem +0 -0
- metadata +38 -2
- data/zernio-sdk-0.0.909.gem +0 -0
data/openapi.yaml
CHANGED
|
@@ -587,6 +587,26 @@ components:
|
|
|
587
587
|
description: Recommended delay before retrying, in seconds.
|
|
588
588
|
schema: { type: integer, example: 60 }
|
|
589
589
|
responses:
|
|
590
|
+
AccountUnavailable:
|
|
591
|
+
description: 'The account or requested resource was not found or is not accessible. An account ID may have been disconnected and removed. Read GET /v1/accounts for current account IDs.'
|
|
592
|
+
content:
|
|
593
|
+
application/json:
|
|
594
|
+
schema: { $ref: '#/components/schemas/ErrorResponse' }
|
|
595
|
+
example:
|
|
596
|
+
error: 'Account ID not found. It may have been disconnected and removed. Read GET /v1/accounts for current account IDs.'
|
|
597
|
+
type: not_found
|
|
598
|
+
code: account_not_found
|
|
599
|
+
param: accountId
|
|
600
|
+
AccountConnectionRequired:
|
|
601
|
+
description: 'The account exists but is inactive or needs reconnection. Reconnect it, then read GET /v1/accounts for its current account ID before retrying. Code: ads_connection_required.'
|
|
602
|
+
content:
|
|
603
|
+
application/json:
|
|
604
|
+
schema: { $ref: '#/components/schemas/ErrorResponse' }
|
|
605
|
+
example:
|
|
606
|
+
error: 'This account needs reconnection. Reconnect the account, then read GET /v1/accounts for its current account ID before retrying.'
|
|
607
|
+
type: invalid_request_error
|
|
608
|
+
code: ads_connection_required
|
|
609
|
+
param: accountId
|
|
590
610
|
IdempotencyKeyInFlight:
|
|
591
611
|
description: Same Idempotency-Key still processing; retry after a short backoff
|
|
592
612
|
IdempotencyKeyReused:
|
|
@@ -24831,6 +24851,7 @@ paths:
|
|
|
24831
24851
|
description: The Instagram account ID
|
|
24832
24852
|
schema: { type: string }
|
|
24833
24853
|
responses:
|
|
24854
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
24834
24855
|
'200':
|
|
24835
24856
|
description: Active stories
|
|
24836
24857
|
content:
|
|
@@ -24854,8 +24875,7 @@ paths:
|
|
|
24854
24875
|
timestamp: { type: [string, "null"], format: date-time, description: When the story was posted. }
|
|
24855
24876
|
'400': { description: Invalid request. }
|
|
24856
24877
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
24857
|
-
'404': {
|
|
24858
|
-
|
|
24878
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
24859
24879
|
/v1/accounts/{accountId}/instagram/publishing-limit:
|
|
24860
24880
|
get:
|
|
24861
24881
|
x-resource-group: "accounts"
|
|
@@ -24877,6 +24897,7 @@ paths:
|
|
|
24877
24897
|
description: The ID of the Instagram account
|
|
24878
24898
|
schema: { type: string }
|
|
24879
24899
|
responses:
|
|
24900
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
24880
24901
|
'200':
|
|
24881
24902
|
description: Remaining publishing quota for the rolling window
|
|
24882
24903
|
content:
|
|
@@ -24893,7 +24914,8 @@ paths:
|
|
|
24893
24914
|
quotaDurationSeconds: 86400
|
|
24894
24915
|
'400': { description: Not an Instagram account }
|
|
24895
24916
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
24896
|
-
'404': {
|
|
24917
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
24918
|
+
|
|
24897
24919
|
'502': { description: Instagram rejected the request }
|
|
24898
24920
|
|
|
24899
24921
|
/v1/accounts/{accountId}/instagram/audio:
|
|
@@ -24933,6 +24955,7 @@ paths:
|
|
|
24933
24955
|
description: 'Search keywords. Omit to get the current trending list.'
|
|
24934
24956
|
schema: { type: string, minLength: 1, maxLength: 200 }
|
|
24935
24957
|
responses:
|
|
24958
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
24936
24959
|
'200':
|
|
24937
24960
|
description: Matching audio assets (may be empty)
|
|
24938
24961
|
content:
|
|
@@ -24945,7 +24968,8 @@ paths:
|
|
|
24945
24968
|
items: { $ref: '#/components/schemas/InstagramAudioAsset' }
|
|
24946
24969
|
'400': { $ref: '#/components/responses/BadRequest' }
|
|
24947
24970
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
24948
|
-
'404': {
|
|
24971
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
24972
|
+
|
|
24949
24973
|
'502': { description: Instagram rejected the request }
|
|
24950
24974
|
|
|
24951
24975
|
/v1/accounts/{accountId}/instagram/audio/{audioId}:
|
|
@@ -24973,6 +24997,7 @@ paths:
|
|
|
24973
24997
|
description: Instagram audio asset ID
|
|
24974
24998
|
schema: { type: string, pattern: '^\d{1,30}$' }
|
|
24975
24999
|
responses:
|
|
25000
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
24976
25001
|
'200':
|
|
24977
25002
|
description: The audio asset
|
|
24978
25003
|
content:
|
|
@@ -24983,7 +25008,8 @@ paths:
|
|
|
24983
25008
|
audio: { $ref: '#/components/schemas/InstagramAudioAsset' }
|
|
24984
25009
|
'400': { $ref: '#/components/responses/BadRequest' }
|
|
24985
25010
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
24986
|
-
'404': {
|
|
25011
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
25012
|
+
|
|
24987
25013
|
'502': { description: Instagram rejected the request }
|
|
24988
25014
|
|
|
24989
25015
|
/v1/accounts/{accountId}/instagram/stories/{storyId}/insights:
|
|
@@ -25021,6 +25047,7 @@ paths:
|
|
|
25021
25047
|
description: The Instagram media ID of the story.
|
|
25022
25048
|
schema: { type: string }
|
|
25023
25049
|
responses:
|
|
25050
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
25024
25051
|
'200':
|
|
25025
25052
|
description: Story insights
|
|
25026
25053
|
content:
|
|
@@ -25058,7 +25085,8 @@ paths:
|
|
|
25058
25085
|
totalInteractions: { type: integer }
|
|
25059
25086
|
'400': { description: Invalid request. }
|
|
25060
25087
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
25061
|
-
'404': {
|
|
25088
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
25089
|
+
|
|
25062
25090
|
'502': { description: 'Instagram rejected the request.' }
|
|
25063
25091
|
|
|
25064
25092
|
/v1/accounts/{accountId}/pinterest-boards:
|
|
@@ -42847,6 +42875,8 @@ paths:
|
|
|
42847
42875
|
- { name: adGroupId, in: query, schema: { type: string }, description: "Numeric Google ad group id filter." }
|
|
42848
42876
|
- { name: pageToken, in: query, schema: { type: string }, description: "Cursor from paging.nextPageToken of the previous page." }
|
|
42849
42877
|
responses:
|
|
42878
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
42879
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
42850
42880
|
'200':
|
|
42851
42881
|
description: Search terms
|
|
42852
42882
|
content:
|
|
@@ -42889,7 +42919,7 @@ paths:
|
|
|
42889
42919
|
operationId: listBidStrategies
|
|
42890
42920
|
tags: ["Ad Campaigns"]
|
|
42891
42921
|
x-platforms: ["google"]
|
|
42892
|
-
summary: List
|
|
42922
|
+
summary: 'List portfolio bid strategies'
|
|
42893
42923
|
description: >-
|
|
42894
42924
|
Bidding strategy report: type, status, campaign count, clicks, cost, cost per
|
|
42895
42925
|
conversion, impressions, average CPC and conversions over the date range (default
|
|
@@ -42905,6 +42935,7 @@ paths:
|
|
|
42905
42935
|
- { name: fromDate, in: query, schema: { type: string, format: date }, description: "Defaults to 30 days ago." }
|
|
42906
42936
|
- { name: toDate, in: query, schema: { type: string, format: date }, description: "Defaults to today." }
|
|
42907
42937
|
responses:
|
|
42938
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
42908
42939
|
'200':
|
|
42909
42940
|
description: Portfolio bid strategies
|
|
42910
42941
|
content:
|
|
@@ -42921,7 +42952,8 @@ paths:
|
|
|
42921
42952
|
stale: { type: boolean, description: "True when Google's daily API quota was exhausted and this is the last successful fetch, not a live read." }
|
|
42922
42953
|
'400': { $ref: '#/components/responses/BadRequest' }
|
|
42923
42954
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
42924
|
-
'404': { $ref: '#/components/responses/
|
|
42955
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
42956
|
+
|
|
42925
42957
|
'429': { description: "Google Ads operations budget exhausted; retry later." }
|
|
42926
42958
|
'501': { description: Only available on Google Ads accounts }
|
|
42927
42959
|
post:
|
|
@@ -42929,7 +42961,7 @@ paths:
|
|
|
42929
42961
|
operationId: createBidStrategy
|
|
42930
42962
|
tags: ["Ad Campaigns"]
|
|
42931
42963
|
x-platforms: ["google"]
|
|
42932
|
-
summary: Create
|
|
42964
|
+
summary: 'Create portfolio bid strategy'
|
|
42933
42965
|
description: >-
|
|
42934
42966
|
Creates a standalone bid strategy shared across campaigns. Attach it to a campaign
|
|
42935
42967
|
with `portfolioBidStrategyId` on POST /v1/ads/create, PUT /v1/ads/campaigns/{campaignId},
|
|
@@ -42952,6 +42984,7 @@ paths:
|
|
|
42952
42984
|
targetCpa: { type: number, exclusiveMinimum: 0, description: "Required when type is TARGET_CPA, in the account's currency units." }
|
|
42953
42985
|
targetRoas: { type: number, exclusiveMinimum: 0, description: "Required when type is TARGET_ROAS; a multiplier (2.0 = 2.0x)." }
|
|
42954
42986
|
responses:
|
|
42987
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
42955
42988
|
'201':
|
|
42956
42989
|
description: Bid strategy created
|
|
42957
42990
|
content:
|
|
@@ -42967,7 +43000,8 @@ paths:
|
|
|
42967
43000
|
resourceName: { type: string }
|
|
42968
43001
|
'400': { description: "Invalid input, or Google rejected the strategy (e.g. shared-budget alignment). The message carries Google's error." }
|
|
42969
43002
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
42970
|
-
'404': { $ref: '#/components/responses/
|
|
43003
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
43004
|
+
|
|
42971
43005
|
'422': { description: "No Google Ads customer accounts on this connection. Reconnect Google Ads." }
|
|
42972
43006
|
'429': { description: "Google Ads operations budget exhausted; retry later." }
|
|
42973
43007
|
'501': { description: Only available on Google Ads accounts }
|
|
@@ -42978,7 +43012,7 @@ paths:
|
|
|
42978
43012
|
operationId: updateBidStrategy
|
|
42979
43013
|
tags: ["Ad Campaigns"]
|
|
42980
43014
|
x-platforms: ["google"]
|
|
42981
|
-
summary: Update
|
|
43015
|
+
summary: 'Update portfolio bid strategy'
|
|
42982
43016
|
description: >-
|
|
42983
43017
|
Renames or retargets a portfolio bid strategy. The strategy's status is output only
|
|
42984
43018
|
on Google's side, so it cannot be changed here; remove a strategy in Google Ads.
|
|
@@ -43005,6 +43039,7 @@ paths:
|
|
|
43005
43039
|
targetCpa: { type: number, exclusiveMinimum: 0 }
|
|
43006
43040
|
targetRoas: { type: number, exclusiveMinimum: 0 }
|
|
43007
43041
|
responses:
|
|
43042
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
43008
43043
|
'200':
|
|
43009
43044
|
description: Bid strategy updated
|
|
43010
43045
|
content:
|
|
@@ -43018,7 +43053,8 @@ paths:
|
|
|
43018
43053
|
customerId: { type: string }
|
|
43019
43054
|
'400': { $ref: '#/components/responses/BadRequest' }
|
|
43020
43055
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
43021
|
-
'404': { $ref: '#/components/responses/
|
|
43056
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
43057
|
+
|
|
43022
43058
|
'429': { description: "Google Ads operations budget exhausted; retry later." }
|
|
43023
43059
|
'501': { description: Only available on Google Ads accounts }
|
|
43024
43060
|
|
|
@@ -43048,6 +43084,8 @@ paths:
|
|
|
43048
43084
|
- { name: chargedOnly, in: query, schema: { type: boolean }, description: "true = only leads Google charged for." }
|
|
43049
43085
|
- { name: pageToken, in: query, schema: { type: string }, description: "Cursor from paging.nextPageToken of the previous page." }
|
|
43050
43086
|
responses:
|
|
43087
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
43088
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
43051
43089
|
'200':
|
|
43052
43090
|
description: Local Services leads
|
|
43053
43091
|
content:
|
|
@@ -43093,7 +43131,7 @@ paths:
|
|
|
43093
43131
|
operationId: listLocalServicesLeadConversations
|
|
43094
43132
|
tags: ["Ad Insights"]
|
|
43095
43133
|
x-platforms: ["google"]
|
|
43096
|
-
summary:
|
|
43134
|
+
summary: 'List lead conversations'
|
|
43097
43135
|
description: |-
|
|
43098
43136
|
Conversation entries of one Local Services lead: phone calls (duration,
|
|
43099
43137
|
recording URL) and messages (text, attachment URLs), oldest first. Read
|
|
@@ -43108,6 +43146,8 @@ paths:
|
|
|
43108
43146
|
- { name: customerId, in: query, schema: { type: string }, description: "Numeric Google Ads customer id (no dashes). Defaults to the account's connected customer." }
|
|
43109
43147
|
- { name: pageToken, in: query, schema: { type: string }, description: "Cursor from paging.nextPageToken of the previous page." }
|
|
43110
43148
|
responses:
|
|
43149
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
43150
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
43111
43151
|
'200':
|
|
43112
43152
|
description: Lead conversations
|
|
43113
43153
|
content:
|
|
@@ -43199,7 +43239,7 @@ paths:
|
|
|
43199
43239
|
operationId: addAdKeywords
|
|
43200
43240
|
tags: ["Ad Campaigns"]
|
|
43201
43241
|
x-platforms: ["google"]
|
|
43202
|
-
summary: Add Search
|
|
43242
|
+
summary: 'Add Search ad-group keywords'
|
|
43203
43243
|
description: |
|
|
43204
43244
|
Adds one or more keyword criteria to an existing Google Search ad group,
|
|
43205
43245
|
without touching the keywords already there (unlike the whole-set diff on
|
|
@@ -43233,6 +43273,7 @@ paths:
|
|
|
43233
43273
|
matchType: { type: string, enum: [exact, phrase, broad] }
|
|
43234
43274
|
negative: { type: boolean, default: false, description: 'Add as ad-group-level negatives instead of positive keywords' }
|
|
43235
43275
|
responses:
|
|
43276
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
43236
43277
|
'201':
|
|
43237
43278
|
description: Keywords added
|
|
43238
43279
|
content:
|
|
@@ -43245,7 +43286,8 @@ paths:
|
|
|
43245
43286
|
items: { $ref: '#/components/schemas/AdKeyword' }
|
|
43246
43287
|
'400': { $ref: '#/components/responses/BadRequest' }
|
|
43247
43288
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
43248
|
-
'404': {
|
|
43289
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
43290
|
+
|
|
43249
43291
|
'501': { description: Only available on Google Ads accounts }
|
|
43250
43292
|
|
|
43251
43293
|
/v1/ads/keywords/{keywordId}:
|
|
@@ -43272,6 +43314,7 @@ paths:
|
|
|
43272
43314
|
properties:
|
|
43273
43315
|
status: { type: string, enum: [active, paused] }
|
|
43274
43316
|
responses:
|
|
43317
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
43275
43318
|
'200':
|
|
43276
43319
|
description: Keyword updated
|
|
43277
43320
|
content:
|
|
@@ -43282,7 +43325,8 @@ paths:
|
|
|
43282
43325
|
keyword: { $ref: '#/components/schemas/AdKeyword' }
|
|
43283
43326
|
'400': { $ref: '#/components/responses/BadRequest' }
|
|
43284
43327
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
43285
|
-
'404': {
|
|
43328
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
43329
|
+
|
|
43286
43330
|
'422': { description: 'Negative keywords have no status on Google; they cannot be paused or enabled.' }
|
|
43287
43331
|
delete:
|
|
43288
43332
|
x-resource-group: "ads"
|
|
@@ -43296,6 +43340,7 @@ paths:
|
|
|
43296
43340
|
parameters:
|
|
43297
43341
|
- { name: keywordId, in: path, required: true, schema: { type: string }, description: Zernio keyword ID (not the Google criterion ID) }
|
|
43298
43342
|
responses:
|
|
43343
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
43299
43344
|
'200':
|
|
43300
43345
|
description: Keyword removed
|
|
43301
43346
|
content:
|
|
@@ -43307,8 +43352,7 @@ paths:
|
|
|
43307
43352
|
keywordId: { type: string }
|
|
43308
43353
|
'400': { $ref: '#/components/responses/BadRequest' }
|
|
43309
43354
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
43310
|
-
'404': {
|
|
43311
|
-
|
|
43355
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
43312
43356
|
/v1/ads/campaigns:
|
|
43313
43357
|
get:
|
|
43314
43358
|
x-resource-group: "ads"
|
|
@@ -43351,6 +43395,8 @@ paths:
|
|
|
43351
43395
|
- { name: hasDelivery, in: query, schema: { type: boolean }, description: "Return only campaigns that delivered between `fromDate` and `toDate`: spend above zero, or impressions served at zero spend. Unlike `status`, which reads a campaign's CURRENT state, this filters on what happened inside the window. Filters the campaign set itself, so `pagination.total` counts only matching campaigns. Mirrors the same filter on /v1/ads/tree." }
|
|
43352
43396
|
- { name: minSpend, in: query, schema: { type: number, minimum: 0 }, description: "Return only campaigns whose spend between `fromDate` and `toDate` reaches this amount, in each campaign's OWN currency (the `currency` field on the campaign). Implies `hasDelivery`; `minSpend=0` applies no filter. Mirrors the same filter on /v1/ads/tree." }
|
|
43353
43397
|
responses:
|
|
43398
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
43399
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
43354
43400
|
'200':
|
|
43355
43401
|
description: Paginated campaigns
|
|
43356
43402
|
content:
|
|
@@ -43465,6 +43511,8 @@ paths:
|
|
|
43465
43511
|
status: PAUSED
|
|
43466
43512
|
validateOnly: true
|
|
43467
43513
|
responses:
|
|
43514
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
43515
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
43468
43516
|
'200':
|
|
43469
43517
|
description: 'Campaign validation passed without creating a campaign.'
|
|
43470
43518
|
content:
|
|
@@ -43578,6 +43626,7 @@ paths:
|
|
|
43578
43626
|
- { name: platform, in: query, required: true, schema: { type: string, enum: [google] }, description: "Required: campaign IDs are not globally unique. Only \"google\" is supported today." }
|
|
43579
43627
|
- { name: customerId, in: query, required: false, schema: { type: string }, description: "Numeric Google Ads customer id (no dashes). Required when the connection has multiple Google Ads accounts; optional (and inferred) when it has only one." }
|
|
43580
43628
|
responses:
|
|
43629
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
43581
43630
|
'200':
|
|
43582
43631
|
description: Campaign bidding
|
|
43583
43632
|
content:
|
|
@@ -43593,8 +43642,8 @@ paths:
|
|
|
43593
43642
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
43594
43643
|
'403':
|
|
43595
43644
|
description: "Ads access required. Legacy plans need the Ads add-on; included by default on usage-based plans."
|
|
43596
|
-
'404':
|
|
43597
|
-
|
|
43645
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
43646
|
+
|
|
43598
43647
|
'501':
|
|
43599
43648
|
description: "Not a Google Ads account: the connection behind accountId resolves to another platform."
|
|
43600
43649
|
|
|
@@ -43693,8 +43742,9 @@ paths:
|
|
|
43693
43742
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
43694
43743
|
'403':
|
|
43695
43744
|
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.'
|
|
43696
|
-
'404': {
|
|
43697
|
-
|
|
43745
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
43746
|
+
|
|
43747
|
+
'409': { description: 'Meta campaign is ABO, or the Google budget is shared without allowSharedBudgetUpdate=true, or sharing state cannot be verified. The account may also be inactive or need reconnection (code ads_connection_required). Reconnect it and read GET /v1/accounts for its current ID before retrying.' }
|
|
43698
43748
|
'501': { description: Operation not supported on this platform }
|
|
43699
43749
|
|
|
43700
43750
|
delete:
|
|
@@ -43730,6 +43780,8 @@ paths:
|
|
|
43730
43780
|
platform: { type: string, enum: [facebook, instagram, google] }
|
|
43731
43781
|
accountId: { type: string, description: "Zernio SocialAccount id owning the ad account. Required only to delete an EMPTY campaign (zero ads), which has no local Ad documents to resolve a token from." }
|
|
43732
43782
|
responses:
|
|
43783
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
43784
|
+
'400': { $ref: '#/components/responses/BadRequest' }
|
|
43733
43785
|
'200':
|
|
43734
43786
|
description: Campaign deleted
|
|
43735
43787
|
content:
|
|
@@ -43740,7 +43792,8 @@ paths:
|
|
|
43740
43792
|
deleted: { type: boolean }
|
|
43741
43793
|
adCount: { type: integer, description: Number of local Ad docs marked cancelled }
|
|
43742
43794
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
43743
|
-
'404': {
|
|
43795
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
43796
|
+
|
|
43744
43797
|
'501': { description: Operation not supported on this platform }
|
|
43745
43798
|
|
|
43746
43799
|
/v1/ads/campaigns/{campaignId}/negative-keywords:
|
|
@@ -44285,6 +44338,7 @@ paths:
|
|
|
44285
44338
|
status: { type: string, enum: [ACTIVE, PAUSED], default: PAUSED }
|
|
44286
44339
|
customerId: { type: string, description: "Numeric Google Ads customer id. Only required when the connection has more than one." }
|
|
44287
44340
|
responses:
|
|
44341
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
44288
44342
|
'201':
|
|
44289
44343
|
description: Ad group created
|
|
44290
44344
|
content:
|
|
@@ -44298,7 +44352,8 @@ paths:
|
|
|
44298
44352
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
44299
44353
|
'403':
|
|
44300
44354
|
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.'
|
|
44301
|
-
'404': {
|
|
44355
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
44356
|
+
|
|
44302
44357
|
'501': { description: Only supported on Google Ads }
|
|
44303
44358
|
|
|
44304
44359
|
/v1/ads/ad-sets/{adSetId}/duplicate:
|
|
@@ -44429,7 +44484,7 @@ paths:
|
|
|
44429
44484
|
operationId: getAdSetDetails
|
|
44430
44485
|
tags: ["Ad Campaigns"]
|
|
44431
44486
|
x-platforms: ["meta"]
|
|
44432
|
-
summary:
|
|
44487
|
+
summary: 'Get live ad-set details'
|
|
44433
44488
|
description: |-
|
|
44434
44489
|
Reads the ad set live from Meta, returned verbatim. The default projection includes
|
|
44435
44490
|
`learning_stage_info` (learning-phase status: LEARNING / SUCCESS / FAIL / WAIVING; Meta
|
|
@@ -44443,6 +44498,8 @@ paths:
|
|
|
44443
44498
|
- { name: accountId, in: query, required: true, schema: { type: string }, description: "Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token." }
|
|
44444
44499
|
- { name: fields, in: query, schema: { type: string }, description: "Comma-separated Graph field override (supports nested {} projections)." }
|
|
44445
44500
|
responses:
|
|
44501
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
44502
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
44446
44503
|
'200':
|
|
44447
44504
|
description: The ad set as returned by Meta
|
|
44448
44505
|
content:
|
|
@@ -45263,6 +45320,7 @@ paths:
|
|
|
45263
45320
|
pattern: ^\d+$
|
|
45264
45321
|
description: "Google customer id without dashes. Required when the connection has multiple customers."
|
|
45265
45322
|
responses:
|
|
45323
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
45266
45324
|
'200':
|
|
45267
45325
|
description: "Assets returned."
|
|
45268
45326
|
content:
|
|
@@ -45331,8 +45389,8 @@ paths:
|
|
|
45331
45389
|
$ref: '#/components/responses/Unauthorized'
|
|
45332
45390
|
'403':
|
|
45333
45391
|
description: "Ads access is required."
|
|
45334
|
-
'404':
|
|
45335
|
-
|
|
45392
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
45393
|
+
|
|
45336
45394
|
'429':
|
|
45337
45395
|
description: "Google Ads operations budget or platform quota exhausted."
|
|
45338
45396
|
'501':
|
|
@@ -45412,6 +45470,7 @@ paths:
|
|
|
45412
45470
|
- Analytics
|
|
45413
45471
|
- Messaging
|
|
45414
45472
|
responses:
|
|
45473
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
45415
45474
|
'201':
|
|
45416
45475
|
description: "Assets created and attached."
|
|
45417
45476
|
content:
|
|
@@ -45439,8 +45498,8 @@ paths:
|
|
|
45439
45498
|
$ref: '#/components/responses/Unauthorized'
|
|
45440
45499
|
'403':
|
|
45441
45500
|
description: "Ads access is required."
|
|
45442
|
-
'404':
|
|
45443
|
-
|
|
45501
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
45502
|
+
|
|
45444
45503
|
'429':
|
|
45445
45504
|
description: "Google Ads operations budget or platform quota exhausted."
|
|
45446
45505
|
'501':
|
|
@@ -45498,6 +45557,7 @@ paths:
|
|
|
45498
45557
|
calloutAsset:
|
|
45499
45558
|
calloutText: Simple integration
|
|
45500
45559
|
responses:
|
|
45560
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
45501
45561
|
'200':
|
|
45502
45562
|
description: "Assets returned."
|
|
45503
45563
|
content:
|
|
@@ -45513,8 +45573,8 @@ paths:
|
|
|
45513
45573
|
$ref: '#/components/responses/Unauthorized'
|
|
45514
45574
|
'403':
|
|
45515
45575
|
description: "Ads access is required."
|
|
45516
|
-
'404':
|
|
45517
|
-
|
|
45576
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
45577
|
+
|
|
45518
45578
|
'429':
|
|
45519
45579
|
description: "Google Ads operations budget or platform quota exhausted."
|
|
45520
45580
|
'501':
|
|
@@ -45575,6 +45635,7 @@ paths:
|
|
|
45575
45635
|
campaignAssetResourceNames:
|
|
45576
45636
|
- customers/1234567890/campaignAssets/456~123~CALLOUT
|
|
45577
45637
|
responses:
|
|
45638
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
45578
45639
|
'200':
|
|
45579
45640
|
description: "Assets returned."
|
|
45580
45641
|
content:
|
|
@@ -45590,8 +45651,8 @@ paths:
|
|
|
45590
45651
|
$ref: '#/components/responses/Unauthorized'
|
|
45591
45652
|
'403':
|
|
45592
45653
|
description: "Ads access is required."
|
|
45593
|
-
'404':
|
|
45594
|
-
|
|
45654
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
45655
|
+
|
|
45595
45656
|
'429':
|
|
45596
45657
|
description: "Google Ads operations budget or platform quota exhausted."
|
|
45597
45658
|
'501':
|
|
@@ -45632,6 +45693,7 @@ paths:
|
|
|
45632
45693
|
pattern: ^\d+$
|
|
45633
45694
|
description: "Google customer id without dashes. Required when the connection has multiple customers."
|
|
45634
45695
|
responses:
|
|
45696
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
45635
45697
|
'200':
|
|
45636
45698
|
description: "Assets returned."
|
|
45637
45699
|
content:
|
|
@@ -45700,8 +45762,8 @@ paths:
|
|
|
45700
45762
|
$ref: '#/components/responses/Unauthorized'
|
|
45701
45763
|
'403':
|
|
45702
45764
|
description: "Ads access is required."
|
|
45703
|
-
'404':
|
|
45704
|
-
|
|
45765
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
45766
|
+
|
|
45705
45767
|
'429':
|
|
45706
45768
|
description: "Google Ads operations budget or platform quota exhausted."
|
|
45707
45769
|
'501':
|
|
@@ -45781,6 +45843,7 @@ paths:
|
|
|
45781
45843
|
- Analytics
|
|
45782
45844
|
- Messaging
|
|
45783
45845
|
responses:
|
|
45846
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
45784
45847
|
'201':
|
|
45785
45848
|
description: "Assets created and attached."
|
|
45786
45849
|
content:
|
|
@@ -45808,8 +45871,8 @@ paths:
|
|
|
45808
45871
|
$ref: '#/components/responses/Unauthorized'
|
|
45809
45872
|
'403':
|
|
45810
45873
|
description: "Ads access is required."
|
|
45811
|
-
'404':
|
|
45812
|
-
|
|
45874
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
45875
|
+
|
|
45813
45876
|
'429':
|
|
45814
45877
|
description: "Google Ads operations budget or platform quota exhausted."
|
|
45815
45878
|
'501':
|
|
@@ -45867,6 +45930,7 @@ paths:
|
|
|
45867
45930
|
calloutAsset:
|
|
45868
45931
|
calloutText: Simple integration
|
|
45869
45932
|
responses:
|
|
45933
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
45870
45934
|
'200':
|
|
45871
45935
|
description: "Assets returned."
|
|
45872
45936
|
content:
|
|
@@ -45882,8 +45946,8 @@ paths:
|
|
|
45882
45946
|
$ref: '#/components/responses/Unauthorized'
|
|
45883
45947
|
'403':
|
|
45884
45948
|
description: "Ads access is required."
|
|
45885
|
-
'404':
|
|
45886
|
-
|
|
45949
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
45950
|
+
|
|
45887
45951
|
'429':
|
|
45888
45952
|
description: "Google Ads operations budget or platform quota exhausted."
|
|
45889
45953
|
'501':
|
|
@@ -45944,6 +46008,7 @@ paths:
|
|
|
45944
46008
|
adGroupAssetResourceNames:
|
|
45945
46009
|
- customers/1234567890/adGroupAssets/456~123~CALLOUT
|
|
45946
46010
|
responses:
|
|
46011
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
45947
46012
|
'200':
|
|
45948
46013
|
description: "Assets returned."
|
|
45949
46014
|
content:
|
|
@@ -45959,8 +46024,8 @@ paths:
|
|
|
45959
46024
|
$ref: '#/components/responses/Unauthorized'
|
|
45960
46025
|
'403':
|
|
45961
46026
|
description: "Ads access is required."
|
|
45962
|
-
'404':
|
|
45963
|
-
|
|
46027
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
46028
|
+
|
|
45964
46029
|
'429':
|
|
45965
46030
|
description: "Google Ads operations budget or platform quota exhausted."
|
|
45966
46031
|
'501':
|
|
@@ -46084,6 +46149,8 @@ paths:
|
|
|
46084
46149
|
additionalProperties: true
|
|
46085
46150
|
description: "Raw Meta creative spec forwarded verbatim to /generatepreviews. Mutually exclusive with existingCreativeId."
|
|
46086
46151
|
responses:
|
|
46152
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
46153
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
46087
46154
|
'200':
|
|
46088
46155
|
description: Rendered previews
|
|
46089
46156
|
content:
|
|
@@ -46195,7 +46262,7 @@ paths:
|
|
|
46195
46262
|
operationId: generateKeywordIdeas
|
|
46196
46263
|
tags: ["Ad Insights"]
|
|
46197
46264
|
x-platforms: ["google"]
|
|
46198
|
-
summary: Generate keyword ideas
|
|
46265
|
+
summary: 'Generate keyword ideas'
|
|
46199
46266
|
description: |
|
|
46200
46267
|
Google Ads only. Runs Keyword Planner's generateKeywordIdeas from seed keywords, a seed URL,
|
|
46201
46268
|
or both, returning idea rows verbatim (avgMonthlySearches, competition, competitionIndex,
|
|
@@ -46222,6 +46289,8 @@ paths:
|
|
|
46222
46289
|
pageSize: { type: integer, minimum: 1, maximum: 10000 }
|
|
46223
46290
|
pageToken: { type: string, description: "Cursor from paging.nextPageToken of the previous page." }
|
|
46224
46291
|
responses:
|
|
46292
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
46293
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
46225
46294
|
'200':
|
|
46226
46295
|
description: Keyword idea rows (raw Keyword Planner shape)
|
|
46227
46296
|
content:
|
|
@@ -46249,7 +46318,7 @@ paths:
|
|
|
46249
46318
|
operationId: generateKeywordHistoricalMetrics
|
|
46250
46319
|
tags: ["Ad Insights"]
|
|
46251
46320
|
x-platforms: ["google"]
|
|
46252
|
-
summary:
|
|
46321
|
+
summary: 'Get historical keyword metrics'
|
|
46253
46322
|
description: |
|
|
46254
46323
|
Google Ads only. Runs Keyword Planner's generateKeywordHistoricalMetrics for up to 1,000
|
|
46255
46324
|
exact keywords: historical search volume, competition and top-of-page bid ranges, plus
|
|
@@ -46274,6 +46343,8 @@ paths:
|
|
|
46274
46343
|
includeAdultKeywords: { type: boolean }
|
|
46275
46344
|
includeAverageCpc: { type: boolean, description: "Adds averageCpcMicros to each row's keywordMetrics." }
|
|
46276
46345
|
responses:
|
|
46346
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
46347
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
46277
46348
|
'200':
|
|
46278
46349
|
description: Historical metric rows (raw Keyword Planner shape)
|
|
46279
46350
|
content:
|
|
@@ -46337,6 +46408,8 @@ paths:
|
|
|
46337
46408
|
- { name: limit, in: query, schema: { type: integer, minimum: 1, maximum: 500, default: 25 }, description: Rows per page }
|
|
46338
46409
|
- { name: after, in: query, schema: { type: string }, description: "Cursor from paging.after of the previous page." }
|
|
46339
46410
|
responses:
|
|
46411
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
46412
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
46340
46413
|
'200':
|
|
46341
46414
|
description: Insight rows (raw platform shape)
|
|
46342
46415
|
content:
|
|
@@ -46366,7 +46439,7 @@ paths:
|
|
|
46366
46439
|
operationId: createAdInsightsReport
|
|
46367
46440
|
tags: ["Ad Insights"]
|
|
46368
46441
|
x-platforms: ["meta"]
|
|
46369
|
-
summary: Submit
|
|
46442
|
+
summary: 'Submit async insights report'
|
|
46370
46443
|
description: |
|
|
46371
46444
|
Submits an asynchronous Meta insights report. Same query surface as GET /v1/ads/insights, but
|
|
46372
46445
|
in the JSON body; Meta processes the report server-side, which is the right choice for long
|
|
@@ -46410,6 +46483,8 @@ paths:
|
|
|
46410
46483
|
timeIncrement:
|
|
46411
46484
|
oneOf: [{ type: integer, minimum: 1, maximum: 90 }, { type: string, enum: [monthly, all_days] }]
|
|
46412
46485
|
responses:
|
|
46486
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
46487
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
46413
46488
|
'202':
|
|
46414
46489
|
description: Report run submitted
|
|
46415
46490
|
content:
|
|
@@ -46443,6 +46518,8 @@ paths:
|
|
|
46443
46518
|
- { name: limit, in: query, schema: { type: integer, minimum: 1, maximum: 500, default: 25 } }
|
|
46444
46519
|
- { name: after, in: query, schema: { type: string } }
|
|
46445
46520
|
responses:
|
|
46521
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
46522
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
46446
46523
|
'200':
|
|
46447
46524
|
description: Report run status (plus results when completed)
|
|
46448
46525
|
content:
|
|
@@ -47002,6 +47079,7 @@ paths:
|
|
|
47002
47079
|
parameters:
|
|
47003
47080
|
- { name: accountId, in: query, required: true, schema: { type: string }, description: ID of the `tiktokads` (or parent `tiktok` posting) SocialAccount }
|
|
47004
47081
|
responses:
|
|
47082
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
47005
47083
|
'200':
|
|
47006
47084
|
description: Business centers
|
|
47007
47085
|
content:
|
|
@@ -47014,7 +47092,8 @@ paths:
|
|
|
47014
47092
|
items: { $ref: '#/components/schemas/BusinessCenter' }
|
|
47015
47093
|
'400': { $ref: '#/components/responses/BadRequest' }
|
|
47016
47094
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
47017
|
-
'404': {
|
|
47095
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
47096
|
+
|
|
47018
47097
|
'422': { description: TikTok Ads not connected }
|
|
47019
47098
|
|
|
47020
47099
|
/v1/ads/activity:
|
|
@@ -47041,6 +47120,8 @@ paths:
|
|
|
47041
47120
|
- { name: limit, in: query, schema: { type: integer, minimum: 1, maximum: 200, default: 50 }, description: Rows per page }
|
|
47042
47121
|
- { name: after, in: query, schema: { type: string }, description: "Cursor from paging.after of the previous page." }
|
|
47043
47122
|
responses:
|
|
47123
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
47124
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
47044
47125
|
'200':
|
|
47045
47126
|
description: Activity rows (raw Meta shape)
|
|
47046
47127
|
content:
|
|
@@ -47066,7 +47147,7 @@ paths:
|
|
|
47066
47147
|
operationId: createRfPrediction
|
|
47067
47148
|
tags: ["Reach and Frequency"]
|
|
47068
47149
|
x-platforms: ["meta"]
|
|
47069
|
-
summary: Create
|
|
47150
|
+
summary: 'Create reach-frequency prediction'
|
|
47070
47151
|
description: |-
|
|
47071
47152
|
Creates an R&F prediction. This is a QUOTE, nothing is bought and no ad entities are created.
|
|
47072
47153
|
Provide a date range plus exactly one of `budgetAmount` (Meta predicts reach) or `reach`
|
|
@@ -47099,6 +47180,8 @@ paths:
|
|
|
47099
47180
|
targeting: { type: object, description: "Canonical camelCase TargetingSpec (same shape as /v1/ads/create's `targeting`). Defaults to countries: [US]." }
|
|
47100
47181
|
placements: { type: object, description: "Meta placements object (same shape as /v1/ads/create's `placements`)." }
|
|
47101
47182
|
responses:
|
|
47183
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
47184
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
47102
47185
|
'201':
|
|
47103
47186
|
description: Prediction created (usually ready within seconds)
|
|
47104
47187
|
content:
|
|
@@ -47120,7 +47203,7 @@ paths:
|
|
|
47120
47203
|
operationId: getRfPrediction
|
|
47121
47204
|
tags: ["Reach and Frequency"]
|
|
47122
47205
|
x-platforms: ["meta"]
|
|
47123
|
-
summary:
|
|
47206
|
+
summary: 'Get reach-frequency prediction'
|
|
47124
47207
|
security:
|
|
47125
47208
|
- bearerAuth: []
|
|
47126
47209
|
parameters:
|
|
@@ -47128,6 +47211,8 @@ paths:
|
|
|
47128
47211
|
- { name: accountId, in: query, required: true, schema: { type: string } }
|
|
47129
47212
|
- { name: adAccountId, in: query, required: true, schema: { type: string } }
|
|
47130
47213
|
responses:
|
|
47214
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
47215
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
47131
47216
|
'200':
|
|
47132
47217
|
description: Prediction status and estimates
|
|
47133
47218
|
content:
|
|
@@ -47146,7 +47231,7 @@ paths:
|
|
|
47146
47231
|
operationId: cancelRfReservation
|
|
47147
47232
|
tags: ["Reach and Frequency"]
|
|
47148
47233
|
x-platforms: ["meta"]
|
|
47149
|
-
summary: Cancel
|
|
47234
|
+
summary: 'Cancel reach-frequency booking'
|
|
47150
47235
|
description: Releases a RESERVATION's locked price and inventory. Unreserved predictions expire on their own.
|
|
47151
47236
|
security:
|
|
47152
47237
|
- bearerAuth: []
|
|
@@ -47155,6 +47240,8 @@ paths:
|
|
|
47155
47240
|
- { name: accountId, in: query, required: true, schema: { type: string } }
|
|
47156
47241
|
- { name: adAccountId, in: query, required: true, schema: { type: string } }
|
|
47157
47242
|
responses:
|
|
47243
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
47244
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
47158
47245
|
'200':
|
|
47159
47246
|
description: Reservation cancelled
|
|
47160
47247
|
'400': { description: "Invalid input, or Meta rejected the cancel" }
|
|
@@ -47167,7 +47254,7 @@ paths:
|
|
|
47167
47254
|
operationId: reserveRfPrediction
|
|
47168
47255
|
tags: ["Reach and Frequency"]
|
|
47169
47256
|
x-platforms: ["meta"]
|
|
47170
|
-
summary: Reserve
|
|
47257
|
+
summary: 'Reserve reach-frequency inventory'
|
|
47171
47258
|
description: |-
|
|
47172
47259
|
Locks the quoted price + inventory until the returned `expiresAt` and mints a NEW
|
|
47173
47260
|
prediction id. Pass that RESERVED id (not the original) as `rfPredictionId` on
|
|
@@ -47187,6 +47274,8 @@ paths:
|
|
|
47187
47274
|
accountId: { type: string }
|
|
47188
47275
|
adAccountId: { type: string }
|
|
47189
47276
|
responses:
|
|
47277
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
47278
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
47190
47279
|
'201':
|
|
47191
47280
|
description: Reserved; `prediction.predictionId` is the new RESERVED id
|
|
47192
47281
|
content:
|
|
@@ -47220,6 +47309,8 @@ paths:
|
|
|
47220
47309
|
- { name: limit, in: query, schema: { type: integer, minimum: 1, maximum: 100, default: 25 }, description: Rows per page }
|
|
47221
47310
|
- { name: after, in: query, schema: { type: string }, description: "Cursor from paging.after of the previous page." }
|
|
47222
47311
|
responses:
|
|
47312
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
47313
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
47223
47314
|
'200':
|
|
47224
47315
|
description: Ad studies (raw Meta shape)
|
|
47225
47316
|
content:
|
|
@@ -47253,6 +47344,7 @@ paths:
|
|
|
47253
47344
|
- { name: accountId, in: query, required: true, schema: { type: string }, description: "Zernio Meta Ads or Facebook SocialAccount ID." }
|
|
47254
47345
|
- { name: adAccountId, in: query, required: true, schema: { type: string, pattern: '^act_[0-9]+$' }, description: "Meta ad account ID including the act_ prefix." }
|
|
47255
47346
|
responses:
|
|
47347
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
47256
47348
|
'200':
|
|
47257
47349
|
description: "Instagram identities and Page linkage."
|
|
47258
47350
|
content:
|
|
@@ -47299,7 +47391,8 @@ paths:
|
|
|
47299
47391
|
'400': { $ref: '#/components/responses/BadRequest' }
|
|
47300
47392
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
47301
47393
|
'403': { description: "The account or Meta asset is not accessible." }
|
|
47302
|
-
'404': { $ref: '#/components/responses/
|
|
47394
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
47395
|
+
|
|
47303
47396
|
'501': { description: "Only supported on Meta Ads and Facebook accounts." }
|
|
47304
47397
|
|
|
47305
47398
|
/v1/ads/advertisable-applications:
|
|
@@ -47316,6 +47409,7 @@ paths:
|
|
|
47316
47409
|
- { name: accountId, in: query, required: true, schema: { type: string }, description: "Zernio Meta Ads or Facebook SocialAccount ID." }
|
|
47317
47410
|
- { name: adAccountId, in: query, required: true, schema: { type: string, pattern: '^act_[0-9]+$' }, description: "Meta ad account ID including the act_ prefix." }
|
|
47318
47411
|
responses:
|
|
47412
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
47319
47413
|
'200':
|
|
47320
47414
|
description: "Applications available for promotion."
|
|
47321
47415
|
content:
|
|
@@ -47349,7 +47443,8 @@ paths:
|
|
|
47349
47443
|
'400': { $ref: '#/components/responses/BadRequest' }
|
|
47350
47444
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
47351
47445
|
'403': { description: "The account or Meta asset is not accessible." }
|
|
47352
|
-
'404': { $ref: '#/components/responses/
|
|
47446
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
47447
|
+
|
|
47353
47448
|
'501': { description: "Only supported on Meta Ads and Facebook accounts." }
|
|
47354
47449
|
|
|
47355
47450
|
/v1/ads/ios-fourteen-campaign-limits:
|
|
@@ -47367,6 +47462,7 @@ paths:
|
|
|
47367
47462
|
- { name: adAccountId, in: query, required: true, schema: { type: string, pattern: '^act_[0-9]+$' }, description: "Meta ad account ID including the act_ prefix." }
|
|
47368
47463
|
- { name: applicationId, in: query, required: true, schema: { type: string, pattern: '^[0-9]+$' }, description: "Meta application ID from advertisable-applications." }
|
|
47369
47464
|
responses:
|
|
47465
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
47370
47466
|
'200':
|
|
47371
47467
|
description: "Application campaign limits."
|
|
47372
47468
|
content:
|
|
@@ -47389,7 +47485,8 @@ paths:
|
|
|
47389
47485
|
'400': { $ref: '#/components/responses/BadRequest' }
|
|
47390
47486
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
47391
47487
|
'403': { description: "The account or Meta asset is not accessible." }
|
|
47392
|
-
'404': { $ref: '#/components/responses/
|
|
47488
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
47489
|
+
|
|
47393
47490
|
'501': { description: "Only supported on Meta Ads and Facebook accounts." }
|
|
47394
47491
|
|
|
47395
47492
|
/v1/ads/businesses:
|
|
@@ -47411,6 +47508,8 @@ paths:
|
|
|
47411
47508
|
- { name: limit, in: query, schema: { type: integer, minimum: 1, maximum: 100, default: 25 }, description: Rows per page }
|
|
47412
47509
|
- { name: after, in: query, schema: { type: string }, description: "Cursor from paging.after of the previous page." }
|
|
47413
47510
|
responses:
|
|
47511
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
47512
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
47414
47513
|
'200':
|
|
47415
47514
|
description: Businesses (raw Meta shape)
|
|
47416
47515
|
content:
|
|
@@ -47447,6 +47546,8 @@ paths:
|
|
|
47447
47546
|
- { name: limit, in: query, schema: { type: integer, minimum: 1, maximum: 100, default: 25 }, description: Rows per page }
|
|
47448
47547
|
- { name: after, in: query, schema: { type: string }, description: "Cursor from paging.after of the previous page." }
|
|
47449
47548
|
responses:
|
|
47549
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
47550
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
47450
47551
|
'200':
|
|
47451
47552
|
description: Ad labels (raw Meta shape)
|
|
47452
47553
|
content:
|
|
@@ -47472,7 +47573,7 @@ paths:
|
|
|
47472
47573
|
operationId: listHighDemandPeriods
|
|
47473
47574
|
tags: ["Ad Accounts"]
|
|
47474
47575
|
x-platforms: ["meta"]
|
|
47475
|
-
summary:
|
|
47576
|
+
summary: 'List high-demand periods'
|
|
47476
47577
|
description: |-
|
|
47477
47578
|
Scheduled budget increases (Meta's budget-scheduling API). The Graph edge lives on the
|
|
47478
47579
|
campaign and ad-set nodes only, so exactly one of `campaignId` / `adSetId` (platform
|
|
@@ -47487,6 +47588,8 @@ paths:
|
|
|
47487
47588
|
- { name: limit, in: query, schema: { type: integer, minimum: 1, maximum: 100, default: 25 }, description: Rows per page }
|
|
47488
47589
|
- { name: after, in: query, schema: { type: string }, description: "Cursor from paging.after of the previous page." }
|
|
47489
47590
|
responses:
|
|
47591
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
47592
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
47490
47593
|
'200':
|
|
47491
47594
|
description: Budget schedules (raw Meta shape)
|
|
47492
47595
|
content:
|
|
@@ -47541,6 +47644,8 @@ paths:
|
|
|
47541
47644
|
recurrenceType: { type: string, enum: [ONE_TIME, WEEKLY, MONTHLY] }
|
|
47542
47645
|
currency: { type: string, description: "Ad account currency, for the ABSOLUTE minor-unit conversion. Ignored for MULTIPLIER." }
|
|
47543
47646
|
responses:
|
|
47647
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
47648
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
47544
47649
|
'201':
|
|
47545
47650
|
description: Budget schedule created
|
|
47546
47651
|
content:
|
|
@@ -47576,6 +47681,8 @@ paths:
|
|
|
47576
47681
|
- { name: limit, in: query, schema: { type: integer, minimum: 1, maximum: 100, default: 25 }, description: Rows per page }
|
|
47577
47682
|
- { name: after, in: query, schema: { type: string }, description: "Cursor from paging.after of the previous page." }
|
|
47578
47683
|
responses:
|
|
47684
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
47685
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
47579
47686
|
'200':
|
|
47580
47687
|
description: Creatives (raw Meta shape)
|
|
47581
47688
|
content:
|
|
@@ -47661,6 +47768,8 @@ paths:
|
|
|
47661
47768
|
promotion: { type: PERCENTAGE_OFF, value: 20, code: SAVE20 }
|
|
47662
47769
|
creativeFeatures: { auto_promotion_tag: OPT_OUT }
|
|
47663
47770
|
responses:
|
|
47771
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
47772
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
47664
47773
|
'201':
|
|
47665
47774
|
description: Creative created
|
|
47666
47775
|
content:
|
|
@@ -47700,6 +47809,8 @@ paths:
|
|
|
47700
47809
|
- { name: accountId, in: query, required: true, schema: { type: string }, description: "Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token." }
|
|
47701
47810
|
- { name: fields, in: query, schema: { type: string }, description: "Comma-separated Graph field override (supports nested {} projections)." }
|
|
47702
47811
|
responses:
|
|
47812
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
47813
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
47703
47814
|
'200':
|
|
47704
47815
|
description: Creative details
|
|
47705
47816
|
content:
|
|
@@ -47736,6 +47847,8 @@ paths:
|
|
|
47736
47847
|
accountId: { type: string, description: "Zernio SocialAccount id (posting or ads variant); its platform decides where the campaign is created." }
|
|
47737
47848
|
name: { type: string, maxLength: 255 }
|
|
47738
47849
|
responses:
|
|
47850
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
47851
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
47739
47852
|
'200':
|
|
47740
47853
|
description: Creative renamed
|
|
47741
47854
|
content:
|
|
@@ -47764,6 +47877,8 @@ paths:
|
|
|
47764
47877
|
- { name: creativeId, in: path, required: true, schema: { type: string }, description: Platform creative id }
|
|
47765
47878
|
- { name: accountId, in: query, required: true, schema: { type: string }, description: "Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token." }
|
|
47766
47879
|
responses:
|
|
47880
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
47881
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
47767
47882
|
'200':
|
|
47768
47883
|
description: Creative deleted
|
|
47769
47884
|
content:
|
|
@@ -47810,6 +47925,8 @@ paths:
|
|
|
47810
47925
|
- { name: limit, in: query, schema: { type: integer, minimum: 1, maximum: 100, default: 25 }, description: Rows per page }
|
|
47811
47926
|
- { name: after, in: query, schema: { type: string }, description: "Cursor from paging.after of the previous page. Meta does not document paging on this edge; `after` comes back null when it omits cursors." }
|
|
47812
47927
|
responses:
|
|
47928
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
47929
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
47813
47930
|
'200':
|
|
47814
47931
|
description: Value rule sets
|
|
47815
47932
|
content:
|
|
@@ -47886,6 +48003,8 @@ paths:
|
|
|
47886
48003
|
description: "Evaluated in order; the first matching rule wins."
|
|
47887
48004
|
items: { $ref: '#/components/schemas/ValueRule' }
|
|
47888
48005
|
responses:
|
|
48006
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
48007
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
47889
48008
|
'201':
|
|
47890
48009
|
description: Value rule set created
|
|
47891
48010
|
content:
|
|
@@ -47920,6 +48039,8 @@ paths:
|
|
|
47920
48039
|
- { name: valueRuleSetId, in: path, required: true, schema: { type: string }, description: "Platform value rule set id." }
|
|
47921
48040
|
- { name: accountId, in: query, required: true, schema: { type: string }, description: "Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token." }
|
|
47922
48041
|
responses:
|
|
48042
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
48043
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
47923
48044
|
'200':
|
|
47924
48045
|
description: Value rule set
|
|
47925
48046
|
content:
|
|
@@ -47976,6 +48097,8 @@ paths:
|
|
|
47976
48097
|
description: "The COMPLETE rule list. Omitting a rule deletes it on Meta."
|
|
47977
48098
|
items: { $ref: '#/components/schemas/ValueRule' }
|
|
47978
48099
|
responses:
|
|
48100
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
48101
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
47979
48102
|
'200':
|
|
47980
48103
|
description: Value rule set replaced
|
|
47981
48104
|
content:
|
|
@@ -48010,6 +48133,8 @@ paths:
|
|
|
48010
48133
|
- { name: valueRuleSetId, in: path, required: true, schema: { type: string }, description: "Platform value rule set id." }
|
|
48011
48134
|
- { name: accountId, in: query, required: true, schema: { type: string }, description: "Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token." }
|
|
48012
48135
|
responses:
|
|
48136
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
48137
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
48013
48138
|
'200':
|
|
48014
48139
|
description: Value rule set deleted
|
|
48015
48140
|
content:
|
|
@@ -48106,10 +48231,10 @@ paths:
|
|
|
48106
48231
|
$ref: "#/components/responses/Unauthorized"
|
|
48107
48232
|
"403":
|
|
48108
48233
|
description: "Ads access and permission to the selected account are required."
|
|
48109
|
-
|
|
48110
|
-
|
|
48234
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
48235
|
+
|
|
48111
48236
|
"409":
|
|
48112
|
-
description:
|
|
48237
|
+
description: 'Ambiguous campaign or account selection. Use a profile-scoped key. A list still attached to a campaign may also be rejected by Google. The account may also be inactive or need reconnection (code ads_connection_required). Reconnect it and read GET /v1/accounts for its current ID before retrying.'
|
|
48113
48238
|
"422":
|
|
48114
48239
|
description: "Google Ads connection is missing or unavailable."
|
|
48115
48240
|
"429":
|
|
@@ -48210,10 +48335,10 @@ paths:
|
|
|
48210
48335
|
$ref: "#/components/responses/Unauthorized"
|
|
48211
48336
|
"403":
|
|
48212
48337
|
description: "Ads access and permission to the selected account are required."
|
|
48213
|
-
|
|
48214
|
-
|
|
48338
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
48339
|
+
|
|
48215
48340
|
"409":
|
|
48216
|
-
description:
|
|
48341
|
+
description: 'Ambiguous campaign or account selection. Use a profile-scoped key. A list still attached to a campaign may also be rejected by Google. The account may also be inactive or need reconnection (code ads_connection_required). Reconnect it and read GET /v1/accounts for its current ID before retrying.'
|
|
48217
48342
|
"422":
|
|
48218
48343
|
description: "Google Ads connection is missing or unavailable."
|
|
48219
48344
|
"429":
|
|
@@ -48322,10 +48447,10 @@ paths:
|
|
|
48322
48447
|
$ref: "#/components/responses/Unauthorized"
|
|
48323
48448
|
"403":
|
|
48324
48449
|
description: "Ads access and permission to the selected account are required."
|
|
48325
|
-
|
|
48326
|
-
|
|
48450
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
48451
|
+
|
|
48327
48452
|
"409":
|
|
48328
|
-
description:
|
|
48453
|
+
description: 'Ambiguous campaign or account selection. Use a profile-scoped key. A list still attached to a campaign may also be rejected by Google. The account may also be inactive or need reconnection (code ads_connection_required). Reconnect it and read GET /v1/accounts for its current ID before retrying.'
|
|
48329
48454
|
"422":
|
|
48330
48455
|
description: "Google Ads connection is missing or unavailable."
|
|
48331
48456
|
"429":
|
|
@@ -48414,10 +48539,10 @@ paths:
|
|
|
48414
48539
|
$ref: "#/components/responses/Unauthorized"
|
|
48415
48540
|
"403":
|
|
48416
48541
|
description: "Ads access and permission to the selected account are required."
|
|
48417
|
-
|
|
48418
|
-
|
|
48542
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
48543
|
+
|
|
48419
48544
|
"409":
|
|
48420
|
-
description:
|
|
48545
|
+
description: 'Ambiguous campaign or account selection. Use a profile-scoped key. A list still attached to a campaign may also be rejected by Google. The account may also be inactive or need reconnection (code ads_connection_required). Reconnect it and read GET /v1/accounts for its current ID before retrying.'
|
|
48421
48546
|
"422":
|
|
48422
48547
|
description: "Google Ads connection is missing or unavailable."
|
|
48423
48548
|
"429":
|
|
@@ -48495,10 +48620,10 @@ paths:
|
|
|
48495
48620
|
$ref: "#/components/responses/Unauthorized"
|
|
48496
48621
|
"403":
|
|
48497
48622
|
description: "Ads access and permission to the selected account are required."
|
|
48498
|
-
|
|
48499
|
-
|
|
48623
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
48624
|
+
|
|
48500
48625
|
"409":
|
|
48501
|
-
description:
|
|
48626
|
+
description: 'Ambiguous campaign or account selection. Use a profile-scoped key. A list still attached to a campaign may also be rejected by Google. The account may also be inactive or need reconnection (code ads_connection_required). Reconnect it and read GET /v1/accounts for its current ID before retrying.'
|
|
48502
48627
|
"422":
|
|
48503
48628
|
description: "Google Ads connection is missing or unavailable."
|
|
48504
48629
|
"429":
|
|
@@ -48597,10 +48722,10 @@ paths:
|
|
|
48597
48722
|
$ref: "#/components/responses/Unauthorized"
|
|
48598
48723
|
"403":
|
|
48599
48724
|
description: "Ads access and permission to the selected account are required."
|
|
48600
|
-
|
|
48601
|
-
|
|
48725
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
48726
|
+
|
|
48602
48727
|
"409":
|
|
48603
|
-
description:
|
|
48728
|
+
description: 'Ambiguous campaign or account selection. Use a profile-scoped key. A list still attached to a campaign may also be rejected by Google. The account may also be inactive or need reconnection (code ads_connection_required). Reconnect it and read GET /v1/accounts for its current ID before retrying.'
|
|
48604
48729
|
"422":
|
|
48605
48730
|
description: "Google Ads connection is missing or unavailable."
|
|
48606
48731
|
"429":
|
|
@@ -48682,10 +48807,10 @@ paths:
|
|
|
48682
48807
|
$ref: "#/components/responses/Unauthorized"
|
|
48683
48808
|
"403":
|
|
48684
48809
|
description: "Ads access and permission to the selected account are required."
|
|
48685
|
-
|
|
48686
|
-
|
|
48810
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
48811
|
+
|
|
48687
48812
|
"409":
|
|
48688
|
-
description:
|
|
48813
|
+
description: 'Ambiguous campaign or account selection. Use a profile-scoped key. A list still attached to a campaign may also be rejected by Google. The account may also be inactive or need reconnection (code ads_connection_required). Reconnect it and read GET /v1/accounts for its current ID before retrying.'
|
|
48689
48814
|
"422":
|
|
48690
48815
|
description: "Google Ads connection is missing or unavailable."
|
|
48691
48816
|
"429":
|
|
@@ -48772,10 +48897,10 @@ paths:
|
|
|
48772
48897
|
$ref: "#/components/responses/Unauthorized"
|
|
48773
48898
|
"403":
|
|
48774
48899
|
description: "Ads access and permission to the selected account are required."
|
|
48775
|
-
|
|
48776
|
-
|
|
48900
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
48901
|
+
|
|
48777
48902
|
"409":
|
|
48778
|
-
description:
|
|
48903
|
+
description: 'Ambiguous campaign or account selection. Use a profile-scoped key. A list still attached to a campaign may also be rejected by Google. The account may also be inactive or need reconnection (code ads_connection_required). Reconnect it and read GET /v1/accounts for its current ID before retrying.'
|
|
48779
48904
|
"422":
|
|
48780
48905
|
description: "Google Ads connection is missing or unavailable."
|
|
48781
48906
|
"429":
|
|
@@ -48812,6 +48937,7 @@ paths:
|
|
|
48812
48937
|
pattern: ^\d+$
|
|
48813
48938
|
description: "Google customer id without dashes. Required when the connection has multiple customers."
|
|
48814
48939
|
responses:
|
|
48940
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
48815
48941
|
'200':
|
|
48816
48942
|
description: "Assets returned."
|
|
48817
48943
|
content:
|
|
@@ -48847,8 +48973,8 @@ paths:
|
|
|
48847
48973
|
$ref: '#/components/responses/Unauthorized'
|
|
48848
48974
|
'403':
|
|
48849
48975
|
description: "Ads access is required."
|
|
48850
|
-
'404':
|
|
48851
|
-
|
|
48976
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
48977
|
+
|
|
48852
48978
|
'429':
|
|
48853
48979
|
description: "Google Ads operations budget or platform quota exhausted."
|
|
48854
48980
|
'501':
|
|
@@ -48896,6 +49022,7 @@ paths:
|
|
|
48896
49022
|
callouts:
|
|
48897
49023
|
- Fast setup
|
|
48898
49024
|
responses:
|
|
49025
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
48899
49026
|
'201':
|
|
48900
49027
|
description: "Assets created and attached."
|
|
48901
49028
|
content:
|
|
@@ -48920,8 +49047,8 @@ paths:
|
|
|
48920
49047
|
$ref: '#/components/responses/Unauthorized'
|
|
48921
49048
|
'403':
|
|
48922
49049
|
description: "Ads access is required."
|
|
48923
|
-
'404':
|
|
48924
|
-
|
|
49050
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
49051
|
+
|
|
48925
49052
|
'429':
|
|
48926
49053
|
description: "Google Ads operations budget or platform quota exhausted."
|
|
48927
49054
|
'501':
|
|
@@ -48989,6 +49116,7 @@ paths:
|
|
|
48989
49116
|
calloutAsset:
|
|
48990
49117
|
calloutText: Simple integration
|
|
48991
49118
|
responses:
|
|
49119
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
48992
49120
|
'200':
|
|
48993
49121
|
description: "Assets returned."
|
|
48994
49122
|
content:
|
|
@@ -49006,8 +49134,8 @@ paths:
|
|
|
49006
49134
|
$ref: '#/components/responses/Unauthorized'
|
|
49007
49135
|
'403':
|
|
49008
49136
|
description: "Ads access is required."
|
|
49009
|
-
'404':
|
|
49010
|
-
|
|
49137
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
49138
|
+
|
|
49011
49139
|
'429':
|
|
49012
49140
|
description: "Google Ads operations budget or platform quota exhausted."
|
|
49013
49141
|
'501':
|
|
@@ -49050,6 +49178,7 @@ paths:
|
|
|
49050
49178
|
customerId: '1234567890'
|
|
49051
49179
|
assetId: '123'
|
|
49052
49180
|
responses:
|
|
49181
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
49053
49182
|
'200':
|
|
49054
49183
|
description: "Assets returned."
|
|
49055
49184
|
content:
|
|
@@ -49067,8 +49196,8 @@ paths:
|
|
|
49067
49196
|
$ref: '#/components/responses/Unauthorized'
|
|
49068
49197
|
'403':
|
|
49069
49198
|
description: "Ads access is required."
|
|
49070
|
-
'404':
|
|
49071
|
-
|
|
49199
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
49200
|
+
|
|
49072
49201
|
'429':
|
|
49073
49202
|
description: "Google Ads operations budget or platform quota exhausted."
|
|
49074
49203
|
'501':
|
|
@@ -49102,6 +49231,7 @@ paths:
|
|
|
49102
49231
|
pattern: ^\d+$
|
|
49103
49232
|
description: "Google customer id without dashes. Required when the connection has multiple customers."
|
|
49104
49233
|
responses:
|
|
49234
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
49105
49235
|
'200':
|
|
49106
49236
|
description: "Assets returned."
|
|
49107
49237
|
content:
|
|
@@ -49148,8 +49278,8 @@ paths:
|
|
|
49148
49278
|
$ref: '#/components/responses/Unauthorized'
|
|
49149
49279
|
'403':
|
|
49150
49280
|
description: "Ads access is required."
|
|
49151
|
-
'404':
|
|
49152
|
-
|
|
49281
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
49282
|
+
|
|
49153
49283
|
'429':
|
|
49154
49284
|
description: "Google Ads operations budget or platform quota exhausted."
|
|
49155
49285
|
'501':
|
|
@@ -49196,6 +49326,7 @@ paths:
|
|
|
49196
49326
|
- text: Pricing
|
|
49197
49327
|
linkUrl: https://zernio.com/pricing
|
|
49198
49328
|
responses:
|
|
49329
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
49199
49330
|
'201':
|
|
49200
49331
|
description: "Assets created and attached."
|
|
49201
49332
|
content:
|
|
@@ -49233,8 +49364,8 @@ paths:
|
|
|
49233
49364
|
$ref: '#/components/responses/Unauthorized'
|
|
49234
49365
|
'403':
|
|
49235
49366
|
description: "Ads access is required."
|
|
49236
|
-
'404':
|
|
49237
|
-
|
|
49367
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
49368
|
+
|
|
49238
49369
|
'429':
|
|
49239
49370
|
description: "Google Ads operations budget or platform quota exhausted."
|
|
49240
49371
|
'501':
|
|
@@ -49319,6 +49450,7 @@ paths:
|
|
|
49319
49450
|
finalUrls:
|
|
49320
49451
|
- https://zernio.com/pricing
|
|
49321
49452
|
responses:
|
|
49453
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
49322
49454
|
'200':
|
|
49323
49455
|
description: "Assets returned."
|
|
49324
49456
|
content:
|
|
@@ -49336,8 +49468,8 @@ paths:
|
|
|
49336
49468
|
$ref: '#/components/responses/Unauthorized'
|
|
49337
49469
|
'403':
|
|
49338
49470
|
description: "Ads access is required."
|
|
49339
|
-
'404':
|
|
49340
|
-
|
|
49471
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
49472
|
+
|
|
49341
49473
|
'429':
|
|
49342
49474
|
description: "Google Ads operations budget or platform quota exhausted."
|
|
49343
49475
|
'501':
|
|
@@ -49380,6 +49512,7 @@ paths:
|
|
|
49380
49512
|
customerId: '1234567890'
|
|
49381
49513
|
assetId: '123'
|
|
49382
49514
|
responses:
|
|
49515
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
49383
49516
|
'200':
|
|
49384
49517
|
description: "Assets returned."
|
|
49385
49518
|
content:
|
|
@@ -49397,8 +49530,8 @@ paths:
|
|
|
49397
49530
|
$ref: '#/components/responses/Unauthorized'
|
|
49398
49531
|
'403':
|
|
49399
49532
|
description: "Ads access is required."
|
|
49400
|
-
'404':
|
|
49401
|
-
|
|
49533
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
49534
|
+
|
|
49402
49535
|
'429':
|
|
49403
49536
|
description: "Google Ads operations budget or platform quota exhausted."
|
|
49404
49537
|
'501':
|
|
@@ -49432,6 +49565,7 @@ paths:
|
|
|
49432
49565
|
pattern: ^\d+$
|
|
49433
49566
|
description: "Google customer id without dashes. Required when the connection has multiple customers."
|
|
49434
49567
|
responses:
|
|
49568
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
49435
49569
|
'200':
|
|
49436
49570
|
description: "Assets returned."
|
|
49437
49571
|
content:
|
|
@@ -49475,8 +49609,8 @@ paths:
|
|
|
49475
49609
|
$ref: '#/components/responses/Unauthorized'
|
|
49476
49610
|
'403':
|
|
49477
49611
|
description: "Ads access is required."
|
|
49478
|
-
'404':
|
|
49479
|
-
|
|
49612
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
49613
|
+
|
|
49480
49614
|
'429':
|
|
49481
49615
|
description: "Google Ads operations budget or platform quota exhausted."
|
|
49482
49616
|
'501':
|
|
@@ -49526,6 +49660,7 @@ paths:
|
|
|
49526
49660
|
- Analytics
|
|
49527
49661
|
- Messaging
|
|
49528
49662
|
responses:
|
|
49663
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
49529
49664
|
'201':
|
|
49530
49665
|
description: "Assets created and attached."
|
|
49531
49666
|
content:
|
|
@@ -49572,8 +49707,8 @@ paths:
|
|
|
49572
49707
|
$ref: '#/components/responses/Unauthorized'
|
|
49573
49708
|
'403':
|
|
49574
49709
|
description: "Ads access is required."
|
|
49575
|
-
'404':
|
|
49576
|
-
|
|
49710
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
49711
|
+
|
|
49577
49712
|
'429':
|
|
49578
49713
|
description: "Google Ads operations budget or platform quota exhausted."
|
|
49579
49714
|
'501':
|
|
@@ -49638,6 +49773,7 @@ paths:
|
|
|
49638
49773
|
- Reporting
|
|
49639
49774
|
- Messaging
|
|
49640
49775
|
responses:
|
|
49776
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
49641
49777
|
'200':
|
|
49642
49778
|
description: "Assets returned."
|
|
49643
49779
|
content:
|
|
@@ -49655,8 +49791,8 @@ paths:
|
|
|
49655
49791
|
$ref: '#/components/responses/Unauthorized'
|
|
49656
49792
|
'403':
|
|
49657
49793
|
description: "Ads access is required."
|
|
49658
|
-
'404':
|
|
49659
|
-
|
|
49794
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
49795
|
+
|
|
49660
49796
|
'429':
|
|
49661
49797
|
description: "Google Ads operations budget or platform quota exhausted."
|
|
49662
49798
|
'501':
|
|
@@ -49699,6 +49835,7 @@ paths:
|
|
|
49699
49835
|
customerId: '1234567890'
|
|
49700
49836
|
assetId: '123'
|
|
49701
49837
|
responses:
|
|
49838
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
49702
49839
|
'200':
|
|
49703
49840
|
description: "Assets returned."
|
|
49704
49841
|
content:
|
|
@@ -49716,8 +49853,8 @@ paths:
|
|
|
49716
49853
|
$ref: '#/components/responses/Unauthorized'
|
|
49717
49854
|
'403':
|
|
49718
49855
|
description: "Ads access is required."
|
|
49719
|
-
'404':
|
|
49720
|
-
|
|
49856
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
49857
|
+
|
|
49721
49858
|
'429':
|
|
49722
49859
|
description: "Google Ads operations budget or platform quota exhausted."
|
|
49723
49860
|
'501':
|
|
@@ -49740,6 +49877,8 @@ paths:
|
|
|
49740
49877
|
- { name: accountId, in: query, required: true, schema: { type: string }, description: "Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token." }
|
|
49741
49878
|
- { name: adAccountId, in: query, required: true, schema: { type: string }, description: "Meta ad account id (act_<n>)." }
|
|
49742
49879
|
responses:
|
|
49880
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
49881
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
49743
49882
|
'200':
|
|
49744
49883
|
description: Account finances
|
|
49745
49884
|
content:
|
|
@@ -49830,6 +49969,7 @@ paths:
|
|
|
49830
49969
|
currency: "EUR"
|
|
49831
49970
|
timezoneId: 1
|
|
49832
49971
|
responses:
|
|
49972
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
49833
49973
|
'201':
|
|
49834
49974
|
description: "Ad account created. Check connectionUpdated and payment instructions."
|
|
49835
49975
|
content:
|
|
@@ -49871,7 +50011,8 @@ paths:
|
|
|
49871
50011
|
content:
|
|
49872
50012
|
application/json:
|
|
49873
50013
|
schema: { $ref: '#/components/schemas/ErrorResponse' }
|
|
49874
|
-
'404': { $ref: '#/components/responses/
|
|
50014
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
50015
|
+
|
|
49875
50016
|
'502':
|
|
49876
50017
|
description: "Creation outcome unknown. Check Ads Manager before repeating this non-idempotent request."
|
|
49877
50018
|
content:
|
|
@@ -49911,6 +50052,9 @@ paths:
|
|
|
49911
50052
|
- { name: adAccountId, in: query, required: false, schema: { type: string }, description: "Filter response to a single platform ad account ID (e.g. `act_123` for Meta, advertiser_id for TikTok). Returns at most one item." }
|
|
49912
50053
|
- { name: limit, in: query, required: false, schema: { type: integer, minimum: 1, maximum: 1000 }, description: "Clamp the returned `accounts[]` length. Useful for typeahead pickers on agency tokens with hundreds of advertisers." }
|
|
49913
50054
|
responses:
|
|
50055
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
50056
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
50057
|
+
'400': { $ref: '#/components/responses/BadRequest' }
|
|
49914
50058
|
'200':
|
|
49915
50059
|
description: Ad accounts
|
|
49916
50060
|
content:
|
|
@@ -50003,6 +50147,7 @@ paths:
|
|
|
50003
50147
|
defaultDsaBeneficiary: { type: string, maxLength: 100, description: "Legal entity benefiting from ads on this ad account" }
|
|
50004
50148
|
defaultDsaPayor: { type: string, maxLength: 100, description: "Legal entity paying for ads on this ad account. Defaults to defaultDsaBeneficiary when omitted." }
|
|
50005
50149
|
responses:
|
|
50150
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
50006
50151
|
'200':
|
|
50007
50152
|
description: DSA defaults updated (re-read from Meta after the write)
|
|
50008
50153
|
content:
|
|
@@ -50019,9 +50164,7 @@ paths:
|
|
|
50019
50164
|
'400':
|
|
50020
50165
|
description: Unsupported platform (non-Meta account) or invalid adAccountId
|
|
50021
50166
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
50022
|
-
'404':
|
|
50023
|
-
description: Account not found
|
|
50024
|
-
|
|
50167
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
50025
50168
|
/v1/ads/dsa-defaults:
|
|
50026
50169
|
get:
|
|
50027
50170
|
x-resource-group: "ads"
|
|
@@ -50039,6 +50182,7 @@ paths:
|
|
|
50039
50182
|
- { name: accountId, in: query, required: true, schema: { type: string }, description: "Account ID (metaads, or a facebook/instagram posting account)" }
|
|
50040
50183
|
- { name: adAccountId, in: query, required: true, schema: { type: string }, description: "Meta ad account ID (act_...)" }
|
|
50041
50184
|
responses:
|
|
50185
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
50042
50186
|
'200':
|
|
50043
50187
|
description: Current DSA defaults (empty object when none are set)
|
|
50044
50188
|
content:
|
|
@@ -50055,16 +50199,14 @@ paths:
|
|
|
50055
50199
|
'400':
|
|
50056
50200
|
description: Non-Meta adAccountId
|
|
50057
50201
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
50058
|
-
'404':
|
|
50059
|
-
description: Account not found
|
|
50060
|
-
|
|
50202
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
50061
50203
|
/v1/ads/dsa-recommendations:
|
|
50062
50204
|
get:
|
|
50063
50205
|
x-resource-group: "ads"
|
|
50064
50206
|
operationId: getDsaRecommendations
|
|
50065
50207
|
tags: ["Ad Accounts"]
|
|
50066
50208
|
x-platforms: ["meta"]
|
|
50067
|
-
summary:
|
|
50209
|
+
summary: 'Get DSA recommendations'
|
|
50068
50210
|
description: |
|
|
50069
50211
|
Returns Meta's suggested beneficiary/payor names for an ad account, derived by Meta
|
|
50070
50212
|
from the account's recent activity. Useful for prefilling `dsaBeneficiary`/`dsaPayor`
|
|
@@ -50080,6 +50222,7 @@ paths:
|
|
|
50080
50222
|
- { name: accountId, in: query, required: true, schema: { type: string }, description: "Account ID (metaads, or a facebook/instagram posting account)" }
|
|
50081
50223
|
- { name: adAccountId, in: query, required: true, schema: { type: string }, description: "Meta ad account ID (act_...)" }
|
|
50082
50224
|
responses:
|
|
50225
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
50083
50226
|
'200':
|
|
50084
50227
|
description: Suggested DSA strings (may be empty when Meta has no recommendations)
|
|
50085
50228
|
content:
|
|
@@ -50094,9 +50237,7 @@ paths:
|
|
|
50094
50237
|
'400':
|
|
50095
50238
|
description: Non-Meta adAccountId
|
|
50096
50239
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
50097
|
-
'404':
|
|
50098
|
-
description: Account not found
|
|
50099
|
-
|
|
50240
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
50100
50241
|
/v1/ads/boost:
|
|
50101
50242
|
post:
|
|
50102
50243
|
x-resource-group: "ads"
|
|
@@ -50429,6 +50570,7 @@ paths:
|
|
|
50429
50570
|
budget: { amount: 2.61, type: daily }
|
|
50430
50571
|
status: PAUSED
|
|
50431
50572
|
responses:
|
|
50573
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
50432
50574
|
'201':
|
|
50433
50575
|
description: Ad created
|
|
50434
50576
|
content:
|
|
@@ -50445,6 +50587,7 @@ paths:
|
|
|
50445
50587
|
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.'
|
|
50446
50588
|
'409':
|
|
50447
50589
|
description: |
|
|
50590
|
+
The account may also be inactive or need reconnection (code ads_connection_required). Reconnect it and read GET /v1/accounts for its current ID before retrying.
|
|
50448
50591
|
An identical boost request is already in progress (with or without
|
|
50449
50592
|
an Idempotency-Key). Wait for it to finish instead of retrying.
|
|
50450
50593
|
'422':
|
|
@@ -51595,6 +51738,8 @@ paths:
|
|
|
51595
51738
|
promotion: { type: PERCENTAGE_OFF, value: 20, code: SAVE20 }
|
|
51596
51739
|
creativeFeatures: { auto_promotion_tag: OPT_OUT }
|
|
51597
51740
|
responses:
|
|
51741
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
51742
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
51598
51743
|
'200':
|
|
51599
51744
|
description: 'validateOnly dry-run passed, nothing was created'
|
|
51600
51745
|
content:
|
|
@@ -51957,6 +52102,8 @@ paths:
|
|
|
51957
52102
|
- { name: cursor, in: query, schema: { type: string } }
|
|
51958
52103
|
- { name: since, in: query, schema: { type: integer }, description: Unix seconds. }
|
|
51959
52104
|
responses:
|
|
52105
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
52106
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
51960
52107
|
'200':
|
|
51961
52108
|
description: Leads for the form.
|
|
51962
52109
|
content:
|
|
@@ -52047,6 +52194,8 @@ paths:
|
|
|
52047
52194
|
imageBase64: { type: string, description: "Raw base64 image bytes, or a full data URL (the data:image/...;base64, prefix is stripped)." }
|
|
52048
52195
|
filename: { type: string, description: "Optional filename shown in Meta's image library. Defaults to ad_image.jpg." }
|
|
52049
52196
|
responses:
|
|
52197
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
52198
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
52050
52199
|
'201':
|
|
52051
52200
|
description: Image uploaded
|
|
52052
52201
|
content:
|
|
@@ -52085,6 +52234,8 @@ paths:
|
|
|
52085
52234
|
- { name: limit, in: query, schema: { type: integer, minimum: 1, maximum: 100, default: 25 }, description: Rows per page }
|
|
52086
52235
|
- { name: after, in: query, schema: { type: string }, description: "Cursor from paging.after of the previous page." }
|
|
52087
52236
|
responses:
|
|
52237
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
52238
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
52088
52239
|
'200':
|
|
52089
52240
|
description: Ad images (raw Meta shape)
|
|
52090
52241
|
content:
|
|
@@ -52140,6 +52291,8 @@ paths:
|
|
|
52140
52291
|
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." }
|
|
52141
52292
|
filename: { type: string, description: "Optional filename shown alongside the upload session. Applied only when uploading via videoBase64." }
|
|
52142
52293
|
responses:
|
|
52294
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
52295
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
52143
52296
|
'201':
|
|
52144
52297
|
description: Video uploaded and ready
|
|
52145
52298
|
content:
|
|
@@ -52189,6 +52342,8 @@ paths:
|
|
|
52189
52342
|
- { name: limit, in: query, schema: { type: integer, minimum: 1, maximum: 100, default: 25 }, description: Rows per page }
|
|
52190
52343
|
- { name: after, in: query, schema: { type: string }, description: "Cursor from paging.after of the previous page." }
|
|
52191
52344
|
responses:
|
|
52345
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
52346
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
52192
52347
|
'200':
|
|
52193
52348
|
description: Ad videos (raw Meta shape)
|
|
52194
52349
|
content:
|
|
@@ -52229,6 +52384,8 @@ paths:
|
|
|
52229
52384
|
- { name: accountId, in: query, required: true, schema: { type: string }, description: "Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token." }
|
|
52230
52385
|
- { name: adAccountId, in: query, required: true, schema: { type: string }, description: "Meta ad account id (act_<n>) that owns the video." }
|
|
52231
52386
|
responses:
|
|
52387
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
52388
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
52232
52389
|
'200':
|
|
52233
52390
|
description: Video deleted
|
|
52234
52391
|
content:
|
|
@@ -52262,6 +52419,9 @@ paths:
|
|
|
52262
52419
|
- { name: q, in: query, required: true, schema: { type: string }, description: Search query }
|
|
52263
52420
|
- { name: accountId, in: query, required: true, schema: { type: string }, description: Account ID }
|
|
52264
52421
|
responses:
|
|
52422
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
52423
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
52424
|
+
'400': { $ref: '#/components/responses/BadRequest' }
|
|
52265
52425
|
'200':
|
|
52266
52426
|
description: Matching interests
|
|
52267
52427
|
content:
|
|
@@ -52369,6 +52529,7 @@ paths:
|
|
|
52369
52529
|
- { name: countryCode, in: query, required: false, schema: { type: string, minLength: 2, maxLength: 2 }, description: "ISO 3166-1 alpha-2 country code (e.g. NL) to scope a geo search." }
|
|
52370
52530
|
- { name: limit, in: query, required: false, schema: { type: integer, minimum: 1, maximum: 100, default: 25 }, description: "Maximum results to return." }
|
|
52371
52531
|
responses:
|
|
52532
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
52372
52533
|
'200':
|
|
52373
52534
|
description: Matching targeting options (normalized)
|
|
52374
52535
|
content:
|
|
@@ -52392,9 +52553,7 @@ paths:
|
|
|
52392
52553
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
52393
52554
|
'403':
|
|
52394
52555
|
description: Ads access required. Legacy plans need the Ads add-on; included by default on usage-based plans.
|
|
52395
|
-
'404':
|
|
52396
|
-
description: Account not found, or the platform does not support the requested dimension
|
|
52397
|
-
|
|
52556
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
52398
52557
|
/v1/ads/library:
|
|
52399
52558
|
get:
|
|
52400
52559
|
x-resource-group: "ads"
|
|
@@ -52445,6 +52604,7 @@ paths:
|
|
|
52445
52604
|
- { name: limit, in: query, schema: { type: integer, minimum: 1, maximum: 100, default: 25 }, description: "Rows per page. LinkedIn accepts at most 25." }
|
|
52446
52605
|
- { name: after, in: query, schema: { type: string }, description: "paging.after of the previous page." }
|
|
52447
52606
|
responses:
|
|
52607
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
52448
52608
|
'200':
|
|
52449
52609
|
description: Archived ads (raw platform shape)
|
|
52450
52610
|
content:
|
|
@@ -52503,7 +52663,8 @@ paths:
|
|
|
52503
52663
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
52504
52664
|
'403':
|
|
52505
52665
|
description: "Ads access required (legacy plans need the Ads add-on; included on usage-based plans), or `payment_required`: the billing owner has no payment method on file and no legacy paid plan. Searches are free; the card keeps the shared archive quota for real accounts."
|
|
52506
|
-
'404': {
|
|
52666
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
52667
|
+
|
|
52507
52668
|
'501': { description: Only supported on Meta and LinkedIn accounts }
|
|
52508
52669
|
'503': { description: "Meta's Ad Library is unavailable on Zernio's side (`PLATFORM_DISABLED`); LinkedIn searches are unaffected." }
|
|
52509
52670
|
|
|
@@ -52545,6 +52706,7 @@ paths:
|
|
|
52545
52706
|
own vocabulary, e.g. Meta `REACH`, `LINK_CLICKS`, `OFFSITE_CONVERSIONS`).
|
|
52546
52707
|
Some platforms vary the estimate by goal; omit to use the platform default.
|
|
52547
52708
|
responses:
|
|
52709
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
52548
52710
|
'200':
|
|
52549
52711
|
description: Normalized reach estimate
|
|
52550
52712
|
content:
|
|
@@ -52564,8 +52726,7 @@ paths:
|
|
|
52564
52726
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
52565
52727
|
'403':
|
|
52566
52728
|
description: Ads access required. Legacy plans need the Ads add-on; included by default on usage-based plans.
|
|
52567
|
-
'404': { $ref: '#/components/responses/
|
|
52568
|
-
|
|
52729
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
52569
52730
|
/v1/ads/targeting/bid-pricing:
|
|
52570
52731
|
post:
|
|
52571
52732
|
x-resource-group: "ads"
|
|
@@ -52603,6 +52764,7 @@ paths:
|
|
|
52603
52764
|
optimizationTargetType: { type: string, description: "LinkedIn optimizationTargetType, e.g. MAX_CLICK, MAX_IMPRESSION." }
|
|
52604
52765
|
dailyBudget: { type: number, description: "Optional daily budget in whole account-currency units. LinkedIn refines the suggested bid to this budget." }
|
|
52605
52766
|
responses:
|
|
52767
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
52606
52768
|
'200':
|
|
52607
52769
|
description: Pricing insights
|
|
52608
52770
|
content:
|
|
@@ -52636,15 +52798,14 @@ paths:
|
|
|
52636
52798
|
'400': { description: "Invalid targeting or unsupported objective/optimization/bid combination." }
|
|
52637
52799
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
52638
52800
|
'403': { description: "Ads access required." }
|
|
52639
|
-
'404': { $ref: '#/components/responses/
|
|
52640
|
-
|
|
52801
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
52641
52802
|
/v1/ads/targeting/supply-forecast:
|
|
52642
52803
|
post:
|
|
52643
52804
|
x-resource-group: "ads"
|
|
52644
52805
|
operationId: getLinkedInSupplyForecast
|
|
52645
52806
|
tags: ["Ad Targeting"]
|
|
52646
52807
|
x-platforms: ["linkedin"]
|
|
52647
|
-
summary:
|
|
52808
|
+
summary: 'Forecast ad delivery'
|
|
52648
52809
|
description: |
|
|
52649
52810
|
LinkedIn-only. Forecasted impressions, clicks, spend and ~20 other
|
|
52650
52811
|
metrics for a targeting spec over a time range. Wraps LinkedIn's
|
|
@@ -52689,6 +52850,7 @@ paths:
|
|
|
52689
52850
|
enableAudienceExpansion: { type: boolean, description: "Defaults to false." }
|
|
52690
52851
|
connectedTelevisionOnly: { type: boolean, description: "Defaults to false." }
|
|
52691
52852
|
responses:
|
|
52853
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
52692
52854
|
'200':
|
|
52693
52855
|
description: Forecast series
|
|
52694
52856
|
content:
|
|
@@ -52720,8 +52882,7 @@ paths:
|
|
|
52720
52882
|
'400': { description: "Invalid targeting, missing budget, or LinkedIn forecast validation error (e.g. END_DATE_MAX_HORIZON_FOR_FORECAST)." }
|
|
52721
52883
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
52722
52884
|
'403': { description: "Ads access required." }
|
|
52723
|
-
'404': { $ref: '#/components/responses/
|
|
52724
|
-
|
|
52885
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
52725
52886
|
/v1/ads/catalogs:
|
|
52726
52887
|
get:
|
|
52727
52888
|
x-resource-group: "ads"
|
|
@@ -52736,6 +52897,8 @@ paths:
|
|
|
52736
52897
|
- { name: accountId, in: query, required: true, schema: { type: string }, description: "A facebook, instagram, or metaads account ID" }
|
|
52737
52898
|
- { name: adAccountId, in: query, required: true, schema: { type: string }, description: "Meta ad account ID (act_...)" }
|
|
52738
52899
|
responses:
|
|
52900
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
52901
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
52739
52902
|
'200':
|
|
52740
52903
|
description: Catalogs
|
|
52741
52904
|
content:
|
|
@@ -52770,6 +52933,8 @@ paths:
|
|
|
52770
52933
|
- { name: catalogId, in: path, required: true, schema: { type: string }, description: "Meta product catalog ID (from GET /v1/ads/catalogs)" }
|
|
52771
52934
|
- { name: accountId, in: query, required: true, schema: { type: string }, description: "A facebook, instagram, or metaads account ID" }
|
|
52772
52935
|
responses:
|
|
52936
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
52937
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
52773
52938
|
'200':
|
|
52774
52939
|
description: Product sets
|
|
52775
52940
|
content:
|
|
@@ -52805,6 +52970,9 @@ paths:
|
|
|
52805
52970
|
- { name: platform, in: query, schema: { type: string, enum: [facebook, instagram, googleads, tiktok, tiktokads, pinterest, linkedin, linkedinads, twitter, xads] } }
|
|
52806
52971
|
- { name: type, in: query, required: false, schema: { type: string, enum: [customer_list, company_list, engagement, meta_engagement, website, website_retargeting, lookalike, saved_targeting] }, description: "Filter to one audience type. `saved_targeting` returns stored TargetingSpec audiences; the other types return uploaded/derived audiences." }
|
|
52807
52972
|
responses:
|
|
52973
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
52974
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
52975
|
+
'400': { $ref: '#/components/responses/BadRequest' }
|
|
52808
52976
|
'200':
|
|
52809
52977
|
description: Audiences
|
|
52810
52978
|
content:
|
|
@@ -53009,6 +53177,8 @@ paths:
|
|
|
53009
53177
|
allOf: [{ $ref: '#/components/schemas/TargetingSpec' }]
|
|
53010
53178
|
description: "The targeting spec to store."
|
|
53011
53179
|
responses:
|
|
53180
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
53181
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
53012
53182
|
'201':
|
|
53013
53183
|
description: Audience created
|
|
53014
53184
|
content:
|
|
@@ -53270,6 +53440,8 @@ paths:
|
|
|
53270
53440
|
- { name: accountId, in: query, required: true, schema: { type: string }, description: "SocialAccount _id (must be a metaads account)." }
|
|
53271
53441
|
- { name: destinationId, in: query, required: true, schema: { type: string }, description: "Meta pixel/dataset ID." }
|
|
53272
53442
|
responses:
|
|
53443
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
53444
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
53273
53445
|
'200':
|
|
53274
53446
|
description: Match-quality rows, one per event name.
|
|
53275
53447
|
content:
|
|
@@ -53398,6 +53570,7 @@ paths:
|
|
|
53398
53570
|
adUserData: { type: string, enum: [GRANTED, DENIED] }
|
|
53399
53571
|
adPersonalization: { type: string, enum: [GRANTED, DENIED] }
|
|
53400
53572
|
responses:
|
|
53573
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
53401
53574
|
'200':
|
|
53402
53575
|
description: |
|
|
53403
53576
|
Events processed. Inspect `eventsFailed` and `failures[]` to detect
|
|
@@ -53437,8 +53610,8 @@ paths:
|
|
|
53437
53610
|
description: |
|
|
53438
53611
|
Ads access required (Ads add-on on legacy plans, included on usage-based plans),
|
|
53439
53612
|
OR (for LinkedIn) the connected account lacks the `rw_conversions` scope and must be reconnected.
|
|
53440
|
-
'404':
|
|
53441
|
-
|
|
53613
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
53614
|
+
|
|
53442
53615
|
'422':
|
|
53443
53616
|
description: 'OpenAI Ads only: no tracking tag (pixel) exists yet for this account. Code `TRACKING_TAG_REQUIRED`; create one via `POST /v1/accounts/{accountId}/tracking-tags` first.'
|
|
53444
53617
|
'429':
|
|
@@ -53538,6 +53711,7 @@ paths:
|
|
|
53538
53711
|
type: string
|
|
53539
53712
|
description: ENHANCEMENT only. The original conversion's user agent (improves match quality).
|
|
53540
53713
|
responses:
|
|
53714
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
53541
53715
|
'200':
|
|
53542
53716
|
description: |
|
|
53543
53717
|
Adjustments processed. Inspect `adjustmentsFailed` and `failures[]` for
|
|
@@ -53564,8 +53738,8 @@ paths:
|
|
|
53564
53738
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
53565
53739
|
'403':
|
|
53566
53740
|
description: Ads access required (Ads add-on on legacy plans, included on usage-based plans).
|
|
53567
|
-
'404':
|
|
53568
|
-
|
|
53741
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
53742
|
+
|
|
53569
53743
|
'405':
|
|
53570
53744
|
description: Conversion adjustments are only available for Google Ads (the account's platform is not `googleads`).
|
|
53571
53745
|
|
|
@@ -53575,7 +53749,7 @@ paths:
|
|
|
53575
53749
|
operationId: listConversionActions
|
|
53576
53750
|
tags: [Conversions]
|
|
53577
53751
|
x-platforms: ["google"]
|
|
53578
|
-
summary: List conversion actions
|
|
53752
|
+
summary: 'List conversion actions'
|
|
53579
53753
|
description: |
|
|
53580
53754
|
Lists Google Ads conversion actions on the resolved customer, all types by
|
|
53581
53755
|
default. Each action's `tagSnippets` (global site tag + event snippet) is
|
|
@@ -53597,6 +53771,7 @@ paths:
|
|
|
53597
53771
|
- { name: customerId, in: query, required: false, schema: { type: string }, description: "Google Ads customer id (digits only). Resolved automatically when the connection has exactly one accessible customer." }
|
|
53598
53772
|
- { name: type, in: query, required: false, schema: { type: string }, description: "Filter by Google's ConversionActionType enum (e.g. WEBPAGE, UPLOAD_CLICKS)." }
|
|
53599
53773
|
responses:
|
|
53774
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
53600
53775
|
'200':
|
|
53601
53776
|
description: The resolved customer and its conversion actions.
|
|
53602
53777
|
content:
|
|
@@ -53614,7 +53789,8 @@ paths:
|
|
|
53614
53789
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
53615
53790
|
'403':
|
|
53616
53791
|
description: Ads access required (Ads add-on on legacy plans, included on usage-based plans).
|
|
53617
|
-
'404': { $ref: '#/components/responses/
|
|
53792
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
53793
|
+
|
|
53618
53794
|
'501':
|
|
53619
53795
|
description: Conversion actions are only available for Google Ads (the account's platform is not `googleads`).
|
|
53620
53796
|
post:
|
|
@@ -53622,7 +53798,7 @@ paths:
|
|
|
53622
53798
|
operationId: createConversionAction
|
|
53623
53799
|
tags: [Conversions]
|
|
53624
53800
|
x-platforms: ["google"]
|
|
53625
|
-
summary: Create
|
|
53801
|
+
summary: 'Create website conversion action'
|
|
53626
53802
|
description: |
|
|
53627
53803
|
Creates a `WEBPAGE` conversion action (category `DEFAULT`) and returns it with
|
|
53628
53804
|
its tag snippets, read back after creation since Google never returns them on
|
|
@@ -53661,6 +53837,7 @@ paths:
|
|
|
53661
53837
|
type: boolean
|
|
53662
53838
|
description: "When true, always use defaultValue and ignore any value sent with the event. Defaults to true when defaultValue is set."
|
|
53663
53839
|
responses:
|
|
53840
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
53664
53841
|
'201':
|
|
53665
53842
|
description: The created conversion action, with its tag snippets.
|
|
53666
53843
|
content:
|
|
@@ -53673,7 +53850,8 @@ paths:
|
|
|
53673
53850
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
53674
53851
|
'403':
|
|
53675
53852
|
description: Ads access required (Ads add-on on legacy plans, included on usage-based plans).
|
|
53676
|
-
'404': { $ref: '#/components/responses/
|
|
53853
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
53854
|
+
|
|
53677
53855
|
'501':
|
|
53678
53856
|
description: Conversion actions are only available for Google Ads (the account's platform is not `googleads`).
|
|
53679
53857
|
|
|
@@ -53708,6 +53886,7 @@ paths:
|
|
|
53708
53886
|
schema: { type: string }
|
|
53709
53887
|
description: SocialAccount ID (metaads, googleads, linkedinads, tiktokads, or openaiads).
|
|
53710
53888
|
responses:
|
|
53889
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
53711
53890
|
'200':
|
|
53712
53891
|
description: Destinations listed
|
|
53713
53892
|
content:
|
|
@@ -53749,8 +53928,8 @@ paths:
|
|
|
53749
53928
|
description: |
|
|
53750
53929
|
Ads access required (Ads add-on on legacy plans, included on usage-based plans),
|
|
53751
53930
|
OR (for LinkedIn) the connected account lacks the `rw_conversions` scope and must be reconnected.
|
|
53752
|
-
'404':
|
|
53753
|
-
|
|
53931
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
53932
|
+
|
|
53754
53933
|
'429':
|
|
53755
53934
|
description: LinkedIn rate limit hit. Retry with backoff.
|
|
53756
53935
|
|
|
@@ -53912,12 +54091,13 @@ paths:
|
|
|
53912
54091
|
description: |
|
|
53913
54092
|
Ads access required (Ads add-on on legacy plans, included on usage-based plans),
|
|
53914
54093
|
or the connected LinkedIn account lacks the `rw_conversions` scope (reconnect required).
|
|
53915
|
-
'404':
|
|
53916
|
-
|
|
54094
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
54095
|
+
|
|
53917
54096
|
'405':
|
|
53918
54097
|
description: Platform does not support destination creation.
|
|
53919
54098
|
'409':
|
|
53920
54099
|
description: |
|
|
54100
|
+
The account may also be inactive or need reconnection (code ads_connection_required). Reconnect it and read GET /v1/accounts for its current ID before retrying.
|
|
53921
54101
|
Google Ads only. A conversion action with the given name already
|
|
53922
54102
|
exists but has a different category. Use a different name or use
|
|
53923
54103
|
the existing destination. Error code: `IDEMPOTENCY_CONFLICT`.
|
|
@@ -53946,6 +54126,7 @@ paths:
|
|
|
53946
54126
|
schema: { type: string }
|
|
53947
54127
|
description: Numeric ID or full `urn:li:sponsoredAccount:{id}` URN.
|
|
53948
54128
|
responses:
|
|
54129
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
53949
54130
|
'200':
|
|
53950
54131
|
description: Destination fetched
|
|
53951
54132
|
content:
|
|
@@ -53958,7 +54139,8 @@ paths:
|
|
|
53958
54139
|
'400': { description: Validation error. }
|
|
53959
54140
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
53960
54141
|
'403': { description: Ads add-on or LinkedIn reconnect required. }
|
|
53961
|
-
'404': {
|
|
54142
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
54143
|
+
|
|
53962
54144
|
'405': { description: Platform does not support fetching a single destination. }
|
|
53963
54145
|
'429': { description: LinkedIn rate limit hit. Retry with backoff. }
|
|
53964
54146
|
|
|
@@ -54022,6 +54204,7 @@ paths:
|
|
|
54022
54204
|
currencyCode: { type: string, description: ISO 4217. }
|
|
54023
54205
|
amount: { type: string, description: 'Decimal string (e.g. "49.99").' }
|
|
54024
54206
|
responses:
|
|
54207
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
54025
54208
|
'200':
|
|
54026
54209
|
description: Destination updated (re-fetched canonical state)
|
|
54027
54210
|
content:
|
|
@@ -54034,7 +54217,8 @@ paths:
|
|
|
54034
54217
|
'400': { description: Invalid body or LinkedIn validation failure. }
|
|
54035
54218
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
54036
54219
|
'403': { description: Ads add-on or LinkedIn reconnect required. }
|
|
54037
|
-
'404': {
|
|
54220
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
54221
|
+
|
|
54038
54222
|
'405': { description: Platform does not support updating destinations. }
|
|
54039
54223
|
'429': { description: LinkedIn rate limit hit. Retry with backoff. }
|
|
54040
54224
|
|
|
@@ -54063,11 +54247,13 @@ paths:
|
|
|
54063
54247
|
schema: { type: string }
|
|
54064
54248
|
description: Required as query OR in JSON body.
|
|
54065
54249
|
responses:
|
|
54250
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
54066
54251
|
'204': { description: Soft-deleted. }
|
|
54067
54252
|
'400': { description: 'adAccountId missing, or accountId is not a valid id.' }
|
|
54068
54253
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
54069
54254
|
'403': { description: Ads add-on or LinkedIn reconnect required. }
|
|
54070
|
-
'404': {
|
|
54255
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
54256
|
+
|
|
54071
54257
|
'405': { description: Platform does not support deleting destinations. }
|
|
54072
54258
|
'429': { description: LinkedIn rate limit hit. Retry with backoff. }
|
|
54073
54259
|
|
|
@@ -54093,6 +54279,7 @@ paths:
|
|
|
54093
54279
|
required: true
|
|
54094
54280
|
schema: { type: string }
|
|
54095
54281
|
responses:
|
|
54282
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
54096
54283
|
'200':
|
|
54097
54284
|
description: Associations listed
|
|
54098
54285
|
content:
|
|
@@ -54112,7 +54299,8 @@ paths:
|
|
|
54112
54299
|
'400': { description: Validation error. }
|
|
54113
54300
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
54114
54301
|
'403': { description: Ads add-on or LinkedIn reconnect required. }
|
|
54115
|
-
'404': {
|
|
54302
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
54303
|
+
|
|
54116
54304
|
'405': { description: Platform does not support associations. }
|
|
54117
54305
|
'429': { description: LinkedIn rate limit hit. Retry with backoff. }
|
|
54118
54306
|
|
|
@@ -54148,6 +54336,7 @@ paths:
|
|
|
54148
54336
|
type: string
|
|
54149
54337
|
description: Numeric campaign ID or full `urn:li:sponsoredCampaign:{id}` URN.
|
|
54150
54338
|
responses:
|
|
54339
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
54151
54340
|
'200':
|
|
54152
54341
|
description: |
|
|
54153
54342
|
Per-campaign batch result. Status is 200 even when some rows
|
|
@@ -54174,7 +54363,8 @@ paths:
|
|
|
54174
54363
|
'400': { description: Invalid body. }
|
|
54175
54364
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
54176
54365
|
'403': { description: Ads add-on or LinkedIn reconnect required. }
|
|
54177
|
-
'404': {
|
|
54366
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
54367
|
+
|
|
54178
54368
|
'405': { description: Platform does not support associations. }
|
|
54179
54369
|
'429': { description: LinkedIn rate limit hit. Retry with backoff. }
|
|
54180
54370
|
|
|
@@ -54200,6 +54390,7 @@ paths:
|
|
|
54200
54390
|
- { name: adAccountId, in: query, required: true, schema: { type: string } }
|
|
54201
54391
|
- { name: campaignIds, in: query, required: true, schema: { type: string }, description: 'Comma-separated list of campaign IDs.' }
|
|
54202
54392
|
responses:
|
|
54393
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
54203
54394
|
'200':
|
|
54204
54395
|
description: |
|
|
54205
54396
|
Per-campaign batch result. Status is 200 even when some rows
|
|
@@ -54228,7 +54419,8 @@ paths:
|
|
|
54228
54419
|
a valid id.
|
|
54229
54420
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
54230
54421
|
'403': { description: Ads add-on or LinkedIn reconnect required. }
|
|
54231
|
-
'404': {
|
|
54422
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
54423
|
+
|
|
54232
54424
|
'405': { description: Platform does not support associations. }
|
|
54233
54425
|
'429': { description: LinkedIn rate limit hit. Retry with backoff. }
|
|
54234
54426
|
|
|
@@ -54268,6 +54460,7 @@ paths:
|
|
|
54268
54460
|
enum: [ALL, DAILY, MONTHLY, YEARLY]
|
|
54269
54461
|
default: DAILY
|
|
54270
54462
|
responses:
|
|
54463
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
54271
54464
|
'200':
|
|
54272
54465
|
description: Metrics rows
|
|
54273
54466
|
content:
|
|
@@ -54290,7 +54483,8 @@ paths:
|
|
|
54290
54483
|
'400': { description: Validation error or invalid date range. }
|
|
54291
54484
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
54292
54485
|
'403': { description: Ads add-on or LinkedIn reconnect required. }
|
|
54293
|
-
'404': {
|
|
54486
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
54487
|
+
|
|
54294
54488
|
'405': { description: Platform does not support metrics readback. }
|
|
54295
54489
|
'429': { description: LinkedIn analytics rate limit hit. }
|
|
54296
54490
|
|
|
@@ -54581,6 +54775,7 @@ paths:
|
|
|
54581
54775
|
budgetType: daily
|
|
54582
54776
|
status: PAUSED
|
|
54583
54777
|
responses:
|
|
54778
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
54584
54779
|
'201':
|
|
54585
54780
|
description: |
|
|
54586
54781
|
Ad(s) created and submitted for review. The route shares its handler with
|
|
@@ -54602,7 +54797,8 @@ paths:
|
|
|
54602
54797
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
54603
54798
|
'403':
|
|
54604
54799
|
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.'
|
|
54605
|
-
'404': {
|
|
54800
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
54801
|
+
|
|
54606
54802
|
'422': { description: "No Facebook Page resolved for the account" }
|
|
54607
54803
|
'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`." }
|
|
54608
54804
|
|
|
@@ -54638,6 +54834,7 @@ paths:
|
|
|
54638
54834
|
format: uri
|
|
54639
54835
|
description: "Website shown as the creative's link. Required: Meta rejects tel: as link_data.link; the phone number rides only the CTA."
|
|
54640
54836
|
responses:
|
|
54837
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
54641
54838
|
'201':
|
|
54642
54839
|
description: |
|
|
54643
54840
|
Ad(s) created and submitted for review. The route shares its handler with
|
|
@@ -54659,7 +54856,8 @@ paths:
|
|
|
54659
54856
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
54660
54857
|
'403':
|
|
54661
54858
|
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.'
|
|
54662
|
-
'404': {
|
|
54859
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
54860
|
+
|
|
54663
54861
|
'422': { description: "No Facebook Page resolved for the account" }
|
|
54664
54862
|
'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`." }
|
|
54665
54863
|
|
|
@@ -54707,6 +54905,7 @@ paths:
|
|
|
54707
54905
|
budgetType: daily
|
|
54708
54906
|
status: PAUSED
|
|
54709
54907
|
responses:
|
|
54908
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
54710
54909
|
'201':
|
|
54711
54910
|
description: |
|
|
54712
54911
|
CTWA ad(s) created and submitted to Meta for review. Response is a
|
|
@@ -54736,7 +54935,8 @@ paths:
|
|
|
54736
54935
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
54737
54936
|
'403':
|
|
54738
54937
|
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.'
|
|
54739
|
-
'404': {
|
|
54938
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
54939
|
+
|
|
54740
54940
|
'422':
|
|
54741
54941
|
description: Page is not connected to a verified WhatsApp number.
|
|
54742
54942
|
'502':
|
|
@@ -54758,6 +54958,8 @@ paths:
|
|
|
54758
54958
|
- { name: accountId, in: path, required: true, schema: { type: string }, description: "Meta ads SocialAccount id." }
|
|
54759
54959
|
- { name: adAccountId, in: query, required: true, schema: { type: string }, description: "Meta ad account id (act_<n>)." }
|
|
54760
54960
|
responses:
|
|
54961
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
54962
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
54761
54963
|
'200':
|
|
54762
54964
|
description: Custom conversions
|
|
54763
54965
|
content:
|
|
@@ -54777,7 +54979,7 @@ paths:
|
|
|
54777
54979
|
operationId: createCustomConversion
|
|
54778
54980
|
tags: ["Ad Accounts"]
|
|
54779
54981
|
x-platforms: ["meta"]
|
|
54780
|
-
summary: Create
|
|
54982
|
+
summary: 'Create custom conversion'
|
|
54781
54983
|
description: |-
|
|
54782
54984
|
Provision the Meta custom conversion an ads flow optimises toward, and hand back the
|
|
54783
54985
|
`customConversionId` for `promotedObject.customConversionId` on POST /v1/ads/create.
|
|
@@ -54809,6 +55011,8 @@ paths:
|
|
|
54809
55011
|
customEventType: { type: string, description: "Meta custom_event_type, e.g. LEAD, PURCHASE, OTHER." }
|
|
54810
55012
|
rule: { type: object, description: "Meta conversion rule, forwarded verbatim." }
|
|
54811
55013
|
responses:
|
|
55014
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
55015
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
54812
55016
|
'200':
|
|
54813
55017
|
description: An existing custom conversion was reused
|
|
54814
55018
|
content:
|
|
@@ -56227,6 +56431,7 @@ paths:
|
|
|
56227
56431
|
- { name: accountId, in: path, required: true, schema: { type: string }, description: 'Ads SocialAccount id (platform `metaads` or `openaiads`).' }
|
|
56228
56432
|
- { name: adAccountId, in: query, required: false, schema: { type: string }, description: 'Optional, Meta only. Scope to one ad account, e.g. `act_123456789`. Ignored for OpenAI Ads.' }
|
|
56229
56433
|
responses:
|
|
56434
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
56230
56435
|
'200':
|
|
56231
56436
|
description: Tracking tags listed
|
|
56232
56437
|
content:
|
|
@@ -56241,7 +56446,8 @@ paths:
|
|
|
56241
56446
|
'400': { description: 'Account platform not supported, or invalid `adAccountId`.' }
|
|
56242
56447
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
56243
56448
|
'403': { description: 'Ads access required (Ads add-on on legacy plans, included on usage-based plans), or the Meta token lacks ads permissions (reconnect required).' }
|
|
56244
|
-
'404': {
|
|
56449
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
56450
|
+
|
|
56245
56451
|
'405': { description: Platform does not support listing tracking tags. }
|
|
56246
56452
|
'502': { description: 'Meta was unreachable or returned an unclassified error (type: platform_error; the raw Meta payload is in platformError). Retryable.' }
|
|
56247
56453
|
|
|
@@ -56299,6 +56505,7 @@ paths:
|
|
|
56299
56505
|
enum: [order_created, lead_created, items_added, contents_viewed, checkout_started, registration_completed, subscription_created, trial_started, appointment_scheduled, page_viewed, app_installed, app_opened]
|
|
56300
56506
|
description: 'OpenAI Ads only (ignored by Meta). When set, also provisions a standard conversion event setting wired to the new pixel, so `goal: conversions` ad creates on `POST /v1/ads/create` have an event to reference immediately.'
|
|
56301
56507
|
responses:
|
|
56508
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
56302
56509
|
'201':
|
|
56303
56510
|
description: Tracking tag created
|
|
56304
56511
|
content:
|
|
@@ -56311,7 +56518,8 @@ paths:
|
|
|
56311
56518
|
'400': { description: 'Invalid body, invalid `adAccountId`, over the per-business pixel cap, or ad account not in a Business Manager.' }
|
|
56312
56519
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
56313
56520
|
'403': { description: 'Ads access required (Ads add-on on legacy plans, included on usage-based plans), or the Meta token lacks ads permissions (reconnect required).' }
|
|
56314
|
-
'404': {
|
|
56521
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
56522
|
+
|
|
56315
56523
|
'405': { description: Platform does not support creating tracking tags. }
|
|
56316
56524
|
'422': { description: 'OpenAI Ads only: the ad account is not enabled for pixel management. Contact your OpenAI partner representative.' }
|
|
56317
56525
|
'502': { description: 'Meta was unreachable or returned an unclassified error (type: platform_error; the raw Meta payload is in platformError). Creating a pixel is NOT idempotent, so before retrying confirm with GET /v1/accounts/{accountId}/tracking-tags that no pixel was created.' }
|
|
@@ -56335,6 +56543,8 @@ paths:
|
|
|
56335
56543
|
- { name: accountId, in: path, required: true, schema: { type: string } }
|
|
56336
56544
|
- { name: tagId, in: path, required: true, schema: { type: string }, description: 'Pixel id.' }
|
|
56337
56545
|
responses:
|
|
56546
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
56547
|
+
'400': { $ref: '#/components/responses/BadRequest' }
|
|
56338
56548
|
'200':
|
|
56339
56549
|
description: Tracking tag fetched
|
|
56340
56550
|
content:
|
|
@@ -56346,7 +56556,8 @@ paths:
|
|
|
56346
56556
|
tag: { $ref: '#/components/schemas/TrackingTag' }
|
|
56347
56557
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
56348
56558
|
'403': { description: 'Ads access required (Ads add-on on legacy plans, included on usage-based plans), or the Meta token lacks ads permissions (reconnect required).' }
|
|
56349
|
-
'404': {
|
|
56559
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
56560
|
+
|
|
56350
56561
|
'405': { description: Platform does not support fetching a tracking tag. }
|
|
56351
56562
|
'502': { description: 'Meta was unreachable or returned an unclassified error (type: platform_error; the raw Meta payload is in platformError). Retryable.' }
|
|
56352
56563
|
|
|
@@ -56401,6 +56612,7 @@ paths:
|
|
|
56401
56612
|
type: string
|
|
56402
56613
|
enum: [advertising_and_analytics, analytics_only, empty]
|
|
56403
56614
|
responses:
|
|
56615
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
56404
56616
|
'200':
|
|
56405
56617
|
description: Tracking tag updated (re-fetched canonical state)
|
|
56406
56618
|
content:
|
|
@@ -56413,7 +56625,8 @@ paths:
|
|
|
56413
56625
|
'400': { description: Invalid body (e.g. no fields supplied) or Meta validation failure. }
|
|
56414
56626
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
56415
56627
|
'403': { description: 'Ads access required (Ads add-on on legacy plans, included on usage-based plans), or the Meta token lacks ads permissions (reconnect required).' }
|
|
56416
|
-
'404': {
|
|
56628
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
56629
|
+
|
|
56417
56630
|
'405': { description: Platform does not support updating tracking tags. }
|
|
56418
56631
|
'502': { description: 'Meta was unreachable or returned an unclassified error (type: platform_error; the raw Meta payload is in platformError). Retryable.' }
|
|
56419
56632
|
|
|
@@ -56431,6 +56644,8 @@ paths:
|
|
|
56431
56644
|
- { name: accountId, in: path, required: true, schema: { type: string } }
|
|
56432
56645
|
- { name: tagId, in: path, required: true, schema: { type: string }, description: 'Pixel id.' }
|
|
56433
56646
|
responses:
|
|
56647
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
56648
|
+
'400': { $ref: '#/components/responses/BadRequest' }
|
|
56434
56649
|
'200':
|
|
56435
56650
|
description: Shared ad accounts listed
|
|
56436
56651
|
content:
|
|
@@ -56444,7 +56659,8 @@ paths:
|
|
|
56444
56659
|
items: { $ref: '#/components/schemas/SharedAdAccount' }
|
|
56445
56660
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
56446
56661
|
'403': { description: 'Ads access required (Ads add-on on legacy plans, included on usage-based plans), or the Meta token lacks ads permissions (reconnect required).' }
|
|
56447
|
-
'404': {
|
|
56662
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
56663
|
+
|
|
56448
56664
|
'405': { description: Platform does not support shared accounts. }
|
|
56449
56665
|
'502': { description: 'Meta was unreachable or returned an unclassified error (type: platform_error; the raw Meta payload is in platformError). Retryable.' }
|
|
56450
56666
|
|
|
@@ -56475,6 +56691,7 @@ paths:
|
|
|
56475
56691
|
properties:
|
|
56476
56692
|
adAccountId: { type: string, description: 'Ad account to share with, e.g. `act_123456789`.' }
|
|
56477
56693
|
responses:
|
|
56694
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
56478
56695
|
'201':
|
|
56479
56696
|
description: Tracking tag shared with the ad account
|
|
56480
56697
|
content:
|
|
@@ -56487,7 +56704,8 @@ paths:
|
|
|
56487
56704
|
'400': { description: 'Invalid body / `adAccountId`, or Meta rejected the share (e.g. personal ad account).' }
|
|
56488
56705
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
56489
56706
|
'403': { description: 'Ads access required (Ads add-on on legacy plans, included on usage-based plans), or the Meta token lacks ads permissions (reconnect required).' }
|
|
56490
|
-
'404': {
|
|
56707
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
56708
|
+
|
|
56491
56709
|
'405': { description: Platform does not support shared accounts. }
|
|
56492
56710
|
'502': { description: 'Meta was unreachable or returned an unclassified error (type: platform_error; the raw Meta payload is in platformError). Retryable.' }
|
|
56493
56711
|
|
|
@@ -56508,11 +56726,13 @@ paths:
|
|
|
56508
56726
|
- { name: tagId, in: path, required: true, schema: { type: string }, description: 'Pixel id.' }
|
|
56509
56727
|
- { name: adAccountId, in: query, required: false, schema: { type: string }, description: 'Ad account to unshare, e.g. `act_123456789`. May also be sent in the JSON body.' }
|
|
56510
56728
|
responses:
|
|
56729
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
56511
56730
|
'204': { description: Ad account unshared (no content). }
|
|
56512
56731
|
'400': { description: '`adAccountId` missing (neither query nor body), or Meta rejected the unshare.' }
|
|
56513
56732
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
56514
56733
|
'403': { description: 'Ads access required (Ads add-on on legacy plans, included on usage-based plans), or the Meta token lacks ads permissions (reconnect required).' }
|
|
56515
|
-
'404': {
|
|
56734
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
56735
|
+
|
|
56516
56736
|
'405': { description: Platform does not support shared accounts. }
|
|
56517
56737
|
'502': { description: 'Meta was unreachable or returned an unclassified error (type: platform_error; the raw Meta payload is in platformError). Retryable.' }
|
|
56518
56738
|
|
|
@@ -56560,6 +56780,7 @@ paths:
|
|
|
56560
56780
|
- { name: startTime, in: query, required: false, schema: { type: integer }, description: 'Unix seconds lower bound.' }
|
|
56561
56781
|
- { name: endTime, in: query, required: false, schema: { type: integer }, description: 'Unix seconds upper bound.' }
|
|
56562
56782
|
responses:
|
|
56783
|
+
'409': { $ref: '#/components/responses/AccountConnectionRequired' }
|
|
56563
56784
|
'200':
|
|
56564
56785
|
description: Stats fetched
|
|
56565
56786
|
content:
|
|
@@ -56580,7 +56801,8 @@ paths:
|
|
|
56580
56801
|
'400': { description: Invalid query parameter. }
|
|
56581
56802
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
56582
56803
|
'403': { description: 'Ads access required (Ads add-on on legacy plans, included on usage-based plans), or the Meta token lacks ads permissions (reconnect required).' }
|
|
56583
|
-
'404': {
|
|
56804
|
+
'404': { $ref: '#/components/responses/AccountUnavailable' }
|
|
56805
|
+
|
|
56584
56806
|
'405': { description: Platform does not support tracking-tag stats. }
|
|
56585
56807
|
'502': { description: 'Meta was unreachable or returned an unclassified error (type: platform_error; the raw Meta payload is in platformError). Retryable.' }
|
|
56586
56808
|
|
|
@@ -57148,3 +57370,259 @@ paths:
|
|
|
57148
57370
|
'400': { $ref: '#/components/responses/BadRequest' }
|
|
57149
57371
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
57150
57372
|
'404': { description: Verification not found (or already reaped). }
|
|
57373
|
+
|
|
57374
|
+
/v1/ads/pixels:
|
|
57375
|
+
get:
|
|
57376
|
+
operationId: 'listTikTokAdPixels'
|
|
57377
|
+
summary: 'List TikTok ad pixels'
|
|
57378
|
+
description: 'Lists pixels and their supported optimization events for a connected TikTok Ads account. The advertiser defaults to the first advertiser on the connection. Reconnect if Pixel Management permission has not been granted.'
|
|
57379
|
+
tags:
|
|
57380
|
+
- 'Ad Accounts'
|
|
57381
|
+
x-resource-group: 'ads'
|
|
57382
|
+
x-platforms:
|
|
57383
|
+
- 'tiktok'
|
|
57384
|
+
security:
|
|
57385
|
+
- bearerAuth: []
|
|
57386
|
+
parameters:
|
|
57387
|
+
- &a1
|
|
57388
|
+
name: 'accountId'
|
|
57389
|
+
in: 'query'
|
|
57390
|
+
required: true
|
|
57391
|
+
schema: &a7
|
|
57392
|
+
type: 'string'
|
|
57393
|
+
pattern: '^[a-fA-F0-9]{24}$'
|
|
57394
|
+
description: 'Zernio SocialAccount ID.'
|
|
57395
|
+
- name: 'advertiserId'
|
|
57396
|
+
in: 'query'
|
|
57397
|
+
schema:
|
|
57398
|
+
type: 'string'
|
|
57399
|
+
description: 'Advertiser belonging to this connection.'
|
|
57400
|
+
- name: 'code'
|
|
57401
|
+
in: 'query'
|
|
57402
|
+
schema:
|
|
57403
|
+
type: 'string'
|
|
57404
|
+
description: 'Filter by a Pixel Code.'
|
|
57405
|
+
responses:
|
|
57406
|
+
"200":
|
|
57407
|
+
description: 'TikTok pixels.'
|
|
57408
|
+
content:
|
|
57409
|
+
application/json:
|
|
57410
|
+
schema:
|
|
57411
|
+
type: 'object'
|
|
57412
|
+
properties:
|
|
57413
|
+
advertiserId:
|
|
57414
|
+
type: 'string'
|
|
57415
|
+
pixels:
|
|
57416
|
+
type: 'array'
|
|
57417
|
+
items:
|
|
57418
|
+
type: 'object'
|
|
57419
|
+
properties:
|
|
57420
|
+
pixelId:
|
|
57421
|
+
type: 'string'
|
|
57422
|
+
pixelCode:
|
|
57423
|
+
type: 'string'
|
|
57424
|
+
name:
|
|
57425
|
+
type: 'string'
|
|
57426
|
+
events:
|
|
57427
|
+
type: 'array'
|
|
57428
|
+
items:
|
|
57429
|
+
type: 'string'
|
|
57430
|
+
eventDetails:
|
|
57431
|
+
type: 'array'
|
|
57432
|
+
items:
|
|
57433
|
+
type: 'object'
|
|
57434
|
+
properties:
|
|
57435
|
+
name:
|
|
57436
|
+
type: 'string'
|
|
57437
|
+
optimizationEvent:
|
|
57438
|
+
type:
|
|
57439
|
+
- 'string'
|
|
57440
|
+
- 'null'
|
|
57441
|
+
custom:
|
|
57442
|
+
type: 'boolean'
|
|
57443
|
+
example:
|
|
57444
|
+
advertiserId: '7330955083452284929'
|
|
57445
|
+
pixels: []
|
|
57446
|
+
"400": &a2
|
|
57447
|
+
$ref: '#/components/responses/BadRequest'
|
|
57448
|
+
"401": &a3
|
|
57449
|
+
$ref: '#/components/responses/Unauthorized'
|
|
57450
|
+
"403":
|
|
57451
|
+
description: 'Ads access required.'
|
|
57452
|
+
"404": &a4
|
|
57453
|
+
$ref: '#/components/responses/AccountUnavailable'
|
|
57454
|
+
"409": &a5
|
|
57455
|
+
$ref: '#/components/responses/AccountConnectionRequired'
|
|
57456
|
+
"422":
|
|
57457
|
+
description: 'Pixel Management permission is missing (code reconnect_required). Reconnect TikTok Ads to grant it.'
|
|
57458
|
+
/v1/ads/partnership-content:
|
|
57459
|
+
get:
|
|
57460
|
+
operationId: 'listPartnershipAdContent'
|
|
57461
|
+
summary: 'List partnership ad content'
|
|
57462
|
+
description: 'Private beta. Lists creator Instagram posts available to the advertiser for Partnership Ads. Supply creatorUsername or postUrl. Requires instagram_branded_content_ads_brand permission and an advertiser Instagram Business Account.'
|
|
57463
|
+
tags:
|
|
57464
|
+
- 'Ad Creatives'
|
|
57465
|
+
x-resource-group: 'ads'
|
|
57466
|
+
x-platforms:
|
|
57467
|
+
- 'meta'
|
|
57468
|
+
security:
|
|
57469
|
+
- bearerAuth: []
|
|
57470
|
+
parameters:
|
|
57471
|
+
- *a1
|
|
57472
|
+
- name: 'creatorUsername'
|
|
57473
|
+
in: 'query'
|
|
57474
|
+
schema:
|
|
57475
|
+
type: 'string'
|
|
57476
|
+
description: 'Creator username. Required unless postUrl is supplied.'
|
|
57477
|
+
- name: 'postUrl'
|
|
57478
|
+
in: 'query'
|
|
57479
|
+
schema:
|
|
57480
|
+
type: 'string'
|
|
57481
|
+
format: 'uri'
|
|
57482
|
+
description: 'Instagram post permalink. Required unless creatorUsername is supplied.'
|
|
57483
|
+
- name: 'onlyAllowlisted'
|
|
57484
|
+
in: 'query'
|
|
57485
|
+
schema:
|
|
57486
|
+
type: 'boolean'
|
|
57487
|
+
description: 'Return only creators with account-level permission.'
|
|
57488
|
+
responses:
|
|
57489
|
+
"200":
|
|
57490
|
+
description: 'Advertisable Instagram media.'
|
|
57491
|
+
content:
|
|
57492
|
+
application/json:
|
|
57493
|
+
schema:
|
|
57494
|
+
type: 'object'
|
|
57495
|
+
properties:
|
|
57496
|
+
media:
|
|
57497
|
+
type: 'array'
|
|
57498
|
+
items:
|
|
57499
|
+
type: 'object'
|
|
57500
|
+
properties:
|
|
57501
|
+
id:
|
|
57502
|
+
type: 'string'
|
|
57503
|
+
permalink:
|
|
57504
|
+
type: 'string'
|
|
57505
|
+
ownerId:
|
|
57506
|
+
type: 'string'
|
|
57507
|
+
hasPermissionForPartnershipAd:
|
|
57508
|
+
type: 'boolean'
|
|
57509
|
+
isCreatorAllowlisted:
|
|
57510
|
+
type: 'boolean'
|
|
57511
|
+
eligibilityErrors:
|
|
57512
|
+
type: 'array'
|
|
57513
|
+
items:
|
|
57514
|
+
type: 'string'
|
|
57515
|
+
recommendedCampaignObjectives:
|
|
57516
|
+
type: 'array'
|
|
57517
|
+
items:
|
|
57518
|
+
type: 'string'
|
|
57519
|
+
example:
|
|
57520
|
+
media: []
|
|
57521
|
+
"400": *a2
|
|
57522
|
+
"401": *a3
|
|
57523
|
+
"403": &a6
|
|
57524
|
+
description: 'Ads access required. Partnership operations also require private beta access.'
|
|
57525
|
+
"404": *a4
|
|
57526
|
+
"409": *a5
|
|
57527
|
+
"422":
|
|
57528
|
+
description: 'The advertiser Instagram Business Account could not be resolved.'
|
|
57529
|
+
/v1/ads/partnership-permissions:
|
|
57530
|
+
get:
|
|
57531
|
+
operationId: 'listPartnershipAdPermissions'
|
|
57532
|
+
summary: 'List partnership permissions'
|
|
57533
|
+
description: 'Private beta. Lists granted or pending creator permissions for the advertiser Instagram Business Account. Requires instagram_branded_content_ads_brand permission.'
|
|
57534
|
+
tags:
|
|
57535
|
+
- 'Ad Creatives'
|
|
57536
|
+
x-resource-group: 'ads'
|
|
57537
|
+
x-platforms:
|
|
57538
|
+
- 'meta'
|
|
57539
|
+
security:
|
|
57540
|
+
- bearerAuth: []
|
|
57541
|
+
parameters:
|
|
57542
|
+
- *a1
|
|
57543
|
+
- name: 'creatorUsername'
|
|
57544
|
+
in: 'query'
|
|
57545
|
+
schema:
|
|
57546
|
+
type: 'string'
|
|
57547
|
+
description: 'Filter by creator username.'
|
|
57548
|
+
responses:
|
|
57549
|
+
"200":
|
|
57550
|
+
description: 'Partnership permissions.'
|
|
57551
|
+
content:
|
|
57552
|
+
application/json:
|
|
57553
|
+
schema:
|
|
57554
|
+
type: 'object'
|
|
57555
|
+
properties:
|
|
57556
|
+
permissions:
|
|
57557
|
+
type: 'array'
|
|
57558
|
+
items: &a8
|
|
57559
|
+
type: 'object'
|
|
57560
|
+
properties:
|
|
57561
|
+
id:
|
|
57562
|
+
type: 'string'
|
|
57563
|
+
permissionType:
|
|
57564
|
+
type: 'string'
|
|
57565
|
+
status:
|
|
57566
|
+
type: 'string'
|
|
57567
|
+
example:
|
|
57568
|
+
permissions: []
|
|
57569
|
+
"400": *a2
|
|
57570
|
+
"401": *a3
|
|
57571
|
+
"403": *a6
|
|
57572
|
+
"404": *a4
|
|
57573
|
+
"409": *a5
|
|
57574
|
+
"422":
|
|
57575
|
+
description: 'The advertiser Instagram Business Account could not be resolved.'
|
|
57576
|
+
post:
|
|
57577
|
+
operationId: 'setPartnershipAdPermission'
|
|
57578
|
+
summary: 'Set partnership permission'
|
|
57579
|
+
description: 'Private beta. Requests permission from a creator or revokes it when revoke is true. Requests require the creator to approve in Instagram. Requires instagram_branded_content_ads_brand permission.'
|
|
57580
|
+
tags:
|
|
57581
|
+
- 'Ad Creatives'
|
|
57582
|
+
x-resource-group: 'ads'
|
|
57583
|
+
x-platforms:
|
|
57584
|
+
- 'meta'
|
|
57585
|
+
security:
|
|
57586
|
+
- bearerAuth: []
|
|
57587
|
+
requestBody:
|
|
57588
|
+
required: true
|
|
57589
|
+
content:
|
|
57590
|
+
application/json:
|
|
57591
|
+
schema:
|
|
57592
|
+
type: 'object'
|
|
57593
|
+
required:
|
|
57594
|
+
- 'accountId'
|
|
57595
|
+
- 'creatorUsername'
|
|
57596
|
+
properties:
|
|
57597
|
+
accountId: *a7
|
|
57598
|
+
creatorUsername:
|
|
57599
|
+
type: 'string'
|
|
57600
|
+
minLength: 1
|
|
57601
|
+
revoke:
|
|
57602
|
+
type: 'boolean'
|
|
57603
|
+
example:
|
|
57604
|
+
accountId: '507f1f77bcf86cd799439011'
|
|
57605
|
+
creatorUsername: 'example_creator'
|
|
57606
|
+
revoke: false
|
|
57607
|
+
responses:
|
|
57608
|
+
"200": &a9
|
|
57609
|
+
description: 'Partnership permission state.'
|
|
57610
|
+
content:
|
|
57611
|
+
application/json:
|
|
57612
|
+
schema:
|
|
57613
|
+
type: 'object'
|
|
57614
|
+
properties:
|
|
57615
|
+
permission: *a8
|
|
57616
|
+
example:
|
|
57617
|
+
permission:
|
|
57618
|
+
id: '123456789'
|
|
57619
|
+
permissionType: 'AD'
|
|
57620
|
+
status: 'PENDING'
|
|
57621
|
+
"201": *a9
|
|
57622
|
+
"400": *a2
|
|
57623
|
+
"401": *a3
|
|
57624
|
+
"403": *a6
|
|
57625
|
+
"404": *a4
|
|
57626
|
+
"409": *a5
|
|
57627
|
+
"422":
|
|
57628
|
+
description: 'The advertiser Instagram Business Account could not be resolved.'
|