Record consent

POST/v1/consentPREVIEW

Optional session/user-level consent sync. It is separate from request-level placement consent and is not required before /v1/placements when that request already carries consent flags.

AUTH

Secret key, or activation token for browser flows

CONTENT TYPE

application/json

STATUS

Preview
Secret key or browser activation tokenSandbox thisOpen as Markdown ↗

Request parameters

client_id
string
Required
Project ID (client_id, WAVEBIRD_CLIENT_ID), formatted like wbproj_....
session_id
string
Required
Publisher session identifier.
decision
string
Required
Consent decision: personalized, basic, or custom.
source
string
Required
Consent source: publisher_custom, server_sync, or wavebird_dialog. Compatibility aliases publisher and custom_dialog normalize to publisher_custom but are not recommended for new integrations.
purposes
object
Optional
Purpose-level consent flags: semantic_targeting, session_persistence, cross_session_persistence, and prompt_shared. Compatibility purposes.ads maps to semantic_targeting and purposes.measurement maps to session_persistence.

Returns

consent_id
string
Stored consent record identifier.
session_id
string
Publisher session identifier for the stored consent state.
expires_at
string
ISO timestamp when the stored consent state expires.
normalized.source
string
Canonical source after compatibility alias mapping.
normalized.purposes
object
Canonical purpose flags after compatibility ads/measurement mapping.

Integration guidance

Placement consent vs /v1/consent sync

Request-level placement consent is sent inside /v1/placements and controls per-request privacy and targeting behavior. It is not required to call /v1/consent first when the placement request already carries request-level consent.

/v1/consent is optional session/user-level consent sync for external CMP or publisher consent state.

Consent pathLocationPurposeRequired before placement
Request-level placement consentinside /v1/placementsper-request privacy and targeting signalNo
Consent sync/v1/consentsession/user-level CMP or publisher consent stateOptional

Canonical /v1/consent sync body and compatibility aliases

New integrations should use this canonical /v1/consent sync body when syncing session/user-level CMP or publisher consent state.

Compatibility aliases remain supported after the canonical form: source: "publisher" normalizes to publisher_custom, purposes.ads maps to semantic_targeting, and purposes.measurement maps to session_persistence.

{
  "client_id": "wbproj_...",
  "session_id": "sess_...",
  "decision": "custom",
  "source": "publisher_custom",
  "purposes": {
    "semantic_targeting": false,
    "session_persistence": true,
    "cross_session_persistence": false,
    "prompt_shared": false
  }
}

Errors

unauthorized401

Missing auth.

forbidden403

Publishable key origin is not allowed, or raw publishable-key auth was used instead of a browser activation token.

validation_error400

Consent purposes are missing or malformed.

Related

Need rollout review?

Start with the Server API. Use contact only when you need rollout review, enterprise coordination, or non-standard integration help.

Contact the team