create_content_standards
Create a new content standards configuration.
Response time: < 1s
Request
Schema: create-content-standards-request.json
| Parameter | Type | Required | Description |
|---|
scope | object | Yes | Where this standards configuration applies (must include languages_any) |
policies | PolicyEntry[] | One-of | Bespoke policies, same shape as registry entries. Each has {policy_id, enforcement, policy, ...optional: version/name/category/policy_categories/channels/jurisdictions/exemplars}. At least one of policies or registry_policy_ids is required. |
registry_policy_ids | string[] | One-of | References to shared policies in the registry. Combines with policies when both are provided. At least one of policies or registry_policy_ids is required. |
calibration_exemplars | object | No | Training set of pass/fail artifacts for calibration |
Brand Safety Floor RequirementImplementors MUST apply a brand safety floor regardless of what policy is defined in content standards. Content that violates the floor (hate speech, illegal content, etc.) must be excluded even when no content standards are specified. AdCP does not define the floor specification; this is left to implementors and industry standards (e.g., GARM categories).
Example Request
{
"$schema": "/schemas/3.1.0-rc.7/content-standards/create-content-standards-request.json",
"idempotency_key": "a9b0c1d2-e3f4-4567-a890-567890123456",
"scope": {
"countries_all": ["GB", "DE", "FR"],
"channels_any": ["display", "olv", "ctv"],
"languages_any": ["en", "de", "fr"],
"description": "EMEA - all digital channels"
},
"policies": [
{
"policy_id": "no_violence",
"policy_categories": ["brand_safety"],
"enforcement": "must",
"policy": "Avoid content depicting violence, weapons, or physical aggression."
},
{
"policy_id": "no_controversial_politics",
"policy_categories": ["brand_suitability"],
"enforcement": "must",
"policy": "Avoid controversial political content and ongoing partisan disputes."
},
{
"policy_id": "no_adult_themes",
"policy_categories": ["brand_safety"],
"enforcement": "must",
"policy": "Avoid adult, sexual, or mature themes."
},
{
"policy_id": "no_sedentary_glorification",
"policy_categories": ["brand_suitability"],
"enforcement": "should",
"policy": "Avoid content that portrays sedentary lifestyle positively; conflicts with brand positioning."
}
],
"calibration_exemplars": {
"pass": [
{ "type": "url", "value": "https://espn.com/nba/story/_/id/12345/lakers-championship", "language": "en" },
{ "type": "url", "value": "https://healthline.com/fitness/cardio-workout", "language": "en" }
],
"fail": [
{ "type": "url", "value": "https://tabloid.example.com/celebrity-scandal", "language": "en" },
{ "type": "url", "value": "https://news.example.com/controversial-politics-article", "language": "en" }
]
}
}
Response
Schema: create-content-standards-response.json
Success Response
{
"$schema": "/schemas/3.1.0-rc.7/content-standards/create-content-standards-response.json",
"status": "completed",
"standards_id": "emea_digital_safety"
}
Error Responses
Scope Conflict:
{
"errors": [
{
"code": "SCOPE_CONFLICT",
"message": "Standards already exist for country 'DE' on channel 'display'",
"conflicting_standards_id": "emea_digital_safety"
}
]
}
Scope Conflict Handling
Multiple standards cannot have overlapping scopes for the same country/channel/language combination. When creating standards that would conflict:
- Check existing standards - Use list_content_standards filtered by your scope
- Update rather than create - If standards already exist, use update_content_standards
- Narrow the scope - Adjust countries or channels to avoid overlap
Calibrate before production use. After creating content standards, sellers MUST calibrate their local evaluation models via calibrate_content before using the standards in production. Uncalibrated standards produce inconsistent evaluations — the verification agent and the seller’s local model may interpret the same policy differently without alignment. See the Calibration section for the full workflow.