adcp 2.4.0__py3-none-any.whl → 2.5.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.
Files changed (119) hide show
  1. adcp/__init__.py +91 -39
  2. adcp/__main__.py +1 -1
  3. adcp/client.py +9 -9
  4. adcp/simple.py +1 -1
  5. adcp/testing/test_helpers.py +1 -1
  6. adcp/types/__init__.py +69 -2
  7. adcp/types/{generated.py → _generated.py} +67 -11
  8. adcp/types/aliases.py +55 -1
  9. adcp/types/generated_poc/__init__.py +1 -1
  10. adcp/types/generated_poc/activate_signal_request.py +1 -1
  11. adcp/types/generated_poc/activate_signal_response.py +1 -1
  12. adcp/types/generated_poc/activation_key.py +1 -1
  13. adcp/types/generated_poc/adagents.py +1 -1
  14. adcp/types/generated_poc/asset_type.py +1 -1
  15. adcp/types/generated_poc/audio_asset.py +1 -1
  16. adcp/types/generated_poc/brand_manifest.py +3 -62
  17. adcp/types/generated_poc/build_creative_request.py +1 -1
  18. adcp/types/generated_poc/build_creative_response.py +1 -1
  19. adcp/types/generated_poc/channels.py +1 -1
  20. adcp/types/generated_poc/cpc_option.py +1 -1
  21. adcp/types/generated_poc/cpcv_option.py +1 -1
  22. adcp/types/generated_poc/cpm_auction_option.py +1 -1
  23. adcp/types/generated_poc/cpm_fixed_option.py +1 -1
  24. adcp/types/generated_poc/cpp_option.py +1 -1
  25. adcp/types/generated_poc/cpv_option.py +1 -1
  26. adcp/types/generated_poc/create_media_buy_request.py +2 -2
  27. adcp/types/generated_poc/create_media_buy_response.py +1 -1
  28. adcp/types/generated_poc/creative_asset.py +1 -1
  29. adcp/types/generated_poc/creative_assignment.py +1 -1
  30. adcp/types/generated_poc/creative_manifest.py +1 -1
  31. adcp/types/generated_poc/creative_policy.py +1 -1
  32. adcp/types/generated_poc/creative_status.py +1 -1
  33. adcp/types/generated_poc/css_asset.py +1 -1
  34. adcp/types/generated_poc/daast_asset.py +1 -1
  35. adcp/types/generated_poc/delivery_metrics.py +1 -1
  36. adcp/types/generated_poc/delivery_type.py +1 -1
  37. adcp/types/generated_poc/deployment.py +1 -1
  38. adcp/types/generated_poc/destination.py +1 -1
  39. adcp/types/generated_poc/error.py +1 -1
  40. adcp/types/generated_poc/flat_rate_option.py +1 -1
  41. adcp/types/generated_poc/format.py +1 -1
  42. adcp/types/generated_poc/format_id.py +1 -1
  43. adcp/types/generated_poc/frequency_cap.py +1 -1
  44. adcp/types/generated_poc/frequency_cap_scope.py +1 -1
  45. adcp/types/generated_poc/get_media_buy_delivery_request.py +1 -1
  46. adcp/types/generated_poc/get_media_buy_delivery_response.py +1 -1
  47. adcp/types/generated_poc/get_products_request.py +2 -2
  48. adcp/types/generated_poc/get_products_response.py +1 -1
  49. adcp/types/generated_poc/get_signals_request.py +1 -1
  50. adcp/types/generated_poc/get_signals_response.py +1 -1
  51. adcp/types/generated_poc/html_asset.py +1 -1
  52. adcp/types/generated_poc/identifier_types.py +1 -1
  53. adcp/types/generated_poc/image_asset.py +1 -1
  54. adcp/types/generated_poc/javascript_asset.py +1 -1
  55. adcp/types/generated_poc/list_authorized_properties_request.py +1 -1
  56. adcp/types/generated_poc/list_authorized_properties_response.py +1 -1
  57. adcp/types/generated_poc/list_creative_formats_request.py +1 -1
  58. adcp/types/generated_poc/list_creative_formats_response.py +1 -1
  59. adcp/types/generated_poc/list_creatives_request.py +1 -1
  60. adcp/types/generated_poc/list_creatives_response.py +2 -17
  61. adcp/types/generated_poc/markdown_asset.py +1 -1
  62. adcp/types/generated_poc/measurement.py +1 -1
  63. adcp/types/generated_poc/media_buy.py +1 -1
  64. adcp/types/generated_poc/media_buy_status.py +1 -1
  65. adcp/types/generated_poc/pacing.py +1 -1
  66. adcp/types/generated_poc/package.py +1 -1
  67. adcp/types/generated_poc/package_request.py +1 -1
  68. adcp/types/generated_poc/package_status.py +1 -1
  69. adcp/types/generated_poc/performance_feedback.py +1 -1
  70. adcp/types/generated_poc/placement.py +1 -1
  71. adcp/types/generated_poc/preview_creative_request.py +1 -1
  72. adcp/types/generated_poc/preview_creative_response.py +1 -1
  73. adcp/types/generated_poc/preview_render.py +1 -1
  74. adcp/types/generated_poc/pricing_model.py +1 -1
  75. adcp/types/generated_poc/product.py +25 -16
  76. adcp/types/generated_poc/promoted_offerings.py +2 -2
  77. adcp/types/generated_poc/promoted_products.py +1 -1
  78. adcp/types/generated_poc/property.py +1 -1
  79. adcp/types/generated_poc/protocol_envelope.py +1 -1
  80. adcp/types/generated_poc/provide_performance_feedback_request.py +1 -1
  81. adcp/types/generated_poc/provide_performance_feedback_response.py +1 -1
  82. adcp/types/generated_poc/publisher_identifier_types.py +1 -1
  83. adcp/types/generated_poc/push_notification_config.py +1 -1
  84. adcp/types/generated_poc/reporting_capabilities.py +1 -1
  85. adcp/types/generated_poc/response.py +1 -1
  86. adcp/types/generated_poc/standard_format_ids.py +1 -1
  87. adcp/types/generated_poc/sub_asset.py +1 -1
  88. adcp/types/generated_poc/sync_creatives_request.py +1 -1
  89. adcp/types/generated_poc/sync_creatives_response.py +1 -1
  90. adcp/types/generated_poc/targeting.py +1 -1
  91. adcp/types/generated_poc/task_status.py +1 -1
  92. adcp/types/generated_poc/task_type.py +1 -1
  93. adcp/types/generated_poc/tasks_get_request.py +1 -1
  94. adcp/types/generated_poc/tasks_get_response.py +1 -1
  95. adcp/types/generated_poc/tasks_list_request.py +1 -1
  96. adcp/types/generated_poc/tasks_list_response.py +1 -1
  97. adcp/types/generated_poc/text_asset.py +1 -1
  98. adcp/types/generated_poc/update_media_buy_request.py +1 -1
  99. adcp/types/generated_poc/update_media_buy_response.py +1 -1
  100. adcp/types/generated_poc/url_asset.py +1 -1
  101. adcp/types/generated_poc/vast_asset.py +1 -1
  102. adcp/types/generated_poc/vcpm_auction_option.py +1 -1
  103. adcp/types/generated_poc/vcpm_fixed_option.py +1 -1
  104. adcp/types/generated_poc/video_asset.py +1 -1
  105. adcp/types/generated_poc/webhook_asset.py +1 -1
  106. adcp/types/generated_poc/webhook_payload.py +1 -1
  107. adcp/types/stable.py +177 -0
  108. adcp/utils/preview_cache.py +6 -6
  109. {adcp-2.4.0.dist-info → adcp-2.5.0.dist-info}/METADATA +45 -5
  110. adcp-2.5.0.dist-info/RECORD +129 -0
  111. adcp/types/generated_poc/brand_manifest_ref.py +0 -361
  112. adcp/types/generated_poc/index.py +0 -17
  113. adcp/types/generated_poc/pricing_option.py +0 -365
  114. adcp/types/generated_poc/start_timing.py +0 -13
  115. adcp-2.4.0.dist-info/RECORD +0 -132
  116. {adcp-2.4.0.dist-info → adcp-2.5.0.dist-info}/WHEEL +0 -0
  117. {adcp-2.4.0.dist-info → adcp-2.5.0.dist-info}/entry_points.txt +0 -0
  118. {adcp-2.4.0.dist-info → adcp-2.5.0.dist-info}/licenses/LICENSE +0 -0
  119. {adcp-2.4.0.dist-info → adcp-2.5.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: adcp
3
- Version: 2.4.0
3
+ Version: 2.5.0
4
4
  Summary: Official Python client for the Ad Context Protocol (AdCP)
5
5
  Author-email: AdCP Community <maintainers@adcontextprotocol.org>
6
6
  License: Apache-2.0
@@ -35,6 +35,8 @@ Requires-Dist: mypy>=1.0.0; extra == "dev"
35
35
  Requires-Dist: black>=23.0.0; extra == "dev"
36
36
  Requires-Dist: ruff>=0.1.0; extra == "dev"
37
37
  Requires-Dist: datamodel-code-generator[http]>=0.35.0; extra == "dev"
38
+ Provides-Extra: docs
39
+ Requires-Dist: pdoc3>=0.10.0; extra == "docs"
38
40
  Dynamic: license-file
39
41
 
40
42
  # adcp - Python Client for Ad Context Protocol
@@ -177,6 +179,18 @@ async with ADCPMultiAgentClient(
177
179
  # Connections automatically cleaned up here
178
180
  ```
179
181
 
182
+ ## Documentation
183
+
184
+ - **[API Reference](https://adcontextprotocol.github.io/adcp-client-python/)** - Complete API documentation with type signatures and examples
185
+ - **[Protocol Spec](https://github.com/adcontextprotocol/adcp)** - Ad Context Protocol specification
186
+ - **[Examples](examples/)** - Code examples and usage patterns
187
+
188
+ The API reference documentation is automatically generated from the code and includes:
189
+ - Full type signatures for all methods
190
+ - Field descriptions from JSON Schema
191
+ - Method documentation with examples
192
+ - Searchable interface
193
+
180
194
  ## Features
181
195
 
182
196
  ### Test Helpers
@@ -246,10 +260,16 @@ client = ADCPClient(config)
246
260
 
247
261
  ### Type Safety
248
262
 
249
- Full type hints with Pydantic validation and auto-generated types from the AdCP spec:
263
+ Full type hints with Pydantic validation and auto-generated types from the AdCP spec. All commonly-used types are exported from the main `adcp` package for convenience:
250
264
 
251
265
  ```python
252
- from adcp import GetProductsRequest
266
+ from adcp import (
267
+ GetProductsRequest,
268
+ BrandManifest,
269
+ Package,
270
+ CpmFixedRatePricingOption,
271
+ MediaBuyStatus,
272
+ )
253
273
 
254
274
  # All methods require typed request objects
255
275
  request = GetProductsRequest(brief="Coffee brands", max_results=10)
@@ -259,8 +279,27 @@ result = await agent.get_products(request)
259
279
  if result.success:
260
280
  for product in result.data.products:
261
281
  print(product.name, product.pricing_options) # Full IDE autocomplete!
282
+
283
+ # Type-safe pricing with discriminators
284
+ pricing = CpmFixedRatePricingOption(
285
+ pricing_option_id="cpm_usd",
286
+ pricing_model="cpm",
287
+ is_fixed=True, # Literal[True] - type checked!
288
+ currency="USD",
289
+ rate=5.0
290
+ )
291
+
292
+ # Type-safe status enums
293
+ if media_buy.status == MediaBuyStatus.active:
294
+ print("Media buy is active")
262
295
  ```
263
296
 
297
+ **Exported from main package:**
298
+ - **Core domain types**: `BrandManifest`, `Creative`, `CreativeManifest`, `MediaBuy`, `Package`
299
+ - **Status enums**: `CreativeStatus`, `MediaBuyStatus`, `PackageStatus`, `PricingModel`
300
+ - **All 9 pricing options**: `CpcPricingOption`, `CpmFixedRatePricingOption`, `VcpmAuctionPricingOption`, etc.
301
+ - **Request/Response types**: All 16 operations with full request/response types
302
+
264
303
  #### Semantic Type Aliases
265
304
 
266
305
  For discriminated union types (success/error responses), use semantic aliases for clearer code:
@@ -291,7 +330,7 @@ See `examples/type_aliases_demo.py` for more examples.
291
330
  **Import guidelines:**
292
331
  - ✅ **DO**: Import from main package: `from adcp import GetProductsRequest`
293
332
  - ✅ **DO**: Use semantic aliases: `from adcp import CreateMediaBuySuccessResponse`
294
- - ⚠️ **AVOID**: Import from internal modules: `from adcp.types.generated import CreateMediaBuyResponse1`
333
+ - ⚠️ **AVOID**: Import from internal modules: `from adcp.types._generated import CreateMediaBuyResponse1`
295
334
 
296
335
  The main package exports provide a stable API while internal generated types may change.
297
336
 
@@ -776,6 +815,7 @@ Apache 2.0 License - see [LICENSE](LICENSE) file for details.
776
815
 
777
816
  ## Support
778
817
 
779
- - **Documentation**: [docs.adcontextprotocol.org](https://docs.adcontextprotocol.org)
818
+ - **API Reference**: [adcontextprotocol.github.io/adcp-client-python](https://adcontextprotocol.github.io/adcp-client-python/)
819
+ - **Protocol Documentation**: [docs.adcontextprotocol.org](https://docs.adcontextprotocol.org)
780
820
  - **Issues**: [GitHub Issues](https://github.com/adcontextprotocol/adcp-client-python/issues)
781
821
  - **Protocol Spec**: [AdCP Specification](https://github.com/adcontextprotocol/adcp)
@@ -0,0 +1,129 @@
1
+ adcp/__init__.py,sha256=09hCpp_u_UXT672Lo8HbPTu_RNiWWzQf-UGBVIqFjds,8592
2
+ adcp/__main__.py,sha256=YF2GUXF1LICW1TPxNQiGIfSp5cpAsejoEG2fuOgbzrc,12839
3
+ adcp/adagents.py,sha256=o-vTBmdZvu9aER-TAlLLL3s-WGYY8N67jnrAH24lST8,22333
4
+ adcp/client.py,sha256=Z70D0bHcLNmr0NBGXbFUvW8dBdzHkcv8CmFcYo3pIjw,28803
5
+ adcp/config.py,sha256=Vsy7ZPOI8G3fB_i5Nk-CHbC7wdasCUWuKlos0fwA0kY,2017
6
+ adcp/exceptions.py,sha256=1aZEWpaM92OxD2jl9yKsqJp5ReSWaj0S0DFhxChhLlA,6732
7
+ adcp/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
+ adcp/simple.py,sha256=A3Ly_GadbXNodi-LCjbP1uYAkFl0bAtz9hCpTGwCDPE,10441
9
+ adcp/validation.py,sha256=NsTwTQbLmd1Z1bMcztR1llJB21ai1xuw5aVrca7LoE8,6793
10
+ adcp/protocols/__init__.py,sha256=6UFwACQ0QadBUzy17wUROHqsJDp8ztPW2jzyl53Zh_g,262
11
+ adcp/protocols/a2a.py,sha256=FHgc6G_eU2qD0vH7_RyS1eZvUFSb2j3-EsceoHPi384,12467
12
+ adcp/protocols/base.py,sha256=vBHD23Fzl_CCk_Gy9nvSbBYopcJlYkYyzoz-rhI8wHg,5214
13
+ adcp/protocols/mcp.py,sha256=d9uSpGd0BKvQ0JxztkfDvHwoDrDYhuiw5oivpYOAbmM,16647
14
+ adcp/testing/__init__.py,sha256=ZWp_floWjVZfy8RBG5v_FUXQ8YbN7xjXvVcX-_zl_HU,1416
15
+ adcp/testing/test_helpers.py,sha256=-UKuxxyKQald5EvXxguQH34b3J0JdsxKH_nRT6GTjkQ,10029
16
+ adcp/types/__init__.py,sha256=CXlUUpMRWyM20focXgl8pEz3WMqvpjAW9PzmyHXKRzA,2608
17
+ adcp/types/_generated.py,sha256=p4U_P3BROGjCnS0Cd2o9ZJ_bShQLffB3D9_0D29JB0g,14926
18
+ adcp/types/aliases.py,sha256=FGb7zYy6V2gKtzWWc2c_vx3NLwXYpEsyjts9peyOixQ,11244
19
+ adcp/types/base.py,sha256=QoEuVfI4yzefup0dc2KN11AcJTbcGxRep7xOw5hXfs8,837
20
+ adcp/types/core.py,sha256=RXkKCWCXS9BVJTNpe3Opm5O1I_LaQPMUuVwa-ipvS1Q,4839
21
+ adcp/types/stable.py,sha256=Q_rxnpLuUGfqGusiJcMuPADIGLQgs2uLp98S4YnAksw,4997
22
+ adcp/types/generated_poc/__init__.py,sha256=bgFFvPK1-e04eOnyw0qmtVMzoA2V7GeAMPDVrx-VIwA,103
23
+ adcp/types/generated_poc/activate_signal_request.py,sha256=mI1MskO30yEcbQQ7ueEExMF7FhfARQj0_kbz5CAdSzQ,1188
24
+ adcp/types/generated_poc/activate_signal_response.py,sha256=ltt5yDsocK3VfELeRuMjUiNMmUZe__VP5az6fsMCOuc,2015
25
+ adcp/types/generated_poc/activation_key.py,sha256=FFUHvn-q0zKMdImOv-VHKS_78U8FVikUE8M-IOuiamg,952
26
+ adcp/types/generated_poc/adagents.py,sha256=5HqvEckcnEZkrGDbZxa7zBR0xeLaj7WGii-dZDjvFbY,8490
27
+ adcp/types/generated_poc/asset_type.py,sha256=mNeAkjoEACZbj7lvqjAHcQ6vSNW8dt1qFNxp0fON-Qw,3169
28
+ adcp/types/generated_poc/audio_asset.py,sha256=gu1HQI0310qmY27OzHzBD_gPTPYJv7GzCDgrEymZJ-k,795
29
+ adcp/types/generated_poc/brand_manifest.py,sha256=jJYmM81eTMqVoBFHvoUJEaCrlKcsS_WQa8aJfUcAv3Y,7501
30
+ adcp/types/generated_poc/build_creative_request.py,sha256=ucFLDWaxKHJSj6U6aGyEESiSOi-xVck9_f27avFmlOE,1726
31
+ adcp/types/generated_poc/build_creative_response.py,sha256=alUTLetOIMjgnwc_88kNlDROEa4ccJEyRLEWEUgYiQw,1926
32
+ adcp/types/generated_poc/channels.py,sha256=FdeHta5dKDAxkzsvDOltFV09ACKA4eO1tNEBTui-XHc,386
33
+ adcp/types/generated_poc/cpc_option.py,sha256=fv1J3di8Y2pT4IE8VA6Fz6xCnfyQTD7kQw30JPYL5Ys,1313
34
+ adcp/types/generated_poc/cpcv_option.py,sha256=yMPXF1HGFG22sMgwZyVXx-510WFtsTRxkJEJNWrVF2k,1374
35
+ adcp/types/generated_poc/cpm_auction_option.py,sha256=m7v2mtGJqPVD14bPlWojtddRdaUS9IvY7EriJcDmaa8,1978
36
+ adcp/types/generated_poc/cpm_fixed_option.py,sha256=q-4UKVs6S2vfXpSLlzsCpQkKTsSjZnqh63GHA8DkJhI,1357
37
+ adcp/types/generated_poc/cpp_option.py,sha256=O3RXSHXDHVAKczgmeWvWgV7TLWaGC6bDy83fdeH5lhk,2069
38
+ adcp/types/generated_poc/cpv_option.py,sha256=xen_Hc6iY19nOoYnF_nkgTGSemjZIf7WzM-QLyyaM-s,2173
39
+ adcp/types/generated_poc/create_media_buy_request.py,sha256=kCC3RP2dT7LCSiAhHSQhfrlkcbXZLuFQspujNIGYzFs,3529
40
+ adcp/types/generated_poc/create_media_buy_response.py,sha256=FfpmH1Qg5J9lTR8ezE2fWK251gDWiattfyJaZrUQmwo,2469
41
+ adcp/types/generated_poc/creative_asset.py,sha256=v4ZBMC-sy3JHNC9hC3_RDaoi9hIzWqOoD7B4Bvk3f4I,2663
42
+ adcp/types/generated_poc/creative_assignment.py,sha256=G5YOU1JxH6YKV-K9tWv4OqkIkK1lnBxGgFiXTZGkT_8,933
43
+ adcp/types/generated_poc/creative_manifest.py,sha256=Z6UCWDrAOzct8DuWNNmTO46apCf_5oRpNaSUVx_2CIU,2155
44
+ adcp/types/generated_poc/creative_policy.py,sha256=f1gWWEdpOm9PWMVhsXz_BZbLd8cOzIsYaj12Y4rE85Y,909
45
+ adcp/types/generated_poc/creative_status.py,sha256=09l8UBX7LaXgoIAT72HOtterE4onzPcKUmcEVhOJamw,320
46
+ adcp/types/generated_poc/css_asset.py,sha256=oUGoxGhnPkZCtmlP6IoF828LU7K2wYnt8Y5zaf9GCpw,535
47
+ adcp/types/generated_poc/daast_asset.py,sha256=L3RE86oAA4GAeDdI-HTzvbgpLxiUOqlUrhWLLCMelHc,2401
48
+ adcp/types/generated_poc/delivery_metrics.py,sha256=qcsPadb6h5Ro_J5sKJYcK32WeY4ymrR8H2QJ2qI-m_k,4468
49
+ adcp/types/generated_poc/delivery_type.py,sha256=-jC7Xv99_j-U4LxEjbDzdMJ_WOdlANuE5-agStgCkPE,264
50
+ adcp/types/generated_poc/deployment.py,sha256=QYAe6NPCzXdq9UomWVHfYYOrLB0YI9XXLLn3vkMCUPw,2866
51
+ adcp/types/generated_poc/destination.py,sha256=oBTdFIjnx-cDgLcBrC6Qxd70PTaCcNp9pZM8t-Z3VDQ,1278
52
+ adcp/types/generated_poc/error.py,sha256=D4JaWK_K7xtMjgSTrvkDebn8h0gJJfc02B5tTEeCg8w,1014
53
+ adcp/types/generated_poc/flat_rate_option.py,sha256=h7pSLXxCltFwYaa-Ld3hxd1UGkutk9MU24xQgfHeT6U,2967
54
+ adcp/types/generated_poc/format.py,sha256=K9vbjfjyzHWDIvvv_UDzhGvoBvmm3GRGaBdSxPMVbes,9440
55
+ adcp/types/generated_poc/format_id.py,sha256=J10JarmfjAeTIPxAxaO4NalKy7vfFqfcdjol2d23Bcs,864
56
+ adcp/types/generated_poc/frequency_cap.py,sha256=XHHyTZgkpEYB-n4uqHYcnVKLqyxuD0eR7DXCnAHzv7Q,475
57
+ adcp/types/generated_poc/frequency_cap_scope.py,sha256=O8HD_egs-xpXbSUQYZ9w2HwiC_hZa1aQvlxGJOIItvA,437
58
+ adcp/types/generated_poc/get_media_buy_delivery_request.py,sha256=mPl7QJJLsuaZxqsQTwLQ7JdF_oh3JNVJXfgHMaQhtfk,1933
59
+ adcp/types/generated_poc/get_media_buy_delivery_response.py,sha256=VDBU8vfC3RbA6W1dWOO5IlC6HbqPgQtoD4gxMBdppYg,8164
60
+ adcp/types/generated_poc/get_products_request.py,sha256=7S-STQcMQeu8gevskVZJLRDqWuJeR5754GFmNmy3T40,2916
61
+ adcp/types/generated_poc/get_products_response.py,sha256=BZ8Cd9YzIu_Bischz1JTVLT4frmCf9574RATOlceRgI,934
62
+ adcp/types/generated_poc/get_signals_request.py,sha256=FXLpuhsaH6ybc7xXm7pnatEJCkk05g6h_0CYy699njw,2558
63
+ adcp/types/generated_poc/get_signals_response.py,sha256=npbWzX1unlB5AMwvMJ5sYXnOBVKLmujoSWhs0L2SrVg,2211
64
+ adcp/types/generated_poc/html_asset.py,sha256=WgeUmtLtVlgqVLK965t4ZyxTV6HRR1wM2qyTXNSMddc,505
65
+ adcp/types/generated_poc/identifier_types.py,sha256=Cd4RcYUWLxG_g-hPEFaY40FOegNu32NNdbsKec54OVE,860
66
+ adcp/types/generated_poc/image_asset.py,sha256=t_KTwQjFlqBnB1Wl26cpBS3ohxFKWxkFyz1WKkrpA9M,836
67
+ adcp/types/generated_poc/javascript_asset.py,sha256=OLL1F1hr_hIbaqhesAeY_rM0edASRMzrZLqUoLcZdrs,640
68
+ adcp/types/generated_poc/list_authorized_properties_request.py,sha256=uq3irNREbcwnZdh8tL3BrT2thpsfl6ieaBx3MijscJQ,1283
69
+ adcp/types/generated_poc/list_authorized_properties_response.py,sha256=42FUGi2WOrkTKxZ79EVH-Mfn7xOvGxkNHqdhmOsKvCA,3260
70
+ adcp/types/generated_poc/list_creative_formats_request.py,sha256=i27H91bS0J4K95-WX2MR4ntzfrt3DZW1IOUJPhpmTv0,3088
71
+ adcp/types/generated_poc/list_creative_formats_response.py,sha256=0S_Lc_z2Hwxb4GQYjZcwv4B0-51WVV1TGbScUvAhLVc,2136
72
+ adcp/types/generated_poc/list_creatives_request.py,sha256=JhgkI4kse2AJ2omqWriTH6VwSyKcPJCkWsBiPNkdGr4,5319
73
+ adcp/types/generated_poc/list_creatives_response.py,sha256=_wAb4q5KNiTi8mWA7gAkupIfReeyoGl_GN9y4Kg7qg4,7455
74
+ adcp/types/generated_poc/markdown_asset.py,sha256=i6VCs2DGLEGPj4QMlMhzxGqKwCJT0Jt3XZaBmpG_oV4,1215
75
+ adcp/types/generated_poc/measurement.py,sha256=d6mnBpJCeT2ypnzokrRMe7wdm3I3gh1UexCQ6rTHR44,1051
76
+ adcp/types/generated_poc/media_buy.py,sha256=8Xo8ZnFnHuFoLyI5OM01WgIUpMug114MEH-iBnwQcjk,1368
77
+ adcp/types/generated_poc/media_buy_status.py,sha256=BbrNX7S_T6APr2GapBbNWD__-a5CMus0-8cUDFXNRWU,319
78
+ adcp/types/generated_poc/pacing.py,sha256=YhiWy18-OFnh2quKbulu00PZ_qoayo634lwfEAY6Sjk,253
79
+ adcp/types/generated_poc/package.py,sha256=SgtG9G2szDBouilnddLa9S5ZNf-NBcSr9oP9dVU21iw,2074
80
+ adcp/types/generated_poc/package_request.py,sha256=U8ltksMeAKBsp_9iptic6NQEEQ9o2OZF5VZQbtD1YYc,2171
81
+ adcp/types/generated_poc/package_status.py,sha256=3eSUJH73DVQ8IQIZ_z_-IqqK_j3kUh0neiI9cL6X5eA,290
82
+ adcp/types/generated_poc/performance_feedback.py,sha256=w6vEh5gfjf6IEtCc9GtB_KJd3FF-LGrbgzmE3qd-hzo,2923
83
+ adcp/types/generated_poc/placement.py,sha256=M710WgbK0itcsZbJGrIoXyJ8gWqOsqsvjNpVQsUUtgo,1052
84
+ adcp/types/generated_poc/preview_creative_request.py,sha256=ul7gJhSQPR9EnPXfjoD5cYkf-CsfIoVfO3iyxneuIuA,6059
85
+ adcp/types/generated_poc/preview_creative_response.py,sha256=d2OGyfRATgOlLv9B7ow04fzwMyUCmLYbm9s1cg4MRlU,6140
86
+ adcp/types/generated_poc/preview_render.py,sha256=zLlG5IaZsyxZOPzHqjBiyyl7MU3aqVJtZonySAj2ZBk,5076
87
+ adcp/types/generated_poc/pricing_model.py,sha256=8HPxHhLHcOA8vvkqyj5Uem8dWxRgsnbx73l2WAWm-Zg,324
88
+ adcp/types/generated_poc/product.py,sha256=nxKXK6jsnHsanB1K3jkws19yW0cd1VOFmdjM2XAYN4Y,7993
89
+ adcp/types/generated_poc/promoted_offerings.py,sha256=R5a551tIy43kZ2BUk-Lktu0t5hXLJfcNZWLHNDBgXp0,3223
90
+ adcp/types/generated_poc/promoted_products.py,sha256=kdPVuzMgOCsHjQiW6YIg9AYriLAFqTFYd-4oDEmEexM,1252
91
+ adcp/types/generated_poc/property.py,sha256=r6km5T5-Sd7tf6w7XmINWyAetlExq1TDNEee8hexaVE,2563
92
+ adcp/types/generated_poc/protocol_envelope.py,sha256=4XAHgtypta00roZnzsAhfVu1n_hsQ94T6RWzY9CVNFM,2715
93
+ adcp/types/generated_poc/provide_performance_feedback_request.py,sha256=nuhQuva-W4rQMCfK-0rmeX2lwVA9UcbGP4InKFDRm2Q,2820
94
+ adcp/types/generated_poc/provide_performance_feedback_response.py,sha256=6eVf1r8O_8PPBOXdB1w_7JdZUPkPvip7WVIMsANqoGI,1973
95
+ adcp/types/generated_poc/publisher_identifier_types.py,sha256=CctG8XQRfR1wtxo9bCCuU4oGZ8UoTa87FE0R-kPxYy0,321
96
+ adcp/types/generated_poc/push_notification_config.py,sha256=s69T-mz9dSiKPJj-U1icEvqYn0T_Lwl4eygKiM0KhCM,1732
97
+ adcp/types/generated_poc/reporting_capabilities.py,sha256=Q-Bdl-Vyqky6q3doorGXcvDCb6Kl3go3qnaptp6RJgY,2107
98
+ adcp/types/generated_poc/response.py,sha256=BrWU9po0mAyIs8htcKgqsO8hehXo0pekqC7hyZNCwrA,707
99
+ adcp/types/generated_poc/standard_format_ids.py,sha256=fV3MgIXfyU_lMQ5VHOZC3s0FcX0_g0Ex-SneRQrmvYQ,1921
100
+ adcp/types/generated_poc/sub_asset.py,sha256=SYdHqRflzCEjmaT5e3NpumzuFreugaRFYeddrE91VhY,1666
101
+ adcp/types/generated_poc/sync_creatives_request.py,sha256=VamsifJLzCDdgWfit1_DPJUm8wpTx4YchGzHB8uSApc,2563
102
+ adcp/types/generated_poc/sync_creatives_response.py,sha256=V-3cCJUdpLTJ4twtniJ4m-oVovh7UmRLsRxJUNJKSy8,4096
103
+ adcp/types/generated_poc/targeting.py,sha256=sgW1q9zMZKWT0nB_CfrJJdMTFRXPpH3OctDhIewFm3Y,1743
104
+ adcp/types/generated_poc/task_status.py,sha256=0s6e531YcO7WNYw14zN-Ofr3pmKfNNDguWF5jZ72LYY,444
105
+ adcp/types/generated_poc/task_type.py,sha256=r9uWxDO-E-vgZy4SpcZcutjxOcERJSr0NNN9E-nLNvI,382
106
+ adcp/types/generated_poc/tasks_get_request.py,sha256=ZLKqdEy0l9nzlxl95ZEgvGKeeBn_3PjYchvSqaJh5-w,973
107
+ adcp/types/generated_poc/tasks_get_response.py,sha256=P8z2MyySuysBWJyRRyxvwv-JN3VO_TPxl0Vyp2ihDb4,3988
108
+ adcp/types/generated_poc/tasks_list_request.py,sha256=ncYYLP9jN06yyYnZn7I8bcU3avMFFz7ct9Qcvv0fmKk,4083
109
+ adcp/types/generated_poc/tasks_list_response.py,sha256=5R77z9D9uvWjqj44fOPNEDPUVeDn-O7nGx1WI9kq1JM,4063
110
+ adcp/types/generated_poc/text_asset.py,sha256=fiV29xHQtjv46q-RlttwUqnetMVzefpcAr-pBOJSIv4,532
111
+ adcp/types/generated_poc/update_media_buy_request.py,sha256=LvjUikN-D2HmgeQzXN-5Lj3ciprmz1HBI5qxfjoQhDY,6071
112
+ adcp/types/generated_poc/update_media_buy_response.py,sha256=Ssj7vidGo6roNsgiJ2dzRqRQ1BR9iFg40p6ZKyjiWlc,2506
113
+ adcp/types/generated_poc/url_asset.py,sha256=jswm-gVfddxa5jii1ljbBHZrw3BAhjmGZlHmPGxAnZE,1114
114
+ adcp/types/generated_poc/vast_asset.py,sha256=LGzbgl_GVsSf9bcwuqiM6iM2GjSM81pW0Iz3DTrhWwM,2679
115
+ adcp/types/generated_poc/vcpm_auction_option.py,sha256=lWT55gEltr4415vu1eYNWZroKKi5AGlZfnqlvJBNmwg,2012
116
+ adcp/types/generated_poc/vcpm_fixed_option.py,sha256=a3TuN9Dj3Up9Al5ZDNlzKps6ue26MwZu-DJkvUD2Otw,1423
117
+ adcp/types/generated_poc/video_asset.py,sha256=qj2fE5GnB7pcc_vuxwy_7dwTGX9BvmE0GRFp9FQaHcs,978
118
+ adcp/types/generated_poc/webhook_asset.py,sha256=iSSikTEiBBZl0nVEx7tTMHHb1Tknv7lXYIeW6LYT2Bc,1935
119
+ adcp/types/generated_poc/webhook_payload.py,sha256=59d5lN932v_WQC3gHwf_QV4SxKlfsqJmjmtp5ZtziWM,3563
120
+ adcp/utils/__init__.py,sha256=uetvSJB19CjQbtwEYZiTnumJG11GsafQmXm5eR3hL7E,153
121
+ adcp/utils/operation_id.py,sha256=wQX9Bb5epXzRq23xoeYPTqzu5yLuhshg7lKJZihcM2k,294
122
+ adcp/utils/preview_cache.py,sha256=oc1AUkPrHHmUqfZa5920OCKY7qrDDR86XO6oi1PEHTA,18504
123
+ adcp/utils/response_parser.py,sha256=uPk2vIH-RYZmq7y3i8lC4HTMQ3FfKdlgXKTjgJ1955M,6253
124
+ adcp-2.5.0.dist-info/licenses/LICENSE,sha256=PF39NR3Ae8PLgBhg3Uxw6ju7iGVIf8hfv9LRWQdii_U,629
125
+ adcp-2.5.0.dist-info/METADATA,sha256=FckzUUiNpYqMSnMYPC810uZJL8il646fzXbR_-ooPXI,25810
126
+ adcp-2.5.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
127
+ adcp-2.5.0.dist-info/entry_points.txt,sha256=DQKpcGsJX8DtVI_SGApQ7tNvqUB4zkTLaTAEpFgmi3U,44
128
+ adcp-2.5.0.dist-info/top_level.txt,sha256=T1_NF0GefncFU9v_k56oDwKSJREyCqIM8lAwNZf0EOs,5
129
+ adcp-2.5.0.dist-info/RECORD,,
@@ -1,361 +0,0 @@
1
- # generated by datamodel-codegen:
2
- # filename: brand-manifest-ref.json
3
- # timestamp: 2025-11-15T17:39:52+00:00
4
-
5
- from __future__ import annotations
6
-
7
- from enum import Enum
8
- from typing import Any
9
-
10
- from adcp.types.base import AdCPBaseModel
11
- from pydantic import AnyUrl, AwareDatetime, ConfigDict, EmailStr, Field, RootModel
12
-
13
-
14
- class Logo(AdCPBaseModel):
15
- url: AnyUrl = Field(..., description="URL to the logo asset")
16
- tags: list[str] | None = Field(
17
- None,
18
- description="Semantic tags describing the logo variant (e.g., 'dark', 'light', 'square', 'horizontal', 'icon')",
19
- )
20
- width: int | None = Field(None, description="Logo width in pixels")
21
- height: int | None = Field(None, description="Logo height in pixels")
22
-
23
-
24
- class Colors(AdCPBaseModel):
25
- primary: str | None = Field(
26
- None, description="Primary brand color (hex format)", pattern="^#[0-9A-Fa-f]{6}$"
27
- )
28
- secondary: str | None = Field(
29
- None, description="Secondary brand color (hex format)", pattern="^#[0-9A-Fa-f]{6}$"
30
- )
31
- accent: str | None = Field(
32
- None, description="Accent color (hex format)", pattern="^#[0-9A-Fa-f]{6}$"
33
- )
34
- background: str | None = Field(
35
- None, description="Background color (hex format)", pattern="^#[0-9A-Fa-f]{6}$"
36
- )
37
- text: str | None = Field(
38
- None, description="Text color (hex format)", pattern="^#[0-9A-Fa-f]{6}$"
39
- )
40
-
41
-
42
- class Fonts(AdCPBaseModel):
43
- primary: str | None = Field(None, description="Primary font family name")
44
- secondary: str | None = Field(None, description="Secondary font family name")
45
- font_urls: list[AnyUrl] | None = Field(
46
- None, description="URLs to web font files if using custom fonts"
47
- )
48
-
49
-
50
- class AssetType(Enum):
51
- image = "image"
52
- video = "video"
53
- audio = "audio"
54
- text = "text"
55
-
56
-
57
- class Asset(AdCPBaseModel):
58
- model_config = ConfigDict(
59
- extra="forbid",
60
- )
61
- asset_id: str = Field(..., description="Unique identifier for this asset")
62
- asset_type: AssetType = Field(..., description="Type of asset")
63
- url: AnyUrl = Field(..., description="URL to CDN-hosted asset file")
64
- tags: list[str] | None = Field(
65
- None, description="Tags for asset discovery (e.g., 'holiday', 'lifestyle', 'product_shot')"
66
- )
67
- name: str | None = Field(None, description="Human-readable asset name")
68
- description: str | None = Field(None, description="Asset description or usage notes")
69
- width: int | None = Field(None, description="Image/video width in pixels")
70
- height: int | None = Field(None, description="Image/video height in pixels")
71
- duration_seconds: float | None = Field(None, description="Video/audio duration in seconds")
72
- file_size_bytes: int | None = Field(None, description="File size in bytes")
73
- format: str | None = Field(None, description="File format (e.g., 'jpg', 'mp4', 'mp3')")
74
- metadata: dict[str, Any] | None = Field(None, description="Additional asset-specific metadata")
75
-
76
-
77
- class FeedFormat(Enum):
78
- google_merchant_center = "google_merchant_center"
79
- facebook_catalog = "facebook_catalog"
80
- custom = "custom"
81
-
82
-
83
- class UpdateFrequency(Enum):
84
- realtime = "realtime"
85
- hourly = "hourly"
86
- daily = "daily"
87
- weekly = "weekly"
88
-
89
-
90
- class ProductCatalog(AdCPBaseModel):
91
- model_config = ConfigDict(
92
- extra="forbid",
93
- )
94
- feed_url: AnyUrl = Field(..., description="URL to product catalog feed")
95
- feed_format: FeedFormat | None = Field(
96
- FeedFormat.google_merchant_center, description="Format of the product feed"
97
- )
98
- categories: list[str] | None = Field(
99
- None, description="Product categories available in the catalog (for filtering)"
100
- )
101
- last_updated: AwareDatetime | None = Field(
102
- None, description="When the product catalog was last updated"
103
- )
104
- update_frequency: UpdateFrequency | None = Field(
105
- None, description="How frequently the product catalog is updated"
106
- )
107
-
108
-
109
- class Disclaimer(AdCPBaseModel):
110
- text: str = Field(..., description="Disclaimer text")
111
- context: str | None = Field(
112
- None,
113
- description="When this disclaimer applies (e.g., 'financial_products', 'health_claims', 'all')",
114
- )
115
- required: bool | None = Field(True, description="Whether this disclaimer must appear")
116
-
117
-
118
- class Contact(AdCPBaseModel):
119
- email: EmailStr | None = Field(None, description="Contact email")
120
- phone: str | None = Field(None, description="Contact phone number")
121
-
122
-
123
- class Metadata(AdCPBaseModel):
124
- created_date: AwareDatetime | None = Field(
125
- None, description="When this brand manifest was created"
126
- )
127
- updated_date: AwareDatetime | None = Field(
128
- None, description="When this brand manifest was last updated"
129
- )
130
- version: str | None = Field(None, description="Brand card version number")
131
-
132
-
133
- class BrandManifest1(AdCPBaseModel):
134
- model_config = ConfigDict(
135
- extra="forbid",
136
- )
137
- url: AnyUrl = Field(
138
- ...,
139
- description="Primary brand URL for context and asset discovery. Creative agents can infer brand information from this URL.",
140
- )
141
- name: str | None = Field(None, description="Brand or business name")
142
- logos: list[Logo] | None = Field(
143
- None, description="Brand logo assets with semantic tags for different use cases"
144
- )
145
- colors: Colors | None = Field(None, description="Brand color palette")
146
- fonts: Fonts | None = Field(None, description="Brand typography guidelines")
147
- tone: str | None = Field(
148
- None,
149
- description="Brand voice and messaging tone (e.g., 'professional', 'casual', 'humorous', 'trustworthy', 'innovative')",
150
- )
151
- tagline: str | None = Field(None, description="Brand tagline or slogan")
152
- assets: list[Asset] | None = Field(
153
- None,
154
- description="Brand asset library with explicit assets and tags. Assets are referenced inline with URLs pointing to CDN-hosted files.",
155
- )
156
- product_catalog: ProductCatalog | None = Field(
157
- None,
158
- description="Product catalog information for e-commerce advertisers. Enables SKU-level creative generation and product selection.",
159
- )
160
- disclaimers: list[Disclaimer] | None = Field(
161
- None, description="Legal disclaimers or required text that must appear in creatives"
162
- )
163
- industry: str | None = Field(
164
- None,
165
- description="Industry or vertical (e.g., 'retail', 'automotive', 'finance', 'healthcare')",
166
- )
167
- target_audience: str | None = Field(None, description="Primary target audience description")
168
- contact: Contact | None = Field(None, description="Brand contact information")
169
- metadata: Metadata | None = Field(None, description="Additional brand metadata")
170
-
171
-
172
- class Asset1(AdCPBaseModel):
173
- model_config = ConfigDict(
174
- extra="forbid",
175
- )
176
- asset_id: str = Field(..., description="Unique identifier for this asset")
177
- asset_type: AssetType = Field(..., description="Type of asset")
178
- url: AnyUrl = Field(..., description="URL to CDN-hosted asset file")
179
- tags: list[str] | None = Field(
180
- None, description="Tags for asset discovery (e.g., 'holiday', 'lifestyle', 'product_shot')"
181
- )
182
- name: str | None = Field(None, description="Human-readable asset name")
183
- description: str | None = Field(None, description="Asset description or usage notes")
184
- width: int | None = Field(None, description="Image/video width in pixels")
185
- height: int | None = Field(None, description="Image/video height in pixels")
186
- duration_seconds: float | None = Field(None, description="Video/audio duration in seconds")
187
- file_size_bytes: int | None = Field(None, description="File size in bytes")
188
- format: str | None = Field(None, description="File format (e.g., 'jpg', 'mp4', 'mp3')")
189
- metadata: dict[str, Any] | None = Field(None, description="Additional asset-specific metadata")
190
-
191
-
192
- class ProductCatalog1(AdCPBaseModel):
193
- model_config = ConfigDict(
194
- extra="forbid",
195
- )
196
- feed_url: AnyUrl = Field(..., description="URL to product catalog feed")
197
- feed_format: FeedFormat | None = Field(
198
- FeedFormat.google_merchant_center, description="Format of the product feed"
199
- )
200
- categories: list[str] | None = Field(
201
- None, description="Product categories available in the catalog (for filtering)"
202
- )
203
- last_updated: AwareDatetime | None = Field(
204
- None, description="When the product catalog was last updated"
205
- )
206
- update_frequency: UpdateFrequency | None = Field(
207
- None, description="How frequently the product catalog is updated"
208
- )
209
-
210
-
211
- class BrandManifest2(AdCPBaseModel):
212
- model_config = ConfigDict(
213
- extra="forbid",
214
- )
215
- url: AnyUrl | None = Field(
216
- None,
217
- description="Primary brand URL for context and asset discovery. Creative agents can infer brand information from this URL.",
218
- )
219
- name: str = Field(..., description="Brand or business name")
220
- logos: list[Logo] | None = Field(
221
- None, description="Brand logo assets with semantic tags for different use cases"
222
- )
223
- colors: Colors | None = Field(None, description="Brand color palette")
224
- fonts: Fonts | None = Field(None, description="Brand typography guidelines")
225
- tone: str | None = Field(
226
- None,
227
- description="Brand voice and messaging tone (e.g., 'professional', 'casual', 'humorous', 'trustworthy', 'innovative')",
228
- )
229
- tagline: str | None = Field(None, description="Brand tagline or slogan")
230
- assets: list[Asset1] | None = Field(
231
- None,
232
- description="Brand asset library with explicit assets and tags. Assets are referenced inline with URLs pointing to CDN-hosted files.",
233
- )
234
- product_catalog: ProductCatalog1 | None = Field(
235
- None,
236
- description="Product catalog information for e-commerce advertisers. Enables SKU-level creative generation and product selection.",
237
- )
238
- disclaimers: list[Disclaimer] | None = Field(
239
- None, description="Legal disclaimers or required text that must appear in creatives"
240
- )
241
- industry: str | None = Field(
242
- None,
243
- description="Industry or vertical (e.g., 'retail', 'automotive', 'finance', 'healthcare')",
244
- )
245
- target_audience: str | None = Field(None, description="Primary target audience description")
246
- contact: Contact | None = Field(None, description="Brand contact information")
247
- metadata: Metadata | None = Field(None, description="Additional brand metadata")
248
-
249
-
250
- class BrandManifest(RootModel[BrandManifest1 | BrandManifest2]):
251
- root: BrandManifest1 | BrandManifest2 = Field(
252
- ...,
253
- description="Standardized brand information manifest for creative generation and media buying. Enables low-friction creative workflows by providing brand context that can be easily cached and shared across requests.",
254
- examples=[
255
- {
256
- "description": "Example with both URL and name",
257
- "data": {"url": "https://bobsfunburgers.com", "name": "Bob's Fun Burgers"},
258
- },
259
- {
260
- "description": "Example: white-label brand without dedicated URL",
261
- "data": {
262
- "name": "Great Value",
263
- "colors": {"primary": "#0071CE", "secondary": "#FFC220"},
264
- "tone": "affordable and trustworthy",
265
- },
266
- },
267
- {
268
- "description": "Full brand manifest with all fields",
269
- "data": {
270
- "url": "https://acmecorp.com",
271
- "name": "ACME Corporation",
272
- "logos": [
273
- {
274
- "url": "https://cdn.acmecorp.com/logo-square-dark.png",
275
- "tags": ["dark", "square"],
276
- "width": 512,
277
- "height": 512,
278
- },
279
- {
280
- "url": "https://cdn.acmecorp.com/logo-horizontal-light.png",
281
- "tags": ["light", "horizontal"],
282
- "width": 1200,
283
- "height": 400,
284
- },
285
- ],
286
- "colors": {
287
- "primary": "#FF6B35",
288
- "secondary": "#004E89",
289
- "accent": "#F7931E",
290
- "background": "#FFFFFF",
291
- "text": "#1A1A1A",
292
- },
293
- "fonts": {"primary": "Helvetica Neue", "secondary": "Georgia"},
294
- "tone": "professional and trustworthy",
295
- "tagline": "Innovation You Can Trust",
296
- "assets": [
297
- {
298
- "asset_id": "hero_winter_2024",
299
- "asset_type": "image",
300
- "url": "https://cdn.acmecorp.com/hero-winter-2024.jpg",
301
- "tags": ["hero", "winter", "holiday", "lifestyle"],
302
- "name": "Winter Campaign Hero",
303
- "width": 1920,
304
- "height": 1080,
305
- "format": "jpg",
306
- },
307
- {
308
- "asset_id": "product_video_30s",
309
- "asset_type": "video",
310
- "url": "https://cdn.acmecorp.com/product-demo-30s.mp4",
311
- "tags": ["product", "demo", "30s"],
312
- "name": "Product Demo 30 Second",
313
- "width": 1920,
314
- "height": 1080,
315
- "duration_seconds": 30,
316
- "format": "mp4",
317
- },
318
- ],
319
- "product_catalog": {
320
- "feed_url": "https://acmecorp.com/products.xml",
321
- "feed_format": "google_merchant_center",
322
- "categories": ["electronics/computers", "electronics/accessories"],
323
- "last_updated": "2024-03-15T10:00:00Z",
324
- "update_frequency": "hourly",
325
- },
326
- "disclaimers": [
327
- {
328
- "text": "Results may vary. Consult a professional before use.",
329
- "context": "health_claims",
330
- "required": True,
331
- }
332
- ],
333
- "industry": "technology",
334
- "target_audience": "business decision-makers aged 35-55",
335
- },
336
- },
337
- ],
338
- title="Brand Manifest",
339
- )
340
-
341
-
342
- class BrandManifestReference(RootModel[BrandManifest | AnyUrl]):
343
- root: BrandManifest | AnyUrl = Field(
344
- ...,
345
- description="Brand manifest provided either as an inline object or a URL string pointing to a hosted manifest",
346
- examples=[
347
- {
348
- "description": "Inline brand manifest",
349
- "data": {
350
- "url": "https://acmecorp.com",
351
- "name": "ACME Corporation",
352
- "colors": {"primary": "#FF6B35"},
353
- },
354
- },
355
- {
356
- "description": "URL string reference to hosted manifest",
357
- "data": "https://cdn.acmecorp.com/brand-manifest.json",
358
- },
359
- ],
360
- title="Brand Manifest Reference",
361
- )
@@ -1,17 +0,0 @@
1
- # generated by datamodel-codegen:
2
- # filename: json
3
- # timestamp: 2025-11-15T17:40:38+00:00
4
-
5
- from __future__ import annotations
6
-
7
- from typing import Any
8
-
9
- from pydantic import Field, RootModel
10
-
11
-
12
- class AdcpAssetTypeRegistry(RootModel[Any]):
13
- root: Any = Field(
14
- ...,
15
- description="Registry of asset types used in AdCP creative manifests. Each asset type defines the structure of actual content payloads (what you send), not requirements or constraints (which belong in format specifications).",
16
- title="AdCP Asset Type Registry",
17
- )