OpenMetadata Tables API
`Table` organizes data in rows and columns and is defined in a `Database Schema`.
`Table` organizes data in rows and columns and is defined in a `Database Schema`.
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