# Error reports and Send to support

> Exactly what the panel's anonymous error reports contain, what they never contain, how to turn them off (or off for good on air-gapped servers), and how Send to support works.

Source: https://zopanel.net/docs/error-reports  
Updated: 2026-10-10

ZoPanel can tell us when something breaks on your server, so we can fix bugs you may never report. Privacy comes first: a report says **what** failed, never **whose** website, mailbox or file it was. This page lists everything that is sent, so you can check it yourself.

## Anonymous error reports

A report is sent when:

- a background task fails (an SSL certificate, a backup, an install…);
- the panel or its root agent panics, or crashed the last time it ran (the report is sent when it starts again);
- the panel was stopped without shutting down (killed, out of memory).

### What a report contains

This is a complete report: there is nothing else.

```json
{
  "install_id": "9b1f0c4e7a2d4f86b3c51e0d2a7f9c13",
  "version": "0.4.16",
  "commit": "6c960a8",
  "os": "ubuntu",
  "os_version": "24.04",
  "arch": "amd64",
  "process": "panel",
  "event": "job_failed",
  "kind": "ssl.issue",
  "code": "ssl.dns_mismatch"
}
```

| Field | What it is |
|---|---|
| `install_id` | A random number made on your server the first time a report is sent. It is **not** your license key, server ID, hostname or IP address, and cannot be traced back to them. It lets us count how many servers see the same problem. |
| `version`, `commit` | The ZoPanel version running. |
| `os`, `os_version`, `arch` | For example `debian`, `12`, `arm64`. |
| `process` | `panel` or `agent` (the part running as root). |
| `event` | `job_failed`, `panic`, `crash` or `unclean_exit`. |
| `kind` | The kind of task, for example `backup.create`. |
| `code` | The error's stable code, for example `backup.no_space` (the same code the panel translates into your language). |

For a crash or a panic, two more fields:

- `panic`: the Go runtime's own message, such as `runtime error: index out of range [3] with length 2`. Any other panic message is never sent: only its Go type, such as `panic(string)`.
- `stack`: the names of ZoPanel's own functions that were running, with their file and line in our source code, for example `internal/api.(*Server).createSite internal/api/sites.go:211`. Frames of any other code, function arguments and memory addresses are removed.

You can see a real report from your own server under **Settings → Support**.

### What is never sent

- Domain names, user names, e-mail addresses, IP addresses.
- File paths (`/home/…`), file contents, database contents, mail.
- Error messages, task titles and task logs.
- Request bodies, environment variables, passwords, tokens or keys.
- Your license key or the server's hostname.

Codes and stack frames must match a strict shape before they are sent (lowercase words separated by dots; ZoPanel function names), and anything that looks like a domain name or an IP address is refused. The license server checks the same rules again when it receives a report.

### How often

- Each problem is sent once a day per version, and a server sends at most **20 reports a day**.
- Reports are sent in the background with a 10-second timeout. The panel never waits for them.
- If ZoPanel cannot be reached, reports wait in a small file (`/var/lib/zopanel/error-reports.json`, at most 20 reports) and are sent later.
- Reports go only to `https://license.zopanel.net/v1/reports`, over HTTPS. The address is built into the panel; redirects are not followed.
- Our server keeps reports for **90 days**. It does not store the IP address a report comes from.

### Turning them off

Error reports are on by default, and the dashboard shows a one-time notice about them to the administrator.

- **In the panel:** Settings → Support → turn off **Send anonymous error reports**. Reports waiting to be sent are deleted.
- **For good, on the server** (air-gapped or regulated servers): add `"disable_error_reports": true` to `/etc/zopanel/config.json`, then `systemctl restart zopanel`. This also turns off **Send to support** uploads. The environment variable `ZOPANEL_DISABLE_ERROR_REPORTS=1` (for example with `systemctl edit zopanel`) does the same.

Only a full administrator can change this setting. API tokens cannot reach it.

## Send to support

When you need help, an administrator can send a diagnostic bundle to the ZoPanel team from the panel:

- on a failed task: open the task and click **Send to support**;
- any time: **Settings → Support → Prepare bundle**.

The bundle holds the same files as `zopanel ctl support-bundle`: the doctor's checks, versions, failed services, resource usage, the last 300 lines of the logs of the panel's services and nginx, and the panel's configuration with passwords, secrets, tokens and keys removed. From a failed task, it also holds that task's error and the end of its log.

**Nothing is sent until you click Send.** The panel first shows every file, exactly as it will be sent. You can add a note, or download the bundle instead and attach it to a ticket yourself. Unlike error reports, logs can contain your domain names and the server's IP addresses: read them before sending.

Once sent, the panel shows a reference such as `ZB-1A2B3C4D5E`. Quote it in your [support ticket](/support). Bundles are kept for 90 days and are opened only by the support team to answer you.
