OpenMetadata Learning Resources API
Inline tutorials and expert content surfaced across OpenMetadata product surfaces.
Inline tutorials and expert content surfaced across OpenMetadata product surfaces.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/openmetadata-learning-resources-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
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:
EntityHistory:
required:
- entityType
- versions
type: object
properties:
entityType:
type: string
versions:
type: array
items:
type: object
AccessDetails:
required:
- timestamp
type: object
properties:
timestamp:
type: integer
format: int64
accessedBy:
$ref: '#/components/schemas/EntityReference'
accessedByAProcess:
type: string
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
JsonPatch:
type: object
EmbedConfig:
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
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
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'
PatternMatch:
required:
- name
- score
type: object
properties:
name:
type: string
regex:
type: string
score:
type: number
format: double
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'
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'
LearningResourceContext:
required:
- pageId
type: object
properties:
pageId:
type: string
componentId:
type: string
priority:
minimum: 0
type: integer
format: int32
UsageStats:
required:
- count
type: object
properties:
count:
minimum: 0
type: integer
format: int32
percentileRank:
type: number
format: double
LearningResourceSource:
required:
- url
type: object
properties:
provider:
type: string
url:
type: string
format: uri
embedConfig:
$ref: '#/components/schemas/EmbedConfig'
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'
LifeCycle:
type: object
properties:
created:
$ref: '#/components/schemas/AccessDetails'
updated:
$ref: '#/components/schemas/AccessDetails'
accessed:
$ref: '#/components/schemas/AccessDetails'
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
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
FieldChange:
type: object
properties:
name:
type: string
oldValue:
type: object
newValue:
type: object
ChangeSummaryMap:
type: object
EntityError:
type: object
properties:
message:
type: string
entity:
type: object
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'
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
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'
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'
CoverImage:
type: object
properties:
url:
type: string
position:
type: string
TagLabelMetadata:
type: object
properties:
recognizer:
$ref: '#/components/schemas/TagLabelRecognizerMetadata'
expiryDate:
type: integer
format: int64
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'
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT