OpenMetadata Metadata API

These APIs are for managing custom property definitions in OpenMetadata. Use these APIs to create custom properties with predefined data types (String, Integer, Date, etc.) that extend entity metadata. Note: This does not support creating new custom data types - only custom properties using existing OpenMetadata data types.

OpenAPI Specification

openmetadata-metadata-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: OpenMetadata APIs Agent Executions Metadata 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: Metadata
  description: 'These APIs are for managing custom property definitions in OpenMetadata. Use these APIs to create custom properties with predefined data types (String, Integer, Date, etc.) that extend entity metadata. Note: This does not support creating new custom data types - only custom properties using existing OpenMetadata data types.'
paths:
  /v1/metadata/types/{id}:
    get:
      tags:
      - Metadata
      summary: Get a type
      description: Get a type by `id`.
      operationId: getTypeByID
      parameters:
      - name: id
        in: path
        description: Id of the type
        required: true
        schema:
          type: string
          format: uuid
      - name: fields
        in: query
        description: Fields requested in the returned resource
        schema:
          type: string
          example: customProperties
      - name: include
        in: query
        description: Include all, deleted, or non-deleted entities.
        schema:
          type: string
          default: non-deleted
          enum:
          - all
          - deleted
          - non-deleted
      - name: includeRelations
        in: query
        description: 'Per-relation include control. Format: field:value,field2:value2. Example: owners:non-deleted,followers:all. Valid values: all, deleted, non-deleted. If not specified for a field, uses the entity''s include value.'
        schema:
          type: string
          example: owners:non-deleted,followers:all
      responses:
        '200':
          description: The type
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Type'
        '404':
          description: Type for instance {id} is not found
    put:
      tags:
      - Metadata
      summary: Add or update a Property to an entity
      description: Add or update a property to an entity type. Properties can only be added to entity type and not property type.
      operationId: addProperty
      parameters:
      - name: id
        in: path
        description: Id of the type
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomProperty'
      responses:
        '200':
          description: OK
        '404':
          description: type for instance {id} is not found
    delete:
      tags:
      - Metadata
      summary: Delete a type by id
      description: Delete a type by `id`.
      operationId: deleteType
      parameters:
      - name: id
        in: path
        description: Id of the type
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
        '404':
          description: type for instance {id} is not found
    patch:
      tags:
      - Metadata
      summary: Update a type
      description: Update an existing type using JsonPatch.
      externalDocs:
        description: JsonPatch RFC
        url: https://tools.ietf.org/html/rfc6902
      operationId: patchType_1
      parameters:
      - name: id
        in: path
        description: Id of the type
        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:remove, path:/a},{op:add, path: /b, value: val}]'
      responses:
        default:
          description: default response
          content:
            application/json: {}
  /v1/metadata/types:
    get:
      tags:
      - Metadata
      summary: List types
      description: Get a list of types. Use cursor-based pagination to limit the number entries in the list using `limit` and `before` or `after` query params.
      operationId: listTypes
      parameters:
      - name: category
        in: query
        description: Filter types by metadata type category.
        schema:
          type: string
          example: Property, Entity
      - name: limit
        in: query
        description: Limit the number types 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 types before this cursor
        schema:
          type: string
      - name: after
        in: query
        description: Returns list of types after this cursor
        schema:
          type: string
      responses:
        '200':
          description: List of types
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TypeList'
    put:
      tags:
      - Metadata
      summary: Create or update a type
      description: Create a new type, if it does not exist or update an existing type.
      operationId: createOrUpdate
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateType'
      responses:
        '200':
          description: The type
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Type'
        '400':
          description: Bad request
    post:
      tags:
      - Metadata
      summary: Create a custom property definition
      description: 'Create a new custom property definition that can be applied to entities. This creates a property template using existing OpenMetadata data types (String, Integer, Date, Enum, etc.). The created property can then be used to extend metadata for data assets like tables, dashboards, and pipelines. Note: This does not create new data types - only custom property definitions.'
      operationId: createType
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateType'
      responses:
        '200':
          description: The custom property definition
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Type'
        '400':
          description: Bad request
  /v1/metadata/types/name/{name}:
    get:
      tags:
      - Metadata
      summary: Get a type by name
      description: Get a type by name.
      operationId: getTypeByName
      parameters:
      - name: name
        in: path
        description: Name of the type
        required: true
        schema:
          type: string
      - name: fields
        in: query
        description: Fields requested in the returned resource
        schema:
          type: string
          example: customProperties
      - name: include
        in: query
        description: Include all, deleted, or non-deleted entities.
        schema:
          type: string
          default: non-deleted
          enum:
          - all
          - deleted
          - non-deleted
      responses:
        '200':
          description: The type
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Type'
        '404':
          description: Type for instance {name} is not found
    delete:
      tags:
      - Metadata
      summary: Delete a type by name
      description: Delete a type by `name`.
      operationId: deleteTypeByName
      parameters:
      - name: name
        in: path
        description: Name of the type
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
        '404':
          description: type for instance {name} is not found
  /v1/metadata/types/async/{id}:
    delete:
      tags:
      - Metadata
      summary: Asynchronously delete a type by id
      description: Asynchronously delete a type by `id`.
      operationId: deleteTypeAsync
      parameters:
      - name: id
        in: path
        description: Id of the type
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
        '404':
          description: type for instance {id} is not found
  /v1/metadata/types/customProperties:
    get:
      tags:
      - Metadata
      operationId: getAllCustomPropertiesByEntityType
      responses:
        default:
          description: default response
          content:
            application/json: {}
  /v1/metadata/types/name/{entityType}/customProperties:
    get:
      tags:
      - Metadata
      summary: Get custom properties for an entity type
      description: Get custom properties defined for a specific entity type by name.
      operationId: getCustomPropertiesByEntityType
      parameters:
      - name: entityType
        in: path
        description: Name of the entity type
        required: true
        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
      responses:
        '200':
          description: List of custom properties for the entity type
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomProperty'
        '404':
          description: Entity type {entityType} is not found
  /v1/metadata/types/fields/{entityType}:
    get:
      tags:
      - Metadata
      operationId: getEntityTypeFields
      parameters:
      - name: entityType
        in: path
        required: true
        schema:
          type: string
      - name: include
        in: query
        schema:
          type: string
          default: non-deleted
          enum:
          - all
          - deleted
          - non-deleted
      responses:
        default:
          description: default response
          content:
            application/json: {}
  /v1/metadata/types/{id}/versions/{version}:
    get:
      tags:
      - Metadata
      summary: Get a version of the types
      description: Get a version of the type by given `id`
      operationId: getSpecificTypeVersion
      parameters:
      - name: id
        in: path
        description: Id of the type
        required: true
        schema:
          type: string
          format: uuid
      - name: version
        in: path
        description: type version number in the form `major`.`minor`
        required: true
        schema:
          type: string
          example: 0.1 or 1.1
      responses:
        '200':
          description: types
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Type'
        '404':
          description: Type for instance {id} and version {version} is not found
  /v1/metadata/types/history:
    get:
      tags:
      - Metadata
      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_62
      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/metadata/types/{id}/versions:
    get:
      tags:
      - Metadata
      summary: List type versions
      description: Get a list of all the versions of a type identified by `id`
      operationId: listAllTypeVersion
      parameters:
      - name: id
        in: path
        description: Id of the type
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: List of type versions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntityHistory'
  /v1/metadata/types/name/{fqn}:
    patch:
      tags:
      - Metadata
      summary: Update a type using name.
      description: Update an existing type using JsonPatch.
      externalDocs:
        description: JsonPatch RFC
        url: https://tools.ietf.org/html/rfc6902
      operationId: patchType
      parameters:
      - name: fqn
        in: path
        description: Name of the type
        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: {}
