OpenMetadata Learning Resources API
Inline tutorials and expert content surfaced across OpenMetadata product surfaces.
Inline tutorials and expert content surfaced across OpenMetadata product surfaces.
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