Nifty integration
Nifty is a project management workspace. Through its v3 API an agent can list, search, create, update and delete projects, tasks (with subtasks, checklists, assignees, labels and connected tasks), lists, statuses, portfolios, project folders, documents (read, append to and edit their Markdown body), files (from a public URL or base64 content), chat messages, check-ins, goals, reminders, recurring rules, time entries and webhooks, and read members, actors, forms, custom fields and project activity. Personal favorites, presence statuses, dashboards and report charts, roles, member invitation, editing and removal, file subscribers, per-member visibility lists, image annotations, check-in requests, goal groups, restore-from-trash, the presigned two-step file upload, and webhook test deliveries and secret rotation are not exposed. Member, actor, message and time-entry tools return personal data (names, email addresses, message text). Authentication is a Personal Access Token (Settings, API Tokens) or an OAuth access token, sent as a Bearer token; each tool needs the scope its description names.
Say what should happen.
The workflow builds itself.
What you can do with Nifty
Each of these is one operation on one endpoint, available both as a workflow step and as a tool an AI agent can call on its own. Nothing bundles several operations into one action, so what a run did stays readable afterwards.
Most endpoints run on the free plan. A few, mainly the ones that publish on your behalf, need a paid plan.
Remove, 10 operations
remove_check_in_assigneesRemove check in assigneesPOSTUnlink the given ids from this Check-in's assignees. Removing one that is not linked changes nothing. Returns the complete assignees set afterwards. Required scopes: `check-ins:write` `check-ins:link`remove_check_in_subscribersRemove check in subscribersPOSTUnlink the given ids from this Check-in's subscribers. Removing one that is not linked changes nothing. Returns the complete subscribers set afterwards. Required scopes: `check-ins:write` `check-ins:link`remove_document_labelsRemove document labelsPOSTUnlink the given ids from this Document's labels. Removing one that is not linked changes nothing. Returns the complete labels set afterwards. Required scopes: `documents:write` `documents:link`remove_file_labelsRemove file labelsPOSTUnlink the given ids from this File's labels. Removing one that is not linked changes nothing. Returns the complete labels set afterwards. Required scopes: `files:write` `files:link`remove_list_assigneesRemove list assigneesPOSTUnlink the given ids from this List's assignees. Removing one that is not linked changes nothing. Returns the complete assignees set afterwards. Required scopes: `lists:write` `lists:link`remove_list_goalsRemove list goalsPOSTUnlink the given ids from this List's goals. Removing one that is not linked changes nothing. Returns the complete goals set afterwards. Required scopes: `lists:write` `lists:link`remove_portfolio_membersRemove portfolio membersPOSTUnlink the given ids from this Portfolio's members. Removing one that is not linked changes nothing. Returns the complete members set afterwards. Required scopes: `portfolios:write` `portfolios:link`remove_project_membersRemove project membersPOSTRemove a member from this project. Required scope: `projects:delete`remove_status_assigneesRemove status assigneesPOSTUnlink the given ids from this Status's assignees. Removing one that is not linked changes nothing. Returns the complete assignees set afterwards. Required scopes: `statuses:write` `statuses:link`remove_task_assigneesRemove task assigneesPOSTUnlink the given ids from this Task's assignees. Removing one that is not linked changes nothing. Returns the complete assignees set afterwards. Required scopes: `tasks:write` `tasks:link`
Label, 7 operations
add_document_labelsAdd document labelsPOSTLink the given ids to this Document as labels. Adds to the existing set rather than replacing it, and adding one that is already linked changes nothing. Returns the complete labels set afterwards. Required scopes: `documents:write` `documents:link`add_file_labelsAdd file labelsPOSTLink the given ids to this File as labels. Adds to the existing set rather than replacing it, and adding one that is already linked changes nothing. Returns the complete labels set afterwards. Required scopes: `files:write` `files:link`add_task_labelsAdd task labelsPOSTLink the given ids to this Task as labels. Adds to the existing set rather than replacing it, and adding one that is already linked changes nothing. Returns the complete labels set afterwards. Required scopes: `tasks:write` `tasks:link`create_labelCreate labelPOSTCreate a Label. Server-assigned fields are ignored if sent. Send at least one of `name` or `color`; an empty body is rejected. Label names are unique per workspace among live labels, so reusing one returns 409. Required scope: `labels:write`delete_labelDelete labelDELETEMove this Label to trash. It disappears from list results immediately and is permanently purged after a 30-day retention window; until then it can be restored. Required scope: `labels:delete`get_labelGet labelGETRetrieve a single Label by id. Required scope: `labels:read`list_labelsList labelsGETList labels. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 5 fields. Ordered by `createdAt` unless you pass `sort`. Required scope: `labels:read`
Goal, 5 operations
add_list_goalsAdd list goalsPOSTLink the given ids to this List as goals. Adds to the existing set rather than replacing it, and adding one that is already linked changes nothing. Returns the complete goals set afterwards. Required scopes: `lists:write` `lists:link`create_goalCreate goalPOSTCreate a Goal. Server-assigned fields are ignored if sent. Requires a human-backed identity, a user session or a personal access token. Application and agent tokens receive 403 here; they can read goals but not change them.delete_goalDelete goalDELETEPermanently delete this Goal. This cannot be undone. Requires a human-backed identity, a user session or a personal access token. Application and agent tokens receive 403 here; they can read goals but not change them. Required scope: `goals:delete`get_goalGet goalGETRetrieve a single Goal by id. Required scope: `goals:read`list_goalsList goalsGETList goals. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 6 fields. Ordered by `createdAt` unless you pass `sort`. Required scope: `goals:read`
Assignee, 4 operations
add_check_in_assigneesAdd check in assigneesPOSTLink the given ids to this Check-in as assignees. Adds to the existing set rather than replacing it, and adding one that is already linked changes nothing. Returns the complete assignees set afterwards.add_list_assigneesAdd list assigneesPOSTLink the given ids to this List as assignees. Adds to the existing set rather than replacing it, and adding one that is already linked changes nothing. Returns the complete assignees set afterwards. Required scopes: `lists:write` `lists:link`add_status_assigneesAdd status assigneesPOSTLink the given ids to this Status as assignees. Adds to the existing set rather than replacing it, and adding one that is already linked changes nothing. Returns the complete assignees set afterwards. Required scopes: `statuses:write` `statuses:link`add_task_assigneesAdd task assigneesPOSTLink the given ids to this Task as assignees. Adds to the existing set rather than replacing it, and adding one that is already linked changes nothing. Returns the complete assignees set afterwards. Required scopes: `tasks:write` `tasks:link`
Chat, 4 operations
create_chatCreate chatPOSTCreate a Chat. Server-assigned fields are ignored if sent. Required scope: `chats:write`delete_chatDelete chatDELETEPermanently delete this Chat. This cannot be undone. Every message in the chat is deleted with it. Required scope: `chats:delete`get_chatGet chatGETRetrieve a single Chat by id. Required scope: `chats:read`list_chatsList chatsGETList chats. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 5 fields. Ordered by `lastMessageAt` unless you pass `sort`. Required scope: `chats:read`
Check in, 4 operations
create_check_inCreate check inPOSTCreate a Check-in. Server-assigned fields are ignored if sent. Required scope: `check-ins:write`delete_check_inDelete check inDELETEPermanently delete this Check-in. This cannot be undone. Required scope: `check-ins:delete`get_check_inGet check inGETRetrieve a single Check-in by id. Required scope: `check-ins:read`list_check_insList check insGETList checkIns. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 7 fields. Ordered by `-createdAt` unless you pass `sort`. Required scope: `check-ins:read`
Checklist, 4 operations
create_checklistCreate checklistPOSTCreate a Checklist. Server-assigned fields are ignored if sent. Required scope: `checklists:write`delete_checklistDelete checklistDELETEPermanently delete this Checklist. This cannot be undone. Required scope: `checklists:delete`get_checklistGet checklistGETRetrieve a single Checklist by id. Required scope: `checklists:read`list_checklistsList checklistsGETList checklists. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 3 fields. Ordered by `order` unless you pass `sort`. Required scope: `checklists:read`
Checklist item, 4 operations
create_checklist_itemCreate checklist itemPOSTCreate a Checklist Item. Server-assigned fields are ignored if sent. Required scope: `checklist-items:write`delete_checklist_itemDelete checklist itemDELETEPermanently delete this Checklist Item. This cannot be undone. Required scope: `checklist-items:delete`get_checklist_itemGet checklist itemGETRetrieve a single Checklist Item by id. Required scope: `checklist-items:read`list_checklist_itemsList checklist itemsGETList checklistItems. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 4 fields. Ordered by `order` unless you pass `sort`. Required scope: `checklist-items:read`
Document, 4 operations
create_documentCreate documentPOSTCreate a Document. Server-assigned fields are ignored if sent. Required scope: `documents:write`delete_documentDelete documentDELETEMove this Document to trash. It disappears from list results immediately and is permanently purged after a 30-day retention window; until then it can be restored. Required scope: `documents:delete`get_documentGet documentGETRetrieve a single Document by id. Required scope: `documents:read`list_documentsList documentsGETList documents. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 9 fields. Ordered by `createdAt` unless you pass `sort`. Required scope: `documents:read`
List, 4 operations
create_listCreate listPOSTCreate a List. Server-assigned fields are ignored if sent. Required scope: `lists:write`delete_listDelete listDELETEPermanently delete this List. This cannot be undone. Required scope: `lists:delete`get_listGet listGETRetrieve a single List by id. Required scope: `lists:read`list_listsList listsGETList lists. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 11 fields. Ordered by `order` unless you pass `sort`. Required scope: `lists:read`
Member, 4 operations
add_portfolio_membersAdd portfolio membersPOSTLink the given ids to this Portfolio as members. Adds to the existing set rather than replacing it, and adding one that is already linked changes nothing. Returns the complete members set afterwards.add_project_membersAdd project membersPOSTAdd an existing team member to this project. Required scope: `projects:write`get_memberGet memberGETRetrieve one team member by id. Returns personal data: name, email address, avatar, time zone and working hours. Required scope: members:readlist_membersList membersGETList team members as a paginated envelope (data, total, limit, hasMore, nextCursor). Returns personal data: names, email addresses, avatars, time zones. Filterable by name, email, online and pending. Required scope: members:read
Message, 4 operations
create_messageCreate messagePOSTPost a message. Send exactly one parent: chatId, taskId, documentId, fileId, parentMessageId (a reply), or recipientMemberId for a direct message. Messages are personal data of their author. Required scope: `messages:write`delete_messageDelete messageDELETEMove this Message to trash. It disappears from list results immediately and is permanently purged after a 30-day retention window; until then it can be restored. Required scope: `messages:delete`get_messageGet messageGETRetrieve a single message by id. Returns personal data: the message text and its author. Required scope: `messages:read`list_messagesList messagesGETList messages (chat and direct messages, comments on tasks, documents and files) as a paginated envelope. Returns personal data: message text and authors. Ordered by `-createdAt` unless you pass `sort`. Required scope: `messages:read`
Portfolio, 4 operations
create_portfolioCreate portfolioPOSTCreate a Portfolio. Server-assigned fields are ignored if sent. Required scope: `portfolios:write`delete_portfolioDelete portfolioDELETEMove this Portfolio to trash. It disappears from list results immediately and is permanently purged after a 30-day retention window; until then it can be restored. Required scope: `portfolios:delete`get_portfolioGet portfolioGETRetrieve a single Portfolio by id. Required scope: `portfolios:read`list_portfoliosList portfoliosGETList portfolios. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 5 fields. Ordered by `order` unless you pass `sort`. Required scope: `portfolios:read`
Project, 4 operations
create_projectCreate projectPOSTCreate a Project. Server-assigned fields are ignored if sent. Required scope: `projects:write`delete_projectDelete projectDELETEMove this Project to trash. It disappears from list results immediately and is permanently purged after a 30-day retention window; until then it can be restored. Required scope: `projects:delete`get_projectGet projectGETRetrieve a single Project by id. Required scope: `projects:read`list_projectsList projectsGETList projects. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 6 fields. Ordered by `order` unless you pass `sort`. Required scope: `projects:read`
Project folder, 4 operations
create_project_folderCreate project folderPOSTCreate a Project Folder. Server-assigned fields are ignored if sent. Required scope: `project-folders:write`delete_project_folderDelete project folderDELETEPermanently delete this Project Folder. This cannot be undone. The projects filed in the folder are NOT deleted, they become unfiled (`projectFolderId: null`). Required scope: `project-folders:delete`get_project_folderGet project folderGETRetrieve a single Project Folder by id. Required scope: `project-folders:read`list_project_foldersList project foldersGETList projectFolders. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 3 fields. Ordered by `order` unless you pass `sort`. Required scope: `project-folders:read`
Recurring rule, 4 operations
create_recurring_ruleCreate recurring rulePOSTCreate a Recurring Rule. Server-assigned fields are ignored if sent. Required scope: `recurring-rules:write`delete_recurring_ruleDelete recurring ruleDELETEPermanently delete this Recurring Rule. This cannot be undone. Required scope: `recurring-rules:delete`get_recurring_ruleGet recurring ruleGETRetrieve a single Recurring Rule by id. Required scope: `recurring-rules:read`list_recurring_rulesList recurring rulesGETList recurringRules. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 4 fields. Ordered by `createdAt` unless you pass `sort`. Required scope: `recurring-rules:read`
Reminder, 4 operations
create_reminderCreate reminderPOSTCreate a Reminder. Server-assigned fields are ignored if sent. Required scope: `reminders:write`delete_reminderDelete reminderDELETEPermanently delete this Reminder. This cannot be undone. Required scope: `reminders:delete`get_reminderGet reminderGETRetrieve a single Reminder by id. Required scope: `reminders:read`list_remindersList remindersGETList reminders. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 4 fields. Ordered by `date` unless you pass `sort`. Required scope: `reminders:read`
Status, 4 operations
create_statusCreate statusPOSTCreate a Status. Server-assigned fields are ignored if sent. Required scope: `statuses:write`delete_statusDelete statusDELETEPermanently delete this Status. This cannot be undone. Required scope: `statuses:delete`get_statusGet statusGETRetrieve a single Status by id. Required scope: `statuses:read`list_statusesList statusesGETList statuses. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 5 fields. Ordered by `order` unless you pass `sort`. Required scope: `statuses:read`
Task, 4 operations
create_taskCreate taskPOSTCreate a Task. Server-assigned fields are ignored if sent. Required scope: `tasks:write`delete_taskDelete taskDELETEPermanently delete this Task. This cannot be undone. Required scope: `tasks:delete`get_taskGet taskGETRetrieve a single Task by id. Required scope: `tasks:read`list_tasksList tasksGETList tasks. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 22 fields. Ordered by `order` unless you pass `sort`. Required scope: `tasks:read`
Task handoff, 4 operations
create_task_handoffCreate task handoffPOSTCreate a Handoff. Server-assigned fields are ignored if sent. Required scope: `task-handoffs:write`delete_task_handoffDelete task handoffDELETEPermanently delete this Handoff. This cannot be undone. Required scope: `task-handoffs:delete`get_task_handoffGet task handoffGETRetrieve a single Handoff by id. Required scope: `task-handoffs:read`list_task_handoffsList task handoffsGETList taskHandoffs. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 3 fields. Ordered by `-createdAt` unless you pass `sort`. Required scope: `task-handoffs:read`
Time entry, 4 operations
create_time_entryCreate time entryPOSTCreate a Time Entry. Server-assigned fields are ignored if sent. Required scope: `time-entries:write`delete_time_entryDelete time entryDELETEPermanently delete this Time Entry. This cannot be undone. Required scope: `time-entries:delete`get_time_entryGet time entryGETRetrieve a single Time Entry by id. By default only your own entries are reachable here. With viewTimeReports on your role, so is any entry in your team, get widens exactly as list does, so a row you can see in list is a row you can fetch by id.list_time_entriesList time entriesGETList time entries as a paginated envelope. Returns personal data: who tracked time and when. Your own entries by default; with viewTimeReports on your role, every entry in your team (filter memberId for one person).
Webhook, 4 operations
create_webhookCreate webhookPOSTRegister a webhook that POSTs matching workspace events to an https URL. Nifty shows the signing secret once; it is not passed back here, so deliveries cannot be verified from this connection. Required scope: `webhooks:write`delete_webhookDelete webhookDELETEMove this Webhook to trash. It disappears from list results immediately and is permanently purged after a 30-day retention window; until then it can be restored. Required scope: `webhooks:delete`get_webhookGet webhookGETRetrieve a single Webhook by id. Required scope: `webhooks:read`list_webhooksList webhooksGETList webhooks. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 4 fields. Ordered by `-createdAt` unless you pass `sort`. Required scope: `webhooks:read`
File, 3 operations
delete_fileDelete fileDELETEMove this File to trash. It disappears from list results immediately and is permanently purged after a 30-day retention window; until then it can be restored. Required scope: `files:delete`get_fileGet fileGETRetrieve a single File by id. Required scope: `files:read`list_filesList filesGETList files. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 12 fields. Ordered by `-createdAt` unless you pass `sort`. Required scope: `files:read`
Actor, 2 operations
get_actorGet actorGETRetrieve a single actor by id (the UUID found in createdByActorId and updatedByActorId). Returns personal data: a person's display name. Required scope: `actors:read`list_actorsList actorsGETList actors, the people, agents and server processes that write records, as a paginated envelope. Returns personal data: people's display names. Ordered by `displayName` unless you pass `sort`. Required scope: `actors:read`
Custom field, 2 operations
get_custom_fieldGet custom fieldGETRetrieve a single Custom Field by id. Required scope: `custom-fields:read`list_custom_fieldsList custom fieldsGETList customFields. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 4 fields. Ordered by `name` unless you pass `sort`. Required scope: `custom-fields:read`
Form, 2 operations
get_formGet formGETRetrieve a single Form by id. Required scope: `forms:read`list_formsList formsGETList forms. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 6 fields. Ordered by `createdAt` unless you pass `sort`. Required scope: `forms:read`
Project activity, 2 operations
get_project_activityGet project activityGETRetrieve a single Project activity by id. Required scope: `project-activities:read`list_project_activitiesList project activitiesGETList projectActivities. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 8 fields. Ordered by `-createdAt` unless you pass `sort`. Required scope: `project-activities:read`
Subscriber, 2 operations
add_check_in_subscribersAdd check in subscribersPOSTLink the given ids to this Check-in as subscribers. Adds to the existing set rather than replacing it, and adding one that is already linked changes nothing. Returns the complete subscribers set afterwards.add_task_subscribersAdd task subscribersPOSTLink the given ids to this Task as subscribers. Adds to the existing set rather than replacing it, and adding one that is already linked changes nothing. Returns the complete subscribers set afterwards. Required scopes: `tasks:write` `tasks:link`
Append, 1 operation
append_documentAppend documentPOSTAppend Markdown to the END of a document's body; never overwrites what is there. update_document cannot change the body; to change or delete existing text use edit_document_text. Required scope: `documents:write`
Attach document, 1 operation
attach_document_to_taskAttach document to taskPOSTAttach an existing document to this task (id = the task, documentId = the document; both must already exist in the same workspace). Idempotent, re-attaching is a no-op. Task assignees gain access to the document. Required scope: `tasks:write`
Connected task, 1 operation
add_task_connected_tasksAdd task connected tasksPOSTLink the given ids to this Task as connectedTasks. Adds to the existing set rather than replacing it, and adding one that is already linked changes nothing. Returns the complete connectedTasks set afterwards.
Content, 1 operation
get_document_contentGet document contentGETRead a document body as Markdown, the rich-text content, which list and get do not return.
Create from content, 1 operation
create_file_from_contentCreate file from contentPOSTCreate a file from inline base64 content (max 3 MB decoded) in one call. `name` needs the file extension. Pass at least one parent: taskId, projectId, documentId, messageId or folderId. Required scope: `files:write`
Create tree, 1 operation
create_task_treeCreate task treePOSTCreate a task with its subtasks and their checklists in one atomic call, no id-threading, no half-built trees. Required scope: `tasks:write`
Delivery, 1 operation
list_webhook_deliveriesList webhook deliveriesGETList recent delivery attempts for this webhook, newest first, what was sent, whether the endpoint accepted it, and why it failed if it did not. Attempts are kept for 30 days. Required scope: `webhooks:read`
Detach document, 1 operation
detach_document_from_taskDetach document from taskPOSTDetach a previously attached document from this task (id = the task, documentId = the document). Idempotent. Required scope: `tasks:write`
Edit text, 1 operation
edit_document_textEdit document textPOSTReplace exact text in a document's body, the way to EDIT existing content (append_document only adds to the end, update_document cannot touch the body). Read the text first with get_document_content. Required scope: `documents:write`
Showing the first 120 of 157 endpoints. The rest are in the product, searchable from the workflow builder and from chat.
Use Nifty from Claude Code, Cursor or Codex
Connect Nifty in LiveContext, create an API key in Settings, then add the LiveContext MCP server to your client. Its Nifty operations become tools the client can call, next to every other integration you connected.
claude mcp add --transport http livecontext https://livecontext.ai/mcp --header "X-API-Key: YOUR_API_KEY"[mcp_servers.livecontext]
url = "https://livecontext.ai/mcp"
[mcp_servers.livecontext.http_headers]
"X-API-Key" = "YOUR_API_KEY"{
"mcpServers": {
"livecontext": {
"type": "http",
"url": "https://livecontext.ai/mcp",
"headers": {
"X-API-Key": "YOUR_API_KEY"
}
}
}
}How to connect Nifty
- Create your workspace
Sign up free. Nothing to install.
- Connect Nifty once
Add your Nifty connection in Settings. Every tool from this integration reuses it, and secrets are encrypted at rest and visible only to you.
- Describe the job in chat
The workflow builds itself in front of you and picks the endpoints it needs. Drag the steps yourself on the canvas whenever you would rather be explicit.
Nifty integration FAQ
What can you do with the Nifty integration?
LiveContext exposes 157 operations on Nifty, covering remove, label, goal and assignee.
