OpenMetadata Tables API

`Table` organizes data in rows and columns and is defined in a `Database Schema`.

OpenAPI Specification

openmetadata-tables-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: OpenMetadata APIs Agent Executions Tables 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: Tables
  description: '`Table` organizes data in rows and columns and is defined in a `Database Schema`.'
paths:
  /v1/tables/{id}/customMetric:
    put:
      tags:
      - Tables
      summary: Add custom metrics
      description: Add custom metrics. For columns, add columnName.
      operationId: addCustomMetric
      parameters:
      - name: id
        in: path
        description: Id of the table
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateCustomMetric'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Table'
  /v1/tables/{id}/dataModel:
    put:
      tags:
      - Tables
      summary: Add data modeling information to a table
      description: Add data modeling (such as DBT model) information on how the table was created to the table.
      operationId: addDataModel
      parameters:
      - name: id
        in: path
        description: Id of the table
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DataModel'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Table'
  /v1/tables/{id}/tableProfile:
    put:
      tags:
      - Tables
      summary: Add table profile data
      description: Add table profile data to the table.
      operationId: addDataProfiler
      parameters:
      - name: id
        in: path
        description: Id of the table
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTableProfile'
      responses:
        '200':
          description: 'Successfully updated the Table '
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Table'
  /v1/tables/{id}/tableProfilerConfig:
    get:
      tags:
      - Tables
      summary: Get table profile config
      description: Get table profile config to the table.
      operationId: getDataProfilerConfig_2
      parameters:
      - name: id
        in: path
        description: Id of the table
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: 'Successfully updated the Table '
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Table'
    put:
      tags:
      - Tables
      summary: Add table profile config
      description: Add table profile config to the table.
      operationId: addDataProfilerConfig_2
      parameters:
      - name: id
        in: path
        description: Id of the table
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TableProfilerConfig'
      responses:
        '200':
          description: 'Successfully updated the Table '
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Table'
    delete:
      tags:
      - Tables
      summary: Delete table profiler config
      description: delete table profile config to the table.
      operationId: delete DataProfilerConfig_2
      parameters:
      - name: id
        in: path
        description: Id of the table
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Successfully deleted the Table profiler config
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Table'
  /v1/tables/{id}/followers:
    put:
      tags:
      - Tables
      summary: Add a follower
      description: Add a user identified by `userId` as followed of this table
      operationId: addFollowerToTable
      parameters:
      - name: id
        in: path
        description: Id of the table
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        description: Id of the user to be added as follower
        content:
          application/json:
            schema:
              type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChangeEvent'
        '404':
          description: Table for instance {id} is not found
  /v1/tables/{id}/joins:
    put:
      tags:
      - Tables
      summary: Add table join information
      description: Add information about other tables that this table is joined with. Join information can only be added for the last 30 days starting today.
      operationId: addTableJoinInfo
      parameters:
      - name: id
        in: path
        description: Id of the table
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TableJoins'
      responses:
        '200':
          description: Successfully updated the Table
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Table'
        '404':
          description: Table for instance {id} is not found
        '400':
          description: Date range can only include past 30 days starting today
  /v1/tables/{id}/pipelineObservability:
    get:
      tags:
      - Tables
      summary: Get pipeline observability data
      description: Get pipeline observability data for the table.
      operationId: getPipelineObservability
      parameters:
      - name: id
        in: path
        description: Id of the table
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: List of pipeline observability data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PipelineObservability'
    put:
      tags:
      - Tables
      summary: Add pipeline observability data
      description: Add pipeline observability data to the table.
      operationId: addPipelineObservability
      parameters:
      - name: id
        in: path
        description: Id of the table
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        description: Pipeline observability data
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PipelineObservability'
        required: true
      responses:
        '200':
          description: Successfully update the Table
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Table'
    delete:
      tags:
      - Tables
      summary: Delete pipeline observability data
      description: Delete pipeline observability data from the table.
      operationId: deletePipelineObservability
      parameters:
      - name: id
        in: path
        description: Id of the table
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Successfully update the Table
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Table'
  /v1/tables/{id}/sampleData:
    get:
      tags:
      - Tables
      summary: Get sample data
      description: Get sample data from the table.
      operationId: getSampleData
      parameters:
      - name: id
        in: path
        description: Id of the table
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Successfully update the Table
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Table'
    put:
      tags:
      - Tables
      summary: Add sample data
      description: Add sample data to the table.
      operationId: addSampleData
      parameters:
      - name: id
        in: path
        description: Id of the table
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TableData'
      responses:
        '200':
          description: Successfully update the Table
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Table'
    delete:
      tags:
      - Tables
      summary: Delete sample data
      description: Delete sample data from the table.
      operationId: deleteSampleData
      parameters:
      - name: id
        in: path
        description: Id of the table
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Successfully update the Table
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Table'
  /v1/tables/{id}/pipelineObservability/{pipelineFqn}:
    put:
      tags:
      - Tables
      summary: Add or update single pipeline observability data
      description: Add or update pipeline observability data for a specific pipeline on the table.
      operationId: addSinglePipelineObservability
      parameters:
      - name: id
        in: path
        description: Id of the table
        required: true
        schema:
          type: string
          format: uuid
      - name: pipelineFqn
        in: path
        description: Fully qualified name of the pipeline
        required: true
        schema:
          type: string
      requestBody:
        description: Pipeline observability data
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PipelineObservability'
        required: true
      responses:
        '200':
          description: Successfully update the Table
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Table'
    delete:
      tags:
      - Tables
      summary: Delete single pipeline observability data
      description: Delete pipeline observability data for a specific pipeline from the table.
      operationId: deleteSinglePipelineObservability
      parameters:
      - name: id
        in: path
        description: Id of the table
        required: true
        schema:
          type: string
          format: uuid
      - name: pipelineFqn
        in: path
        description: Fully qualified name of the pipeline
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Successfully update the Table
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Table'
  /v1/tables/bulk:
    put:
      tags:
      - Tables
      summary: Bulk create or update tables
      description: Create or update multiple tables in a single operation. Returns a BulkOperationResult with success/failure details for each table.
      operationId: bulkCreateOrUpdateTables
      parameters:
      - name: async
        in: query
        schema:
          type: boolean
          default: false
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/CreateTable'
      responses:
        '200':
          description: Bulk operation results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkOperationResult'
        '202':
          description: Bulk operation accepted for async processing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkOperationResult'
        '400':
          description: Bad request
  /v1/tables:
    get:
      tags:
      - Tables
      summary: List tables
      description: Get a list of tables, optionally filtered by `database` it belongs to. Use `fields` parameter to get only necessary fields. Use cursor-based pagination to limit the number entries in the list using `limit` and `before` or `after` query params.
      operationId: listTables
      parameters:
      - name: fields
        in: query
        description: Fields requested in the returned resource
        schema:
          type: string
          example: tableConstraints,tablePartition,usageSummary,owners,customMetrics,columns,sampleData,tags,followers,joins,schemaDefinition,dataModel,extension,testSuite,domains,dataProducts,lifeCycle,sourceHash
      - name: database
        in: query
        description: Filter tables by database fully qualified name
        schema:
          type: string
          example: snowflakeWestCoast.financeDB
      - name: databaseSchema
        in: query
        description: Filter tables by databaseSchema fully qualified name
        schema:
          type: string
          example: snowflakeWestCoast.financeDB.schema
      - name: databaseSchemaRegex
        in: query
        description: Filter tables by database schema regex pattern applied to databaseSchema.name by default. To apply the regex to the fully qualified name, set regexFilterByFqn=true. For better performance, use this in combination with the database query filter.
        schema:
          type: string
          example: finance_schema_.*
      - name: tableRegex
        in: query
        description: Filter tables by table regex pattern applied to the table name by default. To apply the regex to the table fully qualified name, set regexFilterByFqn=true. For better performance, use this in combination with the database and/or databaseSchema query filters.
        schema:
          type: string
          example: orders_.*
      - name: includeEmptyTestSuite
        in: query
        description: Include tables with an empty test suite (i.e. no test cases have been created for this table). Default to true
        schema:
          type: boolean
          example: true
          default: true
      - name: limit
        in: query
        description: 'Limit the number tables 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 tables before this cursor
        schema:
          type: string
      - name: after
        in: query
        description: Returns list of tables 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: regexFilterByFqn
        in: query
        description: When true, regex filters match against fullyQualifiedName instead of name. Default is false.
        schema:
          type: boolean
          example: false
          default: false
      - name: regexMode
        in: query
        description: Controls how regex filters are applied. 'include' returns matching entities, 'exclude' returns non-matching entities. Default is 'include'.
        schema:
          type: string
          default: include
          enum:
          - include
          - exclude
      responses:
        '200':
          description: List of tables
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TableList'
    put:
      tags:
      - Tables
      summary: Create or update a table
      description: Create a table, if it does not exist. If a table already exists, update the table.
      operationId: createOrUpdateTable
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTable'
      responses:
        '200':
          description: The table
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Table'
        '400':
          description: Bad request
    post:
      tags:
      - Tables
      summary: Create a table
      description: Create a new table under an existing `database`.
      operationId: createTable
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTable'
      responses:
        '200':
          description: table
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Table'
        '400':
          description: Bad request
  /v1/tables/{id}:
    get:
      tags:
      - Tables
      summary: Get a table by Id
      description: Get a table by `Id`
      operationId: getTableByID
      parameters:
      - name: id
        in: path
        description: table Id
        required: true
        schema:
          type: string
          format: uuid
      - name: fields
        in: query
        description: Fields requested in the returned resource
        schema:
          type: string
          example: tableConstraints,tablePartition,usageSummary,owners,customMetrics,columns,sampleData,tags,followers,joins,schemaDefinition,dataModel,extension,testSuite,domains,dataProducts,lifeCycle,sourceHash
      - 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: table
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Table'
        '404':
          description: Table for instance {id} is not found
    delete:
      tags:
      - Tables
      summary: Delete a table by Id
      description: Delete a table by `Id`.
      operationId: deleteTable
      parameters:
      - name: hardDelete
        in: query
        description: Hard delete the entity. (Default = `false`)
        schema:
          type: boolean
          default: false
      - name: recursive
        in: query
        description: Recursively delete this entity and it's children. (Default `false`)
        schema:
          type: boolean
          default: false
      - name: id
        in: path
        description: Id of the table
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
        '404':
          description: Table for instance {id} is not found
    patch:
      tags:
      - Tables
      summary: Update a table
      description: Update an existing table using JsonPatch.
      externalDocs:
        description: JsonPatch RFC
        url: https://tools.ietf.org/html/rfc6902
      operationId: patchTable_1
      parameters:
      - name: id
        in: path
        description: Id of the table
        required: true
        schema:
          type: string
          format: uuid
      - name: changeSource
        in: query
        description: Optional source of the change. If the change is made by a user use 'Manual'.
        schema:
          type: string
          enum:
          - Manual
          - Propagated
          - Automated
          - Derived
          - Ingested
          - Suggested
      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/tables/name/{fqn}:
    get:
      tags:
      - Tables
      summary: Get a table by fully qualified name
      description: Get a table by fully qualified table name.
      operationId: getTableByFQN
      parameters:
      - name: fqn
        in: path
        description: Fully qualified name of the table
        required: true
        schema:
          type: string
      - name: fields
        in: query
        description: Fields requested in the returned resource
        schema:
          type: string
          example: tableConstraints,tablePartition,usageSummary,owners,customMetrics,columns,sampleData,tags,followers,joins,schemaDefinition,dataModel,extension,testSuite,domains,dataProducts,lifeCycle,sourceHash
      - 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: table
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Table'
        '404':
          description: Table for instance {fqn} is not found
    delete:
      tags:
      - Tables
      summary: Delete a table by fully qualified name
      description: Delete a table by `fullyQualifiedName`.
      operationId: deleteTable_1
      parameters:
      - name: hardDelete
        in: query
        description: Hard delete the entity. (Default = `false`)
        schema:
          type: boolean
          default: false
      - name: recursive
        in: query
        description: Recursively delete this entity and it's children. (Default `false`)
        schema:
          type: boolean
          default: false
      - name: fqn
        in: path
        description: Name of the table
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
        '404':
          description: Table for instance {fqn} is not found
    patch:
      tags:
      - Tables
      summary: Update a table by name.
      description: Update an existing table using JsonPatch.
      externalDocs:
        description: JsonPatch RFC
        url: https://tools.ietf.org/html/rfc6902
      operationId: patchTable
      parameters:
      - name: fqn
        in: path
        description: Name of the table
        required: true
        schema:
          type: string
      - name: changeSource
        in: query
        description: Context of the change
        schema:
          type: string
          enum:
          - Manual
          - Propagated
          - Automated
          - Derived
          - Ingested
          - Suggested
      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/tables/async/{id}:
    delete:
      tags:
      - Tables
      summary: Asynchronously delete a table by Id
      description: Asynchronously delete a table by `Id`.
      operationId: deleteTableAsync
      parameters:
      - name: hardDelete
        in: query
        description: Hard delete the entity. (Default = `false`)
        schema:
          type: boolean
          default: false
      - name: recursive
        in: query
        description: Recursively delete this entity and it's children. (Default `false`)
        schema:
          type: boolean
          default: false
      - name: id
        in: path
        description: Id of the table
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
        '404':
          description: Table for instance {id} is not found
  /v1/tables/{id}/customMetric/{columnName}/{customMetricName}:
    delete:
      tags:
      - Tables
      summary: Delete custom metric from a column
      description: Delete a custom metric from a column.
      operationId: deleteCustomMetric
      parameters:
      - name: id
        in: path
        description: Id of the table
        required: true
        schema:
          type: string
          format: uuid
      - name: columnName
        in: path
        description: column of the table
        required: true
        schema:
          type: string
      - name: customMetricName
        in: path
        description: column Test Type
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Table'
  /v1/tables/{fqn}/{entityType}/{timestamp}/profile:
    delete:
      tags:
      - Tables
      summary: Delete table profile data
      description: Delete table profile data to the table.
      operationId: deleteDataProfiler
      parameters:
      - name: fqn
        in: path
        description: FQN of the table or column
        required: true
        schema:
          type: string
      - name: entityType
        in: path
        description: type of the entity table or column
        required: true
        schema:
          type: string
      - name: timestamp
        in: path
        description: Timestamp of the table profile
        required: true
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Successfully deleted the Table Profile
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TableProfile'
  /v1/tables/{id}/followers/{userId}:
    delete:
      tags:
      - Tables
      summary: Remove a follower
      description: Remove the user identified `userId` as a follower of the entity.
      operationId: deleteFollower_9
      parameters:
      - name: id
        in: path
        description: Id of the Entity
        required: true
        schema:
          type: string
          format: uuid
      - name: userId
        in: path
        description: Id of the user being removed as follower
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChangeEvent'
  /v1/tables/{id}/customMetric/{customMetricName}:
    delete:
      tags:
      - Tables
      summary: Delete custom metric from a table
      description: Delete a custom metric from a table.
      operationId: deleteCustomMetric_1
      parameters:
      - name: id
        in: path
        description: Id of the table
        required: true
        schema:
          type: string
          format: uuid
      - name: customMetricName
        in: path
        description: column Test Type
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Table'
  /v1/tables/name/{name}/export:
    get:
      tags:
      - Tables
      summary: Export table in CSV format
      operationId: exportTable
      parameters:
      - name: name
        in: path
        description: Name of the table
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Exported csv with columns from the table
          content:
            application/json:
              schema:
                type: string
  /v1/tables/name/{name}/exportAsync:
    get:
      tags:
      - Tables
      summary: Export table in CSV format
      operationId: exportTable_1
      parameters:
      - name: name
        in: path
        description: Name of the table
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Exported csv with columns from the table
          content:
            application/json:
              schema:
                type: string
  /v1/tables/{fqn}/tableProfile/latest:
    get:
      tags:
      - Tables
      summary: Get the latest table profile
      description: 'Get the latest table and column profile '
      operationId: Get the latest table and column profile
      parameters:
      - name: fqn
        in: path
        description: FQN of the table or column
        required: true
        schema:
          type: string
      - name: includeColumnProfile
        in: query
        description: Include column profile
        schema:
          type: boolean
          default: true
      responses:
        '200':
          description: Table with profile and column profile
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Table'
  /v1/tables/name/{fqn}/pipelineObservability:
    get:
      tags:
      - Tables
      summary: Get pipeline observability data by table FQN
      description: Get pipeline observability data for the table using fully qualified name.
      operationId: getPipelineObservabilityByFQN
      parameters:
      - name: fqn
        in: path
        description: Fully qualified name of the table
        required: true
        schema:
          type: string
      responses:
        '200':
          description: List of pipeline observability data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PipelineObservability'
  /v1/tables/{id}/columns:
    get:
      tags:
      - Tables
      summary: Get table columns with pagination
      description: Get a paginated list of table columns. This endpoint provides server-side pagination to handle tables with large numbers of columns efficiently.
      operationId: getTableColumns
      parameters:
      - name: id
        in: path
        description: Id of the table
        required: true
        schema:
          type: string
          format: uuid
      - name: limit
        in: query
        description: Limit the number of columns returned (1 to 1000, default = 50)
        schema:
          maximum: 1000
          minimum: 1
          type: integer
          format: int32
          default: 50
      - name: offset
        in: query
        description: Offset for pagination (

# --- truncated at 32 KB (93 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/openmetadata/refs/heads/main/openapi/openmetadata-tables-api-openapi.yml