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

# List change feed events

> List this organization's change feed, ordered and resumable by cursor.

A consumer can be killed mid-stream and resume from its last stored
`next_cursor` without re-reading or missing anything, **as long as it
resumes within the 90-day retention window** — events older than that
are permanently expired, not archived. A consumer that has been down
longer than 90 days must resync current state instead of resuming.

A cursor is only meaningful for a FIXED filter set: it encodes a
position in this organization's overall sequence, not a position
within any particular `namespace_id`/`event_type` filter. Changing
either filter mid-stream while reusing an old cursor silently skips
whatever the previous filter combination would have matched in
between — start a fresh cursor (or none) whenever the filters change.



## OpenAPI

````yaml get /v1/events
openapi: 3.1.0
info:
  title: Mixpeek API
  description: >-
    This is the Mixpeek API, providing access to various endpoints for data
    processing and retrieval.
  termsOfService: https://mixpeek.com/terms
  contact:
    name: Mixpeek Support
    url: https://mixpeek.com/contact
    email: info@mixpeek.com
  version: '0.82'
servers:
  - url: https://api.mixpeek.com
    description: Production
security:
  - BearerAuth: []
paths:
  /v1/events:
    get:
      tags:
        - Events
      summary: List change feed events
      description: |-
        List this organization's change feed, ordered and resumable by cursor.

        A consumer can be killed mid-stream and resume from its last stored
        `next_cursor` without re-reading or missing anything, **as long as it
        resumes within the 90-day retention window** — events older than that
        are permanently expired, not archived. A consumer that has been down
        longer than 90 days must resync current state instead of resuming.

        A cursor is only meaningful for a FIXED filter set: it encodes a
        position in this organization's overall sequence, not a position
        within any particular `namespace_id`/`event_type` filter. Changing
        either filter mid-stream while reusing an old cursor silently skips
        whatever the previous filter combination would have matched in
        between — start a fresh cursor (or none) whenever the filters change.
      operationId: list_events_v1_events_get
      parameters:
        - name: cursor
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Opaque cursor from a prior response's next_cursor. Omit to start
              from the beginning of the 90-day retention window.
            title: Cursor
          description: >-
            Opaque cursor from a prior response's next_cursor. Omit to start
            from the beginning of the 90-day retention window.
        - name: namespace_id
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Filter to events scoped to one namespace.
            title: Namespace Id
          description: Filter to events scoped to one namespace.
        - name: event_type
          in: query
          required: false
          schema:
            anyOf:
              - $ref: '#/components/schemas/WebhookEventType'
              - type: 'null'
            description: Filter to one event type.
            title: Event Type
          description: Filter to one event type.
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            maximum: 1000
            minimum: 1
            default: 100
            title: Limit
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListEventsResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - BearerAuth: []
components:
  schemas:
    WebhookEventType:
      type: string
      enum:
        - object.created
        - objects.created.batch
        - object.updated
        - object.deleted
        - document.created
        - document.updated
        - document.deleted
        - documents.updated.batch
        - documents.deleted.batch
        - collection.created
        - collection.updated
        - collection.deleted
        - collection.documents.written
        - cluster.created
        - cluster.updated
        - cluster.deleted
        - cluster.execution.started
        - cluster.execution.completed
        - cluster.execution.failed
        - trigger.created
        - trigger.updated
        - trigger.deleted
        - trigger.paused
        - trigger.resumed
        - trigger.fired
        - trigger.execution.completed
        - trigger.execution.failed
        - taxonomy.created
        - taxonomy.updated
        - taxonomy.deleted
        - alert.created
        - alert.updated
        - alert.deleted
        - alert.triggered
        - alert.execution.completed
        - alert.execution.failed
        - annotation.created
        - annotation.updated
        - annotation.deleted
      title: WebhookEventType
      description: >-
        Webhook event types for real-time notifications.


        These events are emitted when significant state changes occur in the
        system.

        Webhooks subscribe to specific event types and receive notifications via

        configured channels (email, Slack, HTTP webhooks).


        Event Naming Convention:
            {resource}.{action}[.{sub-resource}[.{sub-action}]]

        Examples:
            - object.created: New object ingested
            - collection.documents.written: Documents indexed
            - cluster.execution.completed: Cluster job finished

        Cache Invalidation Annotations:
            Each event type includes a comment indicating recommended cache invalidation scope:
            - [KEY] = Invalidate specific document/object keys
            - [COLLECTION] = Invalidate collection-level cache
            - [NAMESPACE] = Invalidate namespace-level cache

        Event Categories:
            - Object Lifecycle: Events for individual objects (create, update, delete)
            - Collection Lifecycle: Events for collections (create, update, delete, documents written)
            - Cluster Lifecycle: Events for clusters (create, update, delete, execution status)
            - Trigger Lifecycle: Events for cluster triggers (create, update, fire, execution status)
            - Taxonomy Lifecycle: Events for taxonomies (create, update, delete)

        Use Cases:
            - Real-time sync with external systems
            - Audit trail and compliance logging
            - Automated workflows triggered by state changes
            - Cache invalidation for distributed systems
            - Notifications to team members via Slack/email
    ListEventsResponse:
      properties:
        results:
          items:
            $ref: '#/components/schemas/ChangeEventResponse'
          type: array
          title: Results
        next_cursor:
          anyOf:
            - type: string
            - type: 'null'
          title: Next Cursor
          description: >-
            Pass as `cursor` on the next call to resume after these results.
            Unchanged from the request's cursor when this page was empty.
        has_more:
          type: boolean
          title: Has More
          description: Whether another page is available beyond this one.
      type: object
      required:
        - results
        - has_more
      title: ListEventsResponse
    ErrorResponse:
      properties:
        success:
          type: boolean
          title: Success
          description: Always false for error responses
          default: false
        status:
          type: integer
          title: Status
          description: HTTP status code for this error
        error:
          $ref: '#/components/schemas/ErrorDetail'
          description: Error details payload
      type: object
      required:
        - status
        - error
      title: ErrorResponse
      description: Error response model.
      examples:
        - error:
            details:
              id: ns_123
              resource: namespace
            message: Namespace not found
            type: NotFoundError
          status: 404
          success: false
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ChangeEventResponse:
      properties:
        seq:
          type: integer
          title: Seq
          description: Monotonic position within this org's feed.
        cursor:
          type: string
          title: Cursor
          description: Opaque cursor pointing AT this event.
        namespace_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Namespace Id
          description: Namespace scope, if any.
        event_type:
          type: string
          title: Event Type
          description: Same vocabulary as webhook subscriptions.
        resource_type:
          type: string
          title: Resource Type
          description: First segment of event_type.
        operation:
          type: string
          title: Operation
          description: insert | update | delete | other.
        payload:
          additionalProperties: true
          type: object
          title: Payload
          description: >-
            Shape is PER-EVENT-TYPE, not a stable contract — it mirrors whatever
            the originating call site already passes to WebhookClient.emit() for
            this event_type, and that shape may change independently of this
            endpoint's own versioning.
        created_at:
          type: string
          format: date-time
          title: Created At
      type: object
      required:
        - seq
        - cursor
        - event_type
        - resource_type
        - operation
        - created_at
      title: ChangeEventResponse
    ErrorDetail:
      properties:
        message:
          type: string
          title: Message
          description: Human-readable error message
        type:
          type: string
          title: Type
          description: Stable error type identifier (machine-readable)
        code:
          anyOf:
            - type: string
            - type: 'null'
          title: Code
          description: >-
            Fine-grained error code for programmatic handling (e.g.,
            namespace_name_taken, feature_extractor_not_found). Present only
            when consumers may need to branch on a specific error condition.
        details:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Details
          description: >-
            Optional structured details to help debugging (validation errors,
            IDs, etc.)
      type: object
      required:
        - message
        - type
      title: ErrorDetail
      description: Error detail model.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: >-
        Mixpeek API key, sent as `Authorization: Bearer mxp_sk_...`. Create one
        in Studio under Settings → API Keys, or with an admin key via `POST
        /v1/organizations/users/{user_email}/api-keys`. A missing header returns
        403; an invalid or revoked key returns 401.

````