---
title: Reports
url: https://docs.kaltura.com/docs/events-collaboration/user-profile-api/user-profile-reports
---

## Reports

The reports controller provides aggregate statistics over user profiles.

### 12.1 Event Data Statistics

Get attendance and registration statistics grouped by dimensions.

```
POST /api/v1/reports/eventDataStats
Content-Type: application/json
Authorization: Bearer &lt;KS&gt;
```

This endpoint requires `ANALYTICS_BASE` or `EP_USER_ANALYTICS` permission (different from the `ADMIN_BASE` required by other endpoints).

```json
{
  "filter": {
    "appGuidIn": ["app-guid-1", "app-guid-2"],
    "attendanceStatusIn": ["attended", "participated"],
    "regOriginIn": ["registration", "invite"]
  },
  "dimensions": ["attendanceStatus", "regOrigin"]
}
```

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `filter.appGuidIn` | string[] | Yes | One or more app GUIDs (at least one required) |
| `filter.attendanceStatusIn` | string[] | No | Filter by attendance statuses |
| `filter.regOriginIn` | string[] | No | Filter by registration origins |
| `dimensions` | string[] | Yes | Grouping dimensions (at least one): `attendanceStatus`, `regOrigin`, or both |

**Response:**

```json
{
  "results": [
    {
      "appGuid": "app-guid-1",
      "dimensions": {
        "attendanceStatus": "attended",
        "regOrigin": "registration"
      },
      "count": 45
    },
    {
      "appGuid": "app-guid-1",
      "dimensions": {
        "attendanceStatus": "participated",
        "regOrigin": "invite"
      },
      "count": 23
    }
  ],
  "sum": 68
}
```

```bash
# Get attendance breakdown for an event
curl -X POST "$KALTURA_USER_PROFILE_URL/reports/eventDataStats" \
  -H "Authorization: Bearer $KALTURA_KS" \
  -H "Content-Type: application/json" \
  -d "{
    \"filter\": {
      \"appGuidIn\": [\"$APP_GUID\"]
    },
    \"dimensions\": [\"attendanceStatus\"]
  }"
```

### 12.2 First Attendance Per App

Get counts of users who reached "attended" status or higher, grouped by app. Uses the `firstAttendedStatusTime` timestamp.

```
POST /api/v1/user-profile/firstAttendanceStatusPerApp
Content-Type: application/json
Authorization: Bearer &lt;KS&gt;
```

```json
{
  "fromDate": "2025-01-01T00:00:00Z",
  "toDate": "2025-12-31T23:59:59Z"
}
```

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `fromDate` | string | No | ISO 8601 start date (filters `firstAttendedStatusTime`) |
| `toDate` | string | No | ISO 8601 end date |

**Response:** Object keyed by `appGuid` with attendance counts:

```json
{
  "app-guid-1": 145,
  "app-guid-2": 82
}
```

```bash
curl -X POST "$KALTURA_USER_PROFILE_URL/user-profile/firstAttendanceStatusPerApp" \
  -H "Authorization: Bearer $KALTURA_KS" \
  -H "Content-Type: application/json" \
  -d '{
    "fromDate": "2025-01-01T00:00:00Z",
    "toDate": "2025-12-31T23:59:59Z"
  }'
```
