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