Report Profile

Note

A report profile is a saved, reusable filter/condition for Zammad’s reporting module, it isn’t an automation and doesn’t do anything by itself. It’s a named condition that shows up as a selectable view when generating reports with Zammad’s reporting feature, scoped to whichever roles (role_ids) can see it. Compare to Core Workflow, which uses a similarly-shaped condition object but does not validate referenced fields.

See the report profiles admin documentation for the UI-side picture of this feature.

List

Required permission: admin.report_profile

GET-Request sent: /api/v1/report_profiles

Response:

# HTTP-Code 200 Ok

[
   {
      "id": 1,
      "name": "-all-"
   },
   {
      "id": 2,
      "name": "Open tickets (new or open)"
   }
]

Note

Only id and name are shown here. See Show below for the full field set of a single profile (condition, active, role_ids, etc.). Entry 1 (-all-) is Zammad’s built-in default profile.

Show

Required permission: admin.report_profile

GET-Request sent: /api/v1/report_profiles/{id}

Response:

# HTTP-Code 200 Ok

{
   "id": 2,
   "name": "Open tickets (new or open)",
   "condition": {
      "ticket.state_id": {
         "operator": "is",
         "value": ["1", "2"]
      }
   },
   "active": true,
   "updated_by_id": 3,
   "created_by_id": 3,
   "created_at": "2026-09-24T12:32:01.918Z",
   "updated_at": "2026-09-24T12:32:01.905Z",
   "role_ids": [
      2,
      1
   ]
}

Create

Required permission: admin.report_profile

POST-Request sent: /api/v1/report_profiles

{
   "name": "Open tickets (new or open)",
   "condition": {
      "ticket.state_id": {"operator": "is", "value": ["1", "2"]}
   },
   "active": true,
   "role_ids": [1, 2]
}

Note

Role ids aren’t guaranteed to be the same across instances. Look up the ids of the roles you need via the roles API first instead of hard-coding them.

Response:

# HTTP-Code 201 Created

{
   "id": 2,
   "name": "Open tickets (new or open)",
   "condition": {
      "ticket.state_id": {"operator": "is", "value": ["1", "2"]}
   },
   "active": true,
   "updated_by_id": 3,
   "created_by_id": 3,
   "created_at": "2026-09-24T12:32:01.918Z",
   "updated_at": "2026-09-24T12:32:01.905Z",
   "role_ids": [
      2,
      1
   ]
}

Note

Unlike core workflows, a report profile’s condition does validate that referenced fields are real, fully-migrated ticket fields. Referencing a custom field that exists but hasn’t finished its schema migration yet (to_create/to_migrate still true on that field) fails with:

# HTTP-Code 422 Unprocessable Entity

{
   "error": "Invalid object selector conditions",
   "error_human": "Invalid object selector conditions",
   "invalid_attribute": {
      "condition": "Invalid object selector conditions"
   }
}

Update

Required permission: admin.report_profile

PUT-Request sent: /api/v1/report_profiles/{id}

Same payload shape as Create above. Response is the updated record, same shape as Create’s response.

Note

Sending the full Create payload to an existing profile’s id updates that record in place. It doesn’t create a duplicate.

Delete

Required permission: admin.report_profile

Danger

This is a permanent removal

Please note that removing report profiles cannot be undone.

DELETE-Request sent: /api/v1/report_profiles/{id}

Response:

# HTTP-Code 200 Ok

{}