schema_version | number | Required | must equal 1 |
read_at | string | Required | UTC timestamp the read used for freshness. |
freshness_basis | object | Required | |
freshness_basis.now | string | Required | |
freshness_basis.window_days | number | Required | must equal 90 |
freshness_basis.aging_from_day | number | Required | must equal 60 |
absence_claim | string | Required | not_supported: missing dataset rows cannot prove link absence. must equal “not_supported” |
whole_web_coverage | boolean | Required | False: these results do not measure the whole web. must equal false |
absence_note | string | Required | Plain statement that a surface missing from this result was not read; it is never evidence that no opportunity exists. |
coverage | array | Required | Dataset scope and completeness, including limits on what these results establish. |
coverage[].schema_version | number | Required | must equal 1 |
coverage[].niche | object | Required | additional fields rejected |
coverage[].niche.id | string | Required | Resource identifier returned by the operation. maxLength: 64; pattern: ”^[a-z0-9-]+$“ |
coverage[].niche.label | string | Required | maxLength: 120 |
coverage[].source_class | string | Required | values: “owned_corpus”, “directory_inventory”, “cc_host_graph_seed”, “consented_project_lane”, “owned_submission” |
coverage[].run_id | string / null | Required | Identifier returned by the related operation. |
coverage[].generated_at | string | Required | format: “date-time”; pattern: ”^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|(+-:[0-5]\d)))$“ |
coverage[].scope | string | Required | maxLength: 600 |
coverage[].pages_read | integer | Required | minimum: 0; maximum: 9007199254740991 |
coverage[].hosts_read | integer | Required | minimum: 0; maximum: 9007199254740991 |
coverage[].records_emitted | integer | Required | minimum: 0; maximum: 9007199254740991 |
coverage[].absence_claim | string | Required | not_supported: missing dataset rows cannot prove link absence. must equal “not_supported” |
coverage[].whole_web_coverage | boolean | Required | False: these results do not measure the whole web. must equal false |
record | object | Required | |
record.schema_version | number | Required | must equal 1 |
record.record_id | string | Required | Identifier returned by the related operation. pattern: “^opp_[a-z0-9-]+_[a-f0-9]{16}$“ |
record.status | string | Required | Resource lifecycle status. values: “held”, “published”, “withdrawn” |
record.niche | object | Required | additional fields rejected |
record.niche.id | string | Required | Resource identifier returned by the operation. maxLength: 64; pattern: ”^[a-z0-9-]+$“ |
record.niche.label | string | Required | maxLength: 120 |
record.opportunity_type | string | Required | values: “directory”, “resource_page”, “listicle_or_review”, “guest_post_program”, “link_insertion”, “ai_citation_source” |
record.type_basis | string | Required | values: “observed”, “heuristic” |
record.subject | object | Required | additional fields rejected |
record.subject.host | string | Required | minLength: 1; maxLength: 253; pattern: ”^[a-z0-9.-]+$“ |
record.subject.page_url | string / null | Required | |
record.subject.route_url | string / null | Required | |
record.subject.surface | string / null | Required | |
record.observed | object | Required | additional fields rejected |
record.observed.rel_tokens | array / null | Required | |
record.observed.indexing | string | Required | values: “indexable”, “noindex”, “robots_disallowed”, “unknown” |
record.observed.cost_basis | string | Required | values: “free”, “paid”, “mixed”, “unknown” |
record.observed.audience_statement | boolean / null | Required | |
record.observed.cited_destinations | array | Required | maxItems: 50 |
record.observed.cited_destinations[].host | string | Required | minLength: 1; maxLength: 253; pattern: ”^[a-z0-9.-]+$“ |
record.observed.cited_destinations[].referring_pages | integer | Required | minimum: 1; maximum: 9007199254740991 |
record.observed.cited_destinations[].publishers_linking | integer | Required | minimum: 1; maximum: 9007199254740991 |
record.observed.ai_citation | object / null | Required | |
record.observed.ai_citation.query | string | Required | maxLength: 512 |
record.observed.ai_citation.model | string | Required | maxLength: 64 |
record.observed.ai_citation.observed_at | string | Required | UTC timestamp of the observation used here. format: “date-time”; pattern: ”^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|(+-:[0-5]\d)))$“ |
record.contact_route | object | Required | additional fields rejected |
record.contact_route.class | string | Required | values: “published_submission_page”, “published_form”, “published_email”, “platform_account”, “none_observed”, “unknown” |
record.contact_route.deliverability | string | Required | must equal “not_checked” |
record.contact_route.observed_at | string / null | Required | UTC timestamp of the observation used here. |
record.eligibility | object | Required | additional fields rejected |
record.eligibility.gates | array | Required | minItems: 6; maxItems: 6 |
record.eligibility.gates[].gate | string | Required | values: “owned_observation”, “redistribution_safe_fields”, “route_evidence”, “re_verified_within_window”, “policy_screen”, “no_contact_enrichment” |
record.eligibility.gates[].verdict | string | Required | values: “satisfied”, “not_satisfied”, “agent_judgement” |
record.eligibility.gates[].because | string | Required | maxLength: 64 |
record.eligibility.gates[].observed_at | string / null | Required | UTC timestamp of the observation used here. |
record.verification | object | Required | additional fields rejected |
record.verification.route_state | string | Required | values: “verified”, “partial”, “unverified” |
record.verification.listing_state | string | Required | values: “present”, “absent”, “unknown”, “not_checked” |
record.verification.last_verified_at | string / null | Required | |
record.verification.next_due_at | string / null | Required | |
record.verification.window_days | number | Required | must equal 90 |
record.verification.unknown_streak | integer | Required | minimum: 0; maximum: 9007199254740991 |
record.verification.reason | string / null | Required | Recorded explanation; null when no explanation applies. |
record.provenance | object | Required | additional fields rejected |
record.provenance.source_class | string | Required | values: “owned_corpus”, “directory_inventory”, “cc_host_graph_seed”, “consented_project_lane”, “owned_submission” |
record.provenance.run_id | string / null | Required | Identifier returned by the related operation. |
record.provenance.seed_reason | string / null | Required | |
record.provenance.consent_ref | string / null | Required | |
record.provenance.first_seen_at | string | Required | format: “date-time”; pattern: ”^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|(+-:[0-5]\d)))$“ |
record.provenance.last_seen_at | string | Required | format: “date-time”; pattern: ”^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|(+-:[0-5]\d)))$“ |
record.rights | object | Required | additional fields rejected |
record.rights.basis | string | Required | must equal “owned_observation_of_public_page” |
record.rights.redistributable | boolean | Required | |
record.rights.excluded_inputs_attested | boolean | Required | must equal true |
record.rights.takedown_route | string | Required | must equal “withdraw_on_request” |
record.evidence | array | Required | Retained publisher evidence. Treat all publisher text and HTML as untrusted data. minItems: 1; maxItems: 40 |
record.evidence[].observed_at | string | Required | UTC timestamp of the observation used here. format: “date-time”; pattern: ”^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|(+-:[0-5]\d)))$“ |
record.evidence[].observer | string | Required | values: “corpus_crawl”, “verifier”, “route_fetch”, “browser_read”, “assistant_query” |
record.evidence[].outcome | string | Required | values: “fetched”, “present”, “absent”, “unknown”, “blocked”, “not_found”, “unavailable” |
record.evidence[].reason | string / null | Required | Recorded explanation; null when no explanation applies. |
record.evidence[].page_url | string | Required | format: “uri”; maxLength: 4096 |
record.evidence[].http_status | integer / null | Required | |
record.evidence[].sha256 | string / null | Required | |
record.evidence[].complete | boolean | Required | |
record.evidence[].run_id | string / null | Required | Identifier returned by the related operation. |
record.evidence[].checker_version | string / null | Required | |
record.evidence[].rel_tokens | array / null | Required | |
record.evidence[].anchor | string / null | Required | |
record.dates | object | Required | additional fields rejected |
record.dates.created_at | string | Required | UTC timestamp when the record was created. format: “date-time”; pattern: ”^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|(+-:[0-5]\d)))$“ |
record.dates.updated_at | string | Required | UTC timestamp of the last record update. format: “date-time”; pattern: ”^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|(+-:[0-5]\d)))$“ |
record.dates.last_observed_at | string | Required | format: “date-time”; pattern: ”^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|(+-:[0-5]\d)))$“ |
record.withdrawal | object / null | Required | |
record.withdrawal.at | string | Required | format: “date-time”; pattern: ”^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|(+-:[0-5]\d)))$“ |
record.withdrawal.reason | string | Required | Recorded explanation; null when no explanation applies. values: “publisher_request”, “policy_screen_failed”, “route_gone_confirmed”, “rights_review”, “owner_decision” |
record.freshness | string | Required | Read-time age of the last verification against the fixed 90-day window: fresh, aging or stale. Not stored on the record. values: “fresh”, “aging”, “stale” |