# Get campaign claim analytics (Admin/Business)

Returns aggregated campaign claim data with flexible grouping and metrics. Business users are auto-filtered to their own campaigns (ownerBusinessId). Admin users see all data.

Endpoint: POST /analytics/campaign-claims
Version: 2.0.59
Security: bearer

## Security:

  - `bearer` (unknown)

## Request body:

  - `application/json` (unknown)
    Campaign claim analytics request with grouping and metrics

## Request fields (application/json):

  - `filters` (object)
    Dynamic filters based on CampaignClaimAnalyticsDTO fields
    Example: {"status":"COMPLETED","campaignId":"campaign-uuid-123","userCountryCode":"US"}

  - `filters.id` (string)
    Unique claim ID (UUID) - primary identifier for this claim record
    Example: claim-uuid-123

  - `filters.userId` (string)
    Filter by user ID
    Example: user-uuid-123

  - `filters.campaignId` (string)
    Filter by campaign ID
    Example: campaign-uuid-456

  - `filters.businessId` (string)
    Filter by business ID
    Example: business-uuid-789

  - `filters.triggerSourceId` (string)
    Filter by trigger source ID
    Example: trigger-uuid-101

  - `filters.status` (string)
    Filter by claim status
    Enum: "PENDING", "PROCESSING", "COMPLETED", "FAILED"

  - `filters.userCountryCode` (string)
    Filter by user country code
    Example: US

  - `filters.latitude` (number)
    Latitude coordinate (decimal degrees) of claim location. Combined with longitude for geospatial analytics, heatmaps, and location-based insights. NULL if location not available.
    Example: 47.6062

  - `filters.longitude` (number)
    Longitude coordinate (decimal degrees) of claim location. Combined with latitude for geospatial analytics, heatmaps, and location-based insights. NULL if location not available.
    Example: -122.3321

  - `filters.message` (string)
    Failure reason if status is FAILED

  - `filters.ownerBusinessId` (string)
    Filter by owner business ID (claims from campaigns owned by this business)

  - `groupBy` (array)
    Fields to group by for aggregation
    Example: ["campaignId","status","month"]

  - `groupByExpressions` (array)
    Complex CASE WHEN expressions for advanced grouping
    Example: [{"expression":"CASE WHEN status = 'COMPLETED' THEN 'success' ELSE 'other' END","alias":"statusGroup","label":"Status Group"}]

  - `groupByExpressions.expression` (string, required)
    SQL CASE WHEN expression for complex grouping logic
    Example: CASE WHEN senderOwnerType = user THEN senderId WHEN recipientOwnerType = user THEN recipientId END

  - `groupByExpressions.alias` (string, required)
    Alias name for the expression result in SELECT clause
    Example: userId

  - `groupByExpressions.label` (string)
    Human-readable label for frontend display
    Example: User ID

  - `metrics` (string)
    Metrics to calculate
    Enum: "count", "sum", "avg", "min", "max"

  - `sortBy` (string)
    Field to order results by (supports metric names and expression aliases)
    Example: count

  - `sortOrder` (string)
    Order direction
    Enum: "ASC", "DESC"

  - `limit` (number)
    Maximum number of aggregation groups to return
    Example: 10

  - `startDate` (string)
    Start date for analytics (ISO format)
    Example: 2026-01-01T00:00:00.000Z

  - `endDate` (string)
    End date for analytics (ISO format)
    Example: 2026-12-31T23:59:59.999Z

## Request examples:

  - `Claims count per campaign` (unknown)

  - `Claims by status over time` (unknown)

  - `Claims by country` (unknown)

## Response 200:

  - `200` (unknown)
    Analytics data successfully retrieved

## Response 200 fields (application/json):

  - `results` (array, required)
    Analytics results array with dynamic fields based on groupBy
    Example: [{"campaignId":"camp-uuid-1","count":"150"},{"status":"COMPLETED","month":"2026-01-01T00:00:00.000Z","count":"45"},{"businessId":"biz-uuid-1","userCountryCode":"US","count":"89"}]

  - `totalGroups` (number, required)
    Total number of result groups
    Example: 10

  - `metadata` (object, required)
    Query metadata showing applied date range and totals
    Example: {"dateRange":{"startDate":"2024-01-01T00:00:00.000Z","endDate":"2024-12-31T23:59:59.999Z"},"totalCount":440}

## Response 201 fields (application/json):

  - `results` (array, required)
    Analytics results array with dynamic fields based on groupBy
    Example: [{"campaignId":"camp-uuid-1","count":"150"},{"status":"COMPLETED","month":"2026-01-01T00:00:00.000Z","count":"45"},{"businessId":"biz-uuid-1","userCountryCode":"US","count":"89"}]

  - `totalGroups` (number, required)
    Total number of result groups
    Example: 10

  - `metadata` (object, required)
    Query metadata showing applied date range and totals
    Example: {"dateRange":{"startDate":"2024-01-01T00:00:00.000Z","endDate":"2024-12-31T23:59:59.999Z"},"totalCount":440}

