Leena AI Audit Logs API

Retrieve audit log records for the authenticated bot.

OpenAPI Specification

leena-ai-audit-logs-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Leena AI External AOP Analytics Audit Logs API
  version: 1.0-beta
  description: 'Execute an Agent Operating Procedure (AOP) on a Leena AI AI Colleague from an external

    system and poll its execution status, plus a read-only analytics query endpoint for

    AI Colleague run metrics.


    This specification was generated by the API Evangelist enrichment pipeline from

    Leena AI''s published documentation. Leena AI does not publish a machine-readable

    OpenAPI definition; every path, parameter, response field and error below is

    transcribed from the public guide cited in `x-source`.

    '
  contact:
    name: Leena AI
    url: https://docs.leena.ai/
  x-generated: '2026-07-19'
  x-method: generated
  x-source: https://docs.leena.ai/docs/external-aop-api-authentication-usage-guide
servers:
- url: https://us-east-1-aic.leena.ai
  description: AOP / AI Colleague host, us-east-1
- url: https://us-east-1-analytics-api.leena.ai
  description: Analytics host, us-east-1
tags:
- name: Audit Logs
  description: Retrieve audit log records for the authenticated bot.
paths:
  /external/v1/audit-logs:
    get:
      operationId: listAuditLogs
      summary: List audit logs
      description: 'Returns audit log records with `updatedAt` greater than the supplied lower bound,

        sorted ascending by `(updatedAt, _id)`. Supply `updatedAt` on the first call, then

        follow `nextCursor` until `hasMore` is false. Requires the `audit-logs:read` scope.

        '
      tags:
      - Audit Logs
      security:
      - oauth2:
        - audit-logs:read
      parameters:
      - name: updatedAt
        in: query
        required: false
        description: ISO-8601 lower bound. Required when no `cursor` is supplied. Returns records where `updatedAt` is strictly greater than this value.
        schema:
          type: string
          format: date-time
        example: '2026-07-01T00:00:00.000Z'
      - name: cursor
        in: query
        required: false
        description: Opaque base64 cursor taken from the prior response `nextCursor`. When present it overrides `updatedAt`.
        schema:
          type: string
      - name: limit
        in: query
        required: false
        description: Number of records per page.
        schema:
          type: integer
          default: 100
          minimum: 1
          maximum: 1000
      responses:
        '200':
          description: A page of audit log records.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuditLogPage'
        '400':
          description: Invalid cursor, or missing/invalid `updatedAt`, or DTO validation failure.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid Authorization header, invalid or expired token, insufficient OAuth scope, or a token missing the `botId` claim.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limit exceeded (60 requests per minute per OAuth client).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    ExternalAuditLog:
      type: object
      properties:
        _id:
          type: string
          description: 24-character hex identifier.
        auditLogId:
          type: string
          description: Human-readable audit log identifier.
        botId:
          type: string
        componentId:
          type: string
        activity:
          type: string
        priority:
          type: string
          enum:
          - critical
          - high
          - normal
          - low
        status:
          type: string
          enum:
          - success
          - in-progress
          - fail
        message:
          type: string
        generatedAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        actor:
          $ref: '#/components/schemas/Actor'
        targetUser:
          $ref: '#/components/schemas/Actor'
        submoduleId:
          type: string
        resourceId:
          type: string
        ip:
          type: string
        useragent:
          type: string
        metadata:
          type: array
          items:
            type: object
        redirectionLink:
          type: string
      required:
      - _id
      - auditLogId
      - updatedAt
    AuditLogPage:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/ExternalAuditLog'
        nextCursor:
          type: string
          nullable: true
          description: Opaque base64 cursor for the next page, or null when exhausted.
        hasMore:
          type: boolean
          description: Whether more records remain.
      required:
      - data
      - hasMore
    Actor:
      type: object
      properties:
        userId:
          type: string
        userType:
          type: string
          enum:
          - dashboard
          - bot
          - none
        source:
          type: string
        email:
          type: string
        phone:
          type: string
        employeeId:
          type: string
      required:
      - userId
      - userType
    Error:
      type: object
      properties:
        message:
          type: string
          description: Documented values include "Invalid cursor", "Missing or invalid Authorization header", "Invalid token", "Token expired", "Insufficient OAuth scope", "Token is missing botId" and "Rate limit exceeded. Please retry after some time."
      required:
      - message
  securitySchemes:
    oauth2:
      type: oauth2
      description: OAuth 2.0 resource owner password credentials grant. The client authenticates to the token endpoint with HTTP Basic (base64 of `client_id:client_secret`) and posts `username`, `password` and `grant_type=password`. Access tokens are Bearer tokens valid for 3600 seconds and are accompanied by a refresh token.
      flows:
        password:
          tokenUrl: https://us-east-1-acl.leena.ai/api/v1.0/oauth/token
          refreshUrl: https://us-east-1-acl.leena.ai/api/v1.0/oauth/token
          scopes: {}
x-regions:
- us-east-1
- eu-west-1
- eu-central-1
- canadacentral
- ap-southeast-1
- ap-south-1
- qatarcentral
- me-central2