airbyte-agent-facebook-marketing 0.1.0__py3-none-any.whl
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.
- airbyte_agent_facebook_marketing/__init__.py +221 -0
- airbyte_agent_facebook_marketing/_vendored/__init__.py +1 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/__init__.py +82 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/auth_strategies.py +1171 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/auth_template.py +135 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/cloud_utils/__init__.py +5 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/cloud_utils/client.py +213 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/connector_model_loader.py +1120 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/constants.py +78 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/exceptions.py +23 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/executor/__init__.py +31 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/executor/hosted_executor.py +201 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/executor/local_executor.py +1854 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/executor/models.py +202 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/extensions.py +693 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/http/__init__.py +37 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/http/adapters/__init__.py +9 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/http/adapters/httpx_adapter.py +251 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/http/config.py +98 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/http/exceptions.py +119 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/http/protocols.py +114 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/http/response.py +104 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/http_client.py +693 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/introspection.py +481 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/logging/__init__.py +11 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/logging/logger.py +273 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/logging/types.py +93 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/observability/__init__.py +11 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/observability/config.py +179 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/observability/models.py +19 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/observability/redactor.py +81 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/observability/session.py +103 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/performance/__init__.py +6 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/performance/instrumentation.py +57 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/performance/metrics.py +93 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/schema/__init__.py +75 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/schema/base.py +201 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/schema/components.py +244 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/schema/connector.py +120 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/schema/extensions.py +301 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/schema/operations.py +156 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/schema/security.py +236 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/secrets.py +182 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/telemetry/__init__.py +10 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/telemetry/config.py +32 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/telemetry/events.py +59 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/telemetry/tracker.py +155 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/types.py +270 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/utils.py +60 -0
- airbyte_agent_facebook_marketing/_vendored/connector_sdk/validation.py +848 -0
- airbyte_agent_facebook_marketing/connector.py +1553 -0
- airbyte_agent_facebook_marketing/connector_model.py +3120 -0
- airbyte_agent_facebook_marketing/models.py +814 -0
- airbyte_agent_facebook_marketing/types.py +1957 -0
- airbyte_agent_facebook_marketing-0.1.0.dist-info/METADATA +148 -0
- airbyte_agent_facebook_marketing-0.1.0.dist-info/RECORD +57 -0
- airbyte_agent_facebook_marketing-0.1.0.dist-info/WHEEL +4 -0
|
@@ -0,0 +1,1957 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Type definitions for facebook-marketing connector.
|
|
3
|
+
"""
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
# Use typing_extensions.TypedDict for Pydantic compatibility
|
|
7
|
+
try:
|
|
8
|
+
from typing_extensions import TypedDict, NotRequired
|
|
9
|
+
except ImportError:
|
|
10
|
+
from typing import TypedDict, NotRequired # type: ignore[attr-defined]
|
|
11
|
+
|
|
12
|
+
from typing import Any, Literal
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
# ===== NESTED PARAM TYPE DEFINITIONS =====
|
|
16
|
+
# Nested parameter schemas discovered during parameter extraction
|
|
17
|
+
|
|
18
|
+
# ===== OPERATION PARAMS TYPE DEFINITIONS =====
|
|
19
|
+
|
|
20
|
+
class CampaignsListParams(TypedDict):
|
|
21
|
+
"""Parameters for campaigns.list operation"""
|
|
22
|
+
account_id: str
|
|
23
|
+
fields: NotRequired[str]
|
|
24
|
+
limit: NotRequired[int]
|
|
25
|
+
after: NotRequired[str]
|
|
26
|
+
|
|
27
|
+
class AdSetsListParams(TypedDict):
|
|
28
|
+
"""Parameters for ad_sets.list operation"""
|
|
29
|
+
account_id: str
|
|
30
|
+
fields: NotRequired[str]
|
|
31
|
+
limit: NotRequired[int]
|
|
32
|
+
after: NotRequired[str]
|
|
33
|
+
|
|
34
|
+
class AdsListParams(TypedDict):
|
|
35
|
+
"""Parameters for ads.list operation"""
|
|
36
|
+
account_id: str
|
|
37
|
+
fields: NotRequired[str]
|
|
38
|
+
limit: NotRequired[int]
|
|
39
|
+
after: NotRequired[str]
|
|
40
|
+
|
|
41
|
+
class AdCreativesListParams(TypedDict):
|
|
42
|
+
"""Parameters for ad_creatives.list operation"""
|
|
43
|
+
account_id: str
|
|
44
|
+
fields: NotRequired[str]
|
|
45
|
+
limit: NotRequired[int]
|
|
46
|
+
after: NotRequired[str]
|
|
47
|
+
|
|
48
|
+
class AdsInsightsListParams(TypedDict):
|
|
49
|
+
"""Parameters for ads_insights.list operation"""
|
|
50
|
+
account_id: str
|
|
51
|
+
fields: NotRequired[str]
|
|
52
|
+
date_preset: NotRequired[str]
|
|
53
|
+
time_range: NotRequired[str]
|
|
54
|
+
level: NotRequired[str]
|
|
55
|
+
limit: NotRequired[int]
|
|
56
|
+
after: NotRequired[str]
|
|
57
|
+
|
|
58
|
+
class CustomConversionsListParams(TypedDict):
|
|
59
|
+
"""Parameters for custom_conversions.list operation"""
|
|
60
|
+
account_id: str
|
|
61
|
+
fields: NotRequired[str]
|
|
62
|
+
limit: NotRequired[int]
|
|
63
|
+
after: NotRequired[str]
|
|
64
|
+
|
|
65
|
+
class ImagesListParams(TypedDict):
|
|
66
|
+
"""Parameters for images.list operation"""
|
|
67
|
+
account_id: str
|
|
68
|
+
fields: NotRequired[str]
|
|
69
|
+
limit: NotRequired[int]
|
|
70
|
+
after: NotRequired[str]
|
|
71
|
+
|
|
72
|
+
class VideosListParams(TypedDict):
|
|
73
|
+
"""Parameters for videos.list operation"""
|
|
74
|
+
account_id: str
|
|
75
|
+
fields: NotRequired[str]
|
|
76
|
+
limit: NotRequired[int]
|
|
77
|
+
after: NotRequired[str]
|
|
78
|
+
|
|
79
|
+
class CampaignsGetParams(TypedDict):
|
|
80
|
+
"""Parameters for campaigns.get operation"""
|
|
81
|
+
campaign_id: str
|
|
82
|
+
fields: NotRequired[str]
|
|
83
|
+
|
|
84
|
+
class AdSetsGetParams(TypedDict):
|
|
85
|
+
"""Parameters for ad_sets.get operation"""
|
|
86
|
+
adset_id: str
|
|
87
|
+
fields: NotRequired[str]
|
|
88
|
+
|
|
89
|
+
class AdsGetParams(TypedDict):
|
|
90
|
+
"""Parameters for ads.get operation"""
|
|
91
|
+
ad_id: str
|
|
92
|
+
fields: NotRequired[str]
|
|
93
|
+
|
|
94
|
+
# ===== SEARCH TYPES =====
|
|
95
|
+
|
|
96
|
+
# Sort specification
|
|
97
|
+
AirbyteSortOrder = Literal["asc", "desc"]
|
|
98
|
+
|
|
99
|
+
# ===== CAMPAIGNS SEARCH TYPES =====
|
|
100
|
+
|
|
101
|
+
class CampaignsSearchFilter(TypedDict, total=False):
|
|
102
|
+
"""Available fields for filtering campaigns search queries."""
|
|
103
|
+
id: str | None
|
|
104
|
+
"""Campaign ID"""
|
|
105
|
+
name: str | None
|
|
106
|
+
"""Campaign name"""
|
|
107
|
+
account_id: str | None
|
|
108
|
+
"""Ad account ID"""
|
|
109
|
+
status: str | None
|
|
110
|
+
"""Campaign status"""
|
|
111
|
+
effective_status: str | None
|
|
112
|
+
"""Effective status"""
|
|
113
|
+
objective: str | None
|
|
114
|
+
"""Campaign objective"""
|
|
115
|
+
daily_budget: float | None
|
|
116
|
+
"""Daily budget in account currency"""
|
|
117
|
+
lifetime_budget: float | None
|
|
118
|
+
"""Lifetime budget"""
|
|
119
|
+
budget_remaining: float | None
|
|
120
|
+
"""Remaining budget"""
|
|
121
|
+
created_time: str | None
|
|
122
|
+
"""Campaign creation time"""
|
|
123
|
+
start_time: str | None
|
|
124
|
+
"""Campaign start time"""
|
|
125
|
+
stop_time: str | None
|
|
126
|
+
"""Campaign stop time"""
|
|
127
|
+
updated_time: str | None
|
|
128
|
+
"""Last update time"""
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
class CampaignsInFilter(TypedDict, total=False):
|
|
132
|
+
"""Available fields for 'in' condition (values are lists)."""
|
|
133
|
+
id: list[str]
|
|
134
|
+
"""Campaign ID"""
|
|
135
|
+
name: list[str]
|
|
136
|
+
"""Campaign name"""
|
|
137
|
+
account_id: list[str]
|
|
138
|
+
"""Ad account ID"""
|
|
139
|
+
status: list[str]
|
|
140
|
+
"""Campaign status"""
|
|
141
|
+
effective_status: list[str]
|
|
142
|
+
"""Effective status"""
|
|
143
|
+
objective: list[str]
|
|
144
|
+
"""Campaign objective"""
|
|
145
|
+
daily_budget: list[float]
|
|
146
|
+
"""Daily budget in account currency"""
|
|
147
|
+
lifetime_budget: list[float]
|
|
148
|
+
"""Lifetime budget"""
|
|
149
|
+
budget_remaining: list[float]
|
|
150
|
+
"""Remaining budget"""
|
|
151
|
+
created_time: list[str]
|
|
152
|
+
"""Campaign creation time"""
|
|
153
|
+
start_time: list[str]
|
|
154
|
+
"""Campaign start time"""
|
|
155
|
+
stop_time: list[str]
|
|
156
|
+
"""Campaign stop time"""
|
|
157
|
+
updated_time: list[str]
|
|
158
|
+
"""Last update time"""
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
class CampaignsAnyValueFilter(TypedDict, total=False):
|
|
162
|
+
"""Available fields with Any value type. Used for 'contains' and 'any' conditions."""
|
|
163
|
+
id: Any
|
|
164
|
+
"""Campaign ID"""
|
|
165
|
+
name: Any
|
|
166
|
+
"""Campaign name"""
|
|
167
|
+
account_id: Any
|
|
168
|
+
"""Ad account ID"""
|
|
169
|
+
status: Any
|
|
170
|
+
"""Campaign status"""
|
|
171
|
+
effective_status: Any
|
|
172
|
+
"""Effective status"""
|
|
173
|
+
objective: Any
|
|
174
|
+
"""Campaign objective"""
|
|
175
|
+
daily_budget: Any
|
|
176
|
+
"""Daily budget in account currency"""
|
|
177
|
+
lifetime_budget: Any
|
|
178
|
+
"""Lifetime budget"""
|
|
179
|
+
budget_remaining: Any
|
|
180
|
+
"""Remaining budget"""
|
|
181
|
+
created_time: Any
|
|
182
|
+
"""Campaign creation time"""
|
|
183
|
+
start_time: Any
|
|
184
|
+
"""Campaign start time"""
|
|
185
|
+
stop_time: Any
|
|
186
|
+
"""Campaign stop time"""
|
|
187
|
+
updated_time: Any
|
|
188
|
+
"""Last update time"""
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
class CampaignsStringFilter(TypedDict, total=False):
|
|
192
|
+
"""String fields for text search conditions (like, fuzzy, keyword)."""
|
|
193
|
+
id: str
|
|
194
|
+
"""Campaign ID"""
|
|
195
|
+
name: str
|
|
196
|
+
"""Campaign name"""
|
|
197
|
+
account_id: str
|
|
198
|
+
"""Ad account ID"""
|
|
199
|
+
status: str
|
|
200
|
+
"""Campaign status"""
|
|
201
|
+
effective_status: str
|
|
202
|
+
"""Effective status"""
|
|
203
|
+
objective: str
|
|
204
|
+
"""Campaign objective"""
|
|
205
|
+
daily_budget: str
|
|
206
|
+
"""Daily budget in account currency"""
|
|
207
|
+
lifetime_budget: str
|
|
208
|
+
"""Lifetime budget"""
|
|
209
|
+
budget_remaining: str
|
|
210
|
+
"""Remaining budget"""
|
|
211
|
+
created_time: str
|
|
212
|
+
"""Campaign creation time"""
|
|
213
|
+
start_time: str
|
|
214
|
+
"""Campaign start time"""
|
|
215
|
+
stop_time: str
|
|
216
|
+
"""Campaign stop time"""
|
|
217
|
+
updated_time: str
|
|
218
|
+
"""Last update time"""
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
class CampaignsSortFilter(TypedDict, total=False):
|
|
222
|
+
"""Available fields for sorting campaigns search results."""
|
|
223
|
+
id: AirbyteSortOrder
|
|
224
|
+
"""Campaign ID"""
|
|
225
|
+
name: AirbyteSortOrder
|
|
226
|
+
"""Campaign name"""
|
|
227
|
+
account_id: AirbyteSortOrder
|
|
228
|
+
"""Ad account ID"""
|
|
229
|
+
status: AirbyteSortOrder
|
|
230
|
+
"""Campaign status"""
|
|
231
|
+
effective_status: AirbyteSortOrder
|
|
232
|
+
"""Effective status"""
|
|
233
|
+
objective: AirbyteSortOrder
|
|
234
|
+
"""Campaign objective"""
|
|
235
|
+
daily_budget: AirbyteSortOrder
|
|
236
|
+
"""Daily budget in account currency"""
|
|
237
|
+
lifetime_budget: AirbyteSortOrder
|
|
238
|
+
"""Lifetime budget"""
|
|
239
|
+
budget_remaining: AirbyteSortOrder
|
|
240
|
+
"""Remaining budget"""
|
|
241
|
+
created_time: AirbyteSortOrder
|
|
242
|
+
"""Campaign creation time"""
|
|
243
|
+
start_time: AirbyteSortOrder
|
|
244
|
+
"""Campaign start time"""
|
|
245
|
+
stop_time: AirbyteSortOrder
|
|
246
|
+
"""Campaign stop time"""
|
|
247
|
+
updated_time: AirbyteSortOrder
|
|
248
|
+
"""Last update time"""
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
# Entity-specific condition types for campaigns
|
|
252
|
+
class CampaignsEqCondition(TypedDict, total=False):
|
|
253
|
+
"""Equal to: field equals value."""
|
|
254
|
+
eq: CampaignsSearchFilter
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
class CampaignsNeqCondition(TypedDict, total=False):
|
|
258
|
+
"""Not equal to: field does not equal value."""
|
|
259
|
+
neq: CampaignsSearchFilter
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
class CampaignsGtCondition(TypedDict, total=False):
|
|
263
|
+
"""Greater than: field > value."""
|
|
264
|
+
gt: CampaignsSearchFilter
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
class CampaignsGteCondition(TypedDict, total=False):
|
|
268
|
+
"""Greater than or equal: field >= value."""
|
|
269
|
+
gte: CampaignsSearchFilter
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
class CampaignsLtCondition(TypedDict, total=False):
|
|
273
|
+
"""Less than: field < value."""
|
|
274
|
+
lt: CampaignsSearchFilter
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
class CampaignsLteCondition(TypedDict, total=False):
|
|
278
|
+
"""Less than or equal: field <= value."""
|
|
279
|
+
lte: CampaignsSearchFilter
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
class CampaignsLikeCondition(TypedDict, total=False):
|
|
283
|
+
"""Partial string match with % wildcards."""
|
|
284
|
+
like: CampaignsStringFilter
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
class CampaignsFuzzyCondition(TypedDict, total=False):
|
|
288
|
+
"""Ordered word text match (case-insensitive)."""
|
|
289
|
+
fuzzy: CampaignsStringFilter
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
class CampaignsKeywordCondition(TypedDict, total=False):
|
|
293
|
+
"""Keyword text match (any word present)."""
|
|
294
|
+
keyword: CampaignsStringFilter
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
class CampaignsContainsCondition(TypedDict, total=False):
|
|
298
|
+
"""Check if value exists in array field. Example: {"contains": {"tags": "premium"}}"""
|
|
299
|
+
contains: CampaignsAnyValueFilter
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
# Reserved keyword conditions using functional TypedDict syntax
|
|
303
|
+
CampaignsInCondition = TypedDict("CampaignsInCondition", {"in": CampaignsInFilter}, total=False)
|
|
304
|
+
"""In list: field value is in list. Example: {"in": {"status": ["active", "pending"]}}"""
|
|
305
|
+
|
|
306
|
+
CampaignsNotCondition = TypedDict("CampaignsNotCondition", {"not": "CampaignsCondition"}, total=False)
|
|
307
|
+
"""Negates the nested condition."""
|
|
308
|
+
|
|
309
|
+
CampaignsAndCondition = TypedDict("CampaignsAndCondition", {"and": "list[CampaignsCondition]"}, total=False)
|
|
310
|
+
"""True if all nested conditions are true."""
|
|
311
|
+
|
|
312
|
+
CampaignsOrCondition = TypedDict("CampaignsOrCondition", {"or": "list[CampaignsCondition]"}, total=False)
|
|
313
|
+
"""True if any nested condition is true."""
|
|
314
|
+
|
|
315
|
+
CampaignsAnyCondition = TypedDict("CampaignsAnyCondition", {"any": CampaignsAnyValueFilter}, total=False)
|
|
316
|
+
"""Match if ANY element in array field matches nested condition. Example: {"any": {"addresses": {"eq": {"state": "CA"}}}}"""
|
|
317
|
+
|
|
318
|
+
# Union of all campaigns condition types
|
|
319
|
+
CampaignsCondition = (
|
|
320
|
+
CampaignsEqCondition
|
|
321
|
+
| CampaignsNeqCondition
|
|
322
|
+
| CampaignsGtCondition
|
|
323
|
+
| CampaignsGteCondition
|
|
324
|
+
| CampaignsLtCondition
|
|
325
|
+
| CampaignsLteCondition
|
|
326
|
+
| CampaignsInCondition
|
|
327
|
+
| CampaignsLikeCondition
|
|
328
|
+
| CampaignsFuzzyCondition
|
|
329
|
+
| CampaignsKeywordCondition
|
|
330
|
+
| CampaignsContainsCondition
|
|
331
|
+
| CampaignsNotCondition
|
|
332
|
+
| CampaignsAndCondition
|
|
333
|
+
| CampaignsOrCondition
|
|
334
|
+
| CampaignsAnyCondition
|
|
335
|
+
)
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
class CampaignsSearchQuery(TypedDict, total=False):
|
|
339
|
+
"""Search query for campaigns entity."""
|
|
340
|
+
filter: CampaignsCondition
|
|
341
|
+
sort: list[CampaignsSortFilter]
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
# ===== AD_SETS SEARCH TYPES =====
|
|
345
|
+
|
|
346
|
+
class AdSetsSearchFilter(TypedDict, total=False):
|
|
347
|
+
"""Available fields for filtering ad_sets search queries."""
|
|
348
|
+
id: str | None
|
|
349
|
+
"""Ad Set ID"""
|
|
350
|
+
name: str | None
|
|
351
|
+
"""Ad Set name"""
|
|
352
|
+
account_id: str | None
|
|
353
|
+
"""Ad account ID"""
|
|
354
|
+
campaign_id: str | None
|
|
355
|
+
"""Parent campaign ID"""
|
|
356
|
+
effective_status: str | None
|
|
357
|
+
"""Effective status"""
|
|
358
|
+
daily_budget: float | None
|
|
359
|
+
"""Daily budget"""
|
|
360
|
+
lifetime_budget: float | None
|
|
361
|
+
"""Lifetime budget"""
|
|
362
|
+
budget_remaining: float | None
|
|
363
|
+
"""Remaining budget"""
|
|
364
|
+
bid_amount: float | None
|
|
365
|
+
"""Bid amount"""
|
|
366
|
+
bid_strategy: str | None
|
|
367
|
+
"""Bid strategy"""
|
|
368
|
+
created_time: str | None
|
|
369
|
+
"""Ad set creation time"""
|
|
370
|
+
start_time: str | None
|
|
371
|
+
"""Ad set start time"""
|
|
372
|
+
end_time: str | None
|
|
373
|
+
"""Ad set end time"""
|
|
374
|
+
updated_time: str | None
|
|
375
|
+
"""Last update time"""
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
class AdSetsInFilter(TypedDict, total=False):
|
|
379
|
+
"""Available fields for 'in' condition (values are lists)."""
|
|
380
|
+
id: list[str]
|
|
381
|
+
"""Ad Set ID"""
|
|
382
|
+
name: list[str]
|
|
383
|
+
"""Ad Set name"""
|
|
384
|
+
account_id: list[str]
|
|
385
|
+
"""Ad account ID"""
|
|
386
|
+
campaign_id: list[str]
|
|
387
|
+
"""Parent campaign ID"""
|
|
388
|
+
effective_status: list[str]
|
|
389
|
+
"""Effective status"""
|
|
390
|
+
daily_budget: list[float]
|
|
391
|
+
"""Daily budget"""
|
|
392
|
+
lifetime_budget: list[float]
|
|
393
|
+
"""Lifetime budget"""
|
|
394
|
+
budget_remaining: list[float]
|
|
395
|
+
"""Remaining budget"""
|
|
396
|
+
bid_amount: list[float]
|
|
397
|
+
"""Bid amount"""
|
|
398
|
+
bid_strategy: list[str]
|
|
399
|
+
"""Bid strategy"""
|
|
400
|
+
created_time: list[str]
|
|
401
|
+
"""Ad set creation time"""
|
|
402
|
+
start_time: list[str]
|
|
403
|
+
"""Ad set start time"""
|
|
404
|
+
end_time: list[str]
|
|
405
|
+
"""Ad set end time"""
|
|
406
|
+
updated_time: list[str]
|
|
407
|
+
"""Last update time"""
|
|
408
|
+
|
|
409
|
+
|
|
410
|
+
class AdSetsAnyValueFilter(TypedDict, total=False):
|
|
411
|
+
"""Available fields with Any value type. Used for 'contains' and 'any' conditions."""
|
|
412
|
+
id: Any
|
|
413
|
+
"""Ad Set ID"""
|
|
414
|
+
name: Any
|
|
415
|
+
"""Ad Set name"""
|
|
416
|
+
account_id: Any
|
|
417
|
+
"""Ad account ID"""
|
|
418
|
+
campaign_id: Any
|
|
419
|
+
"""Parent campaign ID"""
|
|
420
|
+
effective_status: Any
|
|
421
|
+
"""Effective status"""
|
|
422
|
+
daily_budget: Any
|
|
423
|
+
"""Daily budget"""
|
|
424
|
+
lifetime_budget: Any
|
|
425
|
+
"""Lifetime budget"""
|
|
426
|
+
budget_remaining: Any
|
|
427
|
+
"""Remaining budget"""
|
|
428
|
+
bid_amount: Any
|
|
429
|
+
"""Bid amount"""
|
|
430
|
+
bid_strategy: Any
|
|
431
|
+
"""Bid strategy"""
|
|
432
|
+
created_time: Any
|
|
433
|
+
"""Ad set creation time"""
|
|
434
|
+
start_time: Any
|
|
435
|
+
"""Ad set start time"""
|
|
436
|
+
end_time: Any
|
|
437
|
+
"""Ad set end time"""
|
|
438
|
+
updated_time: Any
|
|
439
|
+
"""Last update time"""
|
|
440
|
+
|
|
441
|
+
|
|
442
|
+
class AdSetsStringFilter(TypedDict, total=False):
|
|
443
|
+
"""String fields for text search conditions (like, fuzzy, keyword)."""
|
|
444
|
+
id: str
|
|
445
|
+
"""Ad Set ID"""
|
|
446
|
+
name: str
|
|
447
|
+
"""Ad Set name"""
|
|
448
|
+
account_id: str
|
|
449
|
+
"""Ad account ID"""
|
|
450
|
+
campaign_id: str
|
|
451
|
+
"""Parent campaign ID"""
|
|
452
|
+
effective_status: str
|
|
453
|
+
"""Effective status"""
|
|
454
|
+
daily_budget: str
|
|
455
|
+
"""Daily budget"""
|
|
456
|
+
lifetime_budget: str
|
|
457
|
+
"""Lifetime budget"""
|
|
458
|
+
budget_remaining: str
|
|
459
|
+
"""Remaining budget"""
|
|
460
|
+
bid_amount: str
|
|
461
|
+
"""Bid amount"""
|
|
462
|
+
bid_strategy: str
|
|
463
|
+
"""Bid strategy"""
|
|
464
|
+
created_time: str
|
|
465
|
+
"""Ad set creation time"""
|
|
466
|
+
start_time: str
|
|
467
|
+
"""Ad set start time"""
|
|
468
|
+
end_time: str
|
|
469
|
+
"""Ad set end time"""
|
|
470
|
+
updated_time: str
|
|
471
|
+
"""Last update time"""
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
class AdSetsSortFilter(TypedDict, total=False):
|
|
475
|
+
"""Available fields for sorting ad_sets search results."""
|
|
476
|
+
id: AirbyteSortOrder
|
|
477
|
+
"""Ad Set ID"""
|
|
478
|
+
name: AirbyteSortOrder
|
|
479
|
+
"""Ad Set name"""
|
|
480
|
+
account_id: AirbyteSortOrder
|
|
481
|
+
"""Ad account ID"""
|
|
482
|
+
campaign_id: AirbyteSortOrder
|
|
483
|
+
"""Parent campaign ID"""
|
|
484
|
+
effective_status: AirbyteSortOrder
|
|
485
|
+
"""Effective status"""
|
|
486
|
+
daily_budget: AirbyteSortOrder
|
|
487
|
+
"""Daily budget"""
|
|
488
|
+
lifetime_budget: AirbyteSortOrder
|
|
489
|
+
"""Lifetime budget"""
|
|
490
|
+
budget_remaining: AirbyteSortOrder
|
|
491
|
+
"""Remaining budget"""
|
|
492
|
+
bid_amount: AirbyteSortOrder
|
|
493
|
+
"""Bid amount"""
|
|
494
|
+
bid_strategy: AirbyteSortOrder
|
|
495
|
+
"""Bid strategy"""
|
|
496
|
+
created_time: AirbyteSortOrder
|
|
497
|
+
"""Ad set creation time"""
|
|
498
|
+
start_time: AirbyteSortOrder
|
|
499
|
+
"""Ad set start time"""
|
|
500
|
+
end_time: AirbyteSortOrder
|
|
501
|
+
"""Ad set end time"""
|
|
502
|
+
updated_time: AirbyteSortOrder
|
|
503
|
+
"""Last update time"""
|
|
504
|
+
|
|
505
|
+
|
|
506
|
+
# Entity-specific condition types for ad_sets
|
|
507
|
+
class AdSetsEqCondition(TypedDict, total=False):
|
|
508
|
+
"""Equal to: field equals value."""
|
|
509
|
+
eq: AdSetsSearchFilter
|
|
510
|
+
|
|
511
|
+
|
|
512
|
+
class AdSetsNeqCondition(TypedDict, total=False):
|
|
513
|
+
"""Not equal to: field does not equal value."""
|
|
514
|
+
neq: AdSetsSearchFilter
|
|
515
|
+
|
|
516
|
+
|
|
517
|
+
class AdSetsGtCondition(TypedDict, total=False):
|
|
518
|
+
"""Greater than: field > value."""
|
|
519
|
+
gt: AdSetsSearchFilter
|
|
520
|
+
|
|
521
|
+
|
|
522
|
+
class AdSetsGteCondition(TypedDict, total=False):
|
|
523
|
+
"""Greater than or equal: field >= value."""
|
|
524
|
+
gte: AdSetsSearchFilter
|
|
525
|
+
|
|
526
|
+
|
|
527
|
+
class AdSetsLtCondition(TypedDict, total=False):
|
|
528
|
+
"""Less than: field < value."""
|
|
529
|
+
lt: AdSetsSearchFilter
|
|
530
|
+
|
|
531
|
+
|
|
532
|
+
class AdSetsLteCondition(TypedDict, total=False):
|
|
533
|
+
"""Less than or equal: field <= value."""
|
|
534
|
+
lte: AdSetsSearchFilter
|
|
535
|
+
|
|
536
|
+
|
|
537
|
+
class AdSetsLikeCondition(TypedDict, total=False):
|
|
538
|
+
"""Partial string match with % wildcards."""
|
|
539
|
+
like: AdSetsStringFilter
|
|
540
|
+
|
|
541
|
+
|
|
542
|
+
class AdSetsFuzzyCondition(TypedDict, total=False):
|
|
543
|
+
"""Ordered word text match (case-insensitive)."""
|
|
544
|
+
fuzzy: AdSetsStringFilter
|
|
545
|
+
|
|
546
|
+
|
|
547
|
+
class AdSetsKeywordCondition(TypedDict, total=False):
|
|
548
|
+
"""Keyword text match (any word present)."""
|
|
549
|
+
keyword: AdSetsStringFilter
|
|
550
|
+
|
|
551
|
+
|
|
552
|
+
class AdSetsContainsCondition(TypedDict, total=False):
|
|
553
|
+
"""Check if value exists in array field. Example: {"contains": {"tags": "premium"}}"""
|
|
554
|
+
contains: AdSetsAnyValueFilter
|
|
555
|
+
|
|
556
|
+
|
|
557
|
+
# Reserved keyword conditions using functional TypedDict syntax
|
|
558
|
+
AdSetsInCondition = TypedDict("AdSetsInCondition", {"in": AdSetsInFilter}, total=False)
|
|
559
|
+
"""In list: field value is in list. Example: {"in": {"status": ["active", "pending"]}}"""
|
|
560
|
+
|
|
561
|
+
AdSetsNotCondition = TypedDict("AdSetsNotCondition", {"not": "AdSetsCondition"}, total=False)
|
|
562
|
+
"""Negates the nested condition."""
|
|
563
|
+
|
|
564
|
+
AdSetsAndCondition = TypedDict("AdSetsAndCondition", {"and": "list[AdSetsCondition]"}, total=False)
|
|
565
|
+
"""True if all nested conditions are true."""
|
|
566
|
+
|
|
567
|
+
AdSetsOrCondition = TypedDict("AdSetsOrCondition", {"or": "list[AdSetsCondition]"}, total=False)
|
|
568
|
+
"""True if any nested condition is true."""
|
|
569
|
+
|
|
570
|
+
AdSetsAnyCondition = TypedDict("AdSetsAnyCondition", {"any": AdSetsAnyValueFilter}, total=False)
|
|
571
|
+
"""Match if ANY element in array field matches nested condition. Example: {"any": {"addresses": {"eq": {"state": "CA"}}}}"""
|
|
572
|
+
|
|
573
|
+
# Union of all ad_sets condition types
|
|
574
|
+
AdSetsCondition = (
|
|
575
|
+
AdSetsEqCondition
|
|
576
|
+
| AdSetsNeqCondition
|
|
577
|
+
| AdSetsGtCondition
|
|
578
|
+
| AdSetsGteCondition
|
|
579
|
+
| AdSetsLtCondition
|
|
580
|
+
| AdSetsLteCondition
|
|
581
|
+
| AdSetsInCondition
|
|
582
|
+
| AdSetsLikeCondition
|
|
583
|
+
| AdSetsFuzzyCondition
|
|
584
|
+
| AdSetsKeywordCondition
|
|
585
|
+
| AdSetsContainsCondition
|
|
586
|
+
| AdSetsNotCondition
|
|
587
|
+
| AdSetsAndCondition
|
|
588
|
+
| AdSetsOrCondition
|
|
589
|
+
| AdSetsAnyCondition
|
|
590
|
+
)
|
|
591
|
+
|
|
592
|
+
|
|
593
|
+
class AdSetsSearchQuery(TypedDict, total=False):
|
|
594
|
+
"""Search query for ad_sets entity."""
|
|
595
|
+
filter: AdSetsCondition
|
|
596
|
+
sort: list[AdSetsSortFilter]
|
|
597
|
+
|
|
598
|
+
|
|
599
|
+
# ===== ADS SEARCH TYPES =====
|
|
600
|
+
|
|
601
|
+
class AdsSearchFilter(TypedDict, total=False):
|
|
602
|
+
"""Available fields for filtering ads search queries."""
|
|
603
|
+
id: str | None
|
|
604
|
+
"""Ad ID"""
|
|
605
|
+
name: str | None
|
|
606
|
+
"""Ad name"""
|
|
607
|
+
account_id: str | None
|
|
608
|
+
"""Ad account ID"""
|
|
609
|
+
adset_id: str | None
|
|
610
|
+
"""Parent ad set ID"""
|
|
611
|
+
campaign_id: str | None
|
|
612
|
+
"""Parent campaign ID"""
|
|
613
|
+
status: str | None
|
|
614
|
+
"""Ad status"""
|
|
615
|
+
effective_status: str | None
|
|
616
|
+
"""Effective status"""
|
|
617
|
+
created_time: str | None
|
|
618
|
+
"""Ad creation time"""
|
|
619
|
+
updated_time: str | None
|
|
620
|
+
"""Last update time"""
|
|
621
|
+
|
|
622
|
+
|
|
623
|
+
class AdsInFilter(TypedDict, total=False):
|
|
624
|
+
"""Available fields for 'in' condition (values are lists)."""
|
|
625
|
+
id: list[str]
|
|
626
|
+
"""Ad ID"""
|
|
627
|
+
name: list[str]
|
|
628
|
+
"""Ad name"""
|
|
629
|
+
account_id: list[str]
|
|
630
|
+
"""Ad account ID"""
|
|
631
|
+
adset_id: list[str]
|
|
632
|
+
"""Parent ad set ID"""
|
|
633
|
+
campaign_id: list[str]
|
|
634
|
+
"""Parent campaign ID"""
|
|
635
|
+
status: list[str]
|
|
636
|
+
"""Ad status"""
|
|
637
|
+
effective_status: list[str]
|
|
638
|
+
"""Effective status"""
|
|
639
|
+
created_time: list[str]
|
|
640
|
+
"""Ad creation time"""
|
|
641
|
+
updated_time: list[str]
|
|
642
|
+
"""Last update time"""
|
|
643
|
+
|
|
644
|
+
|
|
645
|
+
class AdsAnyValueFilter(TypedDict, total=False):
|
|
646
|
+
"""Available fields with Any value type. Used for 'contains' and 'any' conditions."""
|
|
647
|
+
id: Any
|
|
648
|
+
"""Ad ID"""
|
|
649
|
+
name: Any
|
|
650
|
+
"""Ad name"""
|
|
651
|
+
account_id: Any
|
|
652
|
+
"""Ad account ID"""
|
|
653
|
+
adset_id: Any
|
|
654
|
+
"""Parent ad set ID"""
|
|
655
|
+
campaign_id: Any
|
|
656
|
+
"""Parent campaign ID"""
|
|
657
|
+
status: Any
|
|
658
|
+
"""Ad status"""
|
|
659
|
+
effective_status: Any
|
|
660
|
+
"""Effective status"""
|
|
661
|
+
created_time: Any
|
|
662
|
+
"""Ad creation time"""
|
|
663
|
+
updated_time: Any
|
|
664
|
+
"""Last update time"""
|
|
665
|
+
|
|
666
|
+
|
|
667
|
+
class AdsStringFilter(TypedDict, total=False):
|
|
668
|
+
"""String fields for text search conditions (like, fuzzy, keyword)."""
|
|
669
|
+
id: str
|
|
670
|
+
"""Ad ID"""
|
|
671
|
+
name: str
|
|
672
|
+
"""Ad name"""
|
|
673
|
+
account_id: str
|
|
674
|
+
"""Ad account ID"""
|
|
675
|
+
adset_id: str
|
|
676
|
+
"""Parent ad set ID"""
|
|
677
|
+
campaign_id: str
|
|
678
|
+
"""Parent campaign ID"""
|
|
679
|
+
status: str
|
|
680
|
+
"""Ad status"""
|
|
681
|
+
effective_status: str
|
|
682
|
+
"""Effective status"""
|
|
683
|
+
created_time: str
|
|
684
|
+
"""Ad creation time"""
|
|
685
|
+
updated_time: str
|
|
686
|
+
"""Last update time"""
|
|
687
|
+
|
|
688
|
+
|
|
689
|
+
class AdsSortFilter(TypedDict, total=False):
|
|
690
|
+
"""Available fields for sorting ads search results."""
|
|
691
|
+
id: AirbyteSortOrder
|
|
692
|
+
"""Ad ID"""
|
|
693
|
+
name: AirbyteSortOrder
|
|
694
|
+
"""Ad name"""
|
|
695
|
+
account_id: AirbyteSortOrder
|
|
696
|
+
"""Ad account ID"""
|
|
697
|
+
adset_id: AirbyteSortOrder
|
|
698
|
+
"""Parent ad set ID"""
|
|
699
|
+
campaign_id: AirbyteSortOrder
|
|
700
|
+
"""Parent campaign ID"""
|
|
701
|
+
status: AirbyteSortOrder
|
|
702
|
+
"""Ad status"""
|
|
703
|
+
effective_status: AirbyteSortOrder
|
|
704
|
+
"""Effective status"""
|
|
705
|
+
created_time: AirbyteSortOrder
|
|
706
|
+
"""Ad creation time"""
|
|
707
|
+
updated_time: AirbyteSortOrder
|
|
708
|
+
"""Last update time"""
|
|
709
|
+
|
|
710
|
+
|
|
711
|
+
# Entity-specific condition types for ads
|
|
712
|
+
class AdsEqCondition(TypedDict, total=False):
|
|
713
|
+
"""Equal to: field equals value."""
|
|
714
|
+
eq: AdsSearchFilter
|
|
715
|
+
|
|
716
|
+
|
|
717
|
+
class AdsNeqCondition(TypedDict, total=False):
|
|
718
|
+
"""Not equal to: field does not equal value."""
|
|
719
|
+
neq: AdsSearchFilter
|
|
720
|
+
|
|
721
|
+
|
|
722
|
+
class AdsGtCondition(TypedDict, total=False):
|
|
723
|
+
"""Greater than: field > value."""
|
|
724
|
+
gt: AdsSearchFilter
|
|
725
|
+
|
|
726
|
+
|
|
727
|
+
class AdsGteCondition(TypedDict, total=False):
|
|
728
|
+
"""Greater than or equal: field >= value."""
|
|
729
|
+
gte: AdsSearchFilter
|
|
730
|
+
|
|
731
|
+
|
|
732
|
+
class AdsLtCondition(TypedDict, total=False):
|
|
733
|
+
"""Less than: field < value."""
|
|
734
|
+
lt: AdsSearchFilter
|
|
735
|
+
|
|
736
|
+
|
|
737
|
+
class AdsLteCondition(TypedDict, total=False):
|
|
738
|
+
"""Less than or equal: field <= value."""
|
|
739
|
+
lte: AdsSearchFilter
|
|
740
|
+
|
|
741
|
+
|
|
742
|
+
class AdsLikeCondition(TypedDict, total=False):
|
|
743
|
+
"""Partial string match with % wildcards."""
|
|
744
|
+
like: AdsStringFilter
|
|
745
|
+
|
|
746
|
+
|
|
747
|
+
class AdsFuzzyCondition(TypedDict, total=False):
|
|
748
|
+
"""Ordered word text match (case-insensitive)."""
|
|
749
|
+
fuzzy: AdsStringFilter
|
|
750
|
+
|
|
751
|
+
|
|
752
|
+
class AdsKeywordCondition(TypedDict, total=False):
|
|
753
|
+
"""Keyword text match (any word present)."""
|
|
754
|
+
keyword: AdsStringFilter
|
|
755
|
+
|
|
756
|
+
|
|
757
|
+
class AdsContainsCondition(TypedDict, total=False):
|
|
758
|
+
"""Check if value exists in array field. Example: {"contains": {"tags": "premium"}}"""
|
|
759
|
+
contains: AdsAnyValueFilter
|
|
760
|
+
|
|
761
|
+
|
|
762
|
+
# Reserved keyword conditions using functional TypedDict syntax
|
|
763
|
+
AdsInCondition = TypedDict("AdsInCondition", {"in": AdsInFilter}, total=False)
|
|
764
|
+
"""In list: field value is in list. Example: {"in": {"status": ["active", "pending"]}}"""
|
|
765
|
+
|
|
766
|
+
AdsNotCondition = TypedDict("AdsNotCondition", {"not": "AdsCondition"}, total=False)
|
|
767
|
+
"""Negates the nested condition."""
|
|
768
|
+
|
|
769
|
+
AdsAndCondition = TypedDict("AdsAndCondition", {"and": "list[AdsCondition]"}, total=False)
|
|
770
|
+
"""True if all nested conditions are true."""
|
|
771
|
+
|
|
772
|
+
AdsOrCondition = TypedDict("AdsOrCondition", {"or": "list[AdsCondition]"}, total=False)
|
|
773
|
+
"""True if any nested condition is true."""
|
|
774
|
+
|
|
775
|
+
AdsAnyCondition = TypedDict("AdsAnyCondition", {"any": AdsAnyValueFilter}, total=False)
|
|
776
|
+
"""Match if ANY element in array field matches nested condition. Example: {"any": {"addresses": {"eq": {"state": "CA"}}}}"""
|
|
777
|
+
|
|
778
|
+
# Union of all ads condition types
|
|
779
|
+
AdsCondition = (
|
|
780
|
+
AdsEqCondition
|
|
781
|
+
| AdsNeqCondition
|
|
782
|
+
| AdsGtCondition
|
|
783
|
+
| AdsGteCondition
|
|
784
|
+
| AdsLtCondition
|
|
785
|
+
| AdsLteCondition
|
|
786
|
+
| AdsInCondition
|
|
787
|
+
| AdsLikeCondition
|
|
788
|
+
| AdsFuzzyCondition
|
|
789
|
+
| AdsKeywordCondition
|
|
790
|
+
| AdsContainsCondition
|
|
791
|
+
| AdsNotCondition
|
|
792
|
+
| AdsAndCondition
|
|
793
|
+
| AdsOrCondition
|
|
794
|
+
| AdsAnyCondition
|
|
795
|
+
)
|
|
796
|
+
|
|
797
|
+
|
|
798
|
+
class AdsSearchQuery(TypedDict, total=False):
|
|
799
|
+
"""Search query for ads entity."""
|
|
800
|
+
filter: AdsCondition
|
|
801
|
+
sort: list[AdsSortFilter]
|
|
802
|
+
|
|
803
|
+
|
|
804
|
+
# ===== AD_CREATIVES SEARCH TYPES =====
|
|
805
|
+
|
|
806
|
+
class AdCreativesSearchFilter(TypedDict, total=False):
|
|
807
|
+
"""Available fields for filtering ad_creatives search queries."""
|
|
808
|
+
id: str | None
|
|
809
|
+
"""Ad Creative ID"""
|
|
810
|
+
name: str | None
|
|
811
|
+
"""Ad Creative name"""
|
|
812
|
+
account_id: str | None
|
|
813
|
+
"""Ad account ID"""
|
|
814
|
+
body: str | None
|
|
815
|
+
"""Ad body text"""
|
|
816
|
+
title: str | None
|
|
817
|
+
"""Ad title"""
|
|
818
|
+
status: str | None
|
|
819
|
+
"""Creative status"""
|
|
820
|
+
image_url: str | None
|
|
821
|
+
"""Image URL"""
|
|
822
|
+
thumbnail_url: str | None
|
|
823
|
+
"""Thumbnail URL"""
|
|
824
|
+
link_url: str | None
|
|
825
|
+
"""Link URL"""
|
|
826
|
+
call_to_action_type: str | None
|
|
827
|
+
"""Call to action type"""
|
|
828
|
+
|
|
829
|
+
|
|
830
|
+
class AdCreativesInFilter(TypedDict, total=False):
|
|
831
|
+
"""Available fields for 'in' condition (values are lists)."""
|
|
832
|
+
id: list[str]
|
|
833
|
+
"""Ad Creative ID"""
|
|
834
|
+
name: list[str]
|
|
835
|
+
"""Ad Creative name"""
|
|
836
|
+
account_id: list[str]
|
|
837
|
+
"""Ad account ID"""
|
|
838
|
+
body: list[str]
|
|
839
|
+
"""Ad body text"""
|
|
840
|
+
title: list[str]
|
|
841
|
+
"""Ad title"""
|
|
842
|
+
status: list[str]
|
|
843
|
+
"""Creative status"""
|
|
844
|
+
image_url: list[str]
|
|
845
|
+
"""Image URL"""
|
|
846
|
+
thumbnail_url: list[str]
|
|
847
|
+
"""Thumbnail URL"""
|
|
848
|
+
link_url: list[str]
|
|
849
|
+
"""Link URL"""
|
|
850
|
+
call_to_action_type: list[str]
|
|
851
|
+
"""Call to action type"""
|
|
852
|
+
|
|
853
|
+
|
|
854
|
+
class AdCreativesAnyValueFilter(TypedDict, total=False):
|
|
855
|
+
"""Available fields with Any value type. Used for 'contains' and 'any' conditions."""
|
|
856
|
+
id: Any
|
|
857
|
+
"""Ad Creative ID"""
|
|
858
|
+
name: Any
|
|
859
|
+
"""Ad Creative name"""
|
|
860
|
+
account_id: Any
|
|
861
|
+
"""Ad account ID"""
|
|
862
|
+
body: Any
|
|
863
|
+
"""Ad body text"""
|
|
864
|
+
title: Any
|
|
865
|
+
"""Ad title"""
|
|
866
|
+
status: Any
|
|
867
|
+
"""Creative status"""
|
|
868
|
+
image_url: Any
|
|
869
|
+
"""Image URL"""
|
|
870
|
+
thumbnail_url: Any
|
|
871
|
+
"""Thumbnail URL"""
|
|
872
|
+
link_url: Any
|
|
873
|
+
"""Link URL"""
|
|
874
|
+
call_to_action_type: Any
|
|
875
|
+
"""Call to action type"""
|
|
876
|
+
|
|
877
|
+
|
|
878
|
+
class AdCreativesStringFilter(TypedDict, total=False):
|
|
879
|
+
"""String fields for text search conditions (like, fuzzy, keyword)."""
|
|
880
|
+
id: str
|
|
881
|
+
"""Ad Creative ID"""
|
|
882
|
+
name: str
|
|
883
|
+
"""Ad Creative name"""
|
|
884
|
+
account_id: str
|
|
885
|
+
"""Ad account ID"""
|
|
886
|
+
body: str
|
|
887
|
+
"""Ad body text"""
|
|
888
|
+
title: str
|
|
889
|
+
"""Ad title"""
|
|
890
|
+
status: str
|
|
891
|
+
"""Creative status"""
|
|
892
|
+
image_url: str
|
|
893
|
+
"""Image URL"""
|
|
894
|
+
thumbnail_url: str
|
|
895
|
+
"""Thumbnail URL"""
|
|
896
|
+
link_url: str
|
|
897
|
+
"""Link URL"""
|
|
898
|
+
call_to_action_type: str
|
|
899
|
+
"""Call to action type"""
|
|
900
|
+
|
|
901
|
+
|
|
902
|
+
class AdCreativesSortFilter(TypedDict, total=False):
|
|
903
|
+
"""Available fields for sorting ad_creatives search results."""
|
|
904
|
+
id: AirbyteSortOrder
|
|
905
|
+
"""Ad Creative ID"""
|
|
906
|
+
name: AirbyteSortOrder
|
|
907
|
+
"""Ad Creative name"""
|
|
908
|
+
account_id: AirbyteSortOrder
|
|
909
|
+
"""Ad account ID"""
|
|
910
|
+
body: AirbyteSortOrder
|
|
911
|
+
"""Ad body text"""
|
|
912
|
+
title: AirbyteSortOrder
|
|
913
|
+
"""Ad title"""
|
|
914
|
+
status: AirbyteSortOrder
|
|
915
|
+
"""Creative status"""
|
|
916
|
+
image_url: AirbyteSortOrder
|
|
917
|
+
"""Image URL"""
|
|
918
|
+
thumbnail_url: AirbyteSortOrder
|
|
919
|
+
"""Thumbnail URL"""
|
|
920
|
+
link_url: AirbyteSortOrder
|
|
921
|
+
"""Link URL"""
|
|
922
|
+
call_to_action_type: AirbyteSortOrder
|
|
923
|
+
"""Call to action type"""
|
|
924
|
+
|
|
925
|
+
|
|
926
|
+
# Entity-specific condition types for ad_creatives
|
|
927
|
+
class AdCreativesEqCondition(TypedDict, total=False):
|
|
928
|
+
"""Equal to: field equals value."""
|
|
929
|
+
eq: AdCreativesSearchFilter
|
|
930
|
+
|
|
931
|
+
|
|
932
|
+
class AdCreativesNeqCondition(TypedDict, total=False):
|
|
933
|
+
"""Not equal to: field does not equal value."""
|
|
934
|
+
neq: AdCreativesSearchFilter
|
|
935
|
+
|
|
936
|
+
|
|
937
|
+
class AdCreativesGtCondition(TypedDict, total=False):
|
|
938
|
+
"""Greater than: field > value."""
|
|
939
|
+
gt: AdCreativesSearchFilter
|
|
940
|
+
|
|
941
|
+
|
|
942
|
+
class AdCreativesGteCondition(TypedDict, total=False):
|
|
943
|
+
"""Greater than or equal: field >= value."""
|
|
944
|
+
gte: AdCreativesSearchFilter
|
|
945
|
+
|
|
946
|
+
|
|
947
|
+
class AdCreativesLtCondition(TypedDict, total=False):
|
|
948
|
+
"""Less than: field < value."""
|
|
949
|
+
lt: AdCreativesSearchFilter
|
|
950
|
+
|
|
951
|
+
|
|
952
|
+
class AdCreativesLteCondition(TypedDict, total=False):
|
|
953
|
+
"""Less than or equal: field <= value."""
|
|
954
|
+
lte: AdCreativesSearchFilter
|
|
955
|
+
|
|
956
|
+
|
|
957
|
+
class AdCreativesLikeCondition(TypedDict, total=False):
|
|
958
|
+
"""Partial string match with % wildcards."""
|
|
959
|
+
like: AdCreativesStringFilter
|
|
960
|
+
|
|
961
|
+
|
|
962
|
+
class AdCreativesFuzzyCondition(TypedDict, total=False):
|
|
963
|
+
"""Ordered word text match (case-insensitive)."""
|
|
964
|
+
fuzzy: AdCreativesStringFilter
|
|
965
|
+
|
|
966
|
+
|
|
967
|
+
class AdCreativesKeywordCondition(TypedDict, total=False):
|
|
968
|
+
"""Keyword text match (any word present)."""
|
|
969
|
+
keyword: AdCreativesStringFilter
|
|
970
|
+
|
|
971
|
+
|
|
972
|
+
class AdCreativesContainsCondition(TypedDict, total=False):
|
|
973
|
+
"""Check if value exists in array field. Example: {"contains": {"tags": "premium"}}"""
|
|
974
|
+
contains: AdCreativesAnyValueFilter
|
|
975
|
+
|
|
976
|
+
|
|
977
|
+
# Reserved keyword conditions using functional TypedDict syntax
|
|
978
|
+
AdCreativesInCondition = TypedDict("AdCreativesInCondition", {"in": AdCreativesInFilter}, total=False)
|
|
979
|
+
"""In list: field value is in list. Example: {"in": {"status": ["active", "pending"]}}"""
|
|
980
|
+
|
|
981
|
+
AdCreativesNotCondition = TypedDict("AdCreativesNotCondition", {"not": "AdCreativesCondition"}, total=False)
|
|
982
|
+
"""Negates the nested condition."""
|
|
983
|
+
|
|
984
|
+
AdCreativesAndCondition = TypedDict("AdCreativesAndCondition", {"and": "list[AdCreativesCondition]"}, total=False)
|
|
985
|
+
"""True if all nested conditions are true."""
|
|
986
|
+
|
|
987
|
+
AdCreativesOrCondition = TypedDict("AdCreativesOrCondition", {"or": "list[AdCreativesCondition]"}, total=False)
|
|
988
|
+
"""True if any nested condition is true."""
|
|
989
|
+
|
|
990
|
+
AdCreativesAnyCondition = TypedDict("AdCreativesAnyCondition", {"any": AdCreativesAnyValueFilter}, total=False)
|
|
991
|
+
"""Match if ANY element in array field matches nested condition. Example: {"any": {"addresses": {"eq": {"state": "CA"}}}}"""
|
|
992
|
+
|
|
993
|
+
# Union of all ad_creatives condition types
|
|
994
|
+
AdCreativesCondition = (
|
|
995
|
+
AdCreativesEqCondition
|
|
996
|
+
| AdCreativesNeqCondition
|
|
997
|
+
| AdCreativesGtCondition
|
|
998
|
+
| AdCreativesGteCondition
|
|
999
|
+
| AdCreativesLtCondition
|
|
1000
|
+
| AdCreativesLteCondition
|
|
1001
|
+
| AdCreativesInCondition
|
|
1002
|
+
| AdCreativesLikeCondition
|
|
1003
|
+
| AdCreativesFuzzyCondition
|
|
1004
|
+
| AdCreativesKeywordCondition
|
|
1005
|
+
| AdCreativesContainsCondition
|
|
1006
|
+
| AdCreativesNotCondition
|
|
1007
|
+
| AdCreativesAndCondition
|
|
1008
|
+
| AdCreativesOrCondition
|
|
1009
|
+
| AdCreativesAnyCondition
|
|
1010
|
+
)
|
|
1011
|
+
|
|
1012
|
+
|
|
1013
|
+
class AdCreativesSearchQuery(TypedDict, total=False):
|
|
1014
|
+
"""Search query for ad_creatives entity."""
|
|
1015
|
+
filter: AdCreativesCondition
|
|
1016
|
+
sort: list[AdCreativesSortFilter]
|
|
1017
|
+
|
|
1018
|
+
|
|
1019
|
+
# ===== ADS_INSIGHTS SEARCH TYPES =====
|
|
1020
|
+
|
|
1021
|
+
class AdsInsightsSearchFilter(TypedDict, total=False):
|
|
1022
|
+
"""Available fields for filtering ads_insights search queries."""
|
|
1023
|
+
account_id: str | None
|
|
1024
|
+
"""Ad account ID"""
|
|
1025
|
+
account_name: str | None
|
|
1026
|
+
"""Ad account name"""
|
|
1027
|
+
campaign_id: str | None
|
|
1028
|
+
"""Campaign ID"""
|
|
1029
|
+
campaign_name: str | None
|
|
1030
|
+
"""Campaign name"""
|
|
1031
|
+
adset_id: str | None
|
|
1032
|
+
"""Ad set ID"""
|
|
1033
|
+
adset_name: str | None
|
|
1034
|
+
"""Ad set name"""
|
|
1035
|
+
ad_id: str | None
|
|
1036
|
+
"""Ad ID"""
|
|
1037
|
+
ad_name: str | None
|
|
1038
|
+
"""Ad name"""
|
|
1039
|
+
clicks: int | None
|
|
1040
|
+
"""Number of clicks"""
|
|
1041
|
+
impressions: int | None
|
|
1042
|
+
"""Number of impressions"""
|
|
1043
|
+
reach: int | None
|
|
1044
|
+
"""Number of unique people reached"""
|
|
1045
|
+
spend: float | None
|
|
1046
|
+
"""Amount spent"""
|
|
1047
|
+
cpc: float | None
|
|
1048
|
+
"""Cost per click"""
|
|
1049
|
+
cpm: float | None
|
|
1050
|
+
"""Cost per 1000 impressions"""
|
|
1051
|
+
ctr: float | None
|
|
1052
|
+
"""Click-through rate"""
|
|
1053
|
+
date_start: str | None
|
|
1054
|
+
"""Start date of the reporting period"""
|
|
1055
|
+
date_stop: str | None
|
|
1056
|
+
"""End date of the reporting period"""
|
|
1057
|
+
|
|
1058
|
+
|
|
1059
|
+
class AdsInsightsInFilter(TypedDict, total=False):
|
|
1060
|
+
"""Available fields for 'in' condition (values are lists)."""
|
|
1061
|
+
account_id: list[str]
|
|
1062
|
+
"""Ad account ID"""
|
|
1063
|
+
account_name: list[str]
|
|
1064
|
+
"""Ad account name"""
|
|
1065
|
+
campaign_id: list[str]
|
|
1066
|
+
"""Campaign ID"""
|
|
1067
|
+
campaign_name: list[str]
|
|
1068
|
+
"""Campaign name"""
|
|
1069
|
+
adset_id: list[str]
|
|
1070
|
+
"""Ad set ID"""
|
|
1071
|
+
adset_name: list[str]
|
|
1072
|
+
"""Ad set name"""
|
|
1073
|
+
ad_id: list[str]
|
|
1074
|
+
"""Ad ID"""
|
|
1075
|
+
ad_name: list[str]
|
|
1076
|
+
"""Ad name"""
|
|
1077
|
+
clicks: list[int]
|
|
1078
|
+
"""Number of clicks"""
|
|
1079
|
+
impressions: list[int]
|
|
1080
|
+
"""Number of impressions"""
|
|
1081
|
+
reach: list[int]
|
|
1082
|
+
"""Number of unique people reached"""
|
|
1083
|
+
spend: list[float]
|
|
1084
|
+
"""Amount spent"""
|
|
1085
|
+
cpc: list[float]
|
|
1086
|
+
"""Cost per click"""
|
|
1087
|
+
cpm: list[float]
|
|
1088
|
+
"""Cost per 1000 impressions"""
|
|
1089
|
+
ctr: list[float]
|
|
1090
|
+
"""Click-through rate"""
|
|
1091
|
+
date_start: list[str]
|
|
1092
|
+
"""Start date of the reporting period"""
|
|
1093
|
+
date_stop: list[str]
|
|
1094
|
+
"""End date of the reporting period"""
|
|
1095
|
+
|
|
1096
|
+
|
|
1097
|
+
class AdsInsightsAnyValueFilter(TypedDict, total=False):
|
|
1098
|
+
"""Available fields with Any value type. Used for 'contains' and 'any' conditions."""
|
|
1099
|
+
account_id: Any
|
|
1100
|
+
"""Ad account ID"""
|
|
1101
|
+
account_name: Any
|
|
1102
|
+
"""Ad account name"""
|
|
1103
|
+
campaign_id: Any
|
|
1104
|
+
"""Campaign ID"""
|
|
1105
|
+
campaign_name: Any
|
|
1106
|
+
"""Campaign name"""
|
|
1107
|
+
adset_id: Any
|
|
1108
|
+
"""Ad set ID"""
|
|
1109
|
+
adset_name: Any
|
|
1110
|
+
"""Ad set name"""
|
|
1111
|
+
ad_id: Any
|
|
1112
|
+
"""Ad ID"""
|
|
1113
|
+
ad_name: Any
|
|
1114
|
+
"""Ad name"""
|
|
1115
|
+
clicks: Any
|
|
1116
|
+
"""Number of clicks"""
|
|
1117
|
+
impressions: Any
|
|
1118
|
+
"""Number of impressions"""
|
|
1119
|
+
reach: Any
|
|
1120
|
+
"""Number of unique people reached"""
|
|
1121
|
+
spend: Any
|
|
1122
|
+
"""Amount spent"""
|
|
1123
|
+
cpc: Any
|
|
1124
|
+
"""Cost per click"""
|
|
1125
|
+
cpm: Any
|
|
1126
|
+
"""Cost per 1000 impressions"""
|
|
1127
|
+
ctr: Any
|
|
1128
|
+
"""Click-through rate"""
|
|
1129
|
+
date_start: Any
|
|
1130
|
+
"""Start date of the reporting period"""
|
|
1131
|
+
date_stop: Any
|
|
1132
|
+
"""End date of the reporting period"""
|
|
1133
|
+
|
|
1134
|
+
|
|
1135
|
+
class AdsInsightsStringFilter(TypedDict, total=False):
|
|
1136
|
+
"""String fields for text search conditions (like, fuzzy, keyword)."""
|
|
1137
|
+
account_id: str
|
|
1138
|
+
"""Ad account ID"""
|
|
1139
|
+
account_name: str
|
|
1140
|
+
"""Ad account name"""
|
|
1141
|
+
campaign_id: str
|
|
1142
|
+
"""Campaign ID"""
|
|
1143
|
+
campaign_name: str
|
|
1144
|
+
"""Campaign name"""
|
|
1145
|
+
adset_id: str
|
|
1146
|
+
"""Ad set ID"""
|
|
1147
|
+
adset_name: str
|
|
1148
|
+
"""Ad set name"""
|
|
1149
|
+
ad_id: str
|
|
1150
|
+
"""Ad ID"""
|
|
1151
|
+
ad_name: str
|
|
1152
|
+
"""Ad name"""
|
|
1153
|
+
clicks: str
|
|
1154
|
+
"""Number of clicks"""
|
|
1155
|
+
impressions: str
|
|
1156
|
+
"""Number of impressions"""
|
|
1157
|
+
reach: str
|
|
1158
|
+
"""Number of unique people reached"""
|
|
1159
|
+
spend: str
|
|
1160
|
+
"""Amount spent"""
|
|
1161
|
+
cpc: str
|
|
1162
|
+
"""Cost per click"""
|
|
1163
|
+
cpm: str
|
|
1164
|
+
"""Cost per 1000 impressions"""
|
|
1165
|
+
ctr: str
|
|
1166
|
+
"""Click-through rate"""
|
|
1167
|
+
date_start: str
|
|
1168
|
+
"""Start date of the reporting period"""
|
|
1169
|
+
date_stop: str
|
|
1170
|
+
"""End date of the reporting period"""
|
|
1171
|
+
|
|
1172
|
+
|
|
1173
|
+
class AdsInsightsSortFilter(TypedDict, total=False):
|
|
1174
|
+
"""Available fields for sorting ads_insights search results."""
|
|
1175
|
+
account_id: AirbyteSortOrder
|
|
1176
|
+
"""Ad account ID"""
|
|
1177
|
+
account_name: AirbyteSortOrder
|
|
1178
|
+
"""Ad account name"""
|
|
1179
|
+
campaign_id: AirbyteSortOrder
|
|
1180
|
+
"""Campaign ID"""
|
|
1181
|
+
campaign_name: AirbyteSortOrder
|
|
1182
|
+
"""Campaign name"""
|
|
1183
|
+
adset_id: AirbyteSortOrder
|
|
1184
|
+
"""Ad set ID"""
|
|
1185
|
+
adset_name: AirbyteSortOrder
|
|
1186
|
+
"""Ad set name"""
|
|
1187
|
+
ad_id: AirbyteSortOrder
|
|
1188
|
+
"""Ad ID"""
|
|
1189
|
+
ad_name: AirbyteSortOrder
|
|
1190
|
+
"""Ad name"""
|
|
1191
|
+
clicks: AirbyteSortOrder
|
|
1192
|
+
"""Number of clicks"""
|
|
1193
|
+
impressions: AirbyteSortOrder
|
|
1194
|
+
"""Number of impressions"""
|
|
1195
|
+
reach: AirbyteSortOrder
|
|
1196
|
+
"""Number of unique people reached"""
|
|
1197
|
+
spend: AirbyteSortOrder
|
|
1198
|
+
"""Amount spent"""
|
|
1199
|
+
cpc: AirbyteSortOrder
|
|
1200
|
+
"""Cost per click"""
|
|
1201
|
+
cpm: AirbyteSortOrder
|
|
1202
|
+
"""Cost per 1000 impressions"""
|
|
1203
|
+
ctr: AirbyteSortOrder
|
|
1204
|
+
"""Click-through rate"""
|
|
1205
|
+
date_start: AirbyteSortOrder
|
|
1206
|
+
"""Start date of the reporting period"""
|
|
1207
|
+
date_stop: AirbyteSortOrder
|
|
1208
|
+
"""End date of the reporting period"""
|
|
1209
|
+
|
|
1210
|
+
|
|
1211
|
+
# Entity-specific condition types for ads_insights
|
|
1212
|
+
class AdsInsightsEqCondition(TypedDict, total=False):
|
|
1213
|
+
"""Equal to: field equals value."""
|
|
1214
|
+
eq: AdsInsightsSearchFilter
|
|
1215
|
+
|
|
1216
|
+
|
|
1217
|
+
class AdsInsightsNeqCondition(TypedDict, total=False):
|
|
1218
|
+
"""Not equal to: field does not equal value."""
|
|
1219
|
+
neq: AdsInsightsSearchFilter
|
|
1220
|
+
|
|
1221
|
+
|
|
1222
|
+
class AdsInsightsGtCondition(TypedDict, total=False):
|
|
1223
|
+
"""Greater than: field > value."""
|
|
1224
|
+
gt: AdsInsightsSearchFilter
|
|
1225
|
+
|
|
1226
|
+
|
|
1227
|
+
class AdsInsightsGteCondition(TypedDict, total=False):
|
|
1228
|
+
"""Greater than or equal: field >= value."""
|
|
1229
|
+
gte: AdsInsightsSearchFilter
|
|
1230
|
+
|
|
1231
|
+
|
|
1232
|
+
class AdsInsightsLtCondition(TypedDict, total=False):
|
|
1233
|
+
"""Less than: field < value."""
|
|
1234
|
+
lt: AdsInsightsSearchFilter
|
|
1235
|
+
|
|
1236
|
+
|
|
1237
|
+
class AdsInsightsLteCondition(TypedDict, total=False):
|
|
1238
|
+
"""Less than or equal: field <= value."""
|
|
1239
|
+
lte: AdsInsightsSearchFilter
|
|
1240
|
+
|
|
1241
|
+
|
|
1242
|
+
class AdsInsightsLikeCondition(TypedDict, total=False):
|
|
1243
|
+
"""Partial string match with % wildcards."""
|
|
1244
|
+
like: AdsInsightsStringFilter
|
|
1245
|
+
|
|
1246
|
+
|
|
1247
|
+
class AdsInsightsFuzzyCondition(TypedDict, total=False):
|
|
1248
|
+
"""Ordered word text match (case-insensitive)."""
|
|
1249
|
+
fuzzy: AdsInsightsStringFilter
|
|
1250
|
+
|
|
1251
|
+
|
|
1252
|
+
class AdsInsightsKeywordCondition(TypedDict, total=False):
|
|
1253
|
+
"""Keyword text match (any word present)."""
|
|
1254
|
+
keyword: AdsInsightsStringFilter
|
|
1255
|
+
|
|
1256
|
+
|
|
1257
|
+
class AdsInsightsContainsCondition(TypedDict, total=False):
|
|
1258
|
+
"""Check if value exists in array field. Example: {"contains": {"tags": "premium"}}"""
|
|
1259
|
+
contains: AdsInsightsAnyValueFilter
|
|
1260
|
+
|
|
1261
|
+
|
|
1262
|
+
# Reserved keyword conditions using functional TypedDict syntax
|
|
1263
|
+
AdsInsightsInCondition = TypedDict("AdsInsightsInCondition", {"in": AdsInsightsInFilter}, total=False)
|
|
1264
|
+
"""In list: field value is in list. Example: {"in": {"status": ["active", "pending"]}}"""
|
|
1265
|
+
|
|
1266
|
+
AdsInsightsNotCondition = TypedDict("AdsInsightsNotCondition", {"not": "AdsInsightsCondition"}, total=False)
|
|
1267
|
+
"""Negates the nested condition."""
|
|
1268
|
+
|
|
1269
|
+
AdsInsightsAndCondition = TypedDict("AdsInsightsAndCondition", {"and": "list[AdsInsightsCondition]"}, total=False)
|
|
1270
|
+
"""True if all nested conditions are true."""
|
|
1271
|
+
|
|
1272
|
+
AdsInsightsOrCondition = TypedDict("AdsInsightsOrCondition", {"or": "list[AdsInsightsCondition]"}, total=False)
|
|
1273
|
+
"""True if any nested condition is true."""
|
|
1274
|
+
|
|
1275
|
+
AdsInsightsAnyCondition = TypedDict("AdsInsightsAnyCondition", {"any": AdsInsightsAnyValueFilter}, total=False)
|
|
1276
|
+
"""Match if ANY element in array field matches nested condition. Example: {"any": {"addresses": {"eq": {"state": "CA"}}}}"""
|
|
1277
|
+
|
|
1278
|
+
# Union of all ads_insights condition types
|
|
1279
|
+
AdsInsightsCondition = (
|
|
1280
|
+
AdsInsightsEqCondition
|
|
1281
|
+
| AdsInsightsNeqCondition
|
|
1282
|
+
| AdsInsightsGtCondition
|
|
1283
|
+
| AdsInsightsGteCondition
|
|
1284
|
+
| AdsInsightsLtCondition
|
|
1285
|
+
| AdsInsightsLteCondition
|
|
1286
|
+
| AdsInsightsInCondition
|
|
1287
|
+
| AdsInsightsLikeCondition
|
|
1288
|
+
| AdsInsightsFuzzyCondition
|
|
1289
|
+
| AdsInsightsKeywordCondition
|
|
1290
|
+
| AdsInsightsContainsCondition
|
|
1291
|
+
| AdsInsightsNotCondition
|
|
1292
|
+
| AdsInsightsAndCondition
|
|
1293
|
+
| AdsInsightsOrCondition
|
|
1294
|
+
| AdsInsightsAnyCondition
|
|
1295
|
+
)
|
|
1296
|
+
|
|
1297
|
+
|
|
1298
|
+
class AdsInsightsSearchQuery(TypedDict, total=False):
|
|
1299
|
+
"""Search query for ads_insights entity."""
|
|
1300
|
+
filter: AdsInsightsCondition
|
|
1301
|
+
sort: list[AdsInsightsSortFilter]
|
|
1302
|
+
|
|
1303
|
+
|
|
1304
|
+
# ===== CUSTOM_CONVERSIONS SEARCH TYPES =====
|
|
1305
|
+
|
|
1306
|
+
class CustomConversionsSearchFilter(TypedDict, total=False):
|
|
1307
|
+
"""Available fields for filtering custom_conversions search queries."""
|
|
1308
|
+
id: str | None
|
|
1309
|
+
"""Custom Conversion ID"""
|
|
1310
|
+
name: str | None
|
|
1311
|
+
"""Custom Conversion name"""
|
|
1312
|
+
account_id: str | None
|
|
1313
|
+
"""Ad account ID"""
|
|
1314
|
+
description: str | None
|
|
1315
|
+
"""Description"""
|
|
1316
|
+
custom_event_type: str | None
|
|
1317
|
+
"""Custom event type"""
|
|
1318
|
+
creation_time: str | None
|
|
1319
|
+
"""Creation time"""
|
|
1320
|
+
first_fired_time: str | None
|
|
1321
|
+
"""First fired time"""
|
|
1322
|
+
last_fired_time: str | None
|
|
1323
|
+
"""Last fired time"""
|
|
1324
|
+
is_archived: bool | None
|
|
1325
|
+
"""Whether the conversion is archived"""
|
|
1326
|
+
|
|
1327
|
+
|
|
1328
|
+
class CustomConversionsInFilter(TypedDict, total=False):
|
|
1329
|
+
"""Available fields for 'in' condition (values are lists)."""
|
|
1330
|
+
id: list[str]
|
|
1331
|
+
"""Custom Conversion ID"""
|
|
1332
|
+
name: list[str]
|
|
1333
|
+
"""Custom Conversion name"""
|
|
1334
|
+
account_id: list[str]
|
|
1335
|
+
"""Ad account ID"""
|
|
1336
|
+
description: list[str]
|
|
1337
|
+
"""Description"""
|
|
1338
|
+
custom_event_type: list[str]
|
|
1339
|
+
"""Custom event type"""
|
|
1340
|
+
creation_time: list[str]
|
|
1341
|
+
"""Creation time"""
|
|
1342
|
+
first_fired_time: list[str]
|
|
1343
|
+
"""First fired time"""
|
|
1344
|
+
last_fired_time: list[str]
|
|
1345
|
+
"""Last fired time"""
|
|
1346
|
+
is_archived: list[bool]
|
|
1347
|
+
"""Whether the conversion is archived"""
|
|
1348
|
+
|
|
1349
|
+
|
|
1350
|
+
class CustomConversionsAnyValueFilter(TypedDict, total=False):
|
|
1351
|
+
"""Available fields with Any value type. Used for 'contains' and 'any' conditions."""
|
|
1352
|
+
id: Any
|
|
1353
|
+
"""Custom Conversion ID"""
|
|
1354
|
+
name: Any
|
|
1355
|
+
"""Custom Conversion name"""
|
|
1356
|
+
account_id: Any
|
|
1357
|
+
"""Ad account ID"""
|
|
1358
|
+
description: Any
|
|
1359
|
+
"""Description"""
|
|
1360
|
+
custom_event_type: Any
|
|
1361
|
+
"""Custom event type"""
|
|
1362
|
+
creation_time: Any
|
|
1363
|
+
"""Creation time"""
|
|
1364
|
+
first_fired_time: Any
|
|
1365
|
+
"""First fired time"""
|
|
1366
|
+
last_fired_time: Any
|
|
1367
|
+
"""Last fired time"""
|
|
1368
|
+
is_archived: Any
|
|
1369
|
+
"""Whether the conversion is archived"""
|
|
1370
|
+
|
|
1371
|
+
|
|
1372
|
+
class CustomConversionsStringFilter(TypedDict, total=False):
|
|
1373
|
+
"""String fields for text search conditions (like, fuzzy, keyword)."""
|
|
1374
|
+
id: str
|
|
1375
|
+
"""Custom Conversion ID"""
|
|
1376
|
+
name: str
|
|
1377
|
+
"""Custom Conversion name"""
|
|
1378
|
+
account_id: str
|
|
1379
|
+
"""Ad account ID"""
|
|
1380
|
+
description: str
|
|
1381
|
+
"""Description"""
|
|
1382
|
+
custom_event_type: str
|
|
1383
|
+
"""Custom event type"""
|
|
1384
|
+
creation_time: str
|
|
1385
|
+
"""Creation time"""
|
|
1386
|
+
first_fired_time: str
|
|
1387
|
+
"""First fired time"""
|
|
1388
|
+
last_fired_time: str
|
|
1389
|
+
"""Last fired time"""
|
|
1390
|
+
is_archived: str
|
|
1391
|
+
"""Whether the conversion is archived"""
|
|
1392
|
+
|
|
1393
|
+
|
|
1394
|
+
class CustomConversionsSortFilter(TypedDict, total=False):
|
|
1395
|
+
"""Available fields for sorting custom_conversions search results."""
|
|
1396
|
+
id: AirbyteSortOrder
|
|
1397
|
+
"""Custom Conversion ID"""
|
|
1398
|
+
name: AirbyteSortOrder
|
|
1399
|
+
"""Custom Conversion name"""
|
|
1400
|
+
account_id: AirbyteSortOrder
|
|
1401
|
+
"""Ad account ID"""
|
|
1402
|
+
description: AirbyteSortOrder
|
|
1403
|
+
"""Description"""
|
|
1404
|
+
custom_event_type: AirbyteSortOrder
|
|
1405
|
+
"""Custom event type"""
|
|
1406
|
+
creation_time: AirbyteSortOrder
|
|
1407
|
+
"""Creation time"""
|
|
1408
|
+
first_fired_time: AirbyteSortOrder
|
|
1409
|
+
"""First fired time"""
|
|
1410
|
+
last_fired_time: AirbyteSortOrder
|
|
1411
|
+
"""Last fired time"""
|
|
1412
|
+
is_archived: AirbyteSortOrder
|
|
1413
|
+
"""Whether the conversion is archived"""
|
|
1414
|
+
|
|
1415
|
+
|
|
1416
|
+
# Entity-specific condition types for custom_conversions
|
|
1417
|
+
class CustomConversionsEqCondition(TypedDict, total=False):
|
|
1418
|
+
"""Equal to: field equals value."""
|
|
1419
|
+
eq: CustomConversionsSearchFilter
|
|
1420
|
+
|
|
1421
|
+
|
|
1422
|
+
class CustomConversionsNeqCondition(TypedDict, total=False):
|
|
1423
|
+
"""Not equal to: field does not equal value."""
|
|
1424
|
+
neq: CustomConversionsSearchFilter
|
|
1425
|
+
|
|
1426
|
+
|
|
1427
|
+
class CustomConversionsGtCondition(TypedDict, total=False):
|
|
1428
|
+
"""Greater than: field > value."""
|
|
1429
|
+
gt: CustomConversionsSearchFilter
|
|
1430
|
+
|
|
1431
|
+
|
|
1432
|
+
class CustomConversionsGteCondition(TypedDict, total=False):
|
|
1433
|
+
"""Greater than or equal: field >= value."""
|
|
1434
|
+
gte: CustomConversionsSearchFilter
|
|
1435
|
+
|
|
1436
|
+
|
|
1437
|
+
class CustomConversionsLtCondition(TypedDict, total=False):
|
|
1438
|
+
"""Less than: field < value."""
|
|
1439
|
+
lt: CustomConversionsSearchFilter
|
|
1440
|
+
|
|
1441
|
+
|
|
1442
|
+
class CustomConversionsLteCondition(TypedDict, total=False):
|
|
1443
|
+
"""Less than or equal: field <= value."""
|
|
1444
|
+
lte: CustomConversionsSearchFilter
|
|
1445
|
+
|
|
1446
|
+
|
|
1447
|
+
class CustomConversionsLikeCondition(TypedDict, total=False):
|
|
1448
|
+
"""Partial string match with % wildcards."""
|
|
1449
|
+
like: CustomConversionsStringFilter
|
|
1450
|
+
|
|
1451
|
+
|
|
1452
|
+
class CustomConversionsFuzzyCondition(TypedDict, total=False):
|
|
1453
|
+
"""Ordered word text match (case-insensitive)."""
|
|
1454
|
+
fuzzy: CustomConversionsStringFilter
|
|
1455
|
+
|
|
1456
|
+
|
|
1457
|
+
class CustomConversionsKeywordCondition(TypedDict, total=False):
|
|
1458
|
+
"""Keyword text match (any word present)."""
|
|
1459
|
+
keyword: CustomConversionsStringFilter
|
|
1460
|
+
|
|
1461
|
+
|
|
1462
|
+
class CustomConversionsContainsCondition(TypedDict, total=False):
|
|
1463
|
+
"""Check if value exists in array field. Example: {"contains": {"tags": "premium"}}"""
|
|
1464
|
+
contains: CustomConversionsAnyValueFilter
|
|
1465
|
+
|
|
1466
|
+
|
|
1467
|
+
# Reserved keyword conditions using functional TypedDict syntax
|
|
1468
|
+
CustomConversionsInCondition = TypedDict("CustomConversionsInCondition", {"in": CustomConversionsInFilter}, total=False)
|
|
1469
|
+
"""In list: field value is in list. Example: {"in": {"status": ["active", "pending"]}}"""
|
|
1470
|
+
|
|
1471
|
+
CustomConversionsNotCondition = TypedDict("CustomConversionsNotCondition", {"not": "CustomConversionsCondition"}, total=False)
|
|
1472
|
+
"""Negates the nested condition."""
|
|
1473
|
+
|
|
1474
|
+
CustomConversionsAndCondition = TypedDict("CustomConversionsAndCondition", {"and": "list[CustomConversionsCondition]"}, total=False)
|
|
1475
|
+
"""True if all nested conditions are true."""
|
|
1476
|
+
|
|
1477
|
+
CustomConversionsOrCondition = TypedDict("CustomConversionsOrCondition", {"or": "list[CustomConversionsCondition]"}, total=False)
|
|
1478
|
+
"""True if any nested condition is true."""
|
|
1479
|
+
|
|
1480
|
+
CustomConversionsAnyCondition = TypedDict("CustomConversionsAnyCondition", {"any": CustomConversionsAnyValueFilter}, total=False)
|
|
1481
|
+
"""Match if ANY element in array field matches nested condition. Example: {"any": {"addresses": {"eq": {"state": "CA"}}}}"""
|
|
1482
|
+
|
|
1483
|
+
# Union of all custom_conversions condition types
|
|
1484
|
+
CustomConversionsCondition = (
|
|
1485
|
+
CustomConversionsEqCondition
|
|
1486
|
+
| CustomConversionsNeqCondition
|
|
1487
|
+
| CustomConversionsGtCondition
|
|
1488
|
+
| CustomConversionsGteCondition
|
|
1489
|
+
| CustomConversionsLtCondition
|
|
1490
|
+
| CustomConversionsLteCondition
|
|
1491
|
+
| CustomConversionsInCondition
|
|
1492
|
+
| CustomConversionsLikeCondition
|
|
1493
|
+
| CustomConversionsFuzzyCondition
|
|
1494
|
+
| CustomConversionsKeywordCondition
|
|
1495
|
+
| CustomConversionsContainsCondition
|
|
1496
|
+
| CustomConversionsNotCondition
|
|
1497
|
+
| CustomConversionsAndCondition
|
|
1498
|
+
| CustomConversionsOrCondition
|
|
1499
|
+
| CustomConversionsAnyCondition
|
|
1500
|
+
)
|
|
1501
|
+
|
|
1502
|
+
|
|
1503
|
+
class CustomConversionsSearchQuery(TypedDict, total=False):
|
|
1504
|
+
"""Search query for custom_conversions entity."""
|
|
1505
|
+
filter: CustomConversionsCondition
|
|
1506
|
+
sort: list[CustomConversionsSortFilter]
|
|
1507
|
+
|
|
1508
|
+
|
|
1509
|
+
# ===== IMAGES SEARCH TYPES =====
|
|
1510
|
+
|
|
1511
|
+
class ImagesSearchFilter(TypedDict, total=False):
|
|
1512
|
+
"""Available fields for filtering images search queries."""
|
|
1513
|
+
id: str | None
|
|
1514
|
+
"""Image ID"""
|
|
1515
|
+
name: str | None
|
|
1516
|
+
"""Image name"""
|
|
1517
|
+
account_id: str | None
|
|
1518
|
+
"""Ad account ID"""
|
|
1519
|
+
hash: str | None
|
|
1520
|
+
"""Image hash"""
|
|
1521
|
+
url: str | None
|
|
1522
|
+
"""Image URL"""
|
|
1523
|
+
permalink_url: str | None
|
|
1524
|
+
"""Permalink URL"""
|
|
1525
|
+
width: int | None
|
|
1526
|
+
"""Image width"""
|
|
1527
|
+
height: int | None
|
|
1528
|
+
"""Image height"""
|
|
1529
|
+
status: str | None
|
|
1530
|
+
"""Image status"""
|
|
1531
|
+
created_time: str | None
|
|
1532
|
+
"""Creation time"""
|
|
1533
|
+
updated_time: str | None
|
|
1534
|
+
"""Last update time"""
|
|
1535
|
+
|
|
1536
|
+
|
|
1537
|
+
class ImagesInFilter(TypedDict, total=False):
|
|
1538
|
+
"""Available fields for 'in' condition (values are lists)."""
|
|
1539
|
+
id: list[str]
|
|
1540
|
+
"""Image ID"""
|
|
1541
|
+
name: list[str]
|
|
1542
|
+
"""Image name"""
|
|
1543
|
+
account_id: list[str]
|
|
1544
|
+
"""Ad account ID"""
|
|
1545
|
+
hash: list[str]
|
|
1546
|
+
"""Image hash"""
|
|
1547
|
+
url: list[str]
|
|
1548
|
+
"""Image URL"""
|
|
1549
|
+
permalink_url: list[str]
|
|
1550
|
+
"""Permalink URL"""
|
|
1551
|
+
width: list[int]
|
|
1552
|
+
"""Image width"""
|
|
1553
|
+
height: list[int]
|
|
1554
|
+
"""Image height"""
|
|
1555
|
+
status: list[str]
|
|
1556
|
+
"""Image status"""
|
|
1557
|
+
created_time: list[str]
|
|
1558
|
+
"""Creation time"""
|
|
1559
|
+
updated_time: list[str]
|
|
1560
|
+
"""Last update time"""
|
|
1561
|
+
|
|
1562
|
+
|
|
1563
|
+
class ImagesAnyValueFilter(TypedDict, total=False):
|
|
1564
|
+
"""Available fields with Any value type. Used for 'contains' and 'any' conditions."""
|
|
1565
|
+
id: Any
|
|
1566
|
+
"""Image ID"""
|
|
1567
|
+
name: Any
|
|
1568
|
+
"""Image name"""
|
|
1569
|
+
account_id: Any
|
|
1570
|
+
"""Ad account ID"""
|
|
1571
|
+
hash: Any
|
|
1572
|
+
"""Image hash"""
|
|
1573
|
+
url: Any
|
|
1574
|
+
"""Image URL"""
|
|
1575
|
+
permalink_url: Any
|
|
1576
|
+
"""Permalink URL"""
|
|
1577
|
+
width: Any
|
|
1578
|
+
"""Image width"""
|
|
1579
|
+
height: Any
|
|
1580
|
+
"""Image height"""
|
|
1581
|
+
status: Any
|
|
1582
|
+
"""Image status"""
|
|
1583
|
+
created_time: Any
|
|
1584
|
+
"""Creation time"""
|
|
1585
|
+
updated_time: Any
|
|
1586
|
+
"""Last update time"""
|
|
1587
|
+
|
|
1588
|
+
|
|
1589
|
+
class ImagesStringFilter(TypedDict, total=False):
|
|
1590
|
+
"""String fields for text search conditions (like, fuzzy, keyword)."""
|
|
1591
|
+
id: str
|
|
1592
|
+
"""Image ID"""
|
|
1593
|
+
name: str
|
|
1594
|
+
"""Image name"""
|
|
1595
|
+
account_id: str
|
|
1596
|
+
"""Ad account ID"""
|
|
1597
|
+
hash: str
|
|
1598
|
+
"""Image hash"""
|
|
1599
|
+
url: str
|
|
1600
|
+
"""Image URL"""
|
|
1601
|
+
permalink_url: str
|
|
1602
|
+
"""Permalink URL"""
|
|
1603
|
+
width: str
|
|
1604
|
+
"""Image width"""
|
|
1605
|
+
height: str
|
|
1606
|
+
"""Image height"""
|
|
1607
|
+
status: str
|
|
1608
|
+
"""Image status"""
|
|
1609
|
+
created_time: str
|
|
1610
|
+
"""Creation time"""
|
|
1611
|
+
updated_time: str
|
|
1612
|
+
"""Last update time"""
|
|
1613
|
+
|
|
1614
|
+
|
|
1615
|
+
class ImagesSortFilter(TypedDict, total=False):
|
|
1616
|
+
"""Available fields for sorting images search results."""
|
|
1617
|
+
id: AirbyteSortOrder
|
|
1618
|
+
"""Image ID"""
|
|
1619
|
+
name: AirbyteSortOrder
|
|
1620
|
+
"""Image name"""
|
|
1621
|
+
account_id: AirbyteSortOrder
|
|
1622
|
+
"""Ad account ID"""
|
|
1623
|
+
hash: AirbyteSortOrder
|
|
1624
|
+
"""Image hash"""
|
|
1625
|
+
url: AirbyteSortOrder
|
|
1626
|
+
"""Image URL"""
|
|
1627
|
+
permalink_url: AirbyteSortOrder
|
|
1628
|
+
"""Permalink URL"""
|
|
1629
|
+
width: AirbyteSortOrder
|
|
1630
|
+
"""Image width"""
|
|
1631
|
+
height: AirbyteSortOrder
|
|
1632
|
+
"""Image height"""
|
|
1633
|
+
status: AirbyteSortOrder
|
|
1634
|
+
"""Image status"""
|
|
1635
|
+
created_time: AirbyteSortOrder
|
|
1636
|
+
"""Creation time"""
|
|
1637
|
+
updated_time: AirbyteSortOrder
|
|
1638
|
+
"""Last update time"""
|
|
1639
|
+
|
|
1640
|
+
|
|
1641
|
+
# Entity-specific condition types for images
|
|
1642
|
+
class ImagesEqCondition(TypedDict, total=False):
|
|
1643
|
+
"""Equal to: field equals value."""
|
|
1644
|
+
eq: ImagesSearchFilter
|
|
1645
|
+
|
|
1646
|
+
|
|
1647
|
+
class ImagesNeqCondition(TypedDict, total=False):
|
|
1648
|
+
"""Not equal to: field does not equal value."""
|
|
1649
|
+
neq: ImagesSearchFilter
|
|
1650
|
+
|
|
1651
|
+
|
|
1652
|
+
class ImagesGtCondition(TypedDict, total=False):
|
|
1653
|
+
"""Greater than: field > value."""
|
|
1654
|
+
gt: ImagesSearchFilter
|
|
1655
|
+
|
|
1656
|
+
|
|
1657
|
+
class ImagesGteCondition(TypedDict, total=False):
|
|
1658
|
+
"""Greater than or equal: field >= value."""
|
|
1659
|
+
gte: ImagesSearchFilter
|
|
1660
|
+
|
|
1661
|
+
|
|
1662
|
+
class ImagesLtCondition(TypedDict, total=False):
|
|
1663
|
+
"""Less than: field < value."""
|
|
1664
|
+
lt: ImagesSearchFilter
|
|
1665
|
+
|
|
1666
|
+
|
|
1667
|
+
class ImagesLteCondition(TypedDict, total=False):
|
|
1668
|
+
"""Less than or equal: field <= value."""
|
|
1669
|
+
lte: ImagesSearchFilter
|
|
1670
|
+
|
|
1671
|
+
|
|
1672
|
+
class ImagesLikeCondition(TypedDict, total=False):
|
|
1673
|
+
"""Partial string match with % wildcards."""
|
|
1674
|
+
like: ImagesStringFilter
|
|
1675
|
+
|
|
1676
|
+
|
|
1677
|
+
class ImagesFuzzyCondition(TypedDict, total=False):
|
|
1678
|
+
"""Ordered word text match (case-insensitive)."""
|
|
1679
|
+
fuzzy: ImagesStringFilter
|
|
1680
|
+
|
|
1681
|
+
|
|
1682
|
+
class ImagesKeywordCondition(TypedDict, total=False):
|
|
1683
|
+
"""Keyword text match (any word present)."""
|
|
1684
|
+
keyword: ImagesStringFilter
|
|
1685
|
+
|
|
1686
|
+
|
|
1687
|
+
class ImagesContainsCondition(TypedDict, total=False):
|
|
1688
|
+
"""Check if value exists in array field. Example: {"contains": {"tags": "premium"}}"""
|
|
1689
|
+
contains: ImagesAnyValueFilter
|
|
1690
|
+
|
|
1691
|
+
|
|
1692
|
+
# Reserved keyword conditions using functional TypedDict syntax
|
|
1693
|
+
ImagesInCondition = TypedDict("ImagesInCondition", {"in": ImagesInFilter}, total=False)
|
|
1694
|
+
"""In list: field value is in list. Example: {"in": {"status": ["active", "pending"]}}"""
|
|
1695
|
+
|
|
1696
|
+
ImagesNotCondition = TypedDict("ImagesNotCondition", {"not": "ImagesCondition"}, total=False)
|
|
1697
|
+
"""Negates the nested condition."""
|
|
1698
|
+
|
|
1699
|
+
ImagesAndCondition = TypedDict("ImagesAndCondition", {"and": "list[ImagesCondition]"}, total=False)
|
|
1700
|
+
"""True if all nested conditions are true."""
|
|
1701
|
+
|
|
1702
|
+
ImagesOrCondition = TypedDict("ImagesOrCondition", {"or": "list[ImagesCondition]"}, total=False)
|
|
1703
|
+
"""True if any nested condition is true."""
|
|
1704
|
+
|
|
1705
|
+
ImagesAnyCondition = TypedDict("ImagesAnyCondition", {"any": ImagesAnyValueFilter}, total=False)
|
|
1706
|
+
"""Match if ANY element in array field matches nested condition. Example: {"any": {"addresses": {"eq": {"state": "CA"}}}}"""
|
|
1707
|
+
|
|
1708
|
+
# Union of all images condition types
|
|
1709
|
+
ImagesCondition = (
|
|
1710
|
+
ImagesEqCondition
|
|
1711
|
+
| ImagesNeqCondition
|
|
1712
|
+
| ImagesGtCondition
|
|
1713
|
+
| ImagesGteCondition
|
|
1714
|
+
| ImagesLtCondition
|
|
1715
|
+
| ImagesLteCondition
|
|
1716
|
+
| ImagesInCondition
|
|
1717
|
+
| ImagesLikeCondition
|
|
1718
|
+
| ImagesFuzzyCondition
|
|
1719
|
+
| ImagesKeywordCondition
|
|
1720
|
+
| ImagesContainsCondition
|
|
1721
|
+
| ImagesNotCondition
|
|
1722
|
+
| ImagesAndCondition
|
|
1723
|
+
| ImagesOrCondition
|
|
1724
|
+
| ImagesAnyCondition
|
|
1725
|
+
)
|
|
1726
|
+
|
|
1727
|
+
|
|
1728
|
+
class ImagesSearchQuery(TypedDict, total=False):
|
|
1729
|
+
"""Search query for images entity."""
|
|
1730
|
+
filter: ImagesCondition
|
|
1731
|
+
sort: list[ImagesSortFilter]
|
|
1732
|
+
|
|
1733
|
+
|
|
1734
|
+
# ===== VIDEOS SEARCH TYPES =====
|
|
1735
|
+
|
|
1736
|
+
class VideosSearchFilter(TypedDict, total=False):
|
|
1737
|
+
"""Available fields for filtering videos search queries."""
|
|
1738
|
+
id: str | None
|
|
1739
|
+
"""Video ID"""
|
|
1740
|
+
title: str | None
|
|
1741
|
+
"""Video title"""
|
|
1742
|
+
account_id: str | None
|
|
1743
|
+
"""Ad account ID"""
|
|
1744
|
+
description: str | None
|
|
1745
|
+
"""Video description"""
|
|
1746
|
+
length: float | None
|
|
1747
|
+
"""Video length in seconds"""
|
|
1748
|
+
source: str | None
|
|
1749
|
+
"""Video source URL"""
|
|
1750
|
+
permalink_url: str | None
|
|
1751
|
+
"""Permalink URL"""
|
|
1752
|
+
views: int | None
|
|
1753
|
+
"""Number of views"""
|
|
1754
|
+
created_time: str | None
|
|
1755
|
+
"""Creation time"""
|
|
1756
|
+
updated_time: str | None
|
|
1757
|
+
"""Last update time"""
|
|
1758
|
+
|
|
1759
|
+
|
|
1760
|
+
class VideosInFilter(TypedDict, total=False):
|
|
1761
|
+
"""Available fields for 'in' condition (values are lists)."""
|
|
1762
|
+
id: list[str]
|
|
1763
|
+
"""Video ID"""
|
|
1764
|
+
title: list[str]
|
|
1765
|
+
"""Video title"""
|
|
1766
|
+
account_id: list[str]
|
|
1767
|
+
"""Ad account ID"""
|
|
1768
|
+
description: list[str]
|
|
1769
|
+
"""Video description"""
|
|
1770
|
+
length: list[float]
|
|
1771
|
+
"""Video length in seconds"""
|
|
1772
|
+
source: list[str]
|
|
1773
|
+
"""Video source URL"""
|
|
1774
|
+
permalink_url: list[str]
|
|
1775
|
+
"""Permalink URL"""
|
|
1776
|
+
views: list[int]
|
|
1777
|
+
"""Number of views"""
|
|
1778
|
+
created_time: list[str]
|
|
1779
|
+
"""Creation time"""
|
|
1780
|
+
updated_time: list[str]
|
|
1781
|
+
"""Last update time"""
|
|
1782
|
+
|
|
1783
|
+
|
|
1784
|
+
class VideosAnyValueFilter(TypedDict, total=False):
|
|
1785
|
+
"""Available fields with Any value type. Used for 'contains' and 'any' conditions."""
|
|
1786
|
+
id: Any
|
|
1787
|
+
"""Video ID"""
|
|
1788
|
+
title: Any
|
|
1789
|
+
"""Video title"""
|
|
1790
|
+
account_id: Any
|
|
1791
|
+
"""Ad account ID"""
|
|
1792
|
+
description: Any
|
|
1793
|
+
"""Video description"""
|
|
1794
|
+
length: Any
|
|
1795
|
+
"""Video length in seconds"""
|
|
1796
|
+
source: Any
|
|
1797
|
+
"""Video source URL"""
|
|
1798
|
+
permalink_url: Any
|
|
1799
|
+
"""Permalink URL"""
|
|
1800
|
+
views: Any
|
|
1801
|
+
"""Number of views"""
|
|
1802
|
+
created_time: Any
|
|
1803
|
+
"""Creation time"""
|
|
1804
|
+
updated_time: Any
|
|
1805
|
+
"""Last update time"""
|
|
1806
|
+
|
|
1807
|
+
|
|
1808
|
+
class VideosStringFilter(TypedDict, total=False):
|
|
1809
|
+
"""String fields for text search conditions (like, fuzzy, keyword)."""
|
|
1810
|
+
id: str
|
|
1811
|
+
"""Video ID"""
|
|
1812
|
+
title: str
|
|
1813
|
+
"""Video title"""
|
|
1814
|
+
account_id: str
|
|
1815
|
+
"""Ad account ID"""
|
|
1816
|
+
description: str
|
|
1817
|
+
"""Video description"""
|
|
1818
|
+
length: str
|
|
1819
|
+
"""Video length in seconds"""
|
|
1820
|
+
source: str
|
|
1821
|
+
"""Video source URL"""
|
|
1822
|
+
permalink_url: str
|
|
1823
|
+
"""Permalink URL"""
|
|
1824
|
+
views: str
|
|
1825
|
+
"""Number of views"""
|
|
1826
|
+
created_time: str
|
|
1827
|
+
"""Creation time"""
|
|
1828
|
+
updated_time: str
|
|
1829
|
+
"""Last update time"""
|
|
1830
|
+
|
|
1831
|
+
|
|
1832
|
+
class VideosSortFilter(TypedDict, total=False):
|
|
1833
|
+
"""Available fields for sorting videos search results."""
|
|
1834
|
+
id: AirbyteSortOrder
|
|
1835
|
+
"""Video ID"""
|
|
1836
|
+
title: AirbyteSortOrder
|
|
1837
|
+
"""Video title"""
|
|
1838
|
+
account_id: AirbyteSortOrder
|
|
1839
|
+
"""Ad account ID"""
|
|
1840
|
+
description: AirbyteSortOrder
|
|
1841
|
+
"""Video description"""
|
|
1842
|
+
length: AirbyteSortOrder
|
|
1843
|
+
"""Video length in seconds"""
|
|
1844
|
+
source: AirbyteSortOrder
|
|
1845
|
+
"""Video source URL"""
|
|
1846
|
+
permalink_url: AirbyteSortOrder
|
|
1847
|
+
"""Permalink URL"""
|
|
1848
|
+
views: AirbyteSortOrder
|
|
1849
|
+
"""Number of views"""
|
|
1850
|
+
created_time: AirbyteSortOrder
|
|
1851
|
+
"""Creation time"""
|
|
1852
|
+
updated_time: AirbyteSortOrder
|
|
1853
|
+
"""Last update time"""
|
|
1854
|
+
|
|
1855
|
+
|
|
1856
|
+
# Entity-specific condition types for videos
|
|
1857
|
+
class VideosEqCondition(TypedDict, total=False):
|
|
1858
|
+
"""Equal to: field equals value."""
|
|
1859
|
+
eq: VideosSearchFilter
|
|
1860
|
+
|
|
1861
|
+
|
|
1862
|
+
class VideosNeqCondition(TypedDict, total=False):
|
|
1863
|
+
"""Not equal to: field does not equal value."""
|
|
1864
|
+
neq: VideosSearchFilter
|
|
1865
|
+
|
|
1866
|
+
|
|
1867
|
+
class VideosGtCondition(TypedDict, total=False):
|
|
1868
|
+
"""Greater than: field > value."""
|
|
1869
|
+
gt: VideosSearchFilter
|
|
1870
|
+
|
|
1871
|
+
|
|
1872
|
+
class VideosGteCondition(TypedDict, total=False):
|
|
1873
|
+
"""Greater than or equal: field >= value."""
|
|
1874
|
+
gte: VideosSearchFilter
|
|
1875
|
+
|
|
1876
|
+
|
|
1877
|
+
class VideosLtCondition(TypedDict, total=False):
|
|
1878
|
+
"""Less than: field < value."""
|
|
1879
|
+
lt: VideosSearchFilter
|
|
1880
|
+
|
|
1881
|
+
|
|
1882
|
+
class VideosLteCondition(TypedDict, total=False):
|
|
1883
|
+
"""Less than or equal: field <= value."""
|
|
1884
|
+
lte: VideosSearchFilter
|
|
1885
|
+
|
|
1886
|
+
|
|
1887
|
+
class VideosLikeCondition(TypedDict, total=False):
|
|
1888
|
+
"""Partial string match with % wildcards."""
|
|
1889
|
+
like: VideosStringFilter
|
|
1890
|
+
|
|
1891
|
+
|
|
1892
|
+
class VideosFuzzyCondition(TypedDict, total=False):
|
|
1893
|
+
"""Ordered word text match (case-insensitive)."""
|
|
1894
|
+
fuzzy: VideosStringFilter
|
|
1895
|
+
|
|
1896
|
+
|
|
1897
|
+
class VideosKeywordCondition(TypedDict, total=False):
|
|
1898
|
+
"""Keyword text match (any word present)."""
|
|
1899
|
+
keyword: VideosStringFilter
|
|
1900
|
+
|
|
1901
|
+
|
|
1902
|
+
class VideosContainsCondition(TypedDict, total=False):
|
|
1903
|
+
"""Check if value exists in array field. Example: {"contains": {"tags": "premium"}}"""
|
|
1904
|
+
contains: VideosAnyValueFilter
|
|
1905
|
+
|
|
1906
|
+
|
|
1907
|
+
# Reserved keyword conditions using functional TypedDict syntax
|
|
1908
|
+
VideosInCondition = TypedDict("VideosInCondition", {"in": VideosInFilter}, total=False)
|
|
1909
|
+
"""In list: field value is in list. Example: {"in": {"status": ["active", "pending"]}}"""
|
|
1910
|
+
|
|
1911
|
+
VideosNotCondition = TypedDict("VideosNotCondition", {"not": "VideosCondition"}, total=False)
|
|
1912
|
+
"""Negates the nested condition."""
|
|
1913
|
+
|
|
1914
|
+
VideosAndCondition = TypedDict("VideosAndCondition", {"and": "list[VideosCondition]"}, total=False)
|
|
1915
|
+
"""True if all nested conditions are true."""
|
|
1916
|
+
|
|
1917
|
+
VideosOrCondition = TypedDict("VideosOrCondition", {"or": "list[VideosCondition]"}, total=False)
|
|
1918
|
+
"""True if any nested condition is true."""
|
|
1919
|
+
|
|
1920
|
+
VideosAnyCondition = TypedDict("VideosAnyCondition", {"any": VideosAnyValueFilter}, total=False)
|
|
1921
|
+
"""Match if ANY element in array field matches nested condition. Example: {"any": {"addresses": {"eq": {"state": "CA"}}}}"""
|
|
1922
|
+
|
|
1923
|
+
# Union of all videos condition types
|
|
1924
|
+
VideosCondition = (
|
|
1925
|
+
VideosEqCondition
|
|
1926
|
+
| VideosNeqCondition
|
|
1927
|
+
| VideosGtCondition
|
|
1928
|
+
| VideosGteCondition
|
|
1929
|
+
| VideosLtCondition
|
|
1930
|
+
| VideosLteCondition
|
|
1931
|
+
| VideosInCondition
|
|
1932
|
+
| VideosLikeCondition
|
|
1933
|
+
| VideosFuzzyCondition
|
|
1934
|
+
| VideosKeywordCondition
|
|
1935
|
+
| VideosContainsCondition
|
|
1936
|
+
| VideosNotCondition
|
|
1937
|
+
| VideosAndCondition
|
|
1938
|
+
| VideosOrCondition
|
|
1939
|
+
| VideosAnyCondition
|
|
1940
|
+
)
|
|
1941
|
+
|
|
1942
|
+
|
|
1943
|
+
class VideosSearchQuery(TypedDict, total=False):
|
|
1944
|
+
"""Search query for videos entity."""
|
|
1945
|
+
filter: VideosCondition
|
|
1946
|
+
sort: list[VideosSortFilter]
|
|
1947
|
+
|
|
1948
|
+
|
|
1949
|
+
|
|
1950
|
+
# ===== SEARCH PARAMS =====
|
|
1951
|
+
|
|
1952
|
+
class AirbyteSearchParams(TypedDict, total=False):
|
|
1953
|
+
"""Parameters for Airbyte cache search operations (generic, use entity-specific query types for better type hints)."""
|
|
1954
|
+
query: dict[str, Any]
|
|
1955
|
+
limit: int
|
|
1956
|
+
cursor: str
|
|
1957
|
+
fields: list[list[str]]
|