{"id":44959725,"url":"https://github.com/kendew-agency/clickup-sdk","last_synced_at":"2026-02-18T13:00:56.592Z","repository":{"id":339002919,"uuid":"1159548947","full_name":"Kendew-Agency/clickup-sdk","owner":"Kendew-Agency","description":"Node.js library for the ClickUp API","archived":false,"fork":false,"pushed_at":"2026-02-17T15:51:18.000Z","size":67,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-17T19:04:07.149Z","etag":null,"topics":["clickup-api","clickup-sdk","typescript"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/@kendew-agency/clickup-sdk","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Kendew-Agency.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-16T21:30:24.000Z","updated_at":"2026-02-17T15:56:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Kendew-Agency/clickup-sdk","commit_stats":null,"previous_names":["kendew-agency/clickup-sdk"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/Kendew-Agency/clickup-sdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kendew-Agency%2Fclickup-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kendew-Agency%2Fclickup-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kendew-Agency%2Fclickup-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kendew-Agency%2Fclickup-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Kendew-Agency","download_url":"https://codeload.github.com/Kendew-Agency/clickup-sdk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kendew-Agency%2Fclickup-sdk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29580622,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T08:38:15.585Z","status":"ssl_error","status_checked_at":"2026-02-18T08:38:14.917Z","response_time":162,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clickup-api","clickup-sdk","typescript"],"created_at":"2026-02-18T13:00:27.371Z","updated_at":"2026-02-18T13:00:56.561Z","avatar_url":"https://github.com/Kendew-Agency.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# @kendew-agency/clickup-sdk\n\nA type-safe Node.js SDK for the ClickUp API, built with TypeScript.\n\n\u003e **⚠️ Work in Progress**: This SDK is under active development. Not all ClickUp API methods are implemented yet. Check the [API Methods](#api-methods) section below for currently available endpoints. Some endpoints may also miss some functions.\n\n\u003e **📝 Note on ClickUp API**: The actual data returned by ClickUp's API may sometimes differ from their official documentation. We strive to keep our types accurate based on real-world API responses, but discrepancies may occur. Please report any type mismatches you encounter.\n\n## Installation\n\n```bash\nnpm install @kendew-agency/clickup-sdk\n```\n\n```bash\npnpm add @kendew-agency/clickup-sdk\n```\n\n```bash\nyarn add @kendew-agency/clickup-sdk\n```\n\n## Quick Start\n\n```typescript\nimport { ClickUp } from \"@kendew-agency/clickup-sdk\";\n\nconst clickup = new ClickUp({\n  apiToken: \"your_api_token_here\",\n});\n\n// Get authorized user\nconst user = await clickup.authorization.getAuthorizedUser();\n\n// Get tasks from a list\nconst tasks = await clickup.tasks.getTasks(\"list_id\");\n\n// Create a task\nconst newTask = await clickup.tasks.createTask(\"list_id\", {\n  name: \"My new task\",\n  description: \"Task description\",\n});\n```\n\n## Authentication\n\nThe SDK supports two authentication methods:\n\n### Personal API Token\n\nGenerate a personal API token from your ClickUp settings:\n\n```typescript\nconst clickup = new ClickUp({\n  apiToken: \"pk_your_personal_token\",\n});\n```\n\n### OAuth Token\n\nUse OAuth for user-specific access:\n\n```typescript\n// Exchange authorization code for access token\nconst tokenResponse = await clickup.authorization.getAccessToken({\n  client_id: \"your_client_id\",\n  client_secret: \"your_client_secret\",\n  code: \"authorization_code\",\n});\n\n// Create SDK instance with OAuth token\nconst clickup = new ClickUp({\n  apiToken: tokenResponse.access_token,\n});\n```\n\n## Configuration\n\n### Basic Configuration\n\n```typescript\nconst clickup = new ClickUp({\n  apiToken: \"your_token\",\n});\n```\n\n### Custom Headers\n\nAdd custom headers to all requests (useful for Next.js tags, etc.):\n\n```typescript\nconst clickup = new ClickUp({\n  apiToken: \"your_token\",\n  headers: {\n    \"X-Custom-Header\": \"value\",\n  },\n});\n```\n\n### Configuration Override\n\nCreate a new instance with modified configuration:\n\n```typescript\nconst clickupWithCustomHeaders = clickup.withConfig({\n  headers: {\n    \"X-Request-ID\": \"unique-id\",\n  },\n});\n```\n\n## API Methods\n\n### Currently Implemented\n\nThe following API endpoints are currently implemented in this SDK:\n\n- **Authorization**: OAuth token exchange, get authorized user\n- **Tasks**: Get, create, update, delete tasks, manage dependencies and links\n- **Comments**: Task, list, and chat view comments with threading support\n- **Attachments**: Upload task attachments\n- **Custom Task Types**: Get workspace custom task types\n- **Spaces**: Get, create, update, delete spaces\n- **Folders**: Get, create, update, delete folders\n- **Lists**: Get, create, update, delete lists\n- **Goals**: Get, create, update, delete goals\n- **Tags**: Get, create, update, delete tags, manage task tags\n- **Custom Fields**: Get accessible fields, set and remove values\n\nAdditional ClickUp API endpoints will be added in future releases. Contributions are welcome!\n\n### Authorization\n\n```typescript\n// Get access token via OAuth\nconst token = await clickup.authorization.getAccessToken({\n  client_id: \"your_client_id\",\n  client_secret: \"your_client_secret\",\n  code: \"authorization_code\",\n});\n\n// Get authorized user information\nconst user = await clickup.authorization.getAuthorizedUser();\n```\n\n### Tasks\n\n```typescript\n// Get tasks from a list\nconst tasks = await clickup.tasks.getTasks(\"list_id\", {\n  page: 0,\n  order_by: \"created\",\n  reverse: true,\n  subtasks: true,\n  include_closed: false,\n});\n\n// Get a single task\nconst task = await clickup.tasks.getTask(\"task_id\");\n\n// Create a task\nconst newTask = await clickup.tasks.createTask(\"list_id\", {\n  name: \"Task name\",\n  description: \"Task description\",\n  assignees: [123],\n  tags: [\"tag1\"],\n  status: \"Open\",\n  priority: 3,\n  due_date: 1508369194377,\n  notify_all: true,\n});\n\n// Update a task\nconst updated = await clickup.tasks.updateTask(\"task_id\", {\n  name: \"Updated name\",\n  status: \"In Progress\",\n  priority: 2,\n});\n\n// Delete a task\nawait clickup.tasks.deleteTask(\"task_id\");\n\n// Add task dependency\nawait clickup.tasks.addDependency(\"task_id\", {\n  depends_on: \"other_task_id\",\n});\n\n// Delete task dependency\nawait clickup.tasks.deleteDependency(\"task_id\", {\n  depends_on: \"other_task_id\",\n});\n\n// Add task link\nawait clickup.tasks.addTaskLink(\"task_id\", {\n  links_to: \"other_task_id\",\n});\n\n// Delete task link\nawait clickup.tasks.deleteTaskLink(\"task_id\", {\n  links_to: \"other_task_id\",\n});\n```\n\n### Comments\n\n```typescript\n// Get task comments (paginated, max 25 per request)\nconst comments = await clickup.comments.getTaskComments(\"task_id\", {\n  start: 0,\n});\n\n// Create task comment\nconst comment = await clickup.comments.createTaskComment(\"task_id\", {\n  comment_text: \"This is a comment\",\n  notify_all: true,\n});\n\n// Update comment\nawait clickup.comments.updateComment(\"comment_id\", {\n  comment_text: \"Updated comment\",\n});\n\n// Delete comment\nawait clickup.comments.deleteComment(\"comment_id\");\n\n// Get threaded comments\nconst replies = await clickup.comments.getThreadedComments(\"comment_id\");\n\n// Create threaded comment\nawait clickup.comments.createThreadedComment(\"comment_id\", {\n  comment_text: \"Reply to comment\",\n});\n\n// Get chat view comments\nconst chatComments = await clickup.comments.getChatViewComments(\"view_id\", {\n  start: 0,\n});\n\n// Create chat view comment\nawait clickup.comments.createChatViewComment(\"view_id\", {\n  comment_text: \"Chat message\",\n});\n\n// Get list comments\nconst listComments = await clickup.comments.getListComments(\"list_id\", {\n  start: 0,\n});\n\n// Create list comment\nawait clickup.comments.createListComment(\"list_id\", {\n  comment_text: \"List comment\",\n});\n```\n\n### Attachments\n\n```typescript\n// Upload task attachment\nconst attachment = await clickup.attachments.uploadTaskAttachment(\n  \"task_id\",\n  {\n    attachment: fileBuffer, // Buffer or File object\n    filename: \"document.pdf\",\n  },\n);\n```\n\n### Custom Task Types\n\n```typescript\n// Get workspace custom task types\nconst taskTypes = await clickup.customTaskTypes.getCustomTaskTypes(\n  \"workspace_id\",\n);\n```\n\n### Spaces\n\n```typescript\n// Get spaces in a workspace\nconst spaces = await clickup.spaces.getSpaces(\"workspace_id\", {\n  archived: false,\n});\n\n// Get a single space\nconst space = await clickup.spaces.getSpace(\"space_id\");\n\n// Create a space\nconst newSpace = await clickup.spaces.createSpace(\"workspace_id\", {\n  name: \"New Space\",\n  multiple_assignees: true,\n  features: {\n    due_dates: { enabled: true },\n    time_tracking: { enabled: true },\n  },\n});\n\n// Update a space\nawait clickup.spaces.updateSpace(\"space_id\", {\n  name: \"Updated Space\",\n});\n\n// Delete a space\nawait clickup.spaces.deleteSpace(\"space_id\");\n```\n\n### Folders\n\n```typescript\n// Get folders in a space\nconst folders = await clickup.folders.getFolders(\"space_id\", {\n  archived: false,\n});\n\n// Get a single folder\nconst folder = await clickup.folders.getFolder(\"folder_id\");\n\n// Create a folder\nconst newFolder = await clickup.folders.createFolder(\"space_id\", {\n  name: \"New Folder\",\n});\n\n// Update a folder\nawait clickup.folders.updateFolder(\"folder_id\", {\n  name: \"Updated Folder\",\n});\n\n// Delete a folder\nawait clickup.folders.deleteFolder(\"folder_id\");\n```\n\n### Lists\n\n```typescript\n// Get lists in a folder\nconst lists = await clickup.lists.getLists(\"folder_id\", {\n  archived: false,\n});\n\n// Get folderless lists in a space\nconst folderlessLists = await clickup.lists.getFolderlessLists(\"space_id\", {\n  archived: false,\n});\n\n// Get a single list\nconst list = await clickup.lists.getList(\"list_id\");\n\n// Create a list\nconst newList = await clickup.lists.createList(\"folder_id\", {\n  name: \"New List\",\n  content: \"List description\",\n  priority: 1,\n  status: \"active\",\n});\n\n// Update a list\nawait clickup.lists.updateList(\"list_id\", {\n  name: \"Updated List\",\n});\n\n// Delete a list\nawait clickup.lists.deleteList(\"list_id\");\n```\n\n### Goals\n\n```typescript\n// Get goals in a workspace\nconst goals = await clickup.goals.getGoals(123456);\n\n// Get a single goal\nconst goal = await clickup.goals.getGoal(\"goal_id\");\n\n// Create a goal\nconst newGoal = await clickup.goals.createGoal(123456, {\n  name: \"Q1 Goals\",\n  due_date: 1609459200000,\n  description: \"First quarter objectives\",\n  multiple_owners: true,\n  owners: [123],\n  color: \"#32a852\",\n});\n\n// Update a goal\nawait clickup.goals.updateGoal(\"goal_id\", {\n  name: \"Updated Goal\",\n});\n\n// Delete a goal\nawait clickup.goals.deleteGoal(\"goal_id\");\n```\n\n### Tags\n\n```typescript\n// Get tags in a space\nconst tags = await clickup.tags.getTags(\"space_id\");\n\n// Create a tag\nconst newTag = await clickup.tags.createTag(\"space_id\", {\n  name: \"urgent\",\n});\n\n// Update a tag\nawait clickup.tags.updateTag(\"space_id\", \"tag_name\", {\n  name: \"high-priority\",\n});\n\n// Delete a tag\nawait clickup.tags.deleteTag(\"space_id\", \"tag_name\");\n\n// Add tag to task\nawait clickup.tags.addTagToTask(\"task_id\", {\n  tag_name: \"urgent\",\n});\n\n// Remove tag from task\nawait clickup.tags.removeTagFromTask(\"task_id\", \"tag_name\");\n```\n\n### Custom Fields\n\n```typescript\n// Get accessible custom fields\nconst customFields = await clickup.customFields.getAccessibleCustomFields(\n  \"list_id\",\n);\n\n// Set custom field value\nawait clickup.customFields.setCustomFieldValue(\"task_id\", \"field_id\", {\n  value: \"custom value\",\n});\n\n// Remove custom field value\nawait clickup.customFields.removeCustomFieldValue(\"task_id\", \"field_id\");\n```\n\n## Pagination\n\nMany endpoints support pagination using `start` and `start_id` parameters:\n\n```typescript\n// First page\nconst firstPage = await clickup.comments.getTaskComments(\"task_id\", {\n  start: 0,\n});\n\n// Next page\nconst nextPage = await clickup.comments.getTaskComments(\"task_id\", {\n  start: 25,\n  start_id: firstPage.comments[24].id,\n});\n```\n\n## Custom Task IDs\n\nClickUp supports custom task IDs. Enable them in your requests:\n\n```typescript\nconst task = await clickup.tasks.getTask(\"CUSTOM-123\", {\n  custom_task_ids: true,\n  team_id: \"your_team_id\",\n});\n```\n\n## Error Handling\n\nThe SDK uses a `Response\u003cT\u003e` type that includes error information:\n\n```typescript\nconst result = await clickup.tasks.getTask(\"task_id\");\n\nif (\"err\" in result) {\n  console.error(\"Error:\", result.err);\n  console.error(\"Error code:\", result.ECODE);\n} else {\n  console.log(\"Task:\", result);\n}\n```\n\n## TypeScript Support\n\nThe SDK is written in TypeScript and provides full type definitions:\n\n```typescript\nimport type {\n  CreateTaskParams,\n  GetTaskResponse,\n  ClickUpConfig,\n} from \"@kendew-agency/clickup-sdk\";\n```\n\nImport types from the `/types` export:\n\n```typescript\nimport type { User, Pagination } from \"@kendew-agency/clickup-sdk/types\";\n```\n\n## Development\n\n```bash\n# Install dependencies\npnpm install\n\n# Build the project\npnpm build\n\n# Run tests\npnpm test\n\n# Run tests in watch mode\npnpm test:watch\n\n# Run tests with UI\npnpm test:ui\n\n# Run tests with coverage\npnpm test:coverage\n\n# Lint and format\npnpm biome check\n\n# Auto-fix linting and formatting issues\npnpm biome check --write\n```\n\n## License\n\nMIT\n\n## Links\n\n- [ClickUp API Documentation](https://developer.clickup.com/docs/)\n- [GitHub Repository](https://github.com/Kendew-Agency/clickup-sdk)\n- [Issue Tracker](https://github.com/Kendew-Agency/clickup-sdk/issues)\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n### Known Issues\n\n- Not all ClickUp API endpoints are implemented yet\n- Some response types may not perfectly match ClickUp's documentation due to discrepancies between documented and actual API responses\n- If you encounter type mismatches or missing methods, please open an issue with details about the endpoint and expected vs actual behavior\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkendew-agency%2Fclickup-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkendew-agency%2Fclickup-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkendew-agency%2Fclickup-sdk/lists"}