Brand safety

Brand safety belongs to your project config and job overrides, not to undocumented renderer behavior. The API surface exposes the controls explicitly so browser and server paths stay aligned.

POST /v1/placements

Apply request-level controls

Put format and brand-safety controls in overrides. The required project, session, and job fields remain present even when the request only changes policy.

Create a placement with brand-safety overrides

brand-safety.sh

bash

cURL
curl -X POST https://api.wavebird.ai/v1/placements \  -H "Authorization: Bearer $WAVEBIRD_SECRET_KEY" \  -H "Content-Type: application/json" \  -d '{    "client_id": "wbproj_...",    "session_id": "sess_...",    "job_type": "chat",    "consent": {      "semantic_targeting": false,      "prompt_shared": false,      "gdpr_applies": true,      "consent_source": "wavebird_consent"    },    "overrides": {      "allowed_formats": ["banner", "native"],      "blocked_categories": ["gambling", "tobacco"],      "blocked_domains": ["competitor.example"]    }  }'

Policy

Controls that matter

allowed_formats

Limit the renderable creative formats for the active job or project defaults.

blocked_categories

Apply category-based exclusions before the market-side request is accepted.

blocked_domains

Prevent delivery from blocked advertiser or destination domains when your project policy requires it.

Important

Failure behavior

Invalid or overly strict policy does not break your app. The sponsor path should resolve as no-fill while the model or product flow continues.

Need help with your integration?

Share the affected endpoint, request ID, and the behavior you expected. Leave out keys and user content.

Contact the team