OpenMetadata Feeds API

Feeds API supports `Activity Feeds` and `Conversation Threads`.

OpenAPI Specification

openmetadata-feeds-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: OpenMetadata APIs Agent Executions Feeds API
  description: Common types and API definition for OpenMetadata
  contact:
    name: OpenMetadata
    url: https://open-metadata.org
    email: openmetadata-dev@googlegroups.com
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0
  version: '1.13'
servers:
- url: /api
  description: Current Host
- url: http://localhost:8585/api
  description: Endpoint URL
security:
- BearerAuth: []
tags:
- name: Feeds
  description: Feeds API supports `Activity Feeds` and `Conversation Threads`.
paths:
  /v1/feed/{id}/posts:
    get:
      tags:
      - Feeds
      summary: Get all the posts of a thread
      description: Get all the posts of an existing thread.
      operationId: getAllPostOfThread
      parameters:
      - name: id
        in: path
        description: Id of the thread
        required: true
        schema:
          type: string
      responses:
        '200':
          description: The posts of the given thread.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostList'
    post:
      tags:
      - Feeds
      summary: Add post to a thread
      description: Add a post to an existing thread.
      operationId: addPostToThread
      parameters:
      - name: id
        in: path
        description: Id of the thread
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePost'
      responses:
        '200':
          description: The post
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Thread'
        '400':
          description: Bad request
  /v1/feed/tasks/{id}/close:
    put:
      tags:
      - Feeds
      summary: Close a task
      description: Close a task without making any changes to the entity.
      operationId: closeTask
      parameters:
      - name: id
        in: path
        description: Id of the task thread
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CloseTask'
      responses:
        '200':
          description: The task thread.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Thread'
        '400':
          description: Bad request
  /v1/feed:
    get:
      tags:
      - Feeds
      summary: List threads
      description: Get a list of threads, optionally filtered by `entityLink`.
      operationId: listThreads
      parameters:
      - name: limitPosts
        in: query
        description: Limit the number of posts sorted by chronological order (1 to 1000000, default = 3)
        schema:
          maximum: 1000000
          minimum: 0
          type: integer
          format: int64
          default: 3
      - name: limit
        in: query
        description: Limit the number of threads returned. (1 to 1000000, default = 10)
        schema:
          maximum: 1000000
          minimum: 1
          type: integer
          format: int32
          default: 10
      - name: before
        in: query
        description: Returns list of threads before this cursor
        schema:
          type: string
      - name: after
        in: query
        description: Returns list of threads after this cursor
        schema:
          type: string
      - name: entityLink
        in: query
        description: Filter threads by entity link of entity about which this thread is created
        schema:
          type: string
          example: <E#/{entityType}/{entityFQN}/{fieldName}>
      - name: userId
        in: query
        description: Filter threads by user id. This filter requires a 'filterType' query param. The default filter type is 'OWNER'. This filter cannot be combined with the entityLink filter.
        schema:
          type: string
      - name: filterType
        in: query
        description: Filter type definition for the user filter. It can take one of 'OWNER', 'FOLLOWS', 'MENTIONS'. This must be used with the 'user' query param
        schema:
          type: string
          enum:
          - OWNER
          - MENTIONS
          - FOLLOWS
          - ASSIGNED_TO
          - ASSIGNED_BY
          - OWNER_OR_FOLLOWS
      - name: resolved
        in: query
        description: Filter threads by whether they are resolved or not. By default resolved is false
        schema:
          type: boolean
          default: false
      - name: type
        in: query
        description: The type of thread to filter the results. It can take one of 'Conversation', 'Task', 'Announcement'
        schema:
          type: string
          enum:
          - Conversation
          - Task
          - Announcement
          - Chatbot
      - name: taskStatus
        in: query
        description: The status of tasks to filter the results. It can take one of 'Open', 'Closed'. This filter will take effect only when type is set to Task
        schema:
          type: string
          enum:
          - Open
          - Closed
      - name: activeAnnouncement
        in: query
        description: Whether to filter results by announcements that are currently active. This filter will take effect only when type is set to Announcement
        schema:
          type: boolean
      responses:
        '200':
          description: List of threads
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ThreadList'
    post:
      tags:
      - Feeds
      summary: Create a thread
      description: Create a new thread. A thread is created about a data asset when a user posts the first post.
      operationId: createThread
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateThread'
      responses:
        '200':
          description: The thread
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Thread'
        '400':
          description: Bad request
  /v1/feed/{threadId}/posts/{postId}:
    delete:
      tags:
      - Feeds
      summary: Delete a post from its thread
      description: Delete a post from an existing thread.
      operationId: deletePostFromThread
      parameters:
      - name: threadId
        in: path
        description: ThreadId of the post to be deleted
        required: true
        schema:
          type: string
      - name: postId
        in: path
        description: PostId of the post to be deleted
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
        '404':
          description: post with {postId} is not found
        '400':
          description: Bad request
    patch:
      tags:
      - Feeds
      summary: Update post of a thread by `Id`.
      description: Update a post of an existing thread using JsonPatch.
      externalDocs:
        description: JsonPatch RFC
        url: https://tools.ietf.org/html/rfc6902
      operationId: patchPostOfThread
      parameters:
      - name: threadId
        in: path
        description: Id of the thread
        required: true
        schema:
          type: string
      - name: postId
        in: path
        description: Id of the post
        required: true
        schema:
          type: string
      requestBody:
        description: JsonPatch with array of operations
        content:
          application/json-patch+json:
            schema:
              $ref: '#/components/schemas/JsonPatch'
            example: '[{op:remove, path:/a},{op:add, path: /b, value: val}]'
      responses:
        '400':
          description: Bad request
        '404':
          description: post with {postId} is not found
  /v1/feed/{threadId}:
    delete:
      tags:
      - Feeds
      summary: Delete a thread by Id
      description: Delete an existing thread and all its relationships.
      operationId: deleteThread
      parameters:
      - name: threadId
        in: path
        description: ThreadId of the thread to be deleted
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
        '404':
          description: thread with {threadId} is not found
        '400':
          description: Bad request
  /v1/feed/{id}:
    get:
      tags:
      - Feeds
      summary: Get a thread by Id
      description: Get a thread by `Id`.
      operationId: getThreadByID
      parameters:
      - name: id
        in: path
        description: Id of the Thread
        required: true
        schema:
          type: string
      responses:
        '200':
          description: The thread
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Thread'
        '404':
          description: Thread for instance {id} is not found
    patch:
      tags:
      - Feeds
      summary: Update a thread by `Id`.
      description: Update an existing thread using JsonPatch.
      externalDocs:
        description: JsonPatch RFC
        url: https://tools.ietf.org/html/rfc6902
      operationId: patchThread
      parameters:
      - name: id
        in: path
        description: Id of the thread
        required: true
        schema:
          type: string
      requestBody:
        description: JsonPatch with array of operations
        content:
          application/json-patch+json:
            schema:
              $ref: '#/components/schemas/JsonPatch'
            example: '[{op:remove, path:/a},{op:add, path: /b, value: val}]'
      responses:
        default:
          description: default response
          content:
            application/json: {}
  /v1/feed/tasks/{id}:
    get:
      tags:
      - Feeds
      summary: Get a task thread by task Id
      description: Get a task thread by `task Id`.
      operationId: getTaskByID
      parameters:
      - name: id
        in: path
        description: Id of the task thread
        required: true
        schema:
          type: string
      responses:
        '200':
          description: The task thread
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Thread'
        '404':
          description: Task for instance {id} is not found
  /v1/feed/count:
    get:
      tags:
      - Feeds
      summary: Count of threads
      description: Get a count of threads, optionally filtered by `entityLink` for each of the entities.
      operationId: countThreads
      parameters:
      - name: entityLink
        in: query
        description: Filter threads by entity link
        schema:
          type: string
          example: <E#/{entityType}/{entityFQN}/{fieldName}>
      responses:
        '200':
          description: Count of threads
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ThreadCountList'
  /v1/feed/tasks/{id}/resolve:
    put:
      tags:
      - Feeds
      summary: Resolve a task
      description: Resolve a task.
      operationId: resolveTask
      parameters:
      - name: id
        in: path
        description: Id of the task thread
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ResolveTask'
      responses:
        '200':
          description: The task thread
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Thread'
        '400':
          description: Bad request
components:
  schemas:
    TagLabelRecognizerMetadata:
      required:
      - recognizerId
      - recognizerName
      - score
      type: object
      properties:
        recognizerId:
          type: string
          format: uuid
        recognizerName:
          type: string
        score:
          type: number
          format: double
        target:
          type: string
          enum:
          - content
          - column_name
        patterns:
          type: array
          items:
            $ref: '#/components/schemas/PatternMatch'
    ThreadList:
      required:
      - data
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Thread'
        paging:
          $ref: '#/components/schemas/Paging'
        errors:
          type: array
          items:
            $ref: '#/components/schemas/EntityError'
        warningsCount:
          type: integer
          format: int32
        warnings:
          type: array
          items:
            $ref: '#/components/schemas/EntityError'
    ChangeSummaryMap:
      type: object
    FieldChange:
      type: object
      properties:
        name:
          type: string
        oldValue:
          type: object
        newValue:
          type: object
    ResolveTask:
      required:
      - newValue
      type: object
      properties:
        newValue:
          type: string
        testCaseFailureReason:
          type: string
          enum:
          - FalsePositive
          - MissingData
          - Duplicates
          - OutOfBounds
          - Other
        testCaseFQN:
          maxLength: 3072
          minLength: 1
          type: string
    ChatbotDetails:
      type: object
      properties:
        query:
          type: string
    AnnouncementDetails:
      required:
      - endTime
      - startTime
      type: object
      properties:
        description:
          type: string
        startTime:
          type: integer
          format: int64
        endTime:
          type: integer
          format: int64
    Thread:
      required:
      - about
      - id
      - message
      type: object
      properties:
        id:
          type: string
          format: uuid
        type:
          type: string
          enum:
          - Conversation
          - Task
          - Announcement
          - Chatbot
        href:
          type: string
          format: uri
        threadTs:
          type: integer
          format: int64
        about:
          pattern: (?U)^<#E::\w+::(?:[^:<>|]|:[^:<>|])+(?:::(?:[^:<>|]|:[^:<>|])+)*>$
          type: string
        entityRef:
          $ref: '#/components/schemas/EntityReference'
        entityUrlLink:
          type: string
        domains:
          type: array
          items:
            type: string
            format: uuid
        generatedBy:
          type: string
          enum:
          - user
          - system
        cardStyle:
          type: string
          enum:
          - default
          - logicalTestCaseAdded
          - entityCreated
          - entityDeleted
          - entitySoftDeleted
          - description
          - tags
          - owner
          - testCaseResult
          - customProperties
          - assets
          - domain
        fieldOperation:
          type: string
          enum:
          - added
          - updated
          - deleted
          - none
        feedInfo:
          $ref: '#/components/schemas/FeedInfo'
        addressedTo:
          pattern: (?U)^<#E::\w+::(?:[^:<>|]|:[^:<>|])+(?:::(?:[^:<>|]|:[^:<>|])+)*>$
          type: string
        createdBy:
          type: string
        updatedAt:
          type: integer
          format: int64
        updatedBy:
          type: string
        changeDescription:
          $ref: '#/components/schemas/ChangeDescription'
        impersonatedBy:
          type: string
        resolved:
          type: boolean
        message:
          type: string
        postsCount:
          type: integer
          format: int32
        posts:
          type: array
          items:
            $ref: '#/components/schemas/Post'
        reactions:
          type: array
          items:
            $ref: '#/components/schemas/Reaction'
        task:
          $ref: '#/components/schemas/TaskDetails'
        announcement:
          $ref: '#/components/schemas/AnnouncementDetails'
        chatbot:
          $ref: '#/components/schemas/ChatbotDetails'
    Paging:
      required:
      - total
      type: object
      properties:
        before:
          type: string
        after:
          type: string
        offset:
          type: integer
          format: int32
        limit:
          type: integer
          format: int32
        total:
          type: integer
          format: int32
    CreateTaskDetails:
      required:
      - assignees
      - type
      type: object
      properties:
        type:
          type: string
          enum:
          - RequestDescription
          - UpdateDescription
          - RequestTag
          - UpdateTag
          - RequestApproval
          - RequestTestCaseFailureResolution
          - RecognizerFeedbackApproval
          - Generic
        assignees:
          type: array
          items:
            $ref: '#/components/schemas/EntityReference'
        oldValue:
          type: string
        suggestion:
          type: string
    JsonPatch:
      type: object
    ChangeDescription:
      type: object
      properties:
        fieldsAdded:
          type: array
          items:
            $ref: '#/components/schemas/FieldChange'
        fieldsUpdated:
          type: array
          items:
            $ref: '#/components/schemas/FieldChange'
        fieldsDeleted:
          type: array
          items:
            $ref: '#/components/schemas/FieldChange'
        previousVersion:
          type: number
          format: double
        changeSummary:
          $ref: '#/components/schemas/ChangeSummaryMap'
    RecognizerInfo:
      type: object
      properties:
        recognizerId:
          type: string
          format: uuid
        recognizerName:
          type: string
        matchPattern:
          type: string
        confidenceScore:
          type: number
          format: double
    Reaction:
      required:
      - reactionType
      - user
      type: object
      properties:
        reactionType:
          type: string
          enum:
          - thumbsUp
          - thumbsDown
          - hooray
          - laugh
          - confused
          - heart
          - rocket
          - eyes
        user:
          $ref: '#/components/schemas/EntityReference'
    RecognizerFeedback:
      required:
      - entityLink
      - feedbackType
      - tagFQN
      type: object
      properties:
        id:
          type: string
          format: uuid
        entityLink:
          pattern: (?U)^<#E::\w+::(?:[^:<>|]|:[^:<>|])+(?:::(?:[^:<>|]|:[^:<>|])+)*>$
          type: string
        tagFQN:
          maxLength: 3072
          minLength: 1
          type: string
        feedbackType:
          type: string
          enum:
          - FALSE_POSITIVE
          - INCORRECT_CLASSIFICATION
          - OVERLY_BROAD
          - CONTEXT_SPECIFIC
        userReason:
          type: string
          enum:
          - NOT_SENSITIVE_DATA
          - WRONG_DATA_TYPE
          - INTERNAL_IDENTIFIER
          - PUBLIC_INFORMATION
          - TEST_DATA
          - ENCRYPTED_DATA
          - OTHER
        userComments:
          type: string
        suggestedTag:
          maxLength: 3072
          minLength: 1
          type: string
        sampleValues:
          type: array
          items:
            type: string
        recognizerInfo:
          $ref: '#/components/schemas/RecognizerInfo'
        createdBy:
          $ref: '#/components/schemas/EntityReference'
        createdAt:
          type: integer
          format: int64
        status:
          type: string
          enum:
          - PENDING
          - REVIEWED
          - APPLIED
          - REJECTED
        resolution:
          $ref: '#/components/schemas/Resolution'
    Resolution:
      type: object
      properties:
        action:
          type: string
          enum:
          - ADDED_TO_EXCEPTION_LIST
          - PATTERN_ADJUSTED
          - THRESHOLD_INCREASED
          - RECOGNIZER_DISABLED_FOR_ENTITY
          - NO_ACTION_NEEDED
        resolvedBy:
          $ref: '#/components/schemas/EntityReference'
        resolvedAt:
          type: integer
          format: int64
        resolutionNotes:
          type: string
    ThreadCount:
      type: object
      properties:
        conversationCount:
          minimum: 0
          exclusiveMinimum: false
          type: integer
          format: int32
        openTaskCount:
          minimum: 0
          exclusiveMinimum: false
          type: integer
          format: int32
        closedTaskCount:
          minimum: 0
          exclusiveMinimum: false
          type: integer
          format: int32
        totalTaskCount:
          minimum: 0
          exclusiveMinimum: false
          type: integer
          format: int32
        mentionCount:
          minimum: 0
          exclusiveMinimum: false
          type: integer
          format: int32
        totalAnnouncementCount:
          minimum: 0
          exclusiveMinimum: false
          type: integer
          format: int32
        activeAnnouncementCount:
          minimum: 0
          exclusiveMinimum: false
          type: integer
          format: int32
        inactiveAnnouncementCount:
          minimum: 0
          exclusiveMinimum: false
          type: integer
          format: int32
        entityLink:
          pattern: (?U)^<#E::\w+::(?:[^:<>|]|:[^:<>|])+(?:::(?:[^:<>|]|:[^:<>|])+)*>$
          type: string
    CreateThread:
      required:
      - about
      - message
      type: object
      properties:
        message:
          type: string
        addressedTo:
          pattern: (?U)^<#E::\w+::(?:[^:<>|]|:[^:<>|])+(?:::(?:[^:<>|]|:[^:<>|])+)*>$
          type: string
        about:
          pattern: (?U)^<#E::\w+::(?:[^:<>|]|:[^:<>|])+(?:::(?:[^:<>|]|:[^:<>|])+)*>$
          type: string
        type:
          type: string
          enum:
          - Conversation
          - Task
          - Announcement
          - Chatbot
        taskDetails:
          $ref: '#/components/schemas/CreateTaskDetails'
        announcementDetails:
          $ref: '#/components/schemas/AnnouncementDetails'
        chatbotDetails:
          $ref: '#/components/schemas/ChatbotDetails'
        domains:
          type: array
          items:
            type: string
            format: uuid
    Post:
      required:
      - from
      - id
      - message
      type: object
      properties:
        id:
          type: string
          format: uuid
        message:
          type: string
        postTs:
          type: integer
          format: int64
        from:
          type: string
        reactions:
          type: array
          items:
            $ref: '#/components/schemas/Reaction'
    PatternMatch:
      required:
      - name
      - score
      type: object
      properties:
        name:
          type: string
        regex:
          type: string
        score:
          type: number
          format: double
    ThreadCountList:
      required:
      - data
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/ThreadCount'
        paging:
          $ref: '#/components/schemas/Paging'
        errors:
          type: array
          items:
            $ref: '#/components/schemas/EntityError'
        warningsCount:
          type: integer
          format: int32
        warnings:
          type: array
          items:
            $ref: '#/components/schemas/EntityError'
    EntityError:
      type: object
      properties:
        message:
          type: string
        entity:
          type: object
    TaskDetails:
      required:
      - assignees
      - id
      - type
      type: object
      properties:
        id:
          type: integer
          format: int32
        type:
          type: string
          enum:
          - RequestDescription
          - UpdateDescription
          - RequestTag
          - UpdateTag
          - RequestApproval
          - RequestTestCaseFailureResolution
          - RecognizerFeedbackApproval
          - Generic
        assignees:
          type: array
          items:
            $ref: '#/components/schemas/EntityReference'
        status:
          type: string
          enum:
          - Open
          - Closed
        closedBy:
          type: string
        closedAt:
          type: integer
          format: int64
        oldValue:
          type: string
        suggestion:
          type: string
        newValue:
          type: string
        testCaseResolutionStatusId:
          type: string
          format: uuid
        feedback:
          $ref: '#/components/schemas/RecognizerFeedback'
        recognizer:
          $ref: '#/components/schemas/TagLabelRecognizerMetadata'
    CreatePost:
      required:
      - message
      type: object
      properties:
        message:
          type: string
    CloseTask:
      required:
      - comment
      type: object
      properties:
        comment:
          type: string
        testCaseFQN:
          maxLength: 3072
          minLength: 1
          type: string
    EntityReference:
      required:
      - id
      - type
      type: object
      properties:
        id:
          type: string
          format: uuid
        type:
          type: string
        name:
          type: string
        fullyQualifiedName:
          type: string
        description:
          type: string
        displayName:
          type: string
        deleted:
          type: boolean
        inherited:
          type: boolean
        href:
          type: string
          format: uri
    FeedInfo:
      type: object
      properties:
        headerMessage:
          type: string
        fieldName:
          type: string
        entitySpecificInfo:
          type: object
    PostList:
      required:
      - data
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Post'
        paging:
          $ref: '#/components/schemas/Paging'
        errors:
          type: array
          items:
            $ref: '#/components/schemas/EntityError'
        warningsCount:
          type: integer
          format: int32
        warnings:
          type: array
          items:
            $ref: '#/components/schemas/EntityError'
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT