Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
description: The Cortex REST API provides programmatic access to the data in the catalog, Scorecards, and more.
title: Cortex Teams API
version: v1
servers:
- url: https://api.getcortexapp.com
description: Cortex Cloud API host
security:
- bearerAuth: []
tags:
- name: Teams
paths:
/api/v1/teams:
delete:
operationId: deleteTeam
parameters:
- in: query
name: teamTag
required: true
schema:
type: string
responses:
'204':
content:
application/json:
schema:
$ref: '#/components/schemas/Unit'
description: Successfully deleted team
'404':
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Team not found
'405':
content:
application/json:
schema:
$ref: '#/components/schemas/Unit'
description: Team delete is not allowed
'429':
$ref: '#/components/responses/TooManyRequests'
summary: Delete team
tags:
- Teams
x-cortex-mcp-description: Delete a team by tag. Disabled for MCP access to prevent removal of organizational units
x-cortex-mcp-enabled: 'false'
get:
description: '*Warning:* This API can return team details if you pass in a teamTag query parameter. However, this should only be used to retrieve team details if your team identifier contains non-alphanumeric characters. Otherwise, use the standard API under `Teams` -> `Retrieve team details`. When retrieving team details, the response will be a single team entity instead of a list.
Note: the response objects can also include an `idpGroup` or `cortexTeam` field depending on whether the team contains a `group` or only consists of individually defined `members`.'
operationId: getTeamDetailsAdvanced
parameters:
- description: Include teams without members
example: false
in: query
name: includeTeamsWithoutMembers
required: false
schema:
type: boolean
- description: Team identifier
example: my-team
in: query
name: teamTag
schema:
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AllTeamsResponse'
description: Object containing a list of teams
'404':
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Team not found
'429':
$ref: '#/components/responses/TooManyRequests'
summary: Retrieve list of teams or team details
tags:
- Teams
x-cortex-mcp-description: Retrieve a list of all teams in the organization. Disabled for MCP access - use the catalog API with type=team filter instead to retrieve team information
x-cortex-mcp-enabled: 'false'
post:
description: Team memberships can be backed by an IdP group (from Okta, Azure AD, Google Groups, etc), or can be managed directly through Cortex. Each has a separate request shape, so make sure to select the correct example.
operationId: createTeam
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateTeamRequest'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TeamResponse'
description: Successfully created a team
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Bad Request
'429':
$ref: '#/components/responses/TooManyRequests'
summary: Create a team
tags:
- Teams
x-cortex-mcp-description: Create a team. Set type to "CORTEX" for a team whose members are managed in Cortex (pass cortexTeam.members), or "IDP" for a team synced from an identity provider group (pass idpGroup with group and provider; members come from the IdP). teamTag must be unique and is how entities reference the team as an owner. Fails if the tag already exists.
x-cortex-mcp-enabled: 'true'
/api/v1/teams/{tagOrId}:
delete:
operationId: deleteTeamByTagOrId
parameters:
- description: The tag (`x-cortex-tag`) or unique, auto-generated identifier (CID) for the entity. If the tag contains forward slashes, URL-encode each `/` as `%2F`. The tag is matched exactly as encoded, including leading, trailing, and consecutive slashes, which are preserved and not collapsed (for example, the tag `/services/payments-api` is referenced as `%2Fservices%2Fpayments-api`). Tags containing slashes are supported via the API but not in the Cortex UI; this difference is expected.
in: path
name: tagOrId
required: true
schema:
type: string
description: Entity identifier - can be a tag or CID
responses:
'204':
content:
application/json:
schema:
$ref: '#/components/schemas/Unit'
description: Successfully deleted team
'404':
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Team not found
'405':
content:
application/json:
schema:
$ref: '#/components/schemas/Unit'
description: Team delete is not allowed
'429':
$ref: '#/components/responses/TooManyRequests'
summary: Delete team by tag or ID
tags:
- Teams
x-cortex-mcp-description: Delete a team by tag or ID. Disabled for MCP access to prevent removal of organizational units
x-cortex-mcp-enabled: 'false'
get:
operationId: getTeamDetails
parameters:
- description: The tag (`x-cortex-tag`) or unique, auto-generated identifier (CID) for the entity. If the tag contains forward slashes, URL-encode each `/` as `%2F`. The tag is matched exactly as encoded, including leading, trailing, and consecutive slashes, which are preserved and not collapsed (for example, the tag `/services/payments-api` is referenced as `%2Fservices%2Fpayments-api`). Tags containing slashes are supported via the API but not in the Cortex UI; this difference is expected.
in: path
name: tagOrId
required: true
schema:
type: string
description: Entity identifier - can be a tag or CID
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TeamResponse'
description: 'Successfully found team
Note: the response objects can also include an `idpGroup` or `cortexTeam` field depending on whether the team contains a `group` or only consists of individually defined `members`.'
'404':
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Team not found
'429':
$ref: '#/components/responses/TooManyRequests'
summary: Retrieve team details
tags:
- Teams
x-cortex-mcp-description: Retrieve detailed information about a specific team by its tag or ID. Returns complete team data including members, slack channels, metadata, and whether it's backed by an identity provider group.
x-cortex-mcp-enabled: 'true'
put:
operationId: updateTeamMetadata
parameters:
- description: The tag (`x-cortex-tag`) or unique, auto-generated identifier (CID) for the entity. If the tag contains forward slashes, URL-encode each `/` as `%2F`. The tag is matched exactly as encoded, including leading, trailing, and consecutive slashes, which are preserved and not collapsed (for example, the tag `/services/payments-api` is referenced as `%2Fservices%2Fpayments-api`). Tags containing slashes are supported via the API but not in the Cortex UI; this difference is expected.
in: path
name: tagOrId
required: true
schema:
type: string
description: Entity identifier - can be a tag or CID
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateTeamRequest'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TeamResponse'
description: Successfully updated team
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Bad Request
'404':
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Team not found
'429':
$ref: '#/components/responses/TooManyRequests'
summary: Update team metadata
tags:
- Teams
x-cortex-mcp-description: Replace a team's name, description, links and Slack channels. For CORTEX teams it also replaces the member list. Any list you send overwrites the existing one and is not merged, so an empty or omitted list clears it. Call getTeamDetails first and send the full desired state. The type ("CORTEX" or "IDP") must match the team. Returns 404 if the team does not exist. To change only members, use updateCortexTeamMembers.
x-cortex-mcp-enabled: 'true'
/api/v1/teams/{tagOrId}/archive:
put:
operationId: archiveTeam
parameters:
- description: The tag (`x-cortex-tag`) or unique, auto-generated identifier (CID) for the entity. If the tag contains forward slashes, URL-encode each `/` as `%2F`. The tag is matched exactly as encoded, including leading, trailing, and consecutive slashes, which are preserved and not collapsed (for example, the tag `/services/payments-api` is referenced as `%2Fservices%2Fpayments-api`). Tags containing slashes are supported via the API but not in the Cortex UI; this difference is expected.
in: path
name: tagOrId
required: true
schema:
type: string
description: Entity identifier - can be a tag or CID
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TeamResponse'
description: Successfully archived team
'404':
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Team not found
'429':
$ref: '#/components/responses/TooManyRequests'
summary: Archive team
tags:
- Teams
x-cortex-mcp-description: Archive a team by tag or ID. The team stays in the catalog, flagged as archived, and can be restored with unarchiveTeam. Archiving an already-archived team does nothing new. Returns 404 if the team does not exist.
x-cortex-mcp-enabled: 'true'
/api/v1/teams/{tagOrId}/members:
put:
description: For teams whose members are not backed by an IdP, use this API to update the team members. Note that it will replace the members in the team with the members defined in this request.
operationId: updateCortexTeamMembers
parameters:
- description: The tag (`x-cortex-tag`) or unique, auto-generated identifier (CID) for the entity. If the tag contains forward slashes, URL-encode each `/` as `%2F`. The tag is matched exactly as encoded, including leading, trailing, and consecutive slashes, which are preserved and not collapsed (for example, the tag `/services/payments-api` is referenced as `%2Fservices%2Fpayments-api`). Tags containing slashes are supported via the API but not in the Cortex UI; this difference is expected.
in: path
name: tagOrId
required: true
schema:
type: string
description: Entity identifier - can be a tag or CID
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CortexManagedTeamMembersRequest'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TeamResponse'
description: Successfully updated team members
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Bad Request
'403':
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Forbidden
'404':
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Team not found
'429':
$ref: '#/components/responses/TooManyRequests'
summary: '[Cortex managed teams] Update members in team'
tags:
- Teams
x-cortex-mcp-description: Replace the full member list of a Cortex-managed team (type "CORTEX") with the members in the request. Each member has an email, a name, and optional roleTags from listTeamMemberRoles. Members you leave out are removed, so to add one person, read the current members with getTeamDetails and send the whole list. Fails for IdP-backed teams, whose members sync from the identity provider.
x-cortex-mcp-enabled: 'true'
/api/v1/teams/{tagOrId}/unarchive:
put:
operationId: unarchiveTeam
parameters:
- description: The tag (`x-cortex-tag`) or unique, auto-generated identifier (CID) for the entity. If the tag contains forward slashes, URL-encode each `/` as `%2F`. The tag is matched exactly as encoded, including leading, trailing, and consecutive slashes, which are preserved and not collapsed (for example, the tag `/services/payments-api` is referenced as `%2Fservices%2Fpayments-api`). Tags containing slashes are supported via the API but not in the Cortex UI; this difference is expected.
in: path
name: tagOrId
required: true
schema:
type: string
description: Entity identifier - can be a tag or CID
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TeamResponse'
description: Successfully unarchived team
'404':
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Team not found
'429':
$ref: '#/components/responses/TooManyRequests'
summary: Unarchive team
tags:
- Teams
x-cortex-mcp-description: Restore an archived team by tag or ID so it is active again. Reverses archiveTeam. Unarchiving an active team does nothing new. Returns 404 if the team does not exist.
x-cortex-mcp-enabled: 'true'
components:
schemas:
TeamsLink:
required:
- name
- type
- url
type: object
properties:
description:
type: string
name:
type: string
type:
type: string
url:
type: string
CortexManagedTeamMembersRequest:
required:
- members
- type
type: object
properties:
members:
type: array
items:
$ref: '#/components/schemas/CortexTeamMember'
type:
type: string
Member:
required:
- id
- roles
type: object
properties:
email:
type: string
id:
type: string
name:
type: string
role:
$ref: '#/components/schemas/Role'
roles:
type: array
items:
$ref: '#/components/schemas/Role'
Role:
required:
- name
type: object
properties:
name:
type: string
description: Name of the role
example: Team Leader
source:
type: string
description: Source of the role if pulled in through integration. This will be blank if manually defined in Cortex.
example: WORKDAY
TeamResponse.CORTEX:
title: CORTEX
type: object
allOf:
- $ref: '#/components/schemas/TeamResponse'
- required:
- cortexTeam
type: object
properties:
cortexTeam:
$ref: '#/components/schemas/CortexTeamDetails'
UpdateTeamRequest.CORTEX:
title: CORTEX
type: object
description: Use this request shape when updating a team entry whose memberships are manually maintained via API or the UI.
allOf:
- $ref: '#/components/schemas/UpdateTeamRequest'
- required:
- cortexTeam
- type
type: object
properties:
cortexTeam:
$ref: '#/components/schemas/CortexTeamDetails'
type:
type: string
CortexTeamMemberRole:
required:
- tag
- type
type: object
properties:
source:
type: string
tag:
type: string
type:
type: string
discriminator:
propertyName: type
oneOf:
- $ref: '#/components/schemas/CortexTeamMemberRole.MISCONFIGURED'
- $ref: '#/components/schemas/CortexTeamMemberRole.TEAM_ROLE'
UpdateTeamRequest.IDP:
title: IDP
type: object
description: Use this request shape when updating a team entry whose memberships are synced with an Idp group, such as from Okta, Google Groups, Github Teams, Azure AD, etc.
allOf:
- $ref: '#/components/schemas/UpdateTeamRequest'
- required:
- type
type: object
properties:
type:
type: string
CortexTeamMemberRole.TEAM_ROLE:
title: TEAM_ROLE
type: object
allOf:
- $ref: '#/components/schemas/CortexTeamMemberRole'
- required:
- name
type: object
properties:
name:
type: string
ErrorResponse:
required:
- message
- type
type: object
properties:
details:
type: string
errorCode:
type: string
gatewayHttpStatus:
type: integer
format: int32
httpStatus:
type: integer
format: int32
message:
type: string
requestId:
type: string
type:
type: string
enum:
- INTEGRATION_MISSING
- INTEGRATION_UNREGISTERED
- INTEGRATION_UNSUPPORTED
- INTEGRATION_GRAPHQL_ERROR
- INTEGRATION_BAD_REQUEST
- INTEGRATION_UNAUTHORIZED
- INTEGRATION_FORBIDDEN
- INTEGRATION_NOT_FOUND
- INTEGRATION_UNPROCESSABLE_CONTENT
- INTEGRATION_RATE_LIMITED
- INTEGRATION_INTERNAL_ERROR
- INTEGRATION_NOT_IMPLEMENTED
- INTEGRATION_BAD_GATEWAY
- INTEGRATION_UNAVAILABLE
- INTEGRATION_GATEWAY_TIMEOUT
- INTEGRATION_TIMED_OUT
- INTEGRATION_CACHE_ERROR
- INTEGRATION_UNHANDLED_HTTP_ERROR
- INTEGRATION_UNHANDLED_EXCEPTION
- INTEGRATION_UNEXPECTED_ERROR
- ILLEGAL_ARGUMENT_ERROR
- BAD_REQUEST
- FORBIDDEN
- NOT_FOUND
- REQUEST_TIMEOUT
- CONFLICT
- UNHANDLED_EXCEPTION
- UNCATEGORIZED
- SERVICE_CREATOR
- UNKNOWN_HOST
- TOO_MANY_REQUESTS
CreateTeamRequest.IDP:
title: IDP
type: object
description: Use this request shape when creating a team entry whose memberships are synced with an Idp group, such as from Okta, Google Groups, Github Teams, Azure AD, etc.
allOf:
- $ref: '#/components/schemas/CreateTeamRequest'
- required:
- idpGroup
- teamTag
- type
type: object
properties:
idpGroup:
$ref: '#/components/schemas/IdpGroupDetailsRequest'
teamTag:
type: string
description: A unique identifier for the team to be used for API/programmatic access
type:
type: string
Unit:
type: object
SlackChannel1:
required:
- name
- notificationsEnabled
type: object
properties:
description:
type: string
name:
type: string
notificationsEnabled:
type: boolean
IdpGroupDetailsRequest:
required:
- group
- provider
type: object
properties:
group:
type: string
provider:
type: string
enum:
- ACTIVE_DIRECTORY
- AZURE_DEVOPS
- BAMBOOHR
- GIT
- GITLAB
- GOOGLE
- OKTA
- OPSGENIE
- SERVICE_NOW
- SLACK
- WORKDAY
TeamMetadata:
required:
- name
type: object
properties:
description:
type: string
name:
type: string
summary:
type: string
CreateTeamRequest:
required:
- links
- metadata
- slackChannels
- teamTag
- type
type: object
properties:
links:
type: array
items:
$ref: '#/components/schemas/TeamsLink'
metadata:
$ref: '#/components/schemas/TeamMetadata'
slackChannels:
type: array
items:
$ref: '#/components/schemas/SlackChannel1'
teamTag:
type: string
type:
type: string
description: Use "IDP" for IdentityProviderBackedTeam and "CORTEX" for ManagedTeam
discriminator:
propertyName: type
oneOf:
- $ref: '#/components/schemas/CreateTeamRequest.CORTEX'
- $ref: '#/components/schemas/CreateTeamRequest.IDP'
CortexTeamMemberDetails:
required:
- email
- name
- notificationsEnabled
- roles
type: object
properties:
description:
type: string
email:
type: string
name:
type: string
notificationsEnabled:
type: boolean
role:
$ref: '#/components/schemas/CortexTeamMemberRole'
roles:
type: array
items:
$ref: '#/components/schemas/CortexTeamMemberRole'
CortexTeamMemberRole.MISCONFIGURED:
title: MISCONFIGURED
type: object
allOf:
- $ref: '#/components/schemas/CortexTeamMemberRole'
TeamResponse.IDP:
title: IDP
type: object
allOf:
- $ref: '#/components/schemas/TeamResponse'
- required:
- idpGroup
type: object
properties:
idpGroup:
$ref: '#/components/schemas/IdpGroupDetailsResponse'
CortexTeamMember:
required:
- email
- name
- notificationsEnabled
- roleTags
type: object
properties:
description:
type: string
email:
type: string
name:
type: string
notificationsEnabled:
type: boolean
roleTags:
type: array
items:
type: string
UpdateTeamRequest:
required:
- links
- metadata
- slackChannels
- type
type: object
properties:
links:
type: array
items:
$ref: '#/components/schemas/TeamsLink'
metadata:
$ref: '#/components/schemas/TeamMetadata'
slackChannels:
type: array
items:
$ref: '#/components/schemas/SlackChannel1'
type:
type: string
description: Use "IDP" for IdentityProviderBackedTeam and "CORTEX" for ManagedTeam
discriminator:
propertyName: type
oneOf:
- $ref: '#/components/schemas/UpdateTeamRequest.CORTEX'
- $ref: '#/components/schemas/UpdateTeamRequest.IDP'
IdpGroupDetailsResponse:
required:
- group
- members
- provider
type: object
properties:
group:
type: string
members:
type: array
items:
$ref: '#/components/schemas/Member'
provider:
type: string
enum:
- ACTIVE_DIRECTORY
- AZURE_DEVOPS
- BAMBOOHR
- GIT
- GITLAB
- GOOGLE
- OKTA
- OPSGENIE
- SERVICE_NOW
- SLACK
- WORKDAY
TeamResponse:
required:
- catalogEntityTag
- id
- isArchived
- links
- metadata
- slackChannels
- teamTag
- type
type: object
properties:
catalogEntityTag:
type: string
id:
type: string
isArchived:
type: boolean
links:
type: array
items:
$ref: '#/components/schemas/TeamsLink'
metadata:
$ref: '#/components/schemas/TeamMetadata'
slackChannels:
type: array
items:
$ref: '#/components/schemas/SlackChannel1'
teamTag:
type: string
type:
type: string
discriminator:
propertyName: type
oneOf:
- $ref: '#/components/schemas/TeamResponse.CORTEX'
- $ref: '#/components/schemas/TeamResponse.IDP'
CreateTeamRequest.CORTEX:
title: CORTEX
type: object
description: Use this request shape when creating a team entry whose memberships are manually maintained via API or the UI.
allOf:
- $ref: '#/components/schemas/CreateTeamRequest'
- required:
- cortexTeam
- teamTag
- type
type: object
properties:
cortexTeam:
$ref: '#/components/schemas/CortexTeamDetails'
teamTag:
type: string
description: A unique identifier for the team, which is used for programmatic access as well as in Catalog Descriptors to define ownership of an entity.
type:
type: string
CortexTeamDetails:
required:
- members
type: object
properties:
members:
type: array
items:
$ref: '#/components/schemas/CortexTeamMemberDetails'
AllTeamsResponse:
required:
- teams
type: object
properties:
teams:
type: array
items:
$ref: '#/components/schemas/TeamResponse'
TooManyRequestsProblemDetail:
required:
- type
- title
- status
type: object
properties:
detail:
type: string
instance:
type: string
format: uri-reference
retryAfter:
minimum: 0
type: integer
description: The number of seconds until the rate limiting resets.
format: int32
status:
maximum: 599
minimum: 100
type: integer
format: int32
enum:
- 429
title:
type: string
type:
type: string
format: uri-reference
responses:
TooManyRequests:
content:
application/problem+json:
schema:
$ref: '#/components/schemas/TooManyRequestsProblemDetail'
description: The client has exceeded the rate limit by performing too many requests in a short period. Retry the request after a delay.
headers:
Retry-After:
description: The number of seconds until the rate limiting resets.
schema:
minimum: 0
type: integer
format: int32
securitySchemes:
bearerAuth:
bearerFormat: JWT
description: 'All requests to the Cortex API need to provide an `Authorization: Bearer <token>` header, where `<token>` is an API key created in the Settings page of your workspace.'
scheme: bearer
type: http
x-provenance:
method: harvested
publisher: Cortex
source: https://docs.cortex.io/openapi/cortex_swagger.json
note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
stamped by stamp-openapi-provenance.py (roadmap#793)