Skip to main content

Developing Optacy Webhooks

Event types, example payloads, and field reference for Optacy privacy request webhooks.

Optacy currently supports two events:

privacy_request.received
privacy_request.updated

Both carry the latest state of the privacy request. For a toll-free number (voicemail) request, you may receive two privacy_request.updated events after receipt: one when the recording is available, and another when transcription is ready.

Example: privacy_request.received (webform)

{
  "event_name": "privacy_request.received",
  "signature": {
    "random_token": "b39a5c7ac85ec479f921cdfaae4b4eee",
    "timestamp": "1584300477293",
    "signature": "599a40fb2d25f995a40dc43f725a57be4e8df90"
  },
  "id": "4e2c7dcd-8277-40bb-1082-66c7cb417df2",
  "type": "WebForm",
  "primary_identifier": "john@doe.com",
  "consumer_email": "john@doe.com",
  "email_verified_at": "2025-01-01",
  "acknowledged": true,
  "categorized": false,
  "verified": false,
  "extended": false,
  "completed": false,
  "completed_rights": {
    "data_categories_request": { "completed": false, "completed_at": null },
    "do_not_sell": { "completed": true, "completed_at": "2025-01-01" },
    "erase_my_information": { "completed": false, "completed_at": null },
    "send_me_a_copy_of_information": { "completed": false, "completed_at": null },
    "other": { "completed": false, "completed_at": null }
  },
  "deadline": "2025-07-02",
  "created_at": "2025-05-18T17:36:44.399Z",
  "updated_at": "2025-05-18T17:36:45.187Z",
  "categorized_country": "USA",
  "categorized_state": "California",
  "service_code": {
    "code": 1,
    "name": "Example Brand",
    "created_at": "2024-07-16T20:31:24.915Z",
    "updated_at": "2025-05-18T16:40:19.894Z"
  },
  "jurisdiction_rule": {
    "name": "USA only",
    "description": "Description of applied Jurisdiction Rule",
    "created_at": "2025-05-17T18:48:59.391Z",
    "days_to_process": 45,
    "notes": "Available in the Jurisdictions tab in the dashboard."
  },
  "web_form_session": {
    "id": "904c1b30-2ba8-49cf-a349-46f7c6b29e70",
    "created_at": "2025-05-18T17:36:44.394Z",
    "remote_ip": "24.102.96.226"
  }
}

Example: privacy_request.updated (voicemail)

{
  "event_name": "privacy_request.updated",
  "signature": {
    "random_token": "a021778c09cdae8897859340d3f0b32f",
    "timestamp": "1584305606907",
    "signature": "201de4703b7ce1eb33878fa29d77d8572ddeb2af"
  },
  "id": "abf78bbb-a152-4f09-90ad-5802f53721d7",
  "type": "Voicemail",
  "primary_identifier": "john@doe.com",
  "consumer_email": "john@doe.com",
  "acknowledged": false,
  "categorized": false,
  "verified": true,
  "extended": false,
  "completed": true,
  "deadline": "2019-11-05",
  "created_at": "2019-09-21 16:31:11 UTC",
  "updated_at": "2020-03-15 20:48:05 UTC",
  "categorized_country": "USA",
  "categorized_state": "California",
  "service_code": {
    "code": "2",
    "name": "test",
    "created_at": "2019-09-21 16:31:11 UTC",
    "updated_at": "2020-01-26 05:59:40 UTC"
  },
  "call_session": {
    "created_at": "2019-09-21 16:31:11 UTC",
    "ended_at": "2019-09-21 16:33:11 UTC",
    "caller_id": "+15555555555",
    "caller_name": "John Smith",
    "caller_state": "CA",
    "recording_status": "completed",
    "mp3_encoded_bytes": "",
    "transcription_status": "completed",
    "transcription_text": "Hello world!"
  }
}

Privacy request fields

KeyDescription
event_nameString, e.g. privacy_request.received
signatureObject with random token, timestamp (ms), and signature (see Software Security)
idUUID of the privacy request
typeString, e.g. Voicemail or WebForm
primary_identifierPrimary identifier for the request
consumer_emailEmail used to communicate with the requester
email_verified_atWhen the email was verified
acknowledgedWhether the request was acknowledged
verifiedWhether the request is marked verified
categorizedWhether the request is categorized (always true for webform)
completedWhether the request was completed
completed_rightsMap of right keys to { completed, completed_at }
extendedWhether the deadline was extended
deadlineDue date from Jurisdiction Rules, extensions, and unfinished rights
created_at / updated_atRequest timestamps
categorized_rightsPreferred rights view: answers plus right configuration
categorized_questions_dataPreferred form answers view: values plus Form Field Set config
categorized_country / categorized_statePreferred jurisdiction fields (state null outside the US)

Service Code

KeyDescription
codeService Code for this request
nameService Code display name
created_at / updated_atService Code timestamps

Call session (toll-free number requests)

KeyDescription
created_at / ended_atCall start and hang-up times
caller_idCaller phone number
caller_nameCNAM lookup name
caller_stateUS state from area code when available
recording_statuscompleted when bytes are available, or failed
mp3_encoded_bytesBase64-encoded MP3 bytes
transcription_statuscompleted when transcription is ready
transcription_textTranscription text

Web form session

KeyDescription
idWeb form session UUID
created_atWhen the webform was received
remote_ipRequester IP address
webform_questions_data / rightsPrefer categorized_questions_data and categorized_rights instead
country_of_residence / stateCopied into categorized country/state fields