> ## Documentation Index
> Fetch the complete documentation index at: https://wiki.darknetsearch.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Credential comparison report

> Compare leaked credentials across a set of domains over a period — on demand or on a monthly schedule.

The credential comparison report is a **PDF** that compares the leaked credentials found across a set of domains over a chosen period — useful for measuring exposure across your brands, subsidiaries, or a domain and its country variants side by side. (In the dashboard this is the **Credential Reports** product.)

### Generate

[`generate_credential_comparison_report`](https://client-api.leak.center/scalar-docs/#tag/report/POST/service/generate_credential_comparison_report/) takes the domains to compare and a period:

```bash theme={"dark"}
curl https://client-api.leak.center/api/service/generate_credential_comparison_report/ \
  -X POST \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
        "domains": ["acme.com", "acme.co.uk", "acme-partner.com"],
        "started_at": "01-01-2026",
        "ended_at": "30-06-2026"
      }'
```

`domains` is the set to compare; it must contain at least one domain — an empty list is rejected with `400 {"domains": ["Empty domains list is not allowed."]}` (blank or duplicate entries are dropped too). `started_at` / `ended_at` bound the period (`dd-mm-yyyy`). It returns `{ message, report_id }` — take it to [track the report and download the PDF](/api/guides/reports).

### Schedule it monthly

Rather than running this by hand each month, schedule it. [`create_report_schedule`](https://client-api.leak.center/scalar-docs/#tag/report/POST/service/create_report_schedule/) generates a credential comparison report for the same domains **every month**:

```bash theme={"dark"}
curl https://client-api.leak.center/api/service/create_report_schedule/ \
  -X POST \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
        "domains": ["acme.com", "acme.co.uk"],
        "is_active": true,
        "end_date": "31-12-2026"
      }'
```

`domains` is required and must be non-empty — an empty list is rejected with `400 {"domains": ["Empty domains list is not allowed."]}`. `is_active` defaults to `true`; `end_date` (`dd-mm-yyyy`, optional) stops the schedule after that date. It returns `{ message, schedule_id }`.

* **List** your schedules with [`list_report_schedules`](https://client-api.leak.center/scalar-docs/#tag/report/GET/service/list_report_schedules/) — each carries `id`, `domains`, `is_active`, `create_date`, `update_date`, and `end_date`.
* **Pause or edit** one with [`update_report_schedule`](https://client-api.leak.center/scalar-docs/#tag/report/PATCH/service/update_report_schedule/\{schedule_id}/). Every `PATCH` must include `domains`; `end_date` and `is_active` are optional. There's no separate delete — to stop a schedule, send its `domains` with `is_active: false`. A bare `PATCH {"is_active": false}` returns `400 {"domains": ["This field is required."]}`.
* **See what it's produced** with [`list_scheduled_reports`](https://client-api.leak.center/scalar-docs/#tag/report/GET/service/list_scheduled_reports/\{schedule_id}/) — the reports that schedule has generated, each downloadable by its `report_id` like any other.
