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

# Retrieve workspace events

> Retrieve workspace activity as a cursor-paginated feed, oldest change first

> [!NOTE]
>
> This endpoint is rate limited to **60 requests per minute** per
> company. See [Rate limits](https://developers.dock.us/api-reference/rate-limits.md) for details.

Returns the events on a workspace's **Activity → Feed** tab as a feed you can sync, oldest change first. Event `type`s use the same names as [webhook events](https://developers.dock.us/webhooks/event-types.md). See [Syncing events](https://developers.dock.us/api-reference/workspace-analytics.md#syncing-events) for how to page through it and keep a copy up to date.


## OpenAPI

````yaml get /workspaces/events
openapi: 3.1.0
info:
  title: Dock API
  description: >-
    The Dock API is a RESTful API that allows you to interact with Dock in a
    programmatic way
  termsOfService: https://www.dock.us/legal/terms
  contact:
    name: API Support
    email: developers@dock.us
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
  version: 1.0.0
servers:
  - url: https://api.dock.us/{version}
    description: Production server
    variables:
      version:
        default: v1
        enum:
          - v1
security:
  - bearerAuth: []
tags:
  - name: Status check
    description: API to check if the API is up
  - name: Accounts
    description: API to manage accounts
  - name: Assets
    description: API to manage assets
  - name: Asset share links
    description: API to retrieve asset share links
  - name: Courses
    description: API to retrieve courses and their content
  - name: Files
    description: API to manage files
  - name: Forms
    description: API to retrieve forms and their responses
  - name: Learning assignments
    description: API to assign courses and pathways to learners
  - name: Meetings
    description: API to manage meetings and call transcripts
  - name: Pathways
    description: API to retrieve learning pathways
  - name: Playbooks
    description: API to retrieve playbooks and their content
  - name: Tags
    description: API to manage tags
  - name: Users
    description: API to manage users
  - name: Workspaces
    description: API to manage workspaces
  - name: Workspace analytics
    description: API to pull the numbers behind a workspace's Activity tab
  - name: Templates
    description: API to manage templates
  - name: Workspace pages
    description: API to manage workspace pages
  - name: Workspace plans
    description: API to manage workspace plans
  - name: Workspace plan tasks
    description: API to manage workspace plan tasks
  - name: Workspace sections
    description: API to manage workspace sections
paths:
  /workspaces/events:
    get:
      tags:
        - Workspace analytics
      summary: Retrieve workspace events
      description: >-
        Retrieve workspace activity as a cursor-paginated feed, oldest change
        first
      parameters:
        - $ref: '#/components/parameters/workspaceEventProperties'
        - $ref: '#/components/parameters/workspaceEventFilters'
        - $ref: '#/components/parameters/eventCursor'
        - $ref: '#/components/parameters/eventLimit'
      responses:
        '200':
          description: A page of workspace events
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      workspaceEvents:
                        type: array
                        items:
                          $ref: '#/components/schemas/WorkspaceEvent'
                      nextCursor:
                        type: string
                        description: >-
                          Pass as `cursor` to get the next page. Always
                          returned, so you can store it and poll for newer
                          events later.
                      hasMore:
                        type: boolean
                        description: >-
                          Whether more events are available right now. A page
                          can hold fewer than `limit` events while `hasMore` is
                          true.
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
components:
  parameters:
    workspaceEventProperties:
      name: properties
      in: query
      description: >-
        Select the event properties to return. Only `id` and `object` are
        returned by default.
      schema:
        type: array
        items:
          type: string
          enum:
            - type
            - occurredAt
            - updatedAt
            - actorType
            - timeSpentSeconds
            - parentEventId
            - workspace.name
            - workspace.workspaceUrl
            - workspace.createdAt
            - workspace.updatedAt
            - actor.createdAt
            - actor.updatedAt
            - actor.firstName
            - actor.lastName
            - actor.avatar
            - actor.email
            - actor.name
            - workspacePage.name
            - workspacePage.navigationName
            - asset.name
            - asset.assetType
            - asset.assetUrl
            - asset.thumbnailUrl
            - asset.createdAt
            - asset.updatedAt
    workspaceEventFilters:
      name: filters
      in: query
      description: >-
        Filter the events. Send the same filters with every page of a sync: a
        cursor only works with the filters it was issued for.
      style: deepObject
      explode: true
      schema:
        type: object
        properties:
          workspaceId:
            type: string
            description: Comma-separated workspace IDs (up to 100)
          accountId:
            type: string
            description: Only workspaces of this account
          templateId:
            type: string
            description: Only workspaces created from this template
          userId:
            type: string
            description: Comma-separated user IDs (up to 100) of the people who acted
          type:
            type: string
            description: >-
              Comma-separated event types (up to 50). End a type with `.*` to
              match a prefix, e.g. `workspace.plan.task.*`.
            example: workspace.page.viewed,workspace.plan.task.*
          actorType:
            type: string
            enum:
              - external
              - internal
              - anonymous
            description: >-
              Only events by external contacts, internal users, or anonymous
              visitors
          updatedAfter:
            type: string
            format: date-time
            description: >-
              Start a new sync from this time, as an ISO 8601 date-time with `Z`
              or an offset (`2026-11-01T00:00:00Z`). Only on the first request;
              afterwards pass `cursor`.
    eventCursor:
      name: cursor
      in: query
      description: >-
        The `nextCursor` from the previous response. Leave it out on the first
        request.
      schema:
        type: string
    eventLimit:
      name: limit
      in: query
      description: Maximum number of events to scan for this page (1–500, default 100)
      example: 500
      schema:
        type: integer
        maximum: 500
  schemas:
    WorkspaceEvent:
      type: object
      properties:
        object:
          type: string
          description: Type of the object
          enum:
            - workspace-event
          example: workspace-event
          readOnly: true
        id:
          type: string
          description: >-
            Stable event ID. An event can be returned again when it changes (for
            example, more time spent on a page view); upsert by this ID.
          example: pe_RiHO4e0Ju3DS
          readOnly: true
        type:
          type: string
          description: Event type, using the same names as webhook events
          example: workspace.page.viewed
        occurredAt:
          type: string
          format: date-time
          description: When the event happened
          example: '2026-10-01T12:00:00.000Z'
        updatedAt:
          type: string
          format: date-time
          description: When the event last changed
          example: '2026-10-01T12:03:10.000Z'
        actorType:
          type: string
          enum:
            - external
            - internal
            - anonymous
          description: >-
            Who acted: an external contact, an internal user, or an anonymous
            visitor
          example: external
        timeSpentSeconds:
          type: number
          nullable: true
          description: >-
            Seconds spent on the page. Set on page views
            (`workspace.page.viewed`) only and null on every other event; a
            visit's total is the sum of its page views (see `parentEventId`).
          example: 45
        parentEventId:
          type: string
          nullable: true
          description: >-
            The event this one happened inside: a page view's parent is its
            `workspace.viewed` visit, and an action's parent is the page view it
            happened on. Null when there is none. The parent itself can be left
            out of the feed (for example, it has no public type).
          example: pe_Xq3mB7tLk9Fa
        workspace:
          $ref: '#/components/schemas/Workspace'
          description: The workspace, with the requested `workspace.*` properties
        actor:
          allOf:
            - $ref: '#/components/schemas/User'
          nullable: true
          description: >-
            Who acted, with the requested `actor.*` properties. Null for
            anonymous visitors.
        workspacePage:
          allOf:
            - $ref: '#/components/schemas/WorkspacePage'
          nullable: true
          description: The page the event happened on, when there is one
        asset:
          allOf:
            - $ref: '#/components/schemas/Asset'
          nullable: true
          description: The library asset, for `asset.*` events
    Workspace:
      allOf:
        - $ref: '#/components/schemas/BaseObject'
        - type: object
          properties:
            workspaceUsers:
              type: array
              description: Users of the workspace
              items:
                $ref: '#/components/schemas/WorkspaceUser'
            workspaceDomains:
              type: array
              description: Domains of the workspace
              items:
                $ref: '#/components/schemas/WorkspaceDomain'
            account:
              $ref: '#/components/schemas/Account'
            object:
              type: string
              description: Type of the object
              enum:
                - workspace
              example: workspace
              readOnly: true
            url:
              type: string
              example: https://api.dock.us/v1/workspaces/RiHO4e0Ju3DS
              description: URL to the resource
              readOnly: true
            name:
              type: string
              description: Name of the workspace
              example: Customer Onboarding
            workspaceUrl:
              type: string
              description: URL of the workspace
              example: https://acme.dock.us/customer-onboarding-vRQgIvscHAiO
            templateId:
              type: string
              description: ID of the associated template
              example: RiHO4e0Ju3DS
              nullable: true
            startDate:
              type: string
              format: date
              description: Start date of the workspace
              example: '2024-01-01'
              nullable: true
            targetEndDate:
              type: string
              format: date
              description: Target end date of the workspace
              example: '2024-01-01'
              nullable: true
            actualEndDate:
              type: string
              format: date
              description: Actual end date of the workspace
              example: '2024-01-01'
              nullable: true
            projectAge:
              type: number
              description: Age of the project
              example: 100
            taskProgress:
              type: string
              description: Progress of all the tasks
              example: '50'
            lastContactView:
              type: string
              format: date-time
              description: Last contact view date of the workspace
              example: '2024-01-01T00:00:00Z'
              nullable: true
            totalViews:
              type: number
              description: Total views of the workspace
              example: 100
            totalActions:
              type: number
              description: Total actions of the workspace
              example: 100
            totalTimeSpent:
              type: number
              description: Total time spent of the workspace
              example: 100
            contactsCount:
              type: number
              description: Number of contacts associated with the workspace
              example: 100
            deal:
              $ref: '#/components/schemas/Deal'
        - type: object
          properties:
            customFields:
              type: array
              description: Custom fields associated with the workspace
              items:
                $ref: '#/components/schemas/CustomFieldWithValue'
    User:
      allOf:
        - $ref: '#/components/schemas/BaseObject'
        - type: object
          properties:
            object:
              type: string
              description: Type of the object
              enum:
                - user
              example: user
              readOnly: true
            url:
              type: string
              example: https://api.dock.us/v1/users/RiHO4e0Ju3DS
              description: URL to the resource
              readOnly: true
            firstName:
              type: string
              description: First name of the user
              example: John
              nullable: true
            lastName:
              type: string
              description: Last name of the user
              example: Doe
              nullable: true
            avatar:
              type: string
              format: uri
              description: Avatar of the user
              example: https://dock.us/avatar.png
              nullable: true
            email:
              type: string
              description: Email of the user
              example: john.doe@example.com
            name:
              type: string
              description: Name of the user
              example: John Doe
    WorkspacePage:
      allOf:
        - $ref: '#/components/schemas/BaseObject'
        - type: object
          properties:
            object:
              type: string
              description: Type of the object
              enum:
                - workspace-page
              example: workspace-page
              readOnly: true
            url:
              type: string
              example: https://api.dock.us/v1/workspace-pages/RiHO4e0Ju3DS
              description: URL to the resource
              readOnly: true
            name:
              type: string
              description: Name of the workspace page
              example: Planning
              nullable: true
            navigationName:
              type: string
              description: Navigation name of the workspace page
              example: Home
              nullable: true
            isHidden:
              type: boolean
              description: Whether the workspace page is hidden
              example: false
            index:
              type: integer
              description: Index of the workspace page
              example: 0
            templatePageId:
              type: string
              description: ID of the associated template page
              example: RiHO4e0Ju3DS
              nullable: true
    Asset:
      allOf:
        - $ref: '#/components/schemas/BaseObject'
        - type: object
          properties:
            tags:
              type: array
              description: Tags of the asset
              items:
                $ref: '#/components/schemas/Tag'
            object:
              type: string
              description: Type of the object
              enum:
                - asset
              example: asset
              readOnly: true
            url:
              type: string
              example: https://api.dock.us/v1/assets/RiHO4e0Ju3DS
              description: URL to the resource
              readOnly: true
            name:
              type: string
              description: Name of the asset
              example: Logo
            description:
              type: string
              description: Description of the asset
              example: Logo of the asset
              nullable: true
            transcript:
              type:
                - string
                - 'null'
              description: Transcript extracted from the asset file
            views:
              type: integer
              description: Number of views
              example: 100
            shares:
              type: integer
              description: Number of shares
              example: 100
            assetType:
              type: string
              description: Type of the asset
              enum:
                - image
                - pdf
                - link
                - video
                - audio
                - embed
                - htmlPage
                - googleDocEmbed
                - googleSheetEmbed
                - googleSlidesEmbed
                - microsoftWordEmbed
                - microsoftExcelEmbed
                - microsoftPowerPointEmbed
                - googleDocEmbedPdf
                - googleSheetEmbedPdf
                - googleSlidesEmbedPdf
                - microsoftWordEmbedPdf
                - microsoftExcelEmbedPdf
                - microsoftPowerPointEmbedPdf
              example: image
            assetUrl:
              type: string
              format: uri
              description: URL to the asset
              example: https://dock.us/logo.png
            thumbnailUrl:
              type: string
              format: uri
              description: >-
                Preview image shown for the asset in the Library. Resolved in
                order: a custom thumbnail set in Dock, then the file's generated
                thumbnail (images use the file itself), then the link preview
                image for link and embed assets. `null` when none exists — for
                example a PDF or video uploaded through the API that has not yet
                been opened in Dock, an audio asset, or an HTML page without a
                custom thumbnail. URLs pointing at private storage are signed
                and expire after a few hours, so re-read the asset instead of
                storing the URL.
              example: >-
                https://storage.googleapis.com/dock-production-private/thumbnail/RiHO4e0Ju3DS.png?X-Goog-Signature=...
              nullable: true
              readOnly: true
            isInternal:
              type: boolean
              description: Whether the asset is restricted to internal use
              example: false
    BaseObject:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Id'
        updatedAt:
          type: string
          format: date-time
          description: Last updated date
          example: '2021-01-01T00:00:00.000Z'
          readOnly: true
        createdAt:
          type: string
          format: date-time
          description: Created at date
          example: '2021-01-01T00:00:00.000Z'
          readOnly: true
    WorkspaceUser:
      allOf:
        - $ref: '#/components/schemas/BaseObject'
        - type: object
          properties:
            object:
              type: string
              description: Type of the object
              enum:
                - workspace-user
              example: workspace-user
              readOnly: true
            url:
              type: string
              example: https://api.dock.us/v1/workspace-users/RiHO4e0Ju3DS
              description: URL to the resource
              readOnly: true
            role:
              $ref: '#/components/schemas/WorkspaceRole'
            user:
              $ref: '#/components/schemas/User'
    WorkspaceDomain:
      allOf:
        - $ref: '#/components/schemas/BaseObject'
        - type: object
          properties:
            object:
              type: string
              description: Type of the object
              enum:
                - workspace-domain
              example: workspace-domain
              readOnly: true
            url:
              type: string
              example: https://api.dock.us/v1/workspace-domains/RiHO4e0Ju3DS
              description: URL to the resource
              readOnly: true
            role:
              $ref: '#/components/schemas/WorkspaceRole'
            domain:
              type: string
              description: Domain of the workspace user
              format: hostname
              example: dock.us
    Account:
      allOf:
        - $ref: '#/components/schemas/BaseObject'
        - type: object
          properties:
            object:
              type: string
              description: Type of the object
              enum:
                - account
              example: account
              readOnly: true
            url:
              type: string
              example: https://api.dock.us/v1/accounts/RiHO4e0Ju3DS
              description: URL to the resource
              readOnly: true
            name:
              type: string
              description: Name of the account
              example: Dock
            website:
              type: string
              format: uri
              description: Website of the account
              example: https://dock.us
              nullable: true
            ownerId:
              type: string
              description: Owner ID of the account
              example: RiHO4e0Ju3DS
            logo:
              type: string
              format: uri
              description: Logo of the account
              example: https://dock.us/logo.png
              nullable: true
            salesforceAccountId:
              type: string
              description: Salesforce account ID of the account
              example: 0015f00000Bg59dAAB
              nullable: true
            hubspotCompanyId:
              type: string
              description: HubSpot company ID of the account
              example: '8662045446'
              nullable: true
    Deal:
      allOf:
        - $ref: '#/components/schemas/BaseObject'
        - type: object
          properties:
            object:
              type: string
              description: Type of the object
              enum:
                - deal
              example: deal
              readOnly: true
            url:
              type: string
              example: https://api.dock.us/v1/deals/RiHO4e0Ju3DS
              description: URL to the resource
              readOnly: true
            createdDate:
              type: string
              format: date-time
              description: Created date of the deal
              example: '2024-01-01T00:00:00Z'
              nullable: true
            closeDate:
              type: string
              format: date-time
              description: Close date of the deal
              example: '2024-01-01T00:00:00Z'
              nullable: true
            name:
              type: string
              description: Name of the deal
              example: Deal 1
              nullable: true
            amount:
              type: integer
              description: Amount of the deal
              example: '100000'
              nullable: true
            type:
              type: string
              description: Type of the deal
              example: New Business
              nullable: true
            stage:
              type: string
              description: Stage of the deal
              example: Proposal Sent
              nullable: true
          oneOf:
            - properties:
                hubspotDealId:
                  type: string
                  description: HubSpot deal ID
                  example: '1234567890'
                  nullable: true
              additionalProperties: false
            - properties:
                salesforceOpportunityId:
                  type: string
                  description: Salesforce opportunity ID
                  example: 0015f00000Bg59dAAB
                  nullable: true
              additionalProperties: false
    CustomFieldWithValue:
      allOf:
        - $ref: '#/components/schemas/CustomField'
        - type: object
          properties:
            value:
              type: string
              description: >-
                Value of the custom field. For `richText` fields this is
                returned as HTML.
              example: 'Yes'
    Tag:
      allOf:
        - $ref: '#/components/schemas/BaseObject'
        - type: object
          properties:
            object:
              type: string
              description: Type of the object
              enum:
                - tag
              example: tag
              readOnly: true
            url:
              type: string
              example: https://api.dock.us/v1/tags/RiHO4e0Ju3DS
              description: URL to the resource
              readOnly: true
            title:
              type: string
              description: Title of the tag
              example: Logo
    Id:
      type: string
      description: Id of the object
      example: RiHO4e0Ju3DS
      readOnly: true
    WorkspaceRole:
      type: string
      description: Role of the user to access the workspace
      enum:
        - owner
        - editor
        - collaborator
        - viewer
        - commenter
      example: owner
    CustomField:
      allOf:
        - $ref: '#/components/schemas/BaseObject'
        - type: object
          properties:
            object:
              type: string
              description: Type of the object
              enum:
                - custom-field
              example: custom-field
              readOnly: true
            url:
              type: string
              example: https://api.dock.us/v1/custom-fields/RiHO4e0Ju3DS
              description: URL to the resource
              readOnly: true
            variableName:
              type: string
              description: Variable name of the custom field
              example: account.name
            type:
              type: string
              description: Type of the custom field
              example: singleCheckbox
              enum:
                - number
                - date
                - singleLineText
                - multiLineText
                - richText
                - singleCheckbox
                - multiCheckboxes
                - dropdownSelect
                - radioSelect
            options:
              type: array
              description: For dropdown, radio, and checkbox custom fields, the options
              nullable: true
              items:
                type: object
                properties:
                  index:
                    type: integer
                    description: Index of the option
                    example: 1
                  label:
                    type: string
                    description: Label of the option
                    example: 'Yes'
                  value:
                    type: string
                    description: Value of the option
                    example: 'true'
  responses:
    '400':
      description: >-
        The server cannot or will not process the request due to something that
        is perceived to be a client error (e.g., malformed request syntax,
        invalid request message framing, or deceptive request routing)
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: object
                properties:
                  code:
                    type: string
                    enum:
                      - BAD_REQUEST
                    description: A short code indicating the error code returned
                    example: BAD_REQUEST
                  message:
                    type: string
                    description: A human readable explanation of what went wrong
                    example: >-
                      The request could not be understood or was missing
                      required parameters
                required:
                  - code
                  - message
            required:
              - error
    '401':
      description: >-
        Although the HTTP standard specifies "unauthorized", semantically this
        response means "unauthenticated". That is, the client must authenticate
        itself to get the requested response
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: object
                properties:
                  code:
                    type: string
                    enum:
                      - UNAUTHORIZED
                    description: A short code indicating the error code returned
                    example: UNAUTHORIZED
                  message:
                    type: string
                    description: A human readable explanation of what went wrong
                    example: >-
                      Access denied. You are not authorized to access this
                      resource
                required:
                  - code
                  - message
            required:
              - error
    '403':
      description: >-
        The client does not have access rights to the content; that is, it is
        unauthorized, so the server is refusing to give the requested resource.
        Unlike 401 Unauthorized, the client's identity is known to the server
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: object
                properties:
                  code:
                    type: string
                    enum:
                      - FORBIDDEN
                    description: A short code indicating the error code returned
                    example: FORBIDDEN
                  message:
                    type: string
                    description: A human readable explanation of what went wrong
                    example: Access to this resource is restricted
                required:
                  - code
                  - message
            required:
              - error
    '429':
      description: >-
        The user has sent too many requests in a given amount of time ("rate
        limiting")
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: object
                properties:
                  code:
                    type: string
                    enum:
                      - RATE_LIMIT_EXCEEDED
                    description: A short code indicating the error code returned
                    example: RATE_LIMIT_EXCEEDED
                  message:
                    type: string
                    description: A human readable explanation of what went wrong
                    example: Rate limit exceeded. Please try again later
                required:
                  - code
                  - message
            required:
              - error
    '500':
      description: The server has encountered a situation it does not know how to handle
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: object
                properties:
                  code:
                    type: string
                    enum:
                      - INTERNAL_SERVER_ERROR
                    description: A short code indicating the error code returned
                    example: INTERNAL_SERVER_ERROR
                  message:
                    type: string
                    description: A human readable explanation of what went wrong
                    example: >-
                      The server has encountered a situation it does not know
                      how to handle
                required:
                  - code
                  - message
            required:
              - error
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````

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