> ## Documentation Index
> Fetch the complete documentation index at: https://widgetic.com/llms.txt
> Use this file to discover all available pages before exploring further.

# What each managed user's widgets did

> Lists every one of your managed users with what their widgets and compositions did in a period: views,
interactions and visitors, and how many widgets and compositions they have made. A managed user whose widgets
were not viewed is listed too, with zeros. The most viewed come first, and `page.hasMore` says whether more
follow.

Only the compositions made for a managed user count for it: file them under the user when you create them
(`managedUserId` on `createComposition`), or let the user's editor session do it, which files everything under
its user. What a visitor did with a composition that is not filed under anyone is in the summary of the whole
account (`getPartnerAnalyticsSummary`) and in no managed user's row.

The period works as it does for `getPartnerAnalyticsSummary`. The caller must be the person who administers the
partner (an API key of that account works, with the `partner:read` scope), or a Widgetic administrator.




## OpenAPI

````yaml /openapi/widgetic-api-public.json get /partners/{partnerId}/analytics/managed-users
openapi: 3.0.0
info:
  title: Widgetic API Gateway
  version: 1.0.0
  description: API documentation for the Widgetic API Gateway
  license:
    name: Widgetic Integration License
    url: https://docs.widgetic.com/resources/license
servers:
  - url: https://api.widgetic.com/v1
    description: Production server
    variables:
      env:
        default: production
        description: Environment
      apiUrl:
        default: https://api.widgetic.com
        description: API URL
      apiVersion:
        default: /v1
        description: API Version path prefix
security: []
tags: []
paths:
  /partners/{partnerId}/analytics/managed-users:
    get:
      tags:
        - Partners
      summary: What each managed user's widgets did
      description: >
        Lists every one of your managed users with what their widgets and
        compositions did in a period: views,

        interactions and visitors, and how many widgets and compositions they
        have made. A managed user whose widgets

        were not viewed is listed too, with zeros. The most viewed come first,
        and `page.hasMore` says whether more

        follow.


        Only the compositions made for a managed user count for it: file them
        under the user when you create them

        (`managedUserId` on `createComposition`), or let the user's editor
        session do it, which files everything under

        its user. What a visitor did with a composition that is not filed under
        anyone is in the summary of the whole

        account (`getPartnerAnalyticsSummary`) and in no managed user's row.


        The period works as it does for `getPartnerAnalyticsSummary`. The caller
        must be the person who administers the

        partner (an API key of that account works, with the `partner:read`
        scope), or a Widgetic administrator.
      operationId: getPartnerAnalyticsByManagedUser
      parameters:
        - in: path
          name: partnerId
          required: true
          schema:
            type: string
            format: uuid
          description: The partner whose managed users to report on
        - in: query
          name: startDate
          schema:
            type: string
          description: >
            Start of the period, included. An ISO 8601 date (`2026-10-01`) or
            date-time with its offset. Default 30 days before `endDate`.
        - in: query
          name: endDate
          schema:
            type: string
          description: >-
            End of the period, not included, in the same forms. Default now. At
            most 366 days after `startDate`.
        - in: query
          name: limit
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 50
          description: How many managed users to list at most
        - in: query
          name: offset
          schema:
            type: integer
            minimum: 0
            maximum: 100000
            default: 0
          description: How many managed users to skip
      responses:
        '200':
          description: What each managed user's widgets did in the period
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerAnalyticsByManagedUserResponse'
        '400':
          description: >-
            A date is not a date, `startDate` is not before `endDate`, or the
            period is longer than 366 days
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: The API key is missing or invalid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: The caller does not administer this partner
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: There is no such partner (reported to administrators only)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: >-
            The partner has no administrator account
            (PARTNER_HAS_NO_ADMINISTRATOR)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Too many report requests. Wait a minute.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - apiKeyAuth: []
components:
  schemas:
    PartnerAnalyticsByManagedUserResponse:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
          description: Always `true` on a success.
          example: true
        data:
          $ref: '#/components/schemas/PartnerAnalyticsByManagedUser'
        meta:
          $ref: '#/components/schemas/ResponseMeta'
    ErrorResponse:
      type: object
      required:
        - success
        - message
        - error
      additionalProperties: true
      properties:
        success:
          type: boolean
          description: Always `false` on a failure.
          example: false
        message:
          type: string
          description: The same text as `error.message`, for a caller that reads one line.
        error:
          $ref: '#/components/schemas/ErrorDetail'
    PartnerAnalyticsByManagedUser:
      type: object
      description: >
        What each of the partner's managed users did in a period. Every managed
        user of the partner is listed, also one whose widgets were not viewed,
        the most viewed first.
      required:
        - partnerId
        - period
        - managedUsers
        - page
      properties:
        partnerId:
          type: string
          format: uuid
        period:
          $ref: '#/components/schemas/PartnerReportPeriod'
        managedUsers:
          type: array
          items:
            $ref: '#/components/schemas/PartnerAnalyticsOfManagedUser'
        page:
          $ref: '#/components/schemas/PartnerReportPage'
      example:
        partnerId: 3fa85f64-5717-4562-b3fc-2c963f66afa6
        period: null
        managedUsers:
          - Example PartnerAnalyticsOfManagedUser
        page: null
    ResponseMeta:
      type: object
      description: >-
        Extra information about the answer: where a page sits in a list, the
        cursor of the next page, or warnings about a call that succeeded with a
        caveat.
      additionalProperties: true
      properties:
        page:
          type: integer
          description: The page that was read, counting from 1.
          example: 1
        size:
          type: integer
          description: How many items one page holds.
          example: 20
        total:
          type: integer
          description: How many items the whole list has.
          example: 135
        limit:
          type: integer
          description: The same as `size`.
          example: 20
        offset:
          type: integer
          description: How many items come before this page.
          example: 0
        hasNextPage:
          type: boolean
          example: true
        hasPreviousPage:
          type: boolean
          example: false
        nextCursor:
          type: string
          nullable: true
          description: >-
            Pass this as `cursor` to read the next page of a list that is read
            by cursor. `null` on the last page.
        warnings:
          type: array
          items:
            type: string
          description: >-
            Things the call did not do, though it succeeded (for example a table
            that could not be created just now).
    ErrorDetail:
      type: object
      required:
        - code
        - message
        - timestamp
      properties:
        code:
          type: string
          description: Machine-readable error code.
          example: RESOURCE_NOT_FOUND
        message:
          type: string
          description: Human-readable explanation.
          example: Composition not found
        param:
          type: string
          description: The field that caused the error, when one did.
          example: name
        docUrl:
          type: string
          description: Where this error is explained.
        suggestedAction:
          type: string
          description: What to do about it.
        retryAfter:
          type: integer
          description: >-
            Seconds to wait before trying again (rate limits). The same number
            is in the `Retry-After` header.
          example: 60
        details:
          type: object
          additionalProperties: true
          description: >-
            More about the error: the fields that failed, a limit that was
            reached.
        correlationId:
          type: string
          description: Quote this when you ask support about the call.
          example: req_123e4567-e89b-12d3-a456-426614174000
        timestamp:
          type: string
          format: date-time
          example: '2026-10-15T10:00:00.000Z'
    PartnerReportPeriod:
      type: object
      description: The stretch of time a report covers.
      required:
        - from
        - to
      properties:
        from:
          type: string
          format: date-time
          description: Start of the period, included
        to:
          type: string
          format: date-time
          description: End of the period, not included
      example:
        from: '2026-01-15T09:30:00.000Z'
        to: '2026-01-15T09:30:00.000Z'
    PartnerAnalyticsOfManagedUser:
      type: object
      description: What one managed user's widgets and compositions did in a period.
      required:
        - managedUserId
        - externalId
        - name
        - isActive
        - widgetsMade
        - compositionsMade
        - views
        - interactions
        - visitors
        - lastEventAt
      properties:
        managedUserId:
          type: string
          format: uuid
        externalId:
          type: string
          nullable: true
          description: Your own identifier for the managed user
        name:
          type: string
          nullable: true
        isActive:
          type: boolean
          nullable: true
        widgetsMade:
          type: integer
          format: int64
          description: >-
            How many widgets are filed under the managed user (all time, not
            only in the period)
        compositionsMade:
          type: integer
          format: int64
          description: >-
            How many compositions are filed under the managed user (all time,
            not only in the period)
        views:
          type: integer
          format: int64
        interactions:
          type: integer
          format: int64
        visitors:
          type: integer
          format: int64
        lastEventAt:
          type: string
          format: date-time
          nullable: true
          description: >-
            When the newest counted view or interaction happened. Null when
            there was none in the period.
      example:
        managedUserId: 3fa85f64-5717-4562-b3fc-2c963f66afa6
        externalId: Example externalId
        name: Example name
        isActive: true
        widgetsMade: 42
        compositionsMade: 42
        views: 42
        interactions: 42
        visitors: 42
        lastEventAt: '2026-01-15T09:30:00.000Z'
    PartnerReportPage:
      type: object
      description: Which part of a list the answer holds.
      required:
        - limit
        - offset
        - hasMore
      properties:
        limit:
          type: integer
          description: How many rows the page can hold at most
        offset:
          type: integer
          description: How many rows were skipped before this page
        hasMore:
          type: boolean
          description: >-
            True when more rows follow this page. Ask again with `offset` raised
            by `limit`.
      example:
        limit: 42
        offset: 42
        hasMore: true
  securitySchemes:
    apiKeyAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.