Reports
Once your property is created, you will be able to generate as much reports as you want for that property.
Create a Report
To create a report, you will need the property ID. Create a report by calling the POST /reports/compliances/reports endpoint.
Retrieve Reports
Once the report is created, a scan will be triggered. A scan can take some time to finish. You can retrieve a list of reports' summary by calling the GET /reports/compliances/reports endpoint.
As mentioned in the API documentation, reports can be filtered in many ways. For example, if you want to retrieve all reports created in January 2025
with status success
.
Retrieve a Report
If you want to get the full report, you will need to call the GET /reports/compliances/reports/{{report_id}} endpoint along with the $with
parameter.
This endpoint will return the summary of the report with an outputs
object including all necessary information. The object contains information as follow:
reports.json
This JSON contains the summary of the report.
id
ID of the report
String
property_id
ID of the property
String
organization_id
ID of the organization
String
trackers_count
Number of trackers found during the scan
Integer
vendors_count
Number of vendors found during the scan
Integer
score
Compliance Score.
Integer (0 - 100)
errors
List of errors per scenario
Array (See below)
additional_info
List of additional information per scenario
Array (See below)
status
Status of the report
String (success
, partial
, failed
, queued
, pending
)
created_at
Date of creation
Date
Errors for each scenario
collect_id
ID of the collect
String
scenario_id
ID of the scenario
String
error _type
Type of error
String
error_description
Description
String
Additional Information for each scenario
collect_id
ID of the collect
String
scenario_id
ID of the scenario
String
info_type
Type of information
String (See below)
info_description
Description
String (See below)
Please find the different information type with their description:
Website not reachable (website_not_reachable)
This error occurs when the crawler cannot access the website. Potential reasons include:
A server error on the client’s website (e.g., 404, 500), making the website unavailable.
An unexpected issue on our crawler’s end.
In some cases, retrying the scan may resolve the issue, such as when the website was temporarily unavailable.
Anti-bot system (anti_bot_system)
The website is equipped with an anti-bot system which prevents us from accessing it.
No existing or clear CMP on the page (no_existing_or_clear_cmp)
We could not detect a clear CMP on the page, either visually or in the code. This indicates the client may not have implemented a CMP, preventing us from interacting with an accept/refuse button.
No button found to accept/refuse (no_button_found)
Although we detected a modal or banner resembling a CMP, there were no proper accept or refuse buttons to interact with. This is often due to websites displaying a banner to inform users about cookie usage but not providing explicit options to accept or refuse.
Not able to click on the button in the page (not_able_to_click)
While we identified a CMP and its buttons, we could not programmatically click them. This may result from issues on our end in locating or interacting with the buttons. We are continuously improving our logic to reduce the occurrence of this issue.
General Error (general_error)
This error is caused by an issue in our API. Such errors are rare, as our system typically handles them through retries. When they occur, rerunning the report often resolves the problem.
Example
report_aggregated_trackers.json
This JSON contains the list of aggregated trackers found during the scan with added information.
property_id
Property ID
String
report_id
Report ID
String
organization_id
Organization ID
String
id
Internal ID of the tracker
String
type
Type of tracker
String (web_storage
, pixel
, cookie
, indexed_db
)
source
Source of tracker
String (js_browser
, http_request
, other
)
name
Name of tracker
String
host
Host of tracker
String
is_http_only
Is the tracker HTTP Only
Boolean
is_secure_only
Is the tracker Secure Only
Boolean
is_persistent
Is the tracker persistent
Boolean
is_third_party
Is the tracker third party
Boolean
initiator
Object containing the initiator of the tracker information
Object
cmp
Object regarding CMP context under which the tracker was found
Object (See below)
page_url
URL of the page
String
page_url_host
Host of the page
String
page_url_sld
SDL of the page
String
name_pattern
We might group some trackers by name if they follow a similar pattern.
String
initial_name
Initial name of the tracker. Different from the name
if a pattern has been used to group trackers.
String
sld
SLD of the tracker
String
vendor.id
ID of the vendor associated to the tracker
String
vendor.name
Name of the vendor associated to the tracker
String
max_lifetime_seconds
Lifetime of the tracker in seconds
Number (-1 meaning not lifetime)
created_at
Date of creation
Date
CMP
The cmp
object contains extra information.
scenario_step.id[]
Steps in which the tracker was dropped. Didomi runs multiple scenarios (No User Choice, Consent to all, Refuse to all).
Ex: During a consent_to_all
scenario, trackers are dropped before the crawler clicked on the accept button. We consider in that case the scenario step to be no_user_choice
. Once the crawler successfully clicked on the accept button, the scenario step becomes consent_to_all
.
Array (no_user_choice
, consent_to_all
, refuse_to_all
)
scenario.id[]
Scenarios in which the tracker was dropped. In opposition with the scenario step, this is the global scenario under which the crawler runs.
Array (no_user_choice
, consent_to_all
, refuse_to_all
)
If you want to know under which scenario step the tracker was dropped, please follow this logic:
If the array contains
no_user_choice
, the tracker was dropped onNo CMP choice scenario
, regardless if it contains other values.If the array contains
refuse_to_all
, the tracker was dropped onRefuse to all
, regardless if it contains other values.If the array contains
consent_to_all
, the tracker was dropped onConsent to all
.If the array is empty, the tracker was dropped on
No CMP choice scenario
.
Example
report_aggregated_vendors.json
This JSON contains the list of aggregated vendors found during the scan with added information.
property_id
Property ID
String
report_id
Report ID
String
organization_id
Organization ID
String
id
ID of the vendor or host of the request if we were not able to link the request to a vendor
String
request_count
Number of requests associated to the vendor during the scan
String
partner
Object containing the vendors details or a vendor was match to the request. Null otherwise
Object (See below) | null
cmp
Object regarding CMP context under which the vendor was seen
Object (See below)
created_at
Date of creation
Date
Partner
id
ID of the vendor
String
name
Name of the vendor
String
matched_hosts
List of hosts linked to that vendor
Array
functional_namespace
Functional namespace
String
country
Country of the vendor
String
namespaces
List of namespaces where the vendor can be found (IAB, etc...)
Object
tcf
Object containing purposes linked to that vendor
Object
CMP
The cmp
object contains extra information.
scenario_step.id[]
Steps in which the vendor was seen. Didomi runs multiple scenarios (No User Choice, Consent to all, Refuse to all).
Ex: During a consent_to_all
scenario, vendors are seen before the crawler clicked on the accept button. We consider in that case the scenario step to be no_user_choice
. Once the crawler successfully clicked on the accept button, the scenario step becomes consent_to_all
.
Array (no_user_choice
, consent_to_all
, refuse_to_all
)
scenario.id[]
Scenarios in which the vendor was seen. In opposition with the scenario step, this is the global scenario under which the crawler runs.
Array (no_user_choice
, consent_to_all
, refuse_to_all
)
Example
report_privacy.json
This JSON contains privacy information regarding the website scanned.
organization_id
Organization ID
String
report_id
Report ID
String
property_id
Property ID
String
privacy
Object containing all privacy values
Object (See below)
created_at
Date of creation
Date
Privacy
has_user_consent_information
Consent Information present in the page
Boolean
has_user_consent_choice
CMP present in the page
Boolean
has_short_cookies_lifetime
Cookies lifetime is less than 13 months
Boolean
has_privacy_policy
Privacy Policy link present in at least one page
Boolean
has_privacy_policy_all_pages
Privacy Policy link present in all pages scanned
Boolean
has_privacy_policy_opt_out
Privacy Policy Opt-out present in at least one page
Boolean
Example
{{scenario_id}}/proof_of_scan.gif
When scanning the website, we record the interactions in a GIF file for each scenario.
{{scenario_id}}/proof_of_scan.har
When scanning the website, we record the HAR containing all sort of information like trackers, requests, etc...
Only relevant files are described above.
Each links have a lifetime of 5 minutes. If the links have expired, please run the request again.
Last updated