Consent event schema
Organizations subscribed to Didomi after 18 January 2022 is utilizing API v2 by default.
Since 18 January 2022, Didomi API supports validation of end-user choices through the Didomi SDK or through your organization's custom UI. End-user choices are now validated, which means that only existing or previously existing purposes, preferences and preferences value IDs in your organization will be accepted by the API. It ensures that:
The right consent is always collected and mistakes are prevents
Events/consents are following a proper and structured format
Your organization controls what can be sent to the API
Preferences are now flat, unique and can contain multiple values. They are more readable, easy to access, and collecting choices in your integrations should be simplified.
Note: The $include_full_tree=true parameter can alter the shape of the schema. For your convenience, we provide separate data dictionaries and schemas for when the parameter changes the shape of the schema
Consent event schema and data dictionary API v2 and v1 (Legacy) with $include_full_tree=true
{
/**
* Unique event ID. Automatically generated by the API if not provided on event creation
*/
"id": "string",
/**
* Organization ID
*/
"organization_id": "string",
/**
* Creation date of the event. Automatically generated by the API if not provided on event creation
*/
"created_at": "ISO-8601",
/**
* Update date of the event
*/
"updated_at": "ISO-8601",
/**
* Free-form metadata object
*/
"metadata": {},
/**
* End-user information
*/
"user": {
/**
* Didomi user ID
*/
"id": "string",
/**
* Unique user ID assigned by your organization that is used to link a Didomi end-user to your internal systems as well as resolve cross-platform IDs.
*/
"organization_user_id": "string",
/**
* Type of the external user ID defined by the organization
*/
"organization_user_id_type": "string",
/**
* Free-form metadata object
*/
"metadata": {},
/**
* Two-letter ISO code of the end-user's country
*/
"country": "DE",
/**
* Two-letter ISO country code of the last submitted consent event for the user
*/
"last_seen_country": "DE",
/**
* External email defined by the organization
*/
"email": "user@example.com",
/**
* External phone number defined by the organization
*/
"phone": "+12345678901"
},
/**
* Source information for consent events. Tracks where and how the consent event was generated.
*/
"source": {
/**
* Type of source (e.g., 'web', 'mobile', 'api')
*/
"type": "web",
/**
* Source key identifier
*/
"key": "string",
/**
* Provider information
*/
"provider": "string",
/**
* Target information
*/
"target": "string",
/**
* Deployment ID associated with the source
*/
"deployment_id": "string"
},
/**
* Consent status of the end-user
*/
"consents": {
/**
* Channels for which the end-user made choices
* Note: This is a legacy property.
*/
"channels": [
{
/**
* Unique channel ID
*/
"id": "string",
/**
* Whether the end-user has enabled this channel or not
* Note: A null value indicates that the user has not made a specific choice for the channel
*/
"enabled": false,
/**
* Free-form metadata object
*/
"metadata": {}
}
],
/**
* Purposes (for both CMP and Preference Management Platform)
*/
"purposes": [
{
/**
* Unique identifier for the data processing purpose
*/
"id": "string",
/**
* End-user's consent choice for this purpose.
* true: consent given (user opted in)
* false: consent denied (user opted out)
* undefined: not specified
*/
"enabled": true,
/**
* End-user's objection status for legitimate interest processing.
* true: no objection (legitimate interest processing allowed)
* false: objection raised (legitimate interest processing blocked)
* undefined: not specified (legitimate interest not applicable)
*/
"enabled_li": null,
/**
* Custom metadata for organization-specific data storage
*/
"metadata": {},
/**
* Indicates whether consent propagation was applied to this purpose.
* true: propagation was applied to this purpose
* undefined: propagation was not applied (either not allowed or not applicable)
*/
"propagation": true,
/**
* Indicates whether this purpose exists in the configuration tree
* true: exists in configuration tree
* false: added from user consent data
* Note: Always present when using $include_full_tree=true.
*/
"from_tree": true,
/**
* Localized names for the purpose from the configuration tree.
* Only present if the configuration tree has name content for this purpose.
*/
"name": {},
/**
* Localized descriptions explaining the purpose from the configuration tree.
* Only present if the configuration tree has description content for this purpose.
*/
"description": {},
/**
* Preferences for which the end-user has made choices
*/
"values": {
/**
* Preference selection containing the end-user's choice
* Note: Key is the configured ID of the preference
*/
"PREFERENCE_ID": {
/**
* Preference values that the end-user has made choices for
*/
"value": "string",
/**
* Indicates whether this preference exists in the configuration tree
* true: exists in configuration tree
* false: added from user consent data
* Note: Always present when using $include_full_tree=true.
*/
"from_tree": true,
/**
* Parent preference ID that this preference belongs to.
* Can be null for top-level preferences or undefined if not specified.
*/
"parent_id": null,
/**
* Name of the preference in the configuration tree
*/
"name": {},
/**
* Description of the preference in the configuration tree
*/
"description": {}
}
}
}
],
/**
* Vendors for which the end-user has made choices
*/
"vendors": {
/**
* List of vendors where end-user has explicitly given consent for data processing
*/
"enabled": ["string"],
/**
* List of vendors where end-user has explicitly denied consent for data processing
*/
"disabled": ["string"],
/**
* List of vendors where end-user allows legitimate interest processing
*/
"enabled_li": ["string"],
/**
* List of vendors where end-user objects to legitimate interest processing
*/
"disabled_li": ["string"]
},
/**
* TCF consent string for the end-user (if it was available or generated at the time of consent collection)
*/
"tcfcs": "string",
/**
* Timestamp of when consents were last updated
*/
"updated_at": "ISO-8601",
/**
* Configuration tree metadata.
* Note: Always present when $include_full_tree=true.
*/
"config_tree": {
/**
* Unique ID of the configuration tree
*/
"id": "string",
/**
* Date the configuration tree was created
*/
"created_at": "ISO-8601",
/**
* Update date for the configuration tree
*/
"updated_at": "ISO-8601"
}
},
/**
* Delegate information for consent events. Represents third parties acting on behalf of the user.
* Note: Returns null if event not created by a delegate.
*/
"delegate": {
/**
* Unique ID of the delegate
*/
"id": "string",
/**
* Name of the delegate
*/
"name": "string",
/**
* Free-form metadata object for the delegate
*/
"metadata": {}
},
/**
* Device identifier provided by SDK clients
*/
"device_id": "string",
/**
* IDs of proofs associated with this event
*/
"proofs_id": ["string1", "string2"],
/**
* Validation information (if the event was validated).
* null if there is no validation
*/
"validation": {
/**
* Validation type used for this event
*/
"type": "email_approval",
/**
* URL for approving the event (if applicable)
*/
"approve_url": "URL"
},
/**
* Status of the event:
* "confirmed": indicates that the event has been validated or was not subject to validation
* "pending_approval": indicates that the event is pending validation
*/
"status": "pending_approval",
/**
* Regulation for which the consent is collected
*/
"domain": "example.com",
/**
*
*/
"regulation": "GDPR"
}id
String
Unique event ID. Automatically generated by the API if not provided on event creation
organization_id
String
Organization ID
created_at
ISO 8601 Date
Creation date of the event. Automatically generated by the API if not provided on event creation
updated_at
ISO 8601 Date | null
Update date of the event
metadata
Object
Free-form metadata object
user
Object
End-user information
user.id
String
Didomi user ID
user.organization_user_id
String
Unique user ID assigned by your organization that is used to link a Didomi end-user to your internal systems as well as resolve cross-platform IDs.
user.organization_user_id_type
String
Type of the external user ID defined by the organization
user.metadata
Object
Free-form metadata object
user.country
String | null
Two-letter ISO code of the end-user's country
user.last_seen_country
String | null
Two-letter ISO country code of the last submitted consent event for the user
user.email
String | null
External email defined by the organization
user.phone
String | null
External phone number defined by the organization
source
Object
Source information for consent events. Tracks where and how the consent event was generated.
source.type
String
Type of source (e.g., 'web', 'mobile', 'api')
source.key
String
Source key identifier
source.provider
String
Provider information
source.target
String
Target information
source.deployment_id
String
Deployment ID associated with the source
consents
Object
Consent status of the end-user
consents.channels
Array of Objects
Channels for which the end-user made choices
Note: This is a legacy property.
consents.channels.id
String
Unique channel ID
consents.channels.enabled
Boolean | null
Whether the end-user has enabled this channel or not
Note: A null value indicates that the user has not made a specific choice for the channel
consents.channels.metadata
Object
Free-form metadata object
consents.purposes
Array of Objects
Purposes (for both CMP and Preference Management Platform)
consents.purposes.id
String
Unique identifier for the data processing purpose
consents.purposes.enabled
Boolean | null
End-user's consent choice for this purpose.
true: consent given (user opted in)false: consent denied (user opted out)undefined: not specified
consents.purposes.enabled_li
Boolean | null
End-user's objection status for legitimate interest processing.
true: no objection (legitimate interest processing allowed)false: objection raised (legitimate interest processing blocked)undefined: not specified (legitimate interest not applicable)
consents.purposes.metadata
Object
Custom metadata for organization-specific data storage
consents.purposes.propagation
Boolean
Indicates whether consent propagation was applied to this purpose.
true: propagation was applied to this purposeundefined: propagation was not applied (either not allowed or not applicable)
consents.purposes.from_tree
Boolean
Indicates whether this purpose exists in the configuration tree
true: exists in configuration treefalse: added from user consent data
Note: Always present when using $include_full_tree=true.
consents.purposes.name
Object
Localized names for the purpose from the configuration tree. Only present if the configuration tree has name content for this purpose.
consents.purposes.description
Object
Localized descriptions explaining the purpose from the configuration tree. Only present if the configuration tree has description content for this purpose.
consents.purposes.values
Object
Preferences for which the end-user has made choices
consents.purposes.values.[PREFERENCE_ID]
Object
Preference selection containing the end-user's choice
Note: Key is the configured ID of the preference
consents.purposes.values.[PREFERENCE_ID].value
String
Preference values that the end-user has made choices for
consents.purposes.values.[PREFERENCE_ID].from_tree
Boolean
Indicates whether this preference exists in the configuration tree
true: exists in configuration treefalse: added from user consent data
Note: Always present when using $include_full_tree=true.
consents.purposes.values.[PREFERENCE_ID].parent_id
String | null
Parent preference ID that this preference belongs to. Can be null for top-level preferences or undefined if not specified.
consents.purposes.values.[PREFERENCE_ID].name
Object
Name of the preference in the configuration tree
consents.purposes.values.[PREFERENCE_ID].description
Object
Description of the preference in the configuration tree
consents.vendors
Object
Vendors for which the end-user has made choices
consents.vendors.enabled
Array
List of vendors where end-user has explicitly given consent for data processing
consents.vendors.disabled
Array
List of vendors where end-user has explicitly denied consent for data processing
consents.vendors.enabled_li
Array
List of vendors where end-user allows legitimate interest processing
consents.vendors.disabled_li
Array
List of vendors where end-user objects to legitimate interest processing
consents.tcfcs
String | null
TCF consent string for the end-user (if it was available or generated at the time of consent collection)
consents.updated_at
ISO 8601 Date | null
Timestamp of when consents were last updated
consents.config_tree
Object
Configuration tree metadata.
Note: Always present when $include_full_tree=true.
consents.config_tree.id
String
Unique ID of the configuration tree
consents.config_tree.created_at
ISO 8601 Date
Date the configuration tree was created
consents.config_tree.updated_at
ISO 8601 Date
Update date for the configuration tree
delegate
Object | null
Delegate information for consent events. Represents third parties acting on behalf of the user.
Note: Returns null if event not created by a delegate.
delegate.id
String
Unique ID of the delegate
delegate.name
String
Name of the delegate
delegate.metadata
Object
Free-form metadata object for the delegate
device_id
String | null
Device identifier provided by SDK clients
proofs_id
Array
IDs of proofs associated with this event
validation
Object | null
Validation information (if the event was validated). null if there is no validation
validation.type
String
Validation type used for this event
validation.approve_url
String
URL for approving the event (if applicable)
status
String
Status of the event:
"confirmed": indicates that the event has been validated or was not subject to validation"pending_approval": indicates that the event is pending validation
domain
String | null
Domain of the preference center Note: Used to know which preference center is this consent linked to. For example, to send a authenticated link to the preference center on user creation
regulation
String
Regulation for which the consent is collected
Consent event data dictionary API v2 without $include_full_tree=true
{
/**
* Unique event ID. Automatically generated by the API if not provided on event creation
*/
"id": "string",
/**
* Organization ID
*/
"organization_id": "string",
/**
* Creation date of the event.
* Automatically generated by the API if not provided on event creation
*/
"created_at": "ISO-8601",
/**
* Update date of the event
*/
"updated_at": "ISO-8601",
/**
* Free-form metadata object
*/
"metadata": {},
/**
* End-user information
*/
"user": {
/**
* Didomi user ID
*/
"id": "string",
/**
* Unique user ID assigned by your organization that is used to link a Didomi end-user to your internal systems as well as resolve cross-platform IDs.
*/
"organization_user_id": "string",
/**
* Type of the external user ID defined by the organization
*/
"organization_user_id_type": "string",
/**
* Free-form metadata object
*/
"metadata": {},
/**
* Two-letter ISO code of the end-user's country
*/
"country": "US",
/**
* Two-letter ISO country code of the last submitted consent event for the user
*/
"last_seen_country": "US",
/**
* External email defined by the organization
*/
"email": "user@example.com",
/**
* External phone number defined by the organization
*/
"phone": "+12345678901"
},
/**
* Source information for consent events.
* Tracks where and how the consent event was generated.
*/
"source": {
/**
* Type of source (e.g., 'web', 'mobile', 'api')
*/
"type": "web",
/**
* Source key identifier
*/
"key": "string",
/**
* Provider information
*/
"provider": "string",
/**
* Target information
*/
"target": "string",
/**
* Deployment ID associated with the source
*/
"deployment_id": "string"
},
/**
* Consent status of the end-user
*/
"consents": {
/**
* Channels for which the end-user made choices
* Note: This is a legacy property.
*/
"channels": [
{
/**
* Unique channel ID
*/
"id": "string",
/**
* Whether the end-user has enabled this channel or not
* Note: A null value indicates that the user has not made a specific choice for the channel
*/
"enabled": false,
/**
* Free-form metadata object
*/
"metadata": {}
}
],
/**
* Purposes (for both CMP and Preference Management Platform)
*/
"purposes": [
{
/**
* Unique identifier for the data processing purpose
*/
"id": "string",
/**
* End-user's consent choice for this purpose.
* true: consent given (user opted in)
* false: consent denied (user opted out)
* undefined: not specified
*/
"enabled": true,
/**
* End-user's objection status for legitimate interest processing.
* true: no objection (legitimate interest processing allowed)
* false: objection raised (legitimate interest processing blocked)
* undefined: not specified (legitimate interest not applicable)
*/
"enabled_li": null,
/**
* Custom metadata for organization-specific data storage
*/
"metadata": {},
/**
* Preferences for which the end-user has made choices
*/
"values": {
/**
* Preference selection containing the end-user's choice
* Note: Key is the configured ID of the preference
*/
"PREFERENCE_ID": {
/**
* Preference values that the end-user has made choices for
*/
"value": "string",
/**
* Indicates whether this value was set through consent propagation.
* true: value was propagated from config tree
* false: value was explicitly set by user
*/
"from_propagation": false
}
},
/**
* Indicates whether consent propagation was applied to this purpose.
* true: propagation was applied to this purpose
* undefined: propagation was not applied (either not allowed or not applicable)
*/
"propagation": true
}
],
/**
* Vendors for which the end-user has made choices
*/
"vendors": {
/**
* List of vendors where end-user has explicitly given consent for data processing
*/
"enabled": ["string1"],
/**
* List of vendors where end-user has explicitly denied consent for data processing
*/
"disabled": [],
/**
* List of vendors where end-user allows legitimate interest processing
*/
"enabled_li": [],
/**
* List of vendors where end-user objects to legitimate interest processing
*/
"disabled_li": []
},
/**
* TCF consent string for the end-user (if it was available or generated at the time of consent collection)
*/
"tcfcs": null,
/**
* Timestamp of when consents were last updated
*/
"updated_at": "ISO-8601"
},
/**
* Delegate information for consent events. Represents third parties acting on behalf of the user.
* Note: Returns null if event not created by a delegate.
*/
"delegate": {
/**
* Unique ID of the delegate
*/
"id": "string",
/**
* Name of the delegate
*/
"name": "Customer Support Agent",
/**
* Free-form metadata object for the delegate
*/
"metadata": {}
},
/**
* Device identifier provided by SDK clients
*/
"device_id": "string",
/**
* IDs of proofs associated with this event
*/
"proofs_id": ["proof_001", "proof_002"],
/**
* Validation information (if the event was validated).
* null if there is no validation
*/
"validation": {
/**
* Validation type used for this event
*/
"type": "email_approval",
/**
* URL for approving the event (if applicable)
*/
"approve_url": "https://example.com/approve/event/550e8400-e29b-41d4-a716-446655440000"
},
/**
* Status of the event:
* "confirmed": indicates that the event has been validated or was not subject to validation
* "pending_approval": indicates that the event is pending validation
*/
"status": "pending_approval",
/**
* Domain of the preference center
* Note: Used to know which preference center is this consent linked to. For example, to send a authenticated link to the preference center on user creation
*/
"domain": "example.com",
/**
* Regulation for which the consent is collected
*/
"regulation": "GDPR"
}id
String
Unique event ID. Automatically generated by the API if not provided on event creation
organization_id
String
Organization ID
created_at
ISO 8601 Date
Creation date of the event. Automatically generated by the API if not provided on event creation
Creation date of the event. Automatically generated by the API if not provided on event creation
updated_at
ISO 8601 Date | null
Update date of the event
metadata
Object
Free-form metadata object
user
Object
End-user information
user.id
String
Didomi user ID
user.organization_user_id
String
Unique user ID assigned by your organization that is used to link a Didomi end-user to your internal systems as well as resolve cross-platform IDs.
user.organization_user_id_type
String
Type of the external user ID defined by the organization
user.metadata
Object
Free-form metadata object
user.country
String | null
Two-letter ISO code of the end-user's country
user.last_seen_country
String | null
Two-letter ISO country code of the last submitted consent event for the user
user.email
String | null
External email defined by the organization
user.phone
String | null
External phone number defined by the organization
source
Object
Source information for consent events. Tracks where and how the consent event was generated.
source.type
String
Type of source (e.g., 'web', 'mobile', 'api')
source.key
String
Source key identifier
source.provider
String
Provider information
source.target
String
Target information
source.deployment_id
String
Deployment ID associated with the source
consents
Object
Consent status of the end-user
consents.channels
Array of Objects
Channels for which the end-user made choices
Note: This is a legacy property.
consents.channels.id
String
Unique channel ID
consents.channels.enabled
Boolean | null
Whether the end-user has enabled this channel or not
Note: A null value indicates that the user has not made a specific choice for the channel
consents.channels.metadata
Object
Free-form metadata object
consents.purposes
Array of Objects
Purposes (for both CMP and Preference Management Platform)
consents.purposes.id
String
Unique identifier for the data processing purpose
consents.purposes.enabled
Boolean | null
End-user's consent choice for this purpose.
true: consent given (user opted in)false: consent denied (user opted out)undefined: not specified
consents.purposes.enabled_li
Boolean | null
End-user's objection status for legitimate interest processing.
true: no objection (legitimate interest processing allowed)false: objection raised (legitimate interest processing blocked)undefined: not specified (legitimate interest not applicable)
consents.purposes.metadata
Object
Custom metadata for organization-specific data storage
consents.purposes.values
Object
Preferences for which the end-user has made choices
consents.purposes.values.{PREFERENCE_ID}
Object
Preference selection containing the end-user's choice
Note: Key is the configured ID of the preference
consents.purposes.values.{PREFERENCE_ID}.value
String
Preference values that the end-user has made choices for
consents.purposes.values.{PREFERENCE_ID}.from_propagation
Boolean
Indicates whether this value was set through consent propagation.
true: value was propagated from config treefalse: value was explicitly set by user
consents.purposes.propagation
Boolean
Indicates whether consent propagation was applied to this purpose.
true: propagation was applied to this purposeundefined: propagation was not applied (either not allowed or not applicable)
consents.vendors
Object
Vendors for which the end-user has made choices
consents.vendors.enabled
Array
List of vendors where end-user has explicitly given consent for data processing
consents.vendors.disabled
Array
List of vendors where end-user has explicitly denied consent for data processing
consents.vendors.enabled_li
Array
List of vendors where end-user allows legitimate interest processing
consents.vendors.disabled_li
Array
List of vendors where end-user objects to legitimate interest processing
consents.tcfcs
String | null
TCF consent string for the end-user (if it was available or generated at the time of consent collection)
consents.updated_at
ISO 8601 Date | null
Timestamp of when consents were last updated
delegate
Object | null
Delegate information for consent events. Represents third parties acting on behalf of the user.
Note: Returns null if event not created by a delegate.
delegate.id
String
Unique ID of the delegate
delegate.name
String
Name of the delegate
delegate.metadata
Object
Free-form metadata object for the delegate
device_id
String | null
Device identifier provided by SDK clients
proofs_id
Array
IDs of proofs associated with this event
validation
Object | null
Validation information (if the event was validated). null if there is no validation
validation.type
String
Validation type used for this event
validation.approve_url
String
URL for approving the event (if applicable)
status
String
Status of the event:
"confirmed": indicates that the event has been validated or was not subject to validation"pending_approval": indicates that the event is pending validation
domain
String | null
Domain of the preference center Note: Used to know which preference center is this consent linked to. For example, to send a authenticated link to the preference center on user creation
regulation
String
Regulation for which the consent is collected
Consent event data dictionary API v1 (Legacy) without $include_full_tree=true
{
/**
* Unique event ID. Automatically generated by the API if not provided on event creation
*/
"id": "string",
/**
* Organization ID
*/
"organization_id": "string",
/**
* Creation date of the event.
* Automatically generated by the API if not provided on event creation
*/
"created_at": "ISO-8601",
/**
* Update date of the event
*/
"updated_at": "ISO-8601",
/**
* Free-form metadata object
*/
"metadata": {},
/**
* End-user information
*/
"user": {
/**
* Didomi user ID
*/
"id": "string",
/**
* Unique user ID assigned by your organization that is used to link a Didomi end-user to your internal systems as well as resolve cross-platform IDs.
*/
"organization_user_id": "string",
/**
* Type of the external user ID defined by the organization
*/
"organization_user_id_type": "string",
/**
* Free-form metadata object
*/
"metadata": {},
/**
* Two-letter ISO code of the end-user's country
*/
"country": "US",
/**
* Two-letter ISO country code of the last submitted consent event for the user
*/
"last_seen_country": "US",
/**
* External email defined by the organization
*/
"email": "user@example.com",
/**
* External phone number defined by the organization
*/
"phone": "+12345678901"
},
/**
* Source information for consent events.
* Tracks where and how the consent event was generated.
*/
"source": {
/**
* Type of source (e.g., 'web', 'mobile', 'api')
*/
"type": "web",
/**
* Source key identifier
*/
"key": "string",
/**
* Provider information
*/
"provider": "string",
/**
* Target information
*/
"target": "string",
/**
* Deployment ID associated with the source
*/
"deployment_id": "string"
},
/**
* Consent status of the end-user
*/
"consents": {
/**
* Channels for which the end-user made choices
* Note: This is a legacy property.
*/
"channels": [
{
/**
* Unique channel ID
*/
"id": "string",
/**
* Whether the end-user has enabled this channel or not
* Note: A null value indicates that the user has not made a specific choice for the channel
*/
"enabled": true,
/**
* Free-form metadata object
*/
"metadata": {}
}
],
/**
* Purposes (for both CMP and Preference Management Platform)
*/
"purposes": [
{
/**
* Unique identifier for the data processing purpose
*/
"id": "string",
/**
* End-user's consent choice for this purpose.
* true: consent given (user opted in)
* false: consent denied (user opted out)
* undefined: not specified
*/
"enabled": true,
/**
* End-user's objection status for legitimate interest processing.
* true: no objection (legitimate interest processing allowed)
* false: objection raised (legitimate interest processing blocked)
* undefined: not specified (legitimate interest not applicable)
*/
"enabled_li": null,
/**
* Communication channels enabled at the purpose level
*/
"channels": [
{
/**
* Unique channel ID
*/
"id": "string",
/**
* Whether the end-user has enabled this channel or not
* Note: A null value indicates that the user has not made a specific choice for the channel
*/
"enabled": false
}
],
/**
* Nested preference structure providing granular consent control. Each preference can have its own enabled state, metadata, and channel overrides.
*/
"preferences": [
{
/**
* Unique identifier for the preference within its parent purpose
*/
"id": "string",
/**
* End-user's choice for this specific preference.
* true: explicitly enabled
* false: explicitly disabled
* null: no preference set (inherits from parent purpose or defaults)
*/
"enabled": true,
/**
* Custom metadata for preference-specific data storage
*/
"metadata": {},
/**
* Communication channels enabled at the preference level
*/
"channels": [
{
/**
* Unique channel ID
*/
"id": "string",
/**
* Whether the end-user has enabled this channel or not
* Note: A null value indicates that the user has not made a specific choice for the channel
*/
"enabled": true
}
]
}
],
/**
* Custom metadata for organization-specific data storage
*/
"metadata": {}
}
],
/**
* Vendors for which the end-user has made choices
*/
"vendors": {
/**
* List of vendors where end-user has explicitly given consent for data processing
*/
"enabled": ["vendor_a"],
/**
* List of vendors where end-user has explicitly denied consent for data processing
*/
"disabled": ["vendor_b"],
/**
* List of vendors where end-user allows legitimate interest processing
*/
"enabled_li": [],
/**
* List of vendors where end-user objects to legitimate interest processing
*/
"disabled_li": ["vendor_c"]
},
/**
* TCF consent string for the end-user (if it was available or generated at the time of consent collection)
*/
"tcfcs": "TCF_STRING_HERE",
/**
* Timestamp of when consents were last updated
*/
"updated_at": "ISO-8601"
},
/**
* Delegate information for consent events. Represents third parties acting on behalf of the user.
* Note: Returns null if event not created by a delegate.
*/
"delegate": {
/**
* Unique ID of the delegate
*/
"id": "string",
/**
* Name of the delegate
*/
"name": "Customer Support Agent",
/**
* Free-form metadata object for the delegate
*/
"metadata": {}
},
/**
* Device identifier provided by SDK clients
*/
"device_id": "string",
/**
* IDs of proofs associated with this event
*/
"proofs_id": ["proof_001", "proof_002"],
/**
* Validation information (if the event was validated).
* null if there is no validation
*/
"validation": {
/**
* Validation type used for this event
*/
"type": "email_approval",
/**
* URL for approving the event (if applicable)
*/
"approve_url": "https://example.com/approve/event/550e8400-e29b-41d4-a716-446655440000"
},
/**
* Status of the event:
* "confirmed": indicates that the event has been validated or was not subject to validation
* "pending_approval": indicates that the event is pending validation
*/
"status": "pending_approval",
/**
* Domain of the preference center
* Note: Used to know which preference center is this consent linked to. For example, to send a authenticated link to the preference center on user creation
*/
"domain": "example.com",
/**
* Regulation for which the consent is collected
*/
"regulation": "GDPR"
}id
String
Unique event ID. Automatically generated by the API if not provided on event creation
organization_id
String
Organization ID
created_at
ISO 8601 Date
Creation date of the event. Automatically generated by the API if not provided on event creation
updated_at
ISO 8601 Date | null
Update date of the event
metadata
Object
Free-form metadata object
user
Object
End-user information
user.id
String
Didomi user ID
user.organization_user_id
String
Unique user ID assigned by your organization that is used to link a Didomi end-user to your internal systems as well as resolve cross-platform IDs.
user.organization_user_id_type
String
Type of the external user ID defined by the organization
user.metadata
Object
Free-form metadata object
user.country
String | null
Two-letter ISO code of the end-user's country
user.last_seen_country
String | null
Two-letter ISO country code of the last submitted consent event for the user
user.email
String | null
External email defined by the organization
user.phone
String | null
External phone number defined by the organization
source
Object
Source information for consent events. Tracks where and how the consent event was generated.
source.type
String
Type of source (e.g., 'web', 'mobile', 'api')
source.key
String
Source key identifier
source.provider
String
Provider information
source.target
String
Target information
source.deployment_id
String
Deployment ID associated with the source
consents
Object
Consent status of the end-user
consents.channels
Array of Objects
Channels for which the end-user made choices
Note: This is a legacy property.
consents.channels.id
String
Unique channel ID
consents.channels.enabled
Boolean | null
Whether the end-user has enabled this channel or not
Note: A null value indicates that the user has not made a specific choice for the channel
consents.channels.metadata
Object
Free-form metadata object
consents.purposes
Array of Objects
Purposes (for both CMP and Preference Management Platform)
consents.purposes.id
String
Unique identifier for the data processing purpose
consents.purposes.enabled
Boolean | null
End-user's consent choice for this purpose.
true: consent given (user opted in)false: consent denied (user opted out)undefined: not specified
consents.purposes.enabled_li
Boolean | null
End-user's objection status for legitimate interest processing.
true: no objection (legitimate interest processing allowed)false: objection raised (legitimate interest processing blocked)undefined: not specified (legitimate interest not applicable)
consents.purposes.channels
Array of Objects
Communication channels enabled at the purpose level
consents.purposes.channels.id
String
Unique channel ID
consents.purposes.channels.enabled
Boolean | null
Whether the end-user has enabled this channel or not
Note: A null value indicates that the user has not made a specific choice for the channel
consents.purposes.preferences
Array of Objects
Nested preference structure providing granular consent control. Each preference can have its own enabled state, metadata, and channel overrides.
consents.purposes.preferences.id
String
Unique identifier for the preference within its parent purpose
consents.purposes.preferences.enabled
Boolean | null
End-user's choice for this specific preference.
true: explicitly enabledfalse: explicitly disablednull: no preference set (inherits from parent purpose or defaults)
consents.purposes.preferences.metadata
Object
Custom metadata for preference-specific data storage
consents.purposes.preferences.channels
Array of Objects
Communication channels enabled at the preference level
consents.purposes.preferences.channels.id
String
Unique channel ID
consents.purposes.preferences.channels.enabled
Boolean | null
Whether the end-user has enabled this channel or not
Note: A null value indicates that the user has not made a specific choice for the channel
consents.purposes.metadata
Object
Custom metadata for organization-specific data storage
consents.vendors
Object
Vendors for which the end-user has made choices
consents.vendors.enabled
Array
List of vendors where end-user has explicitly given consent for data processing
consents.vendors.disabled
Array
List of vendors where end-user has explicitly denied consent for data processing
consents.vendors.enabled_li
Array
List of vendors where end-user allows legitimate interest processing
consents.vendors.disabled_li
Array
List of vendors where end-user objects to legitimate interest processing
consents.tcfcs
String | null
TCF consent string for the end-user (if it was available or generated at the time of consent collection)
consents.updated_at
ISO 8601 Date | null
Timestamp of when consents were last updated
delegate
Object | null
Delegate information for consent events. Represents third parties acting on behalf of the user.
Note: Returns null if event not created by a delegate.
delegate.id
String
Unique ID of the delegate
delegate.name
String
Name of the delegate
delegate.metadata
Object
Free-form metadata object for the delegate
device_id
String | null
Device identifier provided by SDK clients
proofs_id
Array
IDs of proofs associated with this event
validation
Object | null
Validation information (if the event was validated). null if there is no validation
validation.type
String
Validation type used for this event
validation.approve_url
String
URL for approving the event (if applicable)
status
String
Status of the event:
"confirmed": indicates that the event has been validated or was not subject to validation"pending_approval": indicates that the event is pending validation
domain
String | null
Domain of the preference center Note: Used to know which preference center is this consent linked to. For example, to send a authenticated link to the preference center on user creation
regulation
String
Regulation for which the consent is collected
Last updated