validate_property_delivery
Validates delivery records against a property list to determine compliance. Answers two questions:- Property compliance: Did my impressions land on properties in my list?
- 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
| Parameter | Type | Required | Description |
|---|---|---|---|
list_id | string | Yes | ID of the property list to validate against |
records | array | Yes | Delivery records to validate (1-10,000 records) |
records[].identifier | object | Yes | Property identifier (type and value) |
records[].impressions | integer | Yes | Number of impressions delivered |
records[].record_id | string | No | Client-provided ID for correlation |
records[].sales_agent_url | string | No | Sales agent URL to validate authorization against adagents.json |
include_compliant | boolean | No | Include compliant records in results (default: false) |
Response
Response Fields
| Field | Type | Description |
|---|---|---|
list_id | string | ID of the property list validated against |
summary | object | Raw counts for property compliance validation |
aggregate | object | Optional computed metrics from the governance agent |
results | array | Per-record validation results |
validated_at | datetime | When validation was performed |
list_resolved_at | datetime | Resolution timestamp of the property list used |
Summary Fields
The summary provides raw counts - consumers calculate rates as needed:| Field | Description |
|---|---|
total_records | Total records validated |
total_impressions | Total impressions across all records |
compliant_records / compliant_impressions | Records/impressions in the property list |
non_compliant_records / non_compliant_impressions | Records/impressions NOT in the property list |
not_covered_records / not_covered_impressions | Identifier recognized but no data available |
unidentified_records / unidentified_impressions | Identifier type not resolvable |
Validation Statuses
| Status | Meaning |
|---|---|
compliant | Identifier is in the resolved property list |
non_compliant | Identifier is NOT in the resolved property list |
not_covered | Identifier recognized but governance agent has no data for it |
unidentified | Identifier type not resolvable by this agent |
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
Optional Aggregate Metrics
Governance agents can optionally return computed metrics in theaggregate field:
| Field | Description |
|---|---|
score | Numeric score (scale is agent-defined, typically 0-100) |
grade | Letter grade or category (e.g., “A+”, “B-”, “Gold”) |
label | Human-readable summary (e.g., “85% compliant”) |
methodology_url | URL explaining how the aggregate was calculated |
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:- 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 infeatures[] 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
| Prefix | Scope | Canonical feature_ids |
|---|---|---|
record: | Record-level structural checks | record:list_membership, record:excluded, record:country_mismatch, record:channel_mismatch |
delivery: | Delivery-path checks | delivery:seller_authorization, delivery:click_url_presence |
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.
Supply Path Authorization
Whensales_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 anauthorization field:
Authorization Statuses
| Status | Meaning | Included in authorization_rate? |
|---|---|---|
authorized | Sales agent is listed in publisher’s adagents.json | Yes (numerator) |
unauthorized | Sales agent is NOT listed in publisher’s adagents.json | Yes (denominator only) |
unknown | Could not fetch or parse adagents.json | No (excluded) |
Authorization Violation Codes
| Code | Description |
|---|---|
agent_not_authorized | Sales agent URL not found in publisher’s authorized_agents list |
adagents_not_found | Publisher’s adagents.json could not be fetched (404, timeout, etc.) |
adagents_invalid | Publisher’s adagents.json exists but is malformed |
property_not_declared | Property identifier not declared in publisher’s adagents.json |
Two Independent Checks
Property compliance and authorization are independent checks. A record can be:| Property Status | Authorization Status | Meaning |
|---|---|---|
| compliant | authorized | Fully valid - property in list, sold by authorized agent |
| compliant | unauthorized | Property is approved but sold by unauthorized reseller |
| non_compliant | authorized | Authorized agent sold property outside your list |
| non_compliant | unauthorized | Neither property nor agent validated |
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:Related Tasks
- create_property_list - Create the list to validate against
- get_property_list - Retrieve current list membership
- get_adcp_capabilities - Discover available filter features