{
  "openapi": "3.0.0",
  "info": {
    "title": "teams",
    "version": "2.0.0"
  },
  "tags": [
    {
      "name": "Teams"
    }
  ],
  "paths": {
    "/iam/teams": {
      "get": {
        "summary": "Lists all local teams",
        "security": [{ "chx_auth_session": [] }, { "bearer": [] }],
        "description": "Lists all local teams.\n\nRequired Permission:\n\n - Resource: ```iam:teams```\n\n - Action: ```iam:teams:list```",
        "operationId": "Teams_ListTeams",
        "responses": {
          "200": {
            "description": "A successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/compiuta.api.iam.v2.ListTeamsResp"
                }
              }
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/google.rpc.Status"
                }
              }
            }
          }
        },
        "tags": ["teams"]
      },
      "post": {
        "summary": "Creates a local team",
        "security": [{ "chx_auth_session": [] }, { "bearer": [] }],
        "description": "Creates a local team that is used to group local users as members of IAM policies.\n\nRequired Permission:\n\n - Resource: ```iam:teams```\n\n - Action: ```iam:teams:create```",
        "operationId": "Teams_CreateTeam",
        "responses": {
          "200": {
            "description": "A successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/compiuta.api.iam.v2.CreateTeamResp"
                }
              }
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/google.rpc.Status"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/compiuta.api.iam.v2.CreateTeamReq"
              }
            }
          },
          "required": true
        },
        "tags": ["teams"],
        "x-codeSamples": [
          {
            "lang": "JSON",
            "source": "{\"id\": \"test-id\", \"name\": \"My Test Team\", \"tenants\": [\"tenant1\", \"tenant2\"]}"
          }
        ]
      }
    },
    "/iam/teams/{id}": {
      "get": {
        "summary": "Get a team",
        "security": [{ "chx_auth_session": [] }, { "bearer": [] }],
        "description": "Returns the details for a team.\n\nRequired Permission:\n\n - Resource: ```iam:teams:{id}```\n\n - Action: ```iam:teams:get```",
        "operationId": "Teams_GetTeam",
        "responses": {
          "200": {
            "description": "A successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/compiuta.api.iam.v2.GetTeamResp"
                }
              }
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/google.rpc.Status"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": ["teams"]
      },
      "delete": {
        "summary": "Deletes a local team",
        "security": [{ "chx_auth_session": [] }, { "bearer": [] }],
        "description": "Deletes a local team and removes it from any policies.\n\nRequired Permission:\n\n - Resource: ```iam:teams:{id}```\n\n - Action: ```iam:teams:delete```",
        "operationId": "Teams_DeleteTeam",
        "responses": {
          "200": {
            "description": "A successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/compiuta.api.iam.v2.DeleteTeamResp"
                }
              }
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/google.rpc.Status"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": ["teams"]
      },
      "put": {
        "summary": "Updates a local team",
        "security": [{ "chx_auth_session": [] }, { "bearer": [] }],
        "description": "Updates a local team.\n\nRequired Permission:\n\n - Resource: ```iam:teams:{id}```\n\n - Action: ```iam:teams:update```",
        "operationId": "Teams_UpdateTeam",
        "responses": {
          "200": {
            "description": "A successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/compiuta.api.iam.v2.UpdateTeamResp"
                }
              }
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/google.rpc.Status"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "example": {
                  "id": "my-team-id",
                  "name": "My Test Team",
                  "tenants": ["tenant1", "tenant2"]
                },
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "tenants": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": ["name"]
              }
            }
          },
          "required": true
        },
        "tags": ["teams"],
        "x-codeSamples": [
          {
            "lang": "JSON",
            "source": "{\"name\": \"My Update Test Team\", \"tenants\": [\"tenant1\", \"tenantnew\"]}"
          }
        ]
      }
    },
    "/iam/teams/{id}/users": {
      "get": {
        "summary": "Gets local team membership",
        "security": [{ "chx_auth_session": [] }, { "bearer": [] }],
        "description": "Lists all users of a local team. Users are listed by their membership_id.\n\nRequired Permission:\n\n - Resource: ```iam:teams:{id}```\n\n - Action: ```iam:teamUsers:list```",
        "operationId": "Teams_GetTeamMembership",
        "responses": {
          "200": {
            "description": "A successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/compiuta.api.iam.v2.GetTeamMembershipResp"
                }
              }
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/google.rpc.Status"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": ["teams"]
      }
    },
    "/iam/teams/{id}/users:add": {
      "post": {
        "summary": "Adds local team membership",
        "security": [{ "chx_auth_session": [] }, { "bearer": [] }],
        "description": "Adds a list of users to a local team. Users are added by their membership_id.\nThe request currently does not validate that membership_id maps to a real user.\n\nThe membership_id for users equals their identity id.\n\nRequired Permission:\n\n - Resource: ```iam:teams:{id}```\n\n - Action: ```iam:teamUsers:create```",
        "operationId": "Teams_AddTeamMembers",
        "responses": {
          "200": {
            "description": "A successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/compiuta.api.iam.v2.AddTeamMembersResp"
                }
              }
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/google.rpc.Status"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/Teams_AddTeamMembersBody"
        },
        "tags": ["teams"],
        "x-codeSamples": [
          {
            "lang": "JSON",
            "source": "{membership_ids: [\"527ed96f-2ecb-4f8f-abd7-0bf6511459ac\", \"987c8475-5747-4f9b-a766-c337f73965ae\"]}"
          }
        ]
      }
    },
    "/iam/teams/{id}/users:remove": {
      "post": {
        "summary": "Removes local team membership",
        "security": [{ "chx_auth_session": [] }, { "bearer": [] }],
        "description": "Removes a list of users from a local team. Users are removed by their membership_id.\nThe request currently does not validate that membership_id maps to a real user.\n\nThe membership_id for users equals their identity id.\n\nRequired Permission:\n\n - Resource: ```iam:teams:{id}```\n\n - Action: ```iam:teamUsers:delete```",
        "operationId": "Teams_RemoveTeamMembers",
        "responses": {
          "200": {
            "description": "A successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/compiuta.api.iam.v2.RemoveTeamMembersResp"
                }
              }
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/google.rpc.Status"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/Teams_AddTeamMembersBody"
        },
        "tags": ["teams"],
        "x-codeSamples": [
          {
            "lang": "JSON",
            "source": "{membership_ids: [\"527ed96f-2ecb-4f8f-abd7-0bf6511459ac\", \"987c8475-5747-4f9b-a766-c337f73965ae\"]}"
          }
        ]
      }
    },
    "/iam/users/{membershipId}/teams": {
      "get": {
        "summary": "Gets team membership for a user",
        "security": [{ "chx_auth_session": [] }, { "bearer": [] }],
        "description": "Lists all local teams for a specific user. You must use their membership_id in the request URL.\n\nRequired Permission:\n\n - Resource: ```iam:users:{membershipId}```\n\n - Action: ```iam:userTeams:get```",
        "operationId": "Teams_GetTeamsForMember",
        "responses": {
          "200": {
            "description": "A successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/compiuta.api.iam.v2.GetTeamsForMemberResp"
                }
              }
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/google.rpc.Status"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "membershipId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": ["teams"]
      }
    }
  },
  "servers": [
    {
      "url": "https://apis.connhex.com"
    }
  ],
  "components": {
    "requestBodies": {
      "Teams_AddTeamMembersBody": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "example": {
                "id": "admins",
                "membership_ids": [
                  "527ed96f-2ecb-4f8f-abd7-0bf6511459ac",
                  "353a62d4-85fa-4423-b12a-f6608a562ae9"
                ]
              },
              "properties": {
                "membershipIds": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "required": ["membershipIds"]
            }
          }
        },
        "required": true
      }
    },
    "securitySchemes": {
      "bearer": { "type": "http", "scheme": "bearer" },
      "chx_auth_session": {
        "type": "apiKey",
        "in": "cookie",
        "name": "chx_auth_session"
      }
    },
    "schemas": {
      "compiuta.api.iam.v2.AddTeamMembersResp": {
        "type": "object",
        "example": {
          "membership_ids": [
            "527ed96f-2ecb-4f8f-abd7-0bf6511459ac",
            "353a62d4-85fa-4423-b12a-f6608a562ae9"
          ]
        },
        "properties": {
          "membershipIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "compiuta.api.iam.v2.CreateTeamReq": {
        "type": "object",
        "example": {
          "id": "my-team-id",
          "name": "My Test Team",
          "tenants": ["tenant1", "tenant2"]
        },
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "tenants": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": ["id", "name"]
      },
      "compiuta.api.iam.v2.CreateTeamResp": {
        "type": "object",
        "example": {
          "team": {
            "id": "test-id",
            "name": "My Test Team",
            "tenants": ["tenant1", "tenant2"]
          }
        },
        "properties": {
          "team": {
            "$ref": "#/components/schemas/compiuta.api.iam.v2.Team"
          }
        }
      },
      "compiuta.api.iam.v2.DeleteTeamResp": {
        "type": "object",
        "example": {
          "team": {
            "id": "test-id",
            "name": "My Test Team",
            "tenants": ["tenant1", "tenant2"]
          }
        },
        "properties": {
          "team": {
            "$ref": "#/components/schemas/compiuta.api.iam.v2.Team"
          }
        }
      },
      "compiuta.api.iam.v2.GetTeamMembershipResp": {
        "type": "object",
        "example": {
          "membership_ids": [
            "527ed96f-2ecb-4f8f-abd7-0bf6511459ac",
            "353a62d4-85fa-4423-b12a-f6608a562ae9"
          ]
        },
        "properties": {
          "membershipIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "compiuta.api.iam.v2.GetTeamResp": {
        "type": "object",
        "example": {
          "team": {
            "id": "test-id",
            "name": "My Test Team",
            "tenants": ["tenant1", "tenant2"]
          }
        },
        "properties": {
          "team": {
            "$ref": "#/components/schemas/compiuta.api.iam.v2.Team"
          }
        }
      },
      "compiuta.api.iam.v2.GetTeamsForMemberResp": {
        "type": "object",
        "example": {
          "teams": [
            {
              "id": "test-1",
              "name": "My Test Team",
              "tenants": ["tenant1", "tenant2"]
            },
            {
              "id": "test-2",
              "name": "My Test Team 2",
              "tenants": ["tenant1"]
            }
          ]
        },
        "properties": {
          "teams": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/compiuta.api.iam.v2.Team"
            }
          }
        }
      },
      "compiuta.api.iam.v2.ListTeamsResp": {
        "type": "object",
        "example": {
          "teams": [
            {
              "id": "test-1",
              "name": "My Test Team",
              "tenants": ["tenant1", "tenant2"]
            },
            {
              "id": "test-2",
              "name": "My Test Team 2",
              "tenants": ["tenant1"]
            }
          ]
        },
        "properties": {
          "teams": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/compiuta.api.iam.v2.Team"
            }
          }
        }
      },
      "compiuta.api.iam.v2.RemoveTeamMembersResp": {
        "type": "object",
        "example": {
          "membership_ids": [
            "527ed96f-2ecb-4f8f-abd7-0bf6511459ac",
            "353a62d4-85fa-4423-b12a-f6608a562ae9"
          ]
        },
        "properties": {
          "membershipIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "compiuta.api.iam.v2.Team": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "tenants": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "compiuta.api.iam.v2.UpdateTeamResp": {
        "type": "object",
        "example": {
          "team": {
            "id": "test-id",
            "name": "My Test Team",
            "tenants": ["tenant1", "tenant2"]
          }
        },
        "properties": {
          "team": {
            "$ref": "#/components/schemas/compiuta.api.iam.v2.Team"
          }
        }
      },
      "google.protobuf.Any": {
        "type": "object",
        "properties": {
          "@type": {
            "type": "string"
          }
        },
        "additionalProperties": {}
      },
      "google.rpc.Status": {
        "type": "object",
        "properties": {
          "code": {
            "type": "integer",
            "format": "int32"
          },
          "message": {
            "type": "string"
          },
          "details": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/google.protobuf.Any"
            }
          }
        }
      }
    }
  }
}