components:
  schemas:
    Type:
      required:
      - description
      - name
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          pattern: (?U)^[\w]+$
          type: string
        fullyQualifiedName:
          maxLength: 3072
          minLength: 1
          type: string
        displayName:
          type: string
        description:
          type: string
        category:
          type: string
          enum:
          - field
          - entity
        nameSpace:
          type: string
        schema:
          type: string
        customProperties:
          type: array
          items:
            $ref: '#/components/schemas/CustomProperty'
        version:
          type: number
          format: double
        updatedAt:
          type: integer
          format: int64
        updatedBy:
          type: string
        impersonatedBy:
          type: string
        href:
          type: string
          format: uri
        changeDescription:
          $ref: '#/components/schemas/ChangeDescription'
        incrementalChangeDescription:
          $ref: '#/components/schemas/ChangeDescription'
        domains:
          type: array
          items:
            $ref: '#/components/schemas/EntityReference'
        dataProducts:
          type: array
          items:
            $ref: '#/components/schemas/EntityReference'
        owners:
          type: array
          items:
            $ref: '#/components/schemas/EntityReference'
        provider:
          type: string
          enum:
          - system
          - user
          - automation
        extension:
          type: object
        children:
          type: array
          items:
            $ref: '#/components/schemas/EntityReference'
        service:
          $ref: '#/components/schemas/EntityReference'
        style:
          $ref: '#/components/schemas/Style'
        tags:
          type: array
          items:
            $ref: '#/components/schemas/TagLabel'
        followers:
          type: array
          items:
            $ref: '#/components/schemas/EntityReference'
        experts:
          type: array
          items:
            $ref: '#/components/schemas/EntityReference'
        reviewers:
          type: array
          items:
            $ref: '#/components/schemas/EntityReference'
        deleted:
          type: boolean
        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'
    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'
    CustomPropertyConfig:
      type: object
      properties:
        config:
          type: object
    ChangeSummaryMap:
      type: object
    AccessDetails:
      required:
      - timestamp
      type: object
      properties:
        timestamp:
          type: integer
          format: int64
        accessedBy:
          $ref: '#/components/schemas/EntityReference'
        accessedByAProcess:
          type: string
    FieldChange:
      type: object
      properties:
        name:
          type: string
        oldValue:
          type: object
        newValue:
          type: object
    TypeList:
      required:
      - data
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Type'
        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'
    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'
    CustomProperty:
      required:
      - description
      - name
      - propertyType
      type: object
      properties:
        name:
          maxLength: 256
          minLength: 1
          pattern: ^[A-Za-z0-9][A-Za-z0-9 _\-.,;%#@!'(){}\[\]|=+?`]*$
          type: string
        displayName:
          type: string
        description:
          type: string
        propertyType:
          $ref: '#/components/schemas/EntityReference'
        customPropertyConfig:
          $ref: '#/components/schemas/CustomPropertyConfig'
    UsageStats:
      required:
      - count
      type: object
      properties:
        count:
          minimum: 0
          exclusiveMinimum: false
          type: integer
          format: int32
        percentileRank:
          type: number
          format: double
    CreateType:
      required:
      - description
      - name
      - nameSpace
      - schema
      type: object
      properties:
        name:
          pattern: (?U)^[\w]+$
          type: string
        displayName:
          type: string
        description:
          type: string
        nameSpace:
          type: string
        category:
          type: string
          enum:
          - field
          - entity
        schema:
          type: string
        domains:
          type: array
          items:
            type: string
        owners:
          type: array
          items:
            $ref: '#/components/schemas/EntityReference'
        extension:
          type: object
        tags:
          type: array
          items:
            $ref: '#/components/schemas/TagLabel'
        reviewers:
          type: array
          items:
            $ref: '#/components/schemas/EntityReference'
        dataProducts:
          type: array
          items:
            type: string
        lifeCycle:
          $ref: '#/components/schemas/LifeCycle'
    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
    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