OpenMetadata Learning Resources API

Inline tutorials and expert content surfaced across OpenMetadata product surfaces.

OpenAPI Specification

openmetadata-learning-resources-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: OpenMetadata APIs Agent Executions Learning Resources 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: Learning Resources
  description: Inline tutorials and expert content surfaced across OpenMetadata product surfaces.
paths:
  /v1/learning/resources:
    get:
      tags:
      - Learning Resources
      summary: List learning resources
      description: Get a paginated list of learning resources with optional contextual filters.
      operationId: listLearningResources
      parameters:
      - name: fields
        in: query
        description: Fields requested in the returned resource
        schema:
          type: string
          example: owners,reviewers,tags,followers,contexts,categories
      - name: limit
        in: query
        description: Limit the number of results returned. (1 to 1000000, default = 10)
        schema:
          maximum: 1000000
          minimum: 0
          type: integer
          format: int32
          default: 10
      - name: before
        in: query
        description: Returns list of learning resources before this cursor
        schema:
          type: string
      - name: after
        in: query
        description: Returns list of learning resources after this cursor
        schema:
          type: string
      - name: include
        in: query
        description: Include all, deleted, or non-deleted entities
        schema:
          type: string
          default: non-deleted
          enum:
          - all
          - deleted
          - non-deleted
      - name: pageId
        in: query
        description: Filter resources to specific page identifiers (supports comma-separated values)
        schema:
          type: string
      - name: componentId
        in: query
        description: Filter by component identifier within a page
        schema:
          type: string
      - name: category
        in: query
        description: Filter by category (supports comma-separated values, e.g. DataGovernance,DataQuality)
        schema:
          type: string
          example: DataGovernance
      - name: difficulty
        in: query
        description: Filter by difficulty tier
        schema:
          type: string
          example: Intro
      - name: status
        in: query
        description: Filter by lifecycle status (supports comma-separated values, e.g. Active,Draft)
        schema:
          type: string
          example: Active
      - name: resourceType
        in: query
        description: Filter by resource type (supports comma-separated values, e.g. Video,Storylane,Article)
        schema:
          type: string
          example: Video
      - name: search
        in: query
        description: Search by name or display name (case-insensitive partial match)
        schema:
          type: string
      responses:
        '200':
          description: List of learning resources
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LearningResourceList'
    put:
      tags:
      - Learning Resources
      summary: Create or update a learning resource
      description: Create a new learning resource, or update an existing one if it already exists.
      operationId: createOrUpdateLearningResource
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateLearningResource'
      responses:
        '200':
          description: The updated resource
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LearningResource'
    post:
      tags:
      - Learning Resources
      summary: Create a learning resource
      description: Create a new learning resource entry.
      operationId: createLearningResource
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateLearningResource'
      responses:
        '200':
          description: The created resource
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LearningResource'
  /v1/learning/resources/{id}:
    get:
      tags:
      - Learning Resources
      summary: Get a learning resource by id
      description: Get a learning resource by `id`.
      operationId: getLearningResource
      parameters:
      - name: fields
        in: query
        description: Fields requested in the returned resource
        schema:
          type: string
      - name: include
        in: query
        description: Include all, deleted, or non-deleted entities
        schema:
          type: string
          default: non-deleted
          enum:
          - all
          - deleted
          - non-deleted
      - name: id
        in: path
        description: Id of the learning resource
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: The learning resource
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LearningResource'
        '404':
          description: Resource not found
    delete:
      tags:
      - Learning Resources
      summary: Delete a learning resource
      description: Delete a learning resource by `id`.
      operationId: deleteLearningResource
      parameters:
      - name: recursive
        in: query
        description: Recursively delete this entity and its children. (Default = false)
        schema:
          type: boolean
          default: false
      - name: hardDelete
        in: query
        description: Hard delete the entity. (Default = false)
        schema:
          type: boolean
          default: false
      - name: id
        in: path
        description: Id of the learning resource
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
        '404':
          description: Resource not found
    patch:
      tags:
      - Learning Resources
      summary: Update a learning resource
      description: Apply a JSONPatch to a learning resource.
      externalDocs:
        description: JsonPatch RFC
        url: https://tools.ietf.org/html/rfc6902
      operationId: patchLearningResource
      parameters:
      - name: id
        in: path
        description: Id of the learning resource
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        description: JsonPatch with array of operations
        content:
          application/json-patch+json:
            schema:
              $ref: '#/components/schemas/JsonPatch'
            example: '[{op:replace, path:/displayName, value: ''New name''}]'
      responses:
        default:
          description: default response
          content:
            application/json: {}
  /v1/learning/resources/name/{name}:
    get:
      tags:
      - Learning Resources
      summary: Get a learning resource by name
      description: Get a learning resource by fully qualified name.
      operationId: getLearningResourceByName
      parameters:
      - name: name
        in: path
        description: Fully qualified name of the learning resource
        required: true
        schema:
          type: string
      - name: fields
        in: query
        description: Fields requested in the returned resource
        schema:
          type: string
      - name: include
        in: query
        description: Include deleted resources
        schema:
          type: string
          default: non-deleted
          enum:
          - all
          - deleted
          - non-deleted
      responses:
        '200':
          description: The learning resource
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LearningResource'
        '404':
          description: Resource not found
  /v1/learning/resources/{id}/versions/{version}:
    get:
      tags:
      - Learning Resources
      summary: Get a learning resource version
      description: Get a specific version of the learning resource.
      operationId: getVersion
      parameters:
      - name: id
        in: path
        description: Id of the learning resource
        required: true
        schema:
          type: string
          format: uuid
      - name: version
        in: path
        description: Learning resource version
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Learning resource version details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LearningResource'
  /v1/learning/resources/history:
    get:
      tags:
      - Learning Resources
      summary: List all entity versions within a time range
      description: 'Get a paginated list of all entity versions within a given time range specified by `startTs` and `endTs` in milliseconds since epoch. '
      operationId: listAllEntityVersionsByTimestamp_32
      parameters:
      - name: startTs
        in: query
        description: Start timestamp in milliseconds since epoch
        required: true
        schema:
          type: integer
          format: int64
      - name: endTs
        in: query
        description: End timestamp in milliseconds since epoch
        required: true
        schema:
          type: integer
          format: int64
      - name: limit
        in: query
        description: Limit the number of entity returned (1 to 1000000, default = 10)
        schema:
          maximum: 500
          minimum: 1
          type: integer
          format: int32
          default: 10
      - name: before
        in: query
        description: Returns list of entity versions before this cursor
        schema:
          type: string
      - name: after
        in: query
        description: Returns list of entity versions after this cursor
        schema:
          type: string
      responses:
        '200':
          description: List of all versions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResultList'
  /v1/learning/resources/{id}/versions:
    get:
      tags:
      - Learning Resources
      summary: List learning resource versions
      description: Get a list of versions for the specified learning resource.
      operationId: listVersions
      parameters:
      - name: id
        in: path
        description: Id of the learning resource
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: List of versions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntityHistory'
  /v1/learning/resources/restore:
    put:
      tags:
      - Learning Resources
      summary: Restore a soft-deleted learning resource
      description: Restore a previously soft-deleted learning resource.
      operationId: restoreLearningResource
      requestBody:
        description: Id of the learning resource to restore
        content:
          application/json:
            schema:
              type: string
              format: uuid
      responses:
        '200':
          description: The restored resource
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LearningResource'
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'
    LearningResourceSource:
      required:
      - url
      type: object
      properties:
        provider:
          type: string
        url:
          type: string
          format: uri
        embedConfig:
          $ref: '#/components/schemas/EmbedConfig'
    EmbedConfig:
      type: object
    ChangeSummaryMap:
      type: object
    AccessDetails:
      required:
      - timestamp
      type: object
      properties:
        timestamp:
          type: integer
          format: int64
        accessedBy:
          $ref: '#/components/schemas/EntityReference'
        accessedByAProcess:
          type: string
    LearningResourceList:
      required:
      - data
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/LearningResource'
        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'
    FieldChange:
      type: object
      properties:
        name:
          type: string
        oldValue:
          type: object
        newValue:
          type: object
    CoverImage:
      type: object
      properties:
        url:
          type: string
        position:
          type: string
    LifeCycle:
      type: object
      properties:
        created:
          $ref: '#/components/schemas/AccessDetails'
        updated:
          $ref: '#/components/schemas/AccessDetails'
        accessed:
          $ref: '#/components/schemas/AccessDetails'
    EntityHistory:
      required:
      - entityType
      - versions
      type: object
      properties:
        entityType:
          type: string
        versions:
          type: array
          items:
            type: object
    AssetCertification:
      required:
      - appliedDate
      - expiryDate
      - tagLabel
      type: object
      properties:
        tagLabel:
          $ref: '#/components/schemas/TagLabel'
        appliedDate:
          type: integer
          format: int64
        expiryDate:
          type: integer
          format: int64
    ResultList:
      required:
      - data
      type: object
      properties:
        data:
          type: array
          items:
            type: object
        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'
    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
    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'
    CreateLearningResource:
      required:
      - categories
      - contexts
      - name
      - resourceType
      - source
      type: object
      properties:
        name:
          maxLength: 256
          minLength: 1
          pattern: ^((?!::).)*$
          type: string
        displayName:
          maxLength: 120
          minLength: 0
          type: string
        description:
          type: string
        resourceType:
          type: string
          enum:
          - Storylane
          - Video
          - Article
        categories:
          maxItems: 2147483647
          minItems: 1
          type: array
          items:
            type: string
            enum:
            - Discovery
            - Administration
            - DataGovernance
            - DataQuality
            - Observability
            - AI
        difficulty:
          type: string
          enum:
          - Intro
          - Intermediate
          - Advanced
        source:
          $ref: '#/components/schemas/LearningResourceSource'
        estimatedDuration:
          minimum: 0
          exclusiveMinimum: false
          type: integer
          format: int32
        completionThreshold:
          type: number
          format: double
        contexts:
          maxItems: 2147483647
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/LearningResourceContext'
        status:
          type: string
          enum:
          - Draft
          - Active
          - Deprecated
        owners:
          type: array
          items:
            $ref: '#/components/schemas/EntityReference'
        reviewers:
          type: array
          items:
            $ref: '#/components/schemas/EntityReference'
        tags:
          type: array
          items:
            $ref: '#/components/schemas/TagLabel'
        extension:
          type: object
        domains:
          type: array
          items:
            type: string
        dataProducts:
          type: array
          items:
            type: string
        lifeCycle:
          $ref: '#/components/schemas/LifeCycle'
    UsageStats:
      required:
      - count
      type: object
      properties:
        count:
          minimum: 0
          exclusiveMinimum: false
          type: integer
          format: int32
        percentileRank:
          type: number
          format: double
    LearningResource:
      required:
      - categories
      - contexts
      - id
      - name
      - resourceType
      - source
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          maxLength: 256
          minLength: 1
          pattern: ^((?!::).)*$
          type: string
        fullyQualifiedName:
          maxLength: 3072
          minLength: 1
          type: string
        displayName:
          maxLength: 120
          minLength: 0
          type: string
        description:
          type: string
        resourceType:
          type: string
          enum:
          - Storylane
          - Video
          - Article
        categories:
          maxItems: 2147483647
          minItems: 1
          type: array
          items:
            type: string
            enum:
            - Discovery
            - Administration
            - DataGovernance
            - DataQuality
            - Observability
            - AI
        difficulty:
          type: string
          enum:
          - Intro
          - Intermediate
          - Advanced
        source:
          $ref: '#/components/schemas/LearningResourceSource'
        estimatedDuration:
          minimum: 0
          exclusiveMinimum: false
          type: integer
          format: int32
        contexts:
          maxItems: 2147483647
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/LearningResourceContext'
        status:
          type: string
          enum:
          - Draft
          - Active
          - Deprecated
        tags:
          type: array
          items:
            $ref: '#/components/schemas/TagLabel'
        owners:
          type: array
          items:
            $ref: '#/components/schemas/EntityReference'
        reviewers:
          type: array
          items:
            $ref: '#/components/schemas/EntityReference'
        followers:
          type: array
          items:
            $ref: '#/components/schemas/EntityReference'
        changeDescription:
          $ref: '#/components/schemas/ChangeDescription'
        incrementalChangeDescription:
          $ref: '#/components/schemas/ChangeDescription'
        deleted:
          type: boolean
        version:
          type: number
          format: double
        updatedAt:
          type: integer
          format: int64
        updatedBy:
          type: string
        impersonatedBy:
          type: string
        href:
          type: string
          format: uri
        extension:
          type: object
        provider:
          type: string
          enum:
          - system
          - user
          - automation
        children:
          type: array
          items:
            $ref: '#/components/schemas/EntityReference'
        service:
          $ref: '#/components/schemas/EntityReference'
        style:
          $ref: '#/components/schemas/Style'
        experts:
          type: array
          items:
            $ref: '#/components/schemas/EntityReference'
        domains:
          type: array
          items:
            $ref: '#/components/schemas/EntityReference'
        dataProducts:
          type: array
          items:
            $ref: '#/components/schemas/EntityReference'
        dataContract:
          $ref: '#/components/schemas/EntityReference'
        usageSummary:
          $ref: '#/components/schemas/UsageDetails'
        entityStatus:
          type: string
          enum:
          - Draft
          - In Review
          - Approved
          - Archived
          - Deprecated
          - Rejected
          - Unprocessed
        votes:
          $ref: '#/components/schemas/Votes'
        lifeCycle:
          $ref: '#/components/schemas/LifeCycle'
        certification:
          $ref: '#/components/schemas/AssetCertification'
    Style:
      type: object
      properties:
        color:
          type: string
        iconURL:
          type: string
        coverImage:
          $ref: '#/components/schemas/CoverImage'
    Votes:
      type: object
      properties:
        upVotes:
          type: integer
          format: int32
        downVotes:
          type: integer
          format: int32
        upVoters:
          type: array
          items:
            $ref: '#/components/schemas/EntityReference'
        downVoters:
          type: array
          items:
            $ref: '#/components/schemas/EntityReference'
    TagLabel:
      required:
      - labelType
      - source
      - state
      - tagFQN
      type: object
      properties:
        tagFQN:
          type: string
        name:
          type: string
        displayName:
          type: string
        description:
          type: string
        style:
          $ref: '#/components/schemas/Style'
        source:
          type: string
          enum:
          - Classification
          - Glossary
        labelType:
          type: string
          enum:
          - Manual
          - Propagated
          - Automated
          - Derived
          - Generated
        state:
          type: string
          enum:
          - Suggested
          - Confirmed
        href:
          type: string
          format: uri
        reason:
          type: string
        appliedAt:
          type: string
          format: date-time
        appliedBy:
          type: string
        metadata:
          $ref: '#/components/schemas/TagLabelMetadata'
    PatternMatch:
      required:
      - name
      - score
      type: object
      properties:
        name:
          type: string
        regex:
          type: string
        score:
          type: number
          format: double
    TagLabelMetadata:
      type: object
      properties:
        recognizer:
          $ref: '#/components/schemas/TagLabelRecognizerMetadata'
        expiryDate:
          type: integer
          format: int64
    EntityError:
      type: object
      properties:
        message:
          type: string
        entity:
          type: object
    LearningResourceContext:
      required:
      - pageId
      type: object
      properties:
        pageId:
          type: string
        componentId:
          type: string
        priority:
          minimum: 0
          exclusiveMinimum: false
          type: integer
          format: int32
    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
    UsageDetails:
      required:
      - dailyStats
      - date
      type: object
      properties:
        dailyStats:
          $ref: '#/components/schemas/UsageStats'
        weeklyStats:
          $ref: '#/components/schemas/UsageStats'
        monthlyStats:
          $ref: '#/components/schemas/UsageStats'
        date:
          type: string
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT