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

# Search events

> List individual events in a time range, newest first, with their properties. Optionally filter by event name, event properties, or one visitor's distinct_id. The range includes from and excludes to, and duplicate event IDs are returned once, so a search over a chart bucket's range with the same filters lists exactly the events that bucket counted. A page holds up to 100 events; pass next_cursor as cursor for the following page until it is null. The first page takes a snapshot from ClickHouse's clock before reading its rows and its cursor carries it, so every page of the sequence, the first included, reads only deliveries received at or before that snapshot and ages events out of retention as of it: no event repeats or is skipped, and events received after the snapshot, including a redelivery that revises a listed event, appear only when paging restarts without a cursor. One window blurs that boundary: ClickHouse stamps a receipt at whole seconds when an insert starts and commits its rows when it finishes, so a delivery stamped in or before the snapshot's second that commits after the first page was read is inside the sequence but missing from the first page; it joins from the next page, where an unlisted event it adds or moves ahead of the cursor is skipped and a listed event that a lower-hash redelivery moves behind the cursor repeats at its revised position. A cursor that does not decode, or one from another list, returns 400. A page whose events exceed the response size limit returns 413; request a smaller limit.



## OpenAPI

````yaml https://apigw.mka1.com/speakeasy.json post /api/v1/analytics/projects/{id}/events/search
openapi: 3.1.1
info:
  title: MKA1 API
  version: 1.1.0
  description: >-
    The MKA1 API is a RESTful API that provides access to the MKA1 platform.
    Learn how to get started with the API and the TypeScript SDK
    [here](https://mka1.apidocumentation.com/guides/getting-started).
  license:
    name: Proprietary
servers:
  - url: https://apigw.mka1.com
    description: MKA1 API Gateway
  - url: /
    description: Relative server URL (configurable via SDK constructor)
security: []
tags:
  - name: Resource Authorization
    description: >-
      Manage permissions for LLM resources. Create resources, grant/revoke
      permissions, and delete resources. Only resource owners can grant, revoke,
      or delete permissions.
    x-displayName: Resource Authorization
  - name: Embeddings
    description: >-
      Text embedding API endpoints for generating vector representations of
      text. Create semantic embeddings for search, clustering, and similarity
      matching using various embedding models.
    x-displayName: Embeddings
  - name: Feedback
    description: >-
      User feedback API for rating and commenting on chat completions. Collect
      thumbs up/down ratings and detailed feedback to improve model responses
      and track user satisfaction.
    x-displayName: Feedback
  - name: Images
    description: >-
      Image generation API endpoints for creating images from text descriptions.
      Generate images with control over size, quality, and style.
    x-displayName: Images
  - name: MCP Vault
    description: >-
      MCP vault API for storing user-owned MCP server configurations and
      encrypted credentials. Agents reference vault IDs so secrets are resolved
      only at tool execution time.
    x-displayName: MCP Vault
  - name: Speech
    description: >-
      Speech API endpoints for audio processing. Convert text to
      natural-sounding speech (TTS) or transcribe speech to text (STT) in
      different languages.
    x-displayName: Speech
  - name: Usage
    description: >-
      Usage tracking and analytics API for monitoring token consumption, request
      counts, and cost analysis. View detailed statistics per user, model, and
      time period.
    x-displayName: Usage
  - name: Extract
    description: >-
      Structured data extraction API for extracting information from files.
      Define JSON schemas to extract structured data from images, PDFs, and
      documents. Supports reusable schema templates.
    x-displayName: Extract
  - name: Text Classification
    description: >-
      Text classification API for categorizing text into predefined labels. Use
      AI models to classify text content for sentiment analysis, topic
      categorization, and content moderation.
    x-displayName: Text Classification
  - name: Responses
    description: >-
      Agent-powered responses API for creating AI agents with autonomous tool
      usage. Build conversational assistants that can use web search, file
      operations, image generation, code execution, computer use simulation, and
      MCP integrations. Supports background processing, streaming, and real-time
      status tracking.
    x-displayName: Responses
  - name: Files
    description: >-
      File management API for uploading, storing, and managing files with
      automatic expiration and S3 integration. Upload files that can be used
      with Assistants, Vector Stores, and other features. Files are stored in S3
      with metadata tracked in PostgreSQL. Supports automatic cleanup of expired
      files.
    x-displayName: Files
  - name: Vector Stores
    description: >-
      Vector store API for storing and searching documents using embeddings.
      Create vector stores, upload files with automatic chunking and embedding
      generation, and perform semantic search. Files are processed
      asynchronously using Temporal workflows for durability. Supports automatic
      cleanup of expired stores and LanceDB for efficient vector storage.
    x-displayName: Vector Stores
  - name: Conversations
    description: >-
      Conversation management API for storing and retrieving conversation state
      across Response API calls. Create conversations, add items (user messages,
      assistant messages, system messages), and maintain conversation history.
      Supports metadata tracking and multi-turn dialogue state management.
    x-displayName: Conversations
  - name: Guardrails
    description: >-
      AI safety guardrails API for configuring content moderation and security
      policies. Set up ban word lists, prompt injection detection, and system
      prompt leakage prevention. Guardrails apply to all requests from an
      account and can be tested before deployment.
    x-displayName: Guardrails
  - name: Models
    description: >-
      Model listing API for discovering available models. Returns model IDs,
      ownership, and metadata for all registered models in the gateway.
    x-displayName: Models
  - name: Skills
    description: >-
      Skills API for managing versioned bundles of instructions and files
      following the Agent Skills standard. Create, version, and download
      reusable skill packages that include SKILL.md manifests for agent
      environments.
    x-displayName: Skills
  - name: Chat Completions
    description: >-
      **Deprecated: Use the Responses API (`/api/v1/llm/responses`) instead.**
      Chat completion endpoints with support for streaming, tool calls, and
      multiple providers.
    x-deprecated: true
    x-displayName: Chat Completions
  - name: Batches
    x-displayName: Batches
  - name: Evals
    x-displayName: Evals
  - name: Fine-Tuning
    x-displayName: Fine-Tuning
  - name: Memory Stores
    x-displayName: Memory Stores
  - name: Prompts
    x-displayName: Prompts
  - name: API Key
    x-displayName: API Key
  - name: Session
    x-displayName: Session
  - name: Organization
    x-displayName: Organization
  - name: Cluster Admin
    x-displayName: Cluster Admin
  - name: Sessions
    description: Create, inspect, access, and terminate sandbox sessions.
    x-displayName: Sessions
  - name: Browser
    description: >-
      Connect to browser sessions through the gateway port proxy. Browser
      sessions expose a Chrome DevTools Protocol endpoint on port 9222.
    x-displayName: Browser
  - name: Execution
    description: Run shell commands and code inside an existing sandbox session.
    x-displayName: Execution
  - name: Workspace
    description: >-
      Inspect the workspace manifest, transfer files or archives, and download
      generated artifacts.
    x-displayName: Workspace
  - name: Sandbox Usage
    description: >-
      Aggregate sandbox usage statistics across sessions, execution, and
      workspace operations.
    x-displayName: Sandbox Usage
  - name: Sandbox Pricing
    description: >-
      Cluster-admin management of the sandbox compute rate card used for
      budgeted spend.
    x-displayName: Sandbox Pricing
  - name: schema-3_other
    x-displayName: other
  - name: Agents
    description: Create and manage reusable agent definitions.
    x-displayName: Agents
  - name: Agent Versions
    description: Inspect an agent's configuration history and roll back to a prior version.
    x-displayName: Agent Versions
  - name: Agent Runs
    description: Execute saved agents and inspect persisted run results.
    x-displayName: Agent Runs
  - name: Agent Connectors
    description: >-
      Connect saved agents to external messaging channels such as Telegram,
      including text, photo, and supported document exchange.
    x-displayName: Agent Connectors
  - name: Agent Schedules
    description: Create and manage scheduled or recurring saved agent runs.
    x-displayName: Agent Schedules
  - name: schema-4_other
    x-displayName: other
  - name: Budgets
    x-displayName: Budgets
  - name: Settings
    x-displayName: Settings
  - name: Compute Jobs
    x-displayName: Compute Jobs
  - name: Compute Services
    x-displayName: Compute Services
  - name: Compute Catalog
    x-displayName: Compute Catalog
  - name: Compute Volumes
    x-displayName: Compute Volumes
  - name: Compute Pricing
    x-displayName: Compute Pricing
  - name: Compute Secrets
    x-displayName: Compute Secrets
  - name: Compute Usage
    x-displayName: Compute Usage
  - name: Compute Tenants
    x-displayName: Compute Tenants
  - description: Create, list, read, update, and delete repositories.
    name: Repositories
    x-displayName: Repositories
  - name: Tracking Experiments
    description: Create and query tenant experiments.
    x-displayName: Tracking Experiments
  - name: Tracking Runs
    description: Record and retrieve run parameters, metrics, and tags.
    x-displayName: Tracking Runs
  - name: analytics.projects
    x-displayName: Projects
    description: Create, list, rename, and archive analytics projects.
  - name: analytics.keys
    x-displayName: Capture keys
    description: Create and revoke project keys for sending events.
  - name: analytics
    x-displayName: Events
    description: Send events and query event counts or unique visitors.
  - name: analytics.events
    x-displayName: Event search
    description: List individual events with their properties, newest first.
  - name: analytics.visitors
    x-displayName: Visitor search
    description: List visitors by their latest activity, with first and last seen times.
  - name: generators
    x-displayName: generators
  - name: generations
    x-displayName: generations
  - name: formats
    x-displayName: formats
paths:
  /api/v1/analytics/projects/{id}/events/search:
    post:
      tags:
        - analytics.events
      summary: Search events in a time range
      description: >-
        List individual events in a time range, newest first, with their
        properties. Optionally filter by event name, event properties, or one
        visitor's distinct_id. The range includes from and excludes to, and
        duplicate event IDs are returned once, so a search over a chart bucket's
        range with the same filters lists exactly the events that bucket
        counted. A page holds up to 100 events; pass next_cursor as cursor for
        the following page until it is null. The first page takes a snapshot
        from ClickHouse's clock before reading its rows and its cursor carries
        it, so every page of the sequence, the first included, reads only
        deliveries received at or before that snapshot and ages events out of
        retention as of it: no event repeats or is skipped, and events received
        after the snapshot, including a redelivery that revises a listed event,
        appear only when paging restarts without a cursor. One window blurs that
        boundary: ClickHouse stamps a receipt at whole seconds when an insert
        starts and commits its rows when it finishes, so a delivery stamped in
        or before the snapshot's second that commits after the first page was
        read is inside the sequence but missing from the first page; it joins
        from the next page, where an unlisted event it adds or moves ahead of
        the cursor is skipped and a listed event that a lower-hash redelivery
        moves behind the cursor repeats at its revised position. A cursor that
        does not decode, or one from another list, returns 400. A page whose
        events exceed the response size limit returns 413; request a smaller
        limit.
      operationId: analytics_events_search
      parameters:
        - in: path
          name: id
          schema:
            type: string
            minLength: 1
            maxLength: 128
            pattern: ^[^\u0000]*$
            description: ID of the analytics project.
          required: true
          description: ID of the analytics project.
      requestBody:
        required: true
        content:
          application/json:
            example:
              from: '2026-09-17T07:00:00Z'
              to: '2026-09-17T08:00:00Z'
              event_name: page_view
              filters:
                - property: plan
                  op: eq
                  value: pro
              distinct_id: visitor-123
              limit: 50
            schema:
              $ref: '#/components/schemas/AnalyticsEventSearchRequest'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AnalyticsEventSearchResponse'
        '400':
          description: Request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AnalyticsError'
        '401':
          description: Request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AnalyticsError'
        '403':
          description: Request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AnalyticsError'
        '404':
          description: Request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AnalyticsError'
        '409':
          description: Request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AnalyticsError'
        '413':
          description: Request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AnalyticsError'
        '415':
          description: Request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AnalyticsError'
        '429':
          description: Request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AnalyticsError'
        '500':
          description: Request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AnalyticsError'
        '503':
          description: Request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AnalyticsError'
      security:
        - bearerAuth: []
      x-codeSamples:
        - lang: python
          label: Python (SDK)
          source: |-
            from meetkai_mka1 import SDK
            from meetkai_mka1.utils import parse_datetime


            with SDK(
                bearer_auth="<YOUR_BEARER_TOKEN_HERE>",
            ) as sdk:

                res = sdk.analytics.events.search(id="<id>", from_=parse_datetime("2026-09-17T07:00:00Z"), to=parse_datetime("2026-09-17T08:00:00Z"), event_name="page_view", filters=[
                    {
                        "property": "plan",
                        "op": "eq",
                        "value": "pro",
                    },
                ], distinct_id="visitor-123", limit=50)

                # Handle response
                print(res)
        - lang: typescript
          label: Typescript (SDK)
          source: |-
            import { SDK } from "@meetkai/mka1";

            const sdk = new SDK({
              bearerAuth: "<YOUR_BEARER_TOKEN_HERE>",
            });

            async function run() {
              const result = await sdk.analytics.events.search({
                id: "<id>",
                analyticsEventSearchRequest: {
                  from: new Date("2026-09-17T07:00:00Z"),
                  to: new Date("2026-09-17T08:00:00Z"),
                  eventName: "page_view",
                  filters: [
                    {
                      property: "plan",
                      op: "eq",
                      value: "pro",
                    },
                  ],
                  distinctId: "visitor-123",
                },
              });

              console.log(result);
            }

            run();
        - lang: csharp
          label: CSharp (SDK)
          source: |-
            using MeetKai.MKA1;
            using MeetKai.MKA1.Types.Components;
            using System;
            using System.Collections.Generic;

            var sdk = new SDK(bearerAuth: "<YOUR_BEARER_TOKEN_HERE>");

            var res = await sdk.Analytics.Events.SearchAsync(
                id: "<id>",
                body: new AnalyticsEventSearchRequest() {
                    From = System.DateTime.Parse("2026-09-17T07:00:00Z").ToUniversalTime(),
                    To = System.DateTime.Parse("2026-09-17T08:00:00Z").ToUniversalTime(),
                    EventName = "page_view",
                    Filters = new List<AnalyticsEventSearchRequestFilter>() {
                        new AnalyticsEventSearchRequestFilter() {
                            Property = "plan",
                            Op = AnalyticsEventSearchRequestOp.Eq,
                            Value = AnalyticsEventSearchRequestValue.CreateStr(
                                "pro"
                            ),
                        },
                    },
                    DistinctId = "visitor-123",
                }
            );

            // handle response
components:
  schemas:
    AnalyticsEventSearchRequest:
      type: object
      properties:
        from:
          type: string
          format: date-time
          description: >-
            Start of the time range, inclusive. Use an ISO 8601 timestamp with Z
            for UTC or an offset such as -07:00. Must be before to.
          examples:
            - '2026-09-01T00:00:00Z'
        to:
          type: string
          format: date-time
          description: >-
            End of the time range, exclusive. Use an ISO 8601 timestamp with Z
            for UTC or an offset such as -07:00. Must be after from.
          examples:
            - '2026-09-02T00:00:00Z'
        event_name:
          description: >-
            Only include events with this exact name. Omit to include all event
            names.
          examples:
            - page_view
          type: string
          minLength: 1
          maxLength: 255
        filters:
          default: []
          description: >-
            Property filters combined with AND. An event must match every
            filter.
          maxItems: 10
          type: array
          items:
            type: object
            properties:
              property:
                type: string
                minLength: 1
                maxLength: 128
                pattern: ^[^\u0000]*$
                description: >-
                  Event property to filter. Property names are literal keys, not
                  nested paths.
                examples:
                  - plan
              op:
                type: string
                enum:
                  - eq
                  - neq
                  - gt
                  - gte
                  - lt
                  - lte
                  - exists
                  - not_exists
                description: >-
                  Comparison operator. gt, gte, lt, and lte require a numeric
                  value. exists and not_exists check whether the property is
                  present and do not take a value.
              value:
                description: >-
                  Value to compare. The number 1 differs from the string '1'.
                  Omit for exists and not_exists.
                anyOf:
                  - type: string
                    maxLength: 4096
                    pattern: ^[^\u0000]*$
                  - type: number
                  - type: boolean
                  - type: 'null'
            required:
              - property
              - op
            additionalProperties: false
        distinct_id:
          description: Only include events sent with this exact distinct_id.
          type: string
          minLength: 1
          maxLength: 255
          pattern: ^[^\u0000]*$
        limit:
          default: 50
          description: Maximum number of rows in this page.
          type: integer
          minimum: 1
          maximum: 100
        cursor:
          type: string
          minLength: 1
          maxLength: 4096
          description: >-
            Opaque cursor of at most 4096 characters, copied from next_cursor of
            the previous page. Omit for the first page, which takes the snapshot
            the whole sequence reads at. Cursors belong to one list and one sort
            order; a cursor that does not decode, or one from another list,
            returns 400. A cursor is a position, not a capability: one that
            decodes only moves the caller within the same project.
      required:
        - from
        - to
      additionalProperties: false
    AnalyticsEventSearchResponse:
      type: object
      properties:
        events:
          type: array
          items:
            $ref: '#/components/schemas/AnalyticsEvent'
          description: >-
            Matching events, newest first. Events with the same timestamp are
            ordered by event_id, descending.
        next_cursor:
          description: >-
            Cursor for the next page, or null when there are no more rows. It
            continues the sequence at the snapshot its first page took.
          type:
            - string
            - 'null'
      required:
        - events
        - next_cursor
      additionalProperties: false
    AnalyticsError:
      type: object
      properties:
        code:
          type: string
        message:
          type: string
      required:
        - code
        - message
      additionalProperties: false
    AnalyticsEvent:
      type: object
      properties:
        event_id:
          type: string
          format: uuid
          pattern: >-
            ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
          description: Unique ID for this event. Reuse it when retrying the same event.
        event_name:
          type: string
          minLength: 1
          maxLength: 255
          pattern: ^[^\u0000]*$
          description: Name of the action you are tracking.
          examples:
            - page_view
        timestamp:
          type: string
          format: date-time
          description: >-
            When the event occurred. Use an ISO 8601 timestamp with Z for UTC or
            an offset such as -07:00. Send current timestamps for new events.
            Event search returns it in UTC with milliseconds, ending in Z.
          examples:
            - '2026-09-01T12:30:00Z'
        distinct_id:
          type: string
          minLength: 1
          maxLength: 255
          pattern: ^[^\u0000]*$
          description: >-
            Your identifier for the visitor. Unique visitor queries count
            distinct values of this field, and visitor search lists one visitor
            per value.
        properties:
          description: >-
            Up to 100 event properties. Values can be strings, numbers,
            booleans, or null. Nested objects and arrays are not supported.
          type: object
          propertyNames:
            type: string
            minLength: 1
            maxLength: 128
            pattern: ^[^\u0000]*$
          additionalProperties:
            anyOf:
              - type: string
                maxLength: 4096
                pattern: ^[^\u0000]*$
              - type: number
              - type: boolean
              - type: 'null'
      required:
        - event_id
        - event_name
        - timestamp
        - distinct_id
        - properties
      additionalProperties: false
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: >-
        Gateway auth: send `Authorization: Bearer <mka1-api-key>`. For
        multi-user server-side integrations, you can also send `X-On-Behalf-Of:
        <external-user-id>`.

````