OpenMetadata Teams API
A `Team` is a group of zero or more users and/or other teams. Teams can own zero or more data assets. Hierarchical teams are supported `Organization` -> `BusinessUnit` -> `Division` -> `Department`.
A `Team` is a group of zero or more users and/or other teams. Teams can own zero or more data assets. Hierarchical teams are supported `Organization` -> `BusinessUnit` -> `Division` -> `Department`.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/openmetadata-teams-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: OpenMetadata APIs Agent Executions Teams 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: Teams
description: A `Team` is a group of zero or more users and/or other teams. Teams can own zero or more data assets. Hierarchical teams are supported `Organization` -> `BusinessUnit` -> `Division` -> `Department`.
paths:
/v1/teams/{name}/assets/add:
put:
tags:
- Teams
summary: Bulk Add Assets
description: Bulk Add Assets
operationId: bulkAddAssets_2
parameters:
- name: name
in: path
description: Name of the Team
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/BulkAssets'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/BulkOperationResult'
'404':
description: model for instance {id} is not found
/v1/teams/{name}/assets/remove:
put:
tags:
- Teams
summary: Bulk Remove Assets
description: Bulk Remove Assets
operationId: bulkRemoveAssets_2
parameters:
- name: name
in: path
description: Name of the Team
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/BulkAssets'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ChangeEvent'
'404':
description: model for instance {id} is not found
/v1/teams:
get:
tags:
- Teams
summary: List teams
description: Get a list of teams. 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: listTeams
parameters:
- name: fields
in: query
description: Fields requested in the returned resource
schema:
type: string
example: owners,profile,users,owns,defaultRoles,defaultPersona,parents,children,policies,userCount,childrenCount,domains
- name: limit
in: query
description: Limit the number of teams 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 teams before this cursor
schema:
type: string
- name: after
in: query
description: Returns list of teams after this cursor
schema:
type: string
- name: parentTeam
in: query
description: Filter the results by parent team name
schema:
type: string
- name: isJoinable
in: query
description: Filter the results by whether the team can be joined by any user or not
schema:
type: boolean
- 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 teams
content:
application/json:
schema:
$ref: '#/components/schemas/TeamList'
put:
tags:
- Teams
summary: Update team
description: Create or Update a team.
operationId: createOrUpdateTeam
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateTeam'
responses:
'200':
description: 'The team '
content:
application/json:
schema:
$ref: '#/components/schemas/Team'
'400':
description: Bad request
post:
tags:
- Teams
summary: Create a team
description: Create a new team.
operationId: createTeam
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateTeam'
responses:
'200':
description: The team
content:
application/json:
schema:
$ref: '#/components/schemas/Team'
'400':
description: Bad request
/v1/teams/name/{name}:
get:
tags:
- Teams
summary: Get a team by name
description: Get a team by `name`.
operationId: getTeamByFQN
parameters:
- name: name
in: path
description: Name of the team
required: true
schema:
type: string
- name: fields
in: query
description: Fields requested in the returned resource
schema:
type: string
example: owners,profile,users,owns,defaultRoles,defaultPersona,parents,children,policies,userCount,childrenCount,domains
- 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 team
content:
application/json:
schema:
$ref: '#/components/schemas/Team'
'404':
description: Team for instance {name} is not found
delete:
tags:
- Teams
summary: Delete a team by name
description: Delete a team by given `name`.
operationId: deleteTeamByName
parameters:
- name: hardDelete
in: query
description: Hard delete the entity. (Default = `false`)
schema:
type: boolean
default: false
- name: name
in: path
description: Name of the team
required: true
schema:
type: string
responses:
'200':
description: OK
'404':
description: Team for instance {name} is not found
/v1/teams/{id}:
get:
tags:
- Teams
summary: Get a team by id
description: Get a team by `id`.
operationId: getTeamByID
parameters:
- name: id
in: path
description: Id of the team
required: true
schema:
type: string
format: uuid
- name: fields
in: query
description: Fields requested in the returned resource
schema:
type: string
example: owners,profile,users,owns,defaultRoles,defaultPersona,parents,children,policies,userCount,childrenCount,domains
- 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 team
content:
application/json:
schema:
$ref: '#/components/schemas/Team'
'404':
description: Team for instance {id} is not found
delete:
tags:
- Teams
summary: Delete a team by id
description: Delete a team by given `id`.
operationId: deleteTeam
parameters:
- name: recursive
in: query
description: Recursively delete this team and it's 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 team
required: true
schema:
type: string
format: uuid
responses:
'200':
description: OK
'404':
description: Team for instance {id} is not found
patch:
tags:
- Teams
summary: Update a team
description: Update an existing team with JsonPatch.
externalDocs:
description: JsonPatch RFC
url: https://tools.ietf.org/html/rfc6902
operationId: patchTeam_1
parameters:
- name: id
in: path
description: Id of the team
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/teams/async/{id}:
delete:
tags:
- Teams
summary: Asynchronously delete a team by id
description: Asynchronously delete a team by given `id`.
operationId: deleteTeamAsync
parameters:
- name: recursive
in: query
description: Recursively delete this team and it's 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 team
required: true
schema:
type: string
format: uuid
responses:
'200':
description: OK
'404':
description: Team for instance {id} is not found
/v1/teams/{teamId}/users/{userId}:
delete:
tags:
- Teams
summary: Remove a user from a team
description: Remove the user identified by `userId` from the team identified by `teamId`.
operationId: deleteTeamUser
parameters:
- name: teamId
in: path
description: Id of the team
required: true
schema:
type: string
format: uuid
- name: userId
in: path
description: Id of the user being removed
required: true
schema:
type: string
responses:
'200':
description: User removed from team
content:
application/json:
schema:
$ref: '#/components/schemas/ChangeEvent'
'404':
description: Team or user not found
/v1/teams/name/{name}/export:
get:
tags:
- Teams
summary: Export teams in CSV format
operationId: exportTeams
parameters:
- name: name
in: path
required: true
schema:
type: string
responses:
'200':
description: Exported csv with teams information
content:
application/json:
schema:
type: string
/v1/teams/name/{name}/exportAsync:
get:
tags:
- Teams
summary: Export teams in CSV format
operationId: exportTeams_1
parameters:
- name: name
in: path
required: true
schema:
type: string
responses:
'200':
description: Exported csv with teams information
content:
application/json:
schema:
$ref: '#/components/schemas/CSVExportResponse'
/v1/teams/assets/counts:
get:
tags:
- Teams
summary: Get all teams with their asset counts
description: Get a map of team fully qualified names to their asset counts using search aggregation.
operationId: getAllTeamsWithAssetsCount
responses:
'200':
description: Map of team FQN to asset count
content:
application/json: {}
/v1/teams/documentation/csv:
get:
tags:
- Teams
summary: Get CSV documentation for team import/export
operationId: getCsvDocumentation_1
responses:
default:
description: default response
content:
application/json:
schema:
type: string
/v1/teams/{id}/versions/{version}:
get:
tags:
- Teams
summary: Get a version of the team
description: Get a version of the team by given `id`
operationId: getSpecificTeamVersion
parameters:
- name: id
in: path
description: Id of the team
required: true
schema:
type: string
format: uuid
- name: version
in: path
description: Team version number in the form `major`.`minor`
required: true
schema:
type: string
example: 0.1 or 1.1
responses:
'200':
description: team
content:
application/json:
schema:
$ref: '#/components/schemas/Team'
'404':
description: Team for instance {id} and version {version} is not found
/v1/teams/name/{name}/import:
put:
tags:
- Teams
summary: Import from CSV to create, and update teams.
operationId: importTeams
parameters:
- name: name
in: path
required: true
schema:
type: string
- name: dryRun
in: query
description: Dry-run when true is used for validating the CSV without really importing it. (default=true)
schema:
type: boolean
default: true
requestBody:
content:
text/plain:
schema:
type: string
responses:
'200':
description: Import result
content:
application/json:
schema:
$ref: '#/components/schemas/CsvImportResult'
/v1/teams/name/{name}/importAsync:
put:
tags:
- Teams
summary: Import from CSV to create, and update teams asynchronously.
operationId: importTeamsAsync
parameters:
- name: name
in: path
required: true
schema:
type: string
- name: dryRun
in: query
description: Dry-run when true is used for validating the CSV without really importing it. (default=true)
schema:
type: boolean
default: true
requestBody:
content:
text/plain:
schema:
type: string
responses:
'200':
description: Import initiated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/CsvImportResult'
/v1/teams/history:
get:
tags:
- Teams
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_59
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/teams/hierarchy:
get:
tags:
- Teams
summary: List teams with hierarchy
description: Get a list of teams with hierarchy.
operationId: listTeamsHierarchy
parameters:
- name: limit
in: query
description: Limit the number of teams returned. (1 to 1000000, default = 10)
schema:
maximum: 1000000
minimum: 1000
type: integer
format: int32
default: 10000
- name: isJoinable
in: query
description: Filter the results by whether the team can be joined by any user or not
schema:
type: boolean
responses:
'200':
description: List of teams with hierarchy
content:
application/json:
schema:
$ref: '#/components/schemas/TeamList'
/v1/teams/{id}/assets:
get:
tags:
- Teams
summary: List assets owned by this team
description: Get a paginated list of assets that are owned by this team. Use limit and offset query params for pagination.
operationId: listTeamAssets
parameters:
- name: id
in: path
description: Id of the team
required: true
schema:
type: string
format: uuid
- name: limit
in: query
description: Limit the number of assets returned. (1 to 1000, default = 100)
schema:
maximum: 1000
minimum: 1
type: integer
format: int32
default: 10
- name: offset
in: query
description: Offset for pagination (default = 0)
schema:
minimum: 0
type: integer
format: int32
default: 0
responses:
'200':
description: List of assets
content:
application/json:
schema:
$ref: '#/components/schemas/EntityReference'
'404':
description: Team for instance {id} is not found
/v1/teams/name/{fqn}/assets:
get:
tags:
- Teams
summary: List assets owned by this team by fully qualified name
description: Get a paginated list of assets that are owned by this team. Use limit and offset query params for pagination.
operationId: listTeamAssetsByName
parameters:
- name: fqn
in: path
description: Fully qualified name of the team
required: true
schema:
type: string
- name: limit
in: query
description: Limit the number of assets returned. (1 to 1000, default = 100)
schema:
maximum: 1000
minimum: 1
type: integer
format: int32
default: 10
- name: offset
in: query
description: Offset for pagination (default = 0)
schema:
minimum: 0
type: integer
format: int32
default: 0
responses:
'200':
description: List of assets
content:
application/json:
schema:
$ref: '#/components/schemas/EntityReference'
'404':
description: Team for instance {fqn} is not found
/v1/teams/{id}/versions:
get:
tags:
- Teams
summary: List team versions
description: Get a list of all the versions of a team identified by `id`
operationId: listAllTeamVersion
parameters:
- name: id
in: path
description: Id of the team
required: true
schema:
type: string
format: uuid
responses:
'200':
description: List of team versions
content:
application/json:
schema:
$ref: '#/components/schemas/EntityHistory'
/v1/teams/name/{fqn}:
patch:
tags:
- Teams
summary: Update a team using name.
description: Update an existing team with JsonPatch.
externalDocs:
description: JsonPatch RFC
url: https://tools.ietf.org/html/rfc6902
operationId: patchTeam
parameters:
- name: fqn
in: path
description: Name of the team
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: {}
/v1/teams/restore:
put:
tags:
- Teams
summary: Restore a soft deleted team
description: Restore a soft deleted team.
operationId: restore_46
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RestoreEntity'
responses:
'200':
description: 'Successfully restored the Team '
content:
application/json:
schema:
$ref: '#/components/schemas/Team'
/v1/teams/{teamId}/users:
put:
tags:
- Teams
summary: Update team users
description: Update the list of users for a team. Replaces existing users with the provided list.
operationId: updateTeamUsers
parameters:
- name: teamId
in: path
required: true
schema:
type: string
format: uuid
requestBody:
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/EntityReference'
responses:
'200':
description: Updated team users
content:
application/json: {}
'404':
description: Team not found
components:
schemas:
EntityHistory:
required:
- entityType
- versions
type: object
properties:
entityType:
type: string
versions:
type: array
items:
type: object
AccessDetails:
required:
- timestamp
type: object
properties:
timestamp:
type: integer
format: int64
accessedBy:
$ref: '#/components/schemas/EntityReference'
accessedByAProcess:
type: string
SubscriptionConfig:
type: object
properties:
slack:
$ref: '#/components/schemas/Webhook'
msTeams:
$ref: '#/components/schemas/Webhook'
gChat:
$ref: '#/components/schemas/Webhook'
generic:
$ref: '#/components/schemas/Webhook'
UsageDetails:
required:
- dailyStats
- date
type: object
properties:
dailyStats:
$ref: '#/components/schemas/UsageStats'
weeklyStats:
$ref: '#/components/schemas/UsageStats'
monthlyStats:
$ref: '#/components/schemas/UsageStats'
date:
type: string
JsonPatch:
type: object
Profile:
type: object
properties:
images:
$ref: '#/components/schemas/ImageList'
subscription:
$ref: '#/components/schemas/SubscriptionConfig'
CSVExportResponse:
type: object
properties:
jobId:
type: string
message:
type: string
Team:
required:
- id
- name
type: object
properties:
id:
type: string
format: uuid
teamType:
type: string
enum:
- Group
- Department
- Division
- BusinessUnit
- Organization
name:
maxLength: 256
minLength: 1
pattern: ^((?!::).)*$
type: string
email:
maxLength: 127
minLength: 6
pattern: ^[\S.!#$%&’*+/=?^_`{|}~-]+@\S+\.\S+$
type: string
fullyQualifiedName:
maxLength: 3072
minLength: 1
type: string
displayName:
type: string
externalId:
type: string
description:
type: string
version:
type: number
format: double
updatedAt:
type: integer
format: int64
updatedBy:
type: string
impersonatedBy:
type: string
href:
type: string
format: uri
profile:
$ref: '#/components/schemas/Profile'
parents:
type: array
items:
$ref: '#/components/schemas/EntityReference'
children:
type: array
items:
$ref: '#/components/schemas/EntityReference'
users:
type: array
items:
$ref: '#/components/schemas/EntityReference'
childrenCount:
type: integer
format: int32
userCount:
type: integer
format: int32
owns:
type: array
items:
$ref: '#/components/schemas/EntityReference'
owners:
type: array
items:
$ref: '#/components/schemas/EntityReference'
isJoinable:
type: boolean
changeDescription:
$ref: '#/components/schemas/ChangeDescription'
incrementalChangeDescription:
$ref: '#/components/schemas/ChangeDescription'
deleted:
type: boolean
defaultRoles:
type: array
items:
$ref: '#/components/schemas/EntityReference'
inheritedRoles:
type: array
items:
$ref: '#/components/schemas/EntityReference'
defaultPersona:
$ref: '#/components/schemas/EntityReference'
policies:
type: array
items:
$ref: '#/components/schemas/EntityReference'
domains:
type: array
items:
$ref: '#/components/schemas/EntityReference'
provider:
type: string
enum:
- system
- user
- automation
extension:
type: object
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'
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'
TeamList:
required:
- data
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Team'
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'
AssetCertification:
required:
- appliedDate
- expiryDate
- tagLabel
type: object
properties:
tagLabel:
$ref: '#/components/schemas/TagLabel'
appliedDate:
type: integer
format: int64
expiryDate:
type: integer
format: int64
CsvImportResult:
type: object
properties:
dryRun:
type: boolean
status:
type: string
enum:
- success
- failure
- aborted
- partialSuccess
- running
abortReason:
type: string
numberOfRowsProcessed:
minimum: 0
type: integer
format: int32
numberOfRowsPassed:
minimum: 0
type: integer
format: int32
numberOfRowsFailed:
minimum: 0
type: integer
format: int32
importResultsCsv:
type: string
PatternMatch:
required:
- name
- score
type: object
properties:
name:
type: string
regex:
type: string
score:
type: number
format: double
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'
Webhook:
type: object
properties:
receivers:
uniqueItems: true
type: array
items:
type: string
endpoint:
type: string
format: uri
headers:
type: object
additionalProperties:
type: string
queryParams:
type: object
additionalProperties:
type: string
httpMethod:
type: string
enum:
- POST
- PUT
sendToAdmins:
type: boolean
sendToOwners:
type: boolean
authType:
type: object
sendToFollowers:
type: boolean
UsageStats:
required:
- count
type: object
properties:
count:
minimum: 0
type: integer
format: int32
percentileRank:
type: number
format: double
Style:
type: object
properties:
color:
type: string
iconURL:
type: string
coverImage:
$ref: '#/components/schemas/CoverImage'
BulkAssets:
type: object
properties:
assets:
type: array
items:
$ref: '#/components/schemas/EntityReference'
dryRun:
type: boolean
Votes:
type: object
properties:
upVotes:
type: integer
format: int32
downVotes:
ty
# --- truncated at 32 KB (41 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/openmetadata/refs/heads/main/openapi/openmetadata-teams-api-openapi.yml