diff --git a/independent-publisher-connectors/ClickUp Team Manager/apiDefinition.swagger.json b/independent-publisher-connectors/ClickUp Team Manager/apiDefinition.swagger.json new file mode 100644 index 000000000..df0bda9b7 --- /dev/null +++ b/independent-publisher-connectors/ClickUp Team Manager/apiDefinition.swagger.json @@ -0,0 +1,1136 @@ +{ + "swagger": "2.0", + "info": { + "version": "1.0.0", + "title": "ClickUp Team Manager", + "description": "Connects to the ClickUp team to manage tasks, folders, and lists from within Power Platform", + "contact": { + "name": "Duke DeVan", + "url": "https://dukedevan.com", + "email": "ddevan@hitachisolutions.com" + } + }, + "host": "api.clickup.com", + "basePath": "/", + "schemes": [ + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/api/v2/space/{space_id}/folder": { + "post": { + "summary": "Create a Folder", + "description": "Creates a new folder in your space", + "operationId": "CreateAFolder", + "parameters": [ + { + "name": "space_id", + "in": "path", + "required": true, + "type": "string", + "x-ms-summary": "Create folder", + "x-ms-url-encoding": "single", + "description": "Create a new folder in your space" + }, + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "ID of the newly created folder" + }, + "name": { + "type": "string", + "description": "Name of folder being created", + "x-ms-summary": "Folder Name" + }, + "orderindex": { + "type": "integer", + "format": "int32", + "description": "Task order index", + "x-ms-summary": "Order Index" + }, + "override_statuses": { + "type": "boolean", + "description": "Status override enabled", + "x-ms-summary": "Override Statuses" + }, + "hidden": { + "type": "boolean", + "description": "Hidden folder enabled", + "x-ms-summary": "Hidden Folder" + }, + "space": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Space ID where the folder lives", + "x-ms-summary": "Space ID", + "x-ms-visibility": "internal" + }, + "name": { + "type": "string", + "description": "Name of space where folder lives", + "x-ms-summary": "Space Name", + "x-ms-visibility": "internal" + }, + "access": { + "type": "boolean", + "description": "Access to folder enabled", + "x-ms-visibility": "internal" + } + }, + "description": "space" + }, + "task_count": { + "type": "string", + "description": "Count of tasks", + "x-ms-summary": "Task Count" + }, + "archived": { + "type": "boolean", + "description": "Is folder archived" + }, + "statuses": { + "type": "array", + "items": {}, + "description": "statuses", + "x-ms-summary": "Statuses" + }, + "lists": { + "type": "array", + "items": {}, + "description": "Lists in folder", + "x-ms-visibility": "internal", + "x-ms-summary": "Lists" + }, + "permission_level": { + "type": "string", + "description": "Permission level for folder", + "x-ms-summary": "Permission Level" + } + } + } + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Folder ID" + }, + "name": { + "type": "string", + "description": "Name of the folder" + }, + "orderindex": { + "type": "integer", + "format": "int32", + "description": "Folder's order index" + }, + "override_statuses": { + "type": "boolean", + "description": "Status override enabled" + }, + "hidden": { + "type": "boolean", + "description": "Folder visibility" + }, + "space": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Space ID" + }, + "name": { + "type": "string", + "description": "Space name" + }, + "access": { + "type": "boolean", + "description": "Space access enabled" + } + }, + "description": "space" + }, + "task_count": { + "type": "string", + "description": "Count of tasks in folder" + }, + "archived": { + "type": "boolean", + "description": "Is the folder archived" + }, + "statuses": { + "type": "array", + "items": {}, + "description": "Statuses in the folder" + }, + "lists": { + "type": "array", + "items": {}, + "description": "lists" + }, + "permission_level": { + "type": "string", + "description": "Folder permission level" + } + } + } + } + } + } + }, + "/api/v2/team": { + "get": { + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "teams": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Team ID" + }, + "name": { + "type": "string", + "description": "Team Name" + }, + "color": { + "type": "string", + "description": "Team color" + }, + "avatar": { + "type": "string", + "description": "Team avatar" + }, + "members": { + "type": "array", + "items": { + "type": "object", + "properties": { + "user": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32", + "description": "Member ID" + }, + "username": { + "type": "string", + "description": "Name of team owner" + }, + "email": { + "type": "string", + "description": "Owner email" + }, + "color": { + "type": "string", + "description": "Owner's picked color" + }, + "profilePicture": { + "type": "string", + "description": "Owner profile picture" + }, + "initials": { + "type": "string", + "description": "Owner initials" + }, + "role": { + "type": "integer", + "format": "int32", + "description": "Owner Role" + }, + "custom_role": { + "type": "string", + "description": "Custom role name" + }, + "last_active": { + "type": "string", + "description": "Last time user was active" + }, + "date_joined": { + "type": "string", + "description": "Date joined team" + }, + "date_invited": { + "type": "string", + "description": "Date invited to team" + } + }, + "description": "user" + } + } + }, + "description": "members" + } + } + }, + "description": "teams" + } + } + } + } + }, + "summary": "Get Teams", + "operationId": "GetTeams", + "parameters": [], + "description": "Returns the teams for your ClickUp instance", + "x-ms-summary": "Get Teams in clickup instance" + } + }, + "/api/v2/team/{team_id}/space": { + "post": { + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Space id" + }, + "name": { + "type": "string", + "description": "Space name" + }, + "private": { + "type": "boolean", + "description": "Private space enabled?" + }, + "statuses": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Status ID" + }, + "status": { + "type": "string", + "description": "Status name" + }, + "type": { + "type": "string", + "description": "Type of status" + }, + "orderindex": { + "type": "integer", + "format": "int32", + "description": "Index order of status" + }, + "color": { + "type": "string", + "description": "Status color" + } + } + }, + "description": "statuses" + }, + "multiple_assignees": { + "type": "boolean", + "description": "Multiple assignees to space" + }, + "features": { + "type": "object", + "properties": { + "due_dates": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Due dates enabled?" + }, + "start_date": { + "type": "boolean", + "description": "Start dates enabled?" + }, + "remap_due_dates": { + "type": "boolean", + "description": "Remap due dates enabled?" + }, + "remap_closed_due_date": { + "type": "boolean", + "description": "Remap closed due dates enabled?" + } + }, + "description": "Due dates for folder" + }, + "sprints": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Sprints enabled?" + } + }, + "description": "Sprints" + }, + "points": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Story points enabled" + } + }, + "description": "Story points enabled" + }, + "custom_items": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Custom items enabled?" + } + }, + "description": "Custom items enabled?" + }, + "tags": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Tags enabled?" + } + }, + "description": "Tags enabled?" + }, + "time_estimates": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Time estimates enabled?" + } + }, + "description": "Time estimates enabled" + }, + "checklists": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Are checklists enabled?" + } + }, + "description": "Are checklists enabled" + }, + "zoom": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Is zoom enabled?" + } + }, + "description": "Is zoom enabled?" + }, + "milestones": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Are milestones enabled?" + } + }, + "description": "Are milestones enabled?" + }, + "custom_fields": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Are custom fields enabled?" + } + }, + "description": "Are custom fields enabled?" + }, + "remap_dependencies": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Is remapping of dependencies enabled?" + } + }, + "description": "Is remapping of dependencies enabled?" + }, + "dependency_warning": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Are dependency warnings enabled?" + } + }, + "description": "Are dependency warnings enabled?" + }, + "multiple_assignees": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Are multiple assignees enabled?" + } + }, + "description": "Are multiple assignees enabled?" + }, + "portfolios": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Are portfolios enabled?" + } + }, + "description": "Are portfolios enabled?" + }, + "emails": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Are emails enabled?" + } + }, + "description": "Are emails enabled?" + } + }, + "description": "Space features." + }, + "archived": { + "type": "boolean", + "description": "Is archive for space enabled?" + } + } + } + } + }, + "summary": "Create A Space", + "operationId": "CreateSpace", + "parameters": [ + { + "name": "team_id", + "in": "path", + "required": true, + "type": "string", + "x-ms-url-encoding": "single", + "x-ms-summary": "Team ID", + "description": "ID for the team where the space is being created" + }, + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of space.", + "x-ms-summary": "Space Name" + }, + "multiple_assignees": { + "type": "boolean", + "description": "Are multiple assignees allowed for the space.", + "x-ms-summary": "Multiple Assignees" + }, + "features": { + "type": "object", + "properties": { + "due_dates": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Are due dates enabled for the space?", + "x-ms-summary": "Due Dates" + }, + "start_date": { + "type": "boolean", + "description": "Are start dates enabled for the space?", + "x-ms-summary": "Start Date" + }, + "remap_due_dates": { + "type": "boolean", + "description": "Is the remapping of due dates allowed?", + "x-ms-summary": "Remap Due Date" + }, + "remap_closed_due_date": { + "type": "boolean", + "description": "Is the remapping of the closed due date allowed?", + "x-ms-summary": "Remap Closed Due Date" + } + }, + "description": "Due dates for the space." + }, + "time_tracking": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "x-ms-summary": "Time Tracking", + "description": "Is time tracking enabled for the space?" + } + }, + "description": "Is time tracking enabled for the space?" + }, + "tags": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "x-ms-summary": "Tags", + "description": "Are tags enabled for the space?" + } + }, + "description": "Are tags enabled for the space?tags" + }, + "time_estimates": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "x-ms-summary": "Time Estimates", + "description": "Are time estimates enabled?" + } + }, + "description": "Are time estimates enabled?" + }, + "checklists": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "x-ms-summary": "Checklist", + "description": "Are checklists enabled for the space?" + } + }, + "description": "Are checklists enabled for the space?" + }, + "custom_fields": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "x-ms-summary": "Custom Fields", + "description": "Custom fields allowed" + } + }, + "description": "custom_fields" + }, + "remap_dependencies": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "x-ms-summary": "Remap dependencies", + "description": "Is the remapping of dependencies allowed in the space?" + } + }, + "description": "Is the remapping of dependencies allowed in the space?" + }, + "dependency_warning": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "x-ms-summary": "Dependency Warning", + "description": "Are dependency warnings enabled?" + } + }, + "description": "Are dependency warnings enabled?" + }, + "portfolios": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Are portfolios enabled in the space?", + "x-ms-summary": "Portfolios" + } + }, + "description": "Are portfolios enabled in the space?" + } + }, + "description": "Space features" + } + } + } + } + ], + "description": "Creates new workspace in your team" + } + }, + "/api/v2/folder/{folder_id}/list": { + "post": { + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Folder ID" + }, + "name": { + "type": "string", + "description": "List name." + }, + "orderindex": { + "type": "integer", + "format": "int32", + "description": "List order index." + }, + "content": { + "type": "string", + "description": "List content." + }, + "status": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "List status." + }, + "color": { + "type": "string", + "description": "List color." + }, + "hide_label": { + "type": "boolean", + "description": "Hide list labels." + } + }, + "description": "List status." + }, + "priority": { + "type": "object", + "properties": { + "priority": { + "type": "string", + "description": "List priority" + }, + "color": { + "type": "string", + "description": "List priority color." + } + }, + "description": "List priority." + }, + "assignee": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32", + "description": "Assignee ID" + }, + "color": { + "type": "string", + "description": "Assignee color." + }, + "username": { + "type": "string", + "description": "Assignee username." + }, + "initials": { + "type": "string", + "description": "Assignee initials" + }, + "profilePicture": { + "type": "string", + "description": "Assignee profile picture." + } + }, + "description": "Person the list is assigned to." + }, + "task_count": { + "type": "string", + "description": "task_count" + }, + "due_date": { + "type": "string", + "description": "due_date" + }, + "due_date_time": { + "type": "boolean", + "description": "due_date_time" + }, + "start_date": { + "type": "string", + "description": "start_date" + }, + "start_date_time": { + "type": "string", + "description": "start_date_time" + }, + "folder": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "id" + }, + "name": { + "type": "string", + "description": "name" + }, + "hidden": { + "type": "boolean", + "description": "hidden" + }, + "access": { + "type": "boolean", + "description": "access" + } + }, + "description": "folder" + }, + "space": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "id" + }, + "name": { + "type": "string", + "description": "name" + }, + "access": { + "type": "boolean", + "description": "access" + } + }, + "description": "space" + }, + "statuses": { + "type": "array", + "items": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status" + }, + "orderindex": { + "type": "integer", + "format": "int32", + "description": "orderindex" + }, + "color": { + "type": "string", + "description": "color" + }, + "type": { + "type": "string", + "description": "type" + } + } + }, + "description": "statuses" + }, + "inbound_address": { + "type": "string", + "description": "inbound_address" + } + } + } + } + }, + "summary": "Create A list", + "operationId": "CreateAList", + "parameters": [ + { + "name": "folder_id", + "in": "path", + "required": true, + "type": "string", + "x-ms-url-encoding": "single", + "x-ms-summary": "Folder ID", + "description": "folder where the list is being created" + }, + { + "name": "Content-Type:application/json", + "in": "header", + "required": false, + "type": "string", + "x-ms-summary": "header", + "description": "header", + "x-ms-visibility": "internal" + }, + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "id", + "x-ms-summary": "ID", + "x-ms-visibility": "internal" + }, + "name": { + "type": "string", + "description": "Name of list", + "x-ms-visibility": "important", + "x-ms-summary": "Name" + }, + "orderindex": { + "type": "integer", + "format": "int32", + "description": "orderindex", + "x-ms-summary": "Order Index" + }, + "content": { + "type": "string", + "description": "content", + "x-ms-visibility": "internal" + }, + "status": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status", + "x-ms-visibility": "internal" + }, + "color": { + "type": "string", + "description": "color", + "x-ms-visibility": "internal" + }, + "hide_label": { + "type": "boolean", + "description": "hide_label", + "x-ms-visibility": "internal" + } + }, + "description": "status" + }, + "priority": { + "type": "object", + "properties": { + "priority": { + "type": "string", + "description": "priority", + "x-ms-visibility": "internal" + }, + "color": { + "type": "string", + "description": "color", + "x-ms-visibility": "internal" + } + }, + "description": "priority" + }, + "assignee": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32", + "description": "id", + "x-ms-visibility": "internal" + }, + "color": { + "type": "string", + "description": "color", + "x-ms-visibility": "internal" + }, + "username": { + "type": "string", + "description": "username", + "x-ms-visibility": "internal" + }, + "initials": { + "type": "string", + "description": "initials", + "x-ms-visibility": "internal" + }, + "profilePicture": { + "type": "string", + "description": "profilePicture", + "x-ms-visibility": "internal" + } + }, + "description": "assignee" + }, + "task_count": { + "type": "string", + "description": "task_count", + "x-ms-visibility": "internal" + }, + "due_date": { + "type": "string", + "description": "due_date", + "x-ms-visibility": "internal" + }, + "due_date_time": { + "type": "boolean", + "description": "due_date_time", + "x-ms-visibility": "important", + "x-ms-summary": "Due Date" + }, + "start_date": { + "type": "string", + "description": "start_date", + "x-ms-visibility": "internal" + }, + "start_date_time": { + "type": "string", + "description": "start_date_time", + "x-ms-visibility": "internal" + }, + "folder": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "id", + "x-ms-visibility": "internal" + }, + "name": { + "type": "string", + "description": "name", + "x-ms-visibility": "internal" + }, + "hidden": { + "type": "boolean", + "description": "hidden", + "x-ms-visibility": "internal" + }, + "access": { + "type": "boolean", + "description": "access", + "x-ms-visibility": "internal" + } + }, + "description": "folder" + }, + "space": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "id", + "x-ms-visibility": "internal" + }, + "name": { + "type": "string", + "description": "name", + "x-ms-visibility": "internal" + }, + "access": { + "type": "boolean", + "description": "access", + "x-ms-visibility": "internal" + } + }, + "description": "space" + }, + "statuses": { + "type": "array", + "items": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status", + "x-ms-visibility": "internal" + }, + "orderindex": { + "type": "integer", + "format": "int32", + "description": "orderindex", + "x-ms-visibility": "internal" + }, + "color": { + "type": "string", + "description": "color", + "x-ms-visibility": "internal" + }, + "type": { + "type": "string", + "description": "type", + "x-ms-visibility": "internal" + } + } + }, + "description": "statuses" + }, + "inbound_address": { + "type": "string", + "description": "inbound_address", + "x-ms-visibility": "internal" + } + } + } + } + ], + "description": "Create a new list inside of a folder", + "x-ms-url-encoding": "single", + "x-ms-summary": "Create a new list inside of a folder" + } + } + }, + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "API Key": { + "type": "apiKey", + "in": "header", + "name": "Authorization" + } + }, + "security": [ + { + "API Key": [] + } + ], + "tags": [], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.clickup.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.clickup.com/privacy" + }, + { + "propertyName": "Categories", + "propertyValue": "Collaboration;Business Management" + } + ] +} diff --git a/independent-publisher-connectors/ClickUp Team Manager/apiProperties.json b/independent-publisher-connectors/ClickUp Team Manager/apiProperties.json new file mode 100644 index 000000000..3ace80e27 --- /dev/null +++ b/independent-publisher-connectors/ClickUp Team Manager/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "API Key", + "description": "The API Key for this api", + "tooltip": "Provide your API Key", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#da3b01", + "capabilities": [], + "publisher": "Duke DeVan", + "stackOwner":"ClickUp" + } +} diff --git a/independent-publisher-connectors/ClickUp Team Manager/readme.md b/independent-publisher-connectors/ClickUp Team Manager/readme.md new file mode 100644 index 000000000..2d9fac0bf --- /dev/null +++ b/independent-publisher-connectors/ClickUp Team Manager/readme.md @@ -0,0 +1,46 @@ +# ClickUp Team Manager + +ClickUp is a productivity platform that helps teams manage projects and tasks. Leveraging the API in App or Automation, allows users to create spaces, folders, and lists. + +## Publisher: Duke DeVan - Hitachi Solutions + +## Prerequisites +To use the connector you will need: +- ClickUp account + +## Supported Operations + +### Get Teams +Returns every team in organization. + +### Create A Folder +Creates a new folder in designated space. + +### Create A Space +Creates a new space in designated team. + +### Create A List +Creates a new list in designated folder. + +## Obtaining Credentials + +Sign in to ClickUp account and take the following steps. +1. Go to settings + - Select Integrations + - Select ClickUp API + - Select Create an App + - Name App + - Provide redirect url - global.consent.azure-apim.net + - Select Create App – you will receive AppID and App Secret +2.Generate Code + - Navigate to [https://app.clickup.com/api?client_id={client_id}&redirect_uri={redirect_url}](https://app.clickup.com/api?client_id={client_id}&redirect_uri={redirect_url}) + - Select Workspace + - Select Connect + - Copy Code from address bar – paste into notepad or text editor will be needed to generate authorization token +3. Use Code to generate Authorization Token (auth token does not expire) + - Navigate to [https://api.clickup.com/api/v2/oauth/token?client_id={client_id}&client_secret{client_secret}=&code={code}](https://api.clickup.com/api/v2/oauth/token?client_id={client_id}&client_secret{client_secret}=&code={code}) + - Copy Authorization token and paste into text editor – will be used to create connection in power platform. +4. Create Connection (see deployment instructions) + +## Known Issues and Limitations +No known issues or limitations at this point.