diff --git a/docs/schema-caching-strategy.md b/docs/schema-caching-strategy.md index 5395f1f3d..2f3efc055 100644 --- a/docs/schema-caching-strategy.md +++ b/docs/schema-caching-strategy.md @@ -96,17 +96,24 @@ schemas/v1/ ### Metadata Format -Each `.meta` file stores HTTP cache headers: +Each `.meta` file stores HTTP cache headers and content hash: ```json { "etag": "W/\"68edd34b-415c\"", "last-modified": "Tue, 14 Oct 2025 04:36:27 GMT", "downloaded_at": "2025-10-14T00:43:25.613705", - "schema_ref": "/schemas/v1/core/package.json" + "schema_ref": "/schemas/v1/core/package.json", + "content_hash": "8be401d7f593296e38d5a6d84091c30cfc1ca929b4ab6d72fe275a379878598b" } ``` +**Why content_hash?** +- Weak ETags (`W/"..."`) can change even when content is identical +- Server restarts or deployments may generate new weak ETags +- Content hash (SHA-256) prevents unnecessary file updates when only ETag changed +- Reduces git noise from timestamp-only changes + ## Implementation Details ### AdCPSchemaValidator Changes @@ -129,11 +136,12 @@ def _is_cache_valid(self, cache_path: Path, max_age_hours: int = 24) -> bool: return self.offline_mode and cache_path.exists() ``` -#### 3. Conditional GET Implementation +#### 3. Conditional GET with Content Hash Verification ```python async def _download_schema(self, schema_ref: str) -> dict[str, Any]: - # Load cached ETag + # Load cached ETag and content hash cached_etag = load_etag_from_meta(schema_ref) + cached_content_hash = load_content_hash_from_meta(schema_ref) # Send conditional GET headers = {"If-None-Match": cached_etag} if cached_etag else {} @@ -143,8 +151,16 @@ async def _download_schema(self, schema_ref: str) -> dict[str, Any]: if response.status_code == 304: return load_from_cache(schema_ref) - # Save new version with ETag - save_to_cache(response.json(), response.headers["etag"]) + # Compute content hash to detect actual changes + content_hash = hashlib.sha256(json.dumps(response.json(), sort_keys=True).encode()).hexdigest() + + # Check if content actually changed (weak ETags can change without content changes) + if cached_content_hash and content_hash == cached_content_hash: + # Content identical despite new ETag - don't update files to avoid git noise + return load_from_cache(schema_ref) + + # Save new version with ETag and content hash + save_to_cache(response.json(), response.headers["etag"], content_hash) ``` ### Refresh Script Updates diff --git a/schemas/v1/_schemas_v1_core_brand-manifest-ref_json.json.meta b/schemas/v1/_schemas_v1_core_brand-manifest-ref_json.json.meta index b208f19fb..121397aa3 100644 --- a/schemas/v1/_schemas_v1_core_brand-manifest-ref_json.json.meta +++ b/schemas/v1/_schemas_v1_core_brand-manifest-ref_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-3d3\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.115387", - "schema_ref": "/schemas/v1/core/brand-manifest-ref.json" + "etag": "W/\"68ffaa97-3d3\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:14.752773", + "schema_ref": "/schemas/v1/core/brand-manifest-ref.json", + "content_hash": "8be401d7f593296e38d5a6d84091c30cfc1ca929b4ab6d72fe275a379878598b" } diff --git a/schemas/v1/_schemas_v1_core_brand-manifest_json.json.meta b/schemas/v1/_schemas_v1_core_brand-manifest_json.json.meta index 0264430dd..6c1a01af1 100644 --- a/schemas/v1/_schemas_v1_core_brand-manifest_json.json.meta +++ b/schemas/v1/_schemas_v1_core_brand-manifest_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-2cb0\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.079898", - "schema_ref": "/schemas/v1/core/brand-manifest.json" + "etag": "W/\"68ffaa97-2cb0\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:14.563623", + "schema_ref": "/schemas/v1/core/brand-manifest.json", + "content_hash": "a7d4d24cc56504e59fa6ff4554074128e5e9fa5a1ef010923424e861aae7e26c" } diff --git a/schemas/v1/_schemas_v1_core_creative-asset_json.json.meta b/schemas/v1/_schemas_v1_core_creative-asset_json.json.meta index a3326b40d..e01515e73 100644 --- a/schemas/v1/_schemas_v1_core_creative-asset_json.json.meta +++ b/schemas/v1/_schemas_v1_core_creative-asset_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-ba6\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:02.588318", - "schema_ref": "/schemas/v1/core/creative-asset.json" + "etag": "W/\"68ffaa97-ba6\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:11.831520", + "schema_ref": "/schemas/v1/core/creative-asset.json", + "content_hash": "97afd6b9fc90b1914d99ec8f07a9436fb78b7a5d95bc69cc43867d4a2ec37b54" } diff --git a/schemas/v1/_schemas_v1_core_creative-assignment_json.json.meta b/schemas/v1/_schemas_v1_core_creative-assignment_json.json.meta index 168446e6a..82c42b58e 100644 --- a/schemas/v1/_schemas_v1_core_creative-assignment_json.json.meta +++ b/schemas/v1/_schemas_v1_core_creative-assignment_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-462\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:02.940943", - "schema_ref": "/schemas/v1/core/creative-assignment.json" + "etag": "W/\"68ffaa97-462\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:13.780925", + "schema_ref": "/schemas/v1/core/creative-assignment.json", + "content_hash": "8c5d336843f646d39045fd5f66f00a7940aaa8e0a2a2982b2896c6b64cf0c17b" } diff --git a/schemas/v1/_schemas_v1_core_creative-manifest_json.json.meta b/schemas/v1/_schemas_v1_core_creative-manifest_json.json.meta index 22a74062b..594088166 100644 --- a/schemas/v1/_schemas_v1_core_creative-manifest_json.json.meta +++ b/schemas/v1/_schemas_v1_core_creative-manifest_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-a96\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:02.976446", - "schema_ref": "/schemas/v1/core/creative-manifest.json" + "etag": "W/\"68ffaa97-a96\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:13.981482", + "schema_ref": "/schemas/v1/core/creative-manifest.json", + "content_hash": "6174febc348bdf0f3494d24983a0e98410a25628206bc2b3a58a86c5a25eba31" } diff --git a/schemas/v1/_schemas_v1_core_creative-policy_json.json.meta b/schemas/v1/_schemas_v1_core_creative-policy_json.json.meta index 072acbe66..6b6ac24db 100644 --- a/schemas/v1/_schemas_v1_core_creative-policy_json.json.meta +++ b/schemas/v1/_schemas_v1_core_creative-policy_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-31f\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:02.794237", - "schema_ref": "/schemas/v1/core/creative-policy.json" + "etag": "W/\"68ffaa97-31f\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:13.005758", + "schema_ref": "/schemas/v1/core/creative-policy.json", + "content_hash": "61ee4ac41b3e0c2dff0ee327c63c58cfd0fc357f07c651637f29ed8241eb2519" } diff --git a/schemas/v1/_schemas_v1_core_delivery-metrics_json.json.meta b/schemas/v1/_schemas_v1_core_delivery-metrics_json.json.meta index aac96090b..452fdd47f 100644 --- a/schemas/v1/_schemas_v1_core_delivery-metrics_json.json.meta +++ b/schemas/v1/_schemas_v1_core_delivery-metrics_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-13c2\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:02.764778", - "schema_ref": "/schemas/v1/core/delivery-metrics.json" + "etag": "W/\"68ffaa97-13c2\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:12.811420", + "schema_ref": "/schemas/v1/core/delivery-metrics.json", + "content_hash": "5f7fc6ab6a71d49560699c80c225fb6eaae167c82d85f7c88ef9f7d499b750bc" } diff --git a/schemas/v1/_schemas_v1_core_error_json.json.meta b/schemas/v1/_schemas_v1_core_error_json.json.meta index 1b49dc1c8..626a1ce3e 100644 --- a/schemas/v1/_schemas_v1_core_error_json.json.meta +++ b/schemas/v1/_schemas_v1_core_error_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-3d7\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:02.867584", - "schema_ref": "/schemas/v1/core/error.json" + "etag": "W/\"68ffaa97-3d7\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:13.402580", + "schema_ref": "/schemas/v1/core/error.json", + "content_hash": "cdf517040a14b64d26092440ba026b329a20a467c1eb6d7164079673bafa52d5" } diff --git a/schemas/v1/_schemas_v1_core_format_json.json.meta b/schemas/v1/_schemas_v1_core_format_json.json.meta index 6acc509b1..75358d4b7 100644 --- a/schemas/v1/_schemas_v1_core_format_json.json.meta +++ b/schemas/v1/_schemas_v1_core_format_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-24e0\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:02.701320", - "schema_ref": "/schemas/v1/core/format.json" + "etag": "W/\"68ffaa97-24e0\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:12.420421", + "schema_ref": "/schemas/v1/core/format.json", + "content_hash": "8bbe0aaf08ba1a3a1f849260c143bc25a0d8033c76b1ed787a3ed06c2f3491af" } diff --git a/schemas/v1/_schemas_v1_core_frequency-cap_json.json.meta b/schemas/v1/_schemas_v1_core_frequency-cap_json.json.meta index 08381dfcc..e823913b1 100644 --- a/schemas/v1/_schemas_v1_core_frequency-cap_json.json.meta +++ b/schemas/v1/_schemas_v1_core_frequency-cap_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-1cb\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:02.658560", - "schema_ref": "/schemas/v1/core/frequency-cap.json" + "etag": "W/\"68ffaa97-1cb\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:12.225147", + "schema_ref": "/schemas/v1/core/frequency-cap.json", + "content_hash": "0f9c82eab0ccb41a6aa334a089c8956956b6fbf2a7b70850562d890669ed02b4" } diff --git a/schemas/v1/_schemas_v1_core_measurement_json.json.meta b/schemas/v1/_schemas_v1_core_measurement_json.json.meta index 33acc7983..cbf54cf36 100644 --- a/schemas/v1/_schemas_v1_core_measurement_json.json.meta +++ b/schemas/v1/_schemas_v1_core_measurement_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-3af\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:02.733199", - "schema_ref": "/schemas/v1/core/measurement.json" + "etag": "W/\"68ffaa97-3af\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:12.617836", + "schema_ref": "/schemas/v1/core/measurement.json", + "content_hash": "b35feaf38f33ab6e724e497c2aba819e76dfa5962aff2ac4e457e09a14ddc8b7" } diff --git a/schemas/v1/_schemas_v1_core_media-buy_json.json.meta b/schemas/v1/_schemas_v1_core_media-buy_json.json.meta index 88112b822..2bc76894b 100644 --- a/schemas/v1/_schemas_v1_core_media-buy_json.json.meta +++ b/schemas/v1/_schemas_v1_core_media-buy_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-608\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:02.516790", - "schema_ref": "/schemas/v1/core/media-buy.json" + "etag": "W/\"68ffaa97-608\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:11.444218", + "schema_ref": "/schemas/v1/core/media-buy.json", + "content_hash": "96c767f2f76048f7ed467794d1bb9d3fd4465e5351efec706cfede936c38a7c0" } diff --git a/schemas/v1/_schemas_v1_core_package_json.json.meta b/schemas/v1/_schemas_v1_core_package_json.json.meta index b062fdef1..117d1fb3f 100644 --- a/schemas/v1/_schemas_v1_core_package_json.json.meta +++ b/schemas/v1/_schemas_v1_core_package_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-7a3\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:02.548014", - "schema_ref": "/schemas/v1/core/package.json" + "etag": "W/\"68ffaa97-7a3\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:11.636667", + "schema_ref": "/schemas/v1/core/package.json", + "content_hash": "bd0316817742374cc5680a26b1cf46e8cbb73aa9ef87ee530cad760c5c289cb0" } diff --git a/schemas/v1/_schemas_v1_core_performance-feedback_json.json.meta b/schemas/v1/_schemas_v1_core_performance-feedback_json.json.meta index eba4f4a79..d3c2fa641 100644 --- a/schemas/v1/_schemas_v1_core_performance-feedback_json.json.meta +++ b/schemas/v1/_schemas_v1_core_performance-feedback_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-b32\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.012560", - "schema_ref": "/schemas/v1/core/performance-feedback.json" + "etag": "W/\"68ffaa97-b32\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:14.181117", + "schema_ref": "/schemas/v1/core/performance-feedback.json", + "content_hash": "895275769bad42f9cb39dc69222156fc4c374a3998d305135bd935b87716bdaf" } diff --git a/schemas/v1/_schemas_v1_core_placement_json.json.meta b/schemas/v1/_schemas_v1_core_placement_json.json.meta index 4f66afbae..b6979c1ae 100644 --- a/schemas/v1/_schemas_v1_core_placement_json.json.meta +++ b/schemas/v1/_schemas_v1_core_placement_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-3df\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.285822", - "schema_ref": "/schemas/v1/core/placement.json" + "etag": "W/\"68ffaa97-3df\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:15.729381", + "schema_ref": "/schemas/v1/core/placement.json", + "content_hash": "31ced954109da5cae4eaecd37116c173755e58644e7350a2036d0afc1402993c" } diff --git a/schemas/v1/_schemas_v1_core_pricing-option_json.json.meta b/schemas/v1/_schemas_v1_core_pricing-option_json.json.meta index 749ff7839..507dac9bb 100644 --- a/schemas/v1/_schemas_v1_core_pricing-option_json.json.meta +++ b/schemas/v1/_schemas_v1_core_pricing-option_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-3e9\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.215743", - "schema_ref": "/schemas/v1/core/pricing-option.json" + "etag": "W/\"68ffaa97-3e9\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:15.335022", + "schema_ref": "/schemas/v1/core/pricing-option.json", + "content_hash": "8d64c37f70fc15fc7d615ce3a362ee76421778e45eb67ffdf2693e63d5067b89" } diff --git a/schemas/v1/_schemas_v1_core_product_json.json.meta b/schemas/v1/_schemas_v1_core_product_json.json.meta index fe9badb5e..5d6b99728 100644 --- a/schemas/v1/_schemas_v1_core_product_json.json.meta +++ b/schemas/v1/_schemas_v1_core_product_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-1256\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:02.482555", - "schema_ref": "/schemas/v1/core/product.json" + "etag": "W/\"68ffaa97-1256\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:11.253582", + "schema_ref": "/schemas/v1/core/product.json", + "content_hash": "7913e62267fa766a20f3dad18a5e121389406be662b713d8fcc959a71886df8f" } diff --git a/schemas/v1/_schemas_v1_core_promoted-products_json.json.meta b/schemas/v1/_schemas_v1_core_promoted-products_json.json.meta index 466e853f7..6d73dc06a 100644 --- a/schemas/v1/_schemas_v1_core_promoted-products_json.json.meta +++ b/schemas/v1/_schemas_v1_core_promoted-products_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-85f\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.147876", - "schema_ref": "/schemas/v1/core/promoted-products.json" + "etag": "W/\"68ffaa97-85f\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:14.946353", + "schema_ref": "/schemas/v1/core/promoted-products.json", + "content_hash": "7a74abe704069c7a52a6c4464ce66d5f426bf5634b2ba6d3b0c442ebdec4d1d2" } diff --git a/schemas/v1/_schemas_v1_core_property_json.json.meta b/schemas/v1/_schemas_v1_core_property_json.json.meta index 6145416c5..8ebdf8147 100644 --- a/schemas/v1/_schemas_v1_core_property_json.json.meta +++ b/schemas/v1/_schemas_v1_core_property_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-934\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.044247", - "schema_ref": "/schemas/v1/core/property.json" + "etag": "W/\"68ffaa97-934\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:14.371961", + "schema_ref": "/schemas/v1/core/property.json", + "content_hash": "07923eaa02e310a5fdd76703fffb10ab8d66c982c82d62bfc07a377d637d239b" } diff --git a/schemas/v1/_schemas_v1_core_protocol-envelope_json.json.meta b/schemas/v1/_schemas_v1_core_protocol-envelope_json.json.meta index 98bfca53c..6056ae310 100644 --- a/schemas/v1/_schemas_v1_core_protocol-envelope_json.json.meta +++ b/schemas/v1/_schemas_v1_core_protocol-envelope_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-17cf\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.247029", - "schema_ref": "/schemas/v1/core/protocol-envelope.json" + "etag": "W/\"68ffaa97-17cf\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:15.536363", + "schema_ref": "/schemas/v1/core/protocol-envelope.json", + "content_hash": "9fc67cf166ad005fd339f0a1639313fc59980fd0b86acbde51a688997fe25cdc" } diff --git a/schemas/v1/_schemas_v1_core_response_json.json.meta b/schemas/v1/_schemas_v1_core_response_json.json.meta index 9ec45ebb2..f0586607d 100644 --- a/schemas/v1/_schemas_v1_core_response_json.json.meta +++ b/schemas/v1/_schemas_v1_core_response_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-292\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:02.832409", - "schema_ref": "/schemas/v1/core/response.json" + "etag": "W/\"68ffaa97-292\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:13.191220", + "schema_ref": "/schemas/v1/core/response.json", + "content_hash": "3913eefbff2c1479b7d7f9e1bd9b261b9181df196e8384abdb9530a97a980227" } diff --git a/schemas/v1/_schemas_v1_core_start-timing_json.json.meta b/schemas/v1/_schemas_v1_core_start-timing_json.json.meta index 33564cf69..8a9005c65 100644 --- a/schemas/v1/_schemas_v1_core_start-timing_json.json.meta +++ b/schemas/v1/_schemas_v1_core_start-timing_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-1da\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.183917", - "schema_ref": "/schemas/v1/core/start-timing.json" + "etag": "W/\"68ffaa97-1da\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:15.148130", + "schema_ref": "/schemas/v1/core/start-timing.json", + "content_hash": "a77cdf6879232dace1949aa60c790f3d7977573a20bbfd17f0041b7bb6377376" } diff --git a/schemas/v1/_schemas_v1_core_sub-asset_json.json.meta b/schemas/v1/_schemas_v1_core_sub-asset_json.json.meta index 9d5f9e732..170a145bb 100644 --- a/schemas/v1/_schemas_v1_core_sub-asset_json.json.meta +++ b/schemas/v1/_schemas_v1_core_sub-asset_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-681\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:02.901390", - "schema_ref": "/schemas/v1/core/sub-asset.json" + "etag": "W/\"68ffaa97-681\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:13.593901", + "schema_ref": "/schemas/v1/core/sub-asset.json", + "content_hash": "abce9c1a14e306999057a8cf3fec49a0c83092cb744b933e5df763288c3a6de9" } diff --git a/schemas/v1/_schemas_v1_core_targeting_json.json.meta b/schemas/v1/_schemas_v1_core_targeting_json.json.meta index 0c76579ec..bd131bf73 100644 --- a/schemas/v1/_schemas_v1_core_targeting_json.json.meta +++ b/schemas/v1/_schemas_v1_core_targeting_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-5c6\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:02.626514", - "schema_ref": "/schemas/v1/core/targeting.json" + "etag": "W/\"68ffaa97-5c6\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:12.032554", + "schema_ref": "/schemas/v1/core/targeting.json", + "content_hash": "8b5ecc19d7c2d220615df6cec34fe6b75ee6f53474958c6d21f8b9106623682b" } diff --git a/schemas/v1/_schemas_v1_enums_channels_json.json.meta b/schemas/v1/_schemas_v1_enums_channels_json.json.meta index 060149659..3e354267d 100644 --- a/schemas/v1/_schemas_v1_enums_channels_json.json.meta +++ b/schemas/v1/_schemas_v1_enums_channels_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-16b\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.667412", - "schema_ref": "/schemas/v1/enums/channels.json" + "etag": "W/\"68ffaa97-16b\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:18.134082", + "schema_ref": "/schemas/v1/enums/channels.json", + "content_hash": "077996823566b946b3d29306dbd04b10ea6426aff934e34226a108d27b993337" } diff --git a/schemas/v1/_schemas_v1_enums_creative-status_json.json.meta b/schemas/v1/_schemas_v1_enums_creative-status_json.json.meta index f64b2c005..1372c1170 100644 --- a/schemas/v1/_schemas_v1_enums_creative-status_json.json.meta +++ b/schemas/v1/_schemas_v1_enums_creative-status_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-237\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.465364", - "schema_ref": "/schemas/v1/enums/creative-status.json" + "etag": "W/\"68ffaa97-237\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:16.942806", + "schema_ref": "/schemas/v1/enums/creative-status.json", + "content_hash": "53e8122b6454e5bd58e44b55a42527c9b2e342e258d0f443e852828062f2312b" } diff --git a/schemas/v1/_schemas_v1_enums_delivery-type_json.json.meta b/schemas/v1/_schemas_v1_enums_delivery-type_json.json.meta index cbc98c954..d1d5ce598 100644 --- a/schemas/v1/_schemas_v1_enums_delivery-type_json.json.meta +++ b/schemas/v1/_schemas_v1_enums_delivery-type_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-1a0\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.364624", - "schema_ref": "/schemas/v1/enums/delivery-type.json" + "etag": "W/\"68ffaa97-1a0\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:16.317946", + "schema_ref": "/schemas/v1/enums/delivery-type.json", + "content_hash": "2efed93fe6952b67ded99181306be15ca427552535782a47dd238bf27791fb17" } diff --git a/schemas/v1/_schemas_v1_enums_frequency-cap-scope_json.json.meta b/schemas/v1/_schemas_v1_enums_frequency-cap-scope_json.json.meta index c3f85bad6..80580bd46 100644 --- a/schemas/v1/_schemas_v1_enums_frequency-cap-scope_json.json.meta +++ b/schemas/v1/_schemas_v1_enums_frequency-cap-scope_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-14d\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.534469", - "schema_ref": "/schemas/v1/enums/frequency-cap-scope.json" + "etag": "W/\"68ffaa97-14d\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:17.325896", + "schema_ref": "/schemas/v1/enums/frequency-cap-scope.json", + "content_hash": "ecc3e29daae79b2d5cf402751840746ae78e5714dfc0a5e20ef47193359da9e4" } diff --git a/schemas/v1/_schemas_v1_enums_identifier-types_json.json.meta b/schemas/v1/_schemas_v1_enums_identifier-types_json.json.meta index 3d3edf626..32a594c75 100644 --- a/schemas/v1/_schemas_v1_enums_identifier-types_json.json.meta +++ b/schemas/v1/_schemas_v1_enums_identifier-types_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-2fa\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.601861", - "schema_ref": "/schemas/v1/enums/identifier-types.json" + "etag": "W/\"68ffaa97-2fa\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:17.716203", + "schema_ref": "/schemas/v1/enums/identifier-types.json", + "content_hash": "4fc1fe674ed731a8deca98f6c469a403c4e7051affae48ba7a22f602ed701072" } diff --git a/schemas/v1/_schemas_v1_enums_media-buy-status_json.json.meta b/schemas/v1/_schemas_v1_enums_media-buy-status_json.json.meta index e55e7cb4c..3ea18f7ad 100644 --- a/schemas/v1/_schemas_v1_enums_media-buy-status_json.json.meta +++ b/schemas/v1/_schemas_v1_enums_media-buy-status_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-203\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.393050", - "schema_ref": "/schemas/v1/enums/media-buy-status.json" + "etag": "W/\"68ffaa97-203\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:16.552802", + "schema_ref": "/schemas/v1/enums/media-buy-status.json", + "content_hash": "cc89c2d193a2d5ea70633c641b3c3d550a5ce749557b0a3d430c16a3a1ca94b9" } diff --git a/schemas/v1/_schemas_v1_enums_pacing_json.json.meta b/schemas/v1/_schemas_v1_enums_pacing_json.json.meta index 700e9ad75..7feff3c2f 100644 --- a/schemas/v1/_schemas_v1_enums_pacing_json.json.meta +++ b/schemas/v1/_schemas_v1_enums_pacing_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-1f7\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.500478", - "schema_ref": "/schemas/v1/enums/pacing.json" + "etag": "W/\"68ffaa97-1f7\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:17.134881", + "schema_ref": "/schemas/v1/enums/pacing.json", + "content_hash": "d86485a45455a6ec4fcb0a82cb3a1a502dbc1dbc49dc38663cc20fdf44923a01" } diff --git a/schemas/v1/_schemas_v1_enums_package-status_json.json.meta b/schemas/v1/_schemas_v1_enums_package-status_json.json.meta index a985d2fd6..6628fc24f 100644 --- a/schemas/v1/_schemas_v1_enums_package-status_json.json.meta +++ b/schemas/v1/_schemas_v1_enums_package-status_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-1c4\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.429260", - "schema_ref": "/schemas/v1/enums/package-status.json" + "etag": "W/\"68ffaa97-1c4\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:16.746579", + "schema_ref": "/schemas/v1/enums/package-status.json", + "content_hash": "4d221cfdeea58f2caad52233ce8c4066fa7fd6bdb3f1b86453196b9df84721be" } diff --git a/schemas/v1/_schemas_v1_enums_pricing-model_json.json.meta b/schemas/v1/_schemas_v1_enums_pricing-model_json.json.meta index 2f995561f..49acadddf 100644 --- a/schemas/v1/_schemas_v1_enums_pricing-model_json.json.meta +++ b/schemas/v1/_schemas_v1_enums_pricing-model_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-3a1\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.325361", - "schema_ref": "/schemas/v1/enums/pricing-model.json" + "etag": "W/\"68ffaa97-3a1\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:16.124090", + "schema_ref": "/schemas/v1/enums/pricing-model.json", + "content_hash": "c3166d9f33db5f2985837aed8ca7be301a153b7173223dbab0f96e9a1edf4016" } diff --git a/schemas/v1/_schemas_v1_enums_publisher-identifier-types_json.json.meta b/schemas/v1/_schemas_v1_enums_publisher-identifier-types_json.json.meta index 439875b05..8e44a3500 100644 --- a/schemas/v1/_schemas_v1_enums_publisher-identifier-types_json.json.meta +++ b/schemas/v1/_schemas_v1_enums_publisher-identifier-types_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-19b\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.632456", - "schema_ref": "/schemas/v1/enums/publisher-identifier-types.json" + "etag": "W/\"68ffaa97-19b\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:17.939280", + "schema_ref": "/schemas/v1/enums/publisher-identifier-types.json", + "content_hash": "3f859906215c44527b6406664bbe10abd6ac11184adef0dc535de9231bede5c0" } diff --git a/schemas/v1/_schemas_v1_enums_standard-format-ids_json.json.meta b/schemas/v1/_schemas_v1_enums_standard-format-ids_json.json.meta index 53df5b17e..a7c83bde9 100644 --- a/schemas/v1/_schemas_v1_enums_standard-format-ids_json.json.meta +++ b/schemas/v1/_schemas_v1_enums_standard-format-ids_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-a4c\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.568826", - "schema_ref": "/schemas/v1/enums/standard-format-ids.json" + "etag": "W/\"68ffaa97-a4c\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:17.524912", + "schema_ref": "/schemas/v1/enums/standard-format-ids.json", + "content_hash": "0a7698e047f601868fc95836e5c5978d92b68bfed2990ca45cb0959cd425d13e" } diff --git a/schemas/v1/_schemas_v1_enums_task-status_json.json.meta b/schemas/v1/_schemas_v1_enums_task-status_json.json.meta index 276f5328a..bbc4bd5be 100644 --- a/schemas/v1/_schemas_v1_enums_task-status_json.json.meta +++ b/schemas/v1/_schemas_v1_enums_task-status_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-4be\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.709065", - "schema_ref": "/schemas/v1/enums/task-status.json" + "etag": "W/\"68ffaa97-4be\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:18.317361", + "schema_ref": "/schemas/v1/enums/task-status.json", + "content_hash": "43f4118e5d1513426618b2ee64d0cb29809953b97f7478e7292a4824f0a3e10a" } diff --git a/schemas/v1/_schemas_v1_media-buy_create-media-buy-request_json.json.meta b/schemas/v1/_schemas_v1_media-buy_create-media-buy-request_json.json.meta index 7015c6250..d47a41565 100644 --- a/schemas/v1/_schemas_v1_media-buy_create-media-buy-request_json.json.meta +++ b/schemas/v1/_schemas_v1_media-buy_create-media-buy-request_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-b7d\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.893477", - "schema_ref": "/schemas/v1/media-buy/create-media-buy-request.json" + "etag": "W/\"68ffaa97-b7d\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:19.583856", + "schema_ref": "/schemas/v1/media-buy/create-media-buy-request.json", + "content_hash": "0674bca88bef896d68b79bba5b137d020f7966bb74c3526da5835fd41bfc2792" } diff --git a/schemas/v1/_schemas_v1_media-buy_create-media-buy-response_json.json.meta b/schemas/v1/_schemas_v1_media-buy_create-media-buy-response_json.json.meta index d1220abe4..93b02a958 100644 --- a/schemas/v1/_schemas_v1_media-buy_create-media-buy-response_json.json.meta +++ b/schemas/v1/_schemas_v1_media-buy_create-media-buy-response_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-611\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.931912", - "schema_ref": "/schemas/v1/media-buy/create-media-buy-response.json" + "etag": "W/\"68ffaa97-611\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:19.851279", + "schema_ref": "/schemas/v1/media-buy/create-media-buy-response.json", + "content_hash": "9cbda5181614eed8fcacf7c00aef859f85b2e7729c037d63f902f55df6029f0e" } diff --git a/schemas/v1/_schemas_v1_media-buy_get-media-buy-delivery-request_json.json.meta b/schemas/v1/_schemas_v1_media-buy_get-media-buy-delivery-request_json.json.meta index 2fa51bbe6..216d07ac2 100644 --- a/schemas/v1/_schemas_v1_media-buy_get-media-buy-delivery-request_json.json.meta +++ b/schemas/v1/_schemas_v1_media-buy_get-media-buy-delivery-request_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-668\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:04.180398", - "schema_ref": "/schemas/v1/media-buy/get-media-buy-delivery-request.json" + "etag": "W/\"68ffaa97-668\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:21.200457", + "schema_ref": "/schemas/v1/media-buy/get-media-buy-delivery-request.json", + "content_hash": "4ba1f62aa1a2798ce6e337e36c0e107b7838981d4dec2f4a5da66debccffc279" } diff --git a/schemas/v1/_schemas_v1_media-buy_get-media-buy-delivery-response_json.json.meta b/schemas/v1/_schemas_v1_media-buy_get-media-buy-delivery-response_json.json.meta index b63760e84..dc4c9e0d5 100644 --- a/schemas/v1/_schemas_v1_media-buy_get-media-buy-delivery-response_json.json.meta +++ b/schemas/v1/_schemas_v1_media-buy_get-media-buy-delivery-response_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-214b\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:04.211519", - "schema_ref": "/schemas/v1/media-buy/get-media-buy-delivery-response.json" + "etag": "W/\"68ffaa97-214b\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:21.390435", + "schema_ref": "/schemas/v1/media-buy/get-media-buy-delivery-response.json", + "content_hash": "bdfa955617020ce85d3e2e266a75ae9128b34b659b11c1fbe668ed3f572ba1a9" } diff --git a/schemas/v1/_schemas_v1_media-buy_get-products-request_json.json.meta b/schemas/v1/_schemas_v1_media-buy_get-products-request_json.json.meta index ef12114b3..3a7b2e45a 100644 --- a/schemas/v1/_schemas_v1_media-buy_get-products-request_json.json.meta +++ b/schemas/v1/_schemas_v1_media-buy_get-products-request_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-7b9\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.756957", - "schema_ref": "/schemas/v1/media-buy/get-products-request.json" + "etag": "W/\"68ffaa97-7b9\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:15:28.603429", + "schema_ref": "/schemas/v1/media-buy/get-products-request.json", + "content_hash": "3de0c3f8a90fb2f1aacc80c973ccebe53737107fcea7c64abb69a33eaa3c7caf" } diff --git a/schemas/v1/_schemas_v1_media-buy_get-products-response_json.json.meta b/schemas/v1/_schemas_v1_media-buy_get-products-response_json.json.meta index 3c577acdd..7dbb12a82 100644 --- a/schemas/v1/_schemas_v1_media-buy_get-products-response_json.json.meta +++ b/schemas/v1/_schemas_v1_media-buy_get-products-response_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-2c2\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.791634", - "schema_ref": "/schemas/v1/media-buy/get-products-response.json" + "etag": "W/\"68ffaa97-2c2\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:15:28.876851", + "schema_ref": "/schemas/v1/media-buy/get-products-response.json", + "content_hash": "5f15005617defff8502d2e611d41524f7086fc6b916630bf95f04d3e952dc0ca" } diff --git a/schemas/v1/_schemas_v1_media-buy_list-authorized-properties-request_json.json.meta b/schemas/v1/_schemas_v1_media-buy_list-authorized-properties-request_json.json.meta index a947b0e42..38f0229b1 100644 --- a/schemas/v1/_schemas_v1_media-buy_list-authorized-properties-request_json.json.meta +++ b/schemas/v1/_schemas_v1_media-buy_list-authorized-properties-request_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-321\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:04.251753", - "schema_ref": "/schemas/v1/media-buy/list-authorized-properties-request.json" + "etag": "W/\"68ffaa97-321\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:21.585515", + "schema_ref": "/schemas/v1/media-buy/list-authorized-properties-request.json", + "content_hash": "8972de365f54f476d89c004af9d6512f1335b8ada9116e00b9ea13d505f12dbe" } diff --git a/schemas/v1/_schemas_v1_media-buy_list-authorized-properties-response_json.json.meta b/schemas/v1/_schemas_v1_media-buy_list-authorized-properties-response_json.json.meta index fabe901d5..6b06b1246 100644 --- a/schemas/v1/_schemas_v1_media-buy_list-authorized-properties-response_json.json.meta +++ b/schemas/v1/_schemas_v1_media-buy_list-authorized-properties-response_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-b14\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:04.289560", - "schema_ref": "/schemas/v1/media-buy/list-authorized-properties-response.json" + "etag": "W/\"68ffaa97-b14\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:21.782281", + "schema_ref": "/schemas/v1/media-buy/list-authorized-properties-response.json", + "content_hash": "e75dd3aa8ba60502b0975355b215d55b16496a699190e1b1106db0df0940a59a" } diff --git a/schemas/v1/_schemas_v1_media-buy_list-creative-formats-request_json.json.meta b/schemas/v1/_schemas_v1_media-buy_list-creative-formats-request_json.json.meta index 1247dba29..c9330bd85 100644 --- a/schemas/v1/_schemas_v1_media-buy_list-creative-formats-request_json.json.meta +++ b/schemas/v1/_schemas_v1_media-buy_list-creative-formats-request_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-980\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.826961", - "schema_ref": "/schemas/v1/media-buy/list-creative-formats-request.json" + "etag": "W/\"68ffaa97-980\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:19.178539", + "schema_ref": "/schemas/v1/media-buy/list-creative-formats-request.json", + "content_hash": "895209a3ddd8ae25d50ec10544954508d7c25f2d90f1bd191c71a4cbf9a1c04e" } diff --git a/schemas/v1/_schemas_v1_media-buy_list-creative-formats-response_json.json.meta b/schemas/v1/_schemas_v1_media-buy_list-creative-formats-response_json.json.meta index e7894bc02..56ff093e3 100644 --- a/schemas/v1/_schemas_v1_media-buy_list-creative-formats-response_json.json.meta +++ b/schemas/v1/_schemas_v1_media-buy_list-creative-formats-response_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-7e9\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.862233", - "schema_ref": "/schemas/v1/media-buy/list-creative-formats-response.json" + "etag": "W/\"68ffaa97-7e9\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:19.375266", + "schema_ref": "/schemas/v1/media-buy/list-creative-formats-response.json", + "content_hash": "134e627a2e0e8ea097252cce480b6c73fd0ff2c5f532d1322152b0dee6060022" } diff --git a/schemas/v1/_schemas_v1_media-buy_list-creatives-request_json.json.meta b/schemas/v1/_schemas_v1_media-buy_list-creatives-request_json.json.meta index 5db2b9a82..dd154ec2b 100644 --- a/schemas/v1/_schemas_v1_media-buy_list-creatives-request_json.json.meta +++ b/schemas/v1/_schemas_v1_media-buy_list-creatives-request_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-199d\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:04.037729", - "schema_ref": "/schemas/v1/media-buy/list-creatives-request.json" + "etag": "W/\"68ffaa97-199d\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:20.435865", + "schema_ref": "/schemas/v1/media-buy/list-creatives-request.json", + "content_hash": "4b98fc154701bdc22011b1eaddbfde9da1a6ff3f5090e1b853c74a7c63658125" } diff --git a/schemas/v1/_schemas_v1_media-buy_list-creatives-response_json.json.meta b/schemas/v1/_schemas_v1_media-buy_list-creatives-response_json.json.meta index e5ab8f4bf..be1102190 100644 --- a/schemas/v1/_schemas_v1_media-buy_list-creatives-response_json.json.meta +++ b/schemas/v1/_schemas_v1_media-buy_list-creatives-response_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-3645\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:04.075968", - "schema_ref": "/schemas/v1/media-buy/list-creatives-response.json" + "etag": "W/\"68ffaa97-3645\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:20.634389", + "schema_ref": "/schemas/v1/media-buy/list-creatives-response.json", + "content_hash": "5501147b515b318c11a5ca25c71d7b4a67af28221f6c1a0390d558e7000f393c" } diff --git a/schemas/v1/_schemas_v1_media-buy_provide-performance-feedback-request_json.json.meta b/schemas/v1/_schemas_v1_media-buy_provide-performance-feedback-request_json.json.meta index 983e20e3d..528fd3848 100644 --- a/schemas/v1/_schemas_v1_media-buy_provide-performance-feedback-request_json.json.meta +++ b/schemas/v1/_schemas_v1_media-buy_provide-performance-feedback-request_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-917\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:04.321621", - "schema_ref": "/schemas/v1/media-buy/provide-performance-feedback-request.json" + "etag": "W/\"68ffaa97-917\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:21.977696", + "schema_ref": "/schemas/v1/media-buy/provide-performance-feedback-request.json", + "content_hash": "49a2dfc5f675df8ab6581a4856e4c8673dc6fd442f2b8e4fdac6d1ce579b36e2" } diff --git a/schemas/v1/_schemas_v1_media-buy_provide-performance-feedback-response_json.json.meta b/schemas/v1/_schemas_v1_media-buy_provide-performance-feedback-response_json.json.meta index 19ad109b8..78388a65d 100644 --- a/schemas/v1/_schemas_v1_media-buy_provide-performance-feedback-response_json.json.meta +++ b/schemas/v1/_schemas_v1_media-buy_provide-performance-feedback-response_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-2e1\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:04.364283", - "schema_ref": "/schemas/v1/media-buy/provide-performance-feedback-response.json" + "etag": "W/\"68ffaa97-2e1\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:22.173603", + "schema_ref": "/schemas/v1/media-buy/provide-performance-feedback-response.json", + "content_hash": "1759415df03640fd6e02706aba502f4f21d2f84adff8ae778710565d7db16ffb" } diff --git a/schemas/v1/_schemas_v1_media-buy_sync-creatives-request_json.json.meta b/schemas/v1/_schemas_v1_media-buy_sync-creatives-request_json.json.meta index dee8c419e..6a52bbe2d 100644 --- a/schemas/v1/_schemas_v1_media-buy_sync-creatives-request_json.json.meta +++ b/schemas/v1/_schemas_v1_media-buy_sync-creatives-request_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-1050\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:03.964524", - "schema_ref": "/schemas/v1/media-buy/sync-creatives-request.json" + "etag": "W/\"68ffaa97-1050\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:20.056502", + "schema_ref": "/schemas/v1/media-buy/sync-creatives-request.json", + "content_hash": "49a90f71b5a2beb40719a178298524b994fe412d666867629e28cdcfbd4b1fe4" } diff --git a/schemas/v1/_schemas_v1_media-buy_sync-creatives-response_json.json.meta b/schemas/v1/_schemas_v1_media-buy_sync-creatives-response_json.json.meta index ec694c64f..c68e2a892 100644 --- a/schemas/v1/_schemas_v1_media-buy_sync-creatives-response_json.json.meta +++ b/schemas/v1/_schemas_v1_media-buy_sync-creatives-response_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-c4b\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:04.001070", - "schema_ref": "/schemas/v1/media-buy/sync-creatives-response.json" + "etag": "W/\"68ffaa97-c4b\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:20.240676", + "schema_ref": "/schemas/v1/media-buy/sync-creatives-response.json", + "content_hash": "34b2a55d45ce894952717755fcd3b8bf40117f2fe26122871fa6788359a24029" } diff --git a/schemas/v1/_schemas_v1_media-buy_update-media-buy-request_json.json.meta b/schemas/v1/_schemas_v1_media-buy_update-media-buy-request_json.json.meta index 1fb9a50b7..9eba75397 100644 --- a/schemas/v1/_schemas_v1_media-buy_update-media-buy-request_json.json.meta +++ b/schemas/v1/_schemas_v1_media-buy_update-media-buy-request_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-b99\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:04.108684", - "schema_ref": "/schemas/v1/media-buy/update-media-buy-request.json" + "etag": "W/\"68ffaa97-b99\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:20.821821", + "schema_ref": "/schemas/v1/media-buy/update-media-buy-request.json", + "content_hash": "31e1d2399895edbd9d29cb15b6dc410d3bc5ab4b22434f9f025acf661b25bcbf" } diff --git a/schemas/v1/_schemas_v1_media-buy_update-media-buy-response_json.json.meta b/schemas/v1/_schemas_v1_media-buy_update-media-buy-response_json.json.meta index 7b56cbd38..2f38f3c8c 100644 --- a/schemas/v1/_schemas_v1_media-buy_update-media-buy-response_json.json.meta +++ b/schemas/v1/_schemas_v1_media-buy_update-media-buy-response_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-640\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:04.147170", - "schema_ref": "/schemas/v1/media-buy/update-media-buy-response.json" + "etag": "W/\"68ffaa97-640\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:21.014971", + "schema_ref": "/schemas/v1/media-buy/update-media-buy-response.json", + "content_hash": "289831635820faa58ebef435d66baa24bc64557ab2ebe127265d8e553dde4618" } diff --git a/schemas/v1/_schemas_v1_signals_activate-signal-request_json.json.meta b/schemas/v1/_schemas_v1_signals_activate-signal-request_json.json.meta index 5a6ffade3..97943cbe3 100644 --- a/schemas/v1/_schemas_v1_signals_activate-signal-request_json.json.meta +++ b/schemas/v1/_schemas_v1_signals_activate-signal-request_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-305\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:04.463470", - "schema_ref": "/schemas/v1/signals/activate-signal-request.json" + "etag": "W/\"68ffaa97-305\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:22.730873", + "schema_ref": "/schemas/v1/signals/activate-signal-request.json", + "content_hash": "a81c96df58ad29a165e96e8e3128b344fdaea23b219f929ce220c379848fe968" } diff --git a/schemas/v1/_schemas_v1_signals_activate-signal-response_json.json.meta b/schemas/v1/_schemas_v1_signals_activate-signal-response_json.json.meta index faba4ab01..caf4c37d7 100644 --- a/schemas/v1/_schemas_v1_signals_activate-signal-response_json.json.meta +++ b/schemas/v1/_schemas_v1_signals_activate-signal-response_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-3db\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:04.497883", - "schema_ref": "/schemas/v1/signals/activate-signal-response.json" + "etag": "W/\"68ffaa97-3db\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:22.926435", + "schema_ref": "/schemas/v1/signals/activate-signal-response.json", + "content_hash": "4b7c480dc7227a38df92832e43c29c5dd595c372260286dc382778b45b0030e8" } diff --git a/schemas/v1/_schemas_v1_signals_get-signals-request_json.json.meta b/schemas/v1/_schemas_v1_signals_get-signals-request_json.json.meta index 57244c5b4..dd5479514 100644 --- a/schemas/v1/_schemas_v1_signals_get-signals-request_json.json.meta +++ b/schemas/v1/_schemas_v1_signals_get-signals-request_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-c03\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:04.397832", - "schema_ref": "/schemas/v1/signals/get-signals-request.json" + "etag": "W/\"68ffaa97-c03\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:22.359269", + "schema_ref": "/schemas/v1/signals/get-signals-request.json", + "content_hash": "9c8e8b5e20e1e3e865be105f4b2b6d790cd978705791c69757157b0ff7e2632d" } diff --git a/schemas/v1/_schemas_v1_signals_get-signals-response_json.json.meta b/schemas/v1/_schemas_v1_signals_get-signals-response_json.json.meta index 5f6e54b6d..c68c6a4f2 100644 --- a/schemas/v1/_schemas_v1_signals_get-signals-response_json.json.meta +++ b/schemas/v1/_schemas_v1_signals_get-signals-response_json.json.meta @@ -1,6 +1,7 @@ { - "etag": "W/\"68ff4038-1018\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:04.426414", - "schema_ref": "/schemas/v1/signals/get-signals-response.json" + "etag": "W/\"68ffaa97-1018\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:16:22.548801", + "schema_ref": "/schemas/v1/signals/get-signals-response.json", + "content_hash": "3df6f678d2ceef04b4feb7c9fc90baedde32a0643fd4ce2fee90091e6ff9a290" } diff --git a/schemas/v1/index.json b/schemas/v1/index.json index c5fcc0ef6..00e501c0f 100644 --- a/schemas/v1/index.json +++ b/schemas/v1/index.json @@ -132,6 +132,10 @@ "placement": { "$ref": "/schemas/v1/core/placement.json", "description": "Represents a specific ad placement within a product's inventory" + }, + "webhook-payload": { + "$ref": "/schemas/v1/core/webhook-payload.json", + "description": "Webhook payload structure sent when async task status changes - combines protocol-level task metadata (task_id, task_type, domain, status, timestamps) with domain-specific response data" } } }, @@ -185,6 +189,10 @@ "task-status": { "$ref": "/schemas/v1/enums/task-status.json", "description": "Standardized task status values based on A2A TaskState enum" + }, + "task-type": { + "$ref": "/schemas/v1/enums/task-type.json", + "description": "Valid AdCP task types across all domains (create_media_buy, update_media_buy, sync_creatives, activate_signal, get_signals)" } } }, diff --git a/schemas/v1/index.json.meta b/schemas/v1/index.json.meta index 168a01508..322127cc2 100644 --- a/schemas/v1/index.json.meta +++ b/schemas/v1/index.json.meta @@ -1,5 +1,6 @@ { - "etag": "W/\"68ff4038-4baf\"", - "last-modified": "Mon, 27 Oct 2025 09:49:44 GMT", - "downloaded_at": "2025-10-27T05:54:02.440237" + "etag": "W/\"68ffaa97-4dd6\"", + "last-modified": "Mon, 27 Oct 2025 17:23:35 GMT", + "downloaded_at": "2025-10-28T16:15:28.411191", + "content_hash": "6cd4b75cb8bdb945fb8f5ae99b12b99365fe5fe83f457bc94ce66d13fa9d78b7" } diff --git a/src/core/schemas_generated/__init__.py b/src/core/schemas_generated/__init__.py index 8fc4bee00..96e09916f 100644 --- a/src/core/schemas_generated/__init__.py +++ b/src/core/schemas_generated/__init__.py @@ -1,4 +1,4 @@ -# SCHEMA_HASH: 7e61ed4818c0c4d19d842fa7b3a67acf +# SCHEMA_HASH: 1ab1d336e15cb56f9b8d1b70469f2c53 """ Auto-generated Pydantic models from AdCP JSON schemas. diff --git a/src/core/schemas_generated/_schemas_v1_core_assets_audio_asset_json.py b/src/core/schemas_generated/_schemas_v1_core_assets_audio_asset_json.py index f96be5f2f..6b9d0c2a6 100644 --- a/src/core/schemas_generated/_schemas_v1_core_assets_audio_asset_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_assets_audio_asset_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_assets_audio-asset_json.json -# source_etag: W/"68f98531-30c" -# source_last_modified: Thu, 23 Oct 2025 01:30:25 GMT +# schema_hash: 27879ea9d6de from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_assets_css_asset_json.py b/src/core/schemas_generated/_schemas_v1_core_assets_css_asset_json.py index 748416a62..e939f8d68 100644 --- a/src/core/schemas_generated/_schemas_v1_core_assets_css_asset_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_assets_css_asset_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_assets_css-asset_json.json -# source_etag: W/"68f98531-1df" -# source_last_modified: Thu, 23 Oct 2025 01:30:25 GMT +# schema_hash: 77330af31b5c from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_assets_daast_asset_json.py b/src/core/schemas_generated/_schemas_v1_core_assets_daast_asset_json.py index ab03cba7c..1b5bb3c33 100644 --- a/src/core/schemas_generated/_schemas_v1_core_assets_daast_asset_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_assets_daast_asset_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_assets_daast-asset_json.json -# source_etag: W/"68f98531-62d" -# source_last_modified: Thu, 23 Oct 2025 01:30:25 GMT +# schema_hash: 2a1772b98cd1 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_assets_html_asset_json.py b/src/core/schemas_generated/_schemas_v1_core_assets_html_asset_json.py index 25e457da4..4908ff471 100644 --- a/src/core/schemas_generated/_schemas_v1_core_assets_html_asset_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_assets_html_asset_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_assets_html-asset_json.json -# source_etag: W/"68f98531-1cd" -# source_last_modified: Thu, 23 Oct 2025 01:30:25 GMT +# schema_hash: 8f5bc5948c62 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_assets_image_asset_json.py b/src/core/schemas_generated/_schemas_v1_core_assets_image_asset_json.py index 536ccb250..214848136 100644 --- a/src/core/schemas_generated/_schemas_v1_core_assets_image_asset_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_assets_image_asset_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_assets_image-asset_json.json -# source_etag: W/"68f98531-356" -# source_last_modified: Thu, 23 Oct 2025 01:30:25 GMT +# schema_hash: ef966042d75a from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_assets_javascript_asset_json.py b/src/core/schemas_generated/_schemas_v1_core_assets_javascript_asset_json.py index a1185f102..66224976e 100644 --- a/src/core/schemas_generated/_schemas_v1_core_assets_javascript_asset_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_assets_javascript_asset_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_assets_javascript-asset_json.json -# source_etag: W/"68f98531-20d" -# source_last_modified: Thu, 23 Oct 2025 01:30:25 GMT +# schema_hash: d57b294c334b from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_assets_text_asset_json.py b/src/core/schemas_generated/_schemas_v1_core_assets_text_asset_json.py index df8c72120..c173da8d8 100644 --- a/src/core/schemas_generated/_schemas_v1_core_assets_text_asset_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_assets_text_asset_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_assets_text-asset_json.json -# source_etag: W/"68f98531-1d8" -# source_last_modified: Thu, 23 Oct 2025 01:30:25 GMT +# schema_hash: 5ca908a4decd from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_assets_url_asset_json.py b/src/core/schemas_generated/_schemas_v1_core_assets_url_asset_json.py index de2d12a86..3762db5a6 100644 --- a/src/core/schemas_generated/_schemas_v1_core_assets_url_asset_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_assets_url_asset_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_assets_url-asset_json.json -# source_etag: W/"68f98531-3c9" -# source_last_modified: Thu, 23 Oct 2025 01:30:25 GMT +# schema_hash: 7a00cb01c384 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_assets_vast_asset_json.py b/src/core/schemas_generated/_schemas_v1_core_assets_vast_asset_json.py index d149e3dd8..91cfee8f1 100644 --- a/src/core/schemas_generated/_schemas_v1_core_assets_vast_asset_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_assets_vast_asset_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_assets_vast-asset_json.json -# source_etag: W/"68f98531-6c6" -# source_last_modified: Thu, 23 Oct 2025 01:30:25 GMT +# schema_hash: ee24c463e68c from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_assets_video_asset_json.py b/src/core/schemas_generated/_schemas_v1_core_assets_video_asset_json.py index 90f3ceb23..5c7d212f3 100644 --- a/src/core/schemas_generated/_schemas_v1_core_assets_video_asset_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_assets_video_asset_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_assets_video-asset_json.json -# source_etag: W/"68f98531-3ef" -# source_last_modified: Thu, 23 Oct 2025 01:30:25 GMT +# schema_hash: b0e508932e90 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_assets_webhook_asset_json.py b/src/core/schemas_generated/_schemas_v1_core_assets_webhook_asset_json.py index 2ae3ee426..08e6c30c5 100644 --- a/src/core/schemas_generated/_schemas_v1_core_assets_webhook_asset_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_assets_webhook_asset_json.py @@ -1,5 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_assets_webhook-asset_json.json +# schema_hash: fb8413c99f4d from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_brand_manifest_json.py b/src/core/schemas_generated/_schemas_v1_core_brand_manifest_json.py index c2dca8791..5a8c4cfc0 100644 --- a/src/core/schemas_generated/_schemas_v1_core_brand_manifest_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_brand_manifest_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_brand-manifest_json.json -# source_etag: W/"68ff4038-2cb0" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 79bd7d61c94a from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_brand_manifest_ref_json.py b/src/core/schemas_generated/_schemas_v1_core_brand_manifest_ref_json.py index bbcba6e42..39aa3769e 100644 --- a/src/core/schemas_generated/_schemas_v1_core_brand_manifest_ref_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_brand_manifest_ref_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_brand-manifest-ref_json.json -# source_etag: W/"68ff4038-3d3" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 70c7ef5e6c62 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_creative_asset_json.py b/src/core/schemas_generated/_schemas_v1_core_creative_asset_json.py index 77ab9ac83..313599021 100644 --- a/src/core/schemas_generated/_schemas_v1_core_creative_asset_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_creative_asset_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_creative-asset_json.json -# source_etag: W/"68ff4038-ba6" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: dd14816974ec from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_creative_assignment_json.py b/src/core/schemas_generated/_schemas_v1_core_creative_assignment_json.py index d75338696..d39fe79e5 100644 --- a/src/core/schemas_generated/_schemas_v1_core_creative_assignment_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_creative_assignment_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_creative-assignment_json.json -# source_etag: W/"68ff4038-462" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: e5fc19e146b1 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_creative_manifest_json.py b/src/core/schemas_generated/_schemas_v1_core_creative_manifest_json.py index 44c0d083b..c6c470a60 100644 --- a/src/core/schemas_generated/_schemas_v1_core_creative_manifest_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_creative_manifest_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_creative-manifest_json.json -# source_etag: W/"68ff4038-a96" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 6234127a6091 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_creative_policy_json.py b/src/core/schemas_generated/_schemas_v1_core_creative_policy_json.py index 35495e808..d95513a8f 100644 --- a/src/core/schemas_generated/_schemas_v1_core_creative_policy_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_creative_policy_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_creative-policy_json.json -# source_etag: W/"68ff4038-31f" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 0bc00cab4ee4 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_delivery_metrics_json.py b/src/core/schemas_generated/_schemas_v1_core_delivery_metrics_json.py index ee9eeb466..eb8548aae 100644 --- a/src/core/schemas_generated/_schemas_v1_core_delivery_metrics_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_delivery_metrics_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_delivery-metrics_json.json -# source_etag: W/"68ff4038-13c2" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 5dfa469be3f6 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_error_json.py b/src/core/schemas_generated/_schemas_v1_core_error_json.py index 7a295fe4e..40c75adda 100644 --- a/src/core/schemas_generated/_schemas_v1_core_error_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_error_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_error_json.json -# source_etag: W/"68ff4038-3d7" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 91ab36d249d5 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_format_id_json.py b/src/core/schemas_generated/_schemas_v1_core_format_id_json.py index daedd0288..0728c6c36 100644 --- a/src/core/schemas_generated/_schemas_v1_core_format_id_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_format_id_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_format-id_json.json -# source_etag: W/"68f98531-31a" -# source_last_modified: Thu, 23 Oct 2025 01:30:25 GMT +# schema_hash: 1b03a8f9c622 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_format_json.py b/src/core/schemas_generated/_schemas_v1_core_format_json.py index 98582ef08..4572ca2ca 100644 --- a/src/core/schemas_generated/_schemas_v1_core_format_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_format_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_format_json.json -# source_etag: W/"68ff4038-24e0" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: eb5532f63ae2 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_frequency_cap_json.py b/src/core/schemas_generated/_schemas_v1_core_frequency_cap_json.py index 6d6f79483..af94f92bc 100644 --- a/src/core/schemas_generated/_schemas_v1_core_frequency_cap_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_frequency_cap_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_frequency-cap_json.json -# source_etag: W/"68ff4038-1cb" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 22070d841eee from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_measurement_json.py b/src/core/schemas_generated/_schemas_v1_core_measurement_json.py index ae96ea02a..e9006b168 100644 --- a/src/core/schemas_generated/_schemas_v1_core_measurement_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_measurement_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_measurement_json.json -# source_etag: W/"68ff4038-3af" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: bfa75b89c98d from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_media_buy_json.py b/src/core/schemas_generated/_schemas_v1_core_media_buy_json.py index 4c815a209..9934a6901 100644 --- a/src/core/schemas_generated/_schemas_v1_core_media_buy_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_media_buy_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_media-buy_json.json -# source_etag: W/"68ff4038-608" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: b7d9bdc2cc3e from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_package_json.py b/src/core/schemas_generated/_schemas_v1_core_package_json.py index b9f7097a7..bcee727d8 100644 --- a/src/core/schemas_generated/_schemas_v1_core_package_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_package_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_package_json.json -# source_etag: W/"68ff4038-7a3" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 5a37a2ad24aa from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_performance_feedback_json.py b/src/core/schemas_generated/_schemas_v1_core_performance_feedback_json.py index 8f0584b0f..3432babcf 100644 --- a/src/core/schemas_generated/_schemas_v1_core_performance_feedback_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_performance_feedback_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_performance-feedback_json.json -# source_etag: W/"68ff4038-b32" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 459eb1bf7cb1 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_placement_json.py b/src/core/schemas_generated/_schemas_v1_core_placement_json.py index cc9b8adbb..81a867b27 100644 --- a/src/core/schemas_generated/_schemas_v1_core_placement_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_placement_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_placement_json.json -# source_etag: W/"68ff4038-3df" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 6727589097cf from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_pricing_option_json.py b/src/core/schemas_generated/_schemas_v1_core_pricing_option_json.py index 48556741e..66c465299 100644 --- a/src/core/schemas_generated/_schemas_v1_core_pricing_option_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_pricing_option_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_pricing-option_json.json -# source_etag: W/"68ff4038-3e9" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: d48b193d2c56 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_product_json.py b/src/core/schemas_generated/_schemas_v1_core_product_json.py index 5372533e2..ff3d7f3f3 100644 --- a/src/core/schemas_generated/_schemas_v1_core_product_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_product_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_product_json.json -# source_etag: W/"68ff4038-1256" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 420610803b65 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_promoted_offerings_json.py b/src/core/schemas_generated/_schemas_v1_core_promoted_offerings_json.py index d2a2d63df..cd5ba4f7e 100644 --- a/src/core/schemas_generated/_schemas_v1_core_promoted_offerings_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_promoted_offerings_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_promoted-offerings_json.json -# source_etag: W/"68f98531-c07" -# source_last_modified: Thu, 23 Oct 2025 01:30:25 GMT +# schema_hash: 2dd6ee78674a from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_promoted_products_json.py b/src/core/schemas_generated/_schemas_v1_core_promoted_products_json.py index 9a7ad7355..1c7e4e877 100644 --- a/src/core/schemas_generated/_schemas_v1_core_promoted_products_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_promoted_products_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_promoted-products_json.json -# source_etag: W/"68ff4038-85f" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 59af27fd0451 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_property_json.py b/src/core/schemas_generated/_schemas_v1_core_property_json.py index 1a0c5446a..aa7772d63 100644 --- a/src/core/schemas_generated/_schemas_v1_core_property_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_property_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_property_json.json -# source_etag: W/"68ff4038-934" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 06f104a17480 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_protocol_envelope_json.py b/src/core/schemas_generated/_schemas_v1_core_protocol_envelope_json.py index 4737010ec..b30547f1b 100644 --- a/src/core/schemas_generated/_schemas_v1_core_protocol_envelope_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_protocol_envelope_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_protocol-envelope_json.json -# source_etag: W/"68ff4038-17cf" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 193353b919fe from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_push_notification_config_json.py b/src/core/schemas_generated/_schemas_v1_core_push_notification_config_json.py index ad8acfd27..61c4ceedc 100644 --- a/src/core/schemas_generated/_schemas_v1_core_push_notification_config_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_push_notification_config_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_push-notification-config_json.json -# source_etag: W/"68f98531-713" -# source_last_modified: Thu, 23 Oct 2025 01:30:25 GMT +# schema_hash: b5c19c5082b2 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_reporting_capabilities_json.py b/src/core/schemas_generated/_schemas_v1_core_reporting_capabilities_json.py index df5d6c555..ffcb0604c 100644 --- a/src/core/schemas_generated/_schemas_v1_core_reporting_capabilities_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_reporting_capabilities_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_reporting-capabilities_json.json -# source_etag: W/"68f98531-780" -# source_last_modified: Thu, 23 Oct 2025 01:30:25 GMT +# schema_hash: ed48a7744fa1 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_response_json.py b/src/core/schemas_generated/_schemas_v1_core_response_json.py index a19058b1c..309cb3334 100644 --- a/src/core/schemas_generated/_schemas_v1_core_response_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_response_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_response_json.json -# source_etag: W/"68ff4038-292" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 1f4f0f4f60b2 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_start_timing_json.py b/src/core/schemas_generated/_schemas_v1_core_start_timing_json.py index e8cc9493a..360923401 100644 --- a/src/core/schemas_generated/_schemas_v1_core_start_timing_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_start_timing_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_start-timing_json.json -# source_etag: W/"68ff4038-1da" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 40397317dd45 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_sub_asset_json.py b/src/core/schemas_generated/_schemas_v1_core_sub_asset_json.py index 58e308214..72ff86bd0 100644 --- a/src/core/schemas_generated/_schemas_v1_core_sub_asset_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_sub_asset_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_sub-asset_json.json -# source_etag: W/"68ff4038-681" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: b9c1d89b8512 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_core_targeting_json.py b/src/core/schemas_generated/_schemas_v1_core_targeting_json.py index c1c8d77af..c381a7835 100644 --- a/src/core/schemas_generated/_schemas_v1_core_targeting_json.py +++ b/src/core/schemas_generated/_schemas_v1_core_targeting_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_core_targeting_json.json -# source_etag: W/"68ff4038-5c6" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 099f23309a11 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_enums_channels_json.py b/src/core/schemas_generated/_schemas_v1_enums_channels_json.py index e1cbf42e9..4ed60f29b 100644 --- a/src/core/schemas_generated/_schemas_v1_enums_channels_json.py +++ b/src/core/schemas_generated/_schemas_v1_enums_channels_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_enums_channels_json.json -# source_etag: W/"68ff4038-16b" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: f451c02698e4 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_enums_creative_status_json.py b/src/core/schemas_generated/_schemas_v1_enums_creative_status_json.py index 1ceedfebc..8800e8e04 100644 --- a/src/core/schemas_generated/_schemas_v1_enums_creative_status_json.py +++ b/src/core/schemas_generated/_schemas_v1_enums_creative_status_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_enums_creative-status_json.json -# source_etag: W/"68ff4038-237" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: a8fb5f8602b7 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_enums_delivery_type_json.py b/src/core/schemas_generated/_schemas_v1_enums_delivery_type_json.py index cbb045420..b54b75acf 100644 --- a/src/core/schemas_generated/_schemas_v1_enums_delivery_type_json.py +++ b/src/core/schemas_generated/_schemas_v1_enums_delivery_type_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_enums_delivery-type_json.json -# source_etag: W/"68ff4038-1a0" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: c4747767e14c from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_enums_frequency_cap_scope_json.py b/src/core/schemas_generated/_schemas_v1_enums_frequency_cap_scope_json.py index 654be77e1..275968a05 100644 --- a/src/core/schemas_generated/_schemas_v1_enums_frequency_cap_scope_json.py +++ b/src/core/schemas_generated/_schemas_v1_enums_frequency_cap_scope_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_enums_frequency-cap-scope_json.json -# source_etag: W/"68ff4038-14d" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 14ebfd2c8b6e from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_enums_identifier_types_json.py b/src/core/schemas_generated/_schemas_v1_enums_identifier_types_json.py index e46ea0361..16b98f98a 100644 --- a/src/core/schemas_generated/_schemas_v1_enums_identifier_types_json.py +++ b/src/core/schemas_generated/_schemas_v1_enums_identifier_types_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_enums_identifier-types_json.json -# source_etag: W/"68ff4038-2fa" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 3b911e2095e0 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_enums_media_buy_status_json.py b/src/core/schemas_generated/_schemas_v1_enums_media_buy_status_json.py index fc79248c4..b6d2b54ad 100644 --- a/src/core/schemas_generated/_schemas_v1_enums_media_buy_status_json.py +++ b/src/core/schemas_generated/_schemas_v1_enums_media_buy_status_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_enums_media-buy-status_json.json -# source_etag: W/"68ff4038-203" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 1cf3db139470 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_enums_pacing_json.py b/src/core/schemas_generated/_schemas_v1_enums_pacing_json.py index ea216d731..2bd988272 100644 --- a/src/core/schemas_generated/_schemas_v1_enums_pacing_json.py +++ b/src/core/schemas_generated/_schemas_v1_enums_pacing_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_enums_pacing_json.json -# source_etag: W/"68ff4038-1f7" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: d510c0568e15 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_enums_package_status_json.py b/src/core/schemas_generated/_schemas_v1_enums_package_status_json.py index dc96b9403..ee2344f01 100644 --- a/src/core/schemas_generated/_schemas_v1_enums_package_status_json.py +++ b/src/core/schemas_generated/_schemas_v1_enums_package_status_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_enums_package-status_json.json -# source_etag: W/"68ff4038-1c4" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 43bd1964d8a3 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_enums_pricing_model_json.py b/src/core/schemas_generated/_schemas_v1_enums_pricing_model_json.py index 7aca5e424..1bb3d922d 100644 --- a/src/core/schemas_generated/_schemas_v1_enums_pricing_model_json.py +++ b/src/core/schemas_generated/_schemas_v1_enums_pricing_model_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_enums_pricing-model_json.json -# source_etag: W/"68ff4038-3a1" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 0adfcd30d620 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_enums_publisher_identifier_types_json.py b/src/core/schemas_generated/_schemas_v1_enums_publisher_identifier_types_json.py index 42b52e7ee..edb0b1af9 100644 --- a/src/core/schemas_generated/_schemas_v1_enums_publisher_identifier_types_json.py +++ b/src/core/schemas_generated/_schemas_v1_enums_publisher_identifier_types_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_enums_publisher-identifier-types_json.json -# source_etag: W/"68ff4038-19b" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 3074cb2fcde8 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_enums_standard_format_ids_json.py b/src/core/schemas_generated/_schemas_v1_enums_standard_format_ids_json.py index 893de4a13..1c1ceae38 100644 --- a/src/core/schemas_generated/_schemas_v1_enums_standard_format_ids_json.py +++ b/src/core/schemas_generated/_schemas_v1_enums_standard_format_ids_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_enums_standard-format-ids_json.json -# source_etag: W/"68ff4038-a4c" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 9d156ea46aea from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_enums_task_status_json.py b/src/core/schemas_generated/_schemas_v1_enums_task_status_json.py index c2c66208f..7761c4e21 100644 --- a/src/core/schemas_generated/_schemas_v1_enums_task_status_json.py +++ b/src/core/schemas_generated/_schemas_v1_enums_task_status_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_enums_task-status_json.json -# source_etag: W/"68ff4038-4be" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 781bdbe3a697 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_media_buy_create_media_buy_request_json.py b/src/core/schemas_generated/_schemas_v1_media_buy_create_media_buy_request_json.py index 497dbf6e9..6088e3b06 100644 --- a/src/core/schemas_generated/_schemas_v1_media_buy_create_media_buy_request_json.py +++ b/src/core/schemas_generated/_schemas_v1_media_buy_create_media_buy_request_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_media-buy_create-media-buy-request_json.json -# source_etag: W/"68ff4038-b7d" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 13f88b16e500 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_media_buy_create_media_buy_response_json.py b/src/core/schemas_generated/_schemas_v1_media_buy_create_media_buy_response_json.py index 498be10df..edab67f0d 100644 --- a/src/core/schemas_generated/_schemas_v1_media_buy_create_media_buy_response_json.py +++ b/src/core/schemas_generated/_schemas_v1_media_buy_create_media_buy_response_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_media-buy_create-media-buy-response_json.json -# source_etag: W/"68ff4038-611" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: de3869520911 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_media_buy_get_media_buy_delivery_request_json.py b/src/core/schemas_generated/_schemas_v1_media_buy_get_media_buy_delivery_request_json.py index 3fd614def..0546b240d 100644 --- a/src/core/schemas_generated/_schemas_v1_media_buy_get_media_buy_delivery_request_json.py +++ b/src/core/schemas_generated/_schemas_v1_media_buy_get_media_buy_delivery_request_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_media-buy_get-media-buy-delivery-request_json.json -# source_etag: W/"68ff4038-668" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: ed11652e1242 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_media_buy_get_media_buy_delivery_response_json.py b/src/core/schemas_generated/_schemas_v1_media_buy_get_media_buy_delivery_response_json.py index daf0ebb8c..f198fd641 100644 --- a/src/core/schemas_generated/_schemas_v1_media_buy_get_media_buy_delivery_response_json.py +++ b/src/core/schemas_generated/_schemas_v1_media_buy_get_media_buy_delivery_response_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_media-buy_get-media-buy-delivery-response_json.json -# source_etag: W/"68ff4038-214b" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 84fba5f16b4c from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_media_buy_get_products_request_json.py b/src/core/schemas_generated/_schemas_v1_media_buy_get_products_request_json.py index 227f4885f..924e91aa3 100644 --- a/src/core/schemas_generated/_schemas_v1_media_buy_get_products_request_json.py +++ b/src/core/schemas_generated/_schemas_v1_media_buy_get_products_request_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_media-buy_get-products-request_json.json -# source_etag: W/"68ff4038-7b9" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: ee282dea5581 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_media_buy_get_products_response_json.py b/src/core/schemas_generated/_schemas_v1_media_buy_get_products_response_json.py index fc0e622cb..fee106f33 100644 --- a/src/core/schemas_generated/_schemas_v1_media_buy_get_products_response_json.py +++ b/src/core/schemas_generated/_schemas_v1_media_buy_get_products_response_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_media-buy_get-products-response_json.json -# source_etag: W/"68ff4038-2c2" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 4999fdaa9b6d from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_media_buy_list_authorized_properties_request_json.py b/src/core/schemas_generated/_schemas_v1_media_buy_list_authorized_properties_request_json.py index 1773bad44..2174b41b0 100644 --- a/src/core/schemas_generated/_schemas_v1_media_buy_list_authorized_properties_request_json.py +++ b/src/core/schemas_generated/_schemas_v1_media_buy_list_authorized_properties_request_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_media-buy_list-authorized-properties-request_json.json -# source_etag: W/"68ff4038-321" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: b09930cbdb1a from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_media_buy_list_authorized_properties_response_json.py b/src/core/schemas_generated/_schemas_v1_media_buy_list_authorized_properties_response_json.py index a2967ebc5..c40b08db3 100644 --- a/src/core/schemas_generated/_schemas_v1_media_buy_list_authorized_properties_response_json.py +++ b/src/core/schemas_generated/_schemas_v1_media_buy_list_authorized_properties_response_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_media-buy_list-authorized-properties-response_json.json -# source_etag: W/"68ff4038-b14" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 9c8dd0e67e2e from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_media_buy_list_creative_formats_request_json.py b/src/core/schemas_generated/_schemas_v1_media_buy_list_creative_formats_request_json.py index abe0b69eb..5fb16894c 100644 --- a/src/core/schemas_generated/_schemas_v1_media_buy_list_creative_formats_request_json.py +++ b/src/core/schemas_generated/_schemas_v1_media_buy_list_creative_formats_request_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_media-buy_list-creative-formats-request_json.json -# source_etag: W/"68ff4038-980" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 4bd5fff60491 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_media_buy_list_creative_formats_response_json.py b/src/core/schemas_generated/_schemas_v1_media_buy_list_creative_formats_response_json.py index 5ad688432..eaf7aaf15 100644 --- a/src/core/schemas_generated/_schemas_v1_media_buy_list_creative_formats_response_json.py +++ b/src/core/schemas_generated/_schemas_v1_media_buy_list_creative_formats_response_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_media-buy_list-creative-formats-response_json.json -# source_etag: W/"68ff4038-7e9" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 05c7861c68f1 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_media_buy_list_creatives_request_json.py b/src/core/schemas_generated/_schemas_v1_media_buy_list_creatives_request_json.py index c27c09720..c826f6191 100644 --- a/src/core/schemas_generated/_schemas_v1_media_buy_list_creatives_request_json.py +++ b/src/core/schemas_generated/_schemas_v1_media_buy_list_creatives_request_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_media-buy_list-creatives-request_json.json -# source_etag: W/"68ff4038-199d" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 0acff1c62635 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_media_buy_list_creatives_response_json.py b/src/core/schemas_generated/_schemas_v1_media_buy_list_creatives_response_json.py index 93de21879..51838ea51 100644 --- a/src/core/schemas_generated/_schemas_v1_media_buy_list_creatives_response_json.py +++ b/src/core/schemas_generated/_schemas_v1_media_buy_list_creatives_response_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_media-buy_list-creatives-response_json.json -# source_etag: W/"68ff4038-3645" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 979530b24e80 from __future__ import annotations @@ -636,7 +635,7 @@ class Assets52(BaseModel): description: Annotated[str | None, Field(description="Description of what this URL points to")] = None -class Status8(Enum): +class Status9(Enum): active = "active" paused = "paused" ended = "ended" @@ -649,7 +648,7 @@ class AssignedPackage(BaseModel): package_id: Annotated[str, Field(description="Package identifier")] package_name: Annotated[str | None, Field(description="Human-readable package name")] = None assigned_date: Annotated[AwareDatetime, Field(description="When this assignment was created")] - status: Annotated[Status8, Field(description="Status of this specific assignment")] + status: Annotated[Status9, Field(description="Status of this specific assignment")] class Assignments(BaseModel): diff --git a/src/core/schemas_generated/_schemas_v1_media_buy_package_request_json.py b/src/core/schemas_generated/_schemas_v1_media_buy_package_request_json.py index 0b14080d1..c5e897a3a 100644 --- a/src/core/schemas_generated/_schemas_v1_media_buy_package_request_json.py +++ b/src/core/schemas_generated/_schemas_v1_media_buy_package_request_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_media-buy_package-request_json.json -# source_etag: W/"68f98531-84b" -# source_last_modified: Thu, 23 Oct 2025 01:30:25 GMT +# schema_hash: a852521ad24f from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_media_buy_provide_performance_feedback_request_json.py b/src/core/schemas_generated/_schemas_v1_media_buy_provide_performance_feedback_request_json.py index fbee932df..93182dae5 100644 --- a/src/core/schemas_generated/_schemas_v1_media_buy_provide_performance_feedback_request_json.py +++ b/src/core/schemas_generated/_schemas_v1_media_buy_provide_performance_feedback_request_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_media-buy_provide-performance-feedback-request_json.json -# source_etag: W/"68ff4038-917" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 595e47b78cd8 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_media_buy_provide_performance_feedback_response_json.py b/src/core/schemas_generated/_schemas_v1_media_buy_provide_performance_feedback_response_json.py index 45549e64e..3c7967341 100644 --- a/src/core/schemas_generated/_schemas_v1_media_buy_provide_performance_feedback_response_json.py +++ b/src/core/schemas_generated/_schemas_v1_media_buy_provide_performance_feedback_response_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_media-buy_provide-performance-feedback-response_json.json -# source_etag: W/"68ff4038-2e1" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: b89b55cfcd76 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_media_buy_sync_creatives_request_json.py b/src/core/schemas_generated/_schemas_v1_media_buy_sync_creatives_request_json.py index e7496a157..068ad2f92 100644 --- a/src/core/schemas_generated/_schemas_v1_media_buy_sync_creatives_request_json.py +++ b/src/core/schemas_generated/_schemas_v1_media_buy_sync_creatives_request_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_media-buy_sync-creatives-request_json.json -# source_etag: W/"68ff4038-1050" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 3429eb65ad7c from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_media_buy_sync_creatives_response_json.py b/src/core/schemas_generated/_schemas_v1_media_buy_sync_creatives_response_json.py index de7355be2..2b3f5cb00 100644 --- a/src/core/schemas_generated/_schemas_v1_media_buy_sync_creatives_response_json.py +++ b/src/core/schemas_generated/_schemas_v1_media_buy_sync_creatives_response_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_media-buy_sync-creatives-response_json.json -# source_etag: W/"68ff4038-c4b" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 5ee34eb70b72 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_media_buy_update_media_buy_request_json.py b/src/core/schemas_generated/_schemas_v1_media_buy_update_media_buy_request_json.py index 500da43d9..8c7dc271e 100644 --- a/src/core/schemas_generated/_schemas_v1_media_buy_update_media_buy_request_json.py +++ b/src/core/schemas_generated/_schemas_v1_media_buy_update_media_buy_request_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_media-buy_update-media-buy-request_json.json -# source_etag: W/"68ff4038-b99" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 4b9a16e04b63 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_media_buy_update_media_buy_response_json.py b/src/core/schemas_generated/_schemas_v1_media_buy_update_media_buy_response_json.py index 4a3dc3411..379fb52cd 100644 --- a/src/core/schemas_generated/_schemas_v1_media_buy_update_media_buy_response_json.py +++ b/src/core/schemas_generated/_schemas_v1_media_buy_update_media_buy_response_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_media-buy_update-media-buy-response_json.json -# source_etag: W/"68ff4038-640" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 67f2ddbdc522 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_pricing_options_cpc_option_json.py b/src/core/schemas_generated/_schemas_v1_pricing_options_cpc_option_json.py index 2299d87d0..99b60324e 100644 --- a/src/core/schemas_generated/_schemas_v1_pricing_options_cpc_option_json.py +++ b/src/core/schemas_generated/_schemas_v1_pricing_options_cpc_option_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_pricing-options_cpc-option_json.json -# source_etag: W/"68f98531-48e" -# source_last_modified: Thu, 23 Oct 2025 01:30:25 GMT +# schema_hash: 69e74389c214 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_pricing_options_cpcv_option_json.py b/src/core/schemas_generated/_schemas_v1_pricing_options_cpcv_option_json.py index 045f18ff5..0f2bc9f8f 100644 --- a/src/core/schemas_generated/_schemas_v1_pricing_options_cpcv_option_json.py +++ b/src/core/schemas_generated/_schemas_v1_pricing_options_cpcv_option_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_pricing-options_cpcv-option_json.json -# source_etag: W/"68f98531-4b7" -# source_last_modified: Thu, 23 Oct 2025 01:30:25 GMT +# schema_hash: be6f8a72e349 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_pricing_options_cpm_auction_option_json.py b/src/core/schemas_generated/_schemas_v1_pricing_options_cpm_auction_option_json.py index 054be3754..00b35386e 100644 --- a/src/core/schemas_generated/_schemas_v1_pricing_options_cpm_auction_option_json.py +++ b/src/core/schemas_generated/_schemas_v1_pricing_options_cpm_auction_option_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_pricing-options_cpm-auction-option_json.json -# source_etag: W/"68f98531-7e9" -# source_last_modified: Thu, 23 Oct 2025 01:30:25 GMT +# schema_hash: 2a90cec4fa9e from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_pricing_options_cpm_fixed_option_json.py b/src/core/schemas_generated/_schemas_v1_pricing_options_cpm_fixed_option_json.py index c4f6f792c..1d49a0437 100644 --- a/src/core/schemas_generated/_schemas_v1_pricing_options_cpm_fixed_option_json.py +++ b/src/core/schemas_generated/_schemas_v1_pricing_options_cpm_fixed_option_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_pricing-options_cpm-fixed-option_json.json -# source_etag: W/"68f98531-4d9" -# source_last_modified: Thu, 23 Oct 2025 01:30:25 GMT +# schema_hash: 26047b358b75 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_pricing_options_cpp_option_json.py b/src/core/schemas_generated/_schemas_v1_pricing_options_cpp_option_json.py index f3cda352d..369dbf80a 100644 --- a/src/core/schemas_generated/_schemas_v1_pricing_options_cpp_option_json.py +++ b/src/core/schemas_generated/_schemas_v1_pricing_options_cpp_option_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_pricing-options_cpp-option_json.json -# source_etag: W/"68f98531-7b8" -# source_last_modified: Thu, 23 Oct 2025 01:30:25 GMT +# schema_hash: 4b221562364f from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_pricing_options_cpv_option_json.py b/src/core/schemas_generated/_schemas_v1_pricing_options_cpv_option_json.py index f3c44029b..91fdb4137 100644 --- a/src/core/schemas_generated/_schemas_v1_pricing_options_cpv_option_json.py +++ b/src/core/schemas_generated/_schemas_v1_pricing_options_cpv_option_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_pricing-options_cpv-option_json.json -# source_etag: W/"68f98531-8c4" -# source_last_modified: Thu, 23 Oct 2025 01:30:25 GMT +# schema_hash: e5eeac0e5ed5 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_pricing_options_flat_rate_option_json.py b/src/core/schemas_generated/_schemas_v1_pricing_options_flat_rate_option_json.py index 3f1c9956e..6d571b87a 100644 --- a/src/core/schemas_generated/_schemas_v1_pricing_options_flat_rate_option_json.py +++ b/src/core/schemas_generated/_schemas_v1_pricing_options_flat_rate_option_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_pricing-options_flat-rate-option_json.json -# source_etag: W/"68f98531-b7c" -# source_last_modified: Thu, 23 Oct 2025 01:30:25 GMT +# schema_hash: f51d1d178393 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_pricing_options_vcpm_auction_option_json.py b/src/core/schemas_generated/_schemas_v1_pricing_options_vcpm_auction_option_json.py index 0e63ca9cb..543063d0e 100644 --- a/src/core/schemas_generated/_schemas_v1_pricing_options_vcpm_auction_option_json.py +++ b/src/core/schemas_generated/_schemas_v1_pricing_options_vcpm_auction_option_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_pricing-options_vcpm-auction-option_json.json -# source_etag: W/"68f98531-851" -# source_last_modified: Thu, 23 Oct 2025 01:30:25 GMT +# schema_hash: a729e2c3356c from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_pricing_options_vcpm_fixed_option_json.py b/src/core/schemas_generated/_schemas_v1_pricing_options_vcpm_fixed_option_json.py index f23c1b5c6..2342d86d3 100644 --- a/src/core/schemas_generated/_schemas_v1_pricing_options_vcpm_fixed_option_json.py +++ b/src/core/schemas_generated/_schemas_v1_pricing_options_vcpm_fixed_option_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_pricing-options_vcpm-fixed-option_json.json -# source_etag: W/"68f98531-55e" -# source_last_modified: Thu, 23 Oct 2025 01:30:25 GMT +# schema_hash: 08f5038f2050 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_signals_activate_signal_request_json.py b/src/core/schemas_generated/_schemas_v1_signals_activate_signal_request_json.py index 047105f90..eb8b2cc19 100644 --- a/src/core/schemas_generated/_schemas_v1_signals_activate_signal_request_json.py +++ b/src/core/schemas_generated/_schemas_v1_signals_activate_signal_request_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_signals_activate-signal-request_json.json -# source_etag: W/"68ff4038-305" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 5e0a963cf75a from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_signals_activate_signal_response_json.py b/src/core/schemas_generated/_schemas_v1_signals_activate_signal_response_json.py index 3bfb5c732..beb0b81e1 100644 --- a/src/core/schemas_generated/_schemas_v1_signals_activate_signal_response_json.py +++ b/src/core/schemas_generated/_schemas_v1_signals_activate_signal_response_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_signals_activate-signal-response_json.json -# source_etag: W/"68ff4038-3db" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: e30e12f5784c from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_signals_get_signals_request_json.py b/src/core/schemas_generated/_schemas_v1_signals_get_signals_request_json.py index fc6e09714..6ff0eaf8c 100644 --- a/src/core/schemas_generated/_schemas_v1_signals_get_signals_request_json.py +++ b/src/core/schemas_generated/_schemas_v1_signals_get_signals_request_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_signals_get-signals-request_json.json -# source_etag: W/"68ff4038-c03" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 8ac19d9450e0 from __future__ import annotations diff --git a/src/core/schemas_generated/_schemas_v1_signals_get_signals_response_json.py b/src/core/schemas_generated/_schemas_v1_signals_get_signals_response_json.py index 99bd42413..c6197e52f 100644 --- a/src/core/schemas_generated/_schemas_v1_signals_get_signals_response_json.py +++ b/src/core/schemas_generated/_schemas_v1_signals_get_signals_response_json.py @@ -1,7 +1,6 @@ # generated by datamodel-codegen: # filename: _schemas_v1_signals_get-signals-response_json.json -# source_etag: W/"68ff4038-1018" -# source_last_modified: Mon, 27 Oct 2025 09:49:44 GMT +# schema_hash: 0918878b2b42 from __future__ import annotations diff --git a/tests/e2e/adcp_schema_validator.py b/tests/e2e/adcp_schema_validator.py index 73cebde90..56d5929d5 100644 --- a/tests/e2e/adcp_schema_validator.py +++ b/tests/e2e/adcp_schema_validator.py @@ -125,6 +125,9 @@ async def _download_schema_index(self) -> dict[str, Any]: Uses conditional GET with If-None-Match header to avoid re-downloading unchanged schemas. Falls back to cached version if server unavailable. + + Now includes content hash verification to prevent meta file updates when + only weak ETags change but content is identical. """ cache_path = self.cache_dir / "index.json" meta_path = self._get_cache_metadata_path(cache_path) @@ -139,13 +142,15 @@ async def _download_schema_index(self) -> dict[str, Any]: raise SchemaDownloadError(f"Offline mode enabled but cached index is invalid: {cache_path}") raise SchemaDownloadError("Offline mode enabled but no valid cached index found") - # Load cached metadata (ETag, Last-Modified) + # Load cached metadata (ETag, Last-Modified, content hash) cached_etag = None + cached_content_hash = None if meta_path.exists(): try: with open(meta_path) as f: metadata = json.load(f) cached_etag = metadata.get("etag") + cached_content_hash = metadata.get("content_hash") except (json.JSONDecodeError, OSError): pass @@ -167,6 +172,21 @@ async def _download_schema_index(self) -> dict[str, Any]: response.raise_for_status() index_data = response.json() + # Compute content hash to detect actual changes (weak ETags can change without content changes) + content_str = json.dumps(index_data, sort_keys=True) + content_hash = hashlib.sha256(content_str.encode()).hexdigest() + + # Check if content actually changed + if cached_content_hash and content_hash == cached_content_hash: + # Content is identical despite new ETag (weak ETag changed, content didn't) + # Return cached data without updating files to avoid git noise + if cache_path.exists(): + with open(cache_path) as f: + return json.load(f) + # If cache missing somehow, fall through to save + + # Content changed (or first download) - update cache and metadata + # Delete old metadata first (prevents stale ETag issues) if meta_path.exists(): meta_path.unlink() @@ -176,11 +196,12 @@ async def _download_schema_index(self) -> dict[str, Any]: json.dump(index_data, f, indent=2) f.write("\n") # Add trailing newline for pre-commit compatibility - # Save new metadata + # Save new metadata with content hash metadata = { "etag": response.headers.get("etag"), "last-modified": response.headers.get("last-modified"), "downloaded_at": datetime.now().isoformat(), + "content_hash": content_hash, } with open(meta_path, "w") as f: json.dump(metadata, f, indent=2) @@ -203,6 +224,9 @@ async def _download_schema(self, schema_ref: str) -> dict[str, Any]: Uses conditional GET with If-None-Match header to avoid re-downloading unchanged schemas. Falls back to cached version if server unavailable. + + Now includes content hash verification to prevent meta file updates when + only weak ETags change but content is identical. """ cache_path = self._get_cache_path(schema_ref) meta_path = self._get_cache_metadata_path(cache_path) @@ -217,13 +241,15 @@ async def _download_schema(self, schema_ref: str) -> dict[str, Any]: raise SchemaDownloadError(f"Offline mode enabled but cached schema is invalid: {cache_path}") raise SchemaDownloadError(f"Offline mode enabled but no valid cached schema: {schema_ref}") - # Load cached metadata (ETag, Last-Modified) + # Load cached metadata (ETag, Last-Modified, content hash) cached_etag = None + cached_content_hash = None if meta_path.exists(): try: with open(meta_path) as f: metadata = json.load(f) cached_etag = metadata.get("etag") + cached_content_hash = metadata.get("content_hash") except (json.JSONDecodeError, OSError): pass @@ -251,6 +277,21 @@ async def _download_schema(self, schema_ref: str) -> dict[str, Any]: response.raise_for_status() schema_data = response.json() + # Compute content hash to detect actual changes (weak ETags can change without content changes) + content_str = json.dumps(schema_data, sort_keys=True) + content_hash = hashlib.sha256(content_str.encode()).hexdigest() + + # Check if content actually changed + if cached_content_hash and content_hash == cached_content_hash: + # Content is identical despite new ETag (weak ETag changed, content didn't) + # Return cached data without updating files to avoid git noise + if cache_path.exists(): + with open(cache_path) as f: + return json.load(f) + # If cache missing somehow, fall through to save + + # Content changed (or first download) - update cache and metadata + # Delete old metadata first (prevents stale ETag issues) if meta_path.exists(): meta_path.unlink() @@ -260,12 +301,13 @@ async def _download_schema(self, schema_ref: str) -> dict[str, Any]: json.dump(schema_data, f, indent=2) f.write("\n") # Add trailing newline for pre-commit compatibility - # Save new metadata + # Save new metadata with content hash metadata = { "etag": response.headers.get("etag"), "last-modified": response.headers.get("last-modified"), "downloaded_at": datetime.now().isoformat(), "schema_ref": schema_ref, + "content_hash": content_hash, } with open(meta_path, "w") as f: json.dump(metadata, f, indent=2)