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

# List action edits

> Lists who changed an action's title, owner, channels, description or published pages, newest first, one event per changed field and one per published page added or removed. Owners are user ids, channels are arrays and pages are URLs. A member who made an edit is named while they are still on the account; edits made with an API key carry its key id, and DevTune's own edits are system. Lifecycle moves such as accepting, going live or archiving are not events. History starts when recording began, so older edits are not listed.



## OpenAPI

````yaml /openapi.json get /projects/{projectId}/actions/{actionId}/events
openapi: 3.1.0
info:
  title: DevTune API
  version: 2.0.0
  description: >-
    API for programmatic access to your AI visibility data, webhook
    subscriptions, and automation workflows. Use this API to integrate DevTune
    data into CI/CD pipelines, BI tools, AI agents, and operational systems.
servers:
  - url: https://devtune.ai/api/v2
    description: Production
security:
  - bearerAuth: []
paths:
  /projects/{projectId}/actions/{actionId}/events:
    get:
      summary: List action edits
      description: >-
        Lists who changed an action's title, owner, channels, description or
        published pages, newest first, one event per changed field and one per
        published page added or removed. Owners are user ids, channels are
        arrays and pages are URLs. A member who made an edit is named while they
        are still on the account; edits made with an API key carry its key id,
        and DevTune's own edits are system. Lifecycle moves such as accepting,
        going live or archiving are not events. History starts when recording
        began, so older edits are not listed.
      operationId: listActionEvents
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: actionId
          in: path
          required: true
          description: The action
          schema:
            type: string
            format: uuid
        - name: cursor
          in: query
          schema:
            type: string
          description: Opaque cursor from the previous response.
        - name: pageSize
          in: query
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 25
          description: Results per page. Capped at 100.
      responses:
        '200':
          description: Action edits
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/ActionEventsData'
                  meta:
                    $ref: '#/components/schemas/Meta'
                required:
                  - data
                  - meta
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
components:
  schemas:
    ActionEventsData:
      type: object
      required:
        - actionId
        - items
        - hasMore
        - nextCursor
      properties:
        actionId:
          type: string
          format: uuid
        items:
          type: array
          items:
            type: object
            required:
              - id
              - kind
              - from
              - to
              - actor
              - createdAt
            properties:
              id:
                type: string
                format: uuid
              kind:
                type: string
                enum:
                  - renamed
                  - owner_set
                  - owner_cleared
                  - channels_changed
                  - description_changed
                  - published_page_added
                  - published_page_removed
              from:
                description: >-
                  The value before the edit: a title, owner user id, channel
                  array, description or page URL; null when there was none.
              to:
                description: >-
                  The value after the edit, in the same form as from; null when
                  it was cleared or removed.
              actor:
                type: object
                required:
                  - type
                properties:
                  type:
                    type: string
                    enum:
                      - user
                      - api_key
                      - system
                  userId:
                    type:
                      - string
                      - 'null'
                    format: uuid
                    description: >-
                      The member who made the edit; null once their user is
                      deleted. Present for user edits.
                  name:
                    type:
                      - string
                      - 'null'
                    description: >-
                      The member's name or email while they are still on the
                      account. Present for user edits.
                  apiKeyId:
                    type:
                      - string
                      - 'null'
                    format: uuid
                    description: >-
                      The API key that made the edit; null once the key is
                      deleted. Present for api_key edits.
              createdAt:
                type: string
                format: date-time
        hasMore:
          type: boolean
        nextCursor:
          type:
            - string
            - 'null'
    Meta:
      type: object
      properties:
        timestamp:
          type: string
          format: date-time
        projectId:
          type: string
          format: uuid
    Error:
      type: object
      properties:
        error:
          type: string
        message:
          type: string
        status:
          type: integer
      required:
        - error
        - message
        - status
  responses:
    BadRequestError:
      description: Bad request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    UnauthorizedError:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ForbiddenError:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFoundError:
      description: Not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimitExceededError:
      description: Rate limit exceeded
      headers:
        X-RateLimit-Limit:
          $ref: '#/components/headers/X-RateLimit-Limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/X-RateLimit-Remaining'
        X-RateLimit-Reset:
          $ref: '#/components/headers/X-RateLimit-Reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  headers:
    X-RateLimit-Limit:
      description: Maximum requests per window
      schema:
        type: integer
    X-RateLimit-Remaining:
      description: Requests remaining in current window
      schema:
        type: integer
    X-RateLimit-Reset:
      description: Unix timestamp when the window resets
      schema:
        type: integer
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        API key with dtk_live_ prefix. Obtain it from API Keys in the account
        sidebar. New keys start with all supported scopes selected for the
        chosen project, and you can narrow them to specific read/write scopes as
        needed.

````

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