> ## Documentation Index
> Fetch the complete documentation index at: https://lightdash-mintlify-9d6f9427.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Get download activity log

> Get download activity log for a project, ordered by most recent first.
Two pagination modes are supported:
 - Offset mode: pass `page` (1-indexed) and `pageSize`. Response includes
   `page`/`totalResults`/`totalPageCount`.
 - Cursor mode: pass `cursor` (from a previous response's `nextCursor`) and
   `pageSize`. `page` is ignored when `cursor` is provided. Avoids the count
   query so `page`/`totalResults`/`totalPageCount` are null in the response.



## OpenAPI

````yaml https://raw.githubusercontent.com/lightdash/lightdash/refs/heads/main/packages/backend/src/generated/swagger.json get /api/v1/analytics/user-activity/{projectUuid}/download-activity
openapi: 3.0.0
info:
  title: Lightdash API
  version: 0.3249.0
  description: >
    Open API documentation for all public Lightdash API endpoints. #
    Authentication Before you get started, you might need to create a Personal
    Access Token to authenticate via the API. You can create a token by
    following this guide: https://docs.lightdash.com/references/personal_tokens
  license:
    name: MIT
  contact:
    name: Lightdash Support
    email: support@lightdash.com
    url: https://docs.lightdash.com/help-and-contact/contact/contact_info/
servers:
  - url: /
security: []
tags:
  - name: My Account
    description: These routes allow users to manage their own user account.
  - name: Organizations
    description: >-
      Each user is a member of a single organization. These routes allow users
      to manage their organization. Most actions are only available to admin
      users.
  - name: Projects
    description: >-
      Projects belong to a single organization. These routes allow users to
      manage their projects, browse content, and execute queries. Users inside
      an organization might have access to a project from an organization-level
      role or they might be granted access to a project directly.
  - name: Spaces
    description: >-
      Spaces allow you to organize charts and dashboards within a project. They
      also allow granular access to content by allowing you to create private
      spaces, which are only accessible to the creator and admins.
  - name: Roles & Permissions
    description: >-
      These routes allow users to manage roles and permissions for their
      organization.
    externalDocs:
      url: https://docs.lightdash.com/references/roles
  - name: Query
    description: >-
      These routes allow users to execute and manage queries against their data
      warehouse. This includes metric queries, SQL queries, and retrieving query
      results.
paths:
  /api/v1/analytics/user-activity/{projectUuid}/download-activity:
    get:
      tags:
        - Projects
      summary: Get download activity log
      description: |-
        Get download activity log for a project, ordered by most recent first.
        Two pagination modes are supported:
         - Offset mode: pass `page` (1-indexed) and `pageSize`. Response includes
           `page`/`totalResults`/`totalPageCount`.
         - Cursor mode: pass `cursor` (from a previous response's `nextCursor`) and
           `pageSize`. `page` is ignored when `cursor` is provided. Avoids the count
           query so `page`/`totalResults`/`totalPageCount` are null in the response.
      operationId: getDownloadActivity
      parameters:
        - in: path
          name: projectUuid
          required: true
          schema:
            type: string
        - description: number of items per page
          in: query
          name: pageSize
          required: true
          schema:
            type: number
            format: double
        - description: page number (1-indexed); defaults to 1 if omitted
          in: query
          name: page
          required: false
          schema:
            type: number
            format: double
        - description: opaque cursor from a previous response's `nextCursor`
          in: query
          name: cursor
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiDownloadActivity'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorPayload'
      security: []
components:
  schemas:
    ApiDownloadActivity:
      properties:
        results:
          $ref: '#/components/schemas/DownloadActivityResults'
        status:
          type: string
          enum:
            - ok
          nullable: false
      required:
        - results
        - status
      type: object
    ApiErrorPayload:
      properties:
        error:
          properties:
            data:
              $ref: '#/components/schemas/AnyType'
              description: Optional data containing details of the error
            message:
              type: string
              description: A friendly message summarising the error
            name:
              type: string
              description: Unique name for the type of error
            statusCode:
              type: number
              format: integer
              description: HTTP status code
          required:
            - name
            - statusCode
          type: object
        status:
          type: string
          enum:
            - error
          nullable: false
      required:
        - error
        - status
      type: object
      description: |-
        The Error object is returned from the api any time there is an error.
        The message contains
    DownloadActivityResults:
      properties:
        pagination:
          properties:
            nextCursor:
              type: string
              nullable: true
            totalResults:
              type: number
              format: double
              nullable: true
            totalPageCount:
              type: number
              format: double
              nullable: true
            page:
              type: number
              format: double
              nullable: true
            pageSize:
              type: number
              format: double
          required:
            - nextCursor
            - totalResults
            - totalPageCount
            - page
            - pageSize
          type: object
        data:
          items:
            $ref: '#/components/schemas/DownloadAuditEntry'
          type: array
      required:
        - pagination
        - data
      type: object
    AnyType:
      description: |-
        This AnyType is an alias for any
        The goal is to make it easier to identify any type in the codebase
        without having to eslint-disable all the time
        These are only used on legacy `any` types, don't use it for new types.
        This is added on a separate file to avoid circular dependencies.
    DownloadAuditEntry:
      properties:
        originalQueryContext:
          type: string
          nullable: true
        downloadedAt:
          type: string
          format: date-time
        fileType:
          type: string
        userLastName:
          type: string
          nullable: true
        userFirstName:
          type: string
          nullable: true
        userUuid:
          type: string
          nullable: true
        queryUuid:
          type: string
        downloadUuid:
          type: string
      required:
        - originalQueryContext
        - downloadedAt
        - fileType
        - userLastName
        - userFirstName
        - userUuid
        - queryUuid
        - downloadUuid
      type: object

````