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

# Read an entity activity timeline

> Returns the events and top-level comments of an invoice, agreement, alert, claim or topic, newest first. Topics have events only. Set group_changes=true to get hints for grouping related changes.



## OpenAPI

````yaml /openapi.json get /v1/activity
openapi: 3.1.0
info:
  title: Watchdog API
  version: 1.0.0
  description: >-
    The Watchdog API is served from https://api.watchdog.no. Request bodies are
    limited to 2 MiB unless an endpoint says otherwise. Files are uploaded
    directly to storage, not through the API.
servers:
  - url: https://api.watchdog.no
    description: Watchdog API
security: []
paths:
  /v1/activity:
    get:
      tags:
        - Activity
      summary: Read an entity activity timeline
      description: >-
        Returns the events and top-level comments of an invoice, agreement,
        alert, claim or topic, newest first. Topics have events only. Set
        group_changes=true to get hints for grouping related changes.
      operationId: listActivity
      parameters:
        - name: X-Organization-Id
          in: header
          required: false
          schema:
            type: string
          description: >-
            The organization to act in. Required for personal API keys; list the
            organizations you can access with GET /v1/organizations.
        - schema:
            type: integer
            minimum: 1
            maximum: 1000
            default: 50
            description: Maximum number of results per page.
          required: false
          description: Maximum number of results per page.
          name: limit
          in: query
        - schema:
            type: string
            maxLength: 4096
            description: >-
              Opaque next_cursor from the previous page. Keep the same filters
              and sort; omit for the first page.
          required: false
          description: >-
            Opaque next_cursor from the previous page. Keep the same filters and
            sort; omit for the first page.
          name: cursor
          in: query
        - schema:
            type: string
            enum:
              - agreement
              - invoice
              - alert
              - claim
              - topic
              - invoice_import
              - document
          required: true
          name: entity_type
          in: query
        - schema:
            type: string
            format: uuid
          required: true
          name: entity_id
          in: query
        - schema:
            type: string
            enum:
              - activity
              - comment
          required: false
          name: entry_type
          in: query
        - schema:
            type: string
            enum:
              - 'true'
              - 'false'
            default: 'false'
          required: false
          name: include_related_alerts
          in: query
        - schema:
            type: string
            enum:
              - 'true'
              - 'false'
            default: 'false'
            description: >-
              Include grouping hints for related changes on this page. Pages
              still count entries, not groups.
          required: false
          description: >-
            Include grouping hints for related changes on this page. Pages still
            count entries, not groups.
          name: group_changes
          in: query
        - schema:
            type: string
            description: >-
              Actions grouped by changed field names rather than values.
              Requires group_changes=true; at most 50 actions.
          required: false
          description: >-
            Actions grouped by changed field names rather than values. Requires
            group_changes=true; at most 50 actions.
          name: value_blind_actions
          in: query
        - schema:
            type: string
            enum:
              - 'true'
              - 'false'
            description: >-
              Override automatic suppression of redundant alert summaries. Omit
              to suppress only when related alerts contribute events.
          required: false
          description: >-
            Override automatic suppression of redundant alert summaries. Omit to
            suppress only when related alerts contribute events.
          name: suppress_alert_scope_rollups
          in: query
        - schema:
            type: string
            format: uuid
          required: false
          name: alert_id
          in: query
        - schema:
            type: string
            enum:
              - is
              - is_not
            default: is
          required: false
          name: alert_operator
          in: query
      responses:
        '200':
          description: A page of timeline entries.
          headers:
            X-Request-Id:
              schema:
                type: string
              required: true
              description: >-
                Request ID, also included in error bodies. Include it when
                contacting support.
            Cache-Control:
              schema:
                type: string
                enum:
                  - private, no-store
                  - private, no-store, no-transform
              required: false
              description: API responses are private and must not be cached.
            X-RateLimit-Limit:
              schema:
                type: string
                example: '500'
              required: false
              description: >-
                Requests allowed per minute for this credential, or failed API
                key attempts allowed per minute from this IP address.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/TimelineEntry'
                    maxItems: 1000
                  next_cursor:
                    type:
                      - string
                      - 'null'
                  groups:
                    type: array
                    items:
                      type: object
                      properties:
                        key:
                          type: string
                          description: >-
                            Entries with the same key within five minutes of
                            each other, with no comment in between, belong in
                            one group.
                        event_ids:
                          type: array
                          items:
                            type: string
                            format: uuid
                          minItems: 1
                          maxItems: 100
                        first_occurred_at:
                          type: string
                          format: date-time
                        last_occurred_at:
                          type: string
                          format: date-time
                      required:
                        - key
                        - event_ids
                        - first_occurred_at
                        - last_occurred_at
                    maxItems: 100
                required:
                  - data
                  - next_cursor
        '400':
          description: >-
            The request is invalid. details lists up to 20 field errors. Request
            bodies are limited to 2 MiB.
          headers:
            X-Request-Id:
              schema:
                type: string
              required: true
              description: >-
                Request ID, also included in error bodies. Include it when
                contacting support.
            Cache-Control:
              schema:
                type: string
                enum:
                  - private, no-store
                  - private, no-store, no-transform
              required: false
              description: API responses are private and must not be cached.
            X-RateLimit-Limit:
              schema:
                type: string
                example: '500'
              required: false
              description: >-
                Requests allowed per minute for this credential, or failed API
                key attempts allowed per minute from this IP address.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error_validation_error'
              example:
                error:
                  code: validation_error
                  message: >-
                    The request is invalid. details lists up to 20 field errors.
                    Request bodies are limited to 2 MiB.
                  request_id: req_example
        '401':
          description: The bearer token is missing or invalid.
          headers:
            X-Request-Id:
              schema:
                type: string
              required: true
              description: >-
                Request ID, also included in error bodies. Include it when
                contacting support.
            Cache-Control:
              schema:
                type: string
                enum:
                  - private, no-store
                  - private, no-store, no-transform
              required: false
              description: API responses are private and must not be cached.
            X-RateLimit-Limit:
              schema:
                type: string
                example: '500'
              required: false
              description: >-
                Requests allowed per minute for this credential, or failed API
                key attempts allowed per minute from this IP address.
            WWW-Authenticate:
              schema:
                type: string
              required: false
              description: Bearer authentication challenge, when supplied.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error_invalid_token'
              example:
                error:
                  code: invalid_token
                  message: The bearer token is missing or invalid.
                  request_id: req_example
        '403':
          description: >-
            Access denied. The error code says why: forbidden, token_disabled,
            organization_required, insufficient_role or mfa_required.
          headers:
            X-Request-Id:
              schema:
                type: string
              required: true
              description: >-
                Request ID, also included in error bodies. Include it when
                contacting support.
            Cache-Control:
              schema:
                type: string
                enum:
                  - private, no-store
                  - private, no-store, no-transform
              required: false
              description: API responses are private and must not be cached.
            X-RateLimit-Limit:
              schema:
                type: string
                example: '500'
              required: false
              description: >-
                Requests allowed per minute for this credential, or failed API
                key attempts allowed per minute from this IP address.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Error_forbidden_token_disabled_organization_required_insufficient_role_mfa_required
              example:
                error:
                  code: forbidden
                  message: >-
                    Access denied. The error code says why: forbidden,
                    token_disabled, organization_required, insufficient_role or
                    mfa_required.
                  request_id: req_example
        '404':
          description: The resource does not exist in the current organization.
          headers:
            X-Request-Id:
              schema:
                type: string
              required: true
              description: >-
                Request ID, also included in error bodies. Include it when
                contacting support.
            Cache-Control:
              schema:
                type: string
                enum:
                  - private, no-store
                  - private, no-store, no-transform
              required: false
              description: API responses are private and must not be cached.
            X-RateLimit-Limit:
              schema:
                type: string
                example: '500'
              required: false
              description: >-
                Requests allowed per minute for this credential, or failed API
                key attempts allowed per minute from this IP address.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error_not_found'
              example:
                error:
                  code: not_found
                  message: The resource does not exist in the current organization.
                  request_id: req_example
        '429':
          description: Too many requests. Wait for the Retry-After delay before retrying.
          headers:
            X-Request-Id:
              schema:
                type: string
              required: true
              description: >-
                Request ID, also included in error bodies. Include it when
                contacting support.
            Cache-Control:
              schema:
                type: string
                enum:
                  - private, no-store
                  - private, no-store, no-transform
              required: false
              description: API responses are private and must not be cached.
            X-RateLimit-Limit:
              schema:
                type: string
                example: '500'
              required: false
              description: >-
                Requests allowed per minute for this credential, or failed API
                key attempts allowed per minute from this IP address.
            Retry-After:
              schema:
                type: string
                example: '60'
              required: true
              description: Seconds to wait before retrying the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error_rate_limit_exceeded'
              example:
                error:
                  code: rate_limit_exceeded
                  message: >-
                    Too many requests. Wait for the Retry-After delay before
                    retrying.
                  request_id: req_example
        '500':
          description: >-
            Unexpected server failure. Include the request ID when contacting
            support.
          headers:
            X-Request-Id:
              schema:
                type: string
              required: true
              description: >-
                Request ID, also included in error bodies. Include it when
                contacting support.
            Cache-Control:
              schema:
                type: string
                enum:
                  - private, no-store
                  - private, no-store, no-transform
              required: false
              description: API responses are private and must not be cached.
            X-RateLimit-Limit:
              schema:
                type: string
                example: '500'
              required: false
              description: >-
                Requests allowed per minute for this credential, or failed API
                key attempts allowed per minute from this IP address.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error_internal_error'
              example:
                error:
                  code: internal_error
                  message: >-
                    Unexpected server failure. Include the request ID when
                    contacting support.
                  request_id: req_example
        '503':
          description: >-
            Temporarily unavailable. Retry after the Retry-After delay, when
            provided.
          headers:
            X-Request-Id:
              schema:
                type: string
              required: true
              description: >-
                Request ID, also included in error bodies. Include it when
                contacting support.
            Cache-Control:
              schema:
                type: string
                enum:
                  - private, no-store
                  - private, no-store, no-transform
              required: false
              description: API responses are private and must not be cached.
            X-RateLimit-Limit:
              schema:
                type: string
                example: '500'
              required: false
              description: >-
                Requests allowed per minute for this credential, or failed API
                key attempts allowed per minute from this IP address.
            Retry-After:
              schema:
                type: string
                example: '60'
              required: true
              description: Seconds to wait before retrying the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error_service_unavailable'
              example:
                error:
                  code: service_unavailable
                  message: >-
                    Temporarily unavailable. Retry after the Retry-After delay,
                    when provided.
                  request_id: req_example
      security:
        - ApiKeyBearer: []
components:
  schemas:
    TimelineEntry:
      oneOf:
        - $ref: '#/components/schemas/Activity'
        - $ref: '#/components/schemas/Comment'
      discriminator:
        propertyName: type
        mapping:
          activity: '#/components/schemas/Activity'
          comment: '#/components/schemas/Comment'
    Error_validation_error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - validation_error
            message:
              type: string
            request_id:
              type: string
            description:
              type: string
            details:
              type: array
              items:
                type: object
                properties:
                  code:
                    type: string
                  field:
                    type: string
                  message:
                    type: string
                required:
                  - code
                  - field
                  - message
              maxItems: 20
            workflow_run_id:
              type: string
              format: uuid
            import_id:
              type: string
              format: uuid
            existing_party:
              type: object
              properties:
                type:
                  type: string
                  enum:
                    - supplier
                    - recipient
                id:
                  type: string
                  format: uuid
              required:
                - type
                - id
          required:
            - code
            - message
            - request_id
      required:
        - error
    Error_invalid_token:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - invalid_token
            message:
              type: string
            request_id:
              type: string
            description:
              type: string
            details:
              type: array
              items:
                type: object
                properties:
                  code:
                    type: string
                  field:
                    type: string
                  message:
                    type: string
                required:
                  - code
                  - field
                  - message
              maxItems: 20
            workflow_run_id:
              type: string
              format: uuid
            import_id:
              type: string
              format: uuid
            existing_party:
              type: object
              properties:
                type:
                  type: string
                  enum:
                    - supplier
                    - recipient
                id:
                  type: string
                  format: uuid
              required:
                - type
                - id
          required:
            - code
            - message
            - request_id
      required:
        - error
    Error_forbidden_token_disabled_organization_required_insufficient_role_mfa_required:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - forbidden
                - token_disabled
                - organization_required
                - insufficient_role
                - mfa_required
            message:
              type: string
            request_id:
              type: string
            description:
              type: string
            details:
              type: array
              items:
                type: object
                properties:
                  code:
                    type: string
                  field:
                    type: string
                  message:
                    type: string
                required:
                  - code
                  - field
                  - message
              maxItems: 20
            workflow_run_id:
              type: string
              format: uuid
            import_id:
              type: string
              format: uuid
            existing_party:
              type: object
              properties:
                type:
                  type: string
                  enum:
                    - supplier
                    - recipient
                id:
                  type: string
                  format: uuid
              required:
                - type
                - id
          required:
            - code
            - message
            - request_id
      required:
        - error
    Error_not_found:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - not_found
            message:
              type: string
            request_id:
              type: string
            description:
              type: string
            details:
              type: array
              items:
                type: object
                properties:
                  code:
                    type: string
                  field:
                    type: string
                  message:
                    type: string
                required:
                  - code
                  - field
                  - message
              maxItems: 20
            workflow_run_id:
              type: string
              format: uuid
            import_id:
              type: string
              format: uuid
            existing_party:
              type: object
              properties:
                type:
                  type: string
                  enum:
                    - supplier
                    - recipient
                id:
                  type: string
                  format: uuid
              required:
                - type
                - id
          required:
            - code
            - message
            - request_id
      required:
        - error
    Error_rate_limit_exceeded:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - rate_limit_exceeded
            message:
              type: string
            request_id:
              type: string
            description:
              type: string
            details:
              type: array
              items:
                type: object
                properties:
                  code:
                    type: string
                  field:
                    type: string
                  message:
                    type: string
                required:
                  - code
                  - field
                  - message
              maxItems: 20
            workflow_run_id:
              type: string
              format: uuid
            import_id:
              type: string
              format: uuid
            existing_party:
              type: object
              properties:
                type:
                  type: string
                  enum:
                    - supplier
                    - recipient
                id:
                  type: string
                  format: uuid
              required:
                - type
                - id
          required:
            - code
            - message
            - request_id
      required:
        - error
    Error_internal_error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - internal_error
            message:
              type: string
            request_id:
              type: string
            description:
              type: string
            details:
              type: array
              items:
                type: object
                properties:
                  code:
                    type: string
                  field:
                    type: string
                  message:
                    type: string
                required:
                  - code
                  - field
                  - message
              maxItems: 20
            workflow_run_id:
              type: string
              format: uuid
            import_id:
              type: string
              format: uuid
            existing_party:
              type: object
              properties:
                type:
                  type: string
                  enum:
                    - supplier
                    - recipient
                id:
                  type: string
                  format: uuid
              required:
                - type
                - id
          required:
            - code
            - message
            - request_id
      required:
        - error
    Error_service_unavailable:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - service_unavailable
            message:
              type: string
            request_id:
              type: string
            description:
              type: string
            details:
              type: array
              items:
                type: object
                properties:
                  code:
                    type: string
                  field:
                    type: string
                  message:
                    type: string
                required:
                  - code
                  - field
                  - message
              maxItems: 20
            workflow_run_id:
              type: string
              format: uuid
            import_id:
              type: string
              format: uuid
            existing_party:
              type: object
              properties:
                type:
                  type: string
                  enum:
                    - supplier
                    - recipient
                id:
                  type: string
                  format: uuid
              required:
                - type
                - id
          required:
            - code
            - message
            - request_id
      required:
        - error
    Activity:
      type: object
      properties:
        type:
          type: string
          enum:
            - activity
        id:
          type: string
          format: uuid
        entity_type:
          type: string
          enum:
            - agreement
            - invoice
            - alert
            - claim
            - topic
            - invoice_import
            - document
        entity_id:
          type: string
          format: uuid
        occurred_at:
          type: string
          format: date-time
        action:
          type: string
          description: >-
            Action identifier. New actions may be added, so handle unknown
            values.
        actor:
          type: object
          properties:
            type:
              type: string
              enum:
                - user
                - system
                - integration
            user_id:
              type:
                - string
                - 'null'
            source:
              type:
                - string
                - 'null'
            label:
              type:
                - string
                - 'null'
            api_key:
              type:
                - object
                - 'null'
              properties:
                id:
                  type: string
                  format: uuid
                name:
                  type: string
              required:
                - id
                - name
              description: >-
                The API key used for this action, retained after revocation.
                Null for session, system and integration actors.
            deleted:
              type: boolean
              description: >-
                The acting user account was deleted. The label keeps their name,
                or is null once the account is anonymised.
          required:
            - type
            - user_id
            - source
            - label
            - api_key
            - deleted
        detail:
          $ref: '#/components/schemas/ActivityDetailV1'
        entity_version:
          type:
            - integer
            - 'null'
      required:
        - type
        - id
        - entity_type
        - entity_id
        - occurred_at
        - action
        - actor
        - detail
        - entity_version
    Comment:
      type: object
      properties:
        type:
          type: string
          enum:
            - comment
        id:
          type: string
          format: uuid
        entity_type:
          type: string
          enum:
            - invoice
            - agreement
            - alert
            - claim
        entity_id:
          type: string
          format: uuid
        parent_comment_id:
          type:
            - string
            - 'null'
          format: uuid
        body:
          type: string
        author:
          type: object
          properties:
            user_id:
              type:
                - string
                - 'null'
            name:
              type:
                - string
                - 'null'
            deleted:
              type: boolean
              description: >-
                The author account was deleted. The name is kept, or null once
                the account is anonymised.
          required:
            - user_id
            - name
            - deleted
        occurred_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        reply_count:
          type: integer
          minimum: 0
      required:
        - type
        - id
        - entity_type
        - entity_id
        - parent_comment_id
        - body
        - author
        - occurred_at
        - updated_at
        - reply_count
    ActivityDetailV1:
      type:
        - object
        - 'null'
      properties:
        schemaVersion:
          type: number
          enum:
            - 1
        changes:
          type: array
          items:
            type: object
            properties:
              field:
                type: string
              from:
                $ref: '#/components/schemas/ActivityValue'
              to:
                $ref: '#/components/schemas/ActivityValue'
            required:
              - field
              - from
              - to
            additionalProperties:
              $ref: '#/components/schemas/ActivityValue'
        data:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/ActivityValue'
        operation:
          type: string
        summary:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/ActivityValue'
      required:
        - schemaVersion
      additionalProperties: false
    ActivityValue:
      type:
        - string
        - number
        - boolean
        - 'null'
        - array
        - object
      items:
        $ref: '#/components/schemas/ActivityValue'
      additionalProperties:
        $ref: '#/components/schemas/ActivityValue'
  securitySchemes:
    ApiKeyBearer:
      type: http
      scheme: bearer
      description: >-
        Personal API key sent as a bearer token, together with
        X-Organization-Id. The key must have at least the access level the
        endpoint requires (read, write or admin).

````

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