Skip to main content

validate_property_delivery

Validates delivery records against a property list to determine compliance. Answers two questions:
  1. Property compliance: Did my impressions land on properties in my list?
  2. Supply path authorization: Was the sales agent authorized to sell that inventory?

Use Cases

  • Post-campaign validation: Verify that impressions were delivered to compliant properties
  • Supply path verification: Confirm sales agents were authorized by publishers
  • Real-time monitoring: Check compliance rate during campaign execution
  • Audit trails: Generate compliance reports for regulatory or brand safety reviews

Request

Parameters

Response

Response Fields

Summary Fields

The summary provides raw counts - consumers calculate rates as needed:

Validation Statuses

Understanding not_covered vs unidentified

These two statuses distinguish different types of “unknown” scenarios: not_covered - The governance agent recognized the identifier (e.g., it’s a valid domain) but doesn’t have data for that specific property. This happens when:
  • A property is too new to be in the agent’s database
  • The property exists but hasn’t been evaluated yet
  • The agent’s coverage doesn’t include that property category
unidentified - The governance agent couldn’t recognize the identifier at all. This happens when:
  • Client-side detection failed to capture the property
  • The identifier type isn’t supported (e.g., agent handles domains but received an app ID)
  • The identifier value is malformed or invalid
Both statuses should be excluded from compliance rate calculations - you cannot penalize for detection or coverage gaps.

Optional Aggregate Metrics

Governance agents can optionally return computed metrics in the aggregate field:
The aggregate field is optional and agent-specific. Consumers should not assume a particular format - always check methodology_url for interpretation.

Calculating Your Own Rates

The response always includes raw counts. Calculate rates as needed:
In the example above:
  • Compliant impressions: 103
  • Non-compliant impressions: 47
  • not_covered + unidentified impressions: 50 (excluded)
  • Compliance rate: 103 / (200 - 50) = 103 / 150 = 68.7%

Feature Results

Every entry in features[] carries a feature_id and a status. Data features come from the governance agent’s feature catalog (discovered via get_adcp_capabilities). Record-level structural checks use reserved namespaces so they sit in the same identity space as data features.

Reserved feature_id prefixes

Governance agents MAY add new checks within these namespaces and publish them in their feature catalog.

Feature-Level Failures

When a property fails a specific feature requirement, the entry references the feature by id. The response carries the verdict and a directional explanation. When the caller authored the requirement (e.g., feature_requirements on a property list), the evaluator MAY echo the requirement back to enable fix-and-retry loops without re-reading the list definition.
Oracle pattern: the response tells you what failed (feature_id) and where to find the rule (policy_id, optional). Evaluator internals (confidence thresholds, inference logic) stay hidden.

Supply Path Authorization

When sales_agent_url is provided in delivery records, the governance agent validates that the sales agent is authorized to sell the property by checking the publisher’s adagents.json.

Request with Authorization

Response with Authorization

When authorization is validated, each result includes an authorization field:

Authorization Statuses

Authorization Violation Codes

Two Independent Checks

Property compliance and authorization are independent checks. A record can be: Both checks use the same “unknown excludes from rate” pattern - you cannot penalize for detection gaps.

Best Practices

Batch Validation

For large-scale validation, batch records up to the 10,000 limit:

Sampling Strategy

For real-time monitoring during campaign execution, validate a statistical sample rather than all records:

Handling Unknown Records

Track unknown rates separately to identify detection gaps: