# Get customer feedback by period (legacy alias)

Legacy top-level alias of the customer feedback by period endpoint, kept for backwards compatibility. Behaves identically to "Get customer feedback by period" (/customer-feedback/by-period), which is preferred for new integrations. Defaults to all available data (from 1970-01-01 up to today) if startDate is not provided.

Endpoint: GET /dashboard/customer-feedback-by-period
Version: 20260701

## Query parameters:

  - `v` (any)
    API version. Defaults to the latest version. Versions older than 20260713 return the legacy flat interactionCountByPeriod format and label each period by granularity (weekly '2025 3', monthly and quarterly 2025-3, yearly 2025) instead of returning the ISO start date of the period.

  - `startDate` (any)
    Start date (inclusive) as an ISO-8601 date or date-time, with or without zone/offset (e.g. 2025-01-01, 2025-01-01T14:30:00, 2025-01-01T14:30:00Z, 2025-01-01T14:30:00%2B02:00). Zone-aware values are normalised to UTC. The formats yyyy.MM.dd, dd.MM.yyyy, dd-MM-yyyy HH:mm:ss and dd.MM.yyyy HH:mm:ss are also accepted. Optional for most endpoints — defaults to a period before end date if omitted.

  - `endDate` (any)
    End date (inclusive) as an ISO-8601 date or date-time, with or without zone/offset. Zone-aware values are normalised to UTC. The formats yyyy.MM.dd, dd.MM.yyyy, dd-MM-yyyy HH:mm:ss and dd.MM.yyyy HH:mm:ss are also accepted. Defaults to today.

  - `group` (string)
    Overrides the automatic granularity of the date range. Case-insensitive. When omitted, granularity is derived from the range length. Legacy values DAY, WEEK, MONTH and YEAR are also accepted. HOUR returns the whole range as a single bucket holding the ACTIONS_PHONE hour-of-day profile (phone0..phone23) and is only valid for the ACTIONS_PHONE metric; other endpoints treat it as DAILY.

  - `filterCategory` (string)
    Filter strategy to use for scoping locations

  - `textFilter` (any)
    Deprecated: use the newer `query` parameter instead. Free-text location search that narrows results to matching locations (matches name, address, identifier and label fields). Supports #label and @group tokens (e.g. "main st #premium @north"), combined with AND semantics. Applied only when no filterCategory is set.

  - `locationIds` (any)
    Comma-separated location IDs (used when filterCategory=location)

  - `businessIds` (any)
    Comma-separated business IDs (used when filterCategory=business)

  - `labels` (any)
    Label names (used when filterCategory=labels)

  - `locationGroupIds` (any)
    Location group IDs (used when filterCategory=location-groups)

  - `excludedLocationIds` (any)
    Comma-separated location IDs to exclude from results

  - `excludedBusinessIds` (any)
    Comma-separated business IDs to exclude from results

  - `excludedLabels` (any)
    Label names to exclude from results

  - `excludedLocationGroupIds` (any)
    Location group IDs to exclude from results

## Response 200 fields (application/json):

  - `averageRatingByPeriod` (array, required)
    Average rating per time period

  - `averageRatingByPeriod.period` (any, required)

  - `averageRatingByPeriod.value` (any, required)

  - `granularity` (string, required)
    Time period granularity. Auto-determined by the date range span unless overridden by the `group` query parameter.
    Enum: "HOUR", "DAILY", "WEEKLY", "MONTHLY", "QUARTERLY", "YEARLY"

  - `interactionCountByPeriod` (object, required)
    Interaction counts per period grouped by type (reviews, questions, photos)

  - `interactionCountByPeriod.reviews` (array, required)

  - `interactionCountByPeriod.reviews.period` (any, required)

  - `interactionCountByPeriod.reviews.count` (any, required)

  - `interactionCountByPeriod.questions` (array, required)

  - `interactionCountByPeriod.questions.period` (any, required)

  - `interactionCountByPeriod.questions.count` (any, required)

  - `interactionCountByPeriod.photos` (array, required)

  - `interactionCountByPeriod.photos.period` (any, required)

  - `interactionCountByPeriod.photos.count` (any, required)

  - `matchedLocationsCount` (any, required)
    Number of locations that matched the filter

  - `totalRatingCount` (any, required)
    Total number of ratings across all periods

  - `isPartialData` (any, required)
    True when some periods have incomplete data

  - `granularity` (string, required)
    Time period granularity
    Enum: "HOUR", "DAILY", "WEEKLY", "MONTHLY", "QUARTERLY", "YEARLY"

  - `interactionCountByPeriod` (array, required)
    Combined review and photo interaction count per period (legacy flat format)

  - `interactionCountByPeriod.period` (any, required)

  - `interactionCountByPeriod.count` (any, required)

