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..bce142ec 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]: @@ -69,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. @@ -186,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()) @@ -256,7 +269,15 @@ 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 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/__init__.py b/src/adcp/__init__.py index 19649f73..f2cff402 100644 --- a/src/adcp/__init__.py +++ b/src/adcp/__init__.py @@ -87,10 +87,12 @@ CreateMediaBuyRequest, CreateMediaBuyResponse, Creative, + CreativeApproval, CreativeFilters, CreativeManifest, # Status enums (for control flow) CreativeStatus, + DeliveryStatus, # Common data types Error, FeedFormat, @@ -104,6 +106,8 @@ GetCreativeDeliveryResponse, GetMediaBuyDeliveryRequest, GetMediaBuyDeliveryResponse, + GetMediaBuysRequest, + GetMediaBuysResponse, GetProductsRequest, GetProductsResponse, GetSignalsRequest, @@ -121,6 +125,7 @@ LogEventResponse, McpWebhookPayload, MediaBuy, + MediaBuyPackage, MediaBuyStatus, OfferingAssetConstraint, OfferingAssetGroup, @@ -142,6 +147,8 @@ PushNotificationConfig, SignalCatalogType, SignalFilters, + Snapshot, + SnapshotUnavailableReason, SyncAccountsRequest, SyncAccountsResponse, SyncCatalogsInputRequired, @@ -319,6 +326,8 @@ def get_adcp_version() -> str: "GetCreativeDeliveryResponse", "GetMediaBuyDeliveryRequest", "GetMediaBuyDeliveryResponse", + "GetMediaBuysRequest", + "GetMediaBuysResponse", "GetProductsRequest", "GetProductsResponse", "UpdateMediaBuyRequest", @@ -383,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/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..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, @@ -146,6 +148,8 @@ GetMediaBuyArtifactsResponse, GetMediaBuyDeliveryRequest, GetMediaBuyDeliveryResponse, + GetMediaBuysRequest, + GetMediaBuysResponse, GetProductsRequest, GetProductsResponse, GetPropertyListRequest, @@ -179,6 +183,7 @@ MeasurementPeriod, MediaBuy, MediaBuyDelivery, + MediaBuyPackage, MediaBuyStatus, Metadata, MetricType, @@ -252,6 +257,8 @@ SiTerminateSessionRequest, SiTerminateSessionResponse, SiUiElement, + Snapshot, + SnapshotUnavailableReason, Sort, SortApplied, SortDirection, @@ -431,6 +438,8 @@ "DailyBreakdownItem", "GetMediaBuyDeliveryRequest", "GetMediaBuyDeliveryResponse", + "GetMediaBuysRequest", + "GetMediaBuysResponse", "GetProductsRequest", "GetProductsResponse", "GetSignalsRequest", @@ -550,6 +559,7 @@ "Contact", "Creative", "CreativeAgent", + "CreativeApproval", "CreativeAsset", "CreativeAssignment", "CreativeFilters", @@ -557,6 +567,7 @@ "CreativePolicy", "DeliveryMeasurement", "DeliveryMetrics", + "DeliveryStatus", "Disclaimer", "DoohMetrics", "Error", @@ -572,6 +583,7 @@ "LandingPageRequirement", "Logo", "MediaBuy", + "MediaBuyPackage", "Metadata", "Offering", "Package", @@ -600,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 ecc44972..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-22 01:23:46 UTC +Generation date: 2026-02-23 02:07:11 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, @@ -627,11 +637,17 @@ ByCreativeItem, ByPackageItem, DailyBreakdownItem, - DeliveryStatus, GetMediaBuyDeliveryResponse, 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 +830,7 @@ from adcp.types.generated_poc.protocol.get_adcp_capabilities_response import ( Adcp, AudienceTargeting, + CreativeFeature, CreativeSpecs, DataProviderDomain, DefaultBilling, @@ -913,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 @@ -1151,10 +1181,14 @@ class AssetSelectors(_AdCPBaseModel): "CreativeAction", "CreativeAgent", "CreativeAgentCapability", + "CreativeApproval", + "CreativeApprovalStatus", "CreativeAsset", "CreativeAssignment", "CreativeBrief", "CreativeBriefReference", + "CreativeFeature", + "CreativeFeatureResult", "CreativeFilters", "CreativeManifest", "CreativePolicy", @@ -1276,12 +1310,18 @@ class AssetSelectors(_AdCPBaseModel): "GetCreativeDeliveryRequest2", "GetCreativeDeliveryRequest3", "GetCreativeDeliveryResponse", + "GetCreativeFeaturesRequest", + "GetCreativeFeaturesResponse", + "GetCreativeFeaturesResponse1", + "GetCreativeFeaturesResponse2", "GetMediaBuyArtifactsRequest", "GetMediaBuyArtifactsResponse", "GetMediaBuyArtifactsResponse1", "GetMediaBuyArtifactsResponse2", "GetMediaBuyDeliveryRequest", "GetMediaBuyDeliveryResponse", + "GetMediaBuysRequest", + "GetMediaBuysResponse", "GetProductsInputRequired", "GetProductsRequest", "GetProductsResponse", @@ -1359,6 +1399,7 @@ class AssetSelectors(_AdCPBaseModel): "MediaBuy", "MediaBuyDelivery", "MediaBuyFeatures", + "MediaBuyPackage", "MediaBuyStatus", "MediaChannel", "Messaging", @@ -1530,6 +1571,8 @@ class AssetSelectors(_AdCPBaseModel): "SignalTargeting3", "SignalValueType", "Signals", + "Snapshot", + "SnapshotUnavailableReason", "SnippetType", "Sort", "SortApplied", @@ -1661,6 +1704,7 @@ class AssetSelectors(_AdCPBaseModel): "WebhookAssetRequirements", "WebhookResponseType", "WebhookSecurityMethod", + "_DeliveryStatusFromGetMediaBuyDeliveryResponse", "_PackageFromPackage", ] diff --git a/src/adcp/types/generated_poc/a2ui/component.py b/src/adcp/types/generated_poc/a2ui/component.py index b9d005ca..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 diff --git a/src/adcp/types/generated_poc/a2ui/surface.py b/src/adcp/types/generated_poc/a2ui/surface.py index be877e20..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 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..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 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..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 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..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 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..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 diff --git a/src/adcp/types/generated_poc/adagents.py b/src/adcp/types/generated_poc/adagents.py index 1eb94f89..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 diff --git a/src/adcp/types/generated_poc/brand.py b/src/adcp/types/generated_poc/brand.py index 2f47b09e..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 diff --git a/src/adcp/types/generated_poc/content_standards/artifact.py b/src/adcp/types/generated_poc/content_standards/artifact.py index 83af9aee..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 diff --git a/src/adcp/types/generated_poc/core/account.py b/src/adcp/types/generated_poc/core/account.py index 3c9ba729..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 diff --git a/src/adcp/types/generated_poc/core/activation_key.py b/src/adcp/types/generated_poc/core/activation_key.py index e80f122f..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 diff --git a/src/adcp/types/generated_poc/core/attribution_window.py b/src/adcp/types/generated_poc/core/attribution_window.py index fe11e9f4..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 diff --git a/src/adcp/types/generated_poc/core/audience_member.py b/src/adcp/types/generated_poc/core/audience_member.py index f885e912..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 diff --git a/src/adcp/types/generated_poc/core/brand_id.py b/src/adcp/types/generated_poc/core/brand_id.py index 6d626950..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 diff --git a/src/adcp/types/generated_poc/core/brand_ref.py b/src/adcp/types/generated_poc/core/brand_ref.py index 1375fd6c..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 diff --git a/src/adcp/types/generated_poc/core/catalog.py b/src/adcp/types/generated_poc/core/catalog.py index 943e67b0..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-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -72,7 +72,7 @@ class Catalog(AdCPBaseModel): 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 @@ -98,7 +98,7 @@ class Catalog(AdCPBaseModel): 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[ diff --git a/src/adcp/types/generated_poc/core/catchment.py b/src/adcp/types/generated_poc/core/catchment.py index 6cd9cb84..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 diff --git a/src/adcp/types/generated_poc/core/context.py b/src/adcp/types/generated_poc/core/context.py index ffd6f70d..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 diff --git a/src/adcp/types/generated_poc/core/creative_asset.py b/src/adcp/types/generated_poc/core/creative_asset.py index 0ad189ff..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 diff --git a/src/adcp/types/generated_poc/core/creative_assignment.py b/src/adcp/types/generated_poc/core/creative_assignment.py index e5868c31..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 diff --git a/src/adcp/types/generated_poc/core/creative_brief.py b/src/adcp/types/generated_poc/core/creative_brief.py index 9d2c7e67..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 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..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 diff --git a/src/adcp/types/generated_poc/core/creative_filters.py b/src/adcp/types/generated_poc/core/creative_filters.py index a6d5895c..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 diff --git a/src/adcp/types/generated_poc/core/creative_manifest.py b/src/adcp/types/generated_poc/core/creative_manifest.py index 2fb796ad..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 diff --git a/src/adcp/types/generated_poc/core/creative_policy.py b/src/adcp/types/generated_poc/core/creative_policy.py index c19db80e..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 diff --git a/src/adcp/types/generated_poc/core/creative_variant.py b/src/adcp/types/generated_poc/core/creative_variant.py index 324298cb..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 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..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 diff --git a/src/adcp/types/generated_poc/core/daypart_target.py b/src/adcp/types/generated_poc/core/daypart_target.py index c65b6550..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 diff --git a/src/adcp/types/generated_poc/core/delivery_forecast.py b/src/adcp/types/generated_poc/core/delivery_forecast.py index 3a4ac868..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 diff --git a/src/adcp/types/generated_poc/core/delivery_metrics.py b/src/adcp/types/generated_poc/core/delivery_metrics.py index 8fc7a7cc..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 diff --git a/src/adcp/types/generated_poc/core/deployment.py b/src/adcp/types/generated_poc/core/deployment.py index efd38f74..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 diff --git a/src/adcp/types/generated_poc/core/destination.py b/src/adcp/types/generated_poc/core/destination.py index 033ba74c..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 diff --git a/src/adcp/types/generated_poc/core/destination_item.py b/src/adcp/types/generated_poc/core/destination_item.py index eb74ee2e..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 diff --git a/src/adcp/types/generated_poc/core/education_item.py b/src/adcp/types/generated_poc/core/education_item.py index 5ab9a86f..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 diff --git a/src/adcp/types/generated_poc/core/error.py b/src/adcp/types/generated_poc/core/error.py index e334c657..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 diff --git a/src/adcp/types/generated_poc/core/event.py b/src/adcp/types/generated_poc/core/event.py index e6c3eeab..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 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..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 diff --git a/src/adcp/types/generated_poc/core/ext.py b/src/adcp/types/generated_poc/core/ext.py index ad546022..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 diff --git a/src/adcp/types/generated_poc/core/flight_item.py b/src/adcp/types/generated_poc/core/flight_item.py index b0cb2f42..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 diff --git a/src/adcp/types/generated_poc/core/forecast_point.py b/src/adcp/types/generated_poc/core/forecast_point.py index 8d612ebc..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 diff --git a/src/adcp/types/generated_poc/core/forecast_range.py b/src/adcp/types/generated_poc/core/forecast_range.py index 574eb8b8..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 diff --git a/src/adcp/types/generated_poc/core/format.py b/src/adcp/types/generated_poc/core/format.py index a37ecfb2..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 diff --git a/src/adcp/types/generated_poc/core/format_id.py b/src/adcp/types/generated_poc/core/format_id.py index 9bec5b15..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 diff --git a/src/adcp/types/generated_poc/core/frequency_cap.py b/src/adcp/types/generated_poc/core/frequency_cap.py index 49a8c8ea..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 diff --git a/src/adcp/types/generated_poc/core/hotel_item.py b/src/adcp/types/generated_poc/core/hotel_item.py index 207bb970..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 diff --git a/src/adcp/types/generated_poc/core/identifier.py b/src/adcp/types/generated_poc/core/identifier.py index 886c4c8e..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 diff --git a/src/adcp/types/generated_poc/core/job_item.py b/src/adcp/types/generated_poc/core/job_item.py index 38dbbdbe..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 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..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 diff --git a/src/adcp/types/generated_poc/core/measurement.py b/src/adcp/types/generated_poc/core/measurement.py index 8785c8d6..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 diff --git a/src/adcp/types/generated_poc/core/media_buy.py b/src/adcp/types/generated_poc/core/media_buy.py index 19b3a03e..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-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -22,15 +22,15 @@ class MediaBuy(AdCPBaseModel): account: Annotated[ 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 + 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') 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..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 diff --git a/src/adcp/types/generated_poc/core/offering.py b/src/adcp/types/generated_poc/core/offering.py index 5957e79a..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 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..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 diff --git a/src/adcp/types/generated_poc/core/optimization_goal.py b/src/adcp/types/generated_poc/core/optimization_goal.py index 0fd5f867..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 diff --git a/src/adcp/types/generated_poc/core/package.py b/src/adcp/types/generated_poc/core/package.py index eaa85a18..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-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -24,7 +24,7 @@ class Package(AdCPBaseModel): 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 diff --git a/src/adcp/types/generated_poc/core/pagination_request.py b/src/adcp/types/generated_poc/core/pagination_request.py index 73ad1870..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 diff --git a/src/adcp/types/generated_poc/core/pagination_response.py b/src/adcp/types/generated_poc/core/pagination_response.py index e3050df7..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 diff --git a/src/adcp/types/generated_poc/core/performance_feedback.py b/src/adcp/types/generated_poc/core/performance_feedback.py index 3aea3ed6..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 diff --git a/src/adcp/types/generated_poc/core/placement.py b/src/adcp/types/generated_poc/core/placement.py index bbe73772..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 diff --git a/src/adcp/types/generated_poc/core/price.py b/src/adcp/types/generated_poc/core/price.py index 0a89f3e5..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 diff --git a/src/adcp/types/generated_poc/core/pricing_option.py b/src/adcp/types/generated_poc/core/pricing_option.py index 3925a9f5..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-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+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).", + 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..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 diff --git a/src/adcp/types/generated_poc/core/product_allocation.py b/src/adcp/types/generated_poc/core/product_allocation.py index d700d827..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 diff --git a/src/adcp/types/generated_poc/core/product_filters.py b/src/adcp/types/generated_poc/core/product_filters.py index 9de09c72..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 diff --git a/src/adcp/types/generated_poc/core/property.py b/src/adcp/types/generated_poc/core/property.py index 6c1f7ebc..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 diff --git a/src/adcp/types/generated_poc/core/property_id.py b/src/adcp/types/generated_poc/core/property_id.py index 436323ba..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 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..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 diff --git a/src/adcp/types/generated_poc/core/property_tag.py b/src/adcp/types/generated_poc/core/property_tag.py index 3c881c40..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 diff --git a/src/adcp/types/generated_poc/core/proposal.py b/src/adcp/types/generated_poc/core/proposal.py index 08e67d72..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 diff --git a/src/adcp/types/generated_poc/core/protocol_envelope.py b/src/adcp/types/generated_poc/core/protocol_envelope.py index 82f2d23d..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 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..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 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..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 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..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 diff --git a/src/adcp/types/generated_poc/core/reference_asset.py b/src/adcp/types/generated_poc/core/reference_asset.py index 37cd8651..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 diff --git a/src/adcp/types/generated_poc/core/reporting_capabilities.py b/src/adcp/types/generated_poc/core/reporting_capabilities.py index 353d4c24..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 diff --git a/src/adcp/types/generated_poc/core/reporting_webhook.py b/src/adcp/types/generated_poc/core/reporting_webhook.py index 135190db..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 diff --git a/src/adcp/types/generated_poc/core/response.py b/src/adcp/types/generated_poc/core/response.py index 0be58290..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 diff --git a/src/adcp/types/generated_poc/core/signal_definition.py b/src/adcp/types/generated_poc/core/signal_definition.py index 6a13203d..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 diff --git a/src/adcp/types/generated_poc/core/signal_filters.py b/src/adcp/types/generated_poc/core/signal_filters.py index e1fd7ef9..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 diff --git a/src/adcp/types/generated_poc/core/signal_id.py b/src/adcp/types/generated_poc/core/signal_id.py index 5d4c5b35..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 diff --git a/src/adcp/types/generated_poc/core/signal_targeting.py b/src/adcp/types/generated_poc/core/signal_targeting.py index e15358a7..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 diff --git a/src/adcp/types/generated_poc/core/start_timing.py b/src/adcp/types/generated_poc/core/start_timing.py index ceffd646..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 diff --git a/src/adcp/types/generated_poc/core/store_item.py b/src/adcp/types/generated_poc/core/store_item.py index 824e24e4..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 diff --git a/src/adcp/types/generated_poc/core/sub_asset.py b/src/adcp/types/generated_poc/core/sub_asset.py index 157a133a..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 diff --git a/src/adcp/types/generated_poc/core/targeting.py b/src/adcp/types/generated_poc/core/targeting.py index 4235b3c7..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 diff --git a/src/adcp/types/generated_poc/core/user_match.py b/src/adcp/types/generated_poc/core/user_match.py index a30e9364..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 diff --git a/src/adcp/types/generated_poc/core/vehicle_item.py b/src/adcp/types/generated_poc/core/vehicle_item.py index 758dabac..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 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..2520823a --- /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:56:40+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..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 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..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 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..16ff75aa --- /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:56:40+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..fb76b531 --- /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:56:40+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..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 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..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 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..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 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..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 diff --git a/src/adcp/types/generated_poc/creative/preview_render.py b/src/adcp/types/generated_poc/creative/preview_render.py index 4650e833..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 diff --git a/src/adcp/types/generated_poc/enums/action_source.py b/src/adcp/types/generated_poc/enums/action_source.py index 1ab137ca..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 diff --git a/src/adcp/types/generated_poc/enums/adcp_domain.py b/src/adcp/types/generated_poc/enums/adcp_domain.py index ca7e783f..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 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..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 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..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 diff --git a/src/adcp/types/generated_poc/enums/attribution_model.py b/src/adcp/types/generated_poc/enums/attribution_model.py index ee94979c..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 diff --git a/src/adcp/types/generated_poc/enums/auth_scheme.py b/src/adcp/types/generated_poc/enums/auth_scheme.py index 14e674bc..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 diff --git a/src/adcp/types/generated_poc/enums/available_metric.py b/src/adcp/types/generated_poc/enums/available_metric.py index dd514089..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 diff --git a/src/adcp/types/generated_poc/enums/catalog_action.py b/src/adcp/types/generated_poc/enums/catalog_action.py index 6b5bb06b..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 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..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 diff --git a/src/adcp/types/generated_poc/enums/catalog_type.py b/src/adcp/types/generated_poc/enums/catalog_type.py index 9b41ca41..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-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -20,3 +20,4 @@ class CatalogType(Enum): 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..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 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..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 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..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-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -19,3 +19,4 @@ class ContentIdType(Enum): 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..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 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..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 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..06d2a88a --- /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:56:40+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..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 diff --git a/src/adcp/types/generated_poc/enums/creative_status.py b/src/adcp/types/generated_poc/enums/creative_status.py index 60e16b8d..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 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..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 diff --git a/src/adcp/types/generated_poc/enums/daast_version.py b/src/adcp/types/generated_poc/enums/daast_version.py index b3c17eb4..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 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..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 diff --git a/src/adcp/types/generated_poc/enums/delivery_type.py b/src/adcp/types/generated_poc/enums/delivery_type.py index de0c0adc..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 diff --git a/src/adcp/types/generated_poc/enums/demographic_system.py b/src/adcp/types/generated_poc/enums/demographic_system.py index 12b47719..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 diff --git a/src/adcp/types/generated_poc/enums/device_platform.py b/src/adcp/types/generated_poc/enums/device_platform.py index 44dc3ea3..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 diff --git a/src/adcp/types/generated_poc/enums/dimension_unit.py b/src/adcp/types/generated_poc/enums/dimension_unit.py index cb86bd51..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 diff --git a/src/adcp/types/generated_poc/enums/distance_unit.py b/src/adcp/types/generated_poc/enums/distance_unit.py index 3225f029..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 diff --git a/src/adcp/types/generated_poc/enums/event_type.py b/src/adcp/types/generated_poc/enums/event_type.py index b2d9aeec..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 diff --git a/src/adcp/types/generated_poc/enums/feed_format.py b/src/adcp/types/generated_poc/enums/feed_format.py index 1f61194f..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 diff --git a/src/adcp/types/generated_poc/enums/feedback_source.py b/src/adcp/types/generated_poc/enums/feedback_source.py index e9fbebd4..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 diff --git a/src/adcp/types/generated_poc/enums/forecast_method.py b/src/adcp/types/generated_poc/enums/forecast_method.py index d80b3099..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 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..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 diff --git a/src/adcp/types/generated_poc/enums/forecastable_metric.py b/src/adcp/types/generated_poc/enums/forecastable_metric.py index adae7c36..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 diff --git a/src/adcp/types/generated_poc/enums/format_category.py b/src/adcp/types/generated_poc/enums/format_category.py index 3a5f7b70..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 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..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 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..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 diff --git a/src/adcp/types/generated_poc/enums/geo_level.py b/src/adcp/types/generated_poc/enums/geo_level.py index 663790d0..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 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..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 diff --git a/src/adcp/types/generated_poc/enums/http_method.py b/src/adcp/types/generated_poc/enums/http_method.py index faad191c..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 diff --git a/src/adcp/types/generated_poc/enums/identifier_types.py b/src/adcp/types/generated_poc/enums/identifier_types.py index 213ff9c9..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 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..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 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..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 diff --git a/src/adcp/types/generated_poc/enums/markdown_flavor.py b/src/adcp/types/generated_poc/enums/markdown_flavor.py index 03f8b387..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 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..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 diff --git a/src/adcp/types/generated_poc/enums/metric_type.py b/src/adcp/types/generated_poc/enums/metric_type.py index adda5097..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 diff --git a/src/adcp/types/generated_poc/enums/metro_system.py b/src/adcp/types/generated_poc/enums/metro_system.py index 8c4462aa..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 diff --git a/src/adcp/types/generated_poc/enums/notification_type.py b/src/adcp/types/generated_poc/enums/notification_type.py index 3d44518e..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 diff --git a/src/adcp/types/generated_poc/enums/pacing.py b/src/adcp/types/generated_poc/enums/pacing.py index 80cdb098..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 diff --git a/src/adcp/types/generated_poc/enums/postal_system.py b/src/adcp/types/generated_poc/enums/postal_system.py index e2f2647e..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 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..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 diff --git a/src/adcp/types/generated_poc/enums/pricing_model.py b/src/adcp/types/generated_poc/enums/pricing_model.py index cdbe0616..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 diff --git a/src/adcp/types/generated_poc/enums/property_type.py b/src/adcp/types/generated_poc/enums/property_type.py index 3e76614c..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 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..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 diff --git a/src/adcp/types/generated_poc/enums/reach_unit.py b/src/adcp/types/generated_poc/enums/reach_unit.py index 6adcf3a4..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 diff --git a/src/adcp/types/generated_poc/enums/reporting_frequency.py b/src/adcp/types/generated_poc/enums/reporting_frequency.py index da03b5a4..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 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..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 diff --git a/src/adcp/types/generated_poc/enums/signal_source.py b/src/adcp/types/generated_poc/enums/signal_source.py index daa7dd36..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 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..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 diff --git a/src/adcp/types/generated_poc/enums/sort_direction.py b/src/adcp/types/generated_poc/enums/sort_direction.py index 6df69e71..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 diff --git a/src/adcp/types/generated_poc/enums/task_status.py b/src/adcp/types/generated_poc/enums/task_status.py index 232c9471..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 diff --git a/src/adcp/types/generated_poc/enums/task_type.py b/src/adcp/types/generated_poc/enums/task_type.py index d8aeb915..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 diff --git a/src/adcp/types/generated_poc/enums/transport_mode.py b/src/adcp/types/generated_poc/enums/transport_mode.py index 9ee9469f..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 diff --git a/src/adcp/types/generated_poc/enums/uid_type.py b/src/adcp/types/generated_poc/enums/uid_type.py index e17e3bc8..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 diff --git a/src/adcp/types/generated_poc/enums/universal_macro.py b/src/adcp/types/generated_poc/enums/universal_macro.py index 33e0b64a..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-22T01:23:46+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -75,3 +75,4 @@ class UniversalMacro(Enum): 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..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 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..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 diff --git a/src/adcp/types/generated_poc/enums/validation_mode.py b/src/adcp/types/generated_poc/enums/validation_mode.py index 7aaf6e28..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 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..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 diff --git a/src/adcp/types/generated_poc/enums/vast_version.py b/src/adcp/types/generated_poc/enums/vast_version.py index 42f073e5..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 diff --git a/src/adcp/types/generated_poc/enums/wcag_level.py b/src/adcp/types/generated_poc/enums/wcag_level.py index 1a7149ed..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 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..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 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..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 diff --git a/src/adcp/types/generated_poc/extensions/extension_meta.py b/src/adcp/types/generated_poc/extensions/extension_meta.py index 83a23666..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 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..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 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..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 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..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 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..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 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..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 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..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-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -118,13 +118,13 @@ class CreateMediaBuyRequest(AdCPBaseModel): 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') 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..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-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -38,10 +38,10 @@ class CreateMediaBuyResponse1(AdCPBaseModel): 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') 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..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 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..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-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -104,6 +104,7 @@ class DailyBreakdownItem(AdCPBaseModel): class Status(Enum): + pending_activation = 'pending_activation' pending = 'pending' active = 'active' paused = 'paused' @@ -229,16 +230,16 @@ class MediaBuyDelivery(AdCPBaseModel): model_config = ConfigDict( 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') ] = None @@ -262,7 +263,7 @@ class MediaBuyDelivery(AdCPBaseModel): 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 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..e2f5893d --- /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:56:40+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..1d986f04 --- /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:56:40+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..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 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..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 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..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 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..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-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -35,7 +35,7 @@ class GetProductsRequest(AdCPBaseModel): brief: Annotated[ 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')." 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -25,7 +25,7 @@ class PackageRequest(AdCPBaseModel): 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 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..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-22T00:26:42+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -24,7 +24,7 @@ class PackageUpdate1(AdCPBaseModel): 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 @@ -79,7 +79,7 @@ class PackageUpdate2(AdCPBaseModel): 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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -38,6 +38,12 @@ class CpcPricingOption(AdCPBaseModel): 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( 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..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-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -38,6 +38,12 @@ class CpcvPricingOption(AdCPBaseModel): 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( 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..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-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -38,6 +38,12 @@ class CpmPricingOption(AdCPBaseModel): 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( 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..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 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..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-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -63,6 +63,12 @@ class CpvPricingOption(AdCPBaseModel): 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( 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..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 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..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 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..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 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..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-12T02:11:19+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -38,6 +38,12 @@ class VcpmPricingOption(AdCPBaseModel): 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( 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..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 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..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 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..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 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..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 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..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 diff --git a/src/adcp/types/generated_poc/property/feature_requirement.py b/src/adcp/types/generated_poc/property/feature_requirement.py index fe33bb39..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 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..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 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..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 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..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 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..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 diff --git a/src/adcp/types/generated_poc/property/property_error.py b/src/adcp/types/generated_poc/property/property_error.py index 3ca3e25c..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 diff --git a/src/adcp/types/generated_poc/property/property_feature.py b/src/adcp/types/generated_poc/property/property_feature.py index fb273ab9..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 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..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 diff --git a/src/adcp/types/generated_poc/property/property_list.py b/src/adcp/types/generated_poc/property/property_list.py index 8c9136ae..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 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..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 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..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 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..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 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..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 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..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 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..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-20T02:37:39+00:00 +# timestamp: 2026-02-23T01:56:40+00:00 from __future__ import annotations @@ -107,6 +107,36 @@ class Type(Enum): 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') @@ -138,6 +168,12 @@ 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( @@ -559,7 +595,7 @@ class GetAdcpCapabilitiesResponse(AdCPBaseModel): 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[ 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..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 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..1b2cd67e 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,160 @@ 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 + ) 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 + 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_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 + ) 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) + + 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 55240934..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: @@ -37,6 +42,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