From fe60862395020d5e636f489b8ab98595c632c2d8 Mon Sep 17 00:00:00 2001 From: Brian O'Kelley Date: Sun, 22 Feb 2026 20:30:52 -0500 Subject: [PATCH 1/5] feat: sync upstream schemas and add get_media_buys API - Sync 305 schemas from adcontextprotocol.org, including new get-media-buys-request/response schemas and updates to catalog, media-buy, package, pricing-option, and protocol schemas - Add CatalogType.app enum value from upstream schema update - Add GetMediaBuysRequest/GetMediaBuysResponse generated types - Implement get_media_buys on ProtocolAdapter (abstract), A2AAdapter, MCPAdapter, and ADCPClient - Export GetMediaBuysRequest/GetMediaBuysResponse from adcp.types and the top-level adcp package - Add response deserialization test and public API export test Co-Authored-By: Claude Sonnet 4.6 --- schemas/cache/.hashes.json | 48 +- schemas/cache/core/catalog.json | 17 +- schemas/cache/core/media-buy.json | 17 +- schemas/cache/core/package.json | 15 +- schemas/cache/core/pricing-option.json | 21 +- .../creative/creative-feature-result.json | 64 +++ .../get-creative-features-request.json | 31 ++ .../get-creative-features-response.json | 65 +++ schemas/cache/enums/catalog-type.json | 4 +- schemas/cache/enums/content-id-type.json | 4 +- .../cache/enums/creative-approval-status.json | 17 + schemas/cache/enums/universal-macro.json | 4 +- schemas/cache/extensions/index.json | 2 +- .../media-buy/create-media-buy-request.json | 23 +- .../media-buy/create-media-buy-response.json | 23 +- .../get-media-buy-delivery-response.json | 34 +- .../media-buy/get-media-buys-request.json | 60 ++ .../media-buy/get-media-buys-response.json | 265 +++++++++ .../cache/media-buy/get-products-request.json | 17 +- schemas/cache/media-buy/package-request.json | 19 +- schemas/cache/media-buy/package-update.json | 17 +- schemas/cache/pricing-options/cpc-option.json | 8 +- .../cache/pricing-options/cpcv-option.json | 8 +- schemas/cache/pricing-options/cpm-option.json | 8 +- schemas/cache/pricing-options/cpv-option.json | 8 +- .../cache/pricing-options/vcpm-option.json | 8 +- .../get-adcp-capabilities-response.json | 87 ++- scripts/consolidate_exports.py | 1 + src/adcp/__init__.py | 4 + src/adcp/client.py | 44 ++ src/adcp/protocols/a2a.py | 4 + src/adcp/protocols/base.py | 5 + src/adcp/protocols/mcp.py | 4 + src/adcp/registry.py | 30 +- src/adcp/server/base.py | 4 +- src/adcp/server/sponsored_intelligence.py | 8 +- src/adcp/types/__init__.py | 4 + src/adcp/types/_generated.py | 32 +- .../types/generated_poc/a2ui/component.py | 8 +- src/adcp/types/generated_poc/a2ui/surface.py | 14 +- .../account/list_accounts_request.py | 16 +- .../account/list_accounts_response.py | 6 +- .../account/sync_accounts_request.py | 26 +- .../account/sync_accounts_response.py | 144 ++--- src/adcp/types/generated_poc/adagents.py | 512 ++++++++--------- src/adcp/types/generated_poc/brand.py | 524 +++++++++--------- .../content_standards/artifact.py | 138 ++--- .../artifact_webhook_payload.py | 26 +- .../calibrate_content_request.py | 4 +- .../calibrate_content_response.py | 34 +- .../content_standards/content_standards.py | 16 +- .../create_content_standards_request.py | 26 +- .../create_content_standards_response.py | 12 +- .../get_content_standards_request.py | 2 +- .../get_content_standards_response.py | 8 +- .../get_media_buy_artifacts_request.py | 34 +- .../get_media_buy_artifacts_response.py | 54 +- .../list_content_standards_request.py | 8 +- .../list_content_standards_response.py | 10 +- .../update_content_standards_request.py | 28 +- .../update_content_standards_response.py | 8 +- .../validate_content_delivery_request.py | 26 +- .../validate_content_delivery_response.py | 32 +- src/adcp/types/generated_poc/core/account.py | 48 +- .../generated_poc/core/activation_key.py | 16 +- .../generated_poc/core/assets/audio_asset.py | 34 +- .../generated_poc/core/assets/css_asset.py | 4 +- .../generated_poc/core/assets/daast_asset.py | 40 +- .../generated_poc/core/assets/html_asset.py | 14 +- .../generated_poc/core/assets/image_asset.py | 12 +- .../core/assets/javascript_asset.py | 16 +- .../core/assets/markdown_asset.py | 8 +- .../generated_poc/core/assets/text_asset.py | 4 +- .../generated_poc/core/assets/url_asset.py | 6 +- .../generated_poc/core/assets/vast_asset.py | 44 +- .../generated_poc/core/assets/video_asset.py | 106 ++-- .../core/assets/webhook_asset.py | 18 +- .../generated_poc/core/async_response_data.py | 4 +- .../generated_poc/core/attribution_window.py | 8 +- .../generated_poc/core/audience_member.py | 46 +- src/adcp/types/generated_poc/core/brand_id.py | 8 +- .../types/generated_poc/core/brand_ref.py | 6 +- src/adcp/types/generated_poc/core/catalog.py | 18 +- .../types/generated_poc/core/catchment.py | 102 ++-- src/adcp/types/generated_poc/core/context.py | 2 +- .../generated_poc/core/creative_asset.py | 26 +- .../generated_poc/core/creative_assignment.py | 6 +- .../generated_poc/core/creative_brief.py | 34 +- .../generated_poc/core/creative_brief_ref.py | 24 +- .../generated_poc/core/creative_filters.py | 34 +- .../generated_poc/core/creative_manifest.py | 4 +- .../generated_poc/core/creative_policy.py | 8 +- .../generated_poc/core/creative_variant.py | 16 +- .../core/data_provider_signal_selector.py | 30 +- .../generated_poc/core/daypart_target.py | 8 +- .../generated_poc/core/delivery_forecast.py | 20 +- .../generated_poc/core/delivery_metrics.py | 112 ++-- .../types/generated_poc/core/deployment.py | 40 +- .../types/generated_poc/core/destination.py | 22 +- .../generated_poc/core/destination_item.py | 44 +- .../generated_poc/core/education_item.py | 48 +- src/adcp/types/generated_poc/core/error.py | 12 +- src/adcp/types/generated_poc/core/event.py | 14 +- .../generated_poc/core/event_custom_data.py | 28 +- src/adcp/types/generated_poc/core/ext.py | 2 +- .../types/generated_poc/core/flight_item.py | 32 +- .../generated_poc/core/forecast_point.py | 4 +- .../generated_poc/core/forecast_range.py | 8 +- src/adcp/types/generated_poc/core/format.py | 174 +++--- .../types/generated_poc/core/format_id.py | 10 +- .../types/generated_poc/core/frequency_cap.py | 4 +- .../types/generated_poc/core/hotel_item.py | 40 +- .../types/generated_poc/core/identifier.py | 4 +- src/adcp/types/generated_poc/core/job_item.py | 58 +- .../generated_poc/core/mcp_webhook_payload.py | 20 +- .../types/generated_poc/core/measurement.py | 16 +- .../types/generated_poc/core/media_buy.py | 24 +- .../generated_poc/core/media_buy_features.py | 14 +- src/adcp/types/generated_poc/core/offering.py | 32 +- .../core/offering_asset_group.py | 6 +- .../generated_poc/core/optimization_goal.py | 12 +- src/adcp/types/generated_poc/core/package.py | 18 +- .../generated_poc/core/pagination_request.py | 6 +- .../generated_poc/core/pagination_response.py | 8 +- .../core/performance_feedback.py | 36 +- .../types/generated_poc/core/placement.py | 8 +- src/adcp/types/generated_poc/core/price.py | 14 +- .../generated_poc/core/pricing_option.py | 6 +- src/adcp/types/generated_poc/core/product.py | 58 +- .../generated_poc/core/product_allocation.py | 14 +- .../generated_poc/core/product_filters.py | 56 +- src/adcp/types/generated_poc/core/property.py | 18 +- .../types/generated_poc/core/property_id.py | 8 +- .../generated_poc/core/property_list_ref.py | 8 +- .../types/generated_poc/core/property_tag.py | 8 +- src/adcp/types/generated_poc/core/proposal.py | 28 +- .../generated_poc/core/protocol_envelope.py | 16 +- .../core/publisher_property_selector.py | 26 +- .../core/push_notification_config.py | 10 +- .../generated_poc/core/real_estate_item.py | 72 +-- .../generated_poc/core/reference_asset.py | 20 +- .../core/reporting_capabilities.py | 20 +- .../generated_poc/core/reporting_webhook.py | 20 +- .../core/requirements/asset_requirements.py | 4 +- .../requirements/audio_asset_requirements.py | 32 +- .../core/requirements/catalog_requirements.py | 10 +- .../requirements/css_asset_requirements.py | 4 +- .../requirements/daast_asset_requirements.py | 6 +- .../requirements/html_asset_requirements.py | 16 +- .../requirements/image_asset_requirements.py | 36 +- .../javascript_asset_requirements.py | 16 +- .../markdown_asset_requirements.py | 4 +- .../requirements/offering_asset_constraint.py | 12 +- .../requirements/text_asset_requirements.py | 12 +- .../requirements/url_asset_requirements.py | 28 +- .../requirements/vast_asset_requirements.py | 14 +- .../requirements/video_asset_requirements.py | 50 +- .../webhook_asset_requirements.py | 8 +- src/adcp/types/generated_poc/core/response.py | 8 +- .../generated_poc/core/signal_definition.py | 18 +- .../generated_poc/core/signal_filters.py | 10 +- .../types/generated_poc/core/signal_id.py | 20 +- .../generated_poc/core/signal_targeting.py | 28 +- .../types/generated_poc/core/start_timing.py | 6 +- .../types/generated_poc/core/store_item.py | 30 +- .../types/generated_poc/core/sub_asset.py | 28 +- .../types/generated_poc/core/targeting.py | 54 +- .../types/generated_poc/core/user_match.py | 110 ++-- .../types/generated_poc/core/vehicle_item.py | 84 +-- .../creative/creative_feature_result.py | 54 ++ .../creative/get_creative_delivery_request.py | 58 +- .../get_creative_delivery_response.py | 42 +- .../creative/get_creative_features_request.py | 33 ++ .../get_creative_features_response.py | 54 ++ .../creative/list_creative_formats_request.py | 42 +- .../list_creative_formats_response.py | 10 +- .../creative/preview_creative_request.py | 58 +- .../creative/preview_creative_response.py | 76 +-- .../generated_poc/creative/preview_render.py | 50 +- .../generated_poc/enums/action_source.py | 18 +- .../types/generated_poc/enums/adcp_domain.py | 8 +- .../enums/age_verification_method.py | 10 +- .../generated_poc/enums/asset_content_type.py | 24 +- .../generated_poc/enums/attribution_model.py | 10 +- .../types/generated_poc/enums/auth_scheme.py | 4 +- .../generated_poc/enums/available_metric.py | 44 +- .../generated_poc/enums/catalog_action.py | 10 +- .../enums/catalog_item_status.py | 8 +- .../types/generated_poc/enums/catalog_type.py | 27 +- .../types/generated_poc/enums/channels.py | 38 +- .../enums/co_branding_requirement.py | 6 +- .../generated_poc/enums/content_id_type.py | 25 +- .../generated_poc/enums/creative_action.py | 10 +- .../enums/creative_agent_capability.py | 10 +- .../enums/creative_approval_status.py | 13 + .../enums/creative_sort_field.py | 12 +- .../generated_poc/enums/creative_status.py | 10 +- .../enums/daast_tracking_event.py | 22 +- .../generated_poc/enums/daast_version.py | 4 +- .../types/generated_poc/enums/day_of_week.py | 14 +- .../generated_poc/enums/delivery_type.py | 4 +- .../generated_poc/enums/demographic_system.py | 12 +- .../generated_poc/enums/device_platform.py | 24 +- .../generated_poc/enums/dimension_unit.py | 8 +- .../generated_poc/enums/distance_unit.py | 6 +- .../types/generated_poc/enums/event_type.py | 56 +- .../types/generated_poc/enums/feed_format.py | 10 +- .../generated_poc/enums/feedback_source.py | 8 +- .../generated_poc/enums/forecast_method.py | 6 +- .../enums/forecast_range_unit.py | 12 +- .../enums/forecastable_metric.py | 18 +- .../generated_poc/enums/format_category.py | 14 +- .../enums/format_id_parameter.py | 4 +- .../enums/frequency_cap_scope.py | 6 +- .../types/generated_poc/enums/geo_level.py | 8 +- .../generated_poc/enums/history_entry_type.py | 4 +- .../types/generated_poc/enums/http_method.py | 4 +- .../generated_poc/enums/identifier_types.py | 38 +- .../enums/javascript_module_type.py | 6 +- .../enums/landing_page_requirement.py | 6 +- .../generated_poc/enums/markdown_flavor.py | 4 +- .../generated_poc/enums/media_buy_status.py | 8 +- .../types/generated_poc/enums/metric_type.py | 16 +- .../types/generated_poc/enums/metro_system.py | 10 +- .../generated_poc/enums/notification_type.py | 8 +- src/adcp/types/generated_poc/enums/pacing.py | 6 +- .../generated_poc/enums/postal_system.py | 18 +- .../enums/preview_output_format.py | 4 +- .../generated_poc/enums/pricing_model.py | 18 +- .../generated_poc/enums/property_type.py | 16 +- .../enums/publisher_identifier_types.py | 10 +- .../types/generated_poc/enums/reach_unit.py | 12 +- .../enums/reporting_frequency.py | 6 +- .../enums/signal_catalog_type.py | 6 +- .../generated_poc/enums/signal_source.py | 4 +- .../generated_poc/enums/signal_value_type.py | 6 +- .../generated_poc/enums/sort_direction.py | 4 +- .../types/generated_poc/enums/task_status.py | 18 +- .../types/generated_poc/enums/task_type.py | 32 +- .../generated_poc/enums/transport_mode.py | 8 +- .../types/generated_poc/enums/uid_type.py | 16 +- .../generated_poc/enums/universal_macro.py | 137 ++--- .../generated_poc/enums/update_frequency.py | 8 +- .../generated_poc/enums/url_asset_type.py | 6 +- .../generated_poc/enums/validation_mode.py | 4 +- .../enums/vast_tracking_event.py | 32 +- .../types/generated_poc/enums/vast_version.py | 10 +- .../types/generated_poc/enums/wcag_level.py | 6 +- .../enums/webhook_response_type.py | 8 +- .../enums/webhook_security_method.py | 6 +- .../extensions/extension_meta.py | 22 +- .../media_buy/build_creative_request.py | 12 +- .../media_buy/build_creative_response.py | 14 +- ...media_buy_async_response_input_required.py | 10 +- ...eate_media_buy_async_response_submitted.py | 2 +- ...create_media_buy_async_response_working.py | 10 +- .../media_buy/create_media_buy_request.py | 46 +- .../media_buy/create_media_buy_response.py | 24 +- .../get_media_buy_delivery_request.py | 16 +- .../get_media_buy_delivery_response.py | 149 ++--- .../media_buy/get_media_buys_request.py | 68 +++ .../media_buy/get_media_buys_response.py | 250 +++++++++ ..._products_async_response_input_required.py | 12 +- .../get_products_async_response_submitted.py | 4 +- .../get_products_async_response_working.py | 8 +- .../media_buy/get_products_request.py | 14 +- .../media_buy/get_products_response.py | 14 +- .../list_creative_formats_request.py | 20 +- .../list_creative_formats_response.py | 12 +- .../media_buy/list_creatives_request.py | 38 +- .../media_buy/list_creatives_response.py | 92 +-- .../media_buy/log_event_request.py | 6 +- .../media_buy/log_event_response.py | 30 +- .../media_buy/package_request.py | 20 +- .../generated_poc/media_buy/package_update.py | 38 +- .../provide_performance_feedback_request.py | 38 +- .../provide_performance_feedback_response.py | 14 +- .../media_buy/sync_audiences_request.py | 28 +- .../media_buy/sync_audiences_response.py | 40 +- ..._catalogs_async_response_input_required.py | 12 +- .../sync_catalogs_async_response_submitted.py | 2 +- .../sync_catalogs_async_response_working.py | 16 +- .../media_buy/sync_catalogs_request.py | 14 +- .../media_buy/sync_catalogs_response.py | 46 +- ...creatives_async_response_input_required.py | 10 +- ...sync_creatives_async_response_submitted.py | 2 +- .../sync_creatives_async_response_working.py | 14 +- .../media_buy/sync_creatives_request.py | 18 +- .../media_buy/sync_creatives_response.py | 36 +- .../media_buy/sync_event_sources_request.py | 18 +- .../media_buy/sync_event_sources_response.py | 56 +- ...media_buy_async_response_input_required.py | 8 +- ...date_media_buy_async_response_submitted.py | 2 +- ...update_media_buy_async_response_working.py | 10 +- .../media_buy/update_media_buy_request.py | 28 +- .../media_buy/update_media_buy_response.py | 16 +- .../pricing_options/cpa_option.py | 20 +- .../pricing_options/cpc_option.py | 28 +- .../pricing_options/cpcv_option.py | 28 +- .../pricing_options/cpm_option.py | 28 +- .../pricing_options/cpp_option.py | 30 +- .../pricing_options/cpv_option.py | 38 +- .../pricing_options/flat_rate_option.py | 38 +- .../pricing_options/price_guidance.py | 10 +- .../pricing_options/time_option.py | 40 +- .../pricing_options/vcpm_option.py | 28 +- .../property/base_property_source.py | 30 +- .../property/create_property_list_request.py | 8 +- .../property/create_property_list_response.py | 6 +- .../property/delete_property_list_request.py | 4 +- .../property/delete_property_list_response.py | 6 +- .../property/feature_requirement.py | 14 +- .../property/get_property_list_request.py | 14 +- .../property/get_property_list_response.py | 10 +- .../property/list_property_lists_request.py | 6 +- .../property/list_property_lists_response.py | 4 +- .../generated_poc/property/property_error.py | 20 +- .../property/property_feature.py | 8 +- .../property/property_feature_definition.py | 36 +- .../generated_poc/property/property_list.py | 22 +- .../property/property_list_changed_webhook.py | 22 +- .../property/property_list_filters.py | 14 +- .../property/update_property_list_request.py | 16 +- .../property/update_property_list_response.py | 4 +- .../protocol/get_adcp_capabilities_request.py | 14 +- .../get_adcp_capabilities_response.py | 228 ++++---- .../signals/activate_signal_request.py | 6 +- .../signals/activate_signal_response.py | 14 +- .../signals/get_signals_request.py | 28 +- .../signals/get_signals_response.py | 30 +- .../sponsored_intelligence/si_capabilities.py | 66 +-- .../si_get_offering_request.py | 8 +- .../si_get_offering_response.py | 46 +- .../sponsored_intelligence/si_identity.py | 32 +- .../si_initiate_session_request.py | 10 +- .../si_initiate_session_response.py | 14 +- .../si_send_message_request.py | 22 +- .../si_send_message_response.py | 48 +- .../si_terminate_session_request.py | 34 +- .../si_terminate_session_response.py | 30 +- .../sponsored_intelligence/si_ui_element.py | 22 +- tests/test_catalog_types.py | 1 + tests/test_client.py | 56 ++ tests/test_public_api.py | 2 + tests/test_registry.py | 32 +- tests/test_server_framework.py | 1 - tests/test_type_aliases.py | 6 +- 347 files changed, 5426 insertions(+), 4150 deletions(-) create mode 100644 schemas/cache/creative/creative-feature-result.json create mode 100644 schemas/cache/creative/get-creative-features-request.json create mode 100644 schemas/cache/creative/get-creative-features-response.json create mode 100644 schemas/cache/enums/creative-approval-status.json create mode 100644 schemas/cache/media-buy/get-media-buys-request.json create mode 100644 schemas/cache/media-buy/get-media-buys-response.json create mode 100644 src/adcp/types/generated_poc/creative/creative_feature_result.py create mode 100644 src/adcp/types/generated_poc/creative/get_creative_features_request.py create mode 100644 src/adcp/types/generated_poc/creative/get_creative_features_response.py create mode 100644 src/adcp/types/generated_poc/enums/creative_approval_status.py create mode 100644 src/adcp/types/generated_poc/media_buy/get_media_buys_request.py create mode 100644 src/adcp/types/generated_poc/media_buy/get_media_buys_response.py diff --git a/schemas/cache/.hashes.json b/schemas/cache/.hashes.json index 0555ecd6..99c3288c 100644 --- a/schemas/cache/.hashes.json +++ b/schemas/cache/.hashes.json @@ -1,5 +1,5 @@ { - "https://adcontextprotocol.org/schemas/latest/index.json": "f7b0fae36cbcf271fbe3835dace95cb5d723e331dfa94a7553dc8fbf3ca4fb3a", + "https://adcontextprotocol.org/schemas/latest/index.json": "88911c3318d8fe1f481f157efadbe4e72ea97d7d42c97945bca00f98070c9468", "https://adcontextprotocol.org/schemas/latest/a2ui/component.json": "1ff7f295b03519313584895022e5add7556d275f99333a987301e11c9ccfb3bd", "https://adcontextprotocol.org/schemas/latest/a2ui/surface.json": "7bd19b850a819c6e25f55f37645eeb92a479ece0050ad826fd7f2fbb979ce80c", "https://adcontextprotocol.org/schemas/latest/account/list-accounts-request.json": "194c59385bbc6e63edbebef814a69bd3167c14a3b172c1f6357327eb92eb4317", @@ -44,7 +44,7 @@ "https://adcontextprotocol.org/schemas/latest/core/audience-member.json": "c9915205b547039c423c61b94d5755e511b1a12870906e722df7b66e6bf06b35", "https://adcontextprotocol.org/schemas/latest/core/brand-id.json": "dbfc3c2aed4d16ecbba3204200948437a2bb3c0b68c0117c3a8c93f3c0700d25", "https://adcontextprotocol.org/schemas/latest/core/brand-ref.json": "b97b4c6a2c337078893cf4da6859e3ad4e14a950f643e306d9b308de4bc60ca3", - "https://adcontextprotocol.org/schemas/latest/core/catalog.json": "550ef1a6dc0539730c16b0d1c5ecca505663bc6035849634f64b68756603005a", + "https://adcontextprotocol.org/schemas/latest/core/catalog.json": "bad3a4c7e944bd4d9827c97a643217dcd3fadbe71a8401c983f52f2839a99113", "https://adcontextprotocol.org/schemas/latest/core/catchment.json": "aeba7b29541668df1028013847fb8336a58292d441c483dd9f9b5b744fcb0490", "https://adcontextprotocol.org/schemas/latest/core/context.json": "b5b5de9482d662c1eacfcfdfa53de672a047664e295940cb204f2d822d5eeb31", "https://adcontextprotocol.org/schemas/latest/core/creative-asset.json": "1f0f431d11cdae423835734ba6eb7c002da47a8d8a480c76f84ef3814f0c1d68", @@ -79,17 +79,17 @@ "https://adcontextprotocol.org/schemas/latest/core/mcp-webhook-payload.json": "1dae520cb0c0564f4c647a5fba4cb8383897f28dcf72a2d046986684255f099e", "https://adcontextprotocol.org/schemas/latest/core/measurement.json": "069685e5f69b28598a35e6887a289f82ea830c1d9c0a8c99e621d3c1a96c72fd", "https://adcontextprotocol.org/schemas/latest/core/media-buy-features.json": "57d0728159ee7558fb15a33f9027997f7d2738408f3c87a5954922b5276521be", - "https://adcontextprotocol.org/schemas/latest/core/media-buy.json": "2c5e18a31ff6009f326e853e565b56dd0f244a712fc385add06990ac25107c54", + "https://adcontextprotocol.org/schemas/latest/core/media-buy.json": "d083007c8b8511e44593e98073d8400c517be7bc58a829c9a2da6324cbae2022", "https://adcontextprotocol.org/schemas/latest/core/offering-asset-group.json": "78951ed5a5b5bdaa0333d1bdb80ba7a5349be7059ce740a784cfe82e9e28dec3", "https://adcontextprotocol.org/schemas/latest/core/offering.json": "4f5bda01b6013d1df56ca8d161b9230c13759f6ec3c70ad44e145855b8cc29d3", "https://adcontextprotocol.org/schemas/latest/core/optimization-goal.json": "b07f81fda0a47cb52d6842859e240fbfadd4a41b31316cac0b85163624885401", - "https://adcontextprotocol.org/schemas/latest/core/package.json": "20bae48eb97eb605334f65785b7e78c02928440e9bc5dfaa8024295e4eaf3ee3", + "https://adcontextprotocol.org/schemas/latest/core/package.json": "5d0b5fc8301328c0c663e9840efc3fb296056a6bfaf8077c6a089ffc3ac7b508", "https://adcontextprotocol.org/schemas/latest/core/pagination-request.json": "3cabe1c0ed60e531149578901518e9091e2c2c4345741cc8de37245def768006", "https://adcontextprotocol.org/schemas/latest/core/pagination-response.json": "0279f24bdb2cfefd15d0f4c9faa4b5a59c39f1342ed0edfb8e66d8865b2395b6", "https://adcontextprotocol.org/schemas/latest/core/performance-feedback.json": "63dec657c26dd2702d9051d151d428b97ce8ad427fea8571c571a8eb8f53d99c", "https://adcontextprotocol.org/schemas/latest/core/placement.json": "2b5a7cd544e2ef14d03149b3fc47700ca4559604c5bc0c233bf44e2b2e8b50ca", "https://adcontextprotocol.org/schemas/latest/core/price.json": "30504bd333695fde69a1153e88db19382e3890e69670edfea03a8445a4039bea", - "https://adcontextprotocol.org/schemas/latest/core/pricing-option.json": "1c1591c8fb1a8ec4bf746e220cfdb05b87a058fe98b58600a04062e8cd1c6b18", + "https://adcontextprotocol.org/schemas/latest/core/pricing-option.json": "ffd419298a94a388ead73e5ca27fb981ed2865125c1b3a8f05dbedc0623b0590", "https://adcontextprotocol.org/schemas/latest/core/product-allocation.json": "839db85911a6223fa1ddbabae93385de4dd55869800f2b71742dfeaeed676ebc", "https://adcontextprotocol.org/schemas/latest/core/product-filters.json": "8fb007b7e1f9adacd7fda1bf85b39af8b5e8524f15f4a170211a607e3571aa0c", "https://adcontextprotocol.org/schemas/latest/core/product.json": "610741ce3aee286183ad02c1ee64084047102349640ef0eaf5986671b48d0ade", @@ -132,8 +132,11 @@ "https://adcontextprotocol.org/schemas/latest/core/user-match.json": "fe94aac841014b1f203583b0b4b4c736046867b4ff392ce9bd5b8f4625aaa452", "https://adcontextprotocol.org/schemas/latest/core/vehicle-item.json": "7f817c04c8f718cb7d7f1e8753f269102bbceb6a9eaf02e4e39715a508fed282", "https://adcontextprotocol.org/schemas/latest/creative/asset-types/index.json": "2b5d88f8843e5dd469c3ae760193a191c3aefb47359b27daa871337427e7d0b6", + "https://adcontextprotocol.org/schemas/latest/creative/creative-feature-result.json": "e9a6e59fa298cbe145d2a9f72eaa498728e88b5bfaa9f5e3d8789204f11da98d", "https://adcontextprotocol.org/schemas/latest/creative/get-creative-delivery-request.json": "1dfca425f543af3ad29a997725812a605ed10b2fc3b8511fae9bc88e44c40b96", "https://adcontextprotocol.org/schemas/latest/creative/get-creative-delivery-response.json": "ac4acc3a240ccf1197b54bf7aef076366222103b9fc3031fe8022633ce994db3", + "https://adcontextprotocol.org/schemas/latest/creative/get-creative-features-request.json": "66b8a80209f6454ae02b4aeb2ec22ce3266fea85bb8d2728364963d976f4b9db", + "https://adcontextprotocol.org/schemas/latest/creative/get-creative-features-response.json": "91a704047c25cba957488e6ae2ab9b19034c71a1df56430fa7b03867b8be134e", "https://adcontextprotocol.org/schemas/latest/creative/list-creative-formats-request.json": "0f6cae66d4236db5914dd8a20d85137ac1d7b3ddcd3551358a8a4811377e9346", "https://adcontextprotocol.org/schemas/latest/creative/list-creative-formats-response.json": "3b5a07f923bcc243fc81c5f4725627b574b0d534de3b176fd972c2349364428d", "https://adcontextprotocol.org/schemas/latest/creative/preview-creative-request.json": "a84b78ab0930d2ccbc58752ced9288d733b87bcf18ecbb6631d345470318657b", @@ -148,12 +151,13 @@ "https://adcontextprotocol.org/schemas/latest/enums/available-metric.json": "8b598a106359f0a64d9d629ac1b7c149d30456d55df3fe917c9200b177ed6fc6", "https://adcontextprotocol.org/schemas/latest/enums/catalog-action.json": "6926092f0b436ad3b4ca07803fb0105e4ed857c3d18e818f6e1879a0a11b18b6", "https://adcontextprotocol.org/schemas/latest/enums/catalog-item-status.json": "2dc1261063c853b17e0e7391803e92f38dd301664b92381981dc890c88d05044", - "https://adcontextprotocol.org/schemas/latest/enums/catalog-type.json": "3bb2f7fd19fe29794d6f184b6402e59cd1f5939328e97d988051049bf9282374", + "https://adcontextprotocol.org/schemas/latest/enums/catalog-type.json": "b3792d10786ca067b3ee6868e9fe45507200f498bdffc8d6a18ff03039e1dcbc", "https://adcontextprotocol.org/schemas/latest/enums/channels.json": "90cb43e6cca0dfb9f6424768a3a21d5200182eab0e998f50d2f3c91901fa3d22", "https://adcontextprotocol.org/schemas/latest/enums/co-branding-requirement.json": "7d533d01abfc5b134985e4a4611547a8d88601f2ad3dae166d30483433a5af8e", - "https://adcontextprotocol.org/schemas/latest/enums/content-id-type.json": "66496aab5e9a95b48267f8891cdf81142a5ee570f57954ccb7c007ad3dc3bdb0", + "https://adcontextprotocol.org/schemas/latest/enums/content-id-type.json": "1905f7e53b8297d88e052373329716811210190d70148d480a551404f259ea26", "https://adcontextprotocol.org/schemas/latest/enums/creative-action.json": "c8f56831b63d868ecdadb81787fbd9bda85f791387cc04d10a4f3f4774edf591", "https://adcontextprotocol.org/schemas/latest/enums/creative-agent-capability.json": "c107eededf219f2f63e9325ba1c204c08f4bfe05b72ab90d4848308f771a9454", + "https://adcontextprotocol.org/schemas/latest/enums/creative-approval-status.json": "5a4b33ed4532b29a061bca3bc38eec7e259f74ae40670a652fc0f20ce99f0d79", "https://adcontextprotocol.org/schemas/latest/enums/creative-sort-field.json": "adc83644f01b9948aa436c79dc0701d878a876e185adf7808485772fbad5eb28", "https://adcontextprotocol.org/schemas/latest/enums/creative-status.json": "d8c83590a233ec9e605c63ee8fa009bb7fb5b5336092e8bef0386f226cc0a5e3", "https://adcontextprotocol.org/schemas/latest/enums/daast-tracking-event.json": "caec0a9b0852c26a43a41c52312a36007656f7104c5af276d1111dddca9e2041", @@ -200,7 +204,7 @@ "https://adcontextprotocol.org/schemas/latest/enums/task-type.json": "deea623ca8d42186fc6ca09a2a1e4e0493f3c6b9679d36c41a4d291bf9470a3d", "https://adcontextprotocol.org/schemas/latest/enums/transport-mode.json": "de48169f9bc627ee6a41d9f20803f7addd3589659e166ee9a327d58ae26b8a6c", "https://adcontextprotocol.org/schemas/latest/enums/uid-type.json": "9f5a6855a5fa45aa6053e3f1aa43ca87507e966e4fadf9a37e3057070162bb81", - "https://adcontextprotocol.org/schemas/latest/enums/universal-macro.json": "bf3b81966a54c94906c81e59df978e9724607a234c75b7c9eb774aec72d58093", + "https://adcontextprotocol.org/schemas/latest/enums/universal-macro.json": "de56be91b9aa6f2a096c0c8371abe8c7897059d4d2a436a3ff9e51f19796d386", "https://adcontextprotocol.org/schemas/latest/enums/update-frequency.json": "657d0460d5675ddcd7edb4cf92655b56a93cd724ab3c0b4094241ef91ca644c8", "https://adcontextprotocol.org/schemas/latest/enums/url-asset-type.json": "8cb3c557a43a0d5f85cd9c7b83366910c570349c6ab8625583ca66454fc88c03", "https://adcontextprotocol.org/schemas/latest/enums/validation-mode.json": "0df6bb0c18921714d48d26c2813d6fa312c5a671e1a421f9c9f9ca0c0cfa6811", @@ -210,20 +214,22 @@ "https://adcontextprotocol.org/schemas/latest/enums/webhook-response-type.json": "72ba18db0a6fabd814195e895841e4cd6af5b54c4d6a954552c36284da5c4075", "https://adcontextprotocol.org/schemas/latest/enums/webhook-security-method.json": "80c1a7622b750af3bcfd2695569a3b348e42d5c8614378c27a65f8c7374e9165", "https://adcontextprotocol.org/schemas/latest/extensions/extension-meta.json": "96653ac32a37fcab33ba562c62f09af7362c81cca7f95fa181499dd9d3b8eabe", - "https://adcontextprotocol.org/schemas/latest/extensions/index.json": "199be6b88bdadb8de1e6b0ccc145f4e9745417053cfca96a44355b149bcee812", + "https://adcontextprotocol.org/schemas/latest/extensions/index.json": "ed0e69bc6c66456553d31381636a415a2d448e19f233f91fa97567757226edd0", "https://adcontextprotocol.org/schemas/latest/media-buy/build-creative-request.json": "1b4e3f8560e45abb6129f12da0908171c13962eb48b81d0d6d3ec84b07703960", "https://adcontextprotocol.org/schemas/latest/media-buy/build-creative-response.json": "b59144e5ed7a39ad380a070a2f5e5ce3073780debba4cf77eb59e729ffbfbcfc", "https://adcontextprotocol.org/schemas/latest/media-buy/create-media-buy-async-response-input-required.json": "397bb7a973f943bdb2c53b36822c93ecdc815d3e5184a1129cad8648d88f378a", "https://adcontextprotocol.org/schemas/latest/media-buy/create-media-buy-async-response-submitted.json": "7c9502344a561c3aca8752e6d95918444eb905b82413af0c6a8e4782963ce4f2", "https://adcontextprotocol.org/schemas/latest/media-buy/create-media-buy-async-response-working.json": "f8023b1dd59955843ecf2ee3c79a81ca83411ced35daa58a6e7210ad88678e00", - "https://adcontextprotocol.org/schemas/latest/media-buy/create-media-buy-request.json": "2ce76b3f7b45e2cf2a14205b03073d2eda9b82c9e1060fe5040f9726bc47c8e0", - "https://adcontextprotocol.org/schemas/latest/media-buy/create-media-buy-response.json": "d5467e8b2eae4c8ed2e454eedfd9163501c56bb5a3dc2d6e3d9d39d918ef570a", + "https://adcontextprotocol.org/schemas/latest/media-buy/create-media-buy-request.json": "2c4d7d209d92fc4d91c481061e7535a35f2858f28fd9809b22cb562279ff4702", + "https://adcontextprotocol.org/schemas/latest/media-buy/create-media-buy-response.json": "6eeb5eec60d9a8f8dbd1b9d11b1f947de7e4148817b83ec2a6626457626939b9", "https://adcontextprotocol.org/schemas/latest/media-buy/get-media-buy-delivery-request.json": "8ddee92dcb78c2b250ebc9e89bbf21bf9128a6e3884d0fee2fbf38256e33ca12", - "https://adcontextprotocol.org/schemas/latest/media-buy/get-media-buy-delivery-response.json": "642793785b2d2b7fd976d42a81ed45f88045562ae7573f75908da1b6bff5d285", + "https://adcontextprotocol.org/schemas/latest/media-buy/get-media-buy-delivery-response.json": "7dea150b6992b216c211c0eb80328acb7ec77285aa2cad7bd7269928d907978a", + "https://adcontextprotocol.org/schemas/latest/media-buy/get-media-buys-request.json": "1b4a8d743166c14b94f28f2c8d5155fc87f844eff7cd940cc77e05795551d7d6", + "https://adcontextprotocol.org/schemas/latest/media-buy/get-media-buys-response.json": "b73b534a88c19db9aeea91d28486aee6f544593706ab8ae34be5dcd003770568", "https://adcontextprotocol.org/schemas/latest/media-buy/get-products-async-response-input-required.json": "107e27baf08f80a97a0de83a24faaf37cae5c0c3112ba707ff191af1c2ad4ea6", "https://adcontextprotocol.org/schemas/latest/media-buy/get-products-async-response-submitted.json": "f0cbf91c1e1ccc5e2c84739b8ebfbbf73cb4f64d0067847bc3eb19ec1992aa72", "https://adcontextprotocol.org/schemas/latest/media-buy/get-products-async-response-working.json": "62be745552eeaa0aa72fc8a06b0dc89d138264ed5150158f1061cd5043c99dfa", - "https://adcontextprotocol.org/schemas/latest/media-buy/get-products-request.json": "52c366d3fbdc308ff5daeae47fe76334edb6eafc956d16ae11938fbf7318d5c0", + "https://adcontextprotocol.org/schemas/latest/media-buy/get-products-request.json": "2d74f3aebef6162e979d5c928dd15b6809296f36a199c930b6918ef7c53d8bfa", "https://adcontextprotocol.org/schemas/latest/media-buy/get-products-response.json": "e8f124faf28feca72c40d3e72ff9473aab47cf4aa34bc8ba931c06fcb1de99c7", "https://adcontextprotocol.org/schemas/latest/media-buy/list-creative-formats-request.json": "2a90a84dbca91edde787fcbe0416774096d4ea78a7a162dfae01864b83f31c1d", "https://adcontextprotocol.org/schemas/latest/media-buy/list-creative-formats-response.json": "62fe8cb5f240de313dd7d2ca2dad365407abf7899c7c5a4babf9c329e0d69cb9", @@ -231,8 +237,8 @@ "https://adcontextprotocol.org/schemas/latest/media-buy/list-creatives-response.json": "c2b697ae6756b3418aaf01f2e4270a25e70f6ee0e3e57f8ada72a9e1a7da3cd7", "https://adcontextprotocol.org/schemas/latest/media-buy/log-event-request.json": "79f382bc795e81123e01aa570e8c7fb31547f77789edb64edd5f6acc4a2c2756", "https://adcontextprotocol.org/schemas/latest/media-buy/log-event-response.json": "d561a4d0937e98a2e5a871df3ff36fa4b0201960a663661dd1d830d29f154a7c", - "https://adcontextprotocol.org/schemas/latest/media-buy/package-request.json": "054de5ce5280da888416d25b89bb71365e1417f43c7362f24097b01f691bc2ac", - "https://adcontextprotocol.org/schemas/latest/media-buy/package-update.json": "2d175f016736d8ae093a1f32a8ae1defa38544e188969a1f80cfc95fa5dc657a", + "https://adcontextprotocol.org/schemas/latest/media-buy/package-request.json": "dd28f52862a92d6fd51152ffd22272c01706b9fa4090f52db4b19f0848d7cca9", + "https://adcontextprotocol.org/schemas/latest/media-buy/package-update.json": "690290dfebb061d2290d18eea667e475f446750345171880627b975d741f6ab8", "https://adcontextprotocol.org/schemas/latest/media-buy/provide-performance-feedback-request.json": "8fff8a6e58cf2f8dd95e2e1cb53ef1b3c2154991a577547a2f8c75028867a81b", "https://adcontextprotocol.org/schemas/latest/media-buy/provide-performance-feedback-response.json": "679838758bb15e911b6574a28f5a9048de1e8baa067e71052d9d7d430201636b", "https://adcontextprotocol.org/schemas/latest/media-buy/sync-audiences-request.json": "d3960550cd7c8bf90a27912d1e1b7a365915ede412c2045e3542305c346c56ea", @@ -255,15 +261,15 @@ "https://adcontextprotocol.org/schemas/latest/media-buy/update-media-buy-request.json": "818adb8936b04ba9917e80c7e6c23c2e8e00ce417dcdf57636247bce7feb8316", "https://adcontextprotocol.org/schemas/latest/media-buy/update-media-buy-response.json": "94a5dc2b031c552a74c32cdbc9b77920cb0d3f61242a90292f69582b86e72402", "https://adcontextprotocol.org/schemas/latest/pricing-options/cpa-option.json": "2edbea9af419fe4db7d959ac65ef067c0c7dadcb0f32bdcb12ebafa4a041f73f", - "https://adcontextprotocol.org/schemas/latest/pricing-options/cpc-option.json": "13e924180e787edab26249f7016266b6a1ae71496e0da87585e002deaddf2b33", - "https://adcontextprotocol.org/schemas/latest/pricing-options/cpcv-option.json": "7fce666773cd797ca6ab75ebb57ee9ab22936ec84c51ba58d24b81eff55b69e7", - "https://adcontextprotocol.org/schemas/latest/pricing-options/cpm-option.json": "ca572cd34796f5d060c53e51fca5119e636955ca1a50571f5cf7bd34d68c64ad", + "https://adcontextprotocol.org/schemas/latest/pricing-options/cpc-option.json": "30933b4470569e5cb8316071fd4549ce0ab0266af1a29ac06841e003a828b981", + "https://adcontextprotocol.org/schemas/latest/pricing-options/cpcv-option.json": "c093bd8208a4b3b16798392543b8076b617e5588971390afb0fe5980e9b37028", + "https://adcontextprotocol.org/schemas/latest/pricing-options/cpm-option.json": "fb61c11e7815adf35007f23743351bfa05141521598562eabcf1ac147032db7f", "https://adcontextprotocol.org/schemas/latest/pricing-options/cpp-option.json": "95249f8d4119ea7cfe3d4639807809ebcc211e9793783101d47e8f5e6e956f5e", - "https://adcontextprotocol.org/schemas/latest/pricing-options/cpv-option.json": "7a2978d74c44ae584524f914ada3e3d9c0059b92d96fac2d72308ec78461020a", + "https://adcontextprotocol.org/schemas/latest/pricing-options/cpv-option.json": "8b00c8b786e61fae4efc0c20e606c6853cefe065f1ec7ded3ad5f8f35c64f5f7", "https://adcontextprotocol.org/schemas/latest/pricing-options/flat-rate-option.json": "7dff0370a4085006bd4e3ccd5ec743bad647607033712d74d72728d673d40c15", "https://adcontextprotocol.org/schemas/latest/pricing-options/price-guidance.json": "02931d2124fe50a976534e4d51c5f4f248bdc2aae6843abcd37816474a2355c3", "https://adcontextprotocol.org/schemas/latest/pricing-options/time-option.json": "3a8ba2bd4915ee47b352214a43c738ae90ef5396870a9d27f29dc1fc39407ff5", - "https://adcontextprotocol.org/schemas/latest/pricing-options/vcpm-option.json": "0a1e3110e2d921caf8feb4e0461c4177ab51a9f2b9aff3dd424c1d209a4ca80b", + "https://adcontextprotocol.org/schemas/latest/pricing-options/vcpm-option.json": "094fa1f66f24ad759185459c8f7fe5035d156994aad28c812ed43aca748fd525", "https://adcontextprotocol.org/schemas/latest/property/base-property-source.json": "4953f7bae585927f806926fbbac096b1a9f1e08df97ae81071233f6eb96462a0", "https://adcontextprotocol.org/schemas/latest/property/create-property-list-request.json": "a3c96268b9ee47ab2552700c477d8f3372557369516e42cca5ee88554a284aac", "https://adcontextprotocol.org/schemas/latest/property/create-property-list-response.json": "b7ceada500f573191cd0ef9e07817cb35f5e1b2dc1180cb15a231db460ee1655", @@ -283,7 +289,7 @@ "https://adcontextprotocol.org/schemas/latest/property/update-property-list-request.json": "6ca7e3ddfebc4ce89ab2a590d3858b97e1d6da4a57bbdddf498fd30d85d6ec56", "https://adcontextprotocol.org/schemas/latest/property/update-property-list-response.json": "3d5e6ceca2d6273c77bab370725e41b95077deb2f55f37ca62ce440c8353b1ca", "https://adcontextprotocol.org/schemas/latest/protocol/get-adcp-capabilities-request.json": "a93fa59dac256984ea636dbfb01f99d2387ff479bf379b968372787bb0f832c7", - "https://adcontextprotocol.org/schemas/latest/protocol/get-adcp-capabilities-response.json": "6858393a58e796ba581c7b142870e1ca8c19b5d02b54a61ad2d2c1b04c6af78c", + "https://adcontextprotocol.org/schemas/latest/protocol/get-adcp-capabilities-response.json": "98898f4f68b7167dfa4a950e0564cd3eb7508292f886493e0cbda57c054f5e0e", "https://adcontextprotocol.org/schemas/latest/signals/activate-signal-request.json": "5791ed345768830e7e0eaf72d03027384550ccbd79b9acc5ef45c5f34bf705f2", "https://adcontextprotocol.org/schemas/latest/signals/activate-signal-response.json": "e1cd9be827aba98cab9f0de0341bb449b3739ebb9c20caef9a0eb0dbcb087ca2", "https://adcontextprotocol.org/schemas/latest/signals/get-signals-request.json": "9cc79ae0db10f5e4d02f19123e3312f3e57bd6eee4b534f72065ce933e6bfb9e", diff --git a/schemas/cache/core/catalog.json b/schemas/cache/core/catalog.json index 045001c3..06d2e0f2 100644 --- a/schemas/cache/core/catalog.json +++ b/schemas/cache/core/catalog.json @@ -1,7 +1,8 @@ { + "$id": "/schemas/latest/core/catalog.json", "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, - "description": "A typed data feed. Catalogs carry the items, locations, stock levels, or pricing that publishers use to render ads. They can be synced to a platform via sync_catalogs (managed lifecycle with approval), provided inline, or fetched from an external URL. The catalog type determines the item schema and can be structural (offering, product, inventory, store, promotion) or vertical-specific (hotel, flight, job, vehicle, real_estate, education, destination). Selectors (ids, tags, category, query) filter items regardless of sourcing method.", + "description": "A typed data feed. Catalogs carry the items, locations, stock levels, or pricing that publishers use to render ads. They can be synced to a platform via sync_catalogs (managed lifecycle with approval), provided inline, or fetched from an external URL. The catalog type determines the item schema and can be structural (offering, product, inventory, store, promotion) or vertical-specific (hotel, flight, job, vehicle, real_estate, education, destination, app). Selectors (ids, tags, category, query) filter items regardless of sourcing method.", "examples": [ { "data": { @@ -133,20 +134,20 @@ "type": "string" }, "content_id_type": { - "$ref": "../enums/content-id-type.json", + "$ref": "/schemas/latest/enums/content-id-type.json", "description": "Identifier type that the event's content_ids field should be matched against for items in this catalog. For example, 'gtin' means content_ids values are Global Trade Item Numbers, 'sku' means retailer SKUs. Omit when using a custom identifier scheme not listed in the enum." }, "conversion_events": { "description": "Event types that represent conversions for items in this catalog. Declares what events the platform should attribute to catalog items \u2014 e.g., a job catalog converts via submit_application, a product catalog via purchase. The event's content_ids field carries the item IDs that connect back to catalog items. Use content_id_type to declare what identifier type content_ids values represent.", "items": { - "$ref": "../enums/event-type.json" + "$ref": "/schemas/latest/enums/event-type.json" }, "minItems": 1, "type": "array", "uniqueItems": true }, "feed_format": { - "$ref": "../enums/feed-format.json", + "$ref": "/schemas/latest/enums/feed-format.json", "description": "Format of the external feed at url. Required when url points to a non-AdCP feed (e.g., Google Merchant Center XML, Meta Product Catalog). Omit for offering-type catalogs where the feed is native AdCP JSON." }, "gtins": { @@ -167,7 +168,7 @@ "type": "array" }, "items": { - "description": "Inline catalog data. The item schema depends on the catalog type: Offering objects for 'offering', StoreItem for 'store', HotelItem for 'hotel', FlightItem for 'flight', JobItem for 'job', VehicleItem for 'vehicle', RealEstateItem for 'real_estate', EducationItem for 'education', DestinationItem for 'destination', or freeform objects for 'product', 'inventory', and 'promotion'. Mutually exclusive with url \u2014 provide one or the other, not both. Implementations should validate items against the type-specific schema.", + "description": "Inline catalog data. The item schema depends on the catalog type: Offering objects for 'offering', StoreItem for 'store', HotelItem for 'hotel', FlightItem for 'flight', JobItem for 'job', VehicleItem for 'vehicle', RealEstateItem for 'real_estate', EducationItem for 'education', DestinationItem for 'destination', AppItem for 'app', or freeform objects for 'product', 'inventory', and 'promotion'. Mutually exclusive with url \u2014 provide one or the other, not both. Implementations should validate items against the type-specific schema.", "items": { "type": "object" }, @@ -191,11 +192,11 @@ "type": "array" }, "type": { - "$ref": "../enums/catalog-type.json", - "description": "Catalog type. Structural types: 'offering' (AdCP Offering objects), 'product' (ecommerce entries), 'inventory' (stock per location), 'store' (physical locations), 'promotion' (deals and pricing). Vertical types: 'hotel', 'flight', 'job', 'vehicle', 'real_estate', 'education', 'destination' \u2014 each with an industry-specific item schema." + "$ref": "/schemas/latest/enums/catalog-type.json", + "description": "Catalog type. Structural types: 'offering' (AdCP Offering objects), 'product' (ecommerce entries), 'inventory' (stock per location), 'store' (physical locations), 'promotion' (deals and pricing). Vertical types: 'hotel', 'flight', 'job', 'vehicle', 'real_estate', 'education', 'destination', 'app' \u2014 each with an industry-specific item schema." }, "update_frequency": { - "$ref": "../enums/update-frequency.json", + "$ref": "/schemas/latest/enums/update-frequency.json", "description": "How often the platform should re-fetch the feed from url. Only applicable when url is provided. Platforms may use this as a hint for polling schedules." }, "url": { diff --git a/schemas/cache/core/media-buy.json b/schemas/cache/core/media-buy.json index 1b86022c..d3c8ed58 100644 --- a/schemas/cache/core/media-buy.json +++ b/schemas/cache/core/media-buy.json @@ -1,18 +1,19 @@ { + "$id": "/schemas/latest/core/media-buy.json", "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "Represents a purchased advertising campaign", "properties": { "account": { - "$ref": "account.json", + "$ref": "/schemas/latest/core/account.json", "description": "Account billed for this media buy" }, - "buyer_ref": { - "description": "Buyer's reference identifier for this media buy", + "buyer_campaign_ref": { + "description": "Buyer's campaign reference label. Groups related operations under a single campaign for CRM and ad server correlation.", "type": "string" }, - "campaign_ref": { - "description": "Buyer's campaign reference label. Groups related operations under a single campaign for CRM and ad server correlation.", + "buyer_ref": { + "description": "Buyer's reference identifier for this media buy", "type": "string" }, "created_at": { @@ -26,7 +27,7 @@ "type": "string" }, "ext": { - "$ref": "ext.json" + "$ref": "/schemas/latest/core/ext.json" }, "media_buy_id": { "description": "Publisher's unique identifier for the media buy", @@ -35,12 +36,12 @@ "packages": { "description": "Array of packages within this media buy", "items": { - "$ref": "package.json" + "$ref": "/schemas/latest/core/package.json" }, "type": "array" }, "status": { - "$ref": "../enums/media-buy-status.json" + "$ref": "/schemas/latest/enums/media-buy-status.json" }, "total_budget": { "description": "Total budget amount", diff --git a/schemas/cache/core/package.json b/schemas/cache/core/package.json index c62ff8e1..24aab766 100644 --- a/schemas/cache/core/package.json +++ b/schemas/cache/core/package.json @@ -1,10 +1,11 @@ { + "$id": "/schemas/latest/core/package.json", "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "A specific product within a media buy (line item)", "properties": { "bid_price": { - "description": "Bid price for auction-based CPM pricing (present if using cpm-auction-option)", + "description": "Bid price for auction-based pricing. This is the exact bid/price to honor unless the selected pricing option has max_bid=true, in which case bid_price is the buyer's maximum willingness to pay (ceiling).", "minimum": 0, "type": "number" }, @@ -20,17 +21,17 @@ "creative_assignments": { "description": "Creative assets assigned to this package", "items": { - "$ref": "creative-assignment.json" + "$ref": "/schemas/latest/core/creative-assignment.json" }, "type": "array" }, "ext": { - "$ref": "ext.json" + "$ref": "/schemas/latest/core/ext.json" }, "format_ids_to_provide": { "description": "Format IDs that creative assets will be provided for this package", "items": { - "$ref": "format-id.json" + "$ref": "/schemas/latest/core/format-id.json" }, "type": "array" }, @@ -40,10 +41,10 @@ "type": "number" }, "optimization_goal": { - "$ref": "optimization-goal.json" + "$ref": "/schemas/latest/core/optimization-goal.json" }, "pacing": { - "$ref": "../enums/pacing.json" + "$ref": "/schemas/latest/enums/pacing.json" }, "package_id": { "description": "Publisher's unique identifier for the package", @@ -63,7 +64,7 @@ "type": "string" }, "targeting_overlay": { - "$ref": "targeting.json" + "$ref": "/schemas/latest/core/targeting.json" } }, "required": [ diff --git a/schemas/cache/core/pricing-option.json b/schemas/cache/core/pricing-option.json index ee0663a4..bbb5ccf6 100644 --- a/schemas/cache/core/pricing-option.json +++ b/schemas/cache/core/pricing-option.json @@ -1,33 +1,34 @@ { + "$id": "/schemas/latest/core/pricing-option.json", "$schema": "http://json-schema.org/draft-07/schema#", - "description": "A pricing model option offered by a publisher for a product. Discriminated by pricing_model field. If fixed_price is present, it's fixed pricing. If absent, it's auction-based (floor_price and price_guidance optional).", + "description": "A pricing model option offered by a publisher for a product. Discriminated by pricing_model field. If fixed_price is present, it's fixed pricing. If absent, it's auction-based (floor_price and price_guidance optional). Bid-based auction models may also include max_bid as a boolean signal to interpret bid_price as a buyer ceiling instead of an exact honored price.", "oneOf": [ { - "$ref": "../pricing-options/cpm-option.json" + "$ref": "/schemas/latest/pricing-options/cpm-option.json" }, { - "$ref": "../pricing-options/vcpm-option.json" + "$ref": "/schemas/latest/pricing-options/vcpm-option.json" }, { - "$ref": "../pricing-options/cpc-option.json" + "$ref": "/schemas/latest/pricing-options/cpc-option.json" }, { - "$ref": "../pricing-options/cpcv-option.json" + "$ref": "/schemas/latest/pricing-options/cpcv-option.json" }, { - "$ref": "../pricing-options/cpv-option.json" + "$ref": "/schemas/latest/pricing-options/cpv-option.json" }, { - "$ref": "../pricing-options/cpp-option.json" + "$ref": "/schemas/latest/pricing-options/cpp-option.json" }, { - "$ref": "../pricing-options/cpa-option.json" + "$ref": "/schemas/latest/pricing-options/cpa-option.json" }, { - "$ref": "../pricing-options/flat-rate-option.json" + "$ref": "/schemas/latest/pricing-options/flat-rate-option.json" }, { - "$ref": "../pricing-options/time-option.json" + "$ref": "/schemas/latest/pricing-options/time-option.json" } ], "title": "Pricing Option" diff --git a/schemas/cache/creative/creative-feature-result.json b/schemas/cache/creative/creative-feature-result.json new file mode 100644 index 00000000..d0631a3f --- /dev/null +++ b/schemas/cache/creative/creative-feature-result.json @@ -0,0 +1,64 @@ +{ + "$id": "/schemas/latest/creative/creative-feature-result.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "description": "A single feature evaluation result for a creative. Uses the same value structure as property-feature-value (value, confidence, expires_at, etc.).", + "properties": { + "confidence": { + "description": "Confidence score for this value (0-1)", + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "details": { + "additionalProperties": true, + "description": "Additional vendor-specific details about this evaluation", + "type": "object" + }, + "expires_at": { + "description": "When this evaluation expires and should be refreshed", + "format": "date-time", + "type": "string" + }, + "ext": { + "$ref": "/schemas/latest/core/ext.json" + }, + "feature_id": { + "description": "The feature that was evaluated (e.g., 'auto_redirect', 'brand_consistency', 'iab_casinos_gambling')", + "type": "string" + }, + "measured_at": { + "description": "When this feature was evaluated", + "format": "date-time", + "type": "string" + }, + "methodology_version": { + "description": "Version of the methodology used to evaluate this feature", + "type": "string" + }, + "unit": { + "description": "Unit of measurement for quantitative values (e.g., 'percentage', 'score')", + "type": "string" + }, + "value": { + "description": "The feature value. Type depends on feature definition: boolean for binary, number for quantitative, string for categorical.", + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + } + }, + "required": [ + "feature_id", + "value" + ], + "title": "Creative Feature Result", + "type": "object" +} \ No newline at end of file diff --git a/schemas/cache/creative/get-creative-features-request.json b/schemas/cache/creative/get-creative-features-request.json new file mode 100644 index 00000000..b67eb031 --- /dev/null +++ b/schemas/cache/creative/get-creative-features-request.json @@ -0,0 +1,31 @@ +{ + "$id": "/schemas/latest/creative/get-creative-features-request.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "description": "Request payload for get_creative_features task. Evaluates a creative manifest and returns feature values from a creative governance agent.", + "properties": { + "context": { + "$ref": "/schemas/latest/core/context.json" + }, + "creative_manifest": { + "$ref": "/schemas/latest/core/creative-manifest.json", + "description": "The creative manifest to evaluate. Contains format_id and assets." + }, + "ext": { + "$ref": "/schemas/latest/core/ext.json" + }, + "feature_ids": { + "description": "Optional filter to specific features. If omitted, returns all available features.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "creative_manifest" + ], + "title": "Get Creative Features Request", + "type": "object" +} \ No newline at end of file diff --git a/schemas/cache/creative/get-creative-features-response.json b/schemas/cache/creative/get-creative-features-response.json new file mode 100644 index 00000000..25bb6ea2 --- /dev/null +++ b/schemas/cache/creative/get-creative-features-response.json @@ -0,0 +1,65 @@ +{ + "$id": "/schemas/latest/creative/get-creative-features-response.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Response payload for get_creative_features task. Returns feature values for the evaluated creative.", + "oneOf": [ + { + "description": "Success response", + "properties": { + "context": { + "$ref": "/schemas/latest/core/context.json" + }, + "detail_url": { + "description": "URL to the vendor's full assessment report. The vendor controls what information is disclosed and access control.", + "format": "uri", + "type": "string" + }, + "errors": { + "description": "Field must not be present in success response", + "not": {} + }, + "ext": { + "$ref": "/schemas/latest/core/ext.json" + }, + "results": { + "description": "Feature values for the evaluated creative", + "items": { + "$ref": "/schemas/latest/creative/creative-feature-result.json" + }, + "type": "array" + } + }, + "required": [ + "results" + ], + "type": "object" + }, + { + "description": "Error response", + "properties": { + "context": { + "$ref": "/schemas/latest/core/context.json" + }, + "errors": { + "items": { + "$ref": "/schemas/latest/core/error.json" + }, + "type": "array" + }, + "ext": { + "$ref": "/schemas/latest/core/ext.json" + }, + "results": { + "description": "Field must not be present in error response", + "not": {} + } + }, + "required": [ + "errors" + ], + "type": "object" + } + ], + "title": "Get Creative Features Response", + "type": "object" +} \ No newline at end of file diff --git a/schemas/cache/enums/catalog-type.json b/schemas/cache/enums/catalog-type.json index 443e89b5..19e6ae0d 100644 --- a/schemas/cache/enums/catalog-type.json +++ b/schemas/cache/enums/catalog-type.json @@ -1,4 +1,5 @@ { + "$id": "/schemas/latest/enums/catalog-type.json", "$schema": "http://json-schema.org/draft-07/schema#", "description": "The type of catalog feed. Determines the item schema and how the platform resolves catalog items. Multiple catalog types can be synced to the same account and referenced together in creatives.", "enum": [ @@ -13,7 +14,8 @@ "vehicle", "real_estate", "education", - "destination" + "destination", + "app" ], "title": "Catalog Type", "type": "string" diff --git a/schemas/cache/enums/content-id-type.json b/schemas/cache/enums/content-id-type.json index 603b3c77..07e6ff66 100644 --- a/schemas/cache/enums/content-id-type.json +++ b/schemas/cache/enums/content-id-type.json @@ -1,4 +1,5 @@ { + "$id": "/schemas/latest/enums/content-id-type.json", "$schema": "http://json-schema.org/draft-07/schema#", "description": "Identifier type used in content_ids on conversion events to match back to catalog items. Omit when the identifier type is custom or not listed here.", "enum": [ @@ -12,7 +13,8 @@ "listing_id", "store_id", "program_id", - "destination_id" + "destination_id", + "app_id" ], "title": "Content ID Type", "type": "string" diff --git a/schemas/cache/enums/creative-approval-status.json b/schemas/cache/enums/creative-approval-status.json new file mode 100644 index 00000000..7c9d904a --- /dev/null +++ b/schemas/cache/enums/creative-approval-status.json @@ -0,0 +1,17 @@ +{ + "$id": "/schemas/latest/enums/creative-approval-status.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Approval state of a creative on a specific package", + "enum": [ + "pending_review", + "approved", + "rejected" + ], + "enumDescriptions": { + "approved": "Creative has been approved and is eligible for delivery", + "pending_review": "Creative has been submitted and is awaiting platform review", + "rejected": "Creative was rejected by the platform, including change requests; see rejection_reason for required fixes and re-upload via sync_creatives" + }, + "title": "Creative Approval Status", + "type": "string" +} \ No newline at end of file diff --git a/schemas/cache/enums/universal-macro.json b/schemas/cache/enums/universal-macro.json index abca7d47..ee254705 100644 --- a/schemas/cache/enums/universal-macro.json +++ b/schemas/cache/enums/universal-macro.json @@ -69,13 +69,15 @@ "STORE_ID", "PROGRAM_ID", "DESTINATION_ID", - "CREATIVE_VARIANT_ID" + "CREATIVE_VARIANT_ID", + "APP_ITEM_ID" ], "enumDescriptions": { "AD_BREAK_ID": "Unique ad break identifier", "AD_HEIGHT": "Ad slot height in pixels", "AD_WIDTH": "Ad slot width in pixels", "APP_BUNDLE": "App bundle ID (domain or numeric)", + "APP_ITEM_ID": "Mobile app identifier for the catalog item being rendered", "APP_NAME": "Human-readable app name", "AUDIO_DURATION": "Audio content duration in seconds", "AXEM": "AXE contextual metadata (encoded blob)", diff --git a/schemas/cache/extensions/index.json b/schemas/cache/extensions/index.json index a94cd5ee..37486fa9 100644 --- a/schemas/cache/extensions/index.json +++ b/schemas/cache/extensions/index.json @@ -2,7 +2,7 @@ "$id": "/schemas/3.0.0-beta.3/extensions/index.json", "$schema": "http://json-schema.org/draft-07/schema#", "_generated": true, - "_generatedAt": "2026-02-22T01:16:45.943Z", + "_generatedAt": "2026-02-22T23:54:26.139Z", "description": "Auto-generated registry of formal AdCP extensions. Extensions provide typed schemas for vendor-specific or domain-specific data within the ext field. Agents declare which extensions they support in their agent card.", "extensions": {}, "title": "AdCP Extension Registry" diff --git a/schemas/cache/media-buy/create-media-buy-request.json b/schemas/cache/media-buy/create-media-buy-request.json index 69122af7..7e4332ba 100644 --- a/schemas/cache/media-buy/create-media-buy-request.json +++ b/schemas/cache/media-buy/create-media-buy-request.json @@ -1,4 +1,5 @@ { + "$id": "/schemas/latest/media-buy/create-media-buy-request.json", "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "dependencies": { @@ -29,7 +30,7 @@ "schemes": { "description": "Array of authentication schemes. Supported: ['Bearer'] for simple token auth, ['HMAC-SHA256'] for signature verification (recommended for production)", "items": { - "$ref": "../enums/auth-scheme.json" + "$ref": "/schemas/latest/enums/auth-scheme.json" }, "maxItems": 1, "minItems": 1, @@ -83,19 +84,19 @@ "type": "object" }, "brand": { - "$ref": "../core/brand-ref.json", + "$ref": "/schemas/latest/core/brand-ref.json", "description": "Brand reference for this media buy. Resolved to full brand identity at execution time from brand.json or the registry." }, - "buyer_ref": { - "description": "Buyer's reference identifier for this media buy", + "buyer_campaign_ref": { + "description": "Buyer's campaign reference label. Groups related discovery and buy operations under a single campaign for CRM and ad server correlation (e.g., 'NovaDrink_Meals_Q2').", "type": "string" }, - "campaign_ref": { - "description": "Buyer's campaign reference label. Groups related discovery and buy operations under a single campaign for CRM and ad server correlation (e.g., 'NovaDrink_Meals_Q2').", + "buyer_ref": { + "description": "Buyer's reference identifier for this media buy", "type": "string" }, "context": { - "$ref": "../core/context.json" + "$ref": "/schemas/latest/core/context.json" }, "end_time": { "description": "Campaign end date/time in ISO 8601 format", @@ -103,12 +104,12 @@ "type": "string" }, "ext": { - "$ref": "../core/ext.json" + "$ref": "/schemas/latest/core/ext.json" }, "packages": { "description": "Array of package configurations. Required when not using proposal_id. When executing a proposal, this can be omitted and packages will be derived from the proposal's allocations.", "items": { - "$ref": "package-request.json" + "$ref": "/schemas/latest/media-buy/package-request.json" }, "minItems": 1, "type": "array" @@ -122,11 +123,11 @@ "type": "string" }, "reporting_webhook": { - "$ref": "../core/reporting-webhook.json", + "$ref": "/schemas/latest/core/reporting-webhook.json", "description": "Optional webhook configuration for automated reporting delivery" }, "start_time": { - "$ref": "../core/start-timing.json" + "$ref": "/schemas/latest/core/start-timing.json" }, "total_budget": { "additionalProperties": false, diff --git a/schemas/cache/media-buy/create-media-buy-response.json b/schemas/cache/media-buy/create-media-buy-response.json index f4ca9d1e..10473901 100644 --- a/schemas/cache/media-buy/create-media-buy-response.json +++ b/schemas/cache/media-buy/create-media-buy-response.json @@ -1,4 +1,5 @@ { + "$id": "/schemas/latest/media-buy/create-media-buy-response.json", "$schema": "http://json-schema.org/draft-07/schema#", "description": "Response payload for create_media_buy task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - the media buy is either fully created or not created at all.", "oneOf": [ @@ -12,19 +13,19 @@ }, "properties": { "account": { - "$ref": "../core/account.json", + "$ref": "/schemas/latest/core/account.json", "description": "Account billed for this media buy. Includes advertiser, billing proxy (if any), and rate card applied." }, - "buyer_ref": { - "description": "Buyer's reference identifier for this media buy", + "buyer_campaign_ref": { + "description": "Buyer's campaign reference label, echoed from the request", "type": "string" }, - "campaign_ref": { - "description": "Buyer's campaign reference label, echoed from the request", + "buyer_ref": { + "description": "Buyer's reference identifier for this media buy", "type": "string" }, "context": { - "$ref": "../core/context.json" + "$ref": "/schemas/latest/core/context.json" }, "creative_deadline": { "description": "ISO 8601 timestamp for creative upload deadline", @@ -32,7 +33,7 @@ "type": "string" }, "ext": { - "$ref": "../core/ext.json" + "$ref": "/schemas/latest/core/ext.json" }, "media_buy_id": { "description": "Publisher's unique identifier for the created media buy", @@ -41,7 +42,7 @@ "packages": { "description": "Array of created packages with complete state information", "items": { - "$ref": "../core/package.json" + "$ref": "/schemas/latest/core/package.json" }, "type": "array" }, @@ -87,18 +88,18 @@ }, "properties": { "context": { - "$ref": "../core/context.json" + "$ref": "/schemas/latest/core/context.json" }, "errors": { "description": "Array of errors explaining why the operation failed", "items": { - "$ref": "../core/error.json" + "$ref": "/schemas/latest/core/error.json" }, "minItems": 1, "type": "array" }, "ext": { - "$ref": "../core/ext.json" + "$ref": "/schemas/latest/core/ext.json" } }, "required": [ diff --git a/schemas/cache/media-buy/get-media-buy-delivery-response.json b/schemas/cache/media-buy/get-media-buy-delivery-response.json index e713cf10..651defc8 100644 --- a/schemas/cache/media-buy/get-media-buy-delivery-response.json +++ b/schemas/cache/media-buy/get-media-buy-delivery-response.json @@ -1,4 +1,5 @@ { + "$id": "/schemas/latest/media-buy/get-media-buy-delivery-response.json", "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "Response payload for get_media_buy_delivery task", @@ -67,11 +68,11 @@ "type": "object" }, "attribution_window": { - "$ref": "../core/attribution-window.json", + "$ref": "/schemas/latest/core/attribution-window.json", "description": "Attribution methodology and lookback windows used for conversion metrics in this response. All media buys from a single seller share the same attribution methodology. Enables cross-platform comparison (e.g., Amazon 14-day click vs. Criteo 30-day click)." }, "context": { - "$ref": "../core/context.json" + "$ref": "/schemas/latest/core/context.json" }, "currency": { "description": "ISO 4217 currency code", @@ -81,18 +82,22 @@ "errors": { "description": "Task-specific errors and warnings (e.g., missing delivery data, reporting platform issues)", "items": { - "$ref": "../core/error.json" + "$ref": "/schemas/latest/core/error.json" }, "type": "array" }, "ext": { - "$ref": "../core/ext.json" + "$ref": "/schemas/latest/core/ext.json" }, "media_buy_deliveries": { "description": "Array of delivery data for media buys. When used in webhook notifications, may contain multiple media buys aggregated by publisher. When used in get_media_buy_delivery API responses, typically contains requested media buys.", "items": { "additionalProperties": true, "properties": { + "buyer_campaign_ref": { + "description": "Buyer's campaign reference label from create_media_buy.buyer_campaign_ref. Groups related operations under a single campaign for CRM and ad server correlation; may be absent when not provided at creation time.", + "type": "string" + }, "buyer_ref": { "description": "Buyer's reference identifier for this media buy", "type": "string" @@ -102,7 +107,7 @@ "items": { "allOf": [ { - "$ref": "../core/delivery-metrics.json" + "$ref": "/schemas/latest/core/delivery-metrics.json" }, { "properties": { @@ -115,7 +120,7 @@ "items": { "allOf": [ { - "$ref": "../core/delivery-metrics.json" + "$ref": "/schemas/latest/core/delivery-metrics.json" }, { "properties": { @@ -124,7 +129,7 @@ "type": "string" }, "content_id_type": { - "$ref": "../enums/content-id-type.json", + "$ref": "/schemas/latest/enums/content-id-type.json", "description": "Identifier type for this content_id" } }, @@ -144,7 +149,7 @@ "items": { "allOf": [ { - "$ref": "../core/delivery-metrics.json" + "$ref": "/schemas/latest/core/delivery-metrics.json" }, { "properties": { @@ -200,7 +205,7 @@ "type": "boolean" }, "pricing_model": { - "$ref": "../enums/pricing-model.json", + "$ref": "/schemas/latest/enums/pricing-model.json", "description": "The pricing model used for this package (e.g., cpm, cpcv, cpp). Indicates how the package is billed and which metrics are most relevant for optimization." }, "rate": { @@ -222,10 +227,6 @@ }, "type": "array" }, - "campaign_ref": { - "description": "Buyer's campaign reference label. Groups related operations under a single campaign for CRM and ad server correlation.", - "type": "string" - }, "daily_breakdown": { "description": "Day-by-day delivery", "items": { @@ -291,12 +292,13 @@ "type": "string" }, "pricing_model": { - "$ref": "../enums/pricing-model.json", + "$ref": "/schemas/latest/enums/pricing-model.json", "description": "Pricing model used for this media buy" }, "status": { - "description": "Current media buy status. In webhook context, reporting_delayed indicates data temporarily unavailable.", + "description": "Current media buy status. Lifecycle states use the same taxonomy as media-buy-status (`pending_activation`, `active`, `paused`, `completed`). In webhook context, reporting_delayed indicates data temporarily unavailable. `pending` is accepted as a legacy alias for pending_activation.", "enum": [ + "pending_activation", "pending", "active", "paused", @@ -309,7 +311,7 @@ "totals": { "allOf": [ { - "$ref": "../core/delivery-metrics.json" + "$ref": "/schemas/latest/core/delivery-metrics.json" }, { "description": "Aggregate metrics for this media buy across all packages", diff --git a/schemas/cache/media-buy/get-media-buys-request.json b/schemas/cache/media-buy/get-media-buys-request.json new file mode 100644 index 00000000..db3a5a13 --- /dev/null +++ b/schemas/cache/media-buy/get-media-buys-request.json @@ -0,0 +1,60 @@ +{ + "$id": "/schemas/latest/media-buy/get-media-buys-request.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "description": "Request parameters for retrieving media buy status, creative approval state, and optional delivery snapshots", + "properties": { + "account_id": { + "description": "Filter to a specific account. When omitted, returns media buys across all accessible accounts. Optional if the agent has a single account.", + "type": "string" + }, + "buyer_refs": { + "description": "Array of buyer reference IDs to retrieve", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "context": { + "$ref": "/schemas/latest/core/context.json" + }, + "ext": { + "$ref": "/schemas/latest/core/ext.json" + }, + "include_snapshot": { + "default": false, + "description": "When true, include a near-real-time delivery snapshot for each package. Snapshots reflect the latest available entity-level stats from the platform (e.g., updated every ~15 minutes on GAM, ~1 hour on batch-only platforms). The staleness_seconds field on each snapshot indicates data freshness. If a snapshot cannot be returned, package.snapshot_unavailable_reason explains why. Defaults to false.", + "type": "boolean" + }, + "media_buy_ids": { + "description": "Array of publisher media buy IDs to retrieve. When omitted along with buyer_refs, returns a paginated set of accessible media buys matching status_filter.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "pagination": { + "$ref": "/schemas/latest/core/pagination-request.json", + "description": "Cursor-based pagination controls. Strongly recommended when querying broad scopes (for example, all active media buys in an account)." + }, + "status_filter": { + "description": "Filter by status. Can be a single status or array of statuses. Defaults to [\"active\"] only when media_buy_ids and buyer_refs are both omitted. When media_buy_ids or buyer_refs are provided, no implicit status filter is applied.", + "oneOf": [ + { + "$ref": "/schemas/latest/enums/media-buy-status.json" + }, + { + "items": { + "$ref": "/schemas/latest/enums/media-buy-status.json" + }, + "minItems": 1, + "type": "array" + } + ] + } + }, + "title": "Get Media Buys Request", + "type": "object" +} \ No newline at end of file diff --git a/schemas/cache/media-buy/get-media-buys-response.json b/schemas/cache/media-buy/get-media-buys-response.json new file mode 100644 index 00000000..fbe85138 --- /dev/null +++ b/schemas/cache/media-buy/get-media-buys-response.json @@ -0,0 +1,265 @@ +{ + "$id": "/schemas/latest/media-buy/get-media-buys-response.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "description": "Response payload for get_media_buys task. Returns media buy configuration, creative approval state, and optional delivery snapshots.", + "properties": { + "context": { + "$ref": "/schemas/latest/core/context.json" + }, + "errors": { + "description": "Task-specific errors (e.g., media buy not found)", + "items": { + "$ref": "/schemas/latest/core/error.json" + }, + "type": "array" + }, + "ext": { + "$ref": "/schemas/latest/core/ext.json" + }, + "media_buys": { + "description": "Array of media buys with status, creative approval state, and optional delivery snapshots", + "items": { + "additionalProperties": true, + "properties": { + "account": { + "$ref": "/schemas/latest/core/account.json", + "description": "Account billed for this media buy" + }, + "buyer_campaign_ref": { + "description": "Buyer campaign reference label sourced from create_media_buy.buyer_campaign_ref. Groups related operations under a single campaign; may be absent when not provided at creation time.", + "type": "string" + }, + "buyer_ref": { + "description": "Buyer's reference identifier for this media buy", + "type": "string" + }, + "created_at": { + "description": "Creation timestamp", + "format": "date-time", + "type": "string" + }, + "creative_deadline": { + "description": "ISO 8601 timestamp for creative upload deadline", + "format": "date-time", + "type": "string" + }, + "currency": { + "description": "ISO 4217 currency code (e.g., USD, EUR, GBP) for monetary values at this media buy level. total_budget is always denominated in this currency. Package-level fields may override with package.currency.", + "pattern": "^[A-Z]{3}$", + "type": "string" + }, + "ext": { + "$ref": "/schemas/latest/core/ext.json" + }, + "media_buy_id": { + "description": "Publisher's unique identifier for the media buy", + "type": "string" + }, + "packages": { + "description": "Packages within this media buy, augmented with creative approval status and optional delivery snapshots", + "items": { + "additionalProperties": true, + "properties": { + "bid_price": { + "description": "Current bid price for auction-based packages. Denominated in package.currency when present, otherwise media_buy.currency. Relevant for automated price optimization loops.", + "minimum": 0, + "type": "number" + }, + "budget": { + "description": "Package budget amount, denominated in package.currency when present, otherwise media_buy.currency", + "minimum": 0, + "type": "number" + }, + "buyer_ref": { + "description": "Buyer's reference identifier for this package", + "type": "string" + }, + "creative_approvals": { + "description": "Approval status for each creative assigned to this package. Absent when no creatives have been assigned.", + "items": { + "additionalProperties": true, + "properties": { + "approval_status": { + "$ref": "/schemas/latest/enums/creative-approval-status.json" + }, + "creative_id": { + "description": "Creative identifier", + "type": "string" + }, + "rejection_reason": { + "description": "Human-readable explanation of why the creative was rejected. Present only when approval_status is 'rejected'.", + "type": "string" + } + }, + "required": [ + "creative_id", + "approval_status" + ], + "type": "object" + }, + "type": "array" + }, + "currency": { + "description": "ISO 4217 currency code for monetary values at this package level (budget, bid_price, snapshot.spend). When absent, inherit media_buy.currency.", + "pattern": "^[A-Z]{3}$", + "type": "string" + }, + "end_time": { + "description": "ISO 8601 flight end time for this package", + "format": "date-time", + "type": "string" + }, + "ext": { + "$ref": "/schemas/latest/core/ext.json" + }, + "format_ids_pending": { + "description": "Format IDs from the original create_media_buy format_ids_to_provide that have not yet been uploaded via sync_creatives. When empty or absent, all required formats have been provided.", + "items": { + "$ref": "/schemas/latest/core/format-id.json" + }, + "type": "array" + }, + "impressions": { + "description": "Goal impression count for impression-based packages", + "minimum": 0, + "type": "number" + }, + "package_id": { + "description": "Publisher's package identifier", + "type": "string" + }, + "paused": { + "description": "Whether this package is currently paused by the buyer", + "type": "boolean" + }, + "product_id": { + "description": "Product identifier this package is purchased from", + "type": "string" + }, + "snapshot": { + "additionalProperties": true, + "description": "Near-real-time delivery snapshot for this package. Only present when include_snapshot was true in the request. Represents the latest available entity-level stats from the platform \u2014 not billing-grade data.", + "properties": { + "as_of": { + "description": "ISO 8601 timestamp when this snapshot was captured by the platform", + "format": "date-time", + "type": "string" + }, + "clicks": { + "description": "Total clicks since package start (when available)", + "minimum": 0, + "type": "number" + }, + "currency": { + "description": "ISO 4217 currency code for spend in this snapshot. Optional when unchanged from package.currency or media_buy.currency.", + "pattern": "^[A-Z]{3}$", + "type": "string" + }, + "delivery_status": { + "description": "Operational delivery state of this package. 'not_delivering' means the package is within its scheduled flight but has delivered zero impressions for at least one full staleness cycle \u2014 the signal for automated price adjustments or buyer alerts. Implementers must not return 'not_delivering' until at least staleness_seconds have elapsed since package activation.", + "enum": [ + "delivering", + "not_delivering", + "completed", + "budget_exhausted", + "flight_ended", + "goal_met" + ], + "type": "string" + }, + "ext": { + "$ref": "/schemas/latest/core/ext.json", + "description": "Optional extension object for seller-specific snapshot fields." + }, + "impressions": { + "description": "Total impressions delivered since package start", + "minimum": 0, + "type": "number" + }, + "pacing_index": { + "description": "Current delivery pace relative to expected (1.0 = on track, <1.0 = behind, >1.0 = ahead). Absent when pacing cannot be determined.", + "minimum": 0, + "type": "number" + }, + "spend": { + "description": "Total spend since package start, denominated in snapshot.currency when present, otherwise package.currency or media_buy.currency", + "minimum": 0, + "type": "number" + }, + "staleness_seconds": { + "description": "Maximum age of this data in seconds. For example, 900 means the data may be up to 15 minutes old. Use this to interpret zero delivery: a value of 900 means zero impressions is likely real; a value of 14400 means reporting may still be catching up.", + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "as_of", + "staleness_seconds", + "impressions", + "spend" + ], + "type": "object" + }, + "snapshot_unavailable_reason": { + "description": "Machine-readable reason the snapshot is omitted. Present only when include_snapshot was true and snapshot is unavailable for this package.", + "enum": [ + "SNAPSHOT_UNSUPPORTED", + "SNAPSHOT_TEMPORARILY_UNAVAILABLE", + "SNAPSHOT_PERMISSION_DENIED" + ], + "type": "string" + }, + "start_time": { + "description": "ISO 8601 flight start time for this package. Use to determine whether the package is within its scheduled flight before interpreting delivery status.", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "package_id" + ], + "type": "object" + }, + "type": "array" + }, + "status": { + "$ref": "/schemas/latest/enums/media-buy-status.json" + }, + "total_budget": { + "description": "Total budget amount across all packages, denominated in media_buy.currency", + "minimum": 0, + "type": "number" + }, + "updated_at": { + "description": "Last update timestamp", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "media_buy_id", + "status", + "currency", + "total_budget", + "packages" + ], + "type": "object" + }, + "type": "array" + }, + "pagination": { + "$ref": "/schemas/latest/core/pagination-response.json", + "description": "Pagination metadata for the media_buys array." + }, + "sandbox": { + "description": "When true, this response contains simulated data from sandbox mode.", + "type": "boolean" + } + }, + "required": [ + "media_buys" + ], + "title": "Get Media Buys Response", + "type": "object" +} \ No newline at end of file diff --git a/schemas/cache/media-buy/get-products-request.json b/schemas/cache/media-buy/get-products-request.json index 083e8c4d..468e9bbb 100644 --- a/schemas/cache/media-buy/get-products-request.json +++ b/schemas/cache/media-buy/get-products-request.json @@ -1,4 +1,5 @@ { + "$id": "/schemas/latest/media-buy/get-products-request.json", "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "dependencies": { @@ -13,35 +14,35 @@ "type": "string" }, "brand": { - "$ref": "../core/brand-ref.json", + "$ref": "/schemas/latest/core/brand-ref.json", "description": "Brand reference for product discovery context. Resolved to full brand identity at execution time." }, "brief": { "description": "Natural language description of campaign requirements.", "type": "string" }, - "campaign_ref": { + "buyer_campaign_ref": { "description": "Buyer's campaign reference label. Groups related discovery and buy operations under a single campaign for CRM and ad server correlation (e.g., 'NovaDrink_Meals_Q2').", "type": "string" }, "catalog": { - "$ref": "../core/catalog.json", + "$ref": "/schemas/latest/core/catalog.json", "description": "Catalog of items the buyer wants to promote. The seller matches catalog items against its inventory and returns products where matches exist. Supports all catalog types: a job catalog finds job ad products, a product catalog finds sponsored product slots. Reference a synced catalog by catalog_id, or provide inline items." }, "context": { - "$ref": "../core/context.json" + "$ref": "/schemas/latest/core/context.json" }, "ext": { - "$ref": "../core/ext.json" + "$ref": "/schemas/latest/core/ext.json" }, "filters": { - "$ref": "../core/product-filters.json" + "$ref": "/schemas/latest/core/product-filters.json" }, "pagination": { - "$ref": "../core/pagination-request.json" + "$ref": "/schemas/latest/core/pagination-request.json" }, "property_list": { - "$ref": "../core/property-list-ref.json", + "$ref": "/schemas/latest/core/property-list-ref.json", "description": "[AdCP 3.0] Reference to an externally managed property list. When provided, the sales agent should filter products to only those available on properties in the list." } }, diff --git a/schemas/cache/media-buy/package-request.json b/schemas/cache/media-buy/package-request.json index 6853d424..6d792272 100644 --- a/schemas/cache/media-buy/package-request.json +++ b/schemas/cache/media-buy/package-request.json @@ -1,10 +1,11 @@ { + "$id": "/schemas/latest/media-buy/package-request.json", "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "Package configuration for media buy creation", "properties": { "bid_price": { - "description": "Bid price for auction-based CPM pricing (required if using cpm-auction-option)", + "description": "Bid price for auction-based pricing options. This is the exact bid/price to honor unless selected pricing_option has max_bid=true, in which case bid_price is the buyer's maximum willingness to pay (ceiling).", "minimum": 0, "type": "number" }, @@ -18,13 +19,13 @@ "type": "string" }, "catalog": { - "$ref": "../core/catalog.json", + "$ref": "/schemas/latest/core/catalog.json", "description": "Catalog this package promotes. Makes the package catalog-driven: one budget envelope, platform optimizes across items. Reference a synced catalog by catalog_id with optional selectors to narrow scope." }, "creative_assignments": { "description": "Assign existing library creatives to this package with optional weights and placement targeting", "items": { - "$ref": "../core/creative-assignment.json" + "$ref": "/schemas/latest/core/creative-assignment.json" }, "minItems": 1, "type": "array" @@ -32,19 +33,19 @@ "creatives": { "description": "Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.", "items": { - "$ref": "../core/creative-asset.json" + "$ref": "/schemas/latest/core/creative-asset.json" }, "maxItems": 100, "minItems": 1, "type": "array" }, "ext": { - "$ref": "../core/ext.json" + "$ref": "/schemas/latest/core/ext.json" }, "format_ids": { "description": "Array of format IDs that will be used for this package - must be supported by the product. If omitted, defaults to all formats supported by the product.", "items": { - "$ref": "../core/format-id.json" + "$ref": "/schemas/latest/core/format-id.json" }, "minItems": 1, "type": "array" @@ -55,10 +56,10 @@ "type": "number" }, "optimization_goal": { - "$ref": "../core/optimization-goal.json" + "$ref": "/schemas/latest/core/optimization-goal.json" }, "pacing": { - "$ref": "../enums/pacing.json" + "$ref": "/schemas/latest/enums/pacing.json" }, "paused": { "default": false, @@ -74,7 +75,7 @@ "type": "string" }, "targeting_overlay": { - "$ref": "../core/targeting.json" + "$ref": "/schemas/latest/core/targeting.json" } }, "required": [ diff --git a/schemas/cache/media-buy/package-update.json b/schemas/cache/media-buy/package-update.json index 061df659..462cebaf 100644 --- a/schemas/cache/media-buy/package-update.json +++ b/schemas/cache/media-buy/package-update.json @@ -1,4 +1,5 @@ { + "$id": "/schemas/latest/media-buy/package-update.json", "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "Package update configuration for update_media_buy. Identifies package by package_id or buyer_ref and specifies fields to modify. Fields not present are left unchanged. Note: product_id, format_ids, and pricing_option_id cannot be changed after creation.", @@ -16,7 +17,7 @@ ], "properties": { "bid_price": { - "description": "Updated bid price for auction-based pricing options (only applies when pricing_option is auction-based)", + "description": "Updated bid price for auction-based pricing options. This is the exact bid/price to honor unless selected pricing_option has max_bid=true, in which case bid_price is the buyer's maximum willingness to pay (ceiling).", "minimum": 0, "type": "number" }, @@ -30,27 +31,27 @@ "type": "string" }, "catalog": { - "$ref": "../core/catalog.json", + "$ref": "/schemas/latest/core/catalog.json", "description": "Update the catalog this package promotes. Replaces the current catalog reference." }, "creative_assignments": { "description": "Replace creative assignments for this package with optional weights and placement targeting. Uses replacement semantics - omit to leave assignments unchanged.", "items": { - "$ref": "../core/creative-assignment.json" + "$ref": "/schemas/latest/core/creative-assignment.json" }, "type": "array" }, "creatives": { "description": "Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.", "items": { - "$ref": "../core/creative-asset.json" + "$ref": "/schemas/latest/core/creative-asset.json" }, "maxItems": 100, "minItems": 1, "type": "array" }, "ext": { - "$ref": "../core/ext.json" + "$ref": "/schemas/latest/core/ext.json" }, "impressions": { "description": "Updated impression goal for this package", @@ -58,10 +59,10 @@ "type": "number" }, "optimization_goal": { - "$ref": "../core/optimization-goal.json" + "$ref": "/schemas/latest/core/optimization-goal.json" }, "pacing": { - "$ref": "../enums/pacing.json" + "$ref": "/schemas/latest/enums/pacing.json" }, "package_id": { "description": "Publisher's ID of package to update", @@ -72,7 +73,7 @@ "type": "boolean" }, "targeting_overlay": { - "$ref": "../core/targeting.json" + "$ref": "/schemas/latest/core/targeting.json" } }, "title": "Package Update", diff --git a/schemas/cache/pricing-options/cpc-option.json b/schemas/cache/pricing-options/cpc-option.json index 343f8d97..ed149034 100644 --- a/schemas/cache/pricing-options/cpc-option.json +++ b/schemas/cache/pricing-options/cpc-option.json @@ -1,4 +1,5 @@ { + "$id": "/schemas/latest/pricing-options/cpc-option.json", "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "Cost Per Click pricing. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.", @@ -24,13 +25,18 @@ "minimum": 0, "type": "number" }, + "max_bid": { + "default": false, + "description": "When true, bid_price is interpreted as the buyer's maximum willingness to pay (ceiling) rather than an exact price. Sellers may optimize actual clearing prices between floor_price and bid_price based on delivery pacing. When false or absent, bid_price (if provided) is the exact bid/price to honor.", + "type": "boolean" + }, "min_spend_per_package": { "description": "Minimum spend requirement per package using this pricing option, in the specified currency", "minimum": 0, "type": "number" }, "price_guidance": { - "$ref": "price-guidance.json", + "$ref": "/schemas/latest/pricing-options/price-guidance.json", "description": "Optional pricing guidance for auction-based bidding" }, "pricing_model": { diff --git a/schemas/cache/pricing-options/cpcv-option.json b/schemas/cache/pricing-options/cpcv-option.json index ba780569..0445f1a7 100644 --- a/schemas/cache/pricing-options/cpcv-option.json +++ b/schemas/cache/pricing-options/cpcv-option.json @@ -1,4 +1,5 @@ { + "$id": "/schemas/latest/pricing-options/cpcv-option.json", "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "Cost Per Completed View (100% video/audio completion) pricing. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.", @@ -24,13 +25,18 @@ "minimum": 0, "type": "number" }, + "max_bid": { + "default": false, + "description": "When true, bid_price is interpreted as the buyer's maximum willingness to pay (ceiling) rather than an exact price. Sellers may optimize actual clearing prices between floor_price and bid_price based on delivery pacing. When false or absent, bid_price (if provided) is the exact bid/price to honor.", + "type": "boolean" + }, "min_spend_per_package": { "description": "Minimum spend requirement per package using this pricing option, in the specified currency", "minimum": 0, "type": "number" }, "price_guidance": { - "$ref": "price-guidance.json", + "$ref": "/schemas/latest/pricing-options/price-guidance.json", "description": "Optional pricing guidance for auction-based bidding" }, "pricing_model": { diff --git a/schemas/cache/pricing-options/cpm-option.json b/schemas/cache/pricing-options/cpm-option.json index e0eca2ee..2135d6da 100644 --- a/schemas/cache/pricing-options/cpm-option.json +++ b/schemas/cache/pricing-options/cpm-option.json @@ -1,4 +1,5 @@ { + "$id": "/schemas/latest/pricing-options/cpm-option.json", "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "Cost Per Mille (cost per 1,000 impressions) pricing. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.", @@ -24,13 +25,18 @@ "minimum": 0, "type": "number" }, + "max_bid": { + "default": false, + "description": "When true, bid_price is interpreted as the buyer's maximum willingness to pay (ceiling) rather than an exact price. Sellers may optimize actual clearing prices between floor_price and bid_price based on delivery pacing. When false or absent, bid_price (if provided) is the exact bid/price to honor.", + "type": "boolean" + }, "min_spend_per_package": { "description": "Minimum spend requirement per package using this pricing option, in the specified currency", "minimum": 0, "type": "number" }, "price_guidance": { - "$ref": "price-guidance.json", + "$ref": "/schemas/latest/pricing-options/price-guidance.json", "description": "Optional pricing guidance for auction-based bidding" }, "pricing_model": { diff --git a/schemas/cache/pricing-options/cpv-option.json b/schemas/cache/pricing-options/cpv-option.json index b27d22a7..10b2bb70 100644 --- a/schemas/cache/pricing-options/cpv-option.json +++ b/schemas/cache/pricing-options/cpv-option.json @@ -1,4 +1,5 @@ { + "$id": "/schemas/latest/pricing-options/cpv-option.json", "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "Cost Per View (at publisher-defined threshold) pricing for video/audio. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.", @@ -24,6 +25,11 @@ "minimum": 0, "type": "number" }, + "max_bid": { + "default": false, + "description": "When true, bid_price is interpreted as the buyer's maximum willingness to pay (ceiling) rather than an exact price. Sellers may optimize actual clearing prices between floor_price and bid_price based on delivery pacing. When false or absent, bid_price (if provided) is the exact bid/price to honor.", + "type": "boolean" + }, "min_spend_per_package": { "description": "Minimum spend requirement per package using this pricing option, in the specified currency", "minimum": 0, @@ -65,7 +71,7 @@ "type": "object" }, "price_guidance": { - "$ref": "price-guidance.json", + "$ref": "/schemas/latest/pricing-options/price-guidance.json", "description": "Optional pricing guidance for auction-based bidding" }, "pricing_model": { diff --git a/schemas/cache/pricing-options/vcpm-option.json b/schemas/cache/pricing-options/vcpm-option.json index 65c7fe01..0481dbd4 100644 --- a/schemas/cache/pricing-options/vcpm-option.json +++ b/schemas/cache/pricing-options/vcpm-option.json @@ -1,4 +1,5 @@ { + "$id": "/schemas/latest/pricing-options/vcpm-option.json", "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "Viewable Cost Per Mille (cost per 1,000 viewable impressions) pricing - MRC viewability standard. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.", @@ -24,13 +25,18 @@ "minimum": 0, "type": "number" }, + "max_bid": { + "default": false, + "description": "When true, bid_price is interpreted as the buyer's maximum willingness to pay (ceiling) rather than an exact price. Sellers may optimize actual clearing prices between floor_price and bid_price based on delivery pacing. When false or absent, bid_price (if provided) is the exact bid/price to honor.", + "type": "boolean" + }, "min_spend_per_package": { "description": "Minimum spend requirement per package using this pricing option, in the specified currency", "minimum": 0, "type": "number" }, "price_guidance": { - "$ref": "price-guidance.json", + "$ref": "/schemas/latest/pricing-options/price-guidance.json", "description": "Optional pricing guidance for auction-based bidding" }, "pricing_model": { diff --git a/schemas/cache/protocol/get-adcp-capabilities-response.json b/schemas/cache/protocol/get-adcp-capabilities-response.json index 0d42e8f2..e8a6116d 100644 --- a/schemas/cache/protocol/get-adcp-capabilities-response.json +++ b/schemas/cache/protocol/get-adcp-capabilities-response.json @@ -1,4 +1,5 @@ { + "$id": "/schemas/latest/protocol/get-adcp-capabilities-response.json", "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "Response payload for get_adcp_capabilities task. Protocol-level capability discovery across all AdCP protocols. Each domain protocol has its own capability section.", @@ -68,7 +69,7 @@ "type": "object" }, "context": { - "$ref": "../core/context.json" + "$ref": "/schemas/latest/core/context.json" }, "creative": { "additionalProperties": true, @@ -84,12 +85,12 @@ "errors": { "description": "Task-specific errors and warnings", "items": { - "$ref": "../core/error.json" + "$ref": "/schemas/latest/core/error.json" }, "type": "array" }, "ext": { - "$ref": "../core/ext.json" + "$ref": "/schemas/latest/core/ext.json" }, "extensions_supported": { "description": "Extension namespaces this agent supports. Buyers can expect meaningful data in ext.{namespace} fields on responses from this agent. Extension schemas are published in the AdCP extension registry.", @@ -102,8 +103,68 @@ "uniqueItems": true }, "governance": { - "description": "Governance protocol capabilities. Only present if governance is in supported_protocols. Governance agents provide property data like compliance scores, brand safety ratings, and sustainability metrics.", + "description": "Governance protocol capabilities. Only present if governance is in supported_protocols. Governance agents provide property and creative data like compliance scores, brand safety ratings, sustainability metrics, and creative quality assessments.", "properties": { + "creative_features": { + "description": "Creative features this governance agent can evaluate. Each feature describes a score, rating, or assessment the agent can provide for creatives (e.g., security scanning, creative quality, content categorization).", + "items": { + "properties": { + "categories": { + "description": "For categorical features, the valid values", + "items": { + "type": "string" + }, + "type": "array" + }, + "description": { + "description": "Human-readable description of what this feature measures", + "type": "string" + }, + "feature_id": { + "description": "Unique identifier for this feature (e.g., 'auto_redirect', 'brand_consistency', 'iab_casinos_gambling')", + "type": "string" + }, + "methodology_url": { + "description": "URL to documentation explaining how this feature is calculated or measured.", + "format": "uri", + "type": "string" + }, + "range": { + "description": "For quantitative features, the valid range", + "properties": { + "max": { + "description": "Maximum value", + "type": "number" + }, + "min": { + "description": "Minimum value", + "type": "number" + } + }, + "required": [ + "min", + "max" + ], + "type": "object" + }, + "type": { + "description": "Data type: 'binary' for yes/no, 'quantitative' for numeric scores, 'categorical' for enum values", + "enum": [ + "binary", + "quantitative", + "categorical" + ], + "type": "string" + } + }, + "required": [ + "feature_id", + "type" + ], + "type": "object" + }, + "type": "array" + }, "property_features": { "description": "Property features this governance agent can evaluate. Each feature describes a score, rating, or certification the agent can provide for properties.", "items": { @@ -214,7 +275,7 @@ "supported_uid_types": { "description": "Universal ID types accepted for audience matching (MAIDs, RampID, UID2, etc.). MAID support varies significantly by platform \u2014 check this field before sending uids with type: maid.", "items": { - "$ref": "../enums/uid-type.json" + "$ref": "/schemas/latest/enums/uid-type.json" }, "minItems": 1, "type": "array" @@ -244,7 +305,7 @@ "type": "array" }, "event_type": { - "$ref": "../enums/event-type.json", + "$ref": "/schemas/latest/enums/event-type.json", "description": "Event type this window applies to, or omit for default window" }, "view_through": { @@ -266,7 +327,7 @@ "supported_action_sources": { "description": "Action sources this seller accepts events from", "items": { - "$ref": "../enums/action-source.json" + "$ref": "/schemas/latest/enums/action-source.json" }, "minItems": 1, "type": "array" @@ -274,7 +335,7 @@ "supported_event_types": { "description": "Event types this seller can track and attribute. If omitted, all standard event types are supported.", "items": { - "$ref": "../enums/event-type.json" + "$ref": "/schemas/latest/enums/event-type.json" }, "minItems": 1, "type": "array" @@ -294,7 +355,7 @@ "supported_uid_types": { "description": "Universal ID types accepted for user matching", "items": { - "$ref": "../enums/uid-type.json" + "$ref": "/schemas/latest/enums/uid-type.json" }, "minItems": 1, "type": "array" @@ -356,7 +417,7 @@ "verification_methods": { "description": "Age verification methods this seller supports", "items": { - "$ref": "../enums/age-verification-method.json" + "$ref": "/schemas/latest/enums/age-verification-method.json" }, "type": "array" } @@ -458,7 +519,7 @@ "type": "object" }, "features": { - "$ref": "../core/media-buy-features.json" + "$ref": "/schemas/latest/core/media-buy-features.json" }, "portfolio": { "description": "Information about the seller's media inventory portfolio", @@ -476,7 +537,7 @@ "primary_channels": { "description": "Primary advertising channels in this portfolio", "items": { - "$ref": "../enums/channels.json" + "$ref": "/schemas/latest/enums/channels.json" }, "type": "array" }, @@ -543,7 +604,7 @@ "type": "string" }, "capabilities": { - "$ref": "../sponsored-intelligence/si-capabilities.json", + "$ref": "/schemas/latest/sponsored-intelligence/si-capabilities.json", "description": "Modalities, components, and commerce capabilities" }, "endpoint": { diff --git a/scripts/consolidate_exports.py b/scripts/consolidate_exports.py index 3f716660..20fbd9ec 100644 --- a/scripts/consolidate_exports.py +++ b/scripts/consolidate_exports.py @@ -47,6 +47,7 @@ def extract_exports_from_module(module_path: Path) -> set[str]: def generate_consolidated_exports() -> str: """Generate the consolidated exports file content.""" + # Discover all modules recursively (including subdirectories) # Process enums/ first so canonical enum definitions take priority over inline duplicates def _module_sort_key(p: Path) -> tuple[int, str]: diff --git a/src/adcp/__init__.py b/src/adcp/__init__.py index 19649f73..cdd5c1b4 100644 --- a/src/adcp/__init__.py +++ b/src/adcp/__init__.py @@ -104,6 +104,8 @@ GetCreativeDeliveryResponse, GetMediaBuyDeliveryRequest, GetMediaBuyDeliveryResponse, + GetMediaBuysRequest, + GetMediaBuysResponse, GetProductsRequest, GetProductsResponse, GetSignalsRequest, @@ -319,6 +321,8 @@ def get_adcp_version() -> str: "GetCreativeDeliveryResponse", "GetMediaBuyDeliveryRequest", "GetMediaBuyDeliveryResponse", + "GetMediaBuysRequest", + "GetMediaBuysResponse", "GetProductsRequest", "GetProductsResponse", "UpdateMediaBuyRequest", diff --git a/src/adcp/client.py b/src/adcp/client.py index 3014ebea..ba7b2e29 100644 --- a/src/adcp/client.py +++ b/src/adcp/client.py @@ -30,6 +30,8 @@ GetCreativeDeliveryResponse, GetMediaBuyDeliveryRequest, GetMediaBuyDeliveryResponse, + GetMediaBuysRequest, + GetMediaBuysResponse, GetProductsRequest, GetProductsResponse, GetSignalsRequest, @@ -533,6 +535,47 @@ async def get_media_buy_delivery( return self.adapter._parse_response(raw_result, GetMediaBuyDeliveryResponse) + async def get_media_buys( + self, + request: GetMediaBuysRequest, + ) -> TaskResult[GetMediaBuysResponse]: + """ + Get Media Buys. + + Args: + request: Request parameters + + Returns: + TaskResult containing GetMediaBuysResponse + """ + operation_id = create_operation_id() + params = request.model_dump(exclude_none=True) + + self._emit_activity( + Activity( + type=ActivityType.PROTOCOL_REQUEST, + operation_id=operation_id, + agent_id=self.agent_config.id, + task_type="get_media_buys", + timestamp=datetime.now(timezone.utc).isoformat(), + ) + ) + + raw_result = await self.adapter.get_media_buys(params) + + self._emit_activity( + Activity( + type=ActivityType.PROTOCOL_RESPONSE, + operation_id=operation_id, + agent_id=self.agent_config.id, + task_type="get_media_buys", + status=raw_result.status, + timestamp=datetime.now(timezone.utc).isoformat(), + ) + ) + + return self.adapter._parse_response(raw_result, GetMediaBuysResponse) + async def get_signals( self, request: GetSignalsRequest, @@ -1936,6 +1979,7 @@ def _parse_webhook_result( "create_media_buy": CreateMediaBuyResponse, "update_media_buy": UpdateMediaBuyResponse, "get_media_buy_delivery": GetMediaBuyDeliveryResponse, + "get_media_buys": GetMediaBuysResponse, "get_signals": GetSignalsResponse, "activate_signal": ActivateSignalResponse, "provide_performance_feedback": ProvidePerformanceFeedbackResponse, diff --git a/src/adcp/protocols/a2a.py b/src/adcp/protocols/a2a.py index c6164b7f..6d412000 100644 --- a/src/adcp/protocols/a2a.py +++ b/src/adcp/protocols/a2a.py @@ -433,6 +433,10 @@ async def get_media_buy_delivery(self, params: dict[str, Any]) -> TaskResult[Any """Get media buy delivery.""" return await self._call_a2a_tool("get_media_buy_delivery", params) + async def get_media_buys(self, params: dict[str, Any]) -> TaskResult[Any]: + """Get media buys with status, creative approval state, and optional delivery snapshots.""" + return await self._call_a2a_tool("get_media_buys", params) + async def get_signals(self, params: dict[str, Any]) -> TaskResult[Any]: """Get signals.""" return await self._call_a2a_tool("get_signals", params) diff --git a/src/adcp/protocols/base.py b/src/adcp/protocols/base.py index 07c1f42f..fc95741c 100644 --- a/src/adcp/protocols/base.py +++ b/src/adcp/protocols/base.py @@ -119,6 +119,11 @@ async def get_media_buy_delivery(self, params: dict[str, Any]) -> TaskResult[Any """Get media buy delivery.""" pass + @abstractmethod + async def get_media_buys(self, params: dict[str, Any]) -> TaskResult[Any]: + """Get media buys with status, creative approval state, and optional delivery snapshots.""" + pass + @abstractmethod async def get_signals(self, params: dict[str, Any]) -> TaskResult[Any]: """Get signals.""" diff --git a/src/adcp/protocols/mcp.py b/src/adcp/protocols/mcp.py index 303f350c..3b242f3f 100644 --- a/src/adcp/protocols/mcp.py +++ b/src/adcp/protocols/mcp.py @@ -433,6 +433,10 @@ async def get_media_buy_delivery(self, params: dict[str, Any]) -> TaskResult[Any """Get media buy delivery.""" return await self._call_mcp_tool("get_media_buy_delivery", params) + async def get_media_buys(self, params: dict[str, Any]) -> TaskResult[Any]: + """Get media buys with status, creative approval state, and optional delivery snapshots.""" + return await self._call_mcp_tool("get_media_buys", params) + async def get_signals(self, params: dict[str, Any]) -> TaskResult[Any]: """Get signals.""" return await self._call_mcp_tool("get_signals", params) diff --git a/src/adcp/registry.py b/src/adcp/registry.py index ac77c97d..39fa21e7 100644 --- a/src/adcp/registry.py +++ b/src/adcp/registry.py @@ -112,9 +112,7 @@ async def lookup_brand(self, domain: str) -> ResolvedBrand | None: except (ValidationError, ValueError) as e: raise RegistryError(f"Brand lookup failed: invalid response: {e}") from e - async def lookup_brands( - self, domains: list[str] - ) -> dict[str, ResolvedBrand | None]: + async def lookup_brands(self, domains: list[str]) -> dict[str, ResolvedBrand | None]: """Bulk resolve domains to brand identities. Automatically chunks requests exceeding 100 domains. @@ -132,8 +130,7 @@ async def lookup_brands( return {} chunks = [ - domains[i : i + MAX_BULK_DOMAINS] - for i in range(0, len(domains), MAX_BULK_DOMAINS) + domains[i : i + MAX_BULK_DOMAINS] for i in range(0, len(domains), MAX_BULK_DOMAINS) ] chunk_results = await asyncio.gather( @@ -145,9 +142,7 @@ async def lookup_brands( merged.update(result) return merged - async def _lookup_brands_chunk( - self, domains: list[str] - ) -> dict[str, ResolvedBrand | None]: + async def _lookup_brands_chunk(self, domains: list[str]) -> dict[str, ResolvedBrand | None]: """Resolve a single chunk of brand domains (max 100).""" client = await self._get_client() try: @@ -172,9 +167,7 @@ async def _lookup_brands_chunk( except RegistryError: raise except httpx.TimeoutException as e: - raise RegistryError( - f"Bulk brand lookup timed out after {self._timeout}s" - ) from e + raise RegistryError(f"Bulk brand lookup timed out after {self._timeout}s") from e except httpx.HTTPError as e: raise RegistryError(f"Bulk brand lookup failed: {e}") from e except (ValidationError, ValueError) as e: @@ -214,17 +207,13 @@ async def lookup_property(self, domain: str) -> ResolvedProperty | None: except RegistryError: raise except httpx.TimeoutException as e: - raise RegistryError( - f"Property lookup timed out after {self._timeout}s" - ) from e + raise RegistryError(f"Property lookup timed out after {self._timeout}s") from e except httpx.HTTPError as e: raise RegistryError(f"Property lookup failed: {e}") from e except (ValidationError, ValueError) as e: raise RegistryError(f"Property lookup failed: invalid response: {e}") from e - async def lookup_properties( - self, domains: list[str] - ) -> dict[str, ResolvedProperty | None]: + async def lookup_properties(self, domains: list[str]) -> dict[str, ResolvedProperty | None]: """Bulk resolve publisher domains to property info. Automatically chunks requests exceeding 100 domains. @@ -242,8 +231,7 @@ async def lookup_properties( return {} chunks = [ - domains[i : i + MAX_BULK_DOMAINS] - for i in range(0, len(domains), MAX_BULK_DOMAINS) + domains[i : i + MAX_BULK_DOMAINS] for i in range(0, len(domains), MAX_BULK_DOMAINS) ] chunk_results = await asyncio.gather( @@ -282,9 +270,7 @@ async def _lookup_properties_chunk( except RegistryError: raise except httpx.TimeoutException as e: - raise RegistryError( - f"Bulk property lookup timed out after {self._timeout}s" - ) from e + raise RegistryError(f"Bulk property lookup timed out after {self._timeout}s") from e except httpx.HTTPError as e: raise RegistryError(f"Bulk property lookup failed: {e}") from e except (ValidationError, ValueError) as e: diff --git a/src/adcp/server/base.py b/src/adcp/server/base.py index 0adc94a8..7f6436e7 100644 --- a/src/adcp/server/base.py +++ b/src/adcp/server/base.py @@ -229,9 +229,7 @@ async def sync_accounts( # Event Operations # ======================================================================== - async def log_event( - self, params: dict[str, Any], context: ToolContext | None = None - ) -> Any: + async def log_event(self, params: dict[str, Any], context: ToolContext | None = None) -> Any: """Log event. Override this to provide functionality. diff --git a/src/adcp/server/sponsored_intelligence.py b/src/adcp/server/sponsored_intelligence.py index b5197343..7ef3eb32 100644 --- a/src/adcp/server/sponsored_intelligence.py +++ b/src/adcp/server/sponsored_intelligence.py @@ -335,17 +335,13 @@ async def list_accounts( self, params: dict[str, Any], context: ToolContext | None = None ) -> NotImplementedResponse: """Not supported by Sponsored Intelligence agents.""" - return not_supported( - "list_accounts is not supported by Sponsored Intelligence agents." - ) + return not_supported("list_accounts is not supported by Sponsored Intelligence agents.") async def sync_accounts( self, params: dict[str, Any], context: ToolContext | None = None ) -> NotImplementedResponse: """Not supported by Sponsored Intelligence agents.""" - return not_supported( - "sync_accounts is not supported by Sponsored Intelligence agents." - ) + return not_supported("sync_accounts is not supported by Sponsored Intelligence agents.") async def log_event( self, params: dict[str, Any], context: ToolContext | None = None diff --git a/src/adcp/types/__init__.py b/src/adcp/types/__init__.py index d580c15d..dcf22a3a 100644 --- a/src/adcp/types/__init__.py +++ b/src/adcp/types/__init__.py @@ -146,6 +146,8 @@ GetMediaBuyArtifactsResponse, GetMediaBuyDeliveryRequest, GetMediaBuyDeliveryResponse, + GetMediaBuysRequest, + GetMediaBuysResponse, GetProductsRequest, GetProductsResponse, GetPropertyListRequest, @@ -431,6 +433,8 @@ "DailyBreakdownItem", "GetMediaBuyDeliveryRequest", "GetMediaBuyDeliveryResponse", + "GetMediaBuysRequest", + "GetMediaBuysResponse", "GetProductsRequest", "GetProductsResponse", "GetSignalsRequest", diff --git a/src/adcp/types/_generated.py b/src/adcp/types/_generated.py index ecc44972..afd2aef9 100644 --- a/src/adcp/types/_generated.py +++ b/src/adcp/types/_generated.py @@ -10,7 +10,7 @@ DO NOT EDIT MANUALLY. Generated from: https://github.com/adcontextprotocol/adcp/tree/main/schemas -Generation date: 2026-02-22 01:23:46 UTC +Generation date: 2026-02-23 01:24:08 UTC """ # ruff: noqa: E501, I001 @@ -32,6 +32,7 @@ from adcp.types.generated_poc.enums.content_id_type import ContentIdType from adcp.types.generated_poc.enums.creative_action import CreativeAction from adcp.types.generated_poc.enums.creative_agent_capability import CreativeAgentCapability +from adcp.types.generated_poc.enums.creative_approval_status import CreativeApprovalStatus from adcp.types.generated_poc.enums.creative_sort_field import CreativeSortField from adcp.types.generated_poc.enums.creative_status import CreativeStatus from adcp.types.generated_poc.enums.daast_tracking_event import DaastTrackingEvent @@ -539,6 +540,7 @@ Transmission, VehicleItem, ) +from adcp.types.generated_poc.creative.creative_feature_result import CreativeFeatureResult from adcp.types.generated_poc.creative.get_creative_delivery_request import ( GetCreativeDeliveryRequest, GetCreativeDeliveryRequest1, @@ -550,6 +552,14 @@ GetCreativeDeliveryResponse, ReportingPeriod, ) +from adcp.types.generated_poc.creative.get_creative_features_request import ( + GetCreativeFeaturesRequest, +) +from adcp.types.generated_poc.creative.get_creative_features_response import ( + GetCreativeFeaturesResponse, + GetCreativeFeaturesResponse1, + GetCreativeFeaturesResponse2, +) from adcp.types.generated_poc.creative.list_creative_formats_request import ( AssetType, ListCreativeFormatsRequestCreativeAgent, @@ -632,6 +642,13 @@ MediaBuyDelivery, Totals, ) +from adcp.types.generated_poc.media_buy.get_media_buys_request import GetMediaBuysRequest +from adcp.types.generated_poc.media_buy.get_media_buys_response import ( + CreativeApproval, + GetMediaBuysResponse, + Snapshot, + SnapshotUnavailableReason, +) from adcp.types.generated_poc.media_buy.get_products_async_response_input_required import ( GetProductsInputRequired, ) @@ -814,6 +831,7 @@ from adcp.types.generated_poc.protocol.get_adcp_capabilities_response import ( Adcp, AudienceTargeting, + CreativeFeature, CreativeSpecs, DataProviderDomain, DefaultBilling, @@ -1151,10 +1169,14 @@ class AssetSelectors(_AdCPBaseModel): "CreativeAction", "CreativeAgent", "CreativeAgentCapability", + "CreativeApproval", + "CreativeApprovalStatus", "CreativeAsset", "CreativeAssignment", "CreativeBrief", "CreativeBriefReference", + "CreativeFeature", + "CreativeFeatureResult", "CreativeFilters", "CreativeManifest", "CreativePolicy", @@ -1276,12 +1298,18 @@ class AssetSelectors(_AdCPBaseModel): "GetCreativeDeliveryRequest2", "GetCreativeDeliveryRequest3", "GetCreativeDeliveryResponse", + "GetCreativeFeaturesRequest", + "GetCreativeFeaturesResponse", + "GetCreativeFeaturesResponse1", + "GetCreativeFeaturesResponse2", "GetMediaBuyArtifactsRequest", "GetMediaBuyArtifactsResponse", "GetMediaBuyArtifactsResponse1", "GetMediaBuyArtifactsResponse2", "GetMediaBuyDeliveryRequest", "GetMediaBuyDeliveryResponse", + "GetMediaBuysRequest", + "GetMediaBuysResponse", "GetProductsInputRequired", "GetProductsRequest", "GetProductsResponse", @@ -1530,6 +1558,8 @@ class AssetSelectors(_AdCPBaseModel): "SignalTargeting3", "SignalValueType", "Signals", + "Snapshot", + "SnapshotUnavailableReason", "SnippetType", "Sort", "SortApplied", diff --git a/src/adcp/types/generated_poc/a2ui/component.py b/src/adcp/types/generated_poc/a2ui/component.py index b9d005ca..d09b8fea 100644 --- a/src/adcp/types/generated_poc/a2ui/component.py +++ b/src/adcp/types/generated_poc/a2ui/component.py @@ -12,13 +12,13 @@ class A2UiComponent(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) component: Annotated[ dict[str, dict[str, Any]], - Field(description='Component definition (keyed by component type)'), + Field(description="Component definition (keyed by component type)"), ] - id: Annotated[str, Field(description='Unique identifier for this component within the surface')] + id: Annotated[str, Field(description="Unique identifier for this component within the surface")] parentId: Annotated[ - str | None, Field(description='ID of the parent component (null for root)') + str | None, Field(description="ID of the parent component (null for root)") ] = None diff --git a/src/adcp/types/generated_poc/a2ui/surface.py b/src/adcp/types/generated_poc/a2ui/surface.py index be877e20..8bf98032 100644 --- a/src/adcp/types/generated_poc/a2ui/surface.py +++ b/src/adcp/types/generated_poc/a2ui/surface.py @@ -14,20 +14,20 @@ class A2UiSurface(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) catalogId: Annotated[ - str | None, Field(description='Component catalog to use for rendering') - ] = 'standard' + str | None, Field(description="Component catalog to use for rendering") + ] = "standard" components: Annotated[ list[component.A2UiComponent], - Field(description='Flat list of components (adjacency list structure)'), + Field(description="Flat list of components (adjacency list structure)"), ] dataModel: Annotated[ - dict[str, Any] | None, Field(description='Application data that components can bind to') + dict[str, Any] | None, Field(description="Application data that components can bind to") ] = None rootId: Annotated[ str | None, - Field(description='ID of the root component (if not specified, first component is root)'), + Field(description="ID of the root component (if not specified, first component is root)"), ] = None - surfaceId: Annotated[str, Field(description='Unique identifier for this surface')] + surfaceId: Annotated[str, Field(description="Unique identifier for this surface")] diff --git a/src/adcp/types/generated_poc/account/list_accounts_request.py b/src/adcp/types/generated_poc/account/list_accounts_request.py index d6018ed9..19adb199 100644 --- a/src/adcp/types/generated_poc/account/list_accounts_request.py +++ b/src/adcp/types/generated_poc/account/list_accounts_request.py @@ -16,16 +16,16 @@ class Status(Enum): - active = 'active' - pending_approval = 'pending_approval' - payment_required = 'payment_required' - suspended = 'suspended' - closed = 'closed' + active = "active" + pending_approval = "pending_approval" + payment_required = "payment_required" + suspended = "suspended" + closed = "closed" class ListAccountsRequest(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None @@ -33,10 +33,10 @@ class ListAccountsRequest(AdCPBaseModel): sandbox: Annotated[ bool | None, Field( - description='Filter by sandbox status. true returns only sandbox accounts, false returns only production accounts. Omit to return all accounts.' + description="Filter by sandbox status. true returns only sandbox accounts, false returns only production accounts. Omit to return all accounts." ), ] = None status: Annotated[ Status | None, - Field(description='Filter accounts by status. Omit to return accounts in all statuses.'), + Field(description="Filter accounts by status. Omit to return accounts in all statuses."), ] = None diff --git a/src/adcp/types/generated_poc/account/list_accounts_response.py b/src/adcp/types/generated_poc/account/list_accounts_response.py index e0d6e3f5..7a990832 100644 --- a/src/adcp/types/generated_poc/account/list_accounts_response.py +++ b/src/adcp/types/generated_poc/account/list_accounts_response.py @@ -18,15 +18,15 @@ class ListAccountsResponse(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) accounts: Annotated[ list[account.Account], - Field(description='Array of accounts accessible to the authenticated agent'), + Field(description="Array of accounts accessible to the authenticated agent"), ] context: context_1.ContextObject | None = None errors: Annotated[ - list[error.Error] | None, Field(description='Task-specific errors and warnings') + list[error.Error] | None, Field(description="Task-specific errors and warnings") ] = None ext: ext_1.ExtensionObject | None = None pagination: pagination_response.PaginationResponse | None = None diff --git a/src/adcp/types/generated_poc/account/sync_accounts_request.py b/src/adcp/types/generated_poc/account/sync_accounts_request.py index e5f165b8..0e193f23 100644 --- a/src/adcp/types/generated_poc/account/sync_accounts_request.py +++ b/src/adcp/types/generated_poc/account/sync_accounts_request.py @@ -16,14 +16,14 @@ class Billing(Enum): - brand = 'brand' - operator = 'operator' - agent = 'agent' + brand = "brand" + operator = "operator" + agent = "agent" class Account(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) billing: Annotated[ Billing | None, @@ -35,55 +35,55 @@ class Account(AdCPBaseModel): str | None, Field( description="Brand ID within the house portfolio (from brand.json). Required when the house has multiple brands (e.g., 'dove' under unilever.com, 'tide' under pg.com). Omit for single-brand houses.", - pattern='^[a-z0-9_]+$', + pattern="^[a-z0-9_]+$", ), ] = None house: Annotated[ str, Field( description="House domain where brand.json is hosted (e.g., 'unilever.com', 'acme-corp.com'). This is the canonical identity anchor for the brand, resolved via /.well-known/brand.json. For single-brand houses, this alone identifies the brand.", - pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', + pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", ), ] operator: Annotated[ str | None, Field( description="Domain of the entity operating the seat (e.g., 'groupm.com', 'mindshare.com'). Verified against the brand's authorized_operators in brand.json. Omit if the brand operates its own seat.", - pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', + pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", ), ] = None sandbox: Annotated[ bool | None, Field( - description='When true, provision this as a sandbox account. No real platform calls or billing. Sandbox accounts are identified by account_id in subsequent requests.' + description="When true, provision this as a sandbox account. No real platform calls or billing. Sandbox accounts are identified by account_id in subsequent requests." ), ] = None class SyncAccountsRequest(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) accounts: Annotated[ - list[Account], Field(description='Advertiser accounts to sync', max_length=1000) + list[Account], Field(description="Advertiser accounts to sync", max_length=1000) ] context: context_1.ContextObject | None = None delete_missing: Annotated[ bool | None, Field( - description='When true, accounts previously synced by this agent but not included in this request will be deactivated. Scoped to the authenticated agent — does not affect accounts managed by other agents. Use with caution.' + description="When true, accounts previously synced by this agent but not included in this request will be deactivated. Scoped to the authenticated agent — does not affect accounts managed by other agents. Use with caution." ), ] = False dry_run: Annotated[ bool | None, Field( - description='When true, preview what would change without applying. Returns what would be created/updated/deactivated.' + description="When true, preview what would change without applying. Returns what would be created/updated/deactivated." ), ] = False ext: ext_1.ExtensionObject | None = None push_notification_config: Annotated[ push_notification_config_1.PushNotificationConfig | None, Field( - description='Optional webhook for async notifications when account status changes (e.g., pending_approval transitions to active).' + description="Optional webhook for async notifications when account status changes (e.g., pending_approval transitions to active)." ), ] = None diff --git a/src/adcp/types/generated_poc/account/sync_accounts_response.py b/src/adcp/types/generated_poc/account/sync_accounts_response.py index 30aef366..71a7874b 100644 --- a/src/adcp/types/generated_poc/account/sync_accounts_response.py +++ b/src/adcp/types/generated_poc/account/sync_accounts_response.py @@ -16,50 +16,50 @@ class Action(Enum): - created = 'created' - updated = 'updated' - unchanged = 'unchanged' - failed = 'failed' + created = "created" + updated = "updated" + unchanged = "unchanged" + failed = "failed" class Billing(Enum): - brand = 'brand' - operator = 'operator' - agent = 'agent' + brand = "brand" + operator = "operator" + agent = "agent" class CreditLimit(AdCPBaseModel): amount: Annotated[float, Field(ge=0.0)] - currency: Annotated[str, Field(pattern='^[A-Z]{3}$')] + currency: Annotated[str, Field(pattern="^[A-Z]{3}$")] class Setup(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) expires_at: Annotated[ - AwareDatetime | None, Field(description='When this setup link expires') + AwareDatetime | None, Field(description="When this setup link expires") ] = None message: Annotated[str, Field(description="Human-readable description of what's needed")] url: Annotated[ AnyUrl | None, Field( - description='URL where the human can complete the required action (credit application, legal agreement, add funds)' + description="URL where the human can complete the required action (credit application, legal agreement, add funds)" ), ] = None class Status(Enum): - active = 'active' - pending_approval = 'pending_approval' - payment_required = 'payment_required' - suspended = 'suspended' - closed = 'closed' + active = "active" + pending_approval = "pending_approval" + payment_required = "payment_required" + suspended = "suspended" + closed = "closed" class Account(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) account_id: Annotated[ str | None, @@ -70,7 +70,7 @@ class Account(AdCPBaseModel): action: Annotated[ Action, Field( - description='Action taken for this account. created: new account provisioned. updated: existing account modified. unchanged: no changes needed. failed: could not process (see errors).' + description="Action taken for this account. created: new account provisioned. updated: existing account modified. unchanged: no changes needed. failed: could not process (see errors)." ), ] billing: Annotated[ @@ -82,8 +82,8 @@ class Account(AdCPBaseModel): brand_id: Annotated[ str | None, Field( - description='Brand ID within the house portfolio, echoed from request', - pattern='^[a-z0-9_]+$', + description="Brand ID within the house portfolio, echoed from request", + pattern="^[a-z0-9_]+$", ), ] = None credit_limit: CreditLimit | None = None @@ -94,68 +94,68 @@ class Account(AdCPBaseModel): house: Annotated[ str, Field( - description='House domain, echoed from the request', - pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', + description="House domain, echoed from the request", + pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", ), ] name: Annotated[ - str | None, Field(description='Human-readable account name assigned by the seller') + str | None, Field(description="Human-readable account name assigned by the seller") ] = None - operator: Annotated[str | None, Field(description='Operator domain, echoed from request')] = ( + operator: Annotated[str | None, Field(description="Operator domain, echoed from request")] = ( None ) parent_account_id: Annotated[ str | None, Field( - description='Parent account ID when this account is a sub-account under a shared billing account' + description="Parent account ID when this account is a sub-account under a shared billing account" ), ] = None payment_terms: Annotated[ str | None, Field(description="Payment terms (e.g., 'net_30', 'prepay')") ] = None - rate_card: Annotated[str | None, Field(description='Rate card applied to this account')] = None + rate_card: Annotated[str | None, Field(description="Rate card applied to this account")] = None sandbox: Annotated[ bool | None, - Field(description='Whether this is a sandbox account, echoed from the request.'), + Field(description="Whether this is a sandbox account, echoed from the request."), ] = None setup: Annotated[ Setup | None, Field( - description='Setup information for pending accounts. Provides the agent (or human) with next steps to complete account activation.' + description="Setup information for pending accounts. Provides the agent (or human) with next steps to complete account activation." ), ] = None status: Annotated[ Status, Field( - description='Account status. active: ready for use. pending_approval: seller reviewing (credit, legal). payment_required: credit limit reached or funds depleted. suspended: was active, now paused. closed: terminated.' + description="Account status. active: ready for use. pending_approval: seller reviewing (credit, legal). payment_required: credit limit reached or funds depleted. suspended: was active, now paused. closed: terminated." ), ] warnings: Annotated[ - list[str] | None, Field(description='Non-fatal warnings about this account') + list[str] | None, Field(description="Non-fatal warnings about this account") ] = None class SyncAccountsResponse1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - accounts: Annotated[list[Account], Field(description='Results for each account processed')] + accounts: Annotated[list[Account], Field(description="Results for each account processed")] context: context_1.ContextObject | None = None dry_run: Annotated[ - bool | None, Field(description='Whether this was a dry run (no actual changes made)') + bool | None, Field(description="Whether this was a dry run (no actual changes made)") ] = None ext: ext_1.ExtensionObject | None = None class SyncAccountsResponse2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error], Field( - description='Operation-level errors (e.g., authentication failure, service unavailable)', + description="Operation-level errors (e.g., authentication failure, service unavailable)", min_length=1, ), ] @@ -166,60 +166,60 @@ class SyncAccountsResponse(RootModel[SyncAccountsResponse1 | SyncAccountsRespons root: Annotated[ SyncAccountsResponse1 | SyncAccountsResponse2, Field( - description='Response from account sync operation. Returns per-account results with status and billing, or operation-level errors on complete failure.', + description="Response from account sync operation. Returns per-account results with status and billing, or operation-level errors on complete failure.", examples=[ { - 'data': { - 'accounts': [ + "data": { + "accounts": [ { - 'account_id': 'sub_tide_001', - 'action': 'created', - 'billing': 'agent', - 'brand_id': 'tide', - 'house': 'pg.com', - 'name': 'Tide (via GroupM)', - 'operator': 'groupm.com', - 'parent_account_id': 'acc_agent_house', - 'status': 'active', + "account_id": "sub_tide_001", + "action": "created", + "billing": "agent", + "brand_id": "tide", + "house": "pg.com", + "name": "Tide (via GroupM)", + "operator": "groupm.com", + "parent_account_id": "acc_agent_house", + "status": "active", }, { - 'account_id': 'acc_dove_pending', - 'action': 'created', - 'billing': 'brand', - 'brand_id': 'dove', - 'house': 'unilever.com', - 'name': 'Dove', - 'operator': 'mindshare.com', - 'setup': { - 'expires_at': '2026-03-10T00:00:00Z', - 'message': 'Credit application required for direct billing', - 'url': 'https://seller.com/onboard/dove', + "account_id": "acc_dove_pending", + "action": "created", + "billing": "brand", + "brand_id": "dove", + "house": "unilever.com", + "name": "Dove", + "operator": "mindshare.com", + "setup": { + "expires_at": "2026-03-10T00:00:00Z", + "message": "Credit application required for direct billing", + "url": "https://seller.com/onboard/dove", }, - 'status': 'pending_approval', + "status": "pending_approval", }, ] }, - 'description': 'Mixed results - one active, one pending approval', + "description": "Mixed results - one active, one pending approval", }, { - 'data': { - 'accounts': [ + "data": { + "accounts": [ { - 'account_id': 'acc_agent_house', - 'action': 'created', - 'billing': 'agent', - 'house': 'acme-corp.com', - 'name': 'Acme Corp (via agent)', - 'status': 'active', - 'warnings': [ - 'Direct billing (brand) not supported. Mapped to agent billing.' + "account_id": "acc_agent_house", + "action": "created", + "billing": "agent", + "house": "acme-corp.com", + "name": "Acme Corp (via agent)", + "status": "active", + "warnings": [ + "Direct billing (brand) not supported. Mapped to agent billing." ], } ] }, - 'description': "Seller doesn't support direct billing, maps to agent billing", + "description": "Seller doesn't support direct billing, maps to agent billing", }, ], - title='Sync Accounts Response', + title="Sync Accounts Response", ), ] diff --git a/src/adcp/types/generated_poc/adagents.py b/src/adcp/types/generated_poc/adagents.py index 1eb94f89..11b4f500 100644 --- a/src/adcp/types/generated_poc/adagents.py +++ b/src/adcp/types/generated_poc/adagents.py @@ -20,40 +20,40 @@ class AdcpAgentsAuthorization1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) field_schema: Annotated[ str | None, - Field(alias='$schema', description='JSON Schema identifier for this adagents.json file'), + Field(alias="$schema", description="JSON Schema identifier for this adagents.json file"), ] = None authoritative_location: Annotated[ AnyUrl, Field( - description='HTTPS URL of the authoritative adagents.json file. When present, this file is a reference and the authoritative location contains the actual agent authorization data.' + description="HTTPS URL of the authoritative adagents.json file. When present, this file is a reference and the authoritative location contains the actual agent authorization data." ), ] last_updated: Annotated[ AwareDatetime | None, - Field(description='ISO 8601 timestamp indicating when this reference was last updated'), + Field(description="ISO 8601 timestamp indicating when this reference was last updated"), ] = None class SignalId(RootModel[str]): - root: Annotated[str, Field(pattern='^[a-zA-Z0-9_-]+$')] + root: Annotated[str, Field(pattern="^[a-zA-Z0-9_-]+$")] class AuthorizedAgents4(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) authorization_type: Annotated[ - Literal['signal_ids'], - Field(description='Discriminator indicating authorization by specific signal IDs'), + Literal["signal_ids"], + Field(description="Discriminator indicating authorization by specific signal IDs"), ] authorized_for: Annotated[ str, Field( - description='Human-readable description of what signals this agent is authorized to resell', + description="Human-readable description of what signals this agent is authorized to resell", max_length=500, min_length=1, ), @@ -61,7 +61,7 @@ class AuthorizedAgents4(AdCPBaseModel): signal_ids: Annotated[ list[SignalId], Field( - description='Signal IDs this agent is authorized to resell. Resolved against the top-level signals array in this file', + description="Signal IDs this agent is authorized to resell. Resolved against the top-level signals array in this file", min_length=1, ), ] @@ -69,21 +69,21 @@ class AuthorizedAgents4(AdCPBaseModel): class SignalTag(RootModel[str]): - root: Annotated[str, Field(pattern='^[a-z0-9_-]+$')] + root: Annotated[str, Field(pattern="^[a-z0-9_-]+$")] class AuthorizedAgents5(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) authorization_type: Annotated[ - Literal['signal_tags'], - Field(description='Discriminator indicating authorization by signal tags'), + Literal["signal_tags"], + Field(description="Discriminator indicating authorization by signal tags"), ] authorized_for: Annotated[ str, Field( - description='Human-readable description of what signals this agent is authorized to resell', + description="Human-readable description of what signals this agent is authorized to resell", max_length=500, min_length=1, ), @@ -91,7 +91,7 @@ class AuthorizedAgents5(AdCPBaseModel): signal_tags: Annotated[ list[SignalTag], Field( - description='Signal tags this agent is authorized for. Agent can resell all signals with these tags', + description="Signal tags this agent is authorized for. Agent can resell all signals with these tags", min_length=1, ), ] @@ -100,19 +100,19 @@ class AuthorizedAgents5(AdCPBaseModel): class Contact(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) domain: Annotated[ str | None, Field( - description='Primary domain of the entity managing this file', - pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', + description="Primary domain of the entity managing this file", + pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", ), ] = None email: Annotated[ EmailStr | None, Field( - description='Contact email for questions or issues with this authorization file', + description="Contact email for questions or issues with this authorization file", max_length=255, min_length=1, ), @@ -134,7 +134,7 @@ class Contact(AdCPBaseModel): seller_id: Annotated[ str | None, Field( - description='Seller ID from IAB Tech Lab sellers.json (if applicable)', + description="Seller ID from IAB Tech Lab sellers.json (if applicable)", max_length=255, min_length=1, ), @@ -142,7 +142,7 @@ class Contact(AdCPBaseModel): tag_id: Annotated[ str | None, Field( - description='TAG Certified Against Fraud ID for verification (if applicable)', + description="TAG Certified Against Fraud ID for verification (if applicable)", max_length=100, min_length=1, ), @@ -151,7 +151,7 @@ class Contact(AdCPBaseModel): class PropertyFeature(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) features: Annotated[ list[str], @@ -167,17 +167,17 @@ class PropertyFeature(AdCPBaseModel): ), ] publisher_id: Annotated[ - str | None, Field(description='Optional publisher identifier at this agent (for lookup)') + str | None, Field(description="Optional publisher identifier at this agent (for lookup)") ] = None url: Annotated[AnyUrl, Field(description="The agent's API endpoint URL")] class SignalTags(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - description: Annotated[str, Field(description='Description of what this tag represents')] - name: Annotated[str, Field(description='Human-readable name for this tag')] + description: Annotated[str, Field(description="Description of what this tag represents")] + name: Annotated[str, Field(description="Human-readable name for this tag")] class Tags(SignalTags): @@ -186,16 +186,16 @@ class Tags(SignalTags): class AuthorizedAgents(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) authorization_type: Annotated[ - Literal['property_ids'], - Field(description='Discriminator indicating authorization by specific property IDs'), + Literal["property_ids"], + Field(description="Discriminator indicating authorization by specific property IDs"), ] authorized_for: Annotated[ str, Field( - description='Human-readable description of what this agent is authorized to sell', + description="Human-readable description of what this agent is authorized to sell", max_length=500, min_length=1, ), @@ -203,7 +203,7 @@ class AuthorizedAgents(AdCPBaseModel): property_ids: Annotated[ list[property_id.PropertyId], Field( - description='Property IDs this agent is authorized for. Resolved against the top-level properties array in this file', + description="Property IDs this agent is authorized for. Resolved against the top-level properties array in this file", min_length=1, ), ] @@ -212,16 +212,16 @@ class AuthorizedAgents(AdCPBaseModel): class AuthorizedAgents1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) authorization_type: Annotated[ - Literal['property_tags'], - Field(description='Discriminator indicating authorization by property tags'), + Literal["property_tags"], + Field(description="Discriminator indicating authorization by property tags"), ] authorized_for: Annotated[ str, Field( - description='Human-readable description of what this agent is authorized to sell', + description="Human-readable description of what this agent is authorized to sell", max_length=500, min_length=1, ), @@ -229,7 +229,7 @@ class AuthorizedAgents1(AdCPBaseModel): property_tags: Annotated[ list[property_tag.PropertyTag], Field( - description='Tags identifying which properties this agent is authorized for. Resolved against the top-level properties array in this file using tag matching', + description="Tags identifying which properties this agent is authorized for. Resolved against the top-level properties array in this file using tag matching", min_length=1, ), ] @@ -238,18 +238,18 @@ class AuthorizedAgents1(AdCPBaseModel): class AuthorizedAgents3(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) authorization_type: Annotated[ - Literal['publisher_properties'], + Literal["publisher_properties"], Field( - description='Discriminator indicating authorization for properties from other publisher domains' + description="Discriminator indicating authorization for properties from other publisher domains" ), ] authorized_for: Annotated[ str, Field( - description='Human-readable description of what this agent is authorized to sell', + description="Human-readable description of what this agent is authorized to sell", max_length=500, min_length=1, ), @@ -257,7 +257,7 @@ class AuthorizedAgents3(AdCPBaseModel): publisher_properties: Annotated[ list[publisher_property_selector.PublisherPropertySelector], Field( - description='Properties from other publisher domains this agent is authorized for. Each entry specifies a publisher domain and which of their properties this agent can sell', + description="Properties from other publisher domains this agent is authorized for. Each entry specifies a publisher domain and which of their properties this agent can sell", min_length=1, ), ] @@ -266,16 +266,16 @@ class AuthorizedAgents3(AdCPBaseModel): class AuthorizedAgents2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) authorization_type: Annotated[ - Literal['inline_properties'], - Field(description='Discriminator indicating authorization by inline property definitions'), + Literal["inline_properties"], + Field(description="Discriminator indicating authorization by inline property definitions"), ] authorized_for: Annotated[ str, Field( - description='Human-readable description of what this agent is authorized to sell', + description="Human-readable description of what this agent is authorized to sell", max_length=500, min_length=1, ), @@ -283,7 +283,7 @@ class AuthorizedAgents2(AdCPBaseModel): properties: Annotated[ list[property.Property], Field( - description='Specific properties this agent is authorized for (alternative to property_ids/property_tags)', + description="Specific properties this agent is authorized for (alternative to property_ids/property_tags)", min_length=1, ), ] @@ -292,11 +292,11 @@ class AuthorizedAgents2(AdCPBaseModel): class AdcpAgentsAuthorization2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) field_schema: Annotated[ str | None, - Field(alias='$schema', description='JSON Schema identifier for this adagents.json file'), + Field(alias="$schema", description="JSON Schema identifier for this adagents.json file"), ] = None authorized_agents: Annotated[ list[ @@ -308,24 +308,24 @@ class AdcpAgentsAuthorization2(AdCPBaseModel): | AuthorizedAgents5 ], Field( - description='Array of sales agents authorized to sell inventory for properties in this file', + description="Array of sales agents authorized to sell inventory for properties in this file", min_length=1, ), ] contact: Annotated[ Contact | None, Field( - description='Contact information for the entity managing this adagents.json file (may be publisher or third-party operator)' + description="Contact information for the entity managing this adagents.json file (may be publisher or third-party operator)" ), ] = None last_updated: Annotated[ AwareDatetime | None, - Field(description='ISO 8601 timestamp indicating when this file was last updated'), + Field(description="ISO 8601 timestamp indicating when this file was last updated"), ] = None properties: Annotated[ list[property.Property] | None, Field( - description='Array of all properties covered by this adagents.json file. Defines the canonical property list that authorized agents reference.', + description="Array of all properties covered by this adagents.json file. Defines the canonical property list that authorized agents reference.", min_length=1, ), ] = None @@ -338,20 +338,20 @@ class AdcpAgentsAuthorization2(AdCPBaseModel): signal_tags: Annotated[ dict[str, SignalTags] | None, Field( - description='Metadata for each tag referenced by signals. Provides human-readable context for signal tag values.' + description="Metadata for each tag referenced by signals. Provides human-readable context for signal tag values." ), ] = None signals: Annotated[ list[signal_definition.SignalDefinition] | None, Field( - description='Signal catalog published by this data provider. Signals agents reference these signals via data_provider_domain + signal_id.', + description="Signal catalog published by this data provider. Signals agents reference these signals via data_provider_domain + signal_id.", min_length=1, ), ] = None tags: Annotated[ dict[str, Tags] | None, Field( - description='Metadata for each tag referenced by properties. Provides human-readable context for property tag values.' + description="Metadata for each tag referenced by properties. Provides human-readable context for property tag values." ), ] = None @@ -360,304 +360,304 @@ class AdcpAgentsAuthorization(RootModel[AdcpAgentsAuthorization1 | AdcpAgentsAut root: Annotated[ AdcpAgentsAuthorization1 | AdcpAgentsAuthorization2, Field( - description='Declaration of authorized agents for advertising inventory and data signals. Hosted at /.well-known/adagents.json on publisher domains (for properties) or data provider domains (for signals). Can either contain the full structure inline or reference an authoritative URL.', + description="Declaration of authorized agents for advertising inventory and data signals. Hosted at /.well-known/adagents.json on publisher domains (for properties) or data provider domains (for signals). Can either contain the full structure inline or reference an authoritative URL.", examples=[ { - '$schema': '/schemas/latest/adagents.json', - 'authoritative_location': 'https://cdn.example.com/adagents/v2/adagents.json', - 'last_updated': '2025-01-15T10:00:00Z', + "$schema": "/schemas/latest/adagents.json", + "authoritative_location": "https://cdn.example.com/adagents/v2/adagents.json", + "last_updated": "2025-01-15T10:00:00Z", }, { - '$schema': '/schemas/latest/adagents.json', - 'authorized_agents': [ + "$schema": "/schemas/latest/adagents.json", + "authorized_agents": [ { - 'authorization_type': 'property_tags', - 'authorized_for': 'Official sales agent', - 'property_tags': ['all'], - 'url': 'https://agent.example.com', + "authorization_type": "property_tags", + "authorized_for": "Official sales agent", + "property_tags": ["all"], + "url": "https://agent.example.com", } ], - 'last_updated': '2025-01-10T12:00:00Z', - 'properties': [ + "last_updated": "2025-01-10T12:00:00Z", + "properties": [ { - 'identifiers': [{'type': 'domain', 'value': 'example.com'}], - 'name': 'Example Site', - 'property_type': 'website', - 'publisher_domain': 'example.com', + "identifiers": [{"type": "domain", "value": "example.com"}], + "name": "Example Site", + "property_type": "website", + "publisher_domain": "example.com", } ], - 'tags': { - 'all': { - 'description': 'All properties in this file', - 'name': 'All Properties', + "tags": { + "all": { + "description": "All properties in this file", + "name": "All Properties", } }, }, { - '$schema': '/schemas/latest/adagents.json', - 'authorized_agents': [ + "$schema": "/schemas/latest/adagents.json", + "authorized_agents": [ { - 'authorization_type': 'property_tags', - 'authorized_for': 'All Meta properties', - 'property_tags': ['meta_network'], - 'url': 'https://meta-ads.com', + "authorization_type": "property_tags", + "authorized_for": "All Meta properties", + "property_tags": ["meta_network"], + "url": "https://meta-ads.com", } ], - 'contact': { - 'domain': 'meta.com', - 'email': 'adops@meta.com', - 'name': 'Meta Advertising Operations', - 'privacy_policy_url': 'https://www.meta.com/privacy/policy', - 'seller_id': 'pub-meta-12345', - 'tag_id': '12345', + "contact": { + "domain": "meta.com", + "email": "adops@meta.com", + "name": "Meta Advertising Operations", + "privacy_policy_url": "https://www.meta.com/privacy/policy", + "seller_id": "pub-meta-12345", + "tag_id": "12345", }, - 'last_updated': '2025-01-10T15:30:00Z', - 'properties': [ + "last_updated": "2025-01-10T15:30:00Z", + "properties": [ { - 'identifiers': [ - {'type': 'ios_bundle', 'value': 'com.burbn.instagram'}, - {'type': 'android_package', 'value': 'com.instagram.android'}, + "identifiers": [ + {"type": "ios_bundle", "value": "com.burbn.instagram"}, + {"type": "android_package", "value": "com.instagram.android"}, ], - 'name': 'Instagram', - 'property_type': 'mobile_app', - 'publisher_domain': 'instagram.com', - 'supported_channels': ['social', 'display', 'olv'], - 'tags': ['meta_network', 'social_media'], + "name": "Instagram", + "property_type": "mobile_app", + "publisher_domain": "instagram.com", + "supported_channels": ["social", "display", "olv"], + "tags": ["meta_network", "social_media"], }, { - 'identifiers': [ - {'type': 'ios_bundle', 'value': 'com.facebook.Facebook'}, - {'type': 'android_package', 'value': 'com.facebook.katana'}, + "identifiers": [ + {"type": "ios_bundle", "value": "com.facebook.Facebook"}, + {"type": "android_package", "value": "com.facebook.katana"}, ], - 'name': 'Facebook', - 'property_type': 'mobile_app', - 'publisher_domain': 'facebook.com', - 'supported_channels': ['social', 'display', 'olv'], - 'tags': ['meta_network', 'social_media'], + "name": "Facebook", + "property_type": "mobile_app", + "publisher_domain": "facebook.com", + "supported_channels": ["social", "display", "olv"], + "tags": ["meta_network", "social_media"], }, { - 'identifiers': [ - {'type': 'ios_bundle', 'value': 'net.whatsapp.WhatsApp'}, - {'type': 'android_package', 'value': 'com.whatsapp'}, + "identifiers": [ + {"type": "ios_bundle", "value": "net.whatsapp.WhatsApp"}, + {"type": "android_package", "value": "com.whatsapp"}, ], - 'name': 'WhatsApp', - 'property_type': 'mobile_app', - 'publisher_domain': 'whatsapp.com', - 'supported_channels': ['social', 'display'], - 'tags': ['meta_network', 'messaging'], + "name": "WhatsApp", + "property_type": "mobile_app", + "publisher_domain": "whatsapp.com", + "supported_channels": ["social", "display"], + "tags": ["meta_network", "messaging"], }, ], - 'tags': { - 'messaging': { - 'description': 'Messaging and communication apps', - 'name': 'Messaging Apps', + "tags": { + "messaging": { + "description": "Messaging and communication apps", + "name": "Messaging Apps", }, - 'meta_network': { - 'description': 'All Meta-owned properties', - 'name': 'Meta Network', + "meta_network": { + "description": "All Meta-owned properties", + "name": "Meta Network", }, - 'social_media': { - 'description': 'Social networking applications', - 'name': 'Social Media Apps', + "social_media": { + "description": "Social networking applications", + "name": "Social Media Apps", }, }, }, { - '$schema': '/schemas/latest/adagents.json', - 'authorized_agents': [ + "$schema": "/schemas/latest/adagents.json", + "authorized_agents": [ { - 'authorization_type': 'property_tags', - 'authorized_for': 'Tumblr corporate properties only', - 'property_tags': ['corporate'], - 'url': 'https://tumblr-sales.com', + "authorization_type": "property_tags", + "authorized_for": "Tumblr corporate properties only", + "property_tags": ["corporate"], + "url": "https://tumblr-sales.com", } ], - 'contact': {'name': 'Tumblr Advertising'}, - 'last_updated': '2025-01-10T16:00:00Z', - 'properties': [ + "contact": {"name": "Tumblr Advertising"}, + "last_updated": "2025-01-10T16:00:00Z", + "properties": [ { - 'identifiers': [{'type': 'domain', 'value': 'tumblr.com'}], - 'name': 'Tumblr Corporate', - 'property_type': 'website', - 'publisher_domain': 'tumblr.com', - 'tags': ['corporate'], + "identifiers": [{"type": "domain", "value": "tumblr.com"}], + "name": "Tumblr Corporate", + "property_type": "website", + "publisher_domain": "tumblr.com", + "tags": ["corporate"], } ], - 'tags': { - 'corporate': { - 'description': 'Tumblr-owned corporate properties (not user blogs)', - 'name': 'Corporate Properties', + "tags": { + "corporate": { + "description": "Tumblr-owned corporate properties (not user blogs)", + "name": "Corporate Properties", } }, }, { - '$schema': '/schemas/latest/adagents.json', - 'authorized_agents': [ + "$schema": "/schemas/latest/adagents.json", + "authorized_agents": [ { - 'authorization_type': 'publisher_properties', - 'authorized_for': 'CNN CTV properties via publisher authorization', - 'publisher_properties': [ + "authorization_type": "publisher_properties", + "authorized_for": "CNN CTV properties via publisher authorization", + "publisher_properties": [ { - 'property_ids': ['cnn_ctv_app'], - 'publisher_domain': 'cnn.com', - 'selection_type': 'by_id', + "property_ids": ["cnn_ctv_app"], + "publisher_domain": "cnn.com", + "selection_type": "by_id", } ], - 'url': 'https://agent.example/api', + "url": "https://agent.example/api", }, { - 'authorization_type': 'publisher_properties', - 'authorized_for': 'All CTV properties from multiple publishers', - 'publisher_properties': [ + "authorization_type": "publisher_properties", + "authorized_for": "All CTV properties from multiple publishers", + "publisher_properties": [ { - 'property_tags': ['ctv'], - 'publisher_domain': 'cnn.com', - 'selection_type': 'by_tag', + "property_tags": ["ctv"], + "publisher_domain": "cnn.com", + "selection_type": "by_tag", }, { - 'property_tags': ['ctv'], - 'publisher_domain': 'espn.com', - 'selection_type': 'by_tag', + "property_tags": ["ctv"], + "publisher_domain": "espn.com", + "selection_type": "by_tag", }, ], - 'url': 'https://agent.example/api', + "url": "https://agent.example/api", }, ], - 'contact': { - 'domain': 'agent.example', - 'email': 'sales@agent.example', - 'name': 'Example Third-Party Sales Agent', + "contact": { + "domain": "agent.example", + "email": "sales@agent.example", + "name": "Example Third-Party Sales Agent", }, - 'last_updated': '2025-01-10T17:00:00Z', + "last_updated": "2025-01-10T17:00:00Z", }, { - '$schema': '/schemas/latest/adagents.json', - 'authorized_agents': [ + "$schema": "/schemas/latest/adagents.json", + "authorized_agents": [ { - 'authorization_type': 'property_tags', - 'authorized_for': 'All news properties', - 'property_tags': ['news'], - 'url': 'https://sales.news.example.com', + "authorization_type": "property_tags", + "authorized_for": "All news properties", + "property_tags": ["news"], + "url": "https://sales.news.example.com", } ], - 'contact': { - 'domain': 'news.example.com', - 'email': 'adops@news.example.com', - 'name': 'Premium News Publisher', + "contact": { + "domain": "news.example.com", + "email": "adops@news.example.com", + "name": "Premium News Publisher", }, - 'last_updated': '2025-01-10T18:00:00Z', - 'properties': [ + "last_updated": "2025-01-10T18:00:00Z", + "properties": [ { - 'identifiers': [{'type': 'domain', 'value': 'news.example.com'}], - 'name': 'News Example', - 'property_type': 'website', - 'publisher_domain': 'news.example.com', - 'tags': ['premium', 'news'], + "identifiers": [{"type": "domain", "value": "news.example.com"}], + "name": "News Example", + "property_type": "website", + "publisher_domain": "news.example.com", + "tags": ["premium", "news"], } ], - 'property_features': [ + "property_features": [ { - 'features': ['carbon_score', 'sustainability_grade'], - 'name': 'Scope3', - 'publisher_id': 'pub_news_12345', - 'url': 'https://api.scope3.com', + "features": ["carbon_score", "sustainability_grade"], + "name": "Scope3", + "publisher_id": "pub_news_12345", + "url": "https://api.scope3.com", }, { - 'features': [ - 'tag_certified_against_fraud', - 'tag_brand_safety_certified', + "features": [ + "tag_certified_against_fraud", + "tag_brand_safety_certified", ], - 'name': 'TAG', - 'url': 'https://api.tagtoday.net', + "name": "TAG", + "url": "https://api.tagtoday.net", }, { - 'features': ['gdpr_compliant', 'tcf_registered', 'ccpa_compliant'], - 'name': 'OneTrust', - 'publisher_id': 'ot_news_67890', - 'url': 'https://api.onetrust.com', + "features": ["gdpr_compliant", "tcf_registered", "ccpa_compliant"], + "name": "OneTrust", + "publisher_id": "ot_news_67890", + "url": "https://api.onetrust.com", }, ], - 'tags': { - 'news': { - 'description': 'News and journalism content', - 'name': 'News Properties', + "tags": { + "news": { + "description": "News and journalism content", + "name": "News Properties", }, - 'premium': { - 'description': 'High-quality, brand-safe properties', - 'name': 'Premium Properties', + "premium": { + "description": "High-quality, brand-safe properties", + "name": "Premium Properties", }, }, }, { - '$schema': '/schemas/latest/adagents.json', - 'authorized_agents': [ + "$schema": "/schemas/latest/adagents.json", + "authorized_agents": [ { - 'authorization_type': 'signal_tags', - 'authorized_for': 'All Polk automotive signals via LiveRamp', - 'signal_tags': ['automotive'], - 'url': 'https://liveramp.com/.well-known/adcp/signals', + "authorization_type": "signal_tags", + "authorized_for": "All Polk automotive signals via LiveRamp", + "signal_tags": ["automotive"], + "url": "https://liveramp.com/.well-known/adcp/signals", }, { - 'authorization_type': 'signal_ids', - 'authorized_for': 'Polk premium signals only', - 'signal_ids': ['likely_tesla_buyers'], - 'url': 'https://the-trade-desk.com/.well-known/adcp/signals', + "authorization_type": "signal_ids", + "authorized_for": "Polk premium signals only", + "signal_ids": ["likely_tesla_buyers"], + "url": "https://the-trade-desk.com/.well-known/adcp/signals", }, ], - 'contact': { - 'domain': 'polk.com', - 'email': 'partnerships@polk.com', - 'name': 'Polk Automotive Data', + "contact": { + "domain": "polk.com", + "email": "partnerships@polk.com", + "name": "Polk Automotive Data", }, - 'last_updated': '2025-01-15T10:00:00Z', - 'signal_tags': { - 'automotive': { - 'description': 'Vehicle-related audience segments', - 'name': 'Automotive Signals', + "last_updated": "2025-01-15T10:00:00Z", + "signal_tags": { + "automotive": { + "description": "Vehicle-related audience segments", + "name": "Automotive Signals", }, - 'premium': { - 'description': 'High-value premium audience segments', - 'name': 'Premium Signals', + "premium": { + "description": "High-value premium audience segments", + "name": "Premium Signals", }, }, - 'signals': [ + "signals": [ { - 'category': 'purchase_intent', - 'description': 'Consumers modeled as likely to purchase a Tesla in the next 12 months based on vehicle registration, financial, and behavioral data', - 'id': 'likely_tesla_buyers', - 'name': 'Likely Tesla Buyers', - 'tags': ['automotive', 'premium'], - 'value_type': 'binary', + "category": "purchase_intent", + "description": "Consumers modeled as likely to purchase a Tesla in the next 12 months based on vehicle registration, financial, and behavioral data", + "id": "likely_tesla_buyers", + "name": "Likely Tesla Buyers", + "tags": ["automotive", "premium"], + "value_type": "binary", }, { - 'allowed_values': [ - 'tesla', - 'bmw', - 'mercedes', - 'audi', - 'lexus', - 'other_luxury', - 'non_luxury', + "allowed_values": [ + "tesla", + "bmw", + "mercedes", + "audi", + "lexus", + "other_luxury", + "non_luxury", ], - 'category': 'ownership', - 'description': 'Current vehicle make owned by the consumer', - 'id': 'vehicle_ownership', - 'name': 'Current Vehicle Ownership', - 'tags': ['automotive'], - 'value_type': 'categorical', + "category": "ownership", + "description": "Current vehicle make owned by the consumer", + "id": "vehicle_ownership", + "name": "Current Vehicle Ownership", + "tags": ["automotive"], + "value_type": "categorical", }, { - 'category': 'purchase_intent', - 'description': 'Likelihood score of purchasing any new vehicle in the next 6 months', - 'id': 'purchase_propensity', - 'name': 'Auto Purchase Propensity', - 'range': {'max': 1, 'min': 0, 'unit': 'score'}, - 'tags': ['automotive'], - 'value_type': 'numeric', + "category": "purchase_intent", + "description": "Likelihood score of purchasing any new vehicle in the next 6 months", + "id": "purchase_propensity", + "name": "Auto Purchase Propensity", + "range": {"max": 1, "min": 0, "unit": "score"}, + "tags": ["automotive"], + "value_type": "numeric", }, ], }, ], - title='AdCP Agents Authorization', + title="AdCP Agents Authorization", ), ] diff --git a/src/adcp/types/generated_poc/brand.py b/src/adcp/types/generated_poc/brand.py index 2f47b09e..85e6a90b 100644 --- a/src/adcp/types/generated_poc/brand.py +++ b/src/adcp/types/generated_poc/brand.py @@ -15,18 +15,18 @@ class BrandDiscovery1(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) - field_schema: Annotated[str | None, Field(alias='$schema')] = None + field_schema: Annotated[str | None, Field(alias="$schema")] = None authoritative_location: Annotated[ - AnyUrl, Field(description='HTTPS URL of the authoritative brand.json file') + AnyUrl, Field(description="HTTPS URL of the authoritative brand.json file") ] last_updated: AwareDatetime | None = None class Trademark(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) mark: str number: str @@ -35,44 +35,44 @@ class Trademark(AdCPBaseModel): class Asset(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - asset_id: Annotated[str, Field(description='Unique identifier')] + asset_id: Annotated[str, Field(description="Unique identifier")] asset_type: Annotated[ - asset_content_type.AssetContentType, Field(description='Type of asset content') + asset_content_type.AssetContentType, Field(description="Type of asset content") ] - description: Annotated[str | None, Field(description='Asset description or usage notes')] = None + description: Annotated[str | None, Field(description="Asset description or usage notes")] = None duration_seconds: Annotated[ - float | None, Field(description='Video/audio duration in seconds') + float | None, Field(description="Video/audio duration in seconds") ] = None - file_size_bytes: Annotated[int | None, Field(description='File size in bytes')] = None + file_size_bytes: Annotated[int | None, Field(description="File size in bytes")] = None format: Annotated[str | None, Field(description="File format (e.g., 'jpg', 'mp4', 'mp3')")] = ( None ) - height: Annotated[int | None, Field(description='Image/video height in pixels')] = None + height: Annotated[int | None, Field(description="Image/video height in pixels")] = None metadata: Annotated[ - dict[str, Any] | None, Field(description='Additional asset-specific metadata') + dict[str, Any] | None, Field(description="Additional asset-specific metadata") ] = None - name: Annotated[str | None, Field(description='Human-readable name')] = None + name: Annotated[str | None, Field(description="Human-readable name")] = None tags: Annotated[ list[str] | None, Field(description="Tags for discovery (e.g., 'hero', 'lifestyle', 'product', 'holiday')"), ] = None - url: Annotated[AnyUrl, Field(description='URL to CDN-hosted asset file')] - width: Annotated[int | None, Field(description='Image/video width in pixels')] = None + url: Annotated[AnyUrl, Field(description="URL to CDN-hosted asset file")] + width: Annotated[int | None, Field(description="Image/video width in pixels")] = None class Brand1(RootModel[str]): - root: Annotated[str, Field(pattern='^([a-z0-9_]+|\\*)$')] + root: Annotated[str, Field(pattern="^([a-z0-9_]+|\\*)$")] class Country(RootModel[str]): - root: Annotated[str, Field(pattern='^[A-Z]{2}$')] + root: Annotated[str, Field(pattern="^[A-Z]{2}$")] class Avatar(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) avatar_id: str | None = None provider: str | None = None @@ -80,8 +80,8 @@ class Avatar(AdCPBaseModel): class Contact1(AdCPBaseModel): - email: Annotated[EmailStr | None, Field(description='Contact email')] = None - phone: Annotated[str | None, Field(description='Contact phone number')] = None + email: Annotated[EmailStr | None, Field(description="Contact email")] = None + phone: Annotated[str | None, Field(description="Contact phone number")] = None class Disclaimer(AdCPBaseModel): @@ -92,13 +92,13 @@ class Disclaimer(AdCPBaseModel): class Tone(AdCPBaseModel): attributes: Annotated[ - list[str] | None, Field(description='Personality traits that characterize the brand voice') + list[str] | None, Field(description="Personality traits that characterize the brand voice") ] = None donts: Annotated[ - list[str] | None, Field(description='Guardrails to avoid brand violations - what NOT to do') + list[str] | None, Field(description="Guardrails to avoid brand violations - what NOT to do") ] = None dos: Annotated[ - list[str] | None, Field(description='Guidance for copy generation - what TO do') + list[str] | None, Field(description="Guidance for copy generation - what TO do") ] = None voice: Annotated[ str | None, @@ -110,7 +110,7 @@ class Tone(AdCPBaseModel): class Voice(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) provider: str | None = None settings: dict[str, Any] | None = None @@ -119,30 +119,30 @@ class Voice(AdCPBaseModel): class BrandAgent(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) id: Annotated[ str, Field( - description='Agent identifier (useful for logging, multi-tenant DAMs)', - pattern='^[a-z0-9_]+$', + description="Agent identifier (useful for logging, multi-tenant DAMs)", + pattern="^[a-z0-9_]+$", ), ] - url: Annotated[AnyUrl, Field(description='Brand agent MCP endpoint URL')] + url: Annotated[AnyUrl, Field(description="Brand agent MCP endpoint URL")] class BrandId(RootModel[str]): root: Annotated[ str, Field( - description='Brand identifier within the house portfolio. Lowercase alphanumeric with underscores. House chooses this ID.', - pattern='^[a-z0-9_]+$', + description="Brand identifier within the house portfolio. Lowercase alphanumeric with underscores. House chooses this ID.", + pattern="^[a-z0-9_]+$", ), ] class ColorValue1(RootModel[str]): - root: Annotated[str, Field(pattern='^#[0-9A-Fa-f]{6}$')] + root: Annotated[str, Field(pattern="^#[0-9A-Fa-f]{6}$")] class ColorValue2Item(ColorValue1): @@ -159,7 +159,7 @@ class ColorValue(RootModel[ColorValue1 | ColorValue2]): class Colors(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) accent: ColorValue | None = None background: ColorValue | None = None @@ -172,32 +172,32 @@ class Domain(RootModel[str]): root: Annotated[ str, Field( - description='A valid domain name', - pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', + description="A valid domain name", + pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", ), ] class Fonts(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - font_urls: Annotated[list[AnyUrl] | None, Field(description='URLs to web font files')] = None - primary: Annotated[str | None, Field(description='Primary font family')] = None - secondary: Annotated[str | None, Field(description='Secondary font family')] = None + font_urls: Annotated[list[AnyUrl] | None, Field(description="URLs to web font files")] = None + primary: Annotated[str | None, Field(description="Primary font family")] = None + secondary: Annotated[str | None, Field(description="Secondary font family")] = None class Architecture(Enum): - branded_house = 'branded_house' - house_of_brands = 'house_of_brands' - hybrid = 'hybrid' + branded_house = "branded_house" + house_of_brands = "house_of_brands" + hybrid = "hybrid" class KellerType(Enum): - master = 'master' - sub_brand = 'sub_brand' - endorsed = 'endorsed' - independent = 'independent' + master = "master" + sub_brand = "sub_brand" + endorsed = "endorsed" + independent = "independent" class LocalizedName(RootModel[dict[str, str]]): @@ -205,50 +205,50 @@ class LocalizedName(RootModel[dict[str, str]]): class Background(Enum): - dark_bg = 'dark-bg' - light_bg = 'light-bg' - transparent_bg = 'transparent-bg' + dark_bg = "dark-bg" + light_bg = "light-bg" + transparent_bg = "transparent-bg" class Orientation(Enum): - square = 'square' - horizontal = 'horizontal' - vertical = 'vertical' - stacked = 'stacked' + square = "square" + horizontal = "horizontal" + vertical = "vertical" + stacked = "stacked" class Variant(Enum): - primary = 'primary' - secondary = 'secondary' - icon = 'icon' - wordmark = 'wordmark' - full_lockup = 'full-lockup' + primary = "primary" + secondary = "secondary" + icon = "icon" + wordmark = "wordmark" + full_lockup = "full-lockup" class Logo(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) background: Annotated[ Background | None, Field( - description='Background compatibility. dark-bg: use on dark backgrounds, light-bg: use on light backgrounds, transparent-bg: has transparent background' + description="Background compatibility. dark-bg: use on dark backgrounds, light-bg: use on light backgrounds, transparent-bg: has transparent background" ), ] = None - height: Annotated[int | None, Field(description='Height in pixels')] = None + height: Annotated[int | None, Field(description="Height in pixels")] = None orientation: Annotated[ Orientation | None, Field( - description='Logo aspect ratio orientation. square: ~1:1, horizontal: wide, vertical: tall, stacked: vertically arranged elements' + description="Logo aspect ratio orientation. square: ~1:1, horizontal: wide, vertical: tall, stacked: vertically arranged elements" ), ] = None tags: Annotated[ list[str] | None, Field( - description='Additional semantic tags for custom categorization beyond the standard orientation, background, and variant fields' + description="Additional semantic tags for custom categorization beyond the standard orientation, background, and variant fields" ), ] = None - url: Annotated[AnyUrl, Field(description='URL to the logo asset')] + url: Annotated[AnyUrl, Field(description="URL to the logo asset")] usage: Annotated[ str | None, Field( @@ -258,123 +258,123 @@ class Logo(AdCPBaseModel): variant: Annotated[ Variant | None, Field( - description='Logo variant type. primary: main logo, secondary: alternative, icon: symbol only, wordmark: text only, full-lockup: complete logo' + description="Logo variant type. primary: main logo, secondary: alternative, icon: symbol only, wordmark: text only, full-lockup: complete logo" ), ] = None - width: Annotated[int | None, Field(description='Width in pixels')] = None + width: Annotated[int | None, Field(description="Width in pixels")] = None class AgenticCheckout(AdCPBaseModel): - endpoint: Annotated[AnyUrl, Field(description='Base URL for checkout session API')] + endpoint: Annotated[AnyUrl, Field(description="Base URL for checkout session API")] spec: Annotated[ - Literal['openai_agentic_checkout_v1'], Field(description='Checkout API specification') + Literal["openai_agentic_checkout_v1"], Field(description="Checkout API specification") ] supported_payment_providers: Annotated[ - list[str] | None, Field(description='Payment providers supported by this checkout endpoint') + list[str] | None, Field(description="Payment providers supported by this checkout endpoint") ] = None class FeedFormat(Enum): - google_merchant_center = 'google_merchant_center' - facebook_catalog = 'facebook_catalog' - openai_product_feed = 'openai_product_feed' - custom = 'custom' + google_merchant_center = "google_merchant_center" + facebook_catalog = "facebook_catalog" + openai_product_feed = "openai_product_feed" + custom = "custom" class UpdateFrequency(Enum): - realtime = 'realtime' - hourly = 'hourly' - daily = 'daily' - weekly = 'weekly' + realtime = "realtime" + hourly = "hourly" + daily = "daily" + weekly = "weekly" class ProductCatalog(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) agentic_checkout: Annotated[ - AgenticCheckout | None, Field(description='Agentic checkout endpoint configuration') + AgenticCheckout | None, Field(description="Agentic checkout endpoint configuration") ] = None categories: Annotated[ - list[str] | None, Field(description='Product categories available in the catalog') + list[str] | None, Field(description="Product categories available in the catalog") ] = None - feed_format: Annotated[FeedFormat | None, Field(description='Format of the product feed')] = ( + feed_format: Annotated[FeedFormat | None, Field(description="Format of the product feed")] = ( None ) - feed_url: Annotated[AnyUrl, Field(description='URL to product catalog feed')] + feed_url: Annotated[AnyUrl, Field(description="URL to product catalog feed")] last_updated: Annotated[ - AwareDatetime | None, Field(description='When the product catalog was last updated') + AwareDatetime | None, Field(description="When the product catalog was last updated") ] = None update_frequency: Annotated[ - UpdateFrequency | None, Field(description='How frequently the product catalog is updated') + UpdateFrequency | None, Field(description="How frequently the product catalog is updated") ] = None class Store(Enum): - apple = 'apple' - google = 'google' - amazon = 'amazon' - roku = 'roku' - samsung = 'samsung' - lg = 'lg' - other = 'other' + apple = "apple" + google = "google" + amazon = "amazon" + roku = "roku" + samsung = "samsung" + lg = "lg" + other = "other" class Type(Enum): - website = 'website' - mobile_app = 'mobile_app' - ctv_app = 'ctv_app' - desktop_app = 'desktop_app' - dooh = 'dooh' - podcast = 'podcast' - radio = 'radio' - streaming_audio = 'streaming_audio' + website = "website" + mobile_app = "mobile_app" + ctv_app = "ctv_app" + desktop_app = "desktop_app" + dooh = "dooh" + podcast = "podcast" + radio = "radio" + streaming_audio = "streaming_audio" class Property(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) identifier: Annotated[ str, Field( - description='Property identifier - domain for websites, bundle ID for apps', + description="Property identifier - domain for websites, bundle ID for apps", min_length=1, ), ] primary: Annotated[ - bool | None, Field(description='Whether this is the primary property for the brand') + bool | None, Field(description="Whether this is the primary property for the brand") ] = False region: Annotated[ str | None, Field( - description="ISO 3166-1 alpha-2 country code or 'global'", pattern='^([A-Z]{2}|global)$' + description="ISO 3166-1 alpha-2 country code or 'global'", pattern="^([A-Z]{2}|global)$" ), ] = None - store: Annotated[Store | None, Field(description='App store for mobile/CTV apps')] = None - type: Annotated[Type, Field(description='Property type')] + store: Annotated[Store | None, Field(description="App store for mobile/CTV apps")] = None + type: Annotated[Type, Field(description="Property type")] class BrandDiscovery2(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) - field_schema: Annotated[str | None, Field(alias='$schema')] = None - house: Annotated[Domain, Field(description='House domain to fetch brand portfolio from')] + field_schema: Annotated[str | None, Field(alias="$schema")] = None + house: Annotated[Domain, Field(description="House domain to fetch brand portfolio from")] last_updated: AwareDatetime | None = None note: str | None = None region: Annotated[ str | None, Field( - description='ISO 3166-1 alpha-2 country code if this is a regional domain', - pattern='^[A-Z]{2}$', + description="ISO 3166-1 alpha-2 country code if this is a regional domain", + pattern="^[A-Z]{2}$", ), ] = None class AuthorizedOperator(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) brands: Annotated[ list[Brand1], @@ -386,7 +386,7 @@ class AuthorizedOperator(AdCPBaseModel): countries: Annotated[ list[Country] | None, Field( - description='ISO 3166-1 alpha-2 country codes where this authorization applies. Omit for global authorization.' + description="ISO 3166-1 alpha-2 country codes where this authorization applies. Omit for global authorization." ), ] = None domain: Annotated[ @@ -396,59 +396,59 @@ class AuthorizedOperator(AdCPBaseModel): class Brand(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - assets: Annotated[list[Asset] | None, Field(description='Brand asset library')] = None - avatar: Annotated[Avatar | None, Field(description='Visual avatar configuration')] = None + assets: Annotated[list[Asset] | None, Field(description="Brand asset library")] = None + avatar: Annotated[Avatar | None, Field(description="Visual avatar configuration")] = None brand_agent: Annotated[ - BrandAgent | None, Field(description='Brand agent that provides dynamic brand data via MCP') + BrandAgent | None, Field(description="Brand agent that provides dynamic brand data via MCP") ] = None colors: Colors | None = None - contact: Annotated[Contact1 | None, Field(description='Brand-level contact information')] = None - description: Annotated[str | None, Field(description='Brand description')] = None + contact: Annotated[Contact1 | None, Field(description="Brand-level contact information")] = None + description: Annotated[str | None, Field(description="Brand description")] = None disclaimers: Annotated[ - list[Disclaimer] | None, Field(description='Legal disclaimers for creatives') + list[Disclaimer] | None, Field(description="Legal disclaimers for creatives") ] = None fonts: Fonts | None = None id: Annotated[ - BrandId, Field(description='Brand identifier within the house. House chooses this ID.') + BrandId, Field(description="Brand identifier within the house. House chooses this ID.") ] industry: Annotated[ str | None, Field(description="Industry or vertical (e.g., 'retail', 'automotive', 'cpg')") ] = None keller_type: KellerType | None = None - logos: Annotated[list[Logo] | None, Field(description='Brand logo assets')] = None + logos: Annotated[list[Logo] | None, Field(description="Brand logo assets")] = None names: Annotated[ list[LocalizedName], Field( - description='Localized brand names. Multiple entries per language allowed for aliases.', + description="Localized brand names. Multiple entries per language allowed for aliases.", min_length=1, ), ] parent_brand: Annotated[ - BrandId | None, Field(description='Parent brand ID for sub-brands and endorsed brands') + BrandId | None, Field(description="Parent brand ID for sub-brands and endorsed brands") ] = None privacy_policy_url: Annotated[ AnyUrl | None, Field(description="URL to the brand's privacy policy") ] = None product_catalog: ProductCatalog | None = None properties: Annotated[ - list[Property] | None, Field(description='Digital properties owned by this brand') + list[Property] | None, Field(description="Digital properties owned by this brand") ] = None - tagline: Annotated[str | None, Field(description='Brand tagline or slogan')] = None - target_audience: Annotated[str | None, Field(description='Primary target audience')] = None + tagline: Annotated[str | None, Field(description="Brand tagline or slogan")] = None + target_audience: Annotated[str | None, Field(description="Primary target audience")] = None tone: Annotated[ - str | Tone | None, Field(description='Brand voice and messaging tone guidelines') + str | Tone | None, Field(description="Brand voice and messaging tone guidelines") ] = None url: Annotated[ - AnyUrl | None, Field(description='Primary brand URL for context and asset discovery') + AnyUrl | None, Field(description="Primary brand URL for context and asset discovery") ] = None - voice: Annotated[Voice | None, Field(description='TTS voice configuration')] = None + voice: Annotated[Voice | None, Field(description="TTS voice configuration")] = None class Contact(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) domain: Domain | None = None email: Annotated[EmailStr | None, Field(max_length=255)] = None @@ -457,27 +457,27 @@ class Contact(AdCPBaseModel): class House(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) architecture: Annotated[ Architecture | None, Field( - description='Brand architecture model: branded_house (Google), house_of_brands (P&G), hybrid (Nike)' + description="Brand architecture model: branded_house (Google), house_of_brands (P&G), hybrid (Nike)" ), ] = None domain: Annotated[Domain, Field(description="The house's domain where brand.json is hosted")] - name: Annotated[str, Field(description='Primary display name of the house', min_length=1)] + name: Annotated[str, Field(description="Primary display name of the house", min_length=1)] names: Annotated[ list[LocalizedName] | None, - Field(description='Localized house names including legal name, stock symbol, etc.'), + Field(description="Localized house names including legal name, stock symbol, etc."), ] = None class BrandDiscovery3(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) - field_schema: Annotated[str | None, Field(alias='$schema')] = None + field_schema: Annotated[str | None, Field(alias="$schema")] = None brand_agent: BrandAgent contact: Contact | None = None last_updated: AwareDatetime | None = None @@ -486,16 +486,16 @@ class BrandDiscovery3(AdCPBaseModel): class BrandDiscovery4(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) - field_schema: Annotated[str | None, Field(alias='$schema')] = None + field_schema: Annotated[str | None, Field(alias="$schema")] = None authorized_operators: Annotated[ list[AuthorizedOperator] | None, Field( description="Entities authorized to represent brands from this house. Third parties (sellers, platforms) can verify an operator's authorization by checking this list. Operators are identified by domain." ), ] = None - brands: Annotated[list[Brand], Field(description='Brands owned by this house', min_length=1)] + brands: Annotated[list[Brand], Field(description="Brands owned by this house", min_length=1)] contact: Contact | None = None house: House last_updated: AwareDatetime | None = None @@ -509,187 +509,187 @@ class BrandDiscovery( root: Annotated[ BrandDiscovery1 | BrandDiscovery2 | BrandDiscovery3 | BrandDiscovery4, Field( - description='Brand identity and discovery file. Hosted at /.well-known/brand.json on house domains. Contains the full brand portfolio with identity, creative assets, and digital properties. Brands are identified by house + brand_id (like properties are identified by publisher + property_id). Supports variants: house portfolio (full brand data), brand agent (agent provides brand info via MCP), house redirect (pointer to house domain), or authoritative location redirect.', + description="Brand identity and discovery file. Hosted at /.well-known/brand.json on house domains. Contains the full brand portfolio with identity, creative assets, and digital properties. Brands are identified by house + brand_id (like properties are identified by publisher + property_id). Supports variants: house portfolio (full brand data), brand agent (agent provides brand info via MCP), house redirect (pointer to house domain), or authoritative location redirect.", examples=[ { - '$schema': '/schemas/latest/brand.json', - 'authoritative_location': 'https://adcontextprotocol.org/brand/abc123/brand.json', + "$schema": "/schemas/latest/brand.json", + "authoritative_location": "https://adcontextprotocol.org/brand/abc123/brand.json", }, { - '$schema': '/schemas/latest/brand.json', - 'house': 'nikeinc.com', - 'note': 'Redirect to house domain for full brand portfolio', + "$schema": "/schemas/latest/brand.json", + "house": "nikeinc.com", + "note": "Redirect to house domain for full brand portfolio", }, { - '$schema': '/schemas/latest/brand.json', - 'brand_agent': {'id': 'acme_brand_agent', 'url': 'https://agent.acme.com/mcp'}, - 'version': '1.0', + "$schema": "/schemas/latest/brand.json", + "brand_agent": {"id": "acme_brand_agent", "url": "https://agent.acme.com/mcp"}, + "version": "1.0", }, { - '$schema': '/schemas/latest/brand.json', - 'brands': [ + "$schema": "/schemas/latest/brand.json", + "brands": [ { - 'colors': {'primary': '#FF6600', 'secondary': '#0066CC'}, - 'contact': {'email': 'brands@pg.com'}, - 'description': 'Laundry detergent brand', - 'id': 'tide', - 'industry': 'cpg', - 'keller_type': 'master', - 'logos': [ + "colors": {"primary": "#FF6600", "secondary": "#0066CC"}, + "contact": {"email": "brands@pg.com"}, + "description": "Laundry detergent brand", + "id": "tide", + "industry": "cpg", + "keller_type": "master", + "logos": [ { - 'background': 'transparent-bg', - 'orientation': 'square', - 'url': 'https://cdn.pg.com/tide/logo-square.png', - 'usage': 'Primary logo for general use', - 'variant': 'primary', + "background": "transparent-bg", + "orientation": "square", + "url": "https://cdn.pg.com/tide/logo-square.png", + "usage": "Primary logo for general use", + "variant": "primary", }, { - 'background': 'dark-bg', - 'orientation': 'horizontal', - 'url': 'https://cdn.pg.com/tide/logo-horizontal-dark.png', - 'usage': 'Full lockup for dark backgrounds', - 'variant': 'full-lockup', + "background": "dark-bg", + "orientation": "horizontal", + "url": "https://cdn.pg.com/tide/logo-horizontal-dark.png", + "usage": "Full lockup for dark backgrounds", + "variant": "full-lockup", }, ], - 'names': [{'en': 'Tide'}, {'es': 'Tide'}, {'zh': '汰渍'}], - 'properties': [ - {'identifier': 'tide.com', 'primary': True, 'type': 'website'}, + "names": [{"en": "Tide"}, {"es": "Tide"}, {"zh": "汰渍"}], + "properties": [ + {"identifier": "tide.com", "primary": True, "type": "website"}, { - 'identifier': 'com.pg.tide', - 'store': 'apple', - 'type': 'mobile_app', + "identifier": "com.pg.tide", + "store": "apple", + "type": "mobile_app", }, ], - 'tagline': "Tide's In, Dirt's Out", - 'tone': { - 'attributes': ['reliable', 'family-friendly', 'confident'], - 'donts': ['Avoid technical jargon', "Don't be overly serious"], - 'dos': ['Use simple, direct language', 'Emphasize cleaning power'], - 'voice': 'clean, fresh, trustworthy', + "tagline": "Tide's In, Dirt's Out", + "tone": { + "attributes": ["reliable", "family-friendly", "confident"], + "donts": ["Avoid technical jargon", "Don't be overly serious"], + "dos": ["Use simple, direct language", "Emphasize cleaning power"], + "voice": "clean, fresh, trustworthy", }, - 'url': 'https://tide.com', + "url": "https://tide.com", }, { - 'colors': {'primary': '#00A0D2'}, - 'id': 'pampers', - 'industry': 'cpg', - 'keller_type': 'master', - 'logos': [ + "colors": {"primary": "#00A0D2"}, + "id": "pampers", + "industry": "cpg", + "keller_type": "master", + "logos": [ { - 'orientation': 'horizontal', - 'url': 'https://cdn.pg.com/pampers/logo.png', - 'variant': 'primary', + "orientation": "horizontal", + "url": "https://cdn.pg.com/pampers/logo.png", + "variant": "primary", } ], - 'names': [{'en': 'Pampers'}], - 'properties': [ - {'identifier': 'pampers.com', 'primary': True, 'type': 'website'} + "names": [{"en": "Pampers"}], + "properties": [ + {"identifier": "pampers.com", "primary": True, "type": "website"} ], - 'url': 'https://pampers.com', + "url": "https://pampers.com", }, ], - 'contact': {'email': 'brands@pg.com', 'name': 'P&G Brand Team'}, - 'house': { - 'architecture': 'house_of_brands', - 'domain': 'pg.com', - 'name': 'Procter & Gamble', + "contact": {"email": "brands@pg.com", "name": "P&G Brand Team"}, + "house": { + "architecture": "house_of_brands", + "domain": "pg.com", + "name": "Procter & Gamble", }, - 'last_updated': '2026-01-15T10:00:00Z', - 'version': '1.0', + "last_updated": "2026-01-15T10:00:00Z", + "version": "1.0", }, { - '$schema': '/schemas/latest/brand.json', - 'authorized_operators': [ + "$schema": "/schemas/latest/brand.json", + "authorized_operators": [ { - 'brands': ['nike', 'air_jordan'], - 'countries': ['US', 'GB', 'DE', 'FR'], - 'domain': 'wpp.com', + "brands": ["nike", "air_jordan"], + "countries": ["US", "GB", "DE", "FR"], + "domain": "wpp.com", }, - {'brands': ['nike'], 'countries': ['JP'], 'domain': 'dentsu.co.jp'}, - {'brands': ['*'], 'domain': 'nike.com'}, + {"brands": ["nike"], "countries": ["JP"], "domain": "dentsu.co.jp"}, + {"brands": ["*"], "domain": "nike.com"}, ], - 'brands': [ + "brands": [ { - 'colors': {'accent': '#FF6600', 'primary': '#111111'}, - 'id': 'nike', - 'keller_type': 'master', - 'logos': [ + "colors": {"accent": "#FF6600", "primary": "#111111"}, + "id": "nike", + "keller_type": "master", + "logos": [ { - 'background': 'dark-bg', - 'orientation': 'horizontal', - 'url': 'https://cdn.nike.com/swoosh-dark.svg', - 'usage': 'Swoosh icon for dark backgrounds', - 'variant': 'icon', + "background": "dark-bg", + "orientation": "horizontal", + "url": "https://cdn.nike.com/swoosh-dark.svg", + "usage": "Swoosh icon for dark backgrounds", + "variant": "icon", }, { - 'background': 'light-bg', - 'orientation': 'horizontal', - 'url': 'https://cdn.nike.com/logo-full.svg', - 'usage': 'Full logo with wordmark for light backgrounds', - 'variant': 'full-lockup', + "background": "light-bg", + "orientation": "horizontal", + "url": "https://cdn.nike.com/logo-full.svg", + "usage": "Full logo with wordmark for light backgrounds", + "variant": "full-lockup", }, ], - 'names': [{'en': 'Nike'}, {'zh': '耐克'}, {'ja': 'ナイキ'}], - 'properties': [ - {'identifier': 'nike.com', 'primary': True, 'type': 'website'}, - {'identifier': 'nike.cn', 'region': 'CN', 'type': 'website'}, + "names": [{"en": "Nike"}, {"zh": "耐克"}, {"ja": "ナイキ"}], + "properties": [ + {"identifier": "nike.com", "primary": True, "type": "website"}, + {"identifier": "nike.cn", "region": "CN", "type": "website"}, { - 'identifier': 'com.nike.omega', - 'store': 'apple', - 'type': 'mobile_app', + "identifier": "com.nike.omega", + "store": "apple", + "type": "mobile_app", }, ], - 'tagline': 'Just Do It', - 'tone': 'inspirational, bold, athletic', - 'url': 'https://nike.com', + "tagline": "Just Do It", + "tone": "inspirational, bold, athletic", + "url": "https://nike.com", }, { - 'brand_agent': {'id': 'nike_dam', 'url': 'https://dam.nike.com/mcp'}, - 'colors': {'primary': '#CE1141', 'secondary': '#111111'}, - 'id': 'air_jordan', - 'keller_type': 'endorsed', - 'logos': [ + "brand_agent": {"id": "nike_dam", "url": "https://dam.nike.com/mcp"}, + "colors": {"primary": "#CE1141", "secondary": "#111111"}, + "id": "air_jordan", + "keller_type": "endorsed", + "logos": [ { - 'background': 'transparent-bg', - 'orientation': 'square', - 'url': 'https://cdn.nike.com/jumpman.svg', - 'variant': 'icon', + "background": "transparent-bg", + "orientation": "square", + "url": "https://cdn.nike.com/jumpman.svg", + "variant": "icon", } ], - 'names': [{'en': 'Air Jordan'}, {'en': 'Jordan'}, {'en': 'Jumpman'}], - 'parent_brand': 'nike', - 'properties': [ - {'identifier': 'jordan.com', 'primary': True, 'type': 'website'}, - {'identifier': 'jumpman23.com', 'type': 'website'}, + "names": [{"en": "Air Jordan"}, {"en": "Jordan"}, {"en": "Jumpman"}], + "parent_brand": "nike", + "properties": [ + {"identifier": "jordan.com", "primary": True, "type": "website"}, + {"identifier": "jumpman23.com", "type": "website"}, ], - 'url': 'https://jordan.com', + "url": "https://jordan.com", }, { - 'id': 'converse', - 'keller_type': 'independent', - 'logos': [ + "id": "converse", + "keller_type": "independent", + "logos": [ { - 'orientation': 'square', - 'url': 'https://cdn.converse.com/star.svg', - 'variant': 'icon', + "orientation": "square", + "url": "https://cdn.converse.com/star.svg", + "variant": "icon", } ], - 'names': [{'en': 'Converse'}], - 'properties': [ - {'identifier': 'converse.com', 'primary': True, 'type': 'website'} + "names": [{"en": "Converse"}], + "properties": [ + {"identifier": "converse.com", "primary": True, "type": "website"} ], - 'url': 'https://converse.com', + "url": "https://converse.com", }, ], - 'house': { - 'architecture': 'hybrid', - 'domain': 'nikeinc.com', - 'name': 'Nike, Inc.', + "house": { + "architecture": "hybrid", + "domain": "nikeinc.com", + "name": "Nike, Inc.", }, - 'last_updated': '2026-01-15T10:00:00Z', - 'version': '1.0', + "last_updated": "2026-01-15T10:00:00Z", + "version": "1.0", }, ], - title='Brand Discovery', + title="Brand Discovery", ), ] diff --git a/src/adcp/types/generated_poc/content_standards/artifact.py b/src/adcp/types/generated_poc/content_standards/artifact.py index 83af9aee..02e6ac93 100644 --- a/src/adcp/types/generated_poc/content_standards/artifact.py +++ b/src/adcp/types/generated_poc/content_standards/artifact.py @@ -15,19 +15,19 @@ class Role(Enum): - title = 'title' - paragraph = 'paragraph' - heading = 'heading' - caption = 'caption' - quote = 'quote' - list_item = 'list_item' - description = 'description' + title = "title" + paragraph = "paragraph" + heading = "heading" + caption = "caption" + quote = "quote" + list_item = "list_item" + description = "description" class Assets(AdCPBaseModel): - content: Annotated[str, Field(description='Text content')] + content: Annotated[str, Field(description="Text content")] heading_level: Annotated[ - int | None, Field(description='Heading level (1-6), only for role=heading', ge=1, le=6) + int | None, Field(description="Heading level (1-6), only for role=heading", ge=1, le=6) ] = None language: Annotated[ str | None, @@ -41,123 +41,123 @@ class Assets(AdCPBaseModel): description="Role of this text in the document. Use 'title' for the main artifact title, 'description' for summaries." ), ] = None - type: Literal['text'] + type: Literal["text"] class TranscriptSource(Enum): - original_script = 'original_script' - subtitles = 'subtitles' - closed_captions = 'closed_captions' - dub = 'dub' - generated = 'generated' + original_script = "original_script" + subtitles = "subtitles" + closed_captions = "closed_captions" + dub = "dub" + generated = "generated" class TranscriptSource1(Enum): - original_script = 'original_script' - closed_captions = 'closed_captions' - generated = 'generated' + original_script = "original_script" + closed_captions = "closed_captions" + generated = "generated" class Identifiers(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - apple_podcast_id: Annotated[str | None, Field(description='Apple Podcasts ID')] = None - podcast_guid: Annotated[str | None, Field(description='Podcast GUID (from RSS feed)')] = None - rss_url: Annotated[AnyUrl | None, Field(description='RSS feed URL')] = None - spotify_show_id: Annotated[str | None, Field(description='Spotify show ID')] = None - youtube_video_id: Annotated[str | None, Field(description='YouTube video ID')] = None + apple_podcast_id: Annotated[str | None, Field(description="Apple Podcasts ID")] = None + podcast_guid: Annotated[str | None, Field(description="Podcast GUID (from RSS feed)")] = None + rss_url: Annotated[AnyUrl | None, Field(description="RSS feed URL")] = None + spotify_show_id: Annotated[str | None, Field(description="Spotify show ID")] = None + youtube_video_id: Annotated[str | None, Field(description="YouTube video ID")] = None class Metadata(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - author: Annotated[str | None, Field(description='Artifact author name')] = None - canonical: Annotated[AnyUrl | None, Field(description='Canonical URL')] = None + author: Annotated[str | None, Field(description="Artifact author name")] = None + canonical: Annotated[AnyUrl | None, Field(description="Canonical URL")] = None json_ld: Annotated[ - list[dict[str, Any]] | None, Field(description='JSON-LD structured data (schema.org)') + list[dict[str, Any]] | None, Field(description="JSON-LD structured data (schema.org)") ] = None - keywords: Annotated[str | None, Field(description='Artifact keywords')] = None + keywords: Annotated[str | None, Field(description="Artifact keywords")] = None open_graph: Annotated[ - dict[str, Any] | None, Field(description='Open Graph protocol metadata') + dict[str, Any] | None, Field(description="Open Graph protocol metadata") ] = None - twitter_card: Annotated[dict[str, Any] | None, Field(description='Twitter Card metadata')] = ( + twitter_card: Annotated[dict[str, Any] | None, Field(description="Twitter Card metadata")] = ( None ) class AssetAccess1(AdCPBaseModel): - method: Literal['bearer_token'] - token: Annotated[str, Field(description='OAuth2 bearer token for Authorization header')] + method: Literal["bearer_token"] + token: Annotated[str, Field(description="OAuth2 bearer token for Authorization header")] class Provider(Enum): - gcp = 'gcp' - aws = 'aws' + gcp = "gcp" + aws = "aws" class AssetAccess2(AdCPBaseModel): credentials: Annotated[ - dict[str, Any] | None, Field(description='Service account credentials') + dict[str, Any] | None, Field(description="Service account credentials") ] = None - method: Literal['service_account'] - provider: Annotated[Provider, Field(description='Cloud provider')] + method: Literal["service_account"] + provider: Annotated[Provider, Field(description="Cloud provider")] class AssetAccess3(AdCPBaseModel): - method: Literal['signed_url'] + method: Literal["signed_url"] class AssetAccess(RootModel[AssetAccess1 | AssetAccess2 | AssetAccess3]): root: Annotated[ AssetAccess1 | AssetAccess2 | AssetAccess3, - Field(description='Authentication for accessing secured asset URLs'), + Field(description="Authentication for accessing secured asset URLs"), ] class Assets1(AdCPBaseModel): - access: Annotated[AssetAccess | None, Field(description='Authentication for secured URLs')] = ( + access: Annotated[AssetAccess | None, Field(description="Authentication for secured URLs")] = ( None ) - alt_text: Annotated[str | None, Field(description='Alt text or image description')] = None - caption: Annotated[str | None, Field(description='Image caption')] = None - height: Annotated[int | None, Field(description='Image height in pixels')] = None - type: Literal['image'] - url: Annotated[AnyUrl, Field(description='Image URL')] - width: Annotated[int | None, Field(description='Image width in pixels')] = None + alt_text: Annotated[str | None, Field(description="Alt text or image description")] = None + caption: Annotated[str | None, Field(description="Image caption")] = None + height: Annotated[int | None, Field(description="Image height in pixels")] = None + type: Literal["image"] + url: Annotated[AnyUrl, Field(description="Image URL")] + width: Annotated[int | None, Field(description="Image width in pixels")] = None class Assets2(AdCPBaseModel): - access: Annotated[AssetAccess | None, Field(description='Authentication for secured URLs')] = ( + access: Annotated[AssetAccess | None, Field(description="Authentication for secured URLs")] = ( None ) - duration_ms: Annotated[int | None, Field(description='Video duration in milliseconds')] = None - thumbnail_url: Annotated[AnyUrl | None, Field(description='Video thumbnail URL')] = None - transcript: Annotated[str | None, Field(description='Video transcript')] = None + duration_ms: Annotated[int | None, Field(description="Video duration in milliseconds")] = None + thumbnail_url: Annotated[AnyUrl | None, Field(description="Video thumbnail URL")] = None + transcript: Annotated[str | None, Field(description="Video transcript")] = None transcript_source: Annotated[ - TranscriptSource | None, Field(description='How the transcript was generated') + TranscriptSource | None, Field(description="How the transcript was generated") ] = None - type: Literal['video'] - url: Annotated[AnyUrl, Field(description='Video URL')] + type: Literal["video"] + url: Annotated[AnyUrl, Field(description="Video URL")] class Assets3(AdCPBaseModel): - access: Annotated[AssetAccess | None, Field(description='Authentication for secured URLs')] = ( + access: Annotated[AssetAccess | None, Field(description="Authentication for secured URLs")] = ( None ) - duration_ms: Annotated[int | None, Field(description='Audio duration in milliseconds')] = None - transcript: Annotated[str | None, Field(description='Audio transcript')] = None + duration_ms: Annotated[int | None, Field(description="Audio duration in milliseconds")] = None + transcript: Annotated[str | None, Field(description="Audio transcript")] = None transcript_source: Annotated[ - TranscriptSource1 | None, Field(description='How the transcript was generated') + TranscriptSource1 | None, Field(description="How the transcript was generated") ] = None - type: Literal['audio'] - url: Annotated[AnyUrl, Field(description='Audio URL')] + type: Literal["audio"] + url: Annotated[AnyUrl, Field(description="Audio URL")] class Artifact(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) artifact_id: Annotated[ str, @@ -168,36 +168,36 @@ class Artifact(AdCPBaseModel): assets: Annotated[ list[Assets | Assets1 | Assets2 | Assets3], Field( - description='Artifact assets in document flow order - text blocks, images, video, audio' + description="Artifact assets in document flow order - text blocks, images, video, audio" ), ] format_id: Annotated[ format_id_1.FormatId | None, Field( - description='Optional reference to a format definition. Uses the same format registry as creative formats.' + description="Optional reference to a format definition. Uses the same format registry as creative formats." ), ] = None identifiers: Annotated[ - Identifiers | None, Field(description='Platform-specific identifiers for this artifact') + Identifiers | None, Field(description="Platform-specific identifiers for this artifact") ] = None last_update_time: Annotated[ AwareDatetime | None, - Field(description='When the artifact was last modified (ISO 8601 format)'), + Field(description="When the artifact was last modified (ISO 8601 format)"), ] = None metadata: Annotated[ - Metadata | None, Field(description='Rich metadata extracted from the artifact') + Metadata | None, Field(description="Rich metadata extracted from the artifact") ] = None property_id: Annotated[ identifier.Identifier, - Field(description='Identifier for the property where this artifact appears'), + Field(description="Identifier for the property where this artifact appears"), ] published_time: Annotated[ - AwareDatetime | None, Field(description='When the artifact was published (ISO 8601 format)') + AwareDatetime | None, Field(description="When the artifact was published (ISO 8601 format)") ] = None url: Annotated[ AnyUrl | None, Field( - description='Optional URL for this artifact (web page, podcast feed, video page). Not all artifacts have URLs (e.g., Instagram content, podcast segments, TV scenes).' + description="Optional URL for this artifact (web page, podcast feed, video page). Not all artifacts have URLs (e.g., Instagram content, podcast segments, TV scenes)." ), ] = None variant_id: Annotated[ diff --git a/src/adcp/types/generated_poc/content_standards/artifact_webhook_payload.py b/src/adcp/types/generated_poc/content_standards/artifact_webhook_payload.py index adfee3dd..dd6b08e9 100644 --- a/src/adcp/types/generated_poc/content_standards/artifact_webhook_payload.py +++ b/src/adcp/types/generated_poc/content_standards/artifact_webhook_payload.py @@ -14,51 +14,51 @@ class Pagination(AdCPBaseModel): - batch_number: Annotated[int | None, Field(description='Current batch number (1-indexed)')] = ( + batch_number: Annotated[int | None, Field(description="Current batch number (1-indexed)")] = ( None ) total_artifacts: Annotated[ - int | None, Field(description='Total artifacts in the delivery period') + int | None, Field(description="Total artifacts in the delivery period") ] = None total_batches: Annotated[ - int | None, Field(description='Total batches for this delivery period') + int | None, Field(description="Total batches for this delivery period") ] = None class Artifact(AdCPBaseModel): - artifact: Annotated[artifact_1.Artifact, Field(description='The content artifact')] + artifact: Annotated[artifact_1.Artifact, Field(description="The content artifact")] delivered_at: Annotated[ - AwareDatetime, Field(description='When the impression was delivered (ISO 8601)') + AwareDatetime, Field(description="When the impression was delivered (ISO 8601)") ] impression_id: Annotated[ str | None, - Field(description='Optional impression identifier for correlation with delivery reports'), + Field(description="Optional impression identifier for correlation with delivery reports"), ] = None package_id: Annotated[ - str | None, Field(description='Package within the media buy this artifact relates to') + str | None, Field(description="Package within the media buy this artifact relates to") ] = None class ArtifactWebhookPayload(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) artifacts: Annotated[ - list[Artifact], Field(description='Content artifacts from delivered impressions') + list[Artifact], Field(description="Content artifacts from delivered impressions") ] batch_id: Annotated[ str, Field( - description='Unique identifier for this batch of artifacts. Use for deduplication and acknowledgment.' + description="Unique identifier for this batch of artifacts. Use for deduplication and acknowledgment." ), ] ext: ext_1.ExtensionObject | None = None media_buy_id: Annotated[ - str, Field(description='Media buy identifier these artifacts belong to') + str, Field(description="Media buy identifier these artifacts belong to") ] pagination: Annotated[ - Pagination | None, Field(description='Pagination info when batching large artifact sets') + Pagination | None, Field(description="Pagination info when batching large artifact sets") ] = None timestamp: Annotated[ - AwareDatetime, Field(description='When this batch was generated (ISO 8601)') + AwareDatetime, Field(description="When this batch was generated (ISO 8601)") ] diff --git a/src/adcp/types/generated_poc/content_standards/calibrate_content_request.py b/src/adcp/types/generated_poc/content_standards/calibrate_content_request.py index 7cdf65fd..a4597086 100644 --- a/src/adcp/types/generated_poc/content_standards/calibrate_content_request.py +++ b/src/adcp/types/generated_poc/content_standards/calibrate_content_request.py @@ -13,5 +13,5 @@ class CalibrateContentRequest(AdCPBaseModel): - artifact: Annotated[artifact_1.Artifact, Field(description='Artifact to evaluate')] - standards_id: Annotated[str, Field(description='Standards configuration to calibrate against')] + artifact: Annotated[artifact_1.Artifact, Field(description="Artifact to evaluate")] + standards_id: Annotated[str, Field(description="Standards configuration to calibrate against")] diff --git a/src/adcp/types/generated_poc/content_standards/calibrate_content_response.py b/src/adcp/types/generated_poc/content_standards/calibrate_content_response.py index c28b0235..7827ace8 100644 --- a/src/adcp/types/generated_poc/content_standards/calibrate_content_response.py +++ b/src/adcp/types/generated_poc/content_standards/calibrate_content_response.py @@ -14,53 +14,53 @@ class Status(Enum): - passed = 'passed' - failed = 'failed' - warning = 'warning' - unevaluated = 'unevaluated' + passed = "passed" + failed = "failed" + warning = "warning" + unevaluated = "unevaluated" class Feature(AdCPBaseModel): explanation: Annotated[ str | None, - Field(description='Human-readable explanation of why this feature passed or failed'), + Field(description="Human-readable explanation of why this feature passed or failed"), ] = None feature_id: Annotated[ str, Field( - description='Which feature was evaluated (e.g., brand_safety, brand_suitability, competitor_adjacency)' + description="Which feature was evaluated (e.g., brand_safety, brand_suitability, competitor_adjacency)" ), ] - status: Annotated[Status, Field(description='Evaluation status for this feature')] + status: Annotated[Status, Field(description="Evaluation status for this feature")] class Verdict(Enum): - pass_ = 'pass' - fail = 'fail' + pass_ = "pass" + fail = "fail" class CalibrateContentResponse1(AdCPBaseModel): confidence: Annotated[ - float | None, Field(description='Model confidence in the verdict (0-1)', ge=0.0, le=1.0) + float | None, Field(description="Model confidence in the verdict (0-1)", ge=0.0, le=1.0) ] = None errors: Annotated[ - Any | None, Field(description='Field must not be present in success response') + Any | None, Field(description="Field must not be present in success response") ] = None explanation: Annotated[ - str | None, Field(description='Detailed natural language explanation of the decision') + str | None, Field(description="Detailed natural language explanation of the decision") ] = None features: Annotated[ - list[Feature] | None, Field(description='Per-feature breakdown with explanations') + list[Feature] | None, Field(description="Per-feature breakdown with explanations") ] = None verdict: Annotated[ - Verdict, Field(description='Overall pass/fail verdict for the content evaluation') + Verdict, Field(description="Overall pass/fail verdict for the content evaluation") ] class CalibrateContentResponse2(AdCPBaseModel): errors: list[error.Error] verdict: Annotated[ - Any | None, Field(description='Field must not be present in error response') + Any | None, Field(description="Field must not be present in error response") ] = None @@ -68,7 +68,7 @@ class CalibrateContentResponse(RootModel[CalibrateContentResponse1 | CalibrateCo root: Annotated[ CalibrateContentResponse1 | CalibrateContentResponse2, Field( - description='Response payload with verdict and detailed explanations for collaborative calibration', - title='Calibrate Content Response', + description="Response payload with verdict and detailed explanations for collaborative calibration", + title="Calibrate Content Response", ), ] diff --git a/src/adcp/types/generated_poc/content_standards/content_standards.py b/src/adcp/types/generated_poc/content_standards/content_standards.py index ca9ec964..16a8c34d 100644 --- a/src/adcp/types/generated_poc/content_standards/content_standards.py +++ b/src/adcp/types/generated_poc/content_standards/content_standards.py @@ -17,11 +17,11 @@ class CalibrationExemplars(AdCPBaseModel): fail: Annotated[ list[artifact.Artifact] | None, - Field(description='Artifacts that fail the content standards'), + Field(description="Artifacts that fail the content standards"), ] = None pass_: Annotated[ list[artifact.Artifact] | None, - Field(alias='pass', description='Artifacts that pass the content standards'), + Field(alias="pass", description="Artifacts that pass the content standards"), ] = None @@ -29,20 +29,20 @@ class ContentStandards(AdCPBaseModel): calibration_exemplars: Annotated[ CalibrationExemplars | None, Field( - description='Training/test set to calibrate policy interpretation. Provides concrete examples of pass/fail decisions.' + description="Training/test set to calibrate policy interpretation. Provides concrete examples of pass/fail decisions." ), ] = None channels_any: Annotated[ list[channels.MediaChannel] | None, Field( - description='Advertising channels. Standards apply to ANY of the listed channels (OR logic).', + description="Advertising channels. Standards apply to ANY of the listed channels (OR logic).", min_length=1, ), ] = None countries_all: Annotated[ list[str] | None, Field( - description='ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).', + description="ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).", min_length=1, ), ] = None @@ -55,14 +55,14 @@ class ContentStandards(AdCPBaseModel): ), ] = None name: Annotated[ - str | None, Field(description='Human-readable name for this standards configuration') + str | None, Field(description="Human-readable name for this standards configuration") ] = None policy: Annotated[ str | None, Field( - description='Natural language policy describing acceptable and unacceptable content contexts. Used by LLMs and human reviewers to make judgments.' + description="Natural language policy describing acceptable and unacceptable content contexts. Used by LLMs and human reviewers to make judgments." ), ] = None standards_id: Annotated[ - str, Field(description='Unique identifier for this standards configuration') + str, Field(description="Unique identifier for this standards configuration") ] diff --git a/src/adcp/types/generated_poc/content_standards/create_content_standards_request.py b/src/adcp/types/generated_poc/content_standards/create_content_standards_request.py index 6491b7d9..64112ca8 100644 --- a/src/adcp/types/generated_poc/content_standards/create_content_standards_request.py +++ b/src/adcp/types/generated_poc/content_standards/create_content_standards_request.py @@ -17,9 +17,9 @@ class Fail(AdCPBaseModel): language: Annotated[ - str | None, Field(description='BCP 47 language tag for content at this URL') + str | None, Field(description="BCP 47 language tag for content at this URL") ] = None - type: Annotated[Literal['url'], Field(description='Indicates this is a URL reference')] + type: Annotated[Literal["url"], Field(description="Indicates this is a URL reference")] value: Annotated[ AnyUrl, Field( @@ -30,9 +30,9 @@ class Fail(AdCPBaseModel): class Pass(AdCPBaseModel): language: Annotated[ - str | None, Field(description='BCP 47 language tag for content at this URL') + str | None, Field(description="BCP 47 language tag for content at this URL") ] = None - type: Annotated[Literal['url'], Field(description='Indicates this is a URL reference')] + type: Annotated[Literal["url"], Field(description="Indicates this is a URL reference")] value: Annotated[ AnyUrl, Field( @@ -45,19 +45,19 @@ class Scope(AdCPBaseModel): channels_any: Annotated[ list[channels.MediaChannel] | None, Field( - description='Advertising channels. Standards apply to ANY of the listed channels (OR logic).', + description="Advertising channels. Standards apply to ANY of the listed channels (OR logic).", min_length=1, ), ] = None countries_all: Annotated[ list[str] | None, Field( - description='ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).', + description="ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).", min_length=1, ), ] = None description: Annotated[ - str | None, Field(description='Human-readable description of this scope') + str | None, Field(description="Human-readable description of this scope") ] = None languages_any: Annotated[ list[str], @@ -70,22 +70,22 @@ class Scope(AdCPBaseModel): class CalibrationExemplars(AdCPBaseModel): fail: Annotated[ - list[Fail | artifact.Artifact] | None, Field(description='Content that fails the standards') + list[Fail | artifact.Artifact] | None, Field(description="Content that fails the standards") ] = None pass_: Annotated[ list[Pass | artifact.Artifact] | None, - Field(alias='pass', description='Content that passes the standards'), + Field(alias="pass", description="Content that passes the standards"), ] = None class CreateContentStandardsRequest(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) calibration_exemplars: Annotated[ CalibrationExemplars | None, Field( - description='Training/test set to calibrate policy interpretation. Use URL references for pages to be fetched and analyzed, or full artifacts for pre-extracted content.' + description="Training/test set to calibrate policy interpretation. Use URL references for pages to be fetched and analyzed, or full artifacts for pre-extracted content." ), ] = None context: context_1.ContextObject | None = None @@ -93,7 +93,7 @@ class CreateContentStandardsRequest(AdCPBaseModel): policy: Annotated[ str, Field( - description='Natural language policy describing acceptable and unacceptable content contexts. Used by LLMs and human reviewers to make judgments.' + description="Natural language policy describing acceptable and unacceptable content contexts. Used by LLMs and human reviewers to make judgments." ), ] - scope: Annotated[Scope, Field(description='Where this standards configuration applies')] + scope: Annotated[Scope, Field(description="Where this standards configuration applies")] diff --git a/src/adcp/types/generated_poc/content_standards/create_content_standards_response.py b/src/adcp/types/generated_poc/content_standards/create_content_standards_response.py index 1be37266..741ba908 100644 --- a/src/adcp/types/generated_poc/content_standards/create_content_standards_response.py +++ b/src/adcp/types/generated_poc/content_standards/create_content_standards_response.py @@ -17,11 +17,11 @@ class CreateContentStandardsResponse1(AdCPBaseModel): context: context_1.ContextObject | None = None errors: Annotated[ - Any | None, Field(description='Field must not be present in success response') + Any | None, Field(description="Field must not be present in success response") ] = None ext: ext_1.ExtensionObject | None = None standards_id: Annotated[ - str, Field(description='Unique identifier for the created standards configuration') + str, Field(description="Unique identifier for the created standards configuration") ] @@ -29,14 +29,14 @@ class CreateContentStandardsResponse2(AdCPBaseModel): conflicting_standards_id: Annotated[ str | None, Field( - description='If the error is a scope conflict, the ID of the existing standards that conflict' + description="If the error is a scope conflict, the ID of the existing standards that conflict" ), ] = None context: context_1.ContextObject | None = None errors: list[error.Error] ext: ext_1.ExtensionObject | None = None standards_id: Annotated[ - Any | None, Field(description='Field must not be present in error response') + Any | None, Field(description="Field must not be present in error response") ] = None @@ -46,7 +46,7 @@ class CreateContentStandardsResponse( root: Annotated[ CreateContentStandardsResponse1 | CreateContentStandardsResponse2, Field( - description='Response payload for creating a content standards configuration', - title='Create Content Standards Response', + description="Response payload for creating a content standards configuration", + title="Create Content Standards Response", ), ] diff --git a/src/adcp/types/generated_poc/content_standards/get_content_standards_request.py b/src/adcp/types/generated_poc/content_standards/get_content_standards_request.py index d4053ef3..ff8dfc9a 100644 --- a/src/adcp/types/generated_poc/content_standards/get_content_standards_request.py +++ b/src/adcp/types/generated_poc/content_standards/get_content_standards_request.py @@ -17,5 +17,5 @@ class GetContentStandardsRequest(AdCPBaseModel): context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None standards_id: Annotated[ - str, Field(description='Identifier for the standards configuration to retrieve') + str, Field(description="Identifier for the standards configuration to retrieve") ] diff --git a/src/adcp/types/generated_poc/content_standards/get_content_standards_response.py b/src/adcp/types/generated_poc/content_standards/get_content_standards_response.py index 824ce8ca..e5d2d140 100644 --- a/src/adcp/types/generated_poc/content_standards/get_content_standards_response.py +++ b/src/adcp/types/generated_poc/content_standards/get_content_standards_response.py @@ -20,14 +20,14 @@ class GetContentStandardsResponse2(AdCPBaseModel): errors: list[error.Error] ext: ext_1.ExtensionObject | None = None standards_id: Annotated[ - Any | None, Field(description='Field must not be present in error response') + Any | None, Field(description="Field must not be present in error response") ] = None class GetContentStandardsResponse1(ContentStandards): context: context_1.ContextObject | None = None errors: Annotated[ - Any | None, Field(description='Field must not be present in success response') + Any | None, Field(description="Field must not be present in success response") ] = None @@ -37,7 +37,7 @@ class GetContentStandardsResponse( root: Annotated[ GetContentStandardsResponse1 | GetContentStandardsResponse2, Field( - description='Response payload with content safety policies', - title='Get Content Standards Response', + description="Response payload with content safety policies", + title="Get Content Standards Response", ), ] diff --git a/src/adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py b/src/adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py index 9a948811..6945bbdd 100644 --- a/src/adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py +++ b/src/adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py @@ -16,31 +16,31 @@ class Pagination(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) cursor: Annotated[ str | None, - Field(description='Opaque cursor from a previous response to fetch the next page'), + Field(description="Opaque cursor from a previous response to fetch the next page"), ] = None max_results: Annotated[ int | None, - Field(description='Maximum number of artifacts to return per page', ge=1, le=10000), + Field(description="Maximum number of artifacts to return per page", ge=1, le=10000), ] = 1000 class Method(Enum): - random = 'random' - stratified = 'stratified' - recent = 'recent' - failures_only = 'failures_only' + random = "random" + stratified = "stratified" + recent = "recent" + failures_only = "failures_only" class Sampling(AdCPBaseModel): - method: Annotated[Method | None, Field(description='How to select the sample')] = None + method: Annotated[Method | None, Field(description="How to select the sample")] = None rate: Annotated[ float | None, Field( - description='Sampling rate (0-1). 1.0 = all deliveries, 0.25 = 25% sample.', + description="Sampling rate (0-1). 1.0 = all deliveries, 0.25 = 25% sample.", ge=0.0, le=1.0, ), @@ -48,8 +48,8 @@ class Sampling(AdCPBaseModel): class TimeRange(AdCPBaseModel): - end: Annotated[AwareDatetime | None, Field(description='End of time range (exclusive)')] = None - start: Annotated[AwareDatetime | None, Field(description='Start of time range (inclusive)')] = ( + end: Annotated[AwareDatetime | None, Field(description="End of time range (exclusive)")] = None + start: Annotated[AwareDatetime | None, Field(description="Start of time range (inclusive)")] = ( None ) @@ -58,28 +58,28 @@ class GetMediaBuyArtifactsRequest(AdCPBaseModel): account_id: Annotated[ str | None, Field( - description='Filter artifacts to a specific account. When provided, only returns artifacts for media buys belonging to this account. When omitted, returns artifacts across all accessible accounts. Optional if the agent has a single account.' + description="Filter artifacts to a specific account. When provided, only returns artifacts for media buys belonging to this account. When omitted, returns artifacts across all accessible accounts. Optional if the agent has a single account." ), ] = None context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None - media_buy_id: Annotated[str, Field(description='Media buy to get artifacts from')] + media_buy_id: Annotated[str, Field(description="Media buy to get artifacts from")] package_ids: Annotated[ list[str] | None, - Field(description='Filter to specific packages within the media buy', min_length=1), + Field(description="Filter to specific packages within the media buy", min_length=1), ] = None pagination: Annotated[ Pagination | None, Field( - description='Pagination parameters. Uses higher limits than standard pagination because artifact result sets can be very large.' + description="Pagination parameters. Uses higher limits than standard pagination because artifact result sets can be very large." ), ] = None sampling: Annotated[ Sampling | None, Field( - description='Sampling parameters. Defaults to the sampling rate agreed in the media buy.' + description="Sampling parameters. Defaults to the sampling rate agreed in the media buy." ), ] = None - time_range: Annotated[TimeRange | None, Field(description='Filter to specific time period')] = ( + time_range: Annotated[TimeRange | None, Field(description="Filter to specific time period")] = ( None ) diff --git a/src/adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py b/src/adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py index 5f203df6..d899ce1b 100644 --- a/src/adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py +++ b/src/adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py @@ -18,33 +18,33 @@ class BrandContext(AdCPBaseModel): - brand_id: Annotated[str | None, Field(description='Brand identifier')] = None - sku_id: Annotated[str | None, Field(description='Product/SKU identifier if applicable')] = None + brand_id: Annotated[str | None, Field(description="Brand identifier")] = None + sku_id: Annotated[str | None, Field(description="Product/SKU identifier if applicable")] = None class LocalVerdict(Enum): - pass_ = 'pass' - fail = 'fail' - unevaluated = 'unevaluated' + pass_ = "pass" + fail = "fail" + unevaluated = "unevaluated" class Method(Enum): - random = 'random' - stratified = 'stratified' - recent = 'recent' - failures_only = 'failures_only' + random = "random" + stratified = "stratified" + recent = "recent" + failures_only = "failures_only" class SamplingInfo(AdCPBaseModel): - effective_rate: Annotated[float | None, Field(description='Actual sampling rate achieved')] = ( + effective_rate: Annotated[float | None, Field(description="Actual sampling rate achieved")] = ( None ) - method: Annotated[Method | None, Field(description='Sampling method used')] = None + method: Annotated[Method | None, Field(description="Sampling method used")] = None sampled_count: Annotated[ - int | None, Field(description='Number of artifacts in this response') + int | None, Field(description="Number of artifacts in this response") ] = None total_deliveries: Annotated[ - int | None, Field(description='Total deliveries in the time range') + int | None, Field(description="Total deliveries in the time range") ] = None @@ -53,49 +53,49 @@ class GetMediaBuyArtifactsResponse2(AdCPBaseModel): errors: list[error.Error] ext: ext_1.ExtensionObject | None = None media_buy_id: Annotated[ - Any | None, Field(description='Field must not be present in error response') + Any | None, Field(description="Field must not be present in error response") ] = None class Artifact(AdCPBaseModel): - artifact: Annotated[artifact_1.Artifact, Field(description='Full artifact with content assets')] + artifact: Annotated[artifact_1.Artifact, Field(description="Full artifact with content assets")] brand_context: Annotated[ BrandContext | None, Field( - description='Brand information for policy evaluation. Schema TBD - placeholder for brand identifiers.' + description="Brand information for policy evaluation. Schema TBD - placeholder for brand identifiers." ), ] = None channel: Annotated[ - str | None, Field(description='Channel type (e.g., display, video, audio, social)') + str | None, Field(description="Channel type (e.g., display, video, audio, social)") ] = None country: Annotated[ - str | None, Field(description='ISO 3166-1 alpha-2 country code where delivery occurred') + str | None, Field(description="ISO 3166-1 alpha-2 country code where delivery occurred") ] = None local_verdict: Annotated[ LocalVerdict | None, Field(description="Seller's local model verdict for this artifact") ] = None package_id: Annotated[ - str | None, Field(description='Which package this delivery belongs to') + str | None, Field(description="Which package this delivery belongs to") ] = None - record_id: Annotated[str, Field(description='Unique identifier for this delivery record')] - timestamp: Annotated[AwareDatetime | None, Field(description='When the delivery occurred')] = ( + record_id: Annotated[str, Field(description="Unique identifier for this delivery record")] + timestamp: Annotated[AwareDatetime | None, Field(description="When the delivery occurred")] = ( None ) class GetMediaBuyArtifactsResponse1(AdCPBaseModel): artifacts: Annotated[ - list[Artifact], Field(description='Delivery records with full artifact content') + list[Artifact], Field(description="Delivery records with full artifact content") ] context: context_1.ContextObject | None = None errors: Annotated[ - Any | None, Field(description='Field must not be present in success response') + Any | None, Field(description="Field must not be present in success response") ] = None ext: ext_1.ExtensionObject | None = None - media_buy_id: Annotated[str, Field(description='Media buy these artifacts belong to')] + media_buy_id: Annotated[str, Field(description="Media buy these artifacts belong to")] pagination: pagination_response.PaginationResponse | None = None sampling_info: Annotated[ - SamplingInfo | None, Field(description='Information about how the sample was generated') + SamplingInfo | None, Field(description="Information about how the sample was generated") ] = None @@ -105,7 +105,7 @@ class GetMediaBuyArtifactsResponse( root: Annotated[ GetMediaBuyArtifactsResponse1 | GetMediaBuyArtifactsResponse2, Field( - description='Response containing content artifacts from a media buy for validation', - title='Get Media Buy Artifacts Response', + description="Response containing content artifacts from a media buy for validation", + title="Get Media Buy Artifacts Response", ), ] diff --git a/src/adcp/types/generated_poc/content_standards/list_content_standards_request.py b/src/adcp/types/generated_poc/content_standards/list_content_standards_request.py index 06fab2dd..d88e4ff9 100644 --- a/src/adcp/types/generated_poc/content_standards/list_content_standards_request.py +++ b/src/adcp/types/generated_poc/content_standards/list_content_standards_request.py @@ -17,18 +17,18 @@ class ListContentStandardsRequest(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) channels: Annotated[ - list[channels_1.MediaChannel] | None, Field(description='Filter by channel', min_length=1) + list[channels_1.MediaChannel] | None, Field(description="Filter by channel", min_length=1) ] = None context: context_1.ContextObject | None = None countries: Annotated[ list[str] | None, - Field(description='Filter by ISO 3166-1 alpha-2 country codes', min_length=1), + Field(description="Filter by ISO 3166-1 alpha-2 country codes", min_length=1), ] = None ext: ext_1.ExtensionObject | None = None languages: Annotated[ - list[str] | None, Field(description='Filter by BCP 47 language tags', min_length=1) + list[str] | None, Field(description="Filter by BCP 47 language tags", min_length=1) ] = None pagination: pagination_request.PaginationRequest | None = None diff --git a/src/adcp/types/generated_poc/content_standards/list_content_standards_response.py b/src/adcp/types/generated_poc/content_standards/list_content_standards_response.py index 539ff100..61d7a5dc 100644 --- a/src/adcp/types/generated_poc/content_standards/list_content_standards_response.py +++ b/src/adcp/types/generated_poc/content_standards/list_content_standards_response.py @@ -21,20 +21,20 @@ class ListContentStandardsResponse2(AdCPBaseModel): errors: list[error.Error] ext: ext_1.ExtensionObject | None = None standards: Annotated[ - Any | None, Field(description='Field must not be present in error response') + Any | None, Field(description="Field must not be present in error response") ] = None class ListContentStandardsResponse1(AdCPBaseModel): context: context_1.ContextObject | None = None errors: Annotated[ - Any | None, Field(description='Field must not be present in success response') + Any | None, Field(description="Field must not be present in success response") ] = None ext: ext_1.ExtensionObject | None = None pagination: pagination_response.PaginationResponse | None = None standards: Annotated[ list[content_standards.ContentStandards], - Field(description='Array of content standards configurations matching the filter criteria'), + Field(description="Array of content standards configurations matching the filter criteria"), ] @@ -44,7 +44,7 @@ class ListContentStandardsResponse( root: Annotated[ ListContentStandardsResponse1 | ListContentStandardsResponse2, Field( - description='Response payload with list of content standards configurations', - title='List Content Standards Response', + description="Response payload with list of content standards configurations", + title="List Content Standards Response", ), ] diff --git a/src/adcp/types/generated_poc/content_standards/update_content_standards_request.py b/src/adcp/types/generated_poc/content_standards/update_content_standards_request.py index 00cccfd7..0960e5af 100644 --- a/src/adcp/types/generated_poc/content_standards/update_content_standards_request.py +++ b/src/adcp/types/generated_poc/content_standards/update_content_standards_request.py @@ -17,9 +17,9 @@ class Fail(AdCPBaseModel): language: Annotated[ - str | None, Field(description='BCP 47 language tag for content at this URL') + str | None, Field(description="BCP 47 language tag for content at this URL") ] = None - type: Annotated[Literal['url'], Field(description='Indicates this is a URL reference')] + type: Annotated[Literal["url"], Field(description="Indicates this is a URL reference")] value: Annotated[ AnyUrl, Field( @@ -30,9 +30,9 @@ class Fail(AdCPBaseModel): class Pass(AdCPBaseModel): language: Annotated[ - str | None, Field(description='BCP 47 language tag for content at this URL') + str | None, Field(description="BCP 47 language tag for content at this URL") ] = None - type: Annotated[Literal['url'], Field(description='Indicates this is a URL reference')] + type: Annotated[Literal["url"], Field(description="Indicates this is a URL reference")] value: Annotated[ AnyUrl, Field( @@ -45,19 +45,19 @@ class Scope(AdCPBaseModel): channels_any: Annotated[ list[channels.MediaChannel] | None, Field( - description='Advertising channels. Standards apply to ANY of the listed channels (OR logic).', + description="Advertising channels. Standards apply to ANY of the listed channels (OR logic).", min_length=1, ), ] = None countries_all: Annotated[ list[str] | None, Field( - description='ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).', + description="ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).", min_length=1, ), ] = None description: Annotated[ - str | None, Field(description='Human-readable description of this scope') + str | None, Field(description="Human-readable description of this scope") ] = None languages_any: Annotated[ list[str] | None, @@ -70,22 +70,22 @@ class Scope(AdCPBaseModel): class CalibrationExemplars(AdCPBaseModel): fail: Annotated[ - list[Fail | artifact.Artifact] | None, Field(description='Content that fails the standards') + list[Fail | artifact.Artifact] | None, Field(description="Content that fails the standards") ] = None pass_: Annotated[ list[Pass | artifact.Artifact] | None, - Field(alias='pass', description='Content that passes the standards'), + Field(alias="pass", description="Content that passes the standards"), ] = None class UpdateContentStandardsRequest(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) calibration_exemplars: Annotated[ CalibrationExemplars | None, Field( - description='Updated training/test set to calibrate policy interpretation. Use URL references for pages to be fetched and analyzed, or full artifacts for pre-extracted content.' + description="Updated training/test set to calibrate policy interpretation. Use URL references for pages to be fetched and analyzed, or full artifacts for pre-extracted content." ), ] = None context: context_1.ContextObject | None = None @@ -93,11 +93,11 @@ class UpdateContentStandardsRequest(AdCPBaseModel): policy: Annotated[ str | None, Field( - description='Updated natural language policy describing acceptable and unacceptable content contexts.' + description="Updated natural language policy describing acceptable and unacceptable content contexts." ), ] = None scope: Annotated[ Scope | None, - Field(description='Updated scope for where this standards configuration applies'), + Field(description="Updated scope for where this standards configuration applies"), ] = None - standards_id: Annotated[str, Field(description='ID of the standards configuration to update')] + standards_id: Annotated[str, Field(description="ID of the standards configuration to update")] diff --git a/src/adcp/types/generated_poc/content_standards/update_content_standards_response.py b/src/adcp/types/generated_poc/content_standards/update_content_standards_response.py index 0f23c3a9..d388126b 100644 --- a/src/adcp/types/generated_poc/content_standards/update_content_standards_response.py +++ b/src/adcp/types/generated_poc/content_standards/update_content_standards_response.py @@ -16,19 +16,19 @@ class UpdateContentStandardsResponse(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) conflicting_standards_id: Annotated[ str | None, Field( - description='If scope change conflicts with another configuration, the ID of the conflicting standards' + description="If scope change conflicts with another configuration, the ID of the conflicting standards" ), ] = None context: context_1.ContextObject | None = None errors: Annotated[ - list[error.Error] | None, Field(description='Errors that occurred during the update') + list[error.Error] | None, Field(description="Errors that occurred during the update") ] = None ext: ext_1.ExtensionObject | None = None standards_id: Annotated[ - str | None, Field(description='ID of the updated standards configuration') + str | None, Field(description="ID of the updated standards configuration") ] = None diff --git a/src/adcp/types/generated_poc/content_standards/validate_content_delivery_request.py b/src/adcp/types/generated_poc/content_standards/validate_content_delivery_request.py index 730b1701..50eafc78 100644 --- a/src/adcp/types/generated_poc/content_standards/validate_content_delivery_request.py +++ b/src/adcp/types/generated_poc/content_standards/validate_content_delivery_request.py @@ -15,30 +15,30 @@ class BrandContext(AdCPBaseModel): - brand_id: Annotated[str | None, Field(description='Brand identifier')] = None - sku_id: Annotated[str | None, Field(description='Product/SKU identifier if applicable')] = None + brand_id: Annotated[str | None, Field(description="Brand identifier")] = None + sku_id: Annotated[str | None, Field(description="Product/SKU identifier if applicable")] = None class Record(AdCPBaseModel): - artifact: Annotated[artifact_1.Artifact, Field(description='Artifact where ad was delivered')] + artifact: Annotated[artifact_1.Artifact, Field(description="Artifact where ad was delivered")] brand_context: Annotated[ BrandContext | None, Field( - description='Brand information for policy evaluation. Schema TBD - placeholder for brand identifiers.' + description="Brand information for policy evaluation. Schema TBD - placeholder for brand identifiers." ), ] = None channel: Annotated[ - str | None, Field(description='Channel type (e.g., display, video, audio, social)') + str | None, Field(description="Channel type (e.g., display, video, audio, social)") ] = None country: Annotated[ - str | None, Field(description='ISO 3166-1 alpha-2 country code where delivery occurred') + str | None, Field(description="ISO 3166-1 alpha-2 country code where delivery occurred") ] = None media_buy_id: Annotated[ str | None, - Field(description='Media buy this record belongs to (when batching across multiple buys)'), + Field(description="Media buy this record belongs to (when batching across multiple buys)"), ] = None - record_id: Annotated[str, Field(description='Unique identifier for this delivery record')] - timestamp: Annotated[AwareDatetime | None, Field(description='When the delivery occurred')] = ( + record_id: Annotated[str, Field(description="Unique identifier for this delivery record")] + timestamp: Annotated[AwareDatetime | None, Field(description="When the delivery occurred")] = ( None ) @@ -48,15 +48,15 @@ class ValidateContentDeliveryRequest(AdCPBaseModel): ext: ext_1.ExtensionObject | None = None feature_ids: Annotated[ list[str] | None, - Field(description='Specific features to evaluate (defaults to all)', min_length=1), + Field(description="Specific features to evaluate (defaults to all)", min_length=1), ] = None include_passed: Annotated[ - bool | None, Field(description='Include passed records in results') + bool | None, Field(description="Include passed records in results") ] = True records: Annotated[ list[Record], Field( - description='Delivery records to validate (max 10,000)', max_length=10000, min_length=1 + description="Delivery records to validate (max 10,000)", max_length=10000, min_length=1 ), ] - standards_id: Annotated[str, Field(description='Standards configuration to validate against')] + standards_id: Annotated[str, Field(description="Standards configuration to validate against")] diff --git a/src/adcp/types/generated_poc/content_standards/validate_content_delivery_response.py b/src/adcp/types/generated_poc/content_standards/validate_content_delivery_response.py index a58d29d9..8c2a21e5 100644 --- a/src/adcp/types/generated_poc/content_standards/validate_content_delivery_response.py +++ b/src/adcp/types/generated_poc/content_standards/validate_content_delivery_response.py @@ -16,10 +16,10 @@ class Status(Enum): - passed = 'passed' - failed = 'failed' - warning = 'warning' - unevaluated = 'unevaluated' + passed = "passed" + failed = "failed" + warning = "warning" + unevaluated = "unevaluated" class Feature(AdCPBaseModel): @@ -28,7 +28,7 @@ class Feature(AdCPBaseModel): rule_id: Annotated[ str | None, Field( - description='Which rule triggered this result (e.g., GARM category, Scope3 standard)' + description="Which rule triggered this result (e.g., GARM category, Scope3 standard)" ), ] = None status: Status @@ -36,16 +36,16 @@ class Feature(AdCPBaseModel): class Verdict(Enum): - pass_ = 'pass' - fail = 'fail' + pass_ = "pass" + fail = "fail" class Result(AdCPBaseModel): features: Annotated[ - list[Feature] | None, Field(description='Optional feature-level breakdown') + list[Feature] | None, Field(description="Optional feature-level breakdown") ] = None - record_id: Annotated[str, Field(description='Which delivery record was evaluated')] - verdict: Annotated[Verdict, Field(description='Overall pass/fail verdict for this record')] + record_id: Annotated[str, Field(description="Which delivery record was evaluated")] + verdict: Annotated[Verdict, Field(description="Overall pass/fail verdict for this record")] class Summary(AdCPBaseModel): @@ -57,11 +57,11 @@ class Summary(AdCPBaseModel): class ValidateContentDeliveryResponse1(AdCPBaseModel): context: context_1.ContextObject | None = None errors: Annotated[ - Any | None, Field(description='Field must not be present in success response') + Any | None, Field(description="Field must not be present in success response") ] = None ext: ext_1.ExtensionObject | None = None - results: Annotated[list[Result], Field(description='Per-record evaluation results')] - summary: Annotated[Summary, Field(description='Summary counts across all records')] + results: Annotated[list[Result], Field(description="Per-record evaluation results")] + summary: Annotated[Summary, Field(description="Summary counts across all records")] class ValidateContentDeliveryResponse2(AdCPBaseModel): @@ -69,7 +69,7 @@ class ValidateContentDeliveryResponse2(AdCPBaseModel): errors: list[error.Error] ext: ext_1.ExtensionObject | None = None summary: Annotated[ - Any | None, Field(description='Field must not be present in error response') + Any | None, Field(description="Field must not be present in error response") ] = None @@ -79,7 +79,7 @@ class ValidateContentDeliveryResponse( root: Annotated[ ValidateContentDeliveryResponse1 | ValidateContentDeliveryResponse2, Field( - description='Response payload with per-record verdicts and optional feature breakdown', - title='Validate Content Delivery Response', + description="Response payload with per-record verdicts and optional feature breakdown", + title="Validate Content Delivery Response", ), ] diff --git a/src/adcp/types/generated_poc/core/account.py b/src/adcp/types/generated_poc/core/account.py index 3c9ba729..f041c4f2 100644 --- a/src/adcp/types/generated_poc/core/account.py +++ b/src/adcp/types/generated_poc/core/account.py @@ -14,60 +14,60 @@ class Billing(Enum): - brand = 'brand' - operator = 'operator' - agent = 'agent' + brand = "brand" + operator = "operator" + agent = "agent" class CreditLimit(AdCPBaseModel): amount: Annotated[float, Field(ge=0.0)] - currency: Annotated[str, Field(pattern='^[A-Z]{3}$')] + currency: Annotated[str, Field(pattern="^[A-Z]{3}$")] class Status(Enum): - active = 'active' - pending_approval = 'pending_approval' - payment_required = 'payment_required' - suspended = 'suspended' - closed = 'closed' + active = "active" + pending_approval = "pending_approval" + payment_required = "payment_required" + suspended = "suspended" + closed = "closed" class Account(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - account_id: Annotated[str, Field(description='Unique identifier for this account')] + account_id: Annotated[str, Field(description="Unique identifier for this account")] advertiser: Annotated[ - str | None, Field(description='The advertiser whose rates apply to this account') + str | None, Field(description="The advertiser whose rates apply to this account") ] = None billing: Annotated[ Billing | None, Field( - description='Who is invoiced on this account. brand: seller invoices the brand directly. operator: seller invoices the operator (agency). agent: agent consolidates billing.' + description="Who is invoiced on this account. brand: seller invoices the brand directly. operator: seller invoices the operator (agency). agent: agent consolidates billing." ), ] = None billing_proxy: Annotated[ str | None, Field( - description='Optional intermediary who receives invoices on behalf of the advertiser (e.g., agency)' + description="Optional intermediary who receives invoices on behalf of the advertiser (e.g., agency)" ), ] = None brand_id: Annotated[ str | None, Field( - description='Brand ID within the house portfolio (from brand.json)', - pattern='^[a-z0-9_]+$', + description="Brand ID within the house portfolio (from brand.json)", + pattern="^[a-z0-9_]+$", ), ] = None credit_limit: Annotated[ - CreditLimit | None, Field(description='Maximum outstanding balance allowed') + CreditLimit | None, Field(description="Maximum outstanding balance allowed") ] = None ext: ext_1.ExtensionObject | None = None house: Annotated[ str | None, Field( - description='House domain where brand.json is hosted. Canonical identity anchor for the brand.', - pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', + description="House domain where brand.json is hosted. Canonical identity anchor for the brand.", + pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", ), ] = None name: Annotated[ @@ -76,25 +76,25 @@ class Account(AdCPBaseModel): operator: Annotated[ str | None, Field( - description='Domain of the entity operating this account', - pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', + description="Domain of the entity operating this account", + pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", ), ] = None payment_terms: Annotated[ str | None, Field(description="Payment terms (e.g., 'net_30', 'prepay')") ] = None rate_card: Annotated[ - str | None, Field(description='Identifier for the rate card applied to this account') + str | None, Field(description="Identifier for the rate card applied to this account") ] = None sandbox: Annotated[ bool | None, Field( - description='When true, this is a sandbox account. All requests using this account_id are treated as sandbox — no real platform calls, no real spend.' + description="When true, this is a sandbox account. All requests using this account_id are treated as sandbox — no real platform calls, no real spend." ), ] = None status: Annotated[ Status, Field( - description='Account status. pending_approval: seller reviewing (credit, contracts). payment_required: credit limit reached or funds depleted. suspended: was active, now paused. closed: terminated.' + description="Account status. pending_approval: seller reviewing (credit, contracts). payment_required: credit limit reached or funds depleted. suspended: was active, now paused. closed: terminated." ), ] diff --git a/src/adcp/types/generated_poc/core/activation_key.py b/src/adcp/types/generated_poc/core/activation_key.py index e80f122f..94458d05 100644 --- a/src/adcp/types/generated_poc/core/activation_key.py +++ b/src/adcp/types/generated_poc/core/activation_key.py @@ -12,22 +12,22 @@ class ActivationKey1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) segment_id: Annotated[ str, - Field(description='The platform-specific segment identifier to use in campaign targeting'), + Field(description="The platform-specific segment identifier to use in campaign targeting"), ] - type: Annotated[Literal['segment_id'], Field(description='Segment ID based targeting')] + type: Annotated[Literal["segment_id"], Field(description="Segment ID based targeting")] class ActivationKey2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - key: Annotated[str, Field(description='The targeting parameter key')] - type: Annotated[Literal['key_value'], Field(description='Key-value pair based targeting')] - value: Annotated[str, Field(description='The targeting parameter value')] + key: Annotated[str, Field(description="The targeting parameter key")] + type: Annotated[Literal["key_value"], Field(description="Key-value pair based targeting")] + value: Annotated[str, Field(description="The targeting parameter value")] class ActivationKey(RootModel[ActivationKey1 | ActivationKey2]): @@ -35,6 +35,6 @@ class ActivationKey(RootModel[ActivationKey1 | ActivationKey2]): ActivationKey1 | ActivationKey2, Field( description="Universal identifier for using a signal on a destination platform. Can be either a segment ID or a key-value pair depending on the platform's targeting mechanism.", - title='Activation Key', + title="Activation Key", ), ] diff --git a/src/adcp/types/generated_poc/core/assets/audio_asset.py b/src/adcp/types/generated_poc/core/assets/audio_asset.py index ea8d83d8..e057ec76 100644 --- a/src/adcp/types/generated_poc/core/assets/audio_asset.py +++ b/src/adcp/types/generated_poc/core/assets/audio_asset.py @@ -18,41 +18,41 @@ class BitDepth(IntEnum): class Channels(Enum): - mono = 'mono' - stereo = 'stereo' - field_5_1 = '5.1' - field_7_1 = '7.1' + mono = "mono" + stereo = "stereo" + field_5_1 = "5.1" + field_7_1 = "7.1" class AudioAsset(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - bit_depth: Annotated[BitDepth | None, Field(description='Bit depth')] = None + bit_depth: Annotated[BitDepth | None, Field(description="Bit depth")] = None bitrate_kbps: Annotated[ - int | None, Field(description='Bitrate in kilobits per second', ge=1) + int | None, Field(description="Bitrate in kilobits per second", ge=1) ] = None - channels: Annotated[Channels | None, Field(description='Channel configuration')] = None + channels: Annotated[Channels | None, Field(description="Channel configuration")] = None codec: Annotated[ str | None, Field( - description='Audio codec used (aac, aac_lc, he_aac, pcm, mp3, vorbis, opus, flac, ac3, eac3, etc.)' + description="Audio codec used (aac, aac_lc, he_aac, pcm, mp3, vorbis, opus, flac, ac3, eac3, etc.)" ), ] = None container_format: Annotated[ str | None, - Field(description='Audio container/file format (mp3, m4a, aac, wav, ogg, flac, etc.)'), + Field(description="Audio container/file format (mp3, m4a, aac, wav, ogg, flac, etc.)"), ] = None duration_ms: Annotated[ - int | None, Field(description='Audio duration in milliseconds', ge=0) + int | None, Field(description="Audio duration in milliseconds", ge=0) ] = None - file_size_bytes: Annotated[int | None, Field(description='File size in bytes', ge=1)] = None - loudness_lufs: Annotated[float | None, Field(description='Integrated loudness in LUFS')] = None + file_size_bytes: Annotated[int | None, Field(description="File size in bytes", ge=1)] = None + loudness_lufs: Annotated[float | None, Field(description="Integrated loudness in LUFS")] = None sampling_rate_hz: Annotated[ - int | None, Field(description='Sampling rate in Hz (e.g., 44100, 48000, 96000)') + int | None, Field(description="Sampling rate in Hz (e.g., 44100, 48000, 96000)") ] = None transcript_url: Annotated[ - AnyUrl | None, Field(description='URL to text transcript of the audio content') + AnyUrl | None, Field(description="URL to text transcript of the audio content") ] = None - true_peak_dbfs: Annotated[float | None, Field(description='True peak level in dBFS')] = None - url: Annotated[AnyUrl, Field(description='URL to the audio asset')] + true_peak_dbfs: Annotated[float | None, Field(description="True peak level in dBFS")] = None + url: Annotated[AnyUrl, Field(description="URL to the audio asset")] diff --git a/src/adcp/types/generated_poc/core/assets/css_asset.py b/src/adcp/types/generated_poc/core/assets/css_asset.py index eebcc8fd..7eeaaf01 100644 --- a/src/adcp/types/generated_poc/core/assets/css_asset.py +++ b/src/adcp/types/generated_poc/core/assets/css_asset.py @@ -12,9 +12,9 @@ class CssAsset(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - content: Annotated[str, Field(description='CSS content')] + content: Annotated[str, Field(description="CSS content")] media: Annotated[ str | None, Field(description="CSS media query context (e.g., 'screen', 'print')") ] = None diff --git a/src/adcp/types/generated_poc/core/assets/daast_asset.py b/src/adcp/types/generated_poc/core/assets/daast_asset.py index a321488f..e89ac9d0 100644 --- a/src/adcp/types/generated_poc/core/assets/daast_asset.py +++ b/src/adcp/types/generated_poc/core/assets/daast_asset.py @@ -15,55 +15,55 @@ class DaastAsset1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) companion_ads: Annotated[ - bool | None, Field(description='Whether companion display ads are included') + bool | None, Field(description="Whether companion display ads are included") ] = None daast_version: Annotated[ - daast_version_1.DaastVersion | None, Field(description='DAAST specification version') + daast_version_1.DaastVersion | None, Field(description="DAAST specification version") ] = None delivery_type: Annotated[ - Literal['url'], - Field(description='Discriminator indicating DAAST is delivered via URL endpoint'), + Literal["url"], + Field(description="Discriminator indicating DAAST is delivered via URL endpoint"), ] duration_ms: Annotated[ - int | None, Field(description='Expected audio duration in milliseconds (if known)', ge=0) + int | None, Field(description="Expected audio duration in milliseconds (if known)", ge=0) ] = None tracking_events: Annotated[ list[daast_tracking_event.DaastTrackingEvent] | None, - Field(description='Tracking events supported by this DAAST tag'), + Field(description="Tracking events supported by this DAAST tag"), ] = None transcript_url: Annotated[ - AnyUrl | None, Field(description='URL to text transcript of the audio content') + AnyUrl | None, Field(description="URL to text transcript of the audio content") ] = None - url: Annotated[AnyUrl, Field(description='URL endpoint that returns DAAST XML')] + url: Annotated[AnyUrl, Field(description="URL endpoint that returns DAAST XML")] class DaastAsset2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) companion_ads: Annotated[ - bool | None, Field(description='Whether companion display ads are included') + bool | None, Field(description="Whether companion display ads are included") ] = None - content: Annotated[str, Field(description='Inline DAAST XML content')] + content: Annotated[str, Field(description="Inline DAAST XML content")] daast_version: Annotated[ - daast_version_1.DaastVersion | None, Field(description='DAAST specification version') + daast_version_1.DaastVersion | None, Field(description="DAAST specification version") ] = None delivery_type: Annotated[ - Literal['inline'], - Field(description='Discriminator indicating DAAST is delivered as inline XML content'), + Literal["inline"], + Field(description="Discriminator indicating DAAST is delivered as inline XML content"), ] duration_ms: Annotated[ - int | None, Field(description='Expected audio duration in milliseconds (if known)', ge=0) + int | None, Field(description="Expected audio duration in milliseconds (if known)", ge=0) ] = None tracking_events: Annotated[ list[daast_tracking_event.DaastTrackingEvent] | None, - Field(description='Tracking events supported by this DAAST tag'), + Field(description="Tracking events supported by this DAAST tag"), ] = None transcript_url: Annotated[ - AnyUrl | None, Field(description='URL to text transcript of the audio content') + AnyUrl | None, Field(description="URL to text transcript of the audio content") ] = None @@ -71,7 +71,7 @@ class DaastAsset(RootModel[DaastAsset1 | DaastAsset2]): root: Annotated[ DaastAsset1 | DaastAsset2, Field( - description='DAAST (Digital Audio Ad Serving Template) tag for third-party audio ad serving', - title='DAAST Asset', + description="DAAST (Digital Audio Ad Serving Template) tag for third-party audio ad serving", + title="DAAST Asset", ), ] diff --git a/src/adcp/types/generated_poc/core/assets/html_asset.py b/src/adcp/types/generated_poc/core/assets/html_asset.py index 04e3e3f5..e8f78946 100644 --- a/src/adcp/types/generated_poc/core/assets/html_asset.py +++ b/src/adcp/types/generated_poc/core/assets/html_asset.py @@ -12,29 +12,29 @@ class Accessibility(AdCPBaseModel): alt_text: Annotated[ - str | None, Field(description='Text alternative describing the creative content') + str | None, Field(description="Text alternative describing the creative content") ] = None keyboard_navigable: Annotated[ - bool | None, Field(description='Whether the creative can be fully operated via keyboard') + bool | None, Field(description="Whether the creative can be fully operated via keyboard") ] = None motion_control: Annotated[ bool | None, Field( - description='Whether the creative respects prefers-reduced-motion or provides pause/stop controls' + description="Whether the creative respects prefers-reduced-motion or provides pause/stop controls" ), ] = None screen_reader_tested: Annotated[ - bool | None, Field(description='Whether the creative has been tested with screen readers') + bool | None, Field(description="Whether the creative has been tested with screen readers") ] = None class HtmlAsset(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) accessibility: Annotated[ Accessibility | None, - Field(description='Self-declared accessibility properties for this opaque creative'), + Field(description="Self-declared accessibility properties for this opaque creative"), ] = None - content: Annotated[str, Field(description='HTML content')] + content: Annotated[str, Field(description="HTML content")] version: Annotated[str | None, Field(description="HTML version (e.g., 'HTML5')")] = None diff --git a/src/adcp/types/generated_poc/core/assets/image_asset.py b/src/adcp/types/generated_poc/core/assets/image_asset.py index 29eee2dd..b179479e 100644 --- a/src/adcp/types/generated_poc/core/assets/image_asset.py +++ b/src/adcp/types/generated_poc/core/assets/image_asset.py @@ -12,12 +12,12 @@ class ImageAsset(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - alt_text: Annotated[str | None, Field(description='Alternative text for accessibility')] = None + alt_text: Annotated[str | None, Field(description="Alternative text for accessibility")] = None format: Annotated[ - str | None, Field(description='Image file format (jpg, png, gif, webp, etc.)') + str | None, Field(description="Image file format (jpg, png, gif, webp, etc.)") ] = None - height: Annotated[int, Field(description='Height in pixels', ge=1)] - url: Annotated[AnyUrl, Field(description='URL to the image asset')] - width: Annotated[int, Field(description='Width in pixels', ge=1)] + height: Annotated[int, Field(description="Height in pixels", ge=1)] + url: Annotated[AnyUrl, Field(description="URL to the image asset")] + width: Annotated[int, Field(description="Width in pixels", ge=1)] diff --git a/src/adcp/types/generated_poc/core/assets/javascript_asset.py b/src/adcp/types/generated_poc/core/assets/javascript_asset.py index 830beff6..70357e8a 100644 --- a/src/adcp/types/generated_poc/core/assets/javascript_asset.py +++ b/src/adcp/types/generated_poc/core/assets/javascript_asset.py @@ -14,32 +14,32 @@ class Accessibility(AdCPBaseModel): alt_text: Annotated[ - str | None, Field(description='Text alternative describing the creative content') + str | None, Field(description="Text alternative describing the creative content") ] = None keyboard_navigable: Annotated[ - bool | None, Field(description='Whether the creative can be fully operated via keyboard') + bool | None, Field(description="Whether the creative can be fully operated via keyboard") ] = None motion_control: Annotated[ bool | None, Field( - description='Whether the creative respects prefers-reduced-motion or provides pause/stop controls' + description="Whether the creative respects prefers-reduced-motion or provides pause/stop controls" ), ] = None screen_reader_tested: Annotated[ - bool | None, Field(description='Whether the creative has been tested with screen readers') + bool | None, Field(description="Whether the creative has been tested with screen readers") ] = None class JavascriptAsset(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) accessibility: Annotated[ Accessibility | None, - Field(description='Self-declared accessibility properties for this opaque creative'), + Field(description="Self-declared accessibility properties for this opaque creative"), ] = None - content: Annotated[str, Field(description='JavaScript content')] + content: Annotated[str, Field(description="JavaScript content")] module_type: Annotated[ javascript_module_type.JavascriptModuleType | None, - Field(description='JavaScript module type'), + Field(description="JavaScript module type"), ] = None diff --git a/src/adcp/types/generated_poc/core/assets/markdown_asset.py b/src/adcp/types/generated_poc/core/assets/markdown_asset.py index e03d0881..3da4207f 100644 --- a/src/adcp/types/generated_poc/core/assets/markdown_asset.py +++ b/src/adcp/types/generated_poc/core/assets/markdown_asset.py @@ -14,18 +14,18 @@ class MarkdownAsset(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) allow_raw_html: Annotated[ bool | None, Field( - description='Whether raw HTML blocks are allowed in the markdown. False recommended for security.' + description="Whether raw HTML blocks are allowed in the markdown. False recommended for security." ), ] = False content: Annotated[ str, Field( - description='Markdown content following CommonMark spec with optional GitHub Flavored Markdown extensions' + description="Markdown content following CommonMark spec with optional GitHub Flavored Markdown extensions" ), ] language: Annotated[str | None, Field(description="Language code (e.g., 'en', 'es', 'fr')")] = ( @@ -34,6 +34,6 @@ class MarkdownAsset(AdCPBaseModel): markdown_flavor: Annotated[ markdown_flavor_1.MarkdownFlavor | None, Field( - description='Markdown flavor used. CommonMark for strict compatibility, GFM for tables/task lists/strikethrough.' + description="Markdown flavor used. CommonMark for strict compatibility, GFM for tables/task lists/strikethrough." ), ] = markdown_flavor_1.MarkdownFlavor.commonmark diff --git a/src/adcp/types/generated_poc/core/assets/text_asset.py b/src/adcp/types/generated_poc/core/assets/text_asset.py index ac8baf46..63ca787a 100644 --- a/src/adcp/types/generated_poc/core/assets/text_asset.py +++ b/src/adcp/types/generated_poc/core/assets/text_asset.py @@ -12,9 +12,9 @@ class TextAsset(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - content: Annotated[str, Field(description='Text content')] + content: Annotated[str, Field(description="Text content")] language: Annotated[str | None, Field(description="Language code (e.g., 'en', 'es', 'fr')")] = ( None ) diff --git a/src/adcp/types/generated_poc/core/assets/url_asset.py b/src/adcp/types/generated_poc/core/assets/url_asset.py index 3654ca91..33244bb5 100644 --- a/src/adcp/types/generated_poc/core/assets/url_asset.py +++ b/src/adcp/types/generated_poc/core/assets/url_asset.py @@ -14,12 +14,12 @@ class UrlAsset(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) description: Annotated[ - str | None, Field(description='Description of what this URL points to') + str | None, Field(description="Description of what this URL points to") ] = None - url: Annotated[AnyUrl, Field(description='URL reference')] + url: Annotated[AnyUrl, Field(description="URL reference")] url_type: Annotated[ url_asset_type.UrlAssetType | None, Field( diff --git a/src/adcp/types/generated_poc/core/assets/vast_asset.py b/src/adcp/types/generated_poc/core/assets/vast_asset.py index 54b376aa..65673ab6 100644 --- a/src/adcp/types/generated_poc/core/assets/vast_asset.py +++ b/src/adcp/types/generated_poc/core/assets/vast_asset.py @@ -15,65 +15,65 @@ class VastAsset1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) audio_description_url: Annotated[ AnyUrl | None, - Field(description='URL to audio description track for visually impaired users'), + Field(description="URL to audio description track for visually impaired users"), ] = None captions_url: Annotated[ - AnyUrl | None, Field(description='URL to captions file (WebVTT, SRT, etc.)') + AnyUrl | None, Field(description="URL to captions file (WebVTT, SRT, etc.)") ] = None delivery_type: Annotated[ - Literal['url'], - Field(description='Discriminator indicating VAST is delivered via URL endpoint'), + Literal["url"], + Field(description="Discriminator indicating VAST is delivered via URL endpoint"), ] duration_ms: Annotated[ - int | None, Field(description='Expected video duration in milliseconds (if known)', ge=0) + int | None, Field(description="Expected video duration in milliseconds (if known)", ge=0) ] = None tracking_events: Annotated[ list[vast_tracking_event.VastTrackingEvent] | None, - Field(description='Tracking events supported by this VAST tag'), + Field(description="Tracking events supported by this VAST tag"), ] = None - url: Annotated[AnyUrl, Field(description='URL endpoint that returns VAST XML')] + url: Annotated[AnyUrl, Field(description="URL endpoint that returns VAST XML")] vast_version: Annotated[ - vast_version_1.VastVersion | None, Field(description='VAST specification version') + vast_version_1.VastVersion | None, Field(description="VAST specification version") ] = None vpaid_enabled: Annotated[ bool | None, - Field(description='Whether VPAID (Video Player-Ad Interface Definition) is supported'), + Field(description="Whether VPAID (Video Player-Ad Interface Definition) is supported"), ] = None class VastAsset2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) audio_description_url: Annotated[ AnyUrl | None, - Field(description='URL to audio description track for visually impaired users'), + Field(description="URL to audio description track for visually impaired users"), ] = None captions_url: Annotated[ - AnyUrl | None, Field(description='URL to captions file (WebVTT, SRT, etc.)') + AnyUrl | None, Field(description="URL to captions file (WebVTT, SRT, etc.)") ] = None - content: Annotated[str, Field(description='Inline VAST XML content')] + content: Annotated[str, Field(description="Inline VAST XML content")] delivery_type: Annotated[ - Literal['inline'], - Field(description='Discriminator indicating VAST is delivered as inline XML content'), + Literal["inline"], + Field(description="Discriminator indicating VAST is delivered as inline XML content"), ] duration_ms: Annotated[ - int | None, Field(description='Expected video duration in milliseconds (if known)', ge=0) + int | None, Field(description="Expected video duration in milliseconds (if known)", ge=0) ] = None tracking_events: Annotated[ list[vast_tracking_event.VastTrackingEvent] | None, - Field(description='Tracking events supported by this VAST tag'), + Field(description="Tracking events supported by this VAST tag"), ] = None vast_version: Annotated[ - vast_version_1.VastVersion | None, Field(description='VAST specification version') + vast_version_1.VastVersion | None, Field(description="VAST specification version") ] = None vpaid_enabled: Annotated[ bool | None, - Field(description='Whether VPAID (Video Player-Ad Interface Definition) is supported'), + Field(description="Whether VPAID (Video Player-Ad Interface Definition) is supported"), ] = None @@ -81,7 +81,7 @@ class VastAsset(RootModel[VastAsset1 | VastAsset2]): root: Annotated[ VastAsset1 | VastAsset2, Field( - description='VAST (Video Ad Serving Template) tag for third-party video ad serving', - title='VAST Asset', + description="VAST (Video Ad Serving Template) tag for third-party video ad serving", + title="VAST Asset", ), ] diff --git a/src/adcp/types/generated_poc/core/assets/video_asset.py b/src/adcp/types/generated_poc/core/assets/video_asset.py index 4be3236e..43c13ad5 100644 --- a/src/adcp/types/generated_poc/core/assets/video_asset.py +++ b/src/adcp/types/generated_poc/core/assets/video_asset.py @@ -18,52 +18,52 @@ class AudioBitDepth(IntEnum): class AudioChannels(Enum): - mono = 'mono' - stereo = 'stereo' - field_5_1 = '5.1' - field_7_1 = '7.1' + mono = "mono" + stereo = "stereo" + field_5_1 = "5.1" + field_7_1 = "7.1" class ChromaSubsampling(Enum): - field_4_2_0 = '4:2:0' - field_4_2_2 = '4:2:2' - field_4_4_4 = '4:4:4' + field_4_2_0 = "4:2:0" + field_4_2_2 = "4:2:2" + field_4_4_4 = "4:4:4" class ColorSpace(Enum): - rec709 = 'rec709' - rec2020 = 'rec2020' - rec2100 = 'rec2100' - srgb = 'srgb' - dci_p3 = 'dci_p3' + rec709 = "rec709" + rec2020 = "rec2020" + rec2100 = "rec2100" + srgb = "srgb" + dci_p3 = "dci_p3" class FrameRateType(Enum): - constant = 'constant' - variable = 'variable' + constant = "constant" + variable = "variable" class GopType(Enum): - closed = 'closed' - open = 'open' + closed = "closed" + open = "open" class HdrFormat(Enum): - sdr = 'sdr' - hdr10 = 'hdr10' - hdr10_plus = 'hdr10_plus' - hlg = 'hlg' - dolby_vision = 'dolby_vision' + sdr = "sdr" + hdr10 = "hdr10" + hdr10_plus = "hdr10_plus" + hlg = "hlg" + dolby_vision = "dolby_vision" class MoovAtomPosition(Enum): - start = 'start' - end = 'end' + start = "start" + end = "end" class ScanType(Enum): - progressive = 'progressive' - interlaced = 'interlaced' + progressive = "progressive" + interlaced = "interlaced" class VideoBitDepth(IntEnum): @@ -74,46 +74,46 @@ class VideoBitDepth(IntEnum): class VideoAsset(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - audio_bit_depth: Annotated[AudioBitDepth | None, Field(description='Audio bit depth')] = None + audio_bit_depth: Annotated[AudioBitDepth | None, Field(description="Audio bit depth")] = None audio_bitrate_kbps: Annotated[ - int | None, Field(description='Audio bitrate in kilobits per second', ge=1) + int | None, Field(description="Audio bitrate in kilobits per second", ge=1) ] = None audio_channels: Annotated[ - AudioChannels | None, Field(description='Audio channel configuration') + AudioChannels | None, Field(description="Audio channel configuration") ] = None audio_codec: Annotated[ str | None, - Field(description='Audio codec used (aac, aac_lc, he_aac, pcm, mp3, ac3, eac3, etc.)'), + Field(description="Audio codec used (aac, aac_lc, he_aac, pcm, mp3, ac3, eac3, etc.)"), ] = None audio_description_url: Annotated[ AnyUrl | None, - Field(description='URL to audio description track for visually impaired users'), + Field(description="URL to audio description track for visually impaired users"), ] = None audio_loudness_lufs: Annotated[ - float | None, Field(description='Integrated loudness in LUFS') + float | None, Field(description="Integrated loudness in LUFS") ] = None audio_sampling_rate_hz: Annotated[ - int | None, Field(description='Audio sampling rate in Hz (e.g., 44100, 48000)') + int | None, Field(description="Audio sampling rate in Hz (e.g., 44100, 48000)") ] = None - audio_true_peak_dbfs: Annotated[float | None, Field(description='True peak level in dBFS')] = ( + audio_true_peak_dbfs: Annotated[float | None, Field(description="True peak level in dBFS")] = ( None ) captions_url: Annotated[ - AnyUrl | None, Field(description='URL to captions file (WebVTT, SRT, etc.)') + AnyUrl | None, Field(description="URL to captions file (WebVTT, SRT, etc.)") ] = None chroma_subsampling: Annotated[ - ChromaSubsampling | None, Field(description='Chroma subsampling format') + ChromaSubsampling | None, Field(description="Chroma subsampling format") ] = None - color_space: Annotated[ColorSpace | None, Field(description='Color space of the video')] = None + color_space: Annotated[ColorSpace | None, Field(description="Color space of the video")] = None container_format: Annotated[ - str | None, Field(description='Video container format (mp4, webm, mov, etc.)') + str | None, Field(description="Video container format (mp4, webm, mov, etc.)") ] = None duration_ms: Annotated[ - int | None, Field(description='Video duration in milliseconds', ge=1) + int | None, Field(description="Video duration in milliseconds", ge=1) ] = None - file_size_bytes: Annotated[int | None, Field(description='File size in bytes', ge=1)] = None + file_size_bytes: Annotated[int | None, Field(description="File size in bytes", ge=1)] = None frame_rate: Annotated[ str | None, Field( @@ -122,33 +122,33 @@ class VideoAsset(AdCPBaseModel): ] = None frame_rate_type: Annotated[ FrameRateType | None, - Field(description='Whether the video uses constant (CFR) or variable (VFR) frame rate'), + Field(description="Whether the video uses constant (CFR) or variable (VFR) frame rate"), ] = None gop_interval_seconds: Annotated[ - float | None, Field(description='GOP/keyframe interval in seconds') + float | None, Field(description="GOP/keyframe interval in seconds") ] = None - gop_type: Annotated[GopType | None, Field(description='GOP structure type')] = None + gop_type: Annotated[GopType | None, Field(description="GOP structure type")] = None has_audio: Annotated[ - bool | None, Field(description='Whether the video contains an audio track') + bool | None, Field(description="Whether the video contains an audio track") ] = None hdr_format: Annotated[ HdrFormat | None, Field(description="HDR format if applicable, or 'sdr' for standard dynamic range"), ] = None - height: Annotated[int, Field(description='Height in pixels', ge=1)] + height: Annotated[int, Field(description="Height in pixels", ge=1)] moov_atom_position: Annotated[ - MoovAtomPosition | None, Field(description='Position of moov atom in MP4 container') + MoovAtomPosition | None, Field(description="Position of moov atom in MP4 container") ] = None - scan_type: Annotated[ScanType | None, Field(description='Scan type of the video')] = None + scan_type: Annotated[ScanType | None, Field(description="Scan type of the video")] = None transcript_url: Annotated[ - AnyUrl | None, Field(description='URL to text transcript of the video content') + AnyUrl | None, Field(description="URL to text transcript of the video content") ] = None - url: Annotated[AnyUrl, Field(description='URL to the video asset')] - video_bit_depth: Annotated[VideoBitDepth | None, Field(description='Video bit depth')] = None + url: Annotated[AnyUrl, Field(description="URL to the video asset")] + video_bit_depth: Annotated[VideoBitDepth | None, Field(description="Video bit depth")] = None video_bitrate_kbps: Annotated[ - int | None, Field(description='Video stream bitrate in kilobits per second', ge=1) + int | None, Field(description="Video stream bitrate in kilobits per second", ge=1) ] = None video_codec: Annotated[ - str | None, Field(description='Video codec used (h264, h265, vp9, av1, prores, etc.)') + str | None, Field(description="Video codec used (h264, h265, vp9, av1, prores, etc.)") ] = None - width: Annotated[int, Field(description='Width in pixels', ge=1)] + width: Annotated[int, Field(description="Width in pixels", ge=1)] diff --git a/src/adcp/types/generated_poc/core/assets/webhook_asset.py b/src/adcp/types/generated_poc/core/assets/webhook_asset.py index 82d17ce2..ad017093 100644 --- a/src/adcp/types/generated_poc/core/assets/webhook_asset.py +++ b/src/adcp/types/generated_poc/core/assets/webhook_asset.py @@ -20,34 +20,34 @@ class Security(AdCPBaseModel): str | None, Field(description="Header name for HMAC signature (e.g., 'X-Signature')") ] = None method: Annotated[ - webhook_security_method.WebhookSecurityMethod, Field(description='Authentication method') + webhook_security_method.WebhookSecurityMethod, Field(description="Authentication method") ] class WebhookAsset(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - method: Annotated[http_method.HttpMethod | None, Field(description='HTTP method')] = ( + method: Annotated[http_method.HttpMethod | None, Field(description="HTTP method")] = ( http_method.HttpMethod.POST ) required_macros: Annotated[ list[universal_macro.UniversalMacro | str] | None, - Field(description='Universal macros that must be provided for webhook to function'), + Field(description="Universal macros that must be provided for webhook to function"), ] = None response_type: Annotated[ webhook_response_type.WebhookResponseType, - Field(description='Expected content type of webhook response'), + Field(description="Expected content type of webhook response"), ] - security: Annotated[Security, Field(description='Security configuration for webhook calls')] + security: Annotated[Security, Field(description="Security configuration for webhook calls")] supported_macros: Annotated[ list[universal_macro.UniversalMacro | str] | None, Field( - description='Universal macros that can be passed to webhook (e.g., DEVICE_TYPE, COUNTRY). See docs/creative/universal-macros.mdx for full list.' + description="Universal macros that can be passed to webhook (e.g., DEVICE_TYPE, COUNTRY). See docs/creative/universal-macros.mdx for full list." ), ] = None timeout_ms: Annotated[ int | None, - Field(description='Maximum time to wait for response in milliseconds', ge=10, le=5000), + Field(description="Maximum time to wait for response in milliseconds", ge=10, le=5000), ] = 500 - url: Annotated[AnyUrl, Field(description='Webhook URL to call for dynamic content')] + url: Annotated[AnyUrl, Field(description="Webhook URL to call for dynamic content")] diff --git a/src/adcp/types/generated_poc/core/async_response_data.py b/src/adcp/types/generated_poc/core/async_response_data.py index 80b47578..8567411c 100644 --- a/src/adcp/types/generated_poc/core/async_response_data.py +++ b/src/adcp/types/generated_poc/core/async_response_data.py @@ -78,7 +78,7 @@ class AdcpAsyncResponseData( | sync_catalogs_async_response_input_required.SyncCatalogsInputRequired | sync_catalogs_async_response_submitted.SyncCatalogsSubmitted, Field( - description='Union of all possible data payloads for async task webhook responses. For completed/failed statuses, use the main task response schema. For working/input-required/submitted, use the status-specific schemas.', - title='AdCP Async Response Data', + description="Union of all possible data payloads for async task webhook responses. For completed/failed statuses, use the main task response schema. For working/input-required/submitted, use the status-specific schemas.", + title="AdCP Async Response Data", ), ] diff --git a/src/adcp/types/generated_poc/core/attribution_window.py b/src/adcp/types/generated_poc/core/attribution_window.py index fe11e9f4..a5195b11 100644 --- a/src/adcp/types/generated_poc/core/attribution_window.py +++ b/src/adcp/types/generated_poc/core/attribution_window.py @@ -14,25 +14,25 @@ class AttributionWindow(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) click_window_days: Annotated[ int | None, Field( - description='Click-through attribution window in days. Conversions occurring within this many days after a click are attributed to the ad.', + description="Click-through attribution window in days. Conversions occurring within this many days after a click are attributed to the ad.", ge=0, ), ] = None model: Annotated[ attribution_model.AttributionModel, Field( - description='Attribution model used to assign credit when multiple touchpoints exist' + description="Attribution model used to assign credit when multiple touchpoints exist" ), ] view_window_days: Annotated[ int | None, Field( - description='View-through attribution window in days. Conversions occurring within this many days after an ad impression (without click) are attributed to the ad.', + description="View-through attribution window in days. Conversions occurring within this many days after an ad impression (without click) are attributed to the ad.", ge=0, ), ] = None diff --git a/src/adcp/types/generated_poc/core/audience_member.py b/src/adcp/types/generated_poc/core/audience_member.py index f885e912..57e28808 100644 --- a/src/adcp/types/generated_poc/core/audience_member.py +++ b/src/adcp/types/generated_poc/core/audience_member.py @@ -15,35 +15,35 @@ class Uid(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - type: Annotated[uid_type.UidType, Field(description='Universal ID type')] - value: Annotated[str, Field(description='Universal ID value')] + type: Annotated[uid_type.UidType, Field(description="Universal ID type")] + value: Annotated[str, Field(description="Universal ID value")] class AudienceMember1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) ext: ext_1.ExtensionObject | None = None hashed_email: Annotated[ str, Field( - description='SHA-256 hash of lowercase, trimmed email address.', - pattern='^[a-f0-9]{64}$', + description="SHA-256 hash of lowercase, trimmed email address.", + pattern="^[a-f0-9]{64}$", ), ] hashed_phone: Annotated[ str | None, Field( - description='SHA-256 hash of E.164-formatted phone number (e.g. +12065551234).', - pattern='^[a-f0-9]{64}$', + description="SHA-256 hash of E.164-formatted phone number (e.g. +12065551234).", + pattern="^[a-f0-9]{64}$", ), ] = None uids: Annotated[ list[Uid] | None, Field( - description='Universal ID values (MAIDs, RampID, UID2, etc.) for user matching.', + description="Universal ID values (MAIDs, RampID, UID2, etc.) for user matching.", min_length=1, ), ] = None @@ -51,27 +51,27 @@ class AudienceMember1(AdCPBaseModel): class AudienceMember2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) ext: ext_1.ExtensionObject | None = None hashed_email: Annotated[ str | None, Field( - description='SHA-256 hash of lowercase, trimmed email address.', - pattern='^[a-f0-9]{64}$', + description="SHA-256 hash of lowercase, trimmed email address.", + pattern="^[a-f0-9]{64}$", ), ] = None hashed_phone: Annotated[ str, Field( - description='SHA-256 hash of E.164-formatted phone number (e.g. +12065551234).', - pattern='^[a-f0-9]{64}$', + description="SHA-256 hash of E.164-formatted phone number (e.g. +12065551234).", + pattern="^[a-f0-9]{64}$", ), ] uids: Annotated[ list[Uid] | None, Field( - description='Universal ID values (MAIDs, RampID, UID2, etc.) for user matching.', + description="Universal ID values (MAIDs, RampID, UID2, etc.) for user matching.", min_length=1, ), ] = None @@ -79,27 +79,27 @@ class AudienceMember2(AdCPBaseModel): class AudienceMember3(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) ext: ext_1.ExtensionObject | None = None hashed_email: Annotated[ str | None, Field( - description='SHA-256 hash of lowercase, trimmed email address.', - pattern='^[a-f0-9]{64}$', + description="SHA-256 hash of lowercase, trimmed email address.", + pattern="^[a-f0-9]{64}$", ), ] = None hashed_phone: Annotated[ str | None, Field( - description='SHA-256 hash of E.164-formatted phone number (e.g. +12065551234).', - pattern='^[a-f0-9]{64}$', + description="SHA-256 hash of E.164-formatted phone number (e.g. +12065551234).", + pattern="^[a-f0-9]{64}$", ), ] = None uids: Annotated[ list[Uid], Field( - description='Universal ID values (MAIDs, RampID, UID2, etc.) for user matching.', + description="Universal ID values (MAIDs, RampID, UID2, etc.) for user matching.", min_length=1, ), ] @@ -109,7 +109,7 @@ class AudienceMember(RootModel[AudienceMember1 | AudienceMember2 | AudienceMembe root: Annotated[ AudienceMember1 | AudienceMember2 | AudienceMember3, Field( - description='Hashed identifiers for a CRM audience member. All identifiers must be normalized before hashing: emails to lowercase+trim, phone numbers to E.164 format (e.g. +12065551234). At least one identifier is required. Providing multiple identifiers for the same person improves match rates. Composite identifiers (e.g. hashed first name + last name + zip for Google Customer Match) are not yet standardized — use the ext field for platform-specific extensions.', - title='Audience Member', + description="Hashed identifiers for a CRM audience member. All identifiers must be normalized before hashing: emails to lowercase+trim, phone numbers to E.164 format (e.g. +12065551234). At least one identifier is required. Providing multiple identifiers for the same person improves match rates. Composite identifiers (e.g. hashed first name + last name + zip for Google Customer Match) are not yet standardized — use the ext field for platform-specific extensions.", + title="Audience Member", ), ] diff --git a/src/adcp/types/generated_poc/core/brand_id.py b/src/adcp/types/generated_poc/core/brand_id.py index 6d626950..c8e642c1 100644 --- a/src/adcp/types/generated_poc/core/brand_id.py +++ b/src/adcp/types/generated_poc/core/brand_id.py @@ -13,9 +13,9 @@ class BrandId(RootModel[str]): root: Annotated[ str, Field( - description='Identifier for a brand within a house portfolio. Must be lowercase alphanumeric with underscores only. The house chooses this identifier.', - examples=['tide', 'cheerios', 'air_jordan', 'nike', 'pampers'], - pattern='^[a-z0-9_]+$', - title='Brand ID', + description="Identifier for a brand within a house portfolio. Must be lowercase alphanumeric with underscores only. The house chooses this identifier.", + examples=["tide", "cheerios", "air_jordan", "nike", "pampers"], + pattern="^[a-z0-9_]+$", + title="Brand ID", ), ] diff --git a/src/adcp/types/generated_poc/core/brand_ref.py b/src/adcp/types/generated_poc/core/brand_ref.py index 1375fd6c..c6458011 100644 --- a/src/adcp/types/generated_poc/core/brand_ref.py +++ b/src/adcp/types/generated_poc/core/brand_ref.py @@ -14,18 +14,18 @@ class BrandReference(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) brand_id: Annotated[ brand_id_1.BrandId | None, Field( - description='Brand identifier within the house portfolio. Optional for single-brand domains.' + description="Brand identifier within the house portfolio. Optional for single-brand domains." ), ] = None domain: Annotated[ str, Field( description="Domain where /.well-known/brand.json is hosted, or the brand's operating domain", - pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', + pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", ), ] diff --git a/src/adcp/types/generated_poc/core/catalog.py b/src/adcp/types/generated_poc/core/catalog.py index 943e67b0..b45e01f5 100644 --- a/src/adcp/types/generated_poc/core/catalog.py +++ b/src/adcp/types/generated_poc/core/catalog.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/catalog.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:24:08+00:00 from __future__ import annotations @@ -17,12 +17,12 @@ class Gtin(RootModel[str]): - root: Annotated[str, Field(pattern='^[0-9]{8,14}$')] + root: Annotated[str, Field(pattern="^[0-9]{8,14}$")] class Catalog(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) catalog_id: Annotated[ str | None, @@ -52,7 +52,7 @@ class Catalog(AdCPBaseModel): feed_format: Annotated[ feed_format_1.FeedFormat | None, Field( - description='Format of the external feed at url. Required when url points to a non-AdCP feed (e.g., Google Merchant Center XML, Meta Product Catalog). Omit for offering-type catalogs where the feed is native AdCP JSON.' + description="Format of the external feed at url. Required when url points to a non-AdCP feed (e.g., Google Merchant Center XML, Meta Product Catalog). Omit for offering-type catalogs where the feed is native AdCP JSON." ), ] = None gtins: Annotated[ @@ -65,14 +65,14 @@ class Catalog(AdCPBaseModel): ids: Annotated[ list[str] | None, Field( - description='Filter catalog to specific item IDs. For offering-type catalogs, these are offering_id values. For product-type catalogs, these are SKU identifiers.', + description="Filter catalog to specific item IDs. For offering-type catalogs, these are offering_id values. For product-type catalogs, these are SKU identifiers.", min_length=1, ), ] = None items: Annotated[ list[dict[str, Any]] | None, Field( - description="Inline catalog data. The item schema depends on the catalog type: Offering objects for 'offering', StoreItem for 'store', HotelItem for 'hotel', FlightItem for 'flight', JobItem for 'job', VehicleItem for 'vehicle', RealEstateItem for 'real_estate', EducationItem for 'education', DestinationItem for 'destination', or freeform objects for 'product', 'inventory', and 'promotion'. Mutually exclusive with url — provide one or the other, not both. Implementations should validate items against the type-specific schema.", + description="Inline catalog data. The item schema depends on the catalog type: Offering objects for 'offering', StoreItem for 'store', HotelItem for 'hotel', FlightItem for 'flight', JobItem for 'job', VehicleItem for 'vehicle', RealEstateItem for 'real_estate', EducationItem for 'education', DestinationItem for 'destination', AppItem for 'app', or freeform objects for 'product', 'inventory', and 'promotion'. Mutually exclusive with url — provide one or the other, not both. Implementations should validate items against the type-specific schema.", min_length=1, ), ] = None @@ -91,20 +91,20 @@ class Catalog(AdCPBaseModel): tags: Annotated[ list[str] | None, Field( - description='Filter catalog to items with these tags. Tags are matched using OR logic — items matching any tag are included.', + description="Filter catalog to items with these tags. Tags are matched using OR logic — items matching any tag are included.", min_length=1, ), ] = None type: Annotated[ catalog_type.CatalogType, Field( - description="Catalog type. Structural types: 'offering' (AdCP Offering objects), 'product' (ecommerce entries), 'inventory' (stock per location), 'store' (physical locations), 'promotion' (deals and pricing). Vertical types: 'hotel', 'flight', 'job', 'vehicle', 'real_estate', 'education', 'destination' — each with an industry-specific item schema." + description="Catalog type. Structural types: 'offering' (AdCP Offering objects), 'product' (ecommerce entries), 'inventory' (stock per location), 'store' (physical locations), 'promotion' (deals and pricing). Vertical types: 'hotel', 'flight', 'job', 'vehicle', 'real_estate', 'education', 'destination', 'app' — each with an industry-specific item schema." ), ] update_frequency: Annotated[ update_frequency_1.UpdateFrequency | None, Field( - description='How often the platform should re-fetch the feed from url. Only applicable when url is provided. Platforms may use this as a hint for polling schedules.' + description="How often the platform should re-fetch the feed from url. Only applicable when url is provided. Platforms may use this as a hint for polling schedules." ), ] = None url: Annotated[ diff --git a/src/adcp/types/generated_poc/core/catchment.py b/src/adcp/types/generated_poc/core/catchment.py index 6cd9cb84..ba118282 100644 --- a/src/adcp/types/generated_poc/core/catchment.py +++ b/src/adcp/types/generated_poc/core/catchment.py @@ -16,34 +16,34 @@ class Type(Enum): - Polygon = 'Polygon' - MultiPolygon = 'MultiPolygon' + Polygon = "Polygon" + MultiPolygon = "MultiPolygon" class Geometry(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) coordinates: Annotated[ Any, Field( - description='GeoJSON coordinates array. For Polygon: array of linear rings. For MultiPolygon: array of polygons.' + description="GeoJSON coordinates array. For Polygon: array of linear rings. For MultiPolygon: array of polygons." ), ] - type: Annotated[Type, Field(description='GeoJSON geometry type.')] + type: Annotated[Type, Field(description="GeoJSON geometry type.")] class Unit(Enum): - min = 'min' - hr = 'hr' + min = "min" + hr = "hr" class TravelTime(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) - unit: Annotated[Unit, Field(description='Time unit.')] - value: Annotated[float, Field(description='Travel time limit.', ge=1.0)] + unit: Annotated[Unit, Field(description="Time unit.")] + value: Annotated[float, Field(description="Travel time limit.", ge=1.0)] class Geometry1(Geometry): @@ -64,15 +64,15 @@ class TravelTime2(TravelTime): class Radius(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) - unit: Annotated[distance_unit.DistanceUnit, Field(description='Distance unit.')] - value: Annotated[float, Field(description='Radius distance.', gt=0.0)] + unit: Annotated[distance_unit.DistanceUnit, Field(description="Distance unit.")] + value: Annotated[float, Field(description="Radius distance.", gt=0.0)] class Catchment1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) catchment_id: Annotated[ str, @@ -84,7 +84,7 @@ class Catchment1(AdCPBaseModel): geometry: Annotated[ Geometry | None, Field( - description='Pre-computed GeoJSON geometry defining the catchment boundary. Use this when the buyer has already calculated isochrones (via TravelTime, Mapbox, etc.) or has custom trade area boundaries. Supports Polygon and MultiPolygon types.' + description="Pre-computed GeoJSON geometry defining the catchment boundary. Use this when the buyer has already calculated isochrones (via TravelTime, Mapbox, etc.) or has custom trade area boundaries. Supports Polygon and MultiPolygon types." ), ] = None label: Annotated[ @@ -102,20 +102,20 @@ class Catchment1(AdCPBaseModel): transport_mode: Annotated[ transport_mode_1.TransportMode, Field( - description='Transportation mode for isochrone calculation. Required when travel_time is provided.' + description="Transportation mode for isochrone calculation. Required when travel_time is provided." ), ] travel_time: Annotated[ TravelTime, Field( - description='Travel time limit for isochrone calculation. The platform resolves this to a geographic boundary based on actual transportation networks, accounting for road connectivity, transit schedules, and terrain.' + description="Travel time limit for isochrone calculation. The platform resolves this to a geographic boundary based on actual transportation networks, accounting for road connectivity, transit schedules, and terrain." ), ] class Catchment2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) catchment_id: Annotated[ str, @@ -127,7 +127,7 @@ class Catchment2(AdCPBaseModel): geometry: Annotated[ Geometry1 | None, Field( - description='Pre-computed GeoJSON geometry defining the catchment boundary. Use this when the buyer has already calculated isochrones (via TravelTime, Mapbox, etc.) or has custom trade area boundaries. Supports Polygon and MultiPolygon types.' + description="Pre-computed GeoJSON geometry defining the catchment boundary. Use this when the buyer has already calculated isochrones (via TravelTime, Mapbox, etc.) or has custom trade area boundaries. Supports Polygon and MultiPolygon types." ), ] = None label: Annotated[ @@ -145,20 +145,20 @@ class Catchment2(AdCPBaseModel): transport_mode: Annotated[ transport_mode_1.TransportMode | None, Field( - description='Transportation mode for isochrone calculation. Required when travel_time is provided.' + description="Transportation mode for isochrone calculation. Required when travel_time is provided." ), ] = None travel_time: Annotated[ TravelTime1 | None, Field( - description='Travel time limit for isochrone calculation. The platform resolves this to a geographic boundary based on actual transportation networks, accounting for road connectivity, transit schedules, and terrain.' + description="Travel time limit for isochrone calculation. The platform resolves this to a geographic boundary based on actual transportation networks, accounting for road connectivity, transit schedules, and terrain." ), ] = None class Catchment3(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) catchment_id: Annotated[ str, @@ -170,7 +170,7 @@ class Catchment3(AdCPBaseModel): geometry: Annotated[ Geometry2, Field( - description='Pre-computed GeoJSON geometry defining the catchment boundary. Use this when the buyer has already calculated isochrones (via TravelTime, Mapbox, etc.) or has custom trade area boundaries. Supports Polygon and MultiPolygon types.' + description="Pre-computed GeoJSON geometry defining the catchment boundary. Use this when the buyer has already calculated isochrones (via TravelTime, Mapbox, etc.) or has custom trade area boundaries. Supports Polygon and MultiPolygon types." ), ] label: Annotated[ @@ -188,13 +188,13 @@ class Catchment3(AdCPBaseModel): transport_mode: Annotated[ transport_mode_1.TransportMode | None, Field( - description='Transportation mode for isochrone calculation. Required when travel_time is provided.' + description="Transportation mode for isochrone calculation. Required when travel_time is provided." ), ] = None travel_time: Annotated[ TravelTime2 | None, Field( - description='Travel time limit for isochrone calculation. The platform resolves this to a geographic boundary based on actual transportation networks, accounting for road connectivity, transit schedules, and terrain.' + description="Travel time limit for isochrone calculation. The platform resolves this to a geographic boundary based on actual transportation networks, accounting for road connectivity, transit schedules, and terrain." ), ] = None @@ -203,39 +203,39 @@ class Catchment(RootModel[Catchment1 | Catchment2 | Catchment3]): root: Annotated[ Catchment1 | Catchment2 | Catchment3, Field( - description='A catchment area definition for a store or location. Defines the geographic area from which a store draws customers. Three methods are supported: isochrone inputs (travel time + transport mode, platform resolves the shape), simple radius (distance from location), or pre-computed GeoJSON geometry (buyer provides the exact boundary). Provide exactly one method per catchment.', + description="A catchment area definition for a store or location. Defines the geographic area from which a store draws customers. Three methods are supported: isochrone inputs (travel time + transport mode, platform resolves the shape), simple radius (distance from location), or pre-computed GeoJSON geometry (buyer provides the exact boundary). Provide exactly one method per catchment.", examples=[ { - 'data': { - 'catchment_id': 'drive', - 'label': '15-min drive', - 'transport_mode': 'driving', - 'travel_time': {'unit': 'min', 'value': 15}, + "data": { + "catchment_id": "drive", + "label": "15-min drive", + "transport_mode": "driving", + "travel_time": {"unit": "min", "value": 15}, }, - 'description': 'Isochrone: 15-minute drive', + "description": "Isochrone: 15-minute drive", }, { - 'data': { - 'catchment_id': 'walk', - 'label': '10-min walk', - 'transport_mode': 'walking', - 'travel_time': {'unit': 'min', 'value': 10}, + "data": { + "catchment_id": "walk", + "label": "10-min walk", + "transport_mode": "walking", + "travel_time": {"unit": "min", "value": 10}, }, - 'description': 'Isochrone: 10-minute walk', + "description": "Isochrone: 10-minute walk", }, { - 'data': { - 'catchment_id': 'local', - 'label': '5km radius', - 'radius': {'unit': 'km', 'value': 5}, + "data": { + "catchment_id": "local", + "label": "5km radius", + "radius": {"unit": "km", "value": 5}, }, - 'description': 'Simple 5km radius', + "description": "Simple 5km radius", }, { - 'data': { - 'catchment_id': 'trade-area', - 'geometry': { - 'coordinates': [ + "data": { + "catchment_id": "trade-area", + "geometry": { + "coordinates": [ [ [4.85, 52.35], [4.95, 52.35], @@ -244,13 +244,13 @@ class Catchment(RootModel[Catchment1 | Catchment2 | Catchment3]): [4.85, 52.35], ] ], - 'type': 'Polygon', + "type": "Polygon", }, - 'label': 'Primary trade area', + "label": "Primary trade area", }, - 'description': 'Pre-computed GeoJSON boundary', + "description": "Pre-computed GeoJSON boundary", }, ], - title='Catchment', + title="Catchment", ), ] diff --git a/src/adcp/types/generated_poc/core/context.py b/src/adcp/types/generated_poc/core/context.py index ffd6f70d..bf2d2350 100644 --- a/src/adcp/types/generated_poc/core/context.py +++ b/src/adcp/types/generated_poc/core/context.py @@ -10,5 +10,5 @@ class ContextObject(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) diff --git a/src/adcp/types/generated_poc/core/creative_asset.py b/src/adcp/types/generated_poc/core/creative_asset.py index 0ad189ff..4d4f9282 100644 --- a/src/adcp/types/generated_poc/core/creative_asset.py +++ b/src/adcp/types/generated_poc/core/creative_asset.py @@ -28,25 +28,25 @@ class Input(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context_description: Annotated[ str | None, - Field(description='Natural language description of the context for AI-generated content'), + Field(description="Natural language description of the context for AI-generated content"), ] = None macros: Annotated[ - dict[str, str] | None, Field(description='Macro values to apply for this preview') + dict[str, str] | None, Field(description="Macro values to apply for this preview") ] = None - name: Annotated[str, Field(description='Human-readable name for this preview variant')] + name: Annotated[str, Field(description="Human-readable name for this preview variant")] class CreativeAsset(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) assets: Annotated[ dict[ - Annotated[str, StringConstraints(pattern=r'^[a-zA-Z0-9_-]+$')], + Annotated[str, StringConstraints(pattern=r"^[a-zA-Z0-9_-]+$")], image_asset.ImageAsset | video_asset.VideoAsset | audio_asset.AudioAsset @@ -58,7 +58,7 @@ class CreativeAsset(AdCPBaseModel): | daast_asset.DaastAsset | url_asset.UrlAsset, ], - Field(description='Assets required by the format, keyed by asset_role'), + Field(description="Assets required by the format, keyed by asset_role"), ] catalogs: Annotated[ list[catalog.Catalog] | None, @@ -67,20 +67,20 @@ class CreativeAsset(AdCPBaseModel): min_length=1, ), ] = None - creative_id: Annotated[str, Field(description='Unique identifier for the creative')] + creative_id: Annotated[str, Field(description="Unique identifier for the creative")] format_id: Annotated[ format_id_1.FormatId, Field( - description='Format identifier specifying which format this creative conforms to. Can be: (1) concrete format_id referencing a format with fixed dimensions, (2) template format_id referencing a template format, or (3) parameterized format_id with dimensions/duration parameters for template formats.' + description="Format identifier specifying which format this creative conforms to. Can be: (1) concrete format_id referencing a format with fixed dimensions, (2) template format_id referencing a template format, or (3) parameterized format_id with dimensions/duration parameters for template formats." ), ] inputs: Annotated[ list[Input] | None, Field( - description='Preview contexts for generative formats - defines what scenarios to generate previews for' + description="Preview contexts for generative formats - defines what scenarios to generate previews for" ), ] = None - name: Annotated[str, Field(description='Human-readable creative name')] + name: Annotated[str, Field(description="Human-readable creative name")] placement_ids: Annotated[ list[str] | None, Field( @@ -95,12 +95,12 @@ class CreativeAsset(AdCPBaseModel): ), ] = None tags: Annotated[ - list[str] | None, Field(description='User-defined tags for organization and searchability') + list[str] | None, Field(description="User-defined tags for organization and searchability") ] = None weight: Annotated[ float | None, Field( - description='Optional delivery weight for creative rotation when uploading via create_media_buy or update_media_buy (0-100). If omitted, platform determines rotation. Only used during upload to media buy - not stored in creative library.', + description="Optional delivery weight for creative rotation when uploading via create_media_buy or update_media_buy (0-100). If omitted, platform determines rotation. Only used during upload to media buy - not stored in creative library.", ge=0.0, le=100.0, ), diff --git a/src/adcp/types/generated_poc/core/creative_assignment.py b/src/adcp/types/generated_poc/core/creative_assignment.py index e5868c31..6ba97c71 100644 --- a/src/adcp/types/generated_poc/core/creative_assignment.py +++ b/src/adcp/types/generated_poc/core/creative_assignment.py @@ -12,9 +12,9 @@ class CreativeAssignment(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - creative_id: Annotated[str, Field(description='Unique identifier for the creative')] + creative_id: Annotated[str, Field(description="Unique identifier for the creative")] placement_ids: Annotated[ list[str] | None, Field( @@ -23,5 +23,5 @@ class CreativeAssignment(AdCPBaseModel): ), ] = None weight: Annotated[ - float | None, Field(description='Delivery weight for this creative', ge=0.0, le=100.0) + float | None, Field(description="Delivery weight for this creative", ge=0.0, le=100.0) ] = None diff --git a/src/adcp/types/generated_poc/core/creative_brief.py b/src/adcp/types/generated_poc/core/creative_brief.py index 9d2c7e67..78410d0b 100644 --- a/src/adcp/types/generated_poc/core/creative_brief.py +++ b/src/adcp/types/generated_poc/core/creative_brief.py @@ -15,50 +15,50 @@ class Messaging(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - cta: Annotated[str | None, Field(description='Call-to-action text')] = None - headline: Annotated[str | None, Field(description='Primary headline')] = None + cta: Annotated[str | None, Field(description="Call-to-action text")] = None + headline: Annotated[str | None, Field(description="Primary headline")] = None key_messages: Annotated[ - list[str] | None, Field(description='Key messages to communicate in priority order') + list[str] | None, Field(description="Key messages to communicate in priority order") ] = None - tagline: Annotated[str | None, Field(description='Supporting tagline or sub-headline')] = None + tagline: Annotated[str | None, Field(description="Supporting tagline or sub-headline")] = None class Objective(Enum): - awareness = 'awareness' - consideration = 'consideration' - conversion = 'conversion' - retention = 'retention' - engagement = 'engagement' + awareness = "awareness" + consideration = "consideration" + conversion = "conversion" + retention = "retention" + engagement = "engagement" class CreativeBrief(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) audience: Annotated[ - str | None, Field(description='Target audience description for this campaign') + str | None, Field(description="Target audience description for this campaign") ] = None messaging: Annotated[ - Messaging | None, Field(description='Messaging framework for the campaign') + Messaging | None, Field(description="Messaging framework for the campaign") ] = None - name: Annotated[str, Field(description='Campaign or flight name for identification')] + name: Annotated[str, Field(description="Campaign or flight name for identification")] objective: Annotated[ Objective | None, Field( - description='Campaign objective that guides creative tone and call-to-action strategy' + description="Campaign objective that guides creative tone and call-to-action strategy" ), ] = None reference_assets: Annotated[ list[reference_asset.ReferenceAsset] | None, Field( - description='Visual and strategic reference materials such as mood boards, product shots, example creatives, and strategy documents' + description="Visual and strategic reference materials such as mood boards, product shots, example creatives, and strategy documents" ), ] = None territory: Annotated[ str | None, - Field(description='Creative territory or positioning the campaign should occupy'), + Field(description="Creative territory or positioning the campaign should occupy"), ] = None tone: Annotated[ str | None, diff --git a/src/adcp/types/generated_poc/core/creative_brief_ref.py b/src/adcp/types/generated_poc/core/creative_brief_ref.py index 1add5ea0..8ce05755 100644 --- a/src/adcp/types/generated_poc/core/creative_brief_ref.py +++ b/src/adcp/types/generated_poc/core/creative_brief_ref.py @@ -15,25 +15,25 @@ class CreativeBriefReference(RootModel[creative_brief.CreativeBrief | AnyUrl]): root: Annotated[ creative_brief.CreativeBrief | AnyUrl, Field( - description='Creative brief provided either as an inline object or a URL string pointing to a hosted brief', + description="Creative brief provided either as an inline object or a URL string pointing to a hosted brief", examples=[ { - 'data': { - 'audience': 'Gift shoppers aged 25-55', - 'messaging': { - 'cta': 'Shop Holiday Deals', - 'headline': 'Give the Gift of Style', + "data": { + "audience": "Gift shoppers aged 25-55", + "messaging": { + "cta": "Shop Holiday Deals", + "headline": "Give the Gift of Style", }, - 'name': 'Holiday Campaign 2025', - 'objective': 'conversion', + "name": "Holiday Campaign 2025", + "objective": "conversion", }, - 'description': 'Inline creative brief', + "description": "Inline creative brief", }, { - 'data': 'https://cdn.example.com/briefs/holiday-2025.json', - 'description': 'URL string reference to hosted brief', + "data": "https://cdn.example.com/briefs/holiday-2025.json", + "description": "URL string reference to hosted brief", }, ], - title='Creative Brief Reference', + title="Creative Brief Reference", ), ] diff --git a/src/adcp/types/generated_poc/core/creative_filters.py b/src/adcp/types/generated_poc/core/creative_filters.py index a6d5895c..23a4334e 100644 --- a/src/adcp/types/generated_poc/core/creative_filters.py +++ b/src/adcp/types/generated_poc/core/creative_filters.py @@ -14,79 +14,79 @@ class CreativeFilters(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) account_ids: Annotated[ list[str] | None, Field( - description='Filter creatives by owning accounts. Useful for agencies managing multiple client accounts.', + description="Filter creatives by owning accounts. Useful for agencies managing multiple client accounts.", min_length=1, ), ] = None assigned_to_packages: Annotated[ list[str] | None, - Field(description='Filter creatives assigned to any of these packages', min_length=1), + Field(description="Filter creatives assigned to any of these packages", min_length=1), ] = None buyer_refs: Annotated[ list[str] | None, Field( - description='Filter creatives assigned to media buys with any of these buyer references', + description="Filter creatives assigned to media buys with any of these buyer references", min_length=1, ), ] = None created_after: Annotated[ AwareDatetime | None, - Field(description='Filter creatives created after this date (ISO 8601)'), + Field(description="Filter creatives created after this date (ISO 8601)"), ] = None created_before: Annotated[ AwareDatetime | None, - Field(description='Filter creatives created before this date (ISO 8601)'), + Field(description="Filter creatives created before this date (ISO 8601)"), ] = None creative_ids: Annotated[ list[str] | None, - Field(description='Filter by specific creative IDs', max_length=100, min_length=1), + Field(description="Filter by specific creative IDs", max_length=100, min_length=1), ] = None formats: Annotated[ list[str] | None, Field( - description='Filter by creative format types (e.g., video, audio, display)', + description="Filter by creative format types (e.g., video, audio, display)", min_length=1, ), ] = None has_performance_data: Annotated[ - bool | None, Field(description='Filter creatives that have performance data when true') + bool | None, Field(description="Filter creatives that have performance data when true") ] = None media_buy_ids: Annotated[ list[str] | None, - Field(description='Filter creatives assigned to any of these media buys', min_length=1), + Field(description="Filter creatives assigned to any of these media buys", min_length=1), ] = None name_contains: Annotated[ str | None, - Field(description='Filter by creative names containing this text (case-insensitive)'), + Field(description="Filter by creative names containing this text (case-insensitive)"), ] = None statuses: Annotated[ list[creative_status.CreativeStatus] | None, - Field(description='Filter by creative approval statuses', min_length=1), + Field(description="Filter by creative approval statuses", min_length=1), ] = None tags: Annotated[ list[str] | None, - Field(description='Filter by creative tags (all tags must match)', min_length=1), + Field(description="Filter by creative tags (all tags must match)", min_length=1), ] = None tags_any: Annotated[ list[str] | None, - Field(description='Filter by creative tags (any tag must match)', min_length=1), + Field(description="Filter by creative tags (any tag must match)", min_length=1), ] = None unassigned: Annotated[ bool | None, Field( - description='Filter for unassigned creatives when true, assigned creatives when false' + description="Filter for unassigned creatives when true, assigned creatives when false" ), ] = None updated_after: Annotated[ AwareDatetime | None, - Field(description='Filter creatives last updated after this date (ISO 8601)'), + Field(description="Filter creatives last updated after this date (ISO 8601)"), ] = None updated_before: Annotated[ AwareDatetime | None, - Field(description='Filter creatives last updated before this date (ISO 8601)'), + Field(description="Filter creatives last updated before this date (ISO 8601)"), ] = None diff --git a/src/adcp/types/generated_poc/core/creative_manifest.py b/src/adcp/types/generated_poc/core/creative_manifest.py index 2fb796ad..f933d08e 100644 --- a/src/adcp/types/generated_poc/core/creative_manifest.py +++ b/src/adcp/types/generated_poc/core/creative_manifest.py @@ -29,11 +29,11 @@ class CreativeManifest(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) assets: Annotated[ dict[ - Annotated[str, StringConstraints(pattern=r'^[a-z0-9_]+$')], + Annotated[str, StringConstraints(pattern=r"^[a-z0-9_]+$")], image_asset.ImageAsset | video_asset.VideoAsset | audio_asset.AudioAsset diff --git a/src/adcp/types/generated_poc/core/creative_policy.py b/src/adcp/types/generated_poc/core/creative_policy.py index c19db80e..7276b3d1 100644 --- a/src/adcp/types/generated_poc/core/creative_policy.py +++ b/src/adcp/types/generated_poc/core/creative_policy.py @@ -14,15 +14,15 @@ class CreativePolicy(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) co_branding: Annotated[ - co_branding_requirement.CoBrandingRequirement, Field(description='Co-branding requirement') + co_branding_requirement.CoBrandingRequirement, Field(description="Co-branding requirement") ] landing_page: Annotated[ landing_page_requirement.LandingPageRequirement, - Field(description='Landing page requirements'), + Field(description="Landing page requirements"), ] templates_available: Annotated[ - bool, Field(description='Whether creative templates are provided') + bool, Field(description="Whether creative templates are provided") ] diff --git a/src/adcp/types/generated_poc/core/creative_variant.py b/src/adcp/types/generated_poc/core/creative_variant.py index 324298cb..484d0360 100644 --- a/src/adcp/types/generated_poc/core/creative_variant.py +++ b/src/adcp/types/generated_poc/core/creative_variant.py @@ -17,22 +17,22 @@ class Artifact(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) - artifact_id: Annotated[str, Field(description='Artifact identifier within the property')] + artifact_id: Annotated[str, Field(description="Artifact identifier within the property")] property_id: Annotated[ - identifier.Identifier, Field(description='Property where the artifact appears') + identifier.Identifier, Field(description="Property where the artifact appears") ] class GenerationContext(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) artifact: Annotated[ Artifact | None, Field( - description='Reference to the content-standards artifact that provided the generation context. Links this variant to the specific piece of content (article, video, podcast segment, etc.) where the ad was placed.' + description="Reference to the content-standards artifact that provided the generation context. Links this variant to the specific piece of content (article, video, podcast segment, etc.) where the ad was placed." ), ] = None context_type: Annotated[ @@ -48,13 +48,13 @@ class CreativeVariant(DeliveryMetrics): generation_context: Annotated[ GenerationContext | None, Field( - description='Input signals that triggered generation of this variant (Tier 3). Describes why the platform created this specific variant. Platforms should provide summarized or anonymized signals rather than raw user input. For web contexts, may include page topic or URL. For conversational contexts, an anonymized content signal. For search, query category or intent. When the content context is managed through AdCP content standards, reference the artifact directly via the artifact field.' + description="Input signals that triggered generation of this variant (Tier 3). Describes why the platform created this specific variant. Platforms should provide summarized or anonymized signals rather than raw user input. For web contexts, may include page topic or URL. For conversational contexts, an anonymized content signal. For search, query category or intent. When the content context is managed through AdCP content standards, reference the artifact directly via the artifact field." ), ] = None manifest: Annotated[ creative_manifest.CreativeManifest | None, Field( - description='The rendered creative manifest for this variant — the actual output that was served, not the input assets. Contains format_id and the resolved assets (specific headline, image, video, etc. the platform selected or generated). For Tier 2, shows which asset combination was picked. For Tier 3, contains the generated assets which may differ entirely from the input brand identity. Pass to preview_creative to re-render.' + description="The rendered creative manifest for this variant — the actual output that was served, not the input assets. Contains format_id and the resolved assets (specific headline, image, video, etc. the platform selected or generated). For Tier 2, shows which asset combination was picked. For Tier 3, contains the generated assets which may differ entirely from the input brand identity. Pass to preview_creative to re-render." ), ] = None - variant_id: Annotated[str, Field(description='Platform-assigned identifier for this variant')] + variant_id: Annotated[str, Field(description="Platform-assigned identifier for this variant")] diff --git a/src/adcp/types/generated_poc/core/data_provider_signal_selector.py b/src/adcp/types/generated_poc/core/data_provider_signal_selector.py index 8473569e..1510cb74 100644 --- a/src/adcp/types/generated_poc/core/data_provider_signal_selector.py +++ b/src/adcp/types/generated_poc/core/data_provider_signal_selector.py @@ -12,41 +12,41 @@ class DataProviderSignalSelector1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) data_provider_domain: Annotated[ str, Field( description="Domain where data provider's adagents.json is hosted (e.g., 'polk.com')", - pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', + pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", ), ] selection_type: Annotated[ - Literal['all'], + Literal["all"], Field( - description='Discriminator indicating all signals from this data provider are included' + description="Discriminator indicating all signals from this data provider are included" ), ] class SignalId(RootModel[str]): - root: Annotated[str, Field(pattern='^[a-zA-Z0-9_-]+$')] + root: Annotated[str, Field(pattern="^[a-zA-Z0-9_-]+$")] class DataProviderSignalSelector2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) data_provider_domain: Annotated[ str, Field( description="Domain where data provider's adagents.json is hosted (e.g., 'polk.com')", - pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', + pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", ), ] selection_type: Annotated[ - Literal['by_id'], - Field(description='Discriminator indicating selection by specific signal IDs'), + Literal["by_id"], + Field(description="Discriminator indicating selection by specific signal IDs"), ] signal_ids: Annotated[ list[SignalId], @@ -55,22 +55,22 @@ class DataProviderSignalSelector2(AdCPBaseModel): class SignalTag(RootModel[str]): - root: Annotated[str, Field(pattern='^[a-z0-9_-]+$')] + root: Annotated[str, Field(pattern="^[a-z0-9_-]+$")] class DataProviderSignalSelector3(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) data_provider_domain: Annotated[ str, Field( description="Domain where data provider's adagents.json is hosted (e.g., 'polk.com')", - pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', + pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", ), ] selection_type: Annotated[ - Literal['by_tag'], Field(description='Discriminator indicating selection by signal tags') + Literal["by_tag"], Field(description="Discriminator indicating selection by signal tags") ] signal_tags: Annotated[ list[SignalTag], @@ -90,7 +90,7 @@ class DataProviderSignalSelector( DataProviderSignalSelector1 | DataProviderSignalSelector2 | DataProviderSignalSelector3, Field( description="Selects signals from a data provider's adagents.json catalog. Used for product definitions and agent authorization. Supports three selection patterns: all signals, specific IDs, or by tags.", - discriminator='selection_type', - title='Data Provider Signal Selector', + discriminator="selection_type", + title="Data Provider Signal Selector", ), ] diff --git a/src/adcp/types/generated_poc/core/daypart_target.py b/src/adcp/types/generated_poc/core/daypart_target.py index c65b6550..bb2e2cb3 100644 --- a/src/adcp/types/generated_poc/core/daypart_target.py +++ b/src/adcp/types/generated_poc/core/daypart_target.py @@ -14,19 +14,19 @@ class DaypartTarget(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) days: Annotated[ list[day_of_week.DayOfWeek], Field( - description='Days of week this window applies to. Use multiple days for compact targeting (e.g., monday-friday in one object).', + description="Days of week this window applies to. Use multiple days for compact targeting (e.g., monday-friday in one object).", min_length=1, ), ] end_hour: Annotated[ int, Field( - description='End hour (exclusive), 1-24 in 24-hour format. 10 = 10:00am, 24 = midnight. Must be greater than start_hour.', + description="End hour (exclusive), 1-24 in 24-hour format. 10 = 10:00am, 24 = midnight. Must be greater than start_hour.", ge=1, le=24, ), @@ -40,7 +40,7 @@ class DaypartTarget(AdCPBaseModel): start_hour: Annotated[ int, Field( - description='Start hour (inclusive), 0-23 in 24-hour format. 0 = midnight, 6 = 6:00am, 18 = 6:00pm.', + description="Start hour (inclusive), 0-23 in 24-hour format. 0 = midnight, 6 = 6:00am, 18 = 6:00pm.", ge=0, le=23, ), diff --git a/src/adcp/types/generated_poc/core/delivery_forecast.py b/src/adcp/types/generated_poc/core/delivery_forecast.py index 3a4ac868..38d205ce 100644 --- a/src/adcp/types/generated_poc/core/delivery_forecast.py +++ b/src/adcp/types/generated_poc/core/delivery_forecast.py @@ -19,25 +19,25 @@ class DeliveryForecast(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) currency: Annotated[ str, Field( - description='ISO 4217 currency code for monetary values in this forecast (spend, budget)' + description="ISO 4217 currency code for monetary values in this forecast (spend, budget)" ), ] demographic: Annotated[ str | None, Field( - description='Target demographic code within the specified demographic_system. For Nielsen: P18-49, M25-54, W35+. For BARB: ABC1 Adults, 16-34. For AGF: E 14-49.', - examples=['P18-49', 'A25-54', 'W35+', 'M18-34'], + description="Target demographic code within the specified demographic_system. For Nielsen: P18-49, M25-54, W35+. For BARB: ABC1 Adults, 16-34. For AGF: E 14-49.", + examples=["P18-49", "A25-54", "W35+", "M18-34"], ), ] = None demographic_system: Annotated[ demographic_system_1.DemographicSystem | None, Field( - description='Measurement system for the demographic field. Ensures buyer and seller agree on demographic notation.' + description="Measurement system for the demographic field. Ensures buyer and seller agree on demographic notation." ), ] = None ext: ext_1.ExtensionObject | None = None @@ -48,27 +48,27 @@ class DeliveryForecast(AdCPBaseModel): ), ] = None generated_at: Annotated[ - AwareDatetime | None, Field(description='When this forecast was computed') + AwareDatetime | None, Field(description="When this forecast was computed") ] = None method: Annotated[ - forecast_method.ForecastMethod, Field(description='Method used to produce this forecast') + forecast_method.ForecastMethod, Field(description="Method used to produce this forecast") ] points: Annotated[ list[forecast_point.ForecastPoint], Field( - description='Forecasted delivery at one or more budget levels. A single point is a standard forecast; multiple points ordered by ascending budget form a curve showing how metrics scale with spend. Each point pairs a budget with metric ranges.', + description="Forecasted delivery at one or more budget levels. A single point is a standard forecast; multiple points ordered by ascending budget form a curve showing how metrics scale with spend. Each point pairs a budget with metric ranges.", min_length=1, ), ] reach_unit: Annotated[ reach_unit_1.ReachUnit | None, Field( - description='Unit of measurement for reach and audience_size metrics in this forecast. Required for cross-channel forecast comparison.' + description="Unit of measurement for reach and audience_size metrics in this forecast. Required for cross-channel forecast comparison." ), ] = None valid_until: Annotated[ AwareDatetime | None, Field( - description='When this forecast expires. After this time, the forecast should be refreshed. Forecast expiry does not affect proposal executability.' + description="When this forecast expires. After this time, the forecast should be refreshed. Forecast expiry does not affect proposal executability." ), ] = None diff --git a/src/adcp/types/generated_poc/core/delivery_metrics.py b/src/adcp/types/generated_poc/core/delivery_metrics.py index 8fc7a7cc..1da7653d 100644 --- a/src/adcp/types/generated_poc/core/delivery_metrics.py +++ b/src/adcp/types/generated_poc/core/delivery_metrics.py @@ -16,37 +16,37 @@ class ByActionSourceItem(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) action_source: Annotated[ - action_source_1.ActionSource, Field(description='Where the conversion occurred') + action_source_1.ActionSource, Field(description="Where the conversion occurred") ] count: Annotated[ - float, Field(description='Number of conversions from this action source', ge=0.0) + float, Field(description="Number of conversions from this action source", ge=0.0) ] event_source_id: Annotated[ str | None, Field( - description='Event source that produced these conversions (for disambiguation when multiple event sources are configured)' + description="Event source that produced these conversions (for disambiguation when multiple event sources are configured)" ), ] = None value: Annotated[ float | None, - Field(description='Total monetary value of conversions from this action source', ge=0.0), + Field(description="Total monetary value of conversions from this action source", ge=0.0), ] = None class VenueBreakdownItem(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - impressions: Annotated[int, Field(description='Impressions delivered at this venue', ge=0)] - loop_plays: Annotated[int | None, Field(description='Loop plays at this venue', ge=0)] = None + impressions: Annotated[int, Field(description="Impressions delivered at this venue", ge=0)] + loop_plays: Annotated[int | None, Field(description="Loop plays at this venue", ge=0)] = None screens_used: Annotated[ - int | None, Field(description='Number of screens used at this venue', ge=0) + int | None, Field(description="Number of screens used at this venue", ge=0) ] = None - venue_id: Annotated[str, Field(description='Venue identifier')] - venue_name: Annotated[str | None, Field(description='Human-readable venue name')] = None + venue_id: Annotated[str, Field(description="Venue identifier")] + venue_name: Annotated[str | None, Field(description="Human-readable venue name")] = None venue_type: Annotated[ str | None, Field(description="Venue type (e.g., 'airport', 'transit', 'retail', 'billboard')"), @@ -55,49 +55,49 @@ class VenueBreakdownItem(AdCPBaseModel): class DoohMetrics(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) calculation_notes: Annotated[ - str | None, Field(description='Explanation of how DOOH impressions were calculated') + str | None, Field(description="Explanation of how DOOH impressions were calculated") ] = None loop_plays: Annotated[ - int | None, Field(description='Number of times ad played in rotation', ge=0) + int | None, Field(description="Number of times ad played in rotation", ge=0) ] = None screen_time_seconds: Annotated[ - int | None, Field(description='Total display time in seconds', ge=0) + int | None, Field(description="Total display time in seconds", ge=0) ] = None screens_used: Annotated[ - int | None, Field(description='Number of unique screens displaying the ad', ge=0) + int | None, Field(description="Number of unique screens displaying the ad", ge=0) ] = None sov_achieved: Annotated[ float | None, - Field(description='Actual share of voice delivered (0.0 to 1.0)', ge=0.0, le=1.0), + Field(description="Actual share of voice delivered (0.0 to 1.0)", ge=0.0, le=1.0), ] = None venue_breakdown: Annotated[ - list[VenueBreakdownItem] | None, Field(description='Per-venue performance breakdown') + list[VenueBreakdownItem] | None, Field(description="Per-venue performance breakdown") ] = None class QuartileData(AdCPBaseModel): - q1_views: Annotated[float | None, Field(description='25% completion views', ge=0.0)] = None - q2_views: Annotated[float | None, Field(description='50% completion views', ge=0.0)] = None - q3_views: Annotated[float | None, Field(description='75% completion views', ge=0.0)] = None - q4_views: Annotated[float | None, Field(description='100% completion views', ge=0.0)] = None + q1_views: Annotated[float | None, Field(description="25% completion views", ge=0.0)] = None + q2_views: Annotated[float | None, Field(description="50% completion views", ge=0.0)] = None + q3_views: Annotated[float | None, Field(description="75% completion views", ge=0.0)] = None + q4_views: Annotated[float | None, Field(description="100% completion views", ge=0.0)] = None class Standard(Enum): - mrc = 'mrc' - groupm = 'groupm' + mrc = "mrc" + groupm = "groupm" class Viewability(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) measurable_impressions: Annotated[ float | None, Field( - description='Impressions where viewability could be measured. Excludes environments without measurement capability (e.g., non-Intersection Observer browsers, certain app environments).', + description="Impressions where viewability could be measured. Excludes environments without measurement capability (e.g., non-Intersection Observer browsers, certain app environments).", ge=0.0, ), ] = None @@ -110,14 +110,14 @@ class Viewability(AdCPBaseModel): viewable_impressions: Annotated[ float | None, Field( - description='Impressions that met the viewability threshold defined by the measurement standard.', + description="Impressions that met the viewability threshold defined by the measurement standard.", ge=0.0, ), ] = None viewable_rate: Annotated[ float | None, Field( - description='Viewable impression rate (viewable_impressions / measurable_impressions). Range 0.0 to 1.0.', + description="Viewable impression rate (viewable_impressions / measurable_impressions). Range 0.0 to 1.0.", ge=0.0, le=1.0, ), @@ -126,76 +126,76 @@ class Viewability(AdCPBaseModel): class ByEventTypeItem(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - count: Annotated[float, Field(description='Number of events of this type', ge=0.0)] + count: Annotated[float, Field(description="Number of events of this type", ge=0.0)] event_source_id: Annotated[ str | None, Field( - description='Event source that produced these conversions (for disambiguation when multiple event sources are configured)' + description="Event source that produced these conversions (for disambiguation when multiple event sources are configured)" ), ] = None - event_type: Annotated[event_type_1.EventType, Field(description='The event type')] + event_type: Annotated[event_type_1.EventType, Field(description="The event type")] value: Annotated[ - float | None, Field(description='Total monetary value of events of this type', ge=0.0) + float | None, Field(description="Total monetary value of events of this type", ge=0.0) ] = None class DeliveryMetrics(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) by_action_source: Annotated[ list[ByActionSourceItem] | None, Field( - description='Conversion metrics broken down by action source (website, app, in_store, etc.). Useful for omnichannel sellers where conversions occur across digital and physical channels.' + description="Conversion metrics broken down by action source (website, app, in_store, etc.). Useful for omnichannel sellers where conversions occur across digital and physical channels." ), ] = None by_event_type: Annotated[ list[ByEventTypeItem] | None, Field( - description='Conversion metrics broken down by event type. Spend-derived metrics (ROAS, CPA) are only available at the package/totals level since spend cannot be attributed to individual event types.' + description="Conversion metrics broken down by event type. Spend-derived metrics (ROAS, CPA) are only available at the package/totals level since spend cannot be attributed to individual event types." ), ] = None - clicks: Annotated[float | None, Field(description='Total clicks', ge=0.0)] = None + clicks: Annotated[float | None, Field(description="Total clicks", ge=0.0)] = None completed_views: Annotated[ - float | None, Field(description='100% completions (for CPCV)', ge=0.0) + float | None, Field(description="100% completions (for CPCV)", ge=0.0) ] = None completion_rate: Annotated[ float | None, - Field(description='Completion rate (completed_views/impressions)', ge=0.0, le=1.0), + Field(description="Completion rate (completed_views/impressions)", ge=0.0, le=1.0), ] = None conversion_value: Annotated[ float | None, Field( - description='Total monetary value of attributed conversions (in the reporting currency)', + description="Total monetary value of attributed conversions (in the reporting currency)", ge=0.0, ), ] = None conversions: Annotated[ float | None, Field( - description='Total conversions attributed to this delivery. When by_event_type is present, this equals the sum of all by_event_type[].count entries.', + description="Total conversions attributed to this delivery. When by_event_type is present, this equals the sum of all by_event_type[].count entries.", ge=0.0, ), ] = None cost_per_acquisition: Annotated[ - float | None, Field(description='Cost per conversion (spend / conversions)', ge=0.0) + float | None, Field(description="Cost per conversion (spend / conversions)", ge=0.0) ] = None cost_per_click: Annotated[ - float | None, Field(description='Cost per click (spend / clicks)', ge=0.0) + float | None, Field(description="Cost per click (spend / clicks)", ge=0.0) ] = None ctr: Annotated[ - float | None, Field(description='Click-through rate (clicks/impressions)', ge=0.0, le=1.0) + float | None, Field(description="Click-through rate (clicks/impressions)", ge=0.0, le=1.0) ] = None dooh_metrics: Annotated[ DoohMetrics | None, - Field(description='DOOH-specific metrics (only included for DOOH campaigns)'), + Field(description="DOOH-specific metrics (only included for DOOH campaigns)"), ] = None engagement_rate: Annotated[ float | None, Field( - description='Platform-specific engagement rate (0.0 to 1.0). Definition varies by platform (e.g., likes+comments+shares/impressions on social, interactions/impressions on rich media).', + description="Platform-specific engagement rate (0.0 to 1.0). Definition varies by platform (e.g., likes+comments+shares/impressions on social, interactions/impressions on rich media).", ge=0.0, le=1.0, ), @@ -203,14 +203,14 @@ class DeliveryMetrics(AdCPBaseModel): frequency: Annotated[ float | None, Field( - description='Average frequency per individual (typically measured over campaign duration, but can vary by measurement provider)', + description="Average frequency per individual (typically measured over campaign duration, but can vary by measurement provider)", ge=0.0, ), ] = None grps: Annotated[ - float | None, Field(description='Gross Rating Points delivered (for CPP)', ge=0.0) + float | None, Field(description="Gross Rating Points delivered (for CPP)", ge=0.0) ] = None - impressions: Annotated[float | None, Field(description='Impressions delivered', ge=0.0)] = None + impressions: Annotated[float | None, Field(description="Impressions delivered", ge=0.0)] = None leads: Annotated[ float | None, Field( @@ -221,29 +221,29 @@ class DeliveryMetrics(AdCPBaseModel): new_to_brand_rate: Annotated[ float | None, Field( - description='Fraction of conversions from first-time brand buyers (0 = none, 1 = all)', + description="Fraction of conversions from first-time brand buyers (0 = none, 1 = all)", ge=0.0, le=1.0, ), ] = None quartile_data: Annotated[ - QuartileData | None, Field(description='Video quartile completion data') + QuartileData | None, Field(description="Video quartile completion data") ] = None reach: Annotated[ float | None, Field( - description='Unique reach - units depend on measurement provider (e.g., individuals, households, devices, cookies). See delivery_measurement.provider for methodology.', + description="Unique reach - units depend on measurement provider (e.g., individuals, households, devices, cookies). See delivery_measurement.provider for methodology.", ge=0.0, ), ] = None roas: Annotated[ - float | None, Field(description='Return on ad spend (conversion_value / spend)', ge=0.0) + float | None, Field(description="Return on ad spend (conversion_value / spend)", ge=0.0) ] = None - spend: Annotated[float | None, Field(description='Amount spent', ge=0.0)] = None + spend: Annotated[float | None, Field(description="Amount spent", ge=0.0)] = None viewability: Annotated[ Viewability | None, Field( - description='Viewability metrics. Viewable rate should be calculated as viewable_impressions / measurable_impressions (not total impressions), since some environments cannot measure viewability.' + description="Viewability metrics. Viewable rate should be calculated as viewable_impressions / measurable_impressions (not total impressions), since some environments cannot measure viewability." ), ] = None - views: Annotated[float | None, Field(description='Views at threshold (for CPV)', ge=0.0)] = None + views: Annotated[float | None, Field(description="Views at threshold (for CPV)", ge=0.0)] = None diff --git a/src/adcp/types/generated_poc/core/deployment.py b/src/adcp/types/generated_poc/core/deployment.py index efd38f74..b1de55f0 100644 --- a/src/adcp/types/generated_poc/core/deployment.py +++ b/src/adcp/types/generated_poc/core/deployment.py @@ -14,65 +14,65 @@ class Deployment1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - account: Annotated[str | None, Field(description='Account identifier if applicable')] = None + account: Annotated[str | None, Field(description="Account identifier if applicable")] = None activation_key: Annotated[ activation_key_1.ActivationKey | None, Field( - description='The key to use for targeting. Only present if is_live=true AND requester has access to this deployment.' + description="The key to use for targeting. Only present if is_live=true AND requester has access to this deployment." ), ] = None deployed_at: Annotated[ AwareDatetime | None, - Field(description='Timestamp when activation completed (if is_live=true)'), + Field(description="Timestamp when activation completed (if is_live=true)"), ] = None estimated_activation_duration_minutes: Annotated[ float | None, Field( - description='Estimated time to activate if not live, or to complete activation if in progress', + description="Estimated time to activate if not live, or to complete activation if in progress", ge=0.0, ), ] = None is_live: Annotated[ - bool, Field(description='Whether signal is currently active on this deployment') + bool, Field(description="Whether signal is currently active on this deployment") ] - platform: Annotated[str, Field(description='Platform identifier for DSPs')] + platform: Annotated[str, Field(description="Platform identifier for DSPs")] type: Annotated[ - Literal['platform'], - Field(description='Discriminator indicating this is a platform-based deployment'), + Literal["platform"], + Field(description="Discriminator indicating this is a platform-based deployment"), ] class Deployment2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - account: Annotated[str | None, Field(description='Account identifier if applicable')] = None + account: Annotated[str | None, Field(description="Account identifier if applicable")] = None activation_key: Annotated[ activation_key_1.ActivationKey | None, Field( - description='The key to use for targeting. Only present if is_live=true AND requester has access to this deployment.' + description="The key to use for targeting. Only present if is_live=true AND requester has access to this deployment." ), ] = None - agent_url: Annotated[AnyUrl, Field(description='URL identifying the deployment agent')] + agent_url: Annotated[AnyUrl, Field(description="URL identifying the deployment agent")] deployed_at: Annotated[ AwareDatetime | None, - Field(description='Timestamp when activation completed (if is_live=true)'), + Field(description="Timestamp when activation completed (if is_live=true)"), ] = None estimated_activation_duration_minutes: Annotated[ float | None, Field( - description='Estimated time to activate if not live, or to complete activation if in progress', + description="Estimated time to activate if not live, or to complete activation if in progress", ge=0.0, ), ] = None is_live: Annotated[ - bool, Field(description='Whether signal is currently active on this deployment') + bool, Field(description="Whether signal is currently active on this deployment") ] type: Annotated[ - Literal['agent'], - Field(description='Discriminator indicating this is an agent URL-based deployment'), + Literal["agent"], + Field(description="Discriminator indicating this is an agent URL-based deployment"), ] @@ -80,7 +80,7 @@ class Deployment(RootModel[Deployment1 | Deployment2]): root: Annotated[ Deployment1 | Deployment2, Field( - description='A signal deployment to a specific deployment target with activation status and key', - title='Deployment', + description="A signal deployment to a specific deployment target with activation status and key", + title="Deployment", ), ] diff --git a/src/adcp/types/generated_poc/core/destination.py b/src/adcp/types/generated_poc/core/destination.py index 033ba74c..798a4be5 100644 --- a/src/adcp/types/generated_poc/core/destination.py +++ b/src/adcp/types/generated_poc/core/destination.py @@ -12,34 +12,34 @@ class Destination1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) account: Annotated[ - str | None, Field(description='Optional account identifier on the platform') + str | None, Field(description="Optional account identifier on the platform") ] = None platform: Annotated[ str, Field(description="Platform identifier for DSPs (e.g., 'the-trade-desk', 'amazon-dsp')"), ] type: Annotated[ - Literal['platform'], - Field(description='Discriminator indicating this is a platform-based deployment'), + Literal["platform"], + Field(description="Discriminator indicating this is a platform-based deployment"), ] class Destination2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) account: Annotated[ - str | None, Field(description='Optional account identifier on the agent') + str | None, Field(description="Optional account identifier on the agent") ] = None agent_url: Annotated[ - AnyUrl, Field(description='URL identifying the deployment agent (for sales agents, etc.)') + AnyUrl, Field(description="URL identifying the deployment agent (for sales agents, etc.)") ] type: Annotated[ - Literal['agent'], - Field(description='Discriminator indicating this is an agent URL-based deployment'), + Literal["agent"], + Field(description="Discriminator indicating this is an agent URL-based deployment"), ] @@ -47,7 +47,7 @@ class Destination(RootModel[Destination1 | Destination2]): root: Annotated[ Destination1 | Destination2, Field( - description='A deployment target where signals can be activated (DSP, sales agent, etc.)', - title='Destination', + description="A deployment target where signals can be activated (DSP, sales agent, etc.)", + title="Destination", ), ] diff --git a/src/adcp/types/generated_poc/core/destination_item.py b/src/adcp/types/generated_poc/core/destination_item.py index eb74ee2e..78fd51c0 100644 --- a/src/adcp/types/generated_poc/core/destination_item.py +++ b/src/adcp/types/generated_poc/core/destination_item.py @@ -15,58 +15,58 @@ class DestinationType(Enum): - beach = 'beach' - mountain = 'mountain' - urban = 'urban' - cultural = 'cultural' - adventure = 'adventure' - wellness = 'wellness' - cruise = 'cruise' + beach = "beach" + mountain = "mountain" + urban = "urban" + cultural = "cultural" + adventure = "adventure" + wellness = "wellness" + cruise = "cruise" class Location(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) lat: Annotated[ - float, Field(description='Latitude in decimal degrees (WGS 84).', ge=-90.0, le=90.0) + float, Field(description="Latitude in decimal degrees (WGS 84).", ge=-90.0, le=90.0) ] lng: Annotated[ - float, Field(description='Longitude in decimal degrees (WGS 84).', ge=-180.0, le=180.0) + float, Field(description="Longitude in decimal degrees (WGS 84).", ge=-180.0, le=180.0) ] class DestinationItem(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - city: Annotated[str | None, Field(description='City name, if applicable.')] = None + city: Annotated[str | None, Field(description="City name, if applicable.")] = None country: Annotated[ - str | None, Field(description='ISO 3166-1 alpha-2 country code.', pattern='^[A-Z]{2}$') + str | None, Field(description="ISO 3166-1 alpha-2 country code.", pattern="^[A-Z]{2}$") ] = None description: Annotated[ str | None, - Field(description='Destination description highlighting attractions and appeal.'), + Field(description="Destination description highlighting attractions and appeal."), ] = None - destination_id: Annotated[str, Field(description='Unique identifier for this destination.')] + destination_id: Annotated[str, Field(description="Unique identifier for this destination.")] destination_type: Annotated[ - DestinationType | None, Field(description='Destination category.') + DestinationType | None, Field(description="Destination category.") ] = None ext: ext_1.ExtensionObject | None = None - image_url: Annotated[AnyUrl | None, Field(description='Destination hero image URL.')] = None + image_url: Annotated[AnyUrl | None, Field(description="Destination hero image URL.")] = None location: Annotated[ - Location | None, Field(description='Geographic coordinates of the destination.') + Location | None, Field(description="Geographic coordinates of the destination.") ] = None name: Annotated[ str, Field(description="Destination name (e.g., 'Barcelona', 'Bali', 'Swiss Alps').") ] price: Annotated[ - price_1.Price | None, Field(description='Starting price for a trip to this destination.') + price_1.Price | None, Field(description="Starting price for a trip to this destination.") ] = None rating: Annotated[ - float | None, Field(description='Destination rating (1–5).', ge=1.0, le=5.0) + float | None, Field(description="Destination rating (1–5).", ge=1.0, le=5.0) ] = None - region: Annotated[str | None, Field(description='State, province, or region name.')] = None + region: Annotated[str | None, Field(description="State, province, or region name.")] = None tags: Annotated[ list[str] | None, Field( @@ -74,6 +74,6 @@ class DestinationItem(AdCPBaseModel): min_length=1, ), ] = None - url: Annotated[AnyUrl | None, Field(description='Destination landing page or booking URL.')] = ( + url: Annotated[AnyUrl | None, Field(description="Destination landing page or booking URL.")] = ( None ) diff --git a/src/adcp/types/generated_poc/core/education_item.py b/src/adcp/types/generated_poc/core/education_item.py index 5ab9a86f..9e408b61 100644 --- a/src/adcp/types/generated_poc/core/education_item.py +++ b/src/adcp/types/generated_poc/core/education_item.py @@ -16,37 +16,37 @@ class DegreeType(Enum): - certificate = 'certificate' - associate = 'associate' - bachelor = 'bachelor' - master = 'master' - doctorate = 'doctorate' - professional = 'professional' - bootcamp = 'bootcamp' + certificate = "certificate" + associate = "associate" + bachelor = "bachelor" + master = "master" + doctorate = "doctorate" + professional = "professional" + bootcamp = "bootcamp" class Level(Enum): - beginner = 'beginner' - intermediate = 'intermediate' - advanced = 'advanced' + beginner = "beginner" + intermediate = "intermediate" + advanced = "advanced" class Modality(Enum): - online = 'online' - in_person = 'in_person' - hybrid = 'hybrid' + online = "online" + in_person = "in_person" + hybrid = "hybrid" class EducationItem(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - degree_type: Annotated[DegreeType | None, Field(description='Type of credential awarded.')] = ( + degree_type: Annotated[DegreeType | None, Field(description="Type of credential awarded.")] = ( None ) description: Annotated[ str | None, - Field(description='Program description including curriculum highlights and outcomes.'), + Field(description="Program description including curriculum highlights and outcomes."), ] = None duration: Annotated[ str | None, @@ -55,31 +55,31 @@ class EducationItem(AdCPBaseModel): ), ] = None ext: ext_1.ExtensionObject | None = None - image_url: Annotated[AnyUrl | None, Field(description='Program or institution image URL.')] = ( + image_url: Annotated[AnyUrl | None, Field(description="Program or institution image URL.")] = ( None ) language: Annotated[ str | None, Field(description="Language of instruction (e.g., 'en', 'nl', 'es').") ] = None - level: Annotated[Level | None, Field(description='Difficulty or prerequisite level.')] = None + level: Annotated[Level | None, Field(description="Difficulty or prerequisite level.")] = None location: Annotated[ str | None, Field( description="Campus or instruction location (e.g., 'Amsterdam, NL'). Omit for fully online programs." ), ] = None - modality: Annotated[Modality | None, Field(description='Delivery format.')] = None + modality: Annotated[Modality | None, Field(description="Delivery format.")] = None name: Annotated[ str, Field( description="Program or course name (e.g., 'MSc Computer Science', 'Digital Marketing Certificate')." ), ] - price: Annotated[price_1.Price | None, Field(description='Tuition or course fee.')] = None - program_id: Annotated[str, Field(description='Unique identifier for this program or course.')] - school: Annotated[str, Field(description='Institution or provider name.')] + price: Annotated[price_1.Price | None, Field(description="Tuition or course fee.")] = None + program_id: Annotated[str, Field(description="Unique identifier for this program or course.")] + school: Annotated[str, Field(description="Institution or provider name.")] start_date: Annotated[ - date | None, Field(description='Next available start date (ISO 8601 date).') + date | None, Field(description="Next available start date (ISO 8601 date).") ] = None subject: Annotated[ str | None, @@ -94,6 +94,6 @@ class EducationItem(AdCPBaseModel): min_length=1, ), ] = None - url: Annotated[AnyUrl | None, Field(description='Program landing page or enrollment URL.')] = ( + url: Annotated[AnyUrl | None, Field(description="Program landing page or enrollment URL.")] = ( None ) diff --git a/src/adcp/types/generated_poc/core/error.py b/src/adcp/types/generated_poc/core/error.py index e334c657..21bbbbf3 100644 --- a/src/adcp/types/generated_poc/core/error.py +++ b/src/adcp/types/generated_poc/core/error.py @@ -12,18 +12,18 @@ class Error(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - code: Annotated[str, Field(description='Error code for programmatic handling')] + code: Annotated[str, Field(description="Error code for programmatic handling")] details: Annotated[ - dict[str, Any] | None, Field(description='Additional task-specific error details') + dict[str, Any] | None, Field(description="Additional task-specific error details") ] = None field: Annotated[ str | None, Field(description="Field path associated with the error (e.g., 'packages[0].targeting')"), ] = None - message: Annotated[str, Field(description='Human-readable error message')] + message: Annotated[str, Field(description="Human-readable error message")] retry_after: Annotated[ - float | None, Field(description='Seconds to wait before retrying the operation', ge=0.0) + float | None, Field(description="Seconds to wait before retrying the operation", ge=0.0) ] = None - suggestion: Annotated[str | None, Field(description='Suggested fix for the error')] = None + suggestion: Annotated[str | None, Field(description="Suggested fix for the error")] = None diff --git a/src/adcp/types/generated_poc/core/event.py b/src/adcp/types/generated_poc/core/event.py index e6c3eeab..95512ab9 100644 --- a/src/adcp/types/generated_poc/core/event.py +++ b/src/adcp/types/generated_poc/core/event.py @@ -18,14 +18,14 @@ class Event(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) action_source: Annotated[ - action_source_1.ActionSource | None, Field(description='Where the event originated') + action_source_1.ActionSource | None, Field(description="Where the event originated") ] = None custom_data: Annotated[ event_custom_data.EventCustomData | None, - Field(description='Event-specific data (value, currency, items, etc.)'), + Field(description="Event-specific data (value, currency, items, etc.)"), ] = None custom_event_name: Annotated[ str | None, Field(description="Name for custom events (used when event_type is 'custom')") @@ -33,7 +33,7 @@ class Event(AdCPBaseModel): event_id: Annotated[ str, Field( - description='Unique identifier for deduplication (scoped to event_type + event_source_id)', + description="Unique identifier for deduplication (scoped to event_type + event_source_id)", max_length=256, min_length=1, ), @@ -45,11 +45,11 @@ class Event(AdCPBaseModel): ), ] = None event_time: Annotated[ - AwareDatetime, Field(description='ISO 8601 timestamp when the event occurred') + AwareDatetime, Field(description="ISO 8601 timestamp when the event occurred") ] - event_type: Annotated[event_type_1.EventType, Field(description='Standard event type')] + event_type: Annotated[event_type_1.EventType, Field(description="Standard event type")] ext: ext_1.ExtensionObject | None = None user_match: Annotated[ user_match_1.UserMatch | None, - Field(description='User identifiers for attribution matching'), + Field(description="User identifiers for attribution matching"), ] = None diff --git a/src/adcp/types/generated_poc/core/event_custom_data.py b/src/adcp/types/generated_poc/core/event_custom_data.py index 7cd90a12..ad0e6f44 100644 --- a/src/adcp/types/generated_poc/core/event_custom_data.py +++ b/src/adcp/types/generated_poc/core/event_custom_data.py @@ -14,20 +14,20 @@ class Content(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - brand: Annotated[str | None, Field(description='Brand name of this item')] = None - id: Annotated[str, Field(description='Product or content identifier')] - price: Annotated[float | None, Field(description='Price per unit of this item', ge=0.0)] = None - quantity: Annotated[int | None, Field(description='Quantity of this item', ge=1)] = None + brand: Annotated[str | None, Field(description="Brand name of this item")] = None + id: Annotated[str, Field(description="Product or content identifier")] + price: Annotated[float | None, Field(description="Price per unit of this item", ge=0.0)] = None + quantity: Annotated[int | None, Field(description="Quantity of this item", ge=1)] = None class EventCustomData(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) content_category: Annotated[ - str | None, Field(description='Category of the product or content') + str | None, Field(description="Category of the product or content") ] = None content_ids: Annotated[ list[str] | None, @@ -35,7 +35,7 @@ class EventCustomData(AdCPBaseModel): description="Item identifiers for catalog attribution. Values are matched against catalog items using the identifier type declared by the catalog's content_id_type field (e.g., SKUs, GTINs, or vertical-specific IDs like job_id)." ), ] = None - content_name: Annotated[str | None, Field(description='Name of the product or content')] = None + content_name: Annotated[str | None, Field(description="Name of the product or content")] = None content_type: Annotated[ str | None, Field( @@ -43,20 +43,20 @@ class EventCustomData(AdCPBaseModel): ), ] = None contents: Annotated[ - list[Content] | None, Field(description='Per-item details for e-commerce events') + list[Content] | None, Field(description="Per-item details for e-commerce events") ] = None currency: Annotated[ - str | None, Field(description='ISO 4217 currency code', pattern='^[A-Z]{3}$') + str | None, Field(description="ISO 4217 currency code", pattern="^[A-Z]{3}$") ] = None ext: ext_1.ExtensionObject | None = None - num_items: Annotated[int | None, Field(description='Number of items in the event', ge=0)] = None - order_id: Annotated[str | None, Field(description='Unique order or transaction identifier')] = ( + num_items: Annotated[int | None, Field(description="Number of items in the event", ge=0)] = None + order_id: Annotated[str | None, Field(description="Unique order or transaction identifier")] = ( None ) - search_string: Annotated[str | None, Field(description='Search query for search events')] = None + search_string: Annotated[str | None, Field(description="Search query for search events")] = None value: Annotated[ float | None, Field( - description='Monetary value of the event (should be accompanied by currency)', ge=0.0 + description="Monetary value of the event (should be accompanied by currency)", ge=0.0 ), ] = None diff --git a/src/adcp/types/generated_poc/core/ext.py b/src/adcp/types/generated_poc/core/ext.py index ad546022..78ec2ca4 100644 --- a/src/adcp/types/generated_poc/core/ext.py +++ b/src/adcp/types/generated_poc/core/ext.py @@ -10,5 +10,5 @@ class ExtensionObject(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) diff --git a/src/adcp/types/generated_poc/core/flight_item.py b/src/adcp/types/generated_poc/core/flight_item.py index b0cb2f42..13c45a46 100644 --- a/src/adcp/types/generated_poc/core/flight_item.py +++ b/src/adcp/types/generated_poc/core/flight_item.py @@ -15,19 +15,19 @@ class Destination(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) - airport_code: Annotated[str, Field(description='IATA airport code.', pattern='^[A-Z]{3}$')] - city: Annotated[str | None, Field(description='City name.')] = None + airport_code: Annotated[str, Field(description="IATA airport code.", pattern="^[A-Z]{3}$")] + city: Annotated[str | None, Field(description="City name.")] = None class Origin(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) airport_code: Annotated[ str, - Field(description="IATA airport code (e.g., 'AMS', 'JFK', 'LHR').", pattern='^[A-Z]{3}$'), + Field(description="IATA airport code (e.g., 'AMS', 'JFK', 'LHR').", pattern="^[A-Z]{3}$"), ] city: Annotated[str | None, Field(description="City name (e.g., 'Amsterdam', 'New York').")] = ( None @@ -36,28 +36,28 @@ class Origin(AdCPBaseModel): class FlightItem(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - airline: Annotated[str | None, Field(description='Airline name or IATA airline code.')] = None + airline: Annotated[str | None, Field(description="Airline name or IATA airline code.")] = None arrival_time: Annotated[ - AwareDatetime | None, Field(description='Arrival date and time (ISO 8601).') + AwareDatetime | None, Field(description="Arrival date and time (ISO 8601).") ] = None departure_time: Annotated[ - AwareDatetime | None, Field(description='Departure date and time (ISO 8601).') + AwareDatetime | None, Field(description="Departure date and time (ISO 8601).") ] = None description: Annotated[ - str | None, Field(description='Route description or promotional text.') + str | None, Field(description="Route description or promotional text.") ] = None - destination: Annotated[Destination, Field(description='Arrival airport or city.')] + destination: Annotated[Destination, Field(description="Arrival airport or city.")] ext: ext_1.ExtensionObject | None = None flight_id: Annotated[ - str, Field(description='Unique identifier for this flight route or offer.') + str, Field(description="Unique identifier for this flight route or offer.") ] image_url: Annotated[ - AnyUrl | None, Field(description='Promotional image URL (typically a destination photo).') + AnyUrl | None, Field(description="Promotional image URL (typically a destination photo).") ] = None - origin: Annotated[Origin, Field(description='Departure airport or city.')] - price: Annotated[price_1.Price | None, Field(description='Ticket price or starting fare.')] = ( + origin: Annotated[Origin, Field(description="Departure airport or city.")] + price: Annotated[price_1.Price | None, Field(description="Ticket price or starting fare.")] = ( None ) tags: Annotated[ @@ -67,4 +67,4 @@ class FlightItem(AdCPBaseModel): min_length=1, ), ] = None - url: Annotated[AnyUrl | None, Field(description='Booking page URL for this route.')] = None + url: Annotated[AnyUrl | None, Field(description="Booking page URL for this route.")] = None diff --git a/src/adcp/types/generated_poc/core/forecast_point.py b/src/adcp/types/generated_poc/core/forecast_point.py index 8d612ebc..e09c0376 100644 --- a/src/adcp/types/generated_poc/core/forecast_point.py +++ b/src/adcp/types/generated_poc/core/forecast_point.py @@ -14,12 +14,12 @@ class ForecastPoint(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) budget: Annotated[ float, Field( - description='Budget amount for this forecast point. For allocation-level forecasts, this is the absolute budget for that allocation (not the percentage). For proposal-level forecasts, this is the total proposal budget.', + description="Budget amount for this forecast point. For allocation-level forecasts, this is the absolute budget for that allocation (not the percentage). For proposal-level forecasts, this is the total proposal budget.", ge=0.0, ), ] diff --git a/src/adcp/types/generated_poc/core/forecast_range.py b/src/adcp/types/generated_poc/core/forecast_range.py index 574eb8b8..39e44fa8 100644 --- a/src/adcp/types/generated_poc/core/forecast_range.py +++ b/src/adcp/types/generated_poc/core/forecast_range.py @@ -12,12 +12,12 @@ class ForecastRange(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) high: Annotated[ - float | None, Field(description='Optimistic (high-end) forecast value', ge=0.0) + float | None, Field(description="Optimistic (high-end) forecast value", ge=0.0) ] = None low: Annotated[ - float | None, Field(description='Conservative (low-end) forecast value', ge=0.0) + float | None, Field(description="Conservative (low-end) forecast value", ge=0.0) ] = None - mid: Annotated[float, Field(description='Expected (most likely) forecast value', ge=0.0)] + mid: Annotated[float, Field(description="Expected (most likely) forecast value", ge=0.0)] diff --git a/src/adcp/types/generated_poc/core/format.py b/src/adcp/types/generated_poc/core/format.py index a37ecfb2..ea6cc1dd 100644 --- a/src/adcp/types/generated_poc/core/format.py +++ b/src/adcp/types/generated_poc/core/format.py @@ -31,8 +31,8 @@ class SelectionMode(Enum): - sequential = 'sequential' - optimize = 'optimize' + sequential = "sequential" + optimize = "optimize" class Responsive(AdCPBaseModel): @@ -45,36 +45,36 @@ class Dimensions(AdCPBaseModel): str | None, Field( description="Fixed aspect ratio constraint (e.g., '16:9', '4:3', '1:1')", - pattern='^\\d+:\\d+$', + pattern="^\\d+:\\d+$", ), ] = None - height: Annotated[int | None, Field(description='Fixed height in pixels', ge=1)] = None + height: Annotated[int | None, Field(description="Fixed height in pixels", ge=1)] = None max_height: Annotated[ - int | None, Field(description='Maximum height in pixels for responsive renders', ge=1) + int | None, Field(description="Maximum height in pixels for responsive renders", ge=1) ] = None max_width: Annotated[ - int | None, Field(description='Maximum width in pixels for responsive renders', ge=1) + int | None, Field(description="Maximum width in pixels for responsive renders", ge=1) ] = None min_height: Annotated[ - int | None, Field(description='Minimum height in pixels for responsive renders', ge=1) + int | None, Field(description="Minimum height in pixels for responsive renders", ge=1) ] = None min_width: Annotated[ - int | None, Field(description='Minimum width in pixels for responsive renders', ge=1) + int | None, Field(description="Minimum width in pixels for responsive renders", ge=1) ] = None responsive: Annotated[ - Responsive | None, Field(description='Indicates which dimensions are responsive/fluid') + Responsive | None, Field(description="Indicates which dimensions are responsive/fluid") ] = None - width: Annotated[int | None, Field(description='Fixed width in pixels', ge=1)] = None + width: Annotated[int | None, Field(description="Fixed width in pixels", ge=1)] = None class Renders(AdCPBaseModel): dimensions: Annotated[ - Dimensions, Field(description='Dimensions for this rendered piece (in pixels)') + Dimensions, Field(description="Dimensions for this rendered piece (in pixels)") ] parameters_from_format_id: Annotated[ bool | None, Field( - description='When true, parameters for this render (dimensions and/or duration) are specified in the format_id. Used for template formats that accept parameters. Mutually exclusive with specifying dimensions object explicitly.' + description="When true, parameters for this render (dimensions and/or duration) are specified in the format_id. Used for template formats that accept parameters. Mutually exclusive with specifying dimensions object explicitly." ), ] = None role: Annotated[ @@ -91,12 +91,12 @@ class Dimensions1(Dimensions): class Renders1(AdCPBaseModel): dimensions: Annotated[ - Dimensions1 | None, Field(description='Dimensions for this rendered piece (in pixels)') + Dimensions1 | None, Field(description="Dimensions for this rendered piece (in pixels)") ] = None parameters_from_format_id: Annotated[ Literal[True], Field( - description='When true, parameters for this render (dimensions and/or duration) are specified in the format_id. Used for template formats that accept parameters. Mutually exclusive with specifying dimensions object explicitly.' + description="When true, parameters for this render (dimensions and/or duration) are specified in the format_id. Used for template formats that accept parameters. Mutually exclusive with specifying dimensions object explicitly." ), ] role: Annotated[ @@ -108,7 +108,7 @@ class Renders1(AdCPBaseModel): class BaseGroupAsset(AdCPBaseModel): - asset_id: Annotated[str, Field(description='Identifier for this asset within the group')] + asset_id: Annotated[str, Field(description="Identifier for this asset within the group")] asset_role: Annotated[ str | None, Field( @@ -117,7 +117,7 @@ class BaseGroupAsset(AdCPBaseModel): ] = None required: Annotated[ bool, - Field(description='Whether this asset is required within each repetition of the group'), + Field(description="Whether this asset is required within each repetition of the group"), ] @@ -125,7 +125,7 @@ class BaseIndividualAsset(AdCPBaseModel): asset_id: Annotated[ str, Field( - description='Unique identifier for this asset. Creative manifests MUST use this exact value as the key in the assets object.' + description="Unique identifier for this asset. Creative manifests MUST use this exact value as the key in the assets object." ), ] asset_role: Annotated[ @@ -135,13 +135,13 @@ class BaseIndividualAsset(AdCPBaseModel): ), ] = None item_type: Annotated[ - Literal['individual'], - Field(description='Discriminator indicating this is an individual asset'), + Literal["individual"], + Field(description="Discriminator indicating this is an individual asset"), ] required: Annotated[ bool, Field( - description='Whether this asset is required (true) or optional (false). Required assets must be provided for a valid creative. Optional assets enhance the creative but are not mandatory.' + description="Whether this asset is required (true) or optional (false). Required assets must be provided for a valid creative. Optional assets enhance the creative but are not mandatory." ), ] @@ -150,146 +150,146 @@ class Accessibility(AdCPBaseModel): requires_accessible_assets: Annotated[ bool | None, Field( - description='When true, all assets with x-accessibility fields must include those fields. For inspectable assets (image, video, audio), this means providing accessibility metadata like alt_text or captions. For opaque assets (HTML, JavaScript), this means providing self-declared accessibility properties.' + description="When true, all assets with x-accessibility fields must include those fields. For inspectable assets (image, video, audio), this means providing accessibility metadata like alt_text or captions. For opaque assets (HTML, JavaScript), this means providing self-declared accessibility properties." ), ] = None wcag_level: Annotated[ wcag_level_1.WcagLevel, Field( - description='WCAG conformance level that this format achieves. For format-rendered creatives, the format guarantees this level. For opaque creatives, the format requires assets that self-certify to this level.' + description="WCAG conformance level that this format achieves. For format-rendered creatives, the format guarantees this level. For opaque creatives, the format requires assets that self-certify to this level." ), ] class Assets(BaseIndividualAsset): - asset_type: Literal['image'] = 'image' - item_type: Literal['individual'] = 'individual' + asset_type: Literal["image"] = "image" + item_type: Literal["individual"] = "individual" requirements: image_asset_requirements.ImageAssetRequirements | None = None class Assets5(BaseIndividualAsset): - asset_type: Literal['video'] = 'video' - item_type: Literal['individual'] = 'individual' + asset_type: Literal["video"] = "video" + item_type: Literal["individual"] = "individual" requirements: video_asset_requirements.VideoAssetRequirements | None = None class Assets6(BaseIndividualAsset): - asset_type: Literal['audio'] = 'audio' - item_type: Literal['individual'] = 'individual' + asset_type: Literal["audio"] = "audio" + item_type: Literal["individual"] = "individual" requirements: audio_asset_requirements.AudioAssetRequirements | None = None class Assets7(BaseIndividualAsset): - asset_type: Literal['text'] = 'text' - item_type: Literal['individual'] = 'individual' + asset_type: Literal["text"] = "text" + item_type: Literal["individual"] = "individual" requirements: text_asset_requirements.TextAssetRequirements | None = None class Assets8(BaseIndividualAsset): - asset_type: Literal['markdown'] = 'markdown' - item_type: Literal['individual'] = 'individual' + asset_type: Literal["markdown"] = "markdown" + item_type: Literal["individual"] = "individual" requirements: markdown_asset_requirements.MarkdownAssetRequirements | None = None class Assets9(BaseIndividualAsset): - asset_type: Literal['html'] = 'html' - item_type: Literal['individual'] = 'individual' + asset_type: Literal["html"] = "html" + item_type: Literal["individual"] = "individual" requirements: html_asset_requirements.HtmlAssetRequirements | None = None class Assets10(BaseIndividualAsset): - asset_type: Literal['css'] = 'css' - item_type: Literal['individual'] = 'individual' + asset_type: Literal["css"] = "css" + item_type: Literal["individual"] = "individual" requirements: css_asset_requirements.CssAssetRequirements | None = None class Assets11(BaseIndividualAsset): - asset_type: Literal['javascript'] = 'javascript' - item_type: Literal['individual'] = 'individual' + asset_type: Literal["javascript"] = "javascript" + item_type: Literal["individual"] = "individual" requirements: javascript_asset_requirements.JavascriptAssetRequirements | None = None class Assets12(BaseIndividualAsset): - asset_type: Literal['vast'] = 'vast' - item_type: Literal['individual'] = 'individual' + asset_type: Literal["vast"] = "vast" + item_type: Literal["individual"] = "individual" requirements: vast_asset_requirements.VastAssetRequirements | None = None class Assets13(BaseIndividualAsset): - asset_type: Literal['daast'] = 'daast' - item_type: Literal['individual'] = 'individual' + asset_type: Literal["daast"] = "daast" + item_type: Literal["individual"] = "individual" requirements: daast_asset_requirements.DaastAssetRequirements | None = None class Assets14(BaseIndividualAsset): - asset_type: Literal['url'] = 'url' - item_type: Literal['individual'] = 'individual' + asset_type: Literal["url"] = "url" + item_type: Literal["individual"] = "individual" requirements: url_asset_requirements.UrlAssetRequirements | None = None class Assets15(BaseIndividualAsset): - asset_type: Literal['webhook'] = 'webhook' - item_type: Literal['individual'] = 'individual' + asset_type: Literal["webhook"] = "webhook" + item_type: Literal["individual"] = "individual" requirements: webhook_asset_requirements.WebhookAssetRequirements | None = None class Assets17(BaseGroupAsset): - asset_type: Literal['image'] = 'image' + asset_type: Literal["image"] = "image" requirements: image_asset_requirements.ImageAssetRequirements | None = None class Assets18(BaseGroupAsset): - asset_type: Literal['video'] = 'video' + asset_type: Literal["video"] = "video" requirements: video_asset_requirements.VideoAssetRequirements | None = None class Assets19(BaseGroupAsset): - asset_type: Literal['audio'] = 'audio' + asset_type: Literal["audio"] = "audio" requirements: audio_asset_requirements.AudioAssetRequirements | None = None class Assets20(BaseGroupAsset): - asset_type: Literal['text'] = 'text' + asset_type: Literal["text"] = "text" requirements: text_asset_requirements.TextAssetRequirements | None = None class Assets21(BaseGroupAsset): - asset_type: Literal['markdown'] = 'markdown' + asset_type: Literal["markdown"] = "markdown" requirements: markdown_asset_requirements.MarkdownAssetRequirements | None = None class Assets22(BaseGroupAsset): - asset_type: Literal['html'] = 'html' + asset_type: Literal["html"] = "html" requirements: html_asset_requirements.HtmlAssetRequirements | None = None class Assets23(BaseGroupAsset): - asset_type: Literal['css'] = 'css' + asset_type: Literal["css"] = "css" requirements: css_asset_requirements.CssAssetRequirements | None = None class Assets24(BaseGroupAsset): - asset_type: Literal['javascript'] = 'javascript' + asset_type: Literal["javascript"] = "javascript" requirements: javascript_asset_requirements.JavascriptAssetRequirements | None = None class Assets25(BaseGroupAsset): - asset_type: Literal['vast'] = 'vast' + asset_type: Literal["vast"] = "vast" requirements: vast_asset_requirements.VastAssetRequirements | None = None class Assets26(BaseGroupAsset): - asset_type: Literal['daast'] = 'daast' + asset_type: Literal["daast"] = "daast" requirements: daast_asset_requirements.DaastAssetRequirements | None = None class Assets27(BaseGroupAsset): - asset_type: Literal['url'] = 'url' + asset_type: Literal["url"] = "url" requirements: url_asset_requirements.UrlAssetRequirements | None = None class Assets28(BaseGroupAsset): - asset_type: Literal['webhook'] = 'webhook' + asset_type: Literal["webhook"] = "webhook" requirements: webhook_asset_requirements.WebhookAssetRequirements | None = None @@ -312,24 +312,24 @@ class Assets16(AdCPBaseModel): | Assets27 | Assets28 ], - Field(description='Assets within each repetition of this group'), + Field(description="Assets within each repetition of this group"), ] item_type: Annotated[ - Literal['repeatable_group'], - Field(description='Discriminator indicating this is a repeatable asset group'), + Literal["repeatable_group"], + Field(description="Discriminator indicating this is a repeatable asset group"), ] - max_count: Annotated[int, Field(description='Maximum number of repetitions allowed', ge=1)] + max_count: Annotated[int, Field(description="Maximum number of repetitions allowed", ge=1)] min_count: Annotated[ int, Field( - description='Minimum number of repetitions required (if group is required) or allowed (if optional)', + description="Minimum number of repetitions required (if group is required) or allowed (if optional)", ge=0, ), ] required: Annotated[ bool, Field( - description='Whether this asset group is required. If true, at least min_count repetitions must be provided.' + description="Whether this asset group is required. If true, at least min_count repetitions must be provided." ), ] selection_mode: Annotated[ @@ -342,52 +342,52 @@ class Assets16(AdCPBaseModel): class FormatCard(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) format_id: Annotated[ format_id_1.FormatId, Field( - description='Creative format defining the card layout (typically format_card_standard)' + description="Creative format defining the card layout (typically format_card_standard)" ), ] manifest: Annotated[ dict[str, Any], - Field(description='Asset manifest for rendering the card, structure defined by the format'), + Field(description="Asset manifest for rendering the card, structure defined by the format"), ] class FormatCardDetailed(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) format_id: Annotated[ format_id_1.FormatId, Field( - description='Creative format defining the detailed card layout (typically format_card_detailed)' + description="Creative format defining the detailed card layout (typically format_card_detailed)" ), ] manifest: Annotated[ dict[str, Any], Field( - description='Asset manifest for rendering the detailed card, structure defined by the format' + description="Asset manifest for rendering the detailed card, structure defined by the format" ), ] class Format(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) accepts_parameters: Annotated[ list[format_id_parameter.FormatIdParameter] | None, Field( - description='List of parameters this format accepts in format_id. Template formats define which parameters (dimensions, duration, etc.) can be specified when instantiating the format. Empty or omitted means this is a concrete format with fixed parameters.' + description="List of parameters this format accepts in format_id. Template formats define which parameters (dimensions, duration, etc.) can be specified when instantiating the format. Empty or omitted means this is a concrete format with fixed parameters." ), ] = None accessibility: Annotated[ Accessibility | None, Field( - description='Accessibility posture of this format. Declares the WCAG conformance level that creatives produced by this format will meet.' + description="Accessibility posture of this format. Declares the WCAG conformance level that creatives produced by this format will meet." ), ] = None assets: Annotated[ @@ -414,78 +414,78 @@ class Format(AdCPBaseModel): catalog_requirements: Annotated[ list[catalog_requirements_1.CatalogRequirements] | None, Field( - description='Catalog feeds this format requires for rendering. Formats that display product listings, store locators, inventory availability, or promotional pricing declare what catalog types must be synced to the account. Buyers ensure the required catalogs are synced via sync_catalogs before submitting creatives in this format.', + description="Catalog feeds this format requires for rendering. Formats that display product listings, store locators, inventory availability, or promotional pricing declare what catalog types must be synced to the account. Buyers ensure the required catalogs are synced via sync_catalogs before submitting creatives in this format.", min_length=1, ), ] = None delivery: Annotated[ dict[str, Any] | None, - Field(description='Delivery method specifications (e.g., hosted, VAST, third-party tags)'), + Field(description="Delivery method specifications (e.g., hosted, VAST, third-party tags)"), ] = None description: Annotated[ str | None, Field( - description='Plain text explanation of what this format does and what assets it requires' + description="Plain text explanation of what this format does and what assets it requires" ), ] = None example_url: Annotated[ AnyUrl | None, Field( - description='Optional URL to showcase page with examples and interactive demos of this format' + description="Optional URL to showcase page with examples and interactive demos of this format" ), ] = None format_card: Annotated[ FormatCard | None, Field( - description='Optional standard visual card (300x400px) for displaying this format in user interfaces. Can be rendered via preview_creative or pre-generated.' + description="Optional standard visual card (300x400px) for displaying this format in user interfaces. Can be rendered via preview_creative or pre-generated." ), ] = None format_card_detailed: Annotated[ FormatCardDetailed | None, Field( - description='Optional detailed card with carousel and full specifications. Provides rich format documentation similar to ad spec pages.' + description="Optional detailed card with carousel and full specifications. Provides rich format documentation similar to ad spec pages." ), ] = None format_id: Annotated[ format_id_1.FormatId, - Field(description='Structured format identifier with agent URL and format name'), + Field(description="Structured format identifier with agent URL and format name"), ] input_format_ids: Annotated[ list[format_id_1.FormatId] | None, Field( - description='Array of format IDs this format accepts as input creative manifests. When present, indicates this format can take existing creatives in these formats as input. Omit for formats that work from raw assets (images, text, etc.) rather than existing creatives.' + description="Array of format IDs this format accepts as input creative manifests. When present, indicates this format can take existing creatives in these formats as input. Omit for formats that work from raw assets (images, text, etc.) rather than existing creatives." ), ] = None - name: Annotated[str, Field(description='Human-readable format name')] + name: Annotated[str, Field(description="Human-readable format name")] output_format_ids: Annotated[ list[format_id_1.FormatId] | None, Field( - description='Array of format IDs that this format can produce as output. When present, indicates this format can build creatives in these output formats (e.g., a multi-publisher template format might produce standard display formats across many publishers). Omit for formats that produce a single fixed output (the format itself).' + description="Array of format IDs that this format can produce as output. When present, indicates this format can build creatives in these output formats (e.g., a multi-publisher template format might produce standard display formats across many publishers). Omit for formats that produce a single fixed output (the format itself)." ), ] = None renders: Annotated[ list[Renders | Renders1] | None, Field( - description='Specification of rendered pieces for this format. Most formats produce a single render. Companion ad formats (video + banner), adaptive formats, and multi-placement formats produce multiple renders. Each render specifies its role and dimensions.', + description="Specification of rendered pieces for this format. Most formats produce a single render. Companion ad formats (video + banner), adaptive formats, and multi-placement formats produce multiple renders. Each render specifies its role and dimensions.", min_length=1, ), ] = None reported_metrics: Annotated[ list[available_metric.AvailableMetric] | None, Field( - description='Metrics this format can produce in delivery reporting. Buyers receive the intersection of format reported_metrics and product available_metrics. If omitted, the format defers entirely to product-level metric declarations.', + description="Metrics this format can produce in delivery reporting. Buyers receive the intersection of format reported_metrics and product available_metrics. If omitted, the format defers entirely to product-level metric declarations.", min_length=1, ), ] = None supported_macros: Annotated[ list[universal_macro.UniversalMacro | str] | None, Field( - description='List of universal macros supported by this format (e.g., MEDIA_BUY_ID, CACHEBUSTER, DEVICE_ID). Used for validation and developer tooling. See docs/creative/universal-macros.mdx for full documentation.' + description="List of universal macros supported by this format (e.g., MEDIA_BUY_ID, CACHEBUSTER, DEVICE_ID). Used for validation and developer tooling. See docs/creative/universal-macros.mdx for full documentation." ), ] = None type: Annotated[ format_category.FormatCategory | None, Field( - description='DEPRECATED: High-level category for this format. Use the assets array to understand creative requirements instead - it provides precise information about what asset types are needed.' + description="DEPRECATED: High-level category for this format. Use the assets array to understand creative requirements instead - it provides precise information about what asset types are needed." ), ] = None diff --git a/src/adcp/types/generated_poc/core/format_id.py b/src/adcp/types/generated_poc/core/format_id.py index 9bec5b15..8710455e 100644 --- a/src/adcp/types/generated_poc/core/format_id.py +++ b/src/adcp/types/generated_poc/core/format_id.py @@ -12,7 +12,7 @@ class FormatId(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) agent_url: Annotated[ AnyUrl, @@ -23,14 +23,14 @@ class FormatId(AdCPBaseModel): duration_ms: Annotated[ float | None, Field( - description='Duration in milliseconds for time-based formats (video, audio). When specified, creates a parameterized format ID. Omit to reference a template format without parameters.', + description="Duration in milliseconds for time-based formats (video, audio). When specified, creates a parameterized format ID. Omit to reference a template format without parameters.", ge=1.0, ), ] = None height: Annotated[ int | None, Field( - description='Height in pixels for visual formats. When specified, width must also be specified. Both fields together create a parameterized format ID for dimension-specific variants.', + description="Height in pixels for visual formats. When specified, width must also be specified. Both fields together create a parameterized format ID for dimension-specific variants.", ge=1, ), ] = None @@ -38,13 +38,13 @@ class FormatId(AdCPBaseModel): str, Field( description="Format identifier within the agent's namespace (e.g., 'display_static', 'video_hosted', 'audio_standard'). When used alone, references a template format. When combined with dimension/duration fields, creates a parameterized format ID for a specific variant.", - pattern='^[a-zA-Z0-9_-]+$', + pattern="^[a-zA-Z0-9_-]+$", ), ] width: Annotated[ int | None, Field( - description='Width in pixels for visual formats. When specified, height must also be specified. Both fields together create a parameterized format ID for dimension-specific variants.', + description="Width in pixels for visual formats. When specified, height must also be specified. Both fields together create a parameterized format ID for dimension-specific variants.", ge=1, ), ] = None diff --git a/src/adcp/types/generated_poc/core/frequency_cap.py b/src/adcp/types/generated_poc/core/frequency_cap.py index 49a8c8ea..49faa9a9 100644 --- a/src/adcp/types/generated_poc/core/frequency_cap.py +++ b/src/adcp/types/generated_poc/core/frequency_cap.py @@ -12,8 +12,8 @@ class FrequencyCap(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) suppress_minutes: Annotated[ - float, Field(description='Minutes to suppress after impression', ge=0.0) + float, Field(description="Minutes to suppress after impression", ge=0.0) ] diff --git a/src/adcp/types/generated_poc/core/hotel_item.py b/src/adcp/types/generated_poc/core/hotel_item.py index 207bb970..628c205b 100644 --- a/src/adcp/types/generated_poc/core/hotel_item.py +++ b/src/adcp/types/generated_poc/core/hotel_item.py @@ -15,35 +15,35 @@ class Address(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) - city: Annotated[str | None, Field(description='City name.')] = None + city: Annotated[str | None, Field(description="City name.")] = None country: Annotated[ - str | None, Field(description='ISO 3166-1 alpha-2 country code.', pattern='^[A-Z]{2}$') + str | None, Field(description="ISO 3166-1 alpha-2 country code.", pattern="^[A-Z]{2}$") ] = None - postal_code: Annotated[str | None, Field(description='Postal or ZIP code.')] = None - region: Annotated[str | None, Field(description='State, province, or region.')] = None - street: Annotated[str | None, Field(description='Street address.')] = None + postal_code: Annotated[str | None, Field(description="Postal or ZIP code.")] = None + region: Annotated[str | None, Field(description="State, province, or region.")] = None + street: Annotated[str | None, Field(description="Street address.")] = None class Location(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) lat: Annotated[ - float, Field(description='Latitude in decimal degrees (WGS 84).', ge=-90.0, le=90.0) + float, Field(description="Latitude in decimal degrees (WGS 84).", ge=-90.0, le=90.0) ] lng: Annotated[ - float, Field(description='Longitude in decimal degrees (WGS 84).', ge=-180.0, le=180.0) + float, Field(description="Longitude in decimal degrees (WGS 84).", ge=-180.0, le=180.0) ] class HotelItem(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) address: Annotated[ - Address | None, Field(description='Structured address for display and geocoding.') + Address | None, Field(description="Structured address for display and geocoding.") ] = None amenities: Annotated[ list[str] | None, @@ -56,39 +56,39 @@ class HotelItem(AdCPBaseModel): str | None, Field( description="Standard check-in time in HH:MM format (e.g., '15:00').", - pattern='^[0-2][0-9]:[0-5][0-9]$', + pattern="^[0-2][0-9]:[0-5][0-9]$", ), ] = None check_out_time: Annotated[ str | None, Field( description="Standard check-out time in HH:MM format (e.g., '11:00').", - pattern='^[0-2][0-9]:[0-5][0-9]$', + pattern="^[0-2][0-9]:[0-5][0-9]$", ), ] = None description: Annotated[ - str | None, Field(description='Property description highlighting features and location.') + str | None, Field(description="Property description highlighting features and location.") ] = None ext: ext_1.ExtensionObject | None = None hotel_id: Annotated[ str, Field( - description='Unique identifier for this property. Used to match remarketing events and inventory feeds to the correct hotel.' + description="Unique identifier for this property. Used to match remarketing events and inventory feeds to the correct hotel." ), ] - image_url: Annotated[AnyUrl | None, Field(description='Primary property image URL.')] = None - location: Annotated[Location, Field(description='Geographic coordinates of the property.')] + image_url: Annotated[AnyUrl | None, Field(description="Primary property image URL.")] = None + location: Annotated[Location, Field(description="Geographic coordinates of the property.")] name: Annotated[ str, Field(description="Property name (e.g., 'Grand Hotel Amsterdam', 'Seaside Resort & Spa')."), ] - phone: Annotated[str | None, Field(description='Property phone number in E.164 format.')] = None + phone: Annotated[str | None, Field(description="Property phone number in E.164 format.")] = None price: Annotated[ price_1.Price | None, Field(description="Nightly rate or starting price. Use period 'night' for nightly rates."), ] = None star_rating: Annotated[ - int | None, Field(description='Official star rating (1–5).', ge=1, le=5) + int | None, Field(description="Official star rating (1–5).", ge=1, le=5) ] = None tags: Annotated[ list[str] | None, @@ -97,4 +97,4 @@ class HotelItem(AdCPBaseModel): min_length=1, ), ] = None - url: Annotated[AnyUrl | None, Field(description='Property landing page or booking URL.')] = None + url: Annotated[AnyUrl | None, Field(description="Property landing page or booking URL.")] = None diff --git a/src/adcp/types/generated_poc/core/identifier.py b/src/adcp/types/generated_poc/core/identifier.py index 886c4c8e..0ed6e87c 100644 --- a/src/adcp/types/generated_poc/core/identifier.py +++ b/src/adcp/types/generated_poc/core/identifier.py @@ -14,10 +14,10 @@ class Identifier(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) type: Annotated[ - identifier_types.PropertyIdentifierTypes, Field(description='Type of identifier') + identifier_types.PropertyIdentifierTypes, Field(description="Type of identifier") ] value: Annotated[ str, diff --git a/src/adcp/types/generated_poc/core/job_item.py b/src/adcp/types/generated_poc/core/job_item.py index 38dbbdbe..f5ba7974 100644 --- a/src/adcp/types/generated_poc/core/job_item.py +++ b/src/adcp/types/generated_poc/core/job_item.py @@ -15,56 +15,56 @@ class EmploymentType(Enum): - full_time = 'full_time' - part_time = 'part_time' - contract = 'contract' - temporary = 'temporary' - internship = 'internship' - freelance = 'freelance' + full_time = "full_time" + part_time = "part_time" + contract = "contract" + temporary = "temporary" + internship = "internship" + freelance = "freelance" class ExperienceLevel(Enum): - entry_level = 'entry_level' - mid_level = 'mid_level' - senior = 'senior' - director = 'director' - executive = 'executive' + entry_level = "entry_level" + mid_level = "mid_level" + senior = "senior" + director = "director" + executive = "executive" class Period(Enum): - hour = 'hour' - month = 'month' - year = 'year' + hour = "hour" + month = "month" + year = "year" class Salary(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) - currency: Annotated[str, Field(description='ISO 4217 currency code.', pattern='^[A-Z]{3}$')] - max: Annotated[float | None, Field(description='Maximum salary.', ge=0.0)] = None - min: Annotated[float | None, Field(description='Minimum salary.', ge=0.0)] = None - period: Annotated[Period, Field(description='Pay period.')] + currency: Annotated[str, Field(description="ISO 4217 currency code.", pattern="^[A-Z]{3}$")] + max: Annotated[float | None, Field(description="Maximum salary.", ge=0.0)] = None + min: Annotated[float | None, Field(description="Minimum salary.", ge=0.0)] = None + period: Annotated[Period, Field(description="Pay period.")] class JobItem(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - apply_url: Annotated[AnyUrl | None, Field(description='Direct application URL.')] = None - company_name: Annotated[str, Field(description='Hiring company or organization name.')] + apply_url: Annotated[AnyUrl | None, Field(description="Direct application URL.")] = None + company_name: Annotated[str, Field(description="Hiring company or organization name.")] date_posted: Annotated[ - date | None, Field(description='Date the job was posted (ISO 8601 date).') + date | None, Field(description="Date the job was posted (ISO 8601 date).") ] = None description: Annotated[ str, - Field(description='Full job description including responsibilities and qualifications.'), + Field(description="Full job description including responsibilities and qualifications."), ] - employment_type: Annotated[EmploymentType | None, Field(description='Type of employment.')] = ( + employment_type: Annotated[EmploymentType | None, Field(description="Type of employment.")] = ( None ) experience_level: Annotated[ - ExperienceLevel | None, Field(description='Required experience level.') + ExperienceLevel | None, Field(description="Required experience level.") ] = None ext: ext_1.ExtensionObject | None = None industries: Annotated[ @@ -81,7 +81,7 @@ class JobItem(AdCPBaseModel): min_length=1, ), ] = None - job_id: Annotated[str, Field(description='Unique identifier for this job posting.')] + job_id: Annotated[str, Field(description="Unique identifier for this job posting.")] location: Annotated[ str | None, Field( @@ -90,7 +90,7 @@ class JobItem(AdCPBaseModel): ] = None salary: Annotated[ Salary | None, - Field(description='Salary range. Specify min and/or max with currency and period.'), + Field(description="Salary range. Specify min and/or max with currency and period."), ] = None tags: Annotated[ list[str] | None, @@ -103,5 +103,5 @@ class JobItem(AdCPBaseModel): str, Field(description="Job title (e.g., 'Senior Software Engineer', 'Marketing Manager').") ] valid_through: Annotated[ - date | None, Field(description='Application deadline (ISO 8601 date).') + date | None, Field(description="Application deadline (ISO 8601 date).") ] = None diff --git a/src/adcp/types/generated_poc/core/mcp_webhook_payload.py b/src/adcp/types/generated_poc/core/mcp_webhook_payload.py index c1b7d472..7b6799fa 100644 --- a/src/adcp/types/generated_poc/core/mcp_webhook_payload.py +++ b/src/adcp/types/generated_poc/core/mcp_webhook_payload.py @@ -16,56 +16,56 @@ class McpWebhookPayload(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context_id: Annotated[ str | None, Field( - description='Session/conversation identifier. Use this to continue the conversation if input-required status needs clarification or additional parameters.' + description="Session/conversation identifier. Use this to continue the conversation if input-required status needs clarification or additional parameters." ), ] = None domain: Annotated[ adcp_domain.AdcpDomain | None, Field( - description='AdCP domain this task belongs to. Helps classify the operation type at a high level.' + description="AdCP domain this task belongs to. Helps classify the operation type at a high level." ), ] = None message: Annotated[ str | None, Field( - description='Human-readable summary of the current task state. Provides context about what happened and what action may be needed.' + description="Human-readable summary of the current task state. Provides context about what happened and what action may be needed." ), ] = None operation_id: Annotated[ str | None, Field( - description='Publisher-defined operation identifier correlating a sequence of task updates across webhooks.' + description="Publisher-defined operation identifier correlating a sequence of task updates across webhooks." ), ] = None result: Annotated[ async_response_data.AdcpAsyncResponseData | None, Field( - description='Task-specific payload matching the status. For completed/failed, contains the full task response. For working/input-required/submitted, contains status-specific data. This is the data layer that AdCP specs - same structure used in A2A status.message.parts[].data.' + description="Task-specific payload matching the status. For completed/failed, contains the full task response. For working/input-required/submitted, contains status-specific data. This is the data layer that AdCP specs - same structure used in A2A status.message.parts[].data." ), ] = None status: Annotated[ task_status.TaskStatus, Field( - description='Current task status. Webhooks are triggered for status changes after initial submission.' + description="Current task status. Webhooks are triggered for status changes after initial submission." ), ] task_id: Annotated[ str, Field( - description='Unique identifier for this task. Use this to correlate webhook notifications with the original task submission.' + description="Unique identifier for this task. Use this to correlate webhook notifications with the original task submission." ), ] task_type: Annotated[ task_type_1.TaskType, Field( - description='Type of AdCP operation that triggered this webhook. Enables webhook handlers to route to appropriate processing logic.' + description="Type of AdCP operation that triggered this webhook. Enables webhook handlers to route to appropriate processing logic." ), ] timestamp: Annotated[ - AwareDatetime, Field(description='ISO 8601 timestamp when this webhook was generated.') + AwareDatetime, Field(description="ISO 8601 timestamp when this webhook was generated.") ] diff --git a/src/adcp/types/generated_poc/core/measurement.py b/src/adcp/types/generated_poc/core/measurement.py index 8785c8d6..b1789045 100644 --- a/src/adcp/types/generated_poc/core/measurement.py +++ b/src/adcp/types/generated_poc/core/measurement.py @@ -12,29 +12,29 @@ class Measurement(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) attribution: Annotated[ str, Field( - description='Attribution methodology', - examples=['deterministic_purchase', 'probabilistic'], + description="Attribution methodology", + examples=["deterministic_purchase", "probabilistic"], ), ] reporting: Annotated[ str, Field( - description='Reporting frequency and format', - examples=['weekly_dashboard', 'real_time_api'], + description="Reporting frequency and format", + examples=["weekly_dashboard", "real_time_api"], ), ] type: Annotated[ str, Field( - description='Type of measurement', - examples=['incremental_sales_lift', 'brand_lift', 'foot_traffic'], + description="Type of measurement", + examples=["incremental_sales_lift", "brand_lift", "foot_traffic"], ), ] window: Annotated[ - str | None, Field(description='Attribution window', examples=['30_days', '7_days']) + str | None, Field(description="Attribution window", examples=["30_days", "7_days"]) ] = None diff --git a/src/adcp/types/generated_poc/core/media_buy.py b/src/adcp/types/generated_poc/core/media_buy.py index 19b3a03e..2cf5a02f 100644 --- a/src/adcp/types/generated_poc/core/media_buy.py +++ b/src/adcp/types/generated_poc/core/media_buy.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/media_buy.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:24:08+00:00 from __future__ import annotations @@ -17,31 +17,31 @@ class MediaBuy(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) account: Annotated[ - account_1.Account | None, Field(description='Account billed for this media buy') + account_1.Account | None, Field(description="Account billed for this media buy") ] = None - buyer_ref: Annotated[ - str | None, Field(description="Buyer's reference identifier for this media buy") - ] = None - campaign_ref: Annotated[ + buyer_campaign_ref: Annotated[ str | None, Field( description="Buyer's campaign reference label. Groups related operations under a single campaign for CRM and ad server correlation." ), ] = None - created_at: Annotated[AwareDatetime | None, Field(description='Creation timestamp')] = None + buyer_ref: Annotated[ + str | None, Field(description="Buyer's reference identifier for this media buy") + ] = None + created_at: Annotated[AwareDatetime | None, Field(description="Creation timestamp")] = None creative_deadline: Annotated[ - AwareDatetime | None, Field(description='ISO 8601 timestamp for creative upload deadline') + AwareDatetime | None, Field(description="ISO 8601 timestamp for creative upload deadline") ] = None ext: ext_1.ExtensionObject | None = None media_buy_id: Annotated[ str, Field(description="Publisher's unique identifier for the media buy") ] packages: Annotated[ - list[package.Package], Field(description='Array of packages within this media buy') + list[package.Package], Field(description="Array of packages within this media buy") ] status: media_buy_status.MediaBuyStatus - total_budget: Annotated[float, Field(description='Total budget amount', ge=0.0)] - updated_at: Annotated[AwareDatetime | None, Field(description='Last update timestamp')] = None + total_budget: Annotated[float, Field(description="Total budget amount", ge=0.0)] + updated_at: Annotated[AwareDatetime | None, Field(description="Last update timestamp")] = None diff --git a/src/adcp/types/generated_poc/core/media_buy_features.py b/src/adcp/types/generated_poc/core/media_buy_features.py index ce7e4049..ce1d853c 100644 --- a/src/adcp/types/generated_poc/core/media_buy_features.py +++ b/src/adcp/types/generated_poc/core/media_buy_features.py @@ -14,40 +14,40 @@ class MediaBuyFeatures(AdCPBaseModel): audience_targeting: Annotated[ bool | None, Field( - description='Supports sync_audiences task and audience_include/audience_exclude in targeting overlays for first-party CRM audience management' + description="Supports sync_audiences task and audience_include/audience_exclude in targeting overlays for first-party CRM audience management" ), ] = None catalog_management: Annotated[ bool | None, Field( - description='Supports sync_catalogs task for catalog feed management with platform review and approval' + description="Supports sync_catalogs task for catalog feed management with platform review and approval" ), ] = None content_standards: Annotated[ bool | None, Field( - description='Full support for content_standards configuration including sampling rates and category filtering' + description="Full support for content_standards configuration including sampling rates and category filtering" ), ] = None conversion_tracking: Annotated[ bool | None, Field( - description='Supports sync_event_sources and log_event tasks for conversion event tracking' + description="Supports sync_event_sources and log_event tasks for conversion event tracking" ), ] = None inline_creative_management: Annotated[ bool | None, - Field(description='Supports creatives provided inline in create_media_buy requests'), + Field(description="Supports creatives provided inline in create_media_buy requests"), ] = None property_list_filtering: Annotated[ bool | None, Field( - description='Honors property_list parameter in get_products to filter results to buyer-approved properties' + description="Honors property_list parameter in get_products to filter results to buyer-approved properties" ), ] = None sandbox: Annotated[ bool | None, Field( - description='Supports sandbox mode for operations without real platform calls or spend' + description="Supports sandbox mode for operations without real platform calls or spend" ), ] = None diff --git a/src/adcp/types/generated_poc/core/offering.py b/src/adcp/types/generated_poc/core/offering.py index 5957e79a..699ff8d1 100644 --- a/src/adcp/types/generated_poc/core/offering.py +++ b/src/adcp/types/generated_poc/core/offering.py @@ -15,38 +15,38 @@ class Country(RootModel[str]): - root: Annotated[str, Field(pattern='^[A-Z]{2}$')] + root: Annotated[str, Field(pattern="^[A-Z]{2}$")] class Metro(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) system: Annotated[ metro_system.MetroAreaSystem, Field(description="Metro area classification system (e.g., 'nielsen_dma', 'uk_itl2')"), ] - values: Annotated[list[str], Field(description='Metro codes within the system', min_length=1)] + values: Annotated[list[str], Field(description="Metro codes within the system", min_length=1)] class Region(RootModel[str]): - root: Annotated[str, Field(pattern='^[A-Z]{2}-[A-Z0-9]{1,3}$')] + root: Annotated[str, Field(pattern="^[A-Z]{2}-[A-Z0-9]{1,3}$")] class PostalArea(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) system: Annotated[ postal_system.PostalCodeSystem, Field(description="Postal code system (e.g., 'us_zip', 'de_plz')"), ] - values: Annotated[list[str], Field(description='Postal codes within the system', min_length=1)] + values: Annotated[list[str], Field(description="Postal codes within the system", min_length=1)] class GeoTargets(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) countries: Annotated[ list[Country] | None, @@ -58,14 +58,14 @@ class GeoTargets(AdCPBaseModel): metros: Annotated[ list[Metro] | None, Field( - description='Metro areas where this offering is relevant. Each entry specifies the classification system and target values.', + description="Metro areas where this offering is relevant. Each entry specifies the classification system and target values.", min_length=1, ), ] = None postal_areas: Annotated[ list[PostalArea] | None, Field( - description='Postal areas where this offering is relevant. Each entry specifies the postal system and target values.', + description="Postal areas where this offering is relevant. Each entry specifies the postal system and target values.", min_length=1, ), ] = None @@ -80,12 +80,12 @@ class GeoTargets(AdCPBaseModel): class Offering(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) assets: Annotated[ list[offering_asset_group.OfferingAssetGroup] | None, Field( - description='Structured asset groups for this offering. Each group carries a typed pool of creative assets (headlines, images, videos, etc.) identified by a group ID that matches format-level vocabulary.' + description="Structured asset groups for this offering. Each group carries a typed pool of creative assets (headlines, images, videos, etc.) identified by a group ID that matches format-level vocabulary." ), ] = None categories: Annotated[ @@ -113,7 +113,7 @@ class Offering(AdCPBaseModel): keywords: Annotated[ list[str] | None, Field( - description='Keywords for matching this offering to user intent. Hosts use these for retrieval/relevance scoring.' + description="Keywords for matching this offering to user intent. Hosts use these for retrieval/relevance scoring." ), ] = None landing_url: Annotated[ @@ -131,21 +131,21 @@ class Offering(AdCPBaseModel): offering_id: Annotated[ str, Field( - description='Unique identifier for this offering. Used by hosts to reference specific offerings in si_get_offering calls.' + description="Unique identifier for this offering. Used by hosts to reference specific offerings in si_get_offering calls." ), ] tagline: Annotated[ - str | None, Field(description='Short promotional tagline for the offering') + str | None, Field(description="Short promotional tagline for the offering") ] = None valid_from: Annotated[ AwareDatetime | None, Field( - description='When the offering becomes available. If not specified, offering is immediately available.' + description="When the offering becomes available. If not specified, offering is immediately available." ), ] = None valid_to: Annotated[ AwareDatetime | None, Field( - description='When the offering expires. If not specified, offering has no expiration.' + description="When the offering expires. If not specified, offering has no expiration." ), ] = None diff --git a/src/adcp/types/generated_poc/core/offering_asset_group.py b/src/adcp/types/generated_poc/core/offering_asset_group.py index 34e4f2b9..8da562a1 100644 --- a/src/adcp/types/generated_poc/core/offering_asset_group.py +++ b/src/adcp/types/generated_poc/core/offering_asset_group.py @@ -29,7 +29,7 @@ class OfferingAssetGroup(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) asset_group_id: Annotated[ str, @@ -39,7 +39,7 @@ class OfferingAssetGroup(AdCPBaseModel): ] asset_type: Annotated[ asset_content_type.AssetContentType, - Field(description='The content type of all items in this group.'), + Field(description="The content type of all items in this group."), ] ext: ext_1.ExtensionObject | None = None items: Annotated[ @@ -58,7 +58,7 @@ class OfferingAssetGroup(AdCPBaseModel): | webhook_asset.WebhookAsset ], Field( - description='The assets in this group. Each item should match the structure for the declared asset_type. Note: JSON Schema validation accepts any valid asset structure here; enforcement that items match asset_type is the responsibility of the consuming agent.', + description="The assets in this group. Each item should match the structure for the declared asset_type. Note: JSON Schema validation accepts any valid asset structure here; enforcement that items match asset_type is the responsibility of the consuming agent.", min_length=1, ), ] diff --git a/src/adcp/types/generated_poc/core/optimization_goal.py b/src/adcp/types/generated_poc/core/optimization_goal.py index 0fd5f867..382342a0 100644 --- a/src/adcp/types/generated_poc/core/optimization_goal.py +++ b/src/adcp/types/generated_poc/core/optimization_goal.py @@ -14,7 +14,7 @@ class AttributionWindow(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) click_through: Annotated[ str, Field(description="Click-through attribution window (e.g. '7d', '28d', '30d')") @@ -26,7 +26,7 @@ class AttributionWindow(AdCPBaseModel): class OptimizationGoal(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) attribution_window: Annotated[ AttributionWindow | None, @@ -37,24 +37,24 @@ class OptimizationGoal(AdCPBaseModel): event_source_id: Annotated[ str, Field( - description='Event source to optimize against (must be configured on this account via sync_event_sources)' + description="Event source to optimize against (must be configured on this account via sync_event_sources)" ), ] event_type: Annotated[ event_type_1.EventType, - Field(description='Event type to optimize for (e.g. purchase, lead)'), + Field(description="Event type to optimize for (e.g. purchase, lead)"), ] target_cpa: Annotated[ float | None, Field( - description='Target cost per acquisition in the buy currency. Mutually exclusive with target_roas.', + description="Target cost per acquisition in the buy currency. Mutually exclusive with target_roas.", gt=0.0, ), ] = None target_roas: Annotated[ float | None, Field( - description='Target return on ad spend (e.g. 4.0 = $4 conversion value per $1 spent). Mutually exclusive with target_cpa.', + description="Target return on ad spend (e.g. 4.0 = $4 conversion value per $1 spent). Mutually exclusive with target_cpa.", gt=0.0, ), ] = None diff --git a/src/adcp/types/generated_poc/core/package.py b/src/adcp/types/generated_poc/core/package.py index eaa85a18..d54e58c5 100644 --- a/src/adcp/types/generated_poc/core/package.py +++ b/src/adcp/types/generated_poc/core/package.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/package.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:24:08+00:00 from __future__ import annotations @@ -19,19 +19,19 @@ class Package(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) bid_price: Annotated[ float | None, Field( - description='Bid price for auction-based CPM pricing (present if using cpm-auction-option)', + description="Bid price for auction-based pricing. This is the exact bid/price to honor unless the selected pricing option has max_bid=true, in which case bid_price is the buyer's maximum willingness to pay (ceiling).", ge=0.0, ), ] = None budget: Annotated[ float | None, Field( - description='Budget allocation for this package in the currency specified by the pricing option', + description="Budget allocation for this package in the currency specified by the pricing option", ge=0.0, ), ] = None @@ -40,15 +40,15 @@ class Package(AdCPBaseModel): ] = None creative_assignments: Annotated[ list[creative_assignment.CreativeAssignment] | None, - Field(description='Creative assets assigned to this package'), + Field(description="Creative assets assigned to this package"), ] = None ext: ext_1.ExtensionObject | None = None format_ids_to_provide: Annotated[ list[format_id.FormatId] | None, - Field(description='Format IDs that creative assets will be provided for this package'), + Field(description="Format IDs that creative assets will be provided for this package"), ] = None impressions: Annotated[ - float | None, Field(description='Impression goal for this package', ge=0.0) + float | None, Field(description="Impression goal for this package", ge=0.0) ] = None optimization_goal: optimization_goal_1.OptimizationGoal | None = None pacing: pacing_1.Pacing | None = None @@ -56,7 +56,7 @@ class Package(AdCPBaseModel): paused: Annotated[ bool | None, Field( - description='Whether this package is paused by the buyer. Paused packages do not deliver impressions. Defaults to false.' + description="Whether this package is paused by the buyer. Paused packages do not deliver impressions. Defaults to false." ), ] = False pricing_option_id: Annotated[ @@ -66,6 +66,6 @@ class Package(AdCPBaseModel): ), ] = None product_id: Annotated[ - str | None, Field(description='ID of the product this package is based on') + str | None, Field(description="ID of the product this package is based on") ] = None targeting_overlay: targeting.TargetingOverlay | None = None diff --git a/src/adcp/types/generated_poc/core/pagination_request.py b/src/adcp/types/generated_poc/core/pagination_request.py index 73ad1870..8bbcb9f3 100644 --- a/src/adcp/types/generated_poc/core/pagination_request.py +++ b/src/adcp/types/generated_poc/core/pagination_request.py @@ -12,12 +12,12 @@ class PaginationRequest(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) cursor: Annotated[ str | None, - Field(description='Opaque cursor from a previous response to fetch the next page'), + Field(description="Opaque cursor from a previous response to fetch the next page"), ] = None max_results: Annotated[ - int | None, Field(description='Maximum number of items to return per page', ge=1, le=100) + int | None, Field(description="Maximum number of items to return per page", ge=1, le=100) ] = 50 diff --git a/src/adcp/types/generated_poc/core/pagination_response.py b/src/adcp/types/generated_poc/core/pagination_response.py index e3050df7..6a702702 100644 --- a/src/adcp/types/generated_poc/core/pagination_response.py +++ b/src/adcp/types/generated_poc/core/pagination_response.py @@ -12,21 +12,21 @@ class PaginationResponse(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) cursor: Annotated[ str | None, Field( - description='Opaque cursor to pass in the next request to fetch the next page. Only present when has_more is true.' + description="Opaque cursor to pass in the next request to fetch the next page. Only present when has_more is true." ), ] = None has_more: Annotated[ - bool, Field(description='Whether more results are available beyond this page') + bool, Field(description="Whether more results are available beyond this page") ] total_count: Annotated[ int | None, Field( - description='Total number of items matching the query across all pages. Optional because not all backends can efficiently compute this.', + description="Total number of items matching the query across all pages. Optional because not all backends can efficiently compute this.", ge=0, ), ] = None diff --git a/src/adcp/types/generated_poc/core/performance_feedback.py b/src/adcp/types/generated_poc/core/performance_feedback.py index 3aea3ed6..632e5183 100644 --- a/src/adcp/types/generated_poc/core/performance_feedback.py +++ b/src/adcp/types/generated_poc/core/performance_feedback.py @@ -16,63 +16,63 @@ class MeasurementPeriod(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) end: Annotated[ - AwareDatetime, Field(description='ISO 8601 end timestamp for measurement period') + AwareDatetime, Field(description="ISO 8601 end timestamp for measurement period") ] start: Annotated[ - AwareDatetime, Field(description='ISO 8601 start timestamp for measurement period') + AwareDatetime, Field(description="ISO 8601 start timestamp for measurement period") ] class Status(Enum): - accepted = 'accepted' - queued = 'queued' - applied = 'applied' - rejected = 'rejected' + accepted = "accepted" + queued = "queued" + applied = "applied" + rejected = "rejected" class PerformanceFeedback(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) applied_at: Annotated[ AwareDatetime | None, Field( - description='ISO 8601 timestamp when feedback was applied to optimization algorithms' + description="ISO 8601 timestamp when feedback was applied to optimization algorithms" ), ] = None creative_id: Annotated[ - str | None, Field(description='Specific creative asset (if feedback is creative-specific)') + str | None, Field(description="Specific creative asset (if feedback is creative-specific)") ] = None feedback_id: Annotated[ - str, Field(description='Unique identifier for this performance feedback submission') + str, Field(description="Unique identifier for this performance feedback submission") ] feedback_source: Annotated[ - feedback_source_1.FeedbackSource, Field(description='Source of the performance data') + feedback_source_1.FeedbackSource, Field(description="Source of the performance data") ] measurement_period: Annotated[ - MeasurementPeriod, Field(description='Time period for performance measurement') + MeasurementPeriod, Field(description="Time period for performance measurement") ] media_buy_id: Annotated[str, Field(description="Publisher's media buy identifier")] metric_type: Annotated[ - metric_type_1.MetricType, Field(description='The business metric being measured') + metric_type_1.MetricType, Field(description="The business metric being measured") ] package_id: Annotated[ str | None, Field( - description='Specific package within the media buy (if feedback is package-specific)' + description="Specific package within the media buy (if feedback is package-specific)" ), ] = None performance_index: Annotated[ float, Field( - description='Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)', + description="Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)", ge=0.0, ), ] - status: Annotated[Status, Field(description='Processing status of the performance feedback')] + status: Annotated[Status, Field(description="Processing status of the performance feedback")] submitted_at: Annotated[ - AwareDatetime, Field(description='ISO 8601 timestamp when feedback was submitted') + AwareDatetime, Field(description="ISO 8601 timestamp when feedback was submitted") ] diff --git a/src/adcp/types/generated_poc/core/placement.py b/src/adcp/types/generated_poc/core/placement.py index bbe73772..8f060fda 100644 --- a/src/adcp/types/generated_poc/core/placement.py +++ b/src/adcp/types/generated_poc/core/placement.py @@ -14,15 +14,15 @@ class Placement(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) description: Annotated[ - str | None, Field(description='Detailed description of where and how the placement appears') + str | None, Field(description="Detailed description of where and how the placement appears") ] = None format_ids: Annotated[ list[format_id.FormatId] | None, Field( - description='Format IDs supported by this specific placement. Can include: (1) concrete format_ids (fixed dimensions), (2) template format_ids without parameters (accepts any dimensions/duration), or (3) parameterized format_ids (specific dimension/duration constraints).', + description="Format IDs supported by this specific placement. Can include: (1) concrete format_ids (fixed dimensions), (2) template format_ids without parameters (accepts any dimensions/duration), or (3) parameterized format_ids (specific dimension/duration constraints).", min_length=1, ), ] = None @@ -33,5 +33,5 @@ class Placement(AdCPBaseModel): ), ] placement_id: Annotated[ - str, Field(description='Unique identifier for the placement within the product') + str, Field(description="Unique identifier for the placement within the product") ] diff --git a/src/adcp/types/generated_poc/core/price.py b/src/adcp/types/generated_poc/core/price.py index 0a89f3e5..710c71ba 100644 --- a/src/adcp/types/generated_poc/core/price.py +++ b/src/adcp/types/generated_poc/core/price.py @@ -12,23 +12,23 @@ class Period(Enum): - night = 'night' - month = 'month' - year = 'year' - one_time = 'one_time' + night = "night" + month = "month" + year = "year" + one_time = "one_time" class Price(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) amount: Annotated[ - float, Field(description='Monetary amount in the specified currency.', ge=0.0) + float, Field(description="Monetary amount in the specified currency.", ge=0.0) ] currency: Annotated[ str, Field( - description="ISO 4217 currency code (e.g., 'USD', 'EUR', 'GBP').", pattern='^[A-Z]{3}$' + description="ISO 4217 currency code (e.g., 'USD', 'EUR', 'GBP').", pattern="^[A-Z]{3}$" ), ] period: Annotated[ diff --git a/src/adcp/types/generated_poc/core/pricing_option.py b/src/adcp/types/generated_poc/core/pricing_option.py index 3925a9f5..c134b184 100644 --- a/src/adcp/types/generated_poc/core/pricing_option.py +++ b/src/adcp/types/generated_poc/core/pricing_option.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/pricing_option.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:24:08+00:00 from __future__ import annotations @@ -45,7 +45,7 @@ class PricingOption( | flat_rate_option.FlatRatePricingOption | time_option.TimeBasedPricingOption, Field( - description="A pricing model option offered by a publisher for a product. Discriminated by pricing_model field. If fixed_price is present, it's fixed pricing. If absent, it's auction-based (floor_price and price_guidance optional).", - title='Pricing Option', + description="A pricing model option offered by a publisher for a product. Discriminated by pricing_model field. If fixed_price is present, it's fixed pricing. If absent, it's auction-based (floor_price and price_guidance optional). Bid-based auction models may also include max_bid as a boolean signal to interpret bid_price as a buyer ceiling instead of an exact honored price.", + title="Pricing Option", ), ] diff --git a/src/adcp/types/generated_poc/core/product.py b/src/adcp/types/generated_poc/core/product.py index ae76aefc..608c2ad5 100644 --- a/src/adcp/types/generated_poc/core/product.py +++ b/src/adcp/types/generated_poc/core/product.py @@ -23,7 +23,7 @@ class MatchedGtin(RootModel[str]): - root: Annotated[str, Field(pattern='^[0-9]{8,14}$')] + root: Annotated[str, Field(pattern="^[0-9]{8,14}$")] class CatalogMatch(AdCPBaseModel): @@ -49,14 +49,14 @@ class CatalogMatch(AdCPBaseModel): class SupportedOptimizationStrategy(Enum): - maximize_conversions = 'maximize_conversions' - target_cpa = 'target_cpa' - target_roas = 'target_roas' + maximize_conversions = "maximize_conversions" + target_cpa = "target_cpa" + target_roas = "target_roas" class ConversionTracking(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) action_sources: Annotated[ list[action_source.ActionSource] | None, @@ -74,7 +74,7 @@ class ConversionTracking(AdCPBaseModel): supported_optimization_strategies: Annotated[ list[SupportedOptimizationStrategy] | None, Field( - description='Optimization strategies this product supports when an optimization_goal is set on a package', + description="Optimization strategies this product supports when an optimization_goal is set on a package", min_length=1, ), ] = None @@ -97,52 +97,52 @@ class DeliveryMeasurement(AdCPBaseModel): class ProductCard(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) format_id: Annotated[ format_id_1.FormatId, Field( - description='Creative format defining the card layout (typically product_card_standard)' + description="Creative format defining the card layout (typically product_card_standard)" ), ] manifest: Annotated[ dict[str, Any], - Field(description='Asset manifest for rendering the card, structure defined by the format'), + Field(description="Asset manifest for rendering the card, structure defined by the format"), ] class ProductCardDetailed(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) format_id: Annotated[ format_id_1.FormatId, Field( - description='Creative format defining the detailed card layout (typically product_card_detailed)' + description="Creative format defining the detailed card layout (typically product_card_detailed)" ), ] manifest: Annotated[ dict[str, Any], Field( - description='Asset manifest for rendering the detailed card, structure defined by the format' + description="Asset manifest for rendering the detailed card, structure defined by the format" ), ] class Product(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) brief_relevance: Annotated[ str | None, Field( - description='Explanation of why this product matches the brief (only included when brief is provided)' + description="Explanation of why this product matches the brief (only included when brief is provided)" ), ] = None catalog_match: Annotated[ CatalogMatch | None, Field( - description='When the buyer provides a catalog on get_products, indicates which catalog items are eligible for this product. Only present for products where catalog matching is relevant (e.g., sponsored product listings, job boards, hotel ads).' + description="When the buyer provides a catalog on get_products, indicates which catalog items are eligible for this product. Only present for products where catalog matching is relevant (e.g., sponsored product listings, job boards, hotel ads)." ), ] = None catalog_types: Annotated[ @@ -161,7 +161,7 @@ class Product(AdCPBaseModel): conversion_tracking: Annotated[ ConversionTracking | None, Field( - description='Conversion tracking for this product. Presence indicates the product supports conversion-optimized delivery. Seller-level capabilities (supported event types, UID types, attribution windows) are declared in get_adcp_capabilities.' + description="Conversion tracking for this product. Presence indicates the product supports conversion-optimized delivery. Seller-level capabilities (supported event types, UID types, attribution windows) are declared in get_adcp_capabilities." ), ] = None creative_policy: creative_policy_1.CreativePolicy | None = None @@ -174,56 +174,56 @@ class Product(AdCPBaseModel): delivery_measurement: Annotated[ DeliveryMeasurement, Field( - description='Measurement provider and methodology for delivery metrics. The buyer accepts the declared provider as the source of truth for the buy. REQUIRED for all products.' + description="Measurement provider and methodology for delivery metrics. The buyer accepts the declared provider as the source of truth for the buy. REQUIRED for all products." ), ] delivery_type: delivery_type_1.DeliveryType description: Annotated[ - str, Field(description='Detailed description of the product and its inventory') + str, Field(description="Detailed description of the product and its inventory") ] expires_at: Annotated[ - AwareDatetime | None, Field(description='Expiration timestamp for custom products') + AwareDatetime | None, Field(description="Expiration timestamp for custom products") ] = None ext: ext_1.ExtensionObject | None = None forecast: Annotated[ delivery_forecast.DeliveryForecast | None, Field( - description='Forecasted delivery metrics for this product. Gives buyers an estimate of expected performance before requesting a proposal.' + description="Forecasted delivery metrics for this product. Gives buyers an estimate of expected performance before requesting a proposal." ), ] = None format_ids: Annotated[ list[format_id_1.FormatId], Field( - description='Array of supported creative format IDs - structured format_id objects with agent_url and id' + description="Array of supported creative format IDs - structured format_id objects with agent_url and id" ), ] - is_custom: Annotated[bool | None, Field(description='Whether this is a custom product')] = None + is_custom: Annotated[bool | None, Field(description="Whether this is a custom product")] = None measurement: measurement_1.Measurement | None = None - name: Annotated[str, Field(description='Human-readable product name')] + name: Annotated[str, Field(description="Human-readable product name")] placements: Annotated[ list[placement.Placement] | None, Field( - description='Optional array of specific placements within this product. When provided, buyers can target specific placements when assigning creatives.', + description="Optional array of specific placements within this product. When provided, buyers can target specific placements when assigning creatives.", min_length=1, ), ] = None pricing_options: Annotated[ list[pricing_option.PricingOption], - Field(description='Available pricing models for this product', min_length=1), + Field(description="Available pricing models for this product", min_length=1), ] product_card: Annotated[ ProductCard | None, Field( - description='Optional standard visual card (300x400px) for displaying this product in user interfaces. Can be rendered via preview_creative or pre-generated.' + description="Optional standard visual card (300x400px) for displaying this product in user interfaces. Can be rendered via preview_creative or pre-generated." ), ] = None product_card_detailed: Annotated[ ProductCardDetailed | None, Field( - description='Optional detailed card with carousel and full specifications. Provides rich product presentation similar to media kit pages.' + description="Optional detailed card with carousel and full specifications. Provides rich product presentation similar to media kit pages." ), ] = None - product_id: Annotated[str, Field(description='Unique identifier for the product')] + product_id: Annotated[str, Field(description="Unique identifier for the product")] property_targeting_allowed: Annotated[ bool | None, Field( @@ -241,6 +241,6 @@ class Product(AdCPBaseModel): signal_targeting_allowed: Annotated[ bool | None, Field( - description='Whether buyers can filter this product to a subset of its data_provider_signals. When false (default), the product includes all listed signals as a bundle. When true, buyers can target specific signals.' + description="Whether buyers can filter this product to a subset of its data_provider_signals. When false (default), the product includes all listed signals as a bundle. When true, buyers can target specific signals." ), ] = False diff --git a/src/adcp/types/generated_poc/core/product_allocation.py b/src/adcp/types/generated_poc/core/product_allocation.py index d700d827..1b4f27c3 100644 --- a/src/adcp/types/generated_poc/core/product_allocation.py +++ b/src/adcp/types/generated_poc/core/product_allocation.py @@ -15,12 +15,12 @@ class ProductAllocation(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) allocation_percentage: Annotated[ float, Field( - description='Percentage of total budget allocated to this product (0-100)', + description="Percentage of total budget allocated to this product (0-100)", ge=0.0, le=100.0, ), @@ -28,29 +28,29 @@ class ProductAllocation(AdCPBaseModel): daypart_targets: Annotated[ list[daypart_target.DaypartTarget] | None, Field( - description='Recommended time windows for this allocation in spot-plan proposals.', + description="Recommended time windows for this allocation in spot-plan proposals.", min_length=1, ), ] = None ext: ext_1.ExtensionObject | None = None forecast: Annotated[ delivery_forecast.DeliveryForecast | None, - Field(description='Forecasted delivery metrics for this allocation'), + Field(description="Forecasted delivery metrics for this allocation"), ] = None pricing_option_id: Annotated[ str | None, Field(description="Recommended pricing option ID from the product's pricing_options array"), ] = None product_id: Annotated[ - str, Field(description='ID of the product (must reference a product in the products array)') + str, Field(description="ID of the product (must reference a product in the products array)") ] rationale: Annotated[ str | None, - Field(description='Explanation of why this product and allocation are recommended'), + Field(description="Explanation of why this product and allocation are recommended"), ] = None sequence: Annotated[ int | None, - Field(description='Optional ordering hint for multi-line-item plans (1-based)', ge=1), + Field(description="Optional ordering hint for multi-line-item plans (1-based)", ge=1), ] = None tags: Annotated[ list[str] | None, diff --git a/src/adcp/types/generated_poc/core/product_filters.py b/src/adcp/types/generated_poc/core/product_filters.py index 9de09c72..d22cb8c2 100644 --- a/src/adcp/types/generated_poc/core/product_filters.py +++ b/src/adcp/types/generated_poc/core/product_filters.py @@ -19,59 +19,59 @@ class BudgetRange(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) currency: Annotated[ str, Field( - description="ISO 4217 currency code (e.g., 'USD', 'EUR', 'GBP')", pattern='^[A-Z]{3}$' + description="ISO 4217 currency code (e.g., 'USD', 'EUR', 'GBP')", pattern="^[A-Z]{3}$" ), ] - max: Annotated[float | None, Field(description='Maximum budget amount', ge=0.0)] = None - min: Annotated[float, Field(description='Minimum budget amount', ge=0.0)] + max: Annotated[float | None, Field(description="Maximum budget amount", ge=0.0)] = None + min: Annotated[float, Field(description="Minimum budget amount", ge=0.0)] class BudgetRange1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) currency: Annotated[ str, Field( - description="ISO 4217 currency code (e.g., 'USD', 'EUR', 'GBP')", pattern='^[A-Z]{3}$' + description="ISO 4217 currency code (e.g., 'USD', 'EUR', 'GBP')", pattern="^[A-Z]{3}$" ), ] - max: Annotated[float, Field(description='Maximum budget amount', ge=0.0)] - min: Annotated[float | None, Field(description='Minimum budget amount', ge=0.0)] = None + max: Annotated[float, Field(description="Maximum budget amount", ge=0.0)] + min: Annotated[float | None, Field(description="Minimum budget amount", ge=0.0)] = None class Country(RootModel[str]): - root: Annotated[str, Field(pattern='^[A-Z]{2}$')] + root: Annotated[str, Field(pattern="^[A-Z]{2}$")] class Metro(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) code: Annotated[ str, Field(description="Metro code within the system (e.g., '501' for NYC DMA)") ] system: Annotated[ - metro_system.MetroAreaSystem, Field(description='Metro classification system') + metro_system.MetroAreaSystem, Field(description="Metro classification system") ] class Region(RootModel[str]): - root: Annotated[str, Field(pattern='^[A-Z]{2}-[A-Z0-9]+$')] + root: Annotated[str, Field(pattern="^[A-Z]{2}-[A-Z0-9]+$")] class RequiredGeoTargetingItem(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) level: Annotated[ geo_level.GeographicTargetingLevel, - Field(description='Geographic targeting level (country, region, metro, postal_area)'), + Field(description="Geographic targeting level (country, region, metro, postal_area)"), ] system: Annotated[ str | None, @@ -83,11 +83,11 @@ class RequiredGeoTargetingItem(AdCPBaseModel): class ProductFilters(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) budget_range: Annotated[ BudgetRange | BudgetRange1 | None, - Field(description='Budget range to filter appropriate products'), + Field(description="Budget range to filter appropriate products"), ] = None channels: Annotated[ list[channels_1.MediaChannel] | None, @@ -107,33 +107,33 @@ class ProductFilters(AdCPBaseModel): end_date: Annotated[ date | None, Field( - description='Campaign end date (ISO 8601 date format: YYYY-MM-DD) for availability checks' + description="Campaign end date (ISO 8601 date format: YYYY-MM-DD) for availability checks" ), ] = None format_ids: Annotated[ list[format_id.FormatId] | None, - Field(description='Filter by specific format IDs', min_length=1), + Field(description="Filter by specific format IDs", min_length=1), ] = None format_types: Annotated[ list[format_category.FormatCategory] | None, - Field(description='Filter by format types', min_length=1), + Field(description="Filter by format types", min_length=1), ] = None is_fixed_price: Annotated[ bool | None, Field( - description='Filter by pricing availability: true = products offering fixed pricing (at least one option with fixed_price), false = products offering auction pricing (at least one option without fixed_price). Products with both fixed and auction options match both true and false.' + description="Filter by pricing availability: true = products offering fixed pricing (at least one option with fixed_price), false = products offering auction pricing (at least one option without fixed_price). Products with both fixed and auction options match both true and false." ), ] = None metros: Annotated[ list[Metro] | None, Field( - description='Filter by metro coverage for locally-bound inventory (radio, DOOH, local TV). Use when products have DMA/metro-specific coverage. For digital inventory where products have broad coverage, use required_geo_targeting instead to filter by seller capability.', + description="Filter by metro coverage for locally-bound inventory (radio, DOOH, local TV). Use when products have DMA/metro-specific coverage. For digital inventory where products have broad coverage, use required_geo_targeting instead to filter by seller capability.", min_length=1, ), ] = None min_exposures: Annotated[ int | None, - Field(description='Minimum exposures/impressions needed for measurement validity', ge=1), + Field(description="Minimum exposures/impressions needed for measurement validity", ge=1), ] = None regions: Annotated[ list[Region] | None, @@ -145,35 +145,35 @@ class ProductFilters(AdCPBaseModel): required_axe_integrations: Annotated[ list[AnyUrl] | None, Field( - description='Filter to products executable through specific agentic ad exchanges. URLs are canonical identifiers.' + description="Filter to products executable through specific agentic ad exchanges. URLs are canonical identifiers." ), ] = None required_features: Annotated[ media_buy_features.MediaBuyFeatures | None, Field( - description='Filter to products from sellers supporting specific protocol features. Only features set to true are used for filtering.' + description="Filter to products from sellers supporting specific protocol features. Only features set to true are used for filtering." ), ] = None required_geo_targeting: Annotated[ list[RequiredGeoTargetingItem] | None, Field( - description='Filter to products from sellers supporting specific geo targeting capabilities. Each entry specifies a targeting level (country, region, metro, postal_area) and optionally a system for levels that have multiple classification systems.', + description="Filter to products from sellers supporting specific geo targeting capabilities. Each entry specifies a targeting level (country, region, metro, postal_area) and optionally a system for levels that have multiple classification systems.", min_length=1, ), ] = None signal_targeting: Annotated[ list[signal_targeting_1.SignalTargeting] | None, Field( - description='Filter to products supporting specific signals from data provider catalogs. Products must have the requested signals in their data_provider_signals and signal_targeting_allowed must be true (or all signals requested).', + description="Filter to products supporting specific signals from data provider catalogs. Products must have the requested signals in their data_provider_signals and signal_targeting_allowed must be true (or all signals requested).", min_length=1, ), ] = None standard_formats_only: Annotated[ - bool | None, Field(description='Only return products accepting IAB standard formats') + bool | None, Field(description="Only return products accepting IAB standard formats") ] = None start_date: Annotated[ date | None, Field( - description='Campaign start date (ISO 8601 date format: YYYY-MM-DD) for availability checks' + description="Campaign start date (ISO 8601 date format: YYYY-MM-DD) for availability checks" ), ] = None diff --git a/src/adcp/types/generated_poc/core/property.py b/src/adcp/types/generated_poc/core/property.py index 6c1f7ebc..29826221 100644 --- a/src/adcp/types/generated_poc/core/property.py +++ b/src/adcp/types/generated_poc/core/property.py @@ -17,11 +17,11 @@ class Identifier(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) type: Annotated[ identifier_types.PropertyIdentifierTypes, - Field(description='Type of identifier for this property'), + Field(description="Type of identifier for this property"), ] value: Annotated[ str, @@ -33,25 +33,25 @@ class Identifier(AdCPBaseModel): class Property(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) identifiers: Annotated[ - list[Identifier], Field(description='Array of identifiers for this property', min_length=1) + list[Identifier], Field(description="Array of identifiers for this property", min_length=1) ] - name: Annotated[str, Field(description='Human-readable property name')] + name: Annotated[str, Field(description="Human-readable property name")] property_id: Annotated[ property_id_1.PropertyId | None, Field( - description='Unique identifier for this property (optional). Enables referencing properties by ID instead of repeating full objects.' + description="Unique identifier for this property (optional). Enables referencing properties by ID instead of repeating full objects." ), ] = None property_type: Annotated[ - property_type_1.PropertyType, Field(description='Type of advertising property') + property_type_1.PropertyType, Field(description="Type of advertising property") ] publisher_domain: Annotated[ str | None, Field( - description='Domain where adagents.json should be checked for authorization validation. Optional in adagents.json (file location implies domain).' + description="Domain where adagents.json should be checked for authorization validation. Optional in adagents.json (file location implies domain)." ), ] = None supported_channels: Annotated[ @@ -63,6 +63,6 @@ class Property(AdCPBaseModel): tags: Annotated[ list[property_tag.PropertyTag] | None, Field( - description='Tags for categorization and grouping (e.g., network membership, content categories)' + description="Tags for categorization and grouping (e.g., network membership, content categories)" ), ] = None diff --git a/src/adcp/types/generated_poc/core/property_id.py b/src/adcp/types/generated_poc/core/property_id.py index 436323ba..4c7a6ca2 100644 --- a/src/adcp/types/generated_poc/core/property_id.py +++ b/src/adcp/types/generated_poc/core/property_id.py @@ -13,9 +13,9 @@ class PropertyId(RootModel[str]): root: Annotated[ str, Field( - description='Identifier for a publisher property. Must be lowercase alphanumeric with underscores only.', - examples=['cnn_ctv_app', 'homepage', 'mobile_ios', 'instagram'], - pattern='^[a-z0-9_]+$', - title='Property ID', + description="Identifier for a publisher property. Must be lowercase alphanumeric with underscores only.", + examples=["cnn_ctv_app", "homepage", "mobile_ios", "instagram"], + pattern="^[a-z0-9_]+$", + title="Property ID", ), ] diff --git a/src/adcp/types/generated_poc/core/property_list_ref.py b/src/adcp/types/generated_poc/core/property_list_ref.py index 0b719cf8..71f29b66 100644 --- a/src/adcp/types/generated_poc/core/property_list_ref.py +++ b/src/adcp/types/generated_poc/core/property_list_ref.py @@ -12,15 +12,15 @@ class PropertyListReference(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) - agent_url: Annotated[AnyUrl, Field(description='URL of the agent managing the property list')] + agent_url: Annotated[AnyUrl, Field(description="URL of the agent managing the property list")] auth_token: Annotated[ str | None, Field( - description='JWT or other authorization token for accessing the list. Optional if the list is public or caller has implicit access.' + description="JWT or other authorization token for accessing the list. Optional if the list is public or caller has implicit access." ), ] = None list_id: Annotated[ - str, Field(description='Identifier for the property list within the agent', min_length=1) + str, Field(description="Identifier for the property list within the agent", min_length=1) ] diff --git a/src/adcp/types/generated_poc/core/property_tag.py b/src/adcp/types/generated_poc/core/property_tag.py index 3c881c40..0c0876cb 100644 --- a/src/adcp/types/generated_poc/core/property_tag.py +++ b/src/adcp/types/generated_poc/core/property_tag.py @@ -13,9 +13,9 @@ class PropertyTag(RootModel[str]): root: Annotated[ str, Field( - description='Tag for categorizing publisher properties. Must be lowercase alphanumeric with underscores only.', - examples=['ctv', 'premium', 'news', 'sports', 'meta_network', 'social_media'], - pattern='^[a-z0-9_]+$', - title='Property Tag', + description="Tag for categorizing publisher properties. Must be lowercase alphanumeric with underscores only.", + examples=["ctv", "premium", "news", "sports", "meta_network", "social_media"], + pattern="^[a-z0-9_]+$", + title="Property Tag", ), ] diff --git a/src/adcp/types/generated_poc/core/proposal.py b/src/adcp/types/generated_poc/core/proposal.py index 08e67d72..42fe8882 100644 --- a/src/adcp/types/generated_poc/core/proposal.py +++ b/src/adcp/types/generated_poc/core/proposal.py @@ -16,56 +16,56 @@ class TotalBudgetGuidance(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - currency: Annotated[str | None, Field(description='ISO 4217 currency code')] = None + currency: Annotated[str | None, Field(description="ISO 4217 currency code")] = None max: Annotated[ - float | None, Field(description='Maximum budget before diminishing returns', ge=0.0) + float | None, Field(description="Maximum budget before diminishing returns", ge=0.0) ] = None - min: Annotated[float | None, Field(description='Minimum recommended budget', ge=0.0)] = None + min: Annotated[float | None, Field(description="Minimum recommended budget", ge=0.0)] = None recommended: Annotated[ - float | None, Field(description='Recommended budget for optimal performance', ge=0.0) + float | None, Field(description="Recommended budget for optimal performance", ge=0.0) ] = None class Proposal(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) allocations: Annotated[ list[product_allocation.ProductAllocation], Field( - description='Budget allocations across products. Allocation percentages MUST sum to 100. Publishers are responsible for ensuring the sum equals 100; buyers SHOULD validate this before execution.', + description="Budget allocations across products. Allocation percentages MUST sum to 100. Publishers are responsible for ensuring the sum equals 100; buyers SHOULD validate this before execution.", min_length=1, ), ] brief_alignment: Annotated[ str | None, - Field(description='Explanation of how this proposal aligns with the campaign brief'), + Field(description="Explanation of how this proposal aligns with the campaign brief"), ] = None description: Annotated[ - str | None, Field(description='Explanation of the proposal strategy and what it achieves') + str | None, Field(description="Explanation of the proposal strategy and what it achieves") ] = None expires_at: Annotated[ AwareDatetime | None, Field( - description='When this proposal expires and can no longer be executed. After expiration, referenced products or pricing may no longer be available.' + description="When this proposal expires and can no longer be executed. After expiration, referenced products or pricing may no longer be available." ), ] = None ext: ext_1.ExtensionObject | None = None forecast: Annotated[ delivery_forecast.DeliveryForecast | None, Field( - description='Aggregate forecasted delivery metrics for the entire proposal. When both proposal-level and allocation-level forecasts are present, the proposal-level forecast is authoritative for total delivery estimation.' + description="Aggregate forecasted delivery metrics for the entire proposal. When both proposal-level and allocation-level forecasts are present, the proposal-level forecast is authoritative for total delivery estimation." ), ] = None - name: Annotated[str, Field(description='Human-readable name for this media plan proposal')] + name: Annotated[str, Field(description="Human-readable name for this media plan proposal")] proposal_id: Annotated[ str, Field( - description='Unique identifier for this proposal. Used to execute it via create_media_buy.' + description="Unique identifier for this proposal. Used to execute it via create_media_buy." ), ] total_budget_guidance: Annotated[ - TotalBudgetGuidance | None, Field(description='Optional budget guidance for this proposal') + TotalBudgetGuidance | None, Field(description="Optional budget guidance for this proposal") ] = None diff --git a/src/adcp/types/generated_poc/core/protocol_envelope.py b/src/adcp/types/generated_poc/core/protocol_envelope.py index 82f2d23d..dae3b333 100644 --- a/src/adcp/types/generated_poc/core/protocol_envelope.py +++ b/src/adcp/types/generated_poc/core/protocol_envelope.py @@ -15,47 +15,47 @@ class ProtocolEnvelope(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context_id: Annotated[ str | None, Field( - description='Session/conversation identifier for tracking related operations across multiple task invocations. Managed by the protocol layer to maintain conversational context.' + description="Session/conversation identifier for tracking related operations across multiple task invocations. Managed by the protocol layer to maintain conversational context." ), ] = None message: Annotated[ str | None, Field( - description='Human-readable summary of the task result. Provides natural language explanation of what happened, suitable for display to end users or for AI agent comprehension. Generated by the protocol layer based on the task response.' + description="Human-readable summary of the task result. Provides natural language explanation of what happened, suitable for display to end users or for AI agent comprehension. Generated by the protocol layer based on the task response." ), ] = None payload: Annotated[ dict[str, Any], Field( - description='The actual task-specific response data. This is the content defined in individual task response schemas (e.g., get-products-response.json, create-media-buy-response.json). Contains only domain-specific data without protocol-level fields.' + description="The actual task-specific response data. This is the content defined in individual task response schemas (e.g., get-products-response.json, create-media-buy-response.json). Contains only domain-specific data without protocol-level fields." ), ] push_notification_config: Annotated[ push_notification_config_1.PushNotificationConfig | None, Field( - description='Push notification configuration for async task updates (A2A and REST protocols). Echoed from the request to confirm webhook settings. Specifies URL, authentication scheme (Bearer or HMAC-SHA256), and credentials. MCP uses progress notifications instead of webhooks.' + description="Push notification configuration for async task updates (A2A and REST protocols). Echoed from the request to confirm webhook settings. Specifies URL, authentication scheme (Bearer or HMAC-SHA256), and credentials. MCP uses progress notifications instead of webhooks." ), ] = None status: Annotated[ task_status.TaskStatus, Field( - description='Current task execution state. Indicates whether the task is completed, in progress (working), submitted for async processing, failed, or requires user input. Managed by the protocol layer.' + description="Current task execution state. Indicates whether the task is completed, in progress (working), submitted for async processing, failed, or requires user input. Managed by the protocol layer." ), ] task_id: Annotated[ str | None, Field( - description='Unique identifier for tracking asynchronous operations. Present when a task requires extended processing time. Used to query task status and retrieve results when complete.' + description="Unique identifier for tracking asynchronous operations. Present when a task requires extended processing time. Used to query task status and retrieve results when complete." ), ] = None timestamp: Annotated[ AwareDatetime | None, Field( - description='ISO 8601 timestamp when the response was generated. Useful for debugging, logging, cache validation, and tracking async operation progress.' + description="ISO 8601 timestamp when the response was generated. Useful for debugging, logging, cache validation, and tracking async operation progress." ), ] = None diff --git a/src/adcp/types/generated_poc/core/publisher_property_selector.py b/src/adcp/types/generated_poc/core/publisher_property_selector.py index dcfb4f85..fd3a18b7 100644 --- a/src/adcp/types/generated_poc/core/publisher_property_selector.py +++ b/src/adcp/types/generated_poc/core/publisher_property_selector.py @@ -14,26 +14,26 @@ class PublisherPropertySelector1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) publisher_domain: Annotated[ str, Field( description="Domain where publisher's adagents.json is hosted (e.g., 'cnn.com')", - pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', + pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", ), ] selection_type: Annotated[ - Literal['all'], + Literal["all"], Field( - description='Discriminator indicating all properties from this publisher are included' + description="Discriminator indicating all properties from this publisher are included" ), ] class PublisherPropertySelector2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) property_ids: Annotated[ list[property_id.PropertyId], @@ -43,18 +43,18 @@ class PublisherPropertySelector2(AdCPBaseModel): str, Field( description="Domain where publisher's adagents.json is hosted (e.g., 'cnn.com')", - pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', + pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", ), ] selection_type: Annotated[ - Literal['by_id'], - Field(description='Discriminator indicating selection by specific property IDs'), + Literal["by_id"], + Field(description="Discriminator indicating selection by specific property IDs"), ] class PublisherPropertySelector3(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) property_tags: Annotated[ list[property_tag.PropertyTag], @@ -67,11 +67,11 @@ class PublisherPropertySelector3(AdCPBaseModel): str, Field( description="Domain where publisher's adagents.json is hosted (e.g., 'cnn.com')", - pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', + pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", ), ] selection_type: Annotated[ - Literal['by_tag'], Field(description='Discriminator indicating selection by property tags') + Literal["by_tag"], Field(description="Discriminator indicating selection by property tags") ] @@ -82,7 +82,7 @@ class PublisherPropertySelector( PublisherPropertySelector1 | PublisherPropertySelector2 | PublisherPropertySelector3, Field( description="Selects properties from a publisher's adagents.json. Used for both product definitions and agent authorization. Supports three selection patterns: all properties, specific IDs, or by tags.", - discriminator='selection_type', - title='Publisher Property Selector', + discriminator="selection_type", + title="Publisher Property Selector", ), ] diff --git a/src/adcp/types/generated_poc/core/push_notification_config.py b/src/adcp/types/generated_poc/core/push_notification_config.py index e841698c..a6f61635 100644 --- a/src/adcp/types/generated_poc/core/push_notification_config.py +++ b/src/adcp/types/generated_poc/core/push_notification_config.py @@ -14,12 +14,12 @@ class Authentication(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) credentials: Annotated[ str, Field( - description='Credentials for authentication. For Bearer: token sent in Authorization header. For HMAC-SHA256: shared secret used to generate signature. Minimum 32 characters. Exchanged out-of-band during onboarding.', + description="Credentials for authentication. For Bearer: token sent in Authorization header. For HMAC-SHA256: shared secret used to generate signature. Minimum 32 characters. Exchanged out-of-band during onboarding.", min_length=32, ), ] @@ -36,13 +36,13 @@ class Authentication(AdCPBaseModel): class PushNotificationConfig(AdCPBaseModel): authentication: Annotated[ Authentication, - Field(description='Authentication configuration for webhook delivery (A2A-compatible)'), + Field(description="Authentication configuration for webhook delivery (A2A-compatible)"), ] token: Annotated[ str | None, Field( - description='Optional client-provided token for webhook validation. Echoed back in webhook payload to validate request authenticity.', + description="Optional client-provided token for webhook validation. Echoed back in webhook payload to validate request authenticity.", min_length=16, ), ] = None - url: Annotated[AnyUrl, Field(description='Webhook endpoint URL for task status notifications')] + url: Annotated[AnyUrl, Field(description="Webhook endpoint URL for task status notifications")] diff --git a/src/adcp/types/generated_poc/core/real_estate_item.py b/src/adcp/types/generated_poc/core/real_estate_item.py index 8876ebac..3abd6133 100644 --- a/src/adcp/types/generated_poc/core/real_estate_item.py +++ b/src/adcp/types/generated_poc/core/real_estate_item.py @@ -16,85 +16,85 @@ class Address(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) - city: Annotated[str | None, Field(description='City name.')] = None + city: Annotated[str | None, Field(description="City name.")] = None country: Annotated[ - str | None, Field(description='ISO 3166-1 alpha-2 country code.', pattern='^[A-Z]{2}$') + str | None, Field(description="ISO 3166-1 alpha-2 country code.", pattern="^[A-Z]{2}$") ] = None - postal_code: Annotated[str | None, Field(description='Postal or ZIP code.')] = None - region: Annotated[str | None, Field(description='State, province, or region.')] = None - street: Annotated[str | None, Field(description='Street address.')] = None + postal_code: Annotated[str | None, Field(description="Postal or ZIP code.")] = None + region: Annotated[str | None, Field(description="State, province, or region.")] = None + street: Annotated[str | None, Field(description="Street address.")] = None class Unit(Enum): - sqft = 'sqft' - sqm = 'sqm' + sqft = "sqft" + sqm = "sqm" class Area(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) - unit: Annotated[Unit, Field(description='Area unit.')] - value: Annotated[float, Field(description='Area value.', ge=0.0)] + unit: Annotated[Unit, Field(description="Area unit.")] + value: Annotated[float, Field(description="Area value.", ge=0.0)] class ListingType(Enum): - for_sale = 'for_sale' - for_rent = 'for_rent' + for_sale = "for_sale" + for_rent = "for_rent" class Location(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) lat: Annotated[ - float, Field(description='Latitude in decimal degrees (WGS 84).', ge=-90.0, le=90.0) + float, Field(description="Latitude in decimal degrees (WGS 84).", ge=-90.0, le=90.0) ] lng: Annotated[ - float, Field(description='Longitude in decimal degrees (WGS 84).', ge=-180.0, le=180.0) + float, Field(description="Longitude in decimal degrees (WGS 84).", ge=-180.0, le=180.0) ] class PropertyType(Enum): - house = 'house' - apartment = 'apartment' - condo = 'condo' - townhouse = 'townhouse' - land = 'land' - commercial = 'commercial' + house = "house" + apartment = "apartment" + condo = "condo" + townhouse = "townhouse" + land = "land" + commercial = "commercial" class RealEstateItem(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - address: Annotated[Address, Field(description='Property address.')] - area: Annotated[Area | None, Field(description='Property size.')] = None + address: Annotated[Address, Field(description="Property address.")] + area: Annotated[Area | None, Field(description="Property size.")] = None bathrooms: Annotated[ float | None, Field( - description='Number of bathrooms (e.g., 2.5 for two full and one half bath).', ge=0.0 + description="Number of bathrooms (e.g., 2.5 for two full and one half bath).", ge=0.0 ), ] = None - bedrooms: Annotated[int | None, Field(description='Number of bedrooms.', ge=0)] = None - description: Annotated[str | None, Field(description='Property description.')] = None + bedrooms: Annotated[int | None, Field(description="Number of bedrooms.", ge=0)] = None + description: Annotated[str | None, Field(description="Property description.")] = None ext: ext_1.ExtensionObject | None = None - image_url: Annotated[AnyUrl | None, Field(description='Primary property image URL.')] = None - listing_id: Annotated[str, Field(description='Unique identifier for this property listing.')] + image_url: Annotated[AnyUrl | None, Field(description="Primary property image URL.")] = None + listing_id: Annotated[str, Field(description="Unique identifier for this property listing.")] listing_type: Annotated[ - ListingType | None, Field(description='Whether the property is for sale or rent.') + ListingType | None, Field(description="Whether the property is for sale or rent.") ] = None location: Annotated[ - Location | None, Field(description='Geographic coordinates of the property.') + Location | None, Field(description="Geographic coordinates of the property.") ] = None - neighborhood: Annotated[str | None, Field(description='Neighborhood or area name.')] = None + neighborhood: Annotated[str | None, Field(description="Neighborhood or area name.")] = None price: Annotated[ price_1.Price | None, Field(description="Property price or rental rate. Use period 'month' for rentals."), ] = None - property_type: Annotated[PropertyType | None, Field(description='Type of property.')] = None + property_type: Annotated[PropertyType | None, Field(description="Type of property.")] = None tags: Annotated[ list[str] | None, Field( @@ -105,5 +105,5 @@ class RealEstateItem(AdCPBaseModel): title: Annotated[ str, Field(description="Listing title (e.g., 'Spacious 3BR Apartment in Jordaan').") ] - url: Annotated[AnyUrl | None, Field(description='Listing page URL.')] = None - year_built: Annotated[int | None, Field(description='Year the property was built.')] = None + url: Annotated[AnyUrl | None, Field(description="Listing page URL.")] = None + year_built: Annotated[int | None, Field(description="Year the property was built.")] = None diff --git a/src/adcp/types/generated_poc/core/reference_asset.py b/src/adcp/types/generated_poc/core/reference_asset.py index 37cd8651..c46ac28c 100644 --- a/src/adcp/types/generated_poc/core/reference_asset.py +++ b/src/adcp/types/generated_poc/core/reference_asset.py @@ -12,30 +12,30 @@ class Role(Enum): - style_reference = 'style_reference' - product_shot = 'product_shot' - mood_board = 'mood_board' - example_creative = 'example_creative' - logo = 'logo' - strategy_doc = 'strategy_doc' + style_reference = "style_reference" + product_shot = "product_shot" + mood_board = "mood_board" + example_creative = "example_creative" + logo = "logo" + strategy_doc = "strategy_doc" class ReferenceAsset(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) description: Annotated[ str | None, Field( - description='Human-readable description of the asset and how it should inform creative generation' + description="Human-readable description of the asset and how it should inform creative generation" ), ] = None role: Annotated[ Role, Field( - description='How the creative agent should use this asset. style_reference: match the visual style; product_shot: include this product; mood_board: overall look and feel; example_creative: example of a similar execution; logo: logo to use; strategy_doc: strategy or planning document for context' + description="How the creative agent should use this asset. style_reference: match the visual style; product_shot: include this product; mood_board: overall look and feel; example_creative: example of a similar execution; logo: logo to use; strategy_doc: strategy or planning document for context" ), ] url: Annotated[ - AnyUrl, Field(description='URL to the reference asset (image, video, or document)') + AnyUrl, Field(description="URL to the reference asset (image, video, or document)") ] diff --git a/src/adcp/types/generated_poc/core/reporting_capabilities.py b/src/adcp/types/generated_poc/core/reporting_capabilities.py index 353d4c24..cb833716 100644 --- a/src/adcp/types/generated_poc/core/reporting_capabilities.py +++ b/src/adcp/types/generated_poc/core/reporting_capabilities.py @@ -14,27 +14,27 @@ class DateRangeSupport(Enum): - date_range = 'date_range' - lifetime_only = 'lifetime_only' + date_range = "date_range" + lifetime_only = "lifetime_only" class ReportingCapabilities(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) available_metrics: Annotated[ list[available_metric.AvailableMetric], Field( description="Metrics available in reporting. Impressions and spend are always implicitly included. When a creative format declares reported_metrics, buyers receive the intersection of these product-level metrics and the format's reported_metrics.", examples=[ - ['impressions', 'spend', 'clicks', 'video_completions'], - ['impressions', 'spend', 'conversions'], + ["impressions", "spend", "clicks", "video_completions"], + ["impressions", "spend", "conversions"], ], ), ] available_reporting_frequencies: Annotated[ list[reporting_frequency.ReportingFrequency], - Field(description='Supported reporting frequency options', min_length=1), + Field(description="Supported reporting frequency options", min_length=1), ] date_range_support: Annotated[ DateRangeSupport, @@ -45,7 +45,7 @@ class ReportingCapabilities(AdCPBaseModel): expected_delay_minutes: Annotated[ int, Field( - description='Expected delay in minutes before reporting data becomes available (e.g., 240 for 4-hour delay)', + description="Expected delay in minutes before reporting data becomes available (e.g., 240 for 4-hour delay)", examples=[240, 300, 1440], ge=0, ), @@ -53,17 +53,17 @@ class ReportingCapabilities(AdCPBaseModel): supports_creative_breakdown: Annotated[ bool | None, Field( - description='Whether this product supports creative-level metric breakdowns in delivery reporting (by_creative within by_package)' + description="Whether this product supports creative-level metric breakdowns in delivery reporting (by_creative within by_package)" ), ] = None supports_webhooks: Annotated[ bool, - Field(description='Whether this product supports webhook-based reporting notifications'), + Field(description="Whether this product supports webhook-based reporting notifications"), ] timezone: Annotated[ str, Field( description="Timezone for reporting periods. Use 'UTC' or IANA timezone (e.g., 'America/New_York'). Critical for daily/monthly frequency alignment.", - examples=['UTC', 'America/New_York', 'Europe/London', 'America/Los_Angeles'], + examples=["UTC", "America/New_York", "Europe/London", "America/Los_Angeles"], ), ] diff --git a/src/adcp/types/generated_poc/core/reporting_webhook.py b/src/adcp/types/generated_poc/core/reporting_webhook.py index 135190db..83b131eb 100644 --- a/src/adcp/types/generated_poc/core/reporting_webhook.py +++ b/src/adcp/types/generated_poc/core/reporting_webhook.py @@ -15,12 +15,12 @@ class Authentication(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) credentials: Annotated[ str, Field( - description='Credentials for authentication. For Bearer: token sent in Authorization header. For HMAC-SHA256: shared secret used to generate signature. Minimum 32 characters. Exchanged out-of-band during onboarding.', + description="Credentials for authentication. For Bearer: token sent in Authorization header. For HMAC-SHA256: shared secret used to generate signature. Minimum 32 characters. Exchanged out-of-band during onboarding.", min_length=32, ), ] @@ -35,23 +35,23 @@ class Authentication(AdCPBaseModel): class ReportingFrequency(Enum): - hourly = 'hourly' - daily = 'daily' - monthly = 'monthly' + hourly = "hourly" + daily = "daily" + monthly = "monthly" class ReportingWebhook(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) authentication: Annotated[ Authentication, - Field(description='Authentication configuration for webhook delivery (A2A-compatible)'), + Field(description="Authentication configuration for webhook delivery (A2A-compatible)"), ] reporting_frequency: Annotated[ ReportingFrequency, Field( - description='Frequency for automated reporting delivery. Must be supported by all products in the media buy.' + description="Frequency for automated reporting delivery. Must be supported by all products in the media buy." ), ] requested_metrics: Annotated[ @@ -63,8 +63,8 @@ class ReportingWebhook(AdCPBaseModel): token: Annotated[ str | None, Field( - description='Optional client-provided token for webhook validation. Echoed back in webhook payload to validate request authenticity.', + description="Optional client-provided token for webhook validation. Echoed back in webhook payload to validate request authenticity.", min_length=16, ), ] = None - url: Annotated[AnyUrl, Field(description='Webhook endpoint URL for reporting notifications')] + url: Annotated[AnyUrl, Field(description="Webhook endpoint URL for reporting notifications")] diff --git a/src/adcp/types/generated_poc/core/requirements/asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/asset_requirements.py index 855435f2..03fbd731 100644 --- a/src/adcp/types/generated_poc/core/requirements/asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/asset_requirements.py @@ -54,7 +54,7 @@ class AssetRequirements( | url_asset_requirements.UrlAssetRequirements | webhook_asset_requirements.WebhookAssetRequirements, Field( - description='Technical requirements for creative assets. The applicable schema is determined by the sibling asset_type field.', - title='Asset Requirements', + description="Technical requirements for creative assets. The applicable schema is determined by the sibling asset_type field.", + title="Asset Requirements", ), ] diff --git a/src/adcp/types/generated_poc/core/requirements/audio_asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/audio_asset_requirements.py index 64d2bdf4..c17ff459 100644 --- a/src/adcp/types/generated_poc/core/requirements/audio_asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/audio_asset_requirements.py @@ -12,16 +12,16 @@ class Channel(Enum): - mono = 'mono' - stereo = 'stereo' + mono = "mono" + stereo = "stereo" class Format(Enum): - mp3 = 'mp3' - aac = 'aac' - wav = 'wav' - ogg = 'ogg' - flac = 'flac' + mp3 = "mp3" + aac = "aac" + wav = "wav" + ogg = "ogg" + flac = "flac" class SampleRate(RootModel[int]): @@ -30,28 +30,28 @@ class SampleRate(RootModel[int]): class AudioAssetRequirements(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) channels: Annotated[ - list[Channel] | None, Field(description='Accepted audio channel configurations') + list[Channel] | None, Field(description="Accepted audio channel configurations") ] = None - formats: Annotated[list[Format] | None, Field(description='Accepted audio file formats')] = None + formats: Annotated[list[Format] | None, Field(description="Accepted audio file formats")] = None max_bitrate_kbps: Annotated[ - int | None, Field(description='Maximum audio bitrate in kilobits per second', ge=1) + int | None, Field(description="Maximum audio bitrate in kilobits per second", ge=1) ] = None max_duration_ms: Annotated[ - int | None, Field(description='Maximum duration in milliseconds', ge=1) + int | None, Field(description="Maximum duration in milliseconds", ge=1) ] = None max_file_size_kb: Annotated[ - int | None, Field(description='Maximum file size in kilobytes', ge=1) + int | None, Field(description="Maximum file size in kilobytes", ge=1) ] = None min_bitrate_kbps: Annotated[ - int | None, Field(description='Minimum audio bitrate in kilobits per second', ge=1) + int | None, Field(description="Minimum audio bitrate in kilobits per second", ge=1) ] = None min_duration_ms: Annotated[ - int | None, Field(description='Minimum duration in milliseconds', ge=1) + int | None, Field(description="Minimum duration in milliseconds", ge=1) ] = None sample_rates: Annotated[ list[SampleRate] | None, - Field(description='Accepted sample rates in Hz (e.g., [44100, 48000])'), + Field(description="Accepted sample rates in Hz (e.g., [44100, 48000])"), ] = None diff --git a/src/adcp/types/generated_poc/core/requirements/catalog_requirements.py b/src/adcp/types/generated_poc/core/requirements/catalog_requirements.py index dcdba9d5..fcc24b3b 100644 --- a/src/adcp/types/generated_poc/core/requirements/catalog_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/catalog_requirements.py @@ -16,23 +16,23 @@ class CatalogRequirements(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) catalog_type: Annotated[ catalog_type_1.CatalogType, - Field(description='The catalog type this requirement applies to'), + Field(description="The catalog type this requirement applies to"), ] feed_formats: Annotated[ list[feed_format.FeedFormat] | None, Field( - description='Accepted feed formats for this catalog type. When specified, the synced catalog must use one of these formats. When omitted, any format is accepted.', + description="Accepted feed formats for this catalog type. When specified, the synced catalog must use one of these formats. When omitted, any format is accepted.", min_length=1, ), ] = None min_items: Annotated[ int | None, Field( - description='Minimum number of items the catalog must contain for this format to render properly (e.g., a carousel might require at least 3 products)', + description="Minimum number of items the catalog must contain for this format to render properly (e.g., a carousel might require at least 3 products)", ge=1, ), ] = None @@ -46,7 +46,7 @@ class CatalogRequirements(AdCPBaseModel): required: Annotated[ bool | None, Field( - description='Whether this catalog type must be present. When true, creatives using this format must reference a synced catalog of this type.' + description="Whether this catalog type must be present. When true, creatives using this format must reference a synced catalog of this type." ), ] = True required_fields: Annotated[ diff --git a/src/adcp/types/generated_poc/core/requirements/css_asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/css_asset_requirements.py index 489e3353..9b600f82 100644 --- a/src/adcp/types/generated_poc/core/requirements/css_asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/css_asset_requirements.py @@ -12,8 +12,8 @@ class CssAssetRequirements(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) max_file_size_kb: Annotated[ - int | None, Field(description='Maximum file size in kilobytes', ge=1) + int | None, Field(description="Maximum file size in kilobytes", ge=1) ] = None diff --git a/src/adcp/types/generated_poc/core/requirements/daast_asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/daast_asset_requirements.py index 2875b496..258ab798 100644 --- a/src/adcp/types/generated_poc/core/requirements/daast_asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/daast_asset_requirements.py @@ -12,9 +12,9 @@ class DaastAssetRequirements(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) daast_version: Annotated[ - Literal['1.0'] | None, - Field(description='Required DAAST version. DAAST 1.0 is the current IAB standard.'), + Literal["1.0"] | None, + Field(description="Required DAAST version. DAAST 1.0 is the current IAB standard."), ] = None diff --git a/src/adcp/types/generated_poc/core/requirements/html_asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/html_asset_requirements.py index b9b82df4..bf52c052 100644 --- a/src/adcp/types/generated_poc/core/requirements/html_asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/html_asset_requirements.py @@ -12,30 +12,30 @@ class Sandbox(Enum): - none = 'none' - iframe = 'iframe' - safeframe = 'safeframe' - fencedframe = 'fencedframe' + none = "none" + iframe = "iframe" + safeframe = "safeframe" + fencedframe = "fencedframe" class HtmlAssetRequirements(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) allowed_external_domains: Annotated[ list[str] | None, Field( - description='List of domains the HTML creative may reference for external resources. Only applicable when external_resources_allowed is true.' + description="List of domains the HTML creative may reference for external resources. Only applicable when external_resources_allowed is true." ), ] = None external_resources_allowed: Annotated[ bool | None, Field( - description='Whether the HTML creative can load external resources (scripts, images, fonts, etc.). When false, all resources must be inlined or bundled.' + description="Whether the HTML creative can load external resources (scripts, images, fonts, etc.). When false, all resources must be inlined or bundled." ), ] = None max_file_size_kb: Annotated[ - int | None, Field(description='Maximum file size in kilobytes for the HTML asset', ge=1) + int | None, Field(description="Maximum file size in kilobytes for the HTML asset", ge=1) ] = None sandbox: Annotated[ Sandbox | None, diff --git a/src/adcp/types/generated_poc/core/requirements/image_asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/image_asset_requirements.py index 45cf2b59..0f532f63 100644 --- a/src/adcp/types/generated_poc/core/requirements/image_asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/image_asset_requirements.py @@ -12,71 +12,71 @@ class Format(Enum): - jpg = 'jpg' - jpeg = 'jpeg' - png = 'png' - gif = 'gif' - webp = 'webp' - svg = 'svg' - avif = 'avif' + jpg = "jpg" + jpeg = "jpeg" + png = "png" + gif = "gif" + webp = "webp" + svg = "svg" + avif = "avif" class ImageAssetRequirements(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) animation_allowed: Annotated[ - bool | None, Field(description='Whether animated images (GIF, animated WebP) are accepted') + bool | None, Field(description="Whether animated images (GIF, animated WebP) are accepted") ] = None aspect_ratio: Annotated[ str | None, Field( description="Required aspect ratio (e.g., '16:9', '1:1', '1.91:1')", - pattern='^\\d+(\\.\\d+)?:\\d+(\\.\\d+)?$', + pattern="^\\d+(\\.\\d+)?:\\d+(\\.\\d+)?$", ), ] = None - formats: Annotated[list[Format] | None, Field(description='Accepted image file formats')] = None + formats: Annotated[list[Format] | None, Field(description="Accepted image file formats")] = None max_animation_duration_ms: Annotated[ int | None, Field( - description='Maximum animation duration in milliseconds (if animation_allowed is true)', + description="Maximum animation duration in milliseconds (if animation_allowed is true)", ge=0, ), ] = None max_file_size_kb: Annotated[ - int | None, Field(description='Maximum file size in kilobytes', ge=1) + int | None, Field(description="Maximum file size in kilobytes", ge=1) ] = None max_height: Annotated[ int | None, Field( - description='Maximum height in pixels. For exact dimensions, set min_height = max_height.', + description="Maximum height in pixels. For exact dimensions, set min_height = max_height.", ge=1, ), ] = None max_width: Annotated[ int | None, Field( - description='Maximum width in pixels. For exact dimensions, set min_width = max_width.', + description="Maximum width in pixels. For exact dimensions, set min_width = max_width.", ge=1, ), ] = None min_height: Annotated[ int | None, Field( - description='Minimum height in pixels. For exact dimensions, set min_height = max_height.', + description="Minimum height in pixels. For exact dimensions, set min_height = max_height.", ge=1, ), ] = None min_width: Annotated[ int | None, Field( - description='Minimum width in pixels. For exact dimensions, set min_width = max_width.', + description="Minimum width in pixels. For exact dimensions, set min_width = max_width.", ge=1, ), ] = None transparency_required: Annotated[ bool | None, Field( - description='Whether the image must support transparency (requires PNG, WebP, or GIF)' + description="Whether the image must support transparency (requires PNG, WebP, or GIF)" ), ] = None diff --git a/src/adcp/types/generated_poc/core/requirements/javascript_asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/javascript_asset_requirements.py index 891f126a..c57284b7 100644 --- a/src/adcp/types/generated_poc/core/requirements/javascript_asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/javascript_asset_requirements.py @@ -12,28 +12,28 @@ class ModuleType(Enum): - script = 'script' - module = 'module' - iife = 'iife' + script = "script" + module = "module" + iife = "iife" class JavascriptAssetRequirements(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) allowed_external_domains: Annotated[ list[str] | None, Field( - description='List of domains the JavaScript may reference for external resources. Only applicable when external_resources_allowed is true.' + description="List of domains the JavaScript may reference for external resources. Only applicable when external_resources_allowed is true." ), ] = None external_resources_allowed: Annotated[ bool | None, - Field(description='Whether the JavaScript can load external resources dynamically'), + Field(description="Whether the JavaScript can load external resources dynamically"), ] = None max_file_size_kb: Annotated[ int | None, - Field(description='Maximum file size in kilobytes for the JavaScript asset', ge=1), + Field(description="Maximum file size in kilobytes for the JavaScript asset", ge=1), ] = None module_type: Annotated[ ModuleType | None, @@ -42,5 +42,5 @@ class JavascriptAssetRequirements(AdCPBaseModel): ), ] = None strict_mode_required: Annotated[ - bool | None, Field(description='Whether the JavaScript must use strict mode') + bool | None, Field(description="Whether the JavaScript must use strict mode") ] = None diff --git a/src/adcp/types/generated_poc/core/requirements/markdown_asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/markdown_asset_requirements.py index 8e05b8b7..006d3281 100644 --- a/src/adcp/types/generated_poc/core/requirements/markdown_asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/markdown_asset_requirements.py @@ -12,6 +12,6 @@ class MarkdownAssetRequirements(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - max_length: Annotated[int | None, Field(description='Maximum character length', ge=1)] = None + max_length: Annotated[int | None, Field(description="Maximum character length", ge=1)] = None diff --git a/src/adcp/types/generated_poc/core/requirements/offering_asset_constraint.py b/src/adcp/types/generated_poc/core/requirements/offering_asset_constraint.py index d6a4a08e..9a56edbc 100644 --- a/src/adcp/types/generated_poc/core/requirements/offering_asset_constraint.py +++ b/src/adcp/types/generated_poc/core/requirements/offering_asset_constraint.py @@ -16,7 +16,7 @@ class OfferingAssetConstraint(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) asset_group_id: Annotated[ str, @@ -27,23 +27,23 @@ class OfferingAssetConstraint(AdCPBaseModel): asset_requirements: Annotated[ asset_requirements_1.AssetRequirements | None, Field( - description='Technical requirements for each item in this group (e.g., max_length for text, min_width/aspect_ratio for images). Applies uniformly to all items in the group.' + description="Technical requirements for each item in this group (e.g., max_length for text, min_width/aspect_ratio for images). Applies uniformly to all items in the group." ), ] = None asset_type: Annotated[ asset_content_type.AssetContentType, - Field(description='The expected content type for this group.'), + Field(description="The expected content type for this group."), ] ext: ext_1.ExtensionObject | None = None max_count: Annotated[ - int | None, Field(description='Maximum number of items allowed in this group.', ge=1) + int | None, Field(description="Maximum number of items allowed in this group.", ge=1) ] = None min_count: Annotated[ - int | None, Field(description='Minimum number of items required in this group.', ge=1) + int | None, Field(description="Minimum number of items required in this group.", ge=1) ] = None required: Annotated[ bool | None, Field( - description='Whether this asset group must be present in each offering. Defaults to true.' + description="Whether this asset group must be present in each offering. Defaults to true." ), ] = True diff --git a/src/adcp/types/generated_poc/core/requirements/text_asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/text_asset_requirements.py index 7df878c8..c13c9c88 100644 --- a/src/adcp/types/generated_poc/core/requirements/text_asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/text_asset_requirements.py @@ -12,7 +12,7 @@ class TextAssetRequirements(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) character_pattern: Annotated[ str | None, @@ -20,10 +20,10 @@ class TextAssetRequirements(AdCPBaseModel): description="Regex pattern defining allowed characters (e.g., '^[a-zA-Z0-9 .,!?-]+$')" ), ] = None - max_length: Annotated[int | None, Field(description='Maximum character length', ge=1)] = None - max_lines: Annotated[int | None, Field(description='Maximum number of lines', ge=1)] = None - min_length: Annotated[int | None, Field(description='Minimum character length', ge=0)] = None - min_lines: Annotated[int | None, Field(description='Minimum number of lines', ge=1)] = None + max_length: Annotated[int | None, Field(description="Maximum character length", ge=1)] = None + max_lines: Annotated[int | None, Field(description="Maximum number of lines", ge=1)] = None + min_length: Annotated[int | None, Field(description="Minimum character length", ge=0)] = None + min_lines: Annotated[int | None, Field(description="Minimum number of lines", ge=1)] = None prohibited_terms: Annotated[ - list[str] | None, Field(description='List of prohibited words or phrases') + list[str] | None, Field(description="List of prohibited words or phrases") ] = None diff --git a/src/adcp/types/generated_poc/core/requirements/url_asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/url_asset_requirements.py index 178aa870..61157c7a 100644 --- a/src/adcp/types/generated_poc/core/requirements/url_asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/url_asset_requirements.py @@ -12,40 +12,40 @@ class Protocol(Enum): - https = 'https' - http = 'http' + https = "https" + http = "http" class Role(Enum): - clickthrough = 'clickthrough' - landing_page = 'landing_page' - impression_tracker = 'impression_tracker' - click_tracker = 'click_tracker' - viewability_tracker = 'viewability_tracker' - third_party_tracker = 'third_party_tracker' + clickthrough = "clickthrough" + landing_page = "landing_page" + impression_tracker = "impression_tracker" + click_tracker = "click_tracker" + viewability_tracker = "viewability_tracker" + third_party_tracker = "third_party_tracker" class UrlAssetRequirements(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) allowed_domains: Annotated[ - list[str] | None, Field(description='List of allowed domains for the URL') + list[str] | None, Field(description="List of allowed domains for the URL") ] = None macro_support: Annotated[ bool | None, - Field(description='Whether the URL supports macro substitution (e.g., ${CACHEBUSTER})'), + Field(description="Whether the URL supports macro substitution (e.g., ${CACHEBUSTER})"), ] = None max_length: Annotated[ - int | None, Field(description='Maximum URL length in characters', ge=1) + int | None, Field(description="Maximum URL length in characters", ge=1) ] = None protocols: Annotated[ list[Protocol] | None, - Field(description='Allowed URL protocols. HTTPS is recommended for all ad URLs.'), + Field(description="Allowed URL protocols. HTTPS is recommended for all ad URLs."), ] = None role: Annotated[ Role | None, Field( - description='Standard role for this URL asset. Use this to constrain which purposes are valid for this URL slot. Complements asset_role (which is a human-readable label) by providing a machine-readable enum.' + description="Standard role for this URL asset. Use this to constrain which purposes are valid for this URL slot. Complements asset_role (which is a human-readable label) by providing a machine-readable enum." ), ] = None diff --git a/src/adcp/types/generated_poc/core/requirements/vast_asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/vast_asset_requirements.py index bffcd8e6..f0075299 100644 --- a/src/adcp/types/generated_poc/core/requirements/vast_asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/vast_asset_requirements.py @@ -12,15 +12,15 @@ class VastVersion(Enum): - field_2_0 = '2.0' - field_3_0 = '3.0' - field_4_0 = '4.0' - field_4_1 = '4.1' - field_4_2 = '4.2' + field_2_0 = "2.0" + field_3_0 = "3.0" + field_4_0 = "4.0" + field_4_1 = "4.1" + field_4_2 = "4.2" class VastAssetRequirements(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - vast_version: Annotated[VastVersion | None, Field(description='Required VAST version')] = None + vast_version: Annotated[VastVersion | None, Field(description="Required VAST version")] = None diff --git a/src/adcp/types/generated_poc/core/requirements/video_asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/video_asset_requirements.py index d2cb22d5..c9196468 100644 --- a/src/adcp/types/generated_poc/core/requirements/video_asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/video_asset_requirements.py @@ -12,19 +12,19 @@ class Codec(Enum): - h264 = 'h264' - h265 = 'h265' - vp8 = 'vp8' - vp9 = 'vp9' - av1 = 'av1' + h264 = "h264" + h265 = "h265" + vp8 = "vp8" + vp9 = "vp9" + av1 = "av1" class Container(Enum): - mp4 = 'mp4' - webm = 'webm' - mov = 'mov' - avi = 'avi' - mkv = 'mkv' + mp4 = "mp4" + webm = "webm" + mov = "mov" + avi = "avi" + mkv = "mkv" class FrameRate(RootModel[float]): @@ -33,39 +33,39 @@ class FrameRate(RootModel[float]): class VideoAssetRequirements(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) aspect_ratio: Annotated[ str | None, - Field(description="Required aspect ratio (e.g., '16:9', '9:16')", pattern='^\\d+:\\d+$'), + Field(description="Required aspect ratio (e.g., '16:9', '9:16')", pattern="^\\d+:\\d+$"), ] = None audio_required: Annotated[ - bool | None, Field(description='Whether the video must include an audio track') + bool | None, Field(description="Whether the video must include an audio track") ] = None - codecs: Annotated[list[Codec] | None, Field(description='Accepted video codecs')] = None + codecs: Annotated[list[Codec] | None, Field(description="Accepted video codecs")] = None containers: Annotated[ - list[Container] | None, Field(description='Accepted video container formats') + list[Container] | None, Field(description="Accepted video container formats") ] = None frame_rates: Annotated[ list[FrameRate] | None, - Field(description='Accepted frame rates in frames per second (e.g., [24, 30, 60])'), + Field(description="Accepted frame rates in frames per second (e.g., [24, 30, 60])"), ] = None max_bitrate_kbps: Annotated[ - int | None, Field(description='Maximum video bitrate in kilobits per second', ge=1) + int | None, Field(description="Maximum video bitrate in kilobits per second", ge=1) ] = None max_duration_ms: Annotated[ - int | None, Field(description='Maximum duration in milliseconds', ge=1) + int | None, Field(description="Maximum duration in milliseconds", ge=1) ] = None max_file_size_kb: Annotated[ - int | None, Field(description='Maximum file size in kilobytes', ge=1) + int | None, Field(description="Maximum file size in kilobytes", ge=1) ] = None - max_height: Annotated[int | None, Field(description='Maximum height in pixels', ge=1)] = None - max_width: Annotated[int | None, Field(description='Maximum width in pixels', ge=1)] = None + max_height: Annotated[int | None, Field(description="Maximum height in pixels", ge=1)] = None + max_width: Annotated[int | None, Field(description="Maximum width in pixels", ge=1)] = None min_bitrate_kbps: Annotated[ - int | None, Field(description='Minimum video bitrate in kilobits per second', ge=1) + int | None, Field(description="Minimum video bitrate in kilobits per second", ge=1) ] = None min_duration_ms: Annotated[ - int | None, Field(description='Minimum duration in milliseconds', ge=1) + int | None, Field(description="Minimum duration in milliseconds", ge=1) ] = None - min_height: Annotated[int | None, Field(description='Minimum height in pixels', ge=1)] = None - min_width: Annotated[int | None, Field(description='Minimum width in pixels', ge=1)] = None + min_height: Annotated[int | None, Field(description="Minimum height in pixels", ge=1)] = None + min_width: Annotated[int | None, Field(description="Minimum width in pixels", ge=1)] = None diff --git a/src/adcp/types/generated_poc/core/requirements/webhook_asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/webhook_asset_requirements.py index 2dde8eb9..670e09a7 100644 --- a/src/adcp/types/generated_poc/core/requirements/webhook_asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/webhook_asset_requirements.py @@ -12,12 +12,12 @@ class Method(Enum): - GET = 'GET' - POST = 'POST' + GET = "GET" + POST = "POST" class WebhookAssetRequirements(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - methods: Annotated[list[Method] | None, Field(description='Allowed HTTP methods')] = None + methods: Annotated[list[Method] | None, Field(description="Allowed HTTP methods")] = None diff --git a/src/adcp/types/generated_poc/core/response.py b/src/adcp/types/generated_poc/core/response.py index 0be58290..03178f38 100644 --- a/src/adcp/types/generated_poc/core/response.py +++ b/src/adcp/types/generated_poc/core/response.py @@ -12,13 +12,13 @@ class ProtocolResponse(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - context_id: Annotated[str | None, Field(description='Session continuity identifier')] = None + context_id: Annotated[str | None, Field(description="Session continuity identifier")] = None data: Annotated[ Any | None, Field( - description='AdCP task-specific response data (see individual task response schemas)' + description="AdCP task-specific response data (see individual task response schemas)" ), ] = None - message: Annotated[str, Field(description='Human-readable summary')] + message: Annotated[str, Field(description="Human-readable summary")] diff --git a/src/adcp/types/generated_poc/core/signal_definition.py b/src/adcp/types/generated_poc/core/signal_definition.py index 6a13203d..3b9024a7 100644 --- a/src/adcp/types/generated_poc/core/signal_definition.py +++ b/src/adcp/types/generated_poc/core/signal_definition.py @@ -13,25 +13,25 @@ class Range(AdCPBaseModel): - max: Annotated[float, Field(description='Maximum value')] - min: Annotated[float, Field(description='Minimum value')] + max: Annotated[float, Field(description="Maximum value")] + min: Annotated[float, Field(description="Minimum value")] unit: Annotated[ str | None, Field(description="Unit of measurement (e.g., 'score', 'dollars', 'years')") ] = None class Tag(RootModel[str]): - root: Annotated[str, Field(pattern='^[a-z0-9_-]+$')] + root: Annotated[str, Field(pattern="^[a-z0-9_-]+$")] class SignalDefinition(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) allowed_values: Annotated[ list[str] | None, Field( - description='For categorical signals, the valid values users can be assigned', + description="For categorical signals, the valid values users can be assigned", min_length=1, ), ] = None @@ -46,18 +46,18 @@ class SignalDefinition(AdCPBaseModel): str, Field( description="Signal identifier within this data provider's catalog", - pattern='^[a-zA-Z0-9_-]+$', + pattern="^[a-zA-Z0-9_-]+$", ), ] name: Annotated[ - str, Field(description='Human-readable signal name', max_length=255, min_length=1) + str, Field(description="Human-readable signal name", max_length=255, min_length=1) ] range: Annotated[ - Range | None, Field(description='For numeric signals, the valid value range') + Range | None, Field(description="For numeric signals, the valid value range") ] = None tags: Annotated[ list[Tag] | None, - Field(description='Tags for grouping and filtering signals within the catalog'), + Field(description="Tags for grouping and filtering signals within the catalog"), ] = None value_type: Annotated[ signal_value_type.SignalValueType, diff --git a/src/adcp/types/generated_poc/core/signal_filters.py b/src/adcp/types/generated_poc/core/signal_filters.py index e1fd7ef9..750bc717 100644 --- a/src/adcp/types/generated_poc/core/signal_filters.py +++ b/src/adcp/types/generated_poc/core/signal_filters.py @@ -14,16 +14,16 @@ class SignalFilters(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) catalog_types: Annotated[ list[signal_catalog_type.SignalCatalogType] | None, - Field(description='Filter by catalog type', min_length=1), + Field(description="Filter by catalog type", min_length=1), ] = None data_providers: Annotated[ - list[str] | None, Field(description='Filter by specific data providers', min_length=1) + list[str] | None, Field(description="Filter by specific data providers", min_length=1) ] = None - max_cpm: Annotated[float | None, Field(description='Maximum CPM price filter', ge=0.0)] = None + max_cpm: Annotated[float | None, Field(description="Maximum CPM price filter", ge=0.0)] = None min_coverage_percentage: Annotated[ - float | None, Field(description='Minimum coverage requirement', ge=0.0, le=100.0) + float | None, Field(description="Minimum coverage requirement", ge=0.0, le=100.0) ] = None diff --git a/src/adcp/types/generated_poc/core/signal_id.py b/src/adcp/types/generated_poc/core/signal_id.py index 5d4c5b35..d611bb17 100644 --- a/src/adcp/types/generated_poc/core/signal_id.py +++ b/src/adcp/types/generated_poc/core/signal_id.py @@ -12,24 +12,24 @@ class SignalId2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) data_provider_domain: Annotated[ str, Field( description="Domain of the data provider that owns this signal (e.g., 'polk.com', 'experian.com'). The signal definition is published at this domain's /.well-known/adagents.json", - pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', + pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", ), ] id: Annotated[ str, Field( description="Signal identifier within the data provider's catalog (e.g., 'likely_tesla_buyers', 'income_100k_plus')", - pattern='^[a-zA-Z0-9_-]+$', + pattern="^[a-zA-Z0-9_-]+$", ), ] source: Annotated[ - Literal['catalog'], + Literal["catalog"], Field( description="Discriminator indicating this signal is from a data provider's published catalog" ), @@ -38,7 +38,7 @@ class SignalId2(AdCPBaseModel): class SignalId3(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) agent_url: Annotated[ AnyUrl, @@ -50,13 +50,13 @@ class SignalId3(AdCPBaseModel): str, Field( description="Signal identifier within the agent's signal set (e.g., 'custom_auto_intenders')", - pattern='^[a-zA-Z0-9_-]+$', + pattern="^[a-zA-Z0-9_-]+$", ), ] source: Annotated[ - Literal['agent'], + Literal["agent"], Field( - description='Discriminator indicating this signal is native to the agent (not from a data provider catalog)' + description="Discriminator indicating this signal is native to the agent (not from a data provider catalog)" ), ] @@ -66,7 +66,7 @@ class SignalId(RootModel[SignalId2 | SignalId3]): SignalId2 | SignalId3, Field( description="Universal signal identifier. Uses 'source' as discriminator: 'catalog' for signals from a data provider's published catalog (verifiable), 'agent' for agent-native signals (not externally verifiable).", - discriminator='source', - title='Signal ID', + discriminator="source", + title="Signal ID", ), ] diff --git a/src/adcp/types/generated_poc/core/signal_targeting.py b/src/adcp/types/generated_poc/core/signal_targeting.py index e15358a7..3bd1ece9 100644 --- a/src/adcp/types/generated_poc/core/signal_targeting.py +++ b/src/adcp/types/generated_poc/core/signal_targeting.py @@ -14,30 +14,30 @@ class SignalTargeting1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - signal_id: Annotated[signal_id_1.SignalId, Field(description='The signal to target')] + signal_id: Annotated[signal_id_1.SignalId, Field(description="The signal to target")] value: Annotated[ bool, Field( - description='Whether to include (true) or exclude (false) users matching this signal' + description="Whether to include (true) or exclude (false) users matching this signal" ), ] - value_type: Annotated[Literal['binary'], Field(description='Discriminator for binary signals')] + value_type: Annotated[Literal["binary"], Field(description="Discriminator for binary signals")] class SignalTargeting2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - signal_id: Annotated[signal_id_1.SignalId, Field(description='The signal to target')] + signal_id: Annotated[signal_id_1.SignalId, Field(description="The signal to target")] value_type: Annotated[ - Literal['categorical'], Field(description='Discriminator for categorical signals') + Literal["categorical"], Field(description="Discriminator for categorical signals") ] values: Annotated[ list[str], Field( - description='Values to target. Users with any of these values will be included.', + description="Values to target. Users with any of these values will be included.", min_length=1, ), ] @@ -45,7 +45,7 @@ class SignalTargeting2(AdCPBaseModel): class SignalTargeting3(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) max_value: Annotated[ float | None, @@ -59,9 +59,9 @@ class SignalTargeting3(AdCPBaseModel): description="Minimum value (inclusive). Omit for no minimum. Must be <= max_value when both are provided. Should be >= signal's range.min if defined." ), ] = None - signal_id: Annotated[signal_id_1.SignalId, Field(description='The signal to target')] + signal_id: Annotated[signal_id_1.SignalId, Field(description="The signal to target")] value_type: Annotated[ - Literal['numeric'], Field(description='Discriminator for numeric signals') + Literal["numeric"], Field(description="Discriminator for numeric signals") ] @@ -69,8 +69,8 @@ class SignalTargeting(RootModel[SignalTargeting1 | SignalTargeting2 | SignalTarg root: Annotated[ SignalTargeting1 | SignalTargeting2 | SignalTargeting3, Field( - description='Targeting constraint for a specific signal. Uses value_type as discriminator to determine the targeting expression format.', - discriminator='value_type', - title='Signal Targeting', + description="Targeting constraint for a specific signal. Uses value_type as discriminator to determine the targeting expression format.", + discriminator="value_type", + title="Signal Targeting", ), ] diff --git a/src/adcp/types/generated_poc/core/start_timing.py b/src/adcp/types/generated_poc/core/start_timing.py index ceffd646..f81a0f98 100644 --- a/src/adcp/types/generated_poc/core/start_timing.py +++ b/src/adcp/types/generated_poc/core/start_timing.py @@ -9,10 +9,10 @@ from pydantic import AwareDatetime, Field, RootModel -class StartTiming(RootModel[Literal['asap'] | AwareDatetime]): +class StartTiming(RootModel[Literal["asap"] | AwareDatetime]): root: Annotated[ - Literal['asap'] | AwareDatetime, + Literal["asap"] | AwareDatetime, Field( - description="Campaign start timing: 'asap' or ISO 8601 date-time", title='Start Timing' + description="Campaign start timing: 'asap' or ISO 8601 date-time", title="Start Timing" ), ] diff --git a/src/adcp/types/generated_poc/core/store_item.py b/src/adcp/types/generated_poc/core/store_item.py index 824e24e4..f5f79c1b 100644 --- a/src/adcp/types/generated_poc/core/store_item.py +++ b/src/adcp/types/generated_poc/core/store_item.py @@ -15,13 +15,13 @@ class Address(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) - city: Annotated[str | None, Field(description='City name.')] = None + city: Annotated[str | None, Field(description="City name.")] = None country: Annotated[ - str | None, Field(description='ISO 3166-1 alpha-2 country code.', pattern='^[A-Z]{2}$') + str | None, Field(description="ISO 3166-1 alpha-2 country code.", pattern="^[A-Z]{2}$") ] = None - postal_code: Annotated[str | None, Field(description='Postal or ZIP code.')] = None + postal_code: Annotated[str | None, Field(description="Postal or ZIP code.")] = None region: Annotated[ str | None, Field( @@ -33,42 +33,42 @@ class Address(AdCPBaseModel): class Location(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) lat: Annotated[ - float, Field(description='Latitude in decimal degrees (WGS 84).', ge=-90.0, le=90.0) + float, Field(description="Latitude in decimal degrees (WGS 84).", ge=-90.0, le=90.0) ] lng: Annotated[ - float, Field(description='Longitude in decimal degrees (WGS 84).', ge=-180.0, le=180.0) + float, Field(description="Longitude in decimal degrees (WGS 84).", ge=-180.0, le=180.0) ] class StoreItem(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) address: Annotated[ - Address | None, Field(description='Structured address for display and geocoding fallback.') + Address | None, Field(description="Structured address for display and geocoding fallback.") ] = None catchments: Annotated[ list[catchment.Catchment] | None, Field( - description='Catchment areas for this store. Each defines a reachable area using travel time (isochrone), simple radius, or pre-computed GeoJSON. Multiple catchments allow different modes — e.g., 15-minute drive AND 10-minute walk.', + description="Catchment areas for this store. Each defines a reachable area using travel time (isochrone), simple radius, or pre-computed GeoJSON. Multiple catchments allow different modes — e.g., 15-minute drive AND 10-minute walk.", min_length=1, ), ] = None ext: ext_1.ExtensionObject | None = None hours: Annotated[ dict[ - Literal['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'], + Literal["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"], str, ] | None, Field( - description='Operating hours. Keys are ISO day names (monday–sunday), values are time ranges.' + description="Operating hours. Keys are ISO day names (monday–sunday), values are time ranges." ), ] = None - location: Annotated[Location, Field(description='Geographic coordinates of the store.')] + location: Annotated[Location, Field(description="Geographic coordinates of the store.")] name: Annotated[ str, Field( @@ -81,7 +81,7 @@ class StoreItem(AdCPBaseModel): store_id: Annotated[ str, Field( - description='Unique identifier for this store. Used to reference specific stores in targeting, inventory feeds, and creative templates.' + description="Unique identifier for this store. Used to reference specific stores in targeting, inventory feeds, and creative templates." ), ] tags: Annotated[ @@ -93,5 +93,5 @@ class StoreItem(AdCPBaseModel): ] = None url: Annotated[ AnyUrl | None, - Field(description='Store-specific page URL (e.g., store locator detail page).'), + Field(description="Store-specific page URL (e.g., store locator detail page)."), ] = None diff --git a/src/adcp/types/generated_poc/core/sub_asset.py b/src/adcp/types/generated_poc/core/sub_asset.py index 157a133a..889c81b1 100644 --- a/src/adcp/types/generated_poc/core/sub_asset.py +++ b/src/adcp/types/generated_poc/core/sub_asset.py @@ -12,45 +12,45 @@ class SubAsset1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) asset_id: Annotated[ - str, Field(description='Unique identifier for the asset within the creative') + str, Field(description="Unique identifier for the asset within the creative") ] asset_kind: Annotated[ - Literal['media'], - Field(description='Discriminator indicating this is a media asset with content_uri'), + Literal["media"], + Field(description="Discriminator indicating this is a media asset with content_uri"), ] asset_type: Annotated[ str, Field( - description='Type of asset. Common types: thumbnail_image, product_image, featured_image, logo' + description="Type of asset. Common types: thumbnail_image, product_image, featured_image, logo" ), ] - content_uri: Annotated[AnyUrl, Field(description='URL for media assets (images, videos, etc.)')] + content_uri: Annotated[AnyUrl, Field(description="URL for media assets (images, videos, etc.)")] class SubAsset2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) asset_id: Annotated[ - str, Field(description='Unique identifier for the asset within the creative') + str, Field(description="Unique identifier for the asset within the creative") ] asset_kind: Annotated[ - Literal['text'], - Field(description='Discriminator indicating this is a text asset with content'), + Literal["text"], + Field(description="Discriminator indicating this is a text asset with content"), ] asset_type: Annotated[ str, Field( - description='Type of asset. Common types: headline, body_text, cta_text, price_text, sponsor_name, author_name, click_url' + description="Type of asset. Common types: headline, body_text, cta_text, price_text, sponsor_name, author_name, click_url" ), ] content: Annotated[ str | list[str], Field( - description='Text content for text-based assets like headlines, body text, CTA text, etc.' + description="Text content for text-based assets like headlines, body text, CTA text, etc." ), ] @@ -59,7 +59,7 @@ class SubAsset(RootModel[SubAsset1 | SubAsset2]): root: Annotated[ SubAsset1 | SubAsset2, Field( - description='Sub-asset for multi-asset creative formats, including carousel images and native ad template variables', - title='Sub-Asset', + description="Sub-asset for multi-asset creative formats, including carousel images and native ad template variables", + title="Sub-Asset", ), ] diff --git a/src/adcp/types/generated_poc/core/targeting.py b/src/adcp/types/generated_poc/core/targeting.py index 4235b3c7..35ea7a91 100644 --- a/src/adcp/types/generated_poc/core/targeting.py +++ b/src/adcp/types/generated_poc/core/targeting.py @@ -19,24 +19,24 @@ class AgeRestriction(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) accepted_methods: Annotated[ list[age_verification_method.AgeVerificationMethod] | None, Field( - description='Accepted verification methods. If omitted, any method the platform supports is acceptable.', + description="Accepted verification methods. If omitted, any method the platform supports is acceptable.", min_length=1, ), ] = None - min: Annotated[int, Field(description='Minimum age required', ge=13, le=99)] + min: Annotated[int, Field(description="Minimum age required", ge=13, le=99)] verification_required: Annotated[ bool | None, - Field(description='Whether verified age (not inferred) is required for compliance'), + Field(description="Whether verified age (not inferred) is required for compliance"), ] = False class GeoCountry(RootModel[str]): - root: Annotated[str, Field(pattern='^[A-Z]{2}$')] + root: Annotated[str, Field(pattern="^[A-Z]{2}$")] class GeoCountriesExcludeItem(GeoCountry): @@ -45,7 +45,7 @@ class GeoCountriesExcludeItem(GeoCountry): class GeoMetro(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) system: Annotated[ metro_system.MetroAreaSystem, @@ -62,7 +62,7 @@ class GeoMetro(AdCPBaseModel): class GeoMetrosExcludeItem(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) system: Annotated[ metro_system.MetroAreaSystem, @@ -79,7 +79,7 @@ class GeoMetrosExcludeItem(AdCPBaseModel): class GeoPostalArea(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) system: Annotated[ postal_system.PostalCodeSystem, @@ -98,7 +98,7 @@ class GeoPostalArea(AdCPBaseModel): class GeoPostalAreasExcludeItem(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) system: Annotated[ postal_system.PostalCodeSystem, @@ -116,7 +116,7 @@ class GeoPostalAreasExcludeItem(AdCPBaseModel): class GeoRegion(RootModel[str]): - root: Annotated[str, Field(pattern='^[A-Z]{2}-[A-Z0-9]{1,3}$')] + root: Annotated[str, Field(pattern="^[A-Z]{2}-[A-Z0-9]{1,3}$")] class GeoRegionsExcludeItem(GeoRegion): @@ -124,15 +124,15 @@ class GeoRegionsExcludeItem(GeoRegion): class LanguageItem(RootModel[str]): - root: Annotated[str, Field(pattern='^[a-z]{2}$')] + root: Annotated[str, Field(pattern="^[a-z]{2}$")] class StoreCatchment(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) catalog_id: Annotated[ - str, Field(description='Synced store-type catalog ID from sync_catalogs.') + str, Field(description="Synced store-type catalog ID from sync_catalogs.") ] catchment_ids: Annotated[ list[str] | None, @@ -144,7 +144,7 @@ class StoreCatchment(AdCPBaseModel): store_ids: Annotated[ list[str] | None, Field( - description='Filter to specific stores within the catalog. Omit to target all stores.', + description="Filter to specific stores within the catalog. Omit to target all stores.", min_length=1, ), ] = None @@ -152,45 +152,45 @@ class StoreCatchment(AdCPBaseModel): class TargetingOverlay(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) age_restriction: Annotated[ AgeRestriction | None, Field( - description='Age restriction for compliance. Use for legal requirements (alcohol, gambling), not audience targeting.' + description="Age restriction for compliance. Use for legal requirements (alcohol, gambling), not audience targeting." ), ] = None audience_exclude: Annotated[ list[str] | None, Field( - description='Suppress delivery to members of these first-party CRM audiences. Matched users are excluded regardless of other targeting. References audience_id values from sync_audiences on the same seller account — audience IDs are not portable across sellers. Seller must declare support in get_adcp_capabilities.', + description="Suppress delivery to members of these first-party CRM audiences. Matched users are excluded regardless of other targeting. References audience_id values from sync_audiences on the same seller account — audience IDs are not portable across sellers. Seller must declare support in get_adcp_capabilities.", min_length=1, ), ] = None audience_include: Annotated[ list[str] | None, Field( - description='Restrict delivery to members of these first-party CRM audiences. Only users present in the uploaded lists are eligible. References audience_id values from sync_audiences on the same seller account — audience IDs are not portable across sellers. Not for lookalike expansion — express that intent in the campaign brief. Seller must declare support in get_adcp_capabilities.', + description="Restrict delivery to members of these first-party CRM audiences. Only users present in the uploaded lists are eligible. References audience_id values from sync_audiences on the same seller account — audience IDs are not portable across sellers. Not for lookalike expansion — express that intent in the campaign brief. Seller must declare support in get_adcp_capabilities.", min_length=1, ), ] = None axe_exclude_segment: Annotated[ - str | None, Field(description='AXE segment ID to exclude from targeting') + str | None, Field(description="AXE segment ID to exclude from targeting") ] = None axe_include_segment: Annotated[ - str | None, Field(description='AXE segment ID to include for targeting') + str | None, Field(description="AXE segment ID to include for targeting") ] = None daypart_targets: Annotated[ list[daypart_target.DaypartTarget] | None, Field( - description='Restrict delivery to specific time windows. Each entry specifies days of week and an hour range.', + description="Restrict delivery to specific time windows. Each entry specifies days of week and an hour range.", min_length=1, ), ] = None device_platform: Annotated[ list[device_platform_1.DevicePlatform] | None, Field( - description='Restrict to specific platforms. Use for technical compatibility (app only works on iOS). Values from Sec-CH-UA-Platform standard, extended for CTV.', + description="Restrict to specific platforms. Use for technical compatibility (app only works on iOS). Values from Sec-CH-UA-Platform standard, extended for CTV.", min_length=1, ), ] = None @@ -212,28 +212,28 @@ class TargetingOverlay(AdCPBaseModel): geo_metros: Annotated[ list[GeoMetro] | None, Field( - description='Restrict delivery to specific metro areas. Each entry specifies the classification system and target values. Seller must declare supported systems in get_adcp_capabilities.', + description="Restrict delivery to specific metro areas. Each entry specifies the classification system and target values. Seller must declare supported systems in get_adcp_capabilities.", min_length=1, ), ] = None geo_metros_exclude: Annotated[ list[GeoMetrosExcludeItem] | None, Field( - description='Exclude specific metro areas from delivery. Each entry specifies the classification system and excluded values. Seller must declare supported systems in get_adcp_capabilities.', + description="Exclude specific metro areas from delivery. Each entry specifies the classification system and excluded values. Seller must declare supported systems in get_adcp_capabilities.", min_length=1, ), ] = None geo_postal_areas: Annotated[ list[GeoPostalArea] | None, Field( - description='Restrict delivery to specific postal areas. Each entry specifies the postal system and target values. Seller must declare supported systems in get_adcp_capabilities.', + description="Restrict delivery to specific postal areas. Each entry specifies the postal system and target values. Seller must declare supported systems in get_adcp_capabilities.", min_length=1, ), ] = None geo_postal_areas_exclude: Annotated[ list[GeoPostalAreasExcludeItem] | None, Field( - description='Exclude specific postal areas from delivery. Each entry specifies the postal system and excluded values. Seller must declare supported systems in get_adcp_capabilities.', + description="Exclude specific postal areas from delivery. Each entry specifies the postal system and excluded values. Seller must declare supported systems in get_adcp_capabilities.", min_length=1, ), ] = None @@ -267,7 +267,7 @@ class TargetingOverlay(AdCPBaseModel): store_catchments: Annotated[ list[StoreCatchment] | None, Field( - description='Target users within store catchment areas from a synced store catalog. Each entry references a store-type catalog and optionally narrows to specific stores or catchment zones.', + description="Target users within store catchment areas from a synced store catalog. Each entry references a store-type catalog and optionally narrows to specific stores or catchment zones.", min_length=1, ), ] = None diff --git a/src/adcp/types/generated_poc/core/user_match.py b/src/adcp/types/generated_poc/core/user_match.py index a30e9364..ec6c0c13 100644 --- a/src/adcp/types/generated_poc/core/user_match.py +++ b/src/adcp/types/generated_poc/core/user_match.py @@ -15,196 +15,196 @@ class Uid(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - type: Annotated[uid_type.UidType, Field(description='Universal ID type')] - value: Annotated[str, Field(description='Universal ID value')] + type: Annotated[uid_type.UidType, Field(description="Universal ID type")] + value: Annotated[str, Field(description="Universal ID value")] class UserMatch1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) click_id: Annotated[ str | None, - Field(description='Platform click identifier (fbclid, gclid, ttclid, ScCid, etc.)'), + Field(description="Platform click identifier (fbclid, gclid, ttclid, ScCid, etc.)"), ] = None click_id_type: Annotated[ str | None, - Field(description='Type of click identifier (e.g. fbclid, gclid, ttclid, msclkid, ScCid)'), + Field(description="Type of click identifier (e.g. fbclid, gclid, ttclid, msclkid, ScCid)"), ] = None client_ip: Annotated[ - str | None, Field(description='Client IP address for probabilistic matching') + str | None, Field(description="Client IP address for probabilistic matching") ] = None client_user_agent: Annotated[ - str | None, Field(description='Client user agent string for probabilistic matching') + str | None, Field(description="Client user agent string for probabilistic matching") ] = None ext: ext_1.ExtensionObject | None = None hashed_email: Annotated[ str | None, Field( - description='SHA-256 hash of lowercase, trimmed email address. Buyer must normalize before hashing: lowercase, trim whitespace.', - pattern='^[a-f0-9]{64}$', + description="SHA-256 hash of lowercase, trimmed email address. Buyer must normalize before hashing: lowercase, trim whitespace.", + pattern="^[a-f0-9]{64}$", ), ] = None hashed_phone: Annotated[ str | None, Field( - description='SHA-256 hash of E.164-formatted phone number (e.g. +12065551234). Buyer must normalize to E.164 before hashing.', - pattern='^[a-f0-9]{64}$', + description="SHA-256 hash of E.164-formatted phone number (e.g. +12065551234). Buyer must normalize to E.164 before hashing.", + pattern="^[a-f0-9]{64}$", ), ] = None uids: Annotated[ - list[Uid], Field(description='Universal ID values for user matching', min_length=1) + list[Uid], Field(description="Universal ID values for user matching", min_length=1) ] class UserMatch2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) click_id: Annotated[ str | None, - Field(description='Platform click identifier (fbclid, gclid, ttclid, ScCid, etc.)'), + Field(description="Platform click identifier (fbclid, gclid, ttclid, ScCid, etc.)"), ] = None click_id_type: Annotated[ str | None, - Field(description='Type of click identifier (e.g. fbclid, gclid, ttclid, msclkid, ScCid)'), + Field(description="Type of click identifier (e.g. fbclid, gclid, ttclid, msclkid, ScCid)"), ] = None client_ip: Annotated[ - str | None, Field(description='Client IP address for probabilistic matching') + str | None, Field(description="Client IP address for probabilistic matching") ] = None client_user_agent: Annotated[ - str | None, Field(description='Client user agent string for probabilistic matching') + str | None, Field(description="Client user agent string for probabilistic matching") ] = None ext: ext_1.ExtensionObject | None = None hashed_email: Annotated[ str, Field( - description='SHA-256 hash of lowercase, trimmed email address. Buyer must normalize before hashing: lowercase, trim whitespace.', - pattern='^[a-f0-9]{64}$', + description="SHA-256 hash of lowercase, trimmed email address. Buyer must normalize before hashing: lowercase, trim whitespace.", + pattern="^[a-f0-9]{64}$", ), ] hashed_phone: Annotated[ str | None, Field( - description='SHA-256 hash of E.164-formatted phone number (e.g. +12065551234). Buyer must normalize to E.164 before hashing.', - pattern='^[a-f0-9]{64}$', + description="SHA-256 hash of E.164-formatted phone number (e.g. +12065551234). Buyer must normalize to E.164 before hashing.", + pattern="^[a-f0-9]{64}$", ), ] = None uids: Annotated[ - list[Uid] | None, Field(description='Universal ID values for user matching', min_length=1) + list[Uid] | None, Field(description="Universal ID values for user matching", min_length=1) ] = None class UserMatch3(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) click_id: Annotated[ str | None, - Field(description='Platform click identifier (fbclid, gclid, ttclid, ScCid, etc.)'), + Field(description="Platform click identifier (fbclid, gclid, ttclid, ScCid, etc.)"), ] = None click_id_type: Annotated[ str | None, - Field(description='Type of click identifier (e.g. fbclid, gclid, ttclid, msclkid, ScCid)'), + Field(description="Type of click identifier (e.g. fbclid, gclid, ttclid, msclkid, ScCid)"), ] = None client_ip: Annotated[ - str | None, Field(description='Client IP address for probabilistic matching') + str | None, Field(description="Client IP address for probabilistic matching") ] = None client_user_agent: Annotated[ - str | None, Field(description='Client user agent string for probabilistic matching') + str | None, Field(description="Client user agent string for probabilistic matching") ] = None ext: ext_1.ExtensionObject | None = None hashed_email: Annotated[ str | None, Field( - description='SHA-256 hash of lowercase, trimmed email address. Buyer must normalize before hashing: lowercase, trim whitespace.', - pattern='^[a-f0-9]{64}$', + description="SHA-256 hash of lowercase, trimmed email address. Buyer must normalize before hashing: lowercase, trim whitespace.", + pattern="^[a-f0-9]{64}$", ), ] = None hashed_phone: Annotated[ str, Field( - description='SHA-256 hash of E.164-formatted phone number (e.g. +12065551234). Buyer must normalize to E.164 before hashing.', - pattern='^[a-f0-9]{64}$', + description="SHA-256 hash of E.164-formatted phone number (e.g. +12065551234). Buyer must normalize to E.164 before hashing.", + pattern="^[a-f0-9]{64}$", ), ] uids: Annotated[ - list[Uid] | None, Field(description='Universal ID values for user matching', min_length=1) + list[Uid] | None, Field(description="Universal ID values for user matching", min_length=1) ] = None class UserMatch4(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) click_id: Annotated[ - str, Field(description='Platform click identifier (fbclid, gclid, ttclid, ScCid, etc.)') + str, Field(description="Platform click identifier (fbclid, gclid, ttclid, ScCid, etc.)") ] click_id_type: Annotated[ str | None, - Field(description='Type of click identifier (e.g. fbclid, gclid, ttclid, msclkid, ScCid)'), + Field(description="Type of click identifier (e.g. fbclid, gclid, ttclid, msclkid, ScCid)"), ] = None client_ip: Annotated[ - str | None, Field(description='Client IP address for probabilistic matching') + str | None, Field(description="Client IP address for probabilistic matching") ] = None client_user_agent: Annotated[ - str | None, Field(description='Client user agent string for probabilistic matching') + str | None, Field(description="Client user agent string for probabilistic matching") ] = None ext: ext_1.ExtensionObject | None = None hashed_email: Annotated[ str | None, Field( - description='SHA-256 hash of lowercase, trimmed email address. Buyer must normalize before hashing: lowercase, trim whitespace.', - pattern='^[a-f0-9]{64}$', + description="SHA-256 hash of lowercase, trimmed email address. Buyer must normalize before hashing: lowercase, trim whitespace.", + pattern="^[a-f0-9]{64}$", ), ] = None hashed_phone: Annotated[ str | None, Field( - description='SHA-256 hash of E.164-formatted phone number (e.g. +12065551234). Buyer must normalize to E.164 before hashing.', - pattern='^[a-f0-9]{64}$', + description="SHA-256 hash of E.164-formatted phone number (e.g. +12065551234). Buyer must normalize to E.164 before hashing.", + pattern="^[a-f0-9]{64}$", ), ] = None uids: Annotated[ - list[Uid] | None, Field(description='Universal ID values for user matching', min_length=1) + list[Uid] | None, Field(description="Universal ID values for user matching", min_length=1) ] = None class UserMatch5(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) click_id: Annotated[ str | None, - Field(description='Platform click identifier (fbclid, gclid, ttclid, ScCid, etc.)'), + Field(description="Platform click identifier (fbclid, gclid, ttclid, ScCid, etc.)"), ] = None click_id_type: Annotated[ str | None, - Field(description='Type of click identifier (e.g. fbclid, gclid, ttclid, msclkid, ScCid)'), + Field(description="Type of click identifier (e.g. fbclid, gclid, ttclid, msclkid, ScCid)"), ] = None - client_ip: Annotated[str, Field(description='Client IP address for probabilistic matching')] + client_ip: Annotated[str, Field(description="Client IP address for probabilistic matching")] client_user_agent: Annotated[ - str, Field(description='Client user agent string for probabilistic matching') + str, Field(description="Client user agent string for probabilistic matching") ] ext: ext_1.ExtensionObject | None = None hashed_email: Annotated[ str | None, Field( - description='SHA-256 hash of lowercase, trimmed email address. Buyer must normalize before hashing: lowercase, trim whitespace.', - pattern='^[a-f0-9]{64}$', + description="SHA-256 hash of lowercase, trimmed email address. Buyer must normalize before hashing: lowercase, trim whitespace.", + pattern="^[a-f0-9]{64}$", ), ] = None hashed_phone: Annotated[ str | None, Field( - description='SHA-256 hash of E.164-formatted phone number (e.g. +12065551234). Buyer must normalize to E.164 before hashing.', - pattern='^[a-f0-9]{64}$', + description="SHA-256 hash of E.164-formatted phone number (e.g. +12065551234). Buyer must normalize to E.164 before hashing.", + pattern="^[a-f0-9]{64}$", ), ] = None uids: Annotated[ - list[Uid] | None, Field(description='Universal ID values for user matching', min_length=1) + list[Uid] | None, Field(description="Universal ID values for user matching", min_length=1) ] = None @@ -212,7 +212,7 @@ class UserMatch(RootModel[UserMatch1 | UserMatch2 | UserMatch3 | UserMatch4 | Us root: Annotated[ UserMatch1 | UserMatch2 | UserMatch3 | UserMatch4 | UserMatch5, Field( - description='User identifiers for attribution matching. Supports universal IDs, hashed identifiers, click IDs, and probabilistic matching.', - title='User Match', + description="User identifiers for attribution matching. Supports universal IDs, hashed identifiers, click IDs, and probabilistic matching.", + title="User Match", ), ] diff --git a/src/adcp/types/generated_poc/core/vehicle_item.py b/src/adcp/types/generated_poc/core/vehicle_item.py index 758dabac..de343eb2 100644 --- a/src/adcp/types/generated_poc/core/vehicle_item.py +++ b/src/adcp/types/generated_poc/core/vehicle_item.py @@ -15,77 +15,77 @@ class BodyStyle(Enum): - sedan = 'sedan' - suv = 'suv' - truck = 'truck' - coupe = 'coupe' - convertible = 'convertible' - wagon = 'wagon' - van = 'van' - hatchback = 'hatchback' + sedan = "sedan" + suv = "suv" + truck = "truck" + coupe = "coupe" + convertible = "convertible" + wagon = "wagon" + van = "van" + hatchback = "hatchback" class Condition(Enum): - new = 'new' - used = 'used' - certified_pre_owned = 'certified_pre_owned' + new = "new" + used = "used" + certified_pre_owned = "certified_pre_owned" class FuelType(Enum): - gasoline = 'gasoline' - diesel = 'diesel' - electric = 'electric' - hybrid = 'hybrid' - plug_in_hybrid = 'plug_in_hybrid' + gasoline = "gasoline" + diesel = "diesel" + electric = "electric" + hybrid = "hybrid" + plug_in_hybrid = "plug_in_hybrid" class Location(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) lat: Annotated[ - float, Field(description='Latitude in decimal degrees (WGS 84).', ge=-90.0, le=90.0) + float, Field(description="Latitude in decimal degrees (WGS 84).", ge=-90.0, le=90.0) ] lng: Annotated[ - float, Field(description='Longitude in decimal degrees (WGS 84).', ge=-180.0, le=180.0) + float, Field(description="Longitude in decimal degrees (WGS 84).", ge=-180.0, le=180.0) ] class Unit(Enum): - km = 'km' - mi = 'mi' + km = "km" + mi = "mi" class Mileage(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) - unit: Annotated[Unit, Field(description='Distance unit.')] - value: Annotated[float, Field(description='Mileage value.', ge=0.0)] + unit: Annotated[Unit, Field(description="Distance unit.")] + value: Annotated[float, Field(description="Mileage value.", ge=0.0)] class Transmission(Enum): - automatic = 'automatic' - manual = 'manual' - cvt = 'cvt' + automatic = "automatic" + manual = "manual" + cvt = "cvt" class VehicleItem(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - body_style: Annotated[BodyStyle | None, Field(description='Vehicle body style.')] = None - condition: Annotated[Condition | None, Field(description='Vehicle condition.')] = None + body_style: Annotated[BodyStyle | None, Field(description="Vehicle body style.")] = None + condition: Annotated[Condition | None, Field(description="Vehicle condition.")] = None ext: ext_1.ExtensionObject | None = None - exterior_color: Annotated[str | None, Field(description='Exterior color.')] = None - fuel_type: Annotated[FuelType | None, Field(description='Fuel or powertrain type.')] = None - image_url: Annotated[AnyUrl | None, Field(description='Primary vehicle image URL.')] = None - interior_color: Annotated[str | None, Field(description='Interior color.')] = None - location: Annotated[Location | None, Field(description='Dealer or vehicle location.')] = None + exterior_color: Annotated[str | None, Field(description="Exterior color.")] = None + fuel_type: Annotated[FuelType | None, Field(description="Fuel or powertrain type.")] = None + image_url: Annotated[AnyUrl | None, Field(description="Primary vehicle image URL.")] = None + interior_color: Annotated[str | None, Field(description="Interior color.")] = None + location: Annotated[Location | None, Field(description="Dealer or vehicle location.")] = None make: Annotated[str, Field(description="Vehicle manufacturer (e.g., 'Honda', 'Ford', 'BMW').")] - mileage: Annotated[Mileage | None, Field(description='Odometer reading.')] = None + mileage: Annotated[Mileage | None, Field(description="Odometer reading.")] = None model: Annotated[str, Field(description="Vehicle model (e.g., 'Civic', 'F-150', 'X5').")] - price: Annotated[price_1.Price | None, Field(description='Vehicle price.')] = None + price: Annotated[price_1.Price | None, Field(description="Vehicle price.")] = None tags: Annotated[ list[str] | None, Field( @@ -94,13 +94,13 @@ class VehicleItem(AdCPBaseModel): ), ] = None title: Annotated[str, Field(description="Listing title (e.g., '2024 Honda Civic EX Sedan').")] - transmission: Annotated[Transmission | None, Field(description='Transmission type.')] = None + transmission: Annotated[Transmission | None, Field(description="Transmission type.")] = None trim: Annotated[ str | None, Field(description="Trim level (e.g., 'EX', 'Limited', 'Sport').") ] = None - url: Annotated[AnyUrl | None, Field(description='Vehicle listing page URL.')] = None - vehicle_id: Annotated[str, Field(description='Unique identifier for this vehicle listing.')] + url: Annotated[AnyUrl | None, Field(description="Vehicle listing page URL.")] = None + vehicle_id: Annotated[str, Field(description="Unique identifier for this vehicle listing.")] vin: Annotated[ - str | None, Field(description='Vehicle Identification Number (17-character VIN).') + str | None, Field(description="Vehicle Identification Number (17-character VIN).") ] = None - year: Annotated[int, Field(description='Model year.', ge=1900)] + year: Annotated[int, Field(description="Model year.", ge=1900)] diff --git a/src/adcp/types/generated_poc/creative/creative_feature_result.py b/src/adcp/types/generated_poc/creative/creative_feature_result.py new file mode 100644 index 00000000..b53440b3 --- /dev/null +++ b/src/adcp/types/generated_poc/creative/creative_feature_result.py @@ -0,0 +1,54 @@ +# generated by datamodel-codegen: +# filename: creative/creative_feature_result.json +# timestamp: 2026-02-23T01:24:08+00:00 + +from __future__ import annotations + +from typing import Annotated, Any + +from adcp.types.base import AdCPBaseModel +from pydantic import AwareDatetime, ConfigDict, Field + +from ..core import ext as ext_1 + + +class CreativeFeatureResult(AdCPBaseModel): + model_config = ConfigDict( + extra="forbid", + ) + confidence: Annotated[ + float | None, Field(description="Confidence score for this value (0-1)", ge=0.0, le=1.0) + ] = None + details: Annotated[ + dict[str, Any] | None, + Field(description="Additional vendor-specific details about this evaluation"), + ] = None + expires_at: Annotated[ + AwareDatetime | None, + Field(description="When this evaluation expires and should be refreshed"), + ] = None + ext: ext_1.ExtensionObject | None = None + feature_id: Annotated[ + str, + Field( + description="The feature that was evaluated (e.g., 'auto_redirect', 'brand_consistency', 'iab_casinos_gambling')" + ), + ] + measured_at: Annotated[ + AwareDatetime | None, Field(description="When this feature was evaluated") + ] = None + methodology_version: Annotated[ + str | None, Field(description="Version of the methodology used to evaluate this feature") + ] = None + unit: Annotated[ + str | None, + Field( + description="Unit of measurement for quantitative values (e.g., 'percentage', 'score')" + ), + ] = None + value: Annotated[ + bool | float | str, + Field( + description="The feature value. Type depends on feature definition: boolean for binary, number for quantitative, string for categorical." + ), + ] diff --git a/src/adcp/types/generated_poc/creative/get_creative_delivery_request.py b/src/adcp/types/generated_poc/creative/get_creative_delivery_request.py index 809bee45..d4a28fd6 100644 --- a/src/adcp/types/generated_poc/creative/get_creative_delivery_request.py +++ b/src/adcp/types/generated_poc/creative/get_creative_delivery_request.py @@ -15,29 +15,29 @@ class Pagination(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) limit: Annotated[ - int | None, Field(description='Maximum number of creatives to return', ge=1, le=100) + int | None, Field(description="Maximum number of creatives to return", ge=1, le=100) ] = 50 - offset: Annotated[int | None, Field(description='Number of creatives to skip', ge=0)] = 0 + offset: Annotated[int | None, Field(description="Number of creatives to skip", ge=0)] = 0 class GetCreativeDeliveryRequest1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) account_id: Annotated[ str | None, Field( - description='Account context for routing and scoping. Limits results to creatives within this account. Optional if the agent has a single account or can determine routing from the media buy identifiers.' + description="Account context for routing and scoping. Limits results to creatives within this account. Optional if the agent has a single account or can determine routing from the media buy identifiers." ), ] = None context: context_1.ContextObject | None = None creative_ids: Annotated[ list[str] | None, Field( - description='Filter to specific creatives by ID. If omitted, returns delivery for all creatives matching the other filters.', + description="Filter to specific creatives by ID. If omitted, returns delivery for all creatives matching the other filters.", min_length=1, ), ] = None @@ -45,14 +45,14 @@ class GetCreativeDeliveryRequest1(AdCPBaseModel): str | None, Field( description="End date for delivery period (YYYY-MM-DD). Interpreted in the platform's reporting timezone.", - pattern='^\\d{4}-\\d{2}-\\d{2}$', + pattern="^\\d{4}-\\d{2}-\\d{2}$", ), ] = None ext: ext_1.ExtensionObject | None = None max_variants: Annotated[ int | None, Field( - description='Maximum number of variants to return per creative. When omitted, the agent returns all variants. Use this to limit response size for generative creatives that may produce large numbers of variants.', + description="Maximum number of variants to return per creative. When omitted, the agent returns all variants. Use this to limit response size for generative creatives that may produce large numbers of variants.", ge=1, ), ] = None @@ -66,40 +66,40 @@ class GetCreativeDeliveryRequest1(AdCPBaseModel): media_buy_ids: Annotated[ list[str], Field( - description='Filter to specific media buys by publisher ID. If omitted, returns creative delivery across all matching media buys.', + description="Filter to specific media buys by publisher ID. If omitted, returns creative delivery across all matching media buys.", min_length=1, ), ] pagination: Annotated[ Pagination | None, Field( - description='Pagination parameters for the creatives array in the response. When omitted, the agent returns all matching creatives.' + description="Pagination parameters for the creatives array in the response. When omitted, the agent returns all matching creatives." ), ] = None start_date: Annotated[ str | None, Field( description="Start date for delivery period (YYYY-MM-DD). Interpreted in the platform's reporting timezone.", - pattern='^\\d{4}-\\d{2}-\\d{2}$', + pattern="^\\d{4}-\\d{2}-\\d{2}$", ), ] = None class GetCreativeDeliveryRequest2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) account_id: Annotated[ str | None, Field( - description='Account context for routing and scoping. Limits results to creatives within this account. Optional if the agent has a single account or can determine routing from the media buy identifiers.' + description="Account context for routing and scoping. Limits results to creatives within this account. Optional if the agent has a single account or can determine routing from the media buy identifiers." ), ] = None context: context_1.ContextObject | None = None creative_ids: Annotated[ list[str] | None, Field( - description='Filter to specific creatives by ID. If omitted, returns delivery for all creatives matching the other filters.', + description="Filter to specific creatives by ID. If omitted, returns delivery for all creatives matching the other filters.", min_length=1, ), ] = None @@ -107,14 +107,14 @@ class GetCreativeDeliveryRequest2(AdCPBaseModel): str | None, Field( description="End date for delivery period (YYYY-MM-DD). Interpreted in the platform's reporting timezone.", - pattern='^\\d{4}-\\d{2}-\\d{2}$', + pattern="^\\d{4}-\\d{2}-\\d{2}$", ), ] = None ext: ext_1.ExtensionObject | None = None max_variants: Annotated[ int | None, Field( - description='Maximum number of variants to return per creative. When omitted, the agent returns all variants. Use this to limit response size for generative creatives that may produce large numbers of variants.', + description="Maximum number of variants to return per creative. When omitted, the agent returns all variants. Use this to limit response size for generative creatives that may produce large numbers of variants.", ge=1, ), ] = None @@ -128,40 +128,40 @@ class GetCreativeDeliveryRequest2(AdCPBaseModel): media_buy_ids: Annotated[ list[str] | None, Field( - description='Filter to specific media buys by publisher ID. If omitted, returns creative delivery across all matching media buys.', + description="Filter to specific media buys by publisher ID. If omitted, returns creative delivery across all matching media buys.", min_length=1, ), ] = None pagination: Annotated[ Pagination | None, Field( - description='Pagination parameters for the creatives array in the response. When omitted, the agent returns all matching creatives.' + description="Pagination parameters for the creatives array in the response. When omitted, the agent returns all matching creatives." ), ] = None start_date: Annotated[ str | None, Field( description="Start date for delivery period (YYYY-MM-DD). Interpreted in the platform's reporting timezone.", - pattern='^\\d{4}-\\d{2}-\\d{2}$', + pattern="^\\d{4}-\\d{2}-\\d{2}$", ), ] = None class GetCreativeDeliveryRequest3(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) account_id: Annotated[ str | None, Field( - description='Account context for routing and scoping. Limits results to creatives within this account. Optional if the agent has a single account or can determine routing from the media buy identifiers.' + description="Account context for routing and scoping. Limits results to creatives within this account. Optional if the agent has a single account or can determine routing from the media buy identifiers." ), ] = None context: context_1.ContextObject | None = None creative_ids: Annotated[ list[str], Field( - description='Filter to specific creatives by ID. If omitted, returns delivery for all creatives matching the other filters.', + description="Filter to specific creatives by ID. If omitted, returns delivery for all creatives matching the other filters.", min_length=1, ), ] @@ -169,14 +169,14 @@ class GetCreativeDeliveryRequest3(AdCPBaseModel): str | None, Field( description="End date for delivery period (YYYY-MM-DD). Interpreted in the platform's reporting timezone.", - pattern='^\\d{4}-\\d{2}-\\d{2}$', + pattern="^\\d{4}-\\d{2}-\\d{2}$", ), ] = None ext: ext_1.ExtensionObject | None = None max_variants: Annotated[ int | None, Field( - description='Maximum number of variants to return per creative. When omitted, the agent returns all variants. Use this to limit response size for generative creatives that may produce large numbers of variants.', + description="Maximum number of variants to return per creative. When omitted, the agent returns all variants. Use this to limit response size for generative creatives that may produce large numbers of variants.", ge=1, ), ] = None @@ -190,21 +190,21 @@ class GetCreativeDeliveryRequest3(AdCPBaseModel): media_buy_ids: Annotated[ list[str] | None, Field( - description='Filter to specific media buys by publisher ID. If omitted, returns creative delivery across all matching media buys.', + description="Filter to specific media buys by publisher ID. If omitted, returns creative delivery across all matching media buys.", min_length=1, ), ] = None pagination: Annotated[ Pagination | None, Field( - description='Pagination parameters for the creatives array in the response. When omitted, the agent returns all matching creatives.' + description="Pagination parameters for the creatives array in the response. When omitted, the agent returns all matching creatives." ), ] = None start_date: Annotated[ str | None, Field( description="Start date for delivery period (YYYY-MM-DD). Interpreted in the platform's reporting timezone.", - pattern='^\\d{4}-\\d{2}-\\d{2}$', + pattern="^\\d{4}-\\d{2}-\\d{2}$", ), ] = None @@ -217,7 +217,7 @@ class GetCreativeDeliveryRequest( root: Annotated[ GetCreativeDeliveryRequest1 | GetCreativeDeliveryRequest2 | GetCreativeDeliveryRequest3, Field( - description='Request parameters for retrieving creative delivery data including variant-level metrics from a creative agent. At least one scoping filter (media_buy_ids, media_buy_buyer_refs, or creative_ids) is required.', - title='Get Creative Delivery Request', + description="Request parameters for retrieving creative delivery data including variant-level metrics from a creative agent. At least one scoping filter (media_buy_ids, media_buy_buyer_refs, or creative_ids) is required.", + title="Get Creative Delivery Request", ), ] diff --git a/src/adcp/types/generated_poc/creative/get_creative_delivery_response.py b/src/adcp/types/generated_poc/creative/get_creative_delivery_response.py index eda48efb..d23e2c51 100644 --- a/src/adcp/types/generated_poc/creative/get_creative_delivery_response.py +++ b/src/adcp/types/generated_poc/creative/get_creative_delivery_response.py @@ -17,25 +17,25 @@ class Pagination(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) has_more: Annotated[ - bool, Field(description='Whether more creatives are available beyond this page') + bool, Field(description="Whether more creatives are available beyond this page") ] - limit: Annotated[int, Field(description='Maximum number of creatives requested', ge=1)] - offset: Annotated[int, Field(description='Number of creatives skipped', ge=0)] + limit: Annotated[int, Field(description="Maximum number of creatives requested", ge=1)] + offset: Annotated[int, Field(description="Number of creatives skipped", ge=0)] total: Annotated[ int | None, - Field(description='Total number of creatives matching the request filters', ge=0), + Field(description="Total number of creatives matching the request filters", ge=0), ] = None class ReportingPeriod(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - end: Annotated[AwareDatetime, Field(description='ISO 8601 end timestamp')] - start: Annotated[AwareDatetime, Field(description='ISO 8601 start timestamp')] + end: Annotated[AwareDatetime, Field(description="ISO 8601 end timestamp")] + start: Annotated[AwareDatetime, Field(description="ISO 8601 start timestamp")] timezone: Annotated[ str | None, Field( @@ -46,11 +46,11 @@ class ReportingPeriod(AdCPBaseModel): class Creative(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - creative_id: Annotated[str, Field(description='Creative identifier')] + creative_id: Annotated[str, Field(description="Creative identifier")] format_id: Annotated[ - format_id_1.FormatId | None, Field(description='Format of this creative') + format_id_1.FormatId | None, Field(description="Format of this creative") ] = None media_buy_id: Annotated[ str | None, @@ -60,46 +60,46 @@ class Creative(AdCPBaseModel): ] = None totals: Annotated[ delivery_metrics.DeliveryMetrics | None, - Field(description='Aggregate delivery metrics across all variants of this creative'), + Field(description="Aggregate delivery metrics across all variants of this creative"), ] = None variant_count: Annotated[ int | None, Field( - description='Total number of variants for this creative. When max_variants was specified in the request, this may exceed the number of items in the variants array.', + description="Total number of variants for this creative. When max_variants was specified in the request, this may exceed the number of items in the variants array.", ge=0, ), ] = None variants: Annotated[ list[creative_variant.CreativeVariant], Field( - description='Variant-level delivery breakdown. Each variant includes the rendered manifest and delivery metrics. For standard creatives, contains a single variant. For asset group optimization, one per combination. For generative creative, one per generated execution. Empty when a creative has no variants yet.' + description="Variant-level delivery breakdown. Each variant includes the rendered manifest and delivery metrics. For standard creatives, contains a single variant. For asset group optimization, one per combination. For generative creative, one per generated execution. Empty when a creative has no variants yet." ), ] class GetCreativeDeliveryResponse(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) account_id: Annotated[ str | None, Field( - description='Account identifier. Present when the response spans or is scoped to a specific account.' + description="Account identifier. Present when the response spans or is scoped to a specific account." ), ] = None context: context_1.ContextObject | None = None creatives: Annotated[ - list[Creative], Field(description='Creative delivery data with variant breakdowns') + list[Creative], Field(description="Creative delivery data with variant breakdowns") ] currency: Annotated[ str, Field( description="ISO 4217 currency code for monetary values in this response (e.g., 'USD', 'EUR')", - pattern='^[A-Z]{3}$', + pattern="^[A-Z]{3}$", ), ] errors: Annotated[ - list[error.Error] | None, Field(description='Task-specific errors and warnings') + list[error.Error] | None, Field(description="Task-specific errors and warnings") ] = None ext: ext_1.ExtensionObject | None = None media_buy_buyer_ref: Annotated[ @@ -117,7 +117,7 @@ class GetCreativeDeliveryResponse(AdCPBaseModel): pagination: Annotated[ Pagination | None, Field( - description='Pagination information. Present when the request included pagination parameters.' + description="Pagination information. Present when the request included pagination parameters." ), ] = None - reporting_period: Annotated[ReportingPeriod, Field(description='Date range for the report.')] + reporting_period: Annotated[ReportingPeriod, Field(description="Date range for the report.")] diff --git a/src/adcp/types/generated_poc/creative/get_creative_features_request.py b/src/adcp/types/generated_poc/creative/get_creative_features_request.py new file mode 100644 index 00000000..4ef22244 --- /dev/null +++ b/src/adcp/types/generated_poc/creative/get_creative_features_request.py @@ -0,0 +1,33 @@ +# generated by datamodel-codegen: +# filename: creative/get_creative_features_request.json +# timestamp: 2026-02-23T01:24:08+00:00 + +from __future__ import annotations + +from typing import Annotated + +from adcp.types.base import AdCPBaseModel +from pydantic import ConfigDict, Field + +from ..core import context as context_1 +from ..core import creative_manifest as creative_manifest_1 +from ..core import ext as ext_1 + + +class GetCreativeFeaturesRequest(AdCPBaseModel): + model_config = ConfigDict( + extra="forbid", + ) + context: context_1.ContextObject | None = None + creative_manifest: Annotated[ + creative_manifest_1.CreativeManifest, + Field(description="The creative manifest to evaluate. Contains format_id and assets."), + ] + ext: ext_1.ExtensionObject | None = None + feature_ids: Annotated[ + list[str] | None, + Field( + description="Optional filter to specific features. If omitted, returns all available features.", + min_length=1, + ), + ] = None diff --git a/src/adcp/types/generated_poc/creative/get_creative_features_response.py b/src/adcp/types/generated_poc/creative/get_creative_features_response.py new file mode 100644 index 00000000..af8a8c5d --- /dev/null +++ b/src/adcp/types/generated_poc/creative/get_creative_features_response.py @@ -0,0 +1,54 @@ +# generated by datamodel-codegen: +# filename: creative/get_creative_features_response.json +# timestamp: 2026-02-23T01:24:08+00:00 + +from __future__ import annotations + +from typing import Annotated, Any + +from adcp.types.base import AdCPBaseModel +from pydantic import AnyUrl, Field, RootModel + +from ..core import context as context_1 +from ..core import error +from ..core import ext as ext_1 +from . import creative_feature_result + + +class GetCreativeFeaturesResponse2(AdCPBaseModel): + context: context_1.ContextObject | None = None + errors: list[error.Error] + ext: ext_1.ExtensionObject | None = None + results: Annotated[ + Any | None, Field(description="Field must not be present in error response") + ] = None + + +class GetCreativeFeaturesResponse1(AdCPBaseModel): + context: context_1.ContextObject | None = None + detail_url: Annotated[ + AnyUrl | None, + Field( + description="URL to the vendor's full assessment report. The vendor controls what information is disclosed and access control." + ), + ] = None + errors: Annotated[ + Any | None, Field(description="Field must not be present in success response") + ] = None + ext: ext_1.ExtensionObject | None = None + results: Annotated[ + list[creative_feature_result.CreativeFeatureResult], + Field(description="Feature values for the evaluated creative"), + ] + + +class GetCreativeFeaturesResponse( + RootModel[GetCreativeFeaturesResponse1 | GetCreativeFeaturesResponse2] +): + root: Annotated[ + GetCreativeFeaturesResponse1 | GetCreativeFeaturesResponse2, + Field( + description="Response payload for get_creative_features task. Returns feature values for the evaluated creative.", + title="Get Creative Features Response", + ), + ] diff --git a/src/adcp/types/generated_poc/creative/list_creative_formats_request.py b/src/adcp/types/generated_poc/creative/list_creative_formats_request.py index 9fc5f88d..8ea0ef64 100644 --- a/src/adcp/types/generated_poc/creative/list_creative_formats_request.py +++ b/src/adcp/types/generated_poc/creative/list_creative_formats_request.py @@ -17,25 +17,25 @@ class AssetType(Enum): - image = 'image' - video = 'video' - audio = 'audio' - text = 'text' - html = 'html' - javascript = 'javascript' - url = 'url' + image = "image" + video = "video" + audio = "audio" + text = "text" + html = "html" + javascript = "javascript" + url = "url" class Type(Enum): - audio = 'audio' - video = 'video' - display = 'display' - dooh = 'dooh' + audio = "audio" + video = "video" + display = "display" + dooh = "dooh" class ListCreativeFormatsRequestCreativeAgent(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) asset_types: Annotated[ list[AssetType] | None, @@ -48,7 +48,7 @@ class ListCreativeFormatsRequestCreativeAgent(AdCPBaseModel): ext: ext_1.ExtensionObject | None = None format_ids: Annotated[ list[format_id.FormatId] | None, - Field(description='Return only these specific format IDs', min_length=1), + Field(description="Return only these specific format IDs", min_length=1), ] = None input_format_ids: Annotated[ list[format_id.FormatId] | None, @@ -60,35 +60,35 @@ class ListCreativeFormatsRequestCreativeAgent(AdCPBaseModel): is_responsive: Annotated[ bool | None, Field( - description='Filter for responsive formats that adapt to container size. When true, returns formats without fixed dimensions.' + description="Filter for responsive formats that adapt to container size. When true, returns formats without fixed dimensions." ), ] = None max_height: Annotated[ int | None, Field( - description='Maximum height in pixels (inclusive). Returns formats with height <= this value. Omit for responsive/fluid formats.' + description="Maximum height in pixels (inclusive). Returns formats with height <= this value. Omit for responsive/fluid formats." ), ] = None max_width: Annotated[ int | None, Field( - description='Maximum width in pixels (inclusive). Returns formats with width <= this value. Omit for responsive/fluid formats.' + description="Maximum width in pixels (inclusive). Returns formats with width <= this value. Omit for responsive/fluid formats." ), ] = None min_height: Annotated[ int | None, Field( - description='Minimum height in pixels (inclusive). Returns formats with height >= this value.' + description="Minimum height in pixels (inclusive). Returns formats with height >= this value." ), ] = None min_width: Annotated[ int | None, Field( - description='Minimum width in pixels (inclusive). Returns formats with width >= this value.' + description="Minimum width in pixels (inclusive). Returns formats with width >= this value." ), ] = None name_search: Annotated[ - str | None, Field(description='Search for formats by name (case-insensitive partial match)') + str | None, Field(description="Search for formats by name (case-insensitive partial match)") ] = None output_format_ids: Annotated[ list[format_id.FormatId] | None, @@ -101,12 +101,12 @@ class ListCreativeFormatsRequestCreativeAgent(AdCPBaseModel): type: Annotated[ Type | None, Field( - description='Filter by format type (technical categories with distinct requirements)' + description="Filter by format type (technical categories with distinct requirements)" ), ] = None wcag_level: Annotated[ wcag_level_1.WcagLevel | None, Field( - description='Filter to formats that meet at least this WCAG conformance level (A < AA < AAA)' + description="Filter to formats that meet at least this WCAG conformance level (A < AA < AAA)" ), ] = None diff --git a/src/adcp/types/generated_poc/creative/list_creative_formats_response.py b/src/adcp/types/generated_poc/creative/list_creative_formats_response.py index a0f46365..79572d51 100644 --- a/src/adcp/types/generated_poc/creative/list_creative_formats_response.py +++ b/src/adcp/types/generated_poc/creative/list_creative_formats_response.py @@ -18,7 +18,7 @@ class CreativeAgent(AdCPBaseModel): agent_name: Annotated[ - str | None, Field(description='Human-readable name for the creative agent') + str | None, Field(description="Human-readable name for the creative agent") ] = None agent_url: Annotated[ AnyUrl, @@ -28,23 +28,23 @@ class CreativeAgent(AdCPBaseModel): ] capabilities: Annotated[ list[creative_agent_capability.CreativeAgentCapability] | None, - Field(description='Capabilities this creative agent provides'), + Field(description="Capabilities this creative agent provides"), ] = None class ListCreativeFormatsResponseCreativeAgent(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None creative_agents: Annotated[ list[CreativeAgent] | None, Field( - description='Optional: Creative agents that provide additional formats. Buyers can recursively query these agents to discover more formats. No authentication required for list_creative_formats.' + description="Optional: Creative agents that provide additional formats. Buyers can recursively query these agents to discover more formats. No authentication required for list_creative_formats." ), ] = None errors: Annotated[ - list[error.Error] | None, Field(description='Task-specific errors and warnings') + list[error.Error] | None, Field(description="Task-specific errors and warnings") ] = None ext: ext_1.ExtensionObject | None = None formats: Annotated[ diff --git a/src/adcp/types/generated_poc/creative/preview_creative_request.py b/src/adcp/types/generated_poc/creative/preview_creative_request.py index 5d04a9eb..a6d54605 100644 --- a/src/adcp/types/generated_poc/creative/preview_creative_request.py +++ b/src/adcp/types/generated_poc/creative/preview_creative_request.py @@ -18,7 +18,7 @@ class Input(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context_description: Annotated[ str | None, @@ -42,24 +42,24 @@ class Input(AdCPBaseModel): class Input2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context_description: Annotated[ str | None, - Field(description='Natural language description of the context for AI-generated content'), + Field(description="Natural language description of the context for AI-generated content"), ] = None macros: Annotated[ - dict[str, str] | None, Field(description='Macro values to use for this preview') + dict[str, str] | None, Field(description="Macro values to use for this preview") ] = None - name: Annotated[str, Field(description='Human-readable name for this input set')] + name: Annotated[str, Field(description="Human-readable name for this input set")] class PreviewCreativeRequest3(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None - creative_id: Annotated[str | None, Field(description='Creative identifier for context')] = None + creative_id: Annotated[str | None, Field(description="Creative identifier for context")] = None ext: ext_1.ExtensionObject | None = None output_format: Annotated[ preview_output_format.PreviewOutputFormat | None, @@ -68,37 +68,37 @@ class PreviewCreativeRequest3(AdCPBaseModel): ), ] = preview_output_format.PreviewOutputFormat.url request_type: Annotated[ - Literal['variant'], - Field(description='Discriminator indicating this is a variant preview request'), + Literal["variant"], + Field(description="Discriminator indicating this is a variant preview request"), ] variant_id: Annotated[ str, Field( - description='Platform-assigned variant identifier from get_creative_delivery response' + description="Platform-assigned variant identifier from get_creative_delivery response" ), ] class PreviewCreativeRequest1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None creative_manifest: Annotated[ creative_manifest_1.CreativeManifest, - Field(description='Complete creative manifest with all required assets for the format'), + Field(description="Complete creative manifest with all required assets for the format"), ] ext: ext_1.ExtensionObject | None = None format_id: Annotated[ format_id_1.FormatId | None, Field( - description='Format identifier for rendering the preview. Optional — defaults to creative_manifest_1.format_id if omitted.' + description="Format identifier for rendering the preview. Optional — defaults to creative_manifest_1.format_id if omitted." ), ] = None inputs: Annotated[ list[Input] | None, Field( - description='Array of input sets for generating multiple preview variants. Each input set defines macros and context values for one preview rendering. If not provided, creative agent will generate default previews.', + description="Array of input sets for generating multiple preview variants. Each input set defines macros and context values for one preview rendering. If not provided, creative agent will generate default previews.", min_length=1, ), ] = None @@ -109,32 +109,32 @@ class PreviewCreativeRequest1(AdCPBaseModel): ), ] = preview_output_format.PreviewOutputFormat.url request_type: Annotated[ - Literal['single'], - Field(description='Discriminator indicating this is a single preview request'), + Literal["single"], + Field(description="Discriminator indicating this is a single preview request"), ] template_id: Annotated[ - str | None, Field(description='Specific template ID for custom format rendering') + str | None, Field(description="Specific template ID for custom format rendering") ] = None class Request(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) creative_manifest: Annotated[ creative_manifest_1.CreativeManifest, - Field(description='Complete creative manifest with all required assets'), + Field(description="Complete creative manifest with all required assets"), ] format_id: Annotated[ format_id_1.FormatId | None, Field( - description='Format identifier for rendering the preview. Optional — defaults to creative_manifest_1.format_id if omitted.' + description="Format identifier for rendering the preview. Optional — defaults to creative_manifest_1.format_id if omitted." ), ] = None inputs: Annotated[ list[Input2] | None, Field( - description='Array of input sets for generating multiple preview variants', min_length=1 + description="Array of input sets for generating multiple preview variants", min_length=1 ), ] = None output_format: Annotated[ @@ -144,13 +144,13 @@ class Request(AdCPBaseModel): ), ] = preview_output_format.PreviewOutputFormat.url template_id: Annotated[ - str | None, Field(description='Specific template ID for custom format rendering') + str | None, Field(description="Specific template ID for custom format rendering") ] = None class PreviewCreativeRequest2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None @@ -161,13 +161,13 @@ class PreviewCreativeRequest2(AdCPBaseModel): ), ] = preview_output_format.PreviewOutputFormat.url request_type: Annotated[ - Literal['batch'], - Field(description='Discriminator indicating this is a batch preview request'), + Literal["batch"], + Field(description="Discriminator indicating this is a batch preview request"), ] requests: Annotated[ list[Request], Field( - description='Array of preview requests (1-50 items). Each follows the single request structure.', + description="Array of preview requests (1-50 items). Each follows the single request structure.", max_length=50, min_length=1, ), @@ -180,8 +180,8 @@ class PreviewCreativeRequest( root: Annotated[ PreviewCreativeRequest1 | PreviewCreativeRequest2 | PreviewCreativeRequest3, Field( - discriminator='request_type', - description='Request to generate previews of one or more creative manifests. Accepts either a single creative request or an array of requests for batch processing.', - title='Preview Creative Request', + discriminator="request_type", + description="Request to generate previews of one or more creative manifests. Accepts either a single creative request or an array of requests for batch processing.", + title="Preview Creative Request", ), ] diff --git a/src/adcp/types/generated_poc/creative/preview_creative_response.py b/src/adcp/types/generated_poc/creative/preview_creative_response.py index 0cc97722..fed42d96 100644 --- a/src/adcp/types/generated_poc/creative/preview_creative_response.py +++ b/src/adcp/types/generated_poc/creative/preview_creative_response.py @@ -17,12 +17,12 @@ class Input(AdCPBaseModel): context_description: Annotated[ - str | None, Field(description='Context description applied to this variant') + str | None, Field(description="Context description applied to this variant") ] = None macros: Annotated[ - dict[str, str] | None, Field(description='Macro values applied to this variant') + dict[str, str] | None, Field(description="Macro values applied to this variant") ] = None - name: Annotated[str, Field(description='Human-readable name for this variant')] + name: Annotated[str, Field(description="Human-readable name for this variant")] class Error(AdCPBaseModel): @@ -32,8 +32,8 @@ class Error(AdCPBaseModel): description="Error code (e.g., 'invalid_manifest', 'unsupported_format', 'missing_assets')" ), ] - details: Annotated[dict[str, Any] | None, Field(description='Additional error context')] = None - message: Annotated[str, Field(description='Human-readable error message')] + details: Annotated[dict[str, Any] | None, Field(description="Additional error context")] = None + message: Annotated[str, Field(description="Human-readable error message")] class Input4(AdCPBaseModel): @@ -46,14 +46,14 @@ class Preview(AdCPBaseModel): input: Annotated[ Input, Field( - description='The input parameters that generated this preview variant. Echoes back the request input or shows defaults used.' + description="The input parameters that generated this preview variant. Echoes back the request input or shows defaults used." ), ] - preview_id: Annotated[str, Field(description='Unique identifier for this preview variant')] + preview_id: Annotated[str, Field(description="Unique identifier for this preview variant")] renders: Annotated[ list[preview_render.PreviewRender], Field( - description='Array of rendered pieces for this preview variant. Most formats render as a single piece. Companion ad formats (video + banner), multi-placement formats, and adaptive formats render as multiple pieces.', + description="Array of rendered pieces for this preview variant. Most formats render as a single piece. Companion ad formats (video + banner), multi-placement formats, and adaptive formats render as multiple pieces.", min_length=1, ), ] @@ -61,29 +61,29 @@ class Preview(AdCPBaseModel): class PreviewCreativeResponse1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None expires_at: Annotated[ - AwareDatetime, Field(description='ISO 8601 timestamp when preview links expire') + AwareDatetime, Field(description="ISO 8601 timestamp when preview links expire") ] ext: ext_1.ExtensionObject | None = None interactive_url: Annotated[ AnyUrl | None, Field( - description='Optional URL to an interactive testing page that shows all preview variants with controls to switch between them, modify macro values, and test different scenarios.' + description="Optional URL to an interactive testing page that shows all preview variants with controls to switch between them, modify macro values, and test different scenarios." ), ] = None previews: Annotated[ list[Preview], Field( - description='Array of preview variants. Each preview corresponds to an input set from the request. If no inputs were provided, returns a single default preview.', + description="Array of preview variants. Each preview corresponds to an input set from the request. If no inputs were provided, returns a single default preview.", min_length=1, ), ] response_type: Annotated[ - Literal['single'], - Field(description='Discriminator indicating this is a single preview response'), + Literal["single"], + Field(description="Discriminator indicating this is a single preview response"), ] @@ -98,16 +98,16 @@ class Response(AdCPBaseModel): interactive_url: AnyUrl | None = None previews: Annotated[ list[Preview1], - Field(description='Array of preview variants for this creative', min_length=1), + Field(description="Array of preview variants for this creative", min_length=1), ] class Results(AdCPBaseModel): - error: Annotated[Error | None, Field(description='Error information for failed requests')] = ( + error: Annotated[Error | None, Field(description="Error information for failed requests")] = ( None ) - response: Annotated[Response, Field(description='Preview response for successful requests')] - success: Annotated[Literal[True], Field(description='Whether this preview request succeeded')] + response: Annotated[Response, Field(description="Preview response for successful requests")] + success: Annotated[Literal[True], Field(description="Whether this preview request succeeded")] class Preview2(Preview1): @@ -119,75 +119,75 @@ class Response1(AdCPBaseModel): interactive_url: AnyUrl | None = None previews: Annotated[ list[Preview2], - Field(description='Array of preview variants for this creative', min_length=1), + Field(description="Array of preview variants for this creative", min_length=1), ] class Results1(AdCPBaseModel): - error: Annotated[Error, Field(description='Error information for failed requests')] + error: Annotated[Error, Field(description="Error information for failed requests")] response: Annotated[ - Response1 | None, Field(description='Preview response for successful requests') + Response1 | None, Field(description="Preview response for successful requests") ] = None - success: Annotated[Literal[False], Field(description='Whether this preview request succeeded')] + success: Annotated[Literal[False], Field(description="Whether this preview request succeeded")] class PreviewCreativeResponse2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None response_type: Annotated[ - Literal['batch'], - Field(description='Discriminator indicating this is a batch preview response'), + Literal["batch"], + Field(description="Discriminator indicating this is a batch preview response"), ] results: Annotated[ list[Results | Results1], Field( - description='Array of preview results corresponding to each request in the same order. results[0] is the result for requests[0], results[1] for requests[1], etc. Order is guaranteed even when some requests fail. Each result contains either a successful preview response or an error.', + description="Array of preview results corresponding to each request in the same order. results[0] is the result for requests[0], results[1] for requests[1], etc. Order is guaranteed even when some requests fail. Each result contains either a successful preview response or an error.", min_length=1, ), ] class Preview3(AdCPBaseModel): - preview_id: Annotated[str, Field(description='Unique identifier for this preview')] + preview_id: Annotated[str, Field(description="Unique identifier for this preview")] renders: Annotated[ list[preview_render.PreviewRender], - Field(description='Rendered pieces for this variant', min_length=1), + Field(description="Rendered pieces for this variant", min_length=1), ] class PreviewCreativeResponse3(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None creative_id: Annotated[ - str | None, Field(description='Creative identifier this variant belongs to') + str | None, Field(description="Creative identifier this variant belongs to") ] = None expires_at: Annotated[ - AwareDatetime | None, Field(description='ISO 8601 timestamp when preview links expire') + AwareDatetime | None, Field(description="ISO 8601 timestamp when preview links expire") ] = None ext: ext_1.ExtensionObject | None = None manifest: Annotated[ creative_manifest.CreativeManifest | None, Field( - description='The rendered creative manifest for this variant — the actual output that was served, not the input assets' + description="The rendered creative manifest for this variant — the actual output that was served, not the input assets" ), ] = None previews: Annotated[ list[Preview3], Field( - description='Array of rendered pieces for this variant. Most formats render as a single piece.', + description="Array of rendered pieces for this variant. Most formats render as a single piece.", min_length=1, ), ] response_type: Annotated[ - Literal['variant'], - Field(description='Discriminator indicating this is a variant preview response'), + Literal["variant"], + Field(description="Discriminator indicating this is a variant preview response"), ] - variant_id: Annotated[str, Field(description='Platform-assigned variant identifier')] + variant_id: Annotated[str, Field(description="Platform-assigned variant identifier")] class PreviewCreativeResponse( @@ -196,7 +196,7 @@ class PreviewCreativeResponse( root: Annotated[ PreviewCreativeResponse1 | PreviewCreativeResponse2 | PreviewCreativeResponse3, Field( - description='Response containing preview links for one or more creatives. Format matches the request: single preview response for single requests, batch results for batch requests.', - title='Preview Creative Response', + description="Response containing preview links for one or more creatives. Format matches the request: single preview response for single requests, batch results for batch requests.", + title="Preview Creative Response", ), ] diff --git a/src/adcp/types/generated_poc/creative/preview_render.py b/src/adcp/types/generated_poc/creative/preview_render.py index 4650e833..36523a28 100644 --- a/src/adcp/types/generated_poc/creative/preview_render.py +++ b/src/adcp/types/generated_poc/creative/preview_render.py @@ -17,7 +17,7 @@ class Dimensions(AdCPBaseModel): class Embedding(AdCPBaseModel): csp_policy: Annotated[ - str | None, Field(description='Content Security Policy requirements for embedding') + str | None, Field(description="Content Security Policy requirements for embedding") ] = None recommended_sandbox: Annotated[ str | None, @@ -26,35 +26,35 @@ class Embedding(AdCPBaseModel): ), ] = None requires_https: Annotated[ - bool | None, Field(description='Whether this output requires HTTPS for secure embedding') + bool | None, Field(description="Whether this output requires HTTPS for secure embedding") ] = None supports_fullscreen: Annotated[ - bool | None, Field(description='Whether this output supports fullscreen mode') + bool | None, Field(description="Whether this output supports fullscreen mode") ] = None class PreviewRender1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) dimensions: Annotated[ - Dimensions | None, Field(description='Dimensions for this rendered piece') + Dimensions | None, Field(description="Dimensions for this rendered piece") ] = None embedding: Annotated[ Embedding | None, - Field(description='Optional security and embedding metadata for safe iframe integration'), + Field(description="Optional security and embedding metadata for safe iframe integration"), ] = None output_format: Annotated[ - Literal['url'], Field(description='Discriminator indicating preview_url is provided') + Literal["url"], Field(description="Discriminator indicating preview_url is provided") ] preview_url: Annotated[ AnyUrl, Field( - description='URL to an HTML page that renders this piece. Can be embedded in an iframe.' + description="URL to an HTML page that renders this piece. Can be embedded in an iframe." ), ] render_id: Annotated[ - str, Field(description='Unique identifier for this rendered piece within the variant') + str, Field(description="Unique identifier for this rendered piece within the variant") ] role: Annotated[ str, @@ -66,25 +66,25 @@ class PreviewRender1(AdCPBaseModel): class PreviewRender2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) dimensions: Annotated[ - Dimensions | None, Field(description='Dimensions for this rendered piece') + Dimensions | None, Field(description="Dimensions for this rendered piece") ] = None embedding: Annotated[ - Embedding | None, Field(description='Optional security and embedding metadata') + Embedding | None, Field(description="Optional security and embedding metadata") ] = None output_format: Annotated[ - Literal['html'], Field(description='Discriminator indicating preview_html is provided') + Literal["html"], Field(description="Discriminator indicating preview_html is provided") ] preview_html: Annotated[ str, Field( - description='Raw HTML for this rendered piece. Can be embedded directly in the page without iframe. Security warning: Only use with trusted creative agents as this bypasses iframe sandboxing.' + description="Raw HTML for this rendered piece. Can be embedded directly in the page without iframe. Security warning: Only use with trusted creative agents as this bypasses iframe sandboxing." ), ] render_id: Annotated[ - str, Field(description='Unique identifier for this rendered piece within the variant') + str, Field(description="Unique identifier for this rendered piece within the variant") ] role: Annotated[ str, @@ -96,35 +96,35 @@ class PreviewRender2(AdCPBaseModel): class PreviewRender3(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) dimensions: Annotated[ - Dimensions | None, Field(description='Dimensions for this rendered piece') + Dimensions | None, Field(description="Dimensions for this rendered piece") ] = None embedding: Annotated[ Embedding | None, - Field(description='Optional security and embedding metadata for safe iframe integration'), + Field(description="Optional security and embedding metadata for safe iframe integration"), ] = None output_format: Annotated[ - Literal['both'], + Literal["both"], Field( - description='Discriminator indicating both preview_url and preview_html are provided' + description="Discriminator indicating both preview_url and preview_html are provided" ), ] preview_html: Annotated[ str, Field( - description='Raw HTML for this rendered piece. Can be embedded directly in the page without iframe. Security warning: Only use with trusted creative agents as this bypasses iframe sandboxing.' + description="Raw HTML for this rendered piece. Can be embedded directly in the page without iframe. Security warning: Only use with trusted creative agents as this bypasses iframe sandboxing." ), ] preview_url: Annotated[ AnyUrl, Field( - description='URL to an HTML page that renders this piece. Can be embedded in an iframe.' + description="URL to an HTML page that renders this piece. Can be embedded in an iframe." ), ] render_id: Annotated[ - str, Field(description='Unique identifier for this rendered piece within the variant') + str, Field(description="Unique identifier for this rendered piece within the variant") ] role: Annotated[ str, @@ -138,7 +138,7 @@ class PreviewRender(RootModel[PreviewRender1 | PreviewRender2 | PreviewRender3]) root: Annotated[ PreviewRender1 | PreviewRender2 | PreviewRender3, Field( - description='A single rendered piece of a creative preview with discriminated output format', - title='Preview Render', + description="A single rendered piece of a creative preview with discriminated output format", + title="Preview Render", ), ] diff --git a/src/adcp/types/generated_poc/enums/action_source.py b/src/adcp/types/generated_poc/enums/action_source.py index 1ab137ca..64cfcff6 100644 --- a/src/adcp/types/generated_poc/enums/action_source.py +++ b/src/adcp/types/generated_poc/enums/action_source.py @@ -8,12 +8,12 @@ class ActionSource(Enum): - website = 'website' - app = 'app' - offline = 'offline' - phone_call = 'phone_call' - chat = 'chat' - email = 'email' - in_store = 'in_store' - system_generated = 'system_generated' - other = 'other' + website = "website" + app = "app" + offline = "offline" + phone_call = "phone_call" + chat = "chat" + email = "email" + in_store = "in_store" + system_generated = "system_generated" + other = "other" diff --git a/src/adcp/types/generated_poc/enums/adcp_domain.py b/src/adcp/types/generated_poc/enums/adcp_domain.py index ca7e783f..25ca8b51 100644 --- a/src/adcp/types/generated_poc/enums/adcp_domain.py +++ b/src/adcp/types/generated_poc/enums/adcp_domain.py @@ -8,7 +8,7 @@ class AdcpDomain(Enum): - media_buy = 'media-buy' - signals = 'signals' - governance = 'governance' - creative = 'creative' + media_buy = "media-buy" + signals = "signals" + governance = "governance" + creative = "creative" diff --git a/src/adcp/types/generated_poc/enums/age_verification_method.py b/src/adcp/types/generated_poc/enums/age_verification_method.py index 8b3c4dee..a7e91537 100644 --- a/src/adcp/types/generated_poc/enums/age_verification_method.py +++ b/src/adcp/types/generated_poc/enums/age_verification_method.py @@ -8,8 +8,8 @@ class AgeVerificationMethod(Enum): - facial_age_estimation = 'facial_age_estimation' - id_document = 'id_document' - digital_id = 'digital_id' - credit_card = 'credit_card' - world_id = 'world_id' + facial_age_estimation = "facial_age_estimation" + id_document = "id_document" + digital_id = "digital_id" + credit_card = "credit_card" + world_id = "world_id" diff --git a/src/adcp/types/generated_poc/enums/asset_content_type.py b/src/adcp/types/generated_poc/enums/asset_content_type.py index e34f09dd..c0412bcd 100644 --- a/src/adcp/types/generated_poc/enums/asset_content_type.py +++ b/src/adcp/types/generated_poc/enums/asset_content_type.py @@ -8,15 +8,15 @@ class AssetContentType(Enum): - image = 'image' - video = 'video' - audio = 'audio' - text = 'text' - markdown = 'markdown' - html = 'html' - css = 'css' - javascript = 'javascript' - vast = 'vast' - daast = 'daast' - url = 'url' - webhook = 'webhook' + image = "image" + video = "video" + audio = "audio" + text = "text" + markdown = "markdown" + html = "html" + css = "css" + javascript = "javascript" + vast = "vast" + daast = "daast" + url = "url" + webhook = "webhook" diff --git a/src/adcp/types/generated_poc/enums/attribution_model.py b/src/adcp/types/generated_poc/enums/attribution_model.py index ee94979c..fd685d72 100644 --- a/src/adcp/types/generated_poc/enums/attribution_model.py +++ b/src/adcp/types/generated_poc/enums/attribution_model.py @@ -8,8 +8,8 @@ class AttributionModel(Enum): - last_touch = 'last_touch' - first_touch = 'first_touch' - linear = 'linear' - time_decay = 'time_decay' - data_driven = 'data_driven' + last_touch = "last_touch" + first_touch = "first_touch" + linear = "linear" + time_decay = "time_decay" + data_driven = "data_driven" diff --git a/src/adcp/types/generated_poc/enums/auth_scheme.py b/src/adcp/types/generated_poc/enums/auth_scheme.py index 14e674bc..2666b784 100644 --- a/src/adcp/types/generated_poc/enums/auth_scheme.py +++ b/src/adcp/types/generated_poc/enums/auth_scheme.py @@ -8,5 +8,5 @@ class AuthenticationScheme(Enum): - Bearer = 'Bearer' - HMAC_SHA256 = 'HMAC-SHA256' + Bearer = "Bearer" + HMAC_SHA256 = "HMAC-SHA256" diff --git a/src/adcp/types/generated_poc/enums/available_metric.py b/src/adcp/types/generated_poc/enums/available_metric.py index dd514089..bcb762b4 100644 --- a/src/adcp/types/generated_poc/enums/available_metric.py +++ b/src/adcp/types/generated_poc/enums/available_metric.py @@ -8,25 +8,25 @@ class AvailableMetric(Enum): - impressions = 'impressions' - spend = 'spend' - clicks = 'clicks' - ctr = 'ctr' - video_completions = 'video_completions' - completion_rate = 'completion_rate' - conversions = 'conversions' - conversion_value = 'conversion_value' - roas = 'roas' - cost_per_acquisition = 'cost_per_acquisition' - new_to_brand_rate = 'new_to_brand_rate' - viewability = 'viewability' - engagement_rate = 'engagement_rate' - views = 'views' - completed_views = 'completed_views' - leads = 'leads' - reach = 'reach' - frequency = 'frequency' - grps = 'grps' - quartile_data = 'quartile_data' - dooh_metrics = 'dooh_metrics' - cost_per_click = 'cost_per_click' + impressions = "impressions" + spend = "spend" + clicks = "clicks" + ctr = "ctr" + video_completions = "video_completions" + completion_rate = "completion_rate" + conversions = "conversions" + conversion_value = "conversion_value" + roas = "roas" + cost_per_acquisition = "cost_per_acquisition" + new_to_brand_rate = "new_to_brand_rate" + viewability = "viewability" + engagement_rate = "engagement_rate" + views = "views" + completed_views = "completed_views" + leads = "leads" + reach = "reach" + frequency = "frequency" + grps = "grps" + quartile_data = "quartile_data" + dooh_metrics = "dooh_metrics" + cost_per_click = "cost_per_click" diff --git a/src/adcp/types/generated_poc/enums/catalog_action.py b/src/adcp/types/generated_poc/enums/catalog_action.py index 6b5bb06b..7f31711f 100644 --- a/src/adcp/types/generated_poc/enums/catalog_action.py +++ b/src/adcp/types/generated_poc/enums/catalog_action.py @@ -8,8 +8,8 @@ class CatalogAction(Enum): - created = 'created' - updated = 'updated' - unchanged = 'unchanged' - failed = 'failed' - deleted = 'deleted' + created = "created" + updated = "updated" + unchanged = "unchanged" + failed = "failed" + deleted = "deleted" diff --git a/src/adcp/types/generated_poc/enums/catalog_item_status.py b/src/adcp/types/generated_poc/enums/catalog_item_status.py index 8c972d69..b917f57a 100644 --- a/src/adcp/types/generated_poc/enums/catalog_item_status.py +++ b/src/adcp/types/generated_poc/enums/catalog_item_status.py @@ -8,7 +8,7 @@ class CatalogItemStatus(Enum): - approved = 'approved' - pending = 'pending' - rejected = 'rejected' - warning = 'warning' + approved = "approved" + pending = "pending" + rejected = "rejected" + warning = "warning" diff --git a/src/adcp/types/generated_poc/enums/catalog_type.py b/src/adcp/types/generated_poc/enums/catalog_type.py index 9b41ca41..efc76377 100644 --- a/src/adcp/types/generated_poc/enums/catalog_type.py +++ b/src/adcp/types/generated_poc/enums/catalog_type.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/catalog_type.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:24:08+00:00 from __future__ import annotations @@ -8,15 +8,16 @@ class CatalogType(Enum): - offering = 'offering' - product = 'product' - inventory = 'inventory' - store = 'store' - promotion = 'promotion' - hotel = 'hotel' - flight = 'flight' - job = 'job' - vehicle = 'vehicle' - real_estate = 'real_estate' - education = 'education' - destination = 'destination' + offering = "offering" + product = "product" + inventory = "inventory" + store = "store" + promotion = "promotion" + hotel = "hotel" + flight = "flight" + job = "job" + vehicle = "vehicle" + real_estate = "real_estate" + education = "education" + destination = "destination" + app = "app" diff --git a/src/adcp/types/generated_poc/enums/channels.py b/src/adcp/types/generated_poc/enums/channels.py index 015b6137..6e61bf01 100644 --- a/src/adcp/types/generated_poc/enums/channels.py +++ b/src/adcp/types/generated_poc/enums/channels.py @@ -8,22 +8,22 @@ class MediaChannel(Enum): - display = 'display' - olv = 'olv' - social = 'social' - search = 'search' - ctv = 'ctv' - linear_tv = 'linear_tv' - radio = 'radio' - streaming_audio = 'streaming_audio' - podcast = 'podcast' - dooh = 'dooh' - ooh = 'ooh' - print = 'print' - cinema = 'cinema' - email = 'email' - gaming = 'gaming' - retail_media = 'retail_media' - influencer = 'influencer' - affiliate = 'affiliate' - product_placement = 'product_placement' + display = "display" + olv = "olv" + social = "social" + search = "search" + ctv = "ctv" + linear_tv = "linear_tv" + radio = "radio" + streaming_audio = "streaming_audio" + podcast = "podcast" + dooh = "dooh" + ooh = "ooh" + print = "print" + cinema = "cinema" + email = "email" + gaming = "gaming" + retail_media = "retail_media" + influencer = "influencer" + affiliate = "affiliate" + product_placement = "product_placement" diff --git a/src/adcp/types/generated_poc/enums/co_branding_requirement.py b/src/adcp/types/generated_poc/enums/co_branding_requirement.py index d2abed3c..e43be9ac 100644 --- a/src/adcp/types/generated_poc/enums/co_branding_requirement.py +++ b/src/adcp/types/generated_poc/enums/co_branding_requirement.py @@ -8,6 +8,6 @@ class CoBrandingRequirement(Enum): - required = 'required' - optional = 'optional' - none = 'none' + required = "required" + optional = "optional" + none = "none" diff --git a/src/adcp/types/generated_poc/enums/content_id_type.py b/src/adcp/types/generated_poc/enums/content_id_type.py index 0369db3f..8fcf3001 100644 --- a/src/adcp/types/generated_poc/enums/content_id_type.py +++ b/src/adcp/types/generated_poc/enums/content_id_type.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/content_id_type.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:24:08+00:00 from __future__ import annotations @@ -8,14 +8,15 @@ class ContentIdType(Enum): - sku = 'sku' - gtin = 'gtin' - offering_id = 'offering_id' - job_id = 'job_id' - hotel_id = 'hotel_id' - flight_id = 'flight_id' - vehicle_id = 'vehicle_id' - listing_id = 'listing_id' - store_id = 'store_id' - program_id = 'program_id' - destination_id = 'destination_id' + sku = "sku" + gtin = "gtin" + offering_id = "offering_id" + job_id = "job_id" + hotel_id = "hotel_id" + flight_id = "flight_id" + vehicle_id = "vehicle_id" + listing_id = "listing_id" + store_id = "store_id" + program_id = "program_id" + destination_id = "destination_id" + app_id = "app_id" diff --git a/src/adcp/types/generated_poc/enums/creative_action.py b/src/adcp/types/generated_poc/enums/creative_action.py index 23c9ca7b..c08e37c4 100644 --- a/src/adcp/types/generated_poc/enums/creative_action.py +++ b/src/adcp/types/generated_poc/enums/creative_action.py @@ -8,8 +8,8 @@ class CreativeAction(Enum): - created = 'created' - updated = 'updated' - unchanged = 'unchanged' - failed = 'failed' - deleted = 'deleted' + created = "created" + updated = "updated" + unchanged = "unchanged" + failed = "failed" + deleted = "deleted" diff --git a/src/adcp/types/generated_poc/enums/creative_agent_capability.py b/src/adcp/types/generated_poc/enums/creative_agent_capability.py index c5b9fdc6..a9fd323b 100644 --- a/src/adcp/types/generated_poc/enums/creative_agent_capability.py +++ b/src/adcp/types/generated_poc/enums/creative_agent_capability.py @@ -8,8 +8,8 @@ class CreativeAgentCapability(Enum): - validation = 'validation' - assembly = 'assembly' - generation = 'generation' - preview = 'preview' - delivery = 'delivery' + validation = "validation" + assembly = "assembly" + generation = "generation" + preview = "preview" + delivery = "delivery" diff --git a/src/adcp/types/generated_poc/enums/creative_approval_status.py b/src/adcp/types/generated_poc/enums/creative_approval_status.py new file mode 100644 index 00000000..e0f8db82 --- /dev/null +++ b/src/adcp/types/generated_poc/enums/creative_approval_status.py @@ -0,0 +1,13 @@ +# generated by datamodel-codegen: +# filename: enums/creative_approval_status.json +# timestamp: 2026-02-23T01:24:08+00:00 + +from __future__ import annotations + +from enum import Enum + + +class CreativeApprovalStatus(Enum): + pending_review = "pending_review" + approved = "approved" + rejected = "rejected" diff --git a/src/adcp/types/generated_poc/enums/creative_sort_field.py b/src/adcp/types/generated_poc/enums/creative_sort_field.py index cbd6aa5a..8e3124ee 100644 --- a/src/adcp/types/generated_poc/enums/creative_sort_field.py +++ b/src/adcp/types/generated_poc/enums/creative_sort_field.py @@ -8,9 +8,9 @@ class CreativeSortField(Enum): - created_date = 'created_date' - updated_date = 'updated_date' - name = 'name' - status = 'status' - assignment_count = 'assignment_count' - performance_score = 'performance_score' + created_date = "created_date" + updated_date = "updated_date" + name = "name" + status = "status" + assignment_count = "assignment_count" + performance_score = "performance_score" diff --git a/src/adcp/types/generated_poc/enums/creative_status.py b/src/adcp/types/generated_poc/enums/creative_status.py index 60e16b8d..37d538f4 100644 --- a/src/adcp/types/generated_poc/enums/creative_status.py +++ b/src/adcp/types/generated_poc/enums/creative_status.py @@ -8,8 +8,8 @@ class CreativeStatus(Enum): - processing = 'processing' - approved = 'approved' - rejected = 'rejected' - pending_review = 'pending_review' - archived = 'archived' + processing = "processing" + approved = "approved" + rejected = "rejected" + pending_review = "pending_review" + archived = "archived" diff --git a/src/adcp/types/generated_poc/enums/daast_tracking_event.py b/src/adcp/types/generated_poc/enums/daast_tracking_event.py index de3a19ea..84467b26 100644 --- a/src/adcp/types/generated_poc/enums/daast_tracking_event.py +++ b/src/adcp/types/generated_poc/enums/daast_tracking_event.py @@ -8,14 +8,14 @@ class DaastTrackingEvent(Enum): - start = 'start' - firstQuartile = 'firstQuartile' - midpoint = 'midpoint' - thirdQuartile = 'thirdQuartile' - complete = 'complete' - impression = 'impression' - pause = 'pause' - resume = 'resume' - skip = 'skip' - mute = 'mute' - unmute = 'unmute' + start = "start" + firstQuartile = "firstQuartile" + midpoint = "midpoint" + thirdQuartile = "thirdQuartile" + complete = "complete" + impression = "impression" + pause = "pause" + resume = "resume" + skip = "skip" + mute = "mute" + unmute = "unmute" diff --git a/src/adcp/types/generated_poc/enums/daast_version.py b/src/adcp/types/generated_poc/enums/daast_version.py index b3c17eb4..df43e4c3 100644 --- a/src/adcp/types/generated_poc/enums/daast_version.py +++ b/src/adcp/types/generated_poc/enums/daast_version.py @@ -8,5 +8,5 @@ class DaastVersion(Enum): - field_1_0 = '1.0' - field_1_1 = '1.1' + field_1_0 = "1.0" + field_1_1 = "1.1" diff --git a/src/adcp/types/generated_poc/enums/day_of_week.py b/src/adcp/types/generated_poc/enums/day_of_week.py index 5dd94a9e..4c80ea54 100644 --- a/src/adcp/types/generated_poc/enums/day_of_week.py +++ b/src/adcp/types/generated_poc/enums/day_of_week.py @@ -8,10 +8,10 @@ class DayOfWeek(Enum): - monday = 'monday' - tuesday = 'tuesday' - wednesday = 'wednesday' - thursday = 'thursday' - friday = 'friday' - saturday = 'saturday' - sunday = 'sunday' + monday = "monday" + tuesday = "tuesday" + wednesday = "wednesday" + thursday = "thursday" + friday = "friday" + saturday = "saturday" + sunday = "sunday" diff --git a/src/adcp/types/generated_poc/enums/delivery_type.py b/src/adcp/types/generated_poc/enums/delivery_type.py index de0c0adc..0dfe5b3d 100644 --- a/src/adcp/types/generated_poc/enums/delivery_type.py +++ b/src/adcp/types/generated_poc/enums/delivery_type.py @@ -8,5 +8,5 @@ class DeliveryType(Enum): - guaranteed = 'guaranteed' - non_guaranteed = 'non_guaranteed' + guaranteed = "guaranteed" + non_guaranteed = "non_guaranteed" diff --git a/src/adcp/types/generated_poc/enums/demographic_system.py b/src/adcp/types/generated_poc/enums/demographic_system.py index 12b47719..e8102d67 100644 --- a/src/adcp/types/generated_poc/enums/demographic_system.py +++ b/src/adcp/types/generated_poc/enums/demographic_system.py @@ -8,9 +8,9 @@ class DemographicSystem(Enum): - nielsen = 'nielsen' - barb = 'barb' - agf = 'agf' - oztam = 'oztam' - mediametrie = 'mediametrie' - custom = 'custom' + nielsen = "nielsen" + barb = "barb" + agf = "agf" + oztam = "oztam" + mediametrie = "mediametrie" + custom = "custom" diff --git a/src/adcp/types/generated_poc/enums/device_platform.py b/src/adcp/types/generated_poc/enums/device_platform.py index 44dc3ea3..2f95dab0 100644 --- a/src/adcp/types/generated_poc/enums/device_platform.py +++ b/src/adcp/types/generated_poc/enums/device_platform.py @@ -8,15 +8,15 @@ class DevicePlatform(Enum): - ios = 'ios' - android = 'android' - windows = 'windows' - macos = 'macos' - linux = 'linux' - chromeos = 'chromeos' - tvos = 'tvos' - tizen = 'tizen' - webos = 'webos' - fire_os = 'fire_os' - roku_os = 'roku_os' - unknown = 'unknown' + ios = "ios" + android = "android" + windows = "windows" + macos = "macos" + linux = "linux" + chromeos = "chromeos" + tvos = "tvos" + tizen = "tizen" + webos = "webos" + fire_os = "fire_os" + roku_os = "roku_os" + unknown = "unknown" diff --git a/src/adcp/types/generated_poc/enums/dimension_unit.py b/src/adcp/types/generated_poc/enums/dimension_unit.py index cb86bd51..6cc186c2 100644 --- a/src/adcp/types/generated_poc/enums/dimension_unit.py +++ b/src/adcp/types/generated_poc/enums/dimension_unit.py @@ -8,7 +8,7 @@ class DimensionUnit(Enum): - px = 'px' - dp = 'dp' - inches = 'inches' - cm = 'cm' + px = "px" + dp = "dp" + inches = "inches" + cm = "cm" diff --git a/src/adcp/types/generated_poc/enums/distance_unit.py b/src/adcp/types/generated_poc/enums/distance_unit.py index 3225f029..ecdfb1c1 100644 --- a/src/adcp/types/generated_poc/enums/distance_unit.py +++ b/src/adcp/types/generated_poc/enums/distance_unit.py @@ -8,6 +8,6 @@ class DistanceUnit(Enum): - km = 'km' - mi = 'mi' - m = 'm' + km = "km" + mi = "mi" + m = "m" diff --git a/src/adcp/types/generated_poc/enums/event_type.py b/src/adcp/types/generated_poc/enums/event_type.py index b2d9aeec..8690f2d8 100644 --- a/src/adcp/types/generated_poc/enums/event_type.py +++ b/src/adcp/types/generated_poc/enums/event_type.py @@ -8,31 +8,31 @@ class EventType(Enum): - page_view = 'page_view' - view_content = 'view_content' - select_content = 'select_content' - select_item = 'select_item' - search = 'search' - share = 'share' - add_to_cart = 'add_to_cart' - remove_from_cart = 'remove_from_cart' - viewed_cart = 'viewed_cart' - add_to_wishlist = 'add_to_wishlist' - initiate_checkout = 'initiate_checkout' - add_payment_info = 'add_payment_info' - purchase = 'purchase' - refund = 'refund' - lead = 'lead' - qualify_lead = 'qualify_lead' - close_convert_lead = 'close_convert_lead' - disqualify_lead = 'disqualify_lead' - complete_registration = 'complete_registration' - subscribe = 'subscribe' - start_trial = 'start_trial' - app_install = 'app_install' - app_launch = 'app_launch' - contact = 'contact' - schedule = 'schedule' - donate = 'donate' - submit_application = 'submit_application' - custom = 'custom' + page_view = "page_view" + view_content = "view_content" + select_content = "select_content" + select_item = "select_item" + search = "search" + share = "share" + add_to_cart = "add_to_cart" + remove_from_cart = "remove_from_cart" + viewed_cart = "viewed_cart" + add_to_wishlist = "add_to_wishlist" + initiate_checkout = "initiate_checkout" + add_payment_info = "add_payment_info" + purchase = "purchase" + refund = "refund" + lead = "lead" + qualify_lead = "qualify_lead" + close_convert_lead = "close_convert_lead" + disqualify_lead = "disqualify_lead" + complete_registration = "complete_registration" + subscribe = "subscribe" + start_trial = "start_trial" + app_install = "app_install" + app_launch = "app_launch" + contact = "contact" + schedule = "schedule" + donate = "donate" + submit_application = "submit_application" + custom = "custom" diff --git a/src/adcp/types/generated_poc/enums/feed_format.py b/src/adcp/types/generated_poc/enums/feed_format.py index 1f61194f..80f48ba1 100644 --- a/src/adcp/types/generated_poc/enums/feed_format.py +++ b/src/adcp/types/generated_poc/enums/feed_format.py @@ -8,8 +8,8 @@ class FeedFormat(Enum): - google_merchant_center = 'google_merchant_center' - facebook_catalog = 'facebook_catalog' - shopify = 'shopify' - linkedin_jobs = 'linkedin_jobs' - custom = 'custom' + google_merchant_center = "google_merchant_center" + facebook_catalog = "facebook_catalog" + shopify = "shopify" + linkedin_jobs = "linkedin_jobs" + custom = "custom" diff --git a/src/adcp/types/generated_poc/enums/feedback_source.py b/src/adcp/types/generated_poc/enums/feedback_source.py index e9fbebd4..57785f27 100644 --- a/src/adcp/types/generated_poc/enums/feedback_source.py +++ b/src/adcp/types/generated_poc/enums/feedback_source.py @@ -8,7 +8,7 @@ class FeedbackSource(Enum): - buyer_attribution = 'buyer_attribution' - third_party_measurement = 'third_party_measurement' - platform_analytics = 'platform_analytics' - verification_partner = 'verification_partner' + buyer_attribution = "buyer_attribution" + third_party_measurement = "third_party_measurement" + platform_analytics = "platform_analytics" + verification_partner = "verification_partner" diff --git a/src/adcp/types/generated_poc/enums/forecast_method.py b/src/adcp/types/generated_poc/enums/forecast_method.py index d80b3099..a62f6b2a 100644 --- a/src/adcp/types/generated_poc/enums/forecast_method.py +++ b/src/adcp/types/generated_poc/enums/forecast_method.py @@ -8,6 +8,6 @@ class ForecastMethod(Enum): - estimate = 'estimate' - modeled = 'modeled' - guaranteed = 'guaranteed' + estimate = "estimate" + modeled = "modeled" + guaranteed = "guaranteed" diff --git a/src/adcp/types/generated_poc/enums/forecast_range_unit.py b/src/adcp/types/generated_poc/enums/forecast_range_unit.py index d8d837f2..a1bade28 100644 --- a/src/adcp/types/generated_poc/enums/forecast_range_unit.py +++ b/src/adcp/types/generated_poc/enums/forecast_range_unit.py @@ -8,9 +8,9 @@ class ForecastRangeUnit(Enum): - spend = 'spend' - reach_freq = 'reach_freq' - weekly = 'weekly' - daily = 'daily' - clicks = 'clicks' - conversions = 'conversions' + spend = "spend" + reach_freq = "reach_freq" + weekly = "weekly" + daily = "daily" + clicks = "clicks" + conversions = "conversions" diff --git a/src/adcp/types/generated_poc/enums/forecastable_metric.py b/src/adcp/types/generated_poc/enums/forecastable_metric.py index adae7c36..85e02371 100644 --- a/src/adcp/types/generated_poc/enums/forecastable_metric.py +++ b/src/adcp/types/generated_poc/enums/forecastable_metric.py @@ -8,12 +8,12 @@ class ForecastableMetric(Enum): - audience_size = 'audience_size' - reach = 'reach' - frequency = 'frequency' - impressions = 'impressions' - clicks = 'clicks' - spend = 'spend' - views = 'views' - completed_views = 'completed_views' - grps = 'grps' + audience_size = "audience_size" + reach = "reach" + frequency = "frequency" + impressions = "impressions" + clicks = "clicks" + spend = "spend" + views = "views" + completed_views = "completed_views" + grps = "grps" diff --git a/src/adcp/types/generated_poc/enums/format_category.py b/src/adcp/types/generated_poc/enums/format_category.py index 3a5f7b70..fca3b1ef 100644 --- a/src/adcp/types/generated_poc/enums/format_category.py +++ b/src/adcp/types/generated_poc/enums/format_category.py @@ -8,10 +8,10 @@ class FormatCategory(Enum): - audio = 'audio' - video = 'video' - display = 'display' - native = 'native' - dooh = 'dooh' - rich_media = 'rich_media' - universal = 'universal' + audio = "audio" + video = "video" + display = "display" + native = "native" + dooh = "dooh" + rich_media = "rich_media" + universal = "universal" diff --git a/src/adcp/types/generated_poc/enums/format_id_parameter.py b/src/adcp/types/generated_poc/enums/format_id_parameter.py index 66faab60..224a3b8d 100644 --- a/src/adcp/types/generated_poc/enums/format_id_parameter.py +++ b/src/adcp/types/generated_poc/enums/format_id_parameter.py @@ -8,5 +8,5 @@ class FormatIdParameter(Enum): - dimensions = 'dimensions' - duration = 'duration' + dimensions = "dimensions" + duration = "duration" diff --git a/src/adcp/types/generated_poc/enums/frequency_cap_scope.py b/src/adcp/types/generated_poc/enums/frequency_cap_scope.py index ae741dc0..f0bd4a55 100644 --- a/src/adcp/types/generated_poc/enums/frequency_cap_scope.py +++ b/src/adcp/types/generated_poc/enums/frequency_cap_scope.py @@ -9,8 +9,8 @@ from pydantic import Field, RootModel -class FrequencyCapScope(RootModel[Literal['package']]): +class FrequencyCapScope(RootModel[Literal["package"]]): root: Annotated[ - Literal['package'], - Field(description='Scope for frequency cap application', title='Frequency Cap Scope'), + Literal["package"], + Field(description="Scope for frequency cap application", title="Frequency Cap Scope"), ] diff --git a/src/adcp/types/generated_poc/enums/geo_level.py b/src/adcp/types/generated_poc/enums/geo_level.py index 663790d0..9c967f6e 100644 --- a/src/adcp/types/generated_poc/enums/geo_level.py +++ b/src/adcp/types/generated_poc/enums/geo_level.py @@ -8,7 +8,7 @@ class GeographicTargetingLevel(Enum): - country = 'country' - region = 'region' - metro = 'metro' - postal_area = 'postal_area' + country = "country" + region = "region" + metro = "metro" + postal_area = "postal_area" diff --git a/src/adcp/types/generated_poc/enums/history_entry_type.py b/src/adcp/types/generated_poc/enums/history_entry_type.py index 1395021a..3237ee31 100644 --- a/src/adcp/types/generated_poc/enums/history_entry_type.py +++ b/src/adcp/types/generated_poc/enums/history_entry_type.py @@ -8,5 +8,5 @@ class HistoryEntryType(Enum): - request = 'request' - response = 'response' + request = "request" + response = "response" diff --git a/src/adcp/types/generated_poc/enums/http_method.py b/src/adcp/types/generated_poc/enums/http_method.py index faad191c..f1d1c590 100644 --- a/src/adcp/types/generated_poc/enums/http_method.py +++ b/src/adcp/types/generated_poc/enums/http_method.py @@ -8,5 +8,5 @@ class HttpMethod(Enum): - GET = 'GET' - POST = 'POST' + GET = "GET" + POST = "POST" diff --git a/src/adcp/types/generated_poc/enums/identifier_types.py b/src/adcp/types/generated_poc/enums/identifier_types.py index 213ff9c9..75c27749 100644 --- a/src/adcp/types/generated_poc/enums/identifier_types.py +++ b/src/adcp/types/generated_poc/enums/identifier_types.py @@ -8,22 +8,22 @@ class PropertyIdentifierTypes(Enum): - domain = 'domain' - subdomain = 'subdomain' - network_id = 'network_id' - ios_bundle = 'ios_bundle' - android_package = 'android_package' - apple_app_store_id = 'apple_app_store_id' - google_play_id = 'google_play_id' - roku_store_id = 'roku_store_id' - fire_tv_asin = 'fire_tv_asin' - samsung_app_id = 'samsung_app_id' - apple_tv_bundle = 'apple_tv_bundle' - bundle_id = 'bundle_id' - venue_id = 'venue_id' - screen_id = 'screen_id' - openooh_venue_type = 'openooh_venue_type' - rss_url = 'rss_url' - apple_podcast_id = 'apple_podcast_id' - spotify_show_id = 'spotify_show_id' - podcast_guid = 'podcast_guid' + domain = "domain" + subdomain = "subdomain" + network_id = "network_id" + ios_bundle = "ios_bundle" + android_package = "android_package" + apple_app_store_id = "apple_app_store_id" + google_play_id = "google_play_id" + roku_store_id = "roku_store_id" + fire_tv_asin = "fire_tv_asin" + samsung_app_id = "samsung_app_id" + apple_tv_bundle = "apple_tv_bundle" + bundle_id = "bundle_id" + venue_id = "venue_id" + screen_id = "screen_id" + openooh_venue_type = "openooh_venue_type" + rss_url = "rss_url" + apple_podcast_id = "apple_podcast_id" + spotify_show_id = "spotify_show_id" + podcast_guid = "podcast_guid" diff --git a/src/adcp/types/generated_poc/enums/javascript_module_type.py b/src/adcp/types/generated_poc/enums/javascript_module_type.py index 7cb4347f..92e2fe86 100644 --- a/src/adcp/types/generated_poc/enums/javascript_module_type.py +++ b/src/adcp/types/generated_poc/enums/javascript_module_type.py @@ -8,6 +8,6 @@ class JavascriptModuleType(Enum): - esm = 'esm' - commonjs = 'commonjs' - script = 'script' + esm = "esm" + commonjs = "commonjs" + script = "script" diff --git a/src/adcp/types/generated_poc/enums/landing_page_requirement.py b/src/adcp/types/generated_poc/enums/landing_page_requirement.py index 71236c64..e97976f6 100644 --- a/src/adcp/types/generated_poc/enums/landing_page_requirement.py +++ b/src/adcp/types/generated_poc/enums/landing_page_requirement.py @@ -8,6 +8,6 @@ class LandingPageRequirement(Enum): - any = 'any' - retailer_site_only = 'retailer_site_only' - must_include_retailer = 'must_include_retailer' + any = "any" + retailer_site_only = "retailer_site_only" + must_include_retailer = "must_include_retailer" diff --git a/src/adcp/types/generated_poc/enums/markdown_flavor.py b/src/adcp/types/generated_poc/enums/markdown_flavor.py index 03f8b387..bd016da8 100644 --- a/src/adcp/types/generated_poc/enums/markdown_flavor.py +++ b/src/adcp/types/generated_poc/enums/markdown_flavor.py @@ -8,5 +8,5 @@ class MarkdownFlavor(Enum): - commonmark = 'commonmark' - gfm = 'gfm' + commonmark = "commonmark" + gfm = "gfm" diff --git a/src/adcp/types/generated_poc/enums/media_buy_status.py b/src/adcp/types/generated_poc/enums/media_buy_status.py index 1e6e6d51..79c58917 100644 --- a/src/adcp/types/generated_poc/enums/media_buy_status.py +++ b/src/adcp/types/generated_poc/enums/media_buy_status.py @@ -8,7 +8,7 @@ class MediaBuyStatus(Enum): - pending_activation = 'pending_activation' - active = 'active' - paused = 'paused' - completed = 'completed' + pending_activation = "pending_activation" + active = "active" + paused = "paused" + completed = "completed" diff --git a/src/adcp/types/generated_poc/enums/metric_type.py b/src/adcp/types/generated_poc/enums/metric_type.py index adda5097..b78b878b 100644 --- a/src/adcp/types/generated_poc/enums/metric_type.py +++ b/src/adcp/types/generated_poc/enums/metric_type.py @@ -8,11 +8,11 @@ class MetricType(Enum): - overall_performance = 'overall_performance' - conversion_rate = 'conversion_rate' - brand_lift = 'brand_lift' - click_through_rate = 'click_through_rate' - completion_rate = 'completion_rate' - viewability = 'viewability' - brand_safety = 'brand_safety' - cost_efficiency = 'cost_efficiency' + overall_performance = "overall_performance" + conversion_rate = "conversion_rate" + brand_lift = "brand_lift" + click_through_rate = "click_through_rate" + completion_rate = "completion_rate" + viewability = "viewability" + brand_safety = "brand_safety" + cost_efficiency = "cost_efficiency" diff --git a/src/adcp/types/generated_poc/enums/metro_system.py b/src/adcp/types/generated_poc/enums/metro_system.py index 8c4462aa..38dcffe6 100644 --- a/src/adcp/types/generated_poc/enums/metro_system.py +++ b/src/adcp/types/generated_poc/enums/metro_system.py @@ -8,8 +8,8 @@ class MetroAreaSystem(Enum): - nielsen_dma = 'nielsen_dma' - uk_itl1 = 'uk_itl1' - uk_itl2 = 'uk_itl2' - eurostat_nuts2 = 'eurostat_nuts2' - custom = 'custom' + nielsen_dma = "nielsen_dma" + uk_itl1 = "uk_itl1" + uk_itl2 = "uk_itl2" + eurostat_nuts2 = "eurostat_nuts2" + custom = "custom" diff --git a/src/adcp/types/generated_poc/enums/notification_type.py b/src/adcp/types/generated_poc/enums/notification_type.py index 3d44518e..0b61f812 100644 --- a/src/adcp/types/generated_poc/enums/notification_type.py +++ b/src/adcp/types/generated_poc/enums/notification_type.py @@ -8,7 +8,7 @@ class NotificationType(Enum): - scheduled = 'scheduled' - final = 'final' - delayed = 'delayed' - adjusted = 'adjusted' + scheduled = "scheduled" + final = "final" + delayed = "delayed" + adjusted = "adjusted" diff --git a/src/adcp/types/generated_poc/enums/pacing.py b/src/adcp/types/generated_poc/enums/pacing.py index 80cdb098..1aa5ae65 100644 --- a/src/adcp/types/generated_poc/enums/pacing.py +++ b/src/adcp/types/generated_poc/enums/pacing.py @@ -8,6 +8,6 @@ class Pacing(Enum): - even = 'even' - asap = 'asap' - front_loaded = 'front_loaded' + even = "even" + asap = "asap" + front_loaded = "front_loaded" diff --git a/src/adcp/types/generated_poc/enums/postal_system.py b/src/adcp/types/generated_poc/enums/postal_system.py index e2f2647e..f0b689c1 100644 --- a/src/adcp/types/generated_poc/enums/postal_system.py +++ b/src/adcp/types/generated_poc/enums/postal_system.py @@ -8,12 +8,12 @@ class PostalCodeSystem(Enum): - us_zip = 'us_zip' - us_zip_plus_four = 'us_zip_plus_four' - gb_outward = 'gb_outward' - gb_full = 'gb_full' - ca_fsa = 'ca_fsa' - ca_full = 'ca_full' - de_plz = 'de_plz' - fr_code_postal = 'fr_code_postal' - au_postcode = 'au_postcode' + us_zip = "us_zip" + us_zip_plus_four = "us_zip_plus_four" + gb_outward = "gb_outward" + gb_full = "gb_full" + ca_fsa = "ca_fsa" + ca_full = "ca_full" + de_plz = "de_plz" + fr_code_postal = "fr_code_postal" + au_postcode = "au_postcode" diff --git a/src/adcp/types/generated_poc/enums/preview_output_format.py b/src/adcp/types/generated_poc/enums/preview_output_format.py index d0544649..503fbfb2 100644 --- a/src/adcp/types/generated_poc/enums/preview_output_format.py +++ b/src/adcp/types/generated_poc/enums/preview_output_format.py @@ -8,5 +8,5 @@ class PreviewOutputFormat(Enum): - url = 'url' - html = 'html' + url = "url" + html = "html" diff --git a/src/adcp/types/generated_poc/enums/pricing_model.py b/src/adcp/types/generated_poc/enums/pricing_model.py index cdbe0616..d546275b 100644 --- a/src/adcp/types/generated_poc/enums/pricing_model.py +++ b/src/adcp/types/generated_poc/enums/pricing_model.py @@ -8,12 +8,12 @@ class PricingModel(Enum): - cpm = 'cpm' - vcpm = 'vcpm' - cpc = 'cpc' - cpcv = 'cpcv' - cpv = 'cpv' - cpp = 'cpp' - cpa = 'cpa' - flat_rate = 'flat_rate' - time = 'time' + cpm = "cpm" + vcpm = "vcpm" + cpc = "cpc" + cpcv = "cpcv" + cpv = "cpv" + cpp = "cpp" + cpa = "cpa" + flat_rate = "flat_rate" + time = "time" diff --git a/src/adcp/types/generated_poc/enums/property_type.py b/src/adcp/types/generated_poc/enums/property_type.py index 3e76614c..3384face 100644 --- a/src/adcp/types/generated_poc/enums/property_type.py +++ b/src/adcp/types/generated_poc/enums/property_type.py @@ -8,11 +8,11 @@ class PropertyType(Enum): - website = 'website' - mobile_app = 'mobile_app' - ctv_app = 'ctv_app' - desktop_app = 'desktop_app' - dooh = 'dooh' - podcast = 'podcast' - radio = 'radio' - streaming_audio = 'streaming_audio' + website = "website" + mobile_app = "mobile_app" + ctv_app = "ctv_app" + desktop_app = "desktop_app" + dooh = "dooh" + podcast = "podcast" + radio = "radio" + streaming_audio = "streaming_audio" diff --git a/src/adcp/types/generated_poc/enums/publisher_identifier_types.py b/src/adcp/types/generated_poc/enums/publisher_identifier_types.py index 1d98205a..b8708eef 100644 --- a/src/adcp/types/generated_poc/enums/publisher_identifier_types.py +++ b/src/adcp/types/generated_poc/enums/publisher_identifier_types.py @@ -8,8 +8,8 @@ class PublisherIdentifierTypes(Enum): - tag_id = 'tag_id' - duns = 'duns' - lei = 'lei' - seller_id = 'seller_id' - gln = 'gln' + tag_id = "tag_id" + duns = "duns" + lei = "lei" + seller_id = "seller_id" + gln = "gln" diff --git a/src/adcp/types/generated_poc/enums/reach_unit.py b/src/adcp/types/generated_poc/enums/reach_unit.py index 6adcf3a4..304450e0 100644 --- a/src/adcp/types/generated_poc/enums/reach_unit.py +++ b/src/adcp/types/generated_poc/enums/reach_unit.py @@ -8,9 +8,9 @@ class ReachUnit(Enum): - individuals = 'individuals' - households = 'households' - devices = 'devices' - accounts = 'accounts' - cookies = 'cookies' - custom = 'custom' + individuals = "individuals" + households = "households" + devices = "devices" + accounts = "accounts" + cookies = "cookies" + custom = "custom" diff --git a/src/adcp/types/generated_poc/enums/reporting_frequency.py b/src/adcp/types/generated_poc/enums/reporting_frequency.py index da03b5a4..5d641c02 100644 --- a/src/adcp/types/generated_poc/enums/reporting_frequency.py +++ b/src/adcp/types/generated_poc/enums/reporting_frequency.py @@ -8,6 +8,6 @@ class ReportingFrequency(Enum): - hourly = 'hourly' - daily = 'daily' - monthly = 'monthly' + hourly = "hourly" + daily = "daily" + monthly = "monthly" diff --git a/src/adcp/types/generated_poc/enums/signal_catalog_type.py b/src/adcp/types/generated_poc/enums/signal_catalog_type.py index 3155976a..c3b0ed81 100644 --- a/src/adcp/types/generated_poc/enums/signal_catalog_type.py +++ b/src/adcp/types/generated_poc/enums/signal_catalog_type.py @@ -8,6 +8,6 @@ class SignalCatalogType(Enum): - marketplace = 'marketplace' - custom = 'custom' - owned = 'owned' + marketplace = "marketplace" + custom = "custom" + owned = "owned" diff --git a/src/adcp/types/generated_poc/enums/signal_source.py b/src/adcp/types/generated_poc/enums/signal_source.py index daa7dd36..6e5cffe2 100644 --- a/src/adcp/types/generated_poc/enums/signal_source.py +++ b/src/adcp/types/generated_poc/enums/signal_source.py @@ -8,5 +8,5 @@ class SignalSource(Enum): - catalog = 'catalog' - agent = 'agent' + catalog = "catalog" + agent = "agent" diff --git a/src/adcp/types/generated_poc/enums/signal_value_type.py b/src/adcp/types/generated_poc/enums/signal_value_type.py index 07ef7e5c..6d63fcef 100644 --- a/src/adcp/types/generated_poc/enums/signal_value_type.py +++ b/src/adcp/types/generated_poc/enums/signal_value_type.py @@ -8,6 +8,6 @@ class SignalValueType(Enum): - binary = 'binary' - categorical = 'categorical' - numeric = 'numeric' + binary = "binary" + categorical = "categorical" + numeric = "numeric" diff --git a/src/adcp/types/generated_poc/enums/sort_direction.py b/src/adcp/types/generated_poc/enums/sort_direction.py index 6df69e71..1a9a79c2 100644 --- a/src/adcp/types/generated_poc/enums/sort_direction.py +++ b/src/adcp/types/generated_poc/enums/sort_direction.py @@ -8,5 +8,5 @@ class SortDirection(Enum): - asc = 'asc' - desc = 'desc' + asc = "asc" + desc = "desc" diff --git a/src/adcp/types/generated_poc/enums/task_status.py b/src/adcp/types/generated_poc/enums/task_status.py index 232c9471..1c9c1e95 100644 --- a/src/adcp/types/generated_poc/enums/task_status.py +++ b/src/adcp/types/generated_poc/enums/task_status.py @@ -8,12 +8,12 @@ class TaskStatus(Enum): - submitted = 'submitted' - working = 'working' - input_required = 'input-required' - completed = 'completed' - canceled = 'canceled' - failed = 'failed' - rejected = 'rejected' - auth_required = 'auth-required' - unknown = 'unknown' + submitted = "submitted" + working = "working" + input_required = "input-required" + completed = "completed" + canceled = "canceled" + failed = "failed" + rejected = "rejected" + auth_required = "auth-required" + unknown = "unknown" diff --git a/src/adcp/types/generated_poc/enums/task_type.py b/src/adcp/types/generated_poc/enums/task_type.py index d8aeb915..726033f0 100644 --- a/src/adcp/types/generated_poc/enums/task_type.py +++ b/src/adcp/types/generated_poc/enums/task_type.py @@ -8,19 +8,19 @@ class TaskType(Enum): - create_media_buy = 'create_media_buy' - update_media_buy = 'update_media_buy' - sync_creatives = 'sync_creatives' - activate_signal = 'activate_signal' - get_signals = 'get_signals' - create_property_list = 'create_property_list' - update_property_list = 'update_property_list' - get_property_list = 'get_property_list' - list_property_lists = 'list_property_lists' - delete_property_list = 'delete_property_list' - sync_accounts = 'sync_accounts' - get_creative_delivery = 'get_creative_delivery' - sync_event_sources = 'sync_event_sources' - sync_audiences = 'sync_audiences' - sync_catalogs = 'sync_catalogs' - log_event = 'log_event' + create_media_buy = "create_media_buy" + update_media_buy = "update_media_buy" + sync_creatives = "sync_creatives" + activate_signal = "activate_signal" + get_signals = "get_signals" + create_property_list = "create_property_list" + update_property_list = "update_property_list" + get_property_list = "get_property_list" + list_property_lists = "list_property_lists" + delete_property_list = "delete_property_list" + sync_accounts = "sync_accounts" + get_creative_delivery = "get_creative_delivery" + sync_event_sources = "sync_event_sources" + sync_audiences = "sync_audiences" + sync_catalogs = "sync_catalogs" + log_event = "log_event" diff --git a/src/adcp/types/generated_poc/enums/transport_mode.py b/src/adcp/types/generated_poc/enums/transport_mode.py index 9ee9469f..135aae95 100644 --- a/src/adcp/types/generated_poc/enums/transport_mode.py +++ b/src/adcp/types/generated_poc/enums/transport_mode.py @@ -8,7 +8,7 @@ class TransportMode(Enum): - walking = 'walking' - cycling = 'cycling' - driving = 'driving' - public_transport = 'public_transport' + walking = "walking" + cycling = "cycling" + driving = "driving" + public_transport = "public_transport" diff --git a/src/adcp/types/generated_poc/enums/uid_type.py b/src/adcp/types/generated_poc/enums/uid_type.py index e17e3bc8..c567f9b3 100644 --- a/src/adcp/types/generated_poc/enums/uid_type.py +++ b/src/adcp/types/generated_poc/enums/uid_type.py @@ -8,11 +8,11 @@ class UidType(Enum): - rampid = 'rampid' - id5 = 'id5' - uid2 = 'uid2' - euid = 'euid' - pairid = 'pairid' - external_id = 'external_id' - maid = 'maid' - other = 'other' + rampid = "rampid" + id5 = "id5" + uid2 = "uid2" + euid = "euid" + pairid = "pairid" + external_id = "external_id" + maid = "maid" + other = "other" diff --git a/src/adcp/types/generated_poc/enums/universal_macro.py b/src/adcp/types/generated_poc/enums/universal_macro.py index 33e0b64a..0d942381 100644 --- a/src/adcp/types/generated_poc/enums/universal_macro.py +++ b/src/adcp/types/generated_poc/enums/universal_macro.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/universal_macro.json -# timestamp: 2026-02-22T01:23:46+00:00 +# timestamp: 2026-02-23T01:24:08+00:00 from __future__ import annotations @@ -8,70 +8,71 @@ class UniversalMacro(Enum): - MEDIA_BUY_ID = 'MEDIA_BUY_ID' - PACKAGE_ID = 'PACKAGE_ID' - CREATIVE_ID = 'CREATIVE_ID' - CACHEBUSTER = 'CACHEBUSTER' - TIMESTAMP = 'TIMESTAMP' - CLICK_URL = 'CLICK_URL' - GDPR = 'GDPR' - GDPR_CONSENT = 'GDPR_CONSENT' - US_PRIVACY = 'US_PRIVACY' - GPP_STRING = 'GPP_STRING' - GPP_SID = 'GPP_SID' - IP_ADDRESS = 'IP_ADDRESS' - LIMIT_AD_TRACKING = 'LIMIT_AD_TRACKING' - DEVICE_TYPE = 'DEVICE_TYPE' - OS = 'OS' - OS_VERSION = 'OS_VERSION' - DEVICE_MAKE = 'DEVICE_MAKE' - DEVICE_MODEL = 'DEVICE_MODEL' - USER_AGENT = 'USER_AGENT' - APP_BUNDLE = 'APP_BUNDLE' - APP_NAME = 'APP_NAME' - COUNTRY = 'COUNTRY' - REGION = 'REGION' - CITY = 'CITY' - ZIP = 'ZIP' - DMA = 'DMA' - LAT = 'LAT' - LONG = 'LONG' - DEVICE_ID = 'DEVICE_ID' - DEVICE_ID_TYPE = 'DEVICE_ID_TYPE' - DOMAIN = 'DOMAIN' - PAGE_URL = 'PAGE_URL' - REFERRER = 'REFERRER' - KEYWORDS = 'KEYWORDS' - PLACEMENT_ID = 'PLACEMENT_ID' - FOLD_POSITION = 'FOLD_POSITION' - AD_WIDTH = 'AD_WIDTH' - AD_HEIGHT = 'AD_HEIGHT' - VIDEO_ID = 'VIDEO_ID' - VIDEO_TITLE = 'VIDEO_TITLE' - VIDEO_DURATION = 'VIDEO_DURATION' - VIDEO_CATEGORY = 'VIDEO_CATEGORY' - CONTENT_GENRE = 'CONTENT_GENRE' - CONTENT_RATING = 'CONTENT_RATING' - PLAYER_WIDTH = 'PLAYER_WIDTH' - PLAYER_HEIGHT = 'PLAYER_HEIGHT' - POD_POSITION = 'POD_POSITION' - POD_SIZE = 'POD_SIZE' - AD_BREAK_ID = 'AD_BREAK_ID' - STATION_ID = 'STATION_ID' - SHOW_NAME = 'SHOW_NAME' - EPISODE_ID = 'EPISODE_ID' - AUDIO_DURATION = 'AUDIO_DURATION' - AXEM = 'AXEM' - CATALOG_ID = 'CATALOG_ID' - SKU = 'SKU' - GTIN = 'GTIN' - OFFERING_ID = 'OFFERING_ID' - JOB_ID = 'JOB_ID' - HOTEL_ID = 'HOTEL_ID' - FLIGHT_ID = 'FLIGHT_ID' - VEHICLE_ID = 'VEHICLE_ID' - LISTING_ID = 'LISTING_ID' - STORE_ID = 'STORE_ID' - PROGRAM_ID = 'PROGRAM_ID' - DESTINATION_ID = 'DESTINATION_ID' - CREATIVE_VARIANT_ID = 'CREATIVE_VARIANT_ID' + MEDIA_BUY_ID = "MEDIA_BUY_ID" + PACKAGE_ID = "PACKAGE_ID" + CREATIVE_ID = "CREATIVE_ID" + CACHEBUSTER = "CACHEBUSTER" + TIMESTAMP = "TIMESTAMP" + CLICK_URL = "CLICK_URL" + GDPR = "GDPR" + GDPR_CONSENT = "GDPR_CONSENT" + US_PRIVACY = "US_PRIVACY" + GPP_STRING = "GPP_STRING" + GPP_SID = "GPP_SID" + IP_ADDRESS = "IP_ADDRESS" + LIMIT_AD_TRACKING = "LIMIT_AD_TRACKING" + DEVICE_TYPE = "DEVICE_TYPE" + OS = "OS" + OS_VERSION = "OS_VERSION" + DEVICE_MAKE = "DEVICE_MAKE" + DEVICE_MODEL = "DEVICE_MODEL" + USER_AGENT = "USER_AGENT" + APP_BUNDLE = "APP_BUNDLE" + APP_NAME = "APP_NAME" + COUNTRY = "COUNTRY" + REGION = "REGION" + CITY = "CITY" + ZIP = "ZIP" + DMA = "DMA" + LAT = "LAT" + LONG = "LONG" + DEVICE_ID = "DEVICE_ID" + DEVICE_ID_TYPE = "DEVICE_ID_TYPE" + DOMAIN = "DOMAIN" + PAGE_URL = "PAGE_URL" + REFERRER = "REFERRER" + KEYWORDS = "KEYWORDS" + PLACEMENT_ID = "PLACEMENT_ID" + FOLD_POSITION = "FOLD_POSITION" + AD_WIDTH = "AD_WIDTH" + AD_HEIGHT = "AD_HEIGHT" + VIDEO_ID = "VIDEO_ID" + VIDEO_TITLE = "VIDEO_TITLE" + VIDEO_DURATION = "VIDEO_DURATION" + VIDEO_CATEGORY = "VIDEO_CATEGORY" + CONTENT_GENRE = "CONTENT_GENRE" + CONTENT_RATING = "CONTENT_RATING" + PLAYER_WIDTH = "PLAYER_WIDTH" + PLAYER_HEIGHT = "PLAYER_HEIGHT" + POD_POSITION = "POD_POSITION" + POD_SIZE = "POD_SIZE" + AD_BREAK_ID = "AD_BREAK_ID" + STATION_ID = "STATION_ID" + SHOW_NAME = "SHOW_NAME" + EPISODE_ID = "EPISODE_ID" + AUDIO_DURATION = "AUDIO_DURATION" + AXEM = "AXEM" + CATALOG_ID = "CATALOG_ID" + SKU = "SKU" + GTIN = "GTIN" + OFFERING_ID = "OFFERING_ID" + JOB_ID = "JOB_ID" + HOTEL_ID = "HOTEL_ID" + FLIGHT_ID = "FLIGHT_ID" + VEHICLE_ID = "VEHICLE_ID" + LISTING_ID = "LISTING_ID" + STORE_ID = "STORE_ID" + PROGRAM_ID = "PROGRAM_ID" + DESTINATION_ID = "DESTINATION_ID" + CREATIVE_VARIANT_ID = "CREATIVE_VARIANT_ID" + APP_ITEM_ID = "APP_ITEM_ID" diff --git a/src/adcp/types/generated_poc/enums/update_frequency.py b/src/adcp/types/generated_poc/enums/update_frequency.py index 292f1070..29a143f5 100644 --- a/src/adcp/types/generated_poc/enums/update_frequency.py +++ b/src/adcp/types/generated_poc/enums/update_frequency.py @@ -8,7 +8,7 @@ class UpdateFrequency(Enum): - realtime = 'realtime' - hourly = 'hourly' - daily = 'daily' - weekly = 'weekly' + realtime = "realtime" + hourly = "hourly" + daily = "daily" + weekly = "weekly" diff --git a/src/adcp/types/generated_poc/enums/url_asset_type.py b/src/adcp/types/generated_poc/enums/url_asset_type.py index 36012b4e..f667e99d 100644 --- a/src/adcp/types/generated_poc/enums/url_asset_type.py +++ b/src/adcp/types/generated_poc/enums/url_asset_type.py @@ -8,6 +8,6 @@ class UrlAssetType(Enum): - clickthrough = 'clickthrough' - tracker_pixel = 'tracker_pixel' - tracker_script = 'tracker_script' + clickthrough = "clickthrough" + tracker_pixel = "tracker_pixel" + tracker_script = "tracker_script" diff --git a/src/adcp/types/generated_poc/enums/validation_mode.py b/src/adcp/types/generated_poc/enums/validation_mode.py index 7aaf6e28..7b8b9b01 100644 --- a/src/adcp/types/generated_poc/enums/validation_mode.py +++ b/src/adcp/types/generated_poc/enums/validation_mode.py @@ -8,5 +8,5 @@ class ValidationMode(Enum): - strict = 'strict' - lenient = 'lenient' + strict = "strict" + lenient = "lenient" diff --git a/src/adcp/types/generated_poc/enums/vast_tracking_event.py b/src/adcp/types/generated_poc/enums/vast_tracking_event.py index fc9637c9..d98c7bb6 100644 --- a/src/adcp/types/generated_poc/enums/vast_tracking_event.py +++ b/src/adcp/types/generated_poc/enums/vast_tracking_event.py @@ -8,19 +8,19 @@ class VastTrackingEvent(Enum): - start = 'start' - firstQuartile = 'firstQuartile' - midpoint = 'midpoint' - thirdQuartile = 'thirdQuartile' - complete = 'complete' - impression = 'impression' - click = 'click' - pause = 'pause' - resume = 'resume' - skip = 'skip' - mute = 'mute' - unmute = 'unmute' - fullscreen = 'fullscreen' - exitFullscreen = 'exitFullscreen' - playerExpand = 'playerExpand' - playerCollapse = 'playerCollapse' + start = "start" + firstQuartile = "firstQuartile" + midpoint = "midpoint" + thirdQuartile = "thirdQuartile" + complete = "complete" + impression = "impression" + click = "click" + pause = "pause" + resume = "resume" + skip = "skip" + mute = "mute" + unmute = "unmute" + fullscreen = "fullscreen" + exitFullscreen = "exitFullscreen" + playerExpand = "playerExpand" + playerCollapse = "playerCollapse" diff --git a/src/adcp/types/generated_poc/enums/vast_version.py b/src/adcp/types/generated_poc/enums/vast_version.py index 42f073e5..fcd95e9a 100644 --- a/src/adcp/types/generated_poc/enums/vast_version.py +++ b/src/adcp/types/generated_poc/enums/vast_version.py @@ -8,8 +8,8 @@ class VastVersion(Enum): - field_2_0 = '2.0' - field_3_0 = '3.0' - field_4_0 = '4.0' - field_4_1 = '4.1' - field_4_2 = '4.2' + field_2_0 = "2.0" + field_3_0 = "3.0" + field_4_0 = "4.0" + field_4_1 = "4.1" + field_4_2 = "4.2" diff --git a/src/adcp/types/generated_poc/enums/wcag_level.py b/src/adcp/types/generated_poc/enums/wcag_level.py index 1a7149ed..098c5024 100644 --- a/src/adcp/types/generated_poc/enums/wcag_level.py +++ b/src/adcp/types/generated_poc/enums/wcag_level.py @@ -8,6 +8,6 @@ class WcagLevel(Enum): - A = 'A' - AA = 'AA' - AAA = 'AAA' + A = "A" + AA = "AA" + AAA = "AAA" diff --git a/src/adcp/types/generated_poc/enums/webhook_response_type.py b/src/adcp/types/generated_poc/enums/webhook_response_type.py index 10dbe2d3..3be651d7 100644 --- a/src/adcp/types/generated_poc/enums/webhook_response_type.py +++ b/src/adcp/types/generated_poc/enums/webhook_response_type.py @@ -8,7 +8,7 @@ class WebhookResponseType(Enum): - html = 'html' - json = 'json' - xml = 'xml' - javascript = 'javascript' + html = "html" + json = "json" + xml = "xml" + javascript = "javascript" diff --git a/src/adcp/types/generated_poc/enums/webhook_security_method.py b/src/adcp/types/generated_poc/enums/webhook_security_method.py index 6844d81e..e1b4a3e1 100644 --- a/src/adcp/types/generated_poc/enums/webhook_security_method.py +++ b/src/adcp/types/generated_poc/enums/webhook_security_method.py @@ -8,6 +8,6 @@ class WebhookSecurityMethod(Enum): - hmac_sha256 = 'hmac_sha256' - api_key = 'api_key' - none = 'none' + hmac_sha256 = "hmac_sha256" + api_key = "api_key" + none = "none" diff --git a/src/adcp/types/generated_poc/extensions/extension_meta.py b/src/adcp/types/generated_poc/extensions/extension_meta.py index 83a23666..0103818b 100644 --- a/src/adcp/types/generated_poc/extensions/extension_meta.py +++ b/src/adcp/types/generated_poc/extensions/extension_meta.py @@ -12,39 +12,39 @@ class AdcpExtensionFileSchema(AdCPBaseModel): field_schema: Annotated[ - Literal['http://json-schema.org/draft-07/schema#'], Field(alias='$schema') + Literal["http://json-schema.org/draft-07/schema#"], Field(alias="$schema") ] additionalProperties: Annotated[ Any | None, - Field(description='Whether additional properties are allowed in the extension data'), + Field(description="Whether additional properties are allowed in the extension data"), ] = None - description: Annotated[str, Field(description='Description of what this extension provides')] + description: Annotated[str, Field(description="Description of what this extension provides")] docs_url: Annotated[ - AnyUrl | None, Field(description='URL to documentation for implementors of this extension') + AnyUrl | None, Field(description="URL to documentation for implementors of this extension") ] = None properties: Annotated[ dict[str, Any], - Field(description='Schema properties defining the structure of ext.{namespace} data'), + Field(description="Schema properties defining the structure of ext.{namespace} data"), ] required: Annotated[ - list[str] | None, Field(description='Required properties within the extension data') + list[str] | None, Field(description="Required properties within the extension data") ] = None - title: Annotated[str, Field(description='Human-readable title for the extension')] + title: Annotated[str, Field(description="Human-readable title for the extension")] type: Annotated[ - Literal['object'], - Field(description='Extensions must be objects (data within ext.{namespace})'), + Literal["object"], + Field(description="Extensions must be objects (data within ext.{namespace})"), ] valid_from: Annotated[ str, Field( description="Minimum AdCP version this extension is compatible with (e.g., '2.5'). Extension will be included in all versioned schema builds >= this version.", - pattern='^\\d+\\.\\d+$', + pattern="^\\d+\\.\\d+$", ), ] valid_until: Annotated[ str | None, Field( description="Last AdCP version this extension is compatible with (e.g., '3.0'). Omit if extension is still valid for current and future versions.", - pattern='^\\d+\\.\\d+$', + pattern="^\\d+\\.\\d+$", ), ] = None diff --git a/src/adcp/types/generated_poc/media_buy/build_creative_request.py b/src/adcp/types/generated_poc/media_buy/build_creative_request.py index 74a9e632..93ec6144 100644 --- a/src/adcp/types/generated_poc/media_buy/build_creative_request.py +++ b/src/adcp/types/generated_poc/media_buy/build_creative_request.py @@ -19,37 +19,37 @@ class BuildCreativeRequest(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) brand: Annotated[ brand_ref.BrandReference | None, Field( - description='Brand reference for creative generation. Resolved to full brand identity (colors, logos, tone) at execution time.' + description="Brand reference for creative generation. Resolved to full brand identity (colors, logos, tone) at execution time." ), ] = None context: context_1.ContextObject | None = None creative_brief: Annotated[ creative_brief_ref.CreativeBriefReference | None, Field( - description='Campaign-level creative brief with objective, audience, messaging, and reference assets. Can be an inline brief object or a URL to a hosted brief. Supplements the natural language message with structured creative direction.' + description="Campaign-level creative brief with objective, audience, messaging, and reference assets. Can be an inline brief object or a URL to a hosted brief. Supplements the natural language message with structured creative direction." ), ] = None creative_manifest: Annotated[ creative_manifest_1.CreativeManifest | None, Field( - description='Creative manifest to transform or generate from. For pure generation, this should include the target format_id and any required input assets. For transformation (e.g., resizing, reformatting), this is the complete creative to adapt.' + description="Creative manifest to transform or generate from. For pure generation, this should include the target format_id and any required input assets. For transformation (e.g., resizing, reformatting), this is the complete creative to adapt." ), ] = None ext: ext_1.ExtensionObject | None = None message: Annotated[ str | None, Field( - description='Natural language instructions for the transformation or generation. For pure generation, this is the creative brief. For transformation, this provides guidance on how to adapt the creative.' + description="Natural language instructions for the transformation or generation. For pure generation, this is the creative brief. For transformation, this provides guidance on how to adapt the creative." ), ] = None target_format_id: Annotated[ format_id.FormatId, Field( - description='Format ID to generate. The format definition specifies required input assets and output structure.' + description="Format ID to generate. The format definition specifies required input assets and output structure." ), ] diff --git a/src/adcp/types/generated_poc/media_buy/build_creative_response.py b/src/adcp/types/generated_poc/media_buy/build_creative_response.py index 2c3f4729..24931b94 100644 --- a/src/adcp/types/generated_poc/media_buy/build_creative_response.py +++ b/src/adcp/types/generated_poc/media_buy/build_creative_response.py @@ -17,13 +17,13 @@ class BuildCreativeResponse2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error], Field( - description='Array of errors explaining why creative generation failed', min_length=1 + description="Array of errors explaining why creative generation failed", min_length=1 ), ] ext: ext_1.ExtensionObject | None = None @@ -31,17 +31,17 @@ class BuildCreativeResponse2(AdCPBaseModel): class BuildCreativeResponse1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None creative_manifest: Annotated[ creative_manifest_1.CreativeManifest, - Field(description='The generated or transformed creative manifest'), + Field(description="The generated or transformed creative manifest"), ] ext: ext_1.ExtensionObject | None = None sandbox: Annotated[ bool | None, - Field(description='When true, this response contains simulated data from sandbox mode.'), + Field(description="When true, this response contains simulated data from sandbox mode."), ] = None @@ -49,7 +49,7 @@ class BuildCreativeResponse(RootModel[BuildCreativeResponse1 | BuildCreativeResp root: Annotated[ BuildCreativeResponse1 | BuildCreativeResponse2, Field( - description='Response containing the transformed or generated creative manifest, ready for use with preview_creative or sync_creatives. Returns either the complete creative manifest OR error information, never both.', - title='Build Creative Response', + description="Response containing the transformed or generated creative manifest, ready for use with preview_creative or sync_creatives. Returns either the complete creative manifest OR error information, never both.", + title="Build Creative Response", ), ] diff --git a/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py b/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py index ed1ccf8a..29be24dd 100644 --- a/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +++ b/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py @@ -16,22 +16,22 @@ class Reason(Enum): - APPROVAL_REQUIRED = 'APPROVAL_REQUIRED' - BUDGET_EXCEEDS_LIMIT = 'BUDGET_EXCEEDS_LIMIT' + APPROVAL_REQUIRED = "APPROVAL_REQUIRED" + BUDGET_EXCEEDS_LIMIT = "BUDGET_EXCEEDS_LIMIT" class CreateMediaBuyInputRequired(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error] | None, Field( - description='Optional validation errors or warnings for debugging purposes. Helps explain why input is required.' + description="Optional validation errors or warnings for debugging purposes. Helps explain why input is required." ), ] = None ext: ext_1.ExtensionObject | None = None reason: Annotated[ - Reason | None, Field(description='Reason code indicating why input is needed') + Reason | None, Field(description="Reason code indicating why input is needed") ] = None diff --git a/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py b/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py index dcdc37c5..277d8a7b 100644 --- a/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +++ b/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py @@ -13,7 +13,7 @@ class CreateMediaBuySubmitted(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None diff --git a/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py b/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py index 9d83c1a7..fcf4ce30 100644 --- a/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +++ b/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py @@ -15,17 +15,17 @@ class CreateMediaBuyWorking(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None current_step: Annotated[ - str | None, Field(description='Current step or phase of the operation') + str | None, Field(description="Current step or phase of the operation") ] = None ext: ext_1.ExtensionObject | None = None percentage: Annotated[ - float | None, Field(description='Completion percentage (0-100)', ge=0.0, le=100.0) + float | None, Field(description="Completion percentage (0-100)", ge=0.0, le=100.0) ] = None - step_number: Annotated[int | None, Field(description='Current step number', ge=1)] = None + step_number: Annotated[int | None, Field(description="Current step number", ge=1)] = None total_steps: Annotated[ - int | None, Field(description='Total number of steps in the operation', ge=1) + int | None, Field(description="Total number of steps in the operation", ge=1) ] = None diff --git a/src/adcp/types/generated_poc/media_buy/create_media_buy_request.py b/src/adcp/types/generated_poc/media_buy/create_media_buy_request.py index 8e96a0e6..a396eeb1 100644 --- a/src/adcp/types/generated_poc/media_buy/create_media_buy_request.py +++ b/src/adcp/types/generated_poc/media_buy/create_media_buy_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/create_media_buy_request.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:24:08+00:00 from __future__ import annotations @@ -21,12 +21,12 @@ class Authentication(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) credentials: Annotated[ str, Field( - description='Credentials for authentication. For Bearer: token sent in Authorization header. For HMAC-SHA256: shared secret used to generate signature. Minimum 32 characters. Exchanged out-of-band during onboarding.', + description="Credentials for authentication. For Bearer: token sent in Authorization header. For HMAC-SHA256: shared secret used to generate signature. Minimum 32 characters. Exchanged out-of-band during onboarding.", min_length=32, ), ] @@ -41,22 +41,22 @@ class Authentication(AdCPBaseModel): class BatchFrequency(Enum): - hourly = 'hourly' - daily = 'daily' + hourly = "hourly" + daily = "daily" class DeliveryMode(Enum): - realtime = 'realtime' - batched = 'batched' + realtime = "realtime" + batched = "batched" class ArtifactWebhook(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) authentication: Annotated[ Authentication, - Field(description='Authentication configuration for webhook delivery (A2A-compatible)'), + Field(description="Authentication configuration for webhook delivery (A2A-compatible)"), ] batch_frequency: Annotated[ BatchFrequency | None, @@ -73,7 +73,7 @@ class ArtifactWebhook(AdCPBaseModel): sampling_rate: Annotated[ float | None, Field( - description='Fraction of impressions to include (0-1). 1.0 = all impressions, 0.1 = 10% sample. Default: 1.0', + description="Fraction of impressions to include (0-1). 1.0 = all impressions, 0.1 = 10% sample. Default: 1.0", ge=0.0, le=1.0, ), @@ -81,24 +81,24 @@ class ArtifactWebhook(AdCPBaseModel): token: Annotated[ str | None, Field( - description='Optional client-provided token for webhook validation. Echoed back in webhook payload to validate request authenticity.', + description="Optional client-provided token for webhook validation. Echoed back in webhook payload to validate request authenticity.", min_length=16, ), ] = None - url: Annotated[AnyUrl, Field(description='Webhook endpoint URL for artifact delivery')] + url: Annotated[AnyUrl, Field(description="Webhook endpoint URL for artifact delivery")] class TotalBudget(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) - amount: Annotated[float, Field(description='Total budget amount', ge=0.0)] - currency: Annotated[str, Field(description='ISO 4217 currency code')] + amount: Annotated[float, Field(description="Total budget amount", ge=0.0)] + currency: Annotated[str, Field(description="ISO 4217 currency code")] class CreateMediaBuyRequest(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) account_id: Annotated[ str | None, @@ -109,25 +109,25 @@ class CreateMediaBuyRequest(AdCPBaseModel): artifact_webhook: Annotated[ ArtifactWebhook | None, Field( - description='Optional webhook configuration for content artifact delivery. Used by governance agents to validate content adjacency. Seller pushes artifacts to this endpoint; orchestrator forwards to governance agent for validation.' + description="Optional webhook configuration for content artifact delivery. Used by governance agents to validate content adjacency. Seller pushes artifacts to this endpoint; orchestrator forwards to governance agent for validation." ), ] = None brand: Annotated[ brand_ref.BrandReference, Field( - description='Brand reference for this media buy. Resolved to full brand identity at execution time from brand.json or the registry.' + description="Brand reference for this media buy. Resolved to full brand identity at execution time from brand.json or the registry." ), ] - buyer_ref: Annotated[str, Field(description="Buyer's reference identifier for this media buy")] - campaign_ref: Annotated[ + buyer_campaign_ref: Annotated[ str | None, Field( description="Buyer's campaign reference label. Groups related discovery and buy operations under a single campaign for CRM and ad server correlation (e.g., 'NovaDrink_Meals_Q2')." ), ] = None + buyer_ref: Annotated[str, Field(description="Buyer's reference identifier for this media buy")] context: context_1.ContextObject | None = None end_time: Annotated[ - AwareDatetime, Field(description='Campaign end date/time in ISO 8601 format') + AwareDatetime, Field(description="Campaign end date/time in ISO 8601 format") ] ext: ext_1.ExtensionObject | None = None packages: Annotated[ @@ -137,7 +137,7 @@ class CreateMediaBuyRequest(AdCPBaseModel): min_length=1, ), ] = None - po_number: Annotated[str | None, Field(description='Purchase order number for tracking')] = None + po_number: Annotated[str | None, Field(description="Purchase order number for tracking")] = None proposal_id: Annotated[ str | None, Field( @@ -146,7 +146,7 @@ class CreateMediaBuyRequest(AdCPBaseModel): ] = None reporting_webhook: Annotated[ reporting_webhook_1.ReportingWebhook | None, - Field(description='Optional webhook configuration for automated reporting delivery'), + Field(description="Optional webhook configuration for automated reporting delivery"), ] = None start_time: start_timing.StartTiming total_budget: Annotated[ diff --git a/src/adcp/types/generated_poc/media_buy/create_media_buy_response.py b/src/adcp/types/generated_poc/media_buy/create_media_buy_response.py index 2835928a..8c791131 100644 --- a/src/adcp/types/generated_poc/media_buy/create_media_buy_response.py +++ b/src/adcp/types/generated_poc/media_buy/create_media_buy_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/create_media_buy_response.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:24:08+00:00 from __future__ import annotations @@ -18,33 +18,33 @@ class CreateMediaBuyResponse2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error], - Field(description='Array of errors explaining why the operation failed', min_length=1), + Field(description="Array of errors explaining why the operation failed", min_length=1), ] ext: ext_1.ExtensionObject | None = None class CreateMediaBuyResponse1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) account: Annotated[ account_1.Account | None, Field( - description='Account billed for this media buy. Includes advertiser, billing proxy (if any), and rate card applied.' + description="Account billed for this media buy. Includes advertiser, billing proxy (if any), and rate card applied." ), ] = None - buyer_ref: Annotated[str, Field(description="Buyer's reference identifier for this media buy")] - campaign_ref: Annotated[ + buyer_campaign_ref: Annotated[ str | None, Field(description="Buyer's campaign reference label, echoed from the request") ] = None + buyer_ref: Annotated[str, Field(description="Buyer's reference identifier for this media buy")] context: context_1.ContextObject | None = None creative_deadline: Annotated[ - AwareDatetime | None, Field(description='ISO 8601 timestamp for creative upload deadline') + AwareDatetime | None, Field(description="ISO 8601 timestamp for creative upload deadline") ] = None ext: ext_1.ExtensionObject | None = None media_buy_id: Annotated[ @@ -52,11 +52,11 @@ class CreateMediaBuyResponse1(AdCPBaseModel): ] packages: Annotated[ list[package.Package], - Field(description='Array of created packages with complete state information'), + Field(description="Array of created packages with complete state information"), ] sandbox: Annotated[ bool | None, - Field(description='When true, this response contains simulated data from sandbox mode.'), + Field(description="When true, this response contains simulated data from sandbox mode."), ] = None @@ -64,7 +64,7 @@ class CreateMediaBuyResponse(RootModel[CreateMediaBuyResponse1 | CreateMediaBuyR root: Annotated[ CreateMediaBuyResponse1 | CreateMediaBuyResponse2, Field( - description='Response payload for create_media_buy task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - the media buy is either fully created or not created at all.', - title='Create Media Buy Response', + description="Response payload for create_media_buy task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - the media buy is either fully created or not created at all.", + title="Create Media Buy Response", ), ] diff --git a/src/adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py b/src/adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py index 58b7a811..817e9d05 100644 --- a/src/adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +++ b/src/adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py @@ -18,7 +18,7 @@ class StatusFilter(RootModel[list[media_buy_status.MediaBuyStatus]]): root: Annotated[ list[media_buy_status.MediaBuyStatus], Field( - description='Filter by status. Can be a single status or array of statuses', + description="Filter by status. Can be a single status or array of statuses", min_length=1, ), ] @@ -26,41 +26,41 @@ class StatusFilter(RootModel[list[media_buy_status.MediaBuyStatus]]): class GetMediaBuyDeliveryRequest(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) account_id: Annotated[ str | None, Field( - description='Filter delivery data to a specific account. When provided, only returns media buys belonging to this account. When omitted, returns data across all accessible accounts. Optional if the agent has a single account.' + description="Filter delivery data to a specific account. When provided, only returns media buys belonging to this account. When omitted, returns data across all accessible accounts. Optional if the agent has a single account." ), ] = None buyer_refs: Annotated[ list[str] | None, - Field(description='Array of buyer reference IDs to get delivery data for', min_length=1), + Field(description="Array of buyer reference IDs to get delivery data for", min_length=1), ] = None context: context_1.ContextObject | None = None end_date: Annotated[ str | None, Field( description="End date for reporting period (YYYY-MM-DD). When omitted along with start_date, returns campaign lifetime data. Only accepted when the product's reporting_capabilities.date_range_support is 'date_range'.", - pattern='^\\d{4}-\\d{2}-\\d{2}$', + pattern="^\\d{4}-\\d{2}-\\d{2}$", ), ] = None ext: ext_1.ExtensionObject | None = None media_buy_ids: Annotated[ list[str] | None, Field( - description='Array of publisher media buy IDs to get delivery data for', min_length=1 + description="Array of publisher media buy IDs to get delivery data for", min_length=1 ), ] = None start_date: Annotated[ str | None, Field( description="Start date for reporting period (YYYY-MM-DD). When omitted along with end_date, returns campaign lifetime data. Only accepted when the product's reporting_capabilities.date_range_support is 'date_range'.", - pattern='^\\d{4}-\\d{2}-\\d{2}$', + pattern="^\\d{4}-\\d{2}-\\d{2}$", ), ] = None status_filter: Annotated[ media_buy_status.MediaBuyStatus | StatusFilter | None, - Field(description='Filter by status. Can be a single status or array of statuses'), + Field(description="Filter by status. Can be a single status or array of statuses"), ] = None diff --git a/src/adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py b/src/adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py index e5ddcfcb..1cd80d48 100644 --- a/src/adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +++ b/src/adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/get_media_buy_delivery_response.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:24:08+00:00 from __future__ import annotations @@ -21,37 +21,37 @@ class AggregatedTotals(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) clicks: Annotated[ float | None, - Field(description='Total clicks across all media buys (if applicable)', ge=0.0), + Field(description="Total clicks across all media buys (if applicable)", ge=0.0), ] = None conversion_value: Annotated[ float | None, - Field(description='Total conversion value across all media buys (if applicable)', ge=0.0), + Field(description="Total conversion value across all media buys (if applicable)", ge=0.0), ] = None conversions: Annotated[ float | None, - Field(description='Total conversions across all media buys (if applicable)', ge=0.0), + Field(description="Total conversions across all media buys (if applicable)", ge=0.0), ] = None cost_per_acquisition: Annotated[ float | None, Field( - description='Aggregate cost per conversion across all media buys (total spend / total conversions)', + description="Aggregate cost per conversion across all media buys (total spend / total conversions)", ge=0.0, ), ] = None impressions: Annotated[ - float, Field(description='Total impressions delivered across all media buys', ge=0.0) + float, Field(description="Total impressions delivered across all media buys", ge=0.0) ] media_buy_count: Annotated[ - int, Field(description='Number of media buys included in the response', ge=0) + int, Field(description="Number of media buys included in the response", ge=0) ] new_to_brand_rate: Annotated[ float | None, Field( - description='Fraction of total conversions across all media buys from first-time brand buyers (weighted by conversion volume, not a simple average of per-buy rates)', + description="Fraction of total conversions across all media buys from first-time brand buyers (weighted by conversion volume, not a simple average of per-buy rates)", ge=0.0, le=1.0, ), @@ -59,87 +59,88 @@ class AggregatedTotals(AdCPBaseModel): roas: Annotated[ float | None, Field( - description='Aggregate return on ad spend across all media buys (total conversion_value / total spend)', + description="Aggregate return on ad spend across all media buys (total conversion_value / total spend)", ge=0.0, ), ] = None - spend: Annotated[float, Field(description='Total amount spent across all media buys', ge=0.0)] + spend: Annotated[float, Field(description="Total amount spent across all media buys", ge=0.0)] video_completions: Annotated[ float | None, - Field(description='Total video completions across all media buys (if applicable)', ge=0.0), + Field(description="Total video completions across all media buys (if applicable)", ge=0.0), ] = None class DeliveryStatus(Enum): - delivering = 'delivering' - completed = 'completed' - budget_exhausted = 'budget_exhausted' - flight_ended = 'flight_ended' - goal_met = 'goal_met' + delivering = "delivering" + completed = "completed" + budget_exhausted = "budget_exhausted" + flight_ended = "flight_ended" + goal_met = "goal_met" class DailyBreakdownItem(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) conversion_value: Annotated[ - float | None, Field(description='Daily conversion value', ge=0.0) + float | None, Field(description="Daily conversion value", ge=0.0) ] = None - conversions: Annotated[float | None, Field(description='Daily conversions', ge=0.0)] = None - date: Annotated[str, Field(description='Date (YYYY-MM-DD)', pattern='^\\d{4}-\\d{2}-\\d{2}$')] - impressions: Annotated[float, Field(description='Daily impressions', ge=0.0)] + conversions: Annotated[float | None, Field(description="Daily conversions", ge=0.0)] = None + date: Annotated[str, Field(description="Date (YYYY-MM-DD)", pattern="^\\d{4}-\\d{2}-\\d{2}$")] + impressions: Annotated[float, Field(description="Daily impressions", ge=0.0)] new_to_brand_rate: Annotated[ float | None, Field( - description='Daily fraction of conversions from first-time brand buyers (0 = none, 1 = all)', + description="Daily fraction of conversions from first-time brand buyers (0 = none, 1 = all)", ge=0.0, le=1.0, ), ] = None roas: Annotated[ float | None, - Field(description='Daily return on ad spend (conversion_value / spend)', ge=0.0), + Field(description="Daily return on ad spend (conversion_value / spend)", ge=0.0), ] = None - spend: Annotated[float, Field(description='Daily spend', ge=0.0)] + spend: Annotated[float, Field(description="Daily spend", ge=0.0)] class Status(Enum): - pending = 'pending' - active = 'active' - paused = 'paused' - completed = 'completed' - failed = 'failed' - reporting_delayed = 'reporting_delayed' + pending_activation = "pending_activation" + pending = "pending" + active = "active" + paused = "paused" + completed = "completed" + failed = "failed" + reporting_delayed = "reporting_delayed" class NotificationType(Enum): - scheduled = 'scheduled' - final = 'final' - delayed = 'delayed' - adjusted = 'adjusted' + scheduled = "scheduled" + final = "final" + delayed = "delayed" + adjusted = "adjusted" class ReportingPeriod(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) end: Annotated[ AwareDatetime, - Field(description='ISO 8601 end timestamp in UTC (e.g., 2024-02-05T23:59:59Z)'), + Field(description="ISO 8601 end timestamp in UTC (e.g., 2024-02-05T23:59:59Z)"), ] start: Annotated[ AwareDatetime, - Field(description='ISO 8601 start timestamp in UTC (e.g., 2024-02-05T00:00:00Z)'), + Field(description="ISO 8601 start timestamp in UTC (e.g., 2024-02-05T00:00:00Z)"), ] class ByCatalogItemItem(DeliveryMetrics): content_id: Annotated[ - str, Field(description='Catalog item identifier (e.g., SKU, GTIN, job_id, offering_id)') + str, Field(description="Catalog item identifier (e.g., SKU, GTIN, job_id, offering_id)") ] content_id_type: Annotated[ content_id_type_1.ContentIdType | None, - Field(description='Identifier type for this content_id'), + Field(description="Identifier type for this content_id"), ] = None impressions: Any spend: Any @@ -147,12 +148,12 @@ class ByCatalogItemItem(DeliveryMetrics): class ByCreativeItem(DeliveryMetrics): creative_id: Annotated[ - str, Field(description='Creative identifier matching the creative assignment') + str, Field(description="Creative identifier matching the creative assignment") ] weight: Annotated[ float | None, Field( - description='Observed delivery share for this creative within the package during the reporting period, expressed as a percentage (0-100). Reflects actual delivery distribution, not a configured setting.', + description="Observed delivery share for this creative within the package during the reporting period, expressed as a percentage (0-100). Reflects actual delivery distribution, not a configured setting.", ge=0.0, le=100.0, ), @@ -168,46 +169,46 @@ class ByPackageItem(DeliveryMetrics): by_catalog_item: Annotated[ list[ByCatalogItemItem] | None, Field( - description='Delivery by catalog item within this package. Available for catalog-driven packages when the seller supports item-level reporting.' + description="Delivery by catalog item within this package. Available for catalog-driven packages when the seller supports item-level reporting." ), ] = None by_creative: Annotated[ list[ByCreativeItem] | None, Field( - description='Metrics broken down by creative within this package. Available when the seller supports creative-level reporting.' + description="Metrics broken down by creative within this package. Available when the seller supports creative-level reporting." ), ] = None currency: Annotated[ str, Field( description="ISO 4217 currency code (e.g., USD, EUR, GBP) for this package's pricing. Indicates the currency in which the rate and spend values are denominated. Different packages can use different currencies when supported by the publisher.", - pattern='^[A-Z]{3}$', + pattern="^[A-Z]{3}$", ), ] delivery_status: Annotated[ DeliveryStatus | None, Field( - description='System-reported operational state of this package. Reflects actual delivery state independent of buyer pause control.' + description="System-reported operational state of this package. Reflects actual delivery state independent of buyer pause control." ), ] = None pacing_index: Annotated[ float | None, - Field(description='Delivery pace (1.0 = on track, <1.0 = behind, >1.0 = ahead)', ge=0.0), + Field(description="Delivery pace (1.0 = on track, <1.0 = behind, >1.0 = ahead)", ge=0.0), ] = None package_id: Annotated[str, Field(description="Publisher's package identifier")] paused: Annotated[ - bool | None, Field(description='Whether this package is currently paused by the buyer') + bool | None, Field(description="Whether this package is currently paused by the buyer") ] = None pricing_model: Annotated[ pricing_model_1.PricingModel, Field( - description='The pricing model used for this package (e.g., cpm, cpcv, cpp). Indicates how the package is billed and which metrics are most relevant for optimization.' + description="The pricing model used for this package (e.g., cpm, cpcv, cpp). Indicates how the package is billed and which metrics are most relevant for optimization." ), ] rate: Annotated[ float, Field( - description='The pricing rate for this package in the specified currency. For fixed-rate pricing, this is the agreed rate (e.g., CPM rate of 12.50 means $12.50 per 1,000 impressions). For auction-based pricing, this represents the effective rate based on actual delivery.', + description="The pricing rate for this package in the specified currency. For fixed-rate pricing, this is the agreed rate (e.g., CPM rate of 12.50 means $12.50 per 1,000 impressions). For auction-based pricing, this represents the effective rate based on actual delivery.", ge=0.0, ), ] @@ -227,42 +228,42 @@ class Totals(DeliveryMetrics): class MediaBuyDelivery(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - buyer_ref: Annotated[ - str | None, Field(description="Buyer's reference identifier for this media buy") - ] = None - by_package: Annotated[list[ByPackageItem], Field(description='Metrics broken down by package')] - campaign_ref: Annotated[ + buyer_campaign_ref: Annotated[ str | None, Field( - description="Buyer's campaign reference label. Groups related operations under a single campaign for CRM and ad server correlation." + description="Buyer's campaign reference label from create_media_buy.buyer_campaign_ref. Groups related operations under a single campaign for CRM and ad server correlation; may be absent when not provided at creation time." ), ] = None + buyer_ref: Annotated[ + str | None, Field(description="Buyer's reference identifier for this media buy") + ] = None + by_package: Annotated[list[ByPackageItem], Field(description="Metrics broken down by package")] daily_breakdown: Annotated[ - list[DailyBreakdownItem] | None, Field(description='Day-by-day delivery') + list[DailyBreakdownItem] | None, Field(description="Day-by-day delivery") ] = None expected_availability: Annotated[ AwareDatetime | None, Field( - description='When delayed data is expected to be available (only present when status is reporting_delayed)' + description="When delayed data is expected to be available (only present when status is reporting_delayed)" ), ] = None is_adjusted: Annotated[ bool | None, Field( - description='Indicates this delivery contains updated data for a previously reported period. Buyer should replace previous period data with these totals.' + description="Indicates this delivery contains updated data for a previously reported period. Buyer should replace previous period data with these totals." ), ] = None media_buy_id: Annotated[str, Field(description="Publisher's media buy identifier")] pricing_model: Annotated[ pricing_model_1.PricingModel | None, - Field(description='Pricing model used for this media buy'), + Field(description="Pricing model used for this media buy"), ] = None status: Annotated[ Status, Field( - description='Current media buy status. In webhook context, reporting_delayed indicates data temporarily unavailable.' + description="Current media buy status. Lifecycle states use the same taxonomy as media-buy-status (`pending_activation`, `active`, `paused`, `completed`). In webhook context, reporting_delayed indicates data temporarily unavailable. `pending` is accepted as a legacy alias for pending_activation." ), ] totals: Totals @@ -270,33 +271,33 @@ class MediaBuyDelivery(AdCPBaseModel): class GetMediaBuyDeliveryResponse(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) aggregated_totals: Annotated[ AggregatedTotals | None, Field( - description='Combined metrics across all returned media buys. Only included in API responses (get_media_buy_delivery), not in webhook notifications.' + description="Combined metrics across all returned media buys. Only included in API responses (get_media_buy_delivery), not in webhook notifications." ), ] = None attribution_window: Annotated[ attribution_window_1.AttributionWindow | None, Field( - description='Attribution methodology and lookback windows used for conversion metrics in this response. All media buys from a single seller share the same attribution methodology. Enables cross-platform comparison (e.g., Amazon 14-day click vs. Criteo 30-day click).' + description="Attribution methodology and lookback windows used for conversion metrics in this response. All media buys from a single seller share the same attribution methodology. Enables cross-platform comparison (e.g., Amazon 14-day click vs. Criteo 30-day click)." ), ] = None context: context_1.ContextObject | None = None - currency: Annotated[str, Field(description='ISO 4217 currency code', pattern='^[A-Z]{3}$')] + currency: Annotated[str, Field(description="ISO 4217 currency code", pattern="^[A-Z]{3}$")] errors: Annotated[ list[error.Error] | None, Field( - description='Task-specific errors and warnings (e.g., missing delivery data, reporting platform issues)' + description="Task-specific errors and warnings (e.g., missing delivery data, reporting platform issues)" ), ] = None ext: ext_1.ExtensionObject | None = None media_buy_deliveries: Annotated[ list[MediaBuyDelivery], Field( - description='Array of delivery data for media buys. When used in webhook notifications, may contain multiple media buys aggregated by publisher. When used in get_media_buy_delivery API responses, typically contains requested media buys.' + description="Array of delivery data for media buys. When used in webhook notifications, may contain multiple media buys aggregated by publisher. When used in get_media_buy_delivery API responses, typically contains requested media buys." ), ] next_expected_at: Annotated[ @@ -308,34 +309,34 @@ class GetMediaBuyDeliveryResponse(AdCPBaseModel): notification_type: Annotated[ NotificationType | None, Field( - description='Type of webhook notification (only present in webhook deliveries): scheduled = regular periodic update, final = campaign completed, delayed = data not yet available, adjusted = resending period with updated data' + description="Type of webhook notification (only present in webhook deliveries): scheduled = regular periodic update, final = campaign completed, delayed = data not yet available, adjusted = resending period with updated data" ), ] = None partial_data: Annotated[ bool | None, Field( - description='Indicates if any media buys in this webhook have missing/delayed data (only present in webhook deliveries)' + description="Indicates if any media buys in this webhook have missing/delayed data (only present in webhook deliveries)" ), ] = None reporting_period: Annotated[ ReportingPeriod, - Field(description='Date range for the report. All periods use UTC timezone.'), + Field(description="Date range for the report. All periods use UTC timezone."), ] sandbox: Annotated[ bool | None, - Field(description='When true, this response contains simulated data from sandbox mode.'), + Field(description="When true, this response contains simulated data from sandbox mode."), ] = None sequence_number: Annotated[ int | None, Field( - description='Sequential notification number (only present in webhook deliveries, starts at 1)', + description="Sequential notification number (only present in webhook deliveries, starts at 1)", ge=1, ), ] = None unavailable_count: Annotated[ int | None, Field( - description='Number of media buys with reporting_delayed or failed status (only present in webhook deliveries when partial_data is true)', + description="Number of media buys with reporting_delayed or failed status (only present in webhook deliveries when partial_data is true)", ge=0, ), ] = None diff --git a/src/adcp/types/generated_poc/media_buy/get_media_buys_request.py b/src/adcp/types/generated_poc/media_buy/get_media_buys_request.py new file mode 100644 index 00000000..7b69fc89 --- /dev/null +++ b/src/adcp/types/generated_poc/media_buy/get_media_buys_request.py @@ -0,0 +1,68 @@ +# generated by datamodel-codegen: +# filename: media_buy/get_media_buys_request.json +# timestamp: 2026-02-23T01:24:08+00:00 + +from __future__ import annotations + +from typing import Annotated + +from adcp.types.base import AdCPBaseModel +from pydantic import ConfigDict, Field, RootModel + +from ..core import context as context_1 +from ..core import ext as ext_1 +from ..core import pagination_request +from ..enums import media_buy_status + + +class StatusFilter(RootModel[list[media_buy_status.MediaBuyStatus]]): + root: Annotated[ + list[media_buy_status.MediaBuyStatus], + Field( + description='Filter by status. Can be a single status or array of statuses. Defaults to ["active"] only when media_buy_ids and buyer_refs are both omitted. When media_buy_ids or buyer_refs are provided, no implicit status filter is applied.', + min_length=1, + ), + ] + + +class GetMediaBuysRequest(AdCPBaseModel): + model_config = ConfigDict( + extra="allow", + ) + account_id: Annotated[ + str | None, + Field( + description="Filter to a specific account. When omitted, returns media buys across all accessible accounts. Optional if the agent has a single account." + ), + ] = None + buyer_refs: Annotated[ + list[str] | None, + Field(description="Array of buyer reference IDs to retrieve", min_length=1), + ] = None + context: context_1.ContextObject | None = None + ext: ext_1.ExtensionObject | None = None + include_snapshot: Annotated[ + bool | None, + Field( + description="When true, include a near-real-time delivery snapshot for each package. Snapshots reflect the latest available entity-level stats from the platform (e.g., updated every ~15 minutes on GAM, ~1 hour on batch-only platforms). The staleness_seconds field on each snapshot indicates data freshness. If a snapshot cannot be returned, package.snapshot_unavailable_reason explains why. Defaults to false." + ), + ] = False + media_buy_ids: Annotated[ + list[str] | None, + Field( + description="Array of publisher media buy IDs to retrieve. When omitted along with buyer_refs, returns a paginated set of accessible media buys matching status_filter.", + min_length=1, + ), + ] = None + pagination: Annotated[ + pagination_request.PaginationRequest | None, + Field( + description="Cursor-based pagination controls. Strongly recommended when querying broad scopes (for example, all active media buys in an account)." + ), + ] = None + status_filter: Annotated[ + media_buy_status.MediaBuyStatus | StatusFilter | None, + Field( + description='Filter by status. Can be a single status or array of statuses. Defaults to ["active"] only when media_buy_ids and buyer_refs are both omitted. When media_buy_ids or buyer_refs are provided, no implicit status filter is applied.' + ), + ] = None diff --git a/src/adcp/types/generated_poc/media_buy/get_media_buys_response.py b/src/adcp/types/generated_poc/media_buy/get_media_buys_response.py new file mode 100644 index 00000000..be9c64e5 --- /dev/null +++ b/src/adcp/types/generated_poc/media_buy/get_media_buys_response.py @@ -0,0 +1,250 @@ +# generated by datamodel-codegen: +# filename: media_buy/get_media_buys_response.json +# timestamp: 2026-02-23T01:24:08+00:00 + +from __future__ import annotations + +from enum import Enum +from typing import Annotated + +from adcp.types.base import AdCPBaseModel +from pydantic import AwareDatetime, ConfigDict, Field + +from ..core import account as account_1 +from ..core import context as context_1 +from ..core import error +from ..core import ext as ext_1 +from ..core import format_id, pagination_response +from ..enums import creative_approval_status, media_buy_status + + +class CreativeApproval(AdCPBaseModel): + model_config = ConfigDict( + extra="allow", + ) + approval_status: creative_approval_status.CreativeApprovalStatus + creative_id: Annotated[str, Field(description="Creative identifier")] + rejection_reason: Annotated[ + str | None, + Field( + description="Human-readable explanation of why the creative was rejected. Present only when approval_status is 'rejected'." + ), + ] = None + + +class DeliveryStatus(Enum): + delivering = "delivering" + not_delivering = "not_delivering" + completed = "completed" + budget_exhausted = "budget_exhausted" + flight_ended = "flight_ended" + goal_met = "goal_met" + + +class Snapshot(AdCPBaseModel): + model_config = ConfigDict( + extra="allow", + ) + as_of: Annotated[ + AwareDatetime, + Field(description="ISO 8601 timestamp when this snapshot was captured by the platform"), + ] + clicks: Annotated[ + float | None, Field(description="Total clicks since package start (when available)", ge=0.0) + ] = None + currency: Annotated[ + str | None, + Field( + description="ISO 4217 currency code for spend in this snapshot. Optional when unchanged from package.currency or media_buy.currency.", + pattern="^[A-Z]{3}$", + ), + ] = None + delivery_status: Annotated[ + DeliveryStatus | None, + Field( + description="Operational delivery state of this package. 'not_delivering' means the package is within its scheduled flight but has delivered zero impressions for at least one full staleness cycle — the signal for automated price adjustments or buyer alerts. Implementers must not return 'not_delivering' until at least staleness_seconds have elapsed since package activation." + ), + ] = None + ext: Annotated[ + ext_1.ExtensionObject | None, + Field(description="Optional extension object for seller-specific snapshot fields."), + ] = None + impressions: Annotated[ + float, Field(description="Total impressions delivered since package start", ge=0.0) + ] + pacing_index: Annotated[ + float | None, + Field( + description="Current delivery pace relative to expected (1.0 = on track, <1.0 = behind, >1.0 = ahead). Absent when pacing cannot be determined.", + ge=0.0, + ), + ] = None + spend: Annotated[ + float, + Field( + description="Total spend since package start, denominated in snapshot.currency when present, otherwise package.currency or media_buy.currency", + ge=0.0, + ), + ] + staleness_seconds: Annotated[ + int, + Field( + description="Maximum age of this data in seconds. For example, 900 means the data may be up to 15 minutes old. Use this to interpret zero delivery: a value of 900 means zero impressions is likely real; a value of 14400 means reporting may still be catching up.", + ge=0, + ), + ] + + +class SnapshotUnavailableReason(Enum): + SNAPSHOT_UNSUPPORTED = "SNAPSHOT_UNSUPPORTED" + SNAPSHOT_TEMPORARILY_UNAVAILABLE = "SNAPSHOT_TEMPORARILY_UNAVAILABLE" + SNAPSHOT_PERMISSION_DENIED = "SNAPSHOT_PERMISSION_DENIED" + + +class Package(AdCPBaseModel): + model_config = ConfigDict( + extra="allow", + ) + bid_price: Annotated[ + float | None, + Field( + description="Current bid price for auction-based packages. Denominated in package.currency when present, otherwise media_buy.currency. Relevant for automated price optimization loops.", + ge=0.0, + ), + ] = None + budget: Annotated[ + float | None, + Field( + description="Package budget amount, denominated in package.currency when present, otherwise media_buy.currency", + ge=0.0, + ), + ] = None + buyer_ref: Annotated[ + str | None, Field(description="Buyer's reference identifier for this package") + ] = None + creative_approvals: Annotated[ + list[CreativeApproval] | None, + Field( + description="Approval status for each creative assigned to this package. Absent when no creatives have been assigned." + ), + ] = None + currency: Annotated[ + str | None, + Field( + description="ISO 4217 currency code for monetary values at this package level (budget, bid_price, snapshot.spend). When absent, inherit media_buy.currency.", + pattern="^[A-Z]{3}$", + ), + ] = None + end_time: Annotated[ + AwareDatetime | None, Field(description="ISO 8601 flight end time for this package") + ] = None + ext: ext_1.ExtensionObject | None = None + format_ids_pending: Annotated[ + list[format_id.FormatId] | None, + Field( + description="Format IDs from the original create_media_buy format_ids_to_provide that have not yet been uploaded via sync_creatives. When empty or absent, all required formats have been provided." + ), + ] = None + impressions: Annotated[ + float | None, + Field(description="Goal impression count for impression-based packages", ge=0.0), + ] = None + package_id: Annotated[str, Field(description="Publisher's package identifier")] + paused: Annotated[ + bool | None, Field(description="Whether this package is currently paused by the buyer") + ] = None + product_id: Annotated[ + str | None, Field(description="Product identifier this package is purchased from") + ] = None + snapshot: Annotated[ + Snapshot | None, + Field( + description="Near-real-time delivery snapshot for this package. Only present when include_snapshot was true in the request. Represents the latest available entity-level stats from the platform — not billing-grade data." + ), + ] = None + snapshot_unavailable_reason: Annotated[ + SnapshotUnavailableReason | None, + Field( + description="Machine-readable reason the snapshot is omitted. Present only when include_snapshot was true and snapshot is unavailable for this package." + ), + ] = None + start_time: Annotated[ + AwareDatetime | None, + Field( + description="ISO 8601 flight start time for this package. Use to determine whether the package is within its scheduled flight before interpreting delivery status." + ), + ] = None + + +class MediaBuy(AdCPBaseModel): + model_config = ConfigDict( + extra="allow", + ) + account: Annotated[ + account_1.Account | None, Field(description="Account billed for this media buy") + ] = None + buyer_campaign_ref: Annotated[ + str | None, + Field( + description="Buyer campaign reference label sourced from create_media_buy.buyer_campaign_ref. Groups related operations under a single campaign; may be absent when not provided at creation time." + ), + ] = None + buyer_ref: Annotated[ + str | None, Field(description="Buyer's reference identifier for this media buy") + ] = None + created_at: Annotated[AwareDatetime | None, Field(description="Creation timestamp")] = None + creative_deadline: Annotated[ + AwareDatetime | None, Field(description="ISO 8601 timestamp for creative upload deadline") + ] = None + currency: Annotated[ + str, + Field( + description="ISO 4217 currency code (e.g., USD, EUR, GBP) for monetary values at this media buy level. total_budget is always denominated in this currency. Package-level fields may override with package.currency.", + pattern="^[A-Z]{3}$", + ), + ] + ext: ext_1.ExtensionObject | None = None + media_buy_id: Annotated[ + str, Field(description="Publisher's unique identifier for the media buy") + ] + packages: Annotated[ + list[Package], + Field( + description="Packages within this media buy, augmented with creative approval status and optional delivery snapshots" + ), + ] + status: media_buy_status.MediaBuyStatus + total_budget: Annotated[ + float, + Field( + description="Total budget amount across all packages, denominated in media_buy.currency", + ge=0.0, + ), + ] + updated_at: Annotated[AwareDatetime | None, Field(description="Last update timestamp")] = None + + +class GetMediaBuysResponse(AdCPBaseModel): + model_config = ConfigDict( + extra="allow", + ) + context: context_1.ContextObject | None = None + errors: Annotated[ + list[error.Error] | None, + Field(description="Task-specific errors (e.g., media buy not found)"), + ] = None + ext: ext_1.ExtensionObject | None = None + media_buys: Annotated[ + list[MediaBuy], + Field( + description="Array of media buys with status, creative approval state, and optional delivery snapshots" + ), + ] + pagination: Annotated[ + pagination_response.PaginationResponse | None, + Field(description="Pagination metadata for the media_buys array."), + ] = None + sandbox: Annotated[ + bool | None, + Field(description="When true, this response contains simulated data from sandbox mode."), + ] = None diff --git a/src/adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py b/src/adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py index 8dbc94bb..8cb93930 100644 --- a/src/adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +++ b/src/adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py @@ -16,23 +16,23 @@ class Reason(Enum): - CLARIFICATION_NEEDED = 'CLARIFICATION_NEEDED' - BUDGET_REQUIRED = 'BUDGET_REQUIRED' + CLARIFICATION_NEEDED = "CLARIFICATION_NEEDED" + BUDGET_REQUIRED = "BUDGET_REQUIRED" class GetProductsInputRequired(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None partial_results: Annotated[ list[product.Product] | None, - Field(description='Partial product results that may help inform the clarification'), + Field(description="Partial product results that may help inform the clarification"), ] = None reason: Annotated[ - Reason | None, Field(description='Reason code indicating why input is needed') + Reason | None, Field(description="Reason code indicating why input is needed") ] = None suggestions: Annotated[ - list[str] | None, Field(description='Suggested values or options for the required input') + list[str] | None, Field(description="Suggested values or options for the required input") ] = None diff --git a/src/adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py b/src/adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py index b79befe4..4121c2f3 100644 --- a/src/adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +++ b/src/adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py @@ -15,10 +15,10 @@ class GetProductsSubmitted(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None estimated_completion: Annotated[ - AwareDatetime | None, Field(description='Estimated completion time for the search') + AwareDatetime | None, Field(description="Estimated completion time for the search") ] = None ext: ext_1.ExtensionObject | None = None diff --git a/src/adcp/types/generated_poc/media_buy/get_products_async_response_working.py b/src/adcp/types/generated_poc/media_buy/get_products_async_response_working.py index 84540f82..b70e8a7d 100644 --- a/src/adcp/types/generated_poc/media_buy/get_products_async_response_working.py +++ b/src/adcp/types/generated_poc/media_buy/get_products_async_response_working.py @@ -15,7 +15,7 @@ class GetProductsWorking(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None current_step: Annotated[ @@ -27,9 +27,9 @@ class GetProductsWorking(AdCPBaseModel): ext: ext_1.ExtensionObject | None = None percentage: Annotated[ float | None, - Field(description='Progress percentage of the search operation', ge=0.0, le=100.0), + Field(description="Progress percentage of the search operation", ge=0.0, le=100.0), ] = None - step_number: Annotated[int | None, Field(description='Current step number (1-indexed)')] = None + step_number: Annotated[int | None, Field(description="Current step number (1-indexed)")] = None total_steps: Annotated[ - int | None, Field(description='Total number of steps in the search process') + int | None, Field(description="Total number of steps in the search process") ] = None diff --git a/src/adcp/types/generated_poc/media_buy/get_products_request.py b/src/adcp/types/generated_poc/media_buy/get_products_request.py index c1313502..8e17ca67 100644 --- a/src/adcp/types/generated_poc/media_buy/get_products_request.py +++ b/src/adcp/types/generated_poc/media_buy/get_products_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/get_products_request.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:24:08+00:00 from __future__ import annotations @@ -18,7 +18,7 @@ class GetProductsRequest(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) account_id: Annotated[ str | None, @@ -29,13 +29,13 @@ class GetProductsRequest(AdCPBaseModel): brand: Annotated[ brand_ref.BrandReference | None, Field( - description='Brand reference for product discovery context. Resolved to full brand identity at execution time.' + description="Brand reference for product discovery context. Resolved to full brand identity at execution time." ), ] = None brief: Annotated[ - str | None, Field(description='Natural language description of campaign requirements.') + str | None, Field(description="Natural language description of campaign requirements.") ] = None - campaign_ref: Annotated[ + buyer_campaign_ref: Annotated[ str | None, Field( description="Buyer's campaign reference label. Groups related discovery and buy operations under a single campaign for CRM and ad server correlation (e.g., 'NovaDrink_Meals_Q2')." @@ -44,7 +44,7 @@ class GetProductsRequest(AdCPBaseModel): catalog: Annotated[ catalog_1.Catalog | None, Field( - description='Catalog of items the buyer wants to promote. The seller matches catalog items against its inventory and returns products where matches exist. Supports all catalog types: a job catalog finds job ad products, a product catalog finds sponsored product slots. Reference a synced catalog by catalog_id, or provide inline items.' + description="Catalog of items the buyer wants to promote. The seller matches catalog items against its inventory and returns products where matches exist. Supports all catalog types: a job catalog finds job ad products, a product catalog finds sponsored product slots. Reference a synced catalog by catalog_id, or provide inline items." ), ] = None context: context_1.ContextObject | None = None @@ -54,6 +54,6 @@ class GetProductsRequest(AdCPBaseModel): property_list: Annotated[ property_list_ref.PropertyListReference | None, Field( - description='[AdCP 3.0] Reference to an externally managed property list. When provided, the sales agent should filter products to only those available on properties in the list.' + description="[AdCP 3.0] Reference to an externally managed property list. When provided, the sales agent should filter products to only those available on properties in the list." ), ] = None diff --git a/src/adcp/types/generated_poc/media_buy/get_products_response.py b/src/adcp/types/generated_poc/media_buy/get_products_response.py index 3d794c88..fe2189ed 100644 --- a/src/adcp/types/generated_poc/media_buy/get_products_response.py +++ b/src/adcp/types/generated_poc/media_buy/get_products_response.py @@ -17,35 +17,35 @@ class GetProductsResponse(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) catalog_applied: Annotated[ bool | None, Field( - description='Whether the seller filtered results based on the provided catalog. True if the seller matched catalog items against its inventory. Absent or false if no catalog was provided or the seller does not support catalog matching.' + description="Whether the seller filtered results based on the provided catalog. True if the seller matched catalog items against its inventory. Absent or false if no catalog was provided or the seller does not support catalog matching." ), ] = None context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error] | None, - Field(description='Task-specific errors and warnings (e.g., product filtering issues)'), + Field(description="Task-specific errors and warnings (e.g., product filtering issues)"), ] = None ext: ext_1.ExtensionObject | None = None pagination: pagination_response.PaginationResponse | None = None - products: Annotated[list[product.Product], Field(description='Array of matching products')] + products: Annotated[list[product.Product], Field(description="Array of matching products")] property_list_applied: Annotated[ bool | None, Field( - description='[AdCP 3.0] Indicates whether property_list filtering was applied. True if the agent filtered products based on the provided property_list. Absent or false if property_list was not provided or not supported by this agent.' + description="[AdCP 3.0] Indicates whether property_list filtering was applied. True if the agent filtered products based on the provided property_list. Absent or false if property_list was not provided or not supported by this agent." ), ] = None proposals: Annotated[ list[proposal.Proposal] | None, Field( - description='Optional array of proposed media plans with budget allocations across products. Publishers include proposals when they can provide strategic guidance based on the brief. Proposals are actionable - buyers can refine them via follow-up get_products calls within the same session, or execute them directly via create_media_buy.' + description="Optional array of proposed media plans with budget allocations across products. Publishers include proposals when they can provide strategic guidance based on the brief. Proposals are actionable - buyers can refine them via follow-up get_products calls within the same session, or execute them directly via create_media_buy." ), ] = None sandbox: Annotated[ bool | None, - Field(description='When true, this response contains simulated data from sandbox mode.'), + Field(description="When true, this response contains simulated data from sandbox mode."), ] = None diff --git a/src/adcp/types/generated_poc/media_buy/list_creative_formats_request.py b/src/adcp/types/generated_poc/media_buy/list_creative_formats_request.py index 28ed91e9..801988cd 100644 --- a/src/adcp/types/generated_poc/media_buy/list_creative_formats_request.py +++ b/src/adcp/types/generated_poc/media_buy/list_creative_formats_request.py @@ -18,7 +18,7 @@ class ListCreativeFormatsRequest(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) asset_types: Annotated[ list[asset_content_type.AssetContentType] | None, @@ -32,7 +32,7 @@ class ListCreativeFormatsRequest(AdCPBaseModel): format_ids: Annotated[ list[format_id.FormatId] | None, Field( - description='Return only these specific format IDs (e.g., from get_products response)', + description="Return only these specific format IDs (e.g., from get_products response)", min_length=1, ), ] = None @@ -46,35 +46,35 @@ class ListCreativeFormatsRequest(AdCPBaseModel): is_responsive: Annotated[ bool | None, Field( - description='Filter for responsive formats that adapt to container size. When true, returns formats without fixed dimensions.' + description="Filter for responsive formats that adapt to container size. When true, returns formats without fixed dimensions." ), ] = None max_height: Annotated[ int | None, Field( - description='Maximum height in pixels (inclusive). Returns formats where ANY render has height <= this value. For multi-render formats, matches if at least one render fits.' + description="Maximum height in pixels (inclusive). Returns formats where ANY render has height <= this value. For multi-render formats, matches if at least one render fits." ), ] = None max_width: Annotated[ int | None, Field( - description='Maximum width in pixels (inclusive). Returns formats where ANY render has width <= this value. For multi-render formats, matches if at least one render fits.' + description="Maximum width in pixels (inclusive). Returns formats where ANY render has width <= this value. For multi-render formats, matches if at least one render fits." ), ] = None min_height: Annotated[ int | None, Field( - description='Minimum height in pixels (inclusive). Returns formats where ANY render has height >= this value.' + description="Minimum height in pixels (inclusive). Returns formats where ANY render has height >= this value." ), ] = None min_width: Annotated[ int | None, Field( - description='Minimum width in pixels (inclusive). Returns formats where ANY render has width >= this value.' + description="Minimum width in pixels (inclusive). Returns formats where ANY render has width >= this value." ), ] = None name_search: Annotated[ - str | None, Field(description='Search for formats by name (case-insensitive partial match)') + str | None, Field(description="Search for formats by name (case-insensitive partial match)") ] = None output_format_ids: Annotated[ list[format_id.FormatId] | None, @@ -87,12 +87,12 @@ class ListCreativeFormatsRequest(AdCPBaseModel): type: Annotated[ format_category.FormatCategory | None, Field( - description='Filter by format type (technical categories with distinct requirements)' + description="Filter by format type (technical categories with distinct requirements)" ), ] = None wcag_level: Annotated[ wcag_level_1.WcagLevel | None, Field( - description='Filter to formats that meet at least this WCAG conformance level (A < AA < AAA)' + description="Filter to formats that meet at least this WCAG conformance level (A < AA < AAA)" ), ] = None diff --git a/src/adcp/types/generated_poc/media_buy/list_creative_formats_response.py b/src/adcp/types/generated_poc/media_buy/list_creative_formats_response.py index a15f63de..7d58fab2 100644 --- a/src/adcp/types/generated_poc/media_buy/list_creative_formats_response.py +++ b/src/adcp/types/generated_poc/media_buy/list_creative_formats_response.py @@ -18,7 +18,7 @@ class CreativeAgent(AdCPBaseModel): agent_name: Annotated[ - str | None, Field(description='Human-readable name for the creative agent') + str | None, Field(description="Human-readable name for the creative agent") ] = None agent_url: Annotated[ AnyUrl, @@ -28,24 +28,24 @@ class CreativeAgent(AdCPBaseModel): ] capabilities: Annotated[ list[creative_agent_capability.CreativeAgentCapability] | None, - Field(description='Capabilities this creative agent provides'), + Field(description="Capabilities this creative agent provides"), ] = None class ListCreativeFormatsResponse(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None creative_agents: Annotated[ list[CreativeAgent] | None, Field( - description='Optional: Creative agents that provide additional formats. Buyers can recursively query these agents to discover more formats. No authentication required for list_creative_formats.' + description="Optional: Creative agents that provide additional formats. Buyers can recursively query these agents to discover more formats. No authentication required for list_creative_formats." ), ] = None errors: Annotated[ list[error.Error] | None, - Field(description='Task-specific errors and warnings (e.g., format availability issues)'), + Field(description="Task-specific errors and warnings (e.g., format availability issues)"), ] = None ext: ext_1.ExtensionObject | None = None formats: Annotated[ @@ -57,5 +57,5 @@ class ListCreativeFormatsResponse(AdCPBaseModel): pagination: pagination_response.PaginationResponse | None = None sandbox: Annotated[ bool | None, - Field(description='When true, this response contains simulated data from sandbox mode.'), + Field(description="When true, this response contains simulated data from sandbox mode."), ] = None diff --git a/src/adcp/types/generated_poc/media_buy/list_creatives_request.py b/src/adcp/types/generated_poc/media_buy/list_creatives_request.py index 3d00c12b..8b3cfe66 100644 --- a/src/adcp/types/generated_poc/media_buy/list_creatives_request.py +++ b/src/adcp/types/generated_poc/media_buy/list_creatives_request.py @@ -18,52 +18,52 @@ class FieldModel(Enum): - creative_id = 'creative_id' - name = 'name' - format = 'format' - status = 'status' - created_date = 'created_date' - updated_date = 'updated_date' - tags = 'tags' - assignments = 'assignments' - performance = 'performance' - sub_assets = 'sub_assets' + creative_id = "creative_id" + name = "name" + format = "format" + status = "status" + created_date = "created_date" + updated_date = "updated_date" + tags = "tags" + assignments = "assignments" + performance = "performance" + sub_assets = "sub_assets" class Sort(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) direction: Annotated[ - sort_direction.SortDirection | None, Field(description='Sort direction') + sort_direction.SortDirection | None, Field(description="Sort direction") ] = sort_direction.SortDirection.desc field: Annotated[ - creative_sort_field.CreativeSortField | None, Field(description='Field to sort by') + creative_sort_field.CreativeSortField | None, Field(description="Field to sort by") ] = creative_sort_field.CreativeSortField.created_date class ListCreativesRequest(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None fields: Annotated[ list[FieldModel] | None, Field( - description='Specific fields to include in response (omit for all fields)', min_length=1 + description="Specific fields to include in response (omit for all fields)", min_length=1 ), ] = None filters: creative_filters.CreativeFilters | None = None include_assignments: Annotated[ - bool | None, Field(description='Include package assignment information in response') + bool | None, Field(description="Include package assignment information in response") ] = True include_performance: Annotated[ - bool | None, Field(description='Include aggregated performance metrics in response') + bool | None, Field(description="Include aggregated performance metrics in response") ] = False include_sub_assets: Annotated[ bool | None, - Field(description='Include sub-assets (for carousel/native formats) in response'), + Field(description="Include sub-assets (for carousel/native formats) in response"), ] = False pagination: pagination_request.PaginationRequest | None = None - sort: Annotated[Sort | None, Field(description='Sorting parameters')] = None + sort: Annotated[Sort | None, Field(description="Sorting parameters")] = None diff --git a/src/adcp/types/generated_poc/media_buy/list_creatives_response.py b/src/adcp/types/generated_poc/media_buy/list_creatives_response.py index ff03ecca..365f2a15 100644 --- a/src/adcp/types/generated_poc/media_buy/list_creatives_response.py +++ b/src/adcp/types/generated_poc/media_buy/list_creatives_response.py @@ -32,65 +32,65 @@ class AssignedPackage(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - assigned_date: Annotated[AwareDatetime, Field(description='When this assignment was created')] + assigned_date: Annotated[AwareDatetime, Field(description="When this assignment was created")] buyer_ref: Annotated[ str | None, Field(description="Buyer's reference identifier for this package") ] = None - package_id: Annotated[str, Field(description='Package identifier')] + package_id: Annotated[str, Field(description="Package identifier")] class Assignments(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) assigned_packages: Annotated[ list[AssignedPackage] | None, - Field(description='List of packages this creative is assigned to'), + Field(description="List of packages this creative is assigned to"), ] = None assignment_count: Annotated[ - int, Field(description='Total number of active package assignments', ge=0) + int, Field(description="Total number of active package assignments", ge=0) ] class Performance(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) clicks: Annotated[ - int | None, Field(description='Total clicks across all assignments', ge=0) + int | None, Field(description="Total clicks across all assignments", ge=0) ] = None conversion_rate: Annotated[ - float | None, Field(description='Conversion rate across all assignments', ge=0.0, le=1.0) + float | None, Field(description="Conversion rate across all assignments", ge=0.0, le=1.0) ] = None ctr: Annotated[ - float | None, Field(description='Click-through rate (clicks/impressions)', ge=0.0, le=1.0) + float | None, Field(description="Click-through rate (clicks/impressions)", ge=0.0, le=1.0) ] = None impressions: Annotated[ - int | None, Field(description='Total impressions across all assignments', ge=0) + int | None, Field(description="Total impressions across all assignments", ge=0) ] = None last_updated: Annotated[ - AwareDatetime, Field(description='When performance data was last updated') + AwareDatetime, Field(description="When performance data was last updated") ] performance_score: Annotated[ - float | None, Field(description='Aggregated performance score (0-100)', ge=0.0, le=100.0) + float | None, Field(description="Aggregated performance score (0-100)", ge=0.0, le=100.0) ] = None class StatusSummary(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - approved: Annotated[int | None, Field(description='Number of approved creatives', ge=0)] = None - archived: Annotated[int | None, Field(description='Number of archived creatives', ge=0)] = None + approved: Annotated[int | None, Field(description="Number of approved creatives", ge=0)] = None + archived: Annotated[int | None, Field(description="Number of archived creatives", ge=0)] = None pending_review: Annotated[ - int | None, Field(description='Number of creatives pending review', ge=0) + int | None, Field(description="Number of creatives pending review", ge=0) ] = None processing: Annotated[ - int | None, Field(description='Number of creatives being processed', ge=0) + int | None, Field(description="Number of creatives being processed", ge=0) ] = None - rejected: Annotated[int | None, Field(description='Number of rejected creatives', ge=0)] = None + rejected: Annotated[int | None, Field(description="Number of rejected creatives", ge=0)] = None class SortApplied(AdCPBaseModel): @@ -100,33 +100,33 @@ class SortApplied(AdCPBaseModel): class QuerySummary(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) filters_applied: Annotated[ - list[str] | None, Field(description='List of filters that were applied to the query') + list[str] | None, Field(description="List of filters that were applied to the query") ] = None returned: Annotated[ - int | None, Field(description='Number of creatives returned in this response', ge=0) + int | None, Field(description="Number of creatives returned in this response", ge=0) ] = None sort_applied: Annotated[ - SortApplied | None, Field(description='Sort order that was applied') + SortApplied | None, Field(description="Sort order that was applied") ] = None total_matching: Annotated[ int | None, - Field(description='Total number of creatives matching filters (across all pages)', ge=0), + Field(description="Total number of creatives matching filters (across all pages)", ge=0), ] = None class Creative(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) account: Annotated[ - account_1.Account | None, Field(description='Account that owns this creative') + account_1.Account | None, Field(description="Account that owns this creative") ] = None assets: Annotated[ dict[ - Annotated[str, StringConstraints(pattern=r'^[a-zA-Z0-9_-]+$')], + Annotated[str, StringConstraints(pattern=r"^[a-zA-Z0-9_-]+$")], image_asset.ImageAsset | video_asset.VideoAsset | audio_asset.AudioAsset @@ -139,67 +139,67 @@ class Creative(AdCPBaseModel): | url_asset.UrlAsset, ] | None, - Field(description='Assets for this creative, keyed by asset_role'), + Field(description="Assets for this creative, keyed by asset_role"), ] = None assignments: Annotated[ Assignments | None, - Field(description='Current package assignments (included when include_assignments=true)'), + Field(description="Current package assignments (included when include_assignments=true)"), ] = None catalogs: Annotated[ list[catalog.Catalog] | None, - Field(description='Catalogs this creative renders, if any', min_length=1), + Field(description="Catalogs this creative renders, if any", min_length=1), ] = None created_date: Annotated[ - AwareDatetime, Field(description='When the creative was uploaded to the library') + AwareDatetime, Field(description="When the creative was uploaded to the library") ] - creative_id: Annotated[str, Field(description='Unique identifier for the creative')] + creative_id: Annotated[str, Field(description="Unique identifier for the creative")] format_id: Annotated[ format_id_1.FormatId, - Field(description='Format identifier specifying which format this creative conforms to'), + Field(description="Format identifier specifying which format this creative conforms to"), ] - name: Annotated[str, Field(description='Human-readable creative name')] + name: Annotated[str, Field(description="Human-readable creative name")] performance: Annotated[ Performance | None, Field( - description='Aggregated performance metrics (included when include_performance=true)' + description="Aggregated performance metrics (included when include_performance=true)" ), ] = None status: Annotated[ - creative_status.CreativeStatus, Field(description='Current approval status of the creative') + creative_status.CreativeStatus, Field(description="Current approval status of the creative") ] sub_assets: Annotated[ list[sub_asset.SubAsset] | None, Field( - description='Sub-assets for multi-asset formats (included when include_sub_assets=true)' + description="Sub-assets for multi-asset formats (included when include_sub_assets=true)" ), ] = None tags: Annotated[ - list[str] | None, Field(description='User-defined tags for organization and searchability') + list[str] | None, Field(description="User-defined tags for organization and searchability") ] = None - updated_date: Annotated[AwareDatetime, Field(description='When the creative was last modified')] + updated_date: Annotated[AwareDatetime, Field(description="When the creative was last modified")] class ListCreativesResponse(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None creatives: Annotated[ - list[Creative], Field(description='Array of creative assets matching the query') + list[Creative], Field(description="Array of creative assets matching the query") ] ext: ext_1.ExtensionObject | None = None format_summary: Annotated[ - dict[Annotated[str, StringConstraints(pattern=r'^[a-zA-Z0-9_-]+$')], int] | None, - Field(description='Breakdown of creatives by format type'), + dict[Annotated[str, StringConstraints(pattern=r"^[a-zA-Z0-9_-]+$")], int] | None, + Field(description="Breakdown of creatives by format type"), ] = None pagination: pagination_response.PaginationResponse query_summary: Annotated[ - QuerySummary, Field(description='Summary of the query that was executed') + QuerySummary, Field(description="Summary of the query that was executed") ] sandbox: Annotated[ bool | None, - Field(description='When true, this response contains simulated data from sandbox mode.'), + Field(description="When true, this response contains simulated data from sandbox mode."), ] = None status_summary: Annotated[ - StatusSummary | None, Field(description='Breakdown of creatives by status') + StatusSummary | None, Field(description="Breakdown of creatives by status") ] = None diff --git a/src/adcp/types/generated_poc/media_buy/log_event_request.py b/src/adcp/types/generated_poc/media_buy/log_event_request.py index 43269d0b..bef1295a 100644 --- a/src/adcp/types/generated_poc/media_buy/log_event_request.py +++ b/src/adcp/types/generated_poc/media_buy/log_event_request.py @@ -16,14 +16,14 @@ class LogEventRequest(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None event_source_id: Annotated[ - str, Field(description='Event source configured on the account via sync_event_sources') + str, Field(description="Event source configured on the account via sync_event_sources") ] events: Annotated[ - list[event.Event], Field(description='Events to log', max_length=10000, min_length=1) + list[event.Event], Field(description="Events to log", max_length=10000, min_length=1) ] ext: ext_1.ExtensionObject | None = None test_event_code: Annotated[ diff --git a/src/adcp/types/generated_poc/media_buy/log_event_response.py b/src/adcp/types/generated_poc/media_buy/log_event_response.py index 90353c0c..21d6866e 100644 --- a/src/adcp/types/generated_poc/media_buy/log_event_response.py +++ b/src/adcp/types/generated_poc/media_buy/log_event_response.py @@ -16,52 +16,52 @@ class PartialFailure(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - code: Annotated[str, Field(description='Error code')] - event_id: Annotated[str, Field(description='ID of the failed event')] - message: Annotated[str, Field(description='Human-readable error message')] + code: Annotated[str, Field(description="Error code")] + event_id: Annotated[str, Field(description="ID of the failed event")] + message: Annotated[str, Field(description="Human-readable error message")] class LogEventResponse1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None events_processed: Annotated[ - int, Field(description='Number of events successfully queued for processing', ge=0) + int, Field(description="Number of events successfully queued for processing", ge=0) ] - events_received: Annotated[int, Field(description='Number of events received', ge=0)] + events_received: Annotated[int, Field(description="Number of events received", ge=0)] ext: ext_1.ExtensionObject | None = None match_quality: Annotated[ float | None, Field( - description='Overall match quality score for the batch (0.0 = no matches, 1.0 = all matched)', + description="Overall match quality score for the batch (0.0 = no matches, 1.0 = all matched)", ge=0.0, le=1.0, ), ] = None partial_failures: Annotated[ - list[PartialFailure] | None, Field(description='Events that failed validation') + list[PartialFailure] | None, Field(description="Events that failed validation") ] = None sandbox: Annotated[ bool | None, - Field(description='When true, this response contains simulated data from sandbox mode.'), + Field(description="When true, this response contains simulated data from sandbox mode."), ] = None warnings: Annotated[ list[str] | None, Field( - description='Non-fatal issues (low match quality, missing recommended fields, deprecation notices)' + description="Non-fatal issues (low match quality, missing recommended fields, deprecation notices)" ), ] = None class LogEventResponse2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None - errors: Annotated[list[error.Error], Field(description='Operation-level errors', min_length=1)] + errors: Annotated[list[error.Error], Field(description="Operation-level errors", min_length=1)] ext: ext_1.ExtensionObject | None = None @@ -69,7 +69,7 @@ class LogEventResponse(RootModel[LogEventResponse1 | LogEventResponse2]): root: Annotated[ LogEventResponse1 | LogEventResponse2, Field( - description='Response from event logging operation. Returns either event processing results OR operation-level errors.', - title='Log Event Response', + description="Response from event logging operation. Returns either event processing results OR operation-level errors.", + title="Log Event Response", ), ] diff --git a/src/adcp/types/generated_poc/media_buy/package_request.py b/src/adcp/types/generated_poc/media_buy/package_request.py index 3f781e09..cb4a47da 100644 --- a/src/adcp/types/generated_poc/media_buy/package_request.py +++ b/src/adcp/types/generated_poc/media_buy/package_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/package_request.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:24:08+00:00 from __future__ import annotations @@ -20,12 +20,12 @@ class PackageRequest(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) bid_price: Annotated[ float | None, Field( - description='Bid price for auction-based CPM pricing (required if using cpm-auction-option)', + description="Bid price for auction-based pricing options. This is the exact bid/price to honor unless selected pricing_option has max_bid=true, in which case bid_price is the buyer's maximum willingness to pay (ceiling).", ge=0.0, ), ] = None @@ -37,20 +37,20 @@ class PackageRequest(AdCPBaseModel): catalog: Annotated[ catalog_1.Catalog | None, Field( - description='Catalog this package promotes. Makes the package catalog-driven: one budget envelope, platform optimizes across items. Reference a synced catalog by catalog_id with optional selectors to narrow scope.' + description="Catalog this package promotes. Makes the package catalog-driven: one budget envelope, platform optimizes across items. Reference a synced catalog by catalog_id with optional selectors to narrow scope." ), ] = None creative_assignments: Annotated[ list[creative_assignment.CreativeAssignment] | None, Field( - description='Assign existing library creatives to this package with optional weights and placement targeting', + description="Assign existing library creatives to this package with optional weights and placement targeting", min_length=1, ), ] = None creatives: Annotated[ list[creative_asset.CreativeAsset] | None, Field( - description='Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.', + description="Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.", max_length=100, min_length=1, ), @@ -59,19 +59,19 @@ class PackageRequest(AdCPBaseModel): format_ids: Annotated[ list[format_id.FormatId] | None, Field( - description='Array of format IDs that will be used for this package - must be supported by the product. If omitted, defaults to all formats supported by the product.', + description="Array of format IDs that will be used for this package - must be supported by the product. If omitted, defaults to all formats supported by the product.", min_length=1, ), ] = None impressions: Annotated[ - float | None, Field(description='Impression goal for this package', ge=0.0) + float | None, Field(description="Impression goal for this package", ge=0.0) ] = None optimization_goal: optimization_goal_1.OptimizationGoal | None = None pacing: pacing_1.Pacing | None = None paused: Annotated[ bool | None, Field( - description='Whether this package should be created in a paused state. Paused packages do not deliver impressions. Defaults to false.' + description="Whether this package should be created in a paused state. Paused packages do not deliver impressions. Defaults to false." ), ] = False pricing_option_id: Annotated[ @@ -80,5 +80,5 @@ class PackageRequest(AdCPBaseModel): description="ID of the selected pricing option from the product's pricing_options array" ), ] - product_id: Annotated[str, Field(description='Product ID for this package')] + product_id: Annotated[str, Field(description="Product ID for this package")] targeting_overlay: targeting.TargetingOverlay | None = None diff --git a/src/adcp/types/generated_poc/media_buy/package_update.py b/src/adcp/types/generated_poc/media_buy/package_update.py index 02c7df54..a37f3d1c 100644 --- a/src/adcp/types/generated_poc/media_buy/package_update.py +++ b/src/adcp/types/generated_poc/media_buy/package_update.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/package_update.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:24:08+00:00 from __future__ import annotations @@ -19,19 +19,19 @@ class PackageUpdate1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) bid_price: Annotated[ float | None, Field( - description='Updated bid price for auction-based pricing options (only applies when pricing_option is auction-based)', + description="Updated bid price for auction-based pricing options. This is the exact bid/price to honor unless selected pricing_option has max_bid=true, in which case bid_price is the buyer's maximum willingness to pay (ceiling).", ge=0.0, ), ] = None budget: Annotated[ float | None, Field( - description='Updated budget allocation for this package in the currency specified by the pricing option', + description="Updated budget allocation for this package in the currency specified by the pricing option", ge=0.0, ), ] = None @@ -41,52 +41,52 @@ class PackageUpdate1(AdCPBaseModel): catalog: Annotated[ catalog_1.Catalog | None, Field( - description='Update the catalog this package promotes. Replaces the current catalog reference.' + description="Update the catalog this package promotes. Replaces the current catalog reference." ), ] = None creative_assignments: Annotated[ list[creative_assignment.CreativeAssignment] | None, Field( - description='Replace creative assignments for this package with optional weights and placement targeting. Uses replacement semantics - omit to leave assignments unchanged.' + description="Replace creative assignments for this package with optional weights and placement targeting. Uses replacement semantics - omit to leave assignments unchanged." ), ] = None creatives: Annotated[ list[creative_asset.CreativeAsset] | None, Field( - description='Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.', + description="Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.", max_length=100, min_length=1, ), ] = None ext: ext_1.ExtensionObject | None = None impressions: Annotated[ - float | None, Field(description='Updated impression goal for this package', ge=0.0) + float | None, Field(description="Updated impression goal for this package", ge=0.0) ] = None optimization_goal: optimization_goal_1.OptimizationGoal | None = None pacing: pacing_1.Pacing | None = None package_id: Annotated[str, Field(description="Publisher's ID of package to update")] paused: Annotated[ bool | None, - Field(description='Pause/resume specific package (true = paused, false = active)'), + Field(description="Pause/resume specific package (true = paused, false = active)"), ] = None targeting_overlay: targeting.TargetingOverlay | None = None class PackageUpdate2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) bid_price: Annotated[ float | None, Field( - description='Updated bid price for auction-based pricing options (only applies when pricing_option is auction-based)', + description="Updated bid price for auction-based pricing options. This is the exact bid/price to honor unless selected pricing_option has max_bid=true, in which case bid_price is the buyer's maximum willingness to pay (ceiling).", ge=0.0, ), ] = None budget: Annotated[ float | None, Field( - description='Updated budget allocation for this package in the currency specified by the pricing option', + description="Updated budget allocation for this package in the currency specified by the pricing option", ge=0.0, ), ] = None @@ -94,26 +94,26 @@ class PackageUpdate2(AdCPBaseModel): catalog: Annotated[ catalog_1.Catalog | None, Field( - description='Update the catalog this package promotes. Replaces the current catalog reference.' + description="Update the catalog this package promotes. Replaces the current catalog reference." ), ] = None creative_assignments: Annotated[ list[creative_assignment.CreativeAssignment] | None, Field( - description='Replace creative assignments for this package with optional weights and placement targeting. Uses replacement semantics - omit to leave assignments unchanged.' + description="Replace creative assignments for this package with optional weights and placement targeting. Uses replacement semantics - omit to leave assignments unchanged." ), ] = None creatives: Annotated[ list[creative_asset.CreativeAsset] | None, Field( - description='Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.', + description="Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.", max_length=100, min_length=1, ), ] = None ext: ext_1.ExtensionObject | None = None impressions: Annotated[ - float | None, Field(description='Updated impression goal for this package', ge=0.0) + float | None, Field(description="Updated impression goal for this package", ge=0.0) ] = None optimization_goal: optimization_goal_1.OptimizationGoal | None = None pacing: pacing_1.Pacing | None = None @@ -122,7 +122,7 @@ class PackageUpdate2(AdCPBaseModel): ) paused: Annotated[ bool | None, - Field(description='Pause/resume specific package (true = paused, false = active)'), + Field(description="Pause/resume specific package (true = paused, false = active)"), ] = None targeting_overlay: targeting.TargetingOverlay | None = None @@ -131,7 +131,7 @@ class PackageUpdate(RootModel[PackageUpdate1 | PackageUpdate2]): root: Annotated[ PackageUpdate1 | PackageUpdate2, Field( - description='Package update configuration for update_media_buy. Identifies package by package_id or buyer_ref and specifies fields to modify. Fields not present are left unchanged. Note: product_id, format_ids, and pricing_option_id cannot be changed after creation.', - title='Package Update', + description="Package update configuration for update_media_buy. Identifies package by package_id or buyer_ref and specifies fields to modify. Fields not present are left unchanged. Note: product_id, format_ids, and pricing_option_id cannot be changed after creation.", + title="Package Update", ), ] diff --git a/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py b/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py index 840b6683..48787b8e 100644 --- a/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +++ b/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py @@ -17,19 +17,19 @@ class MeasurementPeriod(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) end: Annotated[ - AwareDatetime, Field(description='ISO 8601 end timestamp for measurement period') + AwareDatetime, Field(description="ISO 8601 end timestamp for measurement period") ] start: Annotated[ - AwareDatetime, Field(description='ISO 8601 start timestamp for measurement period') + AwareDatetime, Field(description="ISO 8601 start timestamp for measurement period") ] class ProvidePerformanceFeedbackRequest1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) buyer_ref: Annotated[ str | None, Field(description="Buyer's reference for the media buy", min_length=1) @@ -38,33 +38,33 @@ class ProvidePerformanceFeedbackRequest1(AdCPBaseModel): creative_id: Annotated[ str | None, Field( - description='Specific creative asset (if feedback is creative-specific)', min_length=1 + description="Specific creative asset (if feedback is creative-specific)", min_length=1 ), ] = None ext: ext_1.ExtensionObject | None = None feedback_source: Annotated[ - feedback_source_1.FeedbackSource | None, Field(description='Source of the performance data') + feedback_source_1.FeedbackSource | None, Field(description="Source of the performance data") ] = feedback_source_1.FeedbackSource.buyer_attribution measurement_period: Annotated[ - MeasurementPeriod, Field(description='Time period for performance measurement') + MeasurementPeriod, Field(description="Time period for performance measurement") ] media_buy_id: Annotated[ str, Field(description="Publisher's media buy identifier", min_length=1) ] metric_type: Annotated[ - metric_type_1.MetricType | None, Field(description='The business metric being measured') + metric_type_1.MetricType | None, Field(description="The business metric being measured") ] = metric_type_1.MetricType.overall_performance package_id: Annotated[ str | None, Field( - description='Specific package within the media buy (if feedback is package-specific)', + description="Specific package within the media buy (if feedback is package-specific)", min_length=1, ), ] = None performance_index: Annotated[ float, Field( - description='Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)', + description="Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)", ge=0.0, ), ] @@ -72,7 +72,7 @@ class ProvidePerformanceFeedbackRequest1(AdCPBaseModel): class ProvidePerformanceFeedbackRequest2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) buyer_ref: Annotated[ str, Field(description="Buyer's reference for the media buy", min_length=1) @@ -81,33 +81,33 @@ class ProvidePerformanceFeedbackRequest2(AdCPBaseModel): creative_id: Annotated[ str | None, Field( - description='Specific creative asset (if feedback is creative-specific)', min_length=1 + description="Specific creative asset (if feedback is creative-specific)", min_length=1 ), ] = None ext: ext_1.ExtensionObject | None = None feedback_source: Annotated[ - feedback_source_1.FeedbackSource | None, Field(description='Source of the performance data') + feedback_source_1.FeedbackSource | None, Field(description="Source of the performance data") ] = feedback_source_1.FeedbackSource.buyer_attribution measurement_period: Annotated[ - MeasurementPeriod, Field(description='Time period for performance measurement') + MeasurementPeriod, Field(description="Time period for performance measurement") ] media_buy_id: Annotated[ str | None, Field(description="Publisher's media buy identifier", min_length=1) ] = None metric_type: Annotated[ - metric_type_1.MetricType | None, Field(description='The business metric being measured') + metric_type_1.MetricType | None, Field(description="The business metric being measured") ] = metric_type_1.MetricType.overall_performance package_id: Annotated[ str | None, Field( - description='Specific package within the media buy (if feedback is package-specific)', + description="Specific package within the media buy (if feedback is package-specific)", min_length=1, ), ] = None performance_index: Annotated[ float, Field( - description='Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)', + description="Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)", ge=0.0, ), ] @@ -119,7 +119,7 @@ class ProvidePerformanceFeedbackRequest( root: Annotated[ ProvidePerformanceFeedbackRequest1 | ProvidePerformanceFeedbackRequest2, Field( - description='Request payload for provide_performance_feedback task', - title='Provide Performance Feedback Request', + description="Request payload for provide_performance_feedback task", + title="Provide Performance Feedback Request", ), ] diff --git a/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py b/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py index e0b0206b..79133bdf 100644 --- a/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +++ b/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py @@ -16,29 +16,29 @@ class ProvidePerformanceFeedbackResponse1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None sandbox: Annotated[ bool | None, - Field(description='When true, this response contains simulated data from sandbox mode.'), + Field(description="When true, this response contains simulated data from sandbox mode."), ] = None success: Annotated[ Literal[True], - Field(description='Whether the performance feedback was successfully received'), + Field(description="Whether the performance feedback was successfully received"), ] class ProvidePerformanceFeedbackResponse2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error], Field( - description='Array of errors explaining why feedback was rejected (e.g., invalid measurement period, missing campaign data)', + description="Array of errors explaining why feedback was rejected (e.g., invalid measurement period, missing campaign data)", min_length=1, ), ] @@ -51,7 +51,7 @@ class ProvidePerformanceFeedbackResponse( root: Annotated[ ProvidePerformanceFeedbackResponse1 | ProvidePerformanceFeedbackResponse2, Field( - description='Response payload for provide_performance_feedback task. Returns either success confirmation OR error information, never both.', - title='Provide Performance Feedback Response', + description="Response payload for provide_performance_feedback task. Returns either success confirmation OR error information, never both.", + title="Provide Performance Feedback Response", ), ] diff --git a/src/adcp/types/generated_poc/media_buy/sync_audiences_request.py b/src/adcp/types/generated_poc/media_buy/sync_audiences_request.py index db612ee2..c19bc5c0 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_audiences_request.py +++ b/src/adcp/types/generated_poc/media_buy/sync_audiences_request.py @@ -16,20 +16,20 @@ class ConsentBasis(Enum): - consent = 'consent' - legitimate_interest = 'legitimate_interest' - contract = 'contract' - legal_obligation = 'legal_obligation' + consent = "consent" + legitimate_interest = "legitimate_interest" + contract = "contract" + legal_obligation = "legal_obligation" class Audience(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) add: Annotated[ list[audience_member.AudienceMember] | None, Field( - description='Members to add to this audience. Hashed before sending — normalize emails to lowercase+trim, phones to E.164.', + description="Members to add to this audience. Hashed before sending — normalize emails to lowercase+trim, phones to E.164.", min_length=1, ), ] = None @@ -42,20 +42,20 @@ class Audience(AdCPBaseModel): consent_basis: Annotated[ ConsentBasis | None, Field( - description='GDPR lawful basis for processing this audience list. Informational — not validated by the protocol, but required by some sellers operating in regulated markets (e.g. EU). When omitted, the buyer asserts they have a lawful basis appropriate to their jurisdiction.' + description="GDPR lawful basis for processing this audience list. Informational — not validated by the protocol, but required by some sellers operating in regulated markets (e.g. EU). When omitted, the buyer asserts they have a lawful basis appropriate to their jurisdiction." ), ] = None delete: Annotated[ bool | None, Field( - description='When true, delete this audience from the account entirely. All other fields on this audience object are ignored. Use this to delete a specific audience without affecting others.' + description="When true, delete this audience from the account entirely. All other fields on this audience object are ignored. Use this to delete a specific audience without affecting others." ), ] = None - name: Annotated[str | None, Field(description='Human-readable name for this audience')] = None + name: Annotated[str | None, Field(description="Human-readable name for this audience")] = None remove: Annotated[ list[audience_member.AudienceMember] | None, Field( - description='Members to remove from this audience. If the same identifier appears in both add and remove in a single request, remove takes precedence.', + description="Members to remove from this audience. If the same identifier appears in both add and remove in a single request, remove takes precedence.", min_length=1, ), ] = None @@ -63,13 +63,13 @@ class Audience(AdCPBaseModel): class SyncAudiencesRequest(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - account_id: Annotated[str, Field(description='Account to manage audiences for')] + account_id: Annotated[str, Field(description="Account to manage audiences for")] audiences: Annotated[ list[Audience] | None, Field( - description='Audiences to sync (create or update). When omitted, the call is discovery-only and returns all existing audiences on the account without modification.', + description="Audiences to sync (create or update). When omitted, the call is discovery-only and returns all existing audiences on the account without modification.", min_length=1, ), ] = None @@ -77,7 +77,7 @@ class SyncAudiencesRequest(AdCPBaseModel): delete_missing: Annotated[ bool | None, Field( - description='When true, buyer-managed audiences on the account not included in this sync will be removed. Does not affect seller-managed audiences. Do not combine with an omitted audiences array or all buyer-managed audiences will be deleted.' + description="When true, buyer-managed audiences on the account not included in this sync will be removed. Does not affect seller-managed audiences. Do not combine with an omitted audiences array or all buyer-managed audiences will be deleted." ), ] = False ext: ext_1.ExtensionObject | None = None diff --git a/src/adcp/types/generated_poc/media_buy/sync_audiences_response.py b/src/adcp/types/generated_poc/media_buy/sync_audiences_response.py index 0451b10b..d4f5f8c6 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_audiences_response.py +++ b/src/adcp/types/generated_poc/media_buy/sync_audiences_response.py @@ -16,22 +16,22 @@ class Action(Enum): - created = 'created' - updated = 'updated' - unchanged = 'unchanged' - deleted = 'deleted' - failed = 'failed' + created = "created" + updated = "updated" + unchanged = "unchanged" + deleted = "deleted" + failed = "failed" class Status(Enum): - processing = 'processing' - ready = 'ready' - too_small = 'too_small' + processing = "processing" + ready = "ready" + too_small = "too_small" class Audience(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) action: Annotated[ Action, @@ -49,7 +49,7 @@ class Audience(AdCPBaseModel): last_synced_at: Annotated[ AwareDatetime | None, Field( - description='ISO 8601 timestamp of when the most recent sync operation was accepted by the platform. Useful for agents reasoning about audience freshness. Omitted if the seller does not track this.' + description="ISO 8601 timestamp of when the most recent sync operation was accepted by the platform. Useful for agents reasoning about audience freshness. Omitted if the seller does not track this." ), ] = None matched_count: Annotated[ @@ -66,10 +66,10 @@ class Audience(AdCPBaseModel): ge=1, ), ] = None - name: Annotated[str | None, Field(description='Name of the audience')] = None + name: Annotated[str | None, Field(description="Name of the audience")] = None seller_id: Annotated[ str | None, - Field(description='Seller-assigned identifier for this audience in their ad platform'), + Field(description="Seller-assigned identifier for this audience in their ad platform"), ] = None status: Annotated[ Status | None, @@ -80,7 +80,7 @@ class Audience(AdCPBaseModel): uploaded_count: Annotated[ int | None, Field( - description='Number of members submitted in this sync operation (delta, not cumulative). In discovery-only calls (no audiences array), this is 0.', + description="Number of members submitted in this sync operation (delta, not cumulative). In discovery-only calls (no audiences array), this is 0.", ge=0, ), ] = None @@ -88,27 +88,27 @@ class Audience(AdCPBaseModel): class SyncAudiencesResponse1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) audiences: Annotated[ - list[Audience], Field(description='Results for each audience on the account') + list[Audience], Field(description="Results for each audience on the account") ] context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None sandbox: Annotated[ bool | None, - Field(description='When true, this response contains simulated data from sandbox mode.'), + Field(description="When true, this response contains simulated data from sandbox mode."), ] = None class SyncAudiencesResponse2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error], - Field(description='Operation-level errors that prevented processing', min_length=1), + Field(description="Operation-level errors that prevented processing", min_length=1), ] ext: ext_1.ExtensionObject | None = None @@ -117,7 +117,7 @@ class SyncAudiencesResponse(RootModel[SyncAudiencesResponse1 | SyncAudiencesResp root: Annotated[ SyncAudiencesResponse1 | SyncAudiencesResponse2, Field( - description='Response from audience sync operation. Returns either per-audience results OR operation-level errors.', - title='Sync Audiences Response', + description="Response from audience sync operation. Returns either per-audience results OR operation-level errors.", + title="Sync Audiences Response", ), ] diff --git a/src/adcp/types/generated_poc/media_buy/sync_catalogs_async_response_input_required.py b/src/adcp/types/generated_poc/media_buy/sync_catalogs_async_response_input_required.py index c3ae9f9e..9a5dca8e 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_catalogs_async_response_input_required.py +++ b/src/adcp/types/generated_poc/media_buy/sync_catalogs_async_response_input_required.py @@ -15,21 +15,21 @@ class Reason(Enum): - APPROVAL_REQUIRED = 'APPROVAL_REQUIRED' - FEED_VALIDATION = 'FEED_VALIDATION' - ITEM_REVIEW = 'ITEM_REVIEW' - FEED_ACCESS = 'FEED_ACCESS' + APPROVAL_REQUIRED = "APPROVAL_REQUIRED" + FEED_VALIDATION = "FEED_VALIDATION" + ITEM_REVIEW = "ITEM_REVIEW" + FEED_ACCESS = "FEED_ACCESS" class SyncCatalogsInputRequired(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None reason: Annotated[ Reason | None, Field( - description='Reason code indicating why buyer input is needed. APPROVAL_REQUIRED: platform requires explicit approval before activating the catalog. FEED_VALIDATION: feed URL returned unexpected format or schema errors. ITEM_REVIEW: platform flagged items for manual review. FEED_ACCESS: platform cannot access the feed URL (authentication, CORS, etc.).' + description="Reason code indicating why buyer input is needed. APPROVAL_REQUIRED: platform requires explicit approval before activating the catalog. FEED_VALIDATION: feed URL returned unexpected format or schema errors. ITEM_REVIEW: platform flagged items for manual review. FEED_ACCESS: platform cannot access the feed URL (authentication, CORS, etc.)." ), ] = None diff --git a/src/adcp/types/generated_poc/media_buy/sync_catalogs_async_response_submitted.py b/src/adcp/types/generated_poc/media_buy/sync_catalogs_async_response_submitted.py index cc9e6ea7..38ff94fa 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_catalogs_async_response_submitted.py +++ b/src/adcp/types/generated_poc/media_buy/sync_catalogs_async_response_submitted.py @@ -13,7 +13,7 @@ class SyncCatalogsSubmitted(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None diff --git a/src/adcp/types/generated_poc/media_buy/sync_catalogs_async_response_working.py b/src/adcp/types/generated_poc/media_buy/sync_catalogs_async_response_working.py index d3bc4ec8..c7c429b4 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_catalogs_async_response_working.py +++ b/src/adcp/types/generated_poc/media_buy/sync_catalogs_async_response_working.py @@ -15,13 +15,13 @@ class SyncCatalogsWorking(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) catalogs_processed: Annotated[ - int | None, Field(description='Number of catalogs processed so far', ge=0) + int | None, Field(description="Number of catalogs processed so far", ge=0) ] = None catalogs_total: Annotated[ - int | None, Field(description='Total number of catalogs to process', ge=0) + int | None, Field(description="Total number of catalogs to process", ge=0) ] = None context: context_1.ContextObject | None = None current_step: Annotated[ @@ -33,16 +33,16 @@ class SyncCatalogsWorking(AdCPBaseModel): ext: ext_1.ExtensionObject | None = None items_processed: Annotated[ int | None, - Field(description='Total number of catalog items processed across all catalogs', ge=0), + Field(description="Total number of catalog items processed across all catalogs", ge=0), ] = None items_total: Annotated[ int | None, - Field(description='Total number of catalog items to process across all catalogs', ge=0), + Field(description="Total number of catalog items to process across all catalogs", ge=0), ] = None percentage: Annotated[ - float | None, Field(description='Completion percentage (0-100)', ge=0.0, le=100.0) + float | None, Field(description="Completion percentage (0-100)", ge=0.0, le=100.0) ] = None - step_number: Annotated[int | None, Field(description='Current step number', ge=1)] = None + step_number: Annotated[int | None, Field(description="Current step number", ge=1)] = None total_steps: Annotated[ - int | None, Field(description='Total number of steps in the operation', ge=1) + int | None, Field(description="Total number of steps in the operation", ge=1) ] = None diff --git a/src/adcp/types/generated_poc/media_buy/sync_catalogs_request.py b/src/adcp/types/generated_poc/media_buy/sync_catalogs_request.py index df0c82d2..330b4556 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_catalogs_request.py +++ b/src/adcp/types/generated_poc/media_buy/sync_catalogs_request.py @@ -18,18 +18,18 @@ class SyncCatalogsRequest(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) account_id: Annotated[ str | None, Field( - description='Account that owns these catalogs. Required if the agent has multiple accounts and the seller cannot route automatically.' + description="Account that owns these catalogs. Required if the agent has multiple accounts and the seller cannot route automatically." ), ] = None catalog_ids: Annotated[ list[str] | None, Field( - description='Optional filter to limit sync scope to specific catalog IDs. When provided, only these catalogs will be created/updated. Other catalogs on the account are unaffected.', + description="Optional filter to limit sync scope to specific catalog IDs. When provided, only these catalogs will be created/updated. Other catalogs on the account are unaffected.", max_length=50, min_length=1, ), @@ -37,7 +37,7 @@ class SyncCatalogsRequest(AdCPBaseModel): catalogs: Annotated[ list[catalog.Catalog] | None, Field( - description='Array of catalog feeds to sync (create or update). When omitted, the call is discovery-only and returns all existing catalogs on the account without modification.', + description="Array of catalog feeds to sync (create or update). When omitted, the call is discovery-only and returns all existing catalogs on the account without modification.", max_length=50, min_length=1, ), @@ -46,20 +46,20 @@ class SyncCatalogsRequest(AdCPBaseModel): delete_missing: Annotated[ bool | None, Field( - description='When true, buyer-managed catalogs on the account not included in this sync will be removed. Does not affect seller-managed catalogs. Do not combine with an omitted catalogs array or all buyer-managed catalogs will be deleted.' + description="When true, buyer-managed catalogs on the account not included in this sync will be removed. Does not affect seller-managed catalogs. Do not combine with an omitted catalogs array or all buyer-managed catalogs will be deleted." ), ] = False dry_run: Annotated[ bool | None, Field( - description='When true, preview changes without applying them. Returns what would be created/updated/deleted.' + description="When true, preview changes without applying them. Returns what would be created/updated/deleted." ), ] = False ext: ext_1.ExtensionObject | None = None push_notification_config: Annotated[ push_notification_config_1.PushNotificationConfig | None, Field( - description='Optional webhook configuration for async sync notifications. Publisher will send webhook when sync completes if operation takes longer than immediate response time (common for large feeds requiring platform review).' + description="Optional webhook configuration for async sync notifications. Publisher will send webhook when sync completes if operation takes longer than immediate response time (common for large feeds requiring platform review)." ), ] = None validation_mode: Annotated[ diff --git a/src/adcp/types/generated_poc/media_buy/sync_catalogs_response.py b/src/adcp/types/generated_poc/media_buy/sync_catalogs_response.py index 136f35da..f150e740 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_catalogs_response.py +++ b/src/adcp/types/generated_poc/media_buy/sync_catalogs_response.py @@ -17,25 +17,25 @@ class ItemIssue(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - item_id: Annotated[str, Field(description='ID of the catalog item with an issue')] - reasons: Annotated[list[str] | None, Field(description='Reasons for rejection or warning')] = ( + item_id: Annotated[str, Field(description="ID of the catalog item with an issue")] + reasons: Annotated[list[str] | None, Field(description="Reasons for rejection or warning")] = ( None ) status: Annotated[ - catalog_item_status.CatalogItemStatus, Field(description='Item review status') + catalog_item_status.CatalogItemStatus, Field(description="Item review status") ] class Catalog(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) action: Annotated[ - catalog_action.CatalogAction, Field(description='Action taken for this catalog') + catalog_action.CatalogAction, Field(description="Action taken for this catalog") ] - catalog_id: Annotated[str, Field(description='Catalog ID from the request')] + catalog_id: Annotated[str, Field(description="Catalog ID from the request")] changes: Annotated[ list[str] | None, Field(description="Field names that were modified (only present when action='updated')"), @@ -45,58 +45,58 @@ class Catalog(AdCPBaseModel): Field(description="Validation or processing errors (only present when action='failed')"), ] = None item_count: Annotated[ - int | None, Field(description='Total number of items in the catalog after sync', ge=0) + int | None, Field(description="Total number of items in the catalog after sync", ge=0) ] = None item_issues: Annotated[ list[ItemIssue] | None, Field( - description='Per-item issues reported by the platform (rejections, warnings). Only present when the platform performs item-level review.' + description="Per-item issues reported by the platform (rejections, warnings). Only present when the platform performs item-level review." ), ] = None items_approved: Annotated[ int | None, Field( - description='Number of items approved by the platform. Populated when the platform performs item-level review.', + description="Number of items approved by the platform. Populated when the platform performs item-level review.", ge=0, ), ] = None items_pending: Annotated[ int | None, Field( - description='Number of items pending platform review. Common for product catalogs where items must pass content policy checks.', + description="Number of items pending platform review. Common for product catalogs where items must pass content policy checks.", ge=0, ), ] = None items_rejected: Annotated[ int | None, Field( - description='Number of items rejected by the platform. Check item_issues for rejection reasons.', + description="Number of items rejected by the platform. Check item_issues for rejection reasons.", ge=0, ), ] = None last_synced_at: Annotated[ AwareDatetime | None, Field( - description='ISO 8601 timestamp of when the most recent sync was accepted by the platform' + description="ISO 8601 timestamp of when the most recent sync was accepted by the platform" ), ] = None next_fetch_at: Annotated[ AwareDatetime | None, Field( - description='ISO 8601 timestamp of when the platform will next fetch the feed URL. Only present for URL-based catalogs with update_frequency.' + description="ISO 8601 timestamp of when the platform will next fetch the feed URL. Only present for URL-based catalogs with update_frequency." ), ] = None platform_id: Annotated[ - str | None, Field(description='Platform-specific ID assigned to the catalog') + str | None, Field(description="Platform-specific ID assigned to the catalog") ] = None warnings: Annotated[ - list[str] | None, Field(description='Non-fatal warnings about this catalog') + list[str] | None, Field(description="Non-fatal warnings about this catalog") ] = None class SyncCatalogsResponse1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) catalogs: Annotated[ list[Catalog], @@ -106,24 +106,24 @@ class SyncCatalogsResponse1(AdCPBaseModel): ] context: context_1.ContextObject | None = None dry_run: Annotated[ - bool | None, Field(description='Whether this was a dry run (no actual changes made)') + bool | None, Field(description="Whether this was a dry run (no actual changes made)") ] = None ext: ext_1.ExtensionObject | None = None sandbox: Annotated[ bool | None, - Field(description='When true, this response contains simulated data from sandbox mode.'), + Field(description="When true, this response contains simulated data from sandbox mode."), ] = None class SyncCatalogsResponse2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error], Field( - description='Operation-level errors that prevented processing any catalogs (e.g., authentication failure, service unavailable, invalid request format)', + description="Operation-level errors that prevented processing any catalogs (e.g., authentication failure, service unavailable, invalid request format)", min_length=1, ), ] @@ -134,7 +134,7 @@ class SyncCatalogsResponse(RootModel[SyncCatalogsResponse1 | SyncCatalogsRespons root: Annotated[ SyncCatalogsResponse1 | SyncCatalogsResponse2, Field( - description='Response from catalog sync operation. Returns either per-catalog results (best-effort processing) OR operation-level errors (complete failure). Platforms may approve, reject, or flag individual items within each catalog (similar to Google Merchant Center product review).', - title='Sync Catalogs Response', + description="Response from catalog sync operation. Returns either per-catalog results (best-effort processing) OR operation-level errors (complete failure). Platforms may approve, reject, or flag individual items within each catalog (similar to Google Merchant Center product review).", + title="Sync Catalogs Response", ), ] diff --git a/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py b/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py index 05a966c4..75ffdb7d 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +++ b/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py @@ -15,17 +15,17 @@ class Reason(Enum): - APPROVAL_REQUIRED = 'APPROVAL_REQUIRED' - ASSET_CONFIRMATION = 'ASSET_CONFIRMATION' - FORMAT_CLARIFICATION = 'FORMAT_CLARIFICATION' + APPROVAL_REQUIRED = "APPROVAL_REQUIRED" + ASSET_CONFIRMATION = "ASSET_CONFIRMATION" + FORMAT_CLARIFICATION = "FORMAT_CLARIFICATION" class SyncCreativesInputRequired(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None reason: Annotated[ - Reason | None, Field(description='Reason code indicating why buyer input is needed') + Reason | None, Field(description="Reason code indicating why buyer input is needed") ] = None diff --git a/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py b/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py index 150632ea..8650971b 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +++ b/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py @@ -13,7 +13,7 @@ class SyncCreativesSubmitted(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None diff --git a/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py b/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py index 858627fe..3b58f69e 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +++ b/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py @@ -15,23 +15,23 @@ class SyncCreativesWorking(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None creatives_processed: Annotated[ - int | None, Field(description='Number of creatives processed so far', ge=0) + int | None, Field(description="Number of creatives processed so far", ge=0) ] = None creatives_total: Annotated[ - int | None, Field(description='Total number of creatives to process', ge=0) + int | None, Field(description="Total number of creatives to process", ge=0) ] = None current_step: Annotated[ - str | None, Field(description='Current step or phase of the operation') + str | None, Field(description="Current step or phase of the operation") ] = None ext: ext_1.ExtensionObject | None = None percentage: Annotated[ - float | None, Field(description='Completion percentage (0-100)', ge=0.0, le=100.0) + float | None, Field(description="Completion percentage (0-100)", ge=0.0, le=100.0) ] = None - step_number: Annotated[int | None, Field(description='Current step number', ge=1)] = None + step_number: Annotated[int | None, Field(description="Current step number", ge=1)] = None total_steps: Annotated[ - int | None, Field(description='Total number of steps in the operation', ge=1) + int | None, Field(description="Total number of steps in the operation", ge=1) ] = None diff --git a/src/adcp/types/generated_poc/media_buy/sync_creatives_request.py b/src/adcp/types/generated_poc/media_buy/sync_creatives_request.py index 8579eb65..a854ff56 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_creatives_request.py +++ b/src/adcp/types/generated_poc/media_buy/sync_creatives_request.py @@ -18,23 +18,23 @@ class SyncCreativesRequest(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) account_id: Annotated[ str | None, Field( - description='Account that owns these creatives. Optional if the agent has a single account or the seller can determine the account from context. Required if the agent has multiple accounts and the seller cannot route automatically.' + description="Account that owns these creatives. Optional if the agent has a single account or the seller can determine the account from context. Required if the agent has multiple accounts and the seller cannot route automatically." ), ] = None assignments: Annotated[ - dict[Annotated[str, StringConstraints(pattern=r'^[a-zA-Z0-9_-]+$')], list[str]] | None, - Field(description='Optional bulk assignment of creatives to packages'), + dict[Annotated[str, StringConstraints(pattern=r"^[a-zA-Z0-9_-]+$")], list[str]] | None, + Field(description="Optional bulk assignment of creatives to packages"), ] = None context: context_1.ContextObject | None = None creative_ids: Annotated[ list[str] | None, Field( - description='Optional filter to limit sync scope to specific creative IDs. When provided, only these creatives will be created/updated. Other creatives in the library are unaffected. Useful for partial updates and error recovery.', + description="Optional filter to limit sync scope to specific creative IDs. When provided, only these creatives will be created/updated. Other creatives in the library are unaffected. Useful for partial updates and error recovery.", max_length=100, min_length=1, ), @@ -42,7 +42,7 @@ class SyncCreativesRequest(AdCPBaseModel): creatives: Annotated[ list[creative_asset.CreativeAsset], Field( - description='Array of creative assets to sync (create or update)', + description="Array of creative assets to sync (create or update)", max_length=100, min_length=1, ), @@ -50,20 +50,20 @@ class SyncCreativesRequest(AdCPBaseModel): delete_missing: Annotated[ bool | None, Field( - description='When true, creatives not included in this sync will be archived. Use with caution for full library replacement.' + description="When true, creatives not included in this sync will be archived. Use with caution for full library replacement." ), ] = False dry_run: Annotated[ bool | None, Field( - description='When true, preview changes without applying them. Returns what would be created/updated/deleted.' + description="When true, preview changes without applying them. Returns what would be created/updated/deleted." ), ] = False ext: ext_1.ExtensionObject | None = None push_notification_config: Annotated[ push_notification_config_1.PushNotificationConfig | None, Field( - description='Optional webhook configuration for async sync notifications. Publisher will send webhook when sync completes if operation takes longer than immediate response time (typically for large bulk operations or manual approval/HITL).' + description="Optional webhook configuration for async sync notifications. Publisher will send webhook when sync completes if operation takes longer than immediate response time (typically for large bulk operations or manual approval/HITL)." ), ] = None validation_mode: Annotated[ diff --git a/src/adcp/types/generated_poc/media_buy/sync_creatives_response.py b/src/adcp/types/generated_poc/media_buy/sync_creatives_response.py index 8c5c77e2..4174a32d 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_creatives_response.py +++ b/src/adcp/types/generated_poc/media_buy/sync_creatives_response.py @@ -18,13 +18,13 @@ class SyncCreativesResponse2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error], Field( - description='Operation-level errors that prevented processing any creatives (e.g., authentication failure, service unavailable, invalid request format)', + description="Operation-level errors that prevented processing any creatives (e.g., authentication failure, service unavailable, invalid request format)", min_length=1, ), ] @@ -33,31 +33,31 @@ class SyncCreativesResponse2(AdCPBaseModel): class Creative(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) account: Annotated[ - account_1.Account | None, Field(description='Account that owns this creative') + account_1.Account | None, Field(description="Account that owns this creative") ] = None action: Annotated[ - creative_action.CreativeAction, Field(description='Action taken for this creative') + creative_action.CreativeAction, Field(description="Action taken for this creative") ] assigned_to: Annotated[ list[str] | None, Field( - description='Package IDs this creative was successfully assigned to (only present when assignments were requested)' + description="Package IDs this creative was successfully assigned to (only present when assignments were requested)" ), ] = None assignment_errors: Annotated[ - dict[Annotated[str, StringConstraints(pattern=r'^[a-zA-Z0-9_-]+$')], str] | None, + dict[Annotated[str, StringConstraints(pattern=r"^[a-zA-Z0-9_-]+$")], str] | None, Field( - description='Assignment errors by package ID (only present when assignment failures occurred)' + description="Assignment errors by package ID (only present when assignment failures occurred)" ), ] = None changes: Annotated[ list[str] | None, Field(description="Field names that were modified (only present when action='updated')"), ] = None - creative_id: Annotated[str, Field(description='Creative ID from the request')] + creative_id: Annotated[str, Field(description="Creative ID from the request")] errors: Annotated[ list[str] | None, Field(description="Validation or processing errors (only present when action='failed')"), @@ -65,26 +65,26 @@ class Creative(AdCPBaseModel): expires_at: Annotated[ AwareDatetime | None, Field( - description='ISO 8601 timestamp when preview link expires (only present when preview_url exists)' + description="ISO 8601 timestamp when preview link expires (only present when preview_url exists)" ), ] = None platform_id: Annotated[ - str | None, Field(description='Platform-specific ID assigned to the creative') + str | None, Field(description="Platform-specific ID assigned to the creative") ] = None preview_url: Annotated[ AnyUrl | None, Field( - description='Preview URL for generative creatives (only present for generative formats)' + description="Preview URL for generative creatives (only present for generative formats)" ), ] = None warnings: Annotated[ - list[str] | None, Field(description='Non-fatal warnings about this creative') + list[str] | None, Field(description="Non-fatal warnings about this creative") ] = None class SyncCreativesResponse1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None creatives: Annotated[ @@ -94,12 +94,12 @@ class SyncCreativesResponse1(AdCPBaseModel): ), ] dry_run: Annotated[ - bool | None, Field(description='Whether this was a dry run (no actual changes made)') + bool | None, Field(description="Whether this was a dry run (no actual changes made)") ] = None ext: ext_1.ExtensionObject | None = None sandbox: Annotated[ bool | None, - Field(description='When true, this response contains simulated data from sandbox mode.'), + Field(description="When true, this response contains simulated data from sandbox mode."), ] = None @@ -107,7 +107,7 @@ class SyncCreativesResponse(RootModel[SyncCreativesResponse1 | SyncCreativesResp root: Annotated[ SyncCreativesResponse1 | SyncCreativesResponse2, Field( - description='Response from creative sync operation. Returns either per-creative results (best-effort processing) OR operation-level errors (complete failure). This enforces atomic semantics at the operation level while allowing per-item failures within successful operations.', - title='Sync Creatives Response', + description="Response from creative sync operation. Returns either per-creative results (best-effort processing) OR operation-level errors (complete failure). This enforces atomic semantics at the operation level while allowing per-item failures within successful operations.", + title="Sync Creatives Response", ), ] diff --git a/src/adcp/types/generated_poc/media_buy/sync_event_sources_request.py b/src/adcp/types/generated_poc/media_buy/sync_event_sources_request.py index e7dd37a3..ee911cc7 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_event_sources_request.py +++ b/src/adcp/types/generated_poc/media_buy/sync_event_sources_request.py @@ -16,39 +16,39 @@ class EventSource(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) allowed_domains: Annotated[ list[str] | None, - Field(description='Domains authorized to send events for this event source', min_length=1), + Field(description="Domains authorized to send events for this event source", min_length=1), ] = None - event_source_id: Annotated[str, Field(description='Unique identifier for this event source')] + event_source_id: Annotated[str, Field(description="Unique identifier for this event source")] event_types: Annotated[ list[event_type.EventType] | None, Field( - description='Event types this source handles (e.g. purchase, lead). If omitted, accepts all event types.', + description="Event types this source handles (e.g. purchase, lead). If omitted, accepts all event types.", min_length=1, ), ] = None - name: Annotated[str | None, Field(description='Human-readable name for this event source')] = ( + name: Annotated[str | None, Field(description="Human-readable name for this event source")] = ( None ) class SyncEventSourcesRequest(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - account_id: Annotated[str, Field(description='Account to configure event sources for')] + account_id: Annotated[str, Field(description="Account to configure event sources for")] context: context_1.ContextObject | None = None delete_missing: Annotated[ bool | None, - Field(description='When true, event sources not included in this sync will be removed'), + Field(description="When true, event sources not included in this sync will be removed"), ] = False event_sources: Annotated[ list[EventSource] | None, Field( - description='Event sources to sync (create or update). When omitted, the call is discovery-only and returns all existing event sources on the account without modification.', + description="Event sources to sync (create or update). When omitted, the call is discovery-only and returns all existing event sources on the account without modification.", min_length=1, ), ] = None diff --git a/src/adcp/types/generated_poc/media_buy/sync_event_sources_response.py b/src/adcp/types/generated_poc/media_buy/sync_event_sources_response.py index 9647469e..28dc4d89 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_event_sources_response.py +++ b/src/adcp/types/generated_poc/media_buy/sync_event_sources_response.py @@ -18,35 +18,35 @@ class Action(Enum): - created = 'created' - updated = 'updated' - unchanged = 'unchanged' - deleted = 'deleted' - failed = 'failed' + created = "created" + updated = "updated" + unchanged = "unchanged" + deleted = "deleted" + failed = "failed" class ManagedBy(Enum): - buyer = 'buyer' - seller = 'seller' + buyer = "buyer" + seller = "seller" class SnippetType(Enum): - javascript = 'javascript' - html = 'html' - pixel_url = 'pixel_url' - server_only = 'server_only' + javascript = "javascript" + html = "html" + pixel_url = "pixel_url" + server_only = "server_only" class Setup(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) instructions: Annotated[ - str | None, Field(description='Human/agent-readable setup instructions') + str | None, Field(description="Human/agent-readable setup instructions") ] = None snippet: Annotated[ str | None, - Field(description='Code snippet to place on the site (JavaScript, HTML pixel, etc.)'), + Field(description="Code snippet to place on the site (JavaScript, HTML pixel, etc.)"), ] = None snippet_type: Annotated[ SnippetType | None, @@ -58,20 +58,20 @@ class Setup(AdCPBaseModel): class EventSource(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - action: Annotated[Action, Field(description='Action taken for this event source')] + action: Annotated[Action, Field(description="Action taken for this event source")] action_source: Annotated[ action_source_1.ActionSource | None, - Field(description='Type of event source (website pixel, app SDK, in-store, etc.)'), + Field(description="Type of event source (website pixel, app SDK, in-store, etc.)"), ] = None errors: Annotated[ list[str] | None, Field(description="Errors for this event source (only present when action='failed')"), ] = None - event_source_id: Annotated[str, Field(description='Event source ID from the request')] + event_source_id: Annotated[str, Field(description="Event source ID from the request")] event_types: Annotated[ - list[event_type.EventType] | None, Field(description='Event types this source handles') + list[event_type.EventType] | None, Field(description="Event types this source handles") ] = None managed_by: Annotated[ ManagedBy | None, @@ -79,7 +79,7 @@ class EventSource(AdCPBaseModel): description="Who manages this event source. 'buyer' = configured via this sync. 'seller' = always-on, managed by the seller (e.g. Amazon sales attribution for Amazon advertisers)." ), ] = None - name: Annotated[str | None, Field(description='Name of the event source')] = None + name: Annotated[str | None, Field(description="Name of the event source")] = None seller_id: Annotated[ str | None, Field( @@ -89,37 +89,37 @@ class EventSource(AdCPBaseModel): setup: Annotated[ Setup | None, Field( - description='Implementation details for activating this event source (e.g. JavaScript tag, pixel URL)' + description="Implementation details for activating this event source (e.g. JavaScript tag, pixel URL)" ), ] = None class SyncEventSourcesResponse1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None event_sources: Annotated[ list[EventSource], Field( - description='Results for each event source, including both synced and seller-managed sources on the account' + description="Results for each event source, including both synced and seller-managed sources on the account" ), ] ext: ext_1.ExtensionObject | None = None sandbox: Annotated[ bool | None, - Field(description='When true, this response contains simulated data from sandbox mode.'), + Field(description="When true, this response contains simulated data from sandbox mode."), ] = None class SyncEventSourcesResponse2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error], - Field(description='Operation-level errors that prevented processing', min_length=1), + Field(description="Operation-level errors that prevented processing", min_length=1), ] ext: ext_1.ExtensionObject | None = None @@ -128,7 +128,7 @@ class SyncEventSourcesResponse(RootModel[SyncEventSourcesResponse1 | SyncEventSo root: Annotated[ SyncEventSourcesResponse1 | SyncEventSourcesResponse2, Field( - description='Response from event source sync operation. Returns either per-source results OR operation-level errors.', - title='Sync Event Sources Response', + description="Response from event source sync operation. Returns either per-source results OR operation-level errors.", + title="Sync Event Sources Response", ), ] diff --git a/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py b/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py index ff15bdcb..dea980af 100644 --- a/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +++ b/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py @@ -15,16 +15,16 @@ class Reason(Enum): - APPROVAL_REQUIRED = 'APPROVAL_REQUIRED' - CHANGE_CONFIRMATION = 'CHANGE_CONFIRMATION' + APPROVAL_REQUIRED = "APPROVAL_REQUIRED" + CHANGE_CONFIRMATION = "CHANGE_CONFIRMATION" class UpdateMediaBuyInputRequired(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None reason: Annotated[ - Reason | None, Field(description='Reason code indicating why input is needed') + Reason | None, Field(description="Reason code indicating why input is needed") ] = None diff --git a/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py b/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py index 5c94b9b4..889cefcf 100644 --- a/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +++ b/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py @@ -13,7 +13,7 @@ class UpdateMediaBuySubmitted(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None diff --git a/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py b/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py index d6524fff..e0c2fa51 100644 --- a/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +++ b/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py @@ -15,17 +15,17 @@ class UpdateMediaBuyWorking(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None current_step: Annotated[ - str | None, Field(description='Current step or phase of the operation') + str | None, Field(description="Current step or phase of the operation") ] = None ext: ext_1.ExtensionObject | None = None percentage: Annotated[ - float | None, Field(description='Completion percentage (0-100)', ge=0.0, le=100.0) + float | None, Field(description="Completion percentage (0-100)", ge=0.0, le=100.0) ] = None - step_number: Annotated[int | None, Field(description='Current step number', ge=1)] = None + step_number: Annotated[int | None, Field(description="Current step number", ge=1)] = None total_steps: Annotated[ - int | None, Field(description='Total number of steps in the operation', ge=1) + int | None, Field(description="Total number of steps in the operation", ge=1) ] = None diff --git a/src/adcp/types/generated_poc/media_buy/update_media_buy_request.py b/src/adcp/types/generated_poc/media_buy/update_media_buy_request.py index 5f875f7a..e19803ee 100644 --- a/src/adcp/types/generated_poc/media_buy/update_media_buy_request.py +++ b/src/adcp/types/generated_poc/media_buy/update_media_buy_request.py @@ -19,35 +19,35 @@ class UpdateMediaBuyRequest1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) buyer_ref: Annotated[ str | None, Field(description="Buyer's reference for the media buy to update") ] = None context: context_1.ContextObject | None = None end_time: Annotated[ - AwareDatetime | None, Field(description='New end date/time in ISO 8601 format') + AwareDatetime | None, Field(description="New end date/time in ISO 8601 format") ] = None ext: ext_1.ExtensionObject | None = None media_buy_id: Annotated[str, Field(description="Publisher's ID of the media buy to update")] packages: Annotated[ list[package_update.PackageUpdate] | None, - Field(description='Package-specific updates', min_length=1), + Field(description="Package-specific updates", min_length=1), ] = None paused: Annotated[ bool | None, - Field(description='Pause/resume the entire media buy (true = paused, false = active)'), + Field(description="Pause/resume the entire media buy (true = paused, false = active)"), ] = None push_notification_config: Annotated[ push_notification_config_1.PushNotificationConfig | None, Field( - description='Optional webhook configuration for async update notifications. Publisher will send webhook when update completes if operation takes longer than immediate response time. This is separate from reporting_webhook which configures ongoing campaign reporting.' + description="Optional webhook configuration for async update notifications. Publisher will send webhook when update completes if operation takes longer than immediate response time. This is separate from reporting_webhook which configures ongoing campaign reporting." ), ] = None reporting_webhook: Annotated[ reporting_webhook_1.ReportingWebhook | None, Field( - description='Optional webhook configuration for automated reporting delivery. Updates the reporting configuration for this media buy.' + description="Optional webhook configuration for automated reporting delivery. Updates the reporting configuration for this media buy." ), ] = None start_time: start_timing.StartTiming | None = None @@ -55,12 +55,12 @@ class UpdateMediaBuyRequest1(AdCPBaseModel): class UpdateMediaBuyRequest2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) buyer_ref: Annotated[str, Field(description="Buyer's reference for the media buy to update")] context: context_1.ContextObject | None = None end_time: Annotated[ - AwareDatetime | None, Field(description='New end date/time in ISO 8601 format') + AwareDatetime | None, Field(description="New end date/time in ISO 8601 format") ] = None ext: ext_1.ExtensionObject | None = None media_buy_id: Annotated[ @@ -68,22 +68,22 @@ class UpdateMediaBuyRequest2(AdCPBaseModel): ] = None packages: Annotated[ list[package_update.PackageUpdate] | None, - Field(description='Package-specific updates', min_length=1), + Field(description="Package-specific updates", min_length=1), ] = None paused: Annotated[ bool | None, - Field(description='Pause/resume the entire media buy (true = paused, false = active)'), + Field(description="Pause/resume the entire media buy (true = paused, false = active)"), ] = None push_notification_config: Annotated[ push_notification_config_1.PushNotificationConfig | None, Field( - description='Optional webhook configuration for async update notifications. Publisher will send webhook when update completes if operation takes longer than immediate response time. This is separate from reporting_webhook which configures ongoing campaign reporting.' + description="Optional webhook configuration for async update notifications. Publisher will send webhook when update completes if operation takes longer than immediate response time. This is separate from reporting_webhook which configures ongoing campaign reporting." ), ] = None reporting_webhook: Annotated[ reporting_webhook_1.ReportingWebhook | None, Field( - description='Optional webhook configuration for automated reporting delivery. Updates the reporting configuration for this media buy.' + description="Optional webhook configuration for automated reporting delivery. Updates the reporting configuration for this media buy." ), ] = None start_time: start_timing.StartTiming | None = None @@ -93,7 +93,7 @@ class UpdateMediaBuyRequest(RootModel[UpdateMediaBuyRequest1 | UpdateMediaBuyReq root: Annotated[ UpdateMediaBuyRequest1 | UpdateMediaBuyRequest2, Field( - description='Request parameters for updating campaign and package settings', - title='Update Media Buy Request', + description="Request parameters for updating campaign and package settings", + title="Update Media Buy Request", ), ] diff --git a/src/adcp/types/generated_poc/media_buy/update_media_buy_response.py b/src/adcp/types/generated_poc/media_buy/update_media_buy_response.py index b1d32b38..8cd8b374 100644 --- a/src/adcp/types/generated_poc/media_buy/update_media_buy_response.py +++ b/src/adcp/types/generated_poc/media_buy/update_media_buy_response.py @@ -17,35 +17,35 @@ class UpdateMediaBuyResponse2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error], - Field(description='Array of errors explaining why the operation failed', min_length=1), + Field(description="Array of errors explaining why the operation failed", min_length=1), ] ext: ext_1.ExtensionObject | None = None class UpdateMediaBuyResponse1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) affected_packages: Annotated[ list[package.Package] | None, - Field(description='Array of packages that were modified with complete state information'), + Field(description="Array of packages that were modified with complete state information"), ] = None buyer_ref: Annotated[str, Field(description="Buyer's reference identifier for the media buy")] context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None implementation_date: Annotated[ AwareDatetime | None, - Field(description='ISO 8601 timestamp when changes take effect (null if pending approval)'), + Field(description="ISO 8601 timestamp when changes take effect (null if pending approval)"), ] = None media_buy_id: Annotated[str, Field(description="Publisher's identifier for the media buy")] sandbox: Annotated[ bool | None, - Field(description='When true, this response contains simulated data from sandbox mode.'), + Field(description="When true, this response contains simulated data from sandbox mode."), ] = None @@ -53,7 +53,7 @@ class UpdateMediaBuyResponse(RootModel[UpdateMediaBuyResponse1 | UpdateMediaBuyR root: Annotated[ UpdateMediaBuyResponse1 | UpdateMediaBuyResponse2, Field( - description='Response payload for update_media_buy task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - updates are either fully applied or not applied at all.', - title='Update Media Buy Response', + description="Response payload for update_media_buy task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - updates are either fully applied or not applied at all.", + title="Update Media Buy Response", ), ] diff --git a/src/adcp/types/generated_poc/pricing_options/cpa_option.py b/src/adcp/types/generated_poc/pricing_options/cpa_option.py index 515f7b1e..cc02441c 100644 --- a/src/adcp/types/generated_poc/pricing_options/cpa_option.py +++ b/src/adcp/types/generated_poc/pricing_options/cpa_option.py @@ -14,14 +14,14 @@ class CpaPricingOption(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) currency: Annotated[ str, Field( - description='ISO 4217 currency code', - examples=['USD', 'EUR', 'GBP', 'JPY'], - pattern='^[A-Z]{3}$', + description="ISO 4217 currency code", + examples=["USD", "EUR", "GBP", "JPY"], + pattern="^[A-Z]{3}$", ), ] custom_event_name: Annotated[ @@ -33,28 +33,28 @@ class CpaPricingOption(AdCPBaseModel): event_source_id: Annotated[ str | None, Field( - description='When present, only events from this specific event source count toward billing. Allows different CPA rates for different sources (e.g., online vs in-store purchases). Must match an event source configured via sync_event_sources.' + description="When present, only events from this specific event source count toward billing. Allows different CPA rates for different sources (e.g., online vs in-store purchases). Must match an event source configured via sync_event_sources." ), ] = None event_type: Annotated[ event_type_1.EventType, Field( - description='The conversion event type that triggers billing (e.g., purchase, lead, app_install)' + description="The conversion event type that triggers billing (e.g., purchase, lead, app_install)" ), ] fixed_price: Annotated[ - float, Field(description='Fixed price per acquisition in the specified currency', gt=0.0) + float, Field(description="Fixed price per acquisition in the specified currency", gt=0.0) ] min_spend_per_package: Annotated[ float | None, Field( - description='Minimum spend requirement per package using this pricing option, in the specified currency', + description="Minimum spend requirement per package using this pricing option, in the specified currency", ge=0.0, ), ] = None pricing_model: Annotated[ - Literal['cpa'], Field(description='Cost per acquisition (conversion event)') + Literal["cpa"], Field(description="Cost per acquisition (conversion event)") ] pricing_option_id: Annotated[ - str, Field(description='Unique identifier for this pricing option within the product') + str, Field(description="Unique identifier for this pricing option within the product") ] diff --git a/src/adcp/types/generated_poc/pricing_options/cpc_option.py b/src/adcp/types/generated_poc/pricing_options/cpc_option.py index c5fef835..20ff8a87 100644 --- a/src/adcp/types/generated_poc/pricing_options/cpc_option.py +++ b/src/adcp/types/generated_poc/pricing_options/cpc_option.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: pricing_options/cpc_option.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:24:08+00:00 from __future__ import annotations @@ -14,42 +14,48 @@ class CpcPricingOption(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) currency: Annotated[ str, Field( - description='ISO 4217 currency code', - examples=['USD', 'EUR', 'GBP', 'JPY'], - pattern='^[A-Z]{3}$', + description="ISO 4217 currency code", + examples=["USD", "EUR", "GBP", "JPY"], + pattern="^[A-Z]{3}$", ), ] fixed_price: Annotated[ float | None, Field( - description='Fixed price per click. If present, this is fixed pricing. If absent, auction-based.', + description="Fixed price per click. If present, this is fixed pricing. If absent, auction-based.", ge=0.0, ), ] = None floor_price: Annotated[ float | None, Field( - description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.', + description="Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.", ge=0.0, ), ] = None + max_bid: Annotated[ + bool | None, + Field( + description="When true, bid_price is interpreted as the buyer's maximum willingness to pay (ceiling) rather than an exact price. Sellers may optimize actual clearing prices between floor_price and bid_price based on delivery pacing. When false or absent, bid_price (if provided) is the exact bid/price to honor." + ), + ] = False min_spend_per_package: Annotated[ float | None, Field( - description='Minimum spend requirement per package using this pricing option, in the specified currency', + description="Minimum spend requirement per package using this pricing option, in the specified currency", ge=0.0, ), ] = None price_guidance: Annotated[ price_guidance_1.PriceGuidance | None, - Field(description='Optional pricing guidance for auction-based bidding'), + Field(description="Optional pricing guidance for auction-based bidding"), ] = None - pricing_model: Annotated[Literal['cpc'], Field(description='Cost per click')] + pricing_model: Annotated[Literal["cpc"], Field(description="Cost per click")] pricing_option_id: Annotated[ - str, Field(description='Unique identifier for this pricing option within the product') + str, Field(description="Unique identifier for this pricing option within the product") ] diff --git a/src/adcp/types/generated_poc/pricing_options/cpcv_option.py b/src/adcp/types/generated_poc/pricing_options/cpcv_option.py index 85dd57ca..016abc64 100644 --- a/src/adcp/types/generated_poc/pricing_options/cpcv_option.py +++ b/src/adcp/types/generated_poc/pricing_options/cpcv_option.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: pricing_options/cpcv_option.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:24:08+00:00 from __future__ import annotations @@ -14,44 +14,50 @@ class CpcvPricingOption(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) currency: Annotated[ str, Field( - description='ISO 4217 currency code', - examples=['USD', 'EUR', 'GBP', 'JPY'], - pattern='^[A-Z]{3}$', + description="ISO 4217 currency code", + examples=["USD", "EUR", "GBP", "JPY"], + pattern="^[A-Z]{3}$", ), ] fixed_price: Annotated[ float | None, Field( - description='Fixed price per completed view. If present, this is fixed pricing. If absent, auction-based.', + description="Fixed price per completed view. If present, this is fixed pricing. If absent, auction-based.", ge=0.0, ), ] = None floor_price: Annotated[ float | None, Field( - description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.', + description="Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.", ge=0.0, ), ] = None + max_bid: Annotated[ + bool | None, + Field( + description="When true, bid_price is interpreted as the buyer's maximum willingness to pay (ceiling) rather than an exact price. Sellers may optimize actual clearing prices between floor_price and bid_price based on delivery pacing. When false or absent, bid_price (if provided) is the exact bid/price to honor." + ), + ] = False min_spend_per_package: Annotated[ float | None, Field( - description='Minimum spend requirement per package using this pricing option, in the specified currency', + description="Minimum spend requirement per package using this pricing option, in the specified currency", ge=0.0, ), ] = None price_guidance: Annotated[ price_guidance_1.PriceGuidance | None, - Field(description='Optional pricing guidance for auction-based bidding'), + Field(description="Optional pricing guidance for auction-based bidding"), ] = None pricing_model: Annotated[ - Literal['cpcv'], Field(description='Cost per completed view (100% completion)') + Literal["cpcv"], Field(description="Cost per completed view (100% completion)") ] pricing_option_id: Annotated[ - str, Field(description='Unique identifier for this pricing option within the product') + str, Field(description="Unique identifier for this pricing option within the product") ] diff --git a/src/adcp/types/generated_poc/pricing_options/cpm_option.py b/src/adcp/types/generated_poc/pricing_options/cpm_option.py index e8fa53d8..78d93d88 100644 --- a/src/adcp/types/generated_poc/pricing_options/cpm_option.py +++ b/src/adcp/types/generated_poc/pricing_options/cpm_option.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: pricing_options/cpm_option.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:24:08+00:00 from __future__ import annotations @@ -14,42 +14,48 @@ class CpmPricingOption(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) currency: Annotated[ str, Field( - description='ISO 4217 currency code', - examples=['USD', 'EUR', 'GBP', 'JPY'], - pattern='^[A-Z]{3}$', + description="ISO 4217 currency code", + examples=["USD", "EUR", "GBP", "JPY"], + pattern="^[A-Z]{3}$", ), ] fixed_price: Annotated[ float | None, Field( - description='Fixed price per unit. If present, this is fixed pricing. If absent, auction-based.', + description="Fixed price per unit. If present, this is fixed pricing. If absent, auction-based.", ge=0.0, ), ] = None floor_price: Annotated[ float | None, Field( - description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.', + description="Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.", ge=0.0, ), ] = None + max_bid: Annotated[ + bool | None, + Field( + description="When true, bid_price is interpreted as the buyer's maximum willingness to pay (ceiling) rather than an exact price. Sellers may optimize actual clearing prices between floor_price and bid_price based on delivery pacing. When false or absent, bid_price (if provided) is the exact bid/price to honor." + ), + ] = False min_spend_per_package: Annotated[ float | None, Field( - description='Minimum spend requirement per package using this pricing option, in the specified currency', + description="Minimum spend requirement per package using this pricing option, in the specified currency", ge=0.0, ), ] = None price_guidance: Annotated[ price_guidance_1.PriceGuidance | None, - Field(description='Optional pricing guidance for auction-based bidding'), + Field(description="Optional pricing guidance for auction-based bidding"), ] = None - pricing_model: Annotated[Literal['cpm'], Field(description='Cost per 1,000 impressions')] + pricing_model: Annotated[Literal["cpm"], Field(description="Cost per 1,000 impressions")] pricing_option_id: Annotated[ - str, Field(description='Unique identifier for this pricing option within the product') + str, Field(description="Unique identifier for this pricing option within the product") ] diff --git a/src/adcp/types/generated_poc/pricing_options/cpp_option.py b/src/adcp/types/generated_poc/pricing_options/cpp_option.py index 3b7417fe..f13622b6 100644 --- a/src/adcp/types/generated_poc/pricing_options/cpp_option.py +++ b/src/adcp/types/generated_poc/pricing_options/cpp_option.py @@ -15,66 +15,66 @@ class Parameters(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) demographic: Annotated[ str, Field( - description='Target demographic code within the specified demographic_system (e.g., P18-49 for Nielsen, ABC1 Adults for BARB)' + description="Target demographic code within the specified demographic_system (e.g., P18-49 for Nielsen, ABC1 Adults for BARB)" ), ] demographic_system: Annotated[ demographic_system_1.DemographicSystem | None, Field( - description='Measurement system for the demographic field. Defaults to nielsen when omitted.' + description="Measurement system for the demographic field. Defaults to nielsen when omitted." ), ] = None - min_points: Annotated[float | None, Field(description='Minimum GRPs/TRPs required', ge=0.0)] = ( + min_points: Annotated[float | None, Field(description="Minimum GRPs/TRPs required", ge=0.0)] = ( None ) class CppPricingOption(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) currency: Annotated[ str, Field( - description='ISO 4217 currency code', - examples=['USD', 'EUR', 'GBP', 'JPY'], - pattern='^[A-Z]{3}$', + description="ISO 4217 currency code", + examples=["USD", "EUR", "GBP", "JPY"], + pattern="^[A-Z]{3}$", ), ] fixed_price: Annotated[ float | None, Field( - description='Fixed price per rating point. If present, this is fixed pricing. If absent, auction-based.', + description="Fixed price per rating point. If present, this is fixed pricing. If absent, auction-based.", ge=0.0, ), ] = None floor_price: Annotated[ float | None, Field( - description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.', + description="Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.", ge=0.0, ), ] = None min_spend_per_package: Annotated[ float | None, Field( - description='Minimum spend requirement per package using this pricing option, in the specified currency', + description="Minimum spend requirement per package using this pricing option, in the specified currency", ge=0.0, ), ] = None parameters: Annotated[ - Parameters, Field(description='CPP-specific parameters for demographic targeting') + Parameters, Field(description="CPP-specific parameters for demographic targeting") ] price_guidance: Annotated[ price_guidance_1.PriceGuidance | None, - Field(description='Optional pricing guidance for auction-based bidding'), + Field(description="Optional pricing guidance for auction-based bidding"), ] = None - pricing_model: Annotated[Literal['cpp'], Field(description='Cost per Gross Rating Point')] + pricing_model: Annotated[Literal["cpp"], Field(description="Cost per Gross Rating Point")] pricing_option_id: Annotated[ - str, Field(description='Unique identifier for this pricing option within the product') + str, Field(description="Unique identifier for this pricing option within the product") ] diff --git a/src/adcp/types/generated_poc/pricing_options/cpv_option.py b/src/adcp/types/generated_poc/pricing_options/cpv_option.py index 3049cadc..e10828f9 100644 --- a/src/adcp/types/generated_poc/pricing_options/cpv_option.py +++ b/src/adcp/types/generated_poc/pricing_options/cpv_option.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: pricing_options/cpv_option.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:24:08+00:00 from __future__ import annotations @@ -16,7 +16,7 @@ class ViewThreshold(RootModel[float]): root: Annotated[ float, Field( - description='Percentage completion threshold (0.0 to 1.0, e.g., 0.5 = 50%)', + description="Percentage completion threshold (0.0 to 1.0, e.g., 0.5 = 50%)", ge=0.0, le=1.0, ), @@ -25,59 +25,65 @@ class ViewThreshold(RootModel[float]): class ViewThreshold1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - duration_seconds: Annotated[int, Field(description='Seconds of viewing required', ge=1)] + duration_seconds: Annotated[int, Field(description="Seconds of viewing required", ge=1)] class Parameters(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) view_threshold: ViewThreshold | ViewThreshold1 class CpvPricingOption(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) currency: Annotated[ str, Field( - description='ISO 4217 currency code', - examples=['USD', 'EUR', 'GBP', 'JPY'], - pattern='^[A-Z]{3}$', + description="ISO 4217 currency code", + examples=["USD", "EUR", "GBP", "JPY"], + pattern="^[A-Z]{3}$", ), ] fixed_price: Annotated[ float | None, Field( - description='Fixed price per view. If present, this is fixed pricing. If absent, auction-based.', + description="Fixed price per view. If present, this is fixed pricing. If absent, auction-based.", ge=0.0, ), ] = None floor_price: Annotated[ float | None, Field( - description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.', + description="Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.", ge=0.0, ), ] = None + max_bid: Annotated[ + bool | None, + Field( + description="When true, bid_price is interpreted as the buyer's maximum willingness to pay (ceiling) rather than an exact price. Sellers may optimize actual clearing prices between floor_price and bid_price based on delivery pacing. When false or absent, bid_price (if provided) is the exact bid/price to honor." + ), + ] = False min_spend_per_package: Annotated[ float | None, Field( - description='Minimum spend requirement per package using this pricing option, in the specified currency', + description="Minimum spend requirement per package using this pricing option, in the specified currency", ge=0.0, ), ] = None parameters: Annotated[ - Parameters, Field(description='CPV-specific parameters defining the view threshold') + Parameters, Field(description="CPV-specific parameters defining the view threshold") ] price_guidance: Annotated[ price_guidance_1.PriceGuidance | None, - Field(description='Optional pricing guidance for auction-based bidding'), + Field(description="Optional pricing guidance for auction-based bidding"), ] = None - pricing_model: Annotated[Literal['cpv'], Field(description='Cost per view at threshold')] + pricing_model: Annotated[Literal["cpv"], Field(description="Cost per view at threshold")] pricing_option_id: Annotated[ - str, Field(description='Unique identifier for this pricing option within the product') + str, Field(description="Unique identifier for this pricing option within the product") ] diff --git a/src/adcp/types/generated_poc/pricing_options/flat_rate_option.py b/src/adcp/types/generated_poc/pricing_options/flat_rate_option.py index ebdd0561..d7b7d655 100644 --- a/src/adcp/types/generated_poc/pricing_options/flat_rate_option.py +++ b/src/adcp/types/generated_poc/pricing_options/flat_rate_option.py @@ -14,73 +14,73 @@ class Parameters(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - daypart: Annotated[str | None, Field(description='Specific daypart for time-based pricing')] = ( + daypart: Annotated[str | None, Field(description="Specific daypart for time-based pricing")] = ( None ) duration_hours: Annotated[ - float | None, Field(description='Duration in hours for time-based pricing', ge=0.0) + float | None, Field(description="Duration in hours for time-based pricing", ge=0.0) ] = None estimated_impressions: Annotated[ - int | None, Field(description='Estimated impressions (informational)', ge=0) + int | None, Field(description="Estimated impressions (informational)", ge=0) ] = None loop_duration_seconds: Annotated[ - int | None, Field(description='Duration of ad loop rotation in seconds', ge=1) + int | None, Field(description="Duration of ad loop rotation in seconds", ge=1) ] = None - min_plays_per_hour: Annotated[int | None, Field(description='Minimum plays per hour', ge=0)] = ( + min_plays_per_hour: Annotated[int | None, Field(description="Minimum plays per hour", ge=0)] = ( None ) sov_percentage: Annotated[ - float | None, Field(description='Guaranteed share of voice (0-100)', ge=0.0, le=100.0) + float | None, Field(description="Guaranteed share of voice (0-100)", ge=0.0, le=100.0) ] = None - venue_package: Annotated[str | None, Field(description='Named venue package identifier')] = None + venue_package: Annotated[str | None, Field(description="Named venue package identifier")] = None class FlatRatePricingOption(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) currency: Annotated[ str, Field( - description='ISO 4217 currency code', - examples=['USD', 'EUR', 'GBP', 'JPY'], - pattern='^[A-Z]{3}$', + description="ISO 4217 currency code", + examples=["USD", "EUR", "GBP", "JPY"], + pattern="^[A-Z]{3}$", ), ] fixed_price: Annotated[ float | None, Field( - description='Flat rate cost. If present, this is fixed pricing. If absent, auction-based.', + description="Flat rate cost. If present, this is fixed pricing. If absent, auction-based.", ge=0.0, ), ] = None floor_price: Annotated[ float | None, Field( - description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.', + description="Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.", ge=0.0, ), ] = None min_spend_per_package: Annotated[ float | None, Field( - description='Minimum spend requirement per package using this pricing option, in the specified currency', + description="Minimum spend requirement per package using this pricing option, in the specified currency", ge=0.0, ), ] = None parameters: Annotated[ Parameters | None, - Field(description='Flat rate parameters for DOOH and time-based campaigns'), + Field(description="Flat rate parameters for DOOH and time-based campaigns"), ] = None price_guidance: Annotated[ price_guidance_1.PriceGuidance | None, - Field(description='Optional pricing guidance for auction-based bidding'), + Field(description="Optional pricing guidance for auction-based bidding"), ] = None pricing_model: Annotated[ - Literal['flat_rate'], Field(description='Fixed cost regardless of delivery volume') + Literal["flat_rate"], Field(description="Fixed cost regardless of delivery volume") ] pricing_option_id: Annotated[ - str, Field(description='Unique identifier for this pricing option within the product') + str, Field(description="Unique identifier for this pricing option within the product") ] diff --git a/src/adcp/types/generated_poc/pricing_options/price_guidance.py b/src/adcp/types/generated_poc/pricing_options/price_guidance.py index 61ee7004..5dd6d362 100644 --- a/src/adcp/types/generated_poc/pricing_options/price_guidance.py +++ b/src/adcp/types/generated_poc/pricing_options/price_guidance.py @@ -12,15 +12,15 @@ class PriceGuidance(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) p25: Annotated[ - float | None, Field(description='25th percentile of recent winning bids', ge=0.0) + float | None, Field(description="25th percentile of recent winning bids", ge=0.0) ] = None - p50: Annotated[float | None, Field(description='Median of recent winning bids', ge=0.0)] = None + p50: Annotated[float | None, Field(description="Median of recent winning bids", ge=0.0)] = None p75: Annotated[ - float | None, Field(description='75th percentile of recent winning bids', ge=0.0) + float | None, Field(description="75th percentile of recent winning bids", ge=0.0) ] = None p90: Annotated[ - float | None, Field(description='90th percentile of recent winning bids', ge=0.0) + float | None, Field(description="90th percentile of recent winning bids", ge=0.0) ] = None diff --git a/src/adcp/types/generated_poc/pricing_options/time_option.py b/src/adcp/types/generated_poc/pricing_options/time_option.py index c4aff500..802131c2 100644 --- a/src/adcp/types/generated_poc/pricing_options/time_option.py +++ b/src/adcp/types/generated_poc/pricing_options/time_option.py @@ -14,76 +14,76 @@ class TimeUnit(Enum): - hour = 'hour' - day = 'day' - week = 'week' - month = 'month' + hour = "hour" + day = "day" + week = "week" + month = "month" class Parameters(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) max_duration: Annotated[ int | None, Field( - description='Maximum booking duration in time_units. Must be >= min_duration when both are present.', + description="Maximum booking duration in time_units. Must be >= min_duration when both are present.", ge=1, ), ] = None min_duration: Annotated[ - int | None, Field(description='Minimum booking duration in time_units', ge=1) + int | None, Field(description="Minimum booking duration in time_units", ge=1) ] = None time_unit: Annotated[ TimeUnit, Field( - description='The time unit for pricing. Total cost = fixed_price × number of time_units in the campaign flight.' + description="The time unit for pricing. Total cost = fixed_price × number of time_units in the campaign flight." ), ] class TimeBasedPricingOption(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) currency: Annotated[ str, Field( - description='ISO 4217 currency code', - examples=['USD', 'EUR', 'GBP', 'JPY'], - pattern='^[A-Z]{3}$', + description="ISO 4217 currency code", + examples=["USD", "EUR", "GBP", "JPY"], + pattern="^[A-Z]{3}$", ), ] fixed_price: Annotated[ float | None, Field( - description='Cost per time unit. If present, this is fixed pricing. If absent, auction-based.', + description="Cost per time unit. If present, this is fixed pricing. If absent, auction-based.", ge=0.0, ), ] = None floor_price: Annotated[ float | None, Field( - description='Minimum acceptable bid per time unit for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.', + description="Minimum acceptable bid per time unit for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.", ge=0.0, ), ] = None min_spend_per_package: Annotated[ float | None, Field( - description='Minimum spend requirement per package using this pricing option, in the specified currency', + description="Minimum spend requirement per package using this pricing option, in the specified currency", ge=0.0, ), ] = None - parameters: Annotated[Parameters, Field(description='Time-based pricing parameters')] + parameters: Annotated[Parameters, Field(description="Time-based pricing parameters")] price_guidance: Annotated[ price_guidance_1.PriceGuidance | None, - Field(description='Optional pricing guidance for auction-based bidding'), + Field(description="Optional pricing guidance for auction-based bidding"), ] = None pricing_model: Annotated[ - Literal['time'], - Field(description='Cost per time unit - rate scales with campaign duration'), + Literal["time"], + Field(description="Cost per time unit - rate scales with campaign duration"), ] pricing_option_id: Annotated[ - str, Field(description='Unique identifier for this pricing option within the product') + str, Field(description="Unique identifier for this pricing option within the product") ] diff --git a/src/adcp/types/generated_poc/pricing_options/vcpm_option.py b/src/adcp/types/generated_poc/pricing_options/vcpm_option.py index bd5bad70..952436e3 100644 --- a/src/adcp/types/generated_poc/pricing_options/vcpm_option.py +++ b/src/adcp/types/generated_poc/pricing_options/vcpm_option.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: pricing_options/vcpm_option.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:24:08+00:00 from __future__ import annotations @@ -14,44 +14,50 @@ class VcpmPricingOption(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) currency: Annotated[ str, Field( - description='ISO 4217 currency code', - examples=['USD', 'EUR', 'GBP', 'JPY'], - pattern='^[A-Z]{3}$', + description="ISO 4217 currency code", + examples=["USD", "EUR", "GBP", "JPY"], + pattern="^[A-Z]{3}$", ), ] fixed_price: Annotated[ float | None, Field( - description='Fixed price per unit. If present, this is fixed pricing. If absent, auction-based.', + description="Fixed price per unit. If present, this is fixed pricing. If absent, auction-based.", ge=0.0, ), ] = None floor_price: Annotated[ float | None, Field( - description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.', + description="Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.", ge=0.0, ), ] = None + max_bid: Annotated[ + bool | None, + Field( + description="When true, bid_price is interpreted as the buyer's maximum willingness to pay (ceiling) rather than an exact price. Sellers may optimize actual clearing prices between floor_price and bid_price based on delivery pacing. When false or absent, bid_price (if provided) is the exact bid/price to honor." + ), + ] = False min_spend_per_package: Annotated[ float | None, Field( - description='Minimum spend requirement per package using this pricing option, in the specified currency', + description="Minimum spend requirement per package using this pricing option, in the specified currency", ge=0.0, ), ] = None price_guidance: Annotated[ price_guidance_1.PriceGuidance | None, - Field(description='Optional pricing guidance for auction-based bidding'), + Field(description="Optional pricing guidance for auction-based bidding"), ] = None pricing_model: Annotated[ - Literal['vcpm'], Field(description='Cost per 1,000 viewable impressions (MRC standard)') + Literal["vcpm"], Field(description="Cost per 1,000 viewable impressions (MRC standard)") ] pricing_option_id: Annotated[ - str, Field(description='Unique identifier for this pricing option within the product') + str, Field(description="Unique identifier for this pricing option within the product") ] diff --git a/src/adcp/types/generated_poc/property/base_property_source.py b/src/adcp/types/generated_poc/property/base_property_source.py index caa92998..326fe010 100644 --- a/src/adcp/types/generated_poc/property/base_property_source.py +++ b/src/adcp/types/generated_poc/property/base_property_source.py @@ -14,18 +14,18 @@ class BasePropertySource1(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) publisher_domain: Annotated[ str, Field( description="Domain where publisher's adagents.json is hosted (e.g., 'raptive.com')", - pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', + pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", ), ] selection_type: Annotated[ - Literal['publisher_tags'], - Field(description='Discriminator indicating selection by property tags within a publisher'), + Literal["publisher_tags"], + Field(description="Discriminator indicating selection by property tags within a publisher"), ] tags: Annotated[ list[property_tag.PropertyTag], @@ -38,7 +38,7 @@ class BasePropertySource1(AdCPBaseModel): class BasePropertySource2(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) property_ids: Annotated[ list[property_id.PropertyId], @@ -48,28 +48,28 @@ class BasePropertySource2(AdCPBaseModel): str, Field( description="Domain where publisher's adagents.json is hosted (e.g., 'raptive.com')", - pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', + pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", ), ] selection_type: Annotated[ - Literal['publisher_ids'], + Literal["publisher_ids"], Field( - description='Discriminator indicating selection by specific property IDs within a publisher' + description="Discriminator indicating selection by specific property IDs within a publisher" ), ] class BasePropertySource3(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) identifiers: Annotated[ list[identifier.Identifier], - Field(description='Direct property identifiers (domains, app IDs, etc.)', min_length=1), + Field(description="Direct property identifiers (domains, app IDs, etc.)", min_length=1), ] selection_type: Annotated[ - Literal['identifiers'], - Field(description='Discriminator indicating selection by direct identifiers'), + Literal["identifiers"], + Field(description="Discriminator indicating selection by direct identifiers"), ] @@ -79,8 +79,8 @@ class BasePropertySource( root: Annotated[ BasePropertySource1 | BasePropertySource2 | BasePropertySource3, Field( - description='A source of properties for a property list. Supports three selection patterns: publisher with tags, publisher with property IDs, or direct identifiers.', - discriminator='selection_type', - title='Base Property Source', + description="A source of properties for a property list. Supports three selection patterns: publisher with tags, publisher with property IDs, or direct identifiers.", + discriminator="selection_type", + title="Base Property Source", ), ] diff --git a/src/adcp/types/generated_poc/property/create_property_list_request.py b/src/adcp/types/generated_poc/property/create_property_list_request.py index 5ad27b10..0e125a35 100644 --- a/src/adcp/types/generated_poc/property/create_property_list_request.py +++ b/src/adcp/types/generated_poc/property/create_property_list_request.py @@ -17,7 +17,7 @@ class CreatePropertyListRequest(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) base_properties: Annotated[ list[base_property_source.BasePropertySource] | None, @@ -29,7 +29,7 @@ class CreatePropertyListRequest(AdCPBaseModel): brand: Annotated[ brand_ref.BrandReference | None, Field( - description='Brand reference. When provided, the agent automatically applies appropriate rules based on brand characteristics (industry, target_audience, etc.). Resolved at execution time.' + description="Brand reference. When provided, the agent automatically applies appropriate rules based on brand characteristics (industry, target_audience, etc.). Resolved at execution time." ), ] = None context: context_1.ContextObject | None = None @@ -39,6 +39,6 @@ class CreatePropertyListRequest(AdCPBaseModel): ext: ext_1.ExtensionObject | None = None filters: Annotated[ property_list_filters.PropertyListFilters | None, - Field(description='Dynamic filters to apply when resolving the list'), + Field(description="Dynamic filters to apply when resolving the list"), ] = None - name: Annotated[str, Field(description='Human-readable name for the list')] + name: Annotated[str, Field(description="Human-readable name for the list")] diff --git a/src/adcp/types/generated_poc/property/create_property_list_response.py b/src/adcp/types/generated_poc/property/create_property_list_response.py index f84ebc0d..26da2c6f 100644 --- a/src/adcp/types/generated_poc/property/create_property_list_response.py +++ b/src/adcp/types/generated_poc/property/create_property_list_response.py @@ -15,13 +15,13 @@ class CreatePropertyListResponse(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) auth_token: Annotated[ str, Field( - description='Token that can be shared with sellers to authorize fetching this list. Store this - it is only returned at creation time.' + description="Token that can be shared with sellers to authorize fetching this list. Store this - it is only returned at creation time." ), ] ext: ext_1.ExtensionObject | None = None - list: Annotated[property_list.PropertyList, Field(description='The created property list')] + list: Annotated[property_list.PropertyList, Field(description="The created property list")] diff --git a/src/adcp/types/generated_poc/property/delete_property_list_request.py b/src/adcp/types/generated_poc/property/delete_property_list_request.py index cbb3c24c..7eb7bd5e 100644 --- a/src/adcp/types/generated_poc/property/delete_property_list_request.py +++ b/src/adcp/types/generated_poc/property/delete_property_list_request.py @@ -15,8 +15,8 @@ class DeletePropertyListRequest(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None - list_id: Annotated[str, Field(description='ID of the property list to delete')] + list_id: Annotated[str, Field(description="ID of the property list to delete")] diff --git a/src/adcp/types/generated_poc/property/delete_property_list_response.py b/src/adcp/types/generated_poc/property/delete_property_list_response.py index 40b3a048..a467458c 100644 --- a/src/adcp/types/generated_poc/property/delete_property_list_response.py +++ b/src/adcp/types/generated_poc/property/delete_property_list_response.py @@ -14,8 +14,8 @@ class DeletePropertyListResponse(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) - deleted: Annotated[bool, Field(description='Whether the list was successfully deleted')] + deleted: Annotated[bool, Field(description="Whether the list was successfully deleted")] ext: ext_1.ExtensionObject | None = None - list_id: Annotated[str, Field(description='ID of the deleted list')] + list_id: Annotated[str, Field(description="ID of the deleted list")] diff --git a/src/adcp/types/generated_poc/property/feature_requirement.py b/src/adcp/types/generated_poc/property/feature_requirement.py index fe33bb39..684ae472 100644 --- a/src/adcp/types/generated_poc/property/feature_requirement.py +++ b/src/adcp/types/generated_poc/property/feature_requirement.py @@ -12,23 +12,23 @@ class IfNotCovered(Enum): - exclude = 'exclude' - include = 'include' + exclude = "exclude" + include = "include" class FeatureRequirement(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) allowed_values: Annotated[ list[Any] | None, Field( - description='Values that pass the requirement (for binary/categorical features)', + description="Values that pass the requirement (for binary/categorical features)", min_length=1, ), ] = None feature_id: Annotated[ - str, Field(description='Feature to evaluate (discovered via get_adcp_capabilities)') + str, Field(description="Feature to evaluate (discovered via get_adcp_capabilities)") ] if_not_covered: Annotated[ IfNotCovered | None, @@ -37,9 +37,9 @@ class FeatureRequirement(AdCPBaseModel): ), ] = IfNotCovered.exclude max_value: Annotated[ - float | None, Field(description='Maximum numeric value allowed (for quantitative features)') + float | None, Field(description="Maximum numeric value allowed (for quantitative features)") ] = None min_value: Annotated[ float | None, - Field(description='Minimum numeric value required (for quantitative features)'), + Field(description="Minimum numeric value required (for quantitative features)"), ] = None diff --git a/src/adcp/types/generated_poc/property/get_property_list_request.py b/src/adcp/types/generated_poc/property/get_property_list_request.py index 793a061a..229f684e 100644 --- a/src/adcp/types/generated_poc/property/get_property_list_request.py +++ b/src/adcp/types/generated_poc/property/get_property_list_request.py @@ -15,34 +15,34 @@ class Pagination(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) cursor: Annotated[ str | None, - Field(description='Opaque cursor from a previous response to fetch the next page'), + Field(description="Opaque cursor from a previous response to fetch the next page"), ] = None max_results: Annotated[ int | None, - Field(description='Maximum number of identifiers to return per page', ge=1, le=10000), + Field(description="Maximum number of identifiers to return per page", ge=1, le=10000), ] = 1000 class GetPropertyListRequest(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None - list_id: Annotated[str, Field(description='ID of the property list to retrieve')] + list_id: Annotated[str, Field(description="ID of the property list to retrieve")] pagination: Annotated[ Pagination | None, Field( - description='Pagination parameters. Uses higher limits than standard pagination because property lists can contain tens of thousands of identifiers.' + description="Pagination parameters. Uses higher limits than standard pagination because property lists can contain tens of thousands of identifiers." ), ] = None resolve: Annotated[ bool | None, Field( - description='Whether to apply filters and return resolved identifiers (default: true)' + description="Whether to apply filters and return resolved identifiers (default: true)" ), ] = True diff --git a/src/adcp/types/generated_poc/property/get_property_list_response.py b/src/adcp/types/generated_poc/property/get_property_list_response.py index e317e8fa..c8e7703d 100644 --- a/src/adcp/types/generated_poc/property/get_property_list_response.py +++ b/src/adcp/types/generated_poc/property/get_property_list_response.py @@ -16,12 +16,12 @@ class GetPropertyListResponse(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) cache_valid_until: Annotated[ AwareDatetime | None, Field( - description='Cache expiration timestamp. Re-fetch the list after this time to get updated identifiers.' + description="Cache expiration timestamp. Re-fetch the list after this time to get updated identifiers." ), ] = None coverage_gaps: Annotated[ @@ -34,14 +34,14 @@ class GetPropertyListResponse(AdCPBaseModel): identifiers: Annotated[ list[identifier.Identifier] | None, Field( - description='Resolved identifiers that passed filters (if resolve=true). Cache these locally for real-time use.' + description="Resolved identifiers that passed filters (if resolve=true). Cache these locally for real-time use." ), ] = None list: Annotated[ property_list.PropertyList, - Field(description='The property list metadata (always returned)'), + Field(description="The property list metadata (always returned)"), ] pagination: pagination_response.PaginationResponse | None = None resolved_at: Annotated[ - AwareDatetime | None, Field(description='When the list was resolved') + AwareDatetime | None, Field(description="When the list was resolved") ] = None diff --git a/src/adcp/types/generated_poc/property/list_property_lists_request.py b/src/adcp/types/generated_poc/property/list_property_lists_request.py index 8db275ec..9459800f 100644 --- a/src/adcp/types/generated_poc/property/list_property_lists_request.py +++ b/src/adcp/types/generated_poc/property/list_property_lists_request.py @@ -16,14 +16,14 @@ class ListPropertyListsRequest(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None name_contains: Annotated[ - str | None, Field(description='Filter to lists whose name contains this string') + str | None, Field(description="Filter to lists whose name contains this string") ] = None pagination: pagination_request.PaginationRequest | None = None principal: Annotated[ - str | None, Field(description='Filter to lists owned by this principal') + str | None, Field(description="Filter to lists owned by this principal") ] = None diff --git a/src/adcp/types/generated_poc/property/list_property_lists_response.py b/src/adcp/types/generated_poc/property/list_property_lists_response.py index a2681981..1b2b7c08 100644 --- a/src/adcp/types/generated_poc/property/list_property_lists_response.py +++ b/src/adcp/types/generated_poc/property/list_property_lists_response.py @@ -16,11 +16,11 @@ class ListPropertyListsResponse(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) ext: ext_1.ExtensionObject | None = None lists: Annotated[ list[property_list.PropertyList], - Field(description='Array of property lists (metadata only, not resolved properties)'), + Field(description="Array of property lists (metadata only, not resolved properties)"), ] pagination: pagination_response.PaginationResponse | None = None diff --git a/src/adcp/types/generated_poc/property/property_error.py b/src/adcp/types/generated_poc/property/property_error.py index 3ca3e25c..8ad9d0c8 100644 --- a/src/adcp/types/generated_poc/property/property_error.py +++ b/src/adcp/types/generated_poc/property/property_error.py @@ -14,20 +14,20 @@ class Code(Enum): - PROPERTY_NOT_FOUND = 'PROPERTY_NOT_FOUND' - PROPERTY_NOT_MONITORED = 'PROPERTY_NOT_MONITORED' - LIST_NOT_FOUND = 'LIST_NOT_FOUND' - LIST_ACCESS_DENIED = 'LIST_ACCESS_DENIED' - METHODOLOGY_NOT_SUPPORTED = 'METHODOLOGY_NOT_SUPPORTED' - JURISDICTION_NOT_SUPPORTED = 'JURISDICTION_NOT_SUPPORTED' + PROPERTY_NOT_FOUND = "PROPERTY_NOT_FOUND" + PROPERTY_NOT_MONITORED = "PROPERTY_NOT_MONITORED" + LIST_NOT_FOUND = "LIST_NOT_FOUND" + LIST_ACCESS_DENIED = "LIST_ACCESS_DENIED" + METHODOLOGY_NOT_SUPPORTED = "METHODOLOGY_NOT_SUPPORTED" + JURISDICTION_NOT_SUPPORTED = "JURISDICTION_NOT_SUPPORTED" class PropertyError(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) - code: Annotated[Code, Field(description='Error code')] - message: Annotated[str, Field(description='Human-readable error message')] + code: Annotated[Code, Field(description="Error code")] + message: Annotated[str, Field(description="Human-readable error message")] property: Annotated[ - property_1.Property | None, Field(description='The property that caused the error') + property_1.Property | None, Field(description="The property that caused the error") ] = None diff --git a/src/adcp/types/generated_poc/property/property_feature.py b/src/adcp/types/generated_poc/property/property_feature.py index fb273ab9..9388aade 100644 --- a/src/adcp/types/generated_poc/property/property_feature.py +++ b/src/adcp/types/generated_poc/property/property_feature.py @@ -12,11 +12,11 @@ class PropertyFeature(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) - feature_id: Annotated[str, Field(description='Identifier for the feature being assessed')] + feature_id: Annotated[str, Field(description="Identifier for the feature being assessed")] source: Annotated[ str | None, - Field(description='Source of the feature data (e.g., app_store_privacy_label, tcf_string)'), + Field(description="Source of the feature data (e.g., app_store_privacy_label, tcf_string)"), ] = None - value: Annotated[str, Field(description='The feature value')] + value: Annotated[str, Field(description="The feature value")] diff --git a/src/adcp/types/generated_poc/property/property_feature_definition.py b/src/adcp/types/generated_poc/property/property_feature_definition.py index 09458431..7ae0e5e8 100644 --- a/src/adcp/types/generated_poc/property/property_feature_definition.py +++ b/src/adcp/types/generated_poc/property/property_feature_definition.py @@ -15,42 +15,42 @@ class Coverage(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) countries: Annotated[ - list[str] | None, Field(description='Countries where this feature is available') + list[str] | None, Field(description="Countries where this feature is available") ] = None property_types: Annotated[ - list[str] | None, Field(description='Property types this feature applies to') + list[str] | None, Field(description="Property types this feature applies to") ] = None class Range(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) - max: Annotated[float, Field(description='Maximum value')] - min: Annotated[float, Field(description='Minimum value')] + max: Annotated[float, Field(description="Maximum value")] + min: Annotated[float, Field(description="Minimum value")] class Type(Enum): - binary = 'binary' - quantitative = 'quantitative' - categorical = 'categorical' + binary = "binary" + quantitative = "quantitative" + categorical = "categorical" class PropertyFeatureDefinition(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) allowed_values: Annotated[ - list[str] | None, Field(description='For categorical features, the set of valid values') + list[str] | None, Field(description="For categorical features, the set of valid values") ] = None coverage: Annotated[ - Coverage | None, Field(description='What this feature covers (empty arrays = all)') + Coverage | None, Field(description="What this feature covers (empty arrays = all)") ] = None description: Annotated[ - str | None, Field(description='Description of what this feature measures or represents') + str | None, Field(description="Description of what this feature measures or represents") ] = None ext: ext_1.ExtensionObject | None = None feature_id: Annotated[ @@ -62,19 +62,19 @@ class PropertyFeatureDefinition(AdCPBaseModel): methodology_url: Annotated[ AnyUrl, Field( - description='URL to documentation explaining how this feature is calculated/measured' + description="URL to documentation explaining how this feature is calculated/measured" ), ] methodology_version: Annotated[ - str | None, Field(description='Version identifier for the methodology (for audit trails)') + str | None, Field(description="Version identifier for the methodology (for audit trails)") ] = None - name: Annotated[str, Field(description='Human-readable name for the feature')] + name: Annotated[str, Field(description="Human-readable name for the feature")] range: Annotated[ - Range | None, Field(description='For quantitative features, the valid range of values') + Range | None, Field(description="For quantitative features, the valid range of values") ] = None type: Annotated[ Type, Field( - description='The type of values this feature produces: binary (true/false), quantitative (numeric range), categorical (enumerated values)' + description="The type of values this feature produces: binary (true/false), quantitative (numeric range), categorical (enumerated values)" ), ] diff --git a/src/adcp/types/generated_poc/property/property_list.py b/src/adcp/types/generated_poc/property/property_list.py index 8c9136ae..c8eb8f77 100644 --- a/src/adcp/types/generated_poc/property/property_list.py +++ b/src/adcp/types/generated_poc/property/property_list.py @@ -15,7 +15,7 @@ class PropertyList(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) base_properties: Annotated[ list[base_property_source.BasePropertySource] | None, @@ -26,17 +26,17 @@ class PropertyList(AdCPBaseModel): brand: Annotated[ brand_ref.BrandReference | None, Field( - description='Brand reference used to automatically apply appropriate rules. Resolved to full brand identity at execution time.' + description="Brand reference used to automatically apply appropriate rules. Resolved to full brand identity at execution time." ), ] = None cache_duration_hours: Annotated[ int | None, Field( - description='Recommended cache duration for resolved list. Consumers should re-fetch after this period.', + description="Recommended cache duration for resolved list. Consumers should re-fetch after this period.", ge=1, ), ] = 24 - created_at: Annotated[AwareDatetime | None, Field(description='When the list was created')] = ( + created_at: Annotated[AwareDatetime | None, Field(description="When the list was created")] = ( None ) description: Annotated[str | None, Field(description="Description of the list's purpose")] = ( @@ -44,21 +44,21 @@ class PropertyList(AdCPBaseModel): ) filters: Annotated[ property_list_filters.PropertyListFilters | None, - Field(description='Dynamic filters applied when resolving the list'), + Field(description="Dynamic filters applied when resolving the list"), ] = None - list_id: Annotated[str, Field(description='Unique identifier for this property list')] - name: Annotated[str, Field(description='Human-readable name for the list')] + list_id: Annotated[str, Field(description="Unique identifier for this property list")] + name: Annotated[str, Field(description="Human-readable name for the list")] principal: Annotated[ - str | None, Field(description='Principal identity that owns this list') + str | None, Field(description="Principal identity that owns this list") ] = None property_count: Annotated[ int | None, - Field(description='Number of properties in the resolved list (at time of last resolution)'), + Field(description="Number of properties in the resolved list (at time of last resolution)"), ] = None updated_at: Annotated[ - AwareDatetime | None, Field(description='When the list was last modified') + AwareDatetime | None, Field(description="When the list was last modified") ] = None webhook_url: Annotated[ AnyUrl | None, - Field(description='URL to receive notifications when the resolved list changes'), + Field(description="URL to receive notifications when the resolved list changes"), ] = None diff --git a/src/adcp/types/generated_poc/property/property_list_changed_webhook.py b/src/adcp/types/generated_poc/property/property_list_changed_webhook.py index 8e43e1db..090b9f4c 100644 --- a/src/adcp/types/generated_poc/property/property_list_changed_webhook.py +++ b/src/adcp/types/generated_poc/property/property_list_changed_webhook.py @@ -14,35 +14,35 @@ class ChangeSummary(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) properties_added: Annotated[ - int | None, Field(description='Number of properties added since last resolution') + int | None, Field(description="Number of properties added since last resolution") ] = None properties_removed: Annotated[ - int | None, Field(description='Number of properties removed since last resolution') + int | None, Field(description="Number of properties removed since last resolution") ] = None total_properties: Annotated[ - int | None, Field(description='Total properties in the resolved list') + int | None, Field(description="Total properties in the resolved list") ] = None class PropertyListChangedWebhook(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) cache_valid_until: Annotated[ AwareDatetime | None, - Field(description='When the consumer should refresh from the governance agent'), + Field(description="When the consumer should refresh from the governance agent"), ] = None change_summary: Annotated[ - ChangeSummary | None, Field(description='Summary of changes to the resolved list') + ChangeSummary | None, Field(description="Summary of changes to the resolved list") ] = None - event: Annotated[Literal['property_list_changed'], Field(description='The event type')] + event: Annotated[Literal["property_list_changed"], Field(description="The event type")] ext: ext_1.ExtensionObject | None = None - list_id: Annotated[str, Field(description='ID of the property list that changed')] - list_name: Annotated[str | None, Field(description='Name of the property list')] = None - resolved_at: Annotated[AwareDatetime, Field(description='When the list was re-resolved')] + list_id: Annotated[str, Field(description="ID of the property list that changed")] + list_name: Annotated[str | None, Field(description="Name of the property list")] = None + resolved_at: Annotated[AwareDatetime, Field(description="When the list was re-resolved")] signature: Annotated[ str, Field( diff --git a/src/adcp/types/generated_poc/property/property_list_filters.py b/src/adcp/types/generated_poc/property/property_list_filters.py index 1b8d240f..9a6a55fb 100644 --- a/src/adcp/types/generated_poc/property/property_list_filters.py +++ b/src/adcp/types/generated_poc/property/property_list_filters.py @@ -15,38 +15,38 @@ class CountriesAllItem(RootModel[str]): - root: Annotated[str, Field(pattern='^[A-Z]{2}$')] + root: Annotated[str, Field(pattern="^[A-Z]{2}$")] class PropertyListFilters(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) channels_any: Annotated[ list[channels.MediaChannel], Field( - description='Property must support ANY of the listed channels. Required.', min_length=1 + description="Property must support ANY of the listed channels. Required.", min_length=1 ), ] countries_all: Annotated[ list[CountriesAllItem], Field( - description='Property must have feature data for ALL listed countries (ISO codes). Required.', + description="Property must have feature data for ALL listed countries (ISO codes). Required.", min_length=1, ), ] exclude_identifiers: Annotated[ list[identifier.Identifier] | None, - Field(description='Identifiers to always exclude from results', min_length=1), + Field(description="Identifiers to always exclude from results", min_length=1), ] = None feature_requirements: Annotated[ list[feature_requirement.FeatureRequirement] | None, Field( - description='Feature-based requirements. Property must pass ALL requirements (AND logic).', + description="Feature-based requirements. Property must pass ALL requirements (AND logic).", min_length=1, ), ] = None property_types: Annotated[ list[property_type.PropertyType] | None, - Field(description='Filter to these property types', min_length=1), + Field(description="Filter to these property types", min_length=1), ] = None diff --git a/src/adcp/types/generated_poc/property/update_property_list_request.py b/src/adcp/types/generated_poc/property/update_property_list_request.py index 11f014b5..82979a4a 100644 --- a/src/adcp/types/generated_poc/property/update_property_list_request.py +++ b/src/adcp/types/generated_poc/property/update_property_list_request.py @@ -17,32 +17,32 @@ class UpdatePropertyListRequest(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) base_properties: Annotated[ list[base_property_source.BasePropertySource] | None, Field( - description='Complete replacement for the base properties list (not a patch). Each entry is a discriminated union: publisher_tags (publisher_domain + tags), publisher_ids (publisher_domain + property_ids), or identifiers (direct identifiers).' + description="Complete replacement for the base properties list (not a patch). Each entry is a discriminated union: publisher_tags (publisher_domain + tags), publisher_ids (publisher_domain + property_ids), or identifiers (direct identifiers)." ), ] = None brand: Annotated[ brand_ref.BrandReference | None, Field( - description='Update brand reference. Resolved to full brand identity at execution time.' + description="Update brand reference. Resolved to full brand identity at execution time." ), ] = None context: context_1.ContextObject | None = None - description: Annotated[str | None, Field(description='New description')] = None + description: Annotated[str | None, Field(description="New description")] = None ext: ext_1.ExtensionObject | None = None filters: Annotated[ property_list_filters.PropertyListFilters | None, - Field(description='Complete replacement for the filters (not a patch)'), + Field(description="Complete replacement for the filters (not a patch)"), ] = None - list_id: Annotated[str, Field(description='ID of the property list to update')] - name: Annotated[str | None, Field(description='New name for the list')] = None + list_id: Annotated[str, Field(description="ID of the property list to update")] + name: Annotated[str | None, Field(description="New name for the list")] = None webhook_url: Annotated[ AnyUrl | None, Field( - description='Update the webhook URL for list change notifications (set to empty string to remove)' + description="Update the webhook URL for list change notifications (set to empty string to remove)" ), ] = None diff --git a/src/adcp/types/generated_poc/property/update_property_list_response.py b/src/adcp/types/generated_poc/property/update_property_list_response.py index 8d06a451..790dabae 100644 --- a/src/adcp/types/generated_poc/property/update_property_list_response.py +++ b/src/adcp/types/generated_poc/property/update_property_list_response.py @@ -15,7 +15,7 @@ class UpdatePropertyListResponse(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) ext: ext_1.ExtensionObject | None = None - list: Annotated[property_list.PropertyList, Field(description='The updated property list')] + list: Annotated[property_list.PropertyList, Field(description="The updated property list")] diff --git a/src/adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py b/src/adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py index f662b332..4742f2dd 100644 --- a/src/adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py +++ b/src/adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py @@ -15,23 +15,23 @@ class Protocol(Enum): - media_buy = 'media_buy' - signals = 'signals' - governance = 'governance' - sponsored_intelligence = 'sponsored_intelligence' - creative = 'creative' + media_buy = "media_buy" + signals = "signals" + governance = "governance" + sponsored_intelligence = "sponsored_intelligence" + creative = "creative" class GetAdcpCapabilitiesRequest(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None protocols: Annotated[ list[Protocol] | None, Field( - description='Specific protocols to query capabilities for. If omitted, returns capabilities for all supported protocols.', + description="Specific protocols to query capabilities for. If omitted, returns capabilities for all supported protocols.", min_length=1, ), ] = None diff --git a/src/adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py b/src/adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py index b4d3bbd4..36b2d2ab 100644 --- a/src/adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py +++ b/src/adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: protocol/get_adcp_capabilities_response.json -# timestamp: 2026-02-20T02:37:39+00:00 +# timestamp: 2026-02-23T01:24:08+00:00 from __future__ import annotations @@ -21,22 +21,22 @@ class DefaultBilling(Enum): - brand = 'brand' - operator = 'operator' - agent = 'agent' + brand = "brand" + operator = "operator" + agent = "agent" class Account(AdCPBaseModel): authorization_endpoint: Annotated[ AnyUrl | None, Field( - description='OAuth authorization endpoint for obtaining operator-level credentials. Present when the seller supports OAuth for operator authentication. The agent directs the operator to this URL to authenticate and obtain a bearer token. If absent and require_operator_auth is true, operators obtain credentials out-of-band (e.g., seller portal, API key).' + description="OAuth authorization endpoint for obtaining operator-level credentials. Present when the seller supports OAuth for operator authentication. The agent directs the operator to this URL to authenticate and obtain a bearer token. If absent and require_operator_auth is true, operators obtain credentials out-of-band (e.g., seller portal, API key)." ), ] = None default_billing: Annotated[ DefaultBilling | None, Field( - description='The billing model applied when the agent omits billing from a sync_accounts request. Must be one of the values in supported_billing.' + description="The billing model applied when the agent omits billing from a sync_accounts request. Must be one of the values in supported_billing." ), ] = None require_operator_auth: Annotated[ @@ -48,13 +48,13 @@ class Account(AdCPBaseModel): required_for_products: Annotated[ bool | None, Field( - description='Whether an active account is required to call get_products. When true, the agent must establish an account via sync_accounts before browsing products. When false, get_products works without an account (account_id is optional for rate-card-specific pricing).' + description="Whether an active account is required to call get_products. When true, the agent must establish an account via sync_accounts before browsing products. When false, get_products works without an account (account_id is optional for rate-card-specific pricing)." ), ] = False supported_billing: Annotated[ list[DefaultBilling], Field( - description='Billing models this seller supports. brand: seller invoices the brand directly. operator: seller invoices the operator (agency). agent: agent consolidates billing.', + description="Billing models this seller supports. brand: seller invoices the brand directly. operator: seller invoices the operator (agency). agent: agent consolidates billing.", min_length=1, ), ] @@ -68,7 +68,7 @@ class Adcp(AdCPBaseModel): major_versions: Annotated[ list[MajorVersion], Field( - description='AdCP major versions supported by this seller. Major versions indicate breaking changes.', + description="AdCP major versions supported by this seller. Major versions indicate breaking changes.", min_length=1, ), ] @@ -76,12 +76,12 @@ class Adcp(AdCPBaseModel): class Creative(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) supports_brief: Annotated[ bool | None, Field( - description='Whether this creative agent accepts creative_brief in build_creative requests for structured campaign-level creative direction' + description="Whether this creative agent accepts creative_brief in build_creative requests for structured campaign-level creative direction" ), ] = None @@ -91,28 +91,58 @@ class ExtensionsSupportedItem(RootModel[str]): str, Field( description="Extension namespace (lowercase alphanumeric with underscores, e.g., 'scope3', 'garm', 'iab_tcf')", - pattern='^[a-z][a-z0-9_]*$', + pattern="^[a-z][a-z0-9_]*$", ), ] class Range(AdCPBaseModel): - max: Annotated[float, Field(description='Maximum value')] - min: Annotated[float, Field(description='Minimum value')] + max: Annotated[float, Field(description="Maximum value")] + min: Annotated[float, Field(description="Minimum value")] class Type(Enum): - binary = 'binary' - quantitative = 'quantitative' - categorical = 'categorical' + binary = "binary" + quantitative = "quantitative" + categorical = "categorical" + + +class CreativeFeature(AdCPBaseModel): + categories: Annotated[ + list[str] | None, Field(description="For categorical features, the valid values") + ] = None + description: Annotated[ + str | None, Field(description="Human-readable description of what this feature measures") + ] = None + feature_id: Annotated[ + str, + Field( + description="Unique identifier for this feature (e.g., 'auto_redirect', 'brand_consistency', 'iab_casinos_gambling')" + ), + ] + methodology_url: Annotated[ + AnyUrl | None, + Field( + description="URL to documentation explaining how this feature is calculated or measured." + ), + ] = None + range: Annotated[ + Range | None, Field(description="For quantitative features, the valid range") + ] = None + type: Annotated[ + Type, + Field( + description="Data type: 'binary' for yes/no, 'quantitative' for numeric scores, 'categorical' for enum values" + ), + ] class PropertyFeature(AdCPBaseModel): categories: Annotated[ - list[str] | None, Field(description='For categorical features, the valid values') + list[str] | None, Field(description="For categorical features, the valid values") ] = None description: Annotated[ - str | None, Field(description='Human-readable description of what this feature measures') + str | None, Field(description="Human-readable description of what this feature measures") ] = None feature_id: Annotated[ str, @@ -123,11 +153,11 @@ class PropertyFeature(AdCPBaseModel): methodology_url: Annotated[ AnyUrl | None, Field( - description='URL to documentation explaining how this feature is calculated or measured. Helps buyers understand and compare methodologies across vendors.' + description="URL to documentation explaining how this feature is calculated or measured. Helps buyers understand and compare methodologies across vendors." ), ] = None range: Annotated[ - Range | None, Field(description='For quantitative features, the valid range') + Range | None, Field(description="For quantitative features, the valid range") ] = None type: Annotated[ Type, @@ -138,30 +168,36 @@ class PropertyFeature(AdCPBaseModel): class Governance(AdCPBaseModel): + creative_features: Annotated[ + list[CreativeFeature] | None, + Field( + description="Creative features this governance agent can evaluate. Each feature describes a score, rating, or assessment the agent can provide for creatives (e.g., security scanning, creative quality, content categorization)." + ), + ] = None property_features: Annotated[ list[PropertyFeature] | None, Field( - description='Property features this governance agent can evaluate. Each feature describes a score, rating, or certification the agent can provide for properties.' + description="Property features this governance agent can evaluate. Each feature describes a score, rating, or certification the agent can provide for properties." ), ] = None class MatchingLatencyHours(AdCPBaseModel): model_config = ConfigDict( - extra='forbid', + extra="forbid", ) max: Annotated[int | None, Field(ge=0)] = None min: Annotated[int | None, Field(ge=0)] = None class SupportedIdentifierType(Enum): - hashed_email = 'hashed_email' - hashed_phone = 'hashed_phone' + hashed_email = "hashed_email" + hashed_phone = "hashed_phone" class AttributionWindow(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) click_through: Annotated[ list[str], @@ -172,7 +208,7 @@ class AttributionWindow(AdCPBaseModel): ] event_type: Annotated[ event_type_1.EventType | None, - Field(description='Event type this window applies to, or omit for default window'), + Field(description="Event type this window applies to, or omit for default window"), ] = None view_through: Annotated[ list[str] | None, @@ -184,7 +220,7 @@ class AttributionWindow(AdCPBaseModel): class MraidVersion(RootModel[str]): - root: Annotated[str, Field(pattern='^[0-9]+\\.[0-9]+$')] + root: Annotated[str, Field(pattern="^[0-9]+\\.[0-9]+$")] class VastVersion(MraidVersion): @@ -194,39 +230,39 @@ class VastVersion(MraidVersion): class CreativeSpecs(AdCPBaseModel): mraid_versions: Annotated[ list[MraidVersion] | None, - Field(description='MRAID versions supported for rich media mobile creatives'), + Field(description="MRAID versions supported for rich media mobile creatives"), ] = None - simid: Annotated[bool | None, Field(description='SIMID support for interactive video ads')] = ( + simid: Annotated[bool | None, Field(description="SIMID support for interactive video ads")] = ( None ) vast_versions: Annotated[ - list[VastVersion] | None, Field(description='VAST versions supported for video creatives') + list[VastVersion] | None, Field(description="VAST versions supported for video creatives") ] = None - vpaid: Annotated[bool | None, Field(description='VPAID support for interactive video ads')] = ( + vpaid: Annotated[bool | None, Field(description="VPAID support for interactive video ads")] = ( None ) class AgeRestriction(AdCPBaseModel): supported: Annotated[ - bool | None, Field(description='Whether seller supports age restrictions') + bool | None, Field(description="Whether seller supports age restrictions") ] = None verification_methods: Annotated[ list[age_verification_method.AgeVerificationMethod] | None, - Field(description='Age verification methods this seller supports'), + Field(description="Age verification methods this seller supports"), ] = None class GeoMetros(AdCPBaseModel): eurostat_nuts2: Annotated[ - bool | None, Field(description='Supports Eurostat NUTS Level 2 regions (EU)') + bool | None, Field(description="Supports Eurostat NUTS Level 2 regions (EU)") ] = None nielsen_dma: Annotated[ bool | None, Field(description="Supports Nielsen DMA codes (US market, e.g., '501' for NYC)"), ] = None - uk_itl1: Annotated[bool | None, Field(description='Supports UK ITL Level 1 regions')] = None - uk_itl2: Annotated[bool | None, Field(description='Supports UK ITL Level 2 regions')] = None + uk_itl1: Annotated[bool | None, Field(description="Supports UK ITL Level 1 regions")] = None + uk_itl2: Annotated[bool | None, Field(description="Supports UK ITL Level 2 regions")] = None class GeoPostalAreas(AdCPBaseModel): @@ -258,24 +294,24 @@ class GeoPostalAreas(AdCPBaseModel): class Targeting(AdCPBaseModel): age_restriction: Annotated[ AgeRestriction | None, - Field(description='Age restriction capabilities for compliance (alcohol, gambling)'), + Field(description="Age restriction capabilities for compliance (alcohol, gambling)"), ] = None audience_exclude: Annotated[ bool | None, Field( - description='Whether seller supports audience_exclude in targeting overlays (requires features.audience_targeting)' + description="Whether seller supports audience_exclude in targeting overlays (requires features.audience_targeting)" ), ] = None audience_include: Annotated[ bool | None, Field( - description='Whether seller supports audience_include in targeting overlays (requires features.audience_targeting)' + description="Whether seller supports audience_include in targeting overlays (requires features.audience_targeting)" ), ] = None device_platform: Annotated[ bool | None, Field( - description='Whether seller supports device platform targeting (Sec-CH-UA-Platform values)' + description="Whether seller supports device platform targeting (Sec-CH-UA-Platform values)" ), ] = None geo_countries: Annotated[ @@ -287,13 +323,13 @@ class Targeting(AdCPBaseModel): geo_metros: Annotated[ GeoMetros | None, Field( - description='Metro area targeting support. Specifies which classification systems are supported.' + description="Metro area targeting support. Specifies which classification systems are supported." ), ] = None geo_postal_areas: Annotated[ GeoPostalAreas | None, Field( - description='Postal area targeting support. Specifies which postal code systems are supported. System names encode country and precision.' + description="Postal area targeting support. Specifies which postal code systems are supported. System names encode country and precision." ), ] = None geo_regions: Annotated[ @@ -304,7 +340,7 @@ class Targeting(AdCPBaseModel): ] = None language: Annotated[ bool | None, - Field(description='Whether seller supports language targeting (ISO 639-1 codes)'), + Field(description="Whether seller supports language targeting (ISO 639-1 codes)"), ] = None @@ -312,27 +348,27 @@ class Execution(AdCPBaseModel): axe_integrations: Annotated[ list[AnyUrl] | None, Field( - description='Agentic ad exchange (AXE) integrations supported. URLs are canonical identifiers for exchanges this seller can execute through.' + description="Agentic ad exchange (AXE) integrations supported. URLs are canonical identifiers for exchanges this seller can execute through." ), ] = None creative_specs: Annotated[ - CreativeSpecs | None, Field(description='Creative specification support') + CreativeSpecs | None, Field(description="Creative specification support") ] = None targeting: Annotated[ Targeting | None, Field( - description='Targeting capabilities. If declared true/supported, buyer can use these targeting parameters and seller MUST honor them.' + description="Targeting capabilities. If declared true/supported, buyer can use these targeting parameters and seller MUST honor them." ), ] = None class PrimaryCountry(RootModel[str]): - root: Annotated[str, Field(pattern='^[A-Z]{2}$')] + root: Annotated[str, Field(pattern="^[A-Z]{2}$")] class PublisherDomain(RootModel[str]): root: Annotated[ - str, Field(pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$') + str, Field(pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$") ] @@ -340,23 +376,23 @@ class Portfolio(AdCPBaseModel): advertising_policies: Annotated[ str | None, Field( - description='Advertising content policies, restrictions, and guidelines', + description="Advertising content policies, restrictions, and guidelines", max_length=10000, ), ] = None description: Annotated[ str | None, Field( - description='Markdown-formatted description of the inventory portfolio', max_length=5000 + description="Markdown-formatted description of the inventory portfolio", max_length=5000 ), ] = None primary_channels: Annotated[ list[channels.MediaChannel] | None, - Field(description='Primary advertising channels in this portfolio'), + Field(description="Primary advertising channels in this portfolio"), ] = None primary_countries: Annotated[ list[PrimaryCountry] | None, - Field(description='Primary countries (ISO 3166-1 alpha-2) where inventory is concentrated'), + Field(description="Primary countries (ISO 3166-1 alpha-2) where inventory is concentrated"), ] = None publisher_domains: Annotated[ list[PublisherDomain], @@ -375,7 +411,7 @@ class Features(AdCPBaseModel): catalog_signals: Annotated[ bool | None, Field( - description='Supports signals from data provider catalogs with structured signal_id references' + description="Supports signals from data provider catalogs with structured signal_id references" ), ] = None @@ -389,72 +425,72 @@ class Signals(AdCPBaseModel): ), ] = None features: Annotated[ - Features | None, Field(description='Optional signals features supported') + Features | None, Field(description="Optional signals features supported") ] = None class Preferred(Enum): - mcp = 'mcp' - a2a = 'a2a' + mcp = "mcp" + a2a = "a2a" class Transport(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - type: Annotated[Preferred, Field(description='Protocol transport type')] - url: Annotated[AnyUrl, Field(description='Agent endpoint URL for this transport')] + type: Annotated[Preferred, Field(description="Protocol transport type")] + url: Annotated[AnyUrl, Field(description="Agent endpoint URL for this transport")] class Endpoint(AdCPBaseModel): preferred: Annotated[ - Preferred | None, Field(description='Preferred transport when host supports multiple') + Preferred | None, Field(description="Preferred transport when host supports multiple") ] = None transports: Annotated[ list[Transport], Field( - description='Available protocol transports. Hosts select based on their capabilities.', + description="Available protocol transports. Hosts select based on their capabilities.", min_length=1, ), ] class SupportedProtocol(Enum): - media_buy = 'media_buy' - signals = 'signals' - governance = 'governance' - sponsored_intelligence = 'sponsored_intelligence' - creative = 'creative' + media_buy = "media_buy" + signals = "signals" + governance = "governance" + sponsored_intelligence = "sponsored_intelligence" + creative = "creative" class AudienceTargeting(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) matching_latency_hours: Annotated[ MatchingLatencyHours | None, Field( - description='Expected matching latency range in hours after upload. Use to calibrate polling cadence and set appropriate expectations before configuring push_notification_config.' + description="Expected matching latency range in hours after upload. Use to calibrate polling cadence and set appropriate expectations before configuring push_notification_config." ), ] = None minimum_audience_size: Annotated[ int, Field( - description='Minimum matched audience size required for targeting. Audiences below this threshold will have status: too_small. Varies by platform (100–1000 is typical).', + description="Minimum matched audience size required for targeting. Audiences below this threshold will have status: too_small. Varies by platform (100–1000 is typical).", ge=1, ), ] supported_identifier_types: Annotated[ list[SupportedIdentifierType], Field( - description='Hashed PII types accepted for audience matching. Buyers should only send identifiers the seller supports.', + description="Hashed PII types accepted for audience matching. Buyers should only send identifiers the seller supports.", min_length=1, ), ] supported_uid_types: Annotated[ list[uid_type.UidType] | None, Field( - description='Universal ID types accepted for audience matching (MAIDs, RampID, UID2, etc.). MAID support varies significantly by platform — check this field before sending uids with type: maid.', + description="Universal ID types accepted for audience matching (MAIDs, RampID, UID2, etc.). MAID support varies significantly by platform — check this field before sending uids with type: maid.", min_length=1, ), ] = None @@ -462,35 +498,35 @@ class AudienceTargeting(AdCPBaseModel): class ConversionTracking(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) attribution_windows: Annotated[ list[AttributionWindow] | None, Field( - description='Attribution windows available from this seller. Single-element arrays indicate fixed windows; multi-element arrays indicate configurable options the buyer can choose from via optimization_goal.attribution_window on packages.' + description="Attribution windows available from this seller. Single-element arrays indicate fixed windows; multi-element arrays indicate configurable options the buyer can choose from via optimization_goal.attribution_window on packages." ), ] = None supported_action_sources: Annotated[ list[action_source.ActionSource] | None, - Field(description='Action sources this seller accepts events from', min_length=1), + Field(description="Action sources this seller accepts events from", min_length=1), ] = None supported_event_types: Annotated[ list[event_type_1.EventType] | None, Field( - description='Event types this seller can track and attribute. If omitted, all standard event types are supported.', + description="Event types this seller can track and attribute. If omitted, all standard event types are supported.", min_length=1, ), ] = None supported_hashed_identifiers: Annotated[ list[SupportedIdentifierType] | None, Field( - description='Hashed PII types accepted for user matching. Buyers must hash before sending (SHA-256, normalized).', + description="Hashed PII types accepted for user matching. Buyers must hash before sending (SHA-256, normalized).", min_length=1, ), ] = None supported_uid_types: Annotated[ list[uid_type.UidType] | None, - Field(description='Universal ID types accepted for user matching', min_length=1), + Field(description="Universal ID types accepted for user matching", min_length=1), ] = None @@ -498,17 +534,17 @@ class MediaBuy(AdCPBaseModel): audience_targeting: Annotated[ AudienceTargeting | None, Field( - description='Audience targeting capabilities. Only present when features.audience_targeting is true.' + description="Audience targeting capabilities. Only present when features.audience_targeting is true." ), ] = None conversion_tracking: Annotated[ ConversionTracking | None, Field( - description='Seller-level conversion tracking capabilities. Only present when features.conversion_tracking is true.' + description="Seller-level conversion tracking capabilities. Only present when features.conversion_tracking is true." ), ] = None execution: Annotated[ - Execution | None, Field(description='Technical execution capabilities for media buying') + Execution | None, Field(description="Technical execution capabilities for media buying") ] = None features: media_buy_features.MediaBuyFeatures | None = None portfolio: Annotated[ @@ -519,74 +555,74 @@ class MediaBuy(AdCPBaseModel): class SponsoredIntelligence(AdCPBaseModel): brand_url: Annotated[ - AnyUrl | None, Field(description='URL to brand.json with colors, fonts, logos, tone') + AnyUrl | None, Field(description="URL to brand.json with colors, fonts, logos, tone") ] = None capabilities: Annotated[ si_capabilities.SiCapabilities, - Field(description='Modalities, components, and commerce capabilities'), + Field(description="Modalities, components, and commerce capabilities"), ] - endpoint: Annotated[Endpoint, Field(description='SI agent endpoint configuration')] + endpoint: Annotated[Endpoint, Field(description="SI agent endpoint configuration")] class GetAdcpCapabilitiesResponse(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) account: Annotated[ Account | None, Field( - description='Account management capabilities. Describes how accounts are established, what billing models are supported, and whether an account is required before browsing products.' + description="Account management capabilities. Describes how accounts are established, what billing models are supported, and whether an account is required before browsing products." ), ] = None - adcp: Annotated[Adcp, Field(description='Core AdCP protocol information')] + adcp: Annotated[Adcp, Field(description="Core AdCP protocol information")] context: context_1.ContextObject | None = None creative: Annotated[ Creative | None, Field( - description='Creative protocol capabilities. Only present if creative is in supported_protocols.' + description="Creative protocol capabilities. Only present if creative is in supported_protocols." ), ] = None errors: Annotated[ - list[error.Error] | None, Field(description='Task-specific errors and warnings') + list[error.Error] | None, Field(description="Task-specific errors and warnings") ] = None ext: ext_1.ExtensionObject | None = None extensions_supported: Annotated[ list[ExtensionsSupportedItem] | None, Field( - description='Extension namespaces this agent supports. Buyers can expect meaningful data in ext.{namespace} fields on responses from this agent. Extension schemas are published in the AdCP extension registry.' + description="Extension namespaces this agent supports. Buyers can expect meaningful data in ext.{namespace} fields on responses from this agent. Extension schemas are published in the AdCP extension registry." ), ] = None governance: Annotated[ Governance | None, Field( - description='Governance protocol capabilities. Only present if governance is in supported_protocols. Governance agents provide property data like compliance scores, brand safety ratings, and sustainability metrics.' + description="Governance protocol capabilities. Only present if governance is in supported_protocols. Governance agents provide property and creative data like compliance scores, brand safety ratings, sustainability metrics, and creative quality assessments." ), ] = None last_updated: Annotated[ AwareDatetime | None, Field( - description='ISO 8601 timestamp of when capabilities were last updated. Buyers can use this for cache invalidation.' + description="ISO 8601 timestamp of when capabilities were last updated. Buyers can use this for cache invalidation." ), ] = None media_buy: Annotated[ MediaBuy | None, Field( - description='Media-buy protocol capabilities. Only present if media_buy is in supported_protocols.' + description="Media-buy protocol capabilities. Only present if media_buy is in supported_protocols." ), ] = None signals: Annotated[ Signals | None, Field( - description='Signals protocol capabilities. Only present if signals is in supported_protocols.' + description="Signals protocol capabilities. Only present if signals is in supported_protocols." ), ] = None sponsored_intelligence: Annotated[ SponsoredIntelligence | None, Field( - description='Sponsored Intelligence protocol capabilities. Only present if sponsored_intelligence is in supported_protocols. SI agents handle conversational brand experiences.' + description="Sponsored Intelligence protocol capabilities. Only present if sponsored_intelligence is in supported_protocols. SI agents handle conversational brand experiences." ), ] = None supported_protocols: Annotated[ list[SupportedProtocol], - Field(description='Which AdCP domain protocols this seller supports', min_length=1), + Field(description="Which AdCP domain protocols this seller supports", min_length=1), ] diff --git a/src/adcp/types/generated_poc/signals/activate_signal_request.py b/src/adcp/types/generated_poc/signals/activate_signal_request.py index 5c2ce26c..3f3252e5 100644 --- a/src/adcp/types/generated_poc/signals/activate_signal_request.py +++ b/src/adcp/types/generated_poc/signals/activate_signal_request.py @@ -16,17 +16,17 @@ class ActivateSignalRequest(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None deployments: Annotated[ list[destination.Destination], Field( - description='Target deployment(s) for activation. If the authenticated caller matches one of these deployment targets, activation keys will be included in the response.', + description="Target deployment(s) for activation. If the authenticated caller matches one of these deployment targets, activation keys will be included in the response.", min_length=1, ), ] ext: ext_1.ExtensionObject | None = None signal_agent_segment_id: Annotated[ - str, Field(description='The universal identifier for the signal to activate') + str, Field(description="The universal identifier for the signal to activate") ] diff --git a/src/adcp/types/generated_poc/signals/activate_signal_response.py b/src/adcp/types/generated_poc/signals/activate_signal_response.py index 6bf27e6f..606dd63f 100644 --- a/src/adcp/types/generated_poc/signals/activate_signal_response.py +++ b/src/adcp/types/generated_poc/signals/activate_signal_response.py @@ -16,29 +16,29 @@ class ActivateSignalResponse1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None deployments: Annotated[ list[deployment.Deployment], - Field(description='Array of deployment results for each deployment target'), + Field(description="Array of deployment results for each deployment target"), ] ext: ext_1.ExtensionObject | None = None sandbox: Annotated[ bool | None, - Field(description='When true, this response contains simulated data from sandbox mode.'), + Field(description="When true, this response contains simulated data from sandbox mode."), ] = None class ActivateSignalResponse2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error], Field( - description='Array of errors explaining why activation failed (e.g., platform connectivity issues, signal definition problems, authentication failures)', + description="Array of errors explaining why activation failed (e.g., platform connectivity issues, signal definition problems, authentication failures)", min_length=1, ), ] @@ -49,7 +49,7 @@ class ActivateSignalResponse(RootModel[ActivateSignalResponse1 | ActivateSignalR root: Annotated[ ActivateSignalResponse1 | ActivateSignalResponse2, Field( - description='Response payload for activate_signal task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - the signal is either fully activated or not activated at all.', - title='Activate Signal Response', + description="Response payload for activate_signal task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - the signal is either fully activated or not activated at all.", + title="Activate Signal Response", ), ] diff --git a/src/adcp/types/generated_poc/signals/get_signals_request.py b/src/adcp/types/generated_poc/signals/get_signals_request.py index 32e8e122..5650e109 100644 --- a/src/adcp/types/generated_poc/signals/get_signals_request.py +++ b/src/adcp/types/generated_poc/signals/get_signals_request.py @@ -16,21 +16,21 @@ class Country(RootModel[str]): - root: Annotated[str, Field(pattern='^[A-Z]{2}$')] + root: Annotated[str, Field(pattern="^[A-Z]{2}$")] class DeliverTo(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) countries: Annotated[ list[Country], - Field(description='Countries where signals will be used (ISO codes)', min_length=1), + Field(description="Countries where signals will be used (ISO codes)", min_length=1), ] deployments: Annotated[ list[destination.Destination], Field( - description='List of deployment targets (DSPs, sales agents, etc.). If the authenticated caller matches one of these deployment targets, activation keys will be included in the response.', + description="List of deployment targets (DSPs, sales agents, etc.). If the authenticated caller matches one of these deployment targets, activation keys will be included in the response.", min_length=1, ), ] @@ -42,16 +42,16 @@ class DeliverTo1(DeliverTo): class GetSignalsRequest1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None deliver_to: Annotated[ - DeliverTo, Field(description='Deployment targets where signals need to be activated') + DeliverTo, Field(description="Deployment targets where signals need to be activated") ] ext: ext_1.ExtensionObject | None = None filters: signal_filters.SignalFilters | None = None max_results: Annotated[ - int | None, Field(description='Maximum number of results to return', ge=1) + int | None, Field(description="Maximum number of results to return", ge=1) ] = None pagination: pagination_request.PaginationRequest | None = None signal_ids: Annotated[ @@ -64,23 +64,23 @@ class GetSignalsRequest1(AdCPBaseModel): signal_spec: Annotated[ str, Field( - description='Natural language description of the desired signals. When used alone, enables semantic discovery. When combined with signal_ids, provides context for the agent but signal_ids matches are returned first.' + description="Natural language description of the desired signals. When used alone, enables semantic discovery. When combined with signal_ids, provides context for the agent but signal_ids matches are returned first." ), ] class GetSignalsRequest2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None deliver_to: Annotated[ - DeliverTo1, Field(description='Deployment targets where signals need to be activated') + DeliverTo1, Field(description="Deployment targets where signals need to be activated") ] ext: ext_1.ExtensionObject | None = None filters: signal_filters.SignalFilters | None = None max_results: Annotated[ - int | None, Field(description='Maximum number of results to return', ge=1) + int | None, Field(description="Maximum number of results to return", ge=1) ] = None pagination: pagination_request.PaginationRequest | None = None signal_ids: Annotated[ @@ -93,7 +93,7 @@ class GetSignalsRequest2(AdCPBaseModel): signal_spec: Annotated[ str | None, Field( - description='Natural language description of the desired signals. When used alone, enables semantic discovery. When combined with signal_ids, provides context for the agent but signal_ids matches are returned first.' + description="Natural language description of the desired signals. When used alone, enables semantic discovery. When combined with signal_ids, provides context for the agent but signal_ids matches are returned first." ), ] = None @@ -102,7 +102,7 @@ class GetSignalsRequest(RootModel[GetSignalsRequest1 | GetSignalsRequest2]): root: Annotated[ GetSignalsRequest1 | GetSignalsRequest2, Field( - description='Request parameters for discovering signals. Use signal_spec for natural language discovery, signal_ids for exact lookups, or both (signal_ids take precedence for exact matches, signal_spec provides additional discovery context).', - title='Get Signals Request', + description="Request parameters for discovering signals. Use signal_spec for natural language discovery, signal_ids for exact lookups, or both (signal_ids take precedence for exact matches, signal_spec provides additional discovery context).", + title="Get Signals Request", ), ] diff --git a/src/adcp/types/generated_poc/signals/get_signals_response.py b/src/adcp/types/generated_poc/signals/get_signals_response.py index 5d371066..2278bdcc 100644 --- a/src/adcp/types/generated_poc/signals/get_signals_response.py +++ b/src/adcp/types/generated_poc/signals/get_signals_response.py @@ -19,26 +19,26 @@ class Pricing(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - cpm: Annotated[float, Field(description='Cost per thousand impressions', ge=0.0)] - currency: Annotated[str, Field(description='Currency code', pattern='^[A-Z]{3}$')] + cpm: Annotated[float, Field(description="Cost per thousand impressions", ge=0.0)] + currency: Annotated[str, Field(description="Currency code", pattern="^[A-Z]{3}$")] class Signal(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) coverage_percentage: Annotated[ - float, Field(description='Percentage of audience coverage', ge=0.0, le=100.0) + float, Field(description="Percentage of audience coverage", ge=0.0, le=100.0) ] - data_provider: Annotated[str, Field(description='Human-readable name of the data provider')] + data_provider: Annotated[str, Field(description="Human-readable name of the data provider")] deployments: Annotated[ - list[deployment.Deployment], Field(description='Array of deployment targets') + list[deployment.Deployment], Field(description="Array of deployment targets") ] - description: Annotated[str, Field(description='Detailed signal description')] - name: Annotated[str, Field(description='Human-readable signal name')] - pricing: Annotated[Pricing, Field(description='Pricing information')] + description: Annotated[str, Field(description="Detailed signal description")] + name: Annotated[str, Field(description="Human-readable signal name")] + pricing: Annotated[Pricing, Field(description="Pricing information")] signal_agent_segment_id: Annotated[ str, Field( @@ -53,7 +53,7 @@ class Signal(AdCPBaseModel): ] = None signal_type: Annotated[ signal_catalog_type.SignalCatalogType, - Field(description='Catalog type of signal (marketplace, custom, owned)'), + Field(description="Catalog type of signal (marketplace, custom, owned)"), ] value_type: Annotated[ signal_value_type.SignalValueType | None, @@ -63,19 +63,19 @@ class Signal(AdCPBaseModel): class GetSignalsResponse(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error] | None, Field( - description='Task-specific errors and warnings (e.g., signal discovery or pricing issues)' + description="Task-specific errors and warnings (e.g., signal discovery or pricing issues)" ), ] = None ext: ext_1.ExtensionObject | None = None pagination: pagination_response.PaginationResponse | None = None sandbox: Annotated[ bool | None, - Field(description='When true, this response contains simulated data from sandbox mode.'), + Field(description="When true, this response contains simulated data from sandbox mode."), ] = None - signals: Annotated[list[Signal], Field(description='Array of matching signals')] + signals: Annotated[list[Signal], Field(description="Array of matching signals")] diff --git a/src/adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py b/src/adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py index 23589b5d..8898375f 100644 --- a/src/adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py +++ b/src/adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py @@ -13,105 +13,105 @@ class A2ui(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) catalogs: Annotated[ list[str] | None, Field(description="Supported A2UI component catalogs (e.g., 'si-standard', 'standard')"), ] = None - supported: Annotated[bool | None, Field(description='Supports A2UI surface rendering')] = False + supported: Annotated[bool | None, Field(description="Supports A2UI surface rendering")] = False class Commerce(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) acp_checkout: Annotated[ - bool | None, Field(description='Supports ACP (Agentic Commerce Protocol) checkout handoff') + bool | None, Field(description="Supports ACP (Agentic Commerce Protocol) checkout handoff") ] = None class StandardEnum(Enum): - text = 'text' - link = 'link' - image = 'image' - product_card = 'product_card' - carousel = 'carousel' - action_button = 'action_button' + text = "text" + link = "link" + image = "image" + product_card = "product_card" + carousel = "carousel" + action_button = "action_button" class Components(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) extensions: Annotated[ dict[str, Any] | None, - Field(description='Platform-specific extensions (chatgpt_apps_sdk, maps, forms, etc.)'), + Field(description="Platform-specific extensions (chatgpt_apps_sdk, maps, forms, etc.)"), ] = None standard: Annotated[ list[StandardEnum] | None, - Field(description='Standard components that all SI hosts must render'), + Field(description="Standard components that all SI hosts must render"), ] = None class Avatar(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - avatar_id: Annotated[str | None, Field(description='Brand avatar identifier')] = None + avatar_id: Annotated[str | None, Field(description="Brand avatar identifier")] = None provider: Annotated[ - str | None, Field(description='Avatar provider (d-id, heygen, synthesia, etc.)') + str | None, Field(description="Avatar provider (d-id, heygen, synthesia, etc.)") ] = None class Video(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) formats: Annotated[ - list[str] | None, Field(description='Supported video formats (mp4, webm, etc.)') + list[str] | None, Field(description="Supported video formats (mp4, webm, etc.)") ] = None - max_duration_seconds: Annotated[int | None, Field(description='Maximum video duration')] = None + max_duration_seconds: Annotated[int | None, Field(description="Maximum video duration")] = None class Voice(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) provider: Annotated[ - str | None, Field(description='TTS provider (elevenlabs, openai, etc.)') + str | None, Field(description="TTS provider (elevenlabs, openai, etc.)") ] = None - voice_id: Annotated[str | None, Field(description='Brand voice identifier')] = None + voice_id: Annotated[str | None, Field(description="Brand voice identifier")] = None class Modalities(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) avatar: Annotated[ - bool | Avatar | None, Field(description='Animated video presence with brand avatar') + bool | Avatar | None, Field(description="Animated video presence with brand avatar") ] = None conversational: Annotated[ - bool | None, Field(description='Pure text exchange - the baseline modality') + bool | None, Field(description="Pure text exchange - the baseline modality") ] = True - video: Annotated[bool | Video | None, Field(description='Brand video content playback')] = None + video: Annotated[bool | Video | None, Field(description="Brand video content playback")] = None voice: Annotated[ - bool | Voice | None, Field(description='Audio-based interaction using brand voice') + bool | Voice | None, Field(description="Audio-based interaction using brand voice") ] = None class SiCapabilities(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - a2ui: Annotated[A2ui | None, Field(description='A2UI (Agent-to-UI) capabilities')] = None - commerce: Annotated[Commerce | None, Field(description='Commerce capabilities')] = None - components: Annotated[Components | None, Field(description='Visual components supported')] = ( + a2ui: Annotated[A2ui | None, Field(description="A2UI (Agent-to-UI) capabilities")] = None + commerce: Annotated[Commerce | None, Field(description="Commerce capabilities")] = None + components: Annotated[Components | None, Field(description="Visual components supported")] = ( None ) mcp_apps: Annotated[ - bool | None, Field(description='Supports MCP Apps for rendering A2UI surfaces in iframes') + bool | None, Field(description="Supports MCP Apps for rendering A2UI surfaces in iframes") ] = False modalities: Annotated[ - Modalities | None, Field(description='Interaction modalities supported') + Modalities | None, Field(description="Interaction modalities supported") ] = None diff --git a/src/adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py b/src/adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py index 4f064e5f..ea551a3a 100644 --- a/src/adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py +++ b/src/adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py @@ -14,7 +14,7 @@ class SiGetOfferingRequest(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: Annotated[ str | None, @@ -24,11 +24,11 @@ class SiGetOfferingRequest(AdCPBaseModel): ] = None ext: ext_1.ExtensionObject | None = None include_products: Annotated[ - bool | None, Field(description='Whether to include matching products in the response') + bool | None, Field(description="Whether to include matching products in the response") ] = False offering_id: Annotated[ - str, Field(description='Offering identifier from the catalog to get details for') + str, Field(description="Offering identifier from the catalog to get details for") ] product_limit: Annotated[ - int | None, Field(description='Maximum number of matching products to return', ge=1, le=50) + int | None, Field(description="Maximum number of matching products to return", ge=1, le=50) ] = 5 diff --git a/src/adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py b/src/adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py index b9305bbc..f423142a 100644 --- a/src/adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py +++ b/src/adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py @@ -15,7 +15,7 @@ class MatchingProduct(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) availability_summary: Annotated[ str | None, @@ -23,55 +23,55 @@ class MatchingProduct(AdCPBaseModel): description="Brief availability info (e.g., 'In stock', 'Size 14 available', '3 left')" ), ] = None - image_url: Annotated[AnyUrl | None, Field(description='Product image')] = None - name: Annotated[str, Field(description='Product name')] - original_price: Annotated[str | None, Field(description='Original price if on sale')] = None + image_url: Annotated[AnyUrl | None, Field(description="Product image")] = None + name: Annotated[str, Field(description="Product name")] + original_price: Annotated[str | None, Field(description="Original price if on sale")] = None price: Annotated[str | None, Field(description="Display price (e.g., '$129', '$89.99')")] = None - product_id: Annotated[str, Field(description='Product identifier')] - url: Annotated[AnyUrl | None, Field(description='Product detail page URL')] = None + product_id: Annotated[str, Field(description="Product identifier")] + url: Annotated[AnyUrl | None, Field(description="Product detail page URL")] = None class Offering(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - expires_at: Annotated[AwareDatetime | None, Field(description='When this offering expires')] = ( + expires_at: Annotated[AwareDatetime | None, Field(description="When this offering expires")] = ( None ) - image_url: Annotated[AnyUrl | None, Field(description='Hero image for the offering')] = None - landing_url: Annotated[AnyUrl | None, Field(description='Landing page URL')] = None - offering_id: Annotated[str | None, Field(description='Offering identifier')] = None + image_url: Annotated[AnyUrl | None, Field(description="Hero image for the offering")] = None + landing_url: Annotated[AnyUrl | None, Field(description="Landing page URL")] = None + offering_id: Annotated[str | None, Field(description="Offering identifier")] = None price_hint: Annotated[ str | None, Field(description="Price indication (e.g., 'from $199', '50% off')") ] = None - summary: Annotated[str | None, Field(description='Brief summary of the offering')] = None - tagline: Annotated[str | None, Field(description='Short promotional tagline')] = None - title: Annotated[str | None, Field(description='Offering title')] = None + summary: Annotated[str | None, Field(description="Brief summary of the offering")] = None + tagline: Annotated[str | None, Field(description="Short promotional tagline")] = None + title: Annotated[str | None, Field(description="Offering title")] = None class SiGetOfferingResponse(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) alternative_offering_ids: Annotated[ list[str] | None, - Field(description='Alternative offerings to consider if this one is unavailable'), + Field(description="Alternative offerings to consider if this one is unavailable"), ] = None - available: Annotated[bool, Field(description='Whether the offering is currently available')] + available: Annotated[bool, Field(description="Whether the offering is currently available")] checked_at: Annotated[ - AwareDatetime | None, Field(description='When this offering information was retrieved') + AwareDatetime | None, Field(description="When this offering information was retrieved") ] = None errors: Annotated[ - list[error.Error] | None, Field(description='Errors during offering lookup') + list[error.Error] | None, Field(description="Errors during offering lookup") ] = None ext: ext_1.ExtensionObject | None = None matching_products: Annotated[ list[MatchingProduct] | None, Field( - description='Products matching the request context. Only included if include_products was true.' + description="Products matching the request context. Only included if include_products was true." ), ] = None - offering: Annotated[Offering | None, Field(description='Offering details')] = None + offering: Annotated[Offering | None, Field(description="Offering details")] = None offering_token: Annotated[ str | None, Field( @@ -81,14 +81,14 @@ class SiGetOfferingResponse(AdCPBaseModel): total_matching: Annotated[ int | None, Field( - description='Total number of products matching the context (may be more than returned in matching_products)', + description="Total number of products matching the context (may be more than returned in matching_products)", ge=0, ), ] = None ttl_seconds: Annotated[ int | None, Field( - description='How long this offering information is valid (seconds). Host should re-fetch after TTL expires.', + description="How long this offering information is valid (seconds). Host should re-fetch after TTL expires.", ge=0, ), ] = None diff --git a/src/adcp/types/generated_poc/sponsored_intelligence/si_identity.py b/src/adcp/types/generated_poc/sponsored_intelligence/si_identity.py index 566cd160..cc954625 100644 --- a/src/adcp/types/generated_poc/sponsored_intelligence/si_identity.py +++ b/src/adcp/types/generated_poc/sponsored_intelligence/si_identity.py @@ -12,28 +12,28 @@ class ConsentScopeEnum(Enum): - name = 'name' - email = 'email' - shipping_address = 'shipping_address' - phone = 'phone' - locale = 'locale' + name = "name" + email = "email" + shipping_address = "shipping_address" + phone = "phone" + locale = "locale" class PrivacyPolicyAcknowledged(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) brand_policy_url: Annotated[ AnyUrl | None, Field(description="URL to brand's privacy policy") ] = None brand_policy_version: Annotated[ - str | None, Field(description='Version of policy acknowledged') + str | None, Field(description="Version of policy acknowledged") ] = None class ShippingAddress(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) city: str | None = None country: str | None = None @@ -44,7 +44,7 @@ class ShippingAddress(AdCPBaseModel): class User(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) email: Annotated[EmailStr | None, Field(description="User's email address")] = None locale: Annotated[str | None, Field(description="User's locale (e.g., en-US)")] = None @@ -57,22 +57,22 @@ class User(AdCPBaseModel): class SiIdentity(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) anonymous_session_id: Annotated[ str | None, - Field(description='Session ID for anonymous users (when consent_granted is false)'), + Field(description="Session ID for anonymous users (when consent_granted is false)"), ] = None - consent_granted: Annotated[bool, Field(description='Whether user consented to share identity')] + consent_granted: Annotated[bool, Field(description="Whether user consented to share identity")] consent_scope: Annotated[ - list[ConsentScopeEnum] | None, Field(description='What data was consented to share') + list[ConsentScopeEnum] | None, Field(description="What data was consented to share") ] = None consent_timestamp: Annotated[ - AwareDatetime | None, Field(description='When consent was granted (ISO 8601)') + AwareDatetime | None, Field(description="When consent was granted (ISO 8601)") ] = None privacy_policy_acknowledged: Annotated[ - PrivacyPolicyAcknowledged | None, Field(description='Brand privacy policy acknowledgment') + PrivacyPolicyAcknowledged | None, Field(description="Brand privacy policy acknowledgment") ] = None user: Annotated[ - User | None, Field(description='User data (only present if consent_granted is true)') + User | None, Field(description="User data (only present if consent_granted is true)") ] = None diff --git a/src/adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py b/src/adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py index 88582718..4eb75a31 100644 --- a/src/adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py +++ b/src/adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py @@ -15,18 +15,18 @@ class SiInitiateSessionRequest(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context: Annotated[ - str, Field(description='Conversation handoff from the host describing what the user needs') + str, Field(description="Conversation handoff from the host describing what the user needs") ] ext: ext_1.ExtensionObject | None = None identity: si_identity.SiIdentity media_buy_id: Annotated[ - str | None, Field(description='AdCP media buy ID if session was triggered by advertising') + str | None, Field(description="AdCP media buy ID if session was triggered by advertising") ] = None offering_id: Annotated[ - str | None, Field(description='Brand-specific offering identifier to apply') + str | None, Field(description="Brand-specific offering identifier to apply") ] = None offering_token: Annotated[ str | None, @@ -42,5 +42,5 @@ class SiInitiateSessionRequest(AdCPBaseModel): ] = None supported_capabilities: Annotated[ si_capabilities.SiCapabilities | None, - Field(description='What capabilities the host supports'), + Field(description="What capabilities the host supports"), ] = None diff --git a/src/adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py b/src/adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py index fe65bd7a..6ef16fc3 100644 --- a/src/adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py +++ b/src/adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py @@ -16,29 +16,29 @@ class Response(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - message: Annotated[str | None, Field(description='Conversational message from brand agent')] = ( + message: Annotated[str | None, Field(description="Conversational message from brand agent")] = ( None ) ui_elements: Annotated[ - list[si_ui_element.SiUiElement] | None, Field(description='Visual components to render') + list[si_ui_element.SiUiElement] | None, Field(description="Visual components to render") ] = None class SiInitiateSessionResponse(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) errors: Annotated[ - list[error.Error] | None, Field(description='Errors during session initiation') + list[error.Error] | None, Field(description="Errors during session initiation") ] = None ext: ext_1.ExtensionObject | None = None negotiated_capabilities: Annotated[ si_capabilities.SiCapabilities | None, - Field(description='Intersection of brand and host capabilities for this session'), + Field(description="Intersection of brand and host capabilities for this session"), ] = None response: Annotated[Response | None, Field(description="Brand agent's initial response")] = None session_id: Annotated[ - str, Field(description='Unique session identifier for subsequent messages') + str, Field(description="Unique session identifier for subsequent messages") ] diff --git a/src/adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py b/src/adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py index a48be9f3..50d9ea46 100644 --- a/src/adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py +++ b/src/adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py @@ -14,45 +14,45 @@ class ActionResponse(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - action: Annotated[str | None, Field(description='The action that was triggered')] = None + action: Annotated[str | None, Field(description="The action that was triggered")] = None payload: Annotated[ - dict[str, Any] | None, Field(description='Action-specific response data') + dict[str, Any] | None, Field(description="Action-specific response data") ] = None class SiSendMessageRequest1(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) action_response: Annotated[ ActionResponse | None, - Field(description='Response to a previous action_button (e.g., user clicked checkout)'), + Field(description="Response to a previous action_button (e.g., user clicked checkout)"), ] = None ext: ext_1.ExtensionObject | None = None message: Annotated[str, Field(description="User's message to the brand agent")] - session_id: Annotated[str, Field(description='Active session identifier')] + session_id: Annotated[str, Field(description="Active session identifier")] class SiSendMessageRequest2(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) action_response: Annotated[ ActionResponse, - Field(description='Response to a previous action_button (e.g., user clicked checkout)'), + Field(description="Response to a previous action_button (e.g., user clicked checkout)"), ] ext: ext_1.ExtensionObject | None = None message: Annotated[str | None, Field(description="User's message to the brand agent")] = None - session_id: Annotated[str, Field(description='Active session identifier')] + session_id: Annotated[str, Field(description="Active session identifier")] class SiSendMessageRequest(RootModel[SiSendMessageRequest1 | SiSendMessageRequest2]): root: Annotated[ SiSendMessageRequest1 | SiSendMessageRequest2, Field( - description='Send a message to the brand agent within an active session', - title='SI Send Message Request', + description="Send a message to the brand agent within an active session", + title="SI Send Message Request", ), ] diff --git a/src/adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py b/src/adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py index 12eb1b11..0dc20c98 100644 --- a/src/adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py +++ b/src/adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py @@ -18,13 +18,13 @@ class ContextForCheckout(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) applied_offers: Annotated[ - list[str] | None, Field(description='Offer IDs that were applied during the conversation') + list[str] | None, Field(description="Offer IDs that were applied during the conversation") ] = None conversation_summary: Annotated[ - str | None, Field(description='Summary of the conversation leading to purchase') + str | None, Field(description="Summary of the conversation leading to purchase") ] = None @@ -35,81 +35,81 @@ class Price(AdCPBaseModel): class Intent(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) action: Annotated[str | None, Field(description="The commerce action (e.g., 'purchase')")] = ( None ) - price: Annotated[Price | None, Field(description='Price information')] = None - product: Annotated[dict[str, Any] | None, Field(description='Product details for checkout')] = ( + price: Annotated[Price | None, Field(description="Price information")] = None + product: Annotated[dict[str, Any] | None, Field(description="Product details for checkout")] = ( None ) class Type(Enum): - transaction = 'transaction' - complete = 'complete' + transaction = "transaction" + complete = "complete" class Handoff(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) context_for_checkout: Annotated[ - ContextForCheckout | None, Field(description='Context to pass to ACP for seamless checkout') + ContextForCheckout | None, Field(description="Context to pass to ACP for seamless checkout") ] = None intent: Annotated[ Intent | None, - Field(description='For transaction handoffs: what the user wants to purchase'), + Field(description="For transaction handoffs: what the user wants to purchase"), ] = None type: Annotated[ Type | None, Field( - description='Type of handoff: transaction (ready for ACP checkout) or complete (conversation done)' + description="Type of handoff: transaction (ready for ACP checkout) or complete (conversation done)" ), ] = None class SessionStatus(Enum): - active = 'active' - pending_handoff = 'pending_handoff' - complete = 'complete' + active = "active" + pending_handoff = "pending_handoff" + complete = "complete" class Response(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - message: Annotated[str | None, Field(description='Conversational message from brand agent')] = ( + message: Annotated[str | None, Field(description="Conversational message from brand agent")] = ( None ) surface: Annotated[ - surface_1.A2UiSurface | None, Field(description='A2UI surface with interactive components') + surface_1.A2UiSurface | None, Field(description="A2UI surface with interactive components") ] = None ui_elements: Annotated[ list[si_ui_element.SiUiElement] | None, Field( deprecated=True, - description='Visual components to render (DEPRECATED: use surface instead)', + description="Visual components to render (DEPRECATED: use surface instead)", ), ] = None class SiSendMessageResponse(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) errors: list[error.Error] | None = None ext: ext_1.ExtensionObject | None = None handoff: Annotated[ - Handoff | None, Field(description='Handoff request when session_status is pending_handoff') + Handoff | None, Field(description="Handoff request when session_status is pending_handoff") ] = None mcp_resource_uri: Annotated[ str | None, Field( - description='MCP resource URI for hosts with MCP Apps support (e.g., ui://si/session-abc123)' + description="MCP resource URI for hosts with MCP Apps support (e.g., ui://si/session-abc123)" ), ] = None response: Annotated[Response | None, Field(description="Brand agent's response")] = None - session_id: Annotated[str, Field(description='Session identifier')] - session_status: Annotated[SessionStatus, Field(description='Current session status')] + session_id: Annotated[str, Field(description="Session identifier")] + session_status: Annotated[SessionStatus, Field(description="Current session status")] diff --git a/src/adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py b/src/adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py index cc1022bd..6f34cbce 100644 --- a/src/adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py +++ b/src/adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py @@ -14,47 +14,47 @@ class Reason(Enum): - handoff_transaction = 'handoff_transaction' - handoff_complete = 'handoff_complete' - user_exit = 'user_exit' - session_timeout = 'session_timeout' - host_terminated = 'host_terminated' + handoff_transaction = "handoff_transaction" + handoff_complete = "handoff_complete" + user_exit = "user_exit" + session_timeout = "session_timeout" + host_terminated = "host_terminated" class Action(Enum): - purchase = 'purchase' - subscribe = 'subscribe' + purchase = "purchase" + subscribe = "subscribe" class TransactionIntent(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) action: Action | None = None - product: Annotated[dict[str, Any] | None, Field(description='Product/service details')] = None + product: Annotated[dict[str, Any] | None, Field(description="Product/service details")] = None class TerminationContext(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) cause: Annotated[ - str | None, Field(description='For host_terminated - why host ended session') + str | None, Field(description="For host_terminated - why host ended session") ] = None - summary: Annotated[str | None, Field(description='Summary of the conversation')] = None + summary: Annotated[str | None, Field(description="Summary of the conversation")] = None transaction_intent: Annotated[ TransactionIntent | None, - Field(description='For handoff_transaction - what user wants to buy'), + Field(description="For handoff_transaction - what user wants to buy"), ] = None class SiTerminateSessionRequest(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) ext: ext_1.ExtensionObject | None = None - reason: Annotated[Reason, Field(description='Reason for termination')] - session_id: Annotated[str, Field(description='Session identifier to terminate')] + reason: Annotated[Reason, Field(description="Reason for termination")] + session_id: Annotated[str, Field(description="Session identifier to terminate")] termination_context: Annotated[ - TerminationContext | None, Field(description='Context for the termination') + TerminationContext | None, Field(description="Context for the termination") ] = None diff --git a/src/adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py b/src/adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py index 39f9d85e..ff865474 100644 --- a/src/adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py +++ b/src/adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py @@ -16,39 +16,39 @@ class AcpHandoff(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - checkout_token: Annotated[str | None, Field(description='Token for ACP checkout flow')] = None - checkout_url: Annotated[AnyUrl | None, Field(description='ACP checkout initiation URL')] = None - product: Annotated[dict[str, Any] | None, Field(description='Product details for checkout')] = ( + checkout_token: Annotated[str | None, Field(description="Token for ACP checkout flow")] = None + checkout_url: Annotated[AnyUrl | None, Field(description="ACP checkout initiation URL")] = None + product: Annotated[dict[str, Any] | None, Field(description="Product details for checkout")] = ( None ) class Action(Enum): - save_for_later = 'save_for_later' - set_reminder = 'set_reminder' - subscribe_updates = 'subscribe_updates' - none = 'none' + save_for_later = "save_for_later" + set_reminder = "set_reminder" + subscribe_updates = "subscribe_updates" + none = "none" class FollowUp(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) action: Action | None = None - data: Annotated[dict[str, Any] | None, Field(description='Data for follow-up action')] = None + data: Annotated[dict[str, Any] | None, Field(description="Data for follow-up action")] = None class SiTerminateSessionResponse(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) acp_handoff: Annotated[ - AcpHandoff | None, Field(description='ACP checkout handoff data (for handoff_transaction)') + AcpHandoff | None, Field(description="ACP checkout handoff data (for handoff_transaction)") ] = None errors: list[error.Error] | None = None ext: ext_1.ExtensionObject | None = None - follow_up: Annotated[FollowUp | None, Field(description='Suggested follow-up actions')] = None - session_id: Annotated[str, Field(description='Terminated session identifier')] - terminated: Annotated[bool, Field(description='Whether session was successfully terminated')] + follow_up: Annotated[FollowUp | None, Field(description="Suggested follow-up actions")] = None + session_id: Annotated[str, Field(description="Terminated session identifier")] + terminated: Annotated[bool, Field(description="Whether session was successfully terminated")] diff --git a/src/adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py b/src/adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py index c466e669..82a9b1a3 100644 --- a/src/adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py +++ b/src/adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py @@ -12,19 +12,19 @@ class Type(Enum): - text = 'text' - link = 'link' - image = 'image' - product_card = 'product_card' - carousel = 'carousel' - action_button = 'action_button' - app_handoff = 'app_handoff' - integration_actions = 'integration_actions' + text = "text" + link = "link" + image = "image" + product_card = "product_card" + carousel = "carousel" + action_button = "action_button" + app_handoff = "app_handoff" + integration_actions = "integration_actions" class SiUiElement(AdCPBaseModel): model_config = ConfigDict( - extra='allow', + extra="allow", ) - data: Annotated[dict[str, Any] | None, Field(description='Component-specific data')] = None - type: Annotated[Type, Field(description='Component type')] + data: Annotated[dict[str, Any] | None, Field(description="Component-specific data")] = None + type: Annotated[Type, Field(description="Component type")] diff --git a/tests/test_catalog_types.py b/tests/test_catalog_types.py index 0fcde4d5..070e0b2c 100644 --- a/tests/test_catalog_types.py +++ b/tests/test_catalog_types.py @@ -74,6 +74,7 @@ def test_catalog_type_enum_values(): "real_estate", "education", "destination", + "app", } assert {e.value for e in CatalogType} == expected diff --git a/tests/test_client.py b/tests/test_client.py index 7f6e6c61..e3a563ec 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -137,6 +137,7 @@ async def test_all_client_methods(): assert hasattr(client, "sync_creatives") assert hasattr(client, "list_creatives") assert hasattr(client, "get_media_buy_delivery") + assert hasattr(client, "get_media_buys") assert hasattr(client, "get_signals") assert hasattr(client, "activate_signal") assert hasattr(client, "provide_performance_feedback") @@ -202,6 +203,7 @@ async def test_all_client_methods(): ), ("list_creatives", "ListCreativesRequest", {}), ("get_media_buy_delivery", "GetMediaBuyDeliveryRequest", {}), + ("get_media_buys", "GetMediaBuysRequest", {}), ( "get_signals", "GetSignalsRequest", @@ -564,6 +566,60 @@ async def test_client_context_manager_with_exception(): mock_close.assert_called_once() +@pytest.mark.asyncio +async def test_get_media_buys_parses_response(): + """Test that get_media_buys parses A2A response into typed GetMediaBuysResponse.""" + from unittest.mock import patch + + from adcp.types._generated import GetMediaBuysRequest, GetMediaBuysResponse + from adcp.types.core import TaskResult, TaskStatus + + config = AgentConfig( + id="test_agent", + agent_uri="https://test.example.com", + protocol=Protocol.A2A, + ) + + client = ADCPClient(config) + + media_buys_data = { + "media_buys": [ + { + "media_buy_id": "mb-1", + "status": "active", + "currency": "USD", + "total_budget": 5000.0, + "packages": [ + { + "package_id": "pkg-1", + "creative_approvals": [ + {"creative_id": "cr-1", "approval_status": "approved"} + ], + } + ], + } + ] + } + + mock_result = TaskResult( + status=TaskStatus.COMPLETED, + data=media_buys_data, + success=True, + ) + + with patch.object(client.adapter, "get_media_buys", return_value=mock_result): + result = await client.get_media_buys(GetMediaBuysRequest()) + assert result.success is True + assert isinstance(result.data, GetMediaBuysResponse) + assert len(result.data.media_buys) == 1 + assert result.data.media_buys[0].media_buy_id == "mb-1" + assert result.data.media_buys[0].currency == "USD" + assert result.data.media_buys[0].total_budget == 5000.0 + packages = result.data.media_buys[0].packages + assert len(packages) == 1 + assert packages[0].package_id == "pkg-1" + + @pytest.mark.asyncio async def test_multi_agent_close_handles_adapter_failures(): """Test that multi-agent close handles individual adapter failures gracefully.""" diff --git a/tests/test_public_api.py b/tests/test_public_api.py index 55240934..0dec6510 100644 --- a/tests/test_public_api.py +++ b/tests/test_public_api.py @@ -37,6 +37,8 @@ def test_request_response_types_are_exported(): "ListCreativeFormatsResponse", "BuildCreativeRequest", "BuildCreativeResponse", + "GetMediaBuysRequest", + "GetMediaBuysResponse", ] for type_name in api_types: diff --git a/tests/test_registry.py b/tests/test_registry.py index 926517b5..07f3cf3c 100644 --- a/tests/test_registry.py +++ b/tests/test_registry.py @@ -129,9 +129,7 @@ async def test_resolves_known_domain(self): @pytest.mark.asyncio async def test_returns_none_for_404(self): mock_client = MagicMock() - mock_client.get = AsyncMock( - return_value=_mock_response(404, {"error": "Brand not found"}) - ) + mock_client.get = AsyncMock(return_value=_mock_response(404, {"error": "Brand not found"})) rc = RegistryClient(client=mock_client) result = await rc.lookup_brand("unknown.com") @@ -159,9 +157,7 @@ async def test_raises_on_timeout(self): @pytest.mark.asyncio async def test_raises_on_connection_error(self): mock_client = MagicMock() - mock_client.get = AsyncMock( - side_effect=httpx.ConnectError("Connection refused") - ) + mock_client.get = AsyncMock(side_effect=httpx.ConnectError("Connection refused")) rc = RegistryClient(client=mock_client) with pytest.raises(RegistryError, match="failed"): @@ -222,9 +218,7 @@ async def test_resolves_brand_with_new_brand_field(self): @pytest.mark.asyncio async def test_raises_on_invalid_response_data(self): mock_client = MagicMock() - mock_client.get = AsyncMock( - return_value=_mock_response(200, {"unexpected": "data"}) - ) + mock_client.get = AsyncMock(return_value=_mock_response(200, {"unexpected": "data"})) rc = RegistryClient(client=mock_client) with pytest.raises(RegistryError, match="invalid response"): @@ -390,9 +384,7 @@ async def test_sends_correct_params(self): @pytest.mark.asyncio async def test_raises_on_invalid_response_data(self): mock_client = MagicMock() - mock_client.get = AsyncMock( - return_value=_mock_response(200, {"unexpected": "data"}) - ) + mock_client.get = AsyncMock(return_value=_mock_response(200, {"unexpected": "data"})) rc = RegistryClient(client=mock_client) with pytest.raises(RegistryError, match="invalid response"): @@ -469,9 +461,7 @@ class TestListMembers: @pytest.mark.asyncio async def test_lists_members(self): mock_client = MagicMock() - mock_client.get = AsyncMock( - return_value=_mock_response(200, {"members": [MEMBER_DATA]}) - ) + mock_client.get = AsyncMock(return_value=_mock_response(200, {"members": [MEMBER_DATA]})) rc = RegistryClient(client=mock_client) members = await rc.list_members() @@ -484,9 +474,7 @@ async def test_lists_members(self): @pytest.mark.asyncio async def test_empty_member_list(self): mock_client = MagicMock() - mock_client.get = AsyncMock( - return_value=_mock_response(200, {"members": []}) - ) + mock_client.get = AsyncMock(return_value=_mock_response(200, {"members": []})) rc = RegistryClient(client=mock_client) members = await rc.list_members() @@ -495,9 +483,7 @@ async def test_empty_member_list(self): @pytest.mark.asyncio async def test_sends_limit_param(self): mock_client = MagicMock() - mock_client.get = AsyncMock( - return_value=_mock_response(200, {"members": []}) - ) + mock_client.get = AsyncMock(return_value=_mock_response(200, {"members": []})) rc = RegistryClient( base_url="https://test.example.com", @@ -616,9 +602,7 @@ async def test_raises_on_timeout(self): @pytest.mark.asyncio async def test_raises_on_invalid_response_data(self): mock_client = MagicMock() - mock_client.get = AsyncMock( - return_value=_mock_response(200, {"unexpected": "data"}) - ) + mock_client.get = AsyncMock(return_value=_mock_response(200, {"unexpected": "data"})) rc = RegistryClient(client=mock_client) with pytest.raises(RegistryError, match="invalid response"): diff --git a/tests/test_server_framework.py b/tests/test_server_framework.py index 7c7194a7..0b444463 100644 --- a/tests/test_server_framework.py +++ b/tests/test_server_framework.py @@ -328,7 +328,6 @@ async def test_si_methods_return_not_supported(self): assert "Sponsored Intelligence" in result.reason - class TestProposalBuilder: """Tests for ProposalBuilder.""" diff --git a/tests/test_type_aliases.py b/tests/test_type_aliases.py index 83547e72..381b9a1b 100644 --- a/tests/test_type_aliases.py +++ b/tests/test_type_aliases.py @@ -294,9 +294,9 @@ def test_stable_package_export_is_full_package(): # Stable Package should be the full package stable_fields = set(StablePackage.__annotations__.keys()) - assert len(stable_fields) >= 13, ( - f"Stable Package should have at least 13 fields, got {len(stable_fields)}" - ) + assert ( + len(stable_fields) >= 13 + ), f"Stable Package should have at least 13 fields, got {len(stable_fields)}" assert "budget" in stable_fields assert "pricing_option_id" in stable_fields assert "product_id" in stable_fields From d795d9879a294a5a09f9a8440c0f4c542d4b4d42 Mon Sep 17 00:00:00 2001 From: Brian O'Kelley Date: Sun, 22 Feb 2026 20:46:43 -0500 Subject: [PATCH 2/5] fix: export DeliveryStatus, MediaBuyPackage, Snapshot and related types - Add DeliveryStatus (superset from get_media_buys_response, includes not_delivering) and Package as MediaBuyPackage to _generated.py imports - Export CreativeApproval, DeliveryStatus, MediaBuyPackage, Snapshot, SnapshotUnavailableReason from adcp.types and the top-level adcp package - Add snapshot deserialization test covering delivering, not_delivering, and snapshot_unavailable_reason paths - Add new types to test_public_api.py export coverage Co-Authored-By: Claude Sonnet 4.6 --- src/adcp/__init__.py | 10 ++++ src/adcp/types/__init__.py | 10 ++++ src/adcp/types/_generated.py | 3 ++ tests/test_client.py | 94 ++++++++++++++++++++++++++++++++++++ tests/test_public_api.py | 5 ++ 5 files changed, 122 insertions(+) diff --git a/src/adcp/__init__.py b/src/adcp/__init__.py index cdd5c1b4..e2b18702 100644 --- a/src/adcp/__init__.py +++ b/src/adcp/__init__.py @@ -87,6 +87,7 @@ CreateMediaBuyRequest, CreateMediaBuyResponse, Creative, + CreativeApproval, CreativeFilters, CreativeManifest, # Status enums (for control flow) @@ -122,7 +123,9 @@ LogEventRequest, LogEventResponse, McpWebhookPayload, + DeliveryStatus, MediaBuy, + MediaBuyPackage, MediaBuyStatus, OfferingAssetConstraint, OfferingAssetGroup, @@ -144,6 +147,8 @@ PushNotificationConfig, SignalCatalogType, SignalFilters, + Snapshot, + SnapshotUnavailableReason, SyncAccountsRequest, SyncAccountsResponse, SyncCatalogsInputRequired, @@ -387,13 +392,18 @@ def get_adcp_version() -> str: # Core domain types (from stable API) "BrandManifest", "Creative", + "CreativeApproval", "CreativeFilters", "CreativeManifest", "MediaBuy", + "MediaBuyPackage", "Package", "PackageRequest", + "Snapshot", + "SnapshotUnavailableReason", # Status enums (for control flow) "CreativeStatus", + "DeliveryStatus", "MediaBuyStatus", "PricingModel", # Pricing-related types diff --git a/src/adcp/types/__init__.py b/src/adcp/types/__init__.py index dcf22a3a..9c924a98 100644 --- a/src/adcp/types/__init__.py +++ b/src/adcp/types/__init__.py @@ -90,6 +90,7 @@ CreativeAction, CreativeAgent, CreativeAgentCapability, + CreativeApproval, CreativeAsset, CreativeAssignment, CreativeFilters, @@ -108,6 +109,7 @@ DeliveryForecast, DeliveryMeasurement, DeliveryMetrics, + DeliveryStatus, DeliveryType, DemographicSystem, DimensionUnit, @@ -181,6 +183,7 @@ MeasurementPeriod, MediaBuy, MediaBuyDelivery, + MediaBuyPackage, MediaBuyStatus, Metadata, MetricType, @@ -254,6 +257,8 @@ SiTerminateSessionRequest, SiTerminateSessionResponse, SiUiElement, + Snapshot, + SnapshotUnavailableReason, Sort, SortApplied, SortDirection, @@ -554,6 +559,7 @@ "Contact", "Creative", "CreativeAgent", + "CreativeApproval", "CreativeAsset", "CreativeAssignment", "CreativeFilters", @@ -561,6 +567,7 @@ "CreativePolicy", "DeliveryMeasurement", "DeliveryMetrics", + "DeliveryStatus", "Disclaimer", "DoohMetrics", "Error", @@ -576,6 +583,7 @@ "LandingPageRequirement", "Logo", "MediaBuy", + "MediaBuyPackage", "Metadata", "Offering", "Package", @@ -604,6 +612,8 @@ "Results", "Signal", "SignalFilters", + "Snapshot", + "SnapshotUnavailableReason", "Tags", "TargetingOverlay", "VenueBreakdownItem", diff --git a/src/adcp/types/_generated.py b/src/adcp/types/_generated.py index afd2aef9..18f58e05 100644 --- a/src/adcp/types/_generated.py +++ b/src/adcp/types/_generated.py @@ -645,7 +645,9 @@ from adcp.types.generated_poc.media_buy.get_media_buys_request import GetMediaBuysRequest from adcp.types.generated_poc.media_buy.get_media_buys_response import ( CreativeApproval, + DeliveryStatus, GetMediaBuysResponse, + Package as MediaBuyPackage, Snapshot, SnapshotUnavailableReason, ) @@ -1387,6 +1389,7 @@ class AssetSelectors(_AdCPBaseModel): "MediaBuy", "MediaBuyDelivery", "MediaBuyFeatures", + "MediaBuyPackage", "MediaBuyStatus", "MediaChannel", "Messaging", diff --git a/tests/test_client.py b/tests/test_client.py index e3a563ec..8764db5f 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -620,6 +620,100 @@ async def test_get_media_buys_parses_response(): assert packages[0].package_id == "pkg-1" +@pytest.mark.asyncio +async def test_get_media_buys_parses_snapshot_response(): + """Test that get_media_buys parses snapshot data including DeliveryStatus.""" + from unittest.mock import patch + + from adcp.types._generated import ( + DeliveryStatus, + GetMediaBuysRequest, + GetMediaBuysResponse, + SnapshotUnavailableReason, + ) + from adcp.types.core import TaskResult, TaskStatus + + config = AgentConfig( + id="test_agent", + agent_uri="https://test.example.com", + protocol=Protocol.A2A, + ) + + client = ADCPClient(config) + + media_buys_data = { + "media_buys": [ + { + "media_buy_id": "mb-2", + "status": "active", + "currency": "USD", + "total_budget": 10000.0, + "packages": [ + { + "package_id": "pkg-delivering", + "snapshot": { + "impressions": 4500.0, + "spend": 225.50, + "as_of": "2026-02-22T12:00:00Z", + "staleness_seconds": 900, + "delivery_status": "delivering", + "pacing_index": 0.95, + }, + }, + { + "package_id": "pkg-not-delivering", + "snapshot": { + "impressions": 0.0, + "spend": 0.0, + "as_of": "2026-02-22T12:00:00Z", + "staleness_seconds": 900, + "delivery_status": "not_delivering", + }, + }, + { + "package_id": "pkg-no-snapshot", + "snapshot_unavailable_reason": "SNAPSHOT_UNSUPPORTED", + }, + ], + } + ] + } + + mock_result = TaskResult( + status=TaskStatus.COMPLETED, + data=media_buys_data, + success=True, + ) + + with patch.object(client.adapter, "get_media_buys", return_value=mock_result): + result = await client.get_media_buys(GetMediaBuysRequest(include_snapshot=True)) + assert result.success is True + assert isinstance(result.data, GetMediaBuysResponse) + + packages = result.data.media_buys[0].packages + assert len(packages) == 3 + + delivering = packages[0] + assert delivering.snapshot is not None + assert delivering.snapshot.delivery_status == DeliveryStatus.delivering + assert delivering.snapshot.impressions == 4500.0 + assert delivering.snapshot.spend == 225.50 + assert delivering.snapshot.staleness_seconds == 900 + assert delivering.snapshot.pacing_index == 0.95 + + not_delivering = packages[1] + assert not_delivering.snapshot is not None + assert not_delivering.snapshot.delivery_status == DeliveryStatus.not_delivering + assert not_delivering.snapshot.impressions == 0.0 + + no_snapshot = packages[2] + assert no_snapshot.snapshot is None + assert ( + no_snapshot.snapshot_unavailable_reason + == SnapshotUnavailableReason.SNAPSHOT_UNSUPPORTED + ) + + @pytest.mark.asyncio async def test_multi_agent_close_handles_adapter_failures(): """Test that multi-agent close handles individual adapter failures gracefully.""" diff --git a/tests/test_public_api.py b/tests/test_public_api.py index 0dec6510..19ced2a5 100644 --- a/tests/test_public_api.py +++ b/tests/test_public_api.py @@ -15,10 +15,15 @@ def test_core_domain_types_are_exported(): "Product", "Format", "MediaBuy", + "MediaBuyPackage", "Property", "BrandManifest", "Creative", + "CreativeApproval", + "DeliveryStatus", "Package", + "Snapshot", + "SnapshotUnavailableReason", ] for type_name in core_types: From 9b5adc72c5c474c7ee4ed2069324a308a4bd31cd Mon Sep 17 00:00:00 2001 From: Brian O'Kelley Date: Sun, 22 Feb 2026 20:57:36 -0500 Subject: [PATCH 3/5] fix: teach consolidate_exports to generate MediaBuyPackage and DeliveryStatus aliases - Add get_media_buys_response to known_collisions for Package and DeliveryStatus so the script generates qualified imports (_PackageFromGetMediaBuysResponse, _DeliveryStatusFromGetMediaBuysResponse) - Add MediaBuyPackage = _PackageFromGetMediaBuysResponse alias (distinct enriched package view from get_media_buys endpoint) - Add DeliveryStatus = _DeliveryStatusFromGetMediaBuysResponse alias (superset that includes not_delivering, needed for automated-optimization use cases) - Regenerate _generated.py with new aliases (724 total exports) - Fix ruff I001 import sort in adcp/__init__.py Co-Authored-By: Claude Sonnet 4.6 --- scripts/consolidate_exports.py | 14 +- src/adcp/__init__.py | 2 +- src/adcp/types/_generated.py | 21 +- .../types/generated_poc/a2ui/component.py | 10 +- src/adcp/types/generated_poc/a2ui/surface.py | 16 +- .../account/list_accounts_request.py | 18 +- .../account/list_accounts_response.py | 8 +- .../account/sync_accounts_request.py | 28 +- .../account/sync_accounts_response.py | 146 ++--- src/adcp/types/generated_poc/adagents.py | 514 ++++++++--------- src/adcp/types/generated_poc/brand.py | 526 +++++++++--------- .../content_standards/artifact.py | 140 ++--- .../artifact_webhook_payload.py | 28 +- .../calibrate_content_request.py | 6 +- .../calibrate_content_response.py | 36 +- .../content_standards/content_standards.py | 18 +- .../create_content_standards_request.py | 28 +- .../create_content_standards_response.py | 14 +- .../get_content_standards_request.py | 4 +- .../get_content_standards_response.py | 10 +- .../get_media_buy_artifacts_request.py | 36 +- .../get_media_buy_artifacts_response.py | 56 +- .../list_content_standards_request.py | 10 +- .../list_content_standards_response.py | 12 +- .../update_content_standards_request.py | 30 +- .../update_content_standards_response.py | 10 +- .../validate_content_delivery_request.py | 28 +- .../validate_content_delivery_response.py | 34 +- src/adcp/types/generated_poc/core/account.py | 50 +- .../generated_poc/core/activation_key.py | 18 +- .../generated_poc/core/assets/audio_asset.py | 36 +- .../generated_poc/core/assets/css_asset.py | 6 +- .../generated_poc/core/assets/daast_asset.py | 42 +- .../generated_poc/core/assets/html_asset.py | 16 +- .../generated_poc/core/assets/image_asset.py | 14 +- .../core/assets/javascript_asset.py | 18 +- .../core/assets/markdown_asset.py | 10 +- .../generated_poc/core/assets/text_asset.py | 6 +- .../generated_poc/core/assets/url_asset.py | 8 +- .../generated_poc/core/assets/vast_asset.py | 46 +- .../generated_poc/core/assets/video_asset.py | 108 ++-- .../core/assets/webhook_asset.py | 20 +- .../generated_poc/core/async_response_data.py | 6 +- .../generated_poc/core/attribution_window.py | 10 +- .../generated_poc/core/audience_member.py | 48 +- src/adcp/types/generated_poc/core/brand_id.py | 10 +- .../types/generated_poc/core/brand_ref.py | 8 +- src/adcp/types/generated_poc/core/catalog.py | 14 +- .../types/generated_poc/core/catchment.py | 104 ++-- src/adcp/types/generated_poc/core/context.py | 4 +- .../generated_poc/core/creative_asset.py | 28 +- .../generated_poc/core/creative_assignment.py | 8 +- .../generated_poc/core/creative_brief.py | 36 +- .../generated_poc/core/creative_brief_ref.py | 26 +- .../generated_poc/core/creative_filters.py | 36 +- .../generated_poc/core/creative_manifest.py | 6 +- .../generated_poc/core/creative_policy.py | 10 +- .../generated_poc/core/creative_variant.py | 18 +- .../core/data_provider_signal_selector.py | 32 +- .../generated_poc/core/daypart_target.py | 10 +- .../generated_poc/core/delivery_forecast.py | 22 +- .../generated_poc/core/delivery_metrics.py | 114 ++-- .../types/generated_poc/core/deployment.py | 42 +- .../types/generated_poc/core/destination.py | 24 +- .../generated_poc/core/destination_item.py | 46 +- .../generated_poc/core/education_item.py | 50 +- src/adcp/types/generated_poc/core/error.py | 14 +- src/adcp/types/generated_poc/core/event.py | 16 +- .../generated_poc/core/event_custom_data.py | 30 +- src/adcp/types/generated_poc/core/ext.py | 4 +- .../types/generated_poc/core/flight_item.py | 34 +- .../generated_poc/core/forecast_point.py | 6 +- .../generated_poc/core/forecast_range.py | 10 +- src/adcp/types/generated_poc/core/format.py | 176 +++--- .../types/generated_poc/core/format_id.py | 12 +- .../types/generated_poc/core/frequency_cap.py | 6 +- .../types/generated_poc/core/hotel_item.py | 42 +- .../types/generated_poc/core/identifier.py | 6 +- src/adcp/types/generated_poc/core/job_item.py | 60 +- .../generated_poc/core/mcp_webhook_payload.py | 22 +- .../types/generated_poc/core/measurement.py | 18 +- .../types/generated_poc/core/media_buy.py | 16 +- .../generated_poc/core/media_buy_features.py | 16 +- src/adcp/types/generated_poc/core/offering.py | 34 +- .../core/offering_asset_group.py | 8 +- .../generated_poc/core/optimization_goal.py | 14 +- src/adcp/types/generated_poc/core/package.py | 16 +- .../generated_poc/core/pagination_request.py | 8 +- .../generated_poc/core/pagination_response.py | 10 +- .../core/performance_feedback.py | 38 +- .../types/generated_poc/core/placement.py | 10 +- src/adcp/types/generated_poc/core/price.py | 16 +- .../generated_poc/core/pricing_option.py | 4 +- src/adcp/types/generated_poc/core/product.py | 60 +- .../generated_poc/core/product_allocation.py | 16 +- .../generated_poc/core/product_filters.py | 58 +- src/adcp/types/generated_poc/core/property.py | 20 +- .../types/generated_poc/core/property_id.py | 10 +- .../generated_poc/core/property_list_ref.py | 10 +- .../types/generated_poc/core/property_tag.py | 10 +- src/adcp/types/generated_poc/core/proposal.py | 30 +- .../generated_poc/core/protocol_envelope.py | 18 +- .../core/publisher_property_selector.py | 28 +- .../core/push_notification_config.py | 12 +- .../generated_poc/core/real_estate_item.py | 74 +-- .../generated_poc/core/reference_asset.py | 22 +- .../core/reporting_capabilities.py | 22 +- .../generated_poc/core/reporting_webhook.py | 22 +- .../core/requirements/asset_requirements.py | 6 +- .../requirements/audio_asset_requirements.py | 34 +- .../core/requirements/catalog_requirements.py | 12 +- .../requirements/css_asset_requirements.py | 6 +- .../requirements/daast_asset_requirements.py | 8 +- .../requirements/html_asset_requirements.py | 18 +- .../requirements/image_asset_requirements.py | 38 +- .../javascript_asset_requirements.py | 18 +- .../markdown_asset_requirements.py | 6 +- .../requirements/offering_asset_constraint.py | 14 +- .../requirements/text_asset_requirements.py | 14 +- .../requirements/url_asset_requirements.py | 30 +- .../requirements/vast_asset_requirements.py | 16 +- .../requirements/video_asset_requirements.py | 52 +- .../webhook_asset_requirements.py | 10 +- src/adcp/types/generated_poc/core/response.py | 10 +- .../generated_poc/core/signal_definition.py | 20 +- .../generated_poc/core/signal_filters.py | 12 +- .../types/generated_poc/core/signal_id.py | 22 +- .../generated_poc/core/signal_targeting.py | 30 +- .../types/generated_poc/core/start_timing.py | 8 +- .../types/generated_poc/core/store_item.py | 32 +- .../types/generated_poc/core/sub_asset.py | 30 +- .../types/generated_poc/core/targeting.py | 56 +- .../types/generated_poc/core/user_match.py | 112 ++-- .../types/generated_poc/core/vehicle_item.py | 86 +-- .../creative/creative_feature_result.py | 16 +- .../creative/get_creative_delivery_request.py | 60 +- .../get_creative_delivery_response.py | 44 +- .../creative/get_creative_features_request.py | 8 +- .../get_creative_features_response.py | 12 +- .../creative/list_creative_formats_request.py | 44 +- .../list_creative_formats_response.py | 12 +- .../creative/preview_creative_request.py | 60 +- .../creative/preview_creative_response.py | 78 +-- .../generated_poc/creative/preview_render.py | 52 +- .../generated_poc/enums/action_source.py | 20 +- .../types/generated_poc/enums/adcp_domain.py | 10 +- .../enums/age_verification_method.py | 12 +- .../generated_poc/enums/asset_content_type.py | 26 +- .../generated_poc/enums/attribution_model.py | 12 +- .../types/generated_poc/enums/auth_scheme.py | 6 +- .../generated_poc/enums/available_metric.py | 46 +- .../generated_poc/enums/catalog_action.py | 12 +- .../enums/catalog_item_status.py | 10 +- .../types/generated_poc/enums/catalog_type.py | 28 +- .../types/generated_poc/enums/channels.py | 40 +- .../enums/co_branding_requirement.py | 8 +- .../generated_poc/enums/content_id_type.py | 26 +- .../generated_poc/enums/creative_action.py | 12 +- .../enums/creative_agent_capability.py | 12 +- .../enums/creative_approval_status.py | 8 +- .../enums/creative_sort_field.py | 14 +- .../generated_poc/enums/creative_status.py | 12 +- .../enums/daast_tracking_event.py | 24 +- .../generated_poc/enums/daast_version.py | 6 +- .../types/generated_poc/enums/day_of_week.py | 16 +- .../generated_poc/enums/delivery_type.py | 6 +- .../generated_poc/enums/demographic_system.py | 14 +- .../generated_poc/enums/device_platform.py | 26 +- .../generated_poc/enums/dimension_unit.py | 10 +- .../generated_poc/enums/distance_unit.py | 8 +- .../types/generated_poc/enums/event_type.py | 58 +- .../types/generated_poc/enums/feed_format.py | 12 +- .../generated_poc/enums/feedback_source.py | 10 +- .../generated_poc/enums/forecast_method.py | 8 +- .../enums/forecast_range_unit.py | 14 +- .../enums/forecastable_metric.py | 20 +- .../generated_poc/enums/format_category.py | 16 +- .../enums/format_id_parameter.py | 6 +- .../enums/frequency_cap_scope.py | 8 +- .../types/generated_poc/enums/geo_level.py | 10 +- .../generated_poc/enums/history_entry_type.py | 6 +- .../types/generated_poc/enums/http_method.py | 6 +- .../generated_poc/enums/identifier_types.py | 40 +- .../enums/javascript_module_type.py | 8 +- .../enums/landing_page_requirement.py | 8 +- .../generated_poc/enums/markdown_flavor.py | 6 +- .../generated_poc/enums/media_buy_status.py | 10 +- .../types/generated_poc/enums/metric_type.py | 18 +- .../types/generated_poc/enums/metro_system.py | 12 +- .../generated_poc/enums/notification_type.py | 10 +- src/adcp/types/generated_poc/enums/pacing.py | 8 +- .../generated_poc/enums/postal_system.py | 20 +- .../enums/preview_output_format.py | 6 +- .../generated_poc/enums/pricing_model.py | 20 +- .../generated_poc/enums/property_type.py | 18 +- .../enums/publisher_identifier_types.py | 12 +- .../types/generated_poc/enums/reach_unit.py | 14 +- .../enums/reporting_frequency.py | 8 +- .../enums/signal_catalog_type.py | 8 +- .../generated_poc/enums/signal_source.py | 6 +- .../generated_poc/enums/signal_value_type.py | 8 +- .../generated_poc/enums/sort_direction.py | 6 +- .../types/generated_poc/enums/task_status.py | 20 +- .../types/generated_poc/enums/task_type.py | 34 +- .../generated_poc/enums/transport_mode.py | 10 +- .../types/generated_poc/enums/uid_type.py | 18 +- .../generated_poc/enums/universal_macro.py | 138 ++--- .../generated_poc/enums/update_frequency.py | 10 +- .../generated_poc/enums/url_asset_type.py | 8 +- .../generated_poc/enums/validation_mode.py | 6 +- .../enums/vast_tracking_event.py | 34 +- .../types/generated_poc/enums/vast_version.py | 12 +- .../types/generated_poc/enums/wcag_level.py | 8 +- .../enums/webhook_response_type.py | 10 +- .../enums/webhook_security_method.py | 8 +- .../extensions/extension_meta.py | 24 +- .../media_buy/build_creative_request.py | 14 +- .../media_buy/build_creative_response.py | 16 +- ...media_buy_async_response_input_required.py | 12 +- ...eate_media_buy_async_response_submitted.py | 4 +- ...create_media_buy_async_response_working.py | 12 +- .../media_buy/create_media_buy_request.py | 42 +- .../media_buy/create_media_buy_response.py | 20 +- .../get_media_buy_delivery_request.py | 18 +- .../get_media_buy_delivery_response.py | 140 ++--- .../media_buy/get_media_buys_request.py | 14 +- .../media_buy/get_media_buys_response.py | 102 ++-- ..._products_async_response_input_required.py | 14 +- .../get_products_async_response_submitted.py | 6 +- .../get_products_async_response_working.py | 10 +- .../media_buy/get_products_request.py | 12 +- .../media_buy/get_products_response.py | 16 +- .../list_creative_formats_request.py | 22 +- .../list_creative_formats_response.py | 14 +- .../media_buy/list_creatives_request.py | 40 +- .../media_buy/list_creatives_response.py | 94 ++-- .../media_buy/log_event_request.py | 8 +- .../media_buy/log_event_response.py | 32 +- .../media_buy/package_request.py | 18 +- .../generated_poc/media_buy/package_update.py | 34 +- .../provide_performance_feedback_request.py | 40 +- .../provide_performance_feedback_response.py | 16 +- .../media_buy/sync_audiences_request.py | 30 +- .../media_buy/sync_audiences_response.py | 42 +- ..._catalogs_async_response_input_required.py | 14 +- .../sync_catalogs_async_response_submitted.py | 4 +- .../sync_catalogs_async_response_working.py | 18 +- .../media_buy/sync_catalogs_request.py | 16 +- .../media_buy/sync_catalogs_response.py | 48 +- ...creatives_async_response_input_required.py | 12 +- ...sync_creatives_async_response_submitted.py | 4 +- .../sync_creatives_async_response_working.py | 16 +- .../media_buy/sync_creatives_request.py | 20 +- .../media_buy/sync_creatives_response.py | 38 +- .../media_buy/sync_event_sources_request.py | 20 +- .../media_buy/sync_event_sources_response.py | 58 +- ...media_buy_async_response_input_required.py | 10 +- ...date_media_buy_async_response_submitted.py | 4 +- ...update_media_buy_async_response_working.py | 12 +- .../media_buy/update_media_buy_request.py | 30 +- .../media_buy/update_media_buy_response.py | 18 +- .../pricing_options/cpa_option.py | 22 +- .../pricing_options/cpc_option.py | 22 +- .../pricing_options/cpcv_option.py | 22 +- .../pricing_options/cpm_option.py | 22 +- .../pricing_options/cpp_option.py | 32 +- .../pricing_options/cpv_option.py | 32 +- .../pricing_options/flat_rate_option.py | 40 +- .../pricing_options/price_guidance.py | 12 +- .../pricing_options/time_option.py | 42 +- .../pricing_options/vcpm_option.py | 22 +- .../property/base_property_source.py | 32 +- .../property/create_property_list_request.py | 10 +- .../property/create_property_list_response.py | 8 +- .../property/delete_property_list_request.py | 6 +- .../property/delete_property_list_response.py | 8 +- .../property/feature_requirement.py | 16 +- .../property/get_property_list_request.py | 16 +- .../property/get_property_list_response.py | 12 +- .../property/list_property_lists_request.py | 8 +- .../property/list_property_lists_response.py | 6 +- .../generated_poc/property/property_error.py | 22 +- .../property/property_feature.py | 10 +- .../property/property_feature_definition.py | 38 +- .../generated_poc/property/property_list.py | 24 +- .../property/property_list_changed_webhook.py | 24 +- .../property/property_list_filters.py | 16 +- .../property/update_property_list_request.py | 18 +- .../property/update_property_list_response.py | 6 +- .../protocol/get_adcp_capabilities_request.py | 16 +- .../get_adcp_capabilities_response.py | 202 +++---- .../signals/activate_signal_request.py | 8 +- .../signals/activate_signal_response.py | 16 +- .../signals/get_signals_request.py | 30 +- .../signals/get_signals_response.py | 32 +- .../sponsored_intelligence/si_capabilities.py | 68 +-- .../si_get_offering_request.py | 10 +- .../si_get_offering_response.py | 48 +- .../sponsored_intelligence/si_identity.py | 34 +- .../si_initiate_session_request.py | 12 +- .../si_initiate_session_response.py | 16 +- .../si_send_message_request.py | 24 +- .../si_send_message_response.py | 50 +- .../si_terminate_session_request.py | 36 +- .../si_terminate_session_response.py | 32 +- .../sponsored_intelligence/si_ui_element.py | 24 +- 306 files changed, 4328 insertions(+), 4303 deletions(-) diff --git a/scripts/consolidate_exports.py b/scripts/consolidate_exports.py index 20fbd9ec..d8aea8a9 100644 --- a/scripts/consolidate_exports.py +++ b/scripts/consolidate_exports.py @@ -70,7 +70,11 @@ def _module_sort_key(p: Path) -> tuple[int, str]: # Special handling for known collisions # We need BOTH versions of these types available, so import them with qualified names known_collisions = { - "Package": {"package", "create_media_buy_response"}, + "Package": {"package", "create_media_buy_response", "get_media_buys_response"}, + # DeliveryStatus appears in get_media_buy_delivery_response (5 values) and + # get_media_buys_response (6 values, adds not_delivering). Export both with + # qualified names so aliases.py can re-export the superset as the canonical one. + "DeliveryStatus": {"get_media_buy_delivery_response", "get_media_buys_response"}, # Note: "Catalog" also collides between core.catalog and media_buy.sync_catalogs_response. # We intentionally let core.catalog win (first-seen, since core/ sorts before media_buy/). # The response-level Catalog is imported directly in aliases.py as SyncCatalogResult. @@ -187,6 +191,14 @@ def _module_sort_key(p: Path) -> tuple[int, str]: aliases = {} if "AdvertisingChannels" in all_exports: aliases["Channels"] = "AdvertisingChannels" + # Package from get_media_buys_response is a distinct enriched view with creative approvals + # and delivery snapshots. Export as MediaBuyPackage to avoid collision with core Package. + if "_PackageFromGetMediaBuysResponse" in all_exports: + aliases["MediaBuyPackage"] = "_PackageFromGetMediaBuysResponse" + # DeliveryStatus from get_media_buys_response is a superset (adds not_delivering). + # Export as the canonical DeliveryStatus so users can compare against all values. + if "_DeliveryStatusFromGetMediaBuysResponse" in all_exports: + aliases["DeliveryStatus"] = "_DeliveryStatusFromGetMediaBuysResponse" all_exports_with_aliases = all_exports | set(aliases.keys()) diff --git a/src/adcp/__init__.py b/src/adcp/__init__.py index e2b18702..f2cff402 100644 --- a/src/adcp/__init__.py +++ b/src/adcp/__init__.py @@ -92,6 +92,7 @@ CreativeManifest, # Status enums (for control flow) CreativeStatus, + DeliveryStatus, # Common data types Error, FeedFormat, @@ -123,7 +124,6 @@ LogEventRequest, LogEventResponse, McpWebhookPayload, - DeliveryStatus, MediaBuy, MediaBuyPackage, MediaBuyStatus, diff --git a/src/adcp/types/_generated.py b/src/adcp/types/_generated.py index 18f58e05..5fa8ff04 100644 --- a/src/adcp/types/_generated.py +++ b/src/adcp/types/_generated.py @@ -10,7 +10,7 @@ DO NOT EDIT MANUALLY. Generated from: https://github.com/adcontextprotocol/adcp/tree/main/schemas -Generation date: 2026-02-23 01:24:08 UTC +Generation date: 2026-02-23 01:56:40 UTC """ # ruff: noqa: E501, I001 @@ -637,7 +637,6 @@ ByCreativeItem, ByPackageItem, DailyBreakdownItem, - DeliveryStatus, GetMediaBuyDeliveryResponse, MediaBuyDelivery, Totals, @@ -645,9 +644,7 @@ from adcp.types.generated_poc.media_buy.get_media_buys_request import GetMediaBuysRequest from adcp.types.generated_poc.media_buy.get_media_buys_response import ( CreativeApproval, - DeliveryStatus, GetMediaBuysResponse, - Package as MediaBuyPackage, Snapshot, SnapshotUnavailableReason, ) @@ -933,6 +930,19 @@ # Special imports for name collisions (qualified names for types defined in multiple modules) from adcp.types.generated_poc.core.package import Package as _PackageFromPackage +from adcp.types.generated_poc.media_buy.get_media_buys_response import ( + Package as _PackageFromGetMediaBuysResponse, +) +from adcp.types.generated_poc.media_buy.get_media_buy_delivery_response import ( + DeliveryStatus as _DeliveryStatusFromGetMediaBuyDeliveryResponse, +) +from adcp.types.generated_poc.media_buy.get_media_buys_response import ( + DeliveryStatus as _DeliveryStatusFromGetMediaBuysResponse, +) + +# Backward compatibility aliases for renamed types +MediaBuyPackage = _PackageFromGetMediaBuysResponse +DeliveryStatus = _DeliveryStatusFromGetMediaBuysResponse # Backwards-compat: Types removed from upstream schemas. from adcp.types.base import AdCPBaseModel as _AdCPBaseModel @@ -1694,6 +1704,9 @@ class AssetSelectors(_AdCPBaseModel): "WebhookAssetRequirements", "WebhookResponseType", "WebhookSecurityMethod", + "_DeliveryStatusFromGetMediaBuyDeliveryResponse", + "_DeliveryStatusFromGetMediaBuysResponse", + "_PackageFromGetMediaBuysResponse", "_PackageFromPackage", ] diff --git a/src/adcp/types/generated_poc/a2ui/component.py b/src/adcp/types/generated_poc/a2ui/component.py index d09b8fea..0d053428 100644 --- a/src/adcp/types/generated_poc/a2ui/component.py +++ b/src/adcp/types/generated_poc/a2ui/component.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: a2ui/component.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,13 +12,13 @@ class A2UiComponent(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) component: Annotated[ dict[str, dict[str, Any]], - Field(description="Component definition (keyed by component type)"), + Field(description='Component definition (keyed by component type)'), ] - id: Annotated[str, Field(description="Unique identifier for this component within the surface")] + id: Annotated[str, Field(description='Unique identifier for this component within the surface')] parentId: Annotated[ - str | None, Field(description="ID of the parent component (null for root)") + str | None, Field(description='ID of the parent component (null for root)') ] = None diff --git a/src/adcp/types/generated_poc/a2ui/surface.py b/src/adcp/types/generated_poc/a2ui/surface.py index 8bf98032..35a42484 100644 --- a/src/adcp/types/generated_poc/a2ui/surface.py +++ b/src/adcp/types/generated_poc/a2ui/surface.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: a2ui/surface.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,20 +14,20 @@ class A2UiSurface(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) catalogId: Annotated[ - str | None, Field(description="Component catalog to use for rendering") - ] = "standard" + str | None, Field(description='Component catalog to use for rendering') + ] = 'standard' components: Annotated[ list[component.A2UiComponent], - Field(description="Flat list of components (adjacency list structure)"), + Field(description='Flat list of components (adjacency list structure)'), ] dataModel: Annotated[ - dict[str, Any] | None, Field(description="Application data that components can bind to") + dict[str, Any] | None, Field(description='Application data that components can bind to') ] = None rootId: Annotated[ str | None, - Field(description="ID of the root component (if not specified, first component is root)"), + Field(description='ID of the root component (if not specified, first component is root)'), ] = None - surfaceId: Annotated[str, Field(description="Unique identifier for this surface")] + surfaceId: Annotated[str, Field(description='Unique identifier for this surface')] diff --git a/src/adcp/types/generated_poc/account/list_accounts_request.py b/src/adcp/types/generated_poc/account/list_accounts_request.py index 19adb199..3b7c23c3 100644 --- a/src/adcp/types/generated_poc/account/list_accounts_request.py +++ b/src/adcp/types/generated_poc/account/list_accounts_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: account/list_accounts_request.json -# timestamp: 2026-02-20T02:37:39+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,16 +16,16 @@ class Status(Enum): - active = "active" - pending_approval = "pending_approval" - payment_required = "payment_required" - suspended = "suspended" - closed = "closed" + active = 'active' + pending_approval = 'pending_approval' + payment_required = 'payment_required' + suspended = 'suspended' + closed = 'closed' class ListAccountsRequest(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None @@ -33,10 +33,10 @@ class ListAccountsRequest(AdCPBaseModel): sandbox: Annotated[ bool | None, Field( - description="Filter by sandbox status. true returns only sandbox accounts, false returns only production accounts. Omit to return all accounts." + description='Filter by sandbox status. true returns only sandbox accounts, false returns only production accounts. Omit to return all accounts.' ), ] = None status: Annotated[ Status | None, - Field(description="Filter accounts by status. Omit to return accounts in all statuses."), + Field(description='Filter accounts by status. Omit to return accounts in all statuses.'), ] = None diff --git a/src/adcp/types/generated_poc/account/list_accounts_response.py b/src/adcp/types/generated_poc/account/list_accounts_response.py index 7a990832..9aae77c6 100644 --- a/src/adcp/types/generated_poc/account/list_accounts_response.py +++ b/src/adcp/types/generated_poc/account/list_accounts_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: account/list_accounts_response.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -18,15 +18,15 @@ class ListAccountsResponse(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) accounts: Annotated[ list[account.Account], - Field(description="Array of accounts accessible to the authenticated agent"), + Field(description='Array of accounts accessible to the authenticated agent'), ] context: context_1.ContextObject | None = None errors: Annotated[ - list[error.Error] | None, Field(description="Task-specific errors and warnings") + list[error.Error] | None, Field(description='Task-specific errors and warnings') ] = None ext: ext_1.ExtensionObject | None = None pagination: pagination_response.PaginationResponse | None = None diff --git a/src/adcp/types/generated_poc/account/sync_accounts_request.py b/src/adcp/types/generated_poc/account/sync_accounts_request.py index 0e193f23..f04e3f68 100644 --- a/src/adcp/types/generated_poc/account/sync_accounts_request.py +++ b/src/adcp/types/generated_poc/account/sync_accounts_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: account/sync_accounts_request.json -# timestamp: 2026-02-20T02:37:39+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,14 +16,14 @@ class Billing(Enum): - brand = "brand" - operator = "operator" - agent = "agent" + brand = 'brand' + operator = 'operator' + agent = 'agent' class Account(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) billing: Annotated[ Billing | None, @@ -35,55 +35,55 @@ class Account(AdCPBaseModel): str | None, Field( description="Brand ID within the house portfolio (from brand.json). Required when the house has multiple brands (e.g., 'dove' under unilever.com, 'tide' under pg.com). Omit for single-brand houses.", - pattern="^[a-z0-9_]+$", + pattern='^[a-z0-9_]+$', ), ] = None house: Annotated[ str, Field( description="House domain where brand.json is hosted (e.g., 'unilever.com', 'acme-corp.com'). This is the canonical identity anchor for the brand, resolved via /.well-known/brand.json. For single-brand houses, this alone identifies the brand.", - pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", + pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', ), ] operator: Annotated[ str | None, Field( description="Domain of the entity operating the seat (e.g., 'groupm.com', 'mindshare.com'). Verified against the brand's authorized_operators in brand.json. Omit if the brand operates its own seat.", - pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", + pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', ), ] = None sandbox: Annotated[ bool | None, Field( - description="When true, provision this as a sandbox account. No real platform calls or billing. Sandbox accounts are identified by account_id in subsequent requests." + description='When true, provision this as a sandbox account. No real platform calls or billing. Sandbox accounts are identified by account_id in subsequent requests.' ), ] = None class SyncAccountsRequest(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) accounts: Annotated[ - list[Account], Field(description="Advertiser accounts to sync", max_length=1000) + list[Account], Field(description='Advertiser accounts to sync', max_length=1000) ] context: context_1.ContextObject | None = None delete_missing: Annotated[ bool | None, Field( - description="When true, accounts previously synced by this agent but not included in this request will be deactivated. Scoped to the authenticated agent — does not affect accounts managed by other agents. Use with caution." + description='When true, accounts previously synced by this agent but not included in this request will be deactivated. Scoped to the authenticated agent — does not affect accounts managed by other agents. Use with caution.' ), ] = False dry_run: Annotated[ bool | None, Field( - description="When true, preview what would change without applying. Returns what would be created/updated/deactivated." + description='When true, preview what would change without applying. Returns what would be created/updated/deactivated.' ), ] = False ext: ext_1.ExtensionObject | None = None push_notification_config: Annotated[ push_notification_config_1.PushNotificationConfig | None, Field( - description="Optional webhook for async notifications when account status changes (e.g., pending_approval transitions to active)." + description='Optional webhook for async notifications when account status changes (e.g., pending_approval transitions to active).' ), ] = None diff --git a/src/adcp/types/generated_poc/account/sync_accounts_response.py b/src/adcp/types/generated_poc/account/sync_accounts_response.py index 71a7874b..522264cb 100644 --- a/src/adcp/types/generated_poc/account/sync_accounts_response.py +++ b/src/adcp/types/generated_poc/account/sync_accounts_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: account/sync_accounts_response.json -# timestamp: 2026-02-20T02:37:39+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,50 +16,50 @@ class Action(Enum): - created = "created" - updated = "updated" - unchanged = "unchanged" - failed = "failed" + created = 'created' + updated = 'updated' + unchanged = 'unchanged' + failed = 'failed' class Billing(Enum): - brand = "brand" - operator = "operator" - agent = "agent" + brand = 'brand' + operator = 'operator' + agent = 'agent' class CreditLimit(AdCPBaseModel): amount: Annotated[float, Field(ge=0.0)] - currency: Annotated[str, Field(pattern="^[A-Z]{3}$")] + currency: Annotated[str, Field(pattern='^[A-Z]{3}$')] class Setup(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) expires_at: Annotated[ - AwareDatetime | None, Field(description="When this setup link expires") + AwareDatetime | None, Field(description='When this setup link expires') ] = None message: Annotated[str, Field(description="Human-readable description of what's needed")] url: Annotated[ AnyUrl | None, Field( - description="URL where the human can complete the required action (credit application, legal agreement, add funds)" + description='URL where the human can complete the required action (credit application, legal agreement, add funds)' ), ] = None class Status(Enum): - active = "active" - pending_approval = "pending_approval" - payment_required = "payment_required" - suspended = "suspended" - closed = "closed" + active = 'active' + pending_approval = 'pending_approval' + payment_required = 'payment_required' + suspended = 'suspended' + closed = 'closed' class Account(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) account_id: Annotated[ str | None, @@ -70,7 +70,7 @@ class Account(AdCPBaseModel): action: Annotated[ Action, Field( - description="Action taken for this account. created: new account provisioned. updated: existing account modified. unchanged: no changes needed. failed: could not process (see errors)." + description='Action taken for this account. created: new account provisioned. updated: existing account modified. unchanged: no changes needed. failed: could not process (see errors).' ), ] billing: Annotated[ @@ -82,8 +82,8 @@ class Account(AdCPBaseModel): brand_id: Annotated[ str | None, Field( - description="Brand ID within the house portfolio, echoed from request", - pattern="^[a-z0-9_]+$", + description='Brand ID within the house portfolio, echoed from request', + pattern='^[a-z0-9_]+$', ), ] = None credit_limit: CreditLimit | None = None @@ -94,68 +94,68 @@ class Account(AdCPBaseModel): house: Annotated[ str, Field( - description="House domain, echoed from the request", - pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", + description='House domain, echoed from the request', + pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', ), ] name: Annotated[ - str | None, Field(description="Human-readable account name assigned by the seller") + str | None, Field(description='Human-readable account name assigned by the seller') ] = None - operator: Annotated[str | None, Field(description="Operator domain, echoed from request")] = ( + operator: Annotated[str | None, Field(description='Operator domain, echoed from request')] = ( None ) parent_account_id: Annotated[ str | None, Field( - description="Parent account ID when this account is a sub-account under a shared billing account" + description='Parent account ID when this account is a sub-account under a shared billing account' ), ] = None payment_terms: Annotated[ str | None, Field(description="Payment terms (e.g., 'net_30', 'prepay')") ] = None - rate_card: Annotated[str | None, Field(description="Rate card applied to this account")] = None + rate_card: Annotated[str | None, Field(description='Rate card applied to this account')] = None sandbox: Annotated[ bool | None, - Field(description="Whether this is a sandbox account, echoed from the request."), + Field(description='Whether this is a sandbox account, echoed from the request.'), ] = None setup: Annotated[ Setup | None, Field( - description="Setup information for pending accounts. Provides the agent (or human) with next steps to complete account activation." + description='Setup information for pending accounts. Provides the agent (or human) with next steps to complete account activation.' ), ] = None status: Annotated[ Status, Field( - description="Account status. active: ready for use. pending_approval: seller reviewing (credit, legal). payment_required: credit limit reached or funds depleted. suspended: was active, now paused. closed: terminated." + description='Account status. active: ready for use. pending_approval: seller reviewing (credit, legal). payment_required: credit limit reached or funds depleted. suspended: was active, now paused. closed: terminated.' ), ] warnings: Annotated[ - list[str] | None, Field(description="Non-fatal warnings about this account") + list[str] | None, Field(description='Non-fatal warnings about this account') ] = None class SyncAccountsResponse1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - accounts: Annotated[list[Account], Field(description="Results for each account processed")] + accounts: Annotated[list[Account], Field(description='Results for each account processed')] context: context_1.ContextObject | None = None dry_run: Annotated[ - bool | None, Field(description="Whether this was a dry run (no actual changes made)") + bool | None, Field(description='Whether this was a dry run (no actual changes made)') ] = None ext: ext_1.ExtensionObject | None = None class SyncAccountsResponse2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error], Field( - description="Operation-level errors (e.g., authentication failure, service unavailable)", + description='Operation-level errors (e.g., authentication failure, service unavailable)', min_length=1, ), ] @@ -166,60 +166,60 @@ class SyncAccountsResponse(RootModel[SyncAccountsResponse1 | SyncAccountsRespons root: Annotated[ SyncAccountsResponse1 | SyncAccountsResponse2, Field( - description="Response from account sync operation. Returns per-account results with status and billing, or operation-level errors on complete failure.", + description='Response from account sync operation. Returns per-account results with status and billing, or operation-level errors on complete failure.', examples=[ { - "data": { - "accounts": [ + 'data': { + 'accounts': [ { - "account_id": "sub_tide_001", - "action": "created", - "billing": "agent", - "brand_id": "tide", - "house": "pg.com", - "name": "Tide (via GroupM)", - "operator": "groupm.com", - "parent_account_id": "acc_agent_house", - "status": "active", + 'account_id': 'sub_tide_001', + 'action': 'created', + 'billing': 'agent', + 'brand_id': 'tide', + 'house': 'pg.com', + 'name': 'Tide (via GroupM)', + 'operator': 'groupm.com', + 'parent_account_id': 'acc_agent_house', + 'status': 'active', }, { - "account_id": "acc_dove_pending", - "action": "created", - "billing": "brand", - "brand_id": "dove", - "house": "unilever.com", - "name": "Dove", - "operator": "mindshare.com", - "setup": { - "expires_at": "2026-03-10T00:00:00Z", - "message": "Credit application required for direct billing", - "url": "https://seller.com/onboard/dove", + 'account_id': 'acc_dove_pending', + 'action': 'created', + 'billing': 'brand', + 'brand_id': 'dove', + 'house': 'unilever.com', + 'name': 'Dove', + 'operator': 'mindshare.com', + 'setup': { + 'expires_at': '2026-03-10T00:00:00Z', + 'message': 'Credit application required for direct billing', + 'url': 'https://seller.com/onboard/dove', }, - "status": "pending_approval", + 'status': 'pending_approval', }, ] }, - "description": "Mixed results - one active, one pending approval", + 'description': 'Mixed results - one active, one pending approval', }, { - "data": { - "accounts": [ + 'data': { + 'accounts': [ { - "account_id": "acc_agent_house", - "action": "created", - "billing": "agent", - "house": "acme-corp.com", - "name": "Acme Corp (via agent)", - "status": "active", - "warnings": [ - "Direct billing (brand) not supported. Mapped to agent billing." + 'account_id': 'acc_agent_house', + 'action': 'created', + 'billing': 'agent', + 'house': 'acme-corp.com', + 'name': 'Acme Corp (via agent)', + 'status': 'active', + 'warnings': [ + 'Direct billing (brand) not supported. Mapped to agent billing.' ], } ] }, - "description": "Seller doesn't support direct billing, maps to agent billing", + 'description': "Seller doesn't support direct billing, maps to agent billing", }, ], - title="Sync Accounts Response", + title='Sync Accounts Response', ), ] diff --git a/src/adcp/types/generated_poc/adagents.py b/src/adcp/types/generated_poc/adagents.py index 11b4f500..ab718341 100644 --- a/src/adcp/types/generated_poc/adagents.py +++ b/src/adcp/types/generated_poc/adagents.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: adagents.json -# timestamp: 2026-02-18T17:56:28+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -20,40 +20,40 @@ class AdcpAgentsAuthorization1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) field_schema: Annotated[ str | None, - Field(alias="$schema", description="JSON Schema identifier for this adagents.json file"), + Field(alias='$schema', description='JSON Schema identifier for this adagents.json file'), ] = None authoritative_location: Annotated[ AnyUrl, Field( - description="HTTPS URL of the authoritative adagents.json file. When present, this file is a reference and the authoritative location contains the actual agent authorization data." + description='HTTPS URL of the authoritative adagents.json file. When present, this file is a reference and the authoritative location contains the actual agent authorization data.' ), ] last_updated: Annotated[ AwareDatetime | None, - Field(description="ISO 8601 timestamp indicating when this reference was last updated"), + Field(description='ISO 8601 timestamp indicating when this reference was last updated'), ] = None class SignalId(RootModel[str]): - root: Annotated[str, Field(pattern="^[a-zA-Z0-9_-]+$")] + root: Annotated[str, Field(pattern='^[a-zA-Z0-9_-]+$')] class AuthorizedAgents4(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) authorization_type: Annotated[ - Literal["signal_ids"], - Field(description="Discriminator indicating authorization by specific signal IDs"), + Literal['signal_ids'], + Field(description='Discriminator indicating authorization by specific signal IDs'), ] authorized_for: Annotated[ str, Field( - description="Human-readable description of what signals this agent is authorized to resell", + description='Human-readable description of what signals this agent is authorized to resell', max_length=500, min_length=1, ), @@ -61,7 +61,7 @@ class AuthorizedAgents4(AdCPBaseModel): signal_ids: Annotated[ list[SignalId], Field( - description="Signal IDs this agent is authorized to resell. Resolved against the top-level signals array in this file", + description='Signal IDs this agent is authorized to resell. Resolved against the top-level signals array in this file', min_length=1, ), ] @@ -69,21 +69,21 @@ class AuthorizedAgents4(AdCPBaseModel): class SignalTag(RootModel[str]): - root: Annotated[str, Field(pattern="^[a-z0-9_-]+$")] + root: Annotated[str, Field(pattern='^[a-z0-9_-]+$')] class AuthorizedAgents5(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) authorization_type: Annotated[ - Literal["signal_tags"], - Field(description="Discriminator indicating authorization by signal tags"), + Literal['signal_tags'], + Field(description='Discriminator indicating authorization by signal tags'), ] authorized_for: Annotated[ str, Field( - description="Human-readable description of what signals this agent is authorized to resell", + description='Human-readable description of what signals this agent is authorized to resell', max_length=500, min_length=1, ), @@ -91,7 +91,7 @@ class AuthorizedAgents5(AdCPBaseModel): signal_tags: Annotated[ list[SignalTag], Field( - description="Signal tags this agent is authorized for. Agent can resell all signals with these tags", + description='Signal tags this agent is authorized for. Agent can resell all signals with these tags', min_length=1, ), ] @@ -100,19 +100,19 @@ class AuthorizedAgents5(AdCPBaseModel): class Contact(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) domain: Annotated[ str | None, Field( - description="Primary domain of the entity managing this file", - pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", + description='Primary domain of the entity managing this file', + pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', ), ] = None email: Annotated[ EmailStr | None, Field( - description="Contact email for questions or issues with this authorization file", + description='Contact email for questions or issues with this authorization file', max_length=255, min_length=1, ), @@ -134,7 +134,7 @@ class Contact(AdCPBaseModel): seller_id: Annotated[ str | None, Field( - description="Seller ID from IAB Tech Lab sellers.json (if applicable)", + description='Seller ID from IAB Tech Lab sellers.json (if applicable)', max_length=255, min_length=1, ), @@ -142,7 +142,7 @@ class Contact(AdCPBaseModel): tag_id: Annotated[ str | None, Field( - description="TAG Certified Against Fraud ID for verification (if applicable)", + description='TAG Certified Against Fraud ID for verification (if applicable)', max_length=100, min_length=1, ), @@ -151,7 +151,7 @@ class Contact(AdCPBaseModel): class PropertyFeature(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) features: Annotated[ list[str], @@ -167,17 +167,17 @@ class PropertyFeature(AdCPBaseModel): ), ] publisher_id: Annotated[ - str | None, Field(description="Optional publisher identifier at this agent (for lookup)") + str | None, Field(description='Optional publisher identifier at this agent (for lookup)') ] = None url: Annotated[AnyUrl, Field(description="The agent's API endpoint URL")] class SignalTags(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - description: Annotated[str, Field(description="Description of what this tag represents")] - name: Annotated[str, Field(description="Human-readable name for this tag")] + description: Annotated[str, Field(description='Description of what this tag represents')] + name: Annotated[str, Field(description='Human-readable name for this tag')] class Tags(SignalTags): @@ -186,16 +186,16 @@ class Tags(SignalTags): class AuthorizedAgents(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) authorization_type: Annotated[ - Literal["property_ids"], - Field(description="Discriminator indicating authorization by specific property IDs"), + Literal['property_ids'], + Field(description='Discriminator indicating authorization by specific property IDs'), ] authorized_for: Annotated[ str, Field( - description="Human-readable description of what this agent is authorized to sell", + description='Human-readable description of what this agent is authorized to sell', max_length=500, min_length=1, ), @@ -203,7 +203,7 @@ class AuthorizedAgents(AdCPBaseModel): property_ids: Annotated[ list[property_id.PropertyId], Field( - description="Property IDs this agent is authorized for. Resolved against the top-level properties array in this file", + description='Property IDs this agent is authorized for. Resolved against the top-level properties array in this file', min_length=1, ), ] @@ -212,16 +212,16 @@ class AuthorizedAgents(AdCPBaseModel): class AuthorizedAgents1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) authorization_type: Annotated[ - Literal["property_tags"], - Field(description="Discriminator indicating authorization by property tags"), + Literal['property_tags'], + Field(description='Discriminator indicating authorization by property tags'), ] authorized_for: Annotated[ str, Field( - description="Human-readable description of what this agent is authorized to sell", + description='Human-readable description of what this agent is authorized to sell', max_length=500, min_length=1, ), @@ -229,7 +229,7 @@ class AuthorizedAgents1(AdCPBaseModel): property_tags: Annotated[ list[property_tag.PropertyTag], Field( - description="Tags identifying which properties this agent is authorized for. Resolved against the top-level properties array in this file using tag matching", + description='Tags identifying which properties this agent is authorized for. Resolved against the top-level properties array in this file using tag matching', min_length=1, ), ] @@ -238,18 +238,18 @@ class AuthorizedAgents1(AdCPBaseModel): class AuthorizedAgents3(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) authorization_type: Annotated[ - Literal["publisher_properties"], + Literal['publisher_properties'], Field( - description="Discriminator indicating authorization for properties from other publisher domains" + description='Discriminator indicating authorization for properties from other publisher domains' ), ] authorized_for: Annotated[ str, Field( - description="Human-readable description of what this agent is authorized to sell", + description='Human-readable description of what this agent is authorized to sell', max_length=500, min_length=1, ), @@ -257,7 +257,7 @@ class AuthorizedAgents3(AdCPBaseModel): publisher_properties: Annotated[ list[publisher_property_selector.PublisherPropertySelector], Field( - description="Properties from other publisher domains this agent is authorized for. Each entry specifies a publisher domain and which of their properties this agent can sell", + description='Properties from other publisher domains this agent is authorized for. Each entry specifies a publisher domain and which of their properties this agent can sell', min_length=1, ), ] @@ -266,16 +266,16 @@ class AuthorizedAgents3(AdCPBaseModel): class AuthorizedAgents2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) authorization_type: Annotated[ - Literal["inline_properties"], - Field(description="Discriminator indicating authorization by inline property definitions"), + Literal['inline_properties'], + Field(description='Discriminator indicating authorization by inline property definitions'), ] authorized_for: Annotated[ str, Field( - description="Human-readable description of what this agent is authorized to sell", + description='Human-readable description of what this agent is authorized to sell', max_length=500, min_length=1, ), @@ -283,7 +283,7 @@ class AuthorizedAgents2(AdCPBaseModel): properties: Annotated[ list[property.Property], Field( - description="Specific properties this agent is authorized for (alternative to property_ids/property_tags)", + description='Specific properties this agent is authorized for (alternative to property_ids/property_tags)', min_length=1, ), ] @@ -292,11 +292,11 @@ class AuthorizedAgents2(AdCPBaseModel): class AdcpAgentsAuthorization2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) field_schema: Annotated[ str | None, - Field(alias="$schema", description="JSON Schema identifier for this adagents.json file"), + Field(alias='$schema', description='JSON Schema identifier for this adagents.json file'), ] = None authorized_agents: Annotated[ list[ @@ -308,24 +308,24 @@ class AdcpAgentsAuthorization2(AdCPBaseModel): | AuthorizedAgents5 ], Field( - description="Array of sales agents authorized to sell inventory for properties in this file", + description='Array of sales agents authorized to sell inventory for properties in this file', min_length=1, ), ] contact: Annotated[ Contact | None, Field( - description="Contact information for the entity managing this adagents.json file (may be publisher or third-party operator)" + description='Contact information for the entity managing this adagents.json file (may be publisher or third-party operator)' ), ] = None last_updated: Annotated[ AwareDatetime | None, - Field(description="ISO 8601 timestamp indicating when this file was last updated"), + Field(description='ISO 8601 timestamp indicating when this file was last updated'), ] = None properties: Annotated[ list[property.Property] | None, Field( - description="Array of all properties covered by this adagents.json file. Defines the canonical property list that authorized agents reference.", + description='Array of all properties covered by this adagents.json file. Defines the canonical property list that authorized agents reference.', min_length=1, ), ] = None @@ -338,20 +338,20 @@ class AdcpAgentsAuthorization2(AdCPBaseModel): signal_tags: Annotated[ dict[str, SignalTags] | None, Field( - description="Metadata for each tag referenced by signals. Provides human-readable context for signal tag values." + description='Metadata for each tag referenced by signals. Provides human-readable context for signal tag values.' ), ] = None signals: Annotated[ list[signal_definition.SignalDefinition] | None, Field( - description="Signal catalog published by this data provider. Signals agents reference these signals via data_provider_domain + signal_id.", + description='Signal catalog published by this data provider. Signals agents reference these signals via data_provider_domain + signal_id.', min_length=1, ), ] = None tags: Annotated[ dict[str, Tags] | None, Field( - description="Metadata for each tag referenced by properties. Provides human-readable context for property tag values." + description='Metadata for each tag referenced by properties. Provides human-readable context for property tag values.' ), ] = None @@ -360,304 +360,304 @@ class AdcpAgentsAuthorization(RootModel[AdcpAgentsAuthorization1 | AdcpAgentsAut root: Annotated[ AdcpAgentsAuthorization1 | AdcpAgentsAuthorization2, Field( - description="Declaration of authorized agents for advertising inventory and data signals. Hosted at /.well-known/adagents.json on publisher domains (for properties) or data provider domains (for signals). Can either contain the full structure inline or reference an authoritative URL.", + description='Declaration of authorized agents for advertising inventory and data signals. Hosted at /.well-known/adagents.json on publisher domains (for properties) or data provider domains (for signals). Can either contain the full structure inline or reference an authoritative URL.', examples=[ { - "$schema": "/schemas/latest/adagents.json", - "authoritative_location": "https://cdn.example.com/adagents/v2/adagents.json", - "last_updated": "2025-01-15T10:00:00Z", + '$schema': '/schemas/latest/adagents.json', + 'authoritative_location': 'https://cdn.example.com/adagents/v2/adagents.json', + 'last_updated': '2025-01-15T10:00:00Z', }, { - "$schema": "/schemas/latest/adagents.json", - "authorized_agents": [ + '$schema': '/schemas/latest/adagents.json', + 'authorized_agents': [ { - "authorization_type": "property_tags", - "authorized_for": "Official sales agent", - "property_tags": ["all"], - "url": "https://agent.example.com", + 'authorization_type': 'property_tags', + 'authorized_for': 'Official sales agent', + 'property_tags': ['all'], + 'url': 'https://agent.example.com', } ], - "last_updated": "2025-01-10T12:00:00Z", - "properties": [ + 'last_updated': '2025-01-10T12:00:00Z', + 'properties': [ { - "identifiers": [{"type": "domain", "value": "example.com"}], - "name": "Example Site", - "property_type": "website", - "publisher_domain": "example.com", + 'identifiers': [{'type': 'domain', 'value': 'example.com'}], + 'name': 'Example Site', + 'property_type': 'website', + 'publisher_domain': 'example.com', } ], - "tags": { - "all": { - "description": "All properties in this file", - "name": "All Properties", + 'tags': { + 'all': { + 'description': 'All properties in this file', + 'name': 'All Properties', } }, }, { - "$schema": "/schemas/latest/adagents.json", - "authorized_agents": [ + '$schema': '/schemas/latest/adagents.json', + 'authorized_agents': [ { - "authorization_type": "property_tags", - "authorized_for": "All Meta properties", - "property_tags": ["meta_network"], - "url": "https://meta-ads.com", + 'authorization_type': 'property_tags', + 'authorized_for': 'All Meta properties', + 'property_tags': ['meta_network'], + 'url': 'https://meta-ads.com', } ], - "contact": { - "domain": "meta.com", - "email": "adops@meta.com", - "name": "Meta Advertising Operations", - "privacy_policy_url": "https://www.meta.com/privacy/policy", - "seller_id": "pub-meta-12345", - "tag_id": "12345", + 'contact': { + 'domain': 'meta.com', + 'email': 'adops@meta.com', + 'name': 'Meta Advertising Operations', + 'privacy_policy_url': 'https://www.meta.com/privacy/policy', + 'seller_id': 'pub-meta-12345', + 'tag_id': '12345', }, - "last_updated": "2025-01-10T15:30:00Z", - "properties": [ + 'last_updated': '2025-01-10T15:30:00Z', + 'properties': [ { - "identifiers": [ - {"type": "ios_bundle", "value": "com.burbn.instagram"}, - {"type": "android_package", "value": "com.instagram.android"}, + 'identifiers': [ + {'type': 'ios_bundle', 'value': 'com.burbn.instagram'}, + {'type': 'android_package', 'value': 'com.instagram.android'}, ], - "name": "Instagram", - "property_type": "mobile_app", - "publisher_domain": "instagram.com", - "supported_channels": ["social", "display", "olv"], - "tags": ["meta_network", "social_media"], + 'name': 'Instagram', + 'property_type': 'mobile_app', + 'publisher_domain': 'instagram.com', + 'supported_channels': ['social', 'display', 'olv'], + 'tags': ['meta_network', 'social_media'], }, { - "identifiers": [ - {"type": "ios_bundle", "value": "com.facebook.Facebook"}, - {"type": "android_package", "value": "com.facebook.katana"}, + 'identifiers': [ + {'type': 'ios_bundle', 'value': 'com.facebook.Facebook'}, + {'type': 'android_package', 'value': 'com.facebook.katana'}, ], - "name": "Facebook", - "property_type": "mobile_app", - "publisher_domain": "facebook.com", - "supported_channels": ["social", "display", "olv"], - "tags": ["meta_network", "social_media"], + 'name': 'Facebook', + 'property_type': 'mobile_app', + 'publisher_domain': 'facebook.com', + 'supported_channels': ['social', 'display', 'olv'], + 'tags': ['meta_network', 'social_media'], }, { - "identifiers": [ - {"type": "ios_bundle", "value": "net.whatsapp.WhatsApp"}, - {"type": "android_package", "value": "com.whatsapp"}, + 'identifiers': [ + {'type': 'ios_bundle', 'value': 'net.whatsapp.WhatsApp'}, + {'type': 'android_package', 'value': 'com.whatsapp'}, ], - "name": "WhatsApp", - "property_type": "mobile_app", - "publisher_domain": "whatsapp.com", - "supported_channels": ["social", "display"], - "tags": ["meta_network", "messaging"], + 'name': 'WhatsApp', + 'property_type': 'mobile_app', + 'publisher_domain': 'whatsapp.com', + 'supported_channels': ['social', 'display'], + 'tags': ['meta_network', 'messaging'], }, ], - "tags": { - "messaging": { - "description": "Messaging and communication apps", - "name": "Messaging Apps", + 'tags': { + 'messaging': { + 'description': 'Messaging and communication apps', + 'name': 'Messaging Apps', }, - "meta_network": { - "description": "All Meta-owned properties", - "name": "Meta Network", + 'meta_network': { + 'description': 'All Meta-owned properties', + 'name': 'Meta Network', }, - "social_media": { - "description": "Social networking applications", - "name": "Social Media Apps", + 'social_media': { + 'description': 'Social networking applications', + 'name': 'Social Media Apps', }, }, }, { - "$schema": "/schemas/latest/adagents.json", - "authorized_agents": [ + '$schema': '/schemas/latest/adagents.json', + 'authorized_agents': [ { - "authorization_type": "property_tags", - "authorized_for": "Tumblr corporate properties only", - "property_tags": ["corporate"], - "url": "https://tumblr-sales.com", + 'authorization_type': 'property_tags', + 'authorized_for': 'Tumblr corporate properties only', + 'property_tags': ['corporate'], + 'url': 'https://tumblr-sales.com', } ], - "contact": {"name": "Tumblr Advertising"}, - "last_updated": "2025-01-10T16:00:00Z", - "properties": [ + 'contact': {'name': 'Tumblr Advertising'}, + 'last_updated': '2025-01-10T16:00:00Z', + 'properties': [ { - "identifiers": [{"type": "domain", "value": "tumblr.com"}], - "name": "Tumblr Corporate", - "property_type": "website", - "publisher_domain": "tumblr.com", - "tags": ["corporate"], + 'identifiers': [{'type': 'domain', 'value': 'tumblr.com'}], + 'name': 'Tumblr Corporate', + 'property_type': 'website', + 'publisher_domain': 'tumblr.com', + 'tags': ['corporate'], } ], - "tags": { - "corporate": { - "description": "Tumblr-owned corporate properties (not user blogs)", - "name": "Corporate Properties", + 'tags': { + 'corporate': { + 'description': 'Tumblr-owned corporate properties (not user blogs)', + 'name': 'Corporate Properties', } }, }, { - "$schema": "/schemas/latest/adagents.json", - "authorized_agents": [ + '$schema': '/schemas/latest/adagents.json', + 'authorized_agents': [ { - "authorization_type": "publisher_properties", - "authorized_for": "CNN CTV properties via publisher authorization", - "publisher_properties": [ + 'authorization_type': 'publisher_properties', + 'authorized_for': 'CNN CTV properties via publisher authorization', + 'publisher_properties': [ { - "property_ids": ["cnn_ctv_app"], - "publisher_domain": "cnn.com", - "selection_type": "by_id", + 'property_ids': ['cnn_ctv_app'], + 'publisher_domain': 'cnn.com', + 'selection_type': 'by_id', } ], - "url": "https://agent.example/api", + 'url': 'https://agent.example/api', }, { - "authorization_type": "publisher_properties", - "authorized_for": "All CTV properties from multiple publishers", - "publisher_properties": [ + 'authorization_type': 'publisher_properties', + 'authorized_for': 'All CTV properties from multiple publishers', + 'publisher_properties': [ { - "property_tags": ["ctv"], - "publisher_domain": "cnn.com", - "selection_type": "by_tag", + 'property_tags': ['ctv'], + 'publisher_domain': 'cnn.com', + 'selection_type': 'by_tag', }, { - "property_tags": ["ctv"], - "publisher_domain": "espn.com", - "selection_type": "by_tag", + 'property_tags': ['ctv'], + 'publisher_domain': 'espn.com', + 'selection_type': 'by_tag', }, ], - "url": "https://agent.example/api", + 'url': 'https://agent.example/api', }, ], - "contact": { - "domain": "agent.example", - "email": "sales@agent.example", - "name": "Example Third-Party Sales Agent", + 'contact': { + 'domain': 'agent.example', + 'email': 'sales@agent.example', + 'name': 'Example Third-Party Sales Agent', }, - "last_updated": "2025-01-10T17:00:00Z", + 'last_updated': '2025-01-10T17:00:00Z', }, { - "$schema": "/schemas/latest/adagents.json", - "authorized_agents": [ + '$schema': '/schemas/latest/adagents.json', + 'authorized_agents': [ { - "authorization_type": "property_tags", - "authorized_for": "All news properties", - "property_tags": ["news"], - "url": "https://sales.news.example.com", + 'authorization_type': 'property_tags', + 'authorized_for': 'All news properties', + 'property_tags': ['news'], + 'url': 'https://sales.news.example.com', } ], - "contact": { - "domain": "news.example.com", - "email": "adops@news.example.com", - "name": "Premium News Publisher", + 'contact': { + 'domain': 'news.example.com', + 'email': 'adops@news.example.com', + 'name': 'Premium News Publisher', }, - "last_updated": "2025-01-10T18:00:00Z", - "properties": [ + 'last_updated': '2025-01-10T18:00:00Z', + 'properties': [ { - "identifiers": [{"type": "domain", "value": "news.example.com"}], - "name": "News Example", - "property_type": "website", - "publisher_domain": "news.example.com", - "tags": ["premium", "news"], + 'identifiers': [{'type': 'domain', 'value': 'news.example.com'}], + 'name': 'News Example', + 'property_type': 'website', + 'publisher_domain': 'news.example.com', + 'tags': ['premium', 'news'], } ], - "property_features": [ + 'property_features': [ { - "features": ["carbon_score", "sustainability_grade"], - "name": "Scope3", - "publisher_id": "pub_news_12345", - "url": "https://api.scope3.com", + 'features': ['carbon_score', 'sustainability_grade'], + 'name': 'Scope3', + 'publisher_id': 'pub_news_12345', + 'url': 'https://api.scope3.com', }, { - "features": [ - "tag_certified_against_fraud", - "tag_brand_safety_certified", + 'features': [ + 'tag_certified_against_fraud', + 'tag_brand_safety_certified', ], - "name": "TAG", - "url": "https://api.tagtoday.net", + 'name': 'TAG', + 'url': 'https://api.tagtoday.net', }, { - "features": ["gdpr_compliant", "tcf_registered", "ccpa_compliant"], - "name": "OneTrust", - "publisher_id": "ot_news_67890", - "url": "https://api.onetrust.com", + 'features': ['gdpr_compliant', 'tcf_registered', 'ccpa_compliant'], + 'name': 'OneTrust', + 'publisher_id': 'ot_news_67890', + 'url': 'https://api.onetrust.com', }, ], - "tags": { - "news": { - "description": "News and journalism content", - "name": "News Properties", + 'tags': { + 'news': { + 'description': 'News and journalism content', + 'name': 'News Properties', }, - "premium": { - "description": "High-quality, brand-safe properties", - "name": "Premium Properties", + 'premium': { + 'description': 'High-quality, brand-safe properties', + 'name': 'Premium Properties', }, }, }, { - "$schema": "/schemas/latest/adagents.json", - "authorized_agents": [ + '$schema': '/schemas/latest/adagents.json', + 'authorized_agents': [ { - "authorization_type": "signal_tags", - "authorized_for": "All Polk automotive signals via LiveRamp", - "signal_tags": ["automotive"], - "url": "https://liveramp.com/.well-known/adcp/signals", + 'authorization_type': 'signal_tags', + 'authorized_for': 'All Polk automotive signals via LiveRamp', + 'signal_tags': ['automotive'], + 'url': 'https://liveramp.com/.well-known/adcp/signals', }, { - "authorization_type": "signal_ids", - "authorized_for": "Polk premium signals only", - "signal_ids": ["likely_tesla_buyers"], - "url": "https://the-trade-desk.com/.well-known/adcp/signals", + 'authorization_type': 'signal_ids', + 'authorized_for': 'Polk premium signals only', + 'signal_ids': ['likely_tesla_buyers'], + 'url': 'https://the-trade-desk.com/.well-known/adcp/signals', }, ], - "contact": { - "domain": "polk.com", - "email": "partnerships@polk.com", - "name": "Polk Automotive Data", + 'contact': { + 'domain': 'polk.com', + 'email': 'partnerships@polk.com', + 'name': 'Polk Automotive Data', }, - "last_updated": "2025-01-15T10:00:00Z", - "signal_tags": { - "automotive": { - "description": "Vehicle-related audience segments", - "name": "Automotive Signals", + 'last_updated': '2025-01-15T10:00:00Z', + 'signal_tags': { + 'automotive': { + 'description': 'Vehicle-related audience segments', + 'name': 'Automotive Signals', }, - "premium": { - "description": "High-value premium audience segments", - "name": "Premium Signals", + 'premium': { + 'description': 'High-value premium audience segments', + 'name': 'Premium Signals', }, }, - "signals": [ + 'signals': [ { - "category": "purchase_intent", - "description": "Consumers modeled as likely to purchase a Tesla in the next 12 months based on vehicle registration, financial, and behavioral data", - "id": "likely_tesla_buyers", - "name": "Likely Tesla Buyers", - "tags": ["automotive", "premium"], - "value_type": "binary", + 'category': 'purchase_intent', + 'description': 'Consumers modeled as likely to purchase a Tesla in the next 12 months based on vehicle registration, financial, and behavioral data', + 'id': 'likely_tesla_buyers', + 'name': 'Likely Tesla Buyers', + 'tags': ['automotive', 'premium'], + 'value_type': 'binary', }, { - "allowed_values": [ - "tesla", - "bmw", - "mercedes", - "audi", - "lexus", - "other_luxury", - "non_luxury", + 'allowed_values': [ + 'tesla', + 'bmw', + 'mercedes', + 'audi', + 'lexus', + 'other_luxury', + 'non_luxury', ], - "category": "ownership", - "description": "Current vehicle make owned by the consumer", - "id": "vehicle_ownership", - "name": "Current Vehicle Ownership", - "tags": ["automotive"], - "value_type": "categorical", + 'category': 'ownership', + 'description': 'Current vehicle make owned by the consumer', + 'id': 'vehicle_ownership', + 'name': 'Current Vehicle Ownership', + 'tags': ['automotive'], + 'value_type': 'categorical', }, { - "category": "purchase_intent", - "description": "Likelihood score of purchasing any new vehicle in the next 6 months", - "id": "purchase_propensity", - "name": "Auto Purchase Propensity", - "range": {"max": 1, "min": 0, "unit": "score"}, - "tags": ["automotive"], - "value_type": "numeric", + 'category': 'purchase_intent', + 'description': 'Likelihood score of purchasing any new vehicle in the next 6 months', + 'id': 'purchase_propensity', + 'name': 'Auto Purchase Propensity', + 'range': {'max': 1, 'min': 0, 'unit': 'score'}, + 'tags': ['automotive'], + 'value_type': 'numeric', }, ], }, ], - title="AdCP Agents Authorization", + title='AdCP Agents Authorization', ), ] diff --git a/src/adcp/types/generated_poc/brand.py b/src/adcp/types/generated_poc/brand.py index 85e6a90b..44e6a8d7 100644 --- a/src/adcp/types/generated_poc/brand.py +++ b/src/adcp/types/generated_poc/brand.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: brand.json -# timestamp: 2026-02-18T17:56:28+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,18 +15,18 @@ class BrandDiscovery1(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) - field_schema: Annotated[str | None, Field(alias="$schema")] = None + field_schema: Annotated[str | None, Field(alias='$schema')] = None authoritative_location: Annotated[ - AnyUrl, Field(description="HTTPS URL of the authoritative brand.json file") + AnyUrl, Field(description='HTTPS URL of the authoritative brand.json file') ] last_updated: AwareDatetime | None = None class Trademark(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) mark: str number: str @@ -35,44 +35,44 @@ class Trademark(AdCPBaseModel): class Asset(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - asset_id: Annotated[str, Field(description="Unique identifier")] + asset_id: Annotated[str, Field(description='Unique identifier')] asset_type: Annotated[ - asset_content_type.AssetContentType, Field(description="Type of asset content") + asset_content_type.AssetContentType, Field(description='Type of asset content') ] - description: Annotated[str | None, Field(description="Asset description or usage notes")] = None + description: Annotated[str | None, Field(description='Asset description or usage notes')] = None duration_seconds: Annotated[ - float | None, Field(description="Video/audio duration in seconds") + float | None, Field(description='Video/audio duration in seconds') ] = None - file_size_bytes: Annotated[int | None, Field(description="File size in bytes")] = None + file_size_bytes: Annotated[int | None, Field(description='File size in bytes')] = None format: Annotated[str | None, Field(description="File format (e.g., 'jpg', 'mp4', 'mp3')")] = ( None ) - height: Annotated[int | None, Field(description="Image/video height in pixels")] = None + height: Annotated[int | None, Field(description='Image/video height in pixels')] = None metadata: Annotated[ - dict[str, Any] | None, Field(description="Additional asset-specific metadata") + dict[str, Any] | None, Field(description='Additional asset-specific metadata') ] = None - name: Annotated[str | None, Field(description="Human-readable name")] = None + name: Annotated[str | None, Field(description='Human-readable name')] = None tags: Annotated[ list[str] | None, Field(description="Tags for discovery (e.g., 'hero', 'lifestyle', 'product', 'holiday')"), ] = None - url: Annotated[AnyUrl, Field(description="URL to CDN-hosted asset file")] - width: Annotated[int | None, Field(description="Image/video width in pixels")] = None + url: Annotated[AnyUrl, Field(description='URL to CDN-hosted asset file')] + width: Annotated[int | None, Field(description='Image/video width in pixels')] = None class Brand1(RootModel[str]): - root: Annotated[str, Field(pattern="^([a-z0-9_]+|\\*)$")] + root: Annotated[str, Field(pattern='^([a-z0-9_]+|\\*)$')] class Country(RootModel[str]): - root: Annotated[str, Field(pattern="^[A-Z]{2}$")] + root: Annotated[str, Field(pattern='^[A-Z]{2}$')] class Avatar(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) avatar_id: str | None = None provider: str | None = None @@ -80,8 +80,8 @@ class Avatar(AdCPBaseModel): class Contact1(AdCPBaseModel): - email: Annotated[EmailStr | None, Field(description="Contact email")] = None - phone: Annotated[str | None, Field(description="Contact phone number")] = None + email: Annotated[EmailStr | None, Field(description='Contact email')] = None + phone: Annotated[str | None, Field(description='Contact phone number')] = None class Disclaimer(AdCPBaseModel): @@ -92,13 +92,13 @@ class Disclaimer(AdCPBaseModel): class Tone(AdCPBaseModel): attributes: Annotated[ - list[str] | None, Field(description="Personality traits that characterize the brand voice") + list[str] | None, Field(description='Personality traits that characterize the brand voice') ] = None donts: Annotated[ - list[str] | None, Field(description="Guardrails to avoid brand violations - what NOT to do") + list[str] | None, Field(description='Guardrails to avoid brand violations - what NOT to do') ] = None dos: Annotated[ - list[str] | None, Field(description="Guidance for copy generation - what TO do") + list[str] | None, Field(description='Guidance for copy generation - what TO do') ] = None voice: Annotated[ str | None, @@ -110,7 +110,7 @@ class Tone(AdCPBaseModel): class Voice(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) provider: str | None = None settings: dict[str, Any] | None = None @@ -119,30 +119,30 @@ class Voice(AdCPBaseModel): class BrandAgent(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) id: Annotated[ str, Field( - description="Agent identifier (useful for logging, multi-tenant DAMs)", - pattern="^[a-z0-9_]+$", + description='Agent identifier (useful for logging, multi-tenant DAMs)', + pattern='^[a-z0-9_]+$', ), ] - url: Annotated[AnyUrl, Field(description="Brand agent MCP endpoint URL")] + url: Annotated[AnyUrl, Field(description='Brand agent MCP endpoint URL')] class BrandId(RootModel[str]): root: Annotated[ str, Field( - description="Brand identifier within the house portfolio. Lowercase alphanumeric with underscores. House chooses this ID.", - pattern="^[a-z0-9_]+$", + description='Brand identifier within the house portfolio. Lowercase alphanumeric with underscores. House chooses this ID.', + pattern='^[a-z0-9_]+$', ), ] class ColorValue1(RootModel[str]): - root: Annotated[str, Field(pattern="^#[0-9A-Fa-f]{6}$")] + root: Annotated[str, Field(pattern='^#[0-9A-Fa-f]{6}$')] class ColorValue2Item(ColorValue1): @@ -159,7 +159,7 @@ class ColorValue(RootModel[ColorValue1 | ColorValue2]): class Colors(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) accent: ColorValue | None = None background: ColorValue | None = None @@ -172,32 +172,32 @@ class Domain(RootModel[str]): root: Annotated[ str, Field( - description="A valid domain name", - pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", + description='A valid domain name', + pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', ), ] class Fonts(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - font_urls: Annotated[list[AnyUrl] | None, Field(description="URLs to web font files")] = None - primary: Annotated[str | None, Field(description="Primary font family")] = None - secondary: Annotated[str | None, Field(description="Secondary font family")] = None + font_urls: Annotated[list[AnyUrl] | None, Field(description='URLs to web font files')] = None + primary: Annotated[str | None, Field(description='Primary font family')] = None + secondary: Annotated[str | None, Field(description='Secondary font family')] = None class Architecture(Enum): - branded_house = "branded_house" - house_of_brands = "house_of_brands" - hybrid = "hybrid" + branded_house = 'branded_house' + house_of_brands = 'house_of_brands' + hybrid = 'hybrid' class KellerType(Enum): - master = "master" - sub_brand = "sub_brand" - endorsed = "endorsed" - independent = "independent" + master = 'master' + sub_brand = 'sub_brand' + endorsed = 'endorsed' + independent = 'independent' class LocalizedName(RootModel[dict[str, str]]): @@ -205,50 +205,50 @@ class LocalizedName(RootModel[dict[str, str]]): class Background(Enum): - dark_bg = "dark-bg" - light_bg = "light-bg" - transparent_bg = "transparent-bg" + dark_bg = 'dark-bg' + light_bg = 'light-bg' + transparent_bg = 'transparent-bg' class Orientation(Enum): - square = "square" - horizontal = "horizontal" - vertical = "vertical" - stacked = "stacked" + square = 'square' + horizontal = 'horizontal' + vertical = 'vertical' + stacked = 'stacked' class Variant(Enum): - primary = "primary" - secondary = "secondary" - icon = "icon" - wordmark = "wordmark" - full_lockup = "full-lockup" + primary = 'primary' + secondary = 'secondary' + icon = 'icon' + wordmark = 'wordmark' + full_lockup = 'full-lockup' class Logo(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) background: Annotated[ Background | None, Field( - description="Background compatibility. dark-bg: use on dark backgrounds, light-bg: use on light backgrounds, transparent-bg: has transparent background" + description='Background compatibility. dark-bg: use on dark backgrounds, light-bg: use on light backgrounds, transparent-bg: has transparent background' ), ] = None - height: Annotated[int | None, Field(description="Height in pixels")] = None + height: Annotated[int | None, Field(description='Height in pixels')] = None orientation: Annotated[ Orientation | None, Field( - description="Logo aspect ratio orientation. square: ~1:1, horizontal: wide, vertical: tall, stacked: vertically arranged elements" + description='Logo aspect ratio orientation. square: ~1:1, horizontal: wide, vertical: tall, stacked: vertically arranged elements' ), ] = None tags: Annotated[ list[str] | None, Field( - description="Additional semantic tags for custom categorization beyond the standard orientation, background, and variant fields" + description='Additional semantic tags for custom categorization beyond the standard orientation, background, and variant fields' ), ] = None - url: Annotated[AnyUrl, Field(description="URL to the logo asset")] + url: Annotated[AnyUrl, Field(description='URL to the logo asset')] usage: Annotated[ str | None, Field( @@ -258,123 +258,123 @@ class Logo(AdCPBaseModel): variant: Annotated[ Variant | None, Field( - description="Logo variant type. primary: main logo, secondary: alternative, icon: symbol only, wordmark: text only, full-lockup: complete logo" + description='Logo variant type. primary: main logo, secondary: alternative, icon: symbol only, wordmark: text only, full-lockup: complete logo' ), ] = None - width: Annotated[int | None, Field(description="Width in pixels")] = None + width: Annotated[int | None, Field(description='Width in pixels')] = None class AgenticCheckout(AdCPBaseModel): - endpoint: Annotated[AnyUrl, Field(description="Base URL for checkout session API")] + endpoint: Annotated[AnyUrl, Field(description='Base URL for checkout session API')] spec: Annotated[ - Literal["openai_agentic_checkout_v1"], Field(description="Checkout API specification") + Literal['openai_agentic_checkout_v1'], Field(description='Checkout API specification') ] supported_payment_providers: Annotated[ - list[str] | None, Field(description="Payment providers supported by this checkout endpoint") + list[str] | None, Field(description='Payment providers supported by this checkout endpoint') ] = None class FeedFormat(Enum): - google_merchant_center = "google_merchant_center" - facebook_catalog = "facebook_catalog" - openai_product_feed = "openai_product_feed" - custom = "custom" + google_merchant_center = 'google_merchant_center' + facebook_catalog = 'facebook_catalog' + openai_product_feed = 'openai_product_feed' + custom = 'custom' class UpdateFrequency(Enum): - realtime = "realtime" - hourly = "hourly" - daily = "daily" - weekly = "weekly" + realtime = 'realtime' + hourly = 'hourly' + daily = 'daily' + weekly = 'weekly' class ProductCatalog(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) agentic_checkout: Annotated[ - AgenticCheckout | None, Field(description="Agentic checkout endpoint configuration") + AgenticCheckout | None, Field(description='Agentic checkout endpoint configuration') ] = None categories: Annotated[ - list[str] | None, Field(description="Product categories available in the catalog") + list[str] | None, Field(description='Product categories available in the catalog') ] = None - feed_format: Annotated[FeedFormat | None, Field(description="Format of the product feed")] = ( + feed_format: Annotated[FeedFormat | None, Field(description='Format of the product feed')] = ( None ) - feed_url: Annotated[AnyUrl, Field(description="URL to product catalog feed")] + feed_url: Annotated[AnyUrl, Field(description='URL to product catalog feed')] last_updated: Annotated[ - AwareDatetime | None, Field(description="When the product catalog was last updated") + AwareDatetime | None, Field(description='When the product catalog was last updated') ] = None update_frequency: Annotated[ - UpdateFrequency | None, Field(description="How frequently the product catalog is updated") + UpdateFrequency | None, Field(description='How frequently the product catalog is updated') ] = None class Store(Enum): - apple = "apple" - google = "google" - amazon = "amazon" - roku = "roku" - samsung = "samsung" - lg = "lg" - other = "other" + apple = 'apple' + google = 'google' + amazon = 'amazon' + roku = 'roku' + samsung = 'samsung' + lg = 'lg' + other = 'other' class Type(Enum): - website = "website" - mobile_app = "mobile_app" - ctv_app = "ctv_app" - desktop_app = "desktop_app" - dooh = "dooh" - podcast = "podcast" - radio = "radio" - streaming_audio = "streaming_audio" + website = 'website' + mobile_app = 'mobile_app' + ctv_app = 'ctv_app' + desktop_app = 'desktop_app' + dooh = 'dooh' + podcast = 'podcast' + radio = 'radio' + streaming_audio = 'streaming_audio' class Property(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) identifier: Annotated[ str, Field( - description="Property identifier - domain for websites, bundle ID for apps", + description='Property identifier - domain for websites, bundle ID for apps', min_length=1, ), ] primary: Annotated[ - bool | None, Field(description="Whether this is the primary property for the brand") + bool | None, Field(description='Whether this is the primary property for the brand') ] = False region: Annotated[ str | None, Field( - description="ISO 3166-1 alpha-2 country code or 'global'", pattern="^([A-Z]{2}|global)$" + description="ISO 3166-1 alpha-2 country code or 'global'", pattern='^([A-Z]{2}|global)$' ), ] = None - store: Annotated[Store | None, Field(description="App store for mobile/CTV apps")] = None - type: Annotated[Type, Field(description="Property type")] + store: Annotated[Store | None, Field(description='App store for mobile/CTV apps')] = None + type: Annotated[Type, Field(description='Property type')] class BrandDiscovery2(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) - field_schema: Annotated[str | None, Field(alias="$schema")] = None - house: Annotated[Domain, Field(description="House domain to fetch brand portfolio from")] + field_schema: Annotated[str | None, Field(alias='$schema')] = None + house: Annotated[Domain, Field(description='House domain to fetch brand portfolio from')] last_updated: AwareDatetime | None = None note: str | None = None region: Annotated[ str | None, Field( - description="ISO 3166-1 alpha-2 country code if this is a regional domain", - pattern="^[A-Z]{2}$", + description='ISO 3166-1 alpha-2 country code if this is a regional domain', + pattern='^[A-Z]{2}$', ), ] = None class AuthorizedOperator(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) brands: Annotated[ list[Brand1], @@ -386,7 +386,7 @@ class AuthorizedOperator(AdCPBaseModel): countries: Annotated[ list[Country] | None, Field( - description="ISO 3166-1 alpha-2 country codes where this authorization applies. Omit for global authorization." + description='ISO 3166-1 alpha-2 country codes where this authorization applies. Omit for global authorization.' ), ] = None domain: Annotated[ @@ -396,59 +396,59 @@ class AuthorizedOperator(AdCPBaseModel): class Brand(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - assets: Annotated[list[Asset] | None, Field(description="Brand asset library")] = None - avatar: Annotated[Avatar | None, Field(description="Visual avatar configuration")] = None + assets: Annotated[list[Asset] | None, Field(description='Brand asset library')] = None + avatar: Annotated[Avatar | None, Field(description='Visual avatar configuration')] = None brand_agent: Annotated[ - BrandAgent | None, Field(description="Brand agent that provides dynamic brand data via MCP") + BrandAgent | None, Field(description='Brand agent that provides dynamic brand data via MCP') ] = None colors: Colors | None = None - contact: Annotated[Contact1 | None, Field(description="Brand-level contact information")] = None - description: Annotated[str | None, Field(description="Brand description")] = None + contact: Annotated[Contact1 | None, Field(description='Brand-level contact information')] = None + description: Annotated[str | None, Field(description='Brand description')] = None disclaimers: Annotated[ - list[Disclaimer] | None, Field(description="Legal disclaimers for creatives") + list[Disclaimer] | None, Field(description='Legal disclaimers for creatives') ] = None fonts: Fonts | None = None id: Annotated[ - BrandId, Field(description="Brand identifier within the house. House chooses this ID.") + BrandId, Field(description='Brand identifier within the house. House chooses this ID.') ] industry: Annotated[ str | None, Field(description="Industry or vertical (e.g., 'retail', 'automotive', 'cpg')") ] = None keller_type: KellerType | None = None - logos: Annotated[list[Logo] | None, Field(description="Brand logo assets")] = None + logos: Annotated[list[Logo] | None, Field(description='Brand logo assets')] = None names: Annotated[ list[LocalizedName], Field( - description="Localized brand names. Multiple entries per language allowed for aliases.", + description='Localized brand names. Multiple entries per language allowed for aliases.', min_length=1, ), ] parent_brand: Annotated[ - BrandId | None, Field(description="Parent brand ID for sub-brands and endorsed brands") + BrandId | None, Field(description='Parent brand ID for sub-brands and endorsed brands') ] = None privacy_policy_url: Annotated[ AnyUrl | None, Field(description="URL to the brand's privacy policy") ] = None product_catalog: ProductCatalog | None = None properties: Annotated[ - list[Property] | None, Field(description="Digital properties owned by this brand") + list[Property] | None, Field(description='Digital properties owned by this brand') ] = None - tagline: Annotated[str | None, Field(description="Brand tagline or slogan")] = None - target_audience: Annotated[str | None, Field(description="Primary target audience")] = None + tagline: Annotated[str | None, Field(description='Brand tagline or slogan')] = None + target_audience: Annotated[str | None, Field(description='Primary target audience')] = None tone: Annotated[ - str | Tone | None, Field(description="Brand voice and messaging tone guidelines") + str | Tone | None, Field(description='Brand voice and messaging tone guidelines') ] = None url: Annotated[ - AnyUrl | None, Field(description="Primary brand URL for context and asset discovery") + AnyUrl | None, Field(description='Primary brand URL for context and asset discovery') ] = None - voice: Annotated[Voice | None, Field(description="TTS voice configuration")] = None + voice: Annotated[Voice | None, Field(description='TTS voice configuration')] = None class Contact(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) domain: Domain | None = None email: Annotated[EmailStr | None, Field(max_length=255)] = None @@ -457,27 +457,27 @@ class Contact(AdCPBaseModel): class House(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) architecture: Annotated[ Architecture | None, Field( - description="Brand architecture model: branded_house (Google), house_of_brands (P&G), hybrid (Nike)" + description='Brand architecture model: branded_house (Google), house_of_brands (P&G), hybrid (Nike)' ), ] = None domain: Annotated[Domain, Field(description="The house's domain where brand.json is hosted")] - name: Annotated[str, Field(description="Primary display name of the house", min_length=1)] + name: Annotated[str, Field(description='Primary display name of the house', min_length=1)] names: Annotated[ list[LocalizedName] | None, - Field(description="Localized house names including legal name, stock symbol, etc."), + Field(description='Localized house names including legal name, stock symbol, etc.'), ] = None class BrandDiscovery3(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) - field_schema: Annotated[str | None, Field(alias="$schema")] = None + field_schema: Annotated[str | None, Field(alias='$schema')] = None brand_agent: BrandAgent contact: Contact | None = None last_updated: AwareDatetime | None = None @@ -486,16 +486,16 @@ class BrandDiscovery3(AdCPBaseModel): class BrandDiscovery4(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) - field_schema: Annotated[str | None, Field(alias="$schema")] = None + field_schema: Annotated[str | None, Field(alias='$schema')] = None authorized_operators: Annotated[ list[AuthorizedOperator] | None, Field( description="Entities authorized to represent brands from this house. Third parties (sellers, platforms) can verify an operator's authorization by checking this list. Operators are identified by domain." ), ] = None - brands: Annotated[list[Brand], Field(description="Brands owned by this house", min_length=1)] + brands: Annotated[list[Brand], Field(description='Brands owned by this house', min_length=1)] contact: Contact | None = None house: House last_updated: AwareDatetime | None = None @@ -509,187 +509,187 @@ class BrandDiscovery( root: Annotated[ BrandDiscovery1 | BrandDiscovery2 | BrandDiscovery3 | BrandDiscovery4, Field( - description="Brand identity and discovery file. Hosted at /.well-known/brand.json on house domains. Contains the full brand portfolio with identity, creative assets, and digital properties. Brands are identified by house + brand_id (like properties are identified by publisher + property_id). Supports variants: house portfolio (full brand data), brand agent (agent provides brand info via MCP), house redirect (pointer to house domain), or authoritative location redirect.", + description='Brand identity and discovery file. Hosted at /.well-known/brand.json on house domains. Contains the full brand portfolio with identity, creative assets, and digital properties. Brands are identified by house + brand_id (like properties are identified by publisher + property_id). Supports variants: house portfolio (full brand data), brand agent (agent provides brand info via MCP), house redirect (pointer to house domain), or authoritative location redirect.', examples=[ { - "$schema": "/schemas/latest/brand.json", - "authoritative_location": "https://adcontextprotocol.org/brand/abc123/brand.json", + '$schema': '/schemas/latest/brand.json', + 'authoritative_location': 'https://adcontextprotocol.org/brand/abc123/brand.json', }, { - "$schema": "/schemas/latest/brand.json", - "house": "nikeinc.com", - "note": "Redirect to house domain for full brand portfolio", + '$schema': '/schemas/latest/brand.json', + 'house': 'nikeinc.com', + 'note': 'Redirect to house domain for full brand portfolio', }, { - "$schema": "/schemas/latest/brand.json", - "brand_agent": {"id": "acme_brand_agent", "url": "https://agent.acme.com/mcp"}, - "version": "1.0", + '$schema': '/schemas/latest/brand.json', + 'brand_agent': {'id': 'acme_brand_agent', 'url': 'https://agent.acme.com/mcp'}, + 'version': '1.0', }, { - "$schema": "/schemas/latest/brand.json", - "brands": [ + '$schema': '/schemas/latest/brand.json', + 'brands': [ { - "colors": {"primary": "#FF6600", "secondary": "#0066CC"}, - "contact": {"email": "brands@pg.com"}, - "description": "Laundry detergent brand", - "id": "tide", - "industry": "cpg", - "keller_type": "master", - "logos": [ + 'colors': {'primary': '#FF6600', 'secondary': '#0066CC'}, + 'contact': {'email': 'brands@pg.com'}, + 'description': 'Laundry detergent brand', + 'id': 'tide', + 'industry': 'cpg', + 'keller_type': 'master', + 'logos': [ { - "background": "transparent-bg", - "orientation": "square", - "url": "https://cdn.pg.com/tide/logo-square.png", - "usage": "Primary logo for general use", - "variant": "primary", + 'background': 'transparent-bg', + 'orientation': 'square', + 'url': 'https://cdn.pg.com/tide/logo-square.png', + 'usage': 'Primary logo for general use', + 'variant': 'primary', }, { - "background": "dark-bg", - "orientation": "horizontal", - "url": "https://cdn.pg.com/tide/logo-horizontal-dark.png", - "usage": "Full lockup for dark backgrounds", - "variant": "full-lockup", + 'background': 'dark-bg', + 'orientation': 'horizontal', + 'url': 'https://cdn.pg.com/tide/logo-horizontal-dark.png', + 'usage': 'Full lockup for dark backgrounds', + 'variant': 'full-lockup', }, ], - "names": [{"en": "Tide"}, {"es": "Tide"}, {"zh": "汰渍"}], - "properties": [ - {"identifier": "tide.com", "primary": True, "type": "website"}, + 'names': [{'en': 'Tide'}, {'es': 'Tide'}, {'zh': '汰渍'}], + 'properties': [ + {'identifier': 'tide.com', 'primary': True, 'type': 'website'}, { - "identifier": "com.pg.tide", - "store": "apple", - "type": "mobile_app", + 'identifier': 'com.pg.tide', + 'store': 'apple', + 'type': 'mobile_app', }, ], - "tagline": "Tide's In, Dirt's Out", - "tone": { - "attributes": ["reliable", "family-friendly", "confident"], - "donts": ["Avoid technical jargon", "Don't be overly serious"], - "dos": ["Use simple, direct language", "Emphasize cleaning power"], - "voice": "clean, fresh, trustworthy", + 'tagline': "Tide's In, Dirt's Out", + 'tone': { + 'attributes': ['reliable', 'family-friendly', 'confident'], + 'donts': ['Avoid technical jargon', "Don't be overly serious"], + 'dos': ['Use simple, direct language', 'Emphasize cleaning power'], + 'voice': 'clean, fresh, trustworthy', }, - "url": "https://tide.com", + 'url': 'https://tide.com', }, { - "colors": {"primary": "#00A0D2"}, - "id": "pampers", - "industry": "cpg", - "keller_type": "master", - "logos": [ + 'colors': {'primary': '#00A0D2'}, + 'id': 'pampers', + 'industry': 'cpg', + 'keller_type': 'master', + 'logos': [ { - "orientation": "horizontal", - "url": "https://cdn.pg.com/pampers/logo.png", - "variant": "primary", + 'orientation': 'horizontal', + 'url': 'https://cdn.pg.com/pampers/logo.png', + 'variant': 'primary', } ], - "names": [{"en": "Pampers"}], - "properties": [ - {"identifier": "pampers.com", "primary": True, "type": "website"} + 'names': [{'en': 'Pampers'}], + 'properties': [ + {'identifier': 'pampers.com', 'primary': True, 'type': 'website'} ], - "url": "https://pampers.com", + 'url': 'https://pampers.com', }, ], - "contact": {"email": "brands@pg.com", "name": "P&G Brand Team"}, - "house": { - "architecture": "house_of_brands", - "domain": "pg.com", - "name": "Procter & Gamble", + 'contact': {'email': 'brands@pg.com', 'name': 'P&G Brand Team'}, + 'house': { + 'architecture': 'house_of_brands', + 'domain': 'pg.com', + 'name': 'Procter & Gamble', }, - "last_updated": "2026-01-15T10:00:00Z", - "version": "1.0", + 'last_updated': '2026-01-15T10:00:00Z', + 'version': '1.0', }, { - "$schema": "/schemas/latest/brand.json", - "authorized_operators": [ + '$schema': '/schemas/latest/brand.json', + 'authorized_operators': [ { - "brands": ["nike", "air_jordan"], - "countries": ["US", "GB", "DE", "FR"], - "domain": "wpp.com", + 'brands': ['nike', 'air_jordan'], + 'countries': ['US', 'GB', 'DE', 'FR'], + 'domain': 'wpp.com', }, - {"brands": ["nike"], "countries": ["JP"], "domain": "dentsu.co.jp"}, - {"brands": ["*"], "domain": "nike.com"}, + {'brands': ['nike'], 'countries': ['JP'], 'domain': 'dentsu.co.jp'}, + {'brands': ['*'], 'domain': 'nike.com'}, ], - "brands": [ + 'brands': [ { - "colors": {"accent": "#FF6600", "primary": "#111111"}, - "id": "nike", - "keller_type": "master", - "logos": [ + 'colors': {'accent': '#FF6600', 'primary': '#111111'}, + 'id': 'nike', + 'keller_type': 'master', + 'logos': [ { - "background": "dark-bg", - "orientation": "horizontal", - "url": "https://cdn.nike.com/swoosh-dark.svg", - "usage": "Swoosh icon for dark backgrounds", - "variant": "icon", + 'background': 'dark-bg', + 'orientation': 'horizontal', + 'url': 'https://cdn.nike.com/swoosh-dark.svg', + 'usage': 'Swoosh icon for dark backgrounds', + 'variant': 'icon', }, { - "background": "light-bg", - "orientation": "horizontal", - "url": "https://cdn.nike.com/logo-full.svg", - "usage": "Full logo with wordmark for light backgrounds", - "variant": "full-lockup", + 'background': 'light-bg', + 'orientation': 'horizontal', + 'url': 'https://cdn.nike.com/logo-full.svg', + 'usage': 'Full logo with wordmark for light backgrounds', + 'variant': 'full-lockup', }, ], - "names": [{"en": "Nike"}, {"zh": "耐克"}, {"ja": "ナイキ"}], - "properties": [ - {"identifier": "nike.com", "primary": True, "type": "website"}, - {"identifier": "nike.cn", "region": "CN", "type": "website"}, + 'names': [{'en': 'Nike'}, {'zh': '耐克'}, {'ja': 'ナイキ'}], + 'properties': [ + {'identifier': 'nike.com', 'primary': True, 'type': 'website'}, + {'identifier': 'nike.cn', 'region': 'CN', 'type': 'website'}, { - "identifier": "com.nike.omega", - "store": "apple", - "type": "mobile_app", + 'identifier': 'com.nike.omega', + 'store': 'apple', + 'type': 'mobile_app', }, ], - "tagline": "Just Do It", - "tone": "inspirational, bold, athletic", - "url": "https://nike.com", + 'tagline': 'Just Do It', + 'tone': 'inspirational, bold, athletic', + 'url': 'https://nike.com', }, { - "brand_agent": {"id": "nike_dam", "url": "https://dam.nike.com/mcp"}, - "colors": {"primary": "#CE1141", "secondary": "#111111"}, - "id": "air_jordan", - "keller_type": "endorsed", - "logos": [ + 'brand_agent': {'id': 'nike_dam', 'url': 'https://dam.nike.com/mcp'}, + 'colors': {'primary': '#CE1141', 'secondary': '#111111'}, + 'id': 'air_jordan', + 'keller_type': 'endorsed', + 'logos': [ { - "background": "transparent-bg", - "orientation": "square", - "url": "https://cdn.nike.com/jumpman.svg", - "variant": "icon", + 'background': 'transparent-bg', + 'orientation': 'square', + 'url': 'https://cdn.nike.com/jumpman.svg', + 'variant': 'icon', } ], - "names": [{"en": "Air Jordan"}, {"en": "Jordan"}, {"en": "Jumpman"}], - "parent_brand": "nike", - "properties": [ - {"identifier": "jordan.com", "primary": True, "type": "website"}, - {"identifier": "jumpman23.com", "type": "website"}, + 'names': [{'en': 'Air Jordan'}, {'en': 'Jordan'}, {'en': 'Jumpman'}], + 'parent_brand': 'nike', + 'properties': [ + {'identifier': 'jordan.com', 'primary': True, 'type': 'website'}, + {'identifier': 'jumpman23.com', 'type': 'website'}, ], - "url": "https://jordan.com", + 'url': 'https://jordan.com', }, { - "id": "converse", - "keller_type": "independent", - "logos": [ + 'id': 'converse', + 'keller_type': 'independent', + 'logos': [ { - "orientation": "square", - "url": "https://cdn.converse.com/star.svg", - "variant": "icon", + 'orientation': 'square', + 'url': 'https://cdn.converse.com/star.svg', + 'variant': 'icon', } ], - "names": [{"en": "Converse"}], - "properties": [ - {"identifier": "converse.com", "primary": True, "type": "website"} + 'names': [{'en': 'Converse'}], + 'properties': [ + {'identifier': 'converse.com', 'primary': True, 'type': 'website'} ], - "url": "https://converse.com", + 'url': 'https://converse.com', }, ], - "house": { - "architecture": "hybrid", - "domain": "nikeinc.com", - "name": "Nike, Inc.", + 'house': { + 'architecture': 'hybrid', + 'domain': 'nikeinc.com', + 'name': 'Nike, Inc.', }, - "last_updated": "2026-01-15T10:00:00Z", - "version": "1.0", + 'last_updated': '2026-01-15T10:00:00Z', + 'version': '1.0', }, ], - title="Brand Discovery", + title='Brand Discovery', ), ] diff --git a/src/adcp/types/generated_poc/content_standards/artifact.py b/src/adcp/types/generated_poc/content_standards/artifact.py index 02e6ac93..4f5311d8 100644 --- a/src/adcp/types/generated_poc/content_standards/artifact.py +++ b/src/adcp/types/generated_poc/content_standards/artifact.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: content_standards/artifact.json -# timestamp: 2026-02-18T17:56:28+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,19 +15,19 @@ class Role(Enum): - title = "title" - paragraph = "paragraph" - heading = "heading" - caption = "caption" - quote = "quote" - list_item = "list_item" - description = "description" + title = 'title' + paragraph = 'paragraph' + heading = 'heading' + caption = 'caption' + quote = 'quote' + list_item = 'list_item' + description = 'description' class Assets(AdCPBaseModel): - content: Annotated[str, Field(description="Text content")] + content: Annotated[str, Field(description='Text content')] heading_level: Annotated[ - int | None, Field(description="Heading level (1-6), only for role=heading", ge=1, le=6) + int | None, Field(description='Heading level (1-6), only for role=heading', ge=1, le=6) ] = None language: Annotated[ str | None, @@ -41,123 +41,123 @@ class Assets(AdCPBaseModel): description="Role of this text in the document. Use 'title' for the main artifact title, 'description' for summaries." ), ] = None - type: Literal["text"] + type: Literal['text'] class TranscriptSource(Enum): - original_script = "original_script" - subtitles = "subtitles" - closed_captions = "closed_captions" - dub = "dub" - generated = "generated" + original_script = 'original_script' + subtitles = 'subtitles' + closed_captions = 'closed_captions' + dub = 'dub' + generated = 'generated' class TranscriptSource1(Enum): - original_script = "original_script" - closed_captions = "closed_captions" - generated = "generated" + original_script = 'original_script' + closed_captions = 'closed_captions' + generated = 'generated' class Identifiers(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - apple_podcast_id: Annotated[str | None, Field(description="Apple Podcasts ID")] = None - podcast_guid: Annotated[str | None, Field(description="Podcast GUID (from RSS feed)")] = None - rss_url: Annotated[AnyUrl | None, Field(description="RSS feed URL")] = None - spotify_show_id: Annotated[str | None, Field(description="Spotify show ID")] = None - youtube_video_id: Annotated[str | None, Field(description="YouTube video ID")] = None + apple_podcast_id: Annotated[str | None, Field(description='Apple Podcasts ID')] = None + podcast_guid: Annotated[str | None, Field(description='Podcast GUID (from RSS feed)')] = None + rss_url: Annotated[AnyUrl | None, Field(description='RSS feed URL')] = None + spotify_show_id: Annotated[str | None, Field(description='Spotify show ID')] = None + youtube_video_id: Annotated[str | None, Field(description='YouTube video ID')] = None class Metadata(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - author: Annotated[str | None, Field(description="Artifact author name")] = None - canonical: Annotated[AnyUrl | None, Field(description="Canonical URL")] = None + author: Annotated[str | None, Field(description='Artifact author name')] = None + canonical: Annotated[AnyUrl | None, Field(description='Canonical URL')] = None json_ld: Annotated[ - list[dict[str, Any]] | None, Field(description="JSON-LD structured data (schema.org)") + list[dict[str, Any]] | None, Field(description='JSON-LD structured data (schema.org)') ] = None - keywords: Annotated[str | None, Field(description="Artifact keywords")] = None + keywords: Annotated[str | None, Field(description='Artifact keywords')] = None open_graph: Annotated[ - dict[str, Any] | None, Field(description="Open Graph protocol metadata") + dict[str, Any] | None, Field(description='Open Graph protocol metadata') ] = None - twitter_card: Annotated[dict[str, Any] | None, Field(description="Twitter Card metadata")] = ( + twitter_card: Annotated[dict[str, Any] | None, Field(description='Twitter Card metadata')] = ( None ) class AssetAccess1(AdCPBaseModel): - method: Literal["bearer_token"] - token: Annotated[str, Field(description="OAuth2 bearer token for Authorization header")] + method: Literal['bearer_token'] + token: Annotated[str, Field(description='OAuth2 bearer token for Authorization header')] class Provider(Enum): - gcp = "gcp" - aws = "aws" + gcp = 'gcp' + aws = 'aws' class AssetAccess2(AdCPBaseModel): credentials: Annotated[ - dict[str, Any] | None, Field(description="Service account credentials") + dict[str, Any] | None, Field(description='Service account credentials') ] = None - method: Literal["service_account"] - provider: Annotated[Provider, Field(description="Cloud provider")] + method: Literal['service_account'] + provider: Annotated[Provider, Field(description='Cloud provider')] class AssetAccess3(AdCPBaseModel): - method: Literal["signed_url"] + method: Literal['signed_url'] class AssetAccess(RootModel[AssetAccess1 | AssetAccess2 | AssetAccess3]): root: Annotated[ AssetAccess1 | AssetAccess2 | AssetAccess3, - Field(description="Authentication for accessing secured asset URLs"), + Field(description='Authentication for accessing secured asset URLs'), ] class Assets1(AdCPBaseModel): - access: Annotated[AssetAccess | None, Field(description="Authentication for secured URLs")] = ( + access: Annotated[AssetAccess | None, Field(description='Authentication for secured URLs')] = ( None ) - alt_text: Annotated[str | None, Field(description="Alt text or image description")] = None - caption: Annotated[str | None, Field(description="Image caption")] = None - height: Annotated[int | None, Field(description="Image height in pixels")] = None - type: Literal["image"] - url: Annotated[AnyUrl, Field(description="Image URL")] - width: Annotated[int | None, Field(description="Image width in pixels")] = None + alt_text: Annotated[str | None, Field(description='Alt text or image description')] = None + caption: Annotated[str | None, Field(description='Image caption')] = None + height: Annotated[int | None, Field(description='Image height in pixels')] = None + type: Literal['image'] + url: Annotated[AnyUrl, Field(description='Image URL')] + width: Annotated[int | None, Field(description='Image width in pixels')] = None class Assets2(AdCPBaseModel): - access: Annotated[AssetAccess | None, Field(description="Authentication for secured URLs")] = ( + access: Annotated[AssetAccess | None, Field(description='Authentication for secured URLs')] = ( None ) - duration_ms: Annotated[int | None, Field(description="Video duration in milliseconds")] = None - thumbnail_url: Annotated[AnyUrl | None, Field(description="Video thumbnail URL")] = None - transcript: Annotated[str | None, Field(description="Video transcript")] = None + duration_ms: Annotated[int | None, Field(description='Video duration in milliseconds')] = None + thumbnail_url: Annotated[AnyUrl | None, Field(description='Video thumbnail URL')] = None + transcript: Annotated[str | None, Field(description='Video transcript')] = None transcript_source: Annotated[ - TranscriptSource | None, Field(description="How the transcript was generated") + TranscriptSource | None, Field(description='How the transcript was generated') ] = None - type: Literal["video"] - url: Annotated[AnyUrl, Field(description="Video URL")] + type: Literal['video'] + url: Annotated[AnyUrl, Field(description='Video URL')] class Assets3(AdCPBaseModel): - access: Annotated[AssetAccess | None, Field(description="Authentication for secured URLs")] = ( + access: Annotated[AssetAccess | None, Field(description='Authentication for secured URLs')] = ( None ) - duration_ms: Annotated[int | None, Field(description="Audio duration in milliseconds")] = None - transcript: Annotated[str | None, Field(description="Audio transcript")] = None + duration_ms: Annotated[int | None, Field(description='Audio duration in milliseconds')] = None + transcript: Annotated[str | None, Field(description='Audio transcript')] = None transcript_source: Annotated[ - TranscriptSource1 | None, Field(description="How the transcript was generated") + TranscriptSource1 | None, Field(description='How the transcript was generated') ] = None - type: Literal["audio"] - url: Annotated[AnyUrl, Field(description="Audio URL")] + type: Literal['audio'] + url: Annotated[AnyUrl, Field(description='Audio URL')] class Artifact(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) artifact_id: Annotated[ str, @@ -168,36 +168,36 @@ class Artifact(AdCPBaseModel): assets: Annotated[ list[Assets | Assets1 | Assets2 | Assets3], Field( - description="Artifact assets in document flow order - text blocks, images, video, audio" + description='Artifact assets in document flow order - text blocks, images, video, audio' ), ] format_id: Annotated[ format_id_1.FormatId | None, Field( - description="Optional reference to a format definition. Uses the same format registry as creative formats." + description='Optional reference to a format definition. Uses the same format registry as creative formats.' ), ] = None identifiers: Annotated[ - Identifiers | None, Field(description="Platform-specific identifiers for this artifact") + Identifiers | None, Field(description='Platform-specific identifiers for this artifact') ] = None last_update_time: Annotated[ AwareDatetime | None, - Field(description="When the artifact was last modified (ISO 8601 format)"), + Field(description='When the artifact was last modified (ISO 8601 format)'), ] = None metadata: Annotated[ - Metadata | None, Field(description="Rich metadata extracted from the artifact") + Metadata | None, Field(description='Rich metadata extracted from the artifact') ] = None property_id: Annotated[ identifier.Identifier, - Field(description="Identifier for the property where this artifact appears"), + Field(description='Identifier for the property where this artifact appears'), ] published_time: Annotated[ - AwareDatetime | None, Field(description="When the artifact was published (ISO 8601 format)") + AwareDatetime | None, Field(description='When the artifact was published (ISO 8601 format)') ] = None url: Annotated[ AnyUrl | None, Field( - description="Optional URL for this artifact (web page, podcast feed, video page). Not all artifacts have URLs (e.g., Instagram content, podcast segments, TV scenes)." + description='Optional URL for this artifact (web page, podcast feed, video page). Not all artifacts have URLs (e.g., Instagram content, podcast segments, TV scenes).' ), ] = None variant_id: Annotated[ diff --git a/src/adcp/types/generated_poc/content_standards/artifact_webhook_payload.py b/src/adcp/types/generated_poc/content_standards/artifact_webhook_payload.py index dd6b08e9..ec55dab7 100644 --- a/src/adcp/types/generated_poc/content_standards/artifact_webhook_payload.py +++ b/src/adcp/types/generated_poc/content_standards/artifact_webhook_payload.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: content_standards/artifact_webhook_payload.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,51 +14,51 @@ class Pagination(AdCPBaseModel): - batch_number: Annotated[int | None, Field(description="Current batch number (1-indexed)")] = ( + batch_number: Annotated[int | None, Field(description='Current batch number (1-indexed)')] = ( None ) total_artifacts: Annotated[ - int | None, Field(description="Total artifacts in the delivery period") + int | None, Field(description='Total artifacts in the delivery period') ] = None total_batches: Annotated[ - int | None, Field(description="Total batches for this delivery period") + int | None, Field(description='Total batches for this delivery period') ] = None class Artifact(AdCPBaseModel): - artifact: Annotated[artifact_1.Artifact, Field(description="The content artifact")] + artifact: Annotated[artifact_1.Artifact, Field(description='The content artifact')] delivered_at: Annotated[ - AwareDatetime, Field(description="When the impression was delivered (ISO 8601)") + AwareDatetime, Field(description='When the impression was delivered (ISO 8601)') ] impression_id: Annotated[ str | None, - Field(description="Optional impression identifier for correlation with delivery reports"), + Field(description='Optional impression identifier for correlation with delivery reports'), ] = None package_id: Annotated[ - str | None, Field(description="Package within the media buy this artifact relates to") + str | None, Field(description='Package within the media buy this artifact relates to') ] = None class ArtifactWebhookPayload(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) artifacts: Annotated[ - list[Artifact], Field(description="Content artifacts from delivered impressions") + list[Artifact], Field(description='Content artifacts from delivered impressions') ] batch_id: Annotated[ str, Field( - description="Unique identifier for this batch of artifacts. Use for deduplication and acknowledgment." + description='Unique identifier for this batch of artifacts. Use for deduplication and acknowledgment.' ), ] ext: ext_1.ExtensionObject | None = None media_buy_id: Annotated[ - str, Field(description="Media buy identifier these artifacts belong to") + str, Field(description='Media buy identifier these artifacts belong to') ] pagination: Annotated[ - Pagination | None, Field(description="Pagination info when batching large artifact sets") + Pagination | None, Field(description='Pagination info when batching large artifact sets') ] = None timestamp: Annotated[ - AwareDatetime, Field(description="When this batch was generated (ISO 8601)") + AwareDatetime, Field(description='When this batch was generated (ISO 8601)') ] diff --git a/src/adcp/types/generated_poc/content_standards/calibrate_content_request.py b/src/adcp/types/generated_poc/content_standards/calibrate_content_request.py index a4597086..d05d0da0 100644 --- a/src/adcp/types/generated_poc/content_standards/calibrate_content_request.py +++ b/src/adcp/types/generated_poc/content_standards/calibrate_content_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: content_standards/calibrate_content_request.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -13,5 +13,5 @@ class CalibrateContentRequest(AdCPBaseModel): - artifact: Annotated[artifact_1.Artifact, Field(description="Artifact to evaluate")] - standards_id: Annotated[str, Field(description="Standards configuration to calibrate against")] + artifact: Annotated[artifact_1.Artifact, Field(description='Artifact to evaluate')] + standards_id: Annotated[str, Field(description='Standards configuration to calibrate against')] diff --git a/src/adcp/types/generated_poc/content_standards/calibrate_content_response.py b/src/adcp/types/generated_poc/content_standards/calibrate_content_response.py index 7827ace8..de6f660a 100644 --- a/src/adcp/types/generated_poc/content_standards/calibrate_content_response.py +++ b/src/adcp/types/generated_poc/content_standards/calibrate_content_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: content_standards/calibrate_content_response.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,53 +14,53 @@ class Status(Enum): - passed = "passed" - failed = "failed" - warning = "warning" - unevaluated = "unevaluated" + passed = 'passed' + failed = 'failed' + warning = 'warning' + unevaluated = 'unevaluated' class Feature(AdCPBaseModel): explanation: Annotated[ str | None, - Field(description="Human-readable explanation of why this feature passed or failed"), + Field(description='Human-readable explanation of why this feature passed or failed'), ] = None feature_id: Annotated[ str, Field( - description="Which feature was evaluated (e.g., brand_safety, brand_suitability, competitor_adjacency)" + description='Which feature was evaluated (e.g., brand_safety, brand_suitability, competitor_adjacency)' ), ] - status: Annotated[Status, Field(description="Evaluation status for this feature")] + status: Annotated[Status, Field(description='Evaluation status for this feature')] class Verdict(Enum): - pass_ = "pass" - fail = "fail" + pass_ = 'pass' + fail = 'fail' class CalibrateContentResponse1(AdCPBaseModel): confidence: Annotated[ - float | None, Field(description="Model confidence in the verdict (0-1)", ge=0.0, le=1.0) + float | None, Field(description='Model confidence in the verdict (0-1)', ge=0.0, le=1.0) ] = None errors: Annotated[ - Any | None, Field(description="Field must not be present in success response") + Any | None, Field(description='Field must not be present in success response') ] = None explanation: Annotated[ - str | None, Field(description="Detailed natural language explanation of the decision") + str | None, Field(description='Detailed natural language explanation of the decision') ] = None features: Annotated[ - list[Feature] | None, Field(description="Per-feature breakdown with explanations") + list[Feature] | None, Field(description='Per-feature breakdown with explanations') ] = None verdict: Annotated[ - Verdict, Field(description="Overall pass/fail verdict for the content evaluation") + Verdict, Field(description='Overall pass/fail verdict for the content evaluation') ] class CalibrateContentResponse2(AdCPBaseModel): errors: list[error.Error] verdict: Annotated[ - Any | None, Field(description="Field must not be present in error response") + Any | None, Field(description='Field must not be present in error response') ] = None @@ -68,7 +68,7 @@ class CalibrateContentResponse(RootModel[CalibrateContentResponse1 | CalibrateCo root: Annotated[ CalibrateContentResponse1 | CalibrateContentResponse2, Field( - description="Response payload with verdict and detailed explanations for collaborative calibration", - title="Calibrate Content Response", + description='Response payload with verdict and detailed explanations for collaborative calibration', + title='Calibrate Content Response', ), ] diff --git a/src/adcp/types/generated_poc/content_standards/content_standards.py b/src/adcp/types/generated_poc/content_standards/content_standards.py index 16a8c34d..11e41709 100644 --- a/src/adcp/types/generated_poc/content_standards/content_standards.py +++ b/src/adcp/types/generated_poc/content_standards/content_standards.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: content_standards/content_standards.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -17,11 +17,11 @@ class CalibrationExemplars(AdCPBaseModel): fail: Annotated[ list[artifact.Artifact] | None, - Field(description="Artifacts that fail the content standards"), + Field(description='Artifacts that fail the content standards'), ] = None pass_: Annotated[ list[artifact.Artifact] | None, - Field(alias="pass", description="Artifacts that pass the content standards"), + Field(alias='pass', description='Artifacts that pass the content standards'), ] = None @@ -29,20 +29,20 @@ class ContentStandards(AdCPBaseModel): calibration_exemplars: Annotated[ CalibrationExemplars | None, Field( - description="Training/test set to calibrate policy interpretation. Provides concrete examples of pass/fail decisions." + description='Training/test set to calibrate policy interpretation. Provides concrete examples of pass/fail decisions.' ), ] = None channels_any: Annotated[ list[channels.MediaChannel] | None, Field( - description="Advertising channels. Standards apply to ANY of the listed channels (OR logic).", + description='Advertising channels. Standards apply to ANY of the listed channels (OR logic).', min_length=1, ), ] = None countries_all: Annotated[ list[str] | None, Field( - description="ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).", + description='ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).', min_length=1, ), ] = None @@ -55,14 +55,14 @@ class ContentStandards(AdCPBaseModel): ), ] = None name: Annotated[ - str | None, Field(description="Human-readable name for this standards configuration") + str | None, Field(description='Human-readable name for this standards configuration') ] = None policy: Annotated[ str | None, Field( - description="Natural language policy describing acceptable and unacceptable content contexts. Used by LLMs and human reviewers to make judgments." + description='Natural language policy describing acceptable and unacceptable content contexts. Used by LLMs and human reviewers to make judgments.' ), ] = None standards_id: Annotated[ - str, Field(description="Unique identifier for this standards configuration") + str, Field(description='Unique identifier for this standards configuration') ] diff --git a/src/adcp/types/generated_poc/content_standards/create_content_standards_request.py b/src/adcp/types/generated_poc/content_standards/create_content_standards_request.py index 64112ca8..db2255b0 100644 --- a/src/adcp/types/generated_poc/content_standards/create_content_standards_request.py +++ b/src/adcp/types/generated_poc/content_standards/create_content_standards_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: content_standards/create_content_standards_request.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -17,9 +17,9 @@ class Fail(AdCPBaseModel): language: Annotated[ - str | None, Field(description="BCP 47 language tag for content at this URL") + str | None, Field(description='BCP 47 language tag for content at this URL') ] = None - type: Annotated[Literal["url"], Field(description="Indicates this is a URL reference")] + type: Annotated[Literal['url'], Field(description='Indicates this is a URL reference')] value: Annotated[ AnyUrl, Field( @@ -30,9 +30,9 @@ class Fail(AdCPBaseModel): class Pass(AdCPBaseModel): language: Annotated[ - str | None, Field(description="BCP 47 language tag for content at this URL") + str | None, Field(description='BCP 47 language tag for content at this URL') ] = None - type: Annotated[Literal["url"], Field(description="Indicates this is a URL reference")] + type: Annotated[Literal['url'], Field(description='Indicates this is a URL reference')] value: Annotated[ AnyUrl, Field( @@ -45,19 +45,19 @@ class Scope(AdCPBaseModel): channels_any: Annotated[ list[channels.MediaChannel] | None, Field( - description="Advertising channels. Standards apply to ANY of the listed channels (OR logic).", + description='Advertising channels. Standards apply to ANY of the listed channels (OR logic).', min_length=1, ), ] = None countries_all: Annotated[ list[str] | None, Field( - description="ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).", + description='ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).', min_length=1, ), ] = None description: Annotated[ - str | None, Field(description="Human-readable description of this scope") + str | None, Field(description='Human-readable description of this scope') ] = None languages_any: Annotated[ list[str], @@ -70,22 +70,22 @@ class Scope(AdCPBaseModel): class CalibrationExemplars(AdCPBaseModel): fail: Annotated[ - list[Fail | artifact.Artifact] | None, Field(description="Content that fails the standards") + list[Fail | artifact.Artifact] | None, Field(description='Content that fails the standards') ] = None pass_: Annotated[ list[Pass | artifact.Artifact] | None, - Field(alias="pass", description="Content that passes the standards"), + Field(alias='pass', description='Content that passes the standards'), ] = None class CreateContentStandardsRequest(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) calibration_exemplars: Annotated[ CalibrationExemplars | None, Field( - description="Training/test set to calibrate policy interpretation. Use URL references for pages to be fetched and analyzed, or full artifacts for pre-extracted content." + description='Training/test set to calibrate policy interpretation. Use URL references for pages to be fetched and analyzed, or full artifacts for pre-extracted content.' ), ] = None context: context_1.ContextObject | None = None @@ -93,7 +93,7 @@ class CreateContentStandardsRequest(AdCPBaseModel): policy: Annotated[ str, Field( - description="Natural language policy describing acceptable and unacceptable content contexts. Used by LLMs and human reviewers to make judgments." + description='Natural language policy describing acceptable and unacceptable content contexts. Used by LLMs and human reviewers to make judgments.' ), ] - scope: Annotated[Scope, Field(description="Where this standards configuration applies")] + scope: Annotated[Scope, Field(description='Where this standards configuration applies')] diff --git a/src/adcp/types/generated_poc/content_standards/create_content_standards_response.py b/src/adcp/types/generated_poc/content_standards/create_content_standards_response.py index 741ba908..9aa7d29d 100644 --- a/src/adcp/types/generated_poc/content_standards/create_content_standards_response.py +++ b/src/adcp/types/generated_poc/content_standards/create_content_standards_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: content_standards/create_content_standards_response.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -17,11 +17,11 @@ class CreateContentStandardsResponse1(AdCPBaseModel): context: context_1.ContextObject | None = None errors: Annotated[ - Any | None, Field(description="Field must not be present in success response") + Any | None, Field(description='Field must not be present in success response') ] = None ext: ext_1.ExtensionObject | None = None standards_id: Annotated[ - str, Field(description="Unique identifier for the created standards configuration") + str, Field(description='Unique identifier for the created standards configuration') ] @@ -29,14 +29,14 @@ class CreateContentStandardsResponse2(AdCPBaseModel): conflicting_standards_id: Annotated[ str | None, Field( - description="If the error is a scope conflict, the ID of the existing standards that conflict" + description='If the error is a scope conflict, the ID of the existing standards that conflict' ), ] = None context: context_1.ContextObject | None = None errors: list[error.Error] ext: ext_1.ExtensionObject | None = None standards_id: Annotated[ - Any | None, Field(description="Field must not be present in error response") + Any | None, Field(description='Field must not be present in error response') ] = None @@ -46,7 +46,7 @@ class CreateContentStandardsResponse( root: Annotated[ CreateContentStandardsResponse1 | CreateContentStandardsResponse2, Field( - description="Response payload for creating a content standards configuration", - title="Create Content Standards Response", + description='Response payload for creating a content standards configuration', + title='Create Content Standards Response', ), ] diff --git a/src/adcp/types/generated_poc/content_standards/get_content_standards_request.py b/src/adcp/types/generated_poc/content_standards/get_content_standards_request.py index ff8dfc9a..14a7b1bc 100644 --- a/src/adcp/types/generated_poc/content_standards/get_content_standards_request.py +++ b/src/adcp/types/generated_poc/content_standards/get_content_standards_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: content_standards/get_content_standards_request.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -17,5 +17,5 @@ class GetContentStandardsRequest(AdCPBaseModel): context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None standards_id: Annotated[ - str, Field(description="Identifier for the standards configuration to retrieve") + str, Field(description='Identifier for the standards configuration to retrieve') ] diff --git a/src/adcp/types/generated_poc/content_standards/get_content_standards_response.py b/src/adcp/types/generated_poc/content_standards/get_content_standards_response.py index e5d2d140..60513c78 100644 --- a/src/adcp/types/generated_poc/content_standards/get_content_standards_response.py +++ b/src/adcp/types/generated_poc/content_standards/get_content_standards_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: content_standards/get_content_standards_response.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -20,14 +20,14 @@ class GetContentStandardsResponse2(AdCPBaseModel): errors: list[error.Error] ext: ext_1.ExtensionObject | None = None standards_id: Annotated[ - Any | None, Field(description="Field must not be present in error response") + Any | None, Field(description='Field must not be present in error response') ] = None class GetContentStandardsResponse1(ContentStandards): context: context_1.ContextObject | None = None errors: Annotated[ - Any | None, Field(description="Field must not be present in success response") + Any | None, Field(description='Field must not be present in success response') ] = None @@ -37,7 +37,7 @@ class GetContentStandardsResponse( root: Annotated[ GetContentStandardsResponse1 | GetContentStandardsResponse2, Field( - description="Response payload with content safety policies", - title="Get Content Standards Response", + description='Response payload with content safety policies', + title='Get Content Standards Response', ), ] diff --git a/src/adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py b/src/adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py index 6945bbdd..be3446ba 100644 --- a/src/adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py +++ b/src/adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: content_standards/get_media_buy_artifacts_request.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,31 +16,31 @@ class Pagination(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) cursor: Annotated[ str | None, - Field(description="Opaque cursor from a previous response to fetch the next page"), + Field(description='Opaque cursor from a previous response to fetch the next page'), ] = None max_results: Annotated[ int | None, - Field(description="Maximum number of artifacts to return per page", ge=1, le=10000), + Field(description='Maximum number of artifacts to return per page', ge=1, le=10000), ] = 1000 class Method(Enum): - random = "random" - stratified = "stratified" - recent = "recent" - failures_only = "failures_only" + random = 'random' + stratified = 'stratified' + recent = 'recent' + failures_only = 'failures_only' class Sampling(AdCPBaseModel): - method: Annotated[Method | None, Field(description="How to select the sample")] = None + method: Annotated[Method | None, Field(description='How to select the sample')] = None rate: Annotated[ float | None, Field( - description="Sampling rate (0-1). 1.0 = all deliveries, 0.25 = 25% sample.", + description='Sampling rate (0-1). 1.0 = all deliveries, 0.25 = 25% sample.', ge=0.0, le=1.0, ), @@ -48,8 +48,8 @@ class Sampling(AdCPBaseModel): class TimeRange(AdCPBaseModel): - end: Annotated[AwareDatetime | None, Field(description="End of time range (exclusive)")] = None - start: Annotated[AwareDatetime | None, Field(description="Start of time range (inclusive)")] = ( + end: Annotated[AwareDatetime | None, Field(description='End of time range (exclusive)')] = None + start: Annotated[AwareDatetime | None, Field(description='Start of time range (inclusive)')] = ( None ) @@ -58,28 +58,28 @@ class GetMediaBuyArtifactsRequest(AdCPBaseModel): account_id: Annotated[ str | None, Field( - description="Filter artifacts to a specific account. When provided, only returns artifacts for media buys belonging to this account. When omitted, returns artifacts across all accessible accounts. Optional if the agent has a single account." + description='Filter artifacts to a specific account. When provided, only returns artifacts for media buys belonging to this account. When omitted, returns artifacts across all accessible accounts. Optional if the agent has a single account.' ), ] = None context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None - media_buy_id: Annotated[str, Field(description="Media buy to get artifacts from")] + media_buy_id: Annotated[str, Field(description='Media buy to get artifacts from')] package_ids: Annotated[ list[str] | None, - Field(description="Filter to specific packages within the media buy", min_length=1), + Field(description='Filter to specific packages within the media buy', min_length=1), ] = None pagination: Annotated[ Pagination | None, Field( - description="Pagination parameters. Uses higher limits than standard pagination because artifact result sets can be very large." + description='Pagination parameters. Uses higher limits than standard pagination because artifact result sets can be very large.' ), ] = None sampling: Annotated[ Sampling | None, Field( - description="Sampling parameters. Defaults to the sampling rate agreed in the media buy." + description='Sampling parameters. Defaults to the sampling rate agreed in the media buy.' ), ] = None - time_range: Annotated[TimeRange | None, Field(description="Filter to specific time period")] = ( + time_range: Annotated[TimeRange | None, Field(description='Filter to specific time period')] = ( None ) diff --git a/src/adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py b/src/adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py index d899ce1b..1ef0ee8d 100644 --- a/src/adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py +++ b/src/adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: content_standards/get_media_buy_artifacts_response.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -18,33 +18,33 @@ class BrandContext(AdCPBaseModel): - brand_id: Annotated[str | None, Field(description="Brand identifier")] = None - sku_id: Annotated[str | None, Field(description="Product/SKU identifier if applicable")] = None + brand_id: Annotated[str | None, Field(description='Brand identifier')] = None + sku_id: Annotated[str | None, Field(description='Product/SKU identifier if applicable')] = None class LocalVerdict(Enum): - pass_ = "pass" - fail = "fail" - unevaluated = "unevaluated" + pass_ = 'pass' + fail = 'fail' + unevaluated = 'unevaluated' class Method(Enum): - random = "random" - stratified = "stratified" - recent = "recent" - failures_only = "failures_only" + random = 'random' + stratified = 'stratified' + recent = 'recent' + failures_only = 'failures_only' class SamplingInfo(AdCPBaseModel): - effective_rate: Annotated[float | None, Field(description="Actual sampling rate achieved")] = ( + effective_rate: Annotated[float | None, Field(description='Actual sampling rate achieved')] = ( None ) - method: Annotated[Method | None, Field(description="Sampling method used")] = None + method: Annotated[Method | None, Field(description='Sampling method used')] = None sampled_count: Annotated[ - int | None, Field(description="Number of artifacts in this response") + int | None, Field(description='Number of artifacts in this response') ] = None total_deliveries: Annotated[ - int | None, Field(description="Total deliveries in the time range") + int | None, Field(description='Total deliveries in the time range') ] = None @@ -53,49 +53,49 @@ class GetMediaBuyArtifactsResponse2(AdCPBaseModel): errors: list[error.Error] ext: ext_1.ExtensionObject | None = None media_buy_id: Annotated[ - Any | None, Field(description="Field must not be present in error response") + Any | None, Field(description='Field must not be present in error response') ] = None class Artifact(AdCPBaseModel): - artifact: Annotated[artifact_1.Artifact, Field(description="Full artifact with content assets")] + artifact: Annotated[artifact_1.Artifact, Field(description='Full artifact with content assets')] brand_context: Annotated[ BrandContext | None, Field( - description="Brand information for policy evaluation. Schema TBD - placeholder for brand identifiers." + description='Brand information for policy evaluation. Schema TBD - placeholder for brand identifiers.' ), ] = None channel: Annotated[ - str | None, Field(description="Channel type (e.g., display, video, audio, social)") + str | None, Field(description='Channel type (e.g., display, video, audio, social)') ] = None country: Annotated[ - str | None, Field(description="ISO 3166-1 alpha-2 country code where delivery occurred") + str | None, Field(description='ISO 3166-1 alpha-2 country code where delivery occurred') ] = None local_verdict: Annotated[ LocalVerdict | None, Field(description="Seller's local model verdict for this artifact") ] = None package_id: Annotated[ - str | None, Field(description="Which package this delivery belongs to") + str | None, Field(description='Which package this delivery belongs to') ] = None - record_id: Annotated[str, Field(description="Unique identifier for this delivery record")] - timestamp: Annotated[AwareDatetime | None, Field(description="When the delivery occurred")] = ( + record_id: Annotated[str, Field(description='Unique identifier for this delivery record')] + timestamp: Annotated[AwareDatetime | None, Field(description='When the delivery occurred')] = ( None ) class GetMediaBuyArtifactsResponse1(AdCPBaseModel): artifacts: Annotated[ - list[Artifact], Field(description="Delivery records with full artifact content") + list[Artifact], Field(description='Delivery records with full artifact content') ] context: context_1.ContextObject | None = None errors: Annotated[ - Any | None, Field(description="Field must not be present in success response") + Any | None, Field(description='Field must not be present in success response') ] = None ext: ext_1.ExtensionObject | None = None - media_buy_id: Annotated[str, Field(description="Media buy these artifacts belong to")] + media_buy_id: Annotated[str, Field(description='Media buy these artifacts belong to')] pagination: pagination_response.PaginationResponse | None = None sampling_info: Annotated[ - SamplingInfo | None, Field(description="Information about how the sample was generated") + SamplingInfo | None, Field(description='Information about how the sample was generated') ] = None @@ -105,7 +105,7 @@ class GetMediaBuyArtifactsResponse( root: Annotated[ GetMediaBuyArtifactsResponse1 | GetMediaBuyArtifactsResponse2, Field( - description="Response containing content artifacts from a media buy for validation", - title="Get Media Buy Artifacts Response", + description='Response containing content artifacts from a media buy for validation', + title='Get Media Buy Artifacts Response', ), ] diff --git a/src/adcp/types/generated_poc/content_standards/list_content_standards_request.py b/src/adcp/types/generated_poc/content_standards/list_content_standards_request.py index d88e4ff9..e6b6b0e7 100644 --- a/src/adcp/types/generated_poc/content_standards/list_content_standards_request.py +++ b/src/adcp/types/generated_poc/content_standards/list_content_standards_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: content_standards/list_content_standards_request.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -17,18 +17,18 @@ class ListContentStandardsRequest(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) channels: Annotated[ - list[channels_1.MediaChannel] | None, Field(description="Filter by channel", min_length=1) + list[channels_1.MediaChannel] | None, Field(description='Filter by channel', min_length=1) ] = None context: context_1.ContextObject | None = None countries: Annotated[ list[str] | None, - Field(description="Filter by ISO 3166-1 alpha-2 country codes", min_length=1), + Field(description='Filter by ISO 3166-1 alpha-2 country codes', min_length=1), ] = None ext: ext_1.ExtensionObject | None = None languages: Annotated[ - list[str] | None, Field(description="Filter by BCP 47 language tags", min_length=1) + list[str] | None, Field(description='Filter by BCP 47 language tags', min_length=1) ] = None pagination: pagination_request.PaginationRequest | None = None diff --git a/src/adcp/types/generated_poc/content_standards/list_content_standards_response.py b/src/adcp/types/generated_poc/content_standards/list_content_standards_response.py index 61d7a5dc..7620f442 100644 --- a/src/adcp/types/generated_poc/content_standards/list_content_standards_response.py +++ b/src/adcp/types/generated_poc/content_standards/list_content_standards_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: content_standards/list_content_standards_response.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -21,20 +21,20 @@ class ListContentStandardsResponse2(AdCPBaseModel): errors: list[error.Error] ext: ext_1.ExtensionObject | None = None standards: Annotated[ - Any | None, Field(description="Field must not be present in error response") + Any | None, Field(description='Field must not be present in error response') ] = None class ListContentStandardsResponse1(AdCPBaseModel): context: context_1.ContextObject | None = None errors: Annotated[ - Any | None, Field(description="Field must not be present in success response") + Any | None, Field(description='Field must not be present in success response') ] = None ext: ext_1.ExtensionObject | None = None pagination: pagination_response.PaginationResponse | None = None standards: Annotated[ list[content_standards.ContentStandards], - Field(description="Array of content standards configurations matching the filter criteria"), + Field(description='Array of content standards configurations matching the filter criteria'), ] @@ -44,7 +44,7 @@ class ListContentStandardsResponse( root: Annotated[ ListContentStandardsResponse1 | ListContentStandardsResponse2, Field( - description="Response payload with list of content standards configurations", - title="List Content Standards Response", + description='Response payload with list of content standards configurations', + title='List Content Standards Response', ), ] diff --git a/src/adcp/types/generated_poc/content_standards/update_content_standards_request.py b/src/adcp/types/generated_poc/content_standards/update_content_standards_request.py index 0960e5af..4d066bf4 100644 --- a/src/adcp/types/generated_poc/content_standards/update_content_standards_request.py +++ b/src/adcp/types/generated_poc/content_standards/update_content_standards_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: content_standards/update_content_standards_request.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -17,9 +17,9 @@ class Fail(AdCPBaseModel): language: Annotated[ - str | None, Field(description="BCP 47 language tag for content at this URL") + str | None, Field(description='BCP 47 language tag for content at this URL') ] = None - type: Annotated[Literal["url"], Field(description="Indicates this is a URL reference")] + type: Annotated[Literal['url'], Field(description='Indicates this is a URL reference')] value: Annotated[ AnyUrl, Field( @@ -30,9 +30,9 @@ class Fail(AdCPBaseModel): class Pass(AdCPBaseModel): language: Annotated[ - str | None, Field(description="BCP 47 language tag for content at this URL") + str | None, Field(description='BCP 47 language tag for content at this URL') ] = None - type: Annotated[Literal["url"], Field(description="Indicates this is a URL reference")] + type: Annotated[Literal['url'], Field(description='Indicates this is a URL reference')] value: Annotated[ AnyUrl, Field( @@ -45,19 +45,19 @@ class Scope(AdCPBaseModel): channels_any: Annotated[ list[channels.MediaChannel] | None, Field( - description="Advertising channels. Standards apply to ANY of the listed channels (OR logic).", + description='Advertising channels. Standards apply to ANY of the listed channels (OR logic).', min_length=1, ), ] = None countries_all: Annotated[ list[str] | None, Field( - description="ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).", + description='ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).', min_length=1, ), ] = None description: Annotated[ - str | None, Field(description="Human-readable description of this scope") + str | None, Field(description='Human-readable description of this scope') ] = None languages_any: Annotated[ list[str] | None, @@ -70,22 +70,22 @@ class Scope(AdCPBaseModel): class CalibrationExemplars(AdCPBaseModel): fail: Annotated[ - list[Fail | artifact.Artifact] | None, Field(description="Content that fails the standards") + list[Fail | artifact.Artifact] | None, Field(description='Content that fails the standards') ] = None pass_: Annotated[ list[Pass | artifact.Artifact] | None, - Field(alias="pass", description="Content that passes the standards"), + Field(alias='pass', description='Content that passes the standards'), ] = None class UpdateContentStandardsRequest(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) calibration_exemplars: Annotated[ CalibrationExemplars | None, Field( - description="Updated training/test set to calibrate policy interpretation. Use URL references for pages to be fetched and analyzed, or full artifacts for pre-extracted content." + description='Updated training/test set to calibrate policy interpretation. Use URL references for pages to be fetched and analyzed, or full artifacts for pre-extracted content.' ), ] = None context: context_1.ContextObject | None = None @@ -93,11 +93,11 @@ class UpdateContentStandardsRequest(AdCPBaseModel): policy: Annotated[ str | None, Field( - description="Updated natural language policy describing acceptable and unacceptable content contexts." + description='Updated natural language policy describing acceptable and unacceptable content contexts.' ), ] = None scope: Annotated[ Scope | None, - Field(description="Updated scope for where this standards configuration applies"), + Field(description='Updated scope for where this standards configuration applies'), ] = None - standards_id: Annotated[str, Field(description="ID of the standards configuration to update")] + standards_id: Annotated[str, Field(description='ID of the standards configuration to update')] diff --git a/src/adcp/types/generated_poc/content_standards/update_content_standards_response.py b/src/adcp/types/generated_poc/content_standards/update_content_standards_response.py index d388126b..a257598f 100644 --- a/src/adcp/types/generated_poc/content_standards/update_content_standards_response.py +++ b/src/adcp/types/generated_poc/content_standards/update_content_standards_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: content_standards/update_content_standards_response.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,19 +16,19 @@ class UpdateContentStandardsResponse(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) conflicting_standards_id: Annotated[ str | None, Field( - description="If scope change conflicts with another configuration, the ID of the conflicting standards" + description='If scope change conflicts with another configuration, the ID of the conflicting standards' ), ] = None context: context_1.ContextObject | None = None errors: Annotated[ - list[error.Error] | None, Field(description="Errors that occurred during the update") + list[error.Error] | None, Field(description='Errors that occurred during the update') ] = None ext: ext_1.ExtensionObject | None = None standards_id: Annotated[ - str | None, Field(description="ID of the updated standards configuration") + str | None, Field(description='ID of the updated standards configuration') ] = None diff --git a/src/adcp/types/generated_poc/content_standards/validate_content_delivery_request.py b/src/adcp/types/generated_poc/content_standards/validate_content_delivery_request.py index 50eafc78..e65b94c2 100644 --- a/src/adcp/types/generated_poc/content_standards/validate_content_delivery_request.py +++ b/src/adcp/types/generated_poc/content_standards/validate_content_delivery_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: content_standards/validate_content_delivery_request.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,30 +15,30 @@ class BrandContext(AdCPBaseModel): - brand_id: Annotated[str | None, Field(description="Brand identifier")] = None - sku_id: Annotated[str | None, Field(description="Product/SKU identifier if applicable")] = None + brand_id: Annotated[str | None, Field(description='Brand identifier')] = None + sku_id: Annotated[str | None, Field(description='Product/SKU identifier if applicable')] = None class Record(AdCPBaseModel): - artifact: Annotated[artifact_1.Artifact, Field(description="Artifact where ad was delivered")] + artifact: Annotated[artifact_1.Artifact, Field(description='Artifact where ad was delivered')] brand_context: Annotated[ BrandContext | None, Field( - description="Brand information for policy evaluation. Schema TBD - placeholder for brand identifiers." + description='Brand information for policy evaluation. Schema TBD - placeholder for brand identifiers.' ), ] = None channel: Annotated[ - str | None, Field(description="Channel type (e.g., display, video, audio, social)") + str | None, Field(description='Channel type (e.g., display, video, audio, social)') ] = None country: Annotated[ - str | None, Field(description="ISO 3166-1 alpha-2 country code where delivery occurred") + str | None, Field(description='ISO 3166-1 alpha-2 country code where delivery occurred') ] = None media_buy_id: Annotated[ str | None, - Field(description="Media buy this record belongs to (when batching across multiple buys)"), + Field(description='Media buy this record belongs to (when batching across multiple buys)'), ] = None - record_id: Annotated[str, Field(description="Unique identifier for this delivery record")] - timestamp: Annotated[AwareDatetime | None, Field(description="When the delivery occurred")] = ( + record_id: Annotated[str, Field(description='Unique identifier for this delivery record')] + timestamp: Annotated[AwareDatetime | None, Field(description='When the delivery occurred')] = ( None ) @@ -48,15 +48,15 @@ class ValidateContentDeliveryRequest(AdCPBaseModel): ext: ext_1.ExtensionObject | None = None feature_ids: Annotated[ list[str] | None, - Field(description="Specific features to evaluate (defaults to all)", min_length=1), + Field(description='Specific features to evaluate (defaults to all)', min_length=1), ] = None include_passed: Annotated[ - bool | None, Field(description="Include passed records in results") + bool | None, Field(description='Include passed records in results') ] = True records: Annotated[ list[Record], Field( - description="Delivery records to validate (max 10,000)", max_length=10000, min_length=1 + description='Delivery records to validate (max 10,000)', max_length=10000, min_length=1 ), ] - standards_id: Annotated[str, Field(description="Standards configuration to validate against")] + standards_id: Annotated[str, Field(description='Standards configuration to validate against')] diff --git a/src/adcp/types/generated_poc/content_standards/validate_content_delivery_response.py b/src/adcp/types/generated_poc/content_standards/validate_content_delivery_response.py index 8c2a21e5..d25c79fc 100644 --- a/src/adcp/types/generated_poc/content_standards/validate_content_delivery_response.py +++ b/src/adcp/types/generated_poc/content_standards/validate_content_delivery_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: content_standards/validate_content_delivery_response.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,10 +16,10 @@ class Status(Enum): - passed = "passed" - failed = "failed" - warning = "warning" - unevaluated = "unevaluated" + passed = 'passed' + failed = 'failed' + warning = 'warning' + unevaluated = 'unevaluated' class Feature(AdCPBaseModel): @@ -28,7 +28,7 @@ class Feature(AdCPBaseModel): rule_id: Annotated[ str | None, Field( - description="Which rule triggered this result (e.g., GARM category, Scope3 standard)" + description='Which rule triggered this result (e.g., GARM category, Scope3 standard)' ), ] = None status: Status @@ -36,16 +36,16 @@ class Feature(AdCPBaseModel): class Verdict(Enum): - pass_ = "pass" - fail = "fail" + pass_ = 'pass' + fail = 'fail' class Result(AdCPBaseModel): features: Annotated[ - list[Feature] | None, Field(description="Optional feature-level breakdown") + list[Feature] | None, Field(description='Optional feature-level breakdown') ] = None - record_id: Annotated[str, Field(description="Which delivery record was evaluated")] - verdict: Annotated[Verdict, Field(description="Overall pass/fail verdict for this record")] + record_id: Annotated[str, Field(description='Which delivery record was evaluated')] + verdict: Annotated[Verdict, Field(description='Overall pass/fail verdict for this record')] class Summary(AdCPBaseModel): @@ -57,11 +57,11 @@ class Summary(AdCPBaseModel): class ValidateContentDeliveryResponse1(AdCPBaseModel): context: context_1.ContextObject | None = None errors: Annotated[ - Any | None, Field(description="Field must not be present in success response") + Any | None, Field(description='Field must not be present in success response') ] = None ext: ext_1.ExtensionObject | None = None - results: Annotated[list[Result], Field(description="Per-record evaluation results")] - summary: Annotated[Summary, Field(description="Summary counts across all records")] + results: Annotated[list[Result], Field(description='Per-record evaluation results')] + summary: Annotated[Summary, Field(description='Summary counts across all records')] class ValidateContentDeliveryResponse2(AdCPBaseModel): @@ -69,7 +69,7 @@ class ValidateContentDeliveryResponse2(AdCPBaseModel): errors: list[error.Error] ext: ext_1.ExtensionObject | None = None summary: Annotated[ - Any | None, Field(description="Field must not be present in error response") + Any | None, Field(description='Field must not be present in error response') ] = None @@ -79,7 +79,7 @@ class ValidateContentDeliveryResponse( root: Annotated[ ValidateContentDeliveryResponse1 | ValidateContentDeliveryResponse2, Field( - description="Response payload with per-record verdicts and optional feature breakdown", - title="Validate Content Delivery Response", + description='Response payload with per-record verdicts and optional feature breakdown', + title='Validate Content Delivery Response', ), ] diff --git a/src/adcp/types/generated_poc/core/account.py b/src/adcp/types/generated_poc/core/account.py index f041c4f2..aeb045d1 100644 --- a/src/adcp/types/generated_poc/core/account.py +++ b/src/adcp/types/generated_poc/core/account.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/account.json -# timestamp: 2026-02-20T02:37:39+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,60 +14,60 @@ class Billing(Enum): - brand = "brand" - operator = "operator" - agent = "agent" + brand = 'brand' + operator = 'operator' + agent = 'agent' class CreditLimit(AdCPBaseModel): amount: Annotated[float, Field(ge=0.0)] - currency: Annotated[str, Field(pattern="^[A-Z]{3}$")] + currency: Annotated[str, Field(pattern='^[A-Z]{3}$')] class Status(Enum): - active = "active" - pending_approval = "pending_approval" - payment_required = "payment_required" - suspended = "suspended" - closed = "closed" + active = 'active' + pending_approval = 'pending_approval' + payment_required = 'payment_required' + suspended = 'suspended' + closed = 'closed' class Account(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - account_id: Annotated[str, Field(description="Unique identifier for this account")] + account_id: Annotated[str, Field(description='Unique identifier for this account')] advertiser: Annotated[ - str | None, Field(description="The advertiser whose rates apply to this account") + str | None, Field(description='The advertiser whose rates apply to this account') ] = None billing: Annotated[ Billing | None, Field( - description="Who is invoiced on this account. brand: seller invoices the brand directly. operator: seller invoices the operator (agency). agent: agent consolidates billing." + description='Who is invoiced on this account. brand: seller invoices the brand directly. operator: seller invoices the operator (agency). agent: agent consolidates billing.' ), ] = None billing_proxy: Annotated[ str | None, Field( - description="Optional intermediary who receives invoices on behalf of the advertiser (e.g., agency)" + description='Optional intermediary who receives invoices on behalf of the advertiser (e.g., agency)' ), ] = None brand_id: Annotated[ str | None, Field( - description="Brand ID within the house portfolio (from brand.json)", - pattern="^[a-z0-9_]+$", + description='Brand ID within the house portfolio (from brand.json)', + pattern='^[a-z0-9_]+$', ), ] = None credit_limit: Annotated[ - CreditLimit | None, Field(description="Maximum outstanding balance allowed") + CreditLimit | None, Field(description='Maximum outstanding balance allowed') ] = None ext: ext_1.ExtensionObject | None = None house: Annotated[ str | None, Field( - description="House domain where brand.json is hosted. Canonical identity anchor for the brand.", - pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", + description='House domain where brand.json is hosted. Canonical identity anchor for the brand.', + pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', ), ] = None name: Annotated[ @@ -76,25 +76,25 @@ class Account(AdCPBaseModel): operator: Annotated[ str | None, Field( - description="Domain of the entity operating this account", - pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", + description='Domain of the entity operating this account', + pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', ), ] = None payment_terms: Annotated[ str | None, Field(description="Payment terms (e.g., 'net_30', 'prepay')") ] = None rate_card: Annotated[ - str | None, Field(description="Identifier for the rate card applied to this account") + str | None, Field(description='Identifier for the rate card applied to this account') ] = None sandbox: Annotated[ bool | None, Field( - description="When true, this is a sandbox account. All requests using this account_id are treated as sandbox — no real platform calls, no real spend." + description='When true, this is a sandbox account. All requests using this account_id are treated as sandbox — no real platform calls, no real spend.' ), ] = None status: Annotated[ Status, Field( - description="Account status. pending_approval: seller reviewing (credit, contracts). payment_required: credit limit reached or funds depleted. suspended: was active, now paused. closed: terminated." + description='Account status. pending_approval: seller reviewing (credit, contracts). payment_required: credit limit reached or funds depleted. suspended: was active, now paused. closed: terminated.' ), ] diff --git a/src/adcp/types/generated_poc/core/activation_key.py b/src/adcp/types/generated_poc/core/activation_key.py index 94458d05..15e76472 100644 --- a/src/adcp/types/generated_poc/core/activation_key.py +++ b/src/adcp/types/generated_poc/core/activation_key.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/activation_key.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,22 +12,22 @@ class ActivationKey1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) segment_id: Annotated[ str, - Field(description="The platform-specific segment identifier to use in campaign targeting"), + Field(description='The platform-specific segment identifier to use in campaign targeting'), ] - type: Annotated[Literal["segment_id"], Field(description="Segment ID based targeting")] + type: Annotated[Literal['segment_id'], Field(description='Segment ID based targeting')] class ActivationKey2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - key: Annotated[str, Field(description="The targeting parameter key")] - type: Annotated[Literal["key_value"], Field(description="Key-value pair based targeting")] - value: Annotated[str, Field(description="The targeting parameter value")] + key: Annotated[str, Field(description='The targeting parameter key')] + type: Annotated[Literal['key_value'], Field(description='Key-value pair based targeting')] + value: Annotated[str, Field(description='The targeting parameter value')] class ActivationKey(RootModel[ActivationKey1 | ActivationKey2]): @@ -35,6 +35,6 @@ class ActivationKey(RootModel[ActivationKey1 | ActivationKey2]): ActivationKey1 | ActivationKey2, Field( description="Universal identifier for using a signal on a destination platform. Can be either a segment ID or a key-value pair depending on the platform's targeting mechanism.", - title="Activation Key", + title='Activation Key', ), ] diff --git a/src/adcp/types/generated_poc/core/assets/audio_asset.py b/src/adcp/types/generated_poc/core/assets/audio_asset.py index e057ec76..82d8d02b 100644 --- a/src/adcp/types/generated_poc/core/assets/audio_asset.py +++ b/src/adcp/types/generated_poc/core/assets/audio_asset.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/assets/audio_asset.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -18,41 +18,41 @@ class BitDepth(IntEnum): class Channels(Enum): - mono = "mono" - stereo = "stereo" - field_5_1 = "5.1" - field_7_1 = "7.1" + mono = 'mono' + stereo = 'stereo' + field_5_1 = '5.1' + field_7_1 = '7.1' class AudioAsset(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - bit_depth: Annotated[BitDepth | None, Field(description="Bit depth")] = None + bit_depth: Annotated[BitDepth | None, Field(description='Bit depth')] = None bitrate_kbps: Annotated[ - int | None, Field(description="Bitrate in kilobits per second", ge=1) + int | None, Field(description='Bitrate in kilobits per second', ge=1) ] = None - channels: Annotated[Channels | None, Field(description="Channel configuration")] = None + channels: Annotated[Channels | None, Field(description='Channel configuration')] = None codec: Annotated[ str | None, Field( - description="Audio codec used (aac, aac_lc, he_aac, pcm, mp3, vorbis, opus, flac, ac3, eac3, etc.)" + description='Audio codec used (aac, aac_lc, he_aac, pcm, mp3, vorbis, opus, flac, ac3, eac3, etc.)' ), ] = None container_format: Annotated[ str | None, - Field(description="Audio container/file format (mp3, m4a, aac, wav, ogg, flac, etc.)"), + Field(description='Audio container/file format (mp3, m4a, aac, wav, ogg, flac, etc.)'), ] = None duration_ms: Annotated[ - int | None, Field(description="Audio duration in milliseconds", ge=0) + int | None, Field(description='Audio duration in milliseconds', ge=0) ] = None - file_size_bytes: Annotated[int | None, Field(description="File size in bytes", ge=1)] = None - loudness_lufs: Annotated[float | None, Field(description="Integrated loudness in LUFS")] = None + file_size_bytes: Annotated[int | None, Field(description='File size in bytes', ge=1)] = None + loudness_lufs: Annotated[float | None, Field(description='Integrated loudness in LUFS')] = None sampling_rate_hz: Annotated[ - int | None, Field(description="Sampling rate in Hz (e.g., 44100, 48000, 96000)") + int | None, Field(description='Sampling rate in Hz (e.g., 44100, 48000, 96000)') ] = None transcript_url: Annotated[ - AnyUrl | None, Field(description="URL to text transcript of the audio content") + AnyUrl | None, Field(description='URL to text transcript of the audio content') ] = None - true_peak_dbfs: Annotated[float | None, Field(description="True peak level in dBFS")] = None - url: Annotated[AnyUrl, Field(description="URL to the audio asset")] + true_peak_dbfs: Annotated[float | None, Field(description='True peak level in dBFS')] = None + url: Annotated[AnyUrl, Field(description='URL to the audio asset')] diff --git a/src/adcp/types/generated_poc/core/assets/css_asset.py b/src/adcp/types/generated_poc/core/assets/css_asset.py index 7eeaaf01..4d85f393 100644 --- a/src/adcp/types/generated_poc/core/assets/css_asset.py +++ b/src/adcp/types/generated_poc/core/assets/css_asset.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/assets/css_asset.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,9 +12,9 @@ class CssAsset(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - content: Annotated[str, Field(description="CSS content")] + content: Annotated[str, Field(description='CSS content')] media: Annotated[ str | None, Field(description="CSS media query context (e.g., 'screen', 'print')") ] = None diff --git a/src/adcp/types/generated_poc/core/assets/daast_asset.py b/src/adcp/types/generated_poc/core/assets/daast_asset.py index e89ac9d0..5bb5de12 100644 --- a/src/adcp/types/generated_poc/core/assets/daast_asset.py +++ b/src/adcp/types/generated_poc/core/assets/daast_asset.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/assets/daast_asset.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,55 +15,55 @@ class DaastAsset1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) companion_ads: Annotated[ - bool | None, Field(description="Whether companion display ads are included") + bool | None, Field(description='Whether companion display ads are included') ] = None daast_version: Annotated[ - daast_version_1.DaastVersion | None, Field(description="DAAST specification version") + daast_version_1.DaastVersion | None, Field(description='DAAST specification version') ] = None delivery_type: Annotated[ - Literal["url"], - Field(description="Discriminator indicating DAAST is delivered via URL endpoint"), + Literal['url'], + Field(description='Discriminator indicating DAAST is delivered via URL endpoint'), ] duration_ms: Annotated[ - int | None, Field(description="Expected audio duration in milliseconds (if known)", ge=0) + int | None, Field(description='Expected audio duration in milliseconds (if known)', ge=0) ] = None tracking_events: Annotated[ list[daast_tracking_event.DaastTrackingEvent] | None, - Field(description="Tracking events supported by this DAAST tag"), + Field(description='Tracking events supported by this DAAST tag'), ] = None transcript_url: Annotated[ - AnyUrl | None, Field(description="URL to text transcript of the audio content") + AnyUrl | None, Field(description='URL to text transcript of the audio content') ] = None - url: Annotated[AnyUrl, Field(description="URL endpoint that returns DAAST XML")] + url: Annotated[AnyUrl, Field(description='URL endpoint that returns DAAST XML')] class DaastAsset2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) companion_ads: Annotated[ - bool | None, Field(description="Whether companion display ads are included") + bool | None, Field(description='Whether companion display ads are included') ] = None - content: Annotated[str, Field(description="Inline DAAST XML content")] + content: Annotated[str, Field(description='Inline DAAST XML content')] daast_version: Annotated[ - daast_version_1.DaastVersion | None, Field(description="DAAST specification version") + daast_version_1.DaastVersion | None, Field(description='DAAST specification version') ] = None delivery_type: Annotated[ - Literal["inline"], - Field(description="Discriminator indicating DAAST is delivered as inline XML content"), + Literal['inline'], + Field(description='Discriminator indicating DAAST is delivered as inline XML content'), ] duration_ms: Annotated[ - int | None, Field(description="Expected audio duration in milliseconds (if known)", ge=0) + int | None, Field(description='Expected audio duration in milliseconds (if known)', ge=0) ] = None tracking_events: Annotated[ list[daast_tracking_event.DaastTrackingEvent] | None, - Field(description="Tracking events supported by this DAAST tag"), + Field(description='Tracking events supported by this DAAST tag'), ] = None transcript_url: Annotated[ - AnyUrl | None, Field(description="URL to text transcript of the audio content") + AnyUrl | None, Field(description='URL to text transcript of the audio content') ] = None @@ -71,7 +71,7 @@ class DaastAsset(RootModel[DaastAsset1 | DaastAsset2]): root: Annotated[ DaastAsset1 | DaastAsset2, Field( - description="DAAST (Digital Audio Ad Serving Template) tag for third-party audio ad serving", - title="DAAST Asset", + description='DAAST (Digital Audio Ad Serving Template) tag for third-party audio ad serving', + title='DAAST Asset', ), ] diff --git a/src/adcp/types/generated_poc/core/assets/html_asset.py b/src/adcp/types/generated_poc/core/assets/html_asset.py index e8f78946..264a03a0 100644 --- a/src/adcp/types/generated_poc/core/assets/html_asset.py +++ b/src/adcp/types/generated_poc/core/assets/html_asset.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/assets/html_asset.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,29 +12,29 @@ class Accessibility(AdCPBaseModel): alt_text: Annotated[ - str | None, Field(description="Text alternative describing the creative content") + str | None, Field(description='Text alternative describing the creative content') ] = None keyboard_navigable: Annotated[ - bool | None, Field(description="Whether the creative can be fully operated via keyboard") + bool | None, Field(description='Whether the creative can be fully operated via keyboard') ] = None motion_control: Annotated[ bool | None, Field( - description="Whether the creative respects prefers-reduced-motion or provides pause/stop controls" + description='Whether the creative respects prefers-reduced-motion or provides pause/stop controls' ), ] = None screen_reader_tested: Annotated[ - bool | None, Field(description="Whether the creative has been tested with screen readers") + bool | None, Field(description='Whether the creative has been tested with screen readers') ] = None class HtmlAsset(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) accessibility: Annotated[ Accessibility | None, - Field(description="Self-declared accessibility properties for this opaque creative"), + Field(description='Self-declared accessibility properties for this opaque creative'), ] = None - content: Annotated[str, Field(description="HTML content")] + content: Annotated[str, Field(description='HTML content')] version: Annotated[str | None, Field(description="HTML version (e.g., 'HTML5')")] = None diff --git a/src/adcp/types/generated_poc/core/assets/image_asset.py b/src/adcp/types/generated_poc/core/assets/image_asset.py index b179479e..9c48fc44 100644 --- a/src/adcp/types/generated_poc/core/assets/image_asset.py +++ b/src/adcp/types/generated_poc/core/assets/image_asset.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/assets/image_asset.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,12 +12,12 @@ class ImageAsset(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - alt_text: Annotated[str | None, Field(description="Alternative text for accessibility")] = None + alt_text: Annotated[str | None, Field(description='Alternative text for accessibility')] = None format: Annotated[ - str | None, Field(description="Image file format (jpg, png, gif, webp, etc.)") + str | None, Field(description='Image file format (jpg, png, gif, webp, etc.)') ] = None - height: Annotated[int, Field(description="Height in pixels", ge=1)] - url: Annotated[AnyUrl, Field(description="URL to the image asset")] - width: Annotated[int, Field(description="Width in pixels", ge=1)] + height: Annotated[int, Field(description='Height in pixels', ge=1)] + url: Annotated[AnyUrl, Field(description='URL to the image asset')] + width: Annotated[int, Field(description='Width in pixels', ge=1)] diff --git a/src/adcp/types/generated_poc/core/assets/javascript_asset.py b/src/adcp/types/generated_poc/core/assets/javascript_asset.py index 70357e8a..8fe88f11 100644 --- a/src/adcp/types/generated_poc/core/assets/javascript_asset.py +++ b/src/adcp/types/generated_poc/core/assets/javascript_asset.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/assets/javascript_asset.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,32 +14,32 @@ class Accessibility(AdCPBaseModel): alt_text: Annotated[ - str | None, Field(description="Text alternative describing the creative content") + str | None, Field(description='Text alternative describing the creative content') ] = None keyboard_navigable: Annotated[ - bool | None, Field(description="Whether the creative can be fully operated via keyboard") + bool | None, Field(description='Whether the creative can be fully operated via keyboard') ] = None motion_control: Annotated[ bool | None, Field( - description="Whether the creative respects prefers-reduced-motion or provides pause/stop controls" + description='Whether the creative respects prefers-reduced-motion or provides pause/stop controls' ), ] = None screen_reader_tested: Annotated[ - bool | None, Field(description="Whether the creative has been tested with screen readers") + bool | None, Field(description='Whether the creative has been tested with screen readers') ] = None class JavascriptAsset(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) accessibility: Annotated[ Accessibility | None, - Field(description="Self-declared accessibility properties for this opaque creative"), + Field(description='Self-declared accessibility properties for this opaque creative'), ] = None - content: Annotated[str, Field(description="JavaScript content")] + content: Annotated[str, Field(description='JavaScript content')] module_type: Annotated[ javascript_module_type.JavascriptModuleType | None, - Field(description="JavaScript module type"), + Field(description='JavaScript module type'), ] = None diff --git a/src/adcp/types/generated_poc/core/assets/markdown_asset.py b/src/adcp/types/generated_poc/core/assets/markdown_asset.py index 3da4207f..5d6403b6 100644 --- a/src/adcp/types/generated_poc/core/assets/markdown_asset.py +++ b/src/adcp/types/generated_poc/core/assets/markdown_asset.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/assets/markdown_asset.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,18 +14,18 @@ class MarkdownAsset(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) allow_raw_html: Annotated[ bool | None, Field( - description="Whether raw HTML blocks are allowed in the markdown. False recommended for security." + description='Whether raw HTML blocks are allowed in the markdown. False recommended for security.' ), ] = False content: Annotated[ str, Field( - description="Markdown content following CommonMark spec with optional GitHub Flavored Markdown extensions" + description='Markdown content following CommonMark spec with optional GitHub Flavored Markdown extensions' ), ] language: Annotated[str | None, Field(description="Language code (e.g., 'en', 'es', 'fr')")] = ( @@ -34,6 +34,6 @@ class MarkdownAsset(AdCPBaseModel): markdown_flavor: Annotated[ markdown_flavor_1.MarkdownFlavor | None, Field( - description="Markdown flavor used. CommonMark for strict compatibility, GFM for tables/task lists/strikethrough." + description='Markdown flavor used. CommonMark for strict compatibility, GFM for tables/task lists/strikethrough.' ), ] = markdown_flavor_1.MarkdownFlavor.commonmark diff --git a/src/adcp/types/generated_poc/core/assets/text_asset.py b/src/adcp/types/generated_poc/core/assets/text_asset.py index 63ca787a..17b7de6c 100644 --- a/src/adcp/types/generated_poc/core/assets/text_asset.py +++ b/src/adcp/types/generated_poc/core/assets/text_asset.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/assets/text_asset.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,9 +12,9 @@ class TextAsset(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - content: Annotated[str, Field(description="Text content")] + content: Annotated[str, Field(description='Text content')] language: Annotated[str | None, Field(description="Language code (e.g., 'en', 'es', 'fr')")] = ( None ) diff --git a/src/adcp/types/generated_poc/core/assets/url_asset.py b/src/adcp/types/generated_poc/core/assets/url_asset.py index 33244bb5..981c9cf5 100644 --- a/src/adcp/types/generated_poc/core/assets/url_asset.py +++ b/src/adcp/types/generated_poc/core/assets/url_asset.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/assets/url_asset.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,12 +14,12 @@ class UrlAsset(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) description: Annotated[ - str | None, Field(description="Description of what this URL points to") + str | None, Field(description='Description of what this URL points to') ] = None - url: Annotated[AnyUrl, Field(description="URL reference")] + url: Annotated[AnyUrl, Field(description='URL reference')] url_type: Annotated[ url_asset_type.UrlAssetType | None, Field( diff --git a/src/adcp/types/generated_poc/core/assets/vast_asset.py b/src/adcp/types/generated_poc/core/assets/vast_asset.py index 65673ab6..d628daae 100644 --- a/src/adcp/types/generated_poc/core/assets/vast_asset.py +++ b/src/adcp/types/generated_poc/core/assets/vast_asset.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/assets/vast_asset.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,65 +15,65 @@ class VastAsset1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) audio_description_url: Annotated[ AnyUrl | None, - Field(description="URL to audio description track for visually impaired users"), + Field(description='URL to audio description track for visually impaired users'), ] = None captions_url: Annotated[ - AnyUrl | None, Field(description="URL to captions file (WebVTT, SRT, etc.)") + AnyUrl | None, Field(description='URL to captions file (WebVTT, SRT, etc.)') ] = None delivery_type: Annotated[ - Literal["url"], - Field(description="Discriminator indicating VAST is delivered via URL endpoint"), + Literal['url'], + Field(description='Discriminator indicating VAST is delivered via URL endpoint'), ] duration_ms: Annotated[ - int | None, Field(description="Expected video duration in milliseconds (if known)", ge=0) + int | None, Field(description='Expected video duration in milliseconds (if known)', ge=0) ] = None tracking_events: Annotated[ list[vast_tracking_event.VastTrackingEvent] | None, - Field(description="Tracking events supported by this VAST tag"), + Field(description='Tracking events supported by this VAST tag'), ] = None - url: Annotated[AnyUrl, Field(description="URL endpoint that returns VAST XML")] + url: Annotated[AnyUrl, Field(description='URL endpoint that returns VAST XML')] vast_version: Annotated[ - vast_version_1.VastVersion | None, Field(description="VAST specification version") + vast_version_1.VastVersion | None, Field(description='VAST specification version') ] = None vpaid_enabled: Annotated[ bool | None, - Field(description="Whether VPAID (Video Player-Ad Interface Definition) is supported"), + Field(description='Whether VPAID (Video Player-Ad Interface Definition) is supported'), ] = None class VastAsset2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) audio_description_url: Annotated[ AnyUrl | None, - Field(description="URL to audio description track for visually impaired users"), + Field(description='URL to audio description track for visually impaired users'), ] = None captions_url: Annotated[ - AnyUrl | None, Field(description="URL to captions file (WebVTT, SRT, etc.)") + AnyUrl | None, Field(description='URL to captions file (WebVTT, SRT, etc.)') ] = None - content: Annotated[str, Field(description="Inline VAST XML content")] + content: Annotated[str, Field(description='Inline VAST XML content')] delivery_type: Annotated[ - Literal["inline"], - Field(description="Discriminator indicating VAST is delivered as inline XML content"), + Literal['inline'], + Field(description='Discriminator indicating VAST is delivered as inline XML content'), ] duration_ms: Annotated[ - int | None, Field(description="Expected video duration in milliseconds (if known)", ge=0) + int | None, Field(description='Expected video duration in milliseconds (if known)', ge=0) ] = None tracking_events: Annotated[ list[vast_tracking_event.VastTrackingEvent] | None, - Field(description="Tracking events supported by this VAST tag"), + Field(description='Tracking events supported by this VAST tag'), ] = None vast_version: Annotated[ - vast_version_1.VastVersion | None, Field(description="VAST specification version") + vast_version_1.VastVersion | None, Field(description='VAST specification version') ] = None vpaid_enabled: Annotated[ bool | None, - Field(description="Whether VPAID (Video Player-Ad Interface Definition) is supported"), + Field(description='Whether VPAID (Video Player-Ad Interface Definition) is supported'), ] = None @@ -81,7 +81,7 @@ class VastAsset(RootModel[VastAsset1 | VastAsset2]): root: Annotated[ VastAsset1 | VastAsset2, Field( - description="VAST (Video Ad Serving Template) tag for third-party video ad serving", - title="VAST Asset", + description='VAST (Video Ad Serving Template) tag for third-party video ad serving', + title='VAST Asset', ), ] diff --git a/src/adcp/types/generated_poc/core/assets/video_asset.py b/src/adcp/types/generated_poc/core/assets/video_asset.py index 43c13ad5..86d466dc 100644 --- a/src/adcp/types/generated_poc/core/assets/video_asset.py +++ b/src/adcp/types/generated_poc/core/assets/video_asset.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/assets/video_asset.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -18,52 +18,52 @@ class AudioBitDepth(IntEnum): class AudioChannels(Enum): - mono = "mono" - stereo = "stereo" - field_5_1 = "5.1" - field_7_1 = "7.1" + mono = 'mono' + stereo = 'stereo' + field_5_1 = '5.1' + field_7_1 = '7.1' class ChromaSubsampling(Enum): - field_4_2_0 = "4:2:0" - field_4_2_2 = "4:2:2" - field_4_4_4 = "4:4:4" + field_4_2_0 = '4:2:0' + field_4_2_2 = '4:2:2' + field_4_4_4 = '4:4:4' class ColorSpace(Enum): - rec709 = "rec709" - rec2020 = "rec2020" - rec2100 = "rec2100" - srgb = "srgb" - dci_p3 = "dci_p3" + rec709 = 'rec709' + rec2020 = 'rec2020' + rec2100 = 'rec2100' + srgb = 'srgb' + dci_p3 = 'dci_p3' class FrameRateType(Enum): - constant = "constant" - variable = "variable" + constant = 'constant' + variable = 'variable' class GopType(Enum): - closed = "closed" - open = "open" + closed = 'closed' + open = 'open' class HdrFormat(Enum): - sdr = "sdr" - hdr10 = "hdr10" - hdr10_plus = "hdr10_plus" - hlg = "hlg" - dolby_vision = "dolby_vision" + sdr = 'sdr' + hdr10 = 'hdr10' + hdr10_plus = 'hdr10_plus' + hlg = 'hlg' + dolby_vision = 'dolby_vision' class MoovAtomPosition(Enum): - start = "start" - end = "end" + start = 'start' + end = 'end' class ScanType(Enum): - progressive = "progressive" - interlaced = "interlaced" + progressive = 'progressive' + interlaced = 'interlaced' class VideoBitDepth(IntEnum): @@ -74,46 +74,46 @@ class VideoBitDepth(IntEnum): class VideoAsset(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - audio_bit_depth: Annotated[AudioBitDepth | None, Field(description="Audio bit depth")] = None + audio_bit_depth: Annotated[AudioBitDepth | None, Field(description='Audio bit depth')] = None audio_bitrate_kbps: Annotated[ - int | None, Field(description="Audio bitrate in kilobits per second", ge=1) + int | None, Field(description='Audio bitrate in kilobits per second', ge=1) ] = None audio_channels: Annotated[ - AudioChannels | None, Field(description="Audio channel configuration") + AudioChannels | None, Field(description='Audio channel configuration') ] = None audio_codec: Annotated[ str | None, - Field(description="Audio codec used (aac, aac_lc, he_aac, pcm, mp3, ac3, eac3, etc.)"), + Field(description='Audio codec used (aac, aac_lc, he_aac, pcm, mp3, ac3, eac3, etc.)'), ] = None audio_description_url: Annotated[ AnyUrl | None, - Field(description="URL to audio description track for visually impaired users"), + Field(description='URL to audio description track for visually impaired users'), ] = None audio_loudness_lufs: Annotated[ - float | None, Field(description="Integrated loudness in LUFS") + float | None, Field(description='Integrated loudness in LUFS') ] = None audio_sampling_rate_hz: Annotated[ - int | None, Field(description="Audio sampling rate in Hz (e.g., 44100, 48000)") + int | None, Field(description='Audio sampling rate in Hz (e.g., 44100, 48000)') ] = None - audio_true_peak_dbfs: Annotated[float | None, Field(description="True peak level in dBFS")] = ( + audio_true_peak_dbfs: Annotated[float | None, Field(description='True peak level in dBFS')] = ( None ) captions_url: Annotated[ - AnyUrl | None, Field(description="URL to captions file (WebVTT, SRT, etc.)") + AnyUrl | None, Field(description='URL to captions file (WebVTT, SRT, etc.)') ] = None chroma_subsampling: Annotated[ - ChromaSubsampling | None, Field(description="Chroma subsampling format") + ChromaSubsampling | None, Field(description='Chroma subsampling format') ] = None - color_space: Annotated[ColorSpace | None, Field(description="Color space of the video")] = None + color_space: Annotated[ColorSpace | None, Field(description='Color space of the video')] = None container_format: Annotated[ - str | None, Field(description="Video container format (mp4, webm, mov, etc.)") + str | None, Field(description='Video container format (mp4, webm, mov, etc.)') ] = None duration_ms: Annotated[ - int | None, Field(description="Video duration in milliseconds", ge=1) + int | None, Field(description='Video duration in milliseconds', ge=1) ] = None - file_size_bytes: Annotated[int | None, Field(description="File size in bytes", ge=1)] = None + file_size_bytes: Annotated[int | None, Field(description='File size in bytes', ge=1)] = None frame_rate: Annotated[ str | None, Field( @@ -122,33 +122,33 @@ class VideoAsset(AdCPBaseModel): ] = None frame_rate_type: Annotated[ FrameRateType | None, - Field(description="Whether the video uses constant (CFR) or variable (VFR) frame rate"), + Field(description='Whether the video uses constant (CFR) or variable (VFR) frame rate'), ] = None gop_interval_seconds: Annotated[ - float | None, Field(description="GOP/keyframe interval in seconds") + float | None, Field(description='GOP/keyframe interval in seconds') ] = None - gop_type: Annotated[GopType | None, Field(description="GOP structure type")] = None + gop_type: Annotated[GopType | None, Field(description='GOP structure type')] = None has_audio: Annotated[ - bool | None, Field(description="Whether the video contains an audio track") + bool | None, Field(description='Whether the video contains an audio track') ] = None hdr_format: Annotated[ HdrFormat | None, Field(description="HDR format if applicable, or 'sdr' for standard dynamic range"), ] = None - height: Annotated[int, Field(description="Height in pixels", ge=1)] + height: Annotated[int, Field(description='Height in pixels', ge=1)] moov_atom_position: Annotated[ - MoovAtomPosition | None, Field(description="Position of moov atom in MP4 container") + MoovAtomPosition | None, Field(description='Position of moov atom in MP4 container') ] = None - scan_type: Annotated[ScanType | None, Field(description="Scan type of the video")] = None + scan_type: Annotated[ScanType | None, Field(description='Scan type of the video')] = None transcript_url: Annotated[ - AnyUrl | None, Field(description="URL to text transcript of the video content") + AnyUrl | None, Field(description='URL to text transcript of the video content') ] = None - url: Annotated[AnyUrl, Field(description="URL to the video asset")] - video_bit_depth: Annotated[VideoBitDepth | None, Field(description="Video bit depth")] = None + url: Annotated[AnyUrl, Field(description='URL to the video asset')] + video_bit_depth: Annotated[VideoBitDepth | None, Field(description='Video bit depth')] = None video_bitrate_kbps: Annotated[ - int | None, Field(description="Video stream bitrate in kilobits per second", ge=1) + int | None, Field(description='Video stream bitrate in kilobits per second', ge=1) ] = None video_codec: Annotated[ - str | None, Field(description="Video codec used (h264, h265, vp9, av1, prores, etc.)") + str | None, Field(description='Video codec used (h264, h265, vp9, av1, prores, etc.)') ] = None - width: Annotated[int, Field(description="Width in pixels", ge=1)] + width: Annotated[int, Field(description='Width in pixels', ge=1)] diff --git a/src/adcp/types/generated_poc/core/assets/webhook_asset.py b/src/adcp/types/generated_poc/core/assets/webhook_asset.py index ad017093..e7953c26 100644 --- a/src/adcp/types/generated_poc/core/assets/webhook_asset.py +++ b/src/adcp/types/generated_poc/core/assets/webhook_asset.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/assets/webhook_asset.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -20,34 +20,34 @@ class Security(AdCPBaseModel): str | None, Field(description="Header name for HMAC signature (e.g., 'X-Signature')") ] = None method: Annotated[ - webhook_security_method.WebhookSecurityMethod, Field(description="Authentication method") + webhook_security_method.WebhookSecurityMethod, Field(description='Authentication method') ] class WebhookAsset(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - method: Annotated[http_method.HttpMethod | None, Field(description="HTTP method")] = ( + method: Annotated[http_method.HttpMethod | None, Field(description='HTTP method')] = ( http_method.HttpMethod.POST ) required_macros: Annotated[ list[universal_macro.UniversalMacro | str] | None, - Field(description="Universal macros that must be provided for webhook to function"), + Field(description='Universal macros that must be provided for webhook to function'), ] = None response_type: Annotated[ webhook_response_type.WebhookResponseType, - Field(description="Expected content type of webhook response"), + Field(description='Expected content type of webhook response'), ] - security: Annotated[Security, Field(description="Security configuration for webhook calls")] + security: Annotated[Security, Field(description='Security configuration for webhook calls')] supported_macros: Annotated[ list[universal_macro.UniversalMacro | str] | None, Field( - description="Universal macros that can be passed to webhook (e.g., DEVICE_TYPE, COUNTRY). See docs/creative/universal-macros.mdx for full list." + description='Universal macros that can be passed to webhook (e.g., DEVICE_TYPE, COUNTRY). See docs/creative/universal-macros.mdx for full list.' ), ] = None timeout_ms: Annotated[ int | None, - Field(description="Maximum time to wait for response in milliseconds", ge=10, le=5000), + Field(description='Maximum time to wait for response in milliseconds', ge=10, le=5000), ] = 500 - url: Annotated[AnyUrl, Field(description="Webhook URL to call for dynamic content")] + url: Annotated[AnyUrl, Field(description='Webhook URL to call for dynamic content')] diff --git a/src/adcp/types/generated_poc/core/async_response_data.py b/src/adcp/types/generated_poc/core/async_response_data.py index 8567411c..960a71ac 100644 --- a/src/adcp/types/generated_poc/core/async_response_data.py +++ b/src/adcp/types/generated_poc/core/async_response_data.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/async_response_data.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -78,7 +78,7 @@ class AdcpAsyncResponseData( | sync_catalogs_async_response_input_required.SyncCatalogsInputRequired | sync_catalogs_async_response_submitted.SyncCatalogsSubmitted, Field( - description="Union of all possible data payloads for async task webhook responses. For completed/failed statuses, use the main task response schema. For working/input-required/submitted, use the status-specific schemas.", - title="AdCP Async Response Data", + description='Union of all possible data payloads for async task webhook responses. For completed/failed statuses, use the main task response schema. For working/input-required/submitted, use the status-specific schemas.', + title='AdCP Async Response Data', ), ] diff --git a/src/adcp/types/generated_poc/core/attribution_window.py b/src/adcp/types/generated_poc/core/attribution_window.py index a5195b11..16b2e3b5 100644 --- a/src/adcp/types/generated_poc/core/attribution_window.py +++ b/src/adcp/types/generated_poc/core/attribution_window.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/attribution_window.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,25 +14,25 @@ class AttributionWindow(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) click_window_days: Annotated[ int | None, Field( - description="Click-through attribution window in days. Conversions occurring within this many days after a click are attributed to the ad.", + description='Click-through attribution window in days. Conversions occurring within this many days after a click are attributed to the ad.', ge=0, ), ] = None model: Annotated[ attribution_model.AttributionModel, Field( - description="Attribution model used to assign credit when multiple touchpoints exist" + description='Attribution model used to assign credit when multiple touchpoints exist' ), ] view_window_days: Annotated[ int | None, Field( - description="View-through attribution window in days. Conversions occurring within this many days after an ad impression (without click) are attributed to the ad.", + description='View-through attribution window in days. Conversions occurring within this many days after an ad impression (without click) are attributed to the ad.', ge=0, ), ] = None diff --git a/src/adcp/types/generated_poc/core/audience_member.py b/src/adcp/types/generated_poc/core/audience_member.py index 57e28808..27f3f9b2 100644 --- a/src/adcp/types/generated_poc/core/audience_member.py +++ b/src/adcp/types/generated_poc/core/audience_member.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/audience_member.json -# timestamp: 2026-02-20T02:37:39+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,35 +15,35 @@ class Uid(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - type: Annotated[uid_type.UidType, Field(description="Universal ID type")] - value: Annotated[str, Field(description="Universal ID value")] + type: Annotated[uid_type.UidType, Field(description='Universal ID type')] + value: Annotated[str, Field(description='Universal ID value')] class AudienceMember1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) ext: ext_1.ExtensionObject | None = None hashed_email: Annotated[ str, Field( - description="SHA-256 hash of lowercase, trimmed email address.", - pattern="^[a-f0-9]{64}$", + description='SHA-256 hash of lowercase, trimmed email address.', + pattern='^[a-f0-9]{64}$', ), ] hashed_phone: Annotated[ str | None, Field( - description="SHA-256 hash of E.164-formatted phone number (e.g. +12065551234).", - pattern="^[a-f0-9]{64}$", + description='SHA-256 hash of E.164-formatted phone number (e.g. +12065551234).', + pattern='^[a-f0-9]{64}$', ), ] = None uids: Annotated[ list[Uid] | None, Field( - description="Universal ID values (MAIDs, RampID, UID2, etc.) for user matching.", + description='Universal ID values (MAIDs, RampID, UID2, etc.) for user matching.', min_length=1, ), ] = None @@ -51,27 +51,27 @@ class AudienceMember1(AdCPBaseModel): class AudienceMember2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) ext: ext_1.ExtensionObject | None = None hashed_email: Annotated[ str | None, Field( - description="SHA-256 hash of lowercase, trimmed email address.", - pattern="^[a-f0-9]{64}$", + description='SHA-256 hash of lowercase, trimmed email address.', + pattern='^[a-f0-9]{64}$', ), ] = None hashed_phone: Annotated[ str, Field( - description="SHA-256 hash of E.164-formatted phone number (e.g. +12065551234).", - pattern="^[a-f0-9]{64}$", + description='SHA-256 hash of E.164-formatted phone number (e.g. +12065551234).', + pattern='^[a-f0-9]{64}$', ), ] uids: Annotated[ list[Uid] | None, Field( - description="Universal ID values (MAIDs, RampID, UID2, etc.) for user matching.", + description='Universal ID values (MAIDs, RampID, UID2, etc.) for user matching.', min_length=1, ), ] = None @@ -79,27 +79,27 @@ class AudienceMember2(AdCPBaseModel): class AudienceMember3(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) ext: ext_1.ExtensionObject | None = None hashed_email: Annotated[ str | None, Field( - description="SHA-256 hash of lowercase, trimmed email address.", - pattern="^[a-f0-9]{64}$", + description='SHA-256 hash of lowercase, trimmed email address.', + pattern='^[a-f0-9]{64}$', ), ] = None hashed_phone: Annotated[ str | None, Field( - description="SHA-256 hash of E.164-formatted phone number (e.g. +12065551234).", - pattern="^[a-f0-9]{64}$", + description='SHA-256 hash of E.164-formatted phone number (e.g. +12065551234).', + pattern='^[a-f0-9]{64}$', ), ] = None uids: Annotated[ list[Uid], Field( - description="Universal ID values (MAIDs, RampID, UID2, etc.) for user matching.", + description='Universal ID values (MAIDs, RampID, UID2, etc.) for user matching.', min_length=1, ), ] @@ -109,7 +109,7 @@ class AudienceMember(RootModel[AudienceMember1 | AudienceMember2 | AudienceMembe root: Annotated[ AudienceMember1 | AudienceMember2 | AudienceMember3, Field( - description="Hashed identifiers for a CRM audience member. All identifiers must be normalized before hashing: emails to lowercase+trim, phone numbers to E.164 format (e.g. +12065551234). At least one identifier is required. Providing multiple identifiers for the same person improves match rates. Composite identifiers (e.g. hashed first name + last name + zip for Google Customer Match) are not yet standardized — use the ext field for platform-specific extensions.", - title="Audience Member", + description='Hashed identifiers for a CRM audience member. All identifiers must be normalized before hashing: emails to lowercase+trim, phone numbers to E.164 format (e.g. +12065551234). At least one identifier is required. Providing multiple identifiers for the same person improves match rates. Composite identifiers (e.g. hashed first name + last name + zip for Google Customer Match) are not yet standardized — use the ext field for platform-specific extensions.', + title='Audience Member', ), ] diff --git a/src/adcp/types/generated_poc/core/brand_id.py b/src/adcp/types/generated_poc/core/brand_id.py index c8e642c1..85f1e2cc 100644 --- a/src/adcp/types/generated_poc/core/brand_id.py +++ b/src/adcp/types/generated_poc/core/brand_id.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/brand_id.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -13,9 +13,9 @@ class BrandId(RootModel[str]): root: Annotated[ str, Field( - description="Identifier for a brand within a house portfolio. Must be lowercase alphanumeric with underscores only. The house chooses this identifier.", - examples=["tide", "cheerios", "air_jordan", "nike", "pampers"], - pattern="^[a-z0-9_]+$", - title="Brand ID", + description='Identifier for a brand within a house portfolio. Must be lowercase alphanumeric with underscores only. The house chooses this identifier.', + examples=['tide', 'cheerios', 'air_jordan', 'nike', 'pampers'], + pattern='^[a-z0-9_]+$', + title='Brand ID', ), ] diff --git a/src/adcp/types/generated_poc/core/brand_ref.py b/src/adcp/types/generated_poc/core/brand_ref.py index c6458011..ac8f7246 100644 --- a/src/adcp/types/generated_poc/core/brand_ref.py +++ b/src/adcp/types/generated_poc/core/brand_ref.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/brand_ref.json -# timestamp: 2026-02-18T17:56:28+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,18 +14,18 @@ class BrandReference(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) brand_id: Annotated[ brand_id_1.BrandId | None, Field( - description="Brand identifier within the house portfolio. Optional for single-brand domains." + description='Brand identifier within the house portfolio. Optional for single-brand domains.' ), ] = None domain: Annotated[ str, Field( description="Domain where /.well-known/brand.json is hosted, or the brand's operating domain", - pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", + pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', ), ] diff --git a/src/adcp/types/generated_poc/core/catalog.py b/src/adcp/types/generated_poc/core/catalog.py index b45e01f5..83071c08 100644 --- a/src/adcp/types/generated_poc/core/catalog.py +++ b/src/adcp/types/generated_poc/core/catalog.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/catalog.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -17,12 +17,12 @@ class Gtin(RootModel[str]): - root: Annotated[str, Field(pattern="^[0-9]{8,14}$")] + root: Annotated[str, Field(pattern='^[0-9]{8,14}$')] class Catalog(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) catalog_id: Annotated[ str | None, @@ -52,7 +52,7 @@ class Catalog(AdCPBaseModel): feed_format: Annotated[ feed_format_1.FeedFormat | None, Field( - description="Format of the external feed at url. Required when url points to a non-AdCP feed (e.g., Google Merchant Center XML, Meta Product Catalog). Omit for offering-type catalogs where the feed is native AdCP JSON." + description='Format of the external feed at url. Required when url points to a non-AdCP feed (e.g., Google Merchant Center XML, Meta Product Catalog). Omit for offering-type catalogs where the feed is native AdCP JSON.' ), ] = None gtins: Annotated[ @@ -65,7 +65,7 @@ class Catalog(AdCPBaseModel): ids: Annotated[ list[str] | None, Field( - description="Filter catalog to specific item IDs. For offering-type catalogs, these are offering_id values. For product-type catalogs, these are SKU identifiers.", + description='Filter catalog to specific item IDs. For offering-type catalogs, these are offering_id values. For product-type catalogs, these are SKU identifiers.', min_length=1, ), ] = None @@ -91,7 +91,7 @@ class Catalog(AdCPBaseModel): tags: Annotated[ list[str] | None, Field( - description="Filter catalog to items with these tags. Tags are matched using OR logic — items matching any tag are included.", + description='Filter catalog to items with these tags. Tags are matched using OR logic — items matching any tag are included.', min_length=1, ), ] = None @@ -104,7 +104,7 @@ class Catalog(AdCPBaseModel): update_frequency: Annotated[ update_frequency_1.UpdateFrequency | None, Field( - description="How often the platform should re-fetch the feed from url. Only applicable when url is provided. Platforms may use this as a hint for polling schedules." + description='How often the platform should re-fetch the feed from url. Only applicable when url is provided. Platforms may use this as a hint for polling schedules.' ), ] = None url: Annotated[ diff --git a/src/adcp/types/generated_poc/core/catchment.py b/src/adcp/types/generated_poc/core/catchment.py index ba118282..b75afc71 100644 --- a/src/adcp/types/generated_poc/core/catchment.py +++ b/src/adcp/types/generated_poc/core/catchment.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/catchment.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,34 +16,34 @@ class Type(Enum): - Polygon = "Polygon" - MultiPolygon = "MultiPolygon" + Polygon = 'Polygon' + MultiPolygon = 'MultiPolygon' class Geometry(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) coordinates: Annotated[ Any, Field( - description="GeoJSON coordinates array. For Polygon: array of linear rings. For MultiPolygon: array of polygons." + description='GeoJSON coordinates array. For Polygon: array of linear rings. For MultiPolygon: array of polygons.' ), ] - type: Annotated[Type, Field(description="GeoJSON geometry type.")] + type: Annotated[Type, Field(description='GeoJSON geometry type.')] class Unit(Enum): - min = "min" - hr = "hr" + min = 'min' + hr = 'hr' class TravelTime(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) - unit: Annotated[Unit, Field(description="Time unit.")] - value: Annotated[float, Field(description="Travel time limit.", ge=1.0)] + unit: Annotated[Unit, Field(description='Time unit.')] + value: Annotated[float, Field(description='Travel time limit.', ge=1.0)] class Geometry1(Geometry): @@ -64,15 +64,15 @@ class TravelTime2(TravelTime): class Radius(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) - unit: Annotated[distance_unit.DistanceUnit, Field(description="Distance unit.")] - value: Annotated[float, Field(description="Radius distance.", gt=0.0)] + unit: Annotated[distance_unit.DistanceUnit, Field(description='Distance unit.')] + value: Annotated[float, Field(description='Radius distance.', gt=0.0)] class Catchment1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) catchment_id: Annotated[ str, @@ -84,7 +84,7 @@ class Catchment1(AdCPBaseModel): geometry: Annotated[ Geometry | None, Field( - description="Pre-computed GeoJSON geometry defining the catchment boundary. Use this when the buyer has already calculated isochrones (via TravelTime, Mapbox, etc.) or has custom trade area boundaries. Supports Polygon and MultiPolygon types." + description='Pre-computed GeoJSON geometry defining the catchment boundary. Use this when the buyer has already calculated isochrones (via TravelTime, Mapbox, etc.) or has custom trade area boundaries. Supports Polygon and MultiPolygon types.' ), ] = None label: Annotated[ @@ -102,20 +102,20 @@ class Catchment1(AdCPBaseModel): transport_mode: Annotated[ transport_mode_1.TransportMode, Field( - description="Transportation mode for isochrone calculation. Required when travel_time is provided." + description='Transportation mode for isochrone calculation. Required when travel_time is provided.' ), ] travel_time: Annotated[ TravelTime, Field( - description="Travel time limit for isochrone calculation. The platform resolves this to a geographic boundary based on actual transportation networks, accounting for road connectivity, transit schedules, and terrain." + description='Travel time limit for isochrone calculation. The platform resolves this to a geographic boundary based on actual transportation networks, accounting for road connectivity, transit schedules, and terrain.' ), ] class Catchment2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) catchment_id: Annotated[ str, @@ -127,7 +127,7 @@ class Catchment2(AdCPBaseModel): geometry: Annotated[ Geometry1 | None, Field( - description="Pre-computed GeoJSON geometry defining the catchment boundary. Use this when the buyer has already calculated isochrones (via TravelTime, Mapbox, etc.) or has custom trade area boundaries. Supports Polygon and MultiPolygon types." + description='Pre-computed GeoJSON geometry defining the catchment boundary. Use this when the buyer has already calculated isochrones (via TravelTime, Mapbox, etc.) or has custom trade area boundaries. Supports Polygon and MultiPolygon types.' ), ] = None label: Annotated[ @@ -145,20 +145,20 @@ class Catchment2(AdCPBaseModel): transport_mode: Annotated[ transport_mode_1.TransportMode | None, Field( - description="Transportation mode for isochrone calculation. Required when travel_time is provided." + description='Transportation mode for isochrone calculation. Required when travel_time is provided.' ), ] = None travel_time: Annotated[ TravelTime1 | None, Field( - description="Travel time limit for isochrone calculation. The platform resolves this to a geographic boundary based on actual transportation networks, accounting for road connectivity, transit schedules, and terrain." + description='Travel time limit for isochrone calculation. The platform resolves this to a geographic boundary based on actual transportation networks, accounting for road connectivity, transit schedules, and terrain.' ), ] = None class Catchment3(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) catchment_id: Annotated[ str, @@ -170,7 +170,7 @@ class Catchment3(AdCPBaseModel): geometry: Annotated[ Geometry2, Field( - description="Pre-computed GeoJSON geometry defining the catchment boundary. Use this when the buyer has already calculated isochrones (via TravelTime, Mapbox, etc.) or has custom trade area boundaries. Supports Polygon and MultiPolygon types." + description='Pre-computed GeoJSON geometry defining the catchment boundary. Use this when the buyer has already calculated isochrones (via TravelTime, Mapbox, etc.) or has custom trade area boundaries. Supports Polygon and MultiPolygon types.' ), ] label: Annotated[ @@ -188,13 +188,13 @@ class Catchment3(AdCPBaseModel): transport_mode: Annotated[ transport_mode_1.TransportMode | None, Field( - description="Transportation mode for isochrone calculation. Required when travel_time is provided." + description='Transportation mode for isochrone calculation. Required when travel_time is provided.' ), ] = None travel_time: Annotated[ TravelTime2 | None, Field( - description="Travel time limit for isochrone calculation. The platform resolves this to a geographic boundary based on actual transportation networks, accounting for road connectivity, transit schedules, and terrain." + description='Travel time limit for isochrone calculation. The platform resolves this to a geographic boundary based on actual transportation networks, accounting for road connectivity, transit schedules, and terrain.' ), ] = None @@ -203,39 +203,39 @@ class Catchment(RootModel[Catchment1 | Catchment2 | Catchment3]): root: Annotated[ Catchment1 | Catchment2 | Catchment3, Field( - description="A catchment area definition for a store or location. Defines the geographic area from which a store draws customers. Three methods are supported: isochrone inputs (travel time + transport mode, platform resolves the shape), simple radius (distance from location), or pre-computed GeoJSON geometry (buyer provides the exact boundary). Provide exactly one method per catchment.", + description='A catchment area definition for a store or location. Defines the geographic area from which a store draws customers. Three methods are supported: isochrone inputs (travel time + transport mode, platform resolves the shape), simple radius (distance from location), or pre-computed GeoJSON geometry (buyer provides the exact boundary). Provide exactly one method per catchment.', examples=[ { - "data": { - "catchment_id": "drive", - "label": "15-min drive", - "transport_mode": "driving", - "travel_time": {"unit": "min", "value": 15}, + 'data': { + 'catchment_id': 'drive', + 'label': '15-min drive', + 'transport_mode': 'driving', + 'travel_time': {'unit': 'min', 'value': 15}, }, - "description": "Isochrone: 15-minute drive", + 'description': 'Isochrone: 15-minute drive', }, { - "data": { - "catchment_id": "walk", - "label": "10-min walk", - "transport_mode": "walking", - "travel_time": {"unit": "min", "value": 10}, + 'data': { + 'catchment_id': 'walk', + 'label': '10-min walk', + 'transport_mode': 'walking', + 'travel_time': {'unit': 'min', 'value': 10}, }, - "description": "Isochrone: 10-minute walk", + 'description': 'Isochrone: 10-minute walk', }, { - "data": { - "catchment_id": "local", - "label": "5km radius", - "radius": {"unit": "km", "value": 5}, + 'data': { + 'catchment_id': 'local', + 'label': '5km radius', + 'radius': {'unit': 'km', 'value': 5}, }, - "description": "Simple 5km radius", + 'description': 'Simple 5km radius', }, { - "data": { - "catchment_id": "trade-area", - "geometry": { - "coordinates": [ + 'data': { + 'catchment_id': 'trade-area', + 'geometry': { + 'coordinates': [ [ [4.85, 52.35], [4.95, 52.35], @@ -244,13 +244,13 @@ class Catchment(RootModel[Catchment1 | Catchment2 | Catchment3]): [4.85, 52.35], ] ], - "type": "Polygon", + 'type': 'Polygon', }, - "label": "Primary trade area", + 'label': 'Primary trade area', }, - "description": "Pre-computed GeoJSON boundary", + 'description': 'Pre-computed GeoJSON boundary', }, ], - title="Catchment", + title='Catchment', ), ] diff --git a/src/adcp/types/generated_poc/core/context.py b/src/adcp/types/generated_poc/core/context.py index bf2d2350..b81eaf3c 100644 --- a/src/adcp/types/generated_poc/core/context.py +++ b/src/adcp/types/generated_poc/core/context.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/context.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -10,5 +10,5 @@ class ContextObject(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) diff --git a/src/adcp/types/generated_poc/core/creative_asset.py b/src/adcp/types/generated_poc/core/creative_asset.py index 4d4f9282..47d9e290 100644 --- a/src/adcp/types/generated_poc/core/creative_asset.py +++ b/src/adcp/types/generated_poc/core/creative_asset.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/creative_asset.json -# timestamp: 2026-02-22T01:23:46+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -28,25 +28,25 @@ class Input(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context_description: Annotated[ str | None, - Field(description="Natural language description of the context for AI-generated content"), + Field(description='Natural language description of the context for AI-generated content'), ] = None macros: Annotated[ - dict[str, str] | None, Field(description="Macro values to apply for this preview") + dict[str, str] | None, Field(description='Macro values to apply for this preview') ] = None - name: Annotated[str, Field(description="Human-readable name for this preview variant")] + name: Annotated[str, Field(description='Human-readable name for this preview variant')] class CreativeAsset(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) assets: Annotated[ dict[ - Annotated[str, StringConstraints(pattern=r"^[a-zA-Z0-9_-]+$")], + Annotated[str, StringConstraints(pattern=r'^[a-zA-Z0-9_-]+$')], image_asset.ImageAsset | video_asset.VideoAsset | audio_asset.AudioAsset @@ -58,7 +58,7 @@ class CreativeAsset(AdCPBaseModel): | daast_asset.DaastAsset | url_asset.UrlAsset, ], - Field(description="Assets required by the format, keyed by asset_role"), + Field(description='Assets required by the format, keyed by asset_role'), ] catalogs: Annotated[ list[catalog.Catalog] | None, @@ -67,20 +67,20 @@ class CreativeAsset(AdCPBaseModel): min_length=1, ), ] = None - creative_id: Annotated[str, Field(description="Unique identifier for the creative")] + creative_id: Annotated[str, Field(description='Unique identifier for the creative')] format_id: Annotated[ format_id_1.FormatId, Field( - description="Format identifier specifying which format this creative conforms to. Can be: (1) concrete format_id referencing a format with fixed dimensions, (2) template format_id referencing a template format, or (3) parameterized format_id with dimensions/duration parameters for template formats." + description='Format identifier specifying which format this creative conforms to. Can be: (1) concrete format_id referencing a format with fixed dimensions, (2) template format_id referencing a template format, or (3) parameterized format_id with dimensions/duration parameters for template formats.' ), ] inputs: Annotated[ list[Input] | None, Field( - description="Preview contexts for generative formats - defines what scenarios to generate previews for" + description='Preview contexts for generative formats - defines what scenarios to generate previews for' ), ] = None - name: Annotated[str, Field(description="Human-readable creative name")] + name: Annotated[str, Field(description='Human-readable creative name')] placement_ids: Annotated[ list[str] | None, Field( @@ -95,12 +95,12 @@ class CreativeAsset(AdCPBaseModel): ), ] = None tags: Annotated[ - list[str] | None, Field(description="User-defined tags for organization and searchability") + list[str] | None, Field(description='User-defined tags for organization and searchability') ] = None weight: Annotated[ float | None, Field( - description="Optional delivery weight for creative rotation when uploading via create_media_buy or update_media_buy (0-100). If omitted, platform determines rotation. Only used during upload to media buy - not stored in creative library.", + description='Optional delivery weight for creative rotation when uploading via create_media_buy or update_media_buy (0-100). If omitted, platform determines rotation. Only used during upload to media buy - not stored in creative library.', ge=0.0, le=100.0, ), diff --git a/src/adcp/types/generated_poc/core/creative_assignment.py b/src/adcp/types/generated_poc/core/creative_assignment.py index 6ba97c71..ace0659b 100644 --- a/src/adcp/types/generated_poc/core/creative_assignment.py +++ b/src/adcp/types/generated_poc/core/creative_assignment.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/creative_assignment.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,9 +12,9 @@ class CreativeAssignment(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - creative_id: Annotated[str, Field(description="Unique identifier for the creative")] + creative_id: Annotated[str, Field(description='Unique identifier for the creative')] placement_ids: Annotated[ list[str] | None, Field( @@ -23,5 +23,5 @@ class CreativeAssignment(AdCPBaseModel): ), ] = None weight: Annotated[ - float | None, Field(description="Delivery weight for this creative", ge=0.0, le=100.0) + float | None, Field(description='Delivery weight for this creative', ge=0.0, le=100.0) ] = None diff --git a/src/adcp/types/generated_poc/core/creative_brief.py b/src/adcp/types/generated_poc/core/creative_brief.py index 78410d0b..4cdab5d1 100644 --- a/src/adcp/types/generated_poc/core/creative_brief.py +++ b/src/adcp/types/generated_poc/core/creative_brief.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/creative_brief.json -# timestamp: 2026-02-18T17:56:28+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,50 +15,50 @@ class Messaging(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - cta: Annotated[str | None, Field(description="Call-to-action text")] = None - headline: Annotated[str | None, Field(description="Primary headline")] = None + cta: Annotated[str | None, Field(description='Call-to-action text')] = None + headline: Annotated[str | None, Field(description='Primary headline')] = None key_messages: Annotated[ - list[str] | None, Field(description="Key messages to communicate in priority order") + list[str] | None, Field(description='Key messages to communicate in priority order') ] = None - tagline: Annotated[str | None, Field(description="Supporting tagline or sub-headline")] = None + tagline: Annotated[str | None, Field(description='Supporting tagline or sub-headline')] = None class Objective(Enum): - awareness = "awareness" - consideration = "consideration" - conversion = "conversion" - retention = "retention" - engagement = "engagement" + awareness = 'awareness' + consideration = 'consideration' + conversion = 'conversion' + retention = 'retention' + engagement = 'engagement' class CreativeBrief(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) audience: Annotated[ - str | None, Field(description="Target audience description for this campaign") + str | None, Field(description='Target audience description for this campaign') ] = None messaging: Annotated[ - Messaging | None, Field(description="Messaging framework for the campaign") + Messaging | None, Field(description='Messaging framework for the campaign') ] = None - name: Annotated[str, Field(description="Campaign or flight name for identification")] + name: Annotated[str, Field(description='Campaign or flight name for identification')] objective: Annotated[ Objective | None, Field( - description="Campaign objective that guides creative tone and call-to-action strategy" + description='Campaign objective that guides creative tone and call-to-action strategy' ), ] = None reference_assets: Annotated[ list[reference_asset.ReferenceAsset] | None, Field( - description="Visual and strategic reference materials such as mood boards, product shots, example creatives, and strategy documents" + description='Visual and strategic reference materials such as mood boards, product shots, example creatives, and strategy documents' ), ] = None territory: Annotated[ str | None, - Field(description="Creative territory or positioning the campaign should occupy"), + Field(description='Creative territory or positioning the campaign should occupy'), ] = None tone: Annotated[ str | None, diff --git a/src/adcp/types/generated_poc/core/creative_brief_ref.py b/src/adcp/types/generated_poc/core/creative_brief_ref.py index 8ce05755..18a24356 100644 --- a/src/adcp/types/generated_poc/core/creative_brief_ref.py +++ b/src/adcp/types/generated_poc/core/creative_brief_ref.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/creative_brief_ref.json -# timestamp: 2026-02-18T17:56:28+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,25 +15,25 @@ class CreativeBriefReference(RootModel[creative_brief.CreativeBrief | AnyUrl]): root: Annotated[ creative_brief.CreativeBrief | AnyUrl, Field( - description="Creative brief provided either as an inline object or a URL string pointing to a hosted brief", + description='Creative brief provided either as an inline object or a URL string pointing to a hosted brief', examples=[ { - "data": { - "audience": "Gift shoppers aged 25-55", - "messaging": { - "cta": "Shop Holiday Deals", - "headline": "Give the Gift of Style", + 'data': { + 'audience': 'Gift shoppers aged 25-55', + 'messaging': { + 'cta': 'Shop Holiday Deals', + 'headline': 'Give the Gift of Style', }, - "name": "Holiday Campaign 2025", - "objective": "conversion", + 'name': 'Holiday Campaign 2025', + 'objective': 'conversion', }, - "description": "Inline creative brief", + 'description': 'Inline creative brief', }, { - "data": "https://cdn.example.com/briefs/holiday-2025.json", - "description": "URL string reference to hosted brief", + 'data': 'https://cdn.example.com/briefs/holiday-2025.json', + 'description': 'URL string reference to hosted brief', }, ], - title="Creative Brief Reference", + title='Creative Brief Reference', ), ] diff --git a/src/adcp/types/generated_poc/core/creative_filters.py b/src/adcp/types/generated_poc/core/creative_filters.py index 23a4334e..c5c47db7 100644 --- a/src/adcp/types/generated_poc/core/creative_filters.py +++ b/src/adcp/types/generated_poc/core/creative_filters.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/creative_filters.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,79 +14,79 @@ class CreativeFilters(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) account_ids: Annotated[ list[str] | None, Field( - description="Filter creatives by owning accounts. Useful for agencies managing multiple client accounts.", + description='Filter creatives by owning accounts. Useful for agencies managing multiple client accounts.', min_length=1, ), ] = None assigned_to_packages: Annotated[ list[str] | None, - Field(description="Filter creatives assigned to any of these packages", min_length=1), + Field(description='Filter creatives assigned to any of these packages', min_length=1), ] = None buyer_refs: Annotated[ list[str] | None, Field( - description="Filter creatives assigned to media buys with any of these buyer references", + description='Filter creatives assigned to media buys with any of these buyer references', min_length=1, ), ] = None created_after: Annotated[ AwareDatetime | None, - Field(description="Filter creatives created after this date (ISO 8601)"), + Field(description='Filter creatives created after this date (ISO 8601)'), ] = None created_before: Annotated[ AwareDatetime | None, - Field(description="Filter creatives created before this date (ISO 8601)"), + Field(description='Filter creatives created before this date (ISO 8601)'), ] = None creative_ids: Annotated[ list[str] | None, - Field(description="Filter by specific creative IDs", max_length=100, min_length=1), + Field(description='Filter by specific creative IDs', max_length=100, min_length=1), ] = None formats: Annotated[ list[str] | None, Field( - description="Filter by creative format types (e.g., video, audio, display)", + description='Filter by creative format types (e.g., video, audio, display)', min_length=1, ), ] = None has_performance_data: Annotated[ - bool | None, Field(description="Filter creatives that have performance data when true") + bool | None, Field(description='Filter creatives that have performance data when true') ] = None media_buy_ids: Annotated[ list[str] | None, - Field(description="Filter creatives assigned to any of these media buys", min_length=1), + Field(description='Filter creatives assigned to any of these media buys', min_length=1), ] = None name_contains: Annotated[ str | None, - Field(description="Filter by creative names containing this text (case-insensitive)"), + Field(description='Filter by creative names containing this text (case-insensitive)'), ] = None statuses: Annotated[ list[creative_status.CreativeStatus] | None, - Field(description="Filter by creative approval statuses", min_length=1), + Field(description='Filter by creative approval statuses', min_length=1), ] = None tags: Annotated[ list[str] | None, - Field(description="Filter by creative tags (all tags must match)", min_length=1), + Field(description='Filter by creative tags (all tags must match)', min_length=1), ] = None tags_any: Annotated[ list[str] | None, - Field(description="Filter by creative tags (any tag must match)", min_length=1), + Field(description='Filter by creative tags (any tag must match)', min_length=1), ] = None unassigned: Annotated[ bool | None, Field( - description="Filter for unassigned creatives when true, assigned creatives when false" + description='Filter for unassigned creatives when true, assigned creatives when false' ), ] = None updated_after: Annotated[ AwareDatetime | None, - Field(description="Filter creatives last updated after this date (ISO 8601)"), + Field(description='Filter creatives last updated after this date (ISO 8601)'), ] = None updated_before: Annotated[ AwareDatetime | None, - Field(description="Filter creatives last updated before this date (ISO 8601)"), + Field(description='Filter creatives last updated before this date (ISO 8601)'), ] = None diff --git a/src/adcp/types/generated_poc/core/creative_manifest.py b/src/adcp/types/generated_poc/core/creative_manifest.py index f933d08e..0def580f 100644 --- a/src/adcp/types/generated_poc/core/creative_manifest.py +++ b/src/adcp/types/generated_poc/core/creative_manifest.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/creative_manifest.json -# timestamp: 2026-02-22T01:23:46+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -29,11 +29,11 @@ class CreativeManifest(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) assets: Annotated[ dict[ - Annotated[str, StringConstraints(pattern=r"^[a-z0-9_]+$")], + Annotated[str, StringConstraints(pattern=r'^[a-z0-9_]+$')], image_asset.ImageAsset | video_asset.VideoAsset | audio_asset.AudioAsset diff --git a/src/adcp/types/generated_poc/core/creative_policy.py b/src/adcp/types/generated_poc/core/creative_policy.py index 7276b3d1..81c120fd 100644 --- a/src/adcp/types/generated_poc/core/creative_policy.py +++ b/src/adcp/types/generated_poc/core/creative_policy.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/creative_policy.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,15 +14,15 @@ class CreativePolicy(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) co_branding: Annotated[ - co_branding_requirement.CoBrandingRequirement, Field(description="Co-branding requirement") + co_branding_requirement.CoBrandingRequirement, Field(description='Co-branding requirement') ] landing_page: Annotated[ landing_page_requirement.LandingPageRequirement, - Field(description="Landing page requirements"), + Field(description='Landing page requirements'), ] templates_available: Annotated[ - bool, Field(description="Whether creative templates are provided") + bool, Field(description='Whether creative templates are provided') ] diff --git a/src/adcp/types/generated_poc/core/creative_variant.py b/src/adcp/types/generated_poc/core/creative_variant.py index 484d0360..9f3303fd 100644 --- a/src/adcp/types/generated_poc/core/creative_variant.py +++ b/src/adcp/types/generated_poc/core/creative_variant.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/creative_variant.json -# timestamp: 2026-02-18T17:56:28+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -17,22 +17,22 @@ class Artifact(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) - artifact_id: Annotated[str, Field(description="Artifact identifier within the property")] + artifact_id: Annotated[str, Field(description='Artifact identifier within the property')] property_id: Annotated[ - identifier.Identifier, Field(description="Property where the artifact appears") + identifier.Identifier, Field(description='Property where the artifact appears') ] class GenerationContext(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) artifact: Annotated[ Artifact | None, Field( - description="Reference to the content-standards artifact that provided the generation context. Links this variant to the specific piece of content (article, video, podcast segment, etc.) where the ad was placed." + description='Reference to the content-standards artifact that provided the generation context. Links this variant to the specific piece of content (article, video, podcast segment, etc.) where the ad was placed.' ), ] = None context_type: Annotated[ @@ -48,13 +48,13 @@ class CreativeVariant(DeliveryMetrics): generation_context: Annotated[ GenerationContext | None, Field( - description="Input signals that triggered generation of this variant (Tier 3). Describes why the platform created this specific variant. Platforms should provide summarized or anonymized signals rather than raw user input. For web contexts, may include page topic or URL. For conversational contexts, an anonymized content signal. For search, query category or intent. When the content context is managed through AdCP content standards, reference the artifact directly via the artifact field." + description='Input signals that triggered generation of this variant (Tier 3). Describes why the platform created this specific variant. Platforms should provide summarized or anonymized signals rather than raw user input. For web contexts, may include page topic or URL. For conversational contexts, an anonymized content signal. For search, query category or intent. When the content context is managed through AdCP content standards, reference the artifact directly via the artifact field.' ), ] = None manifest: Annotated[ creative_manifest.CreativeManifest | None, Field( - description="The rendered creative manifest for this variant — the actual output that was served, not the input assets. Contains format_id and the resolved assets (specific headline, image, video, etc. the platform selected or generated). For Tier 2, shows which asset combination was picked. For Tier 3, contains the generated assets which may differ entirely from the input brand identity. Pass to preview_creative to re-render." + description='The rendered creative manifest for this variant — the actual output that was served, not the input assets. Contains format_id and the resolved assets (specific headline, image, video, etc. the platform selected or generated). For Tier 2, shows which asset combination was picked. For Tier 3, contains the generated assets which may differ entirely from the input brand identity. Pass to preview_creative to re-render.' ), ] = None - variant_id: Annotated[str, Field(description="Platform-assigned identifier for this variant")] + variant_id: Annotated[str, Field(description='Platform-assigned identifier for this variant')] diff --git a/src/adcp/types/generated_poc/core/data_provider_signal_selector.py b/src/adcp/types/generated_poc/core/data_provider_signal_selector.py index 1510cb74..215fdc64 100644 --- a/src/adcp/types/generated_poc/core/data_provider_signal_selector.py +++ b/src/adcp/types/generated_poc/core/data_provider_signal_selector.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/data_provider_signal_selector.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,41 +12,41 @@ class DataProviderSignalSelector1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) data_provider_domain: Annotated[ str, Field( description="Domain where data provider's adagents.json is hosted (e.g., 'polk.com')", - pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", + pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', ), ] selection_type: Annotated[ - Literal["all"], + Literal['all'], Field( - description="Discriminator indicating all signals from this data provider are included" + description='Discriminator indicating all signals from this data provider are included' ), ] class SignalId(RootModel[str]): - root: Annotated[str, Field(pattern="^[a-zA-Z0-9_-]+$")] + root: Annotated[str, Field(pattern='^[a-zA-Z0-9_-]+$')] class DataProviderSignalSelector2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) data_provider_domain: Annotated[ str, Field( description="Domain where data provider's adagents.json is hosted (e.g., 'polk.com')", - pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", + pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', ), ] selection_type: Annotated[ - Literal["by_id"], - Field(description="Discriminator indicating selection by specific signal IDs"), + Literal['by_id'], + Field(description='Discriminator indicating selection by specific signal IDs'), ] signal_ids: Annotated[ list[SignalId], @@ -55,22 +55,22 @@ class DataProviderSignalSelector2(AdCPBaseModel): class SignalTag(RootModel[str]): - root: Annotated[str, Field(pattern="^[a-z0-9_-]+$")] + root: Annotated[str, Field(pattern='^[a-z0-9_-]+$')] class DataProviderSignalSelector3(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) data_provider_domain: Annotated[ str, Field( description="Domain where data provider's adagents.json is hosted (e.g., 'polk.com')", - pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", + pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', ), ] selection_type: Annotated[ - Literal["by_tag"], Field(description="Discriminator indicating selection by signal tags") + Literal['by_tag'], Field(description='Discriminator indicating selection by signal tags') ] signal_tags: Annotated[ list[SignalTag], @@ -90,7 +90,7 @@ class DataProviderSignalSelector( DataProviderSignalSelector1 | DataProviderSignalSelector2 | DataProviderSignalSelector3, Field( description="Selects signals from a data provider's adagents.json catalog. Used for product definitions and agent authorization. Supports three selection patterns: all signals, specific IDs, or by tags.", - discriminator="selection_type", - title="Data Provider Signal Selector", + discriminator='selection_type', + title='Data Provider Signal Selector', ), ] diff --git a/src/adcp/types/generated_poc/core/daypart_target.py b/src/adcp/types/generated_poc/core/daypart_target.py index bb2e2cb3..f4ade2f5 100644 --- a/src/adcp/types/generated_poc/core/daypart_target.py +++ b/src/adcp/types/generated_poc/core/daypart_target.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/daypart_target.json -# timestamp: 2026-02-12T12:00:44+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,19 +14,19 @@ class DaypartTarget(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) days: Annotated[ list[day_of_week.DayOfWeek], Field( - description="Days of week this window applies to. Use multiple days for compact targeting (e.g., monday-friday in one object).", + description='Days of week this window applies to. Use multiple days for compact targeting (e.g., monday-friday in one object).', min_length=1, ), ] end_hour: Annotated[ int, Field( - description="End hour (exclusive), 1-24 in 24-hour format. 10 = 10:00am, 24 = midnight. Must be greater than start_hour.", + description='End hour (exclusive), 1-24 in 24-hour format. 10 = 10:00am, 24 = midnight. Must be greater than start_hour.', ge=1, le=24, ), @@ -40,7 +40,7 @@ class DaypartTarget(AdCPBaseModel): start_hour: Annotated[ int, Field( - description="Start hour (inclusive), 0-23 in 24-hour format. 0 = midnight, 6 = 6:00am, 18 = 6:00pm.", + description='Start hour (inclusive), 0-23 in 24-hour format. 0 = midnight, 6 = 6:00am, 18 = 6:00pm.', ge=0, le=23, ), diff --git a/src/adcp/types/generated_poc/core/delivery_forecast.py b/src/adcp/types/generated_poc/core/delivery_forecast.py index 38d205ce..d226c5b2 100644 --- a/src/adcp/types/generated_poc/core/delivery_forecast.py +++ b/src/adcp/types/generated_poc/core/delivery_forecast.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/delivery_forecast.json -# timestamp: 2026-02-12T12:00:44+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -19,25 +19,25 @@ class DeliveryForecast(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) currency: Annotated[ str, Field( - description="ISO 4217 currency code for monetary values in this forecast (spend, budget)" + description='ISO 4217 currency code for monetary values in this forecast (spend, budget)' ), ] demographic: Annotated[ str | None, Field( - description="Target demographic code within the specified demographic_system. For Nielsen: P18-49, M25-54, W35+. For BARB: ABC1 Adults, 16-34. For AGF: E 14-49.", - examples=["P18-49", "A25-54", "W35+", "M18-34"], + description='Target demographic code within the specified demographic_system. For Nielsen: P18-49, M25-54, W35+. For BARB: ABC1 Adults, 16-34. For AGF: E 14-49.', + examples=['P18-49', 'A25-54', 'W35+', 'M18-34'], ), ] = None demographic_system: Annotated[ demographic_system_1.DemographicSystem | None, Field( - description="Measurement system for the demographic field. Ensures buyer and seller agree on demographic notation." + description='Measurement system for the demographic field. Ensures buyer and seller agree on demographic notation.' ), ] = None ext: ext_1.ExtensionObject | None = None @@ -48,27 +48,27 @@ class DeliveryForecast(AdCPBaseModel): ), ] = None generated_at: Annotated[ - AwareDatetime | None, Field(description="When this forecast was computed") + AwareDatetime | None, Field(description='When this forecast was computed') ] = None method: Annotated[ - forecast_method.ForecastMethod, Field(description="Method used to produce this forecast") + forecast_method.ForecastMethod, Field(description='Method used to produce this forecast') ] points: Annotated[ list[forecast_point.ForecastPoint], Field( - description="Forecasted delivery at one or more budget levels. A single point is a standard forecast; multiple points ordered by ascending budget form a curve showing how metrics scale with spend. Each point pairs a budget with metric ranges.", + description='Forecasted delivery at one or more budget levels. A single point is a standard forecast; multiple points ordered by ascending budget form a curve showing how metrics scale with spend. Each point pairs a budget with metric ranges.', min_length=1, ), ] reach_unit: Annotated[ reach_unit_1.ReachUnit | None, Field( - description="Unit of measurement for reach and audience_size metrics in this forecast. Required for cross-channel forecast comparison." + description='Unit of measurement for reach and audience_size metrics in this forecast. Required for cross-channel forecast comparison.' ), ] = None valid_until: Annotated[ AwareDatetime | None, Field( - description="When this forecast expires. After this time, the forecast should be refreshed. Forecast expiry does not affect proposal executability." + description='When this forecast expires. After this time, the forecast should be refreshed. Forecast expiry does not affect proposal executability.' ), ] = None diff --git a/src/adcp/types/generated_poc/core/delivery_metrics.py b/src/adcp/types/generated_poc/core/delivery_metrics.py index 1da7653d..4d0c1b11 100644 --- a/src/adcp/types/generated_poc/core/delivery_metrics.py +++ b/src/adcp/types/generated_poc/core/delivery_metrics.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/delivery_metrics.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,37 +16,37 @@ class ByActionSourceItem(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) action_source: Annotated[ - action_source_1.ActionSource, Field(description="Where the conversion occurred") + action_source_1.ActionSource, Field(description='Where the conversion occurred') ] count: Annotated[ - float, Field(description="Number of conversions from this action source", ge=0.0) + float, Field(description='Number of conversions from this action source', ge=0.0) ] event_source_id: Annotated[ str | None, Field( - description="Event source that produced these conversions (for disambiguation when multiple event sources are configured)" + description='Event source that produced these conversions (for disambiguation when multiple event sources are configured)' ), ] = None value: Annotated[ float | None, - Field(description="Total monetary value of conversions from this action source", ge=0.0), + Field(description='Total monetary value of conversions from this action source', ge=0.0), ] = None class VenueBreakdownItem(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - impressions: Annotated[int, Field(description="Impressions delivered at this venue", ge=0)] - loop_plays: Annotated[int | None, Field(description="Loop plays at this venue", ge=0)] = None + impressions: Annotated[int, Field(description='Impressions delivered at this venue', ge=0)] + loop_plays: Annotated[int | None, Field(description='Loop plays at this venue', ge=0)] = None screens_used: Annotated[ - int | None, Field(description="Number of screens used at this venue", ge=0) + int | None, Field(description='Number of screens used at this venue', ge=0) ] = None - venue_id: Annotated[str, Field(description="Venue identifier")] - venue_name: Annotated[str | None, Field(description="Human-readable venue name")] = None + venue_id: Annotated[str, Field(description='Venue identifier')] + venue_name: Annotated[str | None, Field(description='Human-readable venue name')] = None venue_type: Annotated[ str | None, Field(description="Venue type (e.g., 'airport', 'transit', 'retail', 'billboard')"), @@ -55,49 +55,49 @@ class VenueBreakdownItem(AdCPBaseModel): class DoohMetrics(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) calculation_notes: Annotated[ - str | None, Field(description="Explanation of how DOOH impressions were calculated") + str | None, Field(description='Explanation of how DOOH impressions were calculated') ] = None loop_plays: Annotated[ - int | None, Field(description="Number of times ad played in rotation", ge=0) + int | None, Field(description='Number of times ad played in rotation', ge=0) ] = None screen_time_seconds: Annotated[ - int | None, Field(description="Total display time in seconds", ge=0) + int | None, Field(description='Total display time in seconds', ge=0) ] = None screens_used: Annotated[ - int | None, Field(description="Number of unique screens displaying the ad", ge=0) + int | None, Field(description='Number of unique screens displaying the ad', ge=0) ] = None sov_achieved: Annotated[ float | None, - Field(description="Actual share of voice delivered (0.0 to 1.0)", ge=0.0, le=1.0), + Field(description='Actual share of voice delivered (0.0 to 1.0)', ge=0.0, le=1.0), ] = None venue_breakdown: Annotated[ - list[VenueBreakdownItem] | None, Field(description="Per-venue performance breakdown") + list[VenueBreakdownItem] | None, Field(description='Per-venue performance breakdown') ] = None class QuartileData(AdCPBaseModel): - q1_views: Annotated[float | None, Field(description="25% completion views", ge=0.0)] = None - q2_views: Annotated[float | None, Field(description="50% completion views", ge=0.0)] = None - q3_views: Annotated[float | None, Field(description="75% completion views", ge=0.0)] = None - q4_views: Annotated[float | None, Field(description="100% completion views", ge=0.0)] = None + q1_views: Annotated[float | None, Field(description='25% completion views', ge=0.0)] = None + q2_views: Annotated[float | None, Field(description='50% completion views', ge=0.0)] = None + q3_views: Annotated[float | None, Field(description='75% completion views', ge=0.0)] = None + q4_views: Annotated[float | None, Field(description='100% completion views', ge=0.0)] = None class Standard(Enum): - mrc = "mrc" - groupm = "groupm" + mrc = 'mrc' + groupm = 'groupm' class Viewability(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) measurable_impressions: Annotated[ float | None, Field( - description="Impressions where viewability could be measured. Excludes environments without measurement capability (e.g., non-Intersection Observer browsers, certain app environments).", + description='Impressions where viewability could be measured. Excludes environments without measurement capability (e.g., non-Intersection Observer browsers, certain app environments).', ge=0.0, ), ] = None @@ -110,14 +110,14 @@ class Viewability(AdCPBaseModel): viewable_impressions: Annotated[ float | None, Field( - description="Impressions that met the viewability threshold defined by the measurement standard.", + description='Impressions that met the viewability threshold defined by the measurement standard.', ge=0.0, ), ] = None viewable_rate: Annotated[ float | None, Field( - description="Viewable impression rate (viewable_impressions / measurable_impressions). Range 0.0 to 1.0.", + description='Viewable impression rate (viewable_impressions / measurable_impressions). Range 0.0 to 1.0.', ge=0.0, le=1.0, ), @@ -126,76 +126,76 @@ class Viewability(AdCPBaseModel): class ByEventTypeItem(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - count: Annotated[float, Field(description="Number of events of this type", ge=0.0)] + count: Annotated[float, Field(description='Number of events of this type', ge=0.0)] event_source_id: Annotated[ str | None, Field( - description="Event source that produced these conversions (for disambiguation when multiple event sources are configured)" + description='Event source that produced these conversions (for disambiguation when multiple event sources are configured)' ), ] = None - event_type: Annotated[event_type_1.EventType, Field(description="The event type")] + event_type: Annotated[event_type_1.EventType, Field(description='The event type')] value: Annotated[ - float | None, Field(description="Total monetary value of events of this type", ge=0.0) + float | None, Field(description='Total monetary value of events of this type', ge=0.0) ] = None class DeliveryMetrics(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) by_action_source: Annotated[ list[ByActionSourceItem] | None, Field( - description="Conversion metrics broken down by action source (website, app, in_store, etc.). Useful for omnichannel sellers where conversions occur across digital and physical channels." + description='Conversion metrics broken down by action source (website, app, in_store, etc.). Useful for omnichannel sellers where conversions occur across digital and physical channels.' ), ] = None by_event_type: Annotated[ list[ByEventTypeItem] | None, Field( - description="Conversion metrics broken down by event type. Spend-derived metrics (ROAS, CPA) are only available at the package/totals level since spend cannot be attributed to individual event types." + description='Conversion metrics broken down by event type. Spend-derived metrics (ROAS, CPA) are only available at the package/totals level since spend cannot be attributed to individual event types.' ), ] = None - clicks: Annotated[float | None, Field(description="Total clicks", ge=0.0)] = None + clicks: Annotated[float | None, Field(description='Total clicks', ge=0.0)] = None completed_views: Annotated[ - float | None, Field(description="100% completions (for CPCV)", ge=0.0) + float | None, Field(description='100% completions (for CPCV)', ge=0.0) ] = None completion_rate: Annotated[ float | None, - Field(description="Completion rate (completed_views/impressions)", ge=0.0, le=1.0), + Field(description='Completion rate (completed_views/impressions)', ge=0.0, le=1.0), ] = None conversion_value: Annotated[ float | None, Field( - description="Total monetary value of attributed conversions (in the reporting currency)", + description='Total monetary value of attributed conversions (in the reporting currency)', ge=0.0, ), ] = None conversions: Annotated[ float | None, Field( - description="Total conversions attributed to this delivery. When by_event_type is present, this equals the sum of all by_event_type[].count entries.", + description='Total conversions attributed to this delivery. When by_event_type is present, this equals the sum of all by_event_type[].count entries.', ge=0.0, ), ] = None cost_per_acquisition: Annotated[ - float | None, Field(description="Cost per conversion (spend / conversions)", ge=0.0) + float | None, Field(description='Cost per conversion (spend / conversions)', ge=0.0) ] = None cost_per_click: Annotated[ - float | None, Field(description="Cost per click (spend / clicks)", ge=0.0) + float | None, Field(description='Cost per click (spend / clicks)', ge=0.0) ] = None ctr: Annotated[ - float | None, Field(description="Click-through rate (clicks/impressions)", ge=0.0, le=1.0) + float | None, Field(description='Click-through rate (clicks/impressions)', ge=0.0, le=1.0) ] = None dooh_metrics: Annotated[ DoohMetrics | None, - Field(description="DOOH-specific metrics (only included for DOOH campaigns)"), + Field(description='DOOH-specific metrics (only included for DOOH campaigns)'), ] = None engagement_rate: Annotated[ float | None, Field( - description="Platform-specific engagement rate (0.0 to 1.0). Definition varies by platform (e.g., likes+comments+shares/impressions on social, interactions/impressions on rich media).", + description='Platform-specific engagement rate (0.0 to 1.0). Definition varies by platform (e.g., likes+comments+shares/impressions on social, interactions/impressions on rich media).', ge=0.0, le=1.0, ), @@ -203,14 +203,14 @@ class DeliveryMetrics(AdCPBaseModel): frequency: Annotated[ float | None, Field( - description="Average frequency per individual (typically measured over campaign duration, but can vary by measurement provider)", + description='Average frequency per individual (typically measured over campaign duration, but can vary by measurement provider)', ge=0.0, ), ] = None grps: Annotated[ - float | None, Field(description="Gross Rating Points delivered (for CPP)", ge=0.0) + float | None, Field(description='Gross Rating Points delivered (for CPP)', ge=0.0) ] = None - impressions: Annotated[float | None, Field(description="Impressions delivered", ge=0.0)] = None + impressions: Annotated[float | None, Field(description='Impressions delivered', ge=0.0)] = None leads: Annotated[ float | None, Field( @@ -221,29 +221,29 @@ class DeliveryMetrics(AdCPBaseModel): new_to_brand_rate: Annotated[ float | None, Field( - description="Fraction of conversions from first-time brand buyers (0 = none, 1 = all)", + description='Fraction of conversions from first-time brand buyers (0 = none, 1 = all)', ge=0.0, le=1.0, ), ] = None quartile_data: Annotated[ - QuartileData | None, Field(description="Video quartile completion data") + QuartileData | None, Field(description='Video quartile completion data') ] = None reach: Annotated[ float | None, Field( - description="Unique reach - units depend on measurement provider (e.g., individuals, households, devices, cookies). See delivery_measurement.provider for methodology.", + description='Unique reach - units depend on measurement provider (e.g., individuals, households, devices, cookies). See delivery_measurement.provider for methodology.', ge=0.0, ), ] = None roas: Annotated[ - float | None, Field(description="Return on ad spend (conversion_value / spend)", ge=0.0) + float | None, Field(description='Return on ad spend (conversion_value / spend)', ge=0.0) ] = None - spend: Annotated[float | None, Field(description="Amount spent", ge=0.0)] = None + spend: Annotated[float | None, Field(description='Amount spent', ge=0.0)] = None viewability: Annotated[ Viewability | None, Field( - description="Viewability metrics. Viewable rate should be calculated as viewable_impressions / measurable_impressions (not total impressions), since some environments cannot measure viewability." + description='Viewability metrics. Viewable rate should be calculated as viewable_impressions / measurable_impressions (not total impressions), since some environments cannot measure viewability.' ), ] = None - views: Annotated[float | None, Field(description="Views at threshold (for CPV)", ge=0.0)] = None + views: Annotated[float | None, Field(description='Views at threshold (for CPV)', ge=0.0)] = None diff --git a/src/adcp/types/generated_poc/core/deployment.py b/src/adcp/types/generated_poc/core/deployment.py index b1de55f0..1f4352aa 100644 --- a/src/adcp/types/generated_poc/core/deployment.py +++ b/src/adcp/types/generated_poc/core/deployment.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/deployment.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,65 +14,65 @@ class Deployment1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - account: Annotated[str | None, Field(description="Account identifier if applicable")] = None + account: Annotated[str | None, Field(description='Account identifier if applicable')] = None activation_key: Annotated[ activation_key_1.ActivationKey | None, Field( - description="The key to use for targeting. Only present if is_live=true AND requester has access to this deployment." + description='The key to use for targeting. Only present if is_live=true AND requester has access to this deployment.' ), ] = None deployed_at: Annotated[ AwareDatetime | None, - Field(description="Timestamp when activation completed (if is_live=true)"), + Field(description='Timestamp when activation completed (if is_live=true)'), ] = None estimated_activation_duration_minutes: Annotated[ float | None, Field( - description="Estimated time to activate if not live, or to complete activation if in progress", + description='Estimated time to activate if not live, or to complete activation if in progress', ge=0.0, ), ] = None is_live: Annotated[ - bool, Field(description="Whether signal is currently active on this deployment") + bool, Field(description='Whether signal is currently active on this deployment') ] - platform: Annotated[str, Field(description="Platform identifier for DSPs")] + platform: Annotated[str, Field(description='Platform identifier for DSPs')] type: Annotated[ - Literal["platform"], - Field(description="Discriminator indicating this is a platform-based deployment"), + Literal['platform'], + Field(description='Discriminator indicating this is a platform-based deployment'), ] class Deployment2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - account: Annotated[str | None, Field(description="Account identifier if applicable")] = None + account: Annotated[str | None, Field(description='Account identifier if applicable')] = None activation_key: Annotated[ activation_key_1.ActivationKey | None, Field( - description="The key to use for targeting. Only present if is_live=true AND requester has access to this deployment." + description='The key to use for targeting. Only present if is_live=true AND requester has access to this deployment.' ), ] = None - agent_url: Annotated[AnyUrl, Field(description="URL identifying the deployment agent")] + agent_url: Annotated[AnyUrl, Field(description='URL identifying the deployment agent')] deployed_at: Annotated[ AwareDatetime | None, - Field(description="Timestamp when activation completed (if is_live=true)"), + Field(description='Timestamp when activation completed (if is_live=true)'), ] = None estimated_activation_duration_minutes: Annotated[ float | None, Field( - description="Estimated time to activate if not live, or to complete activation if in progress", + description='Estimated time to activate if not live, or to complete activation if in progress', ge=0.0, ), ] = None is_live: Annotated[ - bool, Field(description="Whether signal is currently active on this deployment") + bool, Field(description='Whether signal is currently active on this deployment') ] type: Annotated[ - Literal["agent"], - Field(description="Discriminator indicating this is an agent URL-based deployment"), + Literal['agent'], + Field(description='Discriminator indicating this is an agent URL-based deployment'), ] @@ -80,7 +80,7 @@ class Deployment(RootModel[Deployment1 | Deployment2]): root: Annotated[ Deployment1 | Deployment2, Field( - description="A signal deployment to a specific deployment target with activation status and key", - title="Deployment", + description='A signal deployment to a specific deployment target with activation status and key', + title='Deployment', ), ] diff --git a/src/adcp/types/generated_poc/core/destination.py b/src/adcp/types/generated_poc/core/destination.py index 798a4be5..aaee2108 100644 --- a/src/adcp/types/generated_poc/core/destination.py +++ b/src/adcp/types/generated_poc/core/destination.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/destination.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,34 +12,34 @@ class Destination1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) account: Annotated[ - str | None, Field(description="Optional account identifier on the platform") + str | None, Field(description='Optional account identifier on the platform') ] = None platform: Annotated[ str, Field(description="Platform identifier for DSPs (e.g., 'the-trade-desk', 'amazon-dsp')"), ] type: Annotated[ - Literal["platform"], - Field(description="Discriminator indicating this is a platform-based deployment"), + Literal['platform'], + Field(description='Discriminator indicating this is a platform-based deployment'), ] class Destination2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) account: Annotated[ - str | None, Field(description="Optional account identifier on the agent") + str | None, Field(description='Optional account identifier on the agent') ] = None agent_url: Annotated[ - AnyUrl, Field(description="URL identifying the deployment agent (for sales agents, etc.)") + AnyUrl, Field(description='URL identifying the deployment agent (for sales agents, etc.)') ] type: Annotated[ - Literal["agent"], - Field(description="Discriminator indicating this is an agent URL-based deployment"), + Literal['agent'], + Field(description='Discriminator indicating this is an agent URL-based deployment'), ] @@ -47,7 +47,7 @@ class Destination(RootModel[Destination1 | Destination2]): root: Annotated[ Destination1 | Destination2, Field( - description="A deployment target where signals can be activated (DSP, sales agent, etc.)", - title="Destination", + description='A deployment target where signals can be activated (DSP, sales agent, etc.)', + title='Destination', ), ] diff --git a/src/adcp/types/generated_poc/core/destination_item.py b/src/adcp/types/generated_poc/core/destination_item.py index 78fd51c0..df9d93f4 100644 --- a/src/adcp/types/generated_poc/core/destination_item.py +++ b/src/adcp/types/generated_poc/core/destination_item.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/destination_item.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,58 +15,58 @@ class DestinationType(Enum): - beach = "beach" - mountain = "mountain" - urban = "urban" - cultural = "cultural" - adventure = "adventure" - wellness = "wellness" - cruise = "cruise" + beach = 'beach' + mountain = 'mountain' + urban = 'urban' + cultural = 'cultural' + adventure = 'adventure' + wellness = 'wellness' + cruise = 'cruise' class Location(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) lat: Annotated[ - float, Field(description="Latitude in decimal degrees (WGS 84).", ge=-90.0, le=90.0) + float, Field(description='Latitude in decimal degrees (WGS 84).', ge=-90.0, le=90.0) ] lng: Annotated[ - float, Field(description="Longitude in decimal degrees (WGS 84).", ge=-180.0, le=180.0) + float, Field(description='Longitude in decimal degrees (WGS 84).', ge=-180.0, le=180.0) ] class DestinationItem(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - city: Annotated[str | None, Field(description="City name, if applicable.")] = None + city: Annotated[str | None, Field(description='City name, if applicable.')] = None country: Annotated[ - str | None, Field(description="ISO 3166-1 alpha-2 country code.", pattern="^[A-Z]{2}$") + str | None, Field(description='ISO 3166-1 alpha-2 country code.', pattern='^[A-Z]{2}$') ] = None description: Annotated[ str | None, - Field(description="Destination description highlighting attractions and appeal."), + Field(description='Destination description highlighting attractions and appeal.'), ] = None - destination_id: Annotated[str, Field(description="Unique identifier for this destination.")] + destination_id: Annotated[str, Field(description='Unique identifier for this destination.')] destination_type: Annotated[ - DestinationType | None, Field(description="Destination category.") + DestinationType | None, Field(description='Destination category.') ] = None ext: ext_1.ExtensionObject | None = None - image_url: Annotated[AnyUrl | None, Field(description="Destination hero image URL.")] = None + image_url: Annotated[AnyUrl | None, Field(description='Destination hero image URL.')] = None location: Annotated[ - Location | None, Field(description="Geographic coordinates of the destination.") + Location | None, Field(description='Geographic coordinates of the destination.') ] = None name: Annotated[ str, Field(description="Destination name (e.g., 'Barcelona', 'Bali', 'Swiss Alps').") ] price: Annotated[ - price_1.Price | None, Field(description="Starting price for a trip to this destination.") + price_1.Price | None, Field(description='Starting price for a trip to this destination.') ] = None rating: Annotated[ - float | None, Field(description="Destination rating (1–5).", ge=1.0, le=5.0) + float | None, Field(description='Destination rating (1–5).', ge=1.0, le=5.0) ] = None - region: Annotated[str | None, Field(description="State, province, or region name.")] = None + region: Annotated[str | None, Field(description='State, province, or region name.')] = None tags: Annotated[ list[str] | None, Field( @@ -74,6 +74,6 @@ class DestinationItem(AdCPBaseModel): min_length=1, ), ] = None - url: Annotated[AnyUrl | None, Field(description="Destination landing page or booking URL.")] = ( + url: Annotated[AnyUrl | None, Field(description='Destination landing page or booking URL.')] = ( None ) diff --git a/src/adcp/types/generated_poc/core/education_item.py b/src/adcp/types/generated_poc/core/education_item.py index 9e408b61..53fd13b8 100644 --- a/src/adcp/types/generated_poc/core/education_item.py +++ b/src/adcp/types/generated_poc/core/education_item.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/education_item.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,37 +16,37 @@ class DegreeType(Enum): - certificate = "certificate" - associate = "associate" - bachelor = "bachelor" - master = "master" - doctorate = "doctorate" - professional = "professional" - bootcamp = "bootcamp" + certificate = 'certificate' + associate = 'associate' + bachelor = 'bachelor' + master = 'master' + doctorate = 'doctorate' + professional = 'professional' + bootcamp = 'bootcamp' class Level(Enum): - beginner = "beginner" - intermediate = "intermediate" - advanced = "advanced" + beginner = 'beginner' + intermediate = 'intermediate' + advanced = 'advanced' class Modality(Enum): - online = "online" - in_person = "in_person" - hybrid = "hybrid" + online = 'online' + in_person = 'in_person' + hybrid = 'hybrid' class EducationItem(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - degree_type: Annotated[DegreeType | None, Field(description="Type of credential awarded.")] = ( + degree_type: Annotated[DegreeType | None, Field(description='Type of credential awarded.')] = ( None ) description: Annotated[ str | None, - Field(description="Program description including curriculum highlights and outcomes."), + Field(description='Program description including curriculum highlights and outcomes.'), ] = None duration: Annotated[ str | None, @@ -55,31 +55,31 @@ class EducationItem(AdCPBaseModel): ), ] = None ext: ext_1.ExtensionObject | None = None - image_url: Annotated[AnyUrl | None, Field(description="Program or institution image URL.")] = ( + image_url: Annotated[AnyUrl | None, Field(description='Program or institution image URL.')] = ( None ) language: Annotated[ str | None, Field(description="Language of instruction (e.g., 'en', 'nl', 'es').") ] = None - level: Annotated[Level | None, Field(description="Difficulty or prerequisite level.")] = None + level: Annotated[Level | None, Field(description='Difficulty or prerequisite level.')] = None location: Annotated[ str | None, Field( description="Campus or instruction location (e.g., 'Amsterdam, NL'). Omit for fully online programs." ), ] = None - modality: Annotated[Modality | None, Field(description="Delivery format.")] = None + modality: Annotated[Modality | None, Field(description='Delivery format.')] = None name: Annotated[ str, Field( description="Program or course name (e.g., 'MSc Computer Science', 'Digital Marketing Certificate')." ), ] - price: Annotated[price_1.Price | None, Field(description="Tuition or course fee.")] = None - program_id: Annotated[str, Field(description="Unique identifier for this program or course.")] - school: Annotated[str, Field(description="Institution or provider name.")] + price: Annotated[price_1.Price | None, Field(description='Tuition or course fee.')] = None + program_id: Annotated[str, Field(description='Unique identifier for this program or course.')] + school: Annotated[str, Field(description='Institution or provider name.')] start_date: Annotated[ - date | None, Field(description="Next available start date (ISO 8601 date).") + date | None, Field(description='Next available start date (ISO 8601 date).') ] = None subject: Annotated[ str | None, @@ -94,6 +94,6 @@ class EducationItem(AdCPBaseModel): min_length=1, ), ] = None - url: Annotated[AnyUrl | None, Field(description="Program landing page or enrollment URL.")] = ( + url: Annotated[AnyUrl | None, Field(description='Program landing page or enrollment URL.')] = ( None ) diff --git a/src/adcp/types/generated_poc/core/error.py b/src/adcp/types/generated_poc/core/error.py index 21bbbbf3..023ee8e9 100644 --- a/src/adcp/types/generated_poc/core/error.py +++ b/src/adcp/types/generated_poc/core/error.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/error.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,18 +12,18 @@ class Error(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - code: Annotated[str, Field(description="Error code for programmatic handling")] + code: Annotated[str, Field(description='Error code for programmatic handling')] details: Annotated[ - dict[str, Any] | None, Field(description="Additional task-specific error details") + dict[str, Any] | None, Field(description='Additional task-specific error details') ] = None field: Annotated[ str | None, Field(description="Field path associated with the error (e.g., 'packages[0].targeting')"), ] = None - message: Annotated[str, Field(description="Human-readable error message")] + message: Annotated[str, Field(description='Human-readable error message')] retry_after: Annotated[ - float | None, Field(description="Seconds to wait before retrying the operation", ge=0.0) + float | None, Field(description='Seconds to wait before retrying the operation', ge=0.0) ] = None - suggestion: Annotated[str | None, Field(description="Suggested fix for the error")] = None + suggestion: Annotated[str | None, Field(description='Suggested fix for the error')] = None diff --git a/src/adcp/types/generated_poc/core/event.py b/src/adcp/types/generated_poc/core/event.py index 95512ab9..f9ed9298 100644 --- a/src/adcp/types/generated_poc/core/event.py +++ b/src/adcp/types/generated_poc/core/event.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/event.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -18,14 +18,14 @@ class Event(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) action_source: Annotated[ - action_source_1.ActionSource | None, Field(description="Where the event originated") + action_source_1.ActionSource | None, Field(description='Where the event originated') ] = None custom_data: Annotated[ event_custom_data.EventCustomData | None, - Field(description="Event-specific data (value, currency, items, etc.)"), + Field(description='Event-specific data (value, currency, items, etc.)'), ] = None custom_event_name: Annotated[ str | None, Field(description="Name for custom events (used when event_type is 'custom')") @@ -33,7 +33,7 @@ class Event(AdCPBaseModel): event_id: Annotated[ str, Field( - description="Unique identifier for deduplication (scoped to event_type + event_source_id)", + description='Unique identifier for deduplication (scoped to event_type + event_source_id)', max_length=256, min_length=1, ), @@ -45,11 +45,11 @@ class Event(AdCPBaseModel): ), ] = None event_time: Annotated[ - AwareDatetime, Field(description="ISO 8601 timestamp when the event occurred") + AwareDatetime, Field(description='ISO 8601 timestamp when the event occurred') ] - event_type: Annotated[event_type_1.EventType, Field(description="Standard event type")] + event_type: Annotated[event_type_1.EventType, Field(description='Standard event type')] ext: ext_1.ExtensionObject | None = None user_match: Annotated[ user_match_1.UserMatch | None, - Field(description="User identifiers for attribution matching"), + Field(description='User identifiers for attribution matching'), ] = None diff --git a/src/adcp/types/generated_poc/core/event_custom_data.py b/src/adcp/types/generated_poc/core/event_custom_data.py index ad0e6f44..622dad48 100644 --- a/src/adcp/types/generated_poc/core/event_custom_data.py +++ b/src/adcp/types/generated_poc/core/event_custom_data.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/event_custom_data.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,20 +14,20 @@ class Content(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - brand: Annotated[str | None, Field(description="Brand name of this item")] = None - id: Annotated[str, Field(description="Product or content identifier")] - price: Annotated[float | None, Field(description="Price per unit of this item", ge=0.0)] = None - quantity: Annotated[int | None, Field(description="Quantity of this item", ge=1)] = None + brand: Annotated[str | None, Field(description='Brand name of this item')] = None + id: Annotated[str, Field(description='Product or content identifier')] + price: Annotated[float | None, Field(description='Price per unit of this item', ge=0.0)] = None + quantity: Annotated[int | None, Field(description='Quantity of this item', ge=1)] = None class EventCustomData(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) content_category: Annotated[ - str | None, Field(description="Category of the product or content") + str | None, Field(description='Category of the product or content') ] = None content_ids: Annotated[ list[str] | None, @@ -35,7 +35,7 @@ class EventCustomData(AdCPBaseModel): description="Item identifiers for catalog attribution. Values are matched against catalog items using the identifier type declared by the catalog's content_id_type field (e.g., SKUs, GTINs, or vertical-specific IDs like job_id)." ), ] = None - content_name: Annotated[str | None, Field(description="Name of the product or content")] = None + content_name: Annotated[str | None, Field(description='Name of the product or content')] = None content_type: Annotated[ str | None, Field( @@ -43,20 +43,20 @@ class EventCustomData(AdCPBaseModel): ), ] = None contents: Annotated[ - list[Content] | None, Field(description="Per-item details for e-commerce events") + list[Content] | None, Field(description='Per-item details for e-commerce events') ] = None currency: Annotated[ - str | None, Field(description="ISO 4217 currency code", pattern="^[A-Z]{3}$") + str | None, Field(description='ISO 4217 currency code', pattern='^[A-Z]{3}$') ] = None ext: ext_1.ExtensionObject | None = None - num_items: Annotated[int | None, Field(description="Number of items in the event", ge=0)] = None - order_id: Annotated[str | None, Field(description="Unique order or transaction identifier")] = ( + num_items: Annotated[int | None, Field(description='Number of items in the event', ge=0)] = None + order_id: Annotated[str | None, Field(description='Unique order or transaction identifier')] = ( None ) - search_string: Annotated[str | None, Field(description="Search query for search events")] = None + search_string: Annotated[str | None, Field(description='Search query for search events')] = None value: Annotated[ float | None, Field( - description="Monetary value of the event (should be accompanied by currency)", ge=0.0 + description='Monetary value of the event (should be accompanied by currency)', ge=0.0 ), ] = None diff --git a/src/adcp/types/generated_poc/core/ext.py b/src/adcp/types/generated_poc/core/ext.py index 78ec2ca4..8c11e772 100644 --- a/src/adcp/types/generated_poc/core/ext.py +++ b/src/adcp/types/generated_poc/core/ext.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/ext.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -10,5 +10,5 @@ class ExtensionObject(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) diff --git a/src/adcp/types/generated_poc/core/flight_item.py b/src/adcp/types/generated_poc/core/flight_item.py index 13c45a46..7a24f1fa 100644 --- a/src/adcp/types/generated_poc/core/flight_item.py +++ b/src/adcp/types/generated_poc/core/flight_item.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/flight_item.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,19 +15,19 @@ class Destination(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) - airport_code: Annotated[str, Field(description="IATA airport code.", pattern="^[A-Z]{3}$")] - city: Annotated[str | None, Field(description="City name.")] = None + airport_code: Annotated[str, Field(description='IATA airport code.', pattern='^[A-Z]{3}$')] + city: Annotated[str | None, Field(description='City name.')] = None class Origin(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) airport_code: Annotated[ str, - Field(description="IATA airport code (e.g., 'AMS', 'JFK', 'LHR').", pattern="^[A-Z]{3}$"), + Field(description="IATA airport code (e.g., 'AMS', 'JFK', 'LHR').", pattern='^[A-Z]{3}$'), ] city: Annotated[str | None, Field(description="City name (e.g., 'Amsterdam', 'New York').")] = ( None @@ -36,28 +36,28 @@ class Origin(AdCPBaseModel): class FlightItem(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - airline: Annotated[str | None, Field(description="Airline name or IATA airline code.")] = None + airline: Annotated[str | None, Field(description='Airline name or IATA airline code.')] = None arrival_time: Annotated[ - AwareDatetime | None, Field(description="Arrival date and time (ISO 8601).") + AwareDatetime | None, Field(description='Arrival date and time (ISO 8601).') ] = None departure_time: Annotated[ - AwareDatetime | None, Field(description="Departure date and time (ISO 8601).") + AwareDatetime | None, Field(description='Departure date and time (ISO 8601).') ] = None description: Annotated[ - str | None, Field(description="Route description or promotional text.") + str | None, Field(description='Route description or promotional text.') ] = None - destination: Annotated[Destination, Field(description="Arrival airport or city.")] + destination: Annotated[Destination, Field(description='Arrival airport or city.')] ext: ext_1.ExtensionObject | None = None flight_id: Annotated[ - str, Field(description="Unique identifier for this flight route or offer.") + str, Field(description='Unique identifier for this flight route or offer.') ] image_url: Annotated[ - AnyUrl | None, Field(description="Promotional image URL (typically a destination photo).") + AnyUrl | None, Field(description='Promotional image URL (typically a destination photo).') ] = None - origin: Annotated[Origin, Field(description="Departure airport or city.")] - price: Annotated[price_1.Price | None, Field(description="Ticket price or starting fare.")] = ( + origin: Annotated[Origin, Field(description='Departure airport or city.')] + price: Annotated[price_1.Price | None, Field(description='Ticket price or starting fare.')] = ( None ) tags: Annotated[ @@ -67,4 +67,4 @@ class FlightItem(AdCPBaseModel): min_length=1, ), ] = None - url: Annotated[AnyUrl | None, Field(description="Booking page URL for this route.")] = None + url: Annotated[AnyUrl | None, Field(description='Booking page URL for this route.')] = None diff --git a/src/adcp/types/generated_poc/core/forecast_point.py b/src/adcp/types/generated_poc/core/forecast_point.py index e09c0376..d51c8a1b 100644 --- a/src/adcp/types/generated_poc/core/forecast_point.py +++ b/src/adcp/types/generated_poc/core/forecast_point.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/forecast_point.json -# timestamp: 2026-02-12T12:00:44+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,12 +14,12 @@ class ForecastPoint(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) budget: Annotated[ float, Field( - description="Budget amount for this forecast point. For allocation-level forecasts, this is the absolute budget for that allocation (not the percentage). For proposal-level forecasts, this is the total proposal budget.", + description='Budget amount for this forecast point. For allocation-level forecasts, this is the absolute budget for that allocation (not the percentage). For proposal-level forecasts, this is the total proposal budget.', ge=0.0, ), ] diff --git a/src/adcp/types/generated_poc/core/forecast_range.py b/src/adcp/types/generated_poc/core/forecast_range.py index 39e44fa8..5a129b0a 100644 --- a/src/adcp/types/generated_poc/core/forecast_range.py +++ b/src/adcp/types/generated_poc/core/forecast_range.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/forecast_range.json -# timestamp: 2026-02-12T12:00:44+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,12 +12,12 @@ class ForecastRange(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) high: Annotated[ - float | None, Field(description="Optimistic (high-end) forecast value", ge=0.0) + float | None, Field(description='Optimistic (high-end) forecast value', ge=0.0) ] = None low: Annotated[ - float | None, Field(description="Conservative (low-end) forecast value", ge=0.0) + float | None, Field(description='Conservative (low-end) forecast value', ge=0.0) ] = None - mid: Annotated[float, Field(description="Expected (most likely) forecast value", ge=0.0)] + mid: Annotated[float, Field(description='Expected (most likely) forecast value', ge=0.0)] diff --git a/src/adcp/types/generated_poc/core/format.py b/src/adcp/types/generated_poc/core/format.py index ea6cc1dd..f25c5a04 100644 --- a/src/adcp/types/generated_poc/core/format.py +++ b/src/adcp/types/generated_poc/core/format.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/format.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -31,8 +31,8 @@ class SelectionMode(Enum): - sequential = "sequential" - optimize = "optimize" + sequential = 'sequential' + optimize = 'optimize' class Responsive(AdCPBaseModel): @@ -45,36 +45,36 @@ class Dimensions(AdCPBaseModel): str | None, Field( description="Fixed aspect ratio constraint (e.g., '16:9', '4:3', '1:1')", - pattern="^\\d+:\\d+$", + pattern='^\\d+:\\d+$', ), ] = None - height: Annotated[int | None, Field(description="Fixed height in pixels", ge=1)] = None + height: Annotated[int | None, Field(description='Fixed height in pixels', ge=1)] = None max_height: Annotated[ - int | None, Field(description="Maximum height in pixels for responsive renders", ge=1) + int | None, Field(description='Maximum height in pixels for responsive renders', ge=1) ] = None max_width: Annotated[ - int | None, Field(description="Maximum width in pixels for responsive renders", ge=1) + int | None, Field(description='Maximum width in pixels for responsive renders', ge=1) ] = None min_height: Annotated[ - int | None, Field(description="Minimum height in pixels for responsive renders", ge=1) + int | None, Field(description='Minimum height in pixels for responsive renders', ge=1) ] = None min_width: Annotated[ - int | None, Field(description="Minimum width in pixels for responsive renders", ge=1) + int | None, Field(description='Minimum width in pixels for responsive renders', ge=1) ] = None responsive: Annotated[ - Responsive | None, Field(description="Indicates which dimensions are responsive/fluid") + Responsive | None, Field(description='Indicates which dimensions are responsive/fluid') ] = None - width: Annotated[int | None, Field(description="Fixed width in pixels", ge=1)] = None + width: Annotated[int | None, Field(description='Fixed width in pixels', ge=1)] = None class Renders(AdCPBaseModel): dimensions: Annotated[ - Dimensions, Field(description="Dimensions for this rendered piece (in pixels)") + Dimensions, Field(description='Dimensions for this rendered piece (in pixels)') ] parameters_from_format_id: Annotated[ bool | None, Field( - description="When true, parameters for this render (dimensions and/or duration) are specified in the format_id. Used for template formats that accept parameters. Mutually exclusive with specifying dimensions object explicitly." + description='When true, parameters for this render (dimensions and/or duration) are specified in the format_id. Used for template formats that accept parameters. Mutually exclusive with specifying dimensions object explicitly.' ), ] = None role: Annotated[ @@ -91,12 +91,12 @@ class Dimensions1(Dimensions): class Renders1(AdCPBaseModel): dimensions: Annotated[ - Dimensions1 | None, Field(description="Dimensions for this rendered piece (in pixels)") + Dimensions1 | None, Field(description='Dimensions for this rendered piece (in pixels)') ] = None parameters_from_format_id: Annotated[ Literal[True], Field( - description="When true, parameters for this render (dimensions and/or duration) are specified in the format_id. Used for template formats that accept parameters. Mutually exclusive with specifying dimensions object explicitly." + description='When true, parameters for this render (dimensions and/or duration) are specified in the format_id. Used for template formats that accept parameters. Mutually exclusive with specifying dimensions object explicitly.' ), ] role: Annotated[ @@ -108,7 +108,7 @@ class Renders1(AdCPBaseModel): class BaseGroupAsset(AdCPBaseModel): - asset_id: Annotated[str, Field(description="Identifier for this asset within the group")] + asset_id: Annotated[str, Field(description='Identifier for this asset within the group')] asset_role: Annotated[ str | None, Field( @@ -117,7 +117,7 @@ class BaseGroupAsset(AdCPBaseModel): ] = None required: Annotated[ bool, - Field(description="Whether this asset is required within each repetition of the group"), + Field(description='Whether this asset is required within each repetition of the group'), ] @@ -125,7 +125,7 @@ class BaseIndividualAsset(AdCPBaseModel): asset_id: Annotated[ str, Field( - description="Unique identifier for this asset. Creative manifests MUST use this exact value as the key in the assets object." + description='Unique identifier for this asset. Creative manifests MUST use this exact value as the key in the assets object.' ), ] asset_role: Annotated[ @@ -135,13 +135,13 @@ class BaseIndividualAsset(AdCPBaseModel): ), ] = None item_type: Annotated[ - Literal["individual"], - Field(description="Discriminator indicating this is an individual asset"), + Literal['individual'], + Field(description='Discriminator indicating this is an individual asset'), ] required: Annotated[ bool, Field( - description="Whether this asset is required (true) or optional (false). Required assets must be provided for a valid creative. Optional assets enhance the creative but are not mandatory." + description='Whether this asset is required (true) or optional (false). Required assets must be provided for a valid creative. Optional assets enhance the creative but are not mandatory.' ), ] @@ -150,146 +150,146 @@ class Accessibility(AdCPBaseModel): requires_accessible_assets: Annotated[ bool | None, Field( - description="When true, all assets with x-accessibility fields must include those fields. For inspectable assets (image, video, audio), this means providing accessibility metadata like alt_text or captions. For opaque assets (HTML, JavaScript), this means providing self-declared accessibility properties." + description='When true, all assets with x-accessibility fields must include those fields. For inspectable assets (image, video, audio), this means providing accessibility metadata like alt_text or captions. For opaque assets (HTML, JavaScript), this means providing self-declared accessibility properties.' ), ] = None wcag_level: Annotated[ wcag_level_1.WcagLevel, Field( - description="WCAG conformance level that this format achieves. For format-rendered creatives, the format guarantees this level. For opaque creatives, the format requires assets that self-certify to this level." + description='WCAG conformance level that this format achieves. For format-rendered creatives, the format guarantees this level. For opaque creatives, the format requires assets that self-certify to this level.' ), ] class Assets(BaseIndividualAsset): - asset_type: Literal["image"] = "image" - item_type: Literal["individual"] = "individual" + asset_type: Literal['image'] = 'image' + item_type: Literal['individual'] = 'individual' requirements: image_asset_requirements.ImageAssetRequirements | None = None class Assets5(BaseIndividualAsset): - asset_type: Literal["video"] = "video" - item_type: Literal["individual"] = "individual" + asset_type: Literal['video'] = 'video' + item_type: Literal['individual'] = 'individual' requirements: video_asset_requirements.VideoAssetRequirements | None = None class Assets6(BaseIndividualAsset): - asset_type: Literal["audio"] = "audio" - item_type: Literal["individual"] = "individual" + asset_type: Literal['audio'] = 'audio' + item_type: Literal['individual'] = 'individual' requirements: audio_asset_requirements.AudioAssetRequirements | None = None class Assets7(BaseIndividualAsset): - asset_type: Literal["text"] = "text" - item_type: Literal["individual"] = "individual" + asset_type: Literal['text'] = 'text' + item_type: Literal['individual'] = 'individual' requirements: text_asset_requirements.TextAssetRequirements | None = None class Assets8(BaseIndividualAsset): - asset_type: Literal["markdown"] = "markdown" - item_type: Literal["individual"] = "individual" + asset_type: Literal['markdown'] = 'markdown' + item_type: Literal['individual'] = 'individual' requirements: markdown_asset_requirements.MarkdownAssetRequirements | None = None class Assets9(BaseIndividualAsset): - asset_type: Literal["html"] = "html" - item_type: Literal["individual"] = "individual" + asset_type: Literal['html'] = 'html' + item_type: Literal['individual'] = 'individual' requirements: html_asset_requirements.HtmlAssetRequirements | None = None class Assets10(BaseIndividualAsset): - asset_type: Literal["css"] = "css" - item_type: Literal["individual"] = "individual" + asset_type: Literal['css'] = 'css' + item_type: Literal['individual'] = 'individual' requirements: css_asset_requirements.CssAssetRequirements | None = None class Assets11(BaseIndividualAsset): - asset_type: Literal["javascript"] = "javascript" - item_type: Literal["individual"] = "individual" + asset_type: Literal['javascript'] = 'javascript' + item_type: Literal['individual'] = 'individual' requirements: javascript_asset_requirements.JavascriptAssetRequirements | None = None class Assets12(BaseIndividualAsset): - asset_type: Literal["vast"] = "vast" - item_type: Literal["individual"] = "individual" + asset_type: Literal['vast'] = 'vast' + item_type: Literal['individual'] = 'individual' requirements: vast_asset_requirements.VastAssetRequirements | None = None class Assets13(BaseIndividualAsset): - asset_type: Literal["daast"] = "daast" - item_type: Literal["individual"] = "individual" + asset_type: Literal['daast'] = 'daast' + item_type: Literal['individual'] = 'individual' requirements: daast_asset_requirements.DaastAssetRequirements | None = None class Assets14(BaseIndividualAsset): - asset_type: Literal["url"] = "url" - item_type: Literal["individual"] = "individual" + asset_type: Literal['url'] = 'url' + item_type: Literal['individual'] = 'individual' requirements: url_asset_requirements.UrlAssetRequirements | None = None class Assets15(BaseIndividualAsset): - asset_type: Literal["webhook"] = "webhook" - item_type: Literal["individual"] = "individual" + asset_type: Literal['webhook'] = 'webhook' + item_type: Literal['individual'] = 'individual' requirements: webhook_asset_requirements.WebhookAssetRequirements | None = None class Assets17(BaseGroupAsset): - asset_type: Literal["image"] = "image" + asset_type: Literal['image'] = 'image' requirements: image_asset_requirements.ImageAssetRequirements | None = None class Assets18(BaseGroupAsset): - asset_type: Literal["video"] = "video" + asset_type: Literal['video'] = 'video' requirements: video_asset_requirements.VideoAssetRequirements | None = None class Assets19(BaseGroupAsset): - asset_type: Literal["audio"] = "audio" + asset_type: Literal['audio'] = 'audio' requirements: audio_asset_requirements.AudioAssetRequirements | None = None class Assets20(BaseGroupAsset): - asset_type: Literal["text"] = "text" + asset_type: Literal['text'] = 'text' requirements: text_asset_requirements.TextAssetRequirements | None = None class Assets21(BaseGroupAsset): - asset_type: Literal["markdown"] = "markdown" + asset_type: Literal['markdown'] = 'markdown' requirements: markdown_asset_requirements.MarkdownAssetRequirements | None = None class Assets22(BaseGroupAsset): - asset_type: Literal["html"] = "html" + asset_type: Literal['html'] = 'html' requirements: html_asset_requirements.HtmlAssetRequirements | None = None class Assets23(BaseGroupAsset): - asset_type: Literal["css"] = "css" + asset_type: Literal['css'] = 'css' requirements: css_asset_requirements.CssAssetRequirements | None = None class Assets24(BaseGroupAsset): - asset_type: Literal["javascript"] = "javascript" + asset_type: Literal['javascript'] = 'javascript' requirements: javascript_asset_requirements.JavascriptAssetRequirements | None = None class Assets25(BaseGroupAsset): - asset_type: Literal["vast"] = "vast" + asset_type: Literal['vast'] = 'vast' requirements: vast_asset_requirements.VastAssetRequirements | None = None class Assets26(BaseGroupAsset): - asset_type: Literal["daast"] = "daast" + asset_type: Literal['daast'] = 'daast' requirements: daast_asset_requirements.DaastAssetRequirements | None = None class Assets27(BaseGroupAsset): - asset_type: Literal["url"] = "url" + asset_type: Literal['url'] = 'url' requirements: url_asset_requirements.UrlAssetRequirements | None = None class Assets28(BaseGroupAsset): - asset_type: Literal["webhook"] = "webhook" + asset_type: Literal['webhook'] = 'webhook' requirements: webhook_asset_requirements.WebhookAssetRequirements | None = None @@ -312,24 +312,24 @@ class Assets16(AdCPBaseModel): | Assets27 | Assets28 ], - Field(description="Assets within each repetition of this group"), + Field(description='Assets within each repetition of this group'), ] item_type: Annotated[ - Literal["repeatable_group"], - Field(description="Discriminator indicating this is a repeatable asset group"), + Literal['repeatable_group'], + Field(description='Discriminator indicating this is a repeatable asset group'), ] - max_count: Annotated[int, Field(description="Maximum number of repetitions allowed", ge=1)] + max_count: Annotated[int, Field(description='Maximum number of repetitions allowed', ge=1)] min_count: Annotated[ int, Field( - description="Minimum number of repetitions required (if group is required) or allowed (if optional)", + description='Minimum number of repetitions required (if group is required) or allowed (if optional)', ge=0, ), ] required: Annotated[ bool, Field( - description="Whether this asset group is required. If true, at least min_count repetitions must be provided." + description='Whether this asset group is required. If true, at least min_count repetitions must be provided.' ), ] selection_mode: Annotated[ @@ -342,52 +342,52 @@ class Assets16(AdCPBaseModel): class FormatCard(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) format_id: Annotated[ format_id_1.FormatId, Field( - description="Creative format defining the card layout (typically format_card_standard)" + description='Creative format defining the card layout (typically format_card_standard)' ), ] manifest: Annotated[ dict[str, Any], - Field(description="Asset manifest for rendering the card, structure defined by the format"), + Field(description='Asset manifest for rendering the card, structure defined by the format'), ] class FormatCardDetailed(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) format_id: Annotated[ format_id_1.FormatId, Field( - description="Creative format defining the detailed card layout (typically format_card_detailed)" + description='Creative format defining the detailed card layout (typically format_card_detailed)' ), ] manifest: Annotated[ dict[str, Any], Field( - description="Asset manifest for rendering the detailed card, structure defined by the format" + description='Asset manifest for rendering the detailed card, structure defined by the format' ), ] class Format(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) accepts_parameters: Annotated[ list[format_id_parameter.FormatIdParameter] | None, Field( - description="List of parameters this format accepts in format_id. Template formats define which parameters (dimensions, duration, etc.) can be specified when instantiating the format. Empty or omitted means this is a concrete format with fixed parameters." + description='List of parameters this format accepts in format_id. Template formats define which parameters (dimensions, duration, etc.) can be specified when instantiating the format. Empty or omitted means this is a concrete format with fixed parameters.' ), ] = None accessibility: Annotated[ Accessibility | None, Field( - description="Accessibility posture of this format. Declares the WCAG conformance level that creatives produced by this format will meet." + description='Accessibility posture of this format. Declares the WCAG conformance level that creatives produced by this format will meet.' ), ] = None assets: Annotated[ @@ -414,78 +414,78 @@ class Format(AdCPBaseModel): catalog_requirements: Annotated[ list[catalog_requirements_1.CatalogRequirements] | None, Field( - description="Catalog feeds this format requires for rendering. Formats that display product listings, store locators, inventory availability, or promotional pricing declare what catalog types must be synced to the account. Buyers ensure the required catalogs are synced via sync_catalogs before submitting creatives in this format.", + description='Catalog feeds this format requires for rendering. Formats that display product listings, store locators, inventory availability, or promotional pricing declare what catalog types must be synced to the account. Buyers ensure the required catalogs are synced via sync_catalogs before submitting creatives in this format.', min_length=1, ), ] = None delivery: Annotated[ dict[str, Any] | None, - Field(description="Delivery method specifications (e.g., hosted, VAST, third-party tags)"), + Field(description='Delivery method specifications (e.g., hosted, VAST, third-party tags)'), ] = None description: Annotated[ str | None, Field( - description="Plain text explanation of what this format does and what assets it requires" + description='Plain text explanation of what this format does and what assets it requires' ), ] = None example_url: Annotated[ AnyUrl | None, Field( - description="Optional URL to showcase page with examples and interactive demos of this format" + description='Optional URL to showcase page with examples and interactive demos of this format' ), ] = None format_card: Annotated[ FormatCard | None, Field( - description="Optional standard visual card (300x400px) for displaying this format in user interfaces. Can be rendered via preview_creative or pre-generated." + description='Optional standard visual card (300x400px) for displaying this format in user interfaces. Can be rendered via preview_creative or pre-generated.' ), ] = None format_card_detailed: Annotated[ FormatCardDetailed | None, Field( - description="Optional detailed card with carousel and full specifications. Provides rich format documentation similar to ad spec pages." + description='Optional detailed card with carousel and full specifications. Provides rich format documentation similar to ad spec pages.' ), ] = None format_id: Annotated[ format_id_1.FormatId, - Field(description="Structured format identifier with agent URL and format name"), + Field(description='Structured format identifier with agent URL and format name'), ] input_format_ids: Annotated[ list[format_id_1.FormatId] | None, Field( - description="Array of format IDs this format accepts as input creative manifests. When present, indicates this format can take existing creatives in these formats as input. Omit for formats that work from raw assets (images, text, etc.) rather than existing creatives." + description='Array of format IDs this format accepts as input creative manifests. When present, indicates this format can take existing creatives in these formats as input. Omit for formats that work from raw assets (images, text, etc.) rather than existing creatives.' ), ] = None - name: Annotated[str, Field(description="Human-readable format name")] + name: Annotated[str, Field(description='Human-readable format name')] output_format_ids: Annotated[ list[format_id_1.FormatId] | None, Field( - description="Array of format IDs that this format can produce as output. When present, indicates this format can build creatives in these output formats (e.g., a multi-publisher template format might produce standard display formats across many publishers). Omit for formats that produce a single fixed output (the format itself)." + description='Array of format IDs that this format can produce as output. When present, indicates this format can build creatives in these output formats (e.g., a multi-publisher template format might produce standard display formats across many publishers). Omit for formats that produce a single fixed output (the format itself).' ), ] = None renders: Annotated[ list[Renders | Renders1] | None, Field( - description="Specification of rendered pieces for this format. Most formats produce a single render. Companion ad formats (video + banner), adaptive formats, and multi-placement formats produce multiple renders. Each render specifies its role and dimensions.", + description='Specification of rendered pieces for this format. Most formats produce a single render. Companion ad formats (video + banner), adaptive formats, and multi-placement formats produce multiple renders. Each render specifies its role and dimensions.', min_length=1, ), ] = None reported_metrics: Annotated[ list[available_metric.AvailableMetric] | None, Field( - description="Metrics this format can produce in delivery reporting. Buyers receive the intersection of format reported_metrics and product available_metrics. If omitted, the format defers entirely to product-level metric declarations.", + description='Metrics this format can produce in delivery reporting. Buyers receive the intersection of format reported_metrics and product available_metrics. If omitted, the format defers entirely to product-level metric declarations.', min_length=1, ), ] = None supported_macros: Annotated[ list[universal_macro.UniversalMacro | str] | None, Field( - description="List of universal macros supported by this format (e.g., MEDIA_BUY_ID, CACHEBUSTER, DEVICE_ID). Used for validation and developer tooling. See docs/creative/universal-macros.mdx for full documentation." + description='List of universal macros supported by this format (e.g., MEDIA_BUY_ID, CACHEBUSTER, DEVICE_ID). Used for validation and developer tooling. See docs/creative/universal-macros.mdx for full documentation.' ), ] = None type: Annotated[ format_category.FormatCategory | None, Field( - description="DEPRECATED: High-level category for this format. Use the assets array to understand creative requirements instead - it provides precise information about what asset types are needed." + description='DEPRECATED: High-level category for this format. Use the assets array to understand creative requirements instead - it provides precise information about what asset types are needed.' ), ] = None diff --git a/src/adcp/types/generated_poc/core/format_id.py b/src/adcp/types/generated_poc/core/format_id.py index 8710455e..f7bdee3c 100644 --- a/src/adcp/types/generated_poc/core/format_id.py +++ b/src/adcp/types/generated_poc/core/format_id.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/format_id.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,7 +12,7 @@ class FormatId(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) agent_url: Annotated[ AnyUrl, @@ -23,14 +23,14 @@ class FormatId(AdCPBaseModel): duration_ms: Annotated[ float | None, Field( - description="Duration in milliseconds for time-based formats (video, audio). When specified, creates a parameterized format ID. Omit to reference a template format without parameters.", + description='Duration in milliseconds for time-based formats (video, audio). When specified, creates a parameterized format ID. Omit to reference a template format without parameters.', ge=1.0, ), ] = None height: Annotated[ int | None, Field( - description="Height in pixels for visual formats. When specified, width must also be specified. Both fields together create a parameterized format ID for dimension-specific variants.", + description='Height in pixels for visual formats. When specified, width must also be specified. Both fields together create a parameterized format ID for dimension-specific variants.', ge=1, ), ] = None @@ -38,13 +38,13 @@ class FormatId(AdCPBaseModel): str, Field( description="Format identifier within the agent's namespace (e.g., 'display_static', 'video_hosted', 'audio_standard'). When used alone, references a template format. When combined with dimension/duration fields, creates a parameterized format ID for a specific variant.", - pattern="^[a-zA-Z0-9_-]+$", + pattern='^[a-zA-Z0-9_-]+$', ), ] width: Annotated[ int | None, Field( - description="Width in pixels for visual formats. When specified, height must also be specified. Both fields together create a parameterized format ID for dimension-specific variants.", + description='Width in pixels for visual formats. When specified, height must also be specified. Both fields together create a parameterized format ID for dimension-specific variants.', ge=1, ), ] = None diff --git a/src/adcp/types/generated_poc/core/frequency_cap.py b/src/adcp/types/generated_poc/core/frequency_cap.py index 49faa9a9..1e141000 100644 --- a/src/adcp/types/generated_poc/core/frequency_cap.py +++ b/src/adcp/types/generated_poc/core/frequency_cap.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/frequency_cap.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,8 +12,8 @@ class FrequencyCap(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) suppress_minutes: Annotated[ - float, Field(description="Minutes to suppress after impression", ge=0.0) + float, Field(description='Minutes to suppress after impression', ge=0.0) ] diff --git a/src/adcp/types/generated_poc/core/hotel_item.py b/src/adcp/types/generated_poc/core/hotel_item.py index 628c205b..67d59a2e 100644 --- a/src/adcp/types/generated_poc/core/hotel_item.py +++ b/src/adcp/types/generated_poc/core/hotel_item.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/hotel_item.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,35 +15,35 @@ class Address(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) - city: Annotated[str | None, Field(description="City name.")] = None + city: Annotated[str | None, Field(description='City name.')] = None country: Annotated[ - str | None, Field(description="ISO 3166-1 alpha-2 country code.", pattern="^[A-Z]{2}$") + str | None, Field(description='ISO 3166-1 alpha-2 country code.', pattern='^[A-Z]{2}$') ] = None - postal_code: Annotated[str | None, Field(description="Postal or ZIP code.")] = None - region: Annotated[str | None, Field(description="State, province, or region.")] = None - street: Annotated[str | None, Field(description="Street address.")] = None + postal_code: Annotated[str | None, Field(description='Postal or ZIP code.')] = None + region: Annotated[str | None, Field(description='State, province, or region.')] = None + street: Annotated[str | None, Field(description='Street address.')] = None class Location(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) lat: Annotated[ - float, Field(description="Latitude in decimal degrees (WGS 84).", ge=-90.0, le=90.0) + float, Field(description='Latitude in decimal degrees (WGS 84).', ge=-90.0, le=90.0) ] lng: Annotated[ - float, Field(description="Longitude in decimal degrees (WGS 84).", ge=-180.0, le=180.0) + float, Field(description='Longitude in decimal degrees (WGS 84).', ge=-180.0, le=180.0) ] class HotelItem(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) address: Annotated[ - Address | None, Field(description="Structured address for display and geocoding.") + Address | None, Field(description='Structured address for display and geocoding.') ] = None amenities: Annotated[ list[str] | None, @@ -56,39 +56,39 @@ class HotelItem(AdCPBaseModel): str | None, Field( description="Standard check-in time in HH:MM format (e.g., '15:00').", - pattern="^[0-2][0-9]:[0-5][0-9]$", + pattern='^[0-2][0-9]:[0-5][0-9]$', ), ] = None check_out_time: Annotated[ str | None, Field( description="Standard check-out time in HH:MM format (e.g., '11:00').", - pattern="^[0-2][0-9]:[0-5][0-9]$", + pattern='^[0-2][0-9]:[0-5][0-9]$', ), ] = None description: Annotated[ - str | None, Field(description="Property description highlighting features and location.") + str | None, Field(description='Property description highlighting features and location.') ] = None ext: ext_1.ExtensionObject | None = None hotel_id: Annotated[ str, Field( - description="Unique identifier for this property. Used to match remarketing events and inventory feeds to the correct hotel." + description='Unique identifier for this property. Used to match remarketing events and inventory feeds to the correct hotel.' ), ] - image_url: Annotated[AnyUrl | None, Field(description="Primary property image URL.")] = None - location: Annotated[Location, Field(description="Geographic coordinates of the property.")] + image_url: Annotated[AnyUrl | None, Field(description='Primary property image URL.')] = None + location: Annotated[Location, Field(description='Geographic coordinates of the property.')] name: Annotated[ str, Field(description="Property name (e.g., 'Grand Hotel Amsterdam', 'Seaside Resort & Spa')."), ] - phone: Annotated[str | None, Field(description="Property phone number in E.164 format.")] = None + phone: Annotated[str | None, Field(description='Property phone number in E.164 format.')] = None price: Annotated[ price_1.Price | None, Field(description="Nightly rate or starting price. Use period 'night' for nightly rates."), ] = None star_rating: Annotated[ - int | None, Field(description="Official star rating (1–5).", ge=1, le=5) + int | None, Field(description='Official star rating (1–5).', ge=1, le=5) ] = None tags: Annotated[ list[str] | None, @@ -97,4 +97,4 @@ class HotelItem(AdCPBaseModel): min_length=1, ), ] = None - url: Annotated[AnyUrl | None, Field(description="Property landing page or booking URL.")] = None + url: Annotated[AnyUrl | None, Field(description='Property landing page or booking URL.')] = None diff --git a/src/adcp/types/generated_poc/core/identifier.py b/src/adcp/types/generated_poc/core/identifier.py index 0ed6e87c..6934fb50 100644 --- a/src/adcp/types/generated_poc/core/identifier.py +++ b/src/adcp/types/generated_poc/core/identifier.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/identifier.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,10 +14,10 @@ class Identifier(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) type: Annotated[ - identifier_types.PropertyIdentifierTypes, Field(description="Type of identifier") + identifier_types.PropertyIdentifierTypes, Field(description='Type of identifier') ] value: Annotated[ str, diff --git a/src/adcp/types/generated_poc/core/job_item.py b/src/adcp/types/generated_poc/core/job_item.py index f5ba7974..aac6f355 100644 --- a/src/adcp/types/generated_poc/core/job_item.py +++ b/src/adcp/types/generated_poc/core/job_item.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/job_item.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,56 +15,56 @@ class EmploymentType(Enum): - full_time = "full_time" - part_time = "part_time" - contract = "contract" - temporary = "temporary" - internship = "internship" - freelance = "freelance" + full_time = 'full_time' + part_time = 'part_time' + contract = 'contract' + temporary = 'temporary' + internship = 'internship' + freelance = 'freelance' class ExperienceLevel(Enum): - entry_level = "entry_level" - mid_level = "mid_level" - senior = "senior" - director = "director" - executive = "executive" + entry_level = 'entry_level' + mid_level = 'mid_level' + senior = 'senior' + director = 'director' + executive = 'executive' class Period(Enum): - hour = "hour" - month = "month" - year = "year" + hour = 'hour' + month = 'month' + year = 'year' class Salary(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) - currency: Annotated[str, Field(description="ISO 4217 currency code.", pattern="^[A-Z]{3}$")] - max: Annotated[float | None, Field(description="Maximum salary.", ge=0.0)] = None - min: Annotated[float | None, Field(description="Minimum salary.", ge=0.0)] = None - period: Annotated[Period, Field(description="Pay period.")] + currency: Annotated[str, Field(description='ISO 4217 currency code.', pattern='^[A-Z]{3}$')] + max: Annotated[float | None, Field(description='Maximum salary.', ge=0.0)] = None + min: Annotated[float | None, Field(description='Minimum salary.', ge=0.0)] = None + period: Annotated[Period, Field(description='Pay period.')] class JobItem(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - apply_url: Annotated[AnyUrl | None, Field(description="Direct application URL.")] = None - company_name: Annotated[str, Field(description="Hiring company or organization name.")] + apply_url: Annotated[AnyUrl | None, Field(description='Direct application URL.')] = None + company_name: Annotated[str, Field(description='Hiring company or organization name.')] date_posted: Annotated[ - date | None, Field(description="Date the job was posted (ISO 8601 date).") + date | None, Field(description='Date the job was posted (ISO 8601 date).') ] = None description: Annotated[ str, - Field(description="Full job description including responsibilities and qualifications."), + Field(description='Full job description including responsibilities and qualifications.'), ] - employment_type: Annotated[EmploymentType | None, Field(description="Type of employment.")] = ( + employment_type: Annotated[EmploymentType | None, Field(description='Type of employment.')] = ( None ) experience_level: Annotated[ - ExperienceLevel | None, Field(description="Required experience level.") + ExperienceLevel | None, Field(description='Required experience level.') ] = None ext: ext_1.ExtensionObject | None = None industries: Annotated[ @@ -81,7 +81,7 @@ class JobItem(AdCPBaseModel): min_length=1, ), ] = None - job_id: Annotated[str, Field(description="Unique identifier for this job posting.")] + job_id: Annotated[str, Field(description='Unique identifier for this job posting.')] location: Annotated[ str | None, Field( @@ -90,7 +90,7 @@ class JobItem(AdCPBaseModel): ] = None salary: Annotated[ Salary | None, - Field(description="Salary range. Specify min and/or max with currency and period."), + Field(description='Salary range. Specify min and/or max with currency and period.'), ] = None tags: Annotated[ list[str] | None, @@ -103,5 +103,5 @@ class JobItem(AdCPBaseModel): str, Field(description="Job title (e.g., 'Senior Software Engineer', 'Marketing Manager').") ] valid_through: Annotated[ - date | None, Field(description="Application deadline (ISO 8601 date).") + date | None, Field(description='Application deadline (ISO 8601 date).') ] = None diff --git a/src/adcp/types/generated_poc/core/mcp_webhook_payload.py b/src/adcp/types/generated_poc/core/mcp_webhook_payload.py index 7b6799fa..bbb310ad 100644 --- a/src/adcp/types/generated_poc/core/mcp_webhook_payload.py +++ b/src/adcp/types/generated_poc/core/mcp_webhook_payload.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/mcp_webhook_payload.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,56 +16,56 @@ class McpWebhookPayload(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context_id: Annotated[ str | None, Field( - description="Session/conversation identifier. Use this to continue the conversation if input-required status needs clarification or additional parameters." + description='Session/conversation identifier. Use this to continue the conversation if input-required status needs clarification or additional parameters.' ), ] = None domain: Annotated[ adcp_domain.AdcpDomain | None, Field( - description="AdCP domain this task belongs to. Helps classify the operation type at a high level." + description='AdCP domain this task belongs to. Helps classify the operation type at a high level.' ), ] = None message: Annotated[ str | None, Field( - description="Human-readable summary of the current task state. Provides context about what happened and what action may be needed." + description='Human-readable summary of the current task state. Provides context about what happened and what action may be needed.' ), ] = None operation_id: Annotated[ str | None, Field( - description="Publisher-defined operation identifier correlating a sequence of task updates across webhooks." + description='Publisher-defined operation identifier correlating a sequence of task updates across webhooks.' ), ] = None result: Annotated[ async_response_data.AdcpAsyncResponseData | None, Field( - description="Task-specific payload matching the status. For completed/failed, contains the full task response. For working/input-required/submitted, contains status-specific data. This is the data layer that AdCP specs - same structure used in A2A status.message.parts[].data." + description='Task-specific payload matching the status. For completed/failed, contains the full task response. For working/input-required/submitted, contains status-specific data. This is the data layer that AdCP specs - same structure used in A2A status.message.parts[].data.' ), ] = None status: Annotated[ task_status.TaskStatus, Field( - description="Current task status. Webhooks are triggered for status changes after initial submission." + description='Current task status. Webhooks are triggered for status changes after initial submission.' ), ] task_id: Annotated[ str, Field( - description="Unique identifier for this task. Use this to correlate webhook notifications with the original task submission." + description='Unique identifier for this task. Use this to correlate webhook notifications with the original task submission.' ), ] task_type: Annotated[ task_type_1.TaskType, Field( - description="Type of AdCP operation that triggered this webhook. Enables webhook handlers to route to appropriate processing logic." + description='Type of AdCP operation that triggered this webhook. Enables webhook handlers to route to appropriate processing logic.' ), ] timestamp: Annotated[ - AwareDatetime, Field(description="ISO 8601 timestamp when this webhook was generated.") + AwareDatetime, Field(description='ISO 8601 timestamp when this webhook was generated.') ] diff --git a/src/adcp/types/generated_poc/core/measurement.py b/src/adcp/types/generated_poc/core/measurement.py index b1789045..72598831 100644 --- a/src/adcp/types/generated_poc/core/measurement.py +++ b/src/adcp/types/generated_poc/core/measurement.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/measurement.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,29 +12,29 @@ class Measurement(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) attribution: Annotated[ str, Field( - description="Attribution methodology", - examples=["deterministic_purchase", "probabilistic"], + description='Attribution methodology', + examples=['deterministic_purchase', 'probabilistic'], ), ] reporting: Annotated[ str, Field( - description="Reporting frequency and format", - examples=["weekly_dashboard", "real_time_api"], + description='Reporting frequency and format', + examples=['weekly_dashboard', 'real_time_api'], ), ] type: Annotated[ str, Field( - description="Type of measurement", - examples=["incremental_sales_lift", "brand_lift", "foot_traffic"], + description='Type of measurement', + examples=['incremental_sales_lift', 'brand_lift', 'foot_traffic'], ), ] window: Annotated[ - str | None, Field(description="Attribution window", examples=["30_days", "7_days"]) + str | None, Field(description='Attribution window', examples=['30_days', '7_days']) ] = None diff --git a/src/adcp/types/generated_poc/core/media_buy.py b/src/adcp/types/generated_poc/core/media_buy.py index 2cf5a02f..a20ddb87 100644 --- a/src/adcp/types/generated_poc/core/media_buy.py +++ b/src/adcp/types/generated_poc/core/media_buy.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/media_buy.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -17,10 +17,10 @@ class MediaBuy(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) account: Annotated[ - account_1.Account | None, Field(description="Account billed for this media buy") + account_1.Account | None, Field(description='Account billed for this media buy') ] = None buyer_campaign_ref: Annotated[ str | None, @@ -31,17 +31,17 @@ class MediaBuy(AdCPBaseModel): buyer_ref: Annotated[ str | None, Field(description="Buyer's reference identifier for this media buy") ] = None - created_at: Annotated[AwareDatetime | None, Field(description="Creation timestamp")] = None + created_at: Annotated[AwareDatetime | None, Field(description='Creation timestamp')] = None creative_deadline: Annotated[ - AwareDatetime | None, Field(description="ISO 8601 timestamp for creative upload deadline") + AwareDatetime | None, Field(description='ISO 8601 timestamp for creative upload deadline') ] = None ext: ext_1.ExtensionObject | None = None media_buy_id: Annotated[ str, Field(description="Publisher's unique identifier for the media buy") ] packages: Annotated[ - list[package.Package], Field(description="Array of packages within this media buy") + list[package.Package], Field(description='Array of packages within this media buy') ] status: media_buy_status.MediaBuyStatus - total_budget: Annotated[float, Field(description="Total budget amount", ge=0.0)] - updated_at: Annotated[AwareDatetime | None, Field(description="Last update timestamp")] = None + total_budget: Annotated[float, Field(description='Total budget amount', ge=0.0)] + updated_at: Annotated[AwareDatetime | None, Field(description='Last update timestamp')] = None diff --git a/src/adcp/types/generated_poc/core/media_buy_features.py b/src/adcp/types/generated_poc/core/media_buy_features.py index ce1d853c..38099887 100644 --- a/src/adcp/types/generated_poc/core/media_buy_features.py +++ b/src/adcp/types/generated_poc/core/media_buy_features.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/media_buy_features.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,40 +14,40 @@ class MediaBuyFeatures(AdCPBaseModel): audience_targeting: Annotated[ bool | None, Field( - description="Supports sync_audiences task and audience_include/audience_exclude in targeting overlays for first-party CRM audience management" + description='Supports sync_audiences task and audience_include/audience_exclude in targeting overlays for first-party CRM audience management' ), ] = None catalog_management: Annotated[ bool | None, Field( - description="Supports sync_catalogs task for catalog feed management with platform review and approval" + description='Supports sync_catalogs task for catalog feed management with platform review and approval' ), ] = None content_standards: Annotated[ bool | None, Field( - description="Full support for content_standards configuration including sampling rates and category filtering" + description='Full support for content_standards configuration including sampling rates and category filtering' ), ] = None conversion_tracking: Annotated[ bool | None, Field( - description="Supports sync_event_sources and log_event tasks for conversion event tracking" + description='Supports sync_event_sources and log_event tasks for conversion event tracking' ), ] = None inline_creative_management: Annotated[ bool | None, - Field(description="Supports creatives provided inline in create_media_buy requests"), + Field(description='Supports creatives provided inline in create_media_buy requests'), ] = None property_list_filtering: Annotated[ bool | None, Field( - description="Honors property_list parameter in get_products to filter results to buyer-approved properties" + description='Honors property_list parameter in get_products to filter results to buyer-approved properties' ), ] = None sandbox: Annotated[ bool | None, Field( - description="Supports sandbox mode for operations without real platform calls or spend" + description='Supports sandbox mode for operations without real platform calls or spend' ), ] = None diff --git a/src/adcp/types/generated_poc/core/offering.py b/src/adcp/types/generated_poc/core/offering.py index 699ff8d1..79b7a762 100644 --- a/src/adcp/types/generated_poc/core/offering.py +++ b/src/adcp/types/generated_poc/core/offering.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/offering.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,38 +15,38 @@ class Country(RootModel[str]): - root: Annotated[str, Field(pattern="^[A-Z]{2}$")] + root: Annotated[str, Field(pattern='^[A-Z]{2}$')] class Metro(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) system: Annotated[ metro_system.MetroAreaSystem, Field(description="Metro area classification system (e.g., 'nielsen_dma', 'uk_itl2')"), ] - values: Annotated[list[str], Field(description="Metro codes within the system", min_length=1)] + values: Annotated[list[str], Field(description='Metro codes within the system', min_length=1)] class Region(RootModel[str]): - root: Annotated[str, Field(pattern="^[A-Z]{2}-[A-Z0-9]{1,3}$")] + root: Annotated[str, Field(pattern='^[A-Z]{2}-[A-Z0-9]{1,3}$')] class PostalArea(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) system: Annotated[ postal_system.PostalCodeSystem, Field(description="Postal code system (e.g., 'us_zip', 'de_plz')"), ] - values: Annotated[list[str], Field(description="Postal codes within the system", min_length=1)] + values: Annotated[list[str], Field(description='Postal codes within the system', min_length=1)] class GeoTargets(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) countries: Annotated[ list[Country] | None, @@ -58,14 +58,14 @@ class GeoTargets(AdCPBaseModel): metros: Annotated[ list[Metro] | None, Field( - description="Metro areas where this offering is relevant. Each entry specifies the classification system and target values.", + description='Metro areas where this offering is relevant. Each entry specifies the classification system and target values.', min_length=1, ), ] = None postal_areas: Annotated[ list[PostalArea] | None, Field( - description="Postal areas where this offering is relevant. Each entry specifies the postal system and target values.", + description='Postal areas where this offering is relevant. Each entry specifies the postal system and target values.', min_length=1, ), ] = None @@ -80,12 +80,12 @@ class GeoTargets(AdCPBaseModel): class Offering(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) assets: Annotated[ list[offering_asset_group.OfferingAssetGroup] | None, Field( - description="Structured asset groups for this offering. Each group carries a typed pool of creative assets (headlines, images, videos, etc.) identified by a group ID that matches format-level vocabulary." + description='Structured asset groups for this offering. Each group carries a typed pool of creative assets (headlines, images, videos, etc.) identified by a group ID that matches format-level vocabulary.' ), ] = None categories: Annotated[ @@ -113,7 +113,7 @@ class Offering(AdCPBaseModel): keywords: Annotated[ list[str] | None, Field( - description="Keywords for matching this offering to user intent. Hosts use these for retrieval/relevance scoring." + description='Keywords for matching this offering to user intent. Hosts use these for retrieval/relevance scoring.' ), ] = None landing_url: Annotated[ @@ -131,21 +131,21 @@ class Offering(AdCPBaseModel): offering_id: Annotated[ str, Field( - description="Unique identifier for this offering. Used by hosts to reference specific offerings in si_get_offering calls." + description='Unique identifier for this offering. Used by hosts to reference specific offerings in si_get_offering calls.' ), ] tagline: Annotated[ - str | None, Field(description="Short promotional tagline for the offering") + str | None, Field(description='Short promotional tagline for the offering') ] = None valid_from: Annotated[ AwareDatetime | None, Field( - description="When the offering becomes available. If not specified, offering is immediately available." + description='When the offering becomes available. If not specified, offering is immediately available.' ), ] = None valid_to: Annotated[ AwareDatetime | None, Field( - description="When the offering expires. If not specified, offering has no expiration." + description='When the offering expires. If not specified, offering has no expiration.' ), ] = None diff --git a/src/adcp/types/generated_poc/core/offering_asset_group.py b/src/adcp/types/generated_poc/core/offering_asset_group.py index 8da562a1..38d9d310 100644 --- a/src/adcp/types/generated_poc/core/offering_asset_group.py +++ b/src/adcp/types/generated_poc/core/offering_asset_group.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/offering_asset_group.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -29,7 +29,7 @@ class OfferingAssetGroup(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) asset_group_id: Annotated[ str, @@ -39,7 +39,7 @@ class OfferingAssetGroup(AdCPBaseModel): ] asset_type: Annotated[ asset_content_type.AssetContentType, - Field(description="The content type of all items in this group."), + Field(description='The content type of all items in this group.'), ] ext: ext_1.ExtensionObject | None = None items: Annotated[ @@ -58,7 +58,7 @@ class OfferingAssetGroup(AdCPBaseModel): | webhook_asset.WebhookAsset ], Field( - description="The assets in this group. Each item should match the structure for the declared asset_type. Note: JSON Schema validation accepts any valid asset structure here; enforcement that items match asset_type is the responsibility of the consuming agent.", + description='The assets in this group. Each item should match the structure for the declared asset_type. Note: JSON Schema validation accepts any valid asset structure here; enforcement that items match asset_type is the responsibility of the consuming agent.', min_length=1, ), ] diff --git a/src/adcp/types/generated_poc/core/optimization_goal.py b/src/adcp/types/generated_poc/core/optimization_goal.py index 382342a0..e7851af8 100644 --- a/src/adcp/types/generated_poc/core/optimization_goal.py +++ b/src/adcp/types/generated_poc/core/optimization_goal.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/optimization_goal.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,7 +14,7 @@ class AttributionWindow(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) click_through: Annotated[ str, Field(description="Click-through attribution window (e.g. '7d', '28d', '30d')") @@ -26,7 +26,7 @@ class AttributionWindow(AdCPBaseModel): class OptimizationGoal(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) attribution_window: Annotated[ AttributionWindow | None, @@ -37,24 +37,24 @@ class OptimizationGoal(AdCPBaseModel): event_source_id: Annotated[ str, Field( - description="Event source to optimize against (must be configured on this account via sync_event_sources)" + description='Event source to optimize against (must be configured on this account via sync_event_sources)' ), ] event_type: Annotated[ event_type_1.EventType, - Field(description="Event type to optimize for (e.g. purchase, lead)"), + Field(description='Event type to optimize for (e.g. purchase, lead)'), ] target_cpa: Annotated[ float | None, Field( - description="Target cost per acquisition in the buy currency. Mutually exclusive with target_roas.", + description='Target cost per acquisition in the buy currency. Mutually exclusive with target_roas.', gt=0.0, ), ] = None target_roas: Annotated[ float | None, Field( - description="Target return on ad spend (e.g. 4.0 = $4 conversion value per $1 spent). Mutually exclusive with target_cpa.", + description='Target return on ad spend (e.g. 4.0 = $4 conversion value per $1 spent). Mutually exclusive with target_cpa.', gt=0.0, ), ] = None diff --git a/src/adcp/types/generated_poc/core/package.py b/src/adcp/types/generated_poc/core/package.py index d54e58c5..4c83c1a4 100644 --- a/src/adcp/types/generated_poc/core/package.py +++ b/src/adcp/types/generated_poc/core/package.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/package.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -19,7 +19,7 @@ class Package(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) bid_price: Annotated[ float | None, @@ -31,7 +31,7 @@ class Package(AdCPBaseModel): budget: Annotated[ float | None, Field( - description="Budget allocation for this package in the currency specified by the pricing option", + description='Budget allocation for this package in the currency specified by the pricing option', ge=0.0, ), ] = None @@ -40,15 +40,15 @@ class Package(AdCPBaseModel): ] = None creative_assignments: Annotated[ list[creative_assignment.CreativeAssignment] | None, - Field(description="Creative assets assigned to this package"), + Field(description='Creative assets assigned to this package'), ] = None ext: ext_1.ExtensionObject | None = None format_ids_to_provide: Annotated[ list[format_id.FormatId] | None, - Field(description="Format IDs that creative assets will be provided for this package"), + Field(description='Format IDs that creative assets will be provided for this package'), ] = None impressions: Annotated[ - float | None, Field(description="Impression goal for this package", ge=0.0) + float | None, Field(description='Impression goal for this package', ge=0.0) ] = None optimization_goal: optimization_goal_1.OptimizationGoal | None = None pacing: pacing_1.Pacing | None = None @@ -56,7 +56,7 @@ class Package(AdCPBaseModel): paused: Annotated[ bool | None, Field( - description="Whether this package is paused by the buyer. Paused packages do not deliver impressions. Defaults to false." + description='Whether this package is paused by the buyer. Paused packages do not deliver impressions. Defaults to false.' ), ] = False pricing_option_id: Annotated[ @@ -66,6 +66,6 @@ class Package(AdCPBaseModel): ), ] = None product_id: Annotated[ - str | None, Field(description="ID of the product this package is based on") + str | None, Field(description='ID of the product this package is based on') ] = None targeting_overlay: targeting.TargetingOverlay | None = None diff --git a/src/adcp/types/generated_poc/core/pagination_request.py b/src/adcp/types/generated_poc/core/pagination_request.py index 8bbcb9f3..74e7cdc1 100644 --- a/src/adcp/types/generated_poc/core/pagination_request.py +++ b/src/adcp/types/generated_poc/core/pagination_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/pagination_request.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,12 +12,12 @@ class PaginationRequest(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) cursor: Annotated[ str | None, - Field(description="Opaque cursor from a previous response to fetch the next page"), + Field(description='Opaque cursor from a previous response to fetch the next page'), ] = None max_results: Annotated[ - int | None, Field(description="Maximum number of items to return per page", ge=1, le=100) + int | None, Field(description='Maximum number of items to return per page', ge=1, le=100) ] = 50 diff --git a/src/adcp/types/generated_poc/core/pagination_response.py b/src/adcp/types/generated_poc/core/pagination_response.py index 6a702702..194eae84 100644 --- a/src/adcp/types/generated_poc/core/pagination_response.py +++ b/src/adcp/types/generated_poc/core/pagination_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/pagination_response.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,21 +12,21 @@ class PaginationResponse(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) cursor: Annotated[ str | None, Field( - description="Opaque cursor to pass in the next request to fetch the next page. Only present when has_more is true." + description='Opaque cursor to pass in the next request to fetch the next page. Only present when has_more is true.' ), ] = None has_more: Annotated[ - bool, Field(description="Whether more results are available beyond this page") + bool, Field(description='Whether more results are available beyond this page') ] total_count: Annotated[ int | None, Field( - description="Total number of items matching the query across all pages. Optional because not all backends can efficiently compute this.", + description='Total number of items matching the query across all pages. Optional because not all backends can efficiently compute this.', ge=0, ), ] = None diff --git a/src/adcp/types/generated_poc/core/performance_feedback.py b/src/adcp/types/generated_poc/core/performance_feedback.py index 632e5183..be75e284 100644 --- a/src/adcp/types/generated_poc/core/performance_feedback.py +++ b/src/adcp/types/generated_poc/core/performance_feedback.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/performance_feedback.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,63 +16,63 @@ class MeasurementPeriod(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) end: Annotated[ - AwareDatetime, Field(description="ISO 8601 end timestamp for measurement period") + AwareDatetime, Field(description='ISO 8601 end timestamp for measurement period') ] start: Annotated[ - AwareDatetime, Field(description="ISO 8601 start timestamp for measurement period") + AwareDatetime, Field(description='ISO 8601 start timestamp for measurement period') ] class Status(Enum): - accepted = "accepted" - queued = "queued" - applied = "applied" - rejected = "rejected" + accepted = 'accepted' + queued = 'queued' + applied = 'applied' + rejected = 'rejected' class PerformanceFeedback(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) applied_at: Annotated[ AwareDatetime | None, Field( - description="ISO 8601 timestamp when feedback was applied to optimization algorithms" + description='ISO 8601 timestamp when feedback was applied to optimization algorithms' ), ] = None creative_id: Annotated[ - str | None, Field(description="Specific creative asset (if feedback is creative-specific)") + str | None, Field(description='Specific creative asset (if feedback is creative-specific)') ] = None feedback_id: Annotated[ - str, Field(description="Unique identifier for this performance feedback submission") + str, Field(description='Unique identifier for this performance feedback submission') ] feedback_source: Annotated[ - feedback_source_1.FeedbackSource, Field(description="Source of the performance data") + feedback_source_1.FeedbackSource, Field(description='Source of the performance data') ] measurement_period: Annotated[ - MeasurementPeriod, Field(description="Time period for performance measurement") + MeasurementPeriod, Field(description='Time period for performance measurement') ] media_buy_id: Annotated[str, Field(description="Publisher's media buy identifier")] metric_type: Annotated[ - metric_type_1.MetricType, Field(description="The business metric being measured") + metric_type_1.MetricType, Field(description='The business metric being measured') ] package_id: Annotated[ str | None, Field( - description="Specific package within the media buy (if feedback is package-specific)" + description='Specific package within the media buy (if feedback is package-specific)' ), ] = None performance_index: Annotated[ float, Field( - description="Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)", + description='Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)', ge=0.0, ), ] - status: Annotated[Status, Field(description="Processing status of the performance feedback")] + status: Annotated[Status, Field(description='Processing status of the performance feedback')] submitted_at: Annotated[ - AwareDatetime, Field(description="ISO 8601 timestamp when feedback was submitted") + AwareDatetime, Field(description='ISO 8601 timestamp when feedback was submitted') ] diff --git a/src/adcp/types/generated_poc/core/placement.py b/src/adcp/types/generated_poc/core/placement.py index 8f060fda..39265193 100644 --- a/src/adcp/types/generated_poc/core/placement.py +++ b/src/adcp/types/generated_poc/core/placement.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/placement.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,15 +14,15 @@ class Placement(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) description: Annotated[ - str | None, Field(description="Detailed description of where and how the placement appears") + str | None, Field(description='Detailed description of where and how the placement appears') ] = None format_ids: Annotated[ list[format_id.FormatId] | None, Field( - description="Format IDs supported by this specific placement. Can include: (1) concrete format_ids (fixed dimensions), (2) template format_ids without parameters (accepts any dimensions/duration), or (3) parameterized format_ids (specific dimension/duration constraints).", + description='Format IDs supported by this specific placement. Can include: (1) concrete format_ids (fixed dimensions), (2) template format_ids without parameters (accepts any dimensions/duration), or (3) parameterized format_ids (specific dimension/duration constraints).', min_length=1, ), ] = None @@ -33,5 +33,5 @@ class Placement(AdCPBaseModel): ), ] placement_id: Annotated[ - str, Field(description="Unique identifier for the placement within the product") + str, Field(description='Unique identifier for the placement within the product') ] diff --git a/src/adcp/types/generated_poc/core/price.py b/src/adcp/types/generated_poc/core/price.py index 710c71ba..81620e47 100644 --- a/src/adcp/types/generated_poc/core/price.py +++ b/src/adcp/types/generated_poc/core/price.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/price.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,23 +12,23 @@ class Period(Enum): - night = "night" - month = "month" - year = "year" - one_time = "one_time" + night = 'night' + month = 'month' + year = 'year' + one_time = 'one_time' class Price(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) amount: Annotated[ - float, Field(description="Monetary amount in the specified currency.", ge=0.0) + float, Field(description='Monetary amount in the specified currency.', ge=0.0) ] currency: Annotated[ str, Field( - description="ISO 4217 currency code (e.g., 'USD', 'EUR', 'GBP').", pattern="^[A-Z]{3}$" + description="ISO 4217 currency code (e.g., 'USD', 'EUR', 'GBP').", pattern='^[A-Z]{3}$' ), ] period: Annotated[ diff --git a/src/adcp/types/generated_poc/core/pricing_option.py b/src/adcp/types/generated_poc/core/pricing_option.py index c134b184..a99d3a97 100644 --- a/src/adcp/types/generated_poc/core/pricing_option.py +++ b/src/adcp/types/generated_poc/core/pricing_option.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/pricing_option.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -46,6 +46,6 @@ class PricingOption( | time_option.TimeBasedPricingOption, Field( description="A pricing model option offered by a publisher for a product. Discriminated by pricing_model field. If fixed_price is present, it's fixed pricing. If absent, it's auction-based (floor_price and price_guidance optional). Bid-based auction models may also include max_bid as a boolean signal to interpret bid_price as a buyer ceiling instead of an exact honored price.", - title="Pricing Option", + title='Pricing Option', ), ] diff --git a/src/adcp/types/generated_poc/core/product.py b/src/adcp/types/generated_poc/core/product.py index 608c2ad5..444cc5ae 100644 --- a/src/adcp/types/generated_poc/core/product.py +++ b/src/adcp/types/generated_poc/core/product.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/product.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -23,7 +23,7 @@ class MatchedGtin(RootModel[str]): - root: Annotated[str, Field(pattern="^[0-9]{8,14}$")] + root: Annotated[str, Field(pattern='^[0-9]{8,14}$')] class CatalogMatch(AdCPBaseModel): @@ -49,14 +49,14 @@ class CatalogMatch(AdCPBaseModel): class SupportedOptimizationStrategy(Enum): - maximize_conversions = "maximize_conversions" - target_cpa = "target_cpa" - target_roas = "target_roas" + maximize_conversions = 'maximize_conversions' + target_cpa = 'target_cpa' + target_roas = 'target_roas' class ConversionTracking(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) action_sources: Annotated[ list[action_source.ActionSource] | None, @@ -74,7 +74,7 @@ class ConversionTracking(AdCPBaseModel): supported_optimization_strategies: Annotated[ list[SupportedOptimizationStrategy] | None, Field( - description="Optimization strategies this product supports when an optimization_goal is set on a package", + description='Optimization strategies this product supports when an optimization_goal is set on a package', min_length=1, ), ] = None @@ -97,52 +97,52 @@ class DeliveryMeasurement(AdCPBaseModel): class ProductCard(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) format_id: Annotated[ format_id_1.FormatId, Field( - description="Creative format defining the card layout (typically product_card_standard)" + description='Creative format defining the card layout (typically product_card_standard)' ), ] manifest: Annotated[ dict[str, Any], - Field(description="Asset manifest for rendering the card, structure defined by the format"), + Field(description='Asset manifest for rendering the card, structure defined by the format'), ] class ProductCardDetailed(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) format_id: Annotated[ format_id_1.FormatId, Field( - description="Creative format defining the detailed card layout (typically product_card_detailed)" + description='Creative format defining the detailed card layout (typically product_card_detailed)' ), ] manifest: Annotated[ dict[str, Any], Field( - description="Asset manifest for rendering the detailed card, structure defined by the format" + description='Asset manifest for rendering the detailed card, structure defined by the format' ), ] class Product(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) brief_relevance: Annotated[ str | None, Field( - description="Explanation of why this product matches the brief (only included when brief is provided)" + description='Explanation of why this product matches the brief (only included when brief is provided)' ), ] = None catalog_match: Annotated[ CatalogMatch | None, Field( - description="When the buyer provides a catalog on get_products, indicates which catalog items are eligible for this product. Only present for products where catalog matching is relevant (e.g., sponsored product listings, job boards, hotel ads)." + description='When the buyer provides a catalog on get_products, indicates which catalog items are eligible for this product. Only present for products where catalog matching is relevant (e.g., sponsored product listings, job boards, hotel ads).' ), ] = None catalog_types: Annotated[ @@ -161,7 +161,7 @@ class Product(AdCPBaseModel): conversion_tracking: Annotated[ ConversionTracking | None, Field( - description="Conversion tracking for this product. Presence indicates the product supports conversion-optimized delivery. Seller-level capabilities (supported event types, UID types, attribution windows) are declared in get_adcp_capabilities." + description='Conversion tracking for this product. Presence indicates the product supports conversion-optimized delivery. Seller-level capabilities (supported event types, UID types, attribution windows) are declared in get_adcp_capabilities.' ), ] = None creative_policy: creative_policy_1.CreativePolicy | None = None @@ -174,56 +174,56 @@ class Product(AdCPBaseModel): delivery_measurement: Annotated[ DeliveryMeasurement, Field( - description="Measurement provider and methodology for delivery metrics. The buyer accepts the declared provider as the source of truth for the buy. REQUIRED for all products." + description='Measurement provider and methodology for delivery metrics. The buyer accepts the declared provider as the source of truth for the buy. REQUIRED for all products.' ), ] delivery_type: delivery_type_1.DeliveryType description: Annotated[ - str, Field(description="Detailed description of the product and its inventory") + str, Field(description='Detailed description of the product and its inventory') ] expires_at: Annotated[ - AwareDatetime | None, Field(description="Expiration timestamp for custom products") + AwareDatetime | None, Field(description='Expiration timestamp for custom products') ] = None ext: ext_1.ExtensionObject | None = None forecast: Annotated[ delivery_forecast.DeliveryForecast | None, Field( - description="Forecasted delivery metrics for this product. Gives buyers an estimate of expected performance before requesting a proposal." + description='Forecasted delivery metrics for this product. Gives buyers an estimate of expected performance before requesting a proposal.' ), ] = None format_ids: Annotated[ list[format_id_1.FormatId], Field( - description="Array of supported creative format IDs - structured format_id objects with agent_url and id" + description='Array of supported creative format IDs - structured format_id objects with agent_url and id' ), ] - is_custom: Annotated[bool | None, Field(description="Whether this is a custom product")] = None + is_custom: Annotated[bool | None, Field(description='Whether this is a custom product')] = None measurement: measurement_1.Measurement | None = None - name: Annotated[str, Field(description="Human-readable product name")] + name: Annotated[str, Field(description='Human-readable product name')] placements: Annotated[ list[placement.Placement] | None, Field( - description="Optional array of specific placements within this product. When provided, buyers can target specific placements when assigning creatives.", + description='Optional array of specific placements within this product. When provided, buyers can target specific placements when assigning creatives.', min_length=1, ), ] = None pricing_options: Annotated[ list[pricing_option.PricingOption], - Field(description="Available pricing models for this product", min_length=1), + Field(description='Available pricing models for this product', min_length=1), ] product_card: Annotated[ ProductCard | None, Field( - description="Optional standard visual card (300x400px) for displaying this product in user interfaces. Can be rendered via preview_creative or pre-generated." + description='Optional standard visual card (300x400px) for displaying this product in user interfaces. Can be rendered via preview_creative or pre-generated.' ), ] = None product_card_detailed: Annotated[ ProductCardDetailed | None, Field( - description="Optional detailed card with carousel and full specifications. Provides rich product presentation similar to media kit pages." + description='Optional detailed card with carousel and full specifications. Provides rich product presentation similar to media kit pages.' ), ] = None - product_id: Annotated[str, Field(description="Unique identifier for the product")] + product_id: Annotated[str, Field(description='Unique identifier for the product')] property_targeting_allowed: Annotated[ bool | None, Field( @@ -241,6 +241,6 @@ class Product(AdCPBaseModel): signal_targeting_allowed: Annotated[ bool | None, Field( - description="Whether buyers can filter this product to a subset of its data_provider_signals. When false (default), the product includes all listed signals as a bundle. When true, buyers can target specific signals." + description='Whether buyers can filter this product to a subset of its data_provider_signals. When false (default), the product includes all listed signals as a bundle. When true, buyers can target specific signals.' ), ] = False diff --git a/src/adcp/types/generated_poc/core/product_allocation.py b/src/adcp/types/generated_poc/core/product_allocation.py index 1b4f27c3..4f5ac5df 100644 --- a/src/adcp/types/generated_poc/core/product_allocation.py +++ b/src/adcp/types/generated_poc/core/product_allocation.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/product_allocation.json -# timestamp: 2026-02-12T12:00:44+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,12 +15,12 @@ class ProductAllocation(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) allocation_percentage: Annotated[ float, Field( - description="Percentage of total budget allocated to this product (0-100)", + description='Percentage of total budget allocated to this product (0-100)', ge=0.0, le=100.0, ), @@ -28,29 +28,29 @@ class ProductAllocation(AdCPBaseModel): daypart_targets: Annotated[ list[daypart_target.DaypartTarget] | None, Field( - description="Recommended time windows for this allocation in spot-plan proposals.", + description='Recommended time windows for this allocation in spot-plan proposals.', min_length=1, ), ] = None ext: ext_1.ExtensionObject | None = None forecast: Annotated[ delivery_forecast.DeliveryForecast | None, - Field(description="Forecasted delivery metrics for this allocation"), + Field(description='Forecasted delivery metrics for this allocation'), ] = None pricing_option_id: Annotated[ str | None, Field(description="Recommended pricing option ID from the product's pricing_options array"), ] = None product_id: Annotated[ - str, Field(description="ID of the product (must reference a product in the products array)") + str, Field(description='ID of the product (must reference a product in the products array)') ] rationale: Annotated[ str | None, - Field(description="Explanation of why this product and allocation are recommended"), + Field(description='Explanation of why this product and allocation are recommended'), ] = None sequence: Annotated[ int | None, - Field(description="Optional ordering hint for multi-line-item plans (1-based)", ge=1), + Field(description='Optional ordering hint for multi-line-item plans (1-based)', ge=1), ] = None tags: Annotated[ list[str] | None, diff --git a/src/adcp/types/generated_poc/core/product_filters.py b/src/adcp/types/generated_poc/core/product_filters.py index d22cb8c2..69633846 100644 --- a/src/adcp/types/generated_poc/core/product_filters.py +++ b/src/adcp/types/generated_poc/core/product_filters.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/product_filters.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -19,59 +19,59 @@ class BudgetRange(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) currency: Annotated[ str, Field( - description="ISO 4217 currency code (e.g., 'USD', 'EUR', 'GBP')", pattern="^[A-Z]{3}$" + description="ISO 4217 currency code (e.g., 'USD', 'EUR', 'GBP')", pattern='^[A-Z]{3}$' ), ] - max: Annotated[float | None, Field(description="Maximum budget amount", ge=0.0)] = None - min: Annotated[float, Field(description="Minimum budget amount", ge=0.0)] + max: Annotated[float | None, Field(description='Maximum budget amount', ge=0.0)] = None + min: Annotated[float, Field(description='Minimum budget amount', ge=0.0)] class BudgetRange1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) currency: Annotated[ str, Field( - description="ISO 4217 currency code (e.g., 'USD', 'EUR', 'GBP')", pattern="^[A-Z]{3}$" + description="ISO 4217 currency code (e.g., 'USD', 'EUR', 'GBP')", pattern='^[A-Z]{3}$' ), ] - max: Annotated[float, Field(description="Maximum budget amount", ge=0.0)] - min: Annotated[float | None, Field(description="Minimum budget amount", ge=0.0)] = None + max: Annotated[float, Field(description='Maximum budget amount', ge=0.0)] + min: Annotated[float | None, Field(description='Minimum budget amount', ge=0.0)] = None class Country(RootModel[str]): - root: Annotated[str, Field(pattern="^[A-Z]{2}$")] + root: Annotated[str, Field(pattern='^[A-Z]{2}$')] class Metro(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) code: Annotated[ str, Field(description="Metro code within the system (e.g., '501' for NYC DMA)") ] system: Annotated[ - metro_system.MetroAreaSystem, Field(description="Metro classification system") + metro_system.MetroAreaSystem, Field(description='Metro classification system') ] class Region(RootModel[str]): - root: Annotated[str, Field(pattern="^[A-Z]{2}-[A-Z0-9]+$")] + root: Annotated[str, Field(pattern='^[A-Z]{2}-[A-Z0-9]+$')] class RequiredGeoTargetingItem(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) level: Annotated[ geo_level.GeographicTargetingLevel, - Field(description="Geographic targeting level (country, region, metro, postal_area)"), + Field(description='Geographic targeting level (country, region, metro, postal_area)'), ] system: Annotated[ str | None, @@ -83,11 +83,11 @@ class RequiredGeoTargetingItem(AdCPBaseModel): class ProductFilters(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) budget_range: Annotated[ BudgetRange | BudgetRange1 | None, - Field(description="Budget range to filter appropriate products"), + Field(description='Budget range to filter appropriate products'), ] = None channels: Annotated[ list[channels_1.MediaChannel] | None, @@ -107,33 +107,33 @@ class ProductFilters(AdCPBaseModel): end_date: Annotated[ date | None, Field( - description="Campaign end date (ISO 8601 date format: YYYY-MM-DD) for availability checks" + description='Campaign end date (ISO 8601 date format: YYYY-MM-DD) for availability checks' ), ] = None format_ids: Annotated[ list[format_id.FormatId] | None, - Field(description="Filter by specific format IDs", min_length=1), + Field(description='Filter by specific format IDs', min_length=1), ] = None format_types: Annotated[ list[format_category.FormatCategory] | None, - Field(description="Filter by format types", min_length=1), + Field(description='Filter by format types', min_length=1), ] = None is_fixed_price: Annotated[ bool | None, Field( - description="Filter by pricing availability: true = products offering fixed pricing (at least one option with fixed_price), false = products offering auction pricing (at least one option without fixed_price). Products with both fixed and auction options match both true and false." + description='Filter by pricing availability: true = products offering fixed pricing (at least one option with fixed_price), false = products offering auction pricing (at least one option without fixed_price). Products with both fixed and auction options match both true and false.' ), ] = None metros: Annotated[ list[Metro] | None, Field( - description="Filter by metro coverage for locally-bound inventory (radio, DOOH, local TV). Use when products have DMA/metro-specific coverage. For digital inventory where products have broad coverage, use required_geo_targeting instead to filter by seller capability.", + description='Filter by metro coverage for locally-bound inventory (radio, DOOH, local TV). Use when products have DMA/metro-specific coverage. For digital inventory where products have broad coverage, use required_geo_targeting instead to filter by seller capability.', min_length=1, ), ] = None min_exposures: Annotated[ int | None, - Field(description="Minimum exposures/impressions needed for measurement validity", ge=1), + Field(description='Minimum exposures/impressions needed for measurement validity', ge=1), ] = None regions: Annotated[ list[Region] | None, @@ -145,35 +145,35 @@ class ProductFilters(AdCPBaseModel): required_axe_integrations: Annotated[ list[AnyUrl] | None, Field( - description="Filter to products executable through specific agentic ad exchanges. URLs are canonical identifiers." + description='Filter to products executable through specific agentic ad exchanges. URLs are canonical identifiers.' ), ] = None required_features: Annotated[ media_buy_features.MediaBuyFeatures | None, Field( - description="Filter to products from sellers supporting specific protocol features. Only features set to true are used for filtering." + description='Filter to products from sellers supporting specific protocol features. Only features set to true are used for filtering.' ), ] = None required_geo_targeting: Annotated[ list[RequiredGeoTargetingItem] | None, Field( - description="Filter to products from sellers supporting specific geo targeting capabilities. Each entry specifies a targeting level (country, region, metro, postal_area) and optionally a system for levels that have multiple classification systems.", + description='Filter to products from sellers supporting specific geo targeting capabilities. Each entry specifies a targeting level (country, region, metro, postal_area) and optionally a system for levels that have multiple classification systems.', min_length=1, ), ] = None signal_targeting: Annotated[ list[signal_targeting_1.SignalTargeting] | None, Field( - description="Filter to products supporting specific signals from data provider catalogs. Products must have the requested signals in their data_provider_signals and signal_targeting_allowed must be true (or all signals requested).", + description='Filter to products supporting specific signals from data provider catalogs. Products must have the requested signals in their data_provider_signals and signal_targeting_allowed must be true (or all signals requested).', min_length=1, ), ] = None standard_formats_only: Annotated[ - bool | None, Field(description="Only return products accepting IAB standard formats") + bool | None, Field(description='Only return products accepting IAB standard formats') ] = None start_date: Annotated[ date | None, Field( - description="Campaign start date (ISO 8601 date format: YYYY-MM-DD) for availability checks" + description='Campaign start date (ISO 8601 date format: YYYY-MM-DD) for availability checks' ), ] = None diff --git a/src/adcp/types/generated_poc/core/property.py b/src/adcp/types/generated_poc/core/property.py index 29826221..703250c9 100644 --- a/src/adcp/types/generated_poc/core/property.py +++ b/src/adcp/types/generated_poc/core/property.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/property.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -17,11 +17,11 @@ class Identifier(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) type: Annotated[ identifier_types.PropertyIdentifierTypes, - Field(description="Type of identifier for this property"), + Field(description='Type of identifier for this property'), ] value: Annotated[ str, @@ -33,25 +33,25 @@ class Identifier(AdCPBaseModel): class Property(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) identifiers: Annotated[ - list[Identifier], Field(description="Array of identifiers for this property", min_length=1) + list[Identifier], Field(description='Array of identifiers for this property', min_length=1) ] - name: Annotated[str, Field(description="Human-readable property name")] + name: Annotated[str, Field(description='Human-readable property name')] property_id: Annotated[ property_id_1.PropertyId | None, Field( - description="Unique identifier for this property (optional). Enables referencing properties by ID instead of repeating full objects." + description='Unique identifier for this property (optional). Enables referencing properties by ID instead of repeating full objects.' ), ] = None property_type: Annotated[ - property_type_1.PropertyType, Field(description="Type of advertising property") + property_type_1.PropertyType, Field(description='Type of advertising property') ] publisher_domain: Annotated[ str | None, Field( - description="Domain where adagents.json should be checked for authorization validation. Optional in adagents.json (file location implies domain)." + description='Domain where adagents.json should be checked for authorization validation. Optional in adagents.json (file location implies domain).' ), ] = None supported_channels: Annotated[ @@ -63,6 +63,6 @@ class Property(AdCPBaseModel): tags: Annotated[ list[property_tag.PropertyTag] | None, Field( - description="Tags for categorization and grouping (e.g., network membership, content categories)" + description='Tags for categorization and grouping (e.g., network membership, content categories)' ), ] = None diff --git a/src/adcp/types/generated_poc/core/property_id.py b/src/adcp/types/generated_poc/core/property_id.py index 4c7a6ca2..5693c54a 100644 --- a/src/adcp/types/generated_poc/core/property_id.py +++ b/src/adcp/types/generated_poc/core/property_id.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/property_id.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -13,9 +13,9 @@ class PropertyId(RootModel[str]): root: Annotated[ str, Field( - description="Identifier for a publisher property. Must be lowercase alphanumeric with underscores only.", - examples=["cnn_ctv_app", "homepage", "mobile_ios", "instagram"], - pattern="^[a-z0-9_]+$", - title="Property ID", + description='Identifier for a publisher property. Must be lowercase alphanumeric with underscores only.', + examples=['cnn_ctv_app', 'homepage', 'mobile_ios', 'instagram'], + pattern='^[a-z0-9_]+$', + title='Property ID', ), ] diff --git a/src/adcp/types/generated_poc/core/property_list_ref.py b/src/adcp/types/generated_poc/core/property_list_ref.py index 71f29b66..f882236b 100644 --- a/src/adcp/types/generated_poc/core/property_list_ref.py +++ b/src/adcp/types/generated_poc/core/property_list_ref.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/property_list_ref.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,15 +12,15 @@ class PropertyListReference(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) - agent_url: Annotated[AnyUrl, Field(description="URL of the agent managing the property list")] + agent_url: Annotated[AnyUrl, Field(description='URL of the agent managing the property list')] auth_token: Annotated[ str | None, Field( - description="JWT or other authorization token for accessing the list. Optional if the list is public or caller has implicit access." + description='JWT or other authorization token for accessing the list. Optional if the list is public or caller has implicit access.' ), ] = None list_id: Annotated[ - str, Field(description="Identifier for the property list within the agent", min_length=1) + str, Field(description='Identifier for the property list within the agent', min_length=1) ] diff --git a/src/adcp/types/generated_poc/core/property_tag.py b/src/adcp/types/generated_poc/core/property_tag.py index 0c0876cb..e780940c 100644 --- a/src/adcp/types/generated_poc/core/property_tag.py +++ b/src/adcp/types/generated_poc/core/property_tag.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/property_tag.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -13,9 +13,9 @@ class PropertyTag(RootModel[str]): root: Annotated[ str, Field( - description="Tag for categorizing publisher properties. Must be lowercase alphanumeric with underscores only.", - examples=["ctv", "premium", "news", "sports", "meta_network", "social_media"], - pattern="^[a-z0-9_]+$", - title="Property Tag", + description='Tag for categorizing publisher properties. Must be lowercase alphanumeric with underscores only.', + examples=['ctv', 'premium', 'news', 'sports', 'meta_network', 'social_media'], + pattern='^[a-z0-9_]+$', + title='Property Tag', ), ] diff --git a/src/adcp/types/generated_poc/core/proposal.py b/src/adcp/types/generated_poc/core/proposal.py index 42fe8882..5ce6ae68 100644 --- a/src/adcp/types/generated_poc/core/proposal.py +++ b/src/adcp/types/generated_poc/core/proposal.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/proposal.json -# timestamp: 2026-02-18T17:56:28+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,56 +16,56 @@ class TotalBudgetGuidance(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - currency: Annotated[str | None, Field(description="ISO 4217 currency code")] = None + currency: Annotated[str | None, Field(description='ISO 4217 currency code')] = None max: Annotated[ - float | None, Field(description="Maximum budget before diminishing returns", ge=0.0) + float | None, Field(description='Maximum budget before diminishing returns', ge=0.0) ] = None - min: Annotated[float | None, Field(description="Minimum recommended budget", ge=0.0)] = None + min: Annotated[float | None, Field(description='Minimum recommended budget', ge=0.0)] = None recommended: Annotated[ - float | None, Field(description="Recommended budget for optimal performance", ge=0.0) + float | None, Field(description='Recommended budget for optimal performance', ge=0.0) ] = None class Proposal(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) allocations: Annotated[ list[product_allocation.ProductAllocation], Field( - description="Budget allocations across products. Allocation percentages MUST sum to 100. Publishers are responsible for ensuring the sum equals 100; buyers SHOULD validate this before execution.", + description='Budget allocations across products. Allocation percentages MUST sum to 100. Publishers are responsible for ensuring the sum equals 100; buyers SHOULD validate this before execution.', min_length=1, ), ] brief_alignment: Annotated[ str | None, - Field(description="Explanation of how this proposal aligns with the campaign brief"), + Field(description='Explanation of how this proposal aligns with the campaign brief'), ] = None description: Annotated[ - str | None, Field(description="Explanation of the proposal strategy and what it achieves") + str | None, Field(description='Explanation of the proposal strategy and what it achieves') ] = None expires_at: Annotated[ AwareDatetime | None, Field( - description="When this proposal expires and can no longer be executed. After expiration, referenced products or pricing may no longer be available." + description='When this proposal expires and can no longer be executed. After expiration, referenced products or pricing may no longer be available.' ), ] = None ext: ext_1.ExtensionObject | None = None forecast: Annotated[ delivery_forecast.DeliveryForecast | None, Field( - description="Aggregate forecasted delivery metrics for the entire proposal. When both proposal-level and allocation-level forecasts are present, the proposal-level forecast is authoritative for total delivery estimation." + description='Aggregate forecasted delivery metrics for the entire proposal. When both proposal-level and allocation-level forecasts are present, the proposal-level forecast is authoritative for total delivery estimation.' ), ] = None - name: Annotated[str, Field(description="Human-readable name for this media plan proposal")] + name: Annotated[str, Field(description='Human-readable name for this media plan proposal')] proposal_id: Annotated[ str, Field( - description="Unique identifier for this proposal. Used to execute it via create_media_buy." + description='Unique identifier for this proposal. Used to execute it via create_media_buy.' ), ] total_budget_guidance: Annotated[ - TotalBudgetGuidance | None, Field(description="Optional budget guidance for this proposal") + TotalBudgetGuidance | None, Field(description='Optional budget guidance for this proposal') ] = None diff --git a/src/adcp/types/generated_poc/core/protocol_envelope.py b/src/adcp/types/generated_poc/core/protocol_envelope.py index dae3b333..1f7e8281 100644 --- a/src/adcp/types/generated_poc/core/protocol_envelope.py +++ b/src/adcp/types/generated_poc/core/protocol_envelope.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/protocol_envelope.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,47 +15,47 @@ class ProtocolEnvelope(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context_id: Annotated[ str | None, Field( - description="Session/conversation identifier for tracking related operations across multiple task invocations. Managed by the protocol layer to maintain conversational context." + description='Session/conversation identifier for tracking related operations across multiple task invocations. Managed by the protocol layer to maintain conversational context.' ), ] = None message: Annotated[ str | None, Field( - description="Human-readable summary of the task result. Provides natural language explanation of what happened, suitable for display to end users or for AI agent comprehension. Generated by the protocol layer based on the task response." + description='Human-readable summary of the task result. Provides natural language explanation of what happened, suitable for display to end users or for AI agent comprehension. Generated by the protocol layer based on the task response.' ), ] = None payload: Annotated[ dict[str, Any], Field( - description="The actual task-specific response data. This is the content defined in individual task response schemas (e.g., get-products-response.json, create-media-buy-response.json). Contains only domain-specific data without protocol-level fields." + description='The actual task-specific response data. This is the content defined in individual task response schemas (e.g., get-products-response.json, create-media-buy-response.json). Contains only domain-specific data without protocol-level fields.' ), ] push_notification_config: Annotated[ push_notification_config_1.PushNotificationConfig | None, Field( - description="Push notification configuration for async task updates (A2A and REST protocols). Echoed from the request to confirm webhook settings. Specifies URL, authentication scheme (Bearer or HMAC-SHA256), and credentials. MCP uses progress notifications instead of webhooks." + description='Push notification configuration for async task updates (A2A and REST protocols). Echoed from the request to confirm webhook settings. Specifies URL, authentication scheme (Bearer or HMAC-SHA256), and credentials. MCP uses progress notifications instead of webhooks.' ), ] = None status: Annotated[ task_status.TaskStatus, Field( - description="Current task execution state. Indicates whether the task is completed, in progress (working), submitted for async processing, failed, or requires user input. Managed by the protocol layer." + description='Current task execution state. Indicates whether the task is completed, in progress (working), submitted for async processing, failed, or requires user input. Managed by the protocol layer.' ), ] task_id: Annotated[ str | None, Field( - description="Unique identifier for tracking asynchronous operations. Present when a task requires extended processing time. Used to query task status and retrieve results when complete." + description='Unique identifier for tracking asynchronous operations. Present when a task requires extended processing time. Used to query task status and retrieve results when complete.' ), ] = None timestamp: Annotated[ AwareDatetime | None, Field( - description="ISO 8601 timestamp when the response was generated. Useful for debugging, logging, cache validation, and tracking async operation progress." + description='ISO 8601 timestamp when the response was generated. Useful for debugging, logging, cache validation, and tracking async operation progress.' ), ] = None diff --git a/src/adcp/types/generated_poc/core/publisher_property_selector.py b/src/adcp/types/generated_poc/core/publisher_property_selector.py index fd3a18b7..6ad8b5db 100644 --- a/src/adcp/types/generated_poc/core/publisher_property_selector.py +++ b/src/adcp/types/generated_poc/core/publisher_property_selector.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/publisher_property_selector.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,26 +14,26 @@ class PublisherPropertySelector1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) publisher_domain: Annotated[ str, Field( description="Domain where publisher's adagents.json is hosted (e.g., 'cnn.com')", - pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", + pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', ), ] selection_type: Annotated[ - Literal["all"], + Literal['all'], Field( - description="Discriminator indicating all properties from this publisher are included" + description='Discriminator indicating all properties from this publisher are included' ), ] class PublisherPropertySelector2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) property_ids: Annotated[ list[property_id.PropertyId], @@ -43,18 +43,18 @@ class PublisherPropertySelector2(AdCPBaseModel): str, Field( description="Domain where publisher's adagents.json is hosted (e.g., 'cnn.com')", - pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", + pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', ), ] selection_type: Annotated[ - Literal["by_id"], - Field(description="Discriminator indicating selection by specific property IDs"), + Literal['by_id'], + Field(description='Discriminator indicating selection by specific property IDs'), ] class PublisherPropertySelector3(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) property_tags: Annotated[ list[property_tag.PropertyTag], @@ -67,11 +67,11 @@ class PublisherPropertySelector3(AdCPBaseModel): str, Field( description="Domain where publisher's adagents.json is hosted (e.g., 'cnn.com')", - pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", + pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', ), ] selection_type: Annotated[ - Literal["by_tag"], Field(description="Discriminator indicating selection by property tags") + Literal['by_tag'], Field(description='Discriminator indicating selection by property tags') ] @@ -82,7 +82,7 @@ class PublisherPropertySelector( PublisherPropertySelector1 | PublisherPropertySelector2 | PublisherPropertySelector3, Field( description="Selects properties from a publisher's adagents.json. Used for both product definitions and agent authorization. Supports three selection patterns: all properties, specific IDs, or by tags.", - discriminator="selection_type", - title="Publisher Property Selector", + discriminator='selection_type', + title='Publisher Property Selector', ), ] diff --git a/src/adcp/types/generated_poc/core/push_notification_config.py b/src/adcp/types/generated_poc/core/push_notification_config.py index a6f61635..4eac9114 100644 --- a/src/adcp/types/generated_poc/core/push_notification_config.py +++ b/src/adcp/types/generated_poc/core/push_notification_config.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/push_notification_config.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,12 +14,12 @@ class Authentication(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) credentials: Annotated[ str, Field( - description="Credentials for authentication. For Bearer: token sent in Authorization header. For HMAC-SHA256: shared secret used to generate signature. Minimum 32 characters. Exchanged out-of-band during onboarding.", + description='Credentials for authentication. For Bearer: token sent in Authorization header. For HMAC-SHA256: shared secret used to generate signature. Minimum 32 characters. Exchanged out-of-band during onboarding.', min_length=32, ), ] @@ -36,13 +36,13 @@ class Authentication(AdCPBaseModel): class PushNotificationConfig(AdCPBaseModel): authentication: Annotated[ Authentication, - Field(description="Authentication configuration for webhook delivery (A2A-compatible)"), + Field(description='Authentication configuration for webhook delivery (A2A-compatible)'), ] token: Annotated[ str | None, Field( - description="Optional client-provided token for webhook validation. Echoed back in webhook payload to validate request authenticity.", + description='Optional client-provided token for webhook validation. Echoed back in webhook payload to validate request authenticity.', min_length=16, ), ] = None - url: Annotated[AnyUrl, Field(description="Webhook endpoint URL for task status notifications")] + url: Annotated[AnyUrl, Field(description='Webhook endpoint URL for task status notifications')] diff --git a/src/adcp/types/generated_poc/core/real_estate_item.py b/src/adcp/types/generated_poc/core/real_estate_item.py index 3abd6133..a721a8b8 100644 --- a/src/adcp/types/generated_poc/core/real_estate_item.py +++ b/src/adcp/types/generated_poc/core/real_estate_item.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/real_estate_item.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,85 +16,85 @@ class Address(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) - city: Annotated[str | None, Field(description="City name.")] = None + city: Annotated[str | None, Field(description='City name.')] = None country: Annotated[ - str | None, Field(description="ISO 3166-1 alpha-2 country code.", pattern="^[A-Z]{2}$") + str | None, Field(description='ISO 3166-1 alpha-2 country code.', pattern='^[A-Z]{2}$') ] = None - postal_code: Annotated[str | None, Field(description="Postal or ZIP code.")] = None - region: Annotated[str | None, Field(description="State, province, or region.")] = None - street: Annotated[str | None, Field(description="Street address.")] = None + postal_code: Annotated[str | None, Field(description='Postal or ZIP code.')] = None + region: Annotated[str | None, Field(description='State, province, or region.')] = None + street: Annotated[str | None, Field(description='Street address.')] = None class Unit(Enum): - sqft = "sqft" - sqm = "sqm" + sqft = 'sqft' + sqm = 'sqm' class Area(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) - unit: Annotated[Unit, Field(description="Area unit.")] - value: Annotated[float, Field(description="Area value.", ge=0.0)] + unit: Annotated[Unit, Field(description='Area unit.')] + value: Annotated[float, Field(description='Area value.', ge=0.0)] class ListingType(Enum): - for_sale = "for_sale" - for_rent = "for_rent" + for_sale = 'for_sale' + for_rent = 'for_rent' class Location(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) lat: Annotated[ - float, Field(description="Latitude in decimal degrees (WGS 84).", ge=-90.0, le=90.0) + float, Field(description='Latitude in decimal degrees (WGS 84).', ge=-90.0, le=90.0) ] lng: Annotated[ - float, Field(description="Longitude in decimal degrees (WGS 84).", ge=-180.0, le=180.0) + float, Field(description='Longitude in decimal degrees (WGS 84).', ge=-180.0, le=180.0) ] class PropertyType(Enum): - house = "house" - apartment = "apartment" - condo = "condo" - townhouse = "townhouse" - land = "land" - commercial = "commercial" + house = 'house' + apartment = 'apartment' + condo = 'condo' + townhouse = 'townhouse' + land = 'land' + commercial = 'commercial' class RealEstateItem(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - address: Annotated[Address, Field(description="Property address.")] - area: Annotated[Area | None, Field(description="Property size.")] = None + address: Annotated[Address, Field(description='Property address.')] + area: Annotated[Area | None, Field(description='Property size.')] = None bathrooms: Annotated[ float | None, Field( - description="Number of bathrooms (e.g., 2.5 for two full and one half bath).", ge=0.0 + description='Number of bathrooms (e.g., 2.5 for two full and one half bath).', ge=0.0 ), ] = None - bedrooms: Annotated[int | None, Field(description="Number of bedrooms.", ge=0)] = None - description: Annotated[str | None, Field(description="Property description.")] = None + bedrooms: Annotated[int | None, Field(description='Number of bedrooms.', ge=0)] = None + description: Annotated[str | None, Field(description='Property description.')] = None ext: ext_1.ExtensionObject | None = None - image_url: Annotated[AnyUrl | None, Field(description="Primary property image URL.")] = None - listing_id: Annotated[str, Field(description="Unique identifier for this property listing.")] + image_url: Annotated[AnyUrl | None, Field(description='Primary property image URL.')] = None + listing_id: Annotated[str, Field(description='Unique identifier for this property listing.')] listing_type: Annotated[ - ListingType | None, Field(description="Whether the property is for sale or rent.") + ListingType | None, Field(description='Whether the property is for sale or rent.') ] = None location: Annotated[ - Location | None, Field(description="Geographic coordinates of the property.") + Location | None, Field(description='Geographic coordinates of the property.') ] = None - neighborhood: Annotated[str | None, Field(description="Neighborhood or area name.")] = None + neighborhood: Annotated[str | None, Field(description='Neighborhood or area name.')] = None price: Annotated[ price_1.Price | None, Field(description="Property price or rental rate. Use period 'month' for rentals."), ] = None - property_type: Annotated[PropertyType | None, Field(description="Type of property.")] = None + property_type: Annotated[PropertyType | None, Field(description='Type of property.')] = None tags: Annotated[ list[str] | None, Field( @@ -105,5 +105,5 @@ class RealEstateItem(AdCPBaseModel): title: Annotated[ str, Field(description="Listing title (e.g., 'Spacious 3BR Apartment in Jordaan').") ] - url: Annotated[AnyUrl | None, Field(description="Listing page URL.")] = None - year_built: Annotated[int | None, Field(description="Year the property was built.")] = None + url: Annotated[AnyUrl | None, Field(description='Listing page URL.')] = None + year_built: Annotated[int | None, Field(description='Year the property was built.')] = None diff --git a/src/adcp/types/generated_poc/core/reference_asset.py b/src/adcp/types/generated_poc/core/reference_asset.py index c46ac28c..429e4f83 100644 --- a/src/adcp/types/generated_poc/core/reference_asset.py +++ b/src/adcp/types/generated_poc/core/reference_asset.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/reference_asset.json -# timestamp: 2026-02-18T17:56:28+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,30 +12,30 @@ class Role(Enum): - style_reference = "style_reference" - product_shot = "product_shot" - mood_board = "mood_board" - example_creative = "example_creative" - logo = "logo" - strategy_doc = "strategy_doc" + style_reference = 'style_reference' + product_shot = 'product_shot' + mood_board = 'mood_board' + example_creative = 'example_creative' + logo = 'logo' + strategy_doc = 'strategy_doc' class ReferenceAsset(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) description: Annotated[ str | None, Field( - description="Human-readable description of the asset and how it should inform creative generation" + description='Human-readable description of the asset and how it should inform creative generation' ), ] = None role: Annotated[ Role, Field( - description="How the creative agent should use this asset. style_reference: match the visual style; product_shot: include this product; mood_board: overall look and feel; example_creative: example of a similar execution; logo: logo to use; strategy_doc: strategy or planning document for context" + description='How the creative agent should use this asset. style_reference: match the visual style; product_shot: include this product; mood_board: overall look and feel; example_creative: example of a similar execution; logo: logo to use; strategy_doc: strategy or planning document for context' ), ] url: Annotated[ - AnyUrl, Field(description="URL to the reference asset (image, video, or document)") + AnyUrl, Field(description='URL to the reference asset (image, video, or document)') ] diff --git a/src/adcp/types/generated_poc/core/reporting_capabilities.py b/src/adcp/types/generated_poc/core/reporting_capabilities.py index cb833716..27fd57a4 100644 --- a/src/adcp/types/generated_poc/core/reporting_capabilities.py +++ b/src/adcp/types/generated_poc/core/reporting_capabilities.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/reporting_capabilities.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,27 +14,27 @@ class DateRangeSupport(Enum): - date_range = "date_range" - lifetime_only = "lifetime_only" + date_range = 'date_range' + lifetime_only = 'lifetime_only' class ReportingCapabilities(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) available_metrics: Annotated[ list[available_metric.AvailableMetric], Field( description="Metrics available in reporting. Impressions and spend are always implicitly included. When a creative format declares reported_metrics, buyers receive the intersection of these product-level metrics and the format's reported_metrics.", examples=[ - ["impressions", "spend", "clicks", "video_completions"], - ["impressions", "spend", "conversions"], + ['impressions', 'spend', 'clicks', 'video_completions'], + ['impressions', 'spend', 'conversions'], ], ), ] available_reporting_frequencies: Annotated[ list[reporting_frequency.ReportingFrequency], - Field(description="Supported reporting frequency options", min_length=1), + Field(description='Supported reporting frequency options', min_length=1), ] date_range_support: Annotated[ DateRangeSupport, @@ -45,7 +45,7 @@ class ReportingCapabilities(AdCPBaseModel): expected_delay_minutes: Annotated[ int, Field( - description="Expected delay in minutes before reporting data becomes available (e.g., 240 for 4-hour delay)", + description='Expected delay in minutes before reporting data becomes available (e.g., 240 for 4-hour delay)', examples=[240, 300, 1440], ge=0, ), @@ -53,17 +53,17 @@ class ReportingCapabilities(AdCPBaseModel): supports_creative_breakdown: Annotated[ bool | None, Field( - description="Whether this product supports creative-level metric breakdowns in delivery reporting (by_creative within by_package)" + description='Whether this product supports creative-level metric breakdowns in delivery reporting (by_creative within by_package)' ), ] = None supports_webhooks: Annotated[ bool, - Field(description="Whether this product supports webhook-based reporting notifications"), + Field(description='Whether this product supports webhook-based reporting notifications'), ] timezone: Annotated[ str, Field( description="Timezone for reporting periods. Use 'UTC' or IANA timezone (e.g., 'America/New_York'). Critical for daily/monthly frequency alignment.", - examples=["UTC", "America/New_York", "Europe/London", "America/Los_Angeles"], + examples=['UTC', 'America/New_York', 'Europe/London', 'America/Los_Angeles'], ), ] diff --git a/src/adcp/types/generated_poc/core/reporting_webhook.py b/src/adcp/types/generated_poc/core/reporting_webhook.py index 83b131eb..4e9bd7ab 100644 --- a/src/adcp/types/generated_poc/core/reporting_webhook.py +++ b/src/adcp/types/generated_poc/core/reporting_webhook.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/reporting_webhook.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,12 +15,12 @@ class Authentication(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) credentials: Annotated[ str, Field( - description="Credentials for authentication. For Bearer: token sent in Authorization header. For HMAC-SHA256: shared secret used to generate signature. Minimum 32 characters. Exchanged out-of-band during onboarding.", + description='Credentials for authentication. For Bearer: token sent in Authorization header. For HMAC-SHA256: shared secret used to generate signature. Minimum 32 characters. Exchanged out-of-band during onboarding.', min_length=32, ), ] @@ -35,23 +35,23 @@ class Authentication(AdCPBaseModel): class ReportingFrequency(Enum): - hourly = "hourly" - daily = "daily" - monthly = "monthly" + hourly = 'hourly' + daily = 'daily' + monthly = 'monthly' class ReportingWebhook(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) authentication: Annotated[ Authentication, - Field(description="Authentication configuration for webhook delivery (A2A-compatible)"), + Field(description='Authentication configuration for webhook delivery (A2A-compatible)'), ] reporting_frequency: Annotated[ ReportingFrequency, Field( - description="Frequency for automated reporting delivery. Must be supported by all products in the media buy." + description='Frequency for automated reporting delivery. Must be supported by all products in the media buy.' ), ] requested_metrics: Annotated[ @@ -63,8 +63,8 @@ class ReportingWebhook(AdCPBaseModel): token: Annotated[ str | None, Field( - description="Optional client-provided token for webhook validation. Echoed back in webhook payload to validate request authenticity.", + description='Optional client-provided token for webhook validation. Echoed back in webhook payload to validate request authenticity.', min_length=16, ), ] = None - url: Annotated[AnyUrl, Field(description="Webhook endpoint URL for reporting notifications")] + url: Annotated[AnyUrl, Field(description='Webhook endpoint URL for reporting notifications')] diff --git a/src/adcp/types/generated_poc/core/requirements/asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/asset_requirements.py index 03fbd731..eb70f64e 100644 --- a/src/adcp/types/generated_poc/core/requirements/asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/asset_requirements.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/requirements/asset_requirements.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -54,7 +54,7 @@ class AssetRequirements( | url_asset_requirements.UrlAssetRequirements | webhook_asset_requirements.WebhookAssetRequirements, Field( - description="Technical requirements for creative assets. The applicable schema is determined by the sibling asset_type field.", - title="Asset Requirements", + description='Technical requirements for creative assets. The applicable schema is determined by the sibling asset_type field.', + title='Asset Requirements', ), ] diff --git a/src/adcp/types/generated_poc/core/requirements/audio_asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/audio_asset_requirements.py index c17ff459..0e1e3a82 100644 --- a/src/adcp/types/generated_poc/core/requirements/audio_asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/audio_asset_requirements.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/requirements/audio_asset_requirements.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,16 +12,16 @@ class Channel(Enum): - mono = "mono" - stereo = "stereo" + mono = 'mono' + stereo = 'stereo' class Format(Enum): - mp3 = "mp3" - aac = "aac" - wav = "wav" - ogg = "ogg" - flac = "flac" + mp3 = 'mp3' + aac = 'aac' + wav = 'wav' + ogg = 'ogg' + flac = 'flac' class SampleRate(RootModel[int]): @@ -30,28 +30,28 @@ class SampleRate(RootModel[int]): class AudioAssetRequirements(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) channels: Annotated[ - list[Channel] | None, Field(description="Accepted audio channel configurations") + list[Channel] | None, Field(description='Accepted audio channel configurations') ] = None - formats: Annotated[list[Format] | None, Field(description="Accepted audio file formats")] = None + formats: Annotated[list[Format] | None, Field(description='Accepted audio file formats')] = None max_bitrate_kbps: Annotated[ - int | None, Field(description="Maximum audio bitrate in kilobits per second", ge=1) + int | None, Field(description='Maximum audio bitrate in kilobits per second', ge=1) ] = None max_duration_ms: Annotated[ - int | None, Field(description="Maximum duration in milliseconds", ge=1) + int | None, Field(description='Maximum duration in milliseconds', ge=1) ] = None max_file_size_kb: Annotated[ - int | None, Field(description="Maximum file size in kilobytes", ge=1) + int | None, Field(description='Maximum file size in kilobytes', ge=1) ] = None min_bitrate_kbps: Annotated[ - int | None, Field(description="Minimum audio bitrate in kilobits per second", ge=1) + int | None, Field(description='Minimum audio bitrate in kilobits per second', ge=1) ] = None min_duration_ms: Annotated[ - int | None, Field(description="Minimum duration in milliseconds", ge=1) + int | None, Field(description='Minimum duration in milliseconds', ge=1) ] = None sample_rates: Annotated[ list[SampleRate] | None, - Field(description="Accepted sample rates in Hz (e.g., [44100, 48000])"), + Field(description='Accepted sample rates in Hz (e.g., [44100, 48000])'), ] = None diff --git a/src/adcp/types/generated_poc/core/requirements/catalog_requirements.py b/src/adcp/types/generated_poc/core/requirements/catalog_requirements.py index fcc24b3b..313c704e 100644 --- a/src/adcp/types/generated_poc/core/requirements/catalog_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/catalog_requirements.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/requirements/catalog_requirements.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,23 +16,23 @@ class CatalogRequirements(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) catalog_type: Annotated[ catalog_type_1.CatalogType, - Field(description="The catalog type this requirement applies to"), + Field(description='The catalog type this requirement applies to'), ] feed_formats: Annotated[ list[feed_format.FeedFormat] | None, Field( - description="Accepted feed formats for this catalog type. When specified, the synced catalog must use one of these formats. When omitted, any format is accepted.", + description='Accepted feed formats for this catalog type. When specified, the synced catalog must use one of these formats. When omitted, any format is accepted.', min_length=1, ), ] = None min_items: Annotated[ int | None, Field( - description="Minimum number of items the catalog must contain for this format to render properly (e.g., a carousel might require at least 3 products)", + description='Minimum number of items the catalog must contain for this format to render properly (e.g., a carousel might require at least 3 products)', ge=1, ), ] = None @@ -46,7 +46,7 @@ class CatalogRequirements(AdCPBaseModel): required: Annotated[ bool | None, Field( - description="Whether this catalog type must be present. When true, creatives using this format must reference a synced catalog of this type." + description='Whether this catalog type must be present. When true, creatives using this format must reference a synced catalog of this type.' ), ] = True required_fields: Annotated[ diff --git a/src/adcp/types/generated_poc/core/requirements/css_asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/css_asset_requirements.py index 9b600f82..cb194d39 100644 --- a/src/adcp/types/generated_poc/core/requirements/css_asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/css_asset_requirements.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/requirements/css_asset_requirements.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,8 +12,8 @@ class CssAssetRequirements(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) max_file_size_kb: Annotated[ - int | None, Field(description="Maximum file size in kilobytes", ge=1) + int | None, Field(description='Maximum file size in kilobytes', ge=1) ] = None diff --git a/src/adcp/types/generated_poc/core/requirements/daast_asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/daast_asset_requirements.py index 258ab798..fa4cd0a7 100644 --- a/src/adcp/types/generated_poc/core/requirements/daast_asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/daast_asset_requirements.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/requirements/daast_asset_requirements.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,9 +12,9 @@ class DaastAssetRequirements(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) daast_version: Annotated[ - Literal["1.0"] | None, - Field(description="Required DAAST version. DAAST 1.0 is the current IAB standard."), + Literal['1.0'] | None, + Field(description='Required DAAST version. DAAST 1.0 is the current IAB standard.'), ] = None diff --git a/src/adcp/types/generated_poc/core/requirements/html_asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/html_asset_requirements.py index bf52c052..dce27ade 100644 --- a/src/adcp/types/generated_poc/core/requirements/html_asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/html_asset_requirements.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/requirements/html_asset_requirements.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,30 +12,30 @@ class Sandbox(Enum): - none = "none" - iframe = "iframe" - safeframe = "safeframe" - fencedframe = "fencedframe" + none = 'none' + iframe = 'iframe' + safeframe = 'safeframe' + fencedframe = 'fencedframe' class HtmlAssetRequirements(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) allowed_external_domains: Annotated[ list[str] | None, Field( - description="List of domains the HTML creative may reference for external resources. Only applicable when external_resources_allowed is true." + description='List of domains the HTML creative may reference for external resources. Only applicable when external_resources_allowed is true.' ), ] = None external_resources_allowed: Annotated[ bool | None, Field( - description="Whether the HTML creative can load external resources (scripts, images, fonts, etc.). When false, all resources must be inlined or bundled." + description='Whether the HTML creative can load external resources (scripts, images, fonts, etc.). When false, all resources must be inlined or bundled.' ), ] = None max_file_size_kb: Annotated[ - int | None, Field(description="Maximum file size in kilobytes for the HTML asset", ge=1) + int | None, Field(description='Maximum file size in kilobytes for the HTML asset', ge=1) ] = None sandbox: Annotated[ Sandbox | None, diff --git a/src/adcp/types/generated_poc/core/requirements/image_asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/image_asset_requirements.py index 0f532f63..8a84ef96 100644 --- a/src/adcp/types/generated_poc/core/requirements/image_asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/image_asset_requirements.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/requirements/image_asset_requirements.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,71 +12,71 @@ class Format(Enum): - jpg = "jpg" - jpeg = "jpeg" - png = "png" - gif = "gif" - webp = "webp" - svg = "svg" - avif = "avif" + jpg = 'jpg' + jpeg = 'jpeg' + png = 'png' + gif = 'gif' + webp = 'webp' + svg = 'svg' + avif = 'avif' class ImageAssetRequirements(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) animation_allowed: Annotated[ - bool | None, Field(description="Whether animated images (GIF, animated WebP) are accepted") + bool | None, Field(description='Whether animated images (GIF, animated WebP) are accepted') ] = None aspect_ratio: Annotated[ str | None, Field( description="Required aspect ratio (e.g., '16:9', '1:1', '1.91:1')", - pattern="^\\d+(\\.\\d+)?:\\d+(\\.\\d+)?$", + pattern='^\\d+(\\.\\d+)?:\\d+(\\.\\d+)?$', ), ] = None - formats: Annotated[list[Format] | None, Field(description="Accepted image file formats")] = None + formats: Annotated[list[Format] | None, Field(description='Accepted image file formats')] = None max_animation_duration_ms: Annotated[ int | None, Field( - description="Maximum animation duration in milliseconds (if animation_allowed is true)", + description='Maximum animation duration in milliseconds (if animation_allowed is true)', ge=0, ), ] = None max_file_size_kb: Annotated[ - int | None, Field(description="Maximum file size in kilobytes", ge=1) + int | None, Field(description='Maximum file size in kilobytes', ge=1) ] = None max_height: Annotated[ int | None, Field( - description="Maximum height in pixels. For exact dimensions, set min_height = max_height.", + description='Maximum height in pixels. For exact dimensions, set min_height = max_height.', ge=1, ), ] = None max_width: Annotated[ int | None, Field( - description="Maximum width in pixels. For exact dimensions, set min_width = max_width.", + description='Maximum width in pixels. For exact dimensions, set min_width = max_width.', ge=1, ), ] = None min_height: Annotated[ int | None, Field( - description="Minimum height in pixels. For exact dimensions, set min_height = max_height.", + description='Minimum height in pixels. For exact dimensions, set min_height = max_height.', ge=1, ), ] = None min_width: Annotated[ int | None, Field( - description="Minimum width in pixels. For exact dimensions, set min_width = max_width.", + description='Minimum width in pixels. For exact dimensions, set min_width = max_width.', ge=1, ), ] = None transparency_required: Annotated[ bool | None, Field( - description="Whether the image must support transparency (requires PNG, WebP, or GIF)" + description='Whether the image must support transparency (requires PNG, WebP, or GIF)' ), ] = None diff --git a/src/adcp/types/generated_poc/core/requirements/javascript_asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/javascript_asset_requirements.py index c57284b7..a3e81179 100644 --- a/src/adcp/types/generated_poc/core/requirements/javascript_asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/javascript_asset_requirements.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/requirements/javascript_asset_requirements.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,28 +12,28 @@ class ModuleType(Enum): - script = "script" - module = "module" - iife = "iife" + script = 'script' + module = 'module' + iife = 'iife' class JavascriptAssetRequirements(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) allowed_external_domains: Annotated[ list[str] | None, Field( - description="List of domains the JavaScript may reference for external resources. Only applicable when external_resources_allowed is true." + description='List of domains the JavaScript may reference for external resources. Only applicable when external_resources_allowed is true.' ), ] = None external_resources_allowed: Annotated[ bool | None, - Field(description="Whether the JavaScript can load external resources dynamically"), + Field(description='Whether the JavaScript can load external resources dynamically'), ] = None max_file_size_kb: Annotated[ int | None, - Field(description="Maximum file size in kilobytes for the JavaScript asset", ge=1), + Field(description='Maximum file size in kilobytes for the JavaScript asset', ge=1), ] = None module_type: Annotated[ ModuleType | None, @@ -42,5 +42,5 @@ class JavascriptAssetRequirements(AdCPBaseModel): ), ] = None strict_mode_required: Annotated[ - bool | None, Field(description="Whether the JavaScript must use strict mode") + bool | None, Field(description='Whether the JavaScript must use strict mode') ] = None diff --git a/src/adcp/types/generated_poc/core/requirements/markdown_asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/markdown_asset_requirements.py index 006d3281..5444c403 100644 --- a/src/adcp/types/generated_poc/core/requirements/markdown_asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/markdown_asset_requirements.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/requirements/markdown_asset_requirements.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,6 +12,6 @@ class MarkdownAssetRequirements(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - max_length: Annotated[int | None, Field(description="Maximum character length", ge=1)] = None + max_length: Annotated[int | None, Field(description='Maximum character length', ge=1)] = None diff --git a/src/adcp/types/generated_poc/core/requirements/offering_asset_constraint.py b/src/adcp/types/generated_poc/core/requirements/offering_asset_constraint.py index 9a56edbc..e63b9fdc 100644 --- a/src/adcp/types/generated_poc/core/requirements/offering_asset_constraint.py +++ b/src/adcp/types/generated_poc/core/requirements/offering_asset_constraint.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/requirements/offering_asset_constraint.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,7 +16,7 @@ class OfferingAssetConstraint(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) asset_group_id: Annotated[ str, @@ -27,23 +27,23 @@ class OfferingAssetConstraint(AdCPBaseModel): asset_requirements: Annotated[ asset_requirements_1.AssetRequirements | None, Field( - description="Technical requirements for each item in this group (e.g., max_length for text, min_width/aspect_ratio for images). Applies uniformly to all items in the group." + description='Technical requirements for each item in this group (e.g., max_length for text, min_width/aspect_ratio for images). Applies uniformly to all items in the group.' ), ] = None asset_type: Annotated[ asset_content_type.AssetContentType, - Field(description="The expected content type for this group."), + Field(description='The expected content type for this group.'), ] ext: ext_1.ExtensionObject | None = None max_count: Annotated[ - int | None, Field(description="Maximum number of items allowed in this group.", ge=1) + int | None, Field(description='Maximum number of items allowed in this group.', ge=1) ] = None min_count: Annotated[ - int | None, Field(description="Minimum number of items required in this group.", ge=1) + int | None, Field(description='Minimum number of items required in this group.', ge=1) ] = None required: Annotated[ bool | None, Field( - description="Whether this asset group must be present in each offering. Defaults to true." + description='Whether this asset group must be present in each offering. Defaults to true.' ), ] = True diff --git a/src/adcp/types/generated_poc/core/requirements/text_asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/text_asset_requirements.py index c13c9c88..41a18833 100644 --- a/src/adcp/types/generated_poc/core/requirements/text_asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/text_asset_requirements.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/requirements/text_asset_requirements.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,7 +12,7 @@ class TextAssetRequirements(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) character_pattern: Annotated[ str | None, @@ -20,10 +20,10 @@ class TextAssetRequirements(AdCPBaseModel): description="Regex pattern defining allowed characters (e.g., '^[a-zA-Z0-9 .,!?-]+$')" ), ] = None - max_length: Annotated[int | None, Field(description="Maximum character length", ge=1)] = None - max_lines: Annotated[int | None, Field(description="Maximum number of lines", ge=1)] = None - min_length: Annotated[int | None, Field(description="Minimum character length", ge=0)] = None - min_lines: Annotated[int | None, Field(description="Minimum number of lines", ge=1)] = None + max_length: Annotated[int | None, Field(description='Maximum character length', ge=1)] = None + max_lines: Annotated[int | None, Field(description='Maximum number of lines', ge=1)] = None + min_length: Annotated[int | None, Field(description='Minimum character length', ge=0)] = None + min_lines: Annotated[int | None, Field(description='Minimum number of lines', ge=1)] = None prohibited_terms: Annotated[ - list[str] | None, Field(description="List of prohibited words or phrases") + list[str] | None, Field(description='List of prohibited words or phrases') ] = None diff --git a/src/adcp/types/generated_poc/core/requirements/url_asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/url_asset_requirements.py index 61157c7a..14bbe2ad 100644 --- a/src/adcp/types/generated_poc/core/requirements/url_asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/url_asset_requirements.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/requirements/url_asset_requirements.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,40 +12,40 @@ class Protocol(Enum): - https = "https" - http = "http" + https = 'https' + http = 'http' class Role(Enum): - clickthrough = "clickthrough" - landing_page = "landing_page" - impression_tracker = "impression_tracker" - click_tracker = "click_tracker" - viewability_tracker = "viewability_tracker" - third_party_tracker = "third_party_tracker" + clickthrough = 'clickthrough' + landing_page = 'landing_page' + impression_tracker = 'impression_tracker' + click_tracker = 'click_tracker' + viewability_tracker = 'viewability_tracker' + third_party_tracker = 'third_party_tracker' class UrlAssetRequirements(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) allowed_domains: Annotated[ - list[str] | None, Field(description="List of allowed domains for the URL") + list[str] | None, Field(description='List of allowed domains for the URL') ] = None macro_support: Annotated[ bool | None, - Field(description="Whether the URL supports macro substitution (e.g., ${CACHEBUSTER})"), + Field(description='Whether the URL supports macro substitution (e.g., ${CACHEBUSTER})'), ] = None max_length: Annotated[ - int | None, Field(description="Maximum URL length in characters", ge=1) + int | None, Field(description='Maximum URL length in characters', ge=1) ] = None protocols: Annotated[ list[Protocol] | None, - Field(description="Allowed URL protocols. HTTPS is recommended for all ad URLs."), + Field(description='Allowed URL protocols. HTTPS is recommended for all ad URLs.'), ] = None role: Annotated[ Role | None, Field( - description="Standard role for this URL asset. Use this to constrain which purposes are valid for this URL slot. Complements asset_role (which is a human-readable label) by providing a machine-readable enum." + description='Standard role for this URL asset. Use this to constrain which purposes are valid for this URL slot. Complements asset_role (which is a human-readable label) by providing a machine-readable enum.' ), ] = None diff --git a/src/adcp/types/generated_poc/core/requirements/vast_asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/vast_asset_requirements.py index f0075299..37828fb3 100644 --- a/src/adcp/types/generated_poc/core/requirements/vast_asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/vast_asset_requirements.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/requirements/vast_asset_requirements.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,15 +12,15 @@ class VastVersion(Enum): - field_2_0 = "2.0" - field_3_0 = "3.0" - field_4_0 = "4.0" - field_4_1 = "4.1" - field_4_2 = "4.2" + field_2_0 = '2.0' + field_3_0 = '3.0' + field_4_0 = '4.0' + field_4_1 = '4.1' + field_4_2 = '4.2' class VastAssetRequirements(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - vast_version: Annotated[VastVersion | None, Field(description="Required VAST version")] = None + vast_version: Annotated[VastVersion | None, Field(description='Required VAST version')] = None diff --git a/src/adcp/types/generated_poc/core/requirements/video_asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/video_asset_requirements.py index c9196468..c697b667 100644 --- a/src/adcp/types/generated_poc/core/requirements/video_asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/video_asset_requirements.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/requirements/video_asset_requirements.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,19 +12,19 @@ class Codec(Enum): - h264 = "h264" - h265 = "h265" - vp8 = "vp8" - vp9 = "vp9" - av1 = "av1" + h264 = 'h264' + h265 = 'h265' + vp8 = 'vp8' + vp9 = 'vp9' + av1 = 'av1' class Container(Enum): - mp4 = "mp4" - webm = "webm" - mov = "mov" - avi = "avi" - mkv = "mkv" + mp4 = 'mp4' + webm = 'webm' + mov = 'mov' + avi = 'avi' + mkv = 'mkv' class FrameRate(RootModel[float]): @@ -33,39 +33,39 @@ class FrameRate(RootModel[float]): class VideoAssetRequirements(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) aspect_ratio: Annotated[ str | None, - Field(description="Required aspect ratio (e.g., '16:9', '9:16')", pattern="^\\d+:\\d+$"), + Field(description="Required aspect ratio (e.g., '16:9', '9:16')", pattern='^\\d+:\\d+$'), ] = None audio_required: Annotated[ - bool | None, Field(description="Whether the video must include an audio track") + bool | None, Field(description='Whether the video must include an audio track') ] = None - codecs: Annotated[list[Codec] | None, Field(description="Accepted video codecs")] = None + codecs: Annotated[list[Codec] | None, Field(description='Accepted video codecs')] = None containers: Annotated[ - list[Container] | None, Field(description="Accepted video container formats") + list[Container] | None, Field(description='Accepted video container formats') ] = None frame_rates: Annotated[ list[FrameRate] | None, - Field(description="Accepted frame rates in frames per second (e.g., [24, 30, 60])"), + Field(description='Accepted frame rates in frames per second (e.g., [24, 30, 60])'), ] = None max_bitrate_kbps: Annotated[ - int | None, Field(description="Maximum video bitrate in kilobits per second", ge=1) + int | None, Field(description='Maximum video bitrate in kilobits per second', ge=1) ] = None max_duration_ms: Annotated[ - int | None, Field(description="Maximum duration in milliseconds", ge=1) + int | None, Field(description='Maximum duration in milliseconds', ge=1) ] = None max_file_size_kb: Annotated[ - int | None, Field(description="Maximum file size in kilobytes", ge=1) + int | None, Field(description='Maximum file size in kilobytes', ge=1) ] = None - max_height: Annotated[int | None, Field(description="Maximum height in pixels", ge=1)] = None - max_width: Annotated[int | None, Field(description="Maximum width in pixels", ge=1)] = None + max_height: Annotated[int | None, Field(description='Maximum height in pixels', ge=1)] = None + max_width: Annotated[int | None, Field(description='Maximum width in pixels', ge=1)] = None min_bitrate_kbps: Annotated[ - int | None, Field(description="Minimum video bitrate in kilobits per second", ge=1) + int | None, Field(description='Minimum video bitrate in kilobits per second', ge=1) ] = None min_duration_ms: Annotated[ - int | None, Field(description="Minimum duration in milliseconds", ge=1) + int | None, Field(description='Minimum duration in milliseconds', ge=1) ] = None - min_height: Annotated[int | None, Field(description="Minimum height in pixels", ge=1)] = None - min_width: Annotated[int | None, Field(description="Minimum width in pixels", ge=1)] = None + min_height: Annotated[int | None, Field(description='Minimum height in pixels', ge=1)] = None + min_width: Annotated[int | None, Field(description='Minimum width in pixels', ge=1)] = None diff --git a/src/adcp/types/generated_poc/core/requirements/webhook_asset_requirements.py b/src/adcp/types/generated_poc/core/requirements/webhook_asset_requirements.py index 670e09a7..a7de2bfd 100644 --- a/src/adcp/types/generated_poc/core/requirements/webhook_asset_requirements.py +++ b/src/adcp/types/generated_poc/core/requirements/webhook_asset_requirements.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/requirements/webhook_asset_requirements.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,12 +12,12 @@ class Method(Enum): - GET = "GET" - POST = "POST" + GET = 'GET' + POST = 'POST' class WebhookAssetRequirements(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - methods: Annotated[list[Method] | None, Field(description="Allowed HTTP methods")] = None + methods: Annotated[list[Method] | None, Field(description='Allowed HTTP methods')] = None diff --git a/src/adcp/types/generated_poc/core/response.py b/src/adcp/types/generated_poc/core/response.py index 03178f38..624d4ca4 100644 --- a/src/adcp/types/generated_poc/core/response.py +++ b/src/adcp/types/generated_poc/core/response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/response.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,13 +12,13 @@ class ProtocolResponse(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - context_id: Annotated[str | None, Field(description="Session continuity identifier")] = None + context_id: Annotated[str | None, Field(description='Session continuity identifier')] = None data: Annotated[ Any | None, Field( - description="AdCP task-specific response data (see individual task response schemas)" + description='AdCP task-specific response data (see individual task response schemas)' ), ] = None - message: Annotated[str, Field(description="Human-readable summary")] + message: Annotated[str, Field(description='Human-readable summary')] diff --git a/src/adcp/types/generated_poc/core/signal_definition.py b/src/adcp/types/generated_poc/core/signal_definition.py index 3b9024a7..03e6294c 100644 --- a/src/adcp/types/generated_poc/core/signal_definition.py +++ b/src/adcp/types/generated_poc/core/signal_definition.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/signal_definition.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -13,25 +13,25 @@ class Range(AdCPBaseModel): - max: Annotated[float, Field(description="Maximum value")] - min: Annotated[float, Field(description="Minimum value")] + max: Annotated[float, Field(description='Maximum value')] + min: Annotated[float, Field(description='Minimum value')] unit: Annotated[ str | None, Field(description="Unit of measurement (e.g., 'score', 'dollars', 'years')") ] = None class Tag(RootModel[str]): - root: Annotated[str, Field(pattern="^[a-z0-9_-]+$")] + root: Annotated[str, Field(pattern='^[a-z0-9_-]+$')] class SignalDefinition(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) allowed_values: Annotated[ list[str] | None, Field( - description="For categorical signals, the valid values users can be assigned", + description='For categorical signals, the valid values users can be assigned', min_length=1, ), ] = None @@ -46,18 +46,18 @@ class SignalDefinition(AdCPBaseModel): str, Field( description="Signal identifier within this data provider's catalog", - pattern="^[a-zA-Z0-9_-]+$", + pattern='^[a-zA-Z0-9_-]+$', ), ] name: Annotated[ - str, Field(description="Human-readable signal name", max_length=255, min_length=1) + str, Field(description='Human-readable signal name', max_length=255, min_length=1) ] range: Annotated[ - Range | None, Field(description="For numeric signals, the valid value range") + Range | None, Field(description='For numeric signals, the valid value range') ] = None tags: Annotated[ list[Tag] | None, - Field(description="Tags for grouping and filtering signals within the catalog"), + Field(description='Tags for grouping and filtering signals within the catalog'), ] = None value_type: Annotated[ signal_value_type.SignalValueType, diff --git a/src/adcp/types/generated_poc/core/signal_filters.py b/src/adcp/types/generated_poc/core/signal_filters.py index 750bc717..2cd9b8b4 100644 --- a/src/adcp/types/generated_poc/core/signal_filters.py +++ b/src/adcp/types/generated_poc/core/signal_filters.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/signal_filters.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,16 +14,16 @@ class SignalFilters(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) catalog_types: Annotated[ list[signal_catalog_type.SignalCatalogType] | None, - Field(description="Filter by catalog type", min_length=1), + Field(description='Filter by catalog type', min_length=1), ] = None data_providers: Annotated[ - list[str] | None, Field(description="Filter by specific data providers", min_length=1) + list[str] | None, Field(description='Filter by specific data providers', min_length=1) ] = None - max_cpm: Annotated[float | None, Field(description="Maximum CPM price filter", ge=0.0)] = None + max_cpm: Annotated[float | None, Field(description='Maximum CPM price filter', ge=0.0)] = None min_coverage_percentage: Annotated[ - float | None, Field(description="Minimum coverage requirement", ge=0.0, le=100.0) + float | None, Field(description='Minimum coverage requirement', ge=0.0, le=100.0) ] = None diff --git a/src/adcp/types/generated_poc/core/signal_id.py b/src/adcp/types/generated_poc/core/signal_id.py index d611bb17..e6bbe760 100644 --- a/src/adcp/types/generated_poc/core/signal_id.py +++ b/src/adcp/types/generated_poc/core/signal_id.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/signal_id.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,24 +12,24 @@ class SignalId2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) data_provider_domain: Annotated[ str, Field( description="Domain of the data provider that owns this signal (e.g., 'polk.com', 'experian.com'). The signal definition is published at this domain's /.well-known/adagents.json", - pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", + pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', ), ] id: Annotated[ str, Field( description="Signal identifier within the data provider's catalog (e.g., 'likely_tesla_buyers', 'income_100k_plus')", - pattern="^[a-zA-Z0-9_-]+$", + pattern='^[a-zA-Z0-9_-]+$', ), ] source: Annotated[ - Literal["catalog"], + Literal['catalog'], Field( description="Discriminator indicating this signal is from a data provider's published catalog" ), @@ -38,7 +38,7 @@ class SignalId2(AdCPBaseModel): class SignalId3(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) agent_url: Annotated[ AnyUrl, @@ -50,13 +50,13 @@ class SignalId3(AdCPBaseModel): str, Field( description="Signal identifier within the agent's signal set (e.g., 'custom_auto_intenders')", - pattern="^[a-zA-Z0-9_-]+$", + pattern='^[a-zA-Z0-9_-]+$', ), ] source: Annotated[ - Literal["agent"], + Literal['agent'], Field( - description="Discriminator indicating this signal is native to the agent (not from a data provider catalog)" + description='Discriminator indicating this signal is native to the agent (not from a data provider catalog)' ), ] @@ -66,7 +66,7 @@ class SignalId(RootModel[SignalId2 | SignalId3]): SignalId2 | SignalId3, Field( description="Universal signal identifier. Uses 'source' as discriminator: 'catalog' for signals from a data provider's published catalog (verifiable), 'agent' for agent-native signals (not externally verifiable).", - discriminator="source", - title="Signal ID", + discriminator='source', + title='Signal ID', ), ] diff --git a/src/adcp/types/generated_poc/core/signal_targeting.py b/src/adcp/types/generated_poc/core/signal_targeting.py index 3bd1ece9..9a23a36f 100644 --- a/src/adcp/types/generated_poc/core/signal_targeting.py +++ b/src/adcp/types/generated_poc/core/signal_targeting.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/signal_targeting.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,30 +14,30 @@ class SignalTargeting1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - signal_id: Annotated[signal_id_1.SignalId, Field(description="The signal to target")] + signal_id: Annotated[signal_id_1.SignalId, Field(description='The signal to target')] value: Annotated[ bool, Field( - description="Whether to include (true) or exclude (false) users matching this signal" + description='Whether to include (true) or exclude (false) users matching this signal' ), ] - value_type: Annotated[Literal["binary"], Field(description="Discriminator for binary signals")] + value_type: Annotated[Literal['binary'], Field(description='Discriminator for binary signals')] class SignalTargeting2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - signal_id: Annotated[signal_id_1.SignalId, Field(description="The signal to target")] + signal_id: Annotated[signal_id_1.SignalId, Field(description='The signal to target')] value_type: Annotated[ - Literal["categorical"], Field(description="Discriminator for categorical signals") + Literal['categorical'], Field(description='Discriminator for categorical signals') ] values: Annotated[ list[str], Field( - description="Values to target. Users with any of these values will be included.", + description='Values to target. Users with any of these values will be included.', min_length=1, ), ] @@ -45,7 +45,7 @@ class SignalTargeting2(AdCPBaseModel): class SignalTargeting3(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) max_value: Annotated[ float | None, @@ -59,9 +59,9 @@ class SignalTargeting3(AdCPBaseModel): description="Minimum value (inclusive). Omit for no minimum. Must be <= max_value when both are provided. Should be >= signal's range.min if defined." ), ] = None - signal_id: Annotated[signal_id_1.SignalId, Field(description="The signal to target")] + signal_id: Annotated[signal_id_1.SignalId, Field(description='The signal to target')] value_type: Annotated[ - Literal["numeric"], Field(description="Discriminator for numeric signals") + Literal['numeric'], Field(description='Discriminator for numeric signals') ] @@ -69,8 +69,8 @@ class SignalTargeting(RootModel[SignalTargeting1 | SignalTargeting2 | SignalTarg root: Annotated[ SignalTargeting1 | SignalTargeting2 | SignalTargeting3, Field( - description="Targeting constraint for a specific signal. Uses value_type as discriminator to determine the targeting expression format.", - discriminator="value_type", - title="Signal Targeting", + description='Targeting constraint for a specific signal. Uses value_type as discriminator to determine the targeting expression format.', + discriminator='value_type', + title='Signal Targeting', ), ] diff --git a/src/adcp/types/generated_poc/core/start_timing.py b/src/adcp/types/generated_poc/core/start_timing.py index f81a0f98..2a918b0a 100644 --- a/src/adcp/types/generated_poc/core/start_timing.py +++ b/src/adcp/types/generated_poc/core/start_timing.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/start_timing.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -9,10 +9,10 @@ from pydantic import AwareDatetime, Field, RootModel -class StartTiming(RootModel[Literal["asap"] | AwareDatetime]): +class StartTiming(RootModel[Literal['asap'] | AwareDatetime]): root: Annotated[ - Literal["asap"] | AwareDatetime, + Literal['asap'] | AwareDatetime, Field( - description="Campaign start timing: 'asap' or ISO 8601 date-time", title="Start Timing" + description="Campaign start timing: 'asap' or ISO 8601 date-time", title='Start Timing' ), ] diff --git a/src/adcp/types/generated_poc/core/store_item.py b/src/adcp/types/generated_poc/core/store_item.py index f5f79c1b..1e02a5ab 100644 --- a/src/adcp/types/generated_poc/core/store_item.py +++ b/src/adcp/types/generated_poc/core/store_item.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/store_item.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,13 +15,13 @@ class Address(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) - city: Annotated[str | None, Field(description="City name.")] = None + city: Annotated[str | None, Field(description='City name.')] = None country: Annotated[ - str | None, Field(description="ISO 3166-1 alpha-2 country code.", pattern="^[A-Z]{2}$") + str | None, Field(description='ISO 3166-1 alpha-2 country code.', pattern='^[A-Z]{2}$') ] = None - postal_code: Annotated[str | None, Field(description="Postal or ZIP code.")] = None + postal_code: Annotated[str | None, Field(description='Postal or ZIP code.')] = None region: Annotated[ str | None, Field( @@ -33,42 +33,42 @@ class Address(AdCPBaseModel): class Location(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) lat: Annotated[ - float, Field(description="Latitude in decimal degrees (WGS 84).", ge=-90.0, le=90.0) + float, Field(description='Latitude in decimal degrees (WGS 84).', ge=-90.0, le=90.0) ] lng: Annotated[ - float, Field(description="Longitude in decimal degrees (WGS 84).", ge=-180.0, le=180.0) + float, Field(description='Longitude in decimal degrees (WGS 84).', ge=-180.0, le=180.0) ] class StoreItem(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) address: Annotated[ - Address | None, Field(description="Structured address for display and geocoding fallback.") + Address | None, Field(description='Structured address for display and geocoding fallback.') ] = None catchments: Annotated[ list[catchment.Catchment] | None, Field( - description="Catchment areas for this store. Each defines a reachable area using travel time (isochrone), simple radius, or pre-computed GeoJSON. Multiple catchments allow different modes — e.g., 15-minute drive AND 10-minute walk.", + description='Catchment areas for this store. Each defines a reachable area using travel time (isochrone), simple radius, or pre-computed GeoJSON. Multiple catchments allow different modes — e.g., 15-minute drive AND 10-minute walk.', min_length=1, ), ] = None ext: ext_1.ExtensionObject | None = None hours: Annotated[ dict[ - Literal["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"], + Literal['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'], str, ] | None, Field( - description="Operating hours. Keys are ISO day names (monday–sunday), values are time ranges." + description='Operating hours. Keys are ISO day names (monday–sunday), values are time ranges.' ), ] = None - location: Annotated[Location, Field(description="Geographic coordinates of the store.")] + location: Annotated[Location, Field(description='Geographic coordinates of the store.')] name: Annotated[ str, Field( @@ -81,7 +81,7 @@ class StoreItem(AdCPBaseModel): store_id: Annotated[ str, Field( - description="Unique identifier for this store. Used to reference specific stores in targeting, inventory feeds, and creative templates." + description='Unique identifier for this store. Used to reference specific stores in targeting, inventory feeds, and creative templates.' ), ] tags: Annotated[ @@ -93,5 +93,5 @@ class StoreItem(AdCPBaseModel): ] = None url: Annotated[ AnyUrl | None, - Field(description="Store-specific page URL (e.g., store locator detail page)."), + Field(description='Store-specific page URL (e.g., store locator detail page).'), ] = None diff --git a/src/adcp/types/generated_poc/core/sub_asset.py b/src/adcp/types/generated_poc/core/sub_asset.py index 889c81b1..62e5b187 100644 --- a/src/adcp/types/generated_poc/core/sub_asset.py +++ b/src/adcp/types/generated_poc/core/sub_asset.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/sub_asset.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,45 +12,45 @@ class SubAsset1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) asset_id: Annotated[ - str, Field(description="Unique identifier for the asset within the creative") + str, Field(description='Unique identifier for the asset within the creative') ] asset_kind: Annotated[ - Literal["media"], - Field(description="Discriminator indicating this is a media asset with content_uri"), + Literal['media'], + Field(description='Discriminator indicating this is a media asset with content_uri'), ] asset_type: Annotated[ str, Field( - description="Type of asset. Common types: thumbnail_image, product_image, featured_image, logo" + description='Type of asset. Common types: thumbnail_image, product_image, featured_image, logo' ), ] - content_uri: Annotated[AnyUrl, Field(description="URL for media assets (images, videos, etc.)")] + content_uri: Annotated[AnyUrl, Field(description='URL for media assets (images, videos, etc.)')] class SubAsset2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) asset_id: Annotated[ - str, Field(description="Unique identifier for the asset within the creative") + str, Field(description='Unique identifier for the asset within the creative') ] asset_kind: Annotated[ - Literal["text"], - Field(description="Discriminator indicating this is a text asset with content"), + Literal['text'], + Field(description='Discriminator indicating this is a text asset with content'), ] asset_type: Annotated[ str, Field( - description="Type of asset. Common types: headline, body_text, cta_text, price_text, sponsor_name, author_name, click_url" + description='Type of asset. Common types: headline, body_text, cta_text, price_text, sponsor_name, author_name, click_url' ), ] content: Annotated[ str | list[str], Field( - description="Text content for text-based assets like headlines, body text, CTA text, etc." + description='Text content for text-based assets like headlines, body text, CTA text, etc.' ), ] @@ -59,7 +59,7 @@ class SubAsset(RootModel[SubAsset1 | SubAsset2]): root: Annotated[ SubAsset1 | SubAsset2, Field( - description="Sub-asset for multi-asset creative formats, including carousel images and native ad template variables", - title="Sub-Asset", + description='Sub-asset for multi-asset creative formats, including carousel images and native ad template variables', + title='Sub-Asset', ), ] diff --git a/src/adcp/types/generated_poc/core/targeting.py b/src/adcp/types/generated_poc/core/targeting.py index 35ea7a91..9f74894f 100644 --- a/src/adcp/types/generated_poc/core/targeting.py +++ b/src/adcp/types/generated_poc/core/targeting.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/targeting.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -19,24 +19,24 @@ class AgeRestriction(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) accepted_methods: Annotated[ list[age_verification_method.AgeVerificationMethod] | None, Field( - description="Accepted verification methods. If omitted, any method the platform supports is acceptable.", + description='Accepted verification methods. If omitted, any method the platform supports is acceptable.', min_length=1, ), ] = None - min: Annotated[int, Field(description="Minimum age required", ge=13, le=99)] + min: Annotated[int, Field(description='Minimum age required', ge=13, le=99)] verification_required: Annotated[ bool | None, - Field(description="Whether verified age (not inferred) is required for compliance"), + Field(description='Whether verified age (not inferred) is required for compliance'), ] = False class GeoCountry(RootModel[str]): - root: Annotated[str, Field(pattern="^[A-Z]{2}$")] + root: Annotated[str, Field(pattern='^[A-Z]{2}$')] class GeoCountriesExcludeItem(GeoCountry): @@ -45,7 +45,7 @@ class GeoCountriesExcludeItem(GeoCountry): class GeoMetro(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) system: Annotated[ metro_system.MetroAreaSystem, @@ -62,7 +62,7 @@ class GeoMetro(AdCPBaseModel): class GeoMetrosExcludeItem(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) system: Annotated[ metro_system.MetroAreaSystem, @@ -79,7 +79,7 @@ class GeoMetrosExcludeItem(AdCPBaseModel): class GeoPostalArea(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) system: Annotated[ postal_system.PostalCodeSystem, @@ -98,7 +98,7 @@ class GeoPostalArea(AdCPBaseModel): class GeoPostalAreasExcludeItem(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) system: Annotated[ postal_system.PostalCodeSystem, @@ -116,7 +116,7 @@ class GeoPostalAreasExcludeItem(AdCPBaseModel): class GeoRegion(RootModel[str]): - root: Annotated[str, Field(pattern="^[A-Z]{2}-[A-Z0-9]{1,3}$")] + root: Annotated[str, Field(pattern='^[A-Z]{2}-[A-Z0-9]{1,3}$')] class GeoRegionsExcludeItem(GeoRegion): @@ -124,15 +124,15 @@ class GeoRegionsExcludeItem(GeoRegion): class LanguageItem(RootModel[str]): - root: Annotated[str, Field(pattern="^[a-z]{2}$")] + root: Annotated[str, Field(pattern='^[a-z]{2}$')] class StoreCatchment(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) catalog_id: Annotated[ - str, Field(description="Synced store-type catalog ID from sync_catalogs.") + str, Field(description='Synced store-type catalog ID from sync_catalogs.') ] catchment_ids: Annotated[ list[str] | None, @@ -144,7 +144,7 @@ class StoreCatchment(AdCPBaseModel): store_ids: Annotated[ list[str] | None, Field( - description="Filter to specific stores within the catalog. Omit to target all stores.", + description='Filter to specific stores within the catalog. Omit to target all stores.', min_length=1, ), ] = None @@ -152,45 +152,45 @@ class StoreCatchment(AdCPBaseModel): class TargetingOverlay(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) age_restriction: Annotated[ AgeRestriction | None, Field( - description="Age restriction for compliance. Use for legal requirements (alcohol, gambling), not audience targeting." + description='Age restriction for compliance. Use for legal requirements (alcohol, gambling), not audience targeting.' ), ] = None audience_exclude: Annotated[ list[str] | None, Field( - description="Suppress delivery to members of these first-party CRM audiences. Matched users are excluded regardless of other targeting. References audience_id values from sync_audiences on the same seller account — audience IDs are not portable across sellers. Seller must declare support in get_adcp_capabilities.", + description='Suppress delivery to members of these first-party CRM audiences. Matched users are excluded regardless of other targeting. References audience_id values from sync_audiences on the same seller account — audience IDs are not portable across sellers. Seller must declare support in get_adcp_capabilities.', min_length=1, ), ] = None audience_include: Annotated[ list[str] | None, Field( - description="Restrict delivery to members of these first-party CRM audiences. Only users present in the uploaded lists are eligible. References audience_id values from sync_audiences on the same seller account — audience IDs are not portable across sellers. Not for lookalike expansion — express that intent in the campaign brief. Seller must declare support in get_adcp_capabilities.", + description='Restrict delivery to members of these first-party CRM audiences. Only users present in the uploaded lists are eligible. References audience_id values from sync_audiences on the same seller account — audience IDs are not portable across sellers. Not for lookalike expansion — express that intent in the campaign brief. Seller must declare support in get_adcp_capabilities.', min_length=1, ), ] = None axe_exclude_segment: Annotated[ - str | None, Field(description="AXE segment ID to exclude from targeting") + str | None, Field(description='AXE segment ID to exclude from targeting') ] = None axe_include_segment: Annotated[ - str | None, Field(description="AXE segment ID to include for targeting") + str | None, Field(description='AXE segment ID to include for targeting') ] = None daypart_targets: Annotated[ list[daypart_target.DaypartTarget] | None, Field( - description="Restrict delivery to specific time windows. Each entry specifies days of week and an hour range.", + description='Restrict delivery to specific time windows. Each entry specifies days of week and an hour range.', min_length=1, ), ] = None device_platform: Annotated[ list[device_platform_1.DevicePlatform] | None, Field( - description="Restrict to specific platforms. Use for technical compatibility (app only works on iOS). Values from Sec-CH-UA-Platform standard, extended for CTV.", + description='Restrict to specific platforms. Use for technical compatibility (app only works on iOS). Values from Sec-CH-UA-Platform standard, extended for CTV.', min_length=1, ), ] = None @@ -212,28 +212,28 @@ class TargetingOverlay(AdCPBaseModel): geo_metros: Annotated[ list[GeoMetro] | None, Field( - description="Restrict delivery to specific metro areas. Each entry specifies the classification system and target values. Seller must declare supported systems in get_adcp_capabilities.", + description='Restrict delivery to specific metro areas. Each entry specifies the classification system and target values. Seller must declare supported systems in get_adcp_capabilities.', min_length=1, ), ] = None geo_metros_exclude: Annotated[ list[GeoMetrosExcludeItem] | None, Field( - description="Exclude specific metro areas from delivery. Each entry specifies the classification system and excluded values. Seller must declare supported systems in get_adcp_capabilities.", + description='Exclude specific metro areas from delivery. Each entry specifies the classification system and excluded values. Seller must declare supported systems in get_adcp_capabilities.', min_length=1, ), ] = None geo_postal_areas: Annotated[ list[GeoPostalArea] | None, Field( - description="Restrict delivery to specific postal areas. Each entry specifies the postal system and target values. Seller must declare supported systems in get_adcp_capabilities.", + description='Restrict delivery to specific postal areas. Each entry specifies the postal system and target values. Seller must declare supported systems in get_adcp_capabilities.', min_length=1, ), ] = None geo_postal_areas_exclude: Annotated[ list[GeoPostalAreasExcludeItem] | None, Field( - description="Exclude specific postal areas from delivery. Each entry specifies the postal system and excluded values. Seller must declare supported systems in get_adcp_capabilities.", + description='Exclude specific postal areas from delivery. Each entry specifies the postal system and excluded values. Seller must declare supported systems in get_adcp_capabilities.', min_length=1, ), ] = None @@ -267,7 +267,7 @@ class TargetingOverlay(AdCPBaseModel): store_catchments: Annotated[ list[StoreCatchment] | None, Field( - description="Target users within store catchment areas from a synced store catalog. Each entry references a store-type catalog and optionally narrows to specific stores or catchment zones.", + description='Target users within store catchment areas from a synced store catalog. Each entry references a store-type catalog and optionally narrows to specific stores or catchment zones.', min_length=1, ), ] = None diff --git a/src/adcp/types/generated_poc/core/user_match.py b/src/adcp/types/generated_poc/core/user_match.py index ec6c0c13..b6fd5867 100644 --- a/src/adcp/types/generated_poc/core/user_match.py +++ b/src/adcp/types/generated_poc/core/user_match.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/user_match.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,196 +15,196 @@ class Uid(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - type: Annotated[uid_type.UidType, Field(description="Universal ID type")] - value: Annotated[str, Field(description="Universal ID value")] + type: Annotated[uid_type.UidType, Field(description='Universal ID type')] + value: Annotated[str, Field(description='Universal ID value')] class UserMatch1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) click_id: Annotated[ str | None, - Field(description="Platform click identifier (fbclid, gclid, ttclid, ScCid, etc.)"), + Field(description='Platform click identifier (fbclid, gclid, ttclid, ScCid, etc.)'), ] = None click_id_type: Annotated[ str | None, - Field(description="Type of click identifier (e.g. fbclid, gclid, ttclid, msclkid, ScCid)"), + Field(description='Type of click identifier (e.g. fbclid, gclid, ttclid, msclkid, ScCid)'), ] = None client_ip: Annotated[ - str | None, Field(description="Client IP address for probabilistic matching") + str | None, Field(description='Client IP address for probabilistic matching') ] = None client_user_agent: Annotated[ - str | None, Field(description="Client user agent string for probabilistic matching") + str | None, Field(description='Client user agent string for probabilistic matching') ] = None ext: ext_1.ExtensionObject | None = None hashed_email: Annotated[ str | None, Field( - description="SHA-256 hash of lowercase, trimmed email address. Buyer must normalize before hashing: lowercase, trim whitespace.", - pattern="^[a-f0-9]{64}$", + description='SHA-256 hash of lowercase, trimmed email address. Buyer must normalize before hashing: lowercase, trim whitespace.', + pattern='^[a-f0-9]{64}$', ), ] = None hashed_phone: Annotated[ str | None, Field( - description="SHA-256 hash of E.164-formatted phone number (e.g. +12065551234). Buyer must normalize to E.164 before hashing.", - pattern="^[a-f0-9]{64}$", + description='SHA-256 hash of E.164-formatted phone number (e.g. +12065551234). Buyer must normalize to E.164 before hashing.', + pattern='^[a-f0-9]{64}$', ), ] = None uids: Annotated[ - list[Uid], Field(description="Universal ID values for user matching", min_length=1) + list[Uid], Field(description='Universal ID values for user matching', min_length=1) ] class UserMatch2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) click_id: Annotated[ str | None, - Field(description="Platform click identifier (fbclid, gclid, ttclid, ScCid, etc.)"), + Field(description='Platform click identifier (fbclid, gclid, ttclid, ScCid, etc.)'), ] = None click_id_type: Annotated[ str | None, - Field(description="Type of click identifier (e.g. fbclid, gclid, ttclid, msclkid, ScCid)"), + Field(description='Type of click identifier (e.g. fbclid, gclid, ttclid, msclkid, ScCid)'), ] = None client_ip: Annotated[ - str | None, Field(description="Client IP address for probabilistic matching") + str | None, Field(description='Client IP address for probabilistic matching') ] = None client_user_agent: Annotated[ - str | None, Field(description="Client user agent string for probabilistic matching") + str | None, Field(description='Client user agent string for probabilistic matching') ] = None ext: ext_1.ExtensionObject | None = None hashed_email: Annotated[ str, Field( - description="SHA-256 hash of lowercase, trimmed email address. Buyer must normalize before hashing: lowercase, trim whitespace.", - pattern="^[a-f0-9]{64}$", + description='SHA-256 hash of lowercase, trimmed email address. Buyer must normalize before hashing: lowercase, trim whitespace.', + pattern='^[a-f0-9]{64}$', ), ] hashed_phone: Annotated[ str | None, Field( - description="SHA-256 hash of E.164-formatted phone number (e.g. +12065551234). Buyer must normalize to E.164 before hashing.", - pattern="^[a-f0-9]{64}$", + description='SHA-256 hash of E.164-formatted phone number (e.g. +12065551234). Buyer must normalize to E.164 before hashing.', + pattern='^[a-f0-9]{64}$', ), ] = None uids: Annotated[ - list[Uid] | None, Field(description="Universal ID values for user matching", min_length=1) + list[Uid] | None, Field(description='Universal ID values for user matching', min_length=1) ] = None class UserMatch3(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) click_id: Annotated[ str | None, - Field(description="Platform click identifier (fbclid, gclid, ttclid, ScCid, etc.)"), + Field(description='Platform click identifier (fbclid, gclid, ttclid, ScCid, etc.)'), ] = None click_id_type: Annotated[ str | None, - Field(description="Type of click identifier (e.g. fbclid, gclid, ttclid, msclkid, ScCid)"), + Field(description='Type of click identifier (e.g. fbclid, gclid, ttclid, msclkid, ScCid)'), ] = None client_ip: Annotated[ - str | None, Field(description="Client IP address for probabilistic matching") + str | None, Field(description='Client IP address for probabilistic matching') ] = None client_user_agent: Annotated[ - str | None, Field(description="Client user agent string for probabilistic matching") + str | None, Field(description='Client user agent string for probabilistic matching') ] = None ext: ext_1.ExtensionObject | None = None hashed_email: Annotated[ str | None, Field( - description="SHA-256 hash of lowercase, trimmed email address. Buyer must normalize before hashing: lowercase, trim whitespace.", - pattern="^[a-f0-9]{64}$", + description='SHA-256 hash of lowercase, trimmed email address. Buyer must normalize before hashing: lowercase, trim whitespace.', + pattern='^[a-f0-9]{64}$', ), ] = None hashed_phone: Annotated[ str, Field( - description="SHA-256 hash of E.164-formatted phone number (e.g. +12065551234). Buyer must normalize to E.164 before hashing.", - pattern="^[a-f0-9]{64}$", + description='SHA-256 hash of E.164-formatted phone number (e.g. +12065551234). Buyer must normalize to E.164 before hashing.', + pattern='^[a-f0-9]{64}$', ), ] uids: Annotated[ - list[Uid] | None, Field(description="Universal ID values for user matching", min_length=1) + list[Uid] | None, Field(description='Universal ID values for user matching', min_length=1) ] = None class UserMatch4(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) click_id: Annotated[ - str, Field(description="Platform click identifier (fbclid, gclid, ttclid, ScCid, etc.)") + str, Field(description='Platform click identifier (fbclid, gclid, ttclid, ScCid, etc.)') ] click_id_type: Annotated[ str | None, - Field(description="Type of click identifier (e.g. fbclid, gclid, ttclid, msclkid, ScCid)"), + Field(description='Type of click identifier (e.g. fbclid, gclid, ttclid, msclkid, ScCid)'), ] = None client_ip: Annotated[ - str | None, Field(description="Client IP address for probabilistic matching") + str | None, Field(description='Client IP address for probabilistic matching') ] = None client_user_agent: Annotated[ - str | None, Field(description="Client user agent string for probabilistic matching") + str | None, Field(description='Client user agent string for probabilistic matching') ] = None ext: ext_1.ExtensionObject | None = None hashed_email: Annotated[ str | None, Field( - description="SHA-256 hash of lowercase, trimmed email address. Buyer must normalize before hashing: lowercase, trim whitespace.", - pattern="^[a-f0-9]{64}$", + description='SHA-256 hash of lowercase, trimmed email address. Buyer must normalize before hashing: lowercase, trim whitespace.', + pattern='^[a-f0-9]{64}$', ), ] = None hashed_phone: Annotated[ str | None, Field( - description="SHA-256 hash of E.164-formatted phone number (e.g. +12065551234). Buyer must normalize to E.164 before hashing.", - pattern="^[a-f0-9]{64}$", + description='SHA-256 hash of E.164-formatted phone number (e.g. +12065551234). Buyer must normalize to E.164 before hashing.', + pattern='^[a-f0-9]{64}$', ), ] = None uids: Annotated[ - list[Uid] | None, Field(description="Universal ID values for user matching", min_length=1) + list[Uid] | None, Field(description='Universal ID values for user matching', min_length=1) ] = None class UserMatch5(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) click_id: Annotated[ str | None, - Field(description="Platform click identifier (fbclid, gclid, ttclid, ScCid, etc.)"), + Field(description='Platform click identifier (fbclid, gclid, ttclid, ScCid, etc.)'), ] = None click_id_type: Annotated[ str | None, - Field(description="Type of click identifier (e.g. fbclid, gclid, ttclid, msclkid, ScCid)"), + Field(description='Type of click identifier (e.g. fbclid, gclid, ttclid, msclkid, ScCid)'), ] = None - client_ip: Annotated[str, Field(description="Client IP address for probabilistic matching")] + client_ip: Annotated[str, Field(description='Client IP address for probabilistic matching')] client_user_agent: Annotated[ - str, Field(description="Client user agent string for probabilistic matching") + str, Field(description='Client user agent string for probabilistic matching') ] ext: ext_1.ExtensionObject | None = None hashed_email: Annotated[ str | None, Field( - description="SHA-256 hash of lowercase, trimmed email address. Buyer must normalize before hashing: lowercase, trim whitespace.", - pattern="^[a-f0-9]{64}$", + description='SHA-256 hash of lowercase, trimmed email address. Buyer must normalize before hashing: lowercase, trim whitespace.', + pattern='^[a-f0-9]{64}$', ), ] = None hashed_phone: Annotated[ str | None, Field( - description="SHA-256 hash of E.164-formatted phone number (e.g. +12065551234). Buyer must normalize to E.164 before hashing.", - pattern="^[a-f0-9]{64}$", + description='SHA-256 hash of E.164-formatted phone number (e.g. +12065551234). Buyer must normalize to E.164 before hashing.', + pattern='^[a-f0-9]{64}$', ), ] = None uids: Annotated[ - list[Uid] | None, Field(description="Universal ID values for user matching", min_length=1) + list[Uid] | None, Field(description='Universal ID values for user matching', min_length=1) ] = None @@ -212,7 +212,7 @@ class UserMatch(RootModel[UserMatch1 | UserMatch2 | UserMatch3 | UserMatch4 | Us root: Annotated[ UserMatch1 | UserMatch2 | UserMatch3 | UserMatch4 | UserMatch5, Field( - description="User identifiers for attribution matching. Supports universal IDs, hashed identifiers, click IDs, and probabilistic matching.", - title="User Match", + description='User identifiers for attribution matching. Supports universal IDs, hashed identifiers, click IDs, and probabilistic matching.', + title='User Match', ), ] diff --git a/src/adcp/types/generated_poc/core/vehicle_item.py b/src/adcp/types/generated_poc/core/vehicle_item.py index de343eb2..4065c715 100644 --- a/src/adcp/types/generated_poc/core/vehicle_item.py +++ b/src/adcp/types/generated_poc/core/vehicle_item.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/vehicle_item.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,77 +15,77 @@ class BodyStyle(Enum): - sedan = "sedan" - suv = "suv" - truck = "truck" - coupe = "coupe" - convertible = "convertible" - wagon = "wagon" - van = "van" - hatchback = "hatchback" + sedan = 'sedan' + suv = 'suv' + truck = 'truck' + coupe = 'coupe' + convertible = 'convertible' + wagon = 'wagon' + van = 'van' + hatchback = 'hatchback' class Condition(Enum): - new = "new" - used = "used" - certified_pre_owned = "certified_pre_owned" + new = 'new' + used = 'used' + certified_pre_owned = 'certified_pre_owned' class FuelType(Enum): - gasoline = "gasoline" - diesel = "diesel" - electric = "electric" - hybrid = "hybrid" - plug_in_hybrid = "plug_in_hybrid" + gasoline = 'gasoline' + diesel = 'diesel' + electric = 'electric' + hybrid = 'hybrid' + plug_in_hybrid = 'plug_in_hybrid' class Location(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) lat: Annotated[ - float, Field(description="Latitude in decimal degrees (WGS 84).", ge=-90.0, le=90.0) + float, Field(description='Latitude in decimal degrees (WGS 84).', ge=-90.0, le=90.0) ] lng: Annotated[ - float, Field(description="Longitude in decimal degrees (WGS 84).", ge=-180.0, le=180.0) + float, Field(description='Longitude in decimal degrees (WGS 84).', ge=-180.0, le=180.0) ] class Unit(Enum): - km = "km" - mi = "mi" + km = 'km' + mi = 'mi' class Mileage(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) - unit: Annotated[Unit, Field(description="Distance unit.")] - value: Annotated[float, Field(description="Mileage value.", ge=0.0)] + unit: Annotated[Unit, Field(description='Distance unit.')] + value: Annotated[float, Field(description='Mileage value.', ge=0.0)] class Transmission(Enum): - automatic = "automatic" - manual = "manual" - cvt = "cvt" + automatic = 'automatic' + manual = 'manual' + cvt = 'cvt' class VehicleItem(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - body_style: Annotated[BodyStyle | None, Field(description="Vehicle body style.")] = None - condition: Annotated[Condition | None, Field(description="Vehicle condition.")] = None + body_style: Annotated[BodyStyle | None, Field(description='Vehicle body style.')] = None + condition: Annotated[Condition | None, Field(description='Vehicle condition.')] = None ext: ext_1.ExtensionObject | None = None - exterior_color: Annotated[str | None, Field(description="Exterior color.")] = None - fuel_type: Annotated[FuelType | None, Field(description="Fuel or powertrain type.")] = None - image_url: Annotated[AnyUrl | None, Field(description="Primary vehicle image URL.")] = None - interior_color: Annotated[str | None, Field(description="Interior color.")] = None - location: Annotated[Location | None, Field(description="Dealer or vehicle location.")] = None + exterior_color: Annotated[str | None, Field(description='Exterior color.')] = None + fuel_type: Annotated[FuelType | None, Field(description='Fuel or powertrain type.')] = None + image_url: Annotated[AnyUrl | None, Field(description='Primary vehicle image URL.')] = None + interior_color: Annotated[str | None, Field(description='Interior color.')] = None + location: Annotated[Location | None, Field(description='Dealer or vehicle location.')] = None make: Annotated[str, Field(description="Vehicle manufacturer (e.g., 'Honda', 'Ford', 'BMW').")] - mileage: Annotated[Mileage | None, Field(description="Odometer reading.")] = None + mileage: Annotated[Mileage | None, Field(description='Odometer reading.')] = None model: Annotated[str, Field(description="Vehicle model (e.g., 'Civic', 'F-150', 'X5').")] - price: Annotated[price_1.Price | None, Field(description="Vehicle price.")] = None + price: Annotated[price_1.Price | None, Field(description='Vehicle price.')] = None tags: Annotated[ list[str] | None, Field( @@ -94,13 +94,13 @@ class VehicleItem(AdCPBaseModel): ), ] = None title: Annotated[str, Field(description="Listing title (e.g., '2024 Honda Civic EX Sedan').")] - transmission: Annotated[Transmission | None, Field(description="Transmission type.")] = None + transmission: Annotated[Transmission | None, Field(description='Transmission type.')] = None trim: Annotated[ str | None, Field(description="Trim level (e.g., 'EX', 'Limited', 'Sport').") ] = None - url: Annotated[AnyUrl | None, Field(description="Vehicle listing page URL.")] = None - vehicle_id: Annotated[str, Field(description="Unique identifier for this vehicle listing.")] + url: Annotated[AnyUrl | None, Field(description='Vehicle listing page URL.')] = None + vehicle_id: Annotated[str, Field(description='Unique identifier for this vehicle listing.')] vin: Annotated[ - str | None, Field(description="Vehicle Identification Number (17-character VIN).") + str | None, Field(description='Vehicle Identification Number (17-character VIN).') ] = None - year: Annotated[int, Field(description="Model year.", ge=1900)] + year: Annotated[int, Field(description='Model year.', ge=1900)] diff --git a/src/adcp/types/generated_poc/creative/creative_feature_result.py b/src/adcp/types/generated_poc/creative/creative_feature_result.py index b53440b3..2520823a 100644 --- a/src/adcp/types/generated_poc/creative/creative_feature_result.py +++ b/src/adcp/types/generated_poc/creative/creative_feature_result.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: creative/creative_feature_result.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,18 +14,18 @@ class CreativeFeatureResult(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) confidence: Annotated[ - float | None, Field(description="Confidence score for this value (0-1)", ge=0.0, le=1.0) + float | None, Field(description='Confidence score for this value (0-1)', ge=0.0, le=1.0) ] = None details: Annotated[ dict[str, Any] | None, - Field(description="Additional vendor-specific details about this evaluation"), + Field(description='Additional vendor-specific details about this evaluation'), ] = None expires_at: Annotated[ AwareDatetime | None, - Field(description="When this evaluation expires and should be refreshed"), + Field(description='When this evaluation expires and should be refreshed'), ] = None ext: ext_1.ExtensionObject | None = None feature_id: Annotated[ @@ -35,10 +35,10 @@ class CreativeFeatureResult(AdCPBaseModel): ), ] measured_at: Annotated[ - AwareDatetime | None, Field(description="When this feature was evaluated") + AwareDatetime | None, Field(description='When this feature was evaluated') ] = None methodology_version: Annotated[ - str | None, Field(description="Version of the methodology used to evaluate this feature") + str | None, Field(description='Version of the methodology used to evaluate this feature') ] = None unit: Annotated[ str | None, @@ -49,6 +49,6 @@ class CreativeFeatureResult(AdCPBaseModel): value: Annotated[ bool | float | str, Field( - description="The feature value. Type depends on feature definition: boolean for binary, number for quantitative, string for categorical." + description='The feature value. Type depends on feature definition: boolean for binary, number for quantitative, string for categorical.' ), ] diff --git a/src/adcp/types/generated_poc/creative/get_creative_delivery_request.py b/src/adcp/types/generated_poc/creative/get_creative_delivery_request.py index d4a28fd6..cebdd918 100644 --- a/src/adcp/types/generated_poc/creative/get_creative_delivery_request.py +++ b/src/adcp/types/generated_poc/creative/get_creative_delivery_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: creative/get_creative_delivery_request.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,29 +15,29 @@ class Pagination(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) limit: Annotated[ - int | None, Field(description="Maximum number of creatives to return", ge=1, le=100) + int | None, Field(description='Maximum number of creatives to return', ge=1, le=100) ] = 50 - offset: Annotated[int | None, Field(description="Number of creatives to skip", ge=0)] = 0 + offset: Annotated[int | None, Field(description='Number of creatives to skip', ge=0)] = 0 class GetCreativeDeliveryRequest1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) account_id: Annotated[ str | None, Field( - description="Account context for routing and scoping. Limits results to creatives within this account. Optional if the agent has a single account or can determine routing from the media buy identifiers." + description='Account context for routing and scoping. Limits results to creatives within this account. Optional if the agent has a single account or can determine routing from the media buy identifiers.' ), ] = None context: context_1.ContextObject | None = None creative_ids: Annotated[ list[str] | None, Field( - description="Filter to specific creatives by ID. If omitted, returns delivery for all creatives matching the other filters.", + description='Filter to specific creatives by ID. If omitted, returns delivery for all creatives matching the other filters.', min_length=1, ), ] = None @@ -45,14 +45,14 @@ class GetCreativeDeliveryRequest1(AdCPBaseModel): str | None, Field( description="End date for delivery period (YYYY-MM-DD). Interpreted in the platform's reporting timezone.", - pattern="^\\d{4}-\\d{2}-\\d{2}$", + pattern='^\\d{4}-\\d{2}-\\d{2}$', ), ] = None ext: ext_1.ExtensionObject | None = None max_variants: Annotated[ int | None, Field( - description="Maximum number of variants to return per creative. When omitted, the agent returns all variants. Use this to limit response size for generative creatives that may produce large numbers of variants.", + description='Maximum number of variants to return per creative. When omitted, the agent returns all variants. Use this to limit response size for generative creatives that may produce large numbers of variants.', ge=1, ), ] = None @@ -66,40 +66,40 @@ class GetCreativeDeliveryRequest1(AdCPBaseModel): media_buy_ids: Annotated[ list[str], Field( - description="Filter to specific media buys by publisher ID. If omitted, returns creative delivery across all matching media buys.", + description='Filter to specific media buys by publisher ID. If omitted, returns creative delivery across all matching media buys.', min_length=1, ), ] pagination: Annotated[ Pagination | None, Field( - description="Pagination parameters for the creatives array in the response. When omitted, the agent returns all matching creatives." + description='Pagination parameters for the creatives array in the response. When omitted, the agent returns all matching creatives.' ), ] = None start_date: Annotated[ str | None, Field( description="Start date for delivery period (YYYY-MM-DD). Interpreted in the platform's reporting timezone.", - pattern="^\\d{4}-\\d{2}-\\d{2}$", + pattern='^\\d{4}-\\d{2}-\\d{2}$', ), ] = None class GetCreativeDeliveryRequest2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) account_id: Annotated[ str | None, Field( - description="Account context for routing and scoping. Limits results to creatives within this account. Optional if the agent has a single account or can determine routing from the media buy identifiers." + description='Account context for routing and scoping. Limits results to creatives within this account. Optional if the agent has a single account or can determine routing from the media buy identifiers.' ), ] = None context: context_1.ContextObject | None = None creative_ids: Annotated[ list[str] | None, Field( - description="Filter to specific creatives by ID. If omitted, returns delivery for all creatives matching the other filters.", + description='Filter to specific creatives by ID. If omitted, returns delivery for all creatives matching the other filters.', min_length=1, ), ] = None @@ -107,14 +107,14 @@ class GetCreativeDeliveryRequest2(AdCPBaseModel): str | None, Field( description="End date for delivery period (YYYY-MM-DD). Interpreted in the platform's reporting timezone.", - pattern="^\\d{4}-\\d{2}-\\d{2}$", + pattern='^\\d{4}-\\d{2}-\\d{2}$', ), ] = None ext: ext_1.ExtensionObject | None = None max_variants: Annotated[ int | None, Field( - description="Maximum number of variants to return per creative. When omitted, the agent returns all variants. Use this to limit response size for generative creatives that may produce large numbers of variants.", + description='Maximum number of variants to return per creative. When omitted, the agent returns all variants. Use this to limit response size for generative creatives that may produce large numbers of variants.', ge=1, ), ] = None @@ -128,40 +128,40 @@ class GetCreativeDeliveryRequest2(AdCPBaseModel): media_buy_ids: Annotated[ list[str] | None, Field( - description="Filter to specific media buys by publisher ID. If omitted, returns creative delivery across all matching media buys.", + description='Filter to specific media buys by publisher ID. If omitted, returns creative delivery across all matching media buys.', min_length=1, ), ] = None pagination: Annotated[ Pagination | None, Field( - description="Pagination parameters for the creatives array in the response. When omitted, the agent returns all matching creatives." + description='Pagination parameters for the creatives array in the response. When omitted, the agent returns all matching creatives.' ), ] = None start_date: Annotated[ str | None, Field( description="Start date for delivery period (YYYY-MM-DD). Interpreted in the platform's reporting timezone.", - pattern="^\\d{4}-\\d{2}-\\d{2}$", + pattern='^\\d{4}-\\d{2}-\\d{2}$', ), ] = None class GetCreativeDeliveryRequest3(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) account_id: Annotated[ str | None, Field( - description="Account context for routing and scoping. Limits results to creatives within this account. Optional if the agent has a single account or can determine routing from the media buy identifiers." + description='Account context for routing and scoping. Limits results to creatives within this account. Optional if the agent has a single account or can determine routing from the media buy identifiers.' ), ] = None context: context_1.ContextObject | None = None creative_ids: Annotated[ list[str], Field( - description="Filter to specific creatives by ID. If omitted, returns delivery for all creatives matching the other filters.", + description='Filter to specific creatives by ID. If omitted, returns delivery for all creatives matching the other filters.', min_length=1, ), ] @@ -169,14 +169,14 @@ class GetCreativeDeliveryRequest3(AdCPBaseModel): str | None, Field( description="End date for delivery period (YYYY-MM-DD). Interpreted in the platform's reporting timezone.", - pattern="^\\d{4}-\\d{2}-\\d{2}$", + pattern='^\\d{4}-\\d{2}-\\d{2}$', ), ] = None ext: ext_1.ExtensionObject | None = None max_variants: Annotated[ int | None, Field( - description="Maximum number of variants to return per creative. When omitted, the agent returns all variants. Use this to limit response size for generative creatives that may produce large numbers of variants.", + description='Maximum number of variants to return per creative. When omitted, the agent returns all variants. Use this to limit response size for generative creatives that may produce large numbers of variants.', ge=1, ), ] = None @@ -190,21 +190,21 @@ class GetCreativeDeliveryRequest3(AdCPBaseModel): media_buy_ids: Annotated[ list[str] | None, Field( - description="Filter to specific media buys by publisher ID. If omitted, returns creative delivery across all matching media buys.", + description='Filter to specific media buys by publisher ID. If omitted, returns creative delivery across all matching media buys.', min_length=1, ), ] = None pagination: Annotated[ Pagination | None, Field( - description="Pagination parameters for the creatives array in the response. When omitted, the agent returns all matching creatives." + description='Pagination parameters for the creatives array in the response. When omitted, the agent returns all matching creatives.' ), ] = None start_date: Annotated[ str | None, Field( description="Start date for delivery period (YYYY-MM-DD). Interpreted in the platform's reporting timezone.", - pattern="^\\d{4}-\\d{2}-\\d{2}$", + pattern='^\\d{4}-\\d{2}-\\d{2}$', ), ] = None @@ -217,7 +217,7 @@ class GetCreativeDeliveryRequest( root: Annotated[ GetCreativeDeliveryRequest1 | GetCreativeDeliveryRequest2 | GetCreativeDeliveryRequest3, Field( - description="Request parameters for retrieving creative delivery data including variant-level metrics from a creative agent. At least one scoping filter (media_buy_ids, media_buy_buyer_refs, or creative_ids) is required.", - title="Get Creative Delivery Request", + description='Request parameters for retrieving creative delivery data including variant-level metrics from a creative agent. At least one scoping filter (media_buy_ids, media_buy_buyer_refs, or creative_ids) is required.', + title='Get Creative Delivery Request', ), ] diff --git a/src/adcp/types/generated_poc/creative/get_creative_delivery_response.py b/src/adcp/types/generated_poc/creative/get_creative_delivery_response.py index d23e2c51..e542f3a9 100644 --- a/src/adcp/types/generated_poc/creative/get_creative_delivery_response.py +++ b/src/adcp/types/generated_poc/creative/get_creative_delivery_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: creative/get_creative_delivery_response.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -17,25 +17,25 @@ class Pagination(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) has_more: Annotated[ - bool, Field(description="Whether more creatives are available beyond this page") + bool, Field(description='Whether more creatives are available beyond this page') ] - limit: Annotated[int, Field(description="Maximum number of creatives requested", ge=1)] - offset: Annotated[int, Field(description="Number of creatives skipped", ge=0)] + limit: Annotated[int, Field(description='Maximum number of creatives requested', ge=1)] + offset: Annotated[int, Field(description='Number of creatives skipped', ge=0)] total: Annotated[ int | None, - Field(description="Total number of creatives matching the request filters", ge=0), + Field(description='Total number of creatives matching the request filters', ge=0), ] = None class ReportingPeriod(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - end: Annotated[AwareDatetime, Field(description="ISO 8601 end timestamp")] - start: Annotated[AwareDatetime, Field(description="ISO 8601 start timestamp")] + end: Annotated[AwareDatetime, Field(description='ISO 8601 end timestamp')] + start: Annotated[AwareDatetime, Field(description='ISO 8601 start timestamp')] timezone: Annotated[ str | None, Field( @@ -46,11 +46,11 @@ class ReportingPeriod(AdCPBaseModel): class Creative(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - creative_id: Annotated[str, Field(description="Creative identifier")] + creative_id: Annotated[str, Field(description='Creative identifier')] format_id: Annotated[ - format_id_1.FormatId | None, Field(description="Format of this creative") + format_id_1.FormatId | None, Field(description='Format of this creative') ] = None media_buy_id: Annotated[ str | None, @@ -60,46 +60,46 @@ class Creative(AdCPBaseModel): ] = None totals: Annotated[ delivery_metrics.DeliveryMetrics | None, - Field(description="Aggregate delivery metrics across all variants of this creative"), + Field(description='Aggregate delivery metrics across all variants of this creative'), ] = None variant_count: Annotated[ int | None, Field( - description="Total number of variants for this creative. When max_variants was specified in the request, this may exceed the number of items in the variants array.", + description='Total number of variants for this creative. When max_variants was specified in the request, this may exceed the number of items in the variants array.', ge=0, ), ] = None variants: Annotated[ list[creative_variant.CreativeVariant], Field( - description="Variant-level delivery breakdown. Each variant includes the rendered manifest and delivery metrics. For standard creatives, contains a single variant. For asset group optimization, one per combination. For generative creative, one per generated execution. Empty when a creative has no variants yet." + description='Variant-level delivery breakdown. Each variant includes the rendered manifest and delivery metrics. For standard creatives, contains a single variant. For asset group optimization, one per combination. For generative creative, one per generated execution. Empty when a creative has no variants yet.' ), ] class GetCreativeDeliveryResponse(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) account_id: Annotated[ str | None, Field( - description="Account identifier. Present when the response spans or is scoped to a specific account." + description='Account identifier. Present when the response spans or is scoped to a specific account.' ), ] = None context: context_1.ContextObject | None = None creatives: Annotated[ - list[Creative], Field(description="Creative delivery data with variant breakdowns") + list[Creative], Field(description='Creative delivery data with variant breakdowns') ] currency: Annotated[ str, Field( description="ISO 4217 currency code for monetary values in this response (e.g., 'USD', 'EUR')", - pattern="^[A-Z]{3}$", + pattern='^[A-Z]{3}$', ), ] errors: Annotated[ - list[error.Error] | None, Field(description="Task-specific errors and warnings") + list[error.Error] | None, Field(description='Task-specific errors and warnings') ] = None ext: ext_1.ExtensionObject | None = None media_buy_buyer_ref: Annotated[ @@ -117,7 +117,7 @@ class GetCreativeDeliveryResponse(AdCPBaseModel): pagination: Annotated[ Pagination | None, Field( - description="Pagination information. Present when the request included pagination parameters." + description='Pagination information. Present when the request included pagination parameters.' ), ] = None - reporting_period: Annotated[ReportingPeriod, Field(description="Date range for the report.")] + reporting_period: Annotated[ReportingPeriod, Field(description='Date range for the report.')] diff --git a/src/adcp/types/generated_poc/creative/get_creative_features_request.py b/src/adcp/types/generated_poc/creative/get_creative_features_request.py index 4ef22244..16ff75aa 100644 --- a/src/adcp/types/generated_poc/creative/get_creative_features_request.py +++ b/src/adcp/types/generated_poc/creative/get_creative_features_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: creative/get_creative_features_request.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,18 +16,18 @@ class GetCreativeFeaturesRequest(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) context: context_1.ContextObject | None = None creative_manifest: Annotated[ creative_manifest_1.CreativeManifest, - Field(description="The creative manifest to evaluate. Contains format_id and assets."), + Field(description='The creative manifest to evaluate. Contains format_id and assets.'), ] ext: ext_1.ExtensionObject | None = None feature_ids: Annotated[ list[str] | None, Field( - description="Optional filter to specific features. If omitted, returns all available features.", + description='Optional filter to specific features. If omitted, returns all available features.', min_length=1, ), ] = None diff --git a/src/adcp/types/generated_poc/creative/get_creative_features_response.py b/src/adcp/types/generated_poc/creative/get_creative_features_response.py index af8a8c5d..fb76b531 100644 --- a/src/adcp/types/generated_poc/creative/get_creative_features_response.py +++ b/src/adcp/types/generated_poc/creative/get_creative_features_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: creative/get_creative_features_response.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -20,7 +20,7 @@ class GetCreativeFeaturesResponse2(AdCPBaseModel): errors: list[error.Error] ext: ext_1.ExtensionObject | None = None results: Annotated[ - Any | None, Field(description="Field must not be present in error response") + Any | None, Field(description='Field must not be present in error response') ] = None @@ -33,12 +33,12 @@ class GetCreativeFeaturesResponse1(AdCPBaseModel): ), ] = None errors: Annotated[ - Any | None, Field(description="Field must not be present in success response") + Any | None, Field(description='Field must not be present in success response') ] = None ext: ext_1.ExtensionObject | None = None results: Annotated[ list[creative_feature_result.CreativeFeatureResult], - Field(description="Feature values for the evaluated creative"), + Field(description='Feature values for the evaluated creative'), ] @@ -48,7 +48,7 @@ class GetCreativeFeaturesResponse( root: Annotated[ GetCreativeFeaturesResponse1 | GetCreativeFeaturesResponse2, Field( - description="Response payload for get_creative_features task. Returns feature values for the evaluated creative.", - title="Get Creative Features Response", + description='Response payload for get_creative_features task. Returns feature values for the evaluated creative.', + title='Get Creative Features Response', ), ] diff --git a/src/adcp/types/generated_poc/creative/list_creative_formats_request.py b/src/adcp/types/generated_poc/creative/list_creative_formats_request.py index 8ea0ef64..a9070623 100644 --- a/src/adcp/types/generated_poc/creative/list_creative_formats_request.py +++ b/src/adcp/types/generated_poc/creative/list_creative_formats_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: creative/list_creative_formats_request.json -# timestamp: 2026-02-20T02:37:39+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -17,25 +17,25 @@ class AssetType(Enum): - image = "image" - video = "video" - audio = "audio" - text = "text" - html = "html" - javascript = "javascript" - url = "url" + image = 'image' + video = 'video' + audio = 'audio' + text = 'text' + html = 'html' + javascript = 'javascript' + url = 'url' class Type(Enum): - audio = "audio" - video = "video" - display = "display" - dooh = "dooh" + audio = 'audio' + video = 'video' + display = 'display' + dooh = 'dooh' class ListCreativeFormatsRequestCreativeAgent(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) asset_types: Annotated[ list[AssetType] | None, @@ -48,7 +48,7 @@ class ListCreativeFormatsRequestCreativeAgent(AdCPBaseModel): ext: ext_1.ExtensionObject | None = None format_ids: Annotated[ list[format_id.FormatId] | None, - Field(description="Return only these specific format IDs", min_length=1), + Field(description='Return only these specific format IDs', min_length=1), ] = None input_format_ids: Annotated[ list[format_id.FormatId] | None, @@ -60,35 +60,35 @@ class ListCreativeFormatsRequestCreativeAgent(AdCPBaseModel): is_responsive: Annotated[ bool | None, Field( - description="Filter for responsive formats that adapt to container size. When true, returns formats without fixed dimensions." + description='Filter for responsive formats that adapt to container size. When true, returns formats without fixed dimensions.' ), ] = None max_height: Annotated[ int | None, Field( - description="Maximum height in pixels (inclusive). Returns formats with height <= this value. Omit for responsive/fluid formats." + description='Maximum height in pixels (inclusive). Returns formats with height <= this value. Omit for responsive/fluid formats.' ), ] = None max_width: Annotated[ int | None, Field( - description="Maximum width in pixels (inclusive). Returns formats with width <= this value. Omit for responsive/fluid formats." + description='Maximum width in pixels (inclusive). Returns formats with width <= this value. Omit for responsive/fluid formats.' ), ] = None min_height: Annotated[ int | None, Field( - description="Minimum height in pixels (inclusive). Returns formats with height >= this value." + description='Minimum height in pixels (inclusive). Returns formats with height >= this value.' ), ] = None min_width: Annotated[ int | None, Field( - description="Minimum width in pixels (inclusive). Returns formats with width >= this value." + description='Minimum width in pixels (inclusive). Returns formats with width >= this value.' ), ] = None name_search: Annotated[ - str | None, Field(description="Search for formats by name (case-insensitive partial match)") + str | None, Field(description='Search for formats by name (case-insensitive partial match)') ] = None output_format_ids: Annotated[ list[format_id.FormatId] | None, @@ -101,12 +101,12 @@ class ListCreativeFormatsRequestCreativeAgent(AdCPBaseModel): type: Annotated[ Type | None, Field( - description="Filter by format type (technical categories with distinct requirements)" + description='Filter by format type (technical categories with distinct requirements)' ), ] = None wcag_level: Annotated[ wcag_level_1.WcagLevel | None, Field( - description="Filter to formats that meet at least this WCAG conformance level (A < AA < AAA)" + description='Filter to formats that meet at least this WCAG conformance level (A < AA < AAA)' ), ] = None diff --git a/src/adcp/types/generated_poc/creative/list_creative_formats_response.py b/src/adcp/types/generated_poc/creative/list_creative_formats_response.py index 79572d51..26aff36c 100644 --- a/src/adcp/types/generated_poc/creative/list_creative_formats_response.py +++ b/src/adcp/types/generated_poc/creative/list_creative_formats_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: creative/list_creative_formats_response.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -18,7 +18,7 @@ class CreativeAgent(AdCPBaseModel): agent_name: Annotated[ - str | None, Field(description="Human-readable name for the creative agent") + str | None, Field(description='Human-readable name for the creative agent') ] = None agent_url: Annotated[ AnyUrl, @@ -28,23 +28,23 @@ class CreativeAgent(AdCPBaseModel): ] capabilities: Annotated[ list[creative_agent_capability.CreativeAgentCapability] | None, - Field(description="Capabilities this creative agent provides"), + Field(description='Capabilities this creative agent provides'), ] = None class ListCreativeFormatsResponseCreativeAgent(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None creative_agents: Annotated[ list[CreativeAgent] | None, Field( - description="Optional: Creative agents that provide additional formats. Buyers can recursively query these agents to discover more formats. No authentication required for list_creative_formats." + description='Optional: Creative agents that provide additional formats. Buyers can recursively query these agents to discover more formats. No authentication required for list_creative_formats.' ), ] = None errors: Annotated[ - list[error.Error] | None, Field(description="Task-specific errors and warnings") + list[error.Error] | None, Field(description='Task-specific errors and warnings') ] = None ext: ext_1.ExtensionObject | None = None formats: Annotated[ diff --git a/src/adcp/types/generated_poc/creative/preview_creative_request.py b/src/adcp/types/generated_poc/creative/preview_creative_request.py index a6d54605..3af11985 100644 --- a/src/adcp/types/generated_poc/creative/preview_creative_request.py +++ b/src/adcp/types/generated_poc/creative/preview_creative_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: creative/preview_creative_request.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -18,7 +18,7 @@ class Input(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context_description: Annotated[ str | None, @@ -42,24 +42,24 @@ class Input(AdCPBaseModel): class Input2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context_description: Annotated[ str | None, - Field(description="Natural language description of the context for AI-generated content"), + Field(description='Natural language description of the context for AI-generated content'), ] = None macros: Annotated[ - dict[str, str] | None, Field(description="Macro values to use for this preview") + dict[str, str] | None, Field(description='Macro values to use for this preview') ] = None - name: Annotated[str, Field(description="Human-readable name for this input set")] + name: Annotated[str, Field(description='Human-readable name for this input set')] class PreviewCreativeRequest3(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None - creative_id: Annotated[str | None, Field(description="Creative identifier for context")] = None + creative_id: Annotated[str | None, Field(description='Creative identifier for context')] = None ext: ext_1.ExtensionObject | None = None output_format: Annotated[ preview_output_format.PreviewOutputFormat | None, @@ -68,37 +68,37 @@ class PreviewCreativeRequest3(AdCPBaseModel): ), ] = preview_output_format.PreviewOutputFormat.url request_type: Annotated[ - Literal["variant"], - Field(description="Discriminator indicating this is a variant preview request"), + Literal['variant'], + Field(description='Discriminator indicating this is a variant preview request'), ] variant_id: Annotated[ str, Field( - description="Platform-assigned variant identifier from get_creative_delivery response" + description='Platform-assigned variant identifier from get_creative_delivery response' ), ] class PreviewCreativeRequest1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None creative_manifest: Annotated[ creative_manifest_1.CreativeManifest, - Field(description="Complete creative manifest with all required assets for the format"), + Field(description='Complete creative manifest with all required assets for the format'), ] ext: ext_1.ExtensionObject | None = None format_id: Annotated[ format_id_1.FormatId | None, Field( - description="Format identifier for rendering the preview. Optional — defaults to creative_manifest_1.format_id if omitted." + description='Format identifier for rendering the preview. Optional — defaults to creative_manifest_1.format_id if omitted.' ), ] = None inputs: Annotated[ list[Input] | None, Field( - description="Array of input sets for generating multiple preview variants. Each input set defines macros and context values for one preview rendering. If not provided, creative agent will generate default previews.", + description='Array of input sets for generating multiple preview variants. Each input set defines macros and context values for one preview rendering. If not provided, creative agent will generate default previews.', min_length=1, ), ] = None @@ -109,32 +109,32 @@ class PreviewCreativeRequest1(AdCPBaseModel): ), ] = preview_output_format.PreviewOutputFormat.url request_type: Annotated[ - Literal["single"], - Field(description="Discriminator indicating this is a single preview request"), + Literal['single'], + Field(description='Discriminator indicating this is a single preview request'), ] template_id: Annotated[ - str | None, Field(description="Specific template ID for custom format rendering") + str | None, Field(description='Specific template ID for custom format rendering') ] = None class Request(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) creative_manifest: Annotated[ creative_manifest_1.CreativeManifest, - Field(description="Complete creative manifest with all required assets"), + Field(description='Complete creative manifest with all required assets'), ] format_id: Annotated[ format_id_1.FormatId | None, Field( - description="Format identifier for rendering the preview. Optional — defaults to creative_manifest_1.format_id if omitted." + description='Format identifier for rendering the preview. Optional — defaults to creative_manifest_1.format_id if omitted.' ), ] = None inputs: Annotated[ list[Input2] | None, Field( - description="Array of input sets for generating multiple preview variants", min_length=1 + description='Array of input sets for generating multiple preview variants', min_length=1 ), ] = None output_format: Annotated[ @@ -144,13 +144,13 @@ class Request(AdCPBaseModel): ), ] = preview_output_format.PreviewOutputFormat.url template_id: Annotated[ - str | None, Field(description="Specific template ID for custom format rendering") + str | None, Field(description='Specific template ID for custom format rendering') ] = None class PreviewCreativeRequest2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None @@ -161,13 +161,13 @@ class PreviewCreativeRequest2(AdCPBaseModel): ), ] = preview_output_format.PreviewOutputFormat.url request_type: Annotated[ - Literal["batch"], - Field(description="Discriminator indicating this is a batch preview request"), + Literal['batch'], + Field(description='Discriminator indicating this is a batch preview request'), ] requests: Annotated[ list[Request], Field( - description="Array of preview requests (1-50 items). Each follows the single request structure.", + description='Array of preview requests (1-50 items). Each follows the single request structure.', max_length=50, min_length=1, ), @@ -180,8 +180,8 @@ class PreviewCreativeRequest( root: Annotated[ PreviewCreativeRequest1 | PreviewCreativeRequest2 | PreviewCreativeRequest3, Field( - discriminator="request_type", - description="Request to generate previews of one or more creative manifests. Accepts either a single creative request or an array of requests for batch processing.", - title="Preview Creative Request", + discriminator='request_type', + description='Request to generate previews of one or more creative manifests. Accepts either a single creative request or an array of requests for batch processing.', + title='Preview Creative Request', ), ] diff --git a/src/adcp/types/generated_poc/creative/preview_creative_response.py b/src/adcp/types/generated_poc/creative/preview_creative_response.py index fed42d96..52074418 100644 --- a/src/adcp/types/generated_poc/creative/preview_creative_response.py +++ b/src/adcp/types/generated_poc/creative/preview_creative_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: creative/preview_creative_response.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -17,12 +17,12 @@ class Input(AdCPBaseModel): context_description: Annotated[ - str | None, Field(description="Context description applied to this variant") + str | None, Field(description='Context description applied to this variant') ] = None macros: Annotated[ - dict[str, str] | None, Field(description="Macro values applied to this variant") + dict[str, str] | None, Field(description='Macro values applied to this variant') ] = None - name: Annotated[str, Field(description="Human-readable name for this variant")] + name: Annotated[str, Field(description='Human-readable name for this variant')] class Error(AdCPBaseModel): @@ -32,8 +32,8 @@ class Error(AdCPBaseModel): description="Error code (e.g., 'invalid_manifest', 'unsupported_format', 'missing_assets')" ), ] - details: Annotated[dict[str, Any] | None, Field(description="Additional error context")] = None - message: Annotated[str, Field(description="Human-readable error message")] + details: Annotated[dict[str, Any] | None, Field(description='Additional error context')] = None + message: Annotated[str, Field(description='Human-readable error message')] class Input4(AdCPBaseModel): @@ -46,14 +46,14 @@ class Preview(AdCPBaseModel): input: Annotated[ Input, Field( - description="The input parameters that generated this preview variant. Echoes back the request input or shows defaults used." + description='The input parameters that generated this preview variant. Echoes back the request input or shows defaults used.' ), ] - preview_id: Annotated[str, Field(description="Unique identifier for this preview variant")] + preview_id: Annotated[str, Field(description='Unique identifier for this preview variant')] renders: Annotated[ list[preview_render.PreviewRender], Field( - description="Array of rendered pieces for this preview variant. Most formats render as a single piece. Companion ad formats (video + banner), multi-placement formats, and adaptive formats render as multiple pieces.", + description='Array of rendered pieces for this preview variant. Most formats render as a single piece. Companion ad formats (video + banner), multi-placement formats, and adaptive formats render as multiple pieces.', min_length=1, ), ] @@ -61,29 +61,29 @@ class Preview(AdCPBaseModel): class PreviewCreativeResponse1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None expires_at: Annotated[ - AwareDatetime, Field(description="ISO 8601 timestamp when preview links expire") + AwareDatetime, Field(description='ISO 8601 timestamp when preview links expire') ] ext: ext_1.ExtensionObject | None = None interactive_url: Annotated[ AnyUrl | None, Field( - description="Optional URL to an interactive testing page that shows all preview variants with controls to switch between them, modify macro values, and test different scenarios." + description='Optional URL to an interactive testing page that shows all preview variants with controls to switch between them, modify macro values, and test different scenarios.' ), ] = None previews: Annotated[ list[Preview], Field( - description="Array of preview variants. Each preview corresponds to an input set from the request. If no inputs were provided, returns a single default preview.", + description='Array of preview variants. Each preview corresponds to an input set from the request. If no inputs were provided, returns a single default preview.', min_length=1, ), ] response_type: Annotated[ - Literal["single"], - Field(description="Discriminator indicating this is a single preview response"), + Literal['single'], + Field(description='Discriminator indicating this is a single preview response'), ] @@ -98,16 +98,16 @@ class Response(AdCPBaseModel): interactive_url: AnyUrl | None = None previews: Annotated[ list[Preview1], - Field(description="Array of preview variants for this creative", min_length=1), + Field(description='Array of preview variants for this creative', min_length=1), ] class Results(AdCPBaseModel): - error: Annotated[Error | None, Field(description="Error information for failed requests")] = ( + error: Annotated[Error | None, Field(description='Error information for failed requests')] = ( None ) - response: Annotated[Response, Field(description="Preview response for successful requests")] - success: Annotated[Literal[True], Field(description="Whether this preview request succeeded")] + response: Annotated[Response, Field(description='Preview response for successful requests')] + success: Annotated[Literal[True], Field(description='Whether this preview request succeeded')] class Preview2(Preview1): @@ -119,75 +119,75 @@ class Response1(AdCPBaseModel): interactive_url: AnyUrl | None = None previews: Annotated[ list[Preview2], - Field(description="Array of preview variants for this creative", min_length=1), + Field(description='Array of preview variants for this creative', min_length=1), ] class Results1(AdCPBaseModel): - error: Annotated[Error, Field(description="Error information for failed requests")] + error: Annotated[Error, Field(description='Error information for failed requests')] response: Annotated[ - Response1 | None, Field(description="Preview response for successful requests") + Response1 | None, Field(description='Preview response for successful requests') ] = None - success: Annotated[Literal[False], Field(description="Whether this preview request succeeded")] + success: Annotated[Literal[False], Field(description='Whether this preview request succeeded')] class PreviewCreativeResponse2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None response_type: Annotated[ - Literal["batch"], - Field(description="Discriminator indicating this is a batch preview response"), + Literal['batch'], + Field(description='Discriminator indicating this is a batch preview response'), ] results: Annotated[ list[Results | Results1], Field( - description="Array of preview results corresponding to each request in the same order. results[0] is the result for requests[0], results[1] for requests[1], etc. Order is guaranteed even when some requests fail. Each result contains either a successful preview response or an error.", + description='Array of preview results corresponding to each request in the same order. results[0] is the result for requests[0], results[1] for requests[1], etc. Order is guaranteed even when some requests fail. Each result contains either a successful preview response or an error.', min_length=1, ), ] class Preview3(AdCPBaseModel): - preview_id: Annotated[str, Field(description="Unique identifier for this preview")] + preview_id: Annotated[str, Field(description='Unique identifier for this preview')] renders: Annotated[ list[preview_render.PreviewRender], - Field(description="Rendered pieces for this variant", min_length=1), + Field(description='Rendered pieces for this variant', min_length=1), ] class PreviewCreativeResponse3(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None creative_id: Annotated[ - str | None, Field(description="Creative identifier this variant belongs to") + str | None, Field(description='Creative identifier this variant belongs to') ] = None expires_at: Annotated[ - AwareDatetime | None, Field(description="ISO 8601 timestamp when preview links expire") + AwareDatetime | None, Field(description='ISO 8601 timestamp when preview links expire') ] = None ext: ext_1.ExtensionObject | None = None manifest: Annotated[ creative_manifest.CreativeManifest | None, Field( - description="The rendered creative manifest for this variant — the actual output that was served, not the input assets" + description='The rendered creative manifest for this variant — the actual output that was served, not the input assets' ), ] = None previews: Annotated[ list[Preview3], Field( - description="Array of rendered pieces for this variant. Most formats render as a single piece.", + description='Array of rendered pieces for this variant. Most formats render as a single piece.', min_length=1, ), ] response_type: Annotated[ - Literal["variant"], - Field(description="Discriminator indicating this is a variant preview response"), + Literal['variant'], + Field(description='Discriminator indicating this is a variant preview response'), ] - variant_id: Annotated[str, Field(description="Platform-assigned variant identifier")] + variant_id: Annotated[str, Field(description='Platform-assigned variant identifier')] class PreviewCreativeResponse( @@ -196,7 +196,7 @@ class PreviewCreativeResponse( root: Annotated[ PreviewCreativeResponse1 | PreviewCreativeResponse2 | PreviewCreativeResponse3, Field( - description="Response containing preview links for one or more creatives. Format matches the request: single preview response for single requests, batch results for batch requests.", - title="Preview Creative Response", + description='Response containing preview links for one or more creatives. Format matches the request: single preview response for single requests, batch results for batch requests.', + title='Preview Creative Response', ), ] diff --git a/src/adcp/types/generated_poc/creative/preview_render.py b/src/adcp/types/generated_poc/creative/preview_render.py index 36523a28..071c9e65 100644 --- a/src/adcp/types/generated_poc/creative/preview_render.py +++ b/src/adcp/types/generated_poc/creative/preview_render.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: creative/preview_render.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -17,7 +17,7 @@ class Dimensions(AdCPBaseModel): class Embedding(AdCPBaseModel): csp_policy: Annotated[ - str | None, Field(description="Content Security Policy requirements for embedding") + str | None, Field(description='Content Security Policy requirements for embedding') ] = None recommended_sandbox: Annotated[ str | None, @@ -26,35 +26,35 @@ class Embedding(AdCPBaseModel): ), ] = None requires_https: Annotated[ - bool | None, Field(description="Whether this output requires HTTPS for secure embedding") + bool | None, Field(description='Whether this output requires HTTPS for secure embedding') ] = None supports_fullscreen: Annotated[ - bool | None, Field(description="Whether this output supports fullscreen mode") + bool | None, Field(description='Whether this output supports fullscreen mode') ] = None class PreviewRender1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) dimensions: Annotated[ - Dimensions | None, Field(description="Dimensions for this rendered piece") + Dimensions | None, Field(description='Dimensions for this rendered piece') ] = None embedding: Annotated[ Embedding | None, - Field(description="Optional security and embedding metadata for safe iframe integration"), + Field(description='Optional security and embedding metadata for safe iframe integration'), ] = None output_format: Annotated[ - Literal["url"], Field(description="Discriminator indicating preview_url is provided") + Literal['url'], Field(description='Discriminator indicating preview_url is provided') ] preview_url: Annotated[ AnyUrl, Field( - description="URL to an HTML page that renders this piece. Can be embedded in an iframe." + description='URL to an HTML page that renders this piece. Can be embedded in an iframe.' ), ] render_id: Annotated[ - str, Field(description="Unique identifier for this rendered piece within the variant") + str, Field(description='Unique identifier for this rendered piece within the variant') ] role: Annotated[ str, @@ -66,25 +66,25 @@ class PreviewRender1(AdCPBaseModel): class PreviewRender2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) dimensions: Annotated[ - Dimensions | None, Field(description="Dimensions for this rendered piece") + Dimensions | None, Field(description='Dimensions for this rendered piece') ] = None embedding: Annotated[ - Embedding | None, Field(description="Optional security and embedding metadata") + Embedding | None, Field(description='Optional security and embedding metadata') ] = None output_format: Annotated[ - Literal["html"], Field(description="Discriminator indicating preview_html is provided") + Literal['html'], Field(description='Discriminator indicating preview_html is provided') ] preview_html: Annotated[ str, Field( - description="Raw HTML for this rendered piece. Can be embedded directly in the page without iframe. Security warning: Only use with trusted creative agents as this bypasses iframe sandboxing." + description='Raw HTML for this rendered piece. Can be embedded directly in the page without iframe. Security warning: Only use with trusted creative agents as this bypasses iframe sandboxing.' ), ] render_id: Annotated[ - str, Field(description="Unique identifier for this rendered piece within the variant") + str, Field(description='Unique identifier for this rendered piece within the variant') ] role: Annotated[ str, @@ -96,35 +96,35 @@ class PreviewRender2(AdCPBaseModel): class PreviewRender3(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) dimensions: Annotated[ - Dimensions | None, Field(description="Dimensions for this rendered piece") + Dimensions | None, Field(description='Dimensions for this rendered piece') ] = None embedding: Annotated[ Embedding | None, - Field(description="Optional security and embedding metadata for safe iframe integration"), + Field(description='Optional security and embedding metadata for safe iframe integration'), ] = None output_format: Annotated[ - Literal["both"], + Literal['both'], Field( - description="Discriminator indicating both preview_url and preview_html are provided" + description='Discriminator indicating both preview_url and preview_html are provided' ), ] preview_html: Annotated[ str, Field( - description="Raw HTML for this rendered piece. Can be embedded directly in the page without iframe. Security warning: Only use with trusted creative agents as this bypasses iframe sandboxing." + description='Raw HTML for this rendered piece. Can be embedded directly in the page without iframe. Security warning: Only use with trusted creative agents as this bypasses iframe sandboxing.' ), ] preview_url: Annotated[ AnyUrl, Field( - description="URL to an HTML page that renders this piece. Can be embedded in an iframe." + description='URL to an HTML page that renders this piece. Can be embedded in an iframe.' ), ] render_id: Annotated[ - str, Field(description="Unique identifier for this rendered piece within the variant") + str, Field(description='Unique identifier for this rendered piece within the variant') ] role: Annotated[ str, @@ -138,7 +138,7 @@ class PreviewRender(RootModel[PreviewRender1 | PreviewRender2 | PreviewRender3]) root: Annotated[ PreviewRender1 | PreviewRender2 | PreviewRender3, Field( - description="A single rendered piece of a creative preview with discriminated output format", - title="Preview Render", + description='A single rendered piece of a creative preview with discriminated output format', + title='Preview Render', ), ] diff --git a/src/adcp/types/generated_poc/enums/action_source.py b/src/adcp/types/generated_poc/enums/action_source.py index 64cfcff6..e02affd8 100644 --- a/src/adcp/types/generated_poc/enums/action_source.py +++ b/src/adcp/types/generated_poc/enums/action_source.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/action_source.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,12 +8,12 @@ class ActionSource(Enum): - website = "website" - app = "app" - offline = "offline" - phone_call = "phone_call" - chat = "chat" - email = "email" - in_store = "in_store" - system_generated = "system_generated" - other = "other" + website = 'website' + app = 'app' + offline = 'offline' + phone_call = 'phone_call' + chat = 'chat' + email = 'email' + in_store = 'in_store' + system_generated = 'system_generated' + other = 'other' diff --git a/src/adcp/types/generated_poc/enums/adcp_domain.py b/src/adcp/types/generated_poc/enums/adcp_domain.py index 25ca8b51..8ffbe9dd 100644 --- a/src/adcp/types/generated_poc/enums/adcp_domain.py +++ b/src/adcp/types/generated_poc/enums/adcp_domain.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/adcp_domain.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,7 +8,7 @@ class AdcpDomain(Enum): - media_buy = "media-buy" - signals = "signals" - governance = "governance" - creative = "creative" + media_buy = 'media-buy' + signals = 'signals' + governance = 'governance' + creative = 'creative' diff --git a/src/adcp/types/generated_poc/enums/age_verification_method.py b/src/adcp/types/generated_poc/enums/age_verification_method.py index a7e91537..c7b65442 100644 --- a/src/adcp/types/generated_poc/enums/age_verification_method.py +++ b/src/adcp/types/generated_poc/enums/age_verification_method.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/age_verification_method.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,8 +8,8 @@ class AgeVerificationMethod(Enum): - facial_age_estimation = "facial_age_estimation" - id_document = "id_document" - digital_id = "digital_id" - credit_card = "credit_card" - world_id = "world_id" + facial_age_estimation = 'facial_age_estimation' + id_document = 'id_document' + digital_id = 'digital_id' + credit_card = 'credit_card' + world_id = 'world_id' diff --git a/src/adcp/types/generated_poc/enums/asset_content_type.py b/src/adcp/types/generated_poc/enums/asset_content_type.py index c0412bcd..f3bc2ce5 100644 --- a/src/adcp/types/generated_poc/enums/asset_content_type.py +++ b/src/adcp/types/generated_poc/enums/asset_content_type.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/asset_content_type.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,15 +8,15 @@ class AssetContentType(Enum): - image = "image" - video = "video" - audio = "audio" - text = "text" - markdown = "markdown" - html = "html" - css = "css" - javascript = "javascript" - vast = "vast" - daast = "daast" - url = "url" - webhook = "webhook" + image = 'image' + video = 'video' + audio = 'audio' + text = 'text' + markdown = 'markdown' + html = 'html' + css = 'css' + javascript = 'javascript' + vast = 'vast' + daast = 'daast' + url = 'url' + webhook = 'webhook' diff --git a/src/adcp/types/generated_poc/enums/attribution_model.py b/src/adcp/types/generated_poc/enums/attribution_model.py index fd685d72..2d910ed5 100644 --- a/src/adcp/types/generated_poc/enums/attribution_model.py +++ b/src/adcp/types/generated_poc/enums/attribution_model.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/attribution_model.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,8 +8,8 @@ class AttributionModel(Enum): - last_touch = "last_touch" - first_touch = "first_touch" - linear = "linear" - time_decay = "time_decay" - data_driven = "data_driven" + last_touch = 'last_touch' + first_touch = 'first_touch' + linear = 'linear' + time_decay = 'time_decay' + data_driven = 'data_driven' diff --git a/src/adcp/types/generated_poc/enums/auth_scheme.py b/src/adcp/types/generated_poc/enums/auth_scheme.py index 2666b784..64f4a364 100644 --- a/src/adcp/types/generated_poc/enums/auth_scheme.py +++ b/src/adcp/types/generated_poc/enums/auth_scheme.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/auth_scheme.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,5 +8,5 @@ class AuthenticationScheme(Enum): - Bearer = "Bearer" - HMAC_SHA256 = "HMAC-SHA256" + Bearer = 'Bearer' + HMAC_SHA256 = 'HMAC-SHA256' diff --git a/src/adcp/types/generated_poc/enums/available_metric.py b/src/adcp/types/generated_poc/enums/available_metric.py index bcb762b4..0aed5f9d 100644 --- a/src/adcp/types/generated_poc/enums/available_metric.py +++ b/src/adcp/types/generated_poc/enums/available_metric.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/available_metric.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,25 +8,25 @@ class AvailableMetric(Enum): - impressions = "impressions" - spend = "spend" - clicks = "clicks" - ctr = "ctr" - video_completions = "video_completions" - completion_rate = "completion_rate" - conversions = "conversions" - conversion_value = "conversion_value" - roas = "roas" - cost_per_acquisition = "cost_per_acquisition" - new_to_brand_rate = "new_to_brand_rate" - viewability = "viewability" - engagement_rate = "engagement_rate" - views = "views" - completed_views = "completed_views" - leads = "leads" - reach = "reach" - frequency = "frequency" - grps = "grps" - quartile_data = "quartile_data" - dooh_metrics = "dooh_metrics" - cost_per_click = "cost_per_click" + impressions = 'impressions' + spend = 'spend' + clicks = 'clicks' + ctr = 'ctr' + video_completions = 'video_completions' + completion_rate = 'completion_rate' + conversions = 'conversions' + conversion_value = 'conversion_value' + roas = 'roas' + cost_per_acquisition = 'cost_per_acquisition' + new_to_brand_rate = 'new_to_brand_rate' + viewability = 'viewability' + engagement_rate = 'engagement_rate' + views = 'views' + completed_views = 'completed_views' + leads = 'leads' + reach = 'reach' + frequency = 'frequency' + grps = 'grps' + quartile_data = 'quartile_data' + dooh_metrics = 'dooh_metrics' + cost_per_click = 'cost_per_click' diff --git a/src/adcp/types/generated_poc/enums/catalog_action.py b/src/adcp/types/generated_poc/enums/catalog_action.py index 7f31711f..3895d8bf 100644 --- a/src/adcp/types/generated_poc/enums/catalog_action.py +++ b/src/adcp/types/generated_poc/enums/catalog_action.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/catalog_action.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,8 +8,8 @@ class CatalogAction(Enum): - created = "created" - updated = "updated" - unchanged = "unchanged" - failed = "failed" - deleted = "deleted" + created = 'created' + updated = 'updated' + unchanged = 'unchanged' + failed = 'failed' + deleted = 'deleted' diff --git a/src/adcp/types/generated_poc/enums/catalog_item_status.py b/src/adcp/types/generated_poc/enums/catalog_item_status.py index b917f57a..26a74ce8 100644 --- a/src/adcp/types/generated_poc/enums/catalog_item_status.py +++ b/src/adcp/types/generated_poc/enums/catalog_item_status.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/catalog_item_status.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,7 +8,7 @@ class CatalogItemStatus(Enum): - approved = "approved" - pending = "pending" - rejected = "rejected" - warning = "warning" + approved = 'approved' + pending = 'pending' + rejected = 'rejected' + warning = 'warning' diff --git a/src/adcp/types/generated_poc/enums/catalog_type.py b/src/adcp/types/generated_poc/enums/catalog_type.py index efc76377..3857263d 100644 --- a/src/adcp/types/generated_poc/enums/catalog_type.py +++ b/src/adcp/types/generated_poc/enums/catalog_type.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/catalog_type.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,16 +8,16 @@ class CatalogType(Enum): - offering = "offering" - product = "product" - inventory = "inventory" - store = "store" - promotion = "promotion" - hotel = "hotel" - flight = "flight" - job = "job" - vehicle = "vehicle" - real_estate = "real_estate" - education = "education" - destination = "destination" - app = "app" + offering = 'offering' + product = 'product' + inventory = 'inventory' + store = 'store' + promotion = 'promotion' + hotel = 'hotel' + flight = 'flight' + job = 'job' + vehicle = 'vehicle' + real_estate = 'real_estate' + education = 'education' + destination = 'destination' + app = 'app' diff --git a/src/adcp/types/generated_poc/enums/channels.py b/src/adcp/types/generated_poc/enums/channels.py index 6e61bf01..77fd699f 100644 --- a/src/adcp/types/generated_poc/enums/channels.py +++ b/src/adcp/types/generated_poc/enums/channels.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/channels.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,22 +8,22 @@ class MediaChannel(Enum): - display = "display" - olv = "olv" - social = "social" - search = "search" - ctv = "ctv" - linear_tv = "linear_tv" - radio = "radio" - streaming_audio = "streaming_audio" - podcast = "podcast" - dooh = "dooh" - ooh = "ooh" - print = "print" - cinema = "cinema" - email = "email" - gaming = "gaming" - retail_media = "retail_media" - influencer = "influencer" - affiliate = "affiliate" - product_placement = "product_placement" + display = 'display' + olv = 'olv' + social = 'social' + search = 'search' + ctv = 'ctv' + linear_tv = 'linear_tv' + radio = 'radio' + streaming_audio = 'streaming_audio' + podcast = 'podcast' + dooh = 'dooh' + ooh = 'ooh' + print = 'print' + cinema = 'cinema' + email = 'email' + gaming = 'gaming' + retail_media = 'retail_media' + influencer = 'influencer' + affiliate = 'affiliate' + product_placement = 'product_placement' diff --git a/src/adcp/types/generated_poc/enums/co_branding_requirement.py b/src/adcp/types/generated_poc/enums/co_branding_requirement.py index e43be9ac..3d5989d6 100644 --- a/src/adcp/types/generated_poc/enums/co_branding_requirement.py +++ b/src/adcp/types/generated_poc/enums/co_branding_requirement.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/co_branding_requirement.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,6 +8,6 @@ class CoBrandingRequirement(Enum): - required = "required" - optional = "optional" - none = "none" + required = 'required' + optional = 'optional' + none = 'none' diff --git a/src/adcp/types/generated_poc/enums/content_id_type.py b/src/adcp/types/generated_poc/enums/content_id_type.py index 8fcf3001..9abb1194 100644 --- a/src/adcp/types/generated_poc/enums/content_id_type.py +++ b/src/adcp/types/generated_poc/enums/content_id_type.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/content_id_type.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,15 +8,15 @@ class ContentIdType(Enum): - sku = "sku" - gtin = "gtin" - offering_id = "offering_id" - job_id = "job_id" - hotel_id = "hotel_id" - flight_id = "flight_id" - vehicle_id = "vehicle_id" - listing_id = "listing_id" - store_id = "store_id" - program_id = "program_id" - destination_id = "destination_id" - app_id = "app_id" + sku = 'sku' + gtin = 'gtin' + offering_id = 'offering_id' + job_id = 'job_id' + hotel_id = 'hotel_id' + flight_id = 'flight_id' + vehicle_id = 'vehicle_id' + listing_id = 'listing_id' + store_id = 'store_id' + program_id = 'program_id' + destination_id = 'destination_id' + app_id = 'app_id' diff --git a/src/adcp/types/generated_poc/enums/creative_action.py b/src/adcp/types/generated_poc/enums/creative_action.py index c08e37c4..e1026843 100644 --- a/src/adcp/types/generated_poc/enums/creative_action.py +++ b/src/adcp/types/generated_poc/enums/creative_action.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/creative_action.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,8 +8,8 @@ class CreativeAction(Enum): - created = "created" - updated = "updated" - unchanged = "unchanged" - failed = "failed" - deleted = "deleted" + created = 'created' + updated = 'updated' + unchanged = 'unchanged' + failed = 'failed' + deleted = 'deleted' diff --git a/src/adcp/types/generated_poc/enums/creative_agent_capability.py b/src/adcp/types/generated_poc/enums/creative_agent_capability.py index a9fd323b..053cc4b5 100644 --- a/src/adcp/types/generated_poc/enums/creative_agent_capability.py +++ b/src/adcp/types/generated_poc/enums/creative_agent_capability.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/creative_agent_capability.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,8 +8,8 @@ class CreativeAgentCapability(Enum): - validation = "validation" - assembly = "assembly" - generation = "generation" - preview = "preview" - delivery = "delivery" + validation = 'validation' + assembly = 'assembly' + generation = 'generation' + preview = 'preview' + delivery = 'delivery' diff --git a/src/adcp/types/generated_poc/enums/creative_approval_status.py b/src/adcp/types/generated_poc/enums/creative_approval_status.py index e0f8db82..06d2a88a 100644 --- a/src/adcp/types/generated_poc/enums/creative_approval_status.py +++ b/src/adcp/types/generated_poc/enums/creative_approval_status.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/creative_approval_status.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,6 +8,6 @@ class CreativeApprovalStatus(Enum): - pending_review = "pending_review" - approved = "approved" - rejected = "rejected" + pending_review = 'pending_review' + approved = 'approved' + rejected = 'rejected' diff --git a/src/adcp/types/generated_poc/enums/creative_sort_field.py b/src/adcp/types/generated_poc/enums/creative_sort_field.py index 8e3124ee..3fa73219 100644 --- a/src/adcp/types/generated_poc/enums/creative_sort_field.py +++ b/src/adcp/types/generated_poc/enums/creative_sort_field.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/creative_sort_field.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,9 +8,9 @@ class CreativeSortField(Enum): - created_date = "created_date" - updated_date = "updated_date" - name = "name" - status = "status" - assignment_count = "assignment_count" - performance_score = "performance_score" + created_date = 'created_date' + updated_date = 'updated_date' + name = 'name' + status = 'status' + assignment_count = 'assignment_count' + performance_score = 'performance_score' diff --git a/src/adcp/types/generated_poc/enums/creative_status.py b/src/adcp/types/generated_poc/enums/creative_status.py index 37d538f4..d0f1399a 100644 --- a/src/adcp/types/generated_poc/enums/creative_status.py +++ b/src/adcp/types/generated_poc/enums/creative_status.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/creative_status.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,8 +8,8 @@ class CreativeStatus(Enum): - processing = "processing" - approved = "approved" - rejected = "rejected" - pending_review = "pending_review" - archived = "archived" + processing = 'processing' + approved = 'approved' + rejected = 'rejected' + pending_review = 'pending_review' + archived = 'archived' diff --git a/src/adcp/types/generated_poc/enums/daast_tracking_event.py b/src/adcp/types/generated_poc/enums/daast_tracking_event.py index 84467b26..bed0c2f4 100644 --- a/src/adcp/types/generated_poc/enums/daast_tracking_event.py +++ b/src/adcp/types/generated_poc/enums/daast_tracking_event.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/daast_tracking_event.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,14 +8,14 @@ class DaastTrackingEvent(Enum): - start = "start" - firstQuartile = "firstQuartile" - midpoint = "midpoint" - thirdQuartile = "thirdQuartile" - complete = "complete" - impression = "impression" - pause = "pause" - resume = "resume" - skip = "skip" - mute = "mute" - unmute = "unmute" + start = 'start' + firstQuartile = 'firstQuartile' + midpoint = 'midpoint' + thirdQuartile = 'thirdQuartile' + complete = 'complete' + impression = 'impression' + pause = 'pause' + resume = 'resume' + skip = 'skip' + mute = 'mute' + unmute = 'unmute' diff --git a/src/adcp/types/generated_poc/enums/daast_version.py b/src/adcp/types/generated_poc/enums/daast_version.py index df43e4c3..0310de1a 100644 --- a/src/adcp/types/generated_poc/enums/daast_version.py +++ b/src/adcp/types/generated_poc/enums/daast_version.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/daast_version.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,5 +8,5 @@ class DaastVersion(Enum): - field_1_0 = "1.0" - field_1_1 = "1.1" + field_1_0 = '1.0' + field_1_1 = '1.1' diff --git a/src/adcp/types/generated_poc/enums/day_of_week.py b/src/adcp/types/generated_poc/enums/day_of_week.py index 4c80ea54..00fdb9d4 100644 --- a/src/adcp/types/generated_poc/enums/day_of_week.py +++ b/src/adcp/types/generated_poc/enums/day_of_week.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/day_of_week.json -# timestamp: 2026-02-12T12:00:44+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,10 +8,10 @@ class DayOfWeek(Enum): - monday = "monday" - tuesday = "tuesday" - wednesday = "wednesday" - thursday = "thursday" - friday = "friday" - saturday = "saturday" - sunday = "sunday" + monday = 'monday' + tuesday = 'tuesday' + wednesday = 'wednesday' + thursday = 'thursday' + friday = 'friday' + saturday = 'saturday' + sunday = 'sunday' diff --git a/src/adcp/types/generated_poc/enums/delivery_type.py b/src/adcp/types/generated_poc/enums/delivery_type.py index 0dfe5b3d..8d695a1a 100644 --- a/src/adcp/types/generated_poc/enums/delivery_type.py +++ b/src/adcp/types/generated_poc/enums/delivery_type.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/delivery_type.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,5 +8,5 @@ class DeliveryType(Enum): - guaranteed = "guaranteed" - non_guaranteed = "non_guaranteed" + guaranteed = 'guaranteed' + non_guaranteed = 'non_guaranteed' diff --git a/src/adcp/types/generated_poc/enums/demographic_system.py b/src/adcp/types/generated_poc/enums/demographic_system.py index e8102d67..3657468b 100644 --- a/src/adcp/types/generated_poc/enums/demographic_system.py +++ b/src/adcp/types/generated_poc/enums/demographic_system.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/demographic_system.json -# timestamp: 2026-02-12T12:00:44+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,9 +8,9 @@ class DemographicSystem(Enum): - nielsen = "nielsen" - barb = "barb" - agf = "agf" - oztam = "oztam" - mediametrie = "mediametrie" - custom = "custom" + nielsen = 'nielsen' + barb = 'barb' + agf = 'agf' + oztam = 'oztam' + mediametrie = 'mediametrie' + custom = 'custom' diff --git a/src/adcp/types/generated_poc/enums/device_platform.py b/src/adcp/types/generated_poc/enums/device_platform.py index 2f95dab0..04a3471b 100644 --- a/src/adcp/types/generated_poc/enums/device_platform.py +++ b/src/adcp/types/generated_poc/enums/device_platform.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/device_platform.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,15 +8,15 @@ class DevicePlatform(Enum): - ios = "ios" - android = "android" - windows = "windows" - macos = "macos" - linux = "linux" - chromeos = "chromeos" - tvos = "tvos" - tizen = "tizen" - webos = "webos" - fire_os = "fire_os" - roku_os = "roku_os" - unknown = "unknown" + ios = 'ios' + android = 'android' + windows = 'windows' + macos = 'macos' + linux = 'linux' + chromeos = 'chromeos' + tvos = 'tvos' + tizen = 'tizen' + webos = 'webos' + fire_os = 'fire_os' + roku_os = 'roku_os' + unknown = 'unknown' diff --git a/src/adcp/types/generated_poc/enums/dimension_unit.py b/src/adcp/types/generated_poc/enums/dimension_unit.py index 6cc186c2..48bcbb14 100644 --- a/src/adcp/types/generated_poc/enums/dimension_unit.py +++ b/src/adcp/types/generated_poc/enums/dimension_unit.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/dimension_unit.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,7 +8,7 @@ class DimensionUnit(Enum): - px = "px" - dp = "dp" - inches = "inches" - cm = "cm" + px = 'px' + dp = 'dp' + inches = 'inches' + cm = 'cm' diff --git a/src/adcp/types/generated_poc/enums/distance_unit.py b/src/adcp/types/generated_poc/enums/distance_unit.py index ecdfb1c1..d0c96f98 100644 --- a/src/adcp/types/generated_poc/enums/distance_unit.py +++ b/src/adcp/types/generated_poc/enums/distance_unit.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/distance_unit.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,6 +8,6 @@ class DistanceUnit(Enum): - km = "km" - mi = "mi" - m = "m" + km = 'km' + mi = 'mi' + m = 'm' diff --git a/src/adcp/types/generated_poc/enums/event_type.py b/src/adcp/types/generated_poc/enums/event_type.py index 8690f2d8..274466e1 100644 --- a/src/adcp/types/generated_poc/enums/event_type.py +++ b/src/adcp/types/generated_poc/enums/event_type.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/event_type.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,31 +8,31 @@ class EventType(Enum): - page_view = "page_view" - view_content = "view_content" - select_content = "select_content" - select_item = "select_item" - search = "search" - share = "share" - add_to_cart = "add_to_cart" - remove_from_cart = "remove_from_cart" - viewed_cart = "viewed_cart" - add_to_wishlist = "add_to_wishlist" - initiate_checkout = "initiate_checkout" - add_payment_info = "add_payment_info" - purchase = "purchase" - refund = "refund" - lead = "lead" - qualify_lead = "qualify_lead" - close_convert_lead = "close_convert_lead" - disqualify_lead = "disqualify_lead" - complete_registration = "complete_registration" - subscribe = "subscribe" - start_trial = "start_trial" - app_install = "app_install" - app_launch = "app_launch" - contact = "contact" - schedule = "schedule" - donate = "donate" - submit_application = "submit_application" - custom = "custom" + page_view = 'page_view' + view_content = 'view_content' + select_content = 'select_content' + select_item = 'select_item' + search = 'search' + share = 'share' + add_to_cart = 'add_to_cart' + remove_from_cart = 'remove_from_cart' + viewed_cart = 'viewed_cart' + add_to_wishlist = 'add_to_wishlist' + initiate_checkout = 'initiate_checkout' + add_payment_info = 'add_payment_info' + purchase = 'purchase' + refund = 'refund' + lead = 'lead' + qualify_lead = 'qualify_lead' + close_convert_lead = 'close_convert_lead' + disqualify_lead = 'disqualify_lead' + complete_registration = 'complete_registration' + subscribe = 'subscribe' + start_trial = 'start_trial' + app_install = 'app_install' + app_launch = 'app_launch' + contact = 'contact' + schedule = 'schedule' + donate = 'donate' + submit_application = 'submit_application' + custom = 'custom' diff --git a/src/adcp/types/generated_poc/enums/feed_format.py b/src/adcp/types/generated_poc/enums/feed_format.py index 80f48ba1..f768e3fd 100644 --- a/src/adcp/types/generated_poc/enums/feed_format.py +++ b/src/adcp/types/generated_poc/enums/feed_format.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/feed_format.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,8 +8,8 @@ class FeedFormat(Enum): - google_merchant_center = "google_merchant_center" - facebook_catalog = "facebook_catalog" - shopify = "shopify" - linkedin_jobs = "linkedin_jobs" - custom = "custom" + google_merchant_center = 'google_merchant_center' + facebook_catalog = 'facebook_catalog' + shopify = 'shopify' + linkedin_jobs = 'linkedin_jobs' + custom = 'custom' diff --git a/src/adcp/types/generated_poc/enums/feedback_source.py b/src/adcp/types/generated_poc/enums/feedback_source.py index 57785f27..496779b7 100644 --- a/src/adcp/types/generated_poc/enums/feedback_source.py +++ b/src/adcp/types/generated_poc/enums/feedback_source.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/feedback_source.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,7 +8,7 @@ class FeedbackSource(Enum): - buyer_attribution = "buyer_attribution" - third_party_measurement = "third_party_measurement" - platform_analytics = "platform_analytics" - verification_partner = "verification_partner" + buyer_attribution = 'buyer_attribution' + third_party_measurement = 'third_party_measurement' + platform_analytics = 'platform_analytics' + verification_partner = 'verification_partner' diff --git a/src/adcp/types/generated_poc/enums/forecast_method.py b/src/adcp/types/generated_poc/enums/forecast_method.py index a62f6b2a..fcb30442 100644 --- a/src/adcp/types/generated_poc/enums/forecast_method.py +++ b/src/adcp/types/generated_poc/enums/forecast_method.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/forecast_method.json -# timestamp: 2026-02-12T12:00:44+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,6 +8,6 @@ class ForecastMethod(Enum): - estimate = "estimate" - modeled = "modeled" - guaranteed = "guaranteed" + estimate = 'estimate' + modeled = 'modeled' + guaranteed = 'guaranteed' diff --git a/src/adcp/types/generated_poc/enums/forecast_range_unit.py b/src/adcp/types/generated_poc/enums/forecast_range_unit.py index a1bade28..cfc50152 100644 --- a/src/adcp/types/generated_poc/enums/forecast_range_unit.py +++ b/src/adcp/types/generated_poc/enums/forecast_range_unit.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/forecast_range_unit.json -# timestamp: 2026-02-12T12:00:44+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,9 +8,9 @@ class ForecastRangeUnit(Enum): - spend = "spend" - reach_freq = "reach_freq" - weekly = "weekly" - daily = "daily" - clicks = "clicks" - conversions = "conversions" + spend = 'spend' + reach_freq = 'reach_freq' + weekly = 'weekly' + daily = 'daily' + clicks = 'clicks' + conversions = 'conversions' diff --git a/src/adcp/types/generated_poc/enums/forecastable_metric.py b/src/adcp/types/generated_poc/enums/forecastable_metric.py index 85e02371..a8c70edd 100644 --- a/src/adcp/types/generated_poc/enums/forecastable_metric.py +++ b/src/adcp/types/generated_poc/enums/forecastable_metric.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/forecastable_metric.json -# timestamp: 2026-02-12T12:00:44+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,12 +8,12 @@ class ForecastableMetric(Enum): - audience_size = "audience_size" - reach = "reach" - frequency = "frequency" - impressions = "impressions" - clicks = "clicks" - spend = "spend" - views = "views" - completed_views = "completed_views" - grps = "grps" + audience_size = 'audience_size' + reach = 'reach' + frequency = 'frequency' + impressions = 'impressions' + clicks = 'clicks' + spend = 'spend' + views = 'views' + completed_views = 'completed_views' + grps = 'grps' diff --git a/src/adcp/types/generated_poc/enums/format_category.py b/src/adcp/types/generated_poc/enums/format_category.py index fca3b1ef..2f0ac154 100644 --- a/src/adcp/types/generated_poc/enums/format_category.py +++ b/src/adcp/types/generated_poc/enums/format_category.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/format_category.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,10 +8,10 @@ class FormatCategory(Enum): - audio = "audio" - video = "video" - display = "display" - native = "native" - dooh = "dooh" - rich_media = "rich_media" - universal = "universal" + audio = 'audio' + video = 'video' + display = 'display' + native = 'native' + dooh = 'dooh' + rich_media = 'rich_media' + universal = 'universal' diff --git a/src/adcp/types/generated_poc/enums/format_id_parameter.py b/src/adcp/types/generated_poc/enums/format_id_parameter.py index 224a3b8d..69ae14af 100644 --- a/src/adcp/types/generated_poc/enums/format_id_parameter.py +++ b/src/adcp/types/generated_poc/enums/format_id_parameter.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/format_id_parameter.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,5 +8,5 @@ class FormatIdParameter(Enum): - dimensions = "dimensions" - duration = "duration" + dimensions = 'dimensions' + duration = 'duration' diff --git a/src/adcp/types/generated_poc/enums/frequency_cap_scope.py b/src/adcp/types/generated_poc/enums/frequency_cap_scope.py index f0bd4a55..b701b1f1 100644 --- a/src/adcp/types/generated_poc/enums/frequency_cap_scope.py +++ b/src/adcp/types/generated_poc/enums/frequency_cap_scope.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/frequency_cap_scope.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -9,8 +9,8 @@ from pydantic import Field, RootModel -class FrequencyCapScope(RootModel[Literal["package"]]): +class FrequencyCapScope(RootModel[Literal['package']]): root: Annotated[ - Literal["package"], - Field(description="Scope for frequency cap application", title="Frequency Cap Scope"), + Literal['package'], + Field(description='Scope for frequency cap application', title='Frequency Cap Scope'), ] diff --git a/src/adcp/types/generated_poc/enums/geo_level.py b/src/adcp/types/generated_poc/enums/geo_level.py index 9c967f6e..b5878792 100644 --- a/src/adcp/types/generated_poc/enums/geo_level.py +++ b/src/adcp/types/generated_poc/enums/geo_level.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/geo_level.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,7 +8,7 @@ class GeographicTargetingLevel(Enum): - country = "country" - region = "region" - metro = "metro" - postal_area = "postal_area" + country = 'country' + region = 'region' + metro = 'metro' + postal_area = 'postal_area' diff --git a/src/adcp/types/generated_poc/enums/history_entry_type.py b/src/adcp/types/generated_poc/enums/history_entry_type.py index 3237ee31..c331043a 100644 --- a/src/adcp/types/generated_poc/enums/history_entry_type.py +++ b/src/adcp/types/generated_poc/enums/history_entry_type.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/history_entry_type.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,5 +8,5 @@ class HistoryEntryType(Enum): - request = "request" - response = "response" + request = 'request' + response = 'response' diff --git a/src/adcp/types/generated_poc/enums/http_method.py b/src/adcp/types/generated_poc/enums/http_method.py index f1d1c590..9ad42bcb 100644 --- a/src/adcp/types/generated_poc/enums/http_method.py +++ b/src/adcp/types/generated_poc/enums/http_method.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/http_method.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,5 +8,5 @@ class HttpMethod(Enum): - GET = "GET" - POST = "POST" + GET = 'GET' + POST = 'POST' diff --git a/src/adcp/types/generated_poc/enums/identifier_types.py b/src/adcp/types/generated_poc/enums/identifier_types.py index 75c27749..bbda5f30 100644 --- a/src/adcp/types/generated_poc/enums/identifier_types.py +++ b/src/adcp/types/generated_poc/enums/identifier_types.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/identifier_types.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,22 +8,22 @@ class PropertyIdentifierTypes(Enum): - domain = "domain" - subdomain = "subdomain" - network_id = "network_id" - ios_bundle = "ios_bundle" - android_package = "android_package" - apple_app_store_id = "apple_app_store_id" - google_play_id = "google_play_id" - roku_store_id = "roku_store_id" - fire_tv_asin = "fire_tv_asin" - samsung_app_id = "samsung_app_id" - apple_tv_bundle = "apple_tv_bundle" - bundle_id = "bundle_id" - venue_id = "venue_id" - screen_id = "screen_id" - openooh_venue_type = "openooh_venue_type" - rss_url = "rss_url" - apple_podcast_id = "apple_podcast_id" - spotify_show_id = "spotify_show_id" - podcast_guid = "podcast_guid" + domain = 'domain' + subdomain = 'subdomain' + network_id = 'network_id' + ios_bundle = 'ios_bundle' + android_package = 'android_package' + apple_app_store_id = 'apple_app_store_id' + google_play_id = 'google_play_id' + roku_store_id = 'roku_store_id' + fire_tv_asin = 'fire_tv_asin' + samsung_app_id = 'samsung_app_id' + apple_tv_bundle = 'apple_tv_bundle' + bundle_id = 'bundle_id' + venue_id = 'venue_id' + screen_id = 'screen_id' + openooh_venue_type = 'openooh_venue_type' + rss_url = 'rss_url' + apple_podcast_id = 'apple_podcast_id' + spotify_show_id = 'spotify_show_id' + podcast_guid = 'podcast_guid' diff --git a/src/adcp/types/generated_poc/enums/javascript_module_type.py b/src/adcp/types/generated_poc/enums/javascript_module_type.py index 92e2fe86..df624dd9 100644 --- a/src/adcp/types/generated_poc/enums/javascript_module_type.py +++ b/src/adcp/types/generated_poc/enums/javascript_module_type.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/javascript_module_type.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,6 +8,6 @@ class JavascriptModuleType(Enum): - esm = "esm" - commonjs = "commonjs" - script = "script" + esm = 'esm' + commonjs = 'commonjs' + script = 'script' diff --git a/src/adcp/types/generated_poc/enums/landing_page_requirement.py b/src/adcp/types/generated_poc/enums/landing_page_requirement.py index e97976f6..3651c2a1 100644 --- a/src/adcp/types/generated_poc/enums/landing_page_requirement.py +++ b/src/adcp/types/generated_poc/enums/landing_page_requirement.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/landing_page_requirement.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,6 +8,6 @@ class LandingPageRequirement(Enum): - any = "any" - retailer_site_only = "retailer_site_only" - must_include_retailer = "must_include_retailer" + any = 'any' + retailer_site_only = 'retailer_site_only' + must_include_retailer = 'must_include_retailer' diff --git a/src/adcp/types/generated_poc/enums/markdown_flavor.py b/src/adcp/types/generated_poc/enums/markdown_flavor.py index bd016da8..b7bdd8d5 100644 --- a/src/adcp/types/generated_poc/enums/markdown_flavor.py +++ b/src/adcp/types/generated_poc/enums/markdown_flavor.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/markdown_flavor.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,5 +8,5 @@ class MarkdownFlavor(Enum): - commonmark = "commonmark" - gfm = "gfm" + commonmark = 'commonmark' + gfm = 'gfm' diff --git a/src/adcp/types/generated_poc/enums/media_buy_status.py b/src/adcp/types/generated_poc/enums/media_buy_status.py index 79c58917..2f46c06d 100644 --- a/src/adcp/types/generated_poc/enums/media_buy_status.py +++ b/src/adcp/types/generated_poc/enums/media_buy_status.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/media_buy_status.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,7 +8,7 @@ class MediaBuyStatus(Enum): - pending_activation = "pending_activation" - active = "active" - paused = "paused" - completed = "completed" + pending_activation = 'pending_activation' + active = 'active' + paused = 'paused' + completed = 'completed' diff --git a/src/adcp/types/generated_poc/enums/metric_type.py b/src/adcp/types/generated_poc/enums/metric_type.py index b78b878b..3e058376 100644 --- a/src/adcp/types/generated_poc/enums/metric_type.py +++ b/src/adcp/types/generated_poc/enums/metric_type.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/metric_type.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,11 +8,11 @@ class MetricType(Enum): - overall_performance = "overall_performance" - conversion_rate = "conversion_rate" - brand_lift = "brand_lift" - click_through_rate = "click_through_rate" - completion_rate = "completion_rate" - viewability = "viewability" - brand_safety = "brand_safety" - cost_efficiency = "cost_efficiency" + overall_performance = 'overall_performance' + conversion_rate = 'conversion_rate' + brand_lift = 'brand_lift' + click_through_rate = 'click_through_rate' + completion_rate = 'completion_rate' + viewability = 'viewability' + brand_safety = 'brand_safety' + cost_efficiency = 'cost_efficiency' diff --git a/src/adcp/types/generated_poc/enums/metro_system.py b/src/adcp/types/generated_poc/enums/metro_system.py index 38dcffe6..6e471294 100644 --- a/src/adcp/types/generated_poc/enums/metro_system.py +++ b/src/adcp/types/generated_poc/enums/metro_system.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/metro_system.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,8 +8,8 @@ class MetroAreaSystem(Enum): - nielsen_dma = "nielsen_dma" - uk_itl1 = "uk_itl1" - uk_itl2 = "uk_itl2" - eurostat_nuts2 = "eurostat_nuts2" - custom = "custom" + nielsen_dma = 'nielsen_dma' + uk_itl1 = 'uk_itl1' + uk_itl2 = 'uk_itl2' + eurostat_nuts2 = 'eurostat_nuts2' + custom = 'custom' diff --git a/src/adcp/types/generated_poc/enums/notification_type.py b/src/adcp/types/generated_poc/enums/notification_type.py index 0b61f812..3f657063 100644 --- a/src/adcp/types/generated_poc/enums/notification_type.py +++ b/src/adcp/types/generated_poc/enums/notification_type.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/notification_type.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,7 +8,7 @@ class NotificationType(Enum): - scheduled = "scheduled" - final = "final" - delayed = "delayed" - adjusted = "adjusted" + scheduled = 'scheduled' + final = 'final' + delayed = 'delayed' + adjusted = 'adjusted' diff --git a/src/adcp/types/generated_poc/enums/pacing.py b/src/adcp/types/generated_poc/enums/pacing.py index 1aa5ae65..c3f8c1d3 100644 --- a/src/adcp/types/generated_poc/enums/pacing.py +++ b/src/adcp/types/generated_poc/enums/pacing.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/pacing.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,6 +8,6 @@ class Pacing(Enum): - even = "even" - asap = "asap" - front_loaded = "front_loaded" + even = 'even' + asap = 'asap' + front_loaded = 'front_loaded' diff --git a/src/adcp/types/generated_poc/enums/postal_system.py b/src/adcp/types/generated_poc/enums/postal_system.py index f0b689c1..13a07bcf 100644 --- a/src/adcp/types/generated_poc/enums/postal_system.py +++ b/src/adcp/types/generated_poc/enums/postal_system.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/postal_system.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,12 +8,12 @@ class PostalCodeSystem(Enum): - us_zip = "us_zip" - us_zip_plus_four = "us_zip_plus_four" - gb_outward = "gb_outward" - gb_full = "gb_full" - ca_fsa = "ca_fsa" - ca_full = "ca_full" - de_plz = "de_plz" - fr_code_postal = "fr_code_postal" - au_postcode = "au_postcode" + us_zip = 'us_zip' + us_zip_plus_four = 'us_zip_plus_four' + gb_outward = 'gb_outward' + gb_full = 'gb_full' + ca_fsa = 'ca_fsa' + ca_full = 'ca_full' + de_plz = 'de_plz' + fr_code_postal = 'fr_code_postal' + au_postcode = 'au_postcode' diff --git a/src/adcp/types/generated_poc/enums/preview_output_format.py b/src/adcp/types/generated_poc/enums/preview_output_format.py index 503fbfb2..0824adaa 100644 --- a/src/adcp/types/generated_poc/enums/preview_output_format.py +++ b/src/adcp/types/generated_poc/enums/preview_output_format.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/preview_output_format.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,5 +8,5 @@ class PreviewOutputFormat(Enum): - url = "url" - html = "html" + url = 'url' + html = 'html' diff --git a/src/adcp/types/generated_poc/enums/pricing_model.py b/src/adcp/types/generated_poc/enums/pricing_model.py index d546275b..59263f2d 100644 --- a/src/adcp/types/generated_poc/enums/pricing_model.py +++ b/src/adcp/types/generated_poc/enums/pricing_model.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/pricing_model.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,12 +8,12 @@ class PricingModel(Enum): - cpm = "cpm" - vcpm = "vcpm" - cpc = "cpc" - cpcv = "cpcv" - cpv = "cpv" - cpp = "cpp" - cpa = "cpa" - flat_rate = "flat_rate" - time = "time" + cpm = 'cpm' + vcpm = 'vcpm' + cpc = 'cpc' + cpcv = 'cpcv' + cpv = 'cpv' + cpp = 'cpp' + cpa = 'cpa' + flat_rate = 'flat_rate' + time = 'time' diff --git a/src/adcp/types/generated_poc/enums/property_type.py b/src/adcp/types/generated_poc/enums/property_type.py index 3384face..32a2b742 100644 --- a/src/adcp/types/generated_poc/enums/property_type.py +++ b/src/adcp/types/generated_poc/enums/property_type.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/property_type.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,11 +8,11 @@ class PropertyType(Enum): - website = "website" - mobile_app = "mobile_app" - ctv_app = "ctv_app" - desktop_app = "desktop_app" - dooh = "dooh" - podcast = "podcast" - radio = "radio" - streaming_audio = "streaming_audio" + website = 'website' + mobile_app = 'mobile_app' + ctv_app = 'ctv_app' + desktop_app = 'desktop_app' + dooh = 'dooh' + podcast = 'podcast' + radio = 'radio' + streaming_audio = 'streaming_audio' diff --git a/src/adcp/types/generated_poc/enums/publisher_identifier_types.py b/src/adcp/types/generated_poc/enums/publisher_identifier_types.py index b8708eef..e730813f 100644 --- a/src/adcp/types/generated_poc/enums/publisher_identifier_types.py +++ b/src/adcp/types/generated_poc/enums/publisher_identifier_types.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/publisher_identifier_types.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,8 +8,8 @@ class PublisherIdentifierTypes(Enum): - tag_id = "tag_id" - duns = "duns" - lei = "lei" - seller_id = "seller_id" - gln = "gln" + tag_id = 'tag_id' + duns = 'duns' + lei = 'lei' + seller_id = 'seller_id' + gln = 'gln' diff --git a/src/adcp/types/generated_poc/enums/reach_unit.py b/src/adcp/types/generated_poc/enums/reach_unit.py index 304450e0..79920fe7 100644 --- a/src/adcp/types/generated_poc/enums/reach_unit.py +++ b/src/adcp/types/generated_poc/enums/reach_unit.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/reach_unit.json -# timestamp: 2026-02-12T12:00:44+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,9 +8,9 @@ class ReachUnit(Enum): - individuals = "individuals" - households = "households" - devices = "devices" - accounts = "accounts" - cookies = "cookies" - custom = "custom" + individuals = 'individuals' + households = 'households' + devices = 'devices' + accounts = 'accounts' + cookies = 'cookies' + custom = 'custom' diff --git a/src/adcp/types/generated_poc/enums/reporting_frequency.py b/src/adcp/types/generated_poc/enums/reporting_frequency.py index 5d641c02..44da9aad 100644 --- a/src/adcp/types/generated_poc/enums/reporting_frequency.py +++ b/src/adcp/types/generated_poc/enums/reporting_frequency.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/reporting_frequency.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,6 +8,6 @@ class ReportingFrequency(Enum): - hourly = "hourly" - daily = "daily" - monthly = "monthly" + hourly = 'hourly' + daily = 'daily' + monthly = 'monthly' diff --git a/src/adcp/types/generated_poc/enums/signal_catalog_type.py b/src/adcp/types/generated_poc/enums/signal_catalog_type.py index c3b0ed81..be626478 100644 --- a/src/adcp/types/generated_poc/enums/signal_catalog_type.py +++ b/src/adcp/types/generated_poc/enums/signal_catalog_type.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/signal_catalog_type.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,6 +8,6 @@ class SignalCatalogType(Enum): - marketplace = "marketplace" - custom = "custom" - owned = "owned" + marketplace = 'marketplace' + custom = 'custom' + owned = 'owned' diff --git a/src/adcp/types/generated_poc/enums/signal_source.py b/src/adcp/types/generated_poc/enums/signal_source.py index 6e5cffe2..d28a5464 100644 --- a/src/adcp/types/generated_poc/enums/signal_source.py +++ b/src/adcp/types/generated_poc/enums/signal_source.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/signal_source.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,5 +8,5 @@ class SignalSource(Enum): - catalog = "catalog" - agent = "agent" + catalog = 'catalog' + agent = 'agent' diff --git a/src/adcp/types/generated_poc/enums/signal_value_type.py b/src/adcp/types/generated_poc/enums/signal_value_type.py index 6d63fcef..add5c672 100644 --- a/src/adcp/types/generated_poc/enums/signal_value_type.py +++ b/src/adcp/types/generated_poc/enums/signal_value_type.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/signal_value_type.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,6 +8,6 @@ class SignalValueType(Enum): - binary = "binary" - categorical = "categorical" - numeric = "numeric" + binary = 'binary' + categorical = 'categorical' + numeric = 'numeric' diff --git a/src/adcp/types/generated_poc/enums/sort_direction.py b/src/adcp/types/generated_poc/enums/sort_direction.py index 1a9a79c2..f2ce028f 100644 --- a/src/adcp/types/generated_poc/enums/sort_direction.py +++ b/src/adcp/types/generated_poc/enums/sort_direction.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/sort_direction.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,5 +8,5 @@ class SortDirection(Enum): - asc = "asc" - desc = "desc" + asc = 'asc' + desc = 'desc' diff --git a/src/adcp/types/generated_poc/enums/task_status.py b/src/adcp/types/generated_poc/enums/task_status.py index 1c9c1e95..11b71a5b 100644 --- a/src/adcp/types/generated_poc/enums/task_status.py +++ b/src/adcp/types/generated_poc/enums/task_status.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/task_status.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,12 +8,12 @@ class TaskStatus(Enum): - submitted = "submitted" - working = "working" - input_required = "input-required" - completed = "completed" - canceled = "canceled" - failed = "failed" - rejected = "rejected" - auth_required = "auth-required" - unknown = "unknown" + submitted = 'submitted' + working = 'working' + input_required = 'input-required' + completed = 'completed' + canceled = 'canceled' + failed = 'failed' + rejected = 'rejected' + auth_required = 'auth-required' + unknown = 'unknown' diff --git a/src/adcp/types/generated_poc/enums/task_type.py b/src/adcp/types/generated_poc/enums/task_type.py index 726033f0..e69d440d 100644 --- a/src/adcp/types/generated_poc/enums/task_type.py +++ b/src/adcp/types/generated_poc/enums/task_type.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/task_type.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,19 +8,19 @@ class TaskType(Enum): - create_media_buy = "create_media_buy" - update_media_buy = "update_media_buy" - sync_creatives = "sync_creatives" - activate_signal = "activate_signal" - get_signals = "get_signals" - create_property_list = "create_property_list" - update_property_list = "update_property_list" - get_property_list = "get_property_list" - list_property_lists = "list_property_lists" - delete_property_list = "delete_property_list" - sync_accounts = "sync_accounts" - get_creative_delivery = "get_creative_delivery" - sync_event_sources = "sync_event_sources" - sync_audiences = "sync_audiences" - sync_catalogs = "sync_catalogs" - log_event = "log_event" + create_media_buy = 'create_media_buy' + update_media_buy = 'update_media_buy' + sync_creatives = 'sync_creatives' + activate_signal = 'activate_signal' + get_signals = 'get_signals' + create_property_list = 'create_property_list' + update_property_list = 'update_property_list' + get_property_list = 'get_property_list' + list_property_lists = 'list_property_lists' + delete_property_list = 'delete_property_list' + sync_accounts = 'sync_accounts' + get_creative_delivery = 'get_creative_delivery' + sync_event_sources = 'sync_event_sources' + sync_audiences = 'sync_audiences' + sync_catalogs = 'sync_catalogs' + log_event = 'log_event' diff --git a/src/adcp/types/generated_poc/enums/transport_mode.py b/src/adcp/types/generated_poc/enums/transport_mode.py index 135aae95..0f8cc6db 100644 --- a/src/adcp/types/generated_poc/enums/transport_mode.py +++ b/src/adcp/types/generated_poc/enums/transport_mode.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/transport_mode.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,7 +8,7 @@ class TransportMode(Enum): - walking = "walking" - cycling = "cycling" - driving = "driving" - public_transport = "public_transport" + walking = 'walking' + cycling = 'cycling' + driving = 'driving' + public_transport = 'public_transport' diff --git a/src/adcp/types/generated_poc/enums/uid_type.py b/src/adcp/types/generated_poc/enums/uid_type.py index c567f9b3..2409e728 100644 --- a/src/adcp/types/generated_poc/enums/uid_type.py +++ b/src/adcp/types/generated_poc/enums/uid_type.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/uid_type.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,11 +8,11 @@ class UidType(Enum): - rampid = "rampid" - id5 = "id5" - uid2 = "uid2" - euid = "euid" - pairid = "pairid" - external_id = "external_id" - maid = "maid" - other = "other" + rampid = 'rampid' + id5 = 'id5' + uid2 = 'uid2' + euid = 'euid' + pairid = 'pairid' + external_id = 'external_id' + maid = 'maid' + other = 'other' diff --git a/src/adcp/types/generated_poc/enums/universal_macro.py b/src/adcp/types/generated_poc/enums/universal_macro.py index 0d942381..44f98491 100644 --- a/src/adcp/types/generated_poc/enums/universal_macro.py +++ b/src/adcp/types/generated_poc/enums/universal_macro.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/universal_macro.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,71 +8,71 @@ class UniversalMacro(Enum): - MEDIA_BUY_ID = "MEDIA_BUY_ID" - PACKAGE_ID = "PACKAGE_ID" - CREATIVE_ID = "CREATIVE_ID" - CACHEBUSTER = "CACHEBUSTER" - TIMESTAMP = "TIMESTAMP" - CLICK_URL = "CLICK_URL" - GDPR = "GDPR" - GDPR_CONSENT = "GDPR_CONSENT" - US_PRIVACY = "US_PRIVACY" - GPP_STRING = "GPP_STRING" - GPP_SID = "GPP_SID" - IP_ADDRESS = "IP_ADDRESS" - LIMIT_AD_TRACKING = "LIMIT_AD_TRACKING" - DEVICE_TYPE = "DEVICE_TYPE" - OS = "OS" - OS_VERSION = "OS_VERSION" - DEVICE_MAKE = "DEVICE_MAKE" - DEVICE_MODEL = "DEVICE_MODEL" - USER_AGENT = "USER_AGENT" - APP_BUNDLE = "APP_BUNDLE" - APP_NAME = "APP_NAME" - COUNTRY = "COUNTRY" - REGION = "REGION" - CITY = "CITY" - ZIP = "ZIP" - DMA = "DMA" - LAT = "LAT" - LONG = "LONG" - DEVICE_ID = "DEVICE_ID" - DEVICE_ID_TYPE = "DEVICE_ID_TYPE" - DOMAIN = "DOMAIN" - PAGE_URL = "PAGE_URL" - REFERRER = "REFERRER" - KEYWORDS = "KEYWORDS" - PLACEMENT_ID = "PLACEMENT_ID" - FOLD_POSITION = "FOLD_POSITION" - AD_WIDTH = "AD_WIDTH" - AD_HEIGHT = "AD_HEIGHT" - VIDEO_ID = "VIDEO_ID" - VIDEO_TITLE = "VIDEO_TITLE" - VIDEO_DURATION = "VIDEO_DURATION" - VIDEO_CATEGORY = "VIDEO_CATEGORY" - CONTENT_GENRE = "CONTENT_GENRE" - CONTENT_RATING = "CONTENT_RATING" - PLAYER_WIDTH = "PLAYER_WIDTH" - PLAYER_HEIGHT = "PLAYER_HEIGHT" - POD_POSITION = "POD_POSITION" - POD_SIZE = "POD_SIZE" - AD_BREAK_ID = "AD_BREAK_ID" - STATION_ID = "STATION_ID" - SHOW_NAME = "SHOW_NAME" - EPISODE_ID = "EPISODE_ID" - AUDIO_DURATION = "AUDIO_DURATION" - AXEM = "AXEM" - CATALOG_ID = "CATALOG_ID" - SKU = "SKU" - GTIN = "GTIN" - OFFERING_ID = "OFFERING_ID" - JOB_ID = "JOB_ID" - HOTEL_ID = "HOTEL_ID" - FLIGHT_ID = "FLIGHT_ID" - VEHICLE_ID = "VEHICLE_ID" - LISTING_ID = "LISTING_ID" - STORE_ID = "STORE_ID" - PROGRAM_ID = "PROGRAM_ID" - DESTINATION_ID = "DESTINATION_ID" - CREATIVE_VARIANT_ID = "CREATIVE_VARIANT_ID" - APP_ITEM_ID = "APP_ITEM_ID" + MEDIA_BUY_ID = 'MEDIA_BUY_ID' + PACKAGE_ID = 'PACKAGE_ID' + CREATIVE_ID = 'CREATIVE_ID' + CACHEBUSTER = 'CACHEBUSTER' + TIMESTAMP = 'TIMESTAMP' + CLICK_URL = 'CLICK_URL' + GDPR = 'GDPR' + GDPR_CONSENT = 'GDPR_CONSENT' + US_PRIVACY = 'US_PRIVACY' + GPP_STRING = 'GPP_STRING' + GPP_SID = 'GPP_SID' + IP_ADDRESS = 'IP_ADDRESS' + LIMIT_AD_TRACKING = 'LIMIT_AD_TRACKING' + DEVICE_TYPE = 'DEVICE_TYPE' + OS = 'OS' + OS_VERSION = 'OS_VERSION' + DEVICE_MAKE = 'DEVICE_MAKE' + DEVICE_MODEL = 'DEVICE_MODEL' + USER_AGENT = 'USER_AGENT' + APP_BUNDLE = 'APP_BUNDLE' + APP_NAME = 'APP_NAME' + COUNTRY = 'COUNTRY' + REGION = 'REGION' + CITY = 'CITY' + ZIP = 'ZIP' + DMA = 'DMA' + LAT = 'LAT' + LONG = 'LONG' + DEVICE_ID = 'DEVICE_ID' + DEVICE_ID_TYPE = 'DEVICE_ID_TYPE' + DOMAIN = 'DOMAIN' + PAGE_URL = 'PAGE_URL' + REFERRER = 'REFERRER' + KEYWORDS = 'KEYWORDS' + PLACEMENT_ID = 'PLACEMENT_ID' + FOLD_POSITION = 'FOLD_POSITION' + AD_WIDTH = 'AD_WIDTH' + AD_HEIGHT = 'AD_HEIGHT' + VIDEO_ID = 'VIDEO_ID' + VIDEO_TITLE = 'VIDEO_TITLE' + VIDEO_DURATION = 'VIDEO_DURATION' + VIDEO_CATEGORY = 'VIDEO_CATEGORY' + CONTENT_GENRE = 'CONTENT_GENRE' + CONTENT_RATING = 'CONTENT_RATING' + PLAYER_WIDTH = 'PLAYER_WIDTH' + PLAYER_HEIGHT = 'PLAYER_HEIGHT' + POD_POSITION = 'POD_POSITION' + POD_SIZE = 'POD_SIZE' + AD_BREAK_ID = 'AD_BREAK_ID' + STATION_ID = 'STATION_ID' + SHOW_NAME = 'SHOW_NAME' + EPISODE_ID = 'EPISODE_ID' + AUDIO_DURATION = 'AUDIO_DURATION' + AXEM = 'AXEM' + CATALOG_ID = 'CATALOG_ID' + SKU = 'SKU' + GTIN = 'GTIN' + OFFERING_ID = 'OFFERING_ID' + JOB_ID = 'JOB_ID' + HOTEL_ID = 'HOTEL_ID' + FLIGHT_ID = 'FLIGHT_ID' + VEHICLE_ID = 'VEHICLE_ID' + LISTING_ID = 'LISTING_ID' + STORE_ID = 'STORE_ID' + PROGRAM_ID = 'PROGRAM_ID' + DESTINATION_ID = 'DESTINATION_ID' + CREATIVE_VARIANT_ID = 'CREATIVE_VARIANT_ID' + APP_ITEM_ID = 'APP_ITEM_ID' diff --git a/src/adcp/types/generated_poc/enums/update_frequency.py b/src/adcp/types/generated_poc/enums/update_frequency.py index 29a143f5..2c19c1c1 100644 --- a/src/adcp/types/generated_poc/enums/update_frequency.py +++ b/src/adcp/types/generated_poc/enums/update_frequency.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/update_frequency.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,7 +8,7 @@ class UpdateFrequency(Enum): - realtime = "realtime" - hourly = "hourly" - daily = "daily" - weekly = "weekly" + realtime = 'realtime' + hourly = 'hourly' + daily = 'daily' + weekly = 'weekly' diff --git a/src/adcp/types/generated_poc/enums/url_asset_type.py b/src/adcp/types/generated_poc/enums/url_asset_type.py index f667e99d..aa56ee49 100644 --- a/src/adcp/types/generated_poc/enums/url_asset_type.py +++ b/src/adcp/types/generated_poc/enums/url_asset_type.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/url_asset_type.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,6 +8,6 @@ class UrlAssetType(Enum): - clickthrough = "clickthrough" - tracker_pixel = "tracker_pixel" - tracker_script = "tracker_script" + clickthrough = 'clickthrough' + tracker_pixel = 'tracker_pixel' + tracker_script = 'tracker_script' diff --git a/src/adcp/types/generated_poc/enums/validation_mode.py b/src/adcp/types/generated_poc/enums/validation_mode.py index 7b8b9b01..dab29f71 100644 --- a/src/adcp/types/generated_poc/enums/validation_mode.py +++ b/src/adcp/types/generated_poc/enums/validation_mode.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/validation_mode.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,5 +8,5 @@ class ValidationMode(Enum): - strict = "strict" - lenient = "lenient" + strict = 'strict' + lenient = 'lenient' diff --git a/src/adcp/types/generated_poc/enums/vast_tracking_event.py b/src/adcp/types/generated_poc/enums/vast_tracking_event.py index d98c7bb6..bfad06ae 100644 --- a/src/adcp/types/generated_poc/enums/vast_tracking_event.py +++ b/src/adcp/types/generated_poc/enums/vast_tracking_event.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/vast_tracking_event.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,19 +8,19 @@ class VastTrackingEvent(Enum): - start = "start" - firstQuartile = "firstQuartile" - midpoint = "midpoint" - thirdQuartile = "thirdQuartile" - complete = "complete" - impression = "impression" - click = "click" - pause = "pause" - resume = "resume" - skip = "skip" - mute = "mute" - unmute = "unmute" - fullscreen = "fullscreen" - exitFullscreen = "exitFullscreen" - playerExpand = "playerExpand" - playerCollapse = "playerCollapse" + start = 'start' + firstQuartile = 'firstQuartile' + midpoint = 'midpoint' + thirdQuartile = 'thirdQuartile' + complete = 'complete' + impression = 'impression' + click = 'click' + pause = 'pause' + resume = 'resume' + skip = 'skip' + mute = 'mute' + unmute = 'unmute' + fullscreen = 'fullscreen' + exitFullscreen = 'exitFullscreen' + playerExpand = 'playerExpand' + playerCollapse = 'playerCollapse' diff --git a/src/adcp/types/generated_poc/enums/vast_version.py b/src/adcp/types/generated_poc/enums/vast_version.py index fcd95e9a..57e8499c 100644 --- a/src/adcp/types/generated_poc/enums/vast_version.py +++ b/src/adcp/types/generated_poc/enums/vast_version.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/vast_version.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,8 +8,8 @@ class VastVersion(Enum): - field_2_0 = "2.0" - field_3_0 = "3.0" - field_4_0 = "4.0" - field_4_1 = "4.1" - field_4_2 = "4.2" + field_2_0 = '2.0' + field_3_0 = '3.0' + field_4_0 = '4.0' + field_4_1 = '4.1' + field_4_2 = '4.2' diff --git a/src/adcp/types/generated_poc/enums/wcag_level.py b/src/adcp/types/generated_poc/enums/wcag_level.py index 098c5024..a2a5251e 100644 --- a/src/adcp/types/generated_poc/enums/wcag_level.py +++ b/src/adcp/types/generated_poc/enums/wcag_level.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/wcag_level.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,6 +8,6 @@ class WcagLevel(Enum): - A = "A" - AA = "AA" - AAA = "AAA" + A = 'A' + AA = 'AA' + AAA = 'AAA' diff --git a/src/adcp/types/generated_poc/enums/webhook_response_type.py b/src/adcp/types/generated_poc/enums/webhook_response_type.py index 3be651d7..17da0b1a 100644 --- a/src/adcp/types/generated_poc/enums/webhook_response_type.py +++ b/src/adcp/types/generated_poc/enums/webhook_response_type.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/webhook_response_type.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,7 +8,7 @@ class WebhookResponseType(Enum): - html = "html" - json = "json" - xml = "xml" - javascript = "javascript" + html = 'html' + json = 'json' + xml = 'xml' + javascript = 'javascript' diff --git a/src/adcp/types/generated_poc/enums/webhook_security_method.py b/src/adcp/types/generated_poc/enums/webhook_security_method.py index e1b4a3e1..413f6068 100644 --- a/src/adcp/types/generated_poc/enums/webhook_security_method.py +++ b/src/adcp/types/generated_poc/enums/webhook_security_method.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: enums/webhook_security_method.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -8,6 +8,6 @@ class WebhookSecurityMethod(Enum): - hmac_sha256 = "hmac_sha256" - api_key = "api_key" - none = "none" + hmac_sha256 = 'hmac_sha256' + api_key = 'api_key' + none = 'none' diff --git a/src/adcp/types/generated_poc/extensions/extension_meta.py b/src/adcp/types/generated_poc/extensions/extension_meta.py index 0103818b..5923600a 100644 --- a/src/adcp/types/generated_poc/extensions/extension_meta.py +++ b/src/adcp/types/generated_poc/extensions/extension_meta.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: extensions/extension_meta.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,39 +12,39 @@ class AdcpExtensionFileSchema(AdCPBaseModel): field_schema: Annotated[ - Literal["http://json-schema.org/draft-07/schema#"], Field(alias="$schema") + Literal['http://json-schema.org/draft-07/schema#'], Field(alias='$schema') ] additionalProperties: Annotated[ Any | None, - Field(description="Whether additional properties are allowed in the extension data"), + Field(description='Whether additional properties are allowed in the extension data'), ] = None - description: Annotated[str, Field(description="Description of what this extension provides")] + description: Annotated[str, Field(description='Description of what this extension provides')] docs_url: Annotated[ - AnyUrl | None, Field(description="URL to documentation for implementors of this extension") + AnyUrl | None, Field(description='URL to documentation for implementors of this extension') ] = None properties: Annotated[ dict[str, Any], - Field(description="Schema properties defining the structure of ext.{namespace} data"), + Field(description='Schema properties defining the structure of ext.{namespace} data'), ] required: Annotated[ - list[str] | None, Field(description="Required properties within the extension data") + list[str] | None, Field(description='Required properties within the extension data') ] = None - title: Annotated[str, Field(description="Human-readable title for the extension")] + title: Annotated[str, Field(description='Human-readable title for the extension')] type: Annotated[ - Literal["object"], - Field(description="Extensions must be objects (data within ext.{namespace})"), + Literal['object'], + Field(description='Extensions must be objects (data within ext.{namespace})'), ] valid_from: Annotated[ str, Field( description="Minimum AdCP version this extension is compatible with (e.g., '2.5'). Extension will be included in all versioned schema builds >= this version.", - pattern="^\\d+\\.\\d+$", + pattern='^\\d+\\.\\d+$', ), ] valid_until: Annotated[ str | None, Field( description="Last AdCP version this extension is compatible with (e.g., '3.0'). Omit if extension is still valid for current and future versions.", - pattern="^\\d+\\.\\d+$", + pattern='^\\d+\\.\\d+$', ), ] = None diff --git a/src/adcp/types/generated_poc/media_buy/build_creative_request.py b/src/adcp/types/generated_poc/media_buy/build_creative_request.py index 93ec6144..4bcd80cf 100644 --- a/src/adcp/types/generated_poc/media_buy/build_creative_request.py +++ b/src/adcp/types/generated_poc/media_buy/build_creative_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/build_creative_request.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -19,37 +19,37 @@ class BuildCreativeRequest(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) brand: Annotated[ brand_ref.BrandReference | None, Field( - description="Brand reference for creative generation. Resolved to full brand identity (colors, logos, tone) at execution time." + description='Brand reference for creative generation. Resolved to full brand identity (colors, logos, tone) at execution time.' ), ] = None context: context_1.ContextObject | None = None creative_brief: Annotated[ creative_brief_ref.CreativeBriefReference | None, Field( - description="Campaign-level creative brief with objective, audience, messaging, and reference assets. Can be an inline brief object or a URL to a hosted brief. Supplements the natural language message with structured creative direction." + description='Campaign-level creative brief with objective, audience, messaging, and reference assets. Can be an inline brief object or a URL to a hosted brief. Supplements the natural language message with structured creative direction.' ), ] = None creative_manifest: Annotated[ creative_manifest_1.CreativeManifest | None, Field( - description="Creative manifest to transform or generate from. For pure generation, this should include the target format_id and any required input assets. For transformation (e.g., resizing, reformatting), this is the complete creative to adapt." + description='Creative manifest to transform or generate from. For pure generation, this should include the target format_id and any required input assets. For transformation (e.g., resizing, reformatting), this is the complete creative to adapt.' ), ] = None ext: ext_1.ExtensionObject | None = None message: Annotated[ str | None, Field( - description="Natural language instructions for the transformation or generation. For pure generation, this is the creative brief. For transformation, this provides guidance on how to adapt the creative." + description='Natural language instructions for the transformation or generation. For pure generation, this is the creative brief. For transformation, this provides guidance on how to adapt the creative.' ), ] = None target_format_id: Annotated[ format_id.FormatId, Field( - description="Format ID to generate. The format definition specifies required input assets and output structure." + description='Format ID to generate. The format definition specifies required input assets and output structure.' ), ] diff --git a/src/adcp/types/generated_poc/media_buy/build_creative_response.py b/src/adcp/types/generated_poc/media_buy/build_creative_response.py index 24931b94..426f3492 100644 --- a/src/adcp/types/generated_poc/media_buy/build_creative_response.py +++ b/src/adcp/types/generated_poc/media_buy/build_creative_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/build_creative_response.json -# timestamp: 2026-02-20T02:37:39+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -17,13 +17,13 @@ class BuildCreativeResponse2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error], Field( - description="Array of errors explaining why creative generation failed", min_length=1 + description='Array of errors explaining why creative generation failed', min_length=1 ), ] ext: ext_1.ExtensionObject | None = None @@ -31,17 +31,17 @@ class BuildCreativeResponse2(AdCPBaseModel): class BuildCreativeResponse1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None creative_manifest: Annotated[ creative_manifest_1.CreativeManifest, - Field(description="The generated or transformed creative manifest"), + Field(description='The generated or transformed creative manifest'), ] ext: ext_1.ExtensionObject | None = None sandbox: Annotated[ bool | None, - Field(description="When true, this response contains simulated data from sandbox mode."), + Field(description='When true, this response contains simulated data from sandbox mode.'), ] = None @@ -49,7 +49,7 @@ class BuildCreativeResponse(RootModel[BuildCreativeResponse1 | BuildCreativeResp root: Annotated[ BuildCreativeResponse1 | BuildCreativeResponse2, Field( - description="Response containing the transformed or generated creative manifest, ready for use with preview_creative or sync_creatives. Returns either the complete creative manifest OR error information, never both.", - title="Build Creative Response", + description='Response containing the transformed or generated creative manifest, ready for use with preview_creative or sync_creatives. Returns either the complete creative manifest OR error information, never both.', + title='Build Creative Response', ), ] diff --git a/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py b/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py index 29be24dd..048ffe19 100644 --- a/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +++ b/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/create_media_buy_async_response_input_required.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,22 +16,22 @@ class Reason(Enum): - APPROVAL_REQUIRED = "APPROVAL_REQUIRED" - BUDGET_EXCEEDS_LIMIT = "BUDGET_EXCEEDS_LIMIT" + APPROVAL_REQUIRED = 'APPROVAL_REQUIRED' + BUDGET_EXCEEDS_LIMIT = 'BUDGET_EXCEEDS_LIMIT' class CreateMediaBuyInputRequired(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error] | None, Field( - description="Optional validation errors or warnings for debugging purposes. Helps explain why input is required." + description='Optional validation errors or warnings for debugging purposes. Helps explain why input is required.' ), ] = None ext: ext_1.ExtensionObject | None = None reason: Annotated[ - Reason | None, Field(description="Reason code indicating why input is needed") + Reason | None, Field(description='Reason code indicating why input is needed') ] = None diff --git a/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py b/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py index 277d8a7b..25cab50d 100644 --- a/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +++ b/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/create_media_buy_async_response_submitted.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -13,7 +13,7 @@ class CreateMediaBuySubmitted(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None diff --git a/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py b/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py index fcf4ce30..bdc66b84 100644 --- a/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +++ b/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/create_media_buy_async_response_working.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,17 +15,17 @@ class CreateMediaBuyWorking(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None current_step: Annotated[ - str | None, Field(description="Current step or phase of the operation") + str | None, Field(description='Current step or phase of the operation') ] = None ext: ext_1.ExtensionObject | None = None percentage: Annotated[ - float | None, Field(description="Completion percentage (0-100)", ge=0.0, le=100.0) + float | None, Field(description='Completion percentage (0-100)', ge=0.0, le=100.0) ] = None - step_number: Annotated[int | None, Field(description="Current step number", ge=1)] = None + step_number: Annotated[int | None, Field(description='Current step number', ge=1)] = None total_steps: Annotated[ - int | None, Field(description="Total number of steps in the operation", ge=1) + int | None, Field(description='Total number of steps in the operation', ge=1) ] = None diff --git a/src/adcp/types/generated_poc/media_buy/create_media_buy_request.py b/src/adcp/types/generated_poc/media_buy/create_media_buy_request.py index a396eeb1..978dcf7d 100644 --- a/src/adcp/types/generated_poc/media_buy/create_media_buy_request.py +++ b/src/adcp/types/generated_poc/media_buy/create_media_buy_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/create_media_buy_request.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -21,12 +21,12 @@ class Authentication(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) credentials: Annotated[ str, Field( - description="Credentials for authentication. For Bearer: token sent in Authorization header. For HMAC-SHA256: shared secret used to generate signature. Minimum 32 characters. Exchanged out-of-band during onboarding.", + description='Credentials for authentication. For Bearer: token sent in Authorization header. For HMAC-SHA256: shared secret used to generate signature. Minimum 32 characters. Exchanged out-of-band during onboarding.', min_length=32, ), ] @@ -41,22 +41,22 @@ class Authentication(AdCPBaseModel): class BatchFrequency(Enum): - hourly = "hourly" - daily = "daily" + hourly = 'hourly' + daily = 'daily' class DeliveryMode(Enum): - realtime = "realtime" - batched = "batched" + realtime = 'realtime' + batched = 'batched' class ArtifactWebhook(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) authentication: Annotated[ Authentication, - Field(description="Authentication configuration for webhook delivery (A2A-compatible)"), + Field(description='Authentication configuration for webhook delivery (A2A-compatible)'), ] batch_frequency: Annotated[ BatchFrequency | None, @@ -73,7 +73,7 @@ class ArtifactWebhook(AdCPBaseModel): sampling_rate: Annotated[ float | None, Field( - description="Fraction of impressions to include (0-1). 1.0 = all impressions, 0.1 = 10% sample. Default: 1.0", + description='Fraction of impressions to include (0-1). 1.0 = all impressions, 0.1 = 10% sample. Default: 1.0', ge=0.0, le=1.0, ), @@ -81,24 +81,24 @@ class ArtifactWebhook(AdCPBaseModel): token: Annotated[ str | None, Field( - description="Optional client-provided token for webhook validation. Echoed back in webhook payload to validate request authenticity.", + description='Optional client-provided token for webhook validation. Echoed back in webhook payload to validate request authenticity.', min_length=16, ), ] = None - url: Annotated[AnyUrl, Field(description="Webhook endpoint URL for artifact delivery")] + url: Annotated[AnyUrl, Field(description='Webhook endpoint URL for artifact delivery')] class TotalBudget(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) - amount: Annotated[float, Field(description="Total budget amount", ge=0.0)] - currency: Annotated[str, Field(description="ISO 4217 currency code")] + amount: Annotated[float, Field(description='Total budget amount', ge=0.0)] + currency: Annotated[str, Field(description='ISO 4217 currency code')] class CreateMediaBuyRequest(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) account_id: Annotated[ str | None, @@ -109,13 +109,13 @@ class CreateMediaBuyRequest(AdCPBaseModel): artifact_webhook: Annotated[ ArtifactWebhook | None, Field( - description="Optional webhook configuration for content artifact delivery. Used by governance agents to validate content adjacency. Seller pushes artifacts to this endpoint; orchestrator forwards to governance agent for validation." + description='Optional webhook configuration for content artifact delivery. Used by governance agents to validate content adjacency. Seller pushes artifacts to this endpoint; orchestrator forwards to governance agent for validation.' ), ] = None brand: Annotated[ brand_ref.BrandReference, Field( - description="Brand reference for this media buy. Resolved to full brand identity at execution time from brand.json or the registry." + description='Brand reference for this media buy. Resolved to full brand identity at execution time from brand.json or the registry.' ), ] buyer_campaign_ref: Annotated[ @@ -127,7 +127,7 @@ class CreateMediaBuyRequest(AdCPBaseModel): buyer_ref: Annotated[str, Field(description="Buyer's reference identifier for this media buy")] context: context_1.ContextObject | None = None end_time: Annotated[ - AwareDatetime, Field(description="Campaign end date/time in ISO 8601 format") + AwareDatetime, Field(description='Campaign end date/time in ISO 8601 format') ] ext: ext_1.ExtensionObject | None = None packages: Annotated[ @@ -137,7 +137,7 @@ class CreateMediaBuyRequest(AdCPBaseModel): min_length=1, ), ] = None - po_number: Annotated[str | None, Field(description="Purchase order number for tracking")] = None + po_number: Annotated[str | None, Field(description='Purchase order number for tracking')] = None proposal_id: Annotated[ str | None, Field( @@ -146,7 +146,7 @@ class CreateMediaBuyRequest(AdCPBaseModel): ] = None reporting_webhook: Annotated[ reporting_webhook_1.ReportingWebhook | None, - Field(description="Optional webhook configuration for automated reporting delivery"), + Field(description='Optional webhook configuration for automated reporting delivery'), ] = None start_time: start_timing.StartTiming total_budget: Annotated[ diff --git a/src/adcp/types/generated_poc/media_buy/create_media_buy_response.py b/src/adcp/types/generated_poc/media_buy/create_media_buy_response.py index 8c791131..5d89a9a7 100644 --- a/src/adcp/types/generated_poc/media_buy/create_media_buy_response.py +++ b/src/adcp/types/generated_poc/media_buy/create_media_buy_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/create_media_buy_response.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -18,24 +18,24 @@ class CreateMediaBuyResponse2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error], - Field(description="Array of errors explaining why the operation failed", min_length=1), + Field(description='Array of errors explaining why the operation failed', min_length=1), ] ext: ext_1.ExtensionObject | None = None class CreateMediaBuyResponse1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) account: Annotated[ account_1.Account | None, Field( - description="Account billed for this media buy. Includes advertiser, billing proxy (if any), and rate card applied." + description='Account billed for this media buy. Includes advertiser, billing proxy (if any), and rate card applied.' ), ] = None buyer_campaign_ref: Annotated[ @@ -44,7 +44,7 @@ class CreateMediaBuyResponse1(AdCPBaseModel): buyer_ref: Annotated[str, Field(description="Buyer's reference identifier for this media buy")] context: context_1.ContextObject | None = None creative_deadline: Annotated[ - AwareDatetime | None, Field(description="ISO 8601 timestamp for creative upload deadline") + AwareDatetime | None, Field(description='ISO 8601 timestamp for creative upload deadline') ] = None ext: ext_1.ExtensionObject | None = None media_buy_id: Annotated[ @@ -52,11 +52,11 @@ class CreateMediaBuyResponse1(AdCPBaseModel): ] packages: Annotated[ list[package.Package], - Field(description="Array of created packages with complete state information"), + Field(description='Array of created packages with complete state information'), ] sandbox: Annotated[ bool | None, - Field(description="When true, this response contains simulated data from sandbox mode."), + Field(description='When true, this response contains simulated data from sandbox mode.'), ] = None @@ -64,7 +64,7 @@ class CreateMediaBuyResponse(RootModel[CreateMediaBuyResponse1 | CreateMediaBuyR root: Annotated[ CreateMediaBuyResponse1 | CreateMediaBuyResponse2, Field( - description="Response payload for create_media_buy task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - the media buy is either fully created or not created at all.", - title="Create Media Buy Response", + description='Response payload for create_media_buy task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - the media buy is either fully created or not created at all.', + title='Create Media Buy Response', ), ] diff --git a/src/adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py b/src/adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py index 817e9d05..fd5fb8ab 100644 --- a/src/adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +++ b/src/adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/get_media_buy_delivery_request.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -18,7 +18,7 @@ class StatusFilter(RootModel[list[media_buy_status.MediaBuyStatus]]): root: Annotated[ list[media_buy_status.MediaBuyStatus], Field( - description="Filter by status. Can be a single status or array of statuses", + description='Filter by status. Can be a single status or array of statuses', min_length=1, ), ] @@ -26,41 +26,41 @@ class StatusFilter(RootModel[list[media_buy_status.MediaBuyStatus]]): class GetMediaBuyDeliveryRequest(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) account_id: Annotated[ str | None, Field( - description="Filter delivery data to a specific account. When provided, only returns media buys belonging to this account. When omitted, returns data across all accessible accounts. Optional if the agent has a single account." + description='Filter delivery data to a specific account. When provided, only returns media buys belonging to this account. When omitted, returns data across all accessible accounts. Optional if the agent has a single account.' ), ] = None buyer_refs: Annotated[ list[str] | None, - Field(description="Array of buyer reference IDs to get delivery data for", min_length=1), + Field(description='Array of buyer reference IDs to get delivery data for', min_length=1), ] = None context: context_1.ContextObject | None = None end_date: Annotated[ str | None, Field( description="End date for reporting period (YYYY-MM-DD). When omitted along with start_date, returns campaign lifetime data. Only accepted when the product's reporting_capabilities.date_range_support is 'date_range'.", - pattern="^\\d{4}-\\d{2}-\\d{2}$", + pattern='^\\d{4}-\\d{2}-\\d{2}$', ), ] = None ext: ext_1.ExtensionObject | None = None media_buy_ids: Annotated[ list[str] | None, Field( - description="Array of publisher media buy IDs to get delivery data for", min_length=1 + description='Array of publisher media buy IDs to get delivery data for', min_length=1 ), ] = None start_date: Annotated[ str | None, Field( description="Start date for reporting period (YYYY-MM-DD). When omitted along with end_date, returns campaign lifetime data. Only accepted when the product's reporting_capabilities.date_range_support is 'date_range'.", - pattern="^\\d{4}-\\d{2}-\\d{2}$", + pattern='^\\d{4}-\\d{2}-\\d{2}$', ), ] = None status_filter: Annotated[ media_buy_status.MediaBuyStatus | StatusFilter | None, - Field(description="Filter by status. Can be a single status or array of statuses"), + Field(description='Filter by status. Can be a single status or array of statuses'), ] = None diff --git a/src/adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py b/src/adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py index 1cd80d48..6712381d 100644 --- a/src/adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +++ b/src/adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/get_media_buy_delivery_response.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -21,37 +21,37 @@ class AggregatedTotals(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) clicks: Annotated[ float | None, - Field(description="Total clicks across all media buys (if applicable)", ge=0.0), + Field(description='Total clicks across all media buys (if applicable)', ge=0.0), ] = None conversion_value: Annotated[ float | None, - Field(description="Total conversion value across all media buys (if applicable)", ge=0.0), + Field(description='Total conversion value across all media buys (if applicable)', ge=0.0), ] = None conversions: Annotated[ float | None, - Field(description="Total conversions across all media buys (if applicable)", ge=0.0), + Field(description='Total conversions across all media buys (if applicable)', ge=0.0), ] = None cost_per_acquisition: Annotated[ float | None, Field( - description="Aggregate cost per conversion across all media buys (total spend / total conversions)", + description='Aggregate cost per conversion across all media buys (total spend / total conversions)', ge=0.0, ), ] = None impressions: Annotated[ - float, Field(description="Total impressions delivered across all media buys", ge=0.0) + float, Field(description='Total impressions delivered across all media buys', ge=0.0) ] media_buy_count: Annotated[ - int, Field(description="Number of media buys included in the response", ge=0) + int, Field(description='Number of media buys included in the response', ge=0) ] new_to_brand_rate: Annotated[ float | None, Field( - description="Fraction of total conversions across all media buys from first-time brand buyers (weighted by conversion volume, not a simple average of per-buy rates)", + description='Fraction of total conversions across all media buys from first-time brand buyers (weighted by conversion volume, not a simple average of per-buy rates)', ge=0.0, le=1.0, ), @@ -59,88 +59,88 @@ class AggregatedTotals(AdCPBaseModel): roas: Annotated[ float | None, Field( - description="Aggregate return on ad spend across all media buys (total conversion_value / total spend)", + description='Aggregate return on ad spend across all media buys (total conversion_value / total spend)', ge=0.0, ), ] = None - spend: Annotated[float, Field(description="Total amount spent across all media buys", ge=0.0)] + spend: Annotated[float, Field(description='Total amount spent across all media buys', ge=0.0)] video_completions: Annotated[ float | None, - Field(description="Total video completions across all media buys (if applicable)", ge=0.0), + Field(description='Total video completions across all media buys (if applicable)', ge=0.0), ] = None class DeliveryStatus(Enum): - delivering = "delivering" - completed = "completed" - budget_exhausted = "budget_exhausted" - flight_ended = "flight_ended" - goal_met = "goal_met" + delivering = 'delivering' + completed = 'completed' + budget_exhausted = 'budget_exhausted' + flight_ended = 'flight_ended' + goal_met = 'goal_met' class DailyBreakdownItem(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) conversion_value: Annotated[ - float | None, Field(description="Daily conversion value", ge=0.0) + float | None, Field(description='Daily conversion value', ge=0.0) ] = None - conversions: Annotated[float | None, Field(description="Daily conversions", ge=0.0)] = None - date: Annotated[str, Field(description="Date (YYYY-MM-DD)", pattern="^\\d{4}-\\d{2}-\\d{2}$")] - impressions: Annotated[float, Field(description="Daily impressions", ge=0.0)] + conversions: Annotated[float | None, Field(description='Daily conversions', ge=0.0)] = None + date: Annotated[str, Field(description='Date (YYYY-MM-DD)', pattern='^\\d{4}-\\d{2}-\\d{2}$')] + impressions: Annotated[float, Field(description='Daily impressions', ge=0.0)] new_to_brand_rate: Annotated[ float | None, Field( - description="Daily fraction of conversions from first-time brand buyers (0 = none, 1 = all)", + description='Daily fraction of conversions from first-time brand buyers (0 = none, 1 = all)', ge=0.0, le=1.0, ), ] = None roas: Annotated[ float | None, - Field(description="Daily return on ad spend (conversion_value / spend)", ge=0.0), + Field(description='Daily return on ad spend (conversion_value / spend)', ge=0.0), ] = None - spend: Annotated[float, Field(description="Daily spend", ge=0.0)] + spend: Annotated[float, Field(description='Daily spend', ge=0.0)] class Status(Enum): - pending_activation = "pending_activation" - pending = "pending" - active = "active" - paused = "paused" - completed = "completed" - failed = "failed" - reporting_delayed = "reporting_delayed" + pending_activation = 'pending_activation' + pending = 'pending' + active = 'active' + paused = 'paused' + completed = 'completed' + failed = 'failed' + reporting_delayed = 'reporting_delayed' class NotificationType(Enum): - scheduled = "scheduled" - final = "final" - delayed = "delayed" - adjusted = "adjusted" + scheduled = 'scheduled' + final = 'final' + delayed = 'delayed' + adjusted = 'adjusted' class ReportingPeriod(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) end: Annotated[ AwareDatetime, - Field(description="ISO 8601 end timestamp in UTC (e.g., 2024-02-05T23:59:59Z)"), + Field(description='ISO 8601 end timestamp in UTC (e.g., 2024-02-05T23:59:59Z)'), ] start: Annotated[ AwareDatetime, - Field(description="ISO 8601 start timestamp in UTC (e.g., 2024-02-05T00:00:00Z)"), + Field(description='ISO 8601 start timestamp in UTC (e.g., 2024-02-05T00:00:00Z)'), ] class ByCatalogItemItem(DeliveryMetrics): content_id: Annotated[ - str, Field(description="Catalog item identifier (e.g., SKU, GTIN, job_id, offering_id)") + str, Field(description='Catalog item identifier (e.g., SKU, GTIN, job_id, offering_id)') ] content_id_type: Annotated[ content_id_type_1.ContentIdType | None, - Field(description="Identifier type for this content_id"), + Field(description='Identifier type for this content_id'), ] = None impressions: Any spend: Any @@ -148,12 +148,12 @@ class ByCatalogItemItem(DeliveryMetrics): class ByCreativeItem(DeliveryMetrics): creative_id: Annotated[ - str, Field(description="Creative identifier matching the creative assignment") + str, Field(description='Creative identifier matching the creative assignment') ] weight: Annotated[ float | None, Field( - description="Observed delivery share for this creative within the package during the reporting period, expressed as a percentage (0-100). Reflects actual delivery distribution, not a configured setting.", + description='Observed delivery share for this creative within the package during the reporting period, expressed as a percentage (0-100). Reflects actual delivery distribution, not a configured setting.', ge=0.0, le=100.0, ), @@ -169,46 +169,46 @@ class ByPackageItem(DeliveryMetrics): by_catalog_item: Annotated[ list[ByCatalogItemItem] | None, Field( - description="Delivery by catalog item within this package. Available for catalog-driven packages when the seller supports item-level reporting." + description='Delivery by catalog item within this package. Available for catalog-driven packages when the seller supports item-level reporting.' ), ] = None by_creative: Annotated[ list[ByCreativeItem] | None, Field( - description="Metrics broken down by creative within this package. Available when the seller supports creative-level reporting." + description='Metrics broken down by creative within this package. Available when the seller supports creative-level reporting.' ), ] = None currency: Annotated[ str, Field( description="ISO 4217 currency code (e.g., USD, EUR, GBP) for this package's pricing. Indicates the currency in which the rate and spend values are denominated. Different packages can use different currencies when supported by the publisher.", - pattern="^[A-Z]{3}$", + pattern='^[A-Z]{3}$', ), ] delivery_status: Annotated[ DeliveryStatus | None, Field( - description="System-reported operational state of this package. Reflects actual delivery state independent of buyer pause control." + description='System-reported operational state of this package. Reflects actual delivery state independent of buyer pause control.' ), ] = None pacing_index: Annotated[ float | None, - Field(description="Delivery pace (1.0 = on track, <1.0 = behind, >1.0 = ahead)", ge=0.0), + Field(description='Delivery pace (1.0 = on track, <1.0 = behind, >1.0 = ahead)', ge=0.0), ] = None package_id: Annotated[str, Field(description="Publisher's package identifier")] paused: Annotated[ - bool | None, Field(description="Whether this package is currently paused by the buyer") + bool | None, Field(description='Whether this package is currently paused by the buyer') ] = None pricing_model: Annotated[ pricing_model_1.PricingModel, Field( - description="The pricing model used for this package (e.g., cpm, cpcv, cpp). Indicates how the package is billed and which metrics are most relevant for optimization." + description='The pricing model used for this package (e.g., cpm, cpcv, cpp). Indicates how the package is billed and which metrics are most relevant for optimization.' ), ] rate: Annotated[ float, Field( - description="The pricing rate for this package in the specified currency. For fixed-rate pricing, this is the agreed rate (e.g., CPM rate of 12.50 means $12.50 per 1,000 impressions). For auction-based pricing, this represents the effective rate based on actual delivery.", + description='The pricing rate for this package in the specified currency. For fixed-rate pricing, this is the agreed rate (e.g., CPM rate of 12.50 means $12.50 per 1,000 impressions). For auction-based pricing, this represents the effective rate based on actual delivery.', ge=0.0, ), ] @@ -228,7 +228,7 @@ class Totals(DeliveryMetrics): class MediaBuyDelivery(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) buyer_campaign_ref: Annotated[ str | None, @@ -239,31 +239,31 @@ class MediaBuyDelivery(AdCPBaseModel): buyer_ref: Annotated[ str | None, Field(description="Buyer's reference identifier for this media buy") ] = None - by_package: Annotated[list[ByPackageItem], Field(description="Metrics broken down by package")] + by_package: Annotated[list[ByPackageItem], Field(description='Metrics broken down by package')] daily_breakdown: Annotated[ - list[DailyBreakdownItem] | None, Field(description="Day-by-day delivery") + list[DailyBreakdownItem] | None, Field(description='Day-by-day delivery') ] = None expected_availability: Annotated[ AwareDatetime | None, Field( - description="When delayed data is expected to be available (only present when status is reporting_delayed)" + description='When delayed data is expected to be available (only present when status is reporting_delayed)' ), ] = None is_adjusted: Annotated[ bool | None, Field( - description="Indicates this delivery contains updated data for a previously reported period. Buyer should replace previous period data with these totals." + description='Indicates this delivery contains updated data for a previously reported period. Buyer should replace previous period data with these totals.' ), ] = None media_buy_id: Annotated[str, Field(description="Publisher's media buy identifier")] pricing_model: Annotated[ pricing_model_1.PricingModel | None, - Field(description="Pricing model used for this media buy"), + Field(description='Pricing model used for this media buy'), ] = None status: Annotated[ Status, Field( - description="Current media buy status. Lifecycle states use the same taxonomy as media-buy-status (`pending_activation`, `active`, `paused`, `completed`). In webhook context, reporting_delayed indicates data temporarily unavailable. `pending` is accepted as a legacy alias for pending_activation." + description='Current media buy status. Lifecycle states use the same taxonomy as media-buy-status (`pending_activation`, `active`, `paused`, `completed`). In webhook context, reporting_delayed indicates data temporarily unavailable. `pending` is accepted as a legacy alias for pending_activation.' ), ] totals: Totals @@ -271,33 +271,33 @@ class MediaBuyDelivery(AdCPBaseModel): class GetMediaBuyDeliveryResponse(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) aggregated_totals: Annotated[ AggregatedTotals | None, Field( - description="Combined metrics across all returned media buys. Only included in API responses (get_media_buy_delivery), not in webhook notifications." + description='Combined metrics across all returned media buys. Only included in API responses (get_media_buy_delivery), not in webhook notifications.' ), ] = None attribution_window: Annotated[ attribution_window_1.AttributionWindow | None, Field( - description="Attribution methodology and lookback windows used for conversion metrics in this response. All media buys from a single seller share the same attribution methodology. Enables cross-platform comparison (e.g., Amazon 14-day click vs. Criteo 30-day click)." + description='Attribution methodology and lookback windows used for conversion metrics in this response. All media buys from a single seller share the same attribution methodology. Enables cross-platform comparison (e.g., Amazon 14-day click vs. Criteo 30-day click).' ), ] = None context: context_1.ContextObject | None = None - currency: Annotated[str, Field(description="ISO 4217 currency code", pattern="^[A-Z]{3}$")] + currency: Annotated[str, Field(description='ISO 4217 currency code', pattern='^[A-Z]{3}$')] errors: Annotated[ list[error.Error] | None, Field( - description="Task-specific errors and warnings (e.g., missing delivery data, reporting platform issues)" + description='Task-specific errors and warnings (e.g., missing delivery data, reporting platform issues)' ), ] = None ext: ext_1.ExtensionObject | None = None media_buy_deliveries: Annotated[ list[MediaBuyDelivery], Field( - description="Array of delivery data for media buys. When used in webhook notifications, may contain multiple media buys aggregated by publisher. When used in get_media_buy_delivery API responses, typically contains requested media buys." + description='Array of delivery data for media buys. When used in webhook notifications, may contain multiple media buys aggregated by publisher. When used in get_media_buy_delivery API responses, typically contains requested media buys.' ), ] next_expected_at: Annotated[ @@ -309,34 +309,34 @@ class GetMediaBuyDeliveryResponse(AdCPBaseModel): notification_type: Annotated[ NotificationType | None, Field( - description="Type of webhook notification (only present in webhook deliveries): scheduled = regular periodic update, final = campaign completed, delayed = data not yet available, adjusted = resending period with updated data" + description='Type of webhook notification (only present in webhook deliveries): scheduled = regular periodic update, final = campaign completed, delayed = data not yet available, adjusted = resending period with updated data' ), ] = None partial_data: Annotated[ bool | None, Field( - description="Indicates if any media buys in this webhook have missing/delayed data (only present in webhook deliveries)" + description='Indicates if any media buys in this webhook have missing/delayed data (only present in webhook deliveries)' ), ] = None reporting_period: Annotated[ ReportingPeriod, - Field(description="Date range for the report. All periods use UTC timezone."), + Field(description='Date range for the report. All periods use UTC timezone.'), ] sandbox: Annotated[ bool | None, - Field(description="When true, this response contains simulated data from sandbox mode."), + Field(description='When true, this response contains simulated data from sandbox mode.'), ] = None sequence_number: Annotated[ int | None, Field( - description="Sequential notification number (only present in webhook deliveries, starts at 1)", + description='Sequential notification number (only present in webhook deliveries, starts at 1)', ge=1, ), ] = None unavailable_count: Annotated[ int | None, Field( - description="Number of media buys with reporting_delayed or failed status (only present in webhook deliveries when partial_data is true)", + description='Number of media buys with reporting_delayed or failed status (only present in webhook deliveries when partial_data is true)', ge=0, ), ] = None diff --git a/src/adcp/types/generated_poc/media_buy/get_media_buys_request.py b/src/adcp/types/generated_poc/media_buy/get_media_buys_request.py index 7b69fc89..e2f5893d 100644 --- a/src/adcp/types/generated_poc/media_buy/get_media_buys_request.py +++ b/src/adcp/types/generated_poc/media_buy/get_media_buys_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/get_media_buys_request.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -27,37 +27,37 @@ class StatusFilter(RootModel[list[media_buy_status.MediaBuyStatus]]): class GetMediaBuysRequest(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) account_id: Annotated[ str | None, Field( - description="Filter to a specific account. When omitted, returns media buys across all accessible accounts. Optional if the agent has a single account." + description='Filter to a specific account. When omitted, returns media buys across all accessible accounts. Optional if the agent has a single account.' ), ] = None buyer_refs: Annotated[ list[str] | None, - Field(description="Array of buyer reference IDs to retrieve", min_length=1), + Field(description='Array of buyer reference IDs to retrieve', min_length=1), ] = None context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None include_snapshot: Annotated[ bool | None, Field( - description="When true, include a near-real-time delivery snapshot for each package. Snapshots reflect the latest available entity-level stats from the platform (e.g., updated every ~15 minutes on GAM, ~1 hour on batch-only platforms). The staleness_seconds field on each snapshot indicates data freshness. If a snapshot cannot be returned, package.snapshot_unavailable_reason explains why. Defaults to false." + description='When true, include a near-real-time delivery snapshot for each package. Snapshots reflect the latest available entity-level stats from the platform (e.g., updated every ~15 minutes on GAM, ~1 hour on batch-only platforms). The staleness_seconds field on each snapshot indicates data freshness. If a snapshot cannot be returned, package.snapshot_unavailable_reason explains why. Defaults to false.' ), ] = False media_buy_ids: Annotated[ list[str] | None, Field( - description="Array of publisher media buy IDs to retrieve. When omitted along with buyer_refs, returns a paginated set of accessible media buys matching status_filter.", + description='Array of publisher media buy IDs to retrieve. When omitted along with buyer_refs, returns a paginated set of accessible media buys matching status_filter.', min_length=1, ), ] = None pagination: Annotated[ pagination_request.PaginationRequest | None, Field( - description="Cursor-based pagination controls. Strongly recommended when querying broad scopes (for example, all active media buys in an account)." + description='Cursor-based pagination controls. Strongly recommended when querying broad scopes (for example, all active media buys in an account).' ), ] = None status_filter: Annotated[ diff --git a/src/adcp/types/generated_poc/media_buy/get_media_buys_response.py b/src/adcp/types/generated_poc/media_buy/get_media_buys_response.py index be9c64e5..1d986f04 100644 --- a/src/adcp/types/generated_poc/media_buy/get_media_buys_response.py +++ b/src/adcp/types/generated_poc/media_buy/get_media_buys_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/get_media_buys_response.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -20,10 +20,10 @@ class CreativeApproval(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) approval_status: creative_approval_status.CreativeApprovalStatus - creative_id: Annotated[str, Field(description="Creative identifier")] + creative_id: Annotated[str, Field(description='Creative identifier')] rejection_reason: Annotated[ str | None, Field( @@ -33,30 +33,30 @@ class CreativeApproval(AdCPBaseModel): class DeliveryStatus(Enum): - delivering = "delivering" - not_delivering = "not_delivering" - completed = "completed" - budget_exhausted = "budget_exhausted" - flight_ended = "flight_ended" - goal_met = "goal_met" + delivering = 'delivering' + not_delivering = 'not_delivering' + completed = 'completed' + budget_exhausted = 'budget_exhausted' + flight_ended = 'flight_ended' + goal_met = 'goal_met' class Snapshot(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) as_of: Annotated[ AwareDatetime, - Field(description="ISO 8601 timestamp when this snapshot was captured by the platform"), + Field(description='ISO 8601 timestamp when this snapshot was captured by the platform'), ] clicks: Annotated[ - float | None, Field(description="Total clicks since package start (when available)", ge=0.0) + float | None, Field(description='Total clicks since package start (when available)', ge=0.0) ] = None currency: Annotated[ str | None, Field( - description="ISO 4217 currency code for spend in this snapshot. Optional when unchanged from package.currency or media_buy.currency.", - pattern="^[A-Z]{3}$", + description='ISO 4217 currency code for spend in this snapshot. Optional when unchanged from package.currency or media_buy.currency.', + pattern='^[A-Z]{3}$', ), ] = None delivery_status: Annotated[ @@ -67,55 +67,55 @@ class Snapshot(AdCPBaseModel): ] = None ext: Annotated[ ext_1.ExtensionObject | None, - Field(description="Optional extension object for seller-specific snapshot fields."), + Field(description='Optional extension object for seller-specific snapshot fields.'), ] = None impressions: Annotated[ - float, Field(description="Total impressions delivered since package start", ge=0.0) + float, Field(description='Total impressions delivered since package start', ge=0.0) ] pacing_index: Annotated[ float | None, Field( - description="Current delivery pace relative to expected (1.0 = on track, <1.0 = behind, >1.0 = ahead). Absent when pacing cannot be determined.", + description='Current delivery pace relative to expected (1.0 = on track, <1.0 = behind, >1.0 = ahead). Absent when pacing cannot be determined.', ge=0.0, ), ] = None spend: Annotated[ float, Field( - description="Total spend since package start, denominated in snapshot.currency when present, otherwise package.currency or media_buy.currency", + description='Total spend since package start, denominated in snapshot.currency when present, otherwise package.currency or media_buy.currency', ge=0.0, ), ] staleness_seconds: Annotated[ int, Field( - description="Maximum age of this data in seconds. For example, 900 means the data may be up to 15 minutes old. Use this to interpret zero delivery: a value of 900 means zero impressions is likely real; a value of 14400 means reporting may still be catching up.", + description='Maximum age of this data in seconds. For example, 900 means the data may be up to 15 minutes old. Use this to interpret zero delivery: a value of 900 means zero impressions is likely real; a value of 14400 means reporting may still be catching up.', ge=0, ), ] class SnapshotUnavailableReason(Enum): - SNAPSHOT_UNSUPPORTED = "SNAPSHOT_UNSUPPORTED" - SNAPSHOT_TEMPORARILY_UNAVAILABLE = "SNAPSHOT_TEMPORARILY_UNAVAILABLE" - SNAPSHOT_PERMISSION_DENIED = "SNAPSHOT_PERMISSION_DENIED" + SNAPSHOT_UNSUPPORTED = 'SNAPSHOT_UNSUPPORTED' + SNAPSHOT_TEMPORARILY_UNAVAILABLE = 'SNAPSHOT_TEMPORARILY_UNAVAILABLE' + SNAPSHOT_PERMISSION_DENIED = 'SNAPSHOT_PERMISSION_DENIED' class Package(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) bid_price: Annotated[ float | None, Field( - description="Current bid price for auction-based packages. Denominated in package.currency when present, otherwise media_buy.currency. Relevant for automated price optimization loops.", + description='Current bid price for auction-based packages. Denominated in package.currency when present, otherwise media_buy.currency. Relevant for automated price optimization loops.', ge=0.0, ), ] = None budget: Annotated[ float | None, Field( - description="Package budget amount, denominated in package.currency when present, otherwise media_buy.currency", + description='Package budget amount, denominated in package.currency when present, otherwise media_buy.currency', ge=0.0, ), ] = None @@ -125,82 +125,82 @@ class Package(AdCPBaseModel): creative_approvals: Annotated[ list[CreativeApproval] | None, Field( - description="Approval status for each creative assigned to this package. Absent when no creatives have been assigned." + description='Approval status for each creative assigned to this package. Absent when no creatives have been assigned.' ), ] = None currency: Annotated[ str | None, Field( - description="ISO 4217 currency code for monetary values at this package level (budget, bid_price, snapshot.spend). When absent, inherit media_buy.currency.", - pattern="^[A-Z]{3}$", + description='ISO 4217 currency code for monetary values at this package level (budget, bid_price, snapshot.spend). When absent, inherit media_buy.currency.', + pattern='^[A-Z]{3}$', ), ] = None end_time: Annotated[ - AwareDatetime | None, Field(description="ISO 8601 flight end time for this package") + AwareDatetime | None, Field(description='ISO 8601 flight end time for this package') ] = None ext: ext_1.ExtensionObject | None = None format_ids_pending: Annotated[ list[format_id.FormatId] | None, Field( - description="Format IDs from the original create_media_buy format_ids_to_provide that have not yet been uploaded via sync_creatives. When empty or absent, all required formats have been provided." + description='Format IDs from the original create_media_buy format_ids_to_provide that have not yet been uploaded via sync_creatives. When empty or absent, all required formats have been provided.' ), ] = None impressions: Annotated[ float | None, - Field(description="Goal impression count for impression-based packages", ge=0.0), + Field(description='Goal impression count for impression-based packages', ge=0.0), ] = None package_id: Annotated[str, Field(description="Publisher's package identifier")] paused: Annotated[ - bool | None, Field(description="Whether this package is currently paused by the buyer") + bool | None, Field(description='Whether this package is currently paused by the buyer') ] = None product_id: Annotated[ - str | None, Field(description="Product identifier this package is purchased from") + str | None, Field(description='Product identifier this package is purchased from') ] = None snapshot: Annotated[ Snapshot | None, Field( - description="Near-real-time delivery snapshot for this package. Only present when include_snapshot was true in the request. Represents the latest available entity-level stats from the platform — not billing-grade data." + description='Near-real-time delivery snapshot for this package. Only present when include_snapshot was true in the request. Represents the latest available entity-level stats from the platform — not billing-grade data.' ), ] = None snapshot_unavailable_reason: Annotated[ SnapshotUnavailableReason | None, Field( - description="Machine-readable reason the snapshot is omitted. Present only when include_snapshot was true and snapshot is unavailable for this package." + description='Machine-readable reason the snapshot is omitted. Present only when include_snapshot was true and snapshot is unavailable for this package.' ), ] = None start_time: Annotated[ AwareDatetime | None, Field( - description="ISO 8601 flight start time for this package. Use to determine whether the package is within its scheduled flight before interpreting delivery status." + description='ISO 8601 flight start time for this package. Use to determine whether the package is within its scheduled flight before interpreting delivery status.' ), ] = None class MediaBuy(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) account: Annotated[ - account_1.Account | None, Field(description="Account billed for this media buy") + account_1.Account | None, Field(description='Account billed for this media buy') ] = None buyer_campaign_ref: Annotated[ str | None, Field( - description="Buyer campaign reference label sourced from create_media_buy.buyer_campaign_ref. Groups related operations under a single campaign; may be absent when not provided at creation time." + description='Buyer campaign reference label sourced from create_media_buy.buyer_campaign_ref. Groups related operations under a single campaign; may be absent when not provided at creation time.' ), ] = None buyer_ref: Annotated[ str | None, Field(description="Buyer's reference identifier for this media buy") ] = None - created_at: Annotated[AwareDatetime | None, Field(description="Creation timestamp")] = None + created_at: Annotated[AwareDatetime | None, Field(description='Creation timestamp')] = None creative_deadline: Annotated[ - AwareDatetime | None, Field(description="ISO 8601 timestamp for creative upload deadline") + AwareDatetime | None, Field(description='ISO 8601 timestamp for creative upload deadline') ] = None currency: Annotated[ str, Field( - description="ISO 4217 currency code (e.g., USD, EUR, GBP) for monetary values at this media buy level. total_budget is always denominated in this currency. Package-level fields may override with package.currency.", - pattern="^[A-Z]{3}$", + description='ISO 4217 currency code (e.g., USD, EUR, GBP) for monetary values at this media buy level. total_budget is always denominated in this currency. Package-level fields may override with package.currency.', + pattern='^[A-Z]{3}$', ), ] ext: ext_1.ExtensionObject | None = None @@ -210,41 +210,41 @@ class MediaBuy(AdCPBaseModel): packages: Annotated[ list[Package], Field( - description="Packages within this media buy, augmented with creative approval status and optional delivery snapshots" + description='Packages within this media buy, augmented with creative approval status and optional delivery snapshots' ), ] status: media_buy_status.MediaBuyStatus total_budget: Annotated[ float, Field( - description="Total budget amount across all packages, denominated in media_buy.currency", + description='Total budget amount across all packages, denominated in media_buy.currency', ge=0.0, ), ] - updated_at: Annotated[AwareDatetime | None, Field(description="Last update timestamp")] = None + updated_at: Annotated[AwareDatetime | None, Field(description='Last update timestamp')] = None class GetMediaBuysResponse(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error] | None, - Field(description="Task-specific errors (e.g., media buy not found)"), + Field(description='Task-specific errors (e.g., media buy not found)'), ] = None ext: ext_1.ExtensionObject | None = None media_buys: Annotated[ list[MediaBuy], Field( - description="Array of media buys with status, creative approval state, and optional delivery snapshots" + description='Array of media buys with status, creative approval state, and optional delivery snapshots' ), ] pagination: Annotated[ pagination_response.PaginationResponse | None, - Field(description="Pagination metadata for the media_buys array."), + Field(description='Pagination metadata for the media_buys array.'), ] = None sandbox: Annotated[ bool | None, - Field(description="When true, this response contains simulated data from sandbox mode."), + Field(description='When true, this response contains simulated data from sandbox mode.'), ] = None diff --git a/src/adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py b/src/adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py index 8cb93930..603996d3 100644 --- a/src/adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +++ b/src/adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/get_products_async_response_input_required.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,23 +16,23 @@ class Reason(Enum): - CLARIFICATION_NEEDED = "CLARIFICATION_NEEDED" - BUDGET_REQUIRED = "BUDGET_REQUIRED" + CLARIFICATION_NEEDED = 'CLARIFICATION_NEEDED' + BUDGET_REQUIRED = 'BUDGET_REQUIRED' class GetProductsInputRequired(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None partial_results: Annotated[ list[product.Product] | None, - Field(description="Partial product results that may help inform the clarification"), + Field(description='Partial product results that may help inform the clarification'), ] = None reason: Annotated[ - Reason | None, Field(description="Reason code indicating why input is needed") + Reason | None, Field(description='Reason code indicating why input is needed') ] = None suggestions: Annotated[ - list[str] | None, Field(description="Suggested values or options for the required input") + list[str] | None, Field(description='Suggested values or options for the required input') ] = None diff --git a/src/adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py b/src/adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py index 4121c2f3..216de89e 100644 --- a/src/adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +++ b/src/adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/get_products_async_response_submitted.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,10 +15,10 @@ class GetProductsSubmitted(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None estimated_completion: Annotated[ - AwareDatetime | None, Field(description="Estimated completion time for the search") + AwareDatetime | None, Field(description='Estimated completion time for the search') ] = None ext: ext_1.ExtensionObject | None = None diff --git a/src/adcp/types/generated_poc/media_buy/get_products_async_response_working.py b/src/adcp/types/generated_poc/media_buy/get_products_async_response_working.py index b70e8a7d..47665462 100644 --- a/src/adcp/types/generated_poc/media_buy/get_products_async_response_working.py +++ b/src/adcp/types/generated_poc/media_buy/get_products_async_response_working.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/get_products_async_response_working.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,7 +15,7 @@ class GetProductsWorking(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None current_step: Annotated[ @@ -27,9 +27,9 @@ class GetProductsWorking(AdCPBaseModel): ext: ext_1.ExtensionObject | None = None percentage: Annotated[ float | None, - Field(description="Progress percentage of the search operation", ge=0.0, le=100.0), + Field(description='Progress percentage of the search operation', ge=0.0, le=100.0), ] = None - step_number: Annotated[int | None, Field(description="Current step number (1-indexed)")] = None + step_number: Annotated[int | None, Field(description='Current step number (1-indexed)')] = None total_steps: Annotated[ - int | None, Field(description="Total number of steps in the search process") + int | None, Field(description='Total number of steps in the search process') ] = None diff --git a/src/adcp/types/generated_poc/media_buy/get_products_request.py b/src/adcp/types/generated_poc/media_buy/get_products_request.py index 8e17ca67..21f16747 100644 --- a/src/adcp/types/generated_poc/media_buy/get_products_request.py +++ b/src/adcp/types/generated_poc/media_buy/get_products_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/get_products_request.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -18,7 +18,7 @@ class GetProductsRequest(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) account_id: Annotated[ str | None, @@ -29,11 +29,11 @@ class GetProductsRequest(AdCPBaseModel): brand: Annotated[ brand_ref.BrandReference | None, Field( - description="Brand reference for product discovery context. Resolved to full brand identity at execution time." + description='Brand reference for product discovery context. Resolved to full brand identity at execution time.' ), ] = None brief: Annotated[ - str | None, Field(description="Natural language description of campaign requirements.") + str | None, Field(description='Natural language description of campaign requirements.') ] = None buyer_campaign_ref: Annotated[ str | None, @@ -44,7 +44,7 @@ class GetProductsRequest(AdCPBaseModel): catalog: Annotated[ catalog_1.Catalog | None, Field( - description="Catalog of items the buyer wants to promote. The seller matches catalog items against its inventory and returns products where matches exist. Supports all catalog types: a job catalog finds job ad products, a product catalog finds sponsored product slots. Reference a synced catalog by catalog_id, or provide inline items." + description='Catalog of items the buyer wants to promote. The seller matches catalog items against its inventory and returns products where matches exist. Supports all catalog types: a job catalog finds job ad products, a product catalog finds sponsored product slots. Reference a synced catalog by catalog_id, or provide inline items.' ), ] = None context: context_1.ContextObject | None = None @@ -54,6 +54,6 @@ class GetProductsRequest(AdCPBaseModel): property_list: Annotated[ property_list_ref.PropertyListReference | None, Field( - description="[AdCP 3.0] Reference to an externally managed property list. When provided, the sales agent should filter products to only those available on properties in the list." + description='[AdCP 3.0] Reference to an externally managed property list. When provided, the sales agent should filter products to only those available on properties in the list.' ), ] = None diff --git a/src/adcp/types/generated_poc/media_buy/get_products_response.py b/src/adcp/types/generated_poc/media_buy/get_products_response.py index fe2189ed..17ff110f 100644 --- a/src/adcp/types/generated_poc/media_buy/get_products_response.py +++ b/src/adcp/types/generated_poc/media_buy/get_products_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/get_products_response.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -17,35 +17,35 @@ class GetProductsResponse(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) catalog_applied: Annotated[ bool | None, Field( - description="Whether the seller filtered results based on the provided catalog. True if the seller matched catalog items against its inventory. Absent or false if no catalog was provided or the seller does not support catalog matching." + description='Whether the seller filtered results based on the provided catalog. True if the seller matched catalog items against its inventory. Absent or false if no catalog was provided or the seller does not support catalog matching.' ), ] = None context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error] | None, - Field(description="Task-specific errors and warnings (e.g., product filtering issues)"), + Field(description='Task-specific errors and warnings (e.g., product filtering issues)'), ] = None ext: ext_1.ExtensionObject | None = None pagination: pagination_response.PaginationResponse | None = None - products: Annotated[list[product.Product], Field(description="Array of matching products")] + products: Annotated[list[product.Product], Field(description='Array of matching products')] property_list_applied: Annotated[ bool | None, Field( - description="[AdCP 3.0] Indicates whether property_list filtering was applied. True if the agent filtered products based on the provided property_list. Absent or false if property_list was not provided or not supported by this agent." + description='[AdCP 3.0] Indicates whether property_list filtering was applied. True if the agent filtered products based on the provided property_list. Absent or false if property_list was not provided or not supported by this agent.' ), ] = None proposals: Annotated[ list[proposal.Proposal] | None, Field( - description="Optional array of proposed media plans with budget allocations across products. Publishers include proposals when they can provide strategic guidance based on the brief. Proposals are actionable - buyers can refine them via follow-up get_products calls within the same session, or execute them directly via create_media_buy." + description='Optional array of proposed media plans with budget allocations across products. Publishers include proposals when they can provide strategic guidance based on the brief. Proposals are actionable - buyers can refine them via follow-up get_products calls within the same session, or execute them directly via create_media_buy.' ), ] = None sandbox: Annotated[ bool | None, - Field(description="When true, this response contains simulated data from sandbox mode."), + Field(description='When true, this response contains simulated data from sandbox mode.'), ] = None diff --git a/src/adcp/types/generated_poc/media_buy/list_creative_formats_request.py b/src/adcp/types/generated_poc/media_buy/list_creative_formats_request.py index 801988cd..1bc2ea39 100644 --- a/src/adcp/types/generated_poc/media_buy/list_creative_formats_request.py +++ b/src/adcp/types/generated_poc/media_buy/list_creative_formats_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/list_creative_formats_request.json -# timestamp: 2026-02-20T02:37:39+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -18,7 +18,7 @@ class ListCreativeFormatsRequest(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) asset_types: Annotated[ list[asset_content_type.AssetContentType] | None, @@ -32,7 +32,7 @@ class ListCreativeFormatsRequest(AdCPBaseModel): format_ids: Annotated[ list[format_id.FormatId] | None, Field( - description="Return only these specific format IDs (e.g., from get_products response)", + description='Return only these specific format IDs (e.g., from get_products response)', min_length=1, ), ] = None @@ -46,35 +46,35 @@ class ListCreativeFormatsRequest(AdCPBaseModel): is_responsive: Annotated[ bool | None, Field( - description="Filter for responsive formats that adapt to container size. When true, returns formats without fixed dimensions." + description='Filter for responsive formats that adapt to container size. When true, returns formats without fixed dimensions.' ), ] = None max_height: Annotated[ int | None, Field( - description="Maximum height in pixels (inclusive). Returns formats where ANY render has height <= this value. For multi-render formats, matches if at least one render fits." + description='Maximum height in pixels (inclusive). Returns formats where ANY render has height <= this value. For multi-render formats, matches if at least one render fits.' ), ] = None max_width: Annotated[ int | None, Field( - description="Maximum width in pixels (inclusive). Returns formats where ANY render has width <= this value. For multi-render formats, matches if at least one render fits." + description='Maximum width in pixels (inclusive). Returns formats where ANY render has width <= this value. For multi-render formats, matches if at least one render fits.' ), ] = None min_height: Annotated[ int | None, Field( - description="Minimum height in pixels (inclusive). Returns formats where ANY render has height >= this value." + description='Minimum height in pixels (inclusive). Returns formats where ANY render has height >= this value.' ), ] = None min_width: Annotated[ int | None, Field( - description="Minimum width in pixels (inclusive). Returns formats where ANY render has width >= this value." + description='Minimum width in pixels (inclusive). Returns formats where ANY render has width >= this value.' ), ] = None name_search: Annotated[ - str | None, Field(description="Search for formats by name (case-insensitive partial match)") + str | None, Field(description='Search for formats by name (case-insensitive partial match)') ] = None output_format_ids: Annotated[ list[format_id.FormatId] | None, @@ -87,12 +87,12 @@ class ListCreativeFormatsRequest(AdCPBaseModel): type: Annotated[ format_category.FormatCategory | None, Field( - description="Filter by format type (technical categories with distinct requirements)" + description='Filter by format type (technical categories with distinct requirements)' ), ] = None wcag_level: Annotated[ wcag_level_1.WcagLevel | None, Field( - description="Filter to formats that meet at least this WCAG conformance level (A < AA < AAA)" + description='Filter to formats that meet at least this WCAG conformance level (A < AA < AAA)' ), ] = None diff --git a/src/adcp/types/generated_poc/media_buy/list_creative_formats_response.py b/src/adcp/types/generated_poc/media_buy/list_creative_formats_response.py index 7d58fab2..ac388f42 100644 --- a/src/adcp/types/generated_poc/media_buy/list_creative_formats_response.py +++ b/src/adcp/types/generated_poc/media_buy/list_creative_formats_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/list_creative_formats_response.json -# timestamp: 2026-02-20T02:37:39+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -18,7 +18,7 @@ class CreativeAgent(AdCPBaseModel): agent_name: Annotated[ - str | None, Field(description="Human-readable name for the creative agent") + str | None, Field(description='Human-readable name for the creative agent') ] = None agent_url: Annotated[ AnyUrl, @@ -28,24 +28,24 @@ class CreativeAgent(AdCPBaseModel): ] capabilities: Annotated[ list[creative_agent_capability.CreativeAgentCapability] | None, - Field(description="Capabilities this creative agent provides"), + Field(description='Capabilities this creative agent provides'), ] = None class ListCreativeFormatsResponse(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None creative_agents: Annotated[ list[CreativeAgent] | None, Field( - description="Optional: Creative agents that provide additional formats. Buyers can recursively query these agents to discover more formats. No authentication required for list_creative_formats." + description='Optional: Creative agents that provide additional formats. Buyers can recursively query these agents to discover more formats. No authentication required for list_creative_formats.' ), ] = None errors: Annotated[ list[error.Error] | None, - Field(description="Task-specific errors and warnings (e.g., format availability issues)"), + Field(description='Task-specific errors and warnings (e.g., format availability issues)'), ] = None ext: ext_1.ExtensionObject | None = None formats: Annotated[ @@ -57,5 +57,5 @@ class ListCreativeFormatsResponse(AdCPBaseModel): pagination: pagination_response.PaginationResponse | None = None sandbox: Annotated[ bool | None, - Field(description="When true, this response contains simulated data from sandbox mode."), + Field(description='When true, this response contains simulated data from sandbox mode.'), ] = None diff --git a/src/adcp/types/generated_poc/media_buy/list_creatives_request.py b/src/adcp/types/generated_poc/media_buy/list_creatives_request.py index 8b3cfe66..74d33760 100644 --- a/src/adcp/types/generated_poc/media_buy/list_creatives_request.py +++ b/src/adcp/types/generated_poc/media_buy/list_creatives_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/list_creatives_request.json -# timestamp: 2026-02-18T17:56:28+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -18,52 +18,52 @@ class FieldModel(Enum): - creative_id = "creative_id" - name = "name" - format = "format" - status = "status" - created_date = "created_date" - updated_date = "updated_date" - tags = "tags" - assignments = "assignments" - performance = "performance" - sub_assets = "sub_assets" + creative_id = 'creative_id' + name = 'name' + format = 'format' + status = 'status' + created_date = 'created_date' + updated_date = 'updated_date' + tags = 'tags' + assignments = 'assignments' + performance = 'performance' + sub_assets = 'sub_assets' class Sort(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) direction: Annotated[ - sort_direction.SortDirection | None, Field(description="Sort direction") + sort_direction.SortDirection | None, Field(description='Sort direction') ] = sort_direction.SortDirection.desc field: Annotated[ - creative_sort_field.CreativeSortField | None, Field(description="Field to sort by") + creative_sort_field.CreativeSortField | None, Field(description='Field to sort by') ] = creative_sort_field.CreativeSortField.created_date class ListCreativesRequest(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None fields: Annotated[ list[FieldModel] | None, Field( - description="Specific fields to include in response (omit for all fields)", min_length=1 + description='Specific fields to include in response (omit for all fields)', min_length=1 ), ] = None filters: creative_filters.CreativeFilters | None = None include_assignments: Annotated[ - bool | None, Field(description="Include package assignment information in response") + bool | None, Field(description='Include package assignment information in response') ] = True include_performance: Annotated[ - bool | None, Field(description="Include aggregated performance metrics in response") + bool | None, Field(description='Include aggregated performance metrics in response') ] = False include_sub_assets: Annotated[ bool | None, - Field(description="Include sub-assets (for carousel/native formats) in response"), + Field(description='Include sub-assets (for carousel/native formats) in response'), ] = False pagination: pagination_request.PaginationRequest | None = None - sort: Annotated[Sort | None, Field(description="Sorting parameters")] = None + sort: Annotated[Sort | None, Field(description='Sorting parameters')] = None diff --git a/src/adcp/types/generated_poc/media_buy/list_creatives_response.py b/src/adcp/types/generated_poc/media_buy/list_creatives_response.py index 365f2a15..0a72f9b6 100644 --- a/src/adcp/types/generated_poc/media_buy/list_creatives_response.py +++ b/src/adcp/types/generated_poc/media_buy/list_creatives_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/list_creatives_response.json -# timestamp: 2026-02-22T01:23:46+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -32,65 +32,65 @@ class AssignedPackage(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - assigned_date: Annotated[AwareDatetime, Field(description="When this assignment was created")] + assigned_date: Annotated[AwareDatetime, Field(description='When this assignment was created')] buyer_ref: Annotated[ str | None, Field(description="Buyer's reference identifier for this package") ] = None - package_id: Annotated[str, Field(description="Package identifier")] + package_id: Annotated[str, Field(description='Package identifier')] class Assignments(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) assigned_packages: Annotated[ list[AssignedPackage] | None, - Field(description="List of packages this creative is assigned to"), + Field(description='List of packages this creative is assigned to'), ] = None assignment_count: Annotated[ - int, Field(description="Total number of active package assignments", ge=0) + int, Field(description='Total number of active package assignments', ge=0) ] class Performance(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) clicks: Annotated[ - int | None, Field(description="Total clicks across all assignments", ge=0) + int | None, Field(description='Total clicks across all assignments', ge=0) ] = None conversion_rate: Annotated[ - float | None, Field(description="Conversion rate across all assignments", ge=0.0, le=1.0) + float | None, Field(description='Conversion rate across all assignments', ge=0.0, le=1.0) ] = None ctr: Annotated[ - float | None, Field(description="Click-through rate (clicks/impressions)", ge=0.0, le=1.0) + float | None, Field(description='Click-through rate (clicks/impressions)', ge=0.0, le=1.0) ] = None impressions: Annotated[ - int | None, Field(description="Total impressions across all assignments", ge=0) + int | None, Field(description='Total impressions across all assignments', ge=0) ] = None last_updated: Annotated[ - AwareDatetime, Field(description="When performance data was last updated") + AwareDatetime, Field(description='When performance data was last updated') ] performance_score: Annotated[ - float | None, Field(description="Aggregated performance score (0-100)", ge=0.0, le=100.0) + float | None, Field(description='Aggregated performance score (0-100)', ge=0.0, le=100.0) ] = None class StatusSummary(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - approved: Annotated[int | None, Field(description="Number of approved creatives", ge=0)] = None - archived: Annotated[int | None, Field(description="Number of archived creatives", ge=0)] = None + approved: Annotated[int | None, Field(description='Number of approved creatives', ge=0)] = None + archived: Annotated[int | None, Field(description='Number of archived creatives', ge=0)] = None pending_review: Annotated[ - int | None, Field(description="Number of creatives pending review", ge=0) + int | None, Field(description='Number of creatives pending review', ge=0) ] = None processing: Annotated[ - int | None, Field(description="Number of creatives being processed", ge=0) + int | None, Field(description='Number of creatives being processed', ge=0) ] = None - rejected: Annotated[int | None, Field(description="Number of rejected creatives", ge=0)] = None + rejected: Annotated[int | None, Field(description='Number of rejected creatives', ge=0)] = None class SortApplied(AdCPBaseModel): @@ -100,33 +100,33 @@ class SortApplied(AdCPBaseModel): class QuerySummary(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) filters_applied: Annotated[ - list[str] | None, Field(description="List of filters that were applied to the query") + list[str] | None, Field(description='List of filters that were applied to the query') ] = None returned: Annotated[ - int | None, Field(description="Number of creatives returned in this response", ge=0) + int | None, Field(description='Number of creatives returned in this response', ge=0) ] = None sort_applied: Annotated[ - SortApplied | None, Field(description="Sort order that was applied") + SortApplied | None, Field(description='Sort order that was applied') ] = None total_matching: Annotated[ int | None, - Field(description="Total number of creatives matching filters (across all pages)", ge=0), + Field(description='Total number of creatives matching filters (across all pages)', ge=0), ] = None class Creative(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) account: Annotated[ - account_1.Account | None, Field(description="Account that owns this creative") + account_1.Account | None, Field(description='Account that owns this creative') ] = None assets: Annotated[ dict[ - Annotated[str, StringConstraints(pattern=r"^[a-zA-Z0-9_-]+$")], + Annotated[str, StringConstraints(pattern=r'^[a-zA-Z0-9_-]+$')], image_asset.ImageAsset | video_asset.VideoAsset | audio_asset.AudioAsset @@ -139,67 +139,67 @@ class Creative(AdCPBaseModel): | url_asset.UrlAsset, ] | None, - Field(description="Assets for this creative, keyed by asset_role"), + Field(description='Assets for this creative, keyed by asset_role'), ] = None assignments: Annotated[ Assignments | None, - Field(description="Current package assignments (included when include_assignments=true)"), + Field(description='Current package assignments (included when include_assignments=true)'), ] = None catalogs: Annotated[ list[catalog.Catalog] | None, - Field(description="Catalogs this creative renders, if any", min_length=1), + Field(description='Catalogs this creative renders, if any', min_length=1), ] = None created_date: Annotated[ - AwareDatetime, Field(description="When the creative was uploaded to the library") + AwareDatetime, Field(description='When the creative was uploaded to the library') ] - creative_id: Annotated[str, Field(description="Unique identifier for the creative")] + creative_id: Annotated[str, Field(description='Unique identifier for the creative')] format_id: Annotated[ format_id_1.FormatId, - Field(description="Format identifier specifying which format this creative conforms to"), + Field(description='Format identifier specifying which format this creative conforms to'), ] - name: Annotated[str, Field(description="Human-readable creative name")] + name: Annotated[str, Field(description='Human-readable creative name')] performance: Annotated[ Performance | None, Field( - description="Aggregated performance metrics (included when include_performance=true)" + description='Aggregated performance metrics (included when include_performance=true)' ), ] = None status: Annotated[ - creative_status.CreativeStatus, Field(description="Current approval status of the creative") + creative_status.CreativeStatus, Field(description='Current approval status of the creative') ] sub_assets: Annotated[ list[sub_asset.SubAsset] | None, Field( - description="Sub-assets for multi-asset formats (included when include_sub_assets=true)" + description='Sub-assets for multi-asset formats (included when include_sub_assets=true)' ), ] = None tags: Annotated[ - list[str] | None, Field(description="User-defined tags for organization and searchability") + list[str] | None, Field(description='User-defined tags for organization and searchability') ] = None - updated_date: Annotated[AwareDatetime, Field(description="When the creative was last modified")] + updated_date: Annotated[AwareDatetime, Field(description='When the creative was last modified')] class ListCreativesResponse(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None creatives: Annotated[ - list[Creative], Field(description="Array of creative assets matching the query") + list[Creative], Field(description='Array of creative assets matching the query') ] ext: ext_1.ExtensionObject | None = None format_summary: Annotated[ - dict[Annotated[str, StringConstraints(pattern=r"^[a-zA-Z0-9_-]+$")], int] | None, - Field(description="Breakdown of creatives by format type"), + dict[Annotated[str, StringConstraints(pattern=r'^[a-zA-Z0-9_-]+$')], int] | None, + Field(description='Breakdown of creatives by format type'), ] = None pagination: pagination_response.PaginationResponse query_summary: Annotated[ - QuerySummary, Field(description="Summary of the query that was executed") + QuerySummary, Field(description='Summary of the query that was executed') ] sandbox: Annotated[ bool | None, - Field(description="When true, this response contains simulated data from sandbox mode."), + Field(description='When true, this response contains simulated data from sandbox mode.'), ] = None status_summary: Annotated[ - StatusSummary | None, Field(description="Breakdown of creatives by status") + StatusSummary | None, Field(description='Breakdown of creatives by status') ] = None diff --git a/src/adcp/types/generated_poc/media_buy/log_event_request.py b/src/adcp/types/generated_poc/media_buy/log_event_request.py index bef1295a..a342cda5 100644 --- a/src/adcp/types/generated_poc/media_buy/log_event_request.py +++ b/src/adcp/types/generated_poc/media_buy/log_event_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/log_event_request.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,14 +16,14 @@ class LogEventRequest(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None event_source_id: Annotated[ - str, Field(description="Event source configured on the account via sync_event_sources") + str, Field(description='Event source configured on the account via sync_event_sources') ] events: Annotated[ - list[event.Event], Field(description="Events to log", max_length=10000, min_length=1) + list[event.Event], Field(description='Events to log', max_length=10000, min_length=1) ] ext: ext_1.ExtensionObject | None = None test_event_code: Annotated[ diff --git a/src/adcp/types/generated_poc/media_buy/log_event_response.py b/src/adcp/types/generated_poc/media_buy/log_event_response.py index 21d6866e..c908f388 100644 --- a/src/adcp/types/generated_poc/media_buy/log_event_response.py +++ b/src/adcp/types/generated_poc/media_buy/log_event_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/log_event_response.json -# timestamp: 2026-02-20T02:37:39+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,52 +16,52 @@ class PartialFailure(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - code: Annotated[str, Field(description="Error code")] - event_id: Annotated[str, Field(description="ID of the failed event")] - message: Annotated[str, Field(description="Human-readable error message")] + code: Annotated[str, Field(description='Error code')] + event_id: Annotated[str, Field(description='ID of the failed event')] + message: Annotated[str, Field(description='Human-readable error message')] class LogEventResponse1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None events_processed: Annotated[ - int, Field(description="Number of events successfully queued for processing", ge=0) + int, Field(description='Number of events successfully queued for processing', ge=0) ] - events_received: Annotated[int, Field(description="Number of events received", ge=0)] + events_received: Annotated[int, Field(description='Number of events received', ge=0)] ext: ext_1.ExtensionObject | None = None match_quality: Annotated[ float | None, Field( - description="Overall match quality score for the batch (0.0 = no matches, 1.0 = all matched)", + description='Overall match quality score for the batch (0.0 = no matches, 1.0 = all matched)', ge=0.0, le=1.0, ), ] = None partial_failures: Annotated[ - list[PartialFailure] | None, Field(description="Events that failed validation") + list[PartialFailure] | None, Field(description='Events that failed validation') ] = None sandbox: Annotated[ bool | None, - Field(description="When true, this response contains simulated data from sandbox mode."), + Field(description='When true, this response contains simulated data from sandbox mode.'), ] = None warnings: Annotated[ list[str] | None, Field( - description="Non-fatal issues (low match quality, missing recommended fields, deprecation notices)" + description='Non-fatal issues (low match quality, missing recommended fields, deprecation notices)' ), ] = None class LogEventResponse2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None - errors: Annotated[list[error.Error], Field(description="Operation-level errors", min_length=1)] + errors: Annotated[list[error.Error], Field(description='Operation-level errors', min_length=1)] ext: ext_1.ExtensionObject | None = None @@ -69,7 +69,7 @@ class LogEventResponse(RootModel[LogEventResponse1 | LogEventResponse2]): root: Annotated[ LogEventResponse1 | LogEventResponse2, Field( - description="Response from event logging operation. Returns either event processing results OR operation-level errors.", - title="Log Event Response", + description='Response from event logging operation. Returns either event processing results OR operation-level errors.', + title='Log Event Response', ), ] diff --git a/src/adcp/types/generated_poc/media_buy/package_request.py b/src/adcp/types/generated_poc/media_buy/package_request.py index cb4a47da..c4b51106 100644 --- a/src/adcp/types/generated_poc/media_buy/package_request.py +++ b/src/adcp/types/generated_poc/media_buy/package_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/package_request.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -20,7 +20,7 @@ class PackageRequest(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) bid_price: Annotated[ float | None, @@ -37,20 +37,20 @@ class PackageRequest(AdCPBaseModel): catalog: Annotated[ catalog_1.Catalog | None, Field( - description="Catalog this package promotes. Makes the package catalog-driven: one budget envelope, platform optimizes across items. Reference a synced catalog by catalog_id with optional selectors to narrow scope." + description='Catalog this package promotes. Makes the package catalog-driven: one budget envelope, platform optimizes across items. Reference a synced catalog by catalog_id with optional selectors to narrow scope.' ), ] = None creative_assignments: Annotated[ list[creative_assignment.CreativeAssignment] | None, Field( - description="Assign existing library creatives to this package with optional weights and placement targeting", + description='Assign existing library creatives to this package with optional weights and placement targeting', min_length=1, ), ] = None creatives: Annotated[ list[creative_asset.CreativeAsset] | None, Field( - description="Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.", + description='Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.', max_length=100, min_length=1, ), @@ -59,19 +59,19 @@ class PackageRequest(AdCPBaseModel): format_ids: Annotated[ list[format_id.FormatId] | None, Field( - description="Array of format IDs that will be used for this package - must be supported by the product. If omitted, defaults to all formats supported by the product.", + description='Array of format IDs that will be used for this package - must be supported by the product. If omitted, defaults to all formats supported by the product.', min_length=1, ), ] = None impressions: Annotated[ - float | None, Field(description="Impression goal for this package", ge=0.0) + float | None, Field(description='Impression goal for this package', ge=0.0) ] = None optimization_goal: optimization_goal_1.OptimizationGoal | None = None pacing: pacing_1.Pacing | None = None paused: Annotated[ bool | None, Field( - description="Whether this package should be created in a paused state. Paused packages do not deliver impressions. Defaults to false." + description='Whether this package should be created in a paused state. Paused packages do not deliver impressions. Defaults to false.' ), ] = False pricing_option_id: Annotated[ @@ -80,5 +80,5 @@ class PackageRequest(AdCPBaseModel): description="ID of the selected pricing option from the product's pricing_options array" ), ] - product_id: Annotated[str, Field(description="Product ID for this package")] + product_id: Annotated[str, Field(description='Product ID for this package')] targeting_overlay: targeting.TargetingOverlay | None = None diff --git a/src/adcp/types/generated_poc/media_buy/package_update.py b/src/adcp/types/generated_poc/media_buy/package_update.py index a37f3d1c..5c938fd4 100644 --- a/src/adcp/types/generated_poc/media_buy/package_update.py +++ b/src/adcp/types/generated_poc/media_buy/package_update.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/package_update.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -19,7 +19,7 @@ class PackageUpdate1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) bid_price: Annotated[ float | None, @@ -31,7 +31,7 @@ class PackageUpdate1(AdCPBaseModel): budget: Annotated[ float | None, Field( - description="Updated budget allocation for this package in the currency specified by the pricing option", + description='Updated budget allocation for this package in the currency specified by the pricing option', ge=0.0, ), ] = None @@ -41,40 +41,40 @@ class PackageUpdate1(AdCPBaseModel): catalog: Annotated[ catalog_1.Catalog | None, Field( - description="Update the catalog this package promotes. Replaces the current catalog reference." + description='Update the catalog this package promotes. Replaces the current catalog reference.' ), ] = None creative_assignments: Annotated[ list[creative_assignment.CreativeAssignment] | None, Field( - description="Replace creative assignments for this package with optional weights and placement targeting. Uses replacement semantics - omit to leave assignments unchanged." + description='Replace creative assignments for this package with optional weights and placement targeting. Uses replacement semantics - omit to leave assignments unchanged.' ), ] = None creatives: Annotated[ list[creative_asset.CreativeAsset] | None, Field( - description="Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.", + description='Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.', max_length=100, min_length=1, ), ] = None ext: ext_1.ExtensionObject | None = None impressions: Annotated[ - float | None, Field(description="Updated impression goal for this package", ge=0.0) + float | None, Field(description='Updated impression goal for this package', ge=0.0) ] = None optimization_goal: optimization_goal_1.OptimizationGoal | None = None pacing: pacing_1.Pacing | None = None package_id: Annotated[str, Field(description="Publisher's ID of package to update")] paused: Annotated[ bool | None, - Field(description="Pause/resume specific package (true = paused, false = active)"), + Field(description='Pause/resume specific package (true = paused, false = active)'), ] = None targeting_overlay: targeting.TargetingOverlay | None = None class PackageUpdate2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) bid_price: Annotated[ float | None, @@ -86,7 +86,7 @@ class PackageUpdate2(AdCPBaseModel): budget: Annotated[ float | None, Field( - description="Updated budget allocation for this package in the currency specified by the pricing option", + description='Updated budget allocation for this package in the currency specified by the pricing option', ge=0.0, ), ] = None @@ -94,26 +94,26 @@ class PackageUpdate2(AdCPBaseModel): catalog: Annotated[ catalog_1.Catalog | None, Field( - description="Update the catalog this package promotes. Replaces the current catalog reference." + description='Update the catalog this package promotes. Replaces the current catalog reference.' ), ] = None creative_assignments: Annotated[ list[creative_assignment.CreativeAssignment] | None, Field( - description="Replace creative assignments for this package with optional weights and placement targeting. Uses replacement semantics - omit to leave assignments unchanged." + description='Replace creative assignments for this package with optional weights and placement targeting. Uses replacement semantics - omit to leave assignments unchanged.' ), ] = None creatives: Annotated[ list[creative_asset.CreativeAsset] | None, Field( - description="Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.", + description='Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.', max_length=100, min_length=1, ), ] = None ext: ext_1.ExtensionObject | None = None impressions: Annotated[ - float | None, Field(description="Updated impression goal for this package", ge=0.0) + float | None, Field(description='Updated impression goal for this package', ge=0.0) ] = None optimization_goal: optimization_goal_1.OptimizationGoal | None = None pacing: pacing_1.Pacing | None = None @@ -122,7 +122,7 @@ class PackageUpdate2(AdCPBaseModel): ) paused: Annotated[ bool | None, - Field(description="Pause/resume specific package (true = paused, false = active)"), + Field(description='Pause/resume specific package (true = paused, false = active)'), ] = None targeting_overlay: targeting.TargetingOverlay | None = None @@ -131,7 +131,7 @@ class PackageUpdate(RootModel[PackageUpdate1 | PackageUpdate2]): root: Annotated[ PackageUpdate1 | PackageUpdate2, Field( - description="Package update configuration for update_media_buy. Identifies package by package_id or buyer_ref and specifies fields to modify. Fields not present are left unchanged. Note: product_id, format_ids, and pricing_option_id cannot be changed after creation.", - title="Package Update", + description='Package update configuration for update_media_buy. Identifies package by package_id or buyer_ref and specifies fields to modify. Fields not present are left unchanged. Note: product_id, format_ids, and pricing_option_id cannot be changed after creation.', + title='Package Update', ), ] diff --git a/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py b/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py index 48787b8e..2616fe19 100644 --- a/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +++ b/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/provide_performance_feedback_request.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -17,19 +17,19 @@ class MeasurementPeriod(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) end: Annotated[ - AwareDatetime, Field(description="ISO 8601 end timestamp for measurement period") + AwareDatetime, Field(description='ISO 8601 end timestamp for measurement period') ] start: Annotated[ - AwareDatetime, Field(description="ISO 8601 start timestamp for measurement period") + AwareDatetime, Field(description='ISO 8601 start timestamp for measurement period') ] class ProvidePerformanceFeedbackRequest1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) buyer_ref: Annotated[ str | None, Field(description="Buyer's reference for the media buy", min_length=1) @@ -38,33 +38,33 @@ class ProvidePerformanceFeedbackRequest1(AdCPBaseModel): creative_id: Annotated[ str | None, Field( - description="Specific creative asset (if feedback is creative-specific)", min_length=1 + description='Specific creative asset (if feedback is creative-specific)', min_length=1 ), ] = None ext: ext_1.ExtensionObject | None = None feedback_source: Annotated[ - feedback_source_1.FeedbackSource | None, Field(description="Source of the performance data") + feedback_source_1.FeedbackSource | None, Field(description='Source of the performance data') ] = feedback_source_1.FeedbackSource.buyer_attribution measurement_period: Annotated[ - MeasurementPeriod, Field(description="Time period for performance measurement") + MeasurementPeriod, Field(description='Time period for performance measurement') ] media_buy_id: Annotated[ str, Field(description="Publisher's media buy identifier", min_length=1) ] metric_type: Annotated[ - metric_type_1.MetricType | None, Field(description="The business metric being measured") + metric_type_1.MetricType | None, Field(description='The business metric being measured') ] = metric_type_1.MetricType.overall_performance package_id: Annotated[ str | None, Field( - description="Specific package within the media buy (if feedback is package-specific)", + description='Specific package within the media buy (if feedback is package-specific)', min_length=1, ), ] = None performance_index: Annotated[ float, Field( - description="Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)", + description='Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)', ge=0.0, ), ] @@ -72,7 +72,7 @@ class ProvidePerformanceFeedbackRequest1(AdCPBaseModel): class ProvidePerformanceFeedbackRequest2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) buyer_ref: Annotated[ str, Field(description="Buyer's reference for the media buy", min_length=1) @@ -81,33 +81,33 @@ class ProvidePerformanceFeedbackRequest2(AdCPBaseModel): creative_id: Annotated[ str | None, Field( - description="Specific creative asset (if feedback is creative-specific)", min_length=1 + description='Specific creative asset (if feedback is creative-specific)', min_length=1 ), ] = None ext: ext_1.ExtensionObject | None = None feedback_source: Annotated[ - feedback_source_1.FeedbackSource | None, Field(description="Source of the performance data") + feedback_source_1.FeedbackSource | None, Field(description='Source of the performance data') ] = feedback_source_1.FeedbackSource.buyer_attribution measurement_period: Annotated[ - MeasurementPeriod, Field(description="Time period for performance measurement") + MeasurementPeriod, Field(description='Time period for performance measurement') ] media_buy_id: Annotated[ str | None, Field(description="Publisher's media buy identifier", min_length=1) ] = None metric_type: Annotated[ - metric_type_1.MetricType | None, Field(description="The business metric being measured") + metric_type_1.MetricType | None, Field(description='The business metric being measured') ] = metric_type_1.MetricType.overall_performance package_id: Annotated[ str | None, Field( - description="Specific package within the media buy (if feedback is package-specific)", + description='Specific package within the media buy (if feedback is package-specific)', min_length=1, ), ] = None performance_index: Annotated[ float, Field( - description="Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)", + description='Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)', ge=0.0, ), ] @@ -119,7 +119,7 @@ class ProvidePerformanceFeedbackRequest( root: Annotated[ ProvidePerformanceFeedbackRequest1 | ProvidePerformanceFeedbackRequest2, Field( - description="Request payload for provide_performance_feedback task", - title="Provide Performance Feedback Request", + description='Request payload for provide_performance_feedback task', + title='Provide Performance Feedback Request', ), ] diff --git a/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py b/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py index 79133bdf..2904df77 100644 --- a/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +++ b/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/provide_performance_feedback_response.json -# timestamp: 2026-02-20T02:37:39+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,29 +16,29 @@ class ProvidePerformanceFeedbackResponse1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None sandbox: Annotated[ bool | None, - Field(description="When true, this response contains simulated data from sandbox mode."), + Field(description='When true, this response contains simulated data from sandbox mode.'), ] = None success: Annotated[ Literal[True], - Field(description="Whether the performance feedback was successfully received"), + Field(description='Whether the performance feedback was successfully received'), ] class ProvidePerformanceFeedbackResponse2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error], Field( - description="Array of errors explaining why feedback was rejected (e.g., invalid measurement period, missing campaign data)", + description='Array of errors explaining why feedback was rejected (e.g., invalid measurement period, missing campaign data)', min_length=1, ), ] @@ -51,7 +51,7 @@ class ProvidePerformanceFeedbackResponse( root: Annotated[ ProvidePerformanceFeedbackResponse1 | ProvidePerformanceFeedbackResponse2, Field( - description="Response payload for provide_performance_feedback task. Returns either success confirmation OR error information, never both.", - title="Provide Performance Feedback Response", + description='Response payload for provide_performance_feedback task. Returns either success confirmation OR error information, never both.', + title='Provide Performance Feedback Response', ), ] diff --git a/src/adcp/types/generated_poc/media_buy/sync_audiences_request.py b/src/adcp/types/generated_poc/media_buy/sync_audiences_request.py index c19bc5c0..1ad8eed7 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_audiences_request.py +++ b/src/adcp/types/generated_poc/media_buy/sync_audiences_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/sync_audiences_request.json -# timestamp: 2026-02-20T02:37:39+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,20 +16,20 @@ class ConsentBasis(Enum): - consent = "consent" - legitimate_interest = "legitimate_interest" - contract = "contract" - legal_obligation = "legal_obligation" + consent = 'consent' + legitimate_interest = 'legitimate_interest' + contract = 'contract' + legal_obligation = 'legal_obligation' class Audience(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) add: Annotated[ list[audience_member.AudienceMember] | None, Field( - description="Members to add to this audience. Hashed before sending — normalize emails to lowercase+trim, phones to E.164.", + description='Members to add to this audience. Hashed before sending — normalize emails to lowercase+trim, phones to E.164.', min_length=1, ), ] = None @@ -42,20 +42,20 @@ class Audience(AdCPBaseModel): consent_basis: Annotated[ ConsentBasis | None, Field( - description="GDPR lawful basis for processing this audience list. Informational — not validated by the protocol, but required by some sellers operating in regulated markets (e.g. EU). When omitted, the buyer asserts they have a lawful basis appropriate to their jurisdiction." + description='GDPR lawful basis for processing this audience list. Informational — not validated by the protocol, but required by some sellers operating in regulated markets (e.g. EU). When omitted, the buyer asserts they have a lawful basis appropriate to their jurisdiction.' ), ] = None delete: Annotated[ bool | None, Field( - description="When true, delete this audience from the account entirely. All other fields on this audience object are ignored. Use this to delete a specific audience without affecting others." + description='When true, delete this audience from the account entirely. All other fields on this audience object are ignored. Use this to delete a specific audience without affecting others.' ), ] = None - name: Annotated[str | None, Field(description="Human-readable name for this audience")] = None + name: Annotated[str | None, Field(description='Human-readable name for this audience')] = None remove: Annotated[ list[audience_member.AudienceMember] | None, Field( - description="Members to remove from this audience. If the same identifier appears in both add and remove in a single request, remove takes precedence.", + description='Members to remove from this audience. If the same identifier appears in both add and remove in a single request, remove takes precedence.', min_length=1, ), ] = None @@ -63,13 +63,13 @@ class Audience(AdCPBaseModel): class SyncAudiencesRequest(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - account_id: Annotated[str, Field(description="Account to manage audiences for")] + account_id: Annotated[str, Field(description='Account to manage audiences for')] audiences: Annotated[ list[Audience] | None, Field( - description="Audiences to sync (create or update). When omitted, the call is discovery-only and returns all existing audiences on the account without modification.", + description='Audiences to sync (create or update). When omitted, the call is discovery-only and returns all existing audiences on the account without modification.', min_length=1, ), ] = None @@ -77,7 +77,7 @@ class SyncAudiencesRequest(AdCPBaseModel): delete_missing: Annotated[ bool | None, Field( - description="When true, buyer-managed audiences on the account not included in this sync will be removed. Does not affect seller-managed audiences. Do not combine with an omitted audiences array or all buyer-managed audiences will be deleted." + description='When true, buyer-managed audiences on the account not included in this sync will be removed. Does not affect seller-managed audiences. Do not combine with an omitted audiences array or all buyer-managed audiences will be deleted.' ), ] = False ext: ext_1.ExtensionObject | None = None diff --git a/src/adcp/types/generated_poc/media_buy/sync_audiences_response.py b/src/adcp/types/generated_poc/media_buy/sync_audiences_response.py index d4f5f8c6..f0a7d163 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_audiences_response.py +++ b/src/adcp/types/generated_poc/media_buy/sync_audiences_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/sync_audiences_response.json -# timestamp: 2026-02-20T02:37:39+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,22 +16,22 @@ class Action(Enum): - created = "created" - updated = "updated" - unchanged = "unchanged" - deleted = "deleted" - failed = "failed" + created = 'created' + updated = 'updated' + unchanged = 'unchanged' + deleted = 'deleted' + failed = 'failed' class Status(Enum): - processing = "processing" - ready = "ready" - too_small = "too_small" + processing = 'processing' + ready = 'ready' + too_small = 'too_small' class Audience(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) action: Annotated[ Action, @@ -49,7 +49,7 @@ class Audience(AdCPBaseModel): last_synced_at: Annotated[ AwareDatetime | None, Field( - description="ISO 8601 timestamp of when the most recent sync operation was accepted by the platform. Useful for agents reasoning about audience freshness. Omitted if the seller does not track this." + description='ISO 8601 timestamp of when the most recent sync operation was accepted by the platform. Useful for agents reasoning about audience freshness. Omitted if the seller does not track this.' ), ] = None matched_count: Annotated[ @@ -66,10 +66,10 @@ class Audience(AdCPBaseModel): ge=1, ), ] = None - name: Annotated[str | None, Field(description="Name of the audience")] = None + name: Annotated[str | None, Field(description='Name of the audience')] = None seller_id: Annotated[ str | None, - Field(description="Seller-assigned identifier for this audience in their ad platform"), + Field(description='Seller-assigned identifier for this audience in their ad platform'), ] = None status: Annotated[ Status | None, @@ -80,7 +80,7 @@ class Audience(AdCPBaseModel): uploaded_count: Annotated[ int | None, Field( - description="Number of members submitted in this sync operation (delta, not cumulative). In discovery-only calls (no audiences array), this is 0.", + description='Number of members submitted in this sync operation (delta, not cumulative). In discovery-only calls (no audiences array), this is 0.', ge=0, ), ] = None @@ -88,27 +88,27 @@ class Audience(AdCPBaseModel): class SyncAudiencesResponse1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) audiences: Annotated[ - list[Audience], Field(description="Results for each audience on the account") + list[Audience], Field(description='Results for each audience on the account') ] context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None sandbox: Annotated[ bool | None, - Field(description="When true, this response contains simulated data from sandbox mode."), + Field(description='When true, this response contains simulated data from sandbox mode.'), ] = None class SyncAudiencesResponse2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error], - Field(description="Operation-level errors that prevented processing", min_length=1), + Field(description='Operation-level errors that prevented processing', min_length=1), ] ext: ext_1.ExtensionObject | None = None @@ -117,7 +117,7 @@ class SyncAudiencesResponse(RootModel[SyncAudiencesResponse1 | SyncAudiencesResp root: Annotated[ SyncAudiencesResponse1 | SyncAudiencesResponse2, Field( - description="Response from audience sync operation. Returns either per-audience results OR operation-level errors.", - title="Sync Audiences Response", + description='Response from audience sync operation. Returns either per-audience results OR operation-level errors.', + title='Sync Audiences Response', ), ] diff --git a/src/adcp/types/generated_poc/media_buy/sync_catalogs_async_response_input_required.py b/src/adcp/types/generated_poc/media_buy/sync_catalogs_async_response_input_required.py index 9a5dca8e..512017c3 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_catalogs_async_response_input_required.py +++ b/src/adcp/types/generated_poc/media_buy/sync_catalogs_async_response_input_required.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/sync_catalogs_async_response_input_required.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,21 +15,21 @@ class Reason(Enum): - APPROVAL_REQUIRED = "APPROVAL_REQUIRED" - FEED_VALIDATION = "FEED_VALIDATION" - ITEM_REVIEW = "ITEM_REVIEW" - FEED_ACCESS = "FEED_ACCESS" + APPROVAL_REQUIRED = 'APPROVAL_REQUIRED' + FEED_VALIDATION = 'FEED_VALIDATION' + ITEM_REVIEW = 'ITEM_REVIEW' + FEED_ACCESS = 'FEED_ACCESS' class SyncCatalogsInputRequired(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None reason: Annotated[ Reason | None, Field( - description="Reason code indicating why buyer input is needed. APPROVAL_REQUIRED: platform requires explicit approval before activating the catalog. FEED_VALIDATION: feed URL returned unexpected format or schema errors. ITEM_REVIEW: platform flagged items for manual review. FEED_ACCESS: platform cannot access the feed URL (authentication, CORS, etc.)." + description='Reason code indicating why buyer input is needed. APPROVAL_REQUIRED: platform requires explicit approval before activating the catalog. FEED_VALIDATION: feed URL returned unexpected format or schema errors. ITEM_REVIEW: platform flagged items for manual review. FEED_ACCESS: platform cannot access the feed URL (authentication, CORS, etc.).' ), ] = None diff --git a/src/adcp/types/generated_poc/media_buy/sync_catalogs_async_response_submitted.py b/src/adcp/types/generated_poc/media_buy/sync_catalogs_async_response_submitted.py index 38ff94fa..4f83eb7f 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_catalogs_async_response_submitted.py +++ b/src/adcp/types/generated_poc/media_buy/sync_catalogs_async_response_submitted.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/sync_catalogs_async_response_submitted.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -13,7 +13,7 @@ class SyncCatalogsSubmitted(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None diff --git a/src/adcp/types/generated_poc/media_buy/sync_catalogs_async_response_working.py b/src/adcp/types/generated_poc/media_buy/sync_catalogs_async_response_working.py index c7c429b4..f2e15e0a 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_catalogs_async_response_working.py +++ b/src/adcp/types/generated_poc/media_buy/sync_catalogs_async_response_working.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/sync_catalogs_async_response_working.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,13 +15,13 @@ class SyncCatalogsWorking(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) catalogs_processed: Annotated[ - int | None, Field(description="Number of catalogs processed so far", ge=0) + int | None, Field(description='Number of catalogs processed so far', ge=0) ] = None catalogs_total: Annotated[ - int | None, Field(description="Total number of catalogs to process", ge=0) + int | None, Field(description='Total number of catalogs to process', ge=0) ] = None context: context_1.ContextObject | None = None current_step: Annotated[ @@ -33,16 +33,16 @@ class SyncCatalogsWorking(AdCPBaseModel): ext: ext_1.ExtensionObject | None = None items_processed: Annotated[ int | None, - Field(description="Total number of catalog items processed across all catalogs", ge=0), + Field(description='Total number of catalog items processed across all catalogs', ge=0), ] = None items_total: Annotated[ int | None, - Field(description="Total number of catalog items to process across all catalogs", ge=0), + Field(description='Total number of catalog items to process across all catalogs', ge=0), ] = None percentage: Annotated[ - float | None, Field(description="Completion percentage (0-100)", ge=0.0, le=100.0) + float | None, Field(description='Completion percentage (0-100)', ge=0.0, le=100.0) ] = None - step_number: Annotated[int | None, Field(description="Current step number", ge=1)] = None + step_number: Annotated[int | None, Field(description='Current step number', ge=1)] = None total_steps: Annotated[ - int | None, Field(description="Total number of steps in the operation", ge=1) + int | None, Field(description='Total number of steps in the operation', ge=1) ] = None diff --git a/src/adcp/types/generated_poc/media_buy/sync_catalogs_request.py b/src/adcp/types/generated_poc/media_buy/sync_catalogs_request.py index 330b4556..ba3ed0c4 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_catalogs_request.py +++ b/src/adcp/types/generated_poc/media_buy/sync_catalogs_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/sync_catalogs_request.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -18,18 +18,18 @@ class SyncCatalogsRequest(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) account_id: Annotated[ str | None, Field( - description="Account that owns these catalogs. Required if the agent has multiple accounts and the seller cannot route automatically." + description='Account that owns these catalogs. Required if the agent has multiple accounts and the seller cannot route automatically.' ), ] = None catalog_ids: Annotated[ list[str] | None, Field( - description="Optional filter to limit sync scope to specific catalog IDs. When provided, only these catalogs will be created/updated. Other catalogs on the account are unaffected.", + description='Optional filter to limit sync scope to specific catalog IDs. When provided, only these catalogs will be created/updated. Other catalogs on the account are unaffected.', max_length=50, min_length=1, ), @@ -37,7 +37,7 @@ class SyncCatalogsRequest(AdCPBaseModel): catalogs: Annotated[ list[catalog.Catalog] | None, Field( - description="Array of catalog feeds to sync (create or update). When omitted, the call is discovery-only and returns all existing catalogs on the account without modification.", + description='Array of catalog feeds to sync (create or update). When omitted, the call is discovery-only and returns all existing catalogs on the account without modification.', max_length=50, min_length=1, ), @@ -46,20 +46,20 @@ class SyncCatalogsRequest(AdCPBaseModel): delete_missing: Annotated[ bool | None, Field( - description="When true, buyer-managed catalogs on the account not included in this sync will be removed. Does not affect seller-managed catalogs. Do not combine with an omitted catalogs array or all buyer-managed catalogs will be deleted." + description='When true, buyer-managed catalogs on the account not included in this sync will be removed. Does not affect seller-managed catalogs. Do not combine with an omitted catalogs array or all buyer-managed catalogs will be deleted.' ), ] = False dry_run: Annotated[ bool | None, Field( - description="When true, preview changes without applying them. Returns what would be created/updated/deleted." + description='When true, preview changes without applying them. Returns what would be created/updated/deleted.' ), ] = False ext: ext_1.ExtensionObject | None = None push_notification_config: Annotated[ push_notification_config_1.PushNotificationConfig | None, Field( - description="Optional webhook configuration for async sync notifications. Publisher will send webhook when sync completes if operation takes longer than immediate response time (common for large feeds requiring platform review)." + description='Optional webhook configuration for async sync notifications. Publisher will send webhook when sync completes if operation takes longer than immediate response time (common for large feeds requiring platform review).' ), ] = None validation_mode: Annotated[ diff --git a/src/adcp/types/generated_poc/media_buy/sync_catalogs_response.py b/src/adcp/types/generated_poc/media_buy/sync_catalogs_response.py index f150e740..89980f63 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_catalogs_response.py +++ b/src/adcp/types/generated_poc/media_buy/sync_catalogs_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/sync_catalogs_response.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -17,25 +17,25 @@ class ItemIssue(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - item_id: Annotated[str, Field(description="ID of the catalog item with an issue")] - reasons: Annotated[list[str] | None, Field(description="Reasons for rejection or warning")] = ( + item_id: Annotated[str, Field(description='ID of the catalog item with an issue')] + reasons: Annotated[list[str] | None, Field(description='Reasons for rejection or warning')] = ( None ) status: Annotated[ - catalog_item_status.CatalogItemStatus, Field(description="Item review status") + catalog_item_status.CatalogItemStatus, Field(description='Item review status') ] class Catalog(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) action: Annotated[ - catalog_action.CatalogAction, Field(description="Action taken for this catalog") + catalog_action.CatalogAction, Field(description='Action taken for this catalog') ] - catalog_id: Annotated[str, Field(description="Catalog ID from the request")] + catalog_id: Annotated[str, Field(description='Catalog ID from the request')] changes: Annotated[ list[str] | None, Field(description="Field names that were modified (only present when action='updated')"), @@ -45,58 +45,58 @@ class Catalog(AdCPBaseModel): Field(description="Validation or processing errors (only present when action='failed')"), ] = None item_count: Annotated[ - int | None, Field(description="Total number of items in the catalog after sync", ge=0) + int | None, Field(description='Total number of items in the catalog after sync', ge=0) ] = None item_issues: Annotated[ list[ItemIssue] | None, Field( - description="Per-item issues reported by the platform (rejections, warnings). Only present when the platform performs item-level review." + description='Per-item issues reported by the platform (rejections, warnings). Only present when the platform performs item-level review.' ), ] = None items_approved: Annotated[ int | None, Field( - description="Number of items approved by the platform. Populated when the platform performs item-level review.", + description='Number of items approved by the platform. Populated when the platform performs item-level review.', ge=0, ), ] = None items_pending: Annotated[ int | None, Field( - description="Number of items pending platform review. Common for product catalogs where items must pass content policy checks.", + description='Number of items pending platform review. Common for product catalogs where items must pass content policy checks.', ge=0, ), ] = None items_rejected: Annotated[ int | None, Field( - description="Number of items rejected by the platform. Check item_issues for rejection reasons.", + description='Number of items rejected by the platform. Check item_issues for rejection reasons.', ge=0, ), ] = None last_synced_at: Annotated[ AwareDatetime | None, Field( - description="ISO 8601 timestamp of when the most recent sync was accepted by the platform" + description='ISO 8601 timestamp of when the most recent sync was accepted by the platform' ), ] = None next_fetch_at: Annotated[ AwareDatetime | None, Field( - description="ISO 8601 timestamp of when the platform will next fetch the feed URL. Only present for URL-based catalogs with update_frequency." + description='ISO 8601 timestamp of when the platform will next fetch the feed URL. Only present for URL-based catalogs with update_frequency.' ), ] = None platform_id: Annotated[ - str | None, Field(description="Platform-specific ID assigned to the catalog") + str | None, Field(description='Platform-specific ID assigned to the catalog') ] = None warnings: Annotated[ - list[str] | None, Field(description="Non-fatal warnings about this catalog") + list[str] | None, Field(description='Non-fatal warnings about this catalog') ] = None class SyncCatalogsResponse1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) catalogs: Annotated[ list[Catalog], @@ -106,24 +106,24 @@ class SyncCatalogsResponse1(AdCPBaseModel): ] context: context_1.ContextObject | None = None dry_run: Annotated[ - bool | None, Field(description="Whether this was a dry run (no actual changes made)") + bool | None, Field(description='Whether this was a dry run (no actual changes made)') ] = None ext: ext_1.ExtensionObject | None = None sandbox: Annotated[ bool | None, - Field(description="When true, this response contains simulated data from sandbox mode."), + Field(description='When true, this response contains simulated data from sandbox mode.'), ] = None class SyncCatalogsResponse2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error], Field( - description="Operation-level errors that prevented processing any catalogs (e.g., authentication failure, service unavailable, invalid request format)", + description='Operation-level errors that prevented processing any catalogs (e.g., authentication failure, service unavailable, invalid request format)', min_length=1, ), ] @@ -134,7 +134,7 @@ class SyncCatalogsResponse(RootModel[SyncCatalogsResponse1 | SyncCatalogsRespons root: Annotated[ SyncCatalogsResponse1 | SyncCatalogsResponse2, Field( - description="Response from catalog sync operation. Returns either per-catalog results (best-effort processing) OR operation-level errors (complete failure). Platforms may approve, reject, or flag individual items within each catalog (similar to Google Merchant Center product review).", - title="Sync Catalogs Response", + description='Response from catalog sync operation. Returns either per-catalog results (best-effort processing) OR operation-level errors (complete failure). Platforms may approve, reject, or flag individual items within each catalog (similar to Google Merchant Center product review).', + title='Sync Catalogs Response', ), ] diff --git a/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py b/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py index 75ffdb7d..34993946 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +++ b/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/sync_creatives_async_response_input_required.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,17 +15,17 @@ class Reason(Enum): - APPROVAL_REQUIRED = "APPROVAL_REQUIRED" - ASSET_CONFIRMATION = "ASSET_CONFIRMATION" - FORMAT_CLARIFICATION = "FORMAT_CLARIFICATION" + APPROVAL_REQUIRED = 'APPROVAL_REQUIRED' + ASSET_CONFIRMATION = 'ASSET_CONFIRMATION' + FORMAT_CLARIFICATION = 'FORMAT_CLARIFICATION' class SyncCreativesInputRequired(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None reason: Annotated[ - Reason | None, Field(description="Reason code indicating why buyer input is needed") + Reason | None, Field(description='Reason code indicating why buyer input is needed') ] = None diff --git a/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py b/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py index 8650971b..1748f09e 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +++ b/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/sync_creatives_async_response_submitted.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -13,7 +13,7 @@ class SyncCreativesSubmitted(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None diff --git a/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py b/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py index 3b58f69e..45b8c87e 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +++ b/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/sync_creatives_async_response_working.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,23 +15,23 @@ class SyncCreativesWorking(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None creatives_processed: Annotated[ - int | None, Field(description="Number of creatives processed so far", ge=0) + int | None, Field(description='Number of creatives processed so far', ge=0) ] = None creatives_total: Annotated[ - int | None, Field(description="Total number of creatives to process", ge=0) + int | None, Field(description='Total number of creatives to process', ge=0) ] = None current_step: Annotated[ - str | None, Field(description="Current step or phase of the operation") + str | None, Field(description='Current step or phase of the operation') ] = None ext: ext_1.ExtensionObject | None = None percentage: Annotated[ - float | None, Field(description="Completion percentage (0-100)", ge=0.0, le=100.0) + float | None, Field(description='Completion percentage (0-100)', ge=0.0, le=100.0) ] = None - step_number: Annotated[int | None, Field(description="Current step number", ge=1)] = None + step_number: Annotated[int | None, Field(description='Current step number', ge=1)] = None total_steps: Annotated[ - int | None, Field(description="Total number of steps in the operation", ge=1) + int | None, Field(description='Total number of steps in the operation', ge=1) ] = None diff --git a/src/adcp/types/generated_poc/media_buy/sync_creatives_request.py b/src/adcp/types/generated_poc/media_buy/sync_creatives_request.py index a854ff56..d10aec26 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_creatives_request.py +++ b/src/adcp/types/generated_poc/media_buy/sync_creatives_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/sync_creatives_request.json -# timestamp: 2026-02-18T17:56:28+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -18,23 +18,23 @@ class SyncCreativesRequest(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) account_id: Annotated[ str | None, Field( - description="Account that owns these creatives. Optional if the agent has a single account or the seller can determine the account from context. Required if the agent has multiple accounts and the seller cannot route automatically." + description='Account that owns these creatives. Optional if the agent has a single account or the seller can determine the account from context. Required if the agent has multiple accounts and the seller cannot route automatically.' ), ] = None assignments: Annotated[ - dict[Annotated[str, StringConstraints(pattern=r"^[a-zA-Z0-9_-]+$")], list[str]] | None, - Field(description="Optional bulk assignment of creatives to packages"), + dict[Annotated[str, StringConstraints(pattern=r'^[a-zA-Z0-9_-]+$')], list[str]] | None, + Field(description='Optional bulk assignment of creatives to packages'), ] = None context: context_1.ContextObject | None = None creative_ids: Annotated[ list[str] | None, Field( - description="Optional filter to limit sync scope to specific creative IDs. When provided, only these creatives will be created/updated. Other creatives in the library are unaffected. Useful for partial updates and error recovery.", + description='Optional filter to limit sync scope to specific creative IDs. When provided, only these creatives will be created/updated. Other creatives in the library are unaffected. Useful for partial updates and error recovery.', max_length=100, min_length=1, ), @@ -42,7 +42,7 @@ class SyncCreativesRequest(AdCPBaseModel): creatives: Annotated[ list[creative_asset.CreativeAsset], Field( - description="Array of creative assets to sync (create or update)", + description='Array of creative assets to sync (create or update)', max_length=100, min_length=1, ), @@ -50,20 +50,20 @@ class SyncCreativesRequest(AdCPBaseModel): delete_missing: Annotated[ bool | None, Field( - description="When true, creatives not included in this sync will be archived. Use with caution for full library replacement." + description='When true, creatives not included in this sync will be archived. Use with caution for full library replacement.' ), ] = False dry_run: Annotated[ bool | None, Field( - description="When true, preview changes without applying them. Returns what would be created/updated/deleted." + description='When true, preview changes without applying them. Returns what would be created/updated/deleted.' ), ] = False ext: ext_1.ExtensionObject | None = None push_notification_config: Annotated[ push_notification_config_1.PushNotificationConfig | None, Field( - description="Optional webhook configuration for async sync notifications. Publisher will send webhook when sync completes if operation takes longer than immediate response time (typically for large bulk operations or manual approval/HITL)." + description='Optional webhook configuration for async sync notifications. Publisher will send webhook when sync completes if operation takes longer than immediate response time (typically for large bulk operations or manual approval/HITL).' ), ] = None validation_mode: Annotated[ diff --git a/src/adcp/types/generated_poc/media_buy/sync_creatives_response.py b/src/adcp/types/generated_poc/media_buy/sync_creatives_response.py index 4174a32d..76333224 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_creatives_response.py +++ b/src/adcp/types/generated_poc/media_buy/sync_creatives_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/sync_creatives_response.json -# timestamp: 2026-02-20T02:37:39+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -18,13 +18,13 @@ class SyncCreativesResponse2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error], Field( - description="Operation-level errors that prevented processing any creatives (e.g., authentication failure, service unavailable, invalid request format)", + description='Operation-level errors that prevented processing any creatives (e.g., authentication failure, service unavailable, invalid request format)', min_length=1, ), ] @@ -33,31 +33,31 @@ class SyncCreativesResponse2(AdCPBaseModel): class Creative(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) account: Annotated[ - account_1.Account | None, Field(description="Account that owns this creative") + account_1.Account | None, Field(description='Account that owns this creative') ] = None action: Annotated[ - creative_action.CreativeAction, Field(description="Action taken for this creative") + creative_action.CreativeAction, Field(description='Action taken for this creative') ] assigned_to: Annotated[ list[str] | None, Field( - description="Package IDs this creative was successfully assigned to (only present when assignments were requested)" + description='Package IDs this creative was successfully assigned to (only present when assignments were requested)' ), ] = None assignment_errors: Annotated[ - dict[Annotated[str, StringConstraints(pattern=r"^[a-zA-Z0-9_-]+$")], str] | None, + dict[Annotated[str, StringConstraints(pattern=r'^[a-zA-Z0-9_-]+$')], str] | None, Field( - description="Assignment errors by package ID (only present when assignment failures occurred)" + description='Assignment errors by package ID (only present when assignment failures occurred)' ), ] = None changes: Annotated[ list[str] | None, Field(description="Field names that were modified (only present when action='updated')"), ] = None - creative_id: Annotated[str, Field(description="Creative ID from the request")] + creative_id: Annotated[str, Field(description='Creative ID from the request')] errors: Annotated[ list[str] | None, Field(description="Validation or processing errors (only present when action='failed')"), @@ -65,26 +65,26 @@ class Creative(AdCPBaseModel): expires_at: Annotated[ AwareDatetime | None, Field( - description="ISO 8601 timestamp when preview link expires (only present when preview_url exists)" + description='ISO 8601 timestamp when preview link expires (only present when preview_url exists)' ), ] = None platform_id: Annotated[ - str | None, Field(description="Platform-specific ID assigned to the creative") + str | None, Field(description='Platform-specific ID assigned to the creative') ] = None preview_url: Annotated[ AnyUrl | None, Field( - description="Preview URL for generative creatives (only present for generative formats)" + description='Preview URL for generative creatives (only present for generative formats)' ), ] = None warnings: Annotated[ - list[str] | None, Field(description="Non-fatal warnings about this creative") + list[str] | None, Field(description='Non-fatal warnings about this creative') ] = None class SyncCreativesResponse1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None creatives: Annotated[ @@ -94,12 +94,12 @@ class SyncCreativesResponse1(AdCPBaseModel): ), ] dry_run: Annotated[ - bool | None, Field(description="Whether this was a dry run (no actual changes made)") + bool | None, Field(description='Whether this was a dry run (no actual changes made)') ] = None ext: ext_1.ExtensionObject | None = None sandbox: Annotated[ bool | None, - Field(description="When true, this response contains simulated data from sandbox mode."), + Field(description='When true, this response contains simulated data from sandbox mode.'), ] = None @@ -107,7 +107,7 @@ class SyncCreativesResponse(RootModel[SyncCreativesResponse1 | SyncCreativesResp root: Annotated[ SyncCreativesResponse1 | SyncCreativesResponse2, Field( - description="Response from creative sync operation. Returns either per-creative results (best-effort processing) OR operation-level errors (complete failure). This enforces atomic semantics at the operation level while allowing per-item failures within successful operations.", - title="Sync Creatives Response", + description='Response from creative sync operation. Returns either per-creative results (best-effort processing) OR operation-level errors (complete failure). This enforces atomic semantics at the operation level while allowing per-item failures within successful operations.', + title='Sync Creatives Response', ), ] diff --git a/src/adcp/types/generated_poc/media_buy/sync_event_sources_request.py b/src/adcp/types/generated_poc/media_buy/sync_event_sources_request.py index ee911cc7..14d03375 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_event_sources_request.py +++ b/src/adcp/types/generated_poc/media_buy/sync_event_sources_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/sync_event_sources_request.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,39 +16,39 @@ class EventSource(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) allowed_domains: Annotated[ list[str] | None, - Field(description="Domains authorized to send events for this event source", min_length=1), + Field(description='Domains authorized to send events for this event source', min_length=1), ] = None - event_source_id: Annotated[str, Field(description="Unique identifier for this event source")] + event_source_id: Annotated[str, Field(description='Unique identifier for this event source')] event_types: Annotated[ list[event_type.EventType] | None, Field( - description="Event types this source handles (e.g. purchase, lead). If omitted, accepts all event types.", + description='Event types this source handles (e.g. purchase, lead). If omitted, accepts all event types.', min_length=1, ), ] = None - name: Annotated[str | None, Field(description="Human-readable name for this event source")] = ( + name: Annotated[str | None, Field(description='Human-readable name for this event source')] = ( None ) class SyncEventSourcesRequest(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - account_id: Annotated[str, Field(description="Account to configure event sources for")] + account_id: Annotated[str, Field(description='Account to configure event sources for')] context: context_1.ContextObject | None = None delete_missing: Annotated[ bool | None, - Field(description="When true, event sources not included in this sync will be removed"), + Field(description='When true, event sources not included in this sync will be removed'), ] = False event_sources: Annotated[ list[EventSource] | None, Field( - description="Event sources to sync (create or update). When omitted, the call is discovery-only and returns all existing event sources on the account without modification.", + description='Event sources to sync (create or update). When omitted, the call is discovery-only and returns all existing event sources on the account without modification.', min_length=1, ), ] = None diff --git a/src/adcp/types/generated_poc/media_buy/sync_event_sources_response.py b/src/adcp/types/generated_poc/media_buy/sync_event_sources_response.py index 28dc4d89..10a8b2d3 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_event_sources_response.py +++ b/src/adcp/types/generated_poc/media_buy/sync_event_sources_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/sync_event_sources_response.json -# timestamp: 2026-02-20T02:37:39+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -18,35 +18,35 @@ class Action(Enum): - created = "created" - updated = "updated" - unchanged = "unchanged" - deleted = "deleted" - failed = "failed" + created = 'created' + updated = 'updated' + unchanged = 'unchanged' + deleted = 'deleted' + failed = 'failed' class ManagedBy(Enum): - buyer = "buyer" - seller = "seller" + buyer = 'buyer' + seller = 'seller' class SnippetType(Enum): - javascript = "javascript" - html = "html" - pixel_url = "pixel_url" - server_only = "server_only" + javascript = 'javascript' + html = 'html' + pixel_url = 'pixel_url' + server_only = 'server_only' class Setup(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) instructions: Annotated[ - str | None, Field(description="Human/agent-readable setup instructions") + str | None, Field(description='Human/agent-readable setup instructions') ] = None snippet: Annotated[ str | None, - Field(description="Code snippet to place on the site (JavaScript, HTML pixel, etc.)"), + Field(description='Code snippet to place on the site (JavaScript, HTML pixel, etc.)'), ] = None snippet_type: Annotated[ SnippetType | None, @@ -58,20 +58,20 @@ class Setup(AdCPBaseModel): class EventSource(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - action: Annotated[Action, Field(description="Action taken for this event source")] + action: Annotated[Action, Field(description='Action taken for this event source')] action_source: Annotated[ action_source_1.ActionSource | None, - Field(description="Type of event source (website pixel, app SDK, in-store, etc.)"), + Field(description='Type of event source (website pixel, app SDK, in-store, etc.)'), ] = None errors: Annotated[ list[str] | None, Field(description="Errors for this event source (only present when action='failed')"), ] = None - event_source_id: Annotated[str, Field(description="Event source ID from the request")] + event_source_id: Annotated[str, Field(description='Event source ID from the request')] event_types: Annotated[ - list[event_type.EventType] | None, Field(description="Event types this source handles") + list[event_type.EventType] | None, Field(description='Event types this source handles') ] = None managed_by: Annotated[ ManagedBy | None, @@ -79,7 +79,7 @@ class EventSource(AdCPBaseModel): description="Who manages this event source. 'buyer' = configured via this sync. 'seller' = always-on, managed by the seller (e.g. Amazon sales attribution for Amazon advertisers)." ), ] = None - name: Annotated[str | None, Field(description="Name of the event source")] = None + name: Annotated[str | None, Field(description='Name of the event source')] = None seller_id: Annotated[ str | None, Field( @@ -89,37 +89,37 @@ class EventSource(AdCPBaseModel): setup: Annotated[ Setup | None, Field( - description="Implementation details for activating this event source (e.g. JavaScript tag, pixel URL)" + description='Implementation details for activating this event source (e.g. JavaScript tag, pixel URL)' ), ] = None class SyncEventSourcesResponse1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None event_sources: Annotated[ list[EventSource], Field( - description="Results for each event source, including both synced and seller-managed sources on the account" + description='Results for each event source, including both synced and seller-managed sources on the account' ), ] ext: ext_1.ExtensionObject | None = None sandbox: Annotated[ bool | None, - Field(description="When true, this response contains simulated data from sandbox mode."), + Field(description='When true, this response contains simulated data from sandbox mode.'), ] = None class SyncEventSourcesResponse2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error], - Field(description="Operation-level errors that prevented processing", min_length=1), + Field(description='Operation-level errors that prevented processing', min_length=1), ] ext: ext_1.ExtensionObject | None = None @@ -128,7 +128,7 @@ class SyncEventSourcesResponse(RootModel[SyncEventSourcesResponse1 | SyncEventSo root: Annotated[ SyncEventSourcesResponse1 | SyncEventSourcesResponse2, Field( - description="Response from event source sync operation. Returns either per-source results OR operation-level errors.", - title="Sync Event Sources Response", + description='Response from event source sync operation. Returns either per-source results OR operation-level errors.', + title='Sync Event Sources Response', ), ] diff --git a/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py b/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py index dea980af..380f2c2d 100644 --- a/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +++ b/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/update_media_buy_async_response_input_required.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,16 +15,16 @@ class Reason(Enum): - APPROVAL_REQUIRED = "APPROVAL_REQUIRED" - CHANGE_CONFIRMATION = "CHANGE_CONFIRMATION" + APPROVAL_REQUIRED = 'APPROVAL_REQUIRED' + CHANGE_CONFIRMATION = 'CHANGE_CONFIRMATION' class UpdateMediaBuyInputRequired(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None reason: Annotated[ - Reason | None, Field(description="Reason code indicating why input is needed") + Reason | None, Field(description='Reason code indicating why input is needed') ] = None diff --git a/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py b/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py index 889cefcf..c0e06368 100644 --- a/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +++ b/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/update_media_buy_async_response_submitted.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -13,7 +13,7 @@ class UpdateMediaBuySubmitted(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None diff --git a/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py b/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py index e0c2fa51..516817b6 100644 --- a/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +++ b/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/update_media_buy_async_response_working.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,17 +15,17 @@ class UpdateMediaBuyWorking(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None current_step: Annotated[ - str | None, Field(description="Current step or phase of the operation") + str | None, Field(description='Current step or phase of the operation') ] = None ext: ext_1.ExtensionObject | None = None percentage: Annotated[ - float | None, Field(description="Completion percentage (0-100)", ge=0.0, le=100.0) + float | None, Field(description='Completion percentage (0-100)', ge=0.0, le=100.0) ] = None - step_number: Annotated[int | None, Field(description="Current step number", ge=1)] = None + step_number: Annotated[int | None, Field(description='Current step number', ge=1)] = None total_steps: Annotated[ - int | None, Field(description="Total number of steps in the operation", ge=1) + int | None, Field(description='Total number of steps in the operation', ge=1) ] = None diff --git a/src/adcp/types/generated_poc/media_buy/update_media_buy_request.py b/src/adcp/types/generated_poc/media_buy/update_media_buy_request.py index e19803ee..1bc64fdc 100644 --- a/src/adcp/types/generated_poc/media_buy/update_media_buy_request.py +++ b/src/adcp/types/generated_poc/media_buy/update_media_buy_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/update_media_buy_request.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -19,35 +19,35 @@ class UpdateMediaBuyRequest1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) buyer_ref: Annotated[ str | None, Field(description="Buyer's reference for the media buy to update") ] = None context: context_1.ContextObject | None = None end_time: Annotated[ - AwareDatetime | None, Field(description="New end date/time in ISO 8601 format") + AwareDatetime | None, Field(description='New end date/time in ISO 8601 format') ] = None ext: ext_1.ExtensionObject | None = None media_buy_id: Annotated[str, Field(description="Publisher's ID of the media buy to update")] packages: Annotated[ list[package_update.PackageUpdate] | None, - Field(description="Package-specific updates", min_length=1), + Field(description='Package-specific updates', min_length=1), ] = None paused: Annotated[ bool | None, - Field(description="Pause/resume the entire media buy (true = paused, false = active)"), + Field(description='Pause/resume the entire media buy (true = paused, false = active)'), ] = None push_notification_config: Annotated[ push_notification_config_1.PushNotificationConfig | None, Field( - description="Optional webhook configuration for async update notifications. Publisher will send webhook when update completes if operation takes longer than immediate response time. This is separate from reporting_webhook which configures ongoing campaign reporting." + description='Optional webhook configuration for async update notifications. Publisher will send webhook when update completes if operation takes longer than immediate response time. This is separate from reporting_webhook which configures ongoing campaign reporting.' ), ] = None reporting_webhook: Annotated[ reporting_webhook_1.ReportingWebhook | None, Field( - description="Optional webhook configuration for automated reporting delivery. Updates the reporting configuration for this media buy." + description='Optional webhook configuration for automated reporting delivery. Updates the reporting configuration for this media buy.' ), ] = None start_time: start_timing.StartTiming | None = None @@ -55,12 +55,12 @@ class UpdateMediaBuyRequest1(AdCPBaseModel): class UpdateMediaBuyRequest2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) buyer_ref: Annotated[str, Field(description="Buyer's reference for the media buy to update")] context: context_1.ContextObject | None = None end_time: Annotated[ - AwareDatetime | None, Field(description="New end date/time in ISO 8601 format") + AwareDatetime | None, Field(description='New end date/time in ISO 8601 format') ] = None ext: ext_1.ExtensionObject | None = None media_buy_id: Annotated[ @@ -68,22 +68,22 @@ class UpdateMediaBuyRequest2(AdCPBaseModel): ] = None packages: Annotated[ list[package_update.PackageUpdate] | None, - Field(description="Package-specific updates", min_length=1), + Field(description='Package-specific updates', min_length=1), ] = None paused: Annotated[ bool | None, - Field(description="Pause/resume the entire media buy (true = paused, false = active)"), + Field(description='Pause/resume the entire media buy (true = paused, false = active)'), ] = None push_notification_config: Annotated[ push_notification_config_1.PushNotificationConfig | None, Field( - description="Optional webhook configuration for async update notifications. Publisher will send webhook when update completes if operation takes longer than immediate response time. This is separate from reporting_webhook which configures ongoing campaign reporting." + description='Optional webhook configuration for async update notifications. Publisher will send webhook when update completes if operation takes longer than immediate response time. This is separate from reporting_webhook which configures ongoing campaign reporting.' ), ] = None reporting_webhook: Annotated[ reporting_webhook_1.ReportingWebhook | None, Field( - description="Optional webhook configuration for automated reporting delivery. Updates the reporting configuration for this media buy." + description='Optional webhook configuration for automated reporting delivery. Updates the reporting configuration for this media buy.' ), ] = None start_time: start_timing.StartTiming | None = None @@ -93,7 +93,7 @@ class UpdateMediaBuyRequest(RootModel[UpdateMediaBuyRequest1 | UpdateMediaBuyReq root: Annotated[ UpdateMediaBuyRequest1 | UpdateMediaBuyRequest2, Field( - description="Request parameters for updating campaign and package settings", - title="Update Media Buy Request", + description='Request parameters for updating campaign and package settings', + title='Update Media Buy Request', ), ] diff --git a/src/adcp/types/generated_poc/media_buy/update_media_buy_response.py b/src/adcp/types/generated_poc/media_buy/update_media_buy_response.py index 8cd8b374..879f8089 100644 --- a/src/adcp/types/generated_poc/media_buy/update_media_buy_response.py +++ b/src/adcp/types/generated_poc/media_buy/update_media_buy_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: media_buy/update_media_buy_response.json -# timestamp: 2026-02-20T02:37:39+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -17,35 +17,35 @@ class UpdateMediaBuyResponse2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error], - Field(description="Array of errors explaining why the operation failed", min_length=1), + Field(description='Array of errors explaining why the operation failed', min_length=1), ] ext: ext_1.ExtensionObject | None = None class UpdateMediaBuyResponse1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) affected_packages: Annotated[ list[package.Package] | None, - Field(description="Array of packages that were modified with complete state information"), + Field(description='Array of packages that were modified with complete state information'), ] = None buyer_ref: Annotated[str, Field(description="Buyer's reference identifier for the media buy")] context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None implementation_date: Annotated[ AwareDatetime | None, - Field(description="ISO 8601 timestamp when changes take effect (null if pending approval)"), + Field(description='ISO 8601 timestamp when changes take effect (null if pending approval)'), ] = None media_buy_id: Annotated[str, Field(description="Publisher's identifier for the media buy")] sandbox: Annotated[ bool | None, - Field(description="When true, this response contains simulated data from sandbox mode."), + Field(description='When true, this response contains simulated data from sandbox mode.'), ] = None @@ -53,7 +53,7 @@ class UpdateMediaBuyResponse(RootModel[UpdateMediaBuyResponse1 | UpdateMediaBuyR root: Annotated[ UpdateMediaBuyResponse1 | UpdateMediaBuyResponse2, Field( - description="Response payload for update_media_buy task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - updates are either fully applied or not applied at all.", - title="Update Media Buy Response", + description='Response payload for update_media_buy task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - updates are either fully applied or not applied at all.', + title='Update Media Buy Response', ), ] diff --git a/src/adcp/types/generated_poc/pricing_options/cpa_option.py b/src/adcp/types/generated_poc/pricing_options/cpa_option.py index cc02441c..67cbdd43 100644 --- a/src/adcp/types/generated_poc/pricing_options/cpa_option.py +++ b/src/adcp/types/generated_poc/pricing_options/cpa_option.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: pricing_options/cpa_option.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,14 +14,14 @@ class CpaPricingOption(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) currency: Annotated[ str, Field( - description="ISO 4217 currency code", - examples=["USD", "EUR", "GBP", "JPY"], - pattern="^[A-Z]{3}$", + description='ISO 4217 currency code', + examples=['USD', 'EUR', 'GBP', 'JPY'], + pattern='^[A-Z]{3}$', ), ] custom_event_name: Annotated[ @@ -33,28 +33,28 @@ class CpaPricingOption(AdCPBaseModel): event_source_id: Annotated[ str | None, Field( - description="When present, only events from this specific event source count toward billing. Allows different CPA rates for different sources (e.g., online vs in-store purchases). Must match an event source configured via sync_event_sources." + description='When present, only events from this specific event source count toward billing. Allows different CPA rates for different sources (e.g., online vs in-store purchases). Must match an event source configured via sync_event_sources.' ), ] = None event_type: Annotated[ event_type_1.EventType, Field( - description="The conversion event type that triggers billing (e.g., purchase, lead, app_install)" + description='The conversion event type that triggers billing (e.g., purchase, lead, app_install)' ), ] fixed_price: Annotated[ - float, Field(description="Fixed price per acquisition in the specified currency", gt=0.0) + float, Field(description='Fixed price per acquisition in the specified currency', gt=0.0) ] min_spend_per_package: Annotated[ float | None, Field( - description="Minimum spend requirement per package using this pricing option, in the specified currency", + description='Minimum spend requirement per package using this pricing option, in the specified currency', ge=0.0, ), ] = None pricing_model: Annotated[ - Literal["cpa"], Field(description="Cost per acquisition (conversion event)") + Literal['cpa'], Field(description='Cost per acquisition (conversion event)') ] pricing_option_id: Annotated[ - str, Field(description="Unique identifier for this pricing option within the product") + str, Field(description='Unique identifier for this pricing option within the product') ] diff --git a/src/adcp/types/generated_poc/pricing_options/cpc_option.py b/src/adcp/types/generated_poc/pricing_options/cpc_option.py index 20ff8a87..a55d6f41 100644 --- a/src/adcp/types/generated_poc/pricing_options/cpc_option.py +++ b/src/adcp/types/generated_poc/pricing_options/cpc_option.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: pricing_options/cpc_option.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,27 +14,27 @@ class CpcPricingOption(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) currency: Annotated[ str, Field( - description="ISO 4217 currency code", - examples=["USD", "EUR", "GBP", "JPY"], - pattern="^[A-Z]{3}$", + description='ISO 4217 currency code', + examples=['USD', 'EUR', 'GBP', 'JPY'], + pattern='^[A-Z]{3}$', ), ] fixed_price: Annotated[ float | None, Field( - description="Fixed price per click. If present, this is fixed pricing. If absent, auction-based.", + description='Fixed price per click. If present, this is fixed pricing. If absent, auction-based.', ge=0.0, ), ] = None floor_price: Annotated[ float | None, Field( - description="Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.", + description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.', ge=0.0, ), ] = None @@ -47,15 +47,15 @@ class CpcPricingOption(AdCPBaseModel): min_spend_per_package: Annotated[ float | None, Field( - description="Minimum spend requirement per package using this pricing option, in the specified currency", + description='Minimum spend requirement per package using this pricing option, in the specified currency', ge=0.0, ), ] = None price_guidance: Annotated[ price_guidance_1.PriceGuidance | None, - Field(description="Optional pricing guidance for auction-based bidding"), + Field(description='Optional pricing guidance for auction-based bidding'), ] = None - pricing_model: Annotated[Literal["cpc"], Field(description="Cost per click")] + pricing_model: Annotated[Literal['cpc'], Field(description='Cost per click')] pricing_option_id: Annotated[ - str, Field(description="Unique identifier for this pricing option within the product") + str, Field(description='Unique identifier for this pricing option within the product') ] diff --git a/src/adcp/types/generated_poc/pricing_options/cpcv_option.py b/src/adcp/types/generated_poc/pricing_options/cpcv_option.py index 016abc64..4d7e7a18 100644 --- a/src/adcp/types/generated_poc/pricing_options/cpcv_option.py +++ b/src/adcp/types/generated_poc/pricing_options/cpcv_option.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: pricing_options/cpcv_option.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,27 +14,27 @@ class CpcvPricingOption(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) currency: Annotated[ str, Field( - description="ISO 4217 currency code", - examples=["USD", "EUR", "GBP", "JPY"], - pattern="^[A-Z]{3}$", + description='ISO 4217 currency code', + examples=['USD', 'EUR', 'GBP', 'JPY'], + pattern='^[A-Z]{3}$', ), ] fixed_price: Annotated[ float | None, Field( - description="Fixed price per completed view. If present, this is fixed pricing. If absent, auction-based.", + description='Fixed price per completed view. If present, this is fixed pricing. If absent, auction-based.', ge=0.0, ), ] = None floor_price: Annotated[ float | None, Field( - description="Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.", + description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.', ge=0.0, ), ] = None @@ -47,17 +47,17 @@ class CpcvPricingOption(AdCPBaseModel): min_spend_per_package: Annotated[ float | None, Field( - description="Minimum spend requirement per package using this pricing option, in the specified currency", + description='Minimum spend requirement per package using this pricing option, in the specified currency', ge=0.0, ), ] = None price_guidance: Annotated[ price_guidance_1.PriceGuidance | None, - Field(description="Optional pricing guidance for auction-based bidding"), + Field(description='Optional pricing guidance for auction-based bidding'), ] = None pricing_model: Annotated[ - Literal["cpcv"], Field(description="Cost per completed view (100% completion)") + Literal['cpcv'], Field(description='Cost per completed view (100% completion)') ] pricing_option_id: Annotated[ - str, Field(description="Unique identifier for this pricing option within the product") + str, Field(description='Unique identifier for this pricing option within the product') ] diff --git a/src/adcp/types/generated_poc/pricing_options/cpm_option.py b/src/adcp/types/generated_poc/pricing_options/cpm_option.py index 78d93d88..05a8d4fc 100644 --- a/src/adcp/types/generated_poc/pricing_options/cpm_option.py +++ b/src/adcp/types/generated_poc/pricing_options/cpm_option.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: pricing_options/cpm_option.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,27 +14,27 @@ class CpmPricingOption(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) currency: Annotated[ str, Field( - description="ISO 4217 currency code", - examples=["USD", "EUR", "GBP", "JPY"], - pattern="^[A-Z]{3}$", + description='ISO 4217 currency code', + examples=['USD', 'EUR', 'GBP', 'JPY'], + pattern='^[A-Z]{3}$', ), ] fixed_price: Annotated[ float | None, Field( - description="Fixed price per unit. If present, this is fixed pricing. If absent, auction-based.", + description='Fixed price per unit. If present, this is fixed pricing. If absent, auction-based.', ge=0.0, ), ] = None floor_price: Annotated[ float | None, Field( - description="Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.", + description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.', ge=0.0, ), ] = None @@ -47,15 +47,15 @@ class CpmPricingOption(AdCPBaseModel): min_spend_per_package: Annotated[ float | None, Field( - description="Minimum spend requirement per package using this pricing option, in the specified currency", + description='Minimum spend requirement per package using this pricing option, in the specified currency', ge=0.0, ), ] = None price_guidance: Annotated[ price_guidance_1.PriceGuidance | None, - Field(description="Optional pricing guidance for auction-based bidding"), + Field(description='Optional pricing guidance for auction-based bidding'), ] = None - pricing_model: Annotated[Literal["cpm"], Field(description="Cost per 1,000 impressions")] + pricing_model: Annotated[Literal['cpm'], Field(description='Cost per 1,000 impressions')] pricing_option_id: Annotated[ - str, Field(description="Unique identifier for this pricing option within the product") + str, Field(description='Unique identifier for this pricing option within the product') ] diff --git a/src/adcp/types/generated_poc/pricing_options/cpp_option.py b/src/adcp/types/generated_poc/pricing_options/cpp_option.py index f13622b6..9fdc53b5 100644 --- a/src/adcp/types/generated_poc/pricing_options/cpp_option.py +++ b/src/adcp/types/generated_poc/pricing_options/cpp_option.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: pricing_options/cpp_option.json -# timestamp: 2026-02-12T12:00:44+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,66 +15,66 @@ class Parameters(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) demographic: Annotated[ str, Field( - description="Target demographic code within the specified demographic_system (e.g., P18-49 for Nielsen, ABC1 Adults for BARB)" + description='Target demographic code within the specified demographic_system (e.g., P18-49 for Nielsen, ABC1 Adults for BARB)' ), ] demographic_system: Annotated[ demographic_system_1.DemographicSystem | None, Field( - description="Measurement system for the demographic field. Defaults to nielsen when omitted." + description='Measurement system for the demographic field. Defaults to nielsen when omitted.' ), ] = None - min_points: Annotated[float | None, Field(description="Minimum GRPs/TRPs required", ge=0.0)] = ( + min_points: Annotated[float | None, Field(description='Minimum GRPs/TRPs required', ge=0.0)] = ( None ) class CppPricingOption(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) currency: Annotated[ str, Field( - description="ISO 4217 currency code", - examples=["USD", "EUR", "GBP", "JPY"], - pattern="^[A-Z]{3}$", + description='ISO 4217 currency code', + examples=['USD', 'EUR', 'GBP', 'JPY'], + pattern='^[A-Z]{3}$', ), ] fixed_price: Annotated[ float | None, Field( - description="Fixed price per rating point. If present, this is fixed pricing. If absent, auction-based.", + description='Fixed price per rating point. If present, this is fixed pricing. If absent, auction-based.', ge=0.0, ), ] = None floor_price: Annotated[ float | None, Field( - description="Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.", + description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.', ge=0.0, ), ] = None min_spend_per_package: Annotated[ float | None, Field( - description="Minimum spend requirement per package using this pricing option, in the specified currency", + description='Minimum spend requirement per package using this pricing option, in the specified currency', ge=0.0, ), ] = None parameters: Annotated[ - Parameters, Field(description="CPP-specific parameters for demographic targeting") + Parameters, Field(description='CPP-specific parameters for demographic targeting') ] price_guidance: Annotated[ price_guidance_1.PriceGuidance | None, - Field(description="Optional pricing guidance for auction-based bidding"), + Field(description='Optional pricing guidance for auction-based bidding'), ] = None - pricing_model: Annotated[Literal["cpp"], Field(description="Cost per Gross Rating Point")] + pricing_model: Annotated[Literal['cpp'], Field(description='Cost per Gross Rating Point')] pricing_option_id: Annotated[ - str, Field(description="Unique identifier for this pricing option within the product") + str, Field(description='Unique identifier for this pricing option within the product') ] diff --git a/src/adcp/types/generated_poc/pricing_options/cpv_option.py b/src/adcp/types/generated_poc/pricing_options/cpv_option.py index e10828f9..8975c492 100644 --- a/src/adcp/types/generated_poc/pricing_options/cpv_option.py +++ b/src/adcp/types/generated_poc/pricing_options/cpv_option.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: pricing_options/cpv_option.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,7 +16,7 @@ class ViewThreshold(RootModel[float]): root: Annotated[ float, Field( - description="Percentage completion threshold (0.0 to 1.0, e.g., 0.5 = 50%)", + description='Percentage completion threshold (0.0 to 1.0, e.g., 0.5 = 50%)', ge=0.0, le=1.0, ), @@ -25,41 +25,41 @@ class ViewThreshold(RootModel[float]): class ViewThreshold1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - duration_seconds: Annotated[int, Field(description="Seconds of viewing required", ge=1)] + duration_seconds: Annotated[int, Field(description='Seconds of viewing required', ge=1)] class Parameters(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) view_threshold: ViewThreshold | ViewThreshold1 class CpvPricingOption(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) currency: Annotated[ str, Field( - description="ISO 4217 currency code", - examples=["USD", "EUR", "GBP", "JPY"], - pattern="^[A-Z]{3}$", + description='ISO 4217 currency code', + examples=['USD', 'EUR', 'GBP', 'JPY'], + pattern='^[A-Z]{3}$', ), ] fixed_price: Annotated[ float | None, Field( - description="Fixed price per view. If present, this is fixed pricing. If absent, auction-based.", + description='Fixed price per view. If present, this is fixed pricing. If absent, auction-based.', ge=0.0, ), ] = None floor_price: Annotated[ float | None, Field( - description="Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.", + description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.', ge=0.0, ), ] = None @@ -72,18 +72,18 @@ class CpvPricingOption(AdCPBaseModel): min_spend_per_package: Annotated[ float | None, Field( - description="Minimum spend requirement per package using this pricing option, in the specified currency", + description='Minimum spend requirement per package using this pricing option, in the specified currency', ge=0.0, ), ] = None parameters: Annotated[ - Parameters, Field(description="CPV-specific parameters defining the view threshold") + Parameters, Field(description='CPV-specific parameters defining the view threshold') ] price_guidance: Annotated[ price_guidance_1.PriceGuidance | None, - Field(description="Optional pricing guidance for auction-based bidding"), + Field(description='Optional pricing guidance for auction-based bidding'), ] = None - pricing_model: Annotated[Literal["cpv"], Field(description="Cost per view at threshold")] + pricing_model: Annotated[Literal['cpv'], Field(description='Cost per view at threshold')] pricing_option_id: Annotated[ - str, Field(description="Unique identifier for this pricing option within the product") + str, Field(description='Unique identifier for this pricing option within the product') ] diff --git a/src/adcp/types/generated_poc/pricing_options/flat_rate_option.py b/src/adcp/types/generated_poc/pricing_options/flat_rate_option.py index d7b7d655..63833397 100644 --- a/src/adcp/types/generated_poc/pricing_options/flat_rate_option.py +++ b/src/adcp/types/generated_poc/pricing_options/flat_rate_option.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: pricing_options/flat_rate_option.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,73 +14,73 @@ class Parameters(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - daypart: Annotated[str | None, Field(description="Specific daypart for time-based pricing")] = ( + daypart: Annotated[str | None, Field(description='Specific daypart for time-based pricing')] = ( None ) duration_hours: Annotated[ - float | None, Field(description="Duration in hours for time-based pricing", ge=0.0) + float | None, Field(description='Duration in hours for time-based pricing', ge=0.0) ] = None estimated_impressions: Annotated[ - int | None, Field(description="Estimated impressions (informational)", ge=0) + int | None, Field(description='Estimated impressions (informational)', ge=0) ] = None loop_duration_seconds: Annotated[ - int | None, Field(description="Duration of ad loop rotation in seconds", ge=1) + int | None, Field(description='Duration of ad loop rotation in seconds', ge=1) ] = None - min_plays_per_hour: Annotated[int | None, Field(description="Minimum plays per hour", ge=0)] = ( + min_plays_per_hour: Annotated[int | None, Field(description='Minimum plays per hour', ge=0)] = ( None ) sov_percentage: Annotated[ - float | None, Field(description="Guaranteed share of voice (0-100)", ge=0.0, le=100.0) + float | None, Field(description='Guaranteed share of voice (0-100)', ge=0.0, le=100.0) ] = None - venue_package: Annotated[str | None, Field(description="Named venue package identifier")] = None + venue_package: Annotated[str | None, Field(description='Named venue package identifier')] = None class FlatRatePricingOption(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) currency: Annotated[ str, Field( - description="ISO 4217 currency code", - examples=["USD", "EUR", "GBP", "JPY"], - pattern="^[A-Z]{3}$", + description='ISO 4217 currency code', + examples=['USD', 'EUR', 'GBP', 'JPY'], + pattern='^[A-Z]{3}$', ), ] fixed_price: Annotated[ float | None, Field( - description="Flat rate cost. If present, this is fixed pricing. If absent, auction-based.", + description='Flat rate cost. If present, this is fixed pricing. If absent, auction-based.', ge=0.0, ), ] = None floor_price: Annotated[ float | None, Field( - description="Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.", + description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.', ge=0.0, ), ] = None min_spend_per_package: Annotated[ float | None, Field( - description="Minimum spend requirement per package using this pricing option, in the specified currency", + description='Minimum spend requirement per package using this pricing option, in the specified currency', ge=0.0, ), ] = None parameters: Annotated[ Parameters | None, - Field(description="Flat rate parameters for DOOH and time-based campaigns"), + Field(description='Flat rate parameters for DOOH and time-based campaigns'), ] = None price_guidance: Annotated[ price_guidance_1.PriceGuidance | None, - Field(description="Optional pricing guidance for auction-based bidding"), + Field(description='Optional pricing guidance for auction-based bidding'), ] = None pricing_model: Annotated[ - Literal["flat_rate"], Field(description="Fixed cost regardless of delivery volume") + Literal['flat_rate'], Field(description='Fixed cost regardless of delivery volume') ] pricing_option_id: Annotated[ - str, Field(description="Unique identifier for this pricing option within the product") + str, Field(description='Unique identifier for this pricing option within the product') ] diff --git a/src/adcp/types/generated_poc/pricing_options/price_guidance.py b/src/adcp/types/generated_poc/pricing_options/price_guidance.py index 5dd6d362..e0e4e133 100644 --- a/src/adcp/types/generated_poc/pricing_options/price_guidance.py +++ b/src/adcp/types/generated_poc/pricing_options/price_guidance.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: pricing_options/price_guidance.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,15 +12,15 @@ class PriceGuidance(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) p25: Annotated[ - float | None, Field(description="25th percentile of recent winning bids", ge=0.0) + float | None, Field(description='25th percentile of recent winning bids', ge=0.0) ] = None - p50: Annotated[float | None, Field(description="Median of recent winning bids", ge=0.0)] = None + p50: Annotated[float | None, Field(description='Median of recent winning bids', ge=0.0)] = None p75: Annotated[ - float | None, Field(description="75th percentile of recent winning bids", ge=0.0) + float | None, Field(description='75th percentile of recent winning bids', ge=0.0) ] = None p90: Annotated[ - float | None, Field(description="90th percentile of recent winning bids", ge=0.0) + float | None, Field(description='90th percentile of recent winning bids', ge=0.0) ] = None diff --git a/src/adcp/types/generated_poc/pricing_options/time_option.py b/src/adcp/types/generated_poc/pricing_options/time_option.py index 802131c2..5834df31 100644 --- a/src/adcp/types/generated_poc/pricing_options/time_option.py +++ b/src/adcp/types/generated_poc/pricing_options/time_option.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: pricing_options/time_option.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,76 +14,76 @@ class TimeUnit(Enum): - hour = "hour" - day = "day" - week = "week" - month = "month" + hour = 'hour' + day = 'day' + week = 'week' + month = 'month' class Parameters(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) max_duration: Annotated[ int | None, Field( - description="Maximum booking duration in time_units. Must be >= min_duration when both are present.", + description='Maximum booking duration in time_units. Must be >= min_duration when both are present.', ge=1, ), ] = None min_duration: Annotated[ - int | None, Field(description="Minimum booking duration in time_units", ge=1) + int | None, Field(description='Minimum booking duration in time_units', ge=1) ] = None time_unit: Annotated[ TimeUnit, Field( - description="The time unit for pricing. Total cost = fixed_price × number of time_units in the campaign flight." + description='The time unit for pricing. Total cost = fixed_price × number of time_units in the campaign flight.' ), ] class TimeBasedPricingOption(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) currency: Annotated[ str, Field( - description="ISO 4217 currency code", - examples=["USD", "EUR", "GBP", "JPY"], - pattern="^[A-Z]{3}$", + description='ISO 4217 currency code', + examples=['USD', 'EUR', 'GBP', 'JPY'], + pattern='^[A-Z]{3}$', ), ] fixed_price: Annotated[ float | None, Field( - description="Cost per time unit. If present, this is fixed pricing. If absent, auction-based.", + description='Cost per time unit. If present, this is fixed pricing. If absent, auction-based.', ge=0.0, ), ] = None floor_price: Annotated[ float | None, Field( - description="Minimum acceptable bid per time unit for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.", + description='Minimum acceptable bid per time unit for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.', ge=0.0, ), ] = None min_spend_per_package: Annotated[ float | None, Field( - description="Minimum spend requirement per package using this pricing option, in the specified currency", + description='Minimum spend requirement per package using this pricing option, in the specified currency', ge=0.0, ), ] = None - parameters: Annotated[Parameters, Field(description="Time-based pricing parameters")] + parameters: Annotated[Parameters, Field(description='Time-based pricing parameters')] price_guidance: Annotated[ price_guidance_1.PriceGuidance | None, - Field(description="Optional pricing guidance for auction-based bidding"), + Field(description='Optional pricing guidance for auction-based bidding'), ] = None pricing_model: Annotated[ - Literal["time"], - Field(description="Cost per time unit - rate scales with campaign duration"), + Literal['time'], + Field(description='Cost per time unit - rate scales with campaign duration'), ] pricing_option_id: Annotated[ - str, Field(description="Unique identifier for this pricing option within the product") + str, Field(description='Unique identifier for this pricing option within the product') ] diff --git a/src/adcp/types/generated_poc/pricing_options/vcpm_option.py b/src/adcp/types/generated_poc/pricing_options/vcpm_option.py index 952436e3..d391e9d2 100644 --- a/src/adcp/types/generated_poc/pricing_options/vcpm_option.py +++ b/src/adcp/types/generated_poc/pricing_options/vcpm_option.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: pricing_options/vcpm_option.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,27 +14,27 @@ class VcpmPricingOption(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) currency: Annotated[ str, Field( - description="ISO 4217 currency code", - examples=["USD", "EUR", "GBP", "JPY"], - pattern="^[A-Z]{3}$", + description='ISO 4217 currency code', + examples=['USD', 'EUR', 'GBP', 'JPY'], + pattern='^[A-Z]{3}$', ), ] fixed_price: Annotated[ float | None, Field( - description="Fixed price per unit. If present, this is fixed pricing. If absent, auction-based.", + description='Fixed price per unit. If present, this is fixed pricing. If absent, auction-based.', ge=0.0, ), ] = None floor_price: Annotated[ float | None, Field( - description="Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.", + description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.', ge=0.0, ), ] = None @@ -47,17 +47,17 @@ class VcpmPricingOption(AdCPBaseModel): min_spend_per_package: Annotated[ float | None, Field( - description="Minimum spend requirement per package using this pricing option, in the specified currency", + description='Minimum spend requirement per package using this pricing option, in the specified currency', ge=0.0, ), ] = None price_guidance: Annotated[ price_guidance_1.PriceGuidance | None, - Field(description="Optional pricing guidance for auction-based bidding"), + Field(description='Optional pricing guidance for auction-based bidding'), ] = None pricing_model: Annotated[ - Literal["vcpm"], Field(description="Cost per 1,000 viewable impressions (MRC standard)") + Literal['vcpm'], Field(description='Cost per 1,000 viewable impressions (MRC standard)') ] pricing_option_id: Annotated[ - str, Field(description="Unique identifier for this pricing option within the product") + str, Field(description='Unique identifier for this pricing option within the product') ] diff --git a/src/adcp/types/generated_poc/property/base_property_source.py b/src/adcp/types/generated_poc/property/base_property_source.py index 326fe010..e3a3903f 100644 --- a/src/adcp/types/generated_poc/property/base_property_source.py +++ b/src/adcp/types/generated_poc/property/base_property_source.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: property/base_property_source.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,18 +14,18 @@ class BasePropertySource1(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) publisher_domain: Annotated[ str, Field( description="Domain where publisher's adagents.json is hosted (e.g., 'raptive.com')", - pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", + pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', ), ] selection_type: Annotated[ - Literal["publisher_tags"], - Field(description="Discriminator indicating selection by property tags within a publisher"), + Literal['publisher_tags'], + Field(description='Discriminator indicating selection by property tags within a publisher'), ] tags: Annotated[ list[property_tag.PropertyTag], @@ -38,7 +38,7 @@ class BasePropertySource1(AdCPBaseModel): class BasePropertySource2(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) property_ids: Annotated[ list[property_id.PropertyId], @@ -48,28 +48,28 @@ class BasePropertySource2(AdCPBaseModel): str, Field( description="Domain where publisher's adagents.json is hosted (e.g., 'raptive.com')", - pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$", + pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$', ), ] selection_type: Annotated[ - Literal["publisher_ids"], + Literal['publisher_ids'], Field( - description="Discriminator indicating selection by specific property IDs within a publisher" + description='Discriminator indicating selection by specific property IDs within a publisher' ), ] class BasePropertySource3(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) identifiers: Annotated[ list[identifier.Identifier], - Field(description="Direct property identifiers (domains, app IDs, etc.)", min_length=1), + Field(description='Direct property identifiers (domains, app IDs, etc.)', min_length=1), ] selection_type: Annotated[ - Literal["identifiers"], - Field(description="Discriminator indicating selection by direct identifiers"), + Literal['identifiers'], + Field(description='Discriminator indicating selection by direct identifiers'), ] @@ -79,8 +79,8 @@ class BasePropertySource( root: Annotated[ BasePropertySource1 | BasePropertySource2 | BasePropertySource3, Field( - description="A source of properties for a property list. Supports three selection patterns: publisher with tags, publisher with property IDs, or direct identifiers.", - discriminator="selection_type", - title="Base Property Source", + description='A source of properties for a property list. Supports three selection patterns: publisher with tags, publisher with property IDs, or direct identifiers.', + discriminator='selection_type', + title='Base Property Source', ), ] diff --git a/src/adcp/types/generated_poc/property/create_property_list_request.py b/src/adcp/types/generated_poc/property/create_property_list_request.py index 0e125a35..954aa7e5 100644 --- a/src/adcp/types/generated_poc/property/create_property_list_request.py +++ b/src/adcp/types/generated_poc/property/create_property_list_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: property/create_property_list_request.json -# timestamp: 2026-02-18T17:56:28+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -17,7 +17,7 @@ class CreatePropertyListRequest(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) base_properties: Annotated[ list[base_property_source.BasePropertySource] | None, @@ -29,7 +29,7 @@ class CreatePropertyListRequest(AdCPBaseModel): brand: Annotated[ brand_ref.BrandReference | None, Field( - description="Brand reference. When provided, the agent automatically applies appropriate rules based on brand characteristics (industry, target_audience, etc.). Resolved at execution time." + description='Brand reference. When provided, the agent automatically applies appropriate rules based on brand characteristics (industry, target_audience, etc.). Resolved at execution time.' ), ] = None context: context_1.ContextObject | None = None @@ -39,6 +39,6 @@ class CreatePropertyListRequest(AdCPBaseModel): ext: ext_1.ExtensionObject | None = None filters: Annotated[ property_list_filters.PropertyListFilters | None, - Field(description="Dynamic filters to apply when resolving the list"), + Field(description='Dynamic filters to apply when resolving the list'), ] = None - name: Annotated[str, Field(description="Human-readable name for the list")] + name: Annotated[str, Field(description='Human-readable name for the list')] diff --git a/src/adcp/types/generated_poc/property/create_property_list_response.py b/src/adcp/types/generated_poc/property/create_property_list_response.py index 26da2c6f..6915069c 100644 --- a/src/adcp/types/generated_poc/property/create_property_list_response.py +++ b/src/adcp/types/generated_poc/property/create_property_list_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: property/create_property_list_response.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,13 +15,13 @@ class CreatePropertyListResponse(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) auth_token: Annotated[ str, Field( - description="Token that can be shared with sellers to authorize fetching this list. Store this - it is only returned at creation time." + description='Token that can be shared with sellers to authorize fetching this list. Store this - it is only returned at creation time.' ), ] ext: ext_1.ExtensionObject | None = None - list: Annotated[property_list.PropertyList, Field(description="The created property list")] + list: Annotated[property_list.PropertyList, Field(description='The created property list')] diff --git a/src/adcp/types/generated_poc/property/delete_property_list_request.py b/src/adcp/types/generated_poc/property/delete_property_list_request.py index 7eb7bd5e..a842bd2f 100644 --- a/src/adcp/types/generated_poc/property/delete_property_list_request.py +++ b/src/adcp/types/generated_poc/property/delete_property_list_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: property/delete_property_list_request.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,8 +15,8 @@ class DeletePropertyListRequest(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None - list_id: Annotated[str, Field(description="ID of the property list to delete")] + list_id: Annotated[str, Field(description='ID of the property list to delete')] diff --git a/src/adcp/types/generated_poc/property/delete_property_list_response.py b/src/adcp/types/generated_poc/property/delete_property_list_response.py index a467458c..467c9aa4 100644 --- a/src/adcp/types/generated_poc/property/delete_property_list_response.py +++ b/src/adcp/types/generated_poc/property/delete_property_list_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: property/delete_property_list_response.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,8 +14,8 @@ class DeletePropertyListResponse(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) - deleted: Annotated[bool, Field(description="Whether the list was successfully deleted")] + deleted: Annotated[bool, Field(description='Whether the list was successfully deleted')] ext: ext_1.ExtensionObject | None = None - list_id: Annotated[str, Field(description="ID of the deleted list")] + list_id: Annotated[str, Field(description='ID of the deleted list')] diff --git a/src/adcp/types/generated_poc/property/feature_requirement.py b/src/adcp/types/generated_poc/property/feature_requirement.py index 684ae472..dfc6a72f 100644 --- a/src/adcp/types/generated_poc/property/feature_requirement.py +++ b/src/adcp/types/generated_poc/property/feature_requirement.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: property/feature_requirement.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,23 +12,23 @@ class IfNotCovered(Enum): - exclude = "exclude" - include = "include" + exclude = 'exclude' + include = 'include' class FeatureRequirement(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) allowed_values: Annotated[ list[Any] | None, Field( - description="Values that pass the requirement (for binary/categorical features)", + description='Values that pass the requirement (for binary/categorical features)', min_length=1, ), ] = None feature_id: Annotated[ - str, Field(description="Feature to evaluate (discovered via get_adcp_capabilities)") + str, Field(description='Feature to evaluate (discovered via get_adcp_capabilities)') ] if_not_covered: Annotated[ IfNotCovered | None, @@ -37,9 +37,9 @@ class FeatureRequirement(AdCPBaseModel): ), ] = IfNotCovered.exclude max_value: Annotated[ - float | None, Field(description="Maximum numeric value allowed (for quantitative features)") + float | None, Field(description='Maximum numeric value allowed (for quantitative features)') ] = None min_value: Annotated[ float | None, - Field(description="Minimum numeric value required (for quantitative features)"), + Field(description='Minimum numeric value required (for quantitative features)'), ] = None diff --git a/src/adcp/types/generated_poc/property/get_property_list_request.py b/src/adcp/types/generated_poc/property/get_property_list_request.py index 229f684e..e2df589a 100644 --- a/src/adcp/types/generated_poc/property/get_property_list_request.py +++ b/src/adcp/types/generated_poc/property/get_property_list_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: property/get_property_list_request.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,34 +15,34 @@ class Pagination(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) cursor: Annotated[ str | None, - Field(description="Opaque cursor from a previous response to fetch the next page"), + Field(description='Opaque cursor from a previous response to fetch the next page'), ] = None max_results: Annotated[ int | None, - Field(description="Maximum number of identifiers to return per page", ge=1, le=10000), + Field(description='Maximum number of identifiers to return per page', ge=1, le=10000), ] = 1000 class GetPropertyListRequest(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None - list_id: Annotated[str, Field(description="ID of the property list to retrieve")] + list_id: Annotated[str, Field(description='ID of the property list to retrieve')] pagination: Annotated[ Pagination | None, Field( - description="Pagination parameters. Uses higher limits than standard pagination because property lists can contain tens of thousands of identifiers." + description='Pagination parameters. Uses higher limits than standard pagination because property lists can contain tens of thousands of identifiers.' ), ] = None resolve: Annotated[ bool | None, Field( - description="Whether to apply filters and return resolved identifiers (default: true)" + description='Whether to apply filters and return resolved identifiers (default: true)' ), ] = True diff --git a/src/adcp/types/generated_poc/property/get_property_list_response.py b/src/adcp/types/generated_poc/property/get_property_list_response.py index c8e7703d..55555193 100644 --- a/src/adcp/types/generated_poc/property/get_property_list_response.py +++ b/src/adcp/types/generated_poc/property/get_property_list_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: property/get_property_list_response.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,12 +16,12 @@ class GetPropertyListResponse(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) cache_valid_until: Annotated[ AwareDatetime | None, Field( - description="Cache expiration timestamp. Re-fetch the list after this time to get updated identifiers." + description='Cache expiration timestamp. Re-fetch the list after this time to get updated identifiers.' ), ] = None coverage_gaps: Annotated[ @@ -34,14 +34,14 @@ class GetPropertyListResponse(AdCPBaseModel): identifiers: Annotated[ list[identifier.Identifier] | None, Field( - description="Resolved identifiers that passed filters (if resolve=true). Cache these locally for real-time use." + description='Resolved identifiers that passed filters (if resolve=true). Cache these locally for real-time use.' ), ] = None list: Annotated[ property_list.PropertyList, - Field(description="The property list metadata (always returned)"), + Field(description='The property list metadata (always returned)'), ] pagination: pagination_response.PaginationResponse | None = None resolved_at: Annotated[ - AwareDatetime | None, Field(description="When the list was resolved") + AwareDatetime | None, Field(description='When the list was resolved') ] = None diff --git a/src/adcp/types/generated_poc/property/list_property_lists_request.py b/src/adcp/types/generated_poc/property/list_property_lists_request.py index 9459800f..90bea78b 100644 --- a/src/adcp/types/generated_poc/property/list_property_lists_request.py +++ b/src/adcp/types/generated_poc/property/list_property_lists_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: property/list_property_lists_request.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,14 +16,14 @@ class ListPropertyListsRequest(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None name_contains: Annotated[ - str | None, Field(description="Filter to lists whose name contains this string") + str | None, Field(description='Filter to lists whose name contains this string') ] = None pagination: pagination_request.PaginationRequest | None = None principal: Annotated[ - str | None, Field(description="Filter to lists owned by this principal") + str | None, Field(description='Filter to lists owned by this principal') ] = None diff --git a/src/adcp/types/generated_poc/property/list_property_lists_response.py b/src/adcp/types/generated_poc/property/list_property_lists_response.py index 1b2b7c08..6a0d51e3 100644 --- a/src/adcp/types/generated_poc/property/list_property_lists_response.py +++ b/src/adcp/types/generated_poc/property/list_property_lists_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: property/list_property_lists_response.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,11 +16,11 @@ class ListPropertyListsResponse(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) ext: ext_1.ExtensionObject | None = None lists: Annotated[ list[property_list.PropertyList], - Field(description="Array of property lists (metadata only, not resolved properties)"), + Field(description='Array of property lists (metadata only, not resolved properties)'), ] pagination: pagination_response.PaginationResponse | None = None diff --git a/src/adcp/types/generated_poc/property/property_error.py b/src/adcp/types/generated_poc/property/property_error.py index 8ad9d0c8..12df52de 100644 --- a/src/adcp/types/generated_poc/property/property_error.py +++ b/src/adcp/types/generated_poc/property/property_error.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: property/property_error.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,20 +14,20 @@ class Code(Enum): - PROPERTY_NOT_FOUND = "PROPERTY_NOT_FOUND" - PROPERTY_NOT_MONITORED = "PROPERTY_NOT_MONITORED" - LIST_NOT_FOUND = "LIST_NOT_FOUND" - LIST_ACCESS_DENIED = "LIST_ACCESS_DENIED" - METHODOLOGY_NOT_SUPPORTED = "METHODOLOGY_NOT_SUPPORTED" - JURISDICTION_NOT_SUPPORTED = "JURISDICTION_NOT_SUPPORTED" + PROPERTY_NOT_FOUND = 'PROPERTY_NOT_FOUND' + PROPERTY_NOT_MONITORED = 'PROPERTY_NOT_MONITORED' + LIST_NOT_FOUND = 'LIST_NOT_FOUND' + LIST_ACCESS_DENIED = 'LIST_ACCESS_DENIED' + METHODOLOGY_NOT_SUPPORTED = 'METHODOLOGY_NOT_SUPPORTED' + JURISDICTION_NOT_SUPPORTED = 'JURISDICTION_NOT_SUPPORTED' class PropertyError(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) - code: Annotated[Code, Field(description="Error code")] - message: Annotated[str, Field(description="Human-readable error message")] + code: Annotated[Code, Field(description='Error code')] + message: Annotated[str, Field(description='Human-readable error message')] property: Annotated[ - property_1.Property | None, Field(description="The property that caused the error") + property_1.Property | None, Field(description='The property that caused the error') ] = None diff --git a/src/adcp/types/generated_poc/property/property_feature.py b/src/adcp/types/generated_poc/property/property_feature.py index 9388aade..e78079cc 100644 --- a/src/adcp/types/generated_poc/property/property_feature.py +++ b/src/adcp/types/generated_poc/property/property_feature.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: property/property_feature.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,11 +12,11 @@ class PropertyFeature(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) - feature_id: Annotated[str, Field(description="Identifier for the feature being assessed")] + feature_id: Annotated[str, Field(description='Identifier for the feature being assessed')] source: Annotated[ str | None, - Field(description="Source of the feature data (e.g., app_store_privacy_label, tcf_string)"), + Field(description='Source of the feature data (e.g., app_store_privacy_label, tcf_string)'), ] = None - value: Annotated[str, Field(description="The feature value")] + value: Annotated[str, Field(description='The feature value')] diff --git a/src/adcp/types/generated_poc/property/property_feature_definition.py b/src/adcp/types/generated_poc/property/property_feature_definition.py index 7ae0e5e8..11ba33c0 100644 --- a/src/adcp/types/generated_poc/property/property_feature_definition.py +++ b/src/adcp/types/generated_poc/property/property_feature_definition.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: property/property_feature_definition.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,42 +15,42 @@ class Coverage(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) countries: Annotated[ - list[str] | None, Field(description="Countries where this feature is available") + list[str] | None, Field(description='Countries where this feature is available') ] = None property_types: Annotated[ - list[str] | None, Field(description="Property types this feature applies to") + list[str] | None, Field(description='Property types this feature applies to') ] = None class Range(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) - max: Annotated[float, Field(description="Maximum value")] - min: Annotated[float, Field(description="Minimum value")] + max: Annotated[float, Field(description='Maximum value')] + min: Annotated[float, Field(description='Minimum value')] class Type(Enum): - binary = "binary" - quantitative = "quantitative" - categorical = "categorical" + binary = 'binary' + quantitative = 'quantitative' + categorical = 'categorical' class PropertyFeatureDefinition(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) allowed_values: Annotated[ - list[str] | None, Field(description="For categorical features, the set of valid values") + list[str] | None, Field(description='For categorical features, the set of valid values') ] = None coverage: Annotated[ - Coverage | None, Field(description="What this feature covers (empty arrays = all)") + Coverage | None, Field(description='What this feature covers (empty arrays = all)') ] = None description: Annotated[ - str | None, Field(description="Description of what this feature measures or represents") + str | None, Field(description='Description of what this feature measures or represents') ] = None ext: ext_1.ExtensionObject | None = None feature_id: Annotated[ @@ -62,19 +62,19 @@ class PropertyFeatureDefinition(AdCPBaseModel): methodology_url: Annotated[ AnyUrl, Field( - description="URL to documentation explaining how this feature is calculated/measured" + description='URL to documentation explaining how this feature is calculated/measured' ), ] methodology_version: Annotated[ - str | None, Field(description="Version identifier for the methodology (for audit trails)") + str | None, Field(description='Version identifier for the methodology (for audit trails)') ] = None - name: Annotated[str, Field(description="Human-readable name for the feature")] + name: Annotated[str, Field(description='Human-readable name for the feature')] range: Annotated[ - Range | None, Field(description="For quantitative features, the valid range of values") + Range | None, Field(description='For quantitative features, the valid range of values') ] = None type: Annotated[ Type, Field( - description="The type of values this feature produces: binary (true/false), quantitative (numeric range), categorical (enumerated values)" + description='The type of values this feature produces: binary (true/false), quantitative (numeric range), categorical (enumerated values)' ), ] diff --git a/src/adcp/types/generated_poc/property/property_list.py b/src/adcp/types/generated_poc/property/property_list.py index c8eb8f77..f537f3b1 100644 --- a/src/adcp/types/generated_poc/property/property_list.py +++ b/src/adcp/types/generated_poc/property/property_list.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: property/property_list.json -# timestamp: 2026-02-18T17:56:28+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,7 +15,7 @@ class PropertyList(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) base_properties: Annotated[ list[base_property_source.BasePropertySource] | None, @@ -26,17 +26,17 @@ class PropertyList(AdCPBaseModel): brand: Annotated[ brand_ref.BrandReference | None, Field( - description="Brand reference used to automatically apply appropriate rules. Resolved to full brand identity at execution time." + description='Brand reference used to automatically apply appropriate rules. Resolved to full brand identity at execution time.' ), ] = None cache_duration_hours: Annotated[ int | None, Field( - description="Recommended cache duration for resolved list. Consumers should re-fetch after this period.", + description='Recommended cache duration for resolved list. Consumers should re-fetch after this period.', ge=1, ), ] = 24 - created_at: Annotated[AwareDatetime | None, Field(description="When the list was created")] = ( + created_at: Annotated[AwareDatetime | None, Field(description='When the list was created')] = ( None ) description: Annotated[str | None, Field(description="Description of the list's purpose")] = ( @@ -44,21 +44,21 @@ class PropertyList(AdCPBaseModel): ) filters: Annotated[ property_list_filters.PropertyListFilters | None, - Field(description="Dynamic filters applied when resolving the list"), + Field(description='Dynamic filters applied when resolving the list'), ] = None - list_id: Annotated[str, Field(description="Unique identifier for this property list")] - name: Annotated[str, Field(description="Human-readable name for the list")] + list_id: Annotated[str, Field(description='Unique identifier for this property list')] + name: Annotated[str, Field(description='Human-readable name for the list')] principal: Annotated[ - str | None, Field(description="Principal identity that owns this list") + str | None, Field(description='Principal identity that owns this list') ] = None property_count: Annotated[ int | None, - Field(description="Number of properties in the resolved list (at time of last resolution)"), + Field(description='Number of properties in the resolved list (at time of last resolution)'), ] = None updated_at: Annotated[ - AwareDatetime | None, Field(description="When the list was last modified") + AwareDatetime | None, Field(description='When the list was last modified') ] = None webhook_url: Annotated[ AnyUrl | None, - Field(description="URL to receive notifications when the resolved list changes"), + Field(description='URL to receive notifications when the resolved list changes'), ] = None diff --git a/src/adcp/types/generated_poc/property/property_list_changed_webhook.py b/src/adcp/types/generated_poc/property/property_list_changed_webhook.py index 090b9f4c..67d3cfc6 100644 --- a/src/adcp/types/generated_poc/property/property_list_changed_webhook.py +++ b/src/adcp/types/generated_poc/property/property_list_changed_webhook.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: property/property_list_changed_webhook.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,35 +14,35 @@ class ChangeSummary(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) properties_added: Annotated[ - int | None, Field(description="Number of properties added since last resolution") + int | None, Field(description='Number of properties added since last resolution') ] = None properties_removed: Annotated[ - int | None, Field(description="Number of properties removed since last resolution") + int | None, Field(description='Number of properties removed since last resolution') ] = None total_properties: Annotated[ - int | None, Field(description="Total properties in the resolved list") + int | None, Field(description='Total properties in the resolved list') ] = None class PropertyListChangedWebhook(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) cache_valid_until: Annotated[ AwareDatetime | None, - Field(description="When the consumer should refresh from the governance agent"), + Field(description='When the consumer should refresh from the governance agent'), ] = None change_summary: Annotated[ - ChangeSummary | None, Field(description="Summary of changes to the resolved list") + ChangeSummary | None, Field(description='Summary of changes to the resolved list') ] = None - event: Annotated[Literal["property_list_changed"], Field(description="The event type")] + event: Annotated[Literal['property_list_changed'], Field(description='The event type')] ext: ext_1.ExtensionObject | None = None - list_id: Annotated[str, Field(description="ID of the property list that changed")] - list_name: Annotated[str | None, Field(description="Name of the property list")] = None - resolved_at: Annotated[AwareDatetime, Field(description="When the list was re-resolved")] + list_id: Annotated[str, Field(description='ID of the property list that changed')] + list_name: Annotated[str | None, Field(description='Name of the property list')] = None + resolved_at: Annotated[AwareDatetime, Field(description='When the list was re-resolved')] signature: Annotated[ str, Field( diff --git a/src/adcp/types/generated_poc/property/property_list_filters.py b/src/adcp/types/generated_poc/property/property_list_filters.py index 9a6a55fb..332e9187 100644 --- a/src/adcp/types/generated_poc/property/property_list_filters.py +++ b/src/adcp/types/generated_poc/property/property_list_filters.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: property/property_list_filters.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,38 +15,38 @@ class CountriesAllItem(RootModel[str]): - root: Annotated[str, Field(pattern="^[A-Z]{2}$")] + root: Annotated[str, Field(pattern='^[A-Z]{2}$')] class PropertyListFilters(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) channels_any: Annotated[ list[channels.MediaChannel], Field( - description="Property must support ANY of the listed channels. Required.", min_length=1 + description='Property must support ANY of the listed channels. Required.', min_length=1 ), ] countries_all: Annotated[ list[CountriesAllItem], Field( - description="Property must have feature data for ALL listed countries (ISO codes). Required.", + description='Property must have feature data for ALL listed countries (ISO codes). Required.', min_length=1, ), ] exclude_identifiers: Annotated[ list[identifier.Identifier] | None, - Field(description="Identifiers to always exclude from results", min_length=1), + Field(description='Identifiers to always exclude from results', min_length=1), ] = None feature_requirements: Annotated[ list[feature_requirement.FeatureRequirement] | None, Field( - description="Feature-based requirements. Property must pass ALL requirements (AND logic).", + description='Feature-based requirements. Property must pass ALL requirements (AND logic).', min_length=1, ), ] = None property_types: Annotated[ list[property_type.PropertyType] | None, - Field(description="Filter to these property types", min_length=1), + Field(description='Filter to these property types', min_length=1), ] = None diff --git a/src/adcp/types/generated_poc/property/update_property_list_request.py b/src/adcp/types/generated_poc/property/update_property_list_request.py index 82979a4a..070c27b0 100644 --- a/src/adcp/types/generated_poc/property/update_property_list_request.py +++ b/src/adcp/types/generated_poc/property/update_property_list_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: property/update_property_list_request.json -# timestamp: 2026-02-18T17:56:28+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -17,32 +17,32 @@ class UpdatePropertyListRequest(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) base_properties: Annotated[ list[base_property_source.BasePropertySource] | None, Field( - description="Complete replacement for the base properties list (not a patch). Each entry is a discriminated union: publisher_tags (publisher_domain + tags), publisher_ids (publisher_domain + property_ids), or identifiers (direct identifiers)." + description='Complete replacement for the base properties list (not a patch). Each entry is a discriminated union: publisher_tags (publisher_domain + tags), publisher_ids (publisher_domain + property_ids), or identifiers (direct identifiers).' ), ] = None brand: Annotated[ brand_ref.BrandReference | None, Field( - description="Update brand reference. Resolved to full brand identity at execution time." + description='Update brand reference. Resolved to full brand identity at execution time.' ), ] = None context: context_1.ContextObject | None = None - description: Annotated[str | None, Field(description="New description")] = None + description: Annotated[str | None, Field(description='New description')] = None ext: ext_1.ExtensionObject | None = None filters: Annotated[ property_list_filters.PropertyListFilters | None, - Field(description="Complete replacement for the filters (not a patch)"), + Field(description='Complete replacement for the filters (not a patch)'), ] = None - list_id: Annotated[str, Field(description="ID of the property list to update")] - name: Annotated[str | None, Field(description="New name for the list")] = None + list_id: Annotated[str, Field(description='ID of the property list to update')] + name: Annotated[str | None, Field(description='New name for the list')] = None webhook_url: Annotated[ AnyUrl | None, Field( - description="Update the webhook URL for list change notifications (set to empty string to remove)" + description='Update the webhook URL for list change notifications (set to empty string to remove)' ), ] = None diff --git a/src/adcp/types/generated_poc/property/update_property_list_response.py b/src/adcp/types/generated_poc/property/update_property_list_response.py index 790dabae..b83bac60 100644 --- a/src/adcp/types/generated_poc/property/update_property_list_response.py +++ b/src/adcp/types/generated_poc/property/update_property_list_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: property/update_property_list_response.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,7 +15,7 @@ class UpdatePropertyListResponse(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) ext: ext_1.ExtensionObject | None = None - list: Annotated[property_list.PropertyList, Field(description="The updated property list")] + list: Annotated[property_list.PropertyList, Field(description='The updated property list')] diff --git a/src/adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py b/src/adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py index 4742f2dd..0d2cce73 100644 --- a/src/adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py +++ b/src/adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: protocol/get_adcp_capabilities_request.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,23 +15,23 @@ class Protocol(Enum): - media_buy = "media_buy" - signals = "signals" - governance = "governance" - sponsored_intelligence = "sponsored_intelligence" - creative = "creative" + media_buy = 'media_buy' + signals = 'signals' + governance = 'governance' + sponsored_intelligence = 'sponsored_intelligence' + creative = 'creative' class GetAdcpCapabilitiesRequest(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = None protocols: Annotated[ list[Protocol] | None, Field( - description="Specific protocols to query capabilities for. If omitted, returns capabilities for all supported protocols.", + description='Specific protocols to query capabilities for. If omitted, returns capabilities for all supported protocols.', min_length=1, ), ] = None diff --git a/src/adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py b/src/adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py index 36b2d2ab..8df72c23 100644 --- a/src/adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py +++ b/src/adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: protocol/get_adcp_capabilities_response.json -# timestamp: 2026-02-23T01:24:08+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -21,22 +21,22 @@ class DefaultBilling(Enum): - brand = "brand" - operator = "operator" - agent = "agent" + brand = 'brand' + operator = 'operator' + agent = 'agent' class Account(AdCPBaseModel): authorization_endpoint: Annotated[ AnyUrl | None, Field( - description="OAuth authorization endpoint for obtaining operator-level credentials. Present when the seller supports OAuth for operator authentication. The agent directs the operator to this URL to authenticate and obtain a bearer token. If absent and require_operator_auth is true, operators obtain credentials out-of-band (e.g., seller portal, API key)." + description='OAuth authorization endpoint for obtaining operator-level credentials. Present when the seller supports OAuth for operator authentication. The agent directs the operator to this URL to authenticate and obtain a bearer token. If absent and require_operator_auth is true, operators obtain credentials out-of-band (e.g., seller portal, API key).' ), ] = None default_billing: Annotated[ DefaultBilling | None, Field( - description="The billing model applied when the agent omits billing from a sync_accounts request. Must be one of the values in supported_billing." + description='The billing model applied when the agent omits billing from a sync_accounts request. Must be one of the values in supported_billing.' ), ] = None require_operator_auth: Annotated[ @@ -48,13 +48,13 @@ class Account(AdCPBaseModel): required_for_products: Annotated[ bool | None, Field( - description="Whether an active account is required to call get_products. When true, the agent must establish an account via sync_accounts before browsing products. When false, get_products works without an account (account_id is optional for rate-card-specific pricing)." + description='Whether an active account is required to call get_products. When true, the agent must establish an account via sync_accounts before browsing products. When false, get_products works without an account (account_id is optional for rate-card-specific pricing).' ), ] = False supported_billing: Annotated[ list[DefaultBilling], Field( - description="Billing models this seller supports. brand: seller invoices the brand directly. operator: seller invoices the operator (agency). agent: agent consolidates billing.", + description='Billing models this seller supports. brand: seller invoices the brand directly. operator: seller invoices the operator (agency). agent: agent consolidates billing.', min_length=1, ), ] @@ -68,7 +68,7 @@ class Adcp(AdCPBaseModel): major_versions: Annotated[ list[MajorVersion], Field( - description="AdCP major versions supported by this seller. Major versions indicate breaking changes.", + description='AdCP major versions supported by this seller. Major versions indicate breaking changes.', min_length=1, ), ] @@ -76,12 +76,12 @@ class Adcp(AdCPBaseModel): class Creative(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) supports_brief: Annotated[ bool | None, Field( - description="Whether this creative agent accepts creative_brief in build_creative requests for structured campaign-level creative direction" + description='Whether this creative agent accepts creative_brief in build_creative requests for structured campaign-level creative direction' ), ] = None @@ -91,28 +91,28 @@ class ExtensionsSupportedItem(RootModel[str]): str, Field( description="Extension namespace (lowercase alphanumeric with underscores, e.g., 'scope3', 'garm', 'iab_tcf')", - pattern="^[a-z][a-z0-9_]*$", + pattern='^[a-z][a-z0-9_]*$', ), ] class Range(AdCPBaseModel): - max: Annotated[float, Field(description="Maximum value")] - min: Annotated[float, Field(description="Minimum value")] + max: Annotated[float, Field(description='Maximum value')] + min: Annotated[float, Field(description='Minimum value')] class Type(Enum): - binary = "binary" - quantitative = "quantitative" - categorical = "categorical" + binary = 'binary' + quantitative = 'quantitative' + categorical = 'categorical' class CreativeFeature(AdCPBaseModel): categories: Annotated[ - list[str] | None, Field(description="For categorical features, the valid values") + list[str] | None, Field(description='For categorical features, the valid values') ] = None description: Annotated[ - str | None, Field(description="Human-readable description of what this feature measures") + str | None, Field(description='Human-readable description of what this feature measures') ] = None feature_id: Annotated[ str, @@ -123,11 +123,11 @@ class CreativeFeature(AdCPBaseModel): methodology_url: Annotated[ AnyUrl | None, Field( - description="URL to documentation explaining how this feature is calculated or measured." + description='URL to documentation explaining how this feature is calculated or measured.' ), ] = None range: Annotated[ - Range | None, Field(description="For quantitative features, the valid range") + Range | None, Field(description='For quantitative features, the valid range') ] = None type: Annotated[ Type, @@ -139,10 +139,10 @@ class CreativeFeature(AdCPBaseModel): class PropertyFeature(AdCPBaseModel): categories: Annotated[ - list[str] | None, Field(description="For categorical features, the valid values") + list[str] | None, Field(description='For categorical features, the valid values') ] = None description: Annotated[ - str | None, Field(description="Human-readable description of what this feature measures") + str | None, Field(description='Human-readable description of what this feature measures') ] = None feature_id: Annotated[ str, @@ -153,11 +153,11 @@ class PropertyFeature(AdCPBaseModel): methodology_url: Annotated[ AnyUrl | None, Field( - description="URL to documentation explaining how this feature is calculated or measured. Helps buyers understand and compare methodologies across vendors." + description='URL to documentation explaining how this feature is calculated or measured. Helps buyers understand and compare methodologies across vendors.' ), ] = None range: Annotated[ - Range | None, Field(description="For quantitative features, the valid range") + Range | None, Field(description='For quantitative features, the valid range') ] = None type: Annotated[ Type, @@ -171,33 +171,33 @@ class Governance(AdCPBaseModel): creative_features: Annotated[ list[CreativeFeature] | None, Field( - description="Creative features this governance agent can evaluate. Each feature describes a score, rating, or assessment the agent can provide for creatives (e.g., security scanning, creative quality, content categorization)." + description='Creative features this governance agent can evaluate. Each feature describes a score, rating, or assessment the agent can provide for creatives (e.g., security scanning, creative quality, content categorization).' ), ] = None property_features: Annotated[ list[PropertyFeature] | None, Field( - description="Property features this governance agent can evaluate. Each feature describes a score, rating, or certification the agent can provide for properties." + description='Property features this governance agent can evaluate. Each feature describes a score, rating, or certification the agent can provide for properties.' ), ] = None class MatchingLatencyHours(AdCPBaseModel): model_config = ConfigDict( - extra="forbid", + extra='forbid', ) max: Annotated[int | None, Field(ge=0)] = None min: Annotated[int | None, Field(ge=0)] = None class SupportedIdentifierType(Enum): - hashed_email = "hashed_email" - hashed_phone = "hashed_phone" + hashed_email = 'hashed_email' + hashed_phone = 'hashed_phone' class AttributionWindow(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) click_through: Annotated[ list[str], @@ -208,7 +208,7 @@ class AttributionWindow(AdCPBaseModel): ] event_type: Annotated[ event_type_1.EventType | None, - Field(description="Event type this window applies to, or omit for default window"), + Field(description='Event type this window applies to, or omit for default window'), ] = None view_through: Annotated[ list[str] | None, @@ -220,7 +220,7 @@ class AttributionWindow(AdCPBaseModel): class MraidVersion(RootModel[str]): - root: Annotated[str, Field(pattern="^[0-9]+\\.[0-9]+$")] + root: Annotated[str, Field(pattern='^[0-9]+\\.[0-9]+$')] class VastVersion(MraidVersion): @@ -230,39 +230,39 @@ class VastVersion(MraidVersion): class CreativeSpecs(AdCPBaseModel): mraid_versions: Annotated[ list[MraidVersion] | None, - Field(description="MRAID versions supported for rich media mobile creatives"), + Field(description='MRAID versions supported for rich media mobile creatives'), ] = None - simid: Annotated[bool | None, Field(description="SIMID support for interactive video ads")] = ( + simid: Annotated[bool | None, Field(description='SIMID support for interactive video ads')] = ( None ) vast_versions: Annotated[ - list[VastVersion] | None, Field(description="VAST versions supported for video creatives") + list[VastVersion] | None, Field(description='VAST versions supported for video creatives') ] = None - vpaid: Annotated[bool | None, Field(description="VPAID support for interactive video ads")] = ( + vpaid: Annotated[bool | None, Field(description='VPAID support for interactive video ads')] = ( None ) class AgeRestriction(AdCPBaseModel): supported: Annotated[ - bool | None, Field(description="Whether seller supports age restrictions") + bool | None, Field(description='Whether seller supports age restrictions') ] = None verification_methods: Annotated[ list[age_verification_method.AgeVerificationMethod] | None, - Field(description="Age verification methods this seller supports"), + Field(description='Age verification methods this seller supports'), ] = None class GeoMetros(AdCPBaseModel): eurostat_nuts2: Annotated[ - bool | None, Field(description="Supports Eurostat NUTS Level 2 regions (EU)") + bool | None, Field(description='Supports Eurostat NUTS Level 2 regions (EU)') ] = None nielsen_dma: Annotated[ bool | None, Field(description="Supports Nielsen DMA codes (US market, e.g., '501' for NYC)"), ] = None - uk_itl1: Annotated[bool | None, Field(description="Supports UK ITL Level 1 regions")] = None - uk_itl2: Annotated[bool | None, Field(description="Supports UK ITL Level 2 regions")] = None + uk_itl1: Annotated[bool | None, Field(description='Supports UK ITL Level 1 regions')] = None + uk_itl2: Annotated[bool | None, Field(description='Supports UK ITL Level 2 regions')] = None class GeoPostalAreas(AdCPBaseModel): @@ -294,24 +294,24 @@ class GeoPostalAreas(AdCPBaseModel): class Targeting(AdCPBaseModel): age_restriction: Annotated[ AgeRestriction | None, - Field(description="Age restriction capabilities for compliance (alcohol, gambling)"), + Field(description='Age restriction capabilities for compliance (alcohol, gambling)'), ] = None audience_exclude: Annotated[ bool | None, Field( - description="Whether seller supports audience_exclude in targeting overlays (requires features.audience_targeting)" + description='Whether seller supports audience_exclude in targeting overlays (requires features.audience_targeting)' ), ] = None audience_include: Annotated[ bool | None, Field( - description="Whether seller supports audience_include in targeting overlays (requires features.audience_targeting)" + description='Whether seller supports audience_include in targeting overlays (requires features.audience_targeting)' ), ] = None device_platform: Annotated[ bool | None, Field( - description="Whether seller supports device platform targeting (Sec-CH-UA-Platform values)" + description='Whether seller supports device platform targeting (Sec-CH-UA-Platform values)' ), ] = None geo_countries: Annotated[ @@ -323,13 +323,13 @@ class Targeting(AdCPBaseModel): geo_metros: Annotated[ GeoMetros | None, Field( - description="Metro area targeting support. Specifies which classification systems are supported." + description='Metro area targeting support. Specifies which classification systems are supported.' ), ] = None geo_postal_areas: Annotated[ GeoPostalAreas | None, Field( - description="Postal area targeting support. Specifies which postal code systems are supported. System names encode country and precision." + description='Postal area targeting support. Specifies which postal code systems are supported. System names encode country and precision.' ), ] = None geo_regions: Annotated[ @@ -340,7 +340,7 @@ class Targeting(AdCPBaseModel): ] = None language: Annotated[ bool | None, - Field(description="Whether seller supports language targeting (ISO 639-1 codes)"), + Field(description='Whether seller supports language targeting (ISO 639-1 codes)'), ] = None @@ -348,27 +348,27 @@ class Execution(AdCPBaseModel): axe_integrations: Annotated[ list[AnyUrl] | None, Field( - description="Agentic ad exchange (AXE) integrations supported. URLs are canonical identifiers for exchanges this seller can execute through." + description='Agentic ad exchange (AXE) integrations supported. URLs are canonical identifiers for exchanges this seller can execute through.' ), ] = None creative_specs: Annotated[ - CreativeSpecs | None, Field(description="Creative specification support") + CreativeSpecs | None, Field(description='Creative specification support') ] = None targeting: Annotated[ Targeting | None, Field( - description="Targeting capabilities. If declared true/supported, buyer can use these targeting parameters and seller MUST honor them." + description='Targeting capabilities. If declared true/supported, buyer can use these targeting parameters and seller MUST honor them.' ), ] = None class PrimaryCountry(RootModel[str]): - root: Annotated[str, Field(pattern="^[A-Z]{2}$")] + root: Annotated[str, Field(pattern='^[A-Z]{2}$')] class PublisherDomain(RootModel[str]): root: Annotated[ - str, Field(pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$") + str, Field(pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$') ] @@ -376,23 +376,23 @@ class Portfolio(AdCPBaseModel): advertising_policies: Annotated[ str | None, Field( - description="Advertising content policies, restrictions, and guidelines", + description='Advertising content policies, restrictions, and guidelines', max_length=10000, ), ] = None description: Annotated[ str | None, Field( - description="Markdown-formatted description of the inventory portfolio", max_length=5000 + description='Markdown-formatted description of the inventory portfolio', max_length=5000 ), ] = None primary_channels: Annotated[ list[channels.MediaChannel] | None, - Field(description="Primary advertising channels in this portfolio"), + Field(description='Primary advertising channels in this portfolio'), ] = None primary_countries: Annotated[ list[PrimaryCountry] | None, - Field(description="Primary countries (ISO 3166-1 alpha-2) where inventory is concentrated"), + Field(description='Primary countries (ISO 3166-1 alpha-2) where inventory is concentrated'), ] = None publisher_domains: Annotated[ list[PublisherDomain], @@ -411,7 +411,7 @@ class Features(AdCPBaseModel): catalog_signals: Annotated[ bool | None, Field( - description="Supports signals from data provider catalogs with structured signal_id references" + description='Supports signals from data provider catalogs with structured signal_id references' ), ] = None @@ -425,72 +425,72 @@ class Signals(AdCPBaseModel): ), ] = None features: Annotated[ - Features | None, Field(description="Optional signals features supported") + Features | None, Field(description='Optional signals features supported') ] = None class Preferred(Enum): - mcp = "mcp" - a2a = "a2a" + mcp = 'mcp' + a2a = 'a2a' class Transport(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - type: Annotated[Preferred, Field(description="Protocol transport type")] - url: Annotated[AnyUrl, Field(description="Agent endpoint URL for this transport")] + type: Annotated[Preferred, Field(description='Protocol transport type')] + url: Annotated[AnyUrl, Field(description='Agent endpoint URL for this transport')] class Endpoint(AdCPBaseModel): preferred: Annotated[ - Preferred | None, Field(description="Preferred transport when host supports multiple") + Preferred | None, Field(description='Preferred transport when host supports multiple') ] = None transports: Annotated[ list[Transport], Field( - description="Available protocol transports. Hosts select based on their capabilities.", + description='Available protocol transports. Hosts select based on their capabilities.', min_length=1, ), ] class SupportedProtocol(Enum): - media_buy = "media_buy" - signals = "signals" - governance = "governance" - sponsored_intelligence = "sponsored_intelligence" - creative = "creative" + media_buy = 'media_buy' + signals = 'signals' + governance = 'governance' + sponsored_intelligence = 'sponsored_intelligence' + creative = 'creative' class AudienceTargeting(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) matching_latency_hours: Annotated[ MatchingLatencyHours | None, Field( - description="Expected matching latency range in hours after upload. Use to calibrate polling cadence and set appropriate expectations before configuring push_notification_config." + description='Expected matching latency range in hours after upload. Use to calibrate polling cadence and set appropriate expectations before configuring push_notification_config.' ), ] = None minimum_audience_size: Annotated[ int, Field( - description="Minimum matched audience size required for targeting. Audiences below this threshold will have status: too_small. Varies by platform (100–1000 is typical).", + description='Minimum matched audience size required for targeting. Audiences below this threshold will have status: too_small. Varies by platform (100–1000 is typical).', ge=1, ), ] supported_identifier_types: Annotated[ list[SupportedIdentifierType], Field( - description="Hashed PII types accepted for audience matching. Buyers should only send identifiers the seller supports.", + description='Hashed PII types accepted for audience matching. Buyers should only send identifiers the seller supports.', min_length=1, ), ] supported_uid_types: Annotated[ list[uid_type.UidType] | None, Field( - description="Universal ID types accepted for audience matching (MAIDs, RampID, UID2, etc.). MAID support varies significantly by platform — check this field before sending uids with type: maid.", + description='Universal ID types accepted for audience matching (MAIDs, RampID, UID2, etc.). MAID support varies significantly by platform — check this field before sending uids with type: maid.', min_length=1, ), ] = None @@ -498,35 +498,35 @@ class AudienceTargeting(AdCPBaseModel): class ConversionTracking(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) attribution_windows: Annotated[ list[AttributionWindow] | None, Field( - description="Attribution windows available from this seller. Single-element arrays indicate fixed windows; multi-element arrays indicate configurable options the buyer can choose from via optimization_goal.attribution_window on packages." + description='Attribution windows available from this seller. Single-element arrays indicate fixed windows; multi-element arrays indicate configurable options the buyer can choose from via optimization_goal.attribution_window on packages.' ), ] = None supported_action_sources: Annotated[ list[action_source.ActionSource] | None, - Field(description="Action sources this seller accepts events from", min_length=1), + Field(description='Action sources this seller accepts events from', min_length=1), ] = None supported_event_types: Annotated[ list[event_type_1.EventType] | None, Field( - description="Event types this seller can track and attribute. If omitted, all standard event types are supported.", + description='Event types this seller can track and attribute. If omitted, all standard event types are supported.', min_length=1, ), ] = None supported_hashed_identifiers: Annotated[ list[SupportedIdentifierType] | None, Field( - description="Hashed PII types accepted for user matching. Buyers must hash before sending (SHA-256, normalized).", + description='Hashed PII types accepted for user matching. Buyers must hash before sending (SHA-256, normalized).', min_length=1, ), ] = None supported_uid_types: Annotated[ list[uid_type.UidType] | None, - Field(description="Universal ID types accepted for user matching", min_length=1), + Field(description='Universal ID types accepted for user matching', min_length=1), ] = None @@ -534,17 +534,17 @@ class MediaBuy(AdCPBaseModel): audience_targeting: Annotated[ AudienceTargeting | None, Field( - description="Audience targeting capabilities. Only present when features.audience_targeting is true." + description='Audience targeting capabilities. Only present when features.audience_targeting is true.' ), ] = None conversion_tracking: Annotated[ ConversionTracking | None, Field( - description="Seller-level conversion tracking capabilities. Only present when features.conversion_tracking is true." + description='Seller-level conversion tracking capabilities. Only present when features.conversion_tracking is true.' ), ] = None execution: Annotated[ - Execution | None, Field(description="Technical execution capabilities for media buying") + Execution | None, Field(description='Technical execution capabilities for media buying') ] = None features: media_buy_features.MediaBuyFeatures | None = None portfolio: Annotated[ @@ -555,74 +555,74 @@ class MediaBuy(AdCPBaseModel): class SponsoredIntelligence(AdCPBaseModel): brand_url: Annotated[ - AnyUrl | None, Field(description="URL to brand.json with colors, fonts, logos, tone") + AnyUrl | None, Field(description='URL to brand.json with colors, fonts, logos, tone') ] = None capabilities: Annotated[ si_capabilities.SiCapabilities, - Field(description="Modalities, components, and commerce capabilities"), + Field(description='Modalities, components, and commerce capabilities'), ] - endpoint: Annotated[Endpoint, Field(description="SI agent endpoint configuration")] + endpoint: Annotated[Endpoint, Field(description='SI agent endpoint configuration')] class GetAdcpCapabilitiesResponse(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) account: Annotated[ Account | None, Field( - description="Account management capabilities. Describes how accounts are established, what billing models are supported, and whether an account is required before browsing products." + description='Account management capabilities. Describes how accounts are established, what billing models are supported, and whether an account is required before browsing products.' ), ] = None - adcp: Annotated[Adcp, Field(description="Core AdCP protocol information")] + adcp: Annotated[Adcp, Field(description='Core AdCP protocol information')] context: context_1.ContextObject | None = None creative: Annotated[ Creative | None, Field( - description="Creative protocol capabilities. Only present if creative is in supported_protocols." + description='Creative protocol capabilities. Only present if creative is in supported_protocols.' ), ] = None errors: Annotated[ - list[error.Error] | None, Field(description="Task-specific errors and warnings") + list[error.Error] | None, Field(description='Task-specific errors and warnings') ] = None ext: ext_1.ExtensionObject | None = None extensions_supported: Annotated[ list[ExtensionsSupportedItem] | None, Field( - description="Extension namespaces this agent supports. Buyers can expect meaningful data in ext.{namespace} fields on responses from this agent. Extension schemas are published in the AdCP extension registry." + description='Extension namespaces this agent supports. Buyers can expect meaningful data in ext.{namespace} fields on responses from this agent. Extension schemas are published in the AdCP extension registry.' ), ] = None governance: Annotated[ Governance | None, Field( - description="Governance protocol capabilities. Only present if governance is in supported_protocols. Governance agents provide property and creative data like compliance scores, brand safety ratings, sustainability metrics, and creative quality assessments." + description='Governance protocol capabilities. Only present if governance is in supported_protocols. Governance agents provide property and creative data like compliance scores, brand safety ratings, sustainability metrics, and creative quality assessments.' ), ] = None last_updated: Annotated[ AwareDatetime | None, Field( - description="ISO 8601 timestamp of when capabilities were last updated. Buyers can use this for cache invalidation." + description='ISO 8601 timestamp of when capabilities were last updated. Buyers can use this for cache invalidation.' ), ] = None media_buy: Annotated[ MediaBuy | None, Field( - description="Media-buy protocol capabilities. Only present if media_buy is in supported_protocols." + description='Media-buy protocol capabilities. Only present if media_buy is in supported_protocols.' ), ] = None signals: Annotated[ Signals | None, Field( - description="Signals protocol capabilities. Only present if signals is in supported_protocols." + description='Signals protocol capabilities. Only present if signals is in supported_protocols.' ), ] = None sponsored_intelligence: Annotated[ SponsoredIntelligence | None, Field( - description="Sponsored Intelligence protocol capabilities. Only present if sponsored_intelligence is in supported_protocols. SI agents handle conversational brand experiences." + description='Sponsored Intelligence protocol capabilities. Only present if sponsored_intelligence is in supported_protocols. SI agents handle conversational brand experiences.' ), ] = None supported_protocols: Annotated[ list[SupportedProtocol], - Field(description="Which AdCP domain protocols this seller supports", min_length=1), + Field(description='Which AdCP domain protocols this seller supports', min_length=1), ] diff --git a/src/adcp/types/generated_poc/signals/activate_signal_request.py b/src/adcp/types/generated_poc/signals/activate_signal_request.py index 3f3252e5..d5dd77af 100644 --- a/src/adcp/types/generated_poc/signals/activate_signal_request.py +++ b/src/adcp/types/generated_poc/signals/activate_signal_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: signals/activate_signal_request.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,17 +16,17 @@ class ActivateSignalRequest(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None deployments: Annotated[ list[destination.Destination], Field( - description="Target deployment(s) for activation. If the authenticated caller matches one of these deployment targets, activation keys will be included in the response.", + description='Target deployment(s) for activation. If the authenticated caller matches one of these deployment targets, activation keys will be included in the response.', min_length=1, ), ] ext: ext_1.ExtensionObject | None = None signal_agent_segment_id: Annotated[ - str, Field(description="The universal identifier for the signal to activate") + str, Field(description='The universal identifier for the signal to activate') ] diff --git a/src/adcp/types/generated_poc/signals/activate_signal_response.py b/src/adcp/types/generated_poc/signals/activate_signal_response.py index 606dd63f..e9389627 100644 --- a/src/adcp/types/generated_poc/signals/activate_signal_response.py +++ b/src/adcp/types/generated_poc/signals/activate_signal_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: signals/activate_signal_response.json -# timestamp: 2026-02-20T02:37:39+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,29 +16,29 @@ class ActivateSignalResponse1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None deployments: Annotated[ list[deployment.Deployment], - Field(description="Array of deployment results for each deployment target"), + Field(description='Array of deployment results for each deployment target'), ] ext: ext_1.ExtensionObject | None = None sandbox: Annotated[ bool | None, - Field(description="When true, this response contains simulated data from sandbox mode."), + Field(description='When true, this response contains simulated data from sandbox mode.'), ] = None class ActivateSignalResponse2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error], Field( - description="Array of errors explaining why activation failed (e.g., platform connectivity issues, signal definition problems, authentication failures)", + description='Array of errors explaining why activation failed (e.g., platform connectivity issues, signal definition problems, authentication failures)', min_length=1, ), ] @@ -49,7 +49,7 @@ class ActivateSignalResponse(RootModel[ActivateSignalResponse1 | ActivateSignalR root: Annotated[ ActivateSignalResponse1 | ActivateSignalResponse2, Field( - description="Response payload for activate_signal task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - the signal is either fully activated or not activated at all.", - title="Activate Signal Response", + description='Response payload for activate_signal task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - the signal is either fully activated or not activated at all.', + title='Activate Signal Response', ), ] diff --git a/src/adcp/types/generated_poc/signals/get_signals_request.py b/src/adcp/types/generated_poc/signals/get_signals_request.py index 5650e109..fbd23a06 100644 --- a/src/adcp/types/generated_poc/signals/get_signals_request.py +++ b/src/adcp/types/generated_poc/signals/get_signals_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: signals/get_signals_request.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,21 +16,21 @@ class Country(RootModel[str]): - root: Annotated[str, Field(pattern="^[A-Z]{2}$")] + root: Annotated[str, Field(pattern='^[A-Z]{2}$')] class DeliverTo(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) countries: Annotated[ list[Country], - Field(description="Countries where signals will be used (ISO codes)", min_length=1), + Field(description='Countries where signals will be used (ISO codes)', min_length=1), ] deployments: Annotated[ list[destination.Destination], Field( - description="List of deployment targets (DSPs, sales agents, etc.). If the authenticated caller matches one of these deployment targets, activation keys will be included in the response.", + description='List of deployment targets (DSPs, sales agents, etc.). If the authenticated caller matches one of these deployment targets, activation keys will be included in the response.', min_length=1, ), ] @@ -42,16 +42,16 @@ class DeliverTo1(DeliverTo): class GetSignalsRequest1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None deliver_to: Annotated[ - DeliverTo, Field(description="Deployment targets where signals need to be activated") + DeliverTo, Field(description='Deployment targets where signals need to be activated') ] ext: ext_1.ExtensionObject | None = None filters: signal_filters.SignalFilters | None = None max_results: Annotated[ - int | None, Field(description="Maximum number of results to return", ge=1) + int | None, Field(description='Maximum number of results to return', ge=1) ] = None pagination: pagination_request.PaginationRequest | None = None signal_ids: Annotated[ @@ -64,23 +64,23 @@ class GetSignalsRequest1(AdCPBaseModel): signal_spec: Annotated[ str, Field( - description="Natural language description of the desired signals. When used alone, enables semantic discovery. When combined with signal_ids, provides context for the agent but signal_ids matches are returned first." + description='Natural language description of the desired signals. When used alone, enables semantic discovery. When combined with signal_ids, provides context for the agent but signal_ids matches are returned first.' ), ] class GetSignalsRequest2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None deliver_to: Annotated[ - DeliverTo1, Field(description="Deployment targets where signals need to be activated") + DeliverTo1, Field(description='Deployment targets where signals need to be activated') ] ext: ext_1.ExtensionObject | None = None filters: signal_filters.SignalFilters | None = None max_results: Annotated[ - int | None, Field(description="Maximum number of results to return", ge=1) + int | None, Field(description='Maximum number of results to return', ge=1) ] = None pagination: pagination_request.PaginationRequest | None = None signal_ids: Annotated[ @@ -93,7 +93,7 @@ class GetSignalsRequest2(AdCPBaseModel): signal_spec: Annotated[ str | None, Field( - description="Natural language description of the desired signals. When used alone, enables semantic discovery. When combined with signal_ids, provides context for the agent but signal_ids matches are returned first." + description='Natural language description of the desired signals. When used alone, enables semantic discovery. When combined with signal_ids, provides context for the agent but signal_ids matches are returned first.' ), ] = None @@ -102,7 +102,7 @@ class GetSignalsRequest(RootModel[GetSignalsRequest1 | GetSignalsRequest2]): root: Annotated[ GetSignalsRequest1 | GetSignalsRequest2, Field( - description="Request parameters for discovering signals. Use signal_spec for natural language discovery, signal_ids for exact lookups, or both (signal_ids take precedence for exact matches, signal_spec provides additional discovery context).", - title="Get Signals Request", + description='Request parameters for discovering signals. Use signal_spec for natural language discovery, signal_ids for exact lookups, or both (signal_ids take precedence for exact matches, signal_spec provides additional discovery context).', + title='Get Signals Request', ), ] diff --git a/src/adcp/types/generated_poc/signals/get_signals_response.py b/src/adcp/types/generated_poc/signals/get_signals_response.py index 2278bdcc..93407daa 100644 --- a/src/adcp/types/generated_poc/signals/get_signals_response.py +++ b/src/adcp/types/generated_poc/signals/get_signals_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: signals/get_signals_response.json -# timestamp: 2026-02-20T02:37:39+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -19,26 +19,26 @@ class Pricing(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - cpm: Annotated[float, Field(description="Cost per thousand impressions", ge=0.0)] - currency: Annotated[str, Field(description="Currency code", pattern="^[A-Z]{3}$")] + cpm: Annotated[float, Field(description='Cost per thousand impressions', ge=0.0)] + currency: Annotated[str, Field(description='Currency code', pattern='^[A-Z]{3}$')] class Signal(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) coverage_percentage: Annotated[ - float, Field(description="Percentage of audience coverage", ge=0.0, le=100.0) + float, Field(description='Percentage of audience coverage', ge=0.0, le=100.0) ] - data_provider: Annotated[str, Field(description="Human-readable name of the data provider")] + data_provider: Annotated[str, Field(description='Human-readable name of the data provider')] deployments: Annotated[ - list[deployment.Deployment], Field(description="Array of deployment targets") + list[deployment.Deployment], Field(description='Array of deployment targets') ] - description: Annotated[str, Field(description="Detailed signal description")] - name: Annotated[str, Field(description="Human-readable signal name")] - pricing: Annotated[Pricing, Field(description="Pricing information")] + description: Annotated[str, Field(description='Detailed signal description')] + name: Annotated[str, Field(description='Human-readable signal name')] + pricing: Annotated[Pricing, Field(description='Pricing information')] signal_agent_segment_id: Annotated[ str, Field( @@ -53,7 +53,7 @@ class Signal(AdCPBaseModel): ] = None signal_type: Annotated[ signal_catalog_type.SignalCatalogType, - Field(description="Catalog type of signal (marketplace, custom, owned)"), + Field(description='Catalog type of signal (marketplace, custom, owned)'), ] value_type: Annotated[ signal_value_type.SignalValueType | None, @@ -63,19 +63,19 @@ class Signal(AdCPBaseModel): class GetSignalsResponse(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: context_1.ContextObject | None = None errors: Annotated[ list[error.Error] | None, Field( - description="Task-specific errors and warnings (e.g., signal discovery or pricing issues)" + description='Task-specific errors and warnings (e.g., signal discovery or pricing issues)' ), ] = None ext: ext_1.ExtensionObject | None = None pagination: pagination_response.PaginationResponse | None = None sandbox: Annotated[ bool | None, - Field(description="When true, this response contains simulated data from sandbox mode."), + Field(description='When true, this response contains simulated data from sandbox mode.'), ] = None - signals: Annotated[list[Signal], Field(description="Array of matching signals")] + signals: Annotated[list[Signal], Field(description='Array of matching signals')] diff --git a/src/adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py b/src/adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py index 8898375f..ea3226af 100644 --- a/src/adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py +++ b/src/adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: sponsored_intelligence/si_capabilities.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -13,105 +13,105 @@ class A2ui(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) catalogs: Annotated[ list[str] | None, Field(description="Supported A2UI component catalogs (e.g., 'si-standard', 'standard')"), ] = None - supported: Annotated[bool | None, Field(description="Supports A2UI surface rendering")] = False + supported: Annotated[bool | None, Field(description='Supports A2UI surface rendering')] = False class Commerce(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) acp_checkout: Annotated[ - bool | None, Field(description="Supports ACP (Agentic Commerce Protocol) checkout handoff") + bool | None, Field(description='Supports ACP (Agentic Commerce Protocol) checkout handoff') ] = None class StandardEnum(Enum): - text = "text" - link = "link" - image = "image" - product_card = "product_card" - carousel = "carousel" - action_button = "action_button" + text = 'text' + link = 'link' + image = 'image' + product_card = 'product_card' + carousel = 'carousel' + action_button = 'action_button' class Components(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) extensions: Annotated[ dict[str, Any] | None, - Field(description="Platform-specific extensions (chatgpt_apps_sdk, maps, forms, etc.)"), + Field(description='Platform-specific extensions (chatgpt_apps_sdk, maps, forms, etc.)'), ] = None standard: Annotated[ list[StandardEnum] | None, - Field(description="Standard components that all SI hosts must render"), + Field(description='Standard components that all SI hosts must render'), ] = None class Avatar(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - avatar_id: Annotated[str | None, Field(description="Brand avatar identifier")] = None + avatar_id: Annotated[str | None, Field(description='Brand avatar identifier')] = None provider: Annotated[ - str | None, Field(description="Avatar provider (d-id, heygen, synthesia, etc.)") + str | None, Field(description='Avatar provider (d-id, heygen, synthesia, etc.)') ] = None class Video(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) formats: Annotated[ - list[str] | None, Field(description="Supported video formats (mp4, webm, etc.)") + list[str] | None, Field(description='Supported video formats (mp4, webm, etc.)') ] = None - max_duration_seconds: Annotated[int | None, Field(description="Maximum video duration")] = None + max_duration_seconds: Annotated[int | None, Field(description='Maximum video duration')] = None class Voice(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) provider: Annotated[ - str | None, Field(description="TTS provider (elevenlabs, openai, etc.)") + str | None, Field(description='TTS provider (elevenlabs, openai, etc.)') ] = None - voice_id: Annotated[str | None, Field(description="Brand voice identifier")] = None + voice_id: Annotated[str | None, Field(description='Brand voice identifier')] = None class Modalities(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) avatar: Annotated[ - bool | Avatar | None, Field(description="Animated video presence with brand avatar") + bool | Avatar | None, Field(description='Animated video presence with brand avatar') ] = None conversational: Annotated[ - bool | None, Field(description="Pure text exchange - the baseline modality") + bool | None, Field(description='Pure text exchange - the baseline modality') ] = True - video: Annotated[bool | Video | None, Field(description="Brand video content playback")] = None + video: Annotated[bool | Video | None, Field(description='Brand video content playback')] = None voice: Annotated[ - bool | Voice | None, Field(description="Audio-based interaction using brand voice") + bool | Voice | None, Field(description='Audio-based interaction using brand voice') ] = None class SiCapabilities(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - a2ui: Annotated[A2ui | None, Field(description="A2UI (Agent-to-UI) capabilities")] = None - commerce: Annotated[Commerce | None, Field(description="Commerce capabilities")] = None - components: Annotated[Components | None, Field(description="Visual components supported")] = ( + a2ui: Annotated[A2ui | None, Field(description='A2UI (Agent-to-UI) capabilities')] = None + commerce: Annotated[Commerce | None, Field(description='Commerce capabilities')] = None + components: Annotated[Components | None, Field(description='Visual components supported')] = ( None ) mcp_apps: Annotated[ - bool | None, Field(description="Supports MCP Apps for rendering A2UI surfaces in iframes") + bool | None, Field(description='Supports MCP Apps for rendering A2UI surfaces in iframes') ] = False modalities: Annotated[ - Modalities | None, Field(description="Interaction modalities supported") + Modalities | None, Field(description='Interaction modalities supported') ] = None diff --git a/src/adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py b/src/adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py index ea551a3a..d2c010c9 100644 --- a/src/adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py +++ b/src/adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: sponsored_intelligence/si_get_offering_request.json -# timestamp: 2026-02-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,7 +14,7 @@ class SiGetOfferingRequest(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: Annotated[ str | None, @@ -24,11 +24,11 @@ class SiGetOfferingRequest(AdCPBaseModel): ] = None ext: ext_1.ExtensionObject | None = None include_products: Annotated[ - bool | None, Field(description="Whether to include matching products in the response") + bool | None, Field(description='Whether to include matching products in the response') ] = False offering_id: Annotated[ - str, Field(description="Offering identifier from the catalog to get details for") + str, Field(description='Offering identifier from the catalog to get details for') ] product_limit: Annotated[ - int | None, Field(description="Maximum number of matching products to return", ge=1, le=50) + int | None, Field(description='Maximum number of matching products to return', ge=1, le=50) ] = 5 diff --git a/src/adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py b/src/adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py index f423142a..aaaf2e00 100644 --- a/src/adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py +++ b/src/adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: sponsored_intelligence/si_get_offering_response.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,7 +15,7 @@ class MatchingProduct(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) availability_summary: Annotated[ str | None, @@ -23,55 +23,55 @@ class MatchingProduct(AdCPBaseModel): description="Brief availability info (e.g., 'In stock', 'Size 14 available', '3 left')" ), ] = None - image_url: Annotated[AnyUrl | None, Field(description="Product image")] = None - name: Annotated[str, Field(description="Product name")] - original_price: Annotated[str | None, Field(description="Original price if on sale")] = None + image_url: Annotated[AnyUrl | None, Field(description='Product image')] = None + name: Annotated[str, Field(description='Product name')] + original_price: Annotated[str | None, Field(description='Original price if on sale')] = None price: Annotated[str | None, Field(description="Display price (e.g., '$129', '$89.99')")] = None - product_id: Annotated[str, Field(description="Product identifier")] - url: Annotated[AnyUrl | None, Field(description="Product detail page URL")] = None + product_id: Annotated[str, Field(description='Product identifier')] + url: Annotated[AnyUrl | None, Field(description='Product detail page URL')] = None class Offering(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - expires_at: Annotated[AwareDatetime | None, Field(description="When this offering expires")] = ( + expires_at: Annotated[AwareDatetime | None, Field(description='When this offering expires')] = ( None ) - image_url: Annotated[AnyUrl | None, Field(description="Hero image for the offering")] = None - landing_url: Annotated[AnyUrl | None, Field(description="Landing page URL")] = None - offering_id: Annotated[str | None, Field(description="Offering identifier")] = None + image_url: Annotated[AnyUrl | None, Field(description='Hero image for the offering')] = None + landing_url: Annotated[AnyUrl | None, Field(description='Landing page URL')] = None + offering_id: Annotated[str | None, Field(description='Offering identifier')] = None price_hint: Annotated[ str | None, Field(description="Price indication (e.g., 'from $199', '50% off')") ] = None - summary: Annotated[str | None, Field(description="Brief summary of the offering")] = None - tagline: Annotated[str | None, Field(description="Short promotional tagline")] = None - title: Annotated[str | None, Field(description="Offering title")] = None + summary: Annotated[str | None, Field(description='Brief summary of the offering')] = None + tagline: Annotated[str | None, Field(description='Short promotional tagline')] = None + title: Annotated[str | None, Field(description='Offering title')] = None class SiGetOfferingResponse(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) alternative_offering_ids: Annotated[ list[str] | None, - Field(description="Alternative offerings to consider if this one is unavailable"), + Field(description='Alternative offerings to consider if this one is unavailable'), ] = None - available: Annotated[bool, Field(description="Whether the offering is currently available")] + available: Annotated[bool, Field(description='Whether the offering is currently available')] checked_at: Annotated[ - AwareDatetime | None, Field(description="When this offering information was retrieved") + AwareDatetime | None, Field(description='When this offering information was retrieved') ] = None errors: Annotated[ - list[error.Error] | None, Field(description="Errors during offering lookup") + list[error.Error] | None, Field(description='Errors during offering lookup') ] = None ext: ext_1.ExtensionObject | None = None matching_products: Annotated[ list[MatchingProduct] | None, Field( - description="Products matching the request context. Only included if include_products was true." + description='Products matching the request context. Only included if include_products was true.' ), ] = None - offering: Annotated[Offering | None, Field(description="Offering details")] = None + offering: Annotated[Offering | None, Field(description='Offering details')] = None offering_token: Annotated[ str | None, Field( @@ -81,14 +81,14 @@ class SiGetOfferingResponse(AdCPBaseModel): total_matching: Annotated[ int | None, Field( - description="Total number of products matching the context (may be more than returned in matching_products)", + description='Total number of products matching the context (may be more than returned in matching_products)', ge=0, ), ] = None ttl_seconds: Annotated[ int | None, Field( - description="How long this offering information is valid (seconds). Host should re-fetch after TTL expires.", + description='How long this offering information is valid (seconds). Host should re-fetch after TTL expires.', ge=0, ), ] = None diff --git a/src/adcp/types/generated_poc/sponsored_intelligence/si_identity.py b/src/adcp/types/generated_poc/sponsored_intelligence/si_identity.py index cc954625..4eca639b 100644 --- a/src/adcp/types/generated_poc/sponsored_intelligence/si_identity.py +++ b/src/adcp/types/generated_poc/sponsored_intelligence/si_identity.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: sponsored_intelligence/si_identity.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,28 +12,28 @@ class ConsentScopeEnum(Enum): - name = "name" - email = "email" - shipping_address = "shipping_address" - phone = "phone" - locale = "locale" + name = 'name' + email = 'email' + shipping_address = 'shipping_address' + phone = 'phone' + locale = 'locale' class PrivacyPolicyAcknowledged(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) brand_policy_url: Annotated[ AnyUrl | None, Field(description="URL to brand's privacy policy") ] = None brand_policy_version: Annotated[ - str | None, Field(description="Version of policy acknowledged") + str | None, Field(description='Version of policy acknowledged') ] = None class ShippingAddress(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) city: str | None = None country: str | None = None @@ -44,7 +44,7 @@ class ShippingAddress(AdCPBaseModel): class User(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) email: Annotated[EmailStr | None, Field(description="User's email address")] = None locale: Annotated[str | None, Field(description="User's locale (e.g., en-US)")] = None @@ -57,22 +57,22 @@ class User(AdCPBaseModel): class SiIdentity(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) anonymous_session_id: Annotated[ str | None, - Field(description="Session ID for anonymous users (when consent_granted is false)"), + Field(description='Session ID for anonymous users (when consent_granted is false)'), ] = None - consent_granted: Annotated[bool, Field(description="Whether user consented to share identity")] + consent_granted: Annotated[bool, Field(description='Whether user consented to share identity')] consent_scope: Annotated[ - list[ConsentScopeEnum] | None, Field(description="What data was consented to share") + list[ConsentScopeEnum] | None, Field(description='What data was consented to share') ] = None consent_timestamp: Annotated[ - AwareDatetime | None, Field(description="When consent was granted (ISO 8601)") + AwareDatetime | None, Field(description='When consent was granted (ISO 8601)') ] = None privacy_policy_acknowledged: Annotated[ - PrivacyPolicyAcknowledged | None, Field(description="Brand privacy policy acknowledgment") + PrivacyPolicyAcknowledged | None, Field(description='Brand privacy policy acknowledgment') ] = None user: Annotated[ - User | None, Field(description="User data (only present if consent_granted is true)") + User | None, Field(description='User data (only present if consent_granted is true)') ] = None diff --git a/src/adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py b/src/adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py index 4eb75a31..fd4f8ead 100644 --- a/src/adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py +++ b/src/adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: sponsored_intelligence/si_initiate_session_request.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -15,18 +15,18 @@ class SiInitiateSessionRequest(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context: Annotated[ - str, Field(description="Conversation handoff from the host describing what the user needs") + str, Field(description='Conversation handoff from the host describing what the user needs') ] ext: ext_1.ExtensionObject | None = None identity: si_identity.SiIdentity media_buy_id: Annotated[ - str | None, Field(description="AdCP media buy ID if session was triggered by advertising") + str | None, Field(description='AdCP media buy ID if session was triggered by advertising') ] = None offering_id: Annotated[ - str | None, Field(description="Brand-specific offering identifier to apply") + str | None, Field(description='Brand-specific offering identifier to apply') ] = None offering_token: Annotated[ str | None, @@ -42,5 +42,5 @@ class SiInitiateSessionRequest(AdCPBaseModel): ] = None supported_capabilities: Annotated[ si_capabilities.SiCapabilities | None, - Field(description="What capabilities the host supports"), + Field(description='What capabilities the host supports'), ] = None diff --git a/src/adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py b/src/adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py index 6ef16fc3..a0693dbb 100644 --- a/src/adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py +++ b/src/adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: sponsored_intelligence/si_initiate_session_response.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,29 +16,29 @@ class Response(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - message: Annotated[str | None, Field(description="Conversational message from brand agent")] = ( + message: Annotated[str | None, Field(description='Conversational message from brand agent')] = ( None ) ui_elements: Annotated[ - list[si_ui_element.SiUiElement] | None, Field(description="Visual components to render") + list[si_ui_element.SiUiElement] | None, Field(description='Visual components to render') ] = None class SiInitiateSessionResponse(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) errors: Annotated[ - list[error.Error] | None, Field(description="Errors during session initiation") + list[error.Error] | None, Field(description='Errors during session initiation') ] = None ext: ext_1.ExtensionObject | None = None negotiated_capabilities: Annotated[ si_capabilities.SiCapabilities | None, - Field(description="Intersection of brand and host capabilities for this session"), + Field(description='Intersection of brand and host capabilities for this session'), ] = None response: Annotated[Response | None, Field(description="Brand agent's initial response")] = None session_id: Annotated[ - str, Field(description="Unique session identifier for subsequent messages") + str, Field(description='Unique session identifier for subsequent messages') ] diff --git a/src/adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py b/src/adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py index 50d9ea46..0b5a5c5e 100644 --- a/src/adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py +++ b/src/adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: sponsored_intelligence/si_send_message_request.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,45 +14,45 @@ class ActionResponse(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - action: Annotated[str | None, Field(description="The action that was triggered")] = None + action: Annotated[str | None, Field(description='The action that was triggered')] = None payload: Annotated[ - dict[str, Any] | None, Field(description="Action-specific response data") + dict[str, Any] | None, Field(description='Action-specific response data') ] = None class SiSendMessageRequest1(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) action_response: Annotated[ ActionResponse | None, - Field(description="Response to a previous action_button (e.g., user clicked checkout)"), + Field(description='Response to a previous action_button (e.g., user clicked checkout)'), ] = None ext: ext_1.ExtensionObject | None = None message: Annotated[str, Field(description="User's message to the brand agent")] - session_id: Annotated[str, Field(description="Active session identifier")] + session_id: Annotated[str, Field(description='Active session identifier')] class SiSendMessageRequest2(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) action_response: Annotated[ ActionResponse, - Field(description="Response to a previous action_button (e.g., user clicked checkout)"), + Field(description='Response to a previous action_button (e.g., user clicked checkout)'), ] ext: ext_1.ExtensionObject | None = None message: Annotated[str | None, Field(description="User's message to the brand agent")] = None - session_id: Annotated[str, Field(description="Active session identifier")] + session_id: Annotated[str, Field(description='Active session identifier')] class SiSendMessageRequest(RootModel[SiSendMessageRequest1 | SiSendMessageRequest2]): root: Annotated[ SiSendMessageRequest1 | SiSendMessageRequest2, Field( - description="Send a message to the brand agent within an active session", - title="SI Send Message Request", + description='Send a message to the brand agent within an active session', + title='SI Send Message Request', ), ] diff --git a/src/adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py b/src/adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py index 0dc20c98..364b734f 100644 --- a/src/adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py +++ b/src/adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: sponsored_intelligence/si_send_message_response.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -18,13 +18,13 @@ class ContextForCheckout(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) applied_offers: Annotated[ - list[str] | None, Field(description="Offer IDs that were applied during the conversation") + list[str] | None, Field(description='Offer IDs that were applied during the conversation') ] = None conversation_summary: Annotated[ - str | None, Field(description="Summary of the conversation leading to purchase") + str | None, Field(description='Summary of the conversation leading to purchase') ] = None @@ -35,81 +35,81 @@ class Price(AdCPBaseModel): class Intent(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) action: Annotated[str | None, Field(description="The commerce action (e.g., 'purchase')")] = ( None ) - price: Annotated[Price | None, Field(description="Price information")] = None - product: Annotated[dict[str, Any] | None, Field(description="Product details for checkout")] = ( + price: Annotated[Price | None, Field(description='Price information')] = None + product: Annotated[dict[str, Any] | None, Field(description='Product details for checkout')] = ( None ) class Type(Enum): - transaction = "transaction" - complete = "complete" + transaction = 'transaction' + complete = 'complete' class Handoff(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) context_for_checkout: Annotated[ - ContextForCheckout | None, Field(description="Context to pass to ACP for seamless checkout") + ContextForCheckout | None, Field(description='Context to pass to ACP for seamless checkout') ] = None intent: Annotated[ Intent | None, - Field(description="For transaction handoffs: what the user wants to purchase"), + Field(description='For transaction handoffs: what the user wants to purchase'), ] = None type: Annotated[ Type | None, Field( - description="Type of handoff: transaction (ready for ACP checkout) or complete (conversation done)" + description='Type of handoff: transaction (ready for ACP checkout) or complete (conversation done)' ), ] = None class SessionStatus(Enum): - active = "active" - pending_handoff = "pending_handoff" - complete = "complete" + active = 'active' + pending_handoff = 'pending_handoff' + complete = 'complete' class Response(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - message: Annotated[str | None, Field(description="Conversational message from brand agent")] = ( + message: Annotated[str | None, Field(description='Conversational message from brand agent')] = ( None ) surface: Annotated[ - surface_1.A2UiSurface | None, Field(description="A2UI surface with interactive components") + surface_1.A2UiSurface | None, Field(description='A2UI surface with interactive components') ] = None ui_elements: Annotated[ list[si_ui_element.SiUiElement] | None, Field( deprecated=True, - description="Visual components to render (DEPRECATED: use surface instead)", + description='Visual components to render (DEPRECATED: use surface instead)', ), ] = None class SiSendMessageResponse(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) errors: list[error.Error] | None = None ext: ext_1.ExtensionObject | None = None handoff: Annotated[ - Handoff | None, Field(description="Handoff request when session_status is pending_handoff") + Handoff | None, Field(description='Handoff request when session_status is pending_handoff') ] = None mcp_resource_uri: Annotated[ str | None, Field( - description="MCP resource URI for hosts with MCP Apps support (e.g., ui://si/session-abc123)" + description='MCP resource URI for hosts with MCP Apps support (e.g., ui://si/session-abc123)' ), ] = None response: Annotated[Response | None, Field(description="Brand agent's response")] = None - session_id: Annotated[str, Field(description="Session identifier")] - session_status: Annotated[SessionStatus, Field(description="Current session status")] + session_id: Annotated[str, Field(description='Session identifier')] + session_status: Annotated[SessionStatus, Field(description='Current session status')] diff --git a/src/adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py b/src/adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py index 6f34cbce..f7808b1b 100644 --- a/src/adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py +++ b/src/adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: sponsored_intelligence/si_terminate_session_request.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -14,47 +14,47 @@ class Reason(Enum): - handoff_transaction = "handoff_transaction" - handoff_complete = "handoff_complete" - user_exit = "user_exit" - session_timeout = "session_timeout" - host_terminated = "host_terminated" + handoff_transaction = 'handoff_transaction' + handoff_complete = 'handoff_complete' + user_exit = 'user_exit' + session_timeout = 'session_timeout' + host_terminated = 'host_terminated' class Action(Enum): - purchase = "purchase" - subscribe = "subscribe" + purchase = 'purchase' + subscribe = 'subscribe' class TransactionIntent(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) action: Action | None = None - product: Annotated[dict[str, Any] | None, Field(description="Product/service details")] = None + product: Annotated[dict[str, Any] | None, Field(description='Product/service details')] = None class TerminationContext(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) cause: Annotated[ - str | None, Field(description="For host_terminated - why host ended session") + str | None, Field(description='For host_terminated - why host ended session') ] = None - summary: Annotated[str | None, Field(description="Summary of the conversation")] = None + summary: Annotated[str | None, Field(description='Summary of the conversation')] = None transaction_intent: Annotated[ TransactionIntent | None, - Field(description="For handoff_transaction - what user wants to buy"), + Field(description='For handoff_transaction - what user wants to buy'), ] = None class SiTerminateSessionRequest(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) ext: ext_1.ExtensionObject | None = None - reason: Annotated[Reason, Field(description="Reason for termination")] - session_id: Annotated[str, Field(description="Session identifier to terminate")] + reason: Annotated[Reason, Field(description='Reason for termination')] + session_id: Annotated[str, Field(description='Session identifier to terminate')] termination_context: Annotated[ - TerminationContext | None, Field(description="Context for the termination") + TerminationContext | None, Field(description='Context for the termination') ] = None diff --git a/src/adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py b/src/adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py index ff865474..339cb72e 100644 --- a/src/adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py +++ b/src/adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: sponsored_intelligence/si_terminate_session_response.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -16,39 +16,39 @@ class AcpHandoff(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - checkout_token: Annotated[str | None, Field(description="Token for ACP checkout flow")] = None - checkout_url: Annotated[AnyUrl | None, Field(description="ACP checkout initiation URL")] = None - product: Annotated[dict[str, Any] | None, Field(description="Product details for checkout")] = ( + checkout_token: Annotated[str | None, Field(description='Token for ACP checkout flow')] = None + checkout_url: Annotated[AnyUrl | None, Field(description='ACP checkout initiation URL')] = None + product: Annotated[dict[str, Any] | None, Field(description='Product details for checkout')] = ( None ) class Action(Enum): - save_for_later = "save_for_later" - set_reminder = "set_reminder" - subscribe_updates = "subscribe_updates" - none = "none" + save_for_later = 'save_for_later' + set_reminder = 'set_reminder' + subscribe_updates = 'subscribe_updates' + none = 'none' class FollowUp(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) action: Action | None = None - data: Annotated[dict[str, Any] | None, Field(description="Data for follow-up action")] = None + data: Annotated[dict[str, Any] | None, Field(description='Data for follow-up action')] = None class SiTerminateSessionResponse(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) acp_handoff: Annotated[ - AcpHandoff | None, Field(description="ACP checkout handoff data (for handoff_transaction)") + AcpHandoff | None, Field(description='ACP checkout handoff data (for handoff_transaction)') ] = None errors: list[error.Error] | None = None ext: ext_1.ExtensionObject | None = None - follow_up: Annotated[FollowUp | None, Field(description="Suggested follow-up actions")] = None - session_id: Annotated[str, Field(description="Terminated session identifier")] - terminated: Annotated[bool, Field(description="Whether session was successfully terminated")] + follow_up: Annotated[FollowUp | None, Field(description='Suggested follow-up actions')] = None + session_id: Annotated[str, Field(description='Terminated session identifier')] + terminated: Annotated[bool, Field(description='Whether session was successfully terminated')] diff --git a/src/adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py b/src/adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py index 82a9b1a3..b7d06b09 100644 --- a/src/adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py +++ b/src/adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: sponsored_intelligence/si_ui_element.json -# timestamp: 2026-02-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -12,19 +12,19 @@ class Type(Enum): - text = "text" - link = "link" - image = "image" - product_card = "product_card" - carousel = "carousel" - action_button = "action_button" - app_handoff = "app_handoff" - integration_actions = "integration_actions" + text = 'text' + link = 'link' + image = 'image' + product_card = 'product_card' + carousel = 'carousel' + action_button = 'action_button' + app_handoff = 'app_handoff' + integration_actions = 'integration_actions' class SiUiElement(AdCPBaseModel): model_config = ConfigDict( - extra="allow", + extra='allow', ) - data: Annotated[dict[str, Any] | None, Field(description="Component-specific data")] = None - type: Annotated[Type, Field(description="Component type")] + data: Annotated[dict[str, Any] | None, Field(description='Component-specific data')] = None + type: Annotated[Type, Field(description='Component type')] From fd496cd4c6b7e9bd34a4c773b5dc882433377ed5 Mon Sep 17 00:00:00 2001 From: Brian O'Kelley Date: Sun, 22 Feb 2026 21:02:09 -0500 Subject: [PATCH 4/5] fix: exclude private collision aliases from _generated.py __all__, verify adapter params in tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Filter out underscore-prefixed names from _generated.py __all__ so internal collision aliases (_PackageFromPackage, _DeliveryStatusFrom*) don't appear in public exports or IDE autocomplete - Add adapter call param assertions to get_media_buys tests: verify get_media_buys(account_id="acct-1") → adapter called with {"account_id": "acct-1", "include_snapshot": False}, and get_media_buys(include_snapshot=True) → {"include_snapshot": True} - Regenerate _generated.py Co-Authored-By: Claude Sonnet 4.6 --- scripts/consolidate_exports.py | 3 ++- src/adcp/types/_generated.py | 6 +----- tests/test_client.py | 12 +++++++++--- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/scripts/consolidate_exports.py b/scripts/consolidate_exports.py index d8aea8a9..10574f60 100644 --- a/scripts/consolidate_exports.py +++ b/scripts/consolidate_exports.py @@ -269,7 +269,8 @@ def _module_sort_key(p: Path) -> tuple[int, str]: } # Format __all__ list with proper line breaks (max 100 chars per line) - exports_list = sorted(list(all_exports_with_aliases)) + # Exclude private names (qualified collision aliases like _PackageFromPackage) + exports_list = sorted(name for name in all_exports_with_aliases if not name.startswith("_")) all_lines = ["", "# Explicit exports", "__all__ = ["] current_line = " " diff --git a/src/adcp/types/_generated.py b/src/adcp/types/_generated.py index 5fa8ff04..2fc1d4cd 100644 --- a/src/adcp/types/_generated.py +++ b/src/adcp/types/_generated.py @@ -10,7 +10,7 @@ DO NOT EDIT MANUALLY. Generated from: https://github.com/adcontextprotocol/adcp/tree/main/schemas -Generation date: 2026-02-23 01:56:40 UTC +Generation date: 2026-02-23 02:01:12 UTC """ # ruff: noqa: E501, I001 @@ -1704,10 +1704,6 @@ class AssetSelectors(_AdCPBaseModel): "WebhookAssetRequirements", "WebhookResponseType", "WebhookSecurityMethod", - "_DeliveryStatusFromGetMediaBuyDeliveryResponse", - "_DeliveryStatusFromGetMediaBuysResponse", - "_PackageFromGetMediaBuysResponse", - "_PackageFromPackage", ] diff --git a/tests/test_client.py b/tests/test_client.py index 8764db5f..1b2cd67e 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -607,8 +607,11 @@ async def test_get_media_buys_parses_response(): success=True, ) - with patch.object(client.adapter, "get_media_buys", return_value=mock_result): - result = await client.get_media_buys(GetMediaBuysRequest()) + with patch.object( + client.adapter, "get_media_buys", return_value=mock_result + ) as mock_adapter: + result = await client.get_media_buys(GetMediaBuysRequest(account_id="acct-1")) + mock_adapter.assert_called_once_with({"account_id": "acct-1", "include_snapshot": False}) assert result.success is True assert isinstance(result.data, GetMediaBuysResponse) assert len(result.data.media_buys) == 1 @@ -685,8 +688,11 @@ async def test_get_media_buys_parses_snapshot_response(): success=True, ) - with patch.object(client.adapter, "get_media_buys", return_value=mock_result): + with patch.object( + client.adapter, "get_media_buys", return_value=mock_result + ) as mock_adapter: result = await client.get_media_buys(GetMediaBuysRequest(include_snapshot=True)) + mock_adapter.assert_called_once_with({"include_snapshot": True}) assert result.success is True assert isinstance(result.data, GetMediaBuysResponse) From e86637ce495c367e67998f747ee9661d88784f78 Mon Sep 17 00:00:00 2001 From: Brian O'Kelley Date: Sun, 22 Feb 2026 21:08:15 -0500 Subject: [PATCH 5/5] fix: keep _PackageFromPackage in __all__ for mypy compatibility The previous filter excluded all private names from __all__, but aliases.py imports _PackageFromPackage from _generated.py. Mypy requires that imported names appear in __all__ when they start with _. Now only exclude private names that are alias targets (internal intermediates like _PackageFromGetMediaBuysResponse), not names that external modules need to import directly. Co-Authored-By: Claude Sonnet 4.6 --- scripts/consolidate_exports.py | 11 +++++++++-- src/adcp/types/_generated.py | 4 +++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/scripts/consolidate_exports.py b/scripts/consolidate_exports.py index 10574f60..bce142ec 100644 --- a/scripts/consolidate_exports.py +++ b/scripts/consolidate_exports.py @@ -269,8 +269,15 @@ def _module_sort_key(p: Path) -> tuple[int, str]: } # Format __all__ list with proper line breaks (max 100 chars per line) - # Exclude private names (qualified collision aliases like _PackageFromPackage) - exports_list = sorted(name for name in all_exports_with_aliases if not name.startswith("_")) + # Exclude private names that are alias targets (internal intermediates only). + # Private names that external modules import (e.g., _PackageFromPackage used by aliases.py) + # must remain in __all__ so mypy allows the import. + internal_alias_targets = {v for v in aliases.values() if v.startswith("_")} + exports_list = sorted( + name + for name in all_exports_with_aliases + if not name.startswith("_") or name not in internal_alias_targets + ) all_lines = ["", "# Explicit exports", "__all__ = ["] current_line = " " diff --git a/src/adcp/types/_generated.py b/src/adcp/types/_generated.py index 2fc1d4cd..5c5eeda6 100644 --- a/src/adcp/types/_generated.py +++ b/src/adcp/types/_generated.py @@ -10,7 +10,7 @@ DO NOT EDIT MANUALLY. Generated from: https://github.com/adcontextprotocol/adcp/tree/main/schemas -Generation date: 2026-02-23 02:01:12 UTC +Generation date: 2026-02-23 02:07:11 UTC """ # ruff: noqa: E501, I001 @@ -1704,6 +1704,8 @@ class AssetSelectors(_AdCPBaseModel): "WebhookAssetRequirements", "WebhookResponseType", "WebhookSecurityMethod", + "_DeliveryStatusFromGetMediaBuyDeliveryResponse", + "_PackageFromPackage", ]