API Documentation
Manage projects, tools, Grove cards, and to-dos programmatically. Build integrations, automate workflows, or sync data with other tools.
Authentication
All API requests require a bearer token. Create one in your organization's Settings → API Tokens page (admin or owner role required).
curl -H "Authorization: Bearer thk_your_token_here" \
-H "User-Agent: MyApp ([email protected])" \
https://www.thickethq.com/api/v1/projectsRequired headers
Authorization: Bearer thk_...— your API tokenUser-Agent: AppName (contact)— your app name and contact email or URLContent-Type: application/json— for POST/PUT requests
Rate Limiting
API requests are limited to 50 requests per 10 seconds per token. When you exceed the limit, you'll receive a 429 Too Many Requests response with a Retry-After header indicating how many seconds to wait.
Every response includes rate limit headers:
X-RateLimit-Limit— requests allowed per windowX-RateLimit-Remaining— requests remaining in current windowX-RateLimit-Reset— Unix timestamp when the window resets
Pagination
List endpoints return paginated results. Use page and per_page query parameters to navigate. Default: 25 results per page, maximum: 100.
The Link header follows RFC 5988 and provides URLs for next, prev, first, and last pages. The X-Total-Count header contains the total number of resources for the primary paginated list in the response. For Grove cards, those headers apply to the top-level cards array, not the per-status grouped arrays.
# Response headers
Link: <https://...?page=2&per_page=25>; rel="next", <https://...?page=1&per_page=25>; rel="first"
X-Total-Count: 47Caching
GET responses include an ETag header. On subsequent requests, pass it as If-None-Match to receive a 304 Not Modified response when content hasn't changed, saving bandwidth.
# First request — save the ETag
curl -i -H "Authorization: Bearer thk_..." \
https://www.thickethq.com/api/v1/projects
# ETag: W/"a1b2c3d4e5f6g7h8"
# Subsequent request — send it back
curl -H "Authorization: Bearer thk_..." \
-H 'If-None-Match: W/"a1b2c3d4e5f6g7h8"' \
https://www.thickethq.com/api/v1/projects
# 304 Not Modified (no body)Errors
All errors return a consistent JSON shape:
{
"error": "Human-readable message",
"code": "MACHINE_READABLE_CODE",
"detail": "Optional additional context"
}| Status | Code | Description |
|---|---|---|
| 400 | BAD_REQUEST | Invalid request parameters |
| 400 | MISSING_USER_AGENT | Missing User-Agent header |
| 401 | UNAUTHORIZED | Missing or invalid credentials |
| 401 | TOKEN_REVOKED | Token has been revoked |
| 401 | TOKEN_EXPIRED | Token has expired |
| 403 | INSUFFICIENT_PERMISSION | Token lacks required permission |
| 404 | RESOURCE_NOT_FOUND | Resource doesn't exist or is inaccessible |
| 422 | VALIDATION_ERROR | Request body failed validation |
| 429 | RATE_LIMITED | Too many requests — check Retry-After header |
| 500 | INTERNAL_ERROR | Server error — retry with exponential backoff |
Versioning
All endpoints are under /api/v1/. Every response includes an X-Api-Version header. We commit to no breaking changes within a version. New fields may be added to responses — your client should ignore unknown fields. If we deprecate an endpoint, we'll announce it with a Sunset header well in advance.
Endpoints
Projects
/api/v1/projectsList all projects the authenticated user can access.
Query parameters
pageper_pageProject access rules
INVITE_ONLYprojects are only returned to explicitly invited project members.ALL_ACCESSprojects are returned to internal non-client organization members automatically.- Client users never get implicit access. Clients must always be explicitly added as project members.
Permission required: projects:read
/api/v1/projectsCreate a new project.
Request body
name*descriptionPermission required: projects:write
curl -X POST https://www.thickethq.com/api/v1/projects \
-H "Authorization: Bearer thk_..." \
-H "Content-Type: application/json" \
-H "User-Agent: MyApp ([email protected])" \
-d '{
"name": "Marketing Website",
"description": "Q2 website redesign"
}'/api/v1/projects/:idGet a single project by ID if the authenticated user can access it.
Permission required: projects:read
/api/v1/projects/:idUpdate general project fields like name, description, color, or status.
Request body
namedescriptioncolorstatusPUT /api/v1/projects/:id/access.Permission required: projects:write
/api/v1/projects/:id/accessChange a project between invite-only and all-access without introducing project-level roles.
Request body
accessType*INVITE_ONLY or ALL_ACCESSWho can change it: the project creator, an organization admin, or the organization owner.
What it means: ALL_ACCESS grants implicit access to internal non-client organization members only. Clients still require explicit project membership. INVITE_ONLY always requires explicit membership.
curl -X PUT https://www.thickethq.com/api/v1/projects/PROJECT_ID/access -H "Authorization: Bearer thk_..." -H "Content-Type: application/json" -H "User-Agent: MyApp ([email protected])" -d '{
"accessType": "ALL_ACCESS"
}'
# Response
{
"project": {
"id": "PROJECT_ID",
"slug": "marketing-website-ab123",
"access_type": "ALL_ACCESS"
},
"authorization_basis": "ADMIN"
}Permission required: projects:write
/api/v1/projects/:idTrash a project.
Permission required: projects:write
Tools
Tools are the building blocks within a project — Grove boards, to-do lists, and more.
/api/v1/projects/:id/toolsList all tools in a project.
Permission required: tools:read
/api/v1/projects/:id/toolsCreate a new tool in a project.
Request body
name*type*Permission required: tools:write
/api/v1/projects/:id/tools/:toolIdGet a single tool by ID.
Permission required: tools:read
/api/v1/projects/:id/tools/:toolIdUpdate a tool.
Request body
namePermission required: tools:write
/api/v1/projects/:id/tools/:toolIdDelete a tool from a project.
Permission required: tools:write
/api/v1/projects/:id/tools/:toolId/enableEnable a tool.
Permission required: tools:write
/api/v1/projects/:id/tools/:toolId/disableDisable a tool.
Permission required: tools:write
/api/v1/projects/:id/tools/:toolId/positionUpdate a tool's position in the project.
Request body
position*Permission required: tools:write
Grove Cards
Grove cards are items on a project's Grove board. All Grove endpoints are scoped to a project.
/api/v1/projects/:id/groveList Grove tools in a project.
Permission required: kanban:read
/api/v1/projects/:id/grove/cardsList cards in a project's Grove board. Returns both a stable flat list and trustworthy grouped column slices.
Query parameters
statuscards and grouped are scoped to that status.archivedtrue (default: false)pageper_pagecards is the primary paginated list. It is ordered deterministically across all statuses by status order (CONSIDERING → IN_PROGRESS → DONE), then by position asc,created_at asc, and id asc.
grouped contains per-status page slices that are paginated within each column, not just the current flat page re-grouped. Column-level pagination details live under pagination.grouped.statuses.
X-Total-Count and Link headers describe the top-level cards list only.
Permission required: kanban:read
{
"cards": [
{
"id": "...",
"title": "Tighten API docs",
"status": "CONSIDERING",
"position": 0,
"created_at": "2026-03-09T22:00:00.000Z"
}
],
"grouped": {
"CONSIDERING": [
{
"id": "...",
"title": "Tighten API docs",
"status": "CONSIDERING",
"position": 0
}
],
"IN_PROGRESS": [],
"DONE": []
},
"pagination": {
"flat": {
"page": 1,
"per_page": 25,
"total_count": 47,
"total_pages": 2,
"returned_count": 25,
"has_next_page": true,
"has_prev_page": false,
"next_page": 2,
"prev_page": null,
"order": {
"status": ["CONSIDERING", "IN_PROGRESS", "DONE"],
"position": "asc",
"created_at": "asc",
"id": "asc"
}
},
"grouped": {
"mode": "per-status",
"page": 1,
"per_page": 25,
"status_filter": null,
"order": {
"position": "asc",
"created_at": "asc",
"id": "asc"
},
"statuses": {
"CONSIDERING": {
"page": 1,
"per_page": 25,
"total_count": 12,
"total_pages": 1,
"returned_count": 12,
"has_next_page": false,
"has_prev_page": false,
"next_page": null,
"prev_page": null
},
"IN_PROGRESS": {
"page": 1,
"per_page": 25,
"total_count": 20,
"total_pages": 1,
"returned_count": 20,
"has_next_page": false,
"has_prev_page": false,
"next_page": null,
"prev_page": null
},
"DONE": {
"page": 1,
"per_page": 25,
"total_count": 15,
"total_pages": 1,
"returned_count": 15,
"has_next_page": false,
"has_prev_page": false,
"next_page": null,
"prev_page": null
}
}
}
}
}/api/v1/projects/:id/grove/cardsCreate a new card in a project's Grove board.
Request body
title*descriptionstatusassigneeIdtagsdueDatePermission required: kanban:write
curl -X POST https://www.thickethq.com/api/v1/projects/PROJECT_ID/grove/cards \
-H "Authorization: Bearer thk_..." \
-H "Content-Type: application/json" \
-H "User-Agent: MyApp ([email protected])" \
-d '{
"title": "Implement feature X",
"status": "IN_PROGRESS"
}'/api/v1/projects/:id/grove/cards/:cardIdGet a single Grove card by ID.
Permission required: kanban:read
/api/v1/projects/:id/grove/cards/:cardIdUpdate a Grove card. Send only the fields you want to change.
Request body (all optional)
titledescriptionstatusassigneeIdarchivedtagsdueDatePermission required: kanban:write
/api/v1/projects/:id/grove/cards/:cardIdPermanently delete a Grove card.
Permission required: kanban:write
/api/v1/projects/:id/grove/cards/:cardId/moveMove a card to a new column and position.
Request body
status*position*Permission required: kanban:write
To-do Lists
To-do lists organize todos within a project. Each list contains ordered todo items.
/api/v1/projects/:id/todolistsList all to-do lists in a project.
Permission required: todos:read
/api/v1/projects/:id/todolistsCreate a new to-do list in a project.
Request body
name*descriptionPermission required: todos:write
curl -X POST https://www.thickethq.com/api/v1/projects/PROJECT_ID/todolists \
-H "Authorization: Bearer thk_..." \
-H "Content-Type: application/json" \
-H "User-Agent: MyApp ([email protected])" \
-d '{
"name": "Launch Checklist"
}'/api/v1/projects/:id/todolists/:listIdGet a single to-do list by ID.
Permission required: todos:read
/api/v1/projects/:id/todolists/:listIdUpdate a to-do list.
Request body
namedescriptionPermission required: todos:write
/api/v1/projects/:id/todolists/:listIdDelete a to-do list and all its todos.
Permission required: todos:write
To-dos
/api/v1/projects/:id/todolists/:listId/todosList all todos in a to-do list.
Query parameters
pageper_pagePermission required: todos:read
/api/v1/projects/:id/todolists/:listId/todosCreate a new todo in a list.
Request body
content*assigneeIddueDatePermission required: todos:write
curl -X POST https://www.thickethq.com/api/v1/projects/PROJECT_ID/todolists/LIST_ID/todos \
-H "Authorization: Bearer thk_..." \
-H "Content-Type: application/json" \
-H "User-Agent: MyApp ([email protected])" \
-d '{
"content": "Review pull request"
}'/api/v1/projects/:id/todos/:todoIdGet a single todo by ID.
Permission required: todos:read
/api/v1/projects/:id/todos/:todoIdUpdate a todo.
Request body (all optional)
contentassigneeIddueDatePermission required: todos:write
/api/v1/projects/:id/todos/:todoIdPermanently delete a todo.
Permission required: todos:write
/api/v1/projects/:id/todos/:todoId/completeMark a todo as complete.
Permission required: todos:write
/api/v1/projects/:id/todos/:todoId/uncompleteMark a todo as incomplete.
Permission required: todos:write
/api/v1/projects/:id/todos/:todoId/positionReorder a todo within its list.
Request body
position*Permission required: todos:write
Messages
Messages are posted to a project's message board. Think announcements, updates, and discussions.
/api/v1/projects/:id/messagesList messages in a project. Returns paginated results.
Query parameters
pageper_pagePermission required: messages:read
/api/v1/projects/:id/messagesCreate a new message.
Request body
title*content*category_idvisible_to_clientsPermission required: messages:write
curl -X POST https://www.thickethq.com/api/v1/projects/PROJECT_ID/messages \
-H "Authorization: Bearer thk_..." \
-H "Content-Type: application/json" \
-H "User-Agent: MyApp ([email protected])" \
-d '{
"title": "Weekly Update",
"content": "Here is what we shipped this week..."
}'/api/v1/projects/:id/messages/:msgIdGet a single message by ID.
Permission required: messages:read
/api/v1/projects/:id/messages/:msgIdUpdate a message.
Request body (all optional)
titlecontentcategory_idvisible_to_clientspinnedPermission required: messages:write
/api/v1/projects/:id/messages/:msgIdTrash a message.
Permission required: messages:write
Schedule
Basecamp-style model: each project has a Schedule tool, and the dated items on it are schedule entries.
/api/v1/projects/:id/scheduleGet the project's Schedule tool. Includes links to the schedule entries collection.
Permission required: schedule:read
/api/v1/projects/:id/schedule/entriesList schedule entries in a project. Returns paginated results. Recurring entries are occurrence-aware — when date filters are provided, only entries with occurrences in the window are returned.
Query parameters
statusactive (default), archived, or trashedstarts_afterstart_datestarts_beforeend_datepageper_pageRecurring entries: When date filters are provided, recurring entries are included only if they have at least one occurrence in the requested window. Recurring entries include next_occurrence and occurrence_end fields — computed relative to the filter window, or relative to now if no date filter is set.
Permission required: schedule:read
/api/v1/projects/:id/schedule/entriesCreate a new schedule entry.
Request body
title*descriptionlocationstart_time*end_time*all_dayvideo_linkrecurrence_ruleFREQ=WEEKLY;BYDAY=MO,WE,FR)participant_idsPermission required: schedule:write
curl -X POST https://www.thickethq.com/api/v1/projects/PROJECT_ID/schedule/entries \
-H "Authorization: Bearer thk_..." \
-H "Content-Type: application/json" \
-H "User-Agent: MyApp ([email protected])" \
-d '{
"title": "Sprint Planning",
"start_time": "2026-03-10T10:00:00Z",
"end_time": "2026-03-10T11:00:00Z",
"location": "Conference Room B",
"recurrence_rule": "FREQ=WEEKLY;BYDAY=TU",
"participant_ids": ["USER_UUID_1", "USER_UUID_2"]
}'/api/v1/projects/:id/schedule/entries/:entryIdGet a single schedule entry by ID. Recurring entries include next_occurrence and occurrence_end fields computed relative to now.
Permission required: schedule:read
/api/v1/projects/:id/schedule/entries/:entryIdUpdate a schedule entry.
Request body (all optional)
titledescriptionlocationstart_timeend_timeall_dayvideo_linkrecurrence_ruleFREQ=DAILY;BYDAY=MO,TU,WE,TH,FR). Set to null to remove recurrence.participant_idsstatusactive, archived, or trashedPermission required: schedule:write
/api/v1/projects/:id/schedule/entries/:entryIdTrash a schedule entry (soft-delete — sets status to trashed).
Permission required: schedule:write
Occurrences
Expand recurring schedule entries into individual occurrences. Inspired by the Basecamp API pattern of date-addressable occurrences.
/api/v1/projects/:id/schedule/entries/:entryId/occurrencesList occurrences of a schedule entry within a date range. For recurring entries, expands the RRULE into individual occurrences. For non-recurring entries, returns the entry itself if it falls within the range.
Query parameters (both required)
starts_after*start_datestarts_before*end_dateResponse: { occurrences: [{ start_time, end_time, schedule_entry }] }
Permission required: schedule:read
curl "https://www.thickethq.com/api/v1/projects/PROJECT_ID/schedule/entries/ENTRY_ID/occurrences?starts_after=2026-04-01&starts_before=2026-04-30" \
-H "Authorization: Bearer thk_..." \
-H "User-Agent: MyApp ([email protected])"/api/v1/projects/:id/schedule/entries/:entryId/occurrences/:dateGet a specific occurrence of a recurring entry by date. The :date parameter must be in YYYYMMDD format. Returns 404 if no occurrence exists on that date.
Permission required: schedule:read
curl "https://www.thickethq.com/api/v1/projects/PROJECT_ID/schedule/entries/ENTRY_ID/occurrences/20260407" \
-H "Authorization: Bearer thk_..." \
-H "User-Agent: MyApp ([email protected])"Documents
Documents are rich text docs in a project's Docs tool. Supports versioning — every title/content change creates a new version.
/api/v1/projects/:id/documentsList documents in a project. Returns paginated results.
Query parameters
statusfolder_idpageper_pagePermission required: docs:read
/api/v1/projects/:id/documentsCreate a new document.
Request body
title*content*statusfolder_idcolorvisible_to_clientsnotify_optionscheduled_forPermission required: docs:write
curl -X POST https://www.thickethq.com/api/v1/projects/PROJECT_ID/documents \
-H "Authorization: Bearer thk_..." \
-H "Content-Type: application/json" \
-H "User-Agent: MyApp ([email protected])" \
-d '{
"title": "Engineering Onboarding Guide",
"content": "Welcome to the team! Here is everything you need...",
"status": "published"
}'/api/v1/projects/:id/documents/:docIdGet a single document by ID. Includes the latest 5 versions.
Permission required: docs:read
/api/v1/projects/:id/documents/:docIdUpdate a document. Creates a new version if title or content changed.
Request body (all optional)
titlecontentstatusfolder_idcolorvisible_to_clientsnotify_optionscheduled_forpositionPermission required: docs:write
/api/v1/projects/:id/documents/:docIdTrash a document.
Permission required: docs:write
Comments
Comments can be added to messages, todos, documents, and schedule entries. Polymorphic — one API for all content types.
/api/v1/projects/:id/commentsList all comments in a project. Optionally filter by content type.
Query parameters
commentable_typecommentable_idpageper_pagePermission required: comments:read
/api/v1/projects/:id/messages/:msgId/commentsAdd a comment to a message.
Request body
content*Permission required: comments:write
curl -X POST https://www.thickethq.com/api/v1/projects/PROJECT_ID/messages/MSG_ID/comments \
-H "Authorization: Bearer thk_..." \
-H "Content-Type: application/json" \
-H "User-Agent: MyApp ([email protected])" \
-d '{
"content": "Great update! Looks like we are on track."
}'/api/v1/projects/:id/todos/:todoId/commentsAdd a comment to a todo.
Request body
content*Permission required: comments:write
/api/v1/projects/:id/documents/:docId/commentsAdd a comment to a document.
Request body
content*Permission required: comments:write
/api/v1/projects/:id/schedule/entries/:entryId/commentsAdd a comment to a schedule entry.
Request body
content*Permission required: comments:write
/api/v1/projects/:id/comments/:commentIdUpdate a comment.
Request body
content*Permission required: comments:write
/api/v1/projects/:id/comments/:commentIdTrash a comment.
Permission required: comments:write
Chat
Project chat rooms (Campfire-style). Post lines, read history. No real-time — poll for new messages.
/api/v1/projects/:id/chatsList chat rooms for a project.
Permission required: chat:read
/api/v1/projects/:id/chats/:chatId/linesList lines in a chat room. Returns paginated results, newest first.
Query parameters
pageper_pagePermission required: chat:read
/api/v1/projects/:id/chats/:chatId/linesPost a new line to a chat room.
Request body
content*reply_to_idPermission required: chat:write
curl -X POST https://www.thickethq.com/api/v1/projects/PROJECT_ID/chats/CHAT_ID/lines \
-H "Authorization: Bearer thk_..." \
-H "Content-Type: application/json" \
-H "User-Agent: MyApp ([email protected])" \
-d '{
"content": "Deploy looks good, shipping it!"
}'/api/v1/projects/:id/chats/:chatId/lines/:lineIdGet a single chat line by ID.
Permission required: chat:read
/api/v1/projects/:id/chats/:chatId/lines/:lineIdTrash a chat line.
Permission required: chat:write
People
People in your organization and project members.
/api/v1/peopleList all people in your organization.
Permission required: people:read
/api/v1/people/:personIdGet a single person by ID.
Permission required: people:read
/api/v1/projects/:id/membersList explicit project members. Alias: /api/v1/projects/:id/people
Permission required: people:read
/api/v1/projects/:id/membersAdd an explicit project member. Alias: /api/v1/projects/:id/people
Request body
person_idemailWho can add people: internal non-client team users with project access, plus organization admin and owner roles even on invite-only projects they are not already a member of.
Who cannot: collaborators and clients cannot manage project membership even if they can read the project.
Identity input: send either person_id or email, not both.
curl -X POST https://www.thickethq.com/api/v1/projects/PROJECT_ID/people \
-H "Authorization: Bearer thk_..." \
-H "Content-Type: application/json" \
-H "User-Agent: MyApp ([email protected])" \
-d '{
"person_id": "PERSON_ID"
}'curl -X POST https://www.thickethq.com/api/v1/projects/PROJECT_ID/people \
-H "Authorization: Bearer thk_..." \
-H "Content-Type: application/json" \
-H "User-Agent: MyApp ([email protected])" \
-d '{
"email": "[email protected]"
}'This resolves the email against organization membership first, then adds that person as an explicit project member.
Permission required: projects:write
/api/v1/projects/:id/members/meAdd yourself as an explicit project member. Alias: /api/v1/projects/:id/people/me
Who can use it: the same internal non-client team users who are allowed to manage project membership, including organization admins/owners for invite-only projects.
Why it exists: use this when the caller cannot conveniently resolve their own person UUID client-side.
curl -X POST https://www.thickethq.com/api/v1/projects/PROJECT_ID/people/me \
-H "Authorization: Bearer thk_..." \
-H "User-Agent: MyApp ([email protected])"Permission required: projects:write
/api/v1/projects/:id/members/:personIdRemove an explicit project member. Alias: /api/v1/projects/:id/people/:personId
Who can remove people: internal non-client team users with project access, plus organization admin and owner roles even on invite-only projects they are not already a member of.
Creator protection: the project creator cannot be removed.
Permission required: projects:write
/api/v1/my/profileGet your own profile. No special permission required — any valid token works.
curl https://www.thickethq.com/api/v1/my/profile \
-H "Authorization: Bearer thk_..." \
-H "User-Agent: MyApp ([email protected])"Webhooks
Webhooks notify your application in real-time when scheduleEntries happen in Thicket. Configure an HTTPS endpoint and we'll POST scheduleEntry payloads to it with an HMAC-SHA256 signature for verification.
Verifying webhook signatures
Each delivery includes an X-Webhook-Signature header with format sha256=HMAC_HEX. Compute HMAC-SHA256 of the raw request body using your webhook secret and compare with a timing-safe equality check.
Available scheduleEntries
Task scheduleEntries
task.created— a new task was createdtask.updated— a task's fields were changedtask.completed— a task was marked as completetask.deleted— a task was permanently deleted
Card scheduleEntries
card.created— a new card was added to a Grove boardcard.updated— a card's fields were changed (title, description, assignee, etc.)card.moved— a card was moved to a different columncard.deleted— a card was permanently deleted
Delivery behavior
- Deliveries timeout after 10 seconds
- Failed deliveries retry up to 3 times with exponential backoff (0s, 10s, 60s)
- 4xx responses are not retried (considered permanent failures)
- Maximum 10 active webhooks per organization
/api/v1/webhooks?organizationId=...List active webhooks for an organization.
Requires: admin or owner role (session auth)
/api/v1/webhooksCreate a new webhook. Returns the signing secret once — store it securely.
Request body
organizationId*url*eventsRequires: admin or owner role (session auth). Max 10 active webhooks per org.
# Example webhook payload POSTed to your URL
{
"event": "card.created",
"created_at": "2026-02-27T18:30:00.000Z",
"data": {
"card": {
"id": "...",
"title": "Implement feature X",
"status": "IN_PROGRESS"
},
"project_id": "project-uuid",
"tool_id": "grove-board-uuid"
}
}/api/v1/webhooks/:webhookIdGet webhook details and recent delivery history (last 25 deliveries).
Requires: admin or owner role (session auth)
/api/v1/webhooks/:webhookIdUpdate a webhook's URL, scheduleEntries, or active status.
Request body (all optional)
urleventsactiveRequires: admin or owner role (session auth)
/api/v1/webhooks/:webhookIdPermanently delete a webhook and its delivery history.
Requires: admin or owner role (session auth)
Token Management
These endpoints require session authentication (browser) and admin or owner role in the organization.
/api/v1/tokens?organizationId=...List active API tokens for an organization.
Requires: admin or owner role (session auth)
/api/v1/tokensCreate a new API token. Returns the token value once — store it securely.
Request body
organizationId*name*permissionsexpiresAtRequires: admin or owner role (session auth). Max 25 active tokens per org.
/api/v1/tokens/:tokenIdRevoke a token. Takes effect immediately.
Requires: admin or owner role (session auth)
Permissions
API tokens are scoped with permissions selected at creation time:
| Permission | Access |
|---|---|
projects:read | Read projects |
projects:write | Create, update, delete, and manage project access and members |
tools:read | Read tools within projects |
tools:write | Create, update, enable/disable, reorder, and delete tools |
kanban:read | Read Grove cards and board data |
kanban:write | Create, update, move, and delete Grove cards |
todos:read | Read to-do lists and todos |
todos:write | Create, update, complete, reorder, and delete todos and lists |
messages:read | Read messages and categories |
messages:write | Create, update, pin, and delete messages |
schedule:read | Read scheduled entries |
schedule:write | Create, update, and delete entries |
docs:read | Read documents and folders |
docs:write | Create, update, and delete documents |
comments:read | Read comments on any content type |
comments:write | Create, update, and delete comments |
chat:read | Read chat rooms and lines |
chat:write | Post and delete chat lines |
people:read | Read organization members and project people |
Questions about the API? Get in touch.