Didomi · AsyncAPI Specification

Didomi Webhooks

Version

Didomi publishes a real outbound webhook surface. When an end-user changes a consent or preference on any of an organization's websites, apps or preference centers, Didomi POSTs a JSON payload to a customer-configured HTTPS endpoint. Webhooks are configured at the ORGANIZATION level and apply automatically to every property in that organization. The Didomi status page tracks "Webhooks" as its own operational component.

View Spec View on GitHub AdvertisingAdTechCCPACMPConsentConsent ManagementDSARData PrivacyGDPRIAB TCFMarTechPreference ManagementPrivacyPrivacy RequestsRegulatory ComplianceAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
generated: '2026-08-13'
method: searched
source: https://developers.didomi.io/integrations/generic-integrations/webhooks
docs:
- https://developers.didomi.io/integrations/generic-integrations/webhooks
- https://developers.didomi.io/integrations/tutorials/configure-a-http-webhook
- https://developers.didomi.io/api-and-platform/consents/events
info:
  name: Didomi webhook catalog
  provider: didomi
  description: >-
    Didomi publishes a real outbound webhook surface. When an end-user changes a
    consent or preference on any of an organization's websites, apps or
    preference centers, Didomi POSTs a JSON payload to a customer-configured
    HTTPS endpoint. Webhooks are configured at the ORGANIZATION level and apply
    automatically to every property in that organization. The Didomi status page
    tracks "Webhooks" as its own operational component.
  status_component: https://status.didomi.io (component "Webhooks")
  checked: '2026-08-13'
transport:
  protocol: https
  method: POST
  content_type: application/json
  direction: outbound (Didomi -> customer endpoint)
  configured_via: >-
    Didomi Marketplace > Manage. There is no public REST endpoint documented for
    self-service webhook registration; Didomi Support can also configure it.
  source_ip: 35.159.1.63
  source_ip_note: >-
    Didomi publishes a single fixed egress IP that customers must allowlist.
    Verbatim from the docs — allowlisting is required for delivery.
authentication:
  mode: oauth2-client-credentials
  direction: >-
    INVERTED. Didomi authenticates ITSELF against the CUSTOMER's OAuth
    authorization server using a client_id and client_secret the customer
    supplies, obtains an access token, and presents it to the customer's
    endpoint as `Authorization: Bearer <token>`.
  optional: true
  signature: null
  signature_note: >-
    GAP. Didomi publishes no HMAC request-signing scheme and no shared-secret
    signature header. A receiver that does not stand up an OAuth authorization
    server has only the source IP (35.159.1.63) to authenticate the sender with.
delivery:
  retries: at least 5
  retry_interval: every 5 minutes
  after_exhaustion: >-
    The event is written to permanent storage for later processing rather than
    dropped.
  ordering: not documented
  deduplication: not documented
  timeout: not documented
envelope:
  fields:
    type:
      type: string
      description: The type of event.
    parameters:
      type: object
      description: Entities affected by the event.
    regulation:
      type: string
      description: The regulation to which the event belongs.
  flatten_option:
    supported: true
    description: >-
      An interface option that transforms the payload into a flat key-value
      object using a double underscore (`__`) as the property-path separator.
      Only `entity` and `new_entity` are flattened, and they merge into a single
      `entity` property.
events:
- type: event.created
  description: A new consent event has been created.
  parameters:
    entity: the created Event
- type: event.updated
  description: An existing consent event has been updated.
  parameters:
    source: the event that triggered the update
    old_entity: the Event before the update
    new_entity: the Event after the update
- type: event.deleted
  description: An existing consent event has been deleted.
  parameters:
    entity: the deleted Event
- type: user.created
  description: A new user has been created.
  parameters:
    entity: the created User
- type: user.updated
  description: An existing user has been updated.
  parameters:
    source: the event that triggered the User update, if any
    old_entity: the User before the update
    new_entity: the User after the update
- type: user.deleted
  description: An existing user has been deleted.
  parameters:
    entity: the deleted User
filtering:
  supported: true
  mechanism: >-
    Select the desired event types in the Didomi Marketplace. If no event types
    are selected the webhook receives ALL available events by default.
regulation_scope:
  default: GDPR events only
  multi_regulation: >-
    Available on request — an organization must ask its Didomi representative to
    enable non-GDPR (multi-regulation) events.
  documented_hazard: >-
    Quoted from Didomi's own docs: once multi-regulation events are enabled, an
    organization that maps regulation events to a single contact record without
    distinguishing between them can have a non-GDPR event (e.g. CPRA) SILENTLY
    OVERWRITE GDPR consent for the same contact. Any consumer of this webhook
    must branch on the `regulation` field.
related_integrations:
- name: Batch export
  description: >-
    Scheduled bulk export of consent data to a destination bucket (Didomi-owned
    AWS S3, or a customer GCP Storage bucket).
  docs: https://developers.didomi.io/integrations/generic-integrations/batch-export
  quotas:
    exports_configs: 3
    exports_destinations: 2
- name: Analytics export
  description: Export of analytics to a configured destination.
  docs: https://developers.didomi.io/integrations/tutorials/configure-an-analytics-export
asyncapi:
  published_by_provider: false
  our_generation: asyncapi/didomi-consent-webhooks-asyncapi.yml
  note: >-
    Didomi ships no AsyncAPI document. The file above is an API Evangelist
    generation from this catalog and Didomi's published Event/User schemas — it
    is marked method: generated and must never be read as a provider artifact.
gaps:
- No AsyncAPI or other machine-readable event contract.
- No HMAC signature / shared-secret verification header on delivered payloads.
- No public REST endpoint to register or manage a webhook subscription (Marketplace UI or Support only).
- No documented delivery timeout, ordering guarantee, or dedup key.
- No replay/redelivery API for events that exhausted their retries into "permanent storage".