CCPA (California Consumer Privacy Act) · AsyncAPI Specification

Ccpa Drop Webhooks

Version

View Spec View on GitHub CPRACaliforniaComplianceData ProtectionData Subject RightsLegalPrivacyRegulationsAsyncAPIEvents

AsyncAPI Specification

Raw ↑
specification: API Commons Webhooks
specificationVersion: '0.1'
provider: CCPA (California Consumer Privacy Act)
providerId: ccpa
api: ccpa:drop-data-broker-api
generated: '2026-09-05'
method: searched
source: >-
  openapi/ccpa-drop-databroker-api.yml (the webhook contract is published in full inside
  info.description of the CalPrivacy OpenAPI) and
  https://privacy.ca.gov/drop-for-data-brokers/technical-specifications/
description: >-
  CalPrivacy publishes a real webhook surface for the DROP Data Broker API but ships no
  AsyncAPI document for it. The event catalog, HTTP headers, signing scheme and expected
  response are documented verbatim inside the OpenAPI info.description; this artifact
  captures that catalog as structured data. NOTHING HERE IS INVENTED — no AsyncAPI has
  been authored on CalPrivacy's behalf.
asyncapi_published: false
asyncapi_url: null
transport: https
direction: provider-to-consumer
configuration:
  where: DROP Data Broker Portal > Notification settings
  steps:
    - Go to Notification settings in the Data Broker Portal.
    - Toggle Webhook to Active.
    - Enter your HTTPS endpoint URL.
    - Save changes.
  default_channel: email
  detail: >-
    Email notification is the default for all brokers; webhook delivery is optional and
    per-broker configurable. Two events are email-only and cannot be delivered by webhook.
security:
  signing: HMAC-SHA256
  secret: >-
    A signing secret is generated when webhooks are enabled and shown once in the portal.
    Rotatable from the portal.
  signature_header: X-Webhook-Signature
  signature_format: 'sha256=<hex digest>'
  signing_string: '<X-Webhook-Timestamp>.<raw request body>'
  verification:
    - Read the raw request body exactly as received.
    - Read X-Webhook-Timestamp.
    - Build the signing string as `<timestamp>.<raw request body>`.
    - Compute HMAC-SHA256 using the webhook signing secret.
    - Compare the hex digest to X-Webhook-Signature after removing the `sha256=` prefix.
    - Reject the request if the signature is invalid.
  replay_protection: >-
    Recommended by CalPrivacy: reject timestamps older than 5 minutes. Not enforced by the
    protocol.
headers:
  - name: X-Webhook-Event-Id
    description: Unique ID for the logical event.
  - name: X-Webhook-Event-Type
    description: Event type.
  - name: X-Webhook-Delivery-Id
    description: Unique ID for this delivery attempt.
  - name: X-Webhook-Timestamp
    description: UTC timestamp for the request.
  - name: X-Webhook-Version
    description: Webhook version (observed value in the published example, 1.0).
  - name: X-Webhook-Signature
    description: HMAC-SHA256 signature.
payload:
  content_type: application/json
  schema:
    type: object
    required: [message]
    properties:
      message:
        type: string
        description: Message text.
  note: >-
    The body carries only a human-readable message. It does NOT carry the event type,
    ids, or any resource payload — those are in the headers. A consumer must switch on
    X-Webhook-Event-Type, not on the body.
delivery:
  expected_response: Any 2xx
  preferred_response: 204 No Content
  failure_handling: >-
    DROP treats a non-2xx response as failed delivery and may retry. Retry count, backoff
    and give-up policy are not published.
events:
  - name: download.ready
    label: List Download Ready
    when: Selected lists are ready for download; download package is ready.
    email: default
    webhook: optional
    follow_up_operation: downloadData
  - name: upload.received
    label: Upload Confirmation
    when: Your upload has been received and is being processed.
    email: default
    webhook: optional
  - name: upload.processed
    label: List Upload Processed
    when: Your list has been processed and responses are available for review.
    email: default
    webhook: optional
  - name: amendment.received
    label: Amendment Confirmation
    when: Your amendment upload has been received and is being processed.
    email: default
    webhook: optional
    follow_up_operation: uploadAmend
  - name: amendment.processed
    label: Amendment Upload Processed
    when: Your amendment list has been processed and is ready for review.
    email: default
    webhook: optional
  - label: API Key Issued
    name: null
    when: An API key has been issued for your account.
    email: default
    webhook: n/a
    note: Email only — no webhook event type is published for this notification.
  - label: API Key Changed
    name: null
    when: A new API key has been issued; all previous keys have been deactivated.
    email: default
    webhook: n/a
    note: Email only — no webhook event type is published for this notification.
event_count: 7
webhook_event_count: 5
gaps:
  - No AsyncAPI or JSON Schema document is published for these events.
  - >-
    The payload carries no event type or resource identifier, so the webhook is a
    wake-up signal rather than a data-carrying event — a consumer must call
    GET /data/download to learn what actually changed.
  - Retry/backoff policy for failed deliveries is not published.

Work with this as data

Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for asyncapi

4 MCP tools reach this
  • find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/ccpa-drop-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.