{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "/schemas/3.0.0/adagents.json",
  "title": "AdCP Agents Authorization",
  "description": "Declaration of authorized agents for advertising inventory and data signals. Hosted at /.well-known/adagents.json on publisher domains (for properties) or data provider domains (for signals). Can either contain the full structure inline or reference an authoritative URL.",
  "oneOf": [
    {
      "type": "object",
      "description": "URL reference variant - points to the authoritative location of the adagents.json file",
      "properties": {
        "$schema": {
          "type": "string",
          "description": "JSON Schema identifier for this adagents.json file"
        },
        "authoritative_location": {
          "type": "string",
          "format": "uri",
          "pattern": "^https://",
          "description": "HTTPS URL of the authoritative adagents.json file. When present, this file is a reference and the authoritative location contains the actual agent authorization data. Because one deploy can change authorization across every publisher in the network, validators MUST cap response size, refuse redirects on the fetch, enforce short timeouts, and serve the previously cached file on transient 5xx. See docs/governance/property/managed-networks#security-considerations."
        },
        "last_updated": {
          "type": "string",
          "format": "date-time",
          "description": "ISO 8601 timestamp indicating when this reference was last updated"
        }
      },
      "required": [
        "authoritative_location"
      ],
      "additionalProperties": true
    },
    {
      "type": "object",
      "description": "Inline structure variant - contains full agent authorization data",
      "properties": {
        "$schema": {
          "type": "string",
          "description": "JSON Schema identifier for this adagents.json file"
        },
        "contact": {
          "type": "object",
          "description": "Contact information for the entity managing this adagents.json file (may be publisher or third-party operator)",
          "properties": {
            "name": {
              "type": "string",
              "description": "Name of the entity managing this file (e.g., 'Meta Advertising Operations', 'Clear Channel Digital')",
              "minLength": 1,
              "maxLength": 255
            },
            "email": {
              "type": "string",
              "format": "email",
              "description": "Contact email for questions or issues with this authorization file",
              "minLength": 1,
              "maxLength": 255
            },
            "domain": {
              "type": "string",
              "description": "Primary domain of the entity managing this file",
              "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
            },
            "seller_id": {
              "type": "string",
              "description": "Seller ID from IAB Tech Lab sellers.json (if applicable)",
              "minLength": 1,
              "maxLength": 255
            },
            "tag_id": {
              "type": "string",
              "description": "TAG Certified Against Fraud ID for verification (if applicable)",
              "minLength": 1,
              "maxLength": 100
            },
            "privacy_policy_url": {
              "type": "string",
              "format": "uri",
              "description": "URL to the entity's privacy policy. Used for consumer consent flows when interacting with this sales agent."
            }
          },
          "required": [
            "name"
          ],
          "additionalProperties": true
        },
        "properties": {
          "type": "array",
          "description": "Array of all properties covered by this adagents.json file. Defines the canonical property list that authorized agents reference.",
          "items": {
            "$ref": "/schemas/3.0.0/core/property.json"
          },
          "minItems": 1
        },
        "collections": {
          "type": "array",
          "description": "Collections produced or distributed by this publisher. Declares the content programs whose inventory is sold through authorized agents. Products in get_products responses reference these collections by collection_id.",
          "items": {
            "$ref": "/schemas/3.0.0/core/collection.json"
          }
        },
        "placements": {
          "type": "array",
          "description": "Canonical placement definitions for properties in this file. Products SHOULD reuse these placement_id values when exposing inventory in get_products, and authorized agents can scope authorization to these placement IDs.",
          "items": {
            "$ref": "/schemas/3.0.0/core/placement-definition.json"
          },
          "minItems": 1
        },
        "tags": {
          "type": "object",
          "description": "Metadata for each tag referenced by properties. Provides human-readable context for property tag values.",
          "additionalProperties": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "description": "Human-readable name for this tag"
              },
              "description": {
                "type": "string",
                "description": "Description of what this tag represents"
              }
            },
            "required": [
              "name",
              "description"
            ],
            "additionalProperties": true
          }
        },
        "placement_tags": {
          "type": "object",
          "description": "Metadata for each tag referenced by placements. Provides human-readable context for publisher-defined placement tag values used in grouping and authorization.",
          "additionalProperties": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "description": "Human-readable name for this placement tag"
              },
              "description": {
                "type": "string",
                "description": "Description of what this placement tag represents"
              }
            },
            "required": [
              "name",
              "description"
            ],
            "additionalProperties": true
          }
        },
        "authorized_agents": {
          "type": "array",
          "description": "Array of sales agents authorized to make inventory from this file available to buyers. Authorization can be scoped to specific properties, collections, countries, and time windows, with optional delegation metadata indicating whether the path is direct, delegated, or network-mediated.",
          "items": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "The authorized agent's API endpoint URL"
                  },
                  "authorized_for": {
                    "type": "string",
                    "description": "Human-readable description of what this agent is authorized to sell",
                    "minLength": 1,
                    "maxLength": 500
                  },
                  "authorization_type": {
                    "type": "string",
                    "const": "property_ids",
                    "description": "Discriminator indicating authorization by specific property IDs"
                  },
                  "property_ids": {
                    "type": "array",
                    "description": "Property IDs this agent is authorized for. Resolved against the top-level properties array in this file",
                    "items": {
                      "$ref": "/schemas/3.0.0/core/property-id.json"
                    },
                    "minItems": 1
                  },
                  "collections": {
                    "type": "array",
                    "description": "Optional collection constraints. When present, authorization only applies to inventory associated with these collections.",
                    "items": {
                      "$ref": "/schemas/3.0.0/core/collection-selector.json"
                    },
                    "minItems": 1
                  },
                  "placement_ids": {
                    "type": "array",
                    "description": "Optional placement constraints. When present, authorization only applies to these placement IDs from the top-level placements array in this file.",
                    "items": {
                      "type": "string"
                    },
                    "minItems": 1
                  },
                  "placement_tags": {
                    "type": "array",
                    "description": "Optional placement tag constraints. When present, authorization only applies to placements whose tags include any of these publisher-defined values.",
                    "items": {
                      "type": "string"
                    },
                    "minItems": 1,
                    "uniqueItems": true
                  },
                  "delegation_type": {
                    "type": "string",
                    "enum": ["direct", "delegated", "ad_network"],
                    "description": "Commercial relationship for this inventory path. 'direct' means the publisher treats this as a direct way to buy from them, even if a third party operates the software. 'delegated' means the agent is authorized to sell on the publisher's behalf. 'ad_network' means the inventory is sold as part of a network/package context rather than as the publisher's direct endpoint."
                  },
                  "exclusive": {
                    "type": "boolean",
                    "description": "Whether this agent is the publisher's sole authorized path for the scoped inventory slice. When false or absent, other authorized agents may also sell the same inventory."
                  },
                  "countries": {
                    "type": "array",
                    "description": "Optional ISO 3166-1 alpha-2 country codes limiting where this authorization applies. Omit for worldwide authorization.",
                    "items": {
                      "type": "string",
                      "pattern": "^[A-Z]{2}$"
                    },
                    "minItems": 1,
                    "uniqueItems": true
                  },
                  "effective_from": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Optional start time for this authorization window."
                  },
                  "effective_until": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Optional end time for this authorization window."
                  },
                  "signing_keys": {
                    "type": "array",
                    "description": "Optional publisher-attested public signing keys for this agent. Use these as the trust anchor for verifying signed agent responses instead of relying on key discovery from the agent domain alone.",
                    "items": {
                      "$ref": "/schemas/3.0.0/core/agent-signing-key.json"
                    },
                    "minItems": 1
                  },
                  "encryption_keys": {
                    "type": "array",
                    "description": "X25519 public keys for TMPX exposure token encryption. Each key identifies a cluster master that can decrypt TMPX tokens. Used with HPKE mode_base — read replicas encrypt with this public key, only the master can decrypt.",
                    "items": {
                      "$ref": "/schemas/3.0.0/core/agent-encryption-key.json"
                    },
                    "minItems": 1
                  }
                },
                "required": [
                  "url",
                  "authorized_for",
                  "authorization_type",
                  "property_ids"
                ],
                "additionalProperties": true
              },
              {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "The authorized agent's API endpoint URL"
                  },
                  "authorized_for": {
                    "type": "string",
                    "description": "Human-readable description of what this agent is authorized to sell",
                    "minLength": 1,
                    "maxLength": 500
                  },
                  "authorization_type": {
                    "type": "string",
                    "const": "property_tags",
                    "description": "Discriminator indicating authorization by property tags"
                  },
                  "property_tags": {
                    "type": "array",
                    "description": "Tags identifying which properties this agent is authorized for. Resolved against the top-level properties array in this file using tag matching",
                    "items": {
                      "$ref": "/schemas/3.0.0/core/property-tag.json"
                    },
                    "minItems": 1
                  },
                  "collections": {
                    "type": "array",
                    "description": "Optional collection constraints. When present, authorization only applies to inventory associated with these collections.",
                    "items": {
                      "$ref": "/schemas/3.0.0/core/collection-selector.json"
                    },
                    "minItems": 1
                  },
                  "placement_ids": {
                    "type": "array",
                    "description": "Optional placement constraints. When present, authorization only applies to these placement IDs from the top-level placements array in this file.",
                    "items": {
                      "type": "string"
                    },
                    "minItems": 1
                  },
                  "placement_tags": {
                    "type": "array",
                    "description": "Optional placement tag constraints. When present, authorization only applies to placements whose tags include any of these publisher-defined values.",
                    "items": {
                      "type": "string"
                    },
                    "minItems": 1,
                    "uniqueItems": true
                  },
                  "delegation_type": {
                    "type": "string",
                    "enum": ["direct", "delegated", "ad_network"],
                    "description": "Commercial relationship for this inventory path. 'direct' means the publisher treats this as a direct way to buy from them, even if a third party operates the software. 'delegated' means the agent is authorized to sell on the publisher's behalf. 'ad_network' means the inventory is sold as part of a network/package context rather than as the publisher's direct endpoint."
                  },
                  "exclusive": {
                    "type": "boolean",
                    "description": "Whether this agent is the publisher's sole authorized path for the scoped inventory slice. When false or absent, other authorized agents may also sell the same inventory."
                  },
                  "countries": {
                    "type": "array",
                    "description": "Optional ISO 3166-1 alpha-2 country codes limiting where this authorization applies. Omit for worldwide authorization.",
                    "items": {
                      "type": "string",
                      "pattern": "^[A-Z]{2}$"
                    },
                    "minItems": 1,
                    "uniqueItems": true
                  },
                  "effective_from": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Optional start time for this authorization window."
                  },
                  "effective_until": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Optional end time for this authorization window."
                  },
                  "signing_keys": {
                    "type": "array",
                    "description": "Optional publisher-attested public signing keys for this agent. Use these as the trust anchor for verifying signed agent responses instead of relying on key discovery from the agent domain alone.",
                    "items": {
                      "$ref": "/schemas/3.0.0/core/agent-signing-key.json"
                    },
                    "minItems": 1
                  },
                  "encryption_keys": {
                    "type": "array",
                    "description": "X25519 public keys for TMPX exposure token encryption. Each key identifies a cluster master that can decrypt TMPX tokens. Used with HPKE mode_base — read replicas encrypt with this public key, only the master can decrypt.",
                    "items": {
                      "$ref": "/schemas/3.0.0/core/agent-encryption-key.json"
                    },
                    "minItems": 1
                  }
                },
                "required": [
                  "url",
                  "authorized_for",
                  "authorization_type",
                  "property_tags"
                ],
                "additionalProperties": true
              },
              {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "The authorized agent's API endpoint URL"
                  },
                  "authorized_for": {
                    "type": "string",
                    "description": "Human-readable description of what this agent is authorized to sell",
                    "minLength": 1,
                    "maxLength": 500
                  },
                  "authorization_type": {
                    "type": "string",
                    "const": "inline_properties",
                    "description": "Discriminator indicating authorization by inline property definitions"
                  },
                  "properties": {
                    "type": "array",
                    "description": "Specific properties this agent is authorized for (alternative to property_ids/property_tags)",
                    "items": {
                      "$ref": "/schemas/3.0.0/core/property.json"
                    },
                    "minItems": 1
                  },
                  "collections": {
                    "type": "array",
                    "description": "Optional collection constraints. When present, authorization only applies to inventory associated with these collections.",
                    "items": {
                      "$ref": "/schemas/3.0.0/core/collection-selector.json"
                    },
                    "minItems": 1
                  },
                  "placement_ids": {
                    "type": "array",
                    "description": "Optional placement constraints. When present, authorization only applies to these placement IDs from the top-level placements array in this file.",
                    "items": {
                      "type": "string"
                    },
                    "minItems": 1
                  },
                  "placement_tags": {
                    "type": "array",
                    "description": "Optional placement tag constraints. When present, authorization only applies to placements whose tags include any of these publisher-defined values.",
                    "items": {
                      "type": "string"
                    },
                    "minItems": 1,
                    "uniqueItems": true
                  },
                  "delegation_type": {
                    "type": "string",
                    "enum": ["direct", "delegated", "ad_network"],
                    "description": "Commercial relationship for this inventory path. 'direct' means the publisher treats this as a direct way to buy from them, even if a third party operates the software. 'delegated' means the agent is authorized to sell on the publisher's behalf. 'ad_network' means the inventory is sold as part of a network/package context rather than as the publisher's direct endpoint."
                  },
                  "exclusive": {
                    "type": "boolean",
                    "description": "Whether this agent is the publisher's sole authorized path for the scoped inventory slice. When false or absent, other authorized agents may also sell the same inventory."
                  },
                  "countries": {
                    "type": "array",
                    "description": "Optional ISO 3166-1 alpha-2 country codes limiting where this authorization applies. Omit for worldwide authorization.",
                    "items": {
                      "type": "string",
                      "pattern": "^[A-Z]{2}$"
                    },
                    "minItems": 1,
                    "uniqueItems": true
                  },
                  "effective_from": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Optional start time for this authorization window."
                  },
                  "effective_until": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Optional end time for this authorization window."
                  },
                  "signing_keys": {
                    "type": "array",
                    "description": "Optional publisher-attested public signing keys for this agent. Use these as the trust anchor for verifying signed agent responses instead of relying on key discovery from the agent domain alone.",
                    "items": {
                      "$ref": "/schemas/3.0.0/core/agent-signing-key.json"
                    },
                    "minItems": 1
                  },
                  "encryption_keys": {
                    "type": "array",
                    "description": "X25519 public keys for TMPX exposure token encryption. Each key identifies a cluster master that can decrypt TMPX tokens. Used with HPKE mode_base — read replicas encrypt with this public key, only the master can decrypt.",
                    "items": {
                      "$ref": "/schemas/3.0.0/core/agent-encryption-key.json"
                    },
                    "minItems": 1
                  }
                },
                "required": [
                  "url",
                  "authorized_for",
                  "authorization_type",
                  "properties"
                ],
                "additionalProperties": true
              },
              {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "The authorized agent's API endpoint URL"
                  },
                  "authorized_for": {
                    "type": "string",
                    "description": "Human-readable description of what this agent is authorized to sell",
                    "minLength": 1,
                    "maxLength": 500
                  },
                  "authorization_type": {
                    "type": "string",
                    "const": "publisher_properties",
                    "description": "Discriminator indicating authorization for properties from other publisher domains"
                  },
                  "publisher_properties": {
                    "type": "array",
                    "description": "Properties from other publisher domains this agent is authorized for. Each entry specifies a publisher domain and which of their properties this agent can sell",
                    "items": {
                      "$ref": "/schemas/3.0.0/core/publisher-property-selector.json"
                    },
                    "minItems": 1
                  },
                  "collections": {
                    "type": "array",
                    "description": "Optional collection constraints. When present, authorization only applies to inventory associated with these collections.",
                    "items": {
                      "$ref": "/schemas/3.0.0/core/collection-selector.json"
                    },
                    "minItems": 1
                  },
                  "placement_ids": {
                    "type": "array",
                    "description": "Optional placement constraints. When present, authorization only applies to these placement IDs from the top-level placements array in this file.",
                    "items": {
                      "type": "string"
                    },
                    "minItems": 1
                  },
                  "placement_tags": {
                    "type": "array",
                    "description": "Optional placement tag constraints. When present, authorization only applies to placements whose tags include any of these publisher-defined values.",
                    "items": {
                      "type": "string"
                    },
                    "minItems": 1,
                    "uniqueItems": true
                  },
                  "delegation_type": {
                    "type": "string",
                    "enum": ["direct", "delegated", "ad_network"],
                    "description": "Commercial relationship for this inventory path. 'direct' means the publisher treats this as a direct way to buy from them, even if a third party operates the software. 'delegated' means the agent is authorized to sell on the publisher's behalf. 'ad_network' means the inventory is sold as part of a network/package context rather than as the publisher's direct endpoint."
                  },
                  "exclusive": {
                    "type": "boolean",
                    "description": "Whether this agent is the publisher's sole authorized path for the scoped inventory slice. When false or absent, other authorized agents may also sell the same inventory."
                  },
                  "countries": {
                    "type": "array",
                    "description": "Optional ISO 3166-1 alpha-2 country codes limiting where this authorization applies. Omit for worldwide authorization.",
                    "items": {
                      "type": "string",
                      "pattern": "^[A-Z]{2}$"
                    },
                    "minItems": 1,
                    "uniqueItems": true
                  },
                  "effective_from": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Optional start time for this authorization window."
                  },
                  "effective_until": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Optional end time for this authorization window."
                  },
                  "signing_keys": {
                    "type": "array",
                    "description": "Optional publisher-attested public signing keys for this agent. Use these as the trust anchor for verifying signed agent responses instead of relying on key discovery from the agent domain alone.",
                    "items": {
                      "$ref": "/schemas/3.0.0/core/agent-signing-key.json"
                    },
                    "minItems": 1
                  },
                  "encryption_keys": {
                    "type": "array",
                    "description": "X25519 public keys for TMPX exposure token encryption. Each key identifies a cluster master that can decrypt TMPX tokens. Used with HPKE mode_base — read replicas encrypt with this public key, only the master can decrypt.",
                    "items": {
                      "$ref": "/schemas/3.0.0/core/agent-encryption-key.json"
                    },
                    "minItems": 1
                  }
                },
                "required": [
                  "url",
                  "authorized_for",
                  "authorization_type",
                  "publisher_properties"
                ],
                "additionalProperties": true
              },
              {
                "type": "object",
                "description": "Authorization for signals by specific signal IDs",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "The authorized signals agent's API endpoint URL"
                  },
                  "authorized_for": {
                    "type": "string",
                    "description": "Human-readable description of what signals this agent is authorized to resell",
                    "minLength": 1,
                    "maxLength": 500
                  },
                  "authorization_type": {
                    "type": "string",
                    "const": "signal_ids",
                    "description": "Discriminator indicating authorization by specific signal IDs"
                  },
                  "signal_ids": {
                    "type": "array",
                    "description": "Signal IDs this agent is authorized to resell. Resolved against the top-level signals array in this file",
                    "items": {
                      "type": "string",
                      "pattern": "^[a-zA-Z0-9_-]+$"
                    },
                    "minItems": 1
                  },
                  "signing_keys": {
                    "type": "array",
                    "description": "Optional publisher-attested public signing keys for this agent. Use these as the trust anchor for verifying signed agent responses instead of relying on key discovery from the agent domain alone.",
                    "items": {
                      "$ref": "/schemas/3.0.0/core/agent-signing-key.json"
                    },
                    "minItems": 1
                  },
                  "encryption_keys": {
                    "type": "array",
                    "description": "X25519 public keys for TMPX exposure token encryption. Each key identifies a cluster master that can decrypt TMPX tokens. Used with HPKE mode_base — read replicas encrypt with this public key, only the master can decrypt.",
                    "items": {
                      "$ref": "/schemas/3.0.0/core/agent-encryption-key.json"
                    },
                    "minItems": 1
                  }
                },
                "required": [
                  "url",
                  "authorized_for",
                  "authorization_type",
                  "signal_ids"
                ],
                "additionalProperties": true
              },
              {
                "type": "object",
                "description": "Authorization for signals by tag membership",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "The authorized signals agent's API endpoint URL"
                  },
                  "authorized_for": {
                    "type": "string",
                    "description": "Human-readable description of what signals this agent is authorized to resell",
                    "minLength": 1,
                    "maxLength": 500
                  },
                  "authorization_type": {
                    "type": "string",
                    "const": "signal_tags",
                    "description": "Discriminator indicating authorization by signal tags"
                  },
                  "signal_tags": {
                    "type": "array",
                    "description": "Signal tags this agent is authorized for. Agent can resell all signals with these tags",
                    "items": {
                      "type": "string",
                      "pattern": "^[a-z0-9_-]+$"
                    },
                    "minItems": 1
                  },
                  "signing_keys": {
                    "type": "array",
                    "description": "Optional publisher-attested public signing keys for this agent. Use these as the trust anchor for verifying signed agent responses instead of relying on key discovery from the agent domain alone.",
                    "items": {
                      "$ref": "/schemas/3.0.0/core/agent-signing-key.json"
                    },
                    "minItems": 1
                  },
                  "encryption_keys": {
                    "type": "array",
                    "description": "X25519 public keys for TMPX exposure token encryption. Each key identifies a cluster master that can decrypt TMPX tokens. Used with HPKE mode_base — read replicas encrypt with this public key, only the master can decrypt.",
                    "items": {
                      "$ref": "/schemas/3.0.0/core/agent-encryption-key.json"
                    },
                    "minItems": 1
                  }
                },
                "required": [
                  "url",
                  "authorized_for",
                  "authorization_type",
                  "signal_tags"
                ],
                "additionalProperties": true
              }
            ]
          },
          "minItems": 1
        },
        "last_updated": {
          "type": "string",
          "format": "date-time",
          "description": "ISO 8601 timestamp indicating when this file was last updated"
        },
        "property_features": {
          "type": "array",
          "description": "[AdCP 3.0] Optional list of agents that provide property feature data (certifications, scores, compliance status). Used for discovery - actual data is accessed through property list filters.",
          "items": {
            "type": "object",
            "properties": {
              "url": {
                "type": "string",
                "format": "uri",
                "description": "The agent's API endpoint URL"
              },
              "name": {
                "type": "string",
                "description": "Human-readable name of the vendor/agent (e.g., 'Scope3', 'TAG', 'OneTrust')"
              },
              "features": {
                "type": "array",
                "description": "Feature IDs this agent provides (e.g., 'carbon_score', 'tag_certified_against_fraud'). Use get_adcp_capabilities on the agent for full definitions.",
                "items": {
                  "type": "string"
                },
                "minItems": 1
              },
              "publisher_id": {
                "type": "string",
                "description": "Optional publisher identifier at this agent (for lookup)"
              }
            },
            "required": ["url", "name", "features"],
            "additionalProperties": true
          }
        },
        "signals": {
          "type": "array",
          "description": "Signal catalog published by this data provider. Signals agents reference these signals via data_provider_domain + signal_id.",
          "items": {
            "$ref": "/schemas/3.0.0/core/signal-definition.json"
          },
          "minItems": 1
        },
        "signal_tags": {
          "type": "object",
          "description": "Metadata for each tag referenced by signals. Provides human-readable context for signal tag values.",
          "additionalProperties": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "description": "Human-readable name for this tag"
              },
              "description": {
                "type": "string",
                "description": "Description of what this tag represents"
              }
            },
            "required": [
              "name",
              "description"
            ],
            "additionalProperties": true
          }
        }
      },
      "required": [
        "authorized_agents"
      ],
      "additionalProperties": true
    }
  ],
  "examples": [
    {
      "$schema": "/schemas/3.0.0/adagents.json",
      "authoritative_location": "https://cdn.example.com/adagents/v2/adagents.json",
      "last_updated": "2025-01-15T10:00:00Z"
    },
        {
          "$schema": "/schemas/3.0.0/adagents.json",
          "properties": [
            {
              "property_id": "example_site",
              "property_type": "website",
          "name": "Example Site",
          "identifiers": [
            {
              "type": "domain",
              "value": "example.com"
            }
          ],
              "publisher_domain": "example.com"
            }
          ],
          "placements": [
            {
              "placement_id": "homepage_banner",
              "name": "Homepage Banner",
              "tags": ["homepage", "display", "premium"],
              "property_ids": ["example_site"],
              "format_ids": [
                {
                  "agent_url": "https://creative.example.com",
                  "id": "display_728x90"
                }
              ]
            }
          ],
          "placement_tags": {
            "homepage": {
              "name": "Homepage",
              "description": "Placements that render on the homepage"
            },
            "display": {
              "name": "Display",
              "description": "Standard display placements"
            },
            "premium": {
              "name": "Premium",
              "description": "Premium monetization placements"
            }
          },
          "authorized_agents": [
            {
              "url": "https://agent.example.com",
              "authorized_for": "Official sales agent",
              "authorization_type": "property_tags",
              "property_tags": ["all"],
              "placement_ids": ["homepage_banner"],
              "delegation_type": "direct",
              "exclusive": true,
              "countries": ["US", "CA"],
              "effective_from": "2025-01-01T00:00:00Z"
            }
          ],
          "tags": {
            "all": {
          "name": "All Properties",
          "description": "All properties in this file"
        }
      },
      "last_updated": "2025-01-10T12:00:00Z"
    },
    {
      "$schema": "/schemas/3.0.0/adagents.json",
      "contact": {
        "name": "Meta Advertising Operations",
        "email": "adops@meta.com",
        "domain": "meta.com",
        "seller_id": "pub-meta-12345",
        "tag_id": "12345",
        "privacy_policy_url": "https://www.meta.com/privacy/policy"
      },
      "properties": [
        {
          "property_type": "mobile_app",
          "name": "Instagram",
          "identifiers": [
            {
              "type": "ios_bundle",
              "value": "com.burbn.instagram"
            },
            {
              "type": "android_package",
              "value": "com.instagram.android"
            }
          ],
          "tags": [
            "meta_network",
            "social_media"
          ],
          "supported_channels": ["social", "display", "olv"],
          "publisher_domain": "instagram.com"
        },
        {
          "property_type": "mobile_app",
          "name": "Facebook",
          "identifiers": [
            {
              "type": "ios_bundle",
              "value": "com.facebook.Facebook"
            },
            {
              "type": "android_package",
              "value": "com.facebook.katana"
            }
          ],
          "tags": [
            "meta_network",
            "social_media"
          ],
          "supported_channels": ["social", "display", "olv"],
          "publisher_domain": "facebook.com"
        },
        {
          "property_type": "mobile_app",
          "name": "WhatsApp",
          "identifiers": [
            {
              "type": "ios_bundle",
              "value": "net.whatsapp.WhatsApp"
            },
            {
              "type": "android_package",
              "value": "com.whatsapp"
            }
          ],
          "tags": [
            "meta_network",
            "messaging"
          ],
          "supported_channels": ["social", "display"],
          "publisher_domain": "whatsapp.com"
        }
      ],
      "tags": {
        "meta_network": {
          "name": "Meta Network",
          "description": "All Meta-owned properties"
        },
        "social_media": {
          "name": "Social Media Apps",
          "description": "Social networking applications"
        },
        "messaging": {
          "name": "Messaging Apps",
          "description": "Messaging and communication apps"
        }
      },
      "authorized_agents": [
        {
          "url": "https://meta-ads.com",
          "authorized_for": "All Meta properties",
          "authorization_type": "property_tags",
          "property_tags": [
            "meta_network"
          ]
        }
      ],
      "last_updated": "2025-01-10T15:30:00Z"
    },
    {
      "$schema": "/schemas/3.0.0/adagents.json",
      "contact": {
        "name": "Tumblr Advertising"
      },
      "properties": [
        {
          "property_type": "website",
          "name": "Tumblr Corporate",
          "identifiers": [
            {
              "type": "domain",
              "value": "tumblr.com"
            }
          ],
          "tags": [
            "corporate"
          ],
          "publisher_domain": "tumblr.com"
        }
      ],
      "tags": {
        "corporate": {
          "name": "Corporate Properties",
          "description": "Tumblr-owned corporate properties (not user blogs)"
        }
      },
      "authorized_agents": [
        {
          "url": "https://tumblr-sales.com",
          "authorized_for": "Tumblr corporate properties only",
          "authorization_type": "property_tags",
          "property_tags": [
            "corporate"
          ]
        }
      ],
      "last_updated": "2025-01-10T16:00:00Z"
    },
    {
      "$schema": "/schemas/3.0.0/adagents.json",
      "contact": {
        "name": "Example Third-Party Sales Agent",
        "email": "sales@agent.example",
        "domain": "agent.example"
      },
      "authorized_agents": [
        {
          "url": "https://agent.example/api",
          "authorized_for": "CNN CTV properties via publisher authorization",
          "authorization_type": "publisher_properties",
          "publisher_properties": [
            {
              "publisher_domain": "cnn.com",
              "selection_type": "by_id",
              "property_ids": [
                "cnn_ctv_app"
              ]
            }
          ]
        },
        {
          "url": "https://agent.example/api",
          "authorized_for": "All CTV properties from multiple publishers",
          "authorization_type": "publisher_properties",
          "publisher_properties": [
            {
              "publisher_domain": "cnn.com",
              "selection_type": "by_tag",
              "property_tags": [
                "ctv"
              ]
            },
            {
              "publisher_domain": "espn.com",
              "selection_type": "by_tag",
              "property_tags": [
                "ctv"
              ]
            }
          ]
        }
      ],
      "last_updated": "2025-01-10T17:00:00Z"
    },
    {
      "$schema": "/schemas/3.0.0/adagents.json",
      "contact": {
        "name": "Premium News Publisher",
        "email": "adops@news.example.com",
        "domain": "news.example.com"
      },
      "properties": [
        {
          "property_type": "website",
          "name": "News Example",
          "identifiers": [
            {
              "type": "domain",
              "value": "news.example.com"
            }
          ],
          "tags": ["premium", "news"],
          "publisher_domain": "news.example.com"
        }
      ],
      "tags": {
        "premium": {
          "name": "Premium Properties",
          "description": "High-quality, brand-safe properties"
        },
        "news": {
          "name": "News Properties",
          "description": "News and journalism content"
        }
      },
      "authorized_agents": [
        {
          "url": "https://sales.news.example.com",
          "authorized_for": "All news properties",
          "authorization_type": "property_tags",
          "property_tags": ["news"]
        }
      ],
      "property_features": [
        {
          "url": "https://api.scope3.com",
          "name": "Scope3",
          "features": ["carbon_score", "sustainability_grade"],
          "publisher_id": "pub_news_12345"
        },
        {
          "url": "https://api.tagtoday.net",
          "name": "TAG",
          "features": ["tag_certified_against_fraud", "tag_brand_safety_certified"]
        },
        {
          "url": "https://api.onetrust.com",
          "name": "OneTrust",
          "features": ["gdpr_compliant", "tcf_registered", "ccpa_compliant"],
          "publisher_id": "ot_news_67890"
        }
      ],
      "last_updated": "2025-01-10T18:00:00Z"
    },
    {
      "$schema": "/schemas/3.0.0/adagents.json",
      "contact": {
        "name": "Polk Automotive Data",
        "email": "partnerships@polk.com",
        "domain": "polk.com"
      },
      "signals": [
        {
          "id": "likely_tesla_buyers",
          "name": "Likely Tesla Buyers",
          "description": "Consumers modeled as likely to purchase a Tesla in the next 12 months based on vehicle registration, financial, and behavioral data",
          "value_type": "binary",
          "category": "purchase_intent",
          "tags": ["automotive", "premium"]
        },
        {
          "id": "vehicle_ownership",
          "name": "Current Vehicle Ownership",
          "description": "Current vehicle make owned by the consumer",
          "value_type": "categorical",
          "category": "ownership",
          "allowed_values": ["tesla", "bmw", "mercedes", "audi", "lexus", "other_luxury", "non_luxury"],
          "tags": ["automotive"]
        },
        {
          "id": "purchase_propensity",
          "name": "Auto Purchase Propensity",
          "description": "Likelihood score of purchasing any new vehicle in the next 6 months",
          "value_type": "numeric",
          "category": "purchase_intent",
          "range": { "min": 0, "max": 1, "unit": "score" },
          "tags": ["automotive"]
        }
      ],
      "signal_tags": {
        "automotive": {
          "name": "Automotive Signals",
          "description": "Vehicle-related audience segments"
        },
        "premium": {
          "name": "Premium Signals",
          "description": "High-value premium audience segments"
        }
      },
      "authorized_agents": [
        {
          "url": "https://liveramp.com/.well-known/adcp/signals",
          "authorized_for": "All Polk automotive signals via LiveRamp",
          "authorization_type": "signal_tags",
          "signal_tags": ["automotive"]
        },
        {
          "url": "https://the-trade-desk.com/.well-known/adcp/signals",
          "authorized_for": "Polk premium signals only",
          "authorization_type": "signal_ids",
          "signal_ids": ["likely_tesla_buyers"]
        }
      ],
      "last_updated": "2025-01-15T10:00:00Z"
    }
  ]
}
