MCP App Store
Productivity
Tallyfy Workflow Automation icon

Tallyfy Workflow Automation

by Tallyfy, Inc.

Overview

Run your operations from your AI assistant. Launch workflows, complete tasks, manage approvals, search across your organization, and update templates in Tallyfy from natural conversation. 113 tools across 14 categories plus AI helpers for template generation from prompts, documents, and images. OAuth 2.1 with DCR. GA SaaS since 2014.

Tools

add_assignees_to_step

ChatGPT
Add assignees (users or guests or both) to a specific step in a template. REQUIRED: 'template_id' (32-char hex), 'step_id' (32-char hex), and 'assignees'. 'assignees' accepts the following format: Dict with 'users' and/or 'guests' keys (to add guests by email): assignees: {"users": [10026], "guests": ["alice@example.com"]} assignees: {"guests": ["alice@example.com"]} assignees: {"users": [10026]} Never call this without all three parameters.

add_assignees_to_step

ChatGPT
Add assignees (users or guests or both) to a specific step in a template. REQUIRED: 'template_id' (32-char hex), 'step_id' (32-char hex), and 'assignees'. 'assignees' accepts the following format: Dict with 'users' and/or 'guests' keys (to add guests by email): assignees: {"users": [10026], "guests": ["alice@example.com"]} assignees: {"guests": ["alice@example.com"]} assignees: {"users": [10026]} Never call this without all three parameters.

add_form_field_to_step

ChatGPT
Add form fields (text, dropdown, date, etc.) to a step. REQUIRED: 'template_id' (32-char hex), 'step_id' (32-char hex), and 'field_data' (dict). SUPPORTED field_type ENUM (9 values — must be one of these exactly): - text single-line text input - textarea multi-line text input (free-form notes) - date date picker (yyyy-mm-dd) - dropdown single-select from a list of options - multiselect multi-select from a list of options (checkbox-style) - radio single-select radio buttons (mutually exclusive) - file file upload - table tabular data with named columns (REQUIRES columns list) - assignees_form member/assignee picker (the "person" field type) CONVENIENCE ALIASES (auto-resolved): assignee, assignee_picker, member, member_pickerassignees_form. CONDITIONAL REQUIRED field_data KEYS (per field_type): - dropdown / radio / multiselect: REQUIRE options — list of {text|label, optional id} - table: REQUIRES columns — list of {label, optional id} (id auto-assigned sequentially if omitted) ALWAYS-REQUIRED field_data KEYS: field_type, label, required (bool). Optional: description, placeholder, validation, position, alias. CORRECT usage: add_form_field_to_step(template_id="abc...", step_id="def...", field_data={"field_type":"dropdown","label":"Priority","required":True, "options":[{"id":1,"text":"High"},{"id":2,"text":"Medium"},{"id":3,"text":"Low"}]}) add_form_field_to_step(template_id="abc...", step_id="def...", field_data={"field_type":"text","label":"Customer Name","required":True}) Never call this without all three parameters.

add_form_field_to_step

ChatGPT
Add form fields (text, dropdown, date, etc.) to a step. REQUIRED: 'template_id' (32-char hex), 'step_id' (32-char hex), and 'field_data' (dict). SUPPORTED field_type ENUM (9 values — must be one of these exactly): - text single-line text input - textarea multi-line text input (free-form notes) - date date picker (yyyy-mm-dd) - dropdown single-select from a list of options - multiselect multi-select from a list of options (checkbox-style) - radio single-select radio buttons (mutually exclusive) - file file upload - table tabular data with named columns (REQUIRES columns list) - assignees_form member/assignee picker (the "person" field type) CONVENIENCE ALIASES (auto-resolved): assignee, assignee_picker, member, member_pickerassignees_form. CONDITIONAL REQUIRED field_data KEYS (per field_type): - dropdown / radio / multiselect: REQUIRE options — list of {text|label, optional id} - table: REQUIRES columns — list of {label, optional id} (id auto-assigned sequentially if omitted) ALWAYS-REQUIRED field_data KEYS: field_type, label, required (bool). Optional: description, placeholder, validation, position, alias. CORRECT usage: add_form_field_to_step(template_id="abc...", step_id="def...", field_data={"field_type":"dropdown","label":"Priority","required":True, "options":[{"id":1,"text":"High"},{"id":2,"text":"Medium"},{"id":3,"text":"Low"}]}) add_form_field_to_step(template_id="abc...", step_id="def...", field_data={"field_type":"text","label":"Customer Name","required":True}) Never call this without all three parameters.

add_kickoff_field

ChatGPT
Add a form field to a template's kickoff (prerun) form. Kickoff fields are filled out BEFORE a process starts — they collect initialization data (e.g. customer name, start date, priority). This is different from step form fields which are filled out DURING the process. REQUIRED: 'template_id' (32-char hex) and 'field_data' (dict). SUPPORTED field_type ENUM (same as step fields): text, textarea, date, dropdown, multiselect, radio, file, table, assignees_form CONVENIENCE ALIASES: assignee, assignee_picker, member, member_picker → assignees_form CONDITIONAL REQUIRED field_data KEYS: - dropdown / radio / multiselect: REQUIRE options — list of {text, optional id} - table: REQUIRES columns — list of {label, optional id} ALWAYS-REQUIRED field_data KEYS: field_type, label, required (bool). Optional: guidance, position, collect_time, use_wysiwyg_editor, field_validation, default_value, default_value_enabled, prefix, suffix, settings. CORRECT usage: add_kickoff_field(template_id="abc...", field_data={"field_type":"text","label":"Customer Name","required":true}) add_kickoff_field(template_id="abc...", field_data={"field_type":"dropdown","label":"Priority","required":true, "options":[{"id":1,"text":"High"},{"id":2,"text":"Medium"},{"id":3,"text":"Low"}]}) Never call this without both parameters.

add_kickoff_field

ChatGPT
Add a form field to a template's kickoff (prerun) form. Kickoff fields are filled out BEFORE a process starts — they collect initialization data (e.g. customer name, start date, priority). This is different from step form fields which are filled out DURING the process. REQUIRED: 'template_id' (32-char hex) and 'field_data' (dict). SUPPORTED field_type ENUM (same as step fields): text, textarea, date, dropdown, multiselect, radio, file, table, assignees_form CONVENIENCE ALIASES: assignee, assignee_picker, member, member_picker → assignees_form CONDITIONAL REQUIRED field_data KEYS: - dropdown / radio / multiselect: REQUIRE options — list of {text, optional id} - table: REQUIRES columns — list of {label, optional id} ALWAYS-REQUIRED field_data KEYS: field_type, label, required (bool). Optional: guidance, position, collect_time, use_wysiwyg_editor, field_validation, default_value, default_value_enabled, prefix, suffix, settings. CORRECT usage: add_kickoff_field(template_id="abc...", field_data={"field_type":"text","label":"Customer Name","required":true}) add_kickoff_field(template_id="abc...", field_data={"field_type":"dropdown","label":"Priority","required":true, "options":[{"id":1,"text":"High"},{"id":2,"text":"Medium"},{"id":3,"text":"Low"}]}) Never call this without both parameters.

add_object_to_folder

ChatGPT
Add a process or template to a folder. REQUIRED: 'folder_id', 'object_id' (32-char hex ID of the process or template), and 'object_type' ('run' for processes, 'checklist' or 'template' for templates). Never call this without all three parameters.

add_object_to_folder

ChatGPT
Add a process or template to a folder. REQUIRED: 'folder_id', 'object_id' (32-char hex ID of the process or template), and 'object_type' ('run' for processes, 'checklist' or 'template' for templates). Never call this without all three parameters.

add_step_to_template

ChatGPT
Add a new step to a template with configurable properties like assignees, deadlines, and workflow settings. REQUIRED: 'template_id' (32-char hex) and 'step_data' (dict with 'title' field - other fields optional). Never call this without both parameters.

add_step_to_template

ChatGPT
Add a new step to a template with configurable properties like assignees, deadlines, and workflow settings. REQUIRED: 'template_id' (32-char hex) and 'step_data' (dict with 'title' field - other fields optional). Never call this without both parameters.

add_task_comment

ChatGPT
Add a comment to a task. REQUIRED: 'task_id' (32-char hex) and 'content' (comment text). Optional: - 'run_id': process/run ID — pass it if you have it; you'll need it to call 'get_task_comments' later - 'label': "comment" (default) | "problem" | "resolve" | "improvement" | "advice" - 'state': "open" (default) | "hide-for-guests" | "collapsed" - 'sent_to': list of user IDs (integers) to @mention and notify. Look up user IDs first via get_organization_users or get_organization_users_list, then pass them here. Example: sent_to=[20059, 20033] LABEL='resolve' SEMANTICS (issue #172): - If the task HAS an open problem flag (an existing thread with label='problem' that has not been resolved), this tool automatically clears that flag by routing through the resolve endpoint, matching the native Tallyfy app's behaviour. Pass 'run_id' when available to avoid an extra API lookup. - If the task has NO open problem flag, label='resolve' is cosmetic only — the comment is stored with the resolve label but no problem flag is cleared (because there is nothing to clear). The function logs a WARNING in that case so the cosmetic outcome is visible in logs. - To explicitly clear a specific known problem thread without posting a separate comment, call resolve_task_issues(task_id, thread_id) directly — that path is unambiguous and returns the resolution outcome. CORRECT usage: add_task_comment(task_id="abc123...", content="Everything is on track") add_task_comment(task_id="abc123...", run_id="def456...", content="Blocked on approval", label="problem") add_task_comment(task_id="abc123...", run_id="def456...", content="Issue resolved", label="resolve") add_task_comment(task_id="abc123...", content="Please review", sent_to=[20059]) Never call this without both required parameters.

add_task_comment

ChatGPT
Add a comment to a task. REQUIRED: 'task_id' (32-char hex) and 'content' (comment text). Optional: - 'run_id': process/run ID — pass it if you have it; you'll need it to call 'get_task_comments' later - 'label': "comment" (default) | "problem" | "resolve" | "improvement" | "advice" - 'state': "open" (default) | "hide-for-guests" | "collapsed" - 'sent_to': list of user IDs (integers) to @mention and notify. Look up user IDs first via get_organization_users or get_organization_users_list, then pass them here. Example: sent_to=[20059, 20033] LABEL='resolve' SEMANTICS (issue #172): - If the task HAS an open problem flag (an existing thread with label='problem' that has not been resolved), this tool automatically clears that flag by routing through the resolve endpoint, matching the native Tallyfy app's behaviour. Pass 'run_id' when available to avoid an extra API lookup. - If the task has NO open problem flag, label='resolve' is cosmetic only — the comment is stored with the resolve label but no problem flag is cleared (because there is nothing to clear). The function logs a WARNING in that case so the cosmetic outcome is visible in logs. - To explicitly clear a specific known problem thread without posting a separate comment, call resolve_task_issues(task_id, thread_id) directly — that path is unambiguous and returns the resolution outcome. CORRECT usage: add_task_comment(task_id="abc123...", content="Everything is on track") add_task_comment(task_id="abc123...", run_id="def456...", content="Blocked on approval", label="problem") add_task_comment(task_id="abc123...", run_id="def456...", content="Issue resolved", label="resolve") add_task_comment(task_id="abc123...", content="Please review", sent_to=[20059]) Never call this without both required parameters.

analyze_template_automations

ChatGPT
Retrieve and analyze all automation rules for a template. Returns the complete automation rules (conditions, actions, targets), a step lookup map, and pre-computed redundant_groups identifying duplicates and merge candidates. Use this data to: - Review redundant_groups for exact duplicates (same trigger AND actions) and same-trigger rules (mergeable actions) - Find conflicting rules (same conditions but contradictory actions, e.g. show vs hide the same step) - Spot orphaned rules referencing deleted steps (step IDs not in the step_lookup) - Assess automation complexity and suggest simplification IMPORTANT: Two rules with the same structure (e.g. both have 1 condition and 1 action) are NOT redundant if they reference different steps. Always compare conditionable_id AND target_step_id values. To consolidate: review redundant_groups, then use update_automation_rule to merge actions and delete_automation_rule to remove duplicates. The LLM decides which changes to apply. REQUIRED: 'template_id' (32-character hex string). Never call this without the template_id parameter.

analyze_template_automations

ChatGPT
Retrieve and analyze all automation rules for a template. Returns the complete automation rules (conditions, actions, targets), a step lookup map, and pre-computed redundant_groups identifying duplicates and merge candidates. Use this data to: - Review redundant_groups for exact duplicates (same trigger AND actions) and same-trigger rules (mergeable actions) - Find conflicting rules (same conditions but contradictory actions, e.g. show vs hide the same step) - Spot orphaned rules referencing deleted steps (step IDs not in the step_lookup) - Assess automation complexity and suggest simplification IMPORTANT: Two rules with the same structure (e.g. both have 1 condition and 1 action) are NOT redundant if they reference different steps. Always compare conditionable_id AND target_step_id values. To consolidate: review redundant_groups, then use update_automation_rule to merge actions and delete_automation_rule to remove duplicates. The LLM decides which changes to apply. REQUIRED: 'template_id' (32-character hex string). Never call this without the template_id parameter.

archive_process

ChatGPT
Archive a completed process (run). REQUIRED: 'run_id' (32-char hex). CAUTION: Archived processes are HIDDEN from default views but NOT deleted — all data, tasks, comments, and form-field captures are preserved. Use reactivate_process(run_id) to restore an archived process to active status. To permanently delete a process you must use the universal API fallback (tallyfy_api_call) since no first-class delete tool is exposed. Archived processes can be retrieved via get_organization_runs(archived='only'). Never call this without run_id.

archive_process

ChatGPT
Archive a completed process (run). REQUIRED: 'run_id' (32-char hex). CAUTION: Archived processes are HIDDEN from default views but NOT deleted — all data, tasks, comments, and form-field captures are preserved. Use reactivate_process(run_id) to restore an archived process to active status. To permanently delete a process you must use the universal API fallback (tallyfy_api_call) since no first-class delete tool is exposed. Archived processes can be retrieved via get_organization_runs(archived='only'). Never call this without run_id.

ask_user_question

ChatGPT
Ask the user a structured question with form fields. Use when you need clarification, confirmation, or user input before proceeding. Returns a structured question that the UI renders as a form. The conversation pauses until the user responds. RESPONSE FORMAT: When the user submits the form, the host forwards their answers back to the agent as a synthetic user turn shaped like {submitted: bool, fields: {<field_label>: <user_answer>}} where each field_answer is typed per the field's type — string for text/textarea/select/radio, bool for checkbox/toggle, ISO-8601 string for date/datetime/timepicker, {start, end} object for daterange, or a file_id reference for file. If the user dismisses the form, submitted is false and fields is empty. The synthetic turn arrives in the conversation log as [Answers to prior question (question_id=...)] key=value, key2=value2.

ask_user_question

ChatGPT
Ask the user a structured question with form fields. Use when you need clarification, confirmation, or user input before proceeding. Returns a structured question that the UI renders as a form. The conversation pauses until the user responds. RESPONSE FORMAT: When the user submits the form, the host forwards their answers back to the agent as a synthetic user turn shaped like {submitted: bool, fields: {<field_label>: <user_answer>}} where each field_answer is typed per the field's type — string for text/textarea/select/radio, bool for checkbox/toggle, ISO-8601 string for date/datetime/timepicker, {start, end} object for daterange, or a file_id reference for file. If the user dismisses the form, submitted is false and fields is empty. The synthetic turn arrives in the conversation log as [Answers to prior question (question_id=...)] key=value, key2=value2.

ask_user_to_confirm

ChatGPT
Ask the user to confirm or decline a single binary choice. Use before any destructive or irreversible action (deleting a template, archiving a process, sending an invitation), or when an action's effect is non-obvious and the user should explicitly opt in. RESPONSE FORMAT: When the user submits, the host forwards their decision as a synthetic turn shaped like [Confirmation answer (interaction_id=...) interaction_type=confirm] confirmed=true|false. If the user dismisses the form, a cancel_interaction frame fires and the agent receives [User cancelled prior interaction (interaction_id=...)].

ask_user_to_confirm

ChatGPT
Ask the user to confirm or decline a single binary choice. Use before any destructive or irreversible action (deleting a template, archiving a process, sending an invitation), or when an action's effect is non-obvious and the user should explicitly opt in. RESPONSE FORMAT: When the user submits, the host forwards their decision as a synthetic turn shaped like [Confirmation answer (interaction_id=...) interaction_type=confirm] confirmed=true|false. If the user dismisses the form, a cancel_interaction frame fires and the agent receives [User cancelled prior interaction (interaction_id=...)].

ask_user_to_rank

ChatGPT
Ask the user to drag-rank a list of options into a preferred order. Use when the agent has a candidate list (templates, tasks, options) whose ordering depends on the user's intent and a free-text answer would be lossy. RESPONSE FORMAT: When the user submits, the host forwards their ranked order back as a synthetic turn shaped like [Ranking answer (interaction_id=...) interaction_type=ranking] order=[id1, id2, id3]. The order reflects the user's drag arrangement; the items themselves are unchanged. If the user dismisses the form, a cancel_interaction frame fires and the agent receives [User cancelled prior interaction (interaction_id=...)].

ask_user_to_rank

ChatGPT
Ask the user to drag-rank a list of options into a preferred order. Use when the agent has a candidate list (templates, tasks, options) whose ordering depends on the user's intent and a free-text answer would be lossy. RESPONSE FORMAT: When the user submits, the host forwards their ranked order back as a synthetic turn shaped like [Ranking answer (interaction_id=...) interaction_type=ranking] order=[id1, id2, id3]. The order reflects the user's drag arrangement; the items themselves are unchanged. If the user dismisses the form, a cancel_interaction frame fires and the agent receives [User cancelled prior interaction (interaction_id=...)].

assess_template_health

ChatGPT
Retrieve complete template data for a comprehensive health assessment. Returns the full template including metadata, steps, automation rules, and kickoff fields. Use this data to evaluate template health across these dimensions: - Metadata quality: Does it have a clear title, summary, and guidance? - Step clarity: Do steps have descriptive titles and summaries? Are any too vague? - Form completeness: Do steps that need data collection have appropriate form fields? - Automation efficiency: Are automation rules well-structured? Any conflicts or redundancies? - Deadline configuration: Do time-sensitive steps have reasonable deadlines? - Workflow structure: Is the step count manageable? Is the flow logical? Provide an overall health rating (excellent/good/fair/poor/critical) with specific recommendations. RETURNS: full template payload — top-level keys include id, title, summary, steps[], automated_actions[], prerun[] (kickoff fields), and metadata. Synthesize this into a health_rating (one of: excellent, good, fair, poor, critical) plus a recommendations list (string array of specific, actionable improvements). The tool returns RAW data — the LLM is responsible for the rating + recommendations synthesis. REQUIRED: 'template_id' (32-character hex string). Never call this without the template_id parameter.

assess_template_health

ChatGPT
Retrieve complete template data for a comprehensive health assessment. Returns the full template including metadata, steps, automation rules, and kickoff fields. Use this data to evaluate template health across these dimensions: - Metadata quality: Does it have a clear title, summary, and guidance? - Step clarity: Do steps have descriptive titles and summaries? Are any too vague? - Form completeness: Do steps that need data collection have appropriate form fields? - Automation efficiency: Are automation rules well-structured? Any conflicts or redundancies? - Deadline configuration: Do time-sensitive steps have reasonable deadlines? - Workflow structure: Is the step count manageable? Is the flow logical? Provide an overall health rating (excellent/good/fair/poor/critical) with specific recommendations. RETURNS: full template payload — top-level keys include id, title, summary, steps[], automated_actions[], prerun[] (kickoff fields), and metadata. Synthesize this into a health_rating (one of: excellent, good, fair, poor, critical) plus a recommendations list (string array of specific, actionable improvements). The tool returns RAW data — the LLM is responsible for the rating + recommendations synthesis. REQUIRED: 'template_id' (32-character hex string). Never call this without the template_id parameter.

change_user_role

ChatGPT
Change a user's role in the organization. REQUIRED: 'user_id' (positive integer) and 'role' ('light', 'standard', or 'admin'). Never call this without both parameters.

change_user_role

ChatGPT
Change a user's role in the organization. REQUIRED: 'user_id' (positive integer) and 'role' ('light', 'standard', or 'admin'). Never call this without both parameters.

clone_step

ChatGPT
Clone (duplicate) a step within a template. REQUIRED: 'template_id' (32-char hex) and 'step_id' (32-char hex). Creates an exact copy of the step including form fields and assignees. Never call this without both parameters.

clone_step

ChatGPT
Clone (duplicate) a step within a template. REQUIRED: 'template_id' (32-char hex) and 'step_id' (32-char hex). Creates an exact copy of the step including form fields and assignees. Never call this without both parameters.

clone_template

ChatGPT
Clone (duplicate) a template with a new name. REQUIRED: 'template_id' (32-char hex) and 'new_name' (string). CORRECT usage: clone_template(template_id="abc123...", new_name="Employee Onboarding v2") clone_template(template_id="abc123...", new_name="Copy of Template", copy_permissions=True) Never call this without both required parameters.

clone_template

ChatGPT
Clone (duplicate) a template with a new name. REQUIRED: 'template_id' (32-char hex) and 'new_name' (string). CORRECT usage: clone_template(template_id="abc123...", new_name="Employee Onboarding v2") clone_template(template_id="abc123...", new_name="Copy of Template", copy_permissions=True) Never call this without both required parameters.

complete_kickoff_form

ChatGPT
Complete a process kickoff form to mark it as submitted. REQUIRED: 'run_id' (32-char hex process ID). Never call this without run_id.

complete_kickoff_form

ChatGPT
Complete a process kickoff form to mark it as submitted. REQUIRED: 'run_id' (32-char hex process ID). Never call this without run_id.

complete_task

ChatGPT
Mark a task as complete. REQUIRED: 'run_id' (32-char hex process ID) and 'task_id' (32-char hex). ⚠️ APPROVAL TASKS — MANDATORY is_approved PARAMETER ⚠️ If the task is an approval-type step (step_type = "approval"), you MUST provide EITHER is_approved=True (approve) OR is_approved=False (reject). The API rejects the request with HTTP 422 "The is approved field is required" if you omit is_approved on approval tasks. Before calling, check step_type on the task (via get_task or get_tasks_for_process): - step_type="task" → DO NOT pass is_approved (regular completion) - step_type="approval" → MUST pass is_approved=True or is_approved=False - step_type="expiring" → DO NOT pass is_approved (regular completion) - step_type="email" → DO NOT pass is_approved (regular completion) When calling on a regular (non-approval) task with is_approved, the parameter is ignored (no error). When calling on an approval task WITHOUT is_approved, the API returns 422. CORRECT usage: complete_task(run_id="abc123...", task_id="def456...") regular task complete_task(run_id="abc123...", task_id="def456...", is_approved=True) approve an approval task complete_task(run_id="abc123...", task_id="def456...", is_approved=False) reject an approval task HOW TO GET run_id, task_id, and step_type: - Use get_tasks_for_process() or get_my_tasks() to find tasks with their run_ids, IDs, and step_type. Never call this without both required parameters.

complete_task

ChatGPT
Mark a task as complete. REQUIRED: 'run_id' (32-char hex process ID) and 'task_id' (32-char hex). ⚠️ APPROVAL TASKS — MANDATORY is_approved PARAMETER ⚠️ If the task is an approval-type step (step_type = "approval"), you MUST provide EITHER is_approved=True (approve) OR is_approved=False (reject). The API rejects the request with HTTP 422 "The is approved field is required" if you omit is_approved on approval tasks. Before calling, check step_type on the task (via get_task or get_tasks_for_process): - step_type="task" → DO NOT pass is_approved (regular completion) - step_type="approval" → MUST pass is_approved=True or is_approved=False - step_type="expiring" → DO NOT pass is_approved (regular completion) - step_type="email" → DO NOT pass is_approved (regular completion) When calling on a regular (non-approval) task with is_approved, the parameter is ignored (no error). When calling on an approval task WITHOUT is_approved, the API returns 422. CORRECT usage: complete_task(run_id="abc123...", task_id="def456...") regular task complete_task(run_id="abc123...", task_id="def456...", is_approved=True) approve an approval task complete_task(run_id="abc123...", task_id="def456...", is_approved=False) reject an approval task HOW TO GET run_id, task_id, and step_type: - Use get_tasks_for_process() or get_my_tasks() to find tasks with their run_ids, IDs, and step_type. Never call this without both required parameters.

convert_document_to_html

ChatGPT
Convert an uploaded document (PDF/DOCX/XLSX/CSV/TXT) to clean semantic HTML body content. Mirrors the original cloudflare-workers document-chat-completion type=document mode (closes #334). Produces no CSS, no <html>/<head>/<body> wrapper — just the body's inner content with semantic tags (<h1>..<h6>, <p>, <ul>, <ol>, <table>, <strong>, etc.). For STRUCTURED template generation (sections + steps), use generate_template_from_document instead. Use THIS tool when the user wants a faithful HTML rendering of the input document body (e.g. for embedding in a Tallyfy step description, knowledge-base article, or downstream HTML processor).

convert_document_to_html

ChatGPT
Convert an uploaded document (PDF/DOCX/XLSX/CSV/TXT) to clean semantic HTML body content. Mirrors the original cloudflare-workers document-chat-completion type=document mode (closes #334). Produces no CSS, no <html>/<head>/<body> wrapper — just the body's inner content with semantic tags (<h1>..<h6>, <p>, <ul>, <ol>, <table>, <strong>, etc.). For STRUCTURED template generation (sections + steps), use generate_template_from_document instead. Use THIS tool when the user wants a faithful HTML rendering of the input document body (e.g. for embedding in a Tallyfy step description, knowledge-base article, or downstream HTML processor).

create_automation_rule

ChatGPT
Create conditional automation (if-then rules) for workflow templates. REQUIRED: 'template_id' (32-char hex) + 'automation_data' (dict with conditions+actions). action_verbs: show, hide, deadline, assign, unassign, reopen, emit_webhook conditionable_type: step | field | kickoff (auto-resolved) Step ops: completed, reopened, approved, rejected, acknowledged, expired, not_assigned Field/kickoff ops: contains, not_contains, equals, not_equals, equals_any, greater_than, less_than, is_empty, is_not_empty CONCRETE EXAMPLES (show, hide, deadline, assign): SHOW step when kickoff field = "Yes" (HIDE: action_verb:"hide"): `` {"alias":"Show legal","condition_logic":"and", "conditions":[{"conditionable_id":"<kickoff_field_id>","conditionable_type":"kickoff", "operation":"equals","statement":"Yes"}], "actions":[{"action_type":"visibility","action_verb":"show","target_step_id":"<step_id>"}]} ` DEADLINE 3 days after step completes: ` {"alias":"Deadline 3d","condition_logic":"and", "conditions":[{"conditionable_id":"<step_id>","conditionable_type":"step", "operation":"completed","statement":null}], "actions":[{"action_type":"deadline","action_verb":"deadline","target_step_id":"<other>", "deadline":{"value":3,"unit":"days","option":"from"}}]} ` ASSIGN when form field > 10000: ` {"alias":"Assign reviewer","condition_logic":"and", "conditions":[{"conditionable_id":"<form_field_id>","conditionable_type":"field", "operation":"greater_than","statement":"10000"}], "actions":[{"action_type":"assignment","action_verb":"assign","target_step_id":"<step_id>", "assignees":{"users":[12345],"guests":[]}}]} ` PAYLOADS: assignment → assignees:{users,guests}; deadline → deadline:{value,unit (minutes|hours|days|weeks|months),option (from|before)}; webhook → webhook_url+alias_name. Step conditions: statement` is null. Use "actions" (NOT "then_actions"), "alias" (NOT "automated_alias").

create_automation_rule

ChatGPT
Create conditional automation (if-then rules) for workflow templates. REQUIRED: 'template_id' (32-char hex) + 'automation_data' (dict with conditions+actions). action_verbs: show, hide, deadline, assign, unassign, reopen, emit_webhook conditionable_type: step | field | kickoff (auto-resolved) Step ops: completed, reopened, approved, rejected, acknowledged, expired, not_assigned Field/kickoff ops: contains, not_contains, equals, not_equals, equals_any, greater_than, less_than, is_empty, is_not_empty CONCRETE EXAMPLES (show, hide, deadline, assign): SHOW step when kickoff field = "Yes" (HIDE: action_verb:"hide"): `` {"alias":"Show legal","condition_logic":"and", "conditions":[{"conditionable_id":"<kickoff_field_id>","conditionable_type":"kickoff", "operation":"equals","statement":"Yes"}], "actions":[{"action_type":"visibility","action_verb":"show","target_step_id":"<step_id>"}]} ` DEADLINE 3 days after step completes: ` {"alias":"Deadline 3d","condition_logic":"and", "conditions":[{"conditionable_id":"<step_id>","conditionable_type":"step", "operation":"completed","statement":null}], "actions":[{"action_type":"deadline","action_verb":"deadline","target_step_id":"<other>", "deadline":{"value":3,"unit":"days","option":"from"}}]} ` ASSIGN when form field > 10000: ` {"alias":"Assign reviewer","condition_logic":"and", "conditions":[{"conditionable_id":"<form_field_id>","conditionable_type":"field", "operation":"greater_than","statement":"10000"}], "actions":[{"action_type":"assignment","action_verb":"assign","target_step_id":"<step_id>", "assignees":{"users":[12345],"guests":[]}}]} ` PAYLOADS: assignment → assignees:{users,guests}; deadline → deadline:{value,unit (minutes|hours|days|weeks|months),option (from|before)}; webhook → webhook_url+alias_name. Step conditions: statement` is null. Use "actions" (NOT "then_actions"), "alias" (NOT "automated_alias").

create_folder

ChatGPT
Create a new folder in the organization. REQUIRED: 'name' (folder name). Optional: 'parent_id' (ID of parent folder for nesting). Never call this without name.

create_folder

ChatGPT
Create a new folder in the organization. REQUIRED: 'name' (folder name). Optional: 'parent_id' (ID of parent folder for nesting). Never call this without name.

create_group

ChatGPT
Create a new group in the organization. REQUIRED: 'name' (group name). Optional: 'description', 'members' (list of user IDs), 'guests' (list of emails). Never call this without name.

create_group

ChatGPT
Create a new group in the organization. REQUIRED: 'name' (group name). Optional: 'description', 'members' (list of user IDs), 'guests' (list of emails). Never call this without name.

create_guest

ChatGPT
Create a new guest in the organization. REQUIRED: 'email' (valid email), 'first_name', 'last_name'. Optional: 'phone', 'company_name'. Never call this without the three required parameters.

create_guest

ChatGPT
Create a new guest in the organization. REQUIRED: 'email' (valid email), 'first_name', 'last_name'. Optional: 'phone', 'company_name'. Never call this without the three required parameters.

create_standalone_task

ChatGPT
Create a standalone (one-off) task with explicit structured fields. NOTE: Tallyfy internally creates a lightweight process container for every standalone task — this is expected platform behaviour and the task will still appear as a one-off task (is_oneoff_task: true). REQUIRED FIELDS: title, deadline, and at least one assignee. DEADLINE: Accepts natural language — e.g. "April 12 2026 at 3pm", "next Monday at noon", "tomorrow at 5pm". Resolved to UTC using the org timezone automatically. TASK TYPE: Accepted values: - "task" (default) — standard task - "approval" — approval/reject task - "expiring" — expiring task - "email" — email draft task - "expiring_email" — auto-send email task ASSIGNEES: Provide one or more of: - user_names: member full names (e.g. ["John Doe"]) - user_emails: member email addresses - guest_emails: guest email addresses - group_names: group names CORRECT usage: - create_standalone_task(title="Review budget", deadline="tomorrow at 3pm", user_emails=["john@example.com"]) - create_standalone_task(title="QA test", task_type="approval", deadline="April 12 2026", user_names=["Jane Smith"], description="Routine QA validation") If the user doesn't specify a deadline or assignee, ASK them before calling the tool.

create_standalone_task

ChatGPT
Create a standalone (one-off) task with explicit structured fields. NOTE: Tallyfy internally creates a lightweight process container for every standalone task — this is expected platform behaviour and the task will still appear as a one-off task (is_oneoff_task: true). REQUIRED FIELDS: title, deadline, and at least one assignee. DEADLINE: Accepts natural language — e.g. "April 12 2026 at 3pm", "next Monday at noon", "tomorrow at 5pm". Resolved to UTC using the org timezone automatically. TASK TYPE: Accepted values: - "task" (default) — standard task - "approval" — approval/reject task - "expiring" — expiring task - "email" — email draft task - "expiring_email" — auto-send email task ASSIGNEES: Provide one or more of: - user_names: member full names (e.g. ["John Doe"]) - user_emails: member email addresses - guest_emails: guest email addresses - group_names: group names CORRECT usage: - create_standalone_task(title="Review budget", deadline="tomorrow at 3pm", user_emails=["john@example.com"]) - create_standalone_task(title="QA test", task_type="approval", deadline="April 12 2026", user_names=["Jane Smith"], description="Routine QA validation") If the user doesn't specify a deadline or assignee, ASK them before calling the tool.

create_tag

ChatGPT
Create a new tag in the organization. REQUIRED: 'title' (tag name). Optional: 'color' (hex color code like '#FF5733'). Never call this without title.

create_tag

ChatGPT
Create a new tag in the organization. REQUIRED: 'title' (tag name). Optional: 'color' (hex color code like '#FF5733'). Never call this without title.

create_task_from_text

ChatGPT
Create a one-off task from a single natural-language sentence. This tool extracts structured fields (title, task_type, assignees, deadline, description) from user_input using a server-side claude -p extraction step, then creates the task via the same SDK path as create_standalone_task. PREFER create_standalone_task whenever your client (Claude, etc.) can already extract the structured fields itself — it skips the extra LLM hop and is more deterministic. Use this tool when the caller cannot pre-extract fields. CORRECT usage: - create_task_from_text(user_input="April 11 - QA MCP test, approval type, assign to zurly@nike.com and zurlyqa+guest@gmail.com, deadline April 12 2026, description: Routine MCP QA validation") What is extracted: - title (the concise name, NOT the whole input) - task_type — one of: task | approval | expiring | email | expiring_email (or null) - assignee_emails / assignee_names — org members (resolved via existing user lookup) - guest_emails — external guests (passed directly into the task owners) - description — task summary - deadline — natural-language phrase, parsed via the same date extractor as create_standalone_task REQUIREMENTS: at least one assignee must be extractable; deadline must be parseable. TIMEZONE FALLBACK: If the user has no timezone configured on their Tallyfy profile, the deadline defaults to UTC and the response includes a deadline_local field annotated (UTC — no org/user timezone configured; update Tallyfy profile settings) so the caller can prompt the user to set their timezone.

create_task_from_text

ChatGPT
Create a one-off task from a single natural-language sentence. This tool extracts structured fields (title, task_type, assignees, deadline, description) from user_input using a server-side claude -p extraction step, then creates the task via the same SDK path as create_standalone_task. PREFER create_standalone_task whenever your client (Claude, etc.) can already extract the structured fields itself — it skips the extra LLM hop and is more deterministic. Use this tool when the caller cannot pre-extract fields. CORRECT usage: - create_task_from_text(user_input="April 11 - QA MCP test, approval type, assign to zurly@nike.com and zurlyqa+guest@gmail.com, deadline April 12 2026, description: Routine MCP QA validation") What is extracted: - title (the concise name, NOT the whole input) - task_type — one of: task | approval | expiring | email | expiring_email (or null) - assignee_emails / assignee_names — org members (resolved via existing user lookup) - guest_emails — external guests (passed directly into the task owners) - description — task summary - deadline — natural-language phrase, parsed via the same date extractor as create_standalone_task REQUIREMENTS: at least one assignee must be extractable; deadline must be parseable. TIMEZONE FALLBACK: If the user has no timezone configured on their Tallyfy profile, the deadline defaults to UTC and the response includes a deadline_local field annotated (UTC — no org/user timezone configured; update Tallyfy profile settings) so the caller can prompt the user to set their timezone.

create_template

ChatGPT
Create a new template (checklist/blueprint). REQUIRED: 'title' (template name). Optional: 'type' ('procedure', 'form', 'document'), 'summary', 'guidance', 'starred'. Never call this without title.

create_template

ChatGPT
Create a new template (checklist/blueprint). REQUIRED: 'title' (template name). Optional: 'type' ('procedure', 'form', 'document'), 'summary', 'guidance', 'starred'. Never call this without title.

delete_automation_rule

ChatGPT
Remove an automation rule from a workflow template. REQUIRED: 'template_id' (32-char hex) and 'automation_id' (32-char hex). Never call this without both parameters.

delete_automation_rule

ChatGPT
Remove an automation rule from a workflow template. REQUIRED: 'template_id' (32-char hex) and 'automation_id' (32-char hex). Never call this without both parameters.

delete_folder

ChatGPT
Delete a folder permanently. REQUIRED: 'folder_id'. Contents are NOT deleted — processes/templates are moved out first. Never call this without folder_id.

delete_folder

ChatGPT
Delete a folder permanently. REQUIRED: 'folder_id'. Contents are NOT deleted — processes/templates are moved out first. Never call this without folder_id.

delete_form_field

ChatGPT
Delete a form field from a step. REQUIRED: 'template_id' (32-char hex), 'step_id' (32-char hex), and 'field_id' (32-char hex). Never call this without all three parameters.

delete_form_field

ChatGPT
Delete a form field from a step. REQUIRED: 'template_id' (32-char hex), 'step_id' (32-char hex), and 'field_id' (32-char hex). Never call this without all three parameters.

delete_group

ChatGPT
Delete a group from the organization permanently. REQUIRED: 'group_id'. This action cannot be undone. Never call this without group_id.

delete_group

ChatGPT
Delete a group from the organization permanently. REQUIRED: 'group_id'. This action cannot be undone. Never call this without group_id.

delete_kickoff_field

ChatGPT
Delete a kickoff (prerun) field from a template. REQUIRED: 'template_id' (32-char hex) and 'field_id' (32-char hex). WARNING: Deleting a kickoff field removes it permanently and drops all collected data for that field across existing process runs. This cannot be undone. NOTE: If the field is used in an automation rule (visibility condition), the deletion will fail with a 403 error — remove the automation rule first. Never call this without both parameters.

delete_kickoff_field

ChatGPT
Delete a kickoff (prerun) field from a template. REQUIRED: 'template_id' (32-char hex) and 'field_id' (32-char hex). WARNING: Deleting a kickoff field removes it permanently and drops all collected data for that field across existing process runs. This cannot be undone. NOTE: If the field is used in an automation rule (visibility condition), the deletion will fail with a 403 error — remove the automation rule first. Never call this without both parameters.

delete_step

ChatGPT
Delete a step from a template permanently. REQUIRED: 'template_id' (32-char hex) and 'step_id' (32-char hex). This action cannot be undone. Never call this without both parameters. NOTE: Deleting a step also removes any automation rules that reference it (as conditionable_id, target_step_id, or in then_actions); orphaned rules are pruned server-side. If you need to preserve those rules, update them to reference a different step BEFORE deleting.

delete_step

ChatGPT
Delete a step from a template permanently. REQUIRED: 'template_id' (32-char hex) and 'step_id' (32-char hex). This action cannot be undone. Never call this without both parameters. NOTE: Deleting a step also removes any automation rules that reference it (as conditionable_id, target_step_id, or in then_actions); orphaned rules are pruned server-side. If you need to preserve those rules, update them to reference a different step BEFORE deleting.

delete_tag

ChatGPT
Delete a tag from the organization permanently. REQUIRED: 'tag_id'. This action cannot be undone. Never call this without tag_id.

delete_tag

ChatGPT
Delete a tag from the organization permanently. REQUIRED: 'tag_id'. This action cannot be undone. Never call this without tag_id.

delete_task_comment

ChatGPT
Delete a comment from a task. REQUIRED: 'task_id' (32-char hex) and 'comment_id'. Optional: 'run_id' (pass if available). This action cannot be undone. Never call this without both required parameters.

delete_task_comment

ChatGPT
Delete a comment from a task. REQUIRED: 'task_id' (32-char hex) and 'comment_id'. Optional: 'run_id' (pass if available). This action cannot be undone. Never call this without both required parameters.

delete_template

ChatGPT
Delete a template permanently. REQUIRED: 'template_id' (32-char hex). This action cannot be undone — all steps and automation rules will be deleted. Never call this without template_id.

delete_template

ChatGPT
Delete a template permanently. REQUIRED: 'template_id' (32-char hex). This action cannot be undone — all steps and automation rules will be deleted. Never call this without template_id.

disable_guest

ChatGPT
Disable a guest account. REQUIRED: 'email' (valid email). This prevents the guest from accessing the organization. Never call this without email.

disable_guest

ChatGPT
Disable a guest account. REQUIRED: 'email' (valid email). This prevents the guest from accessing the organization. Never call this without email.

disable_user

ChatGPT
Disable a user account. REQUIRED: 'user_id' (positive integer). This prevents the user from accessing the organization. Never call this without user_id.

disable_user

ChatGPT
Disable a user account. REQUIRED: 'user_id' (positive integer). This prevents the user from accessing the organization. Never call this without user_id.

edit_description_on_step

ChatGPT
Edit the description/summary of a specific step in a template to improve clarity and instructions. REQUIRED: 'template_id' (32-char hex), 'step_id' (32-char hex), and 'description' (new text). Never call this without all three parameters.

edit_description_on_step

ChatGPT
Edit the description/summary of a specific step in a template to improve clarity and instructions. REQUIRED: 'template_id' (32-char hex), 'step_id' (32-char hex), and 'description' (new text). Never call this without all three parameters.

enable_guest

ChatGPT
Re-enable a disabled guest account. REQUIRED: 'email' (valid email). Never call this without email.

enable_guest

ChatGPT
Re-enable a disabled guest account. REQUIRED: 'email' (valid email). Never call this without email.

enable_user

ChatGPT
Re-enable a disabled user account. REQUIRED: 'user_id' (positive integer). Never call this without user_id.

enable_user

ChatGPT
Re-enable a disabled user account. REQUIRED: 'user_id' (positive integer). Never call this without user_id.

generate_template_from_document

ChatGPT
Generate a Tallyfy template draft from one or more uploaded documents. Reads the attachment(s) from the host filesystem, extracts text via the existing PDF/DOCX/XLSX/CSV extractors, and produces a structured JSON draft (title/type/summary/sections with steps). Confirm with the user via ask_user_question before invoking create_template + add_step. Replaces the cloudflare-workers document-chat-completion AI worker.

generate_template_from_document

ChatGPT
Generate a Tallyfy template draft from one or more uploaded documents. Reads the attachment(s) from the host filesystem, extracts text via the existing PDF/DOCX/XLSX/CSV extractors, and produces a structured JSON draft (title/type/summary/sections with steps). Confirm with the user via ask_user_question before invoking create_template + add_step. Replaces the cloudflare-workers document-chat-completion AI worker.

generate_template_from_image

ChatGPT
Generate a Tallyfy template draft from an uploaded image (e.g. a screenshot of a workflow diagram, flowchart, or whiteboard sketch). Uses Claude vision to interpret the image. Returns the same JSON shape as generate_template_from_prompt. Confirm the draft with the user via ask_user_question before invoking create_template.

generate_template_from_image

ChatGPT
Generate a Tallyfy template draft from an uploaded image (e.g. a screenshot of a workflow diagram, flowchart, or whiteboard sketch). Uses Claude vision to interpret the image. Returns the same JSON shape as generate_template_from_prompt. Confirm the draft with the user via ask_user_question before invoking create_template.

generate_template_from_prompt

ChatGPT
Generate a Tallyfy template draft from a natural-language description. Returns a structured JSON draft with title, type, summary and sections (each containing steps with step_name/step_description/task_type). DO NOT call create_template directly with this output — confirm with the user via ask_user_question first, then iterate create_template + add_step calls. Replaces the cloudflare-workers chat-completion AI worker.

generate_template_from_prompt

ChatGPT
Generate a Tallyfy template draft from a natural-language description. Returns a structured JSON draft with title, type, summary and sections (each containing steps with step_name/step_description/task_type). DO NOT call create_template directly with this output — confirm with the user via ask_user_question first, then iterate create_template + add_step calls. Replaces the cloudflare-workers chat-completion AI worker.

get_all_templates

ChatGPT
Get templates (checklists) with full details including prerun fields, automated actions, linked tasks, and metadata. Returns 20 per page. Use page=2, page=3, etc. for more. meta.total_pages shows total page count. Optional: filter by folder name or folder ID.

get_all_templates

ChatGPT
Get templates (checklists) with full details including prerun fields, automated actions, linked tasks, and metadata. Returns 20 per page. Use page=2, page=3, etc. for more. meta.total_pages shows total page count. Optional: filter by folder name or folder ID.

get_dropdown_options

ChatGPT
Get current dropdown options for analysis. REQUIRED: 'template_id' (32-char hex), 'step_id' (32-char hex), and 'field_id' (32-char hex). Never call this without all three parameters.

get_dropdown_options

ChatGPT
Get current dropdown options for analysis. REQUIRED: 'template_id' (32-char hex), 'step_id' (32-char hex), and 'field_id' (32-char hex). Never call this without all three parameters.

get_group

ChatGPT
Get a single group by its ID. REQUIRED: 'group_id'. Never call this without group_id.

get_group

ChatGPT
Get a single group by its ID. REQUIRED: 'group_id'. Never call this without group_id.

get_groups

ChatGPT
Get all groups in the organization. Use group IDs to filter processes via get_organization_runs(groups=<group_id>) or assign tasks. All parameters are optional.

get_groups

ChatGPT
Get all groups in the organization. Use group IDs to filter processes via get_organization_runs(groups=<group_id>) or assign tasks. All parameters are optional.

get_guest

ChatGPT
Get a single guest's profile by email address. Returns guest profile data including name, contact info, last accessed time, and status. NOTE: This returns the guest's profile only, not their tasks. To get tasks assigned to a guest, use get_guest_tasks(guest_email="...") or get_guest_tasks(guest_id="...") with the guest_id from this response. CORRECT usage: - get_guest(email="guest@example.com")

get_guest

ChatGPT
Get a single guest's profile by email address. Returns guest profile data including name, contact info, last accessed time, and status. NOTE: This returns the guest's profile only, not their tasks. To get tasks assigned to a guest, use get_guest_tasks(guest_email="...") or get_guest_tasks(guest_id="...") with the guest_id from this response. CORRECT usage: - get_guest(email="guest@example.com")

get_guest_tasks

ChatGPT
Get all tasks assigned to a specific guest (external user). IDENTIFICATION: Provide guest_id or guest_email. CORRECT usage: - get_guest_tasks(guest_id="MITxZa1z2f5d81bb53f1da7c7fa95a2cfec5cbc2") — fastest, no lookup needed - get_guest_tasks(guest_email="guest@example.com") — resolves email to guest_id automatically WRONG usage (will fail): - get_guest_tasks() — NO! Must provide at least one identifier For org member tasks, use get_user_tasks() instead. For the current user's tasks, use get_my_tasks() (no identifier needed). IMPORTANT: Tallyfy has no "urgent" or "priority" field. For urgent tasks, call with no status filter and look for status="overdue" or status="hasproblem" in results. PAGINATION: Returns 20 tasks per page. Use page=2, page=3, etc. for more. meta.total_pages shows total page count.

get_guest_tasks

ChatGPT
Get all tasks assigned to a specific guest (external user). IDENTIFICATION: Provide guest_id or guest_email. CORRECT usage: - get_guest_tasks(guest_id="MITxZa1z2f5d81bb53f1da7c7fa95a2cfec5cbc2") — fastest, no lookup needed - get_guest_tasks(guest_email="guest@example.com") — resolves email to guest_id automatically WRONG usage (will fail): - get_guest_tasks() — NO! Must provide at least one identifier For org member tasks, use get_user_tasks() instead. For the current user's tasks, use get_my_tasks() (no identifier needed). IMPORTANT: Tallyfy has no "urgent" or "priority" field. For urgent tasks, call with no status filter and look for status="overdue" or status="hasproblem" in results. PAGINATION: Returns 20 tasks per page. Use page=2, page=3, etc. for more. meta.total_pages shows total page count.

get_kickoff_fields

ChatGPT
Get all kickoff/prerun fields for a template. REQUIRED: 'template_id' (32-character hex string). Never call this without the template_id parameter.

get_kickoff_fields

ChatGPT
Get all kickoff/prerun fields for a template. REQUIRED: 'template_id' (32-character hex string). Never call this without the template_id parameter.

get_me

ChatGPT
Get the currently authenticated user's profile data. No parameters required. USE THIS TOOL when user asks: - "Who am I?" - "What's my name?" - "Show my profile" - "What's my user ID?" - "What organization am I in?" Returns the authenticated user's full profile including numeric 'id', 'email', 'first_name', 'last_name', and organization details.

get_me

ChatGPT
Get the currently authenticated user's profile data. No parameters required. USE THIS TOOL when user asks: - "Who am I?" - "What's my name?" - "Show my profile" - "What's my user ID?" - "What organization am I in?" Returns the authenticated user's full profile including numeric 'id', 'email', 'first_name', 'last_name', and organization details.

get_my_tasks

ChatGPT
Get tasks assigned to the current user. No parameters required. USE THIS TOOL when user asks: - "What are my tasks?" - "Show me my tasks" - "What do I need to do?" - "What's assigned to me?" This tool returns task data including task IDs, run_ids (process IDs), titles, deadlines, and status. Use the returned data to answer follow-up questions about "those tasks" without making additional tool calls. IMPORTANT: Tallyfy has no urgency or priority field. For "urgent" tasks, look for status="overdue" or status="hasproblem" in the returned results. NOTE: This tool does NOT support status filtering. It returns all tasks for the current user. To filter by status, retrieve all tasks and filter the results client-side. PAGINATION: Returns 20 tasks per page. Use page=2, page=3, etc. to retrieve subsequent pages. meta.total_pages shows how many pages exist. meta.total shows the real count.

get_my_tasks

ChatGPT
Get tasks assigned to the current user. No parameters required. USE THIS TOOL when user asks: - "What are my tasks?" - "Show me my tasks" - "What do I need to do?" - "What's assigned to me?" This tool returns task data including task IDs, run_ids (process IDs), titles, deadlines, and status. Use the returned data to answer follow-up questions about "those tasks" without making additional tool calls. IMPORTANT: Tallyfy has no urgency or priority field. For "urgent" tasks, look for status="overdue" or status="hasproblem" in the returned results. NOTE: This tool does NOT support status filtering. It returns all tasks for the current user. To filter by status, retrieve all tasks and filter the results client-side. PAGINATION: Returns 20 tasks per page. Use page=2, page=3, etc. to retrieve subsequent pages. meta.total_pages shows how many pages exist. meta.total shows the real count.

get_organization

ChatGPT
Get organization details. No parameters required — organization is determined from authentication context.

get_organization

ChatGPT
Get organization details. No parameters required — organization is determined from authentication context.

get_organization_guests

ChatGPT
Get all organization guests with full profile data. All parameters are optional. Use 'with_stats' (true/false) to include guest activity statistics. PAGINATION: Returns 20 results per page. Use page=2, page=3, etc. for more. meta.total_pages shows total page count.

get_organization_guests

ChatGPT
Get all organization guests with full profile data. All parameters are optional. Use 'with_stats' (true/false) to include guest activity statistics. PAGINATION: Returns 20 results per page. Use page=2, page=3, etc. for more. meta.total_pages shows total page count.

get_organization_guests_list

ChatGPT
Get all organization guests with minimal profile data for listing. Returns data with pagination metadata.

get_organization_guests_list

ChatGPT
Get all organization guests with minimal profile data for listing. Returns data with pagination metadata.

get_organization_runs

ChatGPT
Get workflow processes (runs) in the organization. All parameters are optional — call with no parameters to get all runs, or use filters to narrow results. FILTERS: status, archived, starred, checklist_id (template_id), tag, folder, groups, owners, run_type, me (bool) RUN STATUS VALUES: "active", "problem", "delayed", "complete" ARCHIVED: Use archived="only" to get archived processes (NOT status="archived"). RUN TYPE VALUES: "procedure", "form", "document" FOLDER: Pass folder ID or folder name (name is auto-resolved to ID). OWNERS: Pass numeric user IDs. Filters by collaborator presence (run owner OR task assignee) — NOT by strict process creator/started_by. Use owners= to find runs the user is involved in, not runs they personally launched. PAGINATION: Returns 20 results per page. Use page=2, page=3, etc. to retrieve subsequent pages. meta.total_pages shows how many pages exist. meta.total shows the real count.

get_organization_runs

ChatGPT
Get workflow processes (runs) in the organization. All parameters are optional — call with no parameters to get all runs, or use filters to narrow results. FILTERS: status, archived, starred, checklist_id (template_id), tag, folder, groups, owners, run_type, me (bool) RUN STATUS VALUES: "active", "problem", "delayed", "complete" ARCHIVED: Use archived="only" to get archived processes (NOT status="archived"). RUN TYPE VALUES: "procedure", "form", "document" FOLDER: Pass folder ID or folder name (name is auto-resolved to ID). OWNERS: Pass numeric user IDs. Filters by collaborator presence (run owner OR task assignee) — NOT by strict process creator/started_by. Use owners= to find runs the user is involved in, not runs they personally launched. PAGINATION: Returns 20 results per page. Use page=2, page=3, etc. to retrieve subsequent pages. meta.total_pages shows how many pages exist. meta.total shows the real count.

get_organization_users

ChatGPT
Get organization members with full profile data. No required parameters. USE THIS TOOL when user asks: - "Who are the team members?" - "List all users" - "Show me organization members" - "Find user by name/email" (then search results for the user) Returns user data including numeric 'id', 'email', 'first_name', 'last_name'. Use the returned 'id' field when you need to call get_user_tasks(user_id=...). Optional: Set with_groups=true to include group membership information. PAGINATION: Returns 20 results per page. Use page=2, page=3, etc. for subsequent pages. meta.total_pages shows how many pages exist.

get_organization_users

ChatGPT
Get organization members with full profile data. No required parameters. USE THIS TOOL when user asks: - "Who are the team members?" - "List all users" - "Show me organization members" - "Find user by name/email" (then search results for the user) Returns user data including numeric 'id', 'email', 'first_name', 'last_name'. Use the returned 'id' field when you need to call get_user_tasks(user_id=...). Optional: Set with_groups=true to include group membership information. PAGINATION: Returns 20 results per page. Use page=2, page=3, etc. for subsequent pages. meta.total_pages shows how many pages exist.

get_organization_users_list

ChatGPT
Get all organization members with minimal profile data for listing. Returns data with pagination metadata.

get_organization_users_list

ChatGPT
Get all organization members with minimal profile data for listing. Returns data with pagination metadata.

get_process

ChatGPT
Get full details for a single process (run) by ID. REQUIRED: 'run_id' (32-char hex). Never call this without run_id.

get_process

ChatGPT
Get full details for a single process (run) by ID. REQUIRED: 'run_id' (32-char hex). Never call this without run_id.

get_process_folders

ChatGPT
Get all process/run folders in the organization. Returns folders that contain active processes (folder_type='run'). Use returned folder IDs with get_organization_runs(folder=<folder_id>) to filter processes by folder. Results include nested child folders sorted by position. Optional: filter by name with 'q'.

get_process_folders

ChatGPT
Get all process/run folders in the organization. Returns folders that contain active processes (folder_type='run'). Use returned folder IDs with get_organization_runs(folder=<folder_id>) to filter processes by folder. Results include nested child folders sorted by position. Optional: filter by name with 'q'.

get_standalone_task

ChatGPT
Get a standalone (one-off) task by ID. REQUIRED: 'task_id' (32-char hex). Never call this without task_id.

get_standalone_task

ChatGPT
Get a standalone (one-off) task by ID. REQUIRED: 'task_id' (32-char hex). Never call this without task_id.

get_step_dependencies

ChatGPT
Read-only: analyze which automations affect when this step appears in the workflow. Inspects all template rules referencing the step as condition trigger OR action target. RETURN: {step_info: {id,title,position,summary}, dependencies: {incoming: [{step_id,step_title,condition_type,automation_id,description}], outgoing: [{step_id,step_title,action_type,automation_id,description}], field_dependencies: [{field_label,expected_value,condition_type,automation_id,description}], conditional_visibility: [{action_type:"show_step"|"hide_step",automation_id,description}]}, complexity_analysis: {score:0-100, level:"Low"|"Medium"|"High", total_dependencies, incoming_count, outgoing_count, field_dependencies_count, visibility_conditions_count}, recommendations: [advisory strings], template_id} KEY: conditional_visibility lists automation_ids of show/hide rules for this step. Look them up via analyze_template_automations or get_step_visibility_conditions for full conditions. USE CASES: "What does this step depend on?"→incoming · "What does this step trigger?"→outgoing · "Which fields gate it?"→field_dependencies · "Is visibility conditional?"→conditional_visibility · "Should this step be split?"→complexity_analysis.level EXAMPLE: get_step_dependencies(template_id="58c03f...", step_id="9bc2...") → {step_info:{title:"Manager approval",position:4}, dependencies:{incoming:[{step_title:"Submit request",condition_type:"task_completed"}], outgoing:[{step_title:"Notify employee",action_type:"send_email"}], field_dependencies:[{field_label:"Amount",expected_value:">1000"}]}, complexity_analysis:{score:35,level:"Medium"}, recommendations:["Consider extracting the amount-gate"]} REQUIRED: 'template_id' AND 'step_id' (both 32-char hex). Never call without both.

get_step_dependencies

ChatGPT
Read-only: analyze which automations affect when this step appears in the workflow. Inspects all template rules referencing the step as condition trigger OR action target. RETURN: {step_info: {id,title,position,summary}, dependencies: {incoming: [{step_id,step_title,condition_type,automation_id,description}], outgoing: [{step_id,step_title,action_type,automation_id,description}], field_dependencies: [{field_label,expected_value,condition_type,automation_id,description}], conditional_visibility: [{action_type:"show_step"|"hide_step",automation_id,description}]}, complexity_analysis: {score:0-100, level:"Low"|"Medium"|"High", total_dependencies, incoming_count, outgoing_count, field_dependencies_count, visibility_conditions_count}, recommendations: [advisory strings], template_id} KEY: conditional_visibility lists automation_ids of show/hide rules for this step. Look them up via analyze_template_automations or get_step_visibility_conditions for full conditions. USE CASES: "What does this step depend on?"→incoming · "What does this step trigger?"→outgoing · "Which fields gate it?"→field_dependencies · "Is visibility conditional?"→conditional_visibility · "Should this step be split?"→complexity_analysis.level EXAMPLE: get_step_dependencies(template_id="58c03f...", step_id="9bc2...") → {step_info:{title:"Manager approval",position:4}, dependencies:{incoming:[{step_title:"Submit request",condition_type:"task_completed"}], outgoing:[{step_title:"Notify employee",action_type:"send_email"}], field_dependencies:[{field_label:"Amount",expected_value:">1000"}]}, complexity_analysis:{score:35,level:"Medium"}, recommendations:["Consider extracting the amount-gate"]} REQUIRED: 'template_id' AND 'step_id' (both 32-char hex). Never call without both.

get_step_visibility_conditions

ChatGPT
Analyze when and how a step becomes visible based on all automations. REQUIRED: 'template_id' (32-char hex) and 'step_id' (32-char hex). Never call this without both parameters.

get_step_visibility_conditions

ChatGPT
Analyze when and how a step becomes visible based on all automations. REQUIRED: 'template_id' (32-char hex) and 'step_id' (32-char hex). Never call this without both parameters.

get_tags

ChatGPT
Get all tags in the organization. Use tags to filter processes via get_organization_runs(tag=<tag_id>). All parameters are optional.

get_tags

ChatGPT
Get all tags in the organization. Use tags to filter processes via get_organization_runs(tag=<tag_id>). All parameters are optional.

get_task

ChatGPT
Get a single task from a process by ID. REQUIRED: 'run_id' (32-char hex process ID) and 'task_id' (32-char hex). Never call this without both parameters.

get_task

ChatGPT
Get a single task from a process by ID. REQUIRED: 'run_id' (32-char hex process ID) and 'task_id' (32-char hex). Never call this without both parameters.

get_task_comments

ChatGPT
Get all comments (threads) on a task. REQUIRED: 'task_id' (32-char hex). Optional: 'run_id' (32-char hex process ID) — provide it if you have it to avoid an extra lookup. If run_id is omitted, it is resolved automatically from the task. Never call this without task_id.

get_task_comments

ChatGPT
Get all comments (threads) on a task. REQUIRED: 'task_id' (32-char hex). Optional: 'run_id' (32-char hex process ID) — provide it if you have it to avoid an extra lookup. If run_id is omitted, it is resolved automatically from the task. Never call this without task_id.

get_tasks_for_process

ChatGPT
Get tasks for a specific process (workflow run). MANDATORY: You MUST provide either 'process_id', 'run_id', OR 'process_name'. Calling with empty parameters WILL FAIL. CORRECT usage examples: - get_tasks_for_process(process_id="abc123") - when you have the process/run ID - get_tasks_for_process(run_id="abc123") - alias for process_id (consistent with other task tools) - get_tasks_for_process(process_name="Hiring John Doe") - when you have the process name WRONG usage (will fail): - get_tasks_for_process() - NO! Missing required parameter - get_tasks_for_process(process_id=None) - NO! Must provide a value If you don't have a process_id/run_id or process_name, use search_for_processes first or extract run_id values from previous get_my_tasks results. PAGINATION: Returns 20 tasks per page. Use page=2, page=3, etc. for more. meta.total_pages shows total page count.

get_tasks_for_process

ChatGPT
Get tasks for a specific process (workflow run). MANDATORY: You MUST provide either 'process_id', 'run_id', OR 'process_name'. Calling with empty parameters WILL FAIL. CORRECT usage examples: - get_tasks_for_process(process_id="abc123") - when you have the process/run ID - get_tasks_for_process(run_id="abc123") - alias for process_id (consistent with other task tools) - get_tasks_for_process(process_name="Hiring John Doe") - when you have the process name WRONG usage (will fail): - get_tasks_for_process() - NO! Missing required parameter - get_tasks_for_process(process_id=None) - NO! Must provide a value If you don't have a process_id/run_id or process_name, use search_for_processes first or extract run_id values from previous get_my_tasks results. PAGINATION: Returns 20 tasks per page. Use page=2, page=3, etc. for more. meta.total_pages shows total page count.

get_template

ChatGPT
Get a template (checklist) by its ID or name with full details. MANDATORY: You MUST provide either 'template_id' OR 'template_name'. Calling with empty parameters WILL FAIL. CORRECT usage examples: - get_template(template_id="abc123def456") - when you have the template ID from a previous result - get_template(template_name="Employee Onboarding") - when you know the template name WRONG usage (will fail): - get_template() - NO! Missing required parameter - get_template(template_id="", template_name="") - NO! Must provide a value for one If you don't have a template_id or name, use search_for_templates(query="...") first to find templates, or use get_all_templates() to list all templates. DO NOT use this tool just to list steps — use get_template_steps instead.

get_template

ChatGPT
Get a template (checklist) by its ID or name with full details. MANDATORY: You MUST provide either 'template_id' OR 'template_name'. Calling with empty parameters WILL FAIL. CORRECT usage examples: - get_template(template_id="abc123def456") - when you have the template ID from a previous result - get_template(template_name="Employee Onboarding") - when you know the template name WRONG usage (will fail): - get_template() - NO! Missing required parameter - get_template(template_id="", template_name="") - NO! Must provide a value for one If you don't have a template_id or name, use search_for_templates(query="...") first to find templates, or use get_all_templates() to list all templates. DO NOT use this tool just to list steps — use get_template_steps instead.

get_template_folders

ChatGPT
Get all template/blueprint folders in the organization. Returns folders that contain templates (folder_type='checklist'). Use returned folder IDs with launch_process(folders=[<folder_id>]) to launch into a folder. Results include nested child folders sorted by position. Optional: filter by name with 'q'.

get_template_folders

ChatGPT
Get all template/blueprint folders in the organization. Returns folders that contain templates (folder_type='checklist'). Use returned folder IDs with launch_process(folders=[<folder_id>]) to launch into a folder. Results include nested child folders sorted by position. Optional: filter by name with 'q'.

get_template_steps

ChatGPT
Get all steps for a template in order. USE THIS instead of get_template when the user asks about steps. MANDATORY: 'template_id' (32-char hex string) is required. USE THIS TOOL when the user asks: - "What are the steps in [template]?" - "List the steps of [template]" - "Show me the steps for [template]" - Any question about a template's steps or structure - Finding a step's ID before editing or assigning it WORKFLOW: If you don't have the template_id yet: 1. Call search_for_templates(query="<template name>") to get the template_id 2. Then call get_template_steps(template_id="<id>") CORRECT usage: - get_template_steps(template_id="abc123...") DO NOT call get_template just to read its steps — use this tool instead.

get_template_steps

ChatGPT
Get all steps for a template in order. USE THIS instead of get_template when the user asks about steps. MANDATORY: 'template_id' (32-char hex string) is required. USE THIS TOOL when the user asks: - "What are the steps in [template]?" - "List the steps of [template]" - "Show me the steps for [template]" - Any question about a template's steps or structure - Finding a step's ID before editing or assigning it WORKFLOW: If you don't have the template_id yet: 1. Call search_for_templates(query="<template name>") to get the template_id 2. Then call get_template_steps(template_id="<id>") CORRECT usage: - get_template_steps(template_id="abc123...") DO NOT call get_template just to read its steps — use this tool instead.

get_user

ChatGPT
Get a single user by their numeric ID. REQUIRED: 'user_id' (positive integer). Never call this without user_id.

get_user

ChatGPT
Get a single user by their numeric ID. REQUIRED: 'user_id' (positive integer). Never call this without user_id.

get_user_tasks

ChatGPT
Get all tasks assigned to a specific organization member (not the current user). IDENTIFICATION: Provide one of user_id, user_name, or user_email. CORRECT usage: - get_user_tasks(user_id=12345) — fastest, no lookup needed - get_user_tasks(user_name="Zurly Venom") — resolves name to ID automatically - get_user_tasks(user_email="zurly@example.com") — resolves email to ID automatically WRONG usage (will fail): - get_user_tasks() — NO! Must provide at least one identifier GUEST USERS: This tool is for org members only. For guest tasks, use get_guest_tasks(guest_email="...") or get_guest_tasks(guest_id="...") instead. For current user's tasks, use get_my_tasks() instead (no user_id needed). IMPORTANT: Tallyfy has no "urgent" or "priority" field. For urgent tasks, call with no status filter and look for status="overdue" or status="hasproblem" in results. PAGINATION: Returns 20 tasks per page. Use page=2, page=3, etc. for more. meta.total_pages shows total page count.

get_user_tasks

ChatGPT
Get all tasks assigned to a specific organization member (not the current user). IDENTIFICATION: Provide one of user_id, user_name, or user_email. CORRECT usage: - get_user_tasks(user_id=12345) — fastest, no lookup needed - get_user_tasks(user_name="Zurly Venom") — resolves name to ID automatically - get_user_tasks(user_email="zurly@example.com") — resolves email to ID automatically WRONG usage (will fail): - get_user_tasks() — NO! Must provide at least one identifier GUEST USERS: This tool is for org members only. For guest tasks, use get_guest_tasks(guest_email="...") or get_guest_tasks(guest_id="...") instead. For current user's tasks, use get_my_tasks() instead (no user_id needed). IMPORTANT: Tallyfy has no "urgent" or "priority" field. For urgent tasks, call with no status filter and look for status="overdue" or status="hasproblem" in results. PAGINATION: Returns 20 tasks per page. Use page=2, page=3, etc. for more. meta.total_pages shows total page count.

invite_user_to_organization

ChatGPT
Invite a new member to the organization. MANDATORY - ALL THREE required: 1. 'email' - Valid email address 2. 'first_name' - User's first name 3. 'last_name' - User's last name CORRECT usage: - invite_user_to_organization(email="john@example.com", first_name="John", last_name="Doe") - invite_user_to_organization(email="jane@example.com", first_name="Jane", last_name="Smith", role="standard") WRONG usage (will fail): - invite_user_to_organization(email="john@example.com") - NO! Missing first_name and last_name - invite_user_to_organization(first_name="John", last_name="Doe") - NO! Missing email Optional: 'role' (light/standard/admin, defaults to 'light'), 'message' (custom invitation text). If user doesn't provide all required info, ASK them before calling this tool.

invite_user_to_organization

ChatGPT
Invite a new member to the organization. MANDATORY - ALL THREE required: 1. 'email' - Valid email address 2. 'first_name' - User's first name 3. 'last_name' - User's last name CORRECT usage: - invite_user_to_organization(email="john@example.com", first_name="John", last_name="Doe") - invite_user_to_organization(email="jane@example.com", first_name="Jane", last_name="Smith", role="standard") WRONG usage (will fail): - invite_user_to_organization(email="john@example.com") - NO! Missing first_name and last_name - invite_user_to_organization(first_name="John", last_name="Doe") - NO! Missing email Optional: 'role' (light/standard/admin, defaults to 'light'), 'message' (custom invitation text). If user doesn't provide all required info, ASK them before calling this tool.

launch_process

ChatGPT
Launch a new workflow process (run) from a template. REQUIRED: 'template_id' (32-char hex) and 'name' (process name string). PRERUN vs STEP-FORM-FIELDS — TWO DIFFERENT FORM SURFACES: - prerun (optional list): KICKOFF FORM fields — initialization data collected BEFORE the workflow starts. These are the form fields the user fills in on the launch screen (e.g. "Customer name", "Project ID", "Department"). Defined at the TEMPLATE level (not on a specific step). Use get_kickoff_fields(template_id) to discover available kickoff field IDs. Format: list of {"<kickoff_field_id>": "<value>"} entries. Example: prerun=[{"abc123def456...": "Acme Corp"}, {"xyz789abc...": "2026-01-15"}] - Step-level form fields (NOT set here — set later via update_task): Filled in DURING workflow execution as steps run. To set a step's form-field values, complete or update the relevant task with update_task and pass taskdata={field_id: value, ...}. These are NOT prerun fields. Rule of thumb: If the user provides data BEFORE launching the workflow, it goes in prerun. If they provide data WHILE doing tasks, it goes in update_task.taskdata. CORRECT usage: launch_process(template_id="abc123...", name="Onboarding - Jane Doe") launch_process(template_id="abc123...", name="Q1 Review", tags=["tag_id"], folders=["folder_id"]) launch_process( template_id="abc123...", name="Onboarding - Acme", prerun=[{"<customer_name_field_id>": "Acme Corp"}, {"<start_date_field_id>": "2026-01-15"}], owner_id=12345, folders=["<folder_id>"] ) WRONG usage (will fail): launch_process(template_id="abc123...") ← MISSING name launch_process(name="Review") ← MISSING template_id

launch_process

ChatGPT
Launch a new workflow process (run) from a template. REQUIRED: 'template_id' (32-char hex) and 'name' (process name string). PRERUN vs STEP-FORM-FIELDS — TWO DIFFERENT FORM SURFACES: - prerun (optional list): KICKOFF FORM fields — initialization data collected BEFORE the workflow starts. These are the form fields the user fills in on the launch screen (e.g. "Customer name", "Project ID", "Department"). Defined at the TEMPLATE level (not on a specific step). Use get_kickoff_fields(template_id) to discover available kickoff field IDs. Format: list of {"<kickoff_field_id>": "<value>"} entries. Example: prerun=[{"abc123def456...": "Acme Corp"}, {"xyz789abc...": "2026-01-15"}] - Step-level form fields (NOT set here — set later via update_task): Filled in DURING workflow execution as steps run. To set a step's form-field values, complete or update the relevant task with update_task and pass taskdata={field_id: value, ...}. These are NOT prerun fields. Rule of thumb: If the user provides data BEFORE launching the workflow, it goes in prerun. If they provide data WHILE doing tasks, it goes in update_task.taskdata. CORRECT usage: launch_process(template_id="abc123...", name="Onboarding - Jane Doe") launch_process(template_id="abc123...", name="Q1 Review", tags=["tag_id"], folders=["folder_id"]) launch_process( template_id="abc123...", name="Onboarding - Acme", prerun=[{"<customer_name_field_id>": "Acme Corp"}, {"<start_date_field_id>": "2026-01-15"}], owner_id=12345, folders=["<folder_id>"] ) WRONG usage (will fail): launch_process(template_id="abc123...") ← MISSING name launch_process(name="Review") ← MISSING template_id

move_form_field

ChatGPT
Move form field between steps with position control. REQUIRED: 'template_id' (32-char hex), 'from_step' (32-char hex), 'field_id' (32-char hex), and 'to_step' (32-char hex). Optional: 'position' (defaults to 1). Never call this without the four required parameters.

move_form_field

ChatGPT
Move form field between steps with position control. REQUIRED: 'template_id' (32-char hex), 'from_step' (32-char hex), 'field_id' (32-char hex), and 'to_step' (32-char hex). Optional: 'position' (defaults to 1). Never call this without the four required parameters.

reactivate_process

ChatGPT
Reactivate an archived process (run) to make it active again. REQUIRED: 'run_id' (32-char hex). Never call this without run_id.

reactivate_process

ChatGPT
Reactivate an archived process (run) to make it active again. REQUIRED: 'run_id' (32-char hex). Never call this without run_id.

remove_object_from_folder

ChatGPT
Remove an object from a folder using the folder-object relation ID. REQUIRED: 'folder_object_id' (the ID of the folder-object relationship, not the object ID itself). Never call this without folder_object_id.

remove_object_from_folder

ChatGPT
Remove an object from a folder using the folder-object relation ID. REQUIRED: 'folder_object_id' (the ID of the folder-object relationship, not the object ID itself). Never call this without folder_object_id.

reopen_kickoff_form

ChatGPT
Reopen a completed kickoff form to allow edits. REQUIRED: 'run_id' (32-char hex process ID). Never call this without run_id.

reopen_kickoff_form

ChatGPT
Reopen a completed kickoff form to allow edits. REQUIRED: 'run_id' (32-char hex process ID). Never call this without run_id.

reopen_task

ChatGPT
Reopen a previously completed task. REQUIRED: 'run_id' (32-char hex process ID), 'task_id' (32-char hex), and 'reason' (string explanation for reopening). ⚠️ MANDATORY reason PARAMETER: - The reason parameter is REQUIRED (not optional) — empty/whitespace-only strings raise ToolError. - It mirrors the native Tallyfy UI, which requires a reason before reopening. - The reason is automatically posted as a comment on the task for audit trail purposes — visible to all task participants and persisted permanently in the run history. - Length: keep it concise (1-2 sentences, ideally under 500 characters). Very long reasons are accepted by the API but may be truncated in some UI views. - YOU MUST ASK THE USER for the reason before calling this tool. Do NOT invent, assume, or fabricate a reason — that would create a misleading audit trail. WHY: Reopening a task is a corrective action that affects workflow integrity. The audit comment ensures team members (assignees, owners, observers) understand WHY the task was reopened — preventing confusion ("Was the previous completion wrong? Did requirements change?"). CORRECT usage: reopen_task(run_id="abc...", task_id="def...", reason="Incorrect completion, needs review") reopen_task(run_id="abc...", task_id="def...", reason="Customer reported issue not addressed; reopening for follow-up.") WRONG usage (will fail or create a misleading audit): reopen_task(run_id="abc...", task_id="def...") MISSING reason → ToolError reopen_task(run_id="abc...", task_id="def...", reason="") EMPTY reason → ToolError reopen_task(run_id="abc...", task_id="def...", reason="reopening") AI-fabricated → misleading audit Never call this without all three required parameters. Always ask the user to provide the reason.

reopen_task

ChatGPT
Reopen a previously completed task. REQUIRED: 'run_id' (32-char hex process ID), 'task_id' (32-char hex), and 'reason' (string explanation for reopening). ⚠️ MANDATORY reason PARAMETER: - The reason parameter is REQUIRED (not optional) — empty/whitespace-only strings raise ToolError. - It mirrors the native Tallyfy UI, which requires a reason before reopening. - The reason is automatically posted as a comment on the task for audit trail purposes — visible to all task participants and persisted permanently in the run history. - Length: keep it concise (1-2 sentences, ideally under 500 characters). Very long reasons are accepted by the API but may be truncated in some UI views. - YOU MUST ASK THE USER for the reason before calling this tool. Do NOT invent, assume, or fabricate a reason — that would create a misleading audit trail. WHY: Reopening a task is a corrective action that affects workflow integrity. The audit comment ensures team members (assignees, owners, observers) understand WHY the task was reopened — preventing confusion ("Was the previous completion wrong? Did requirements change?"). CORRECT usage: reopen_task(run_id="abc...", task_id="def...", reason="Incorrect completion, needs review") reopen_task(run_id="abc...", task_id="def...", reason="Customer reported issue not addressed; reopening for follow-up.") WRONG usage (will fail or create a misleading audit): reopen_task(run_id="abc...", task_id="def...") MISSING reason → ToolError reopen_task(run_id="abc...", task_id="def...", reason="") EMPTY reason → ToolError reopen_task(run_id="abc...", task_id="def...", reason="reopening") AI-fabricated → misleading audit Never call this without all three required parameters. Always ask the user to provide the reason.

reorder_form_fields

ChatGPT
Reorder form fields in a step. REQUIRED: 'template_id' (32-char hex), 'step_id' (32-char hex), and 'field_order' (list of field IDs in desired order). Never call this without all three parameters.

reorder_form_fields

ChatGPT
Reorder form fields in a step. REQUIRED: 'template_id' (32-char hex), 'step_id' (32-char hex), and 'field_order' (list of field IDs in desired order). Never call this without all three parameters.

reorder_step

ChatGPT
Move a step to a new position in a template. REQUIRED: 'template_id' (32-char hex), 'step_id' (32-char hex), and 'position' (integer >= 0). Never call this without all three parameters.

reorder_step

ChatGPT
Move a step to a new position in a template. REQUIRED: 'template_id' (32-char hex), 'step_id' (32-char hex), and 'position' (integer >= 0). Never call this without all three parameters.

report_task_issue

ChatGPT
Report an issue on a task. REQUIRED: 'task_id' (32-char hex) and 'content' (issue description). Optional: 'run_id' (pass if available). Creates a comment with 'problem' label. Never call this without both required parameters.

report_task_issue

ChatGPT
Report an issue on a task. REQUIRED: 'task_id' (32-char hex) and 'content' (issue description). Optional: 'run_id' (pass if available). Creates a comment with 'problem' label. Never call this without both required parameters.

resolve_task_issues

ChatGPT
Resolve a specific issue on a task. REQUIRED: 'task_id' (32-char hex) and 'thread_id' (the issue comment ID returned by report_task_issue). Optional: 'run_id' (pass if available). Never call this without both required parameters.

resolve_task_issues

ChatGPT
Resolve a specific issue on a task. REQUIRED: 'task_id' (32-char hex) and 'thread_id' (the issue comment ID returned by report_task_issue). Optional: 'run_id' (pass if available). Never call this without both required parameters.

search_all

ChatGPT
Search across multiple entity types in one request. Returns results grouped by type. MANDATORY: You MUST provide a 'query' parameter. Calling with empty/missing query WILL FAIL. Searches blueprints, processes, tasks, and snippets by default. Use the 'types' parameter to narrow down. Valid types: blueprint, process, task, snippet, capture, step. PAGINATION: Returns 20 items per page per entity type by default. Use page=2, page=3 for more results, or per_page to change page size (max 100). CORRECT usage examples: - search_all(query="onboarding") - search everything for "onboarding" - search_all(query="Q4", types=["process", "task"]) - search only processes and tasks - search_all(query="report", per_page=10) - search with fewer results per type - search_all(query="onboarding", page=2) - second page of results WRONG usage (will fail): - search_all() - NO! Missing required query parameter - search_all(query="") - NO! Empty query not allowed

search_all

ChatGPT
Search across multiple entity types in one request. Returns results grouped by type. MANDATORY: You MUST provide a 'query' parameter. Calling with empty/missing query WILL FAIL. Searches blueprints, processes, tasks, and snippets by default. Use the 'types' parameter to narrow down. Valid types: blueprint, process, task, snippet, capture, step. PAGINATION: Returns 20 items per page per entity type by default. Use page=2, page=3 for more results, or per_page to change page size (max 100). CORRECT usage examples: - search_all(query="onboarding") - search everything for "onboarding" - search_all(query="Q4", types=["process", "task"]) - search only processes and tasks - search_all(query="report", per_page=10) - search with fewer results per type - search_all(query="onboarding", page=2) - second page of results WRONG usage (will fail): - search_all() - NO! Missing required query parameter - search_all(query="") - NO! Empty query not allowed

search_for_processes

ChatGPT
Search for workflow processes (runs) in the organization by keyword. MANDATORY: You MUST provide a 'query' parameter. Calling with empty/missing query WILL FAIL. CORRECT usage examples: - search_for_processes(query="onboarding") - search for onboarding processes - search_for_processes(query="John Doe") - search for processes related to John Doe - search_for_processes(query="Q4 report") - search for Q4 report processes WRONG usage (will fail): - search_for_processes() - NO! Missing required query parameter - search_for_processes(query="") - NO! Empty query not allowed Extract search terms from user's request. If user says "find the hiring process for Sarah", use query="hiring Sarah". PAGINATION: Returns 20 results per page. Use page=2, page=3, etc. for more. meta.total_pages shows total page count.

search_for_processes

ChatGPT
Search for workflow processes (runs) in the organization by keyword. MANDATORY: You MUST provide a 'query' parameter. Calling with empty/missing query WILL FAIL. CORRECT usage examples: - search_for_processes(query="onboarding") - search for onboarding processes - search_for_processes(query="John Doe") - search for processes related to John Doe - search_for_processes(query="Q4 report") - search for Q4 report processes WRONG usage (will fail): - search_for_processes() - NO! Missing required query parameter - search_for_processes(query="") - NO! Empty query not allowed Extract search terms from user's request. If user says "find the hiring process for Sarah", use query="hiring Sarah". PAGINATION: Returns 20 results per page. Use page=2, page=3, etc. for more. meta.total_pages shows total page count.

search_for_snippets

ChatGPT
Search for text snippets (stored text templates) in the organization by keyword. MANDATORY: You MUST provide a 'query' parameter. Calling with empty/missing query WILL FAIL. CORRECT usage examples: - search_for_snippets(query="welcome email") - search for welcome email snippets - search_for_snippets(query="disclaimer") - search for disclaimer snippets WRONG usage (will fail): - search_for_snippets() - NO! Missing required query parameter - search_for_snippets(query="") - NO! Empty query not allowed Extract search terms from user's request. If user says "find the thank you snippet", use query="thank you". PAGINATION: Returns 20 results per page. Use page=2, page=3, etc. for more. meta.total_pages shows total page count.

search_for_snippets

ChatGPT
Search for text snippets (stored text templates) in the organization by keyword. MANDATORY: You MUST provide a 'query' parameter. Calling with empty/missing query WILL FAIL. CORRECT usage examples: - search_for_snippets(query="welcome email") - search for welcome email snippets - search_for_snippets(query="disclaimer") - search for disclaimer snippets WRONG usage (will fail): - search_for_snippets() - NO! Missing required query parameter - search_for_snippets(query="") - NO! Empty query not allowed Extract search terms from user's request. If user says "find the thank you snippet", use query="thank you". PAGINATION: Returns 20 results per page. Use page=2, page=3, etc. for more. meta.total_pages shows total page count.

search_for_tasks

ChatGPT
Search for tasks in the organization by keyword. MANDATORY: You MUST provide a 'query' parameter. Calling with empty/missing query WILL FAIL. CORRECT usage examples: - search_for_tasks(query="urgent") - search for urgent tasks - search_for_tasks(query="review document") - search for document review tasks - search_for_tasks(query="approval") - search for approval-related tasks WRONG usage (will fail): - search_for_tasks() - NO! Missing required query parameter - search_for_tasks(query="") - NO! Empty query not allowed Extract search terms from user's request. If user says "find my tasks about reports", use query="reports". PAGINATION: Returns 20 results per page. Use page=2, page=3, etc. for more. meta.total_pages shows total page count.

search_for_tasks

ChatGPT
Search for tasks in the organization by keyword. MANDATORY: You MUST provide a 'query' parameter. Calling with empty/missing query WILL FAIL. CORRECT usage examples: - search_for_tasks(query="urgent") - search for urgent tasks - search_for_tasks(query="review document") - search for document review tasks - search_for_tasks(query="approval") - search for approval-related tasks WRONG usage (will fail): - search_for_tasks() - NO! Missing required query parameter - search_for_tasks(query="") - NO! Empty query not allowed Extract search terms from user's request. If user says "find my tasks about reports", use query="reports". PAGINATION: Returns 20 results per page. Use page=2, page=3, etc. for more. meta.total_pages shows total page count.

search_for_templates

ChatGPT
Search for workflow templates (blueprints) in the organization by keyword. MANDATORY: You MUST provide a 'query' parameter. Calling with empty/missing query WILL FAIL. CORRECT usage examples: - search_for_templates(query="onboarding") - search for onboarding templates - search_for_templates(query="HR") - search for HR-related templates - search_for_templates(query="approval workflow") - search for approval templates WRONG usage (will fail): - search_for_templates() - NO! Missing required query parameter - search_for_templates(query="") - NO! Empty query not allowed Extract search terms from user's request. If user says "show me HR templates", use query="HR". If user wants ALL templates without filtering, use get_all_templates() instead. PAGINATION: Returns 20 results per page. Use page=2, page=3, etc. for more. meta.total_pages shows total page count.

search_for_templates

ChatGPT
Search for workflow templates (blueprints) in the organization by keyword. MANDATORY: You MUST provide a 'query' parameter. Calling with empty/missing query WILL FAIL. CORRECT usage examples: - search_for_templates(query="onboarding") - search for onboarding templates - search_for_templates(query="HR") - search for HR-related templates - search_for_templates(query="approval workflow") - search for approval templates WRONG usage (will fail): - search_for_templates() - NO! Missing required query parameter - search_for_templates(query="") - NO! Empty query not allowed Extract search terms from user's request. If user says "show me HR templates", use query="HR". If user wants ALL templates without filtering, use get_all_templates() instead. PAGINATION: Returns 20 results per page. Use page=2, page=3, etc. for more. meta.total_pages shows total page count.

suggest_automation_consolidation

ChatGPT
Read-only: prioritized consolidation suggestions for a template's automation rules. suggestion_type (lowercase, in type field): - orphaned_rule (high) — references deleted steps. Includes orphaned_step_ids. Recommended: delete_automation_rule. - exact_duplicate (high) — IDENTICAL conditions AND actions across rules. Recommended: keep one, delete rest. - conflict (high) — same trigger, contradictory action_verbs on same target (show/hide, assign/clear_assignees, assign/unassign). Recommended: review. - same_trigger_merge (medium) — same trigger, non-conflicting actions across rules. Recommended: merge via update_automation_rule, delete rest. RETURN: {template_id, template_title, suggestions: [{type, priority:"high"|"medium"|"low", rule_ids, rules:[{id,alias}], description, recommended_action:"delete"|"delete_duplicates"|"review_and_resolve"|"merge_actions"}], summary: {total_automations, total_suggestions, high_priority, medium_priority}} EXAMPLE: suggest_automation_consolidation(template_id="58c03f...") → {template_title:"New hire onboarding", suggestions:[{type:"orphaned_rule",priority:"high",rule_ids:["aut_abc"],description:"Rule references deleted step_id 'step_99'",recommended_action:"delete"},{type:"exact_duplicate",priority:"high",rule_ids:["aut_def","aut_ghi"],recommended_action:"delete_duplicates"}], summary:{total_automations:12,total_suggestions:5,high_priority:2}}. Remediation: "delete"/"delete_duplicates"→delete_automation_rule; "merge_actions"→update_automation_rule; "review_and_resolve"→ask user. REQUIRED: 'template_id' (32-character hex). Never call without it.

suggest_automation_consolidation

ChatGPT
Read-only: prioritized consolidation suggestions for a template's automation rules. suggestion_type (lowercase, in type field): - orphaned_rule (high) — references deleted steps. Includes orphaned_step_ids. Recommended: delete_automation_rule. - exact_duplicate (high) — IDENTICAL conditions AND actions across rules. Recommended: keep one, delete rest. - conflict (high) — same trigger, contradictory action_verbs on same target (show/hide, assign/clear_assignees, assign/unassign). Recommended: review. - same_trigger_merge (medium) — same trigger, non-conflicting actions across rules. Recommended: merge via update_automation_rule, delete rest. RETURN: {template_id, template_title, suggestions: [{type, priority:"high"|"medium"|"low", rule_ids, rules:[{id,alias}], description, recommended_action:"delete"|"delete_duplicates"|"review_and_resolve"|"merge_actions"}], summary: {total_automations, total_suggestions, high_priority, medium_priority}} EXAMPLE: suggest_automation_consolidation(template_id="58c03f...") → {template_title:"New hire onboarding", suggestions:[{type:"orphaned_rule",priority:"high",rule_ids:["aut_abc"],description:"Rule references deleted step_id 'step_99'",recommended_action:"delete"},{type:"exact_duplicate",priority:"high",rule_ids:["aut_def","aut_ghi"],recommended_action:"delete_duplicates"}], summary:{total_automations:12,total_suggestions:5,high_priority:2}}. Remediation: "delete"/"delete_duplicates"→delete_automation_rule; "merge_actions"→update_automation_rule; "review_and_resolve"→ask user. REQUIRED: 'template_id' (32-character hex). Never call without it.

suggest_form_fields_for_step

ChatGPT
Retrieve step details with existing form fields to recommend additional fields. Returns the step's title, summary, type, and existing form fields (captures), plus the template title for context. Use this data to suggest relevant form fields by considering: - The step's purpose (inferred from title and summary) - What fields already exist (avoid duplicates) - Common patterns: approval steps need decision dropdowns, contact steps need text fields for email/phone, document steps need file uploads, financial steps need amount fields - Supported field types: text, textarea, date, dropdown, multiselect, radio, file, table, assignees_form RECOMMENDATION OUTPUT: After analyzing the returned data, produce a list of recommended fields where each entry includes: - field_type (one of: text, textarea, date, dropdown, multiselect, radio, file, table, assignees_form) - label (suggested human-readable label for the field) - why (one-sentence rationale tying the suggestion back to step purpose, e.g. "approval steps need a decision dropdown so the assignee's verdict is captured structurally" or "contact-collection steps need a text field for email capture and downstream notifications") - required (true/false based on whether the data is essential) To add suggested fields, use add_form_field_to_step with the recommended field_data. REQUIRED: 'template_id' (32-char hex) and 'step_id' (32-char hex). Never call this without both parameters.

suggest_form_fields_for_step

ChatGPT
Retrieve step details with existing form fields to recommend additional fields. Returns the step's title, summary, type, and existing form fields (captures), plus the template title for context. Use this data to suggest relevant form fields by considering: - The step's purpose (inferred from title and summary) - What fields already exist (avoid duplicates) - Common patterns: approval steps need decision dropdowns, contact steps need text fields for email/phone, document steps need file uploads, financial steps need amount fields - Supported field types: text, textarea, date, dropdown, multiselect, radio, file, table, assignees_form RECOMMENDATION OUTPUT: After analyzing the returned data, produce a list of recommended fields where each entry includes: - field_type (one of: text, textarea, date, dropdown, multiselect, radio, file, table, assignees_form) - label (suggested human-readable label for the field) - why (one-sentence rationale tying the suggestion back to step purpose, e.g. "approval steps need a decision dropdown so the assignee's verdict is captured structurally" or "contact-collection steps need a text field for email capture and downstream notifications") - required (true/false based on whether the data is essential) To add suggested fields, use add_form_field_to_step with the recommended field_data. REQUIRED: 'template_id' (32-char hex) and 'step_id' (32-char hex). Never call this without both parameters.

suggest_instance_name

ChatGPT
Suggest a short, memorable instance name (e.g. customer name, project name) for a Tallyfy process given the template name and optional context. Returns a single string; the user usually edits before launching. Replaces the cloudflare-workers text-completion AI worker.

suggest_instance_name

ChatGPT
Suggest a short, memorable instance name (e.g. customer name, project name) for a Tallyfy process given the template name and optional context. Returns a single string; the user usually edits before launching. Replaces the cloudflare-workers text-completion AI worker.

suggest_kickoff_fields

ChatGPT
Retrieve template data with existing kickoff fields and step context to recommend new kickoff fields. Returns the template title, summary, existing prerun/kickoff fields, and step titles/summaries. Use this data to suggest kickoff fields that would help initialize the workflow by considering: - What information the steps will need (client names, project details, dates, budgets) - What existing kickoff fields already capture (avoid duplicates) - The template's domain and purpose (inferred from title, summary, and step content) - Field types: text, textarea, date, dropdown, number, file REQUIRED: 'template_id' (32-character hex string). Never call this without the template_id parameter.

suggest_kickoff_fields

ChatGPT
Retrieve template data with existing kickoff fields and step context to recommend new kickoff fields. Returns the template title, summary, existing prerun/kickoff fields, and step titles/summaries. Use this data to suggest kickoff fields that would help initialize the workflow by considering: - What information the steps will need (client names, project details, dates, budgets) - What existing kickoff fields already capture (avoid duplicates) - The template's domain and purpose (inferred from title, summary, and step content) - Field types: text, textarea, date, dropdown, number, file REQUIRED: 'template_id' (32-character hex string). Never call this without the template_id parameter.

suggest_procedure_steps

ChatGPT
Suggest a numbered list of procedure steps for a topic. Returns a JSON array of {step_name, task_type}. Use as a starting skeleton; pass into add_step_to_template loops once the user confirms. Replaces the cloudflare-workers text-completion AI worker.

suggest_procedure_steps

ChatGPT
Suggest a numbered list of procedure steps for a topic. Returns a JSON array of {step_name, task_type}. Use as a starting skeleton; pass into add_step_to_template loops once the user confirms. Replaces the cloudflare-workers text-completion AI worker.

suggest_step_deadline

ChatGPT
Retrieve step details with template context to recommend an appropriate deadline. Returns the step's title, summary, position in the workflow, current deadline (if any), assignees, and the total number of steps in the template. Use this data to suggest a reasonable deadline by considering: - Step complexity (review/approve steps are quick; document creation takes longer) - Position in workflow (early steps may need faster turnaround) - Dependencies and assignee count - Whether the step has form fields that require data gathering Suggest deadlines using: value (number), unit ('minutes', 'hours', 'days', 'weeks'), and option ('from' = relative to process launch). REQUIRED: Both 'template_id' and 'step_id' must be provided (32-character hex strings). Never call this without both parameters.

suggest_step_deadline

ChatGPT
Retrieve step details with template context to recommend an appropriate deadline. Returns the step's title, summary, position in the workflow, current deadline (if any), assignees, and the total number of steps in the template. Use this data to suggest a reasonable deadline by considering: - Step complexity (review/approve steps are quick; document creation takes longer) - Position in workflow (early steps may need faster turnaround) - Dependencies and assignee count - Whether the step has form fields that require data gathering Suggest deadlines using: value (number), unit ('minutes', 'hours', 'days', 'weeks'), and option ('from' = relative to process launch). REQUIRED: Both 'template_id' and 'step_id' must be provided (32-character hex strings). Never call this without both parameters.

tag_process

ChatGPT
Assign a user-defined tag to a running process. REQUIRED: 'run_id' (32-char hex) and 'tag_id'. Multiple tags per process are allowed — call this tool repeatedly with the same run_id and different tag_ids to apply more than one. Idempotent: re-tagging with an already-applied tag_id is a no-op. Tags are used for filtering (search_for_processes), grouping in dashboards, and organizing processes by team/department/category. To create a new tag first, use create_tag; to remove a tag, use untag_process. Never call this without both parameters.

tag_process

ChatGPT
Assign a user-defined tag to a running process. REQUIRED: 'run_id' (32-char hex) and 'tag_id'. Multiple tags per process are allowed — call this tool repeatedly with the same run_id and different tag_ids to apply more than one. Idempotent: re-tagging with an already-applied tag_id is a no-op. Tags are used for filtering (search_for_processes), grouping in dashboards, and organizing processes by team/department/category. To create a new tag first, use create_tag; to remove a tag, use untag_process. Never call this without both parameters.

tag_template

ChatGPT
Assign a tag to a template. REQUIRED: 'template_id' (32-char hex) and 'tag_id'. Never call this without both parameters.

tag_template

ChatGPT
Assign a tag to a template. REQUIRED: 'template_id' (32-char hex) and 'tag_id'. Never call this without both parameters.

tallyfy_api_call

ChatGPT
UNIVERSAL FALLBACK — call ANY Tallyfy REST API endpoint when no specific tool fits. Path MUST exist in the live OpenAPI spec (auto-refreshed hourly). The `{org} placeholder is auto-substituted with the authenticated org_id. USAGE RULES (MANDATORY): 1. Prefer specific tools (search_*, get_*, create_*, etc.) whenever one matches — only reach for this tool after confirming no specific tool works. 2. For POST/PUT/PATCH/DELETE, call ask_user_question` FIRST to confirm the destructive action with the user. Never issue a write without explicit user confirmation. 3. Paths under /admin, /support, /auth, /oauth, /metrics, /health, /ready, /debug are BLOCKED and will return an error. 4. The body argument is raw JSON for the endpoint — shape it per the Tallyfy API docs. 5. Returns {status_code, headers, body}. EXAMPLE PATHS (illustrative only — confirm against the live spec): - GET /organizations/{org}/runs — list processes - GET /organizations/{org}/checklists/{template_id} — fetch template - GET /organizations/{org}/users/{user_id}/tasks — user's tasks - POST /organizations/{org}/runs — launch process (write — confirm first) - GET /organizations/{org}/checklists/{template_id}/steps/{step_id}/captures — step form fields Note: {org} is auto-substituted; pass the literal placeholder. Other path params (template_id, user_id, etc.) you provide explicitly.

tallyfy_api_call

ChatGPT
UNIVERSAL FALLBACK — call ANY Tallyfy REST API endpoint when no specific tool fits. Path MUST exist in the live OpenAPI spec (auto-refreshed hourly). The `{org} placeholder is auto-substituted with the authenticated org_id. USAGE RULES (MANDATORY): 1. Prefer specific tools (search_*, get_*, create_*, etc.) whenever one matches — only reach for this tool after confirming no specific tool works. 2. For POST/PUT/PATCH/DELETE, call ask_user_question` FIRST to confirm the destructive action with the user. Never issue a write without explicit user confirmation. 3. Paths under /admin, /support, /auth, /oauth, /metrics, /health, /ready, /debug are BLOCKED and will return an error. 4. The body argument is raw JSON for the endpoint — shape it per the Tallyfy API docs. 5. Returns {status_code, headers, body}. EXAMPLE PATHS (illustrative only — confirm against the live spec): - GET /organizations/{org}/runs — list processes - GET /organizations/{org}/checklists/{template_id} — fetch template - GET /organizations/{org}/users/{user_id}/tasks — user's tasks - POST /organizations/{org}/runs — launch process (write — confirm first) - GET /organizations/{org}/checklists/{template_id}/steps/{step_id}/captures — step form fields Note: {org} is auto-substituted; pass the literal placeholder. Other path params (template_id, user_id, etc.) you provide explicitly.

untag_process

ChatGPT
Remove a tag from a running process. REQUIRED: 'run_id' (32-char hex) and 'tag_id'. Never call this without both parameters.

untag_process

ChatGPT
Remove a tag from a running process. REQUIRED: 'run_id' (32-char hex) and 'tag_id'. Never call this without both parameters.

untag_template

ChatGPT
Remove a tag from a template. REQUIRED: 'tag_id' and 'template_id'. Never call this without both parameters.

untag_template

ChatGPT
Remove a tag from a template. REQUIRED: 'tag_id' and 'template_id'. Never call this without both parameters.

update_automation_rule

ChatGPT
Modify automation conditions and actions. REQUIRED (all three): 'template_id' (32-char hex), 'automation_id' (32-char hex), 'automation_data' (dict). Use "actions" (NOT "then_actions"). Use "alias" (NOT "automated_alias"). Use "step"/"field"/"kickoff" for conditionable_type (auto-resolved). VALID ENUM VALUES: STEP operations: completed, reopened, approved, rejected, acknowledged, expired, not_assigned FIELD/KICKOFF ops: contains, not_contains, equals, not_equals, equals_any, greater_than, less_than, is_empty, is_not_empty action_verb: show, hide, deadline, reopen, assign, unassign, assign_only, clear_assignees, emit_webhook CONDITION ↔ ACTION COMPATIBILITY MATRIX: conditionable_type=step + step op → ANY action_verb (e.g. "step X completed → assign user Z") conditionable_type=field + field op → ANY action_verb (common: show/hide/assign; e.g. "Amount > 10000 → assign reviewer") conditionable_type=kickoff + field op → ANY action_verb (common: show/hide; e.g. "Department = 'Legal' → show step") ACTION-SPECIFIC REQUIRED FIELDS: - assignment → assignees: {users:[...], guests:[...], groups:[...]} - deadline → deadline: {value, unit ("days"|"hours"|"minutes"|"weeks"|"months"), option ("from"|"before")} - emit_webhook → webhook_url AND alias_name - show/hide/reopen/clear_assignees/unassign → only target_step_id INCOMPATIBLE COMBOS (produce 422 errors): - assignment without assignees - deadline without deadline.value + deadline.unit - webhook without webhook_url + alias_name - operation="completed" with conditionable_type="field" (use "equals"/"contains") CORRECT: update_automation_rule(template_id="abc...", automation_id="def...", automation_data={"conditions":[...], "actions":[...]}) WRONG: update_automation_rule(automation_id="def...", automation_data={...}) ← MISSING template_id Never call this without all three parameters.

update_automation_rule

ChatGPT
Modify automation conditions and actions. REQUIRED (all three): 'template_id' (32-char hex), 'automation_id' (32-char hex), 'automation_data' (dict). Use "actions" (NOT "then_actions"). Use "alias" (NOT "automated_alias"). Use "step"/"field"/"kickoff" for conditionable_type (auto-resolved). VALID ENUM VALUES: STEP operations: completed, reopened, approved, rejected, acknowledged, expired, not_assigned FIELD/KICKOFF ops: contains, not_contains, equals, not_equals, equals_any, greater_than, less_than, is_empty, is_not_empty action_verb: show, hide, deadline, reopen, assign, unassign, assign_only, clear_assignees, emit_webhook CONDITION ↔ ACTION COMPATIBILITY MATRIX: conditionable_type=step + step op → ANY action_verb (e.g. "step X completed → assign user Z") conditionable_type=field + field op → ANY action_verb (common: show/hide/assign; e.g. "Amount > 10000 → assign reviewer") conditionable_type=kickoff + field op → ANY action_verb (common: show/hide; e.g. "Department = 'Legal' → show step") ACTION-SPECIFIC REQUIRED FIELDS: - assignment → assignees: {users:[...], guests:[...], groups:[...]} - deadline → deadline: {value, unit ("days"|"hours"|"minutes"|"weeks"|"months"), option ("from"|"before")} - emit_webhook → webhook_url AND alias_name - show/hide/reopen/clear_assignees/unassign → only target_step_id INCOMPATIBLE COMBOS (produce 422 errors): - assignment without assignees - deadline without deadline.value + deadline.unit - webhook without webhook_url + alias_name - operation="completed" with conditionable_type="field" (use "equals"/"contains") CORRECT: update_automation_rule(template_id="abc...", automation_id="def...", automation_data={"conditions":[...], "actions":[...]}) WRONG: update_automation_rule(automation_id="def...", automation_data={...}) ← MISSING template_id Never call this without all three parameters.

update_dropdown_options

ChatGPT
Replace the options list on a dropdown/radio/multiselect form field. REQUIRED: 'template_id' (32-char hex), 'step_id' (32-char hex), 'field_id' (32-char hex), and 'options' (list). ACCEPTED options FORMATS — pass EITHER format (the tool normalizes both): Format A — STRING ARRAY (simplest, recommended for new options): options=["High", "Medium", "Low"] The tool auto-converts each string to {id: <sequential>, label: <string>}. IDs are assigned 1, 2, 3, ... in input order. Format B — DICT ARRAY with explicit ids/labels: options=[ {"id": 1, "label": "High"}, {"id": 2, "label": "Medium"}, {"id": 3, "label": "Low"} ] Use this when you need to preserve specific IDs (e.g. matching external system codes, or keeping IDs stable across updates). Format B alternate — text instead of label (also accepted): options=[{"id": 1, "text": "High"}, ...] REPLACEMENT vs APPEND: This tool REPLACES the entire options list — it does NOT append. To add an option, fetch existing options with get_dropdown_options, add the new entry to the array, and pass the full updated list back. CAUTION: Removing or changing the IDs of existing options can affect already-collected form data (existing process runs reference options by ID). Prefer adding new options with new IDs over deleting/renumbering existing ones. CORRECT usage: update_dropdown_options( template_id="abc...", step_id="def...", field_id="ghi...", options=["Approved", "Rejected", "Needs Review"] ) update_dropdown_options( template_id="abc...", step_id="def...", field_id="ghi...", options=[{"id": 100, "label": "Approved"}, {"id": 200, "label": "Rejected"}] ) Never call this without all four parameters.

update_dropdown_options

ChatGPT
Replace the options list on a dropdown/radio/multiselect form field. REQUIRED: 'template_id' (32-char hex), 'step_id' (32-char hex), 'field_id' (32-char hex), and 'options' (list). ACCEPTED options FORMATS — pass EITHER format (the tool normalizes both): Format A — STRING ARRAY (simplest, recommended for new options): options=["High", "Medium", "Low"] The tool auto-converts each string to {id: <sequential>, label: <string>}. IDs are assigned 1, 2, 3, ... in input order. Format B — DICT ARRAY with explicit ids/labels: options=[ {"id": 1, "label": "High"}, {"id": 2, "label": "Medium"}, {"id": 3, "label": "Low"} ] Use this when you need to preserve specific IDs (e.g. matching external system codes, or keeping IDs stable across updates). Format B alternate — text instead of label (also accepted): options=[{"id": 1, "text": "High"}, ...] REPLACEMENT vs APPEND: This tool REPLACES the entire options list — it does NOT append. To add an option, fetch existing options with get_dropdown_options, add the new entry to the array, and pass the full updated list back. CAUTION: Removing or changing the IDs of existing options can affect already-collected form data (existing process runs reference options by ID). Prefer adding new options with new IDs over deleting/renumbering existing ones. CORRECT usage: update_dropdown_options( template_id="abc...", step_id="def...", field_id="ghi...", options=["Approved", "Rejected", "Needs Review"] ) update_dropdown_options( template_id="abc...", step_id="def...", field_id="ghi...", options=[{"id": 100, "label": "Approved"}, {"id": 200, "label": "Rejected"}] ) Never call this without all four parameters.

update_fields_from_file

ChatGPT
Read a filled-out file (form/PDF/DOCX/XLSX/CSV) and propose values for the form fields of an existing template or process. Returns a JSON object with proposed_mappings — DOES NOT write to Tallyfy. Confirm with the user via ask_user_question, then call update_form_field (for templates) or the appropriate task/kickoff tool (for processes) to apply each proposed value. Optional field_keys_hint narrows the catalog to specific labels or IDs.

update_fields_from_file

ChatGPT
Read a filled-out file (form/PDF/DOCX/XLSX/CSV) and propose values for the form fields of an existing template or process. Returns a JSON object with proposed_mappings — DOES NOT write to Tallyfy. Confirm with the user via ask_user_question, then call update_form_field (for templates) or the appropriate task/kickoff tool (for processes) to apply each proposed value. Optional field_keys_hint narrows the catalog to specific labels or IDs.

update_folder

ChatGPT
Update a folder's name or parent. REQUIRED: 'folder_id'. Plus at least one optional field. Never call this without folder_id.

update_folder

ChatGPT
Update a folder's name or parent. REQUIRED: 'folder_id'. Plus at least one optional field. Never call this without folder_id.

update_form_field

ChatGPT
Update form field properties, validation, or options on an existing form field. REQUIRED: 'template_id' (32-char hex), 'step_id' (32-char hex), 'field_id' (32-char hex), and 'field_data' (dict). UPDATABLE vs IMMUTABLE PROPERTIES: UPDATABLE: - label human-readable name - description help/instruction text - placeholder placeholder shown in empty input - required mandatory flag (bool) - validation validation rules object - position ordering within the step - options (dropdown/radio/multiselect ONLY) — prefer update_dropdown_options for cleaner semantics - columns (table fields ONLY) IMMUTABLE (CANNOT be changed — would corrupt existing data): - field_type To change a field's type: delete_form_field then add_form_field_to_step. WARNING: Deletion drops ALL collected data for that field. - id Permanent. - alias Set on creation; changing breaks automation rules and references. AUTO-FILLED: The API requires label, field_type, required on every update. If you omit any, this tool fetches the current field and fills them in. To update only the description, pass field_data={"description":"..."} — the others auto-fill. field_type enum (reference — NOT updatable): text, textarea, date, dropdown, multiselect, radio, file, table, assignees_form CORRECT usage: update_form_field(template_id="abc...", step_id="def...", field_id="ghi...", field_data={"label":"Customer Name (legal)","required":True}) partial — field_type/required auto-filled from current state: update_form_field(template_id="abc...", step_id="def...", field_id="ghi...", field_data={"description":"Use the legal entity name from the contract"}) WRONG usage: field_data={"field_type":"textarea"} Cannot change type — delete + recreate instead Never call this without all four parameters.

update_form_field

ChatGPT
Update form field properties, validation, or options on an existing form field. REQUIRED: 'template_id' (32-char hex), 'step_id' (32-char hex), 'field_id' (32-char hex), and 'field_data' (dict). UPDATABLE vs IMMUTABLE PROPERTIES: UPDATABLE: - label human-readable name - description help/instruction text - placeholder placeholder shown in empty input - required mandatory flag (bool) - validation validation rules object - position ordering within the step - options (dropdown/radio/multiselect ONLY) — prefer update_dropdown_options for cleaner semantics - columns (table fields ONLY) IMMUTABLE (CANNOT be changed — would corrupt existing data): - field_type To change a field's type: delete_form_field then add_form_field_to_step. WARNING: Deletion drops ALL collected data for that field. - id Permanent. - alias Set on creation; changing breaks automation rules and references. AUTO-FILLED: The API requires label, field_type, required on every update. If you omit any, this tool fetches the current field and fills them in. To update only the description, pass field_data={"description":"..."} — the others auto-fill. field_type enum (reference — NOT updatable): text, textarea, date, dropdown, multiselect, radio, file, table, assignees_form CORRECT usage: update_form_field(template_id="abc...", step_id="def...", field_id="ghi...", field_data={"label":"Customer Name (legal)","required":True}) partial — field_type/required auto-filled from current state: update_form_field(template_id="abc...", step_id="def...", field_id="ghi...", field_data={"description":"Use the legal entity name from the contract"}) WRONG usage: field_data={"field_type":"textarea"} Cannot change type — delete + recreate instead Never call this without all four parameters.

update_group

ChatGPT
Update a group's name, description, or members. REQUIRED: 'group_id'. Plus at least one optional field to update. Never call this without group_id.

update_group

ChatGPT
Update a group's name, description, or members. REQUIRED: 'group_id'. Plus at least one optional field to update. Never call this without group_id.

update_guest

ChatGPT
Update guest details. REQUIRED: 'email' (valid email). Plus at least one optional field to update: 'first_name', 'last_name', 'phone', 'company_name'. Never call this without email.

update_guest

ChatGPT
Update guest details. REQUIRED: 'email' (valid email). Plus at least one optional field to update: 'first_name', 'last_name', 'phone', 'company_name'. Never call this without email.

update_kickoff_field

ChatGPT
Update a kickoff (prerun) field on a template. REQUIRED: 'template_id' (32-char hex), 'field_id' (32-char hex), and 'field_data' (dict). UPDATABLE PROPERTIES: label, guidance, required (bool), position, options (dropdown/radio/multiselect), columns (table), collect_time, use_wysiwyg_editor, field_validation, default_value, default_value_enabled, prefix, suffix, settings. IMMUTABLE: field_type, id, alias — cannot be changed (delete + recreate instead). AUTO-FILLED: This tool fetches the current field and merges your changes in, so you only need to pass the properties you want to change. CORRECT usage: update_kickoff_field(template_id="abc...", field_id="def...", field_data={"required": true}) update_kickoff_field(template_id="abc...", field_id="def...", field_data={"label": "Updated Name", "guidance": "Enter the legal entity name"}) Never call this without all three parameters.

update_kickoff_field

ChatGPT
Update a kickoff (prerun) field on a template. REQUIRED: 'template_id' (32-char hex), 'field_id' (32-char hex), and 'field_data' (dict). UPDATABLE PROPERTIES: label, guidance, required (bool), position, options (dropdown/radio/multiselect), columns (table), collect_time, use_wysiwyg_editor, field_validation, default_value, default_value_enabled, prefix, suffix, settings. IMMUTABLE: field_type, id, alias — cannot be changed (delete + recreate instead). AUTO-FILLED: This tool fetches the current field and merges your changes in, so you only need to pass the properties you want to change. CORRECT usage: update_kickoff_field(template_id="abc...", field_id="def...", field_data={"required": true}) update_kickoff_field(template_id="abc...", field_id="def...", field_data={"label": "Updated Name", "guidance": "Enter the legal entity name"}) Never call this without all three parameters.

update_process

ChatGPT
Update a process name, summary, or starred status. REQUIRED: 'run_id' (32-char hex) plus at least one of: 'name', 'summary', or 'starred'. Never call this without run_id.

update_process

ChatGPT
Update a process name, summary, or starred status. REQUIRED: 'run_id' (32-char hex) plus at least one of: 'name', 'summary', or 'starred'. Never call this without run_id.

update_standalone_task

ChatGPT
Update a standalone (one-off) task that was created via create_standalone_task. Use THIS tool (not update_task) when the task has no run_id or was created as a one-off task. Use update_task instead when the task belongs to a workflow process run. REQUIRED: 'task_id' (32-char hex) plus at least ONE field to update. CORRECT usage: update_standalone_task(task_id="abc...", deadline="2026-06-01 17:00:00") update_standalone_task(task_id="abc...", title="New title", summary="Updated description") update_standalone_task(task_id="abc...", owners={"users": [123], "guests": [], "groups": []}) update_standalone_task(task_id="abc...", taskdata={"field_timeline_id": {"value": "new value"}}) Never call this without task_id. Do NOT pass a run_id — standalone tasks don't use one.

update_standalone_task

ChatGPT
Update a standalone (one-off) task that was created via create_standalone_task. Use THIS tool (not update_task) when the task has no run_id or was created as a one-off task. Use update_task instead when the task belongs to a workflow process run. REQUIRED: 'task_id' (32-char hex) plus at least ONE field to update. CORRECT usage: update_standalone_task(task_id="abc...", deadline="2026-06-01 17:00:00") update_standalone_task(task_id="abc...", title="New title", summary="Updated description") update_standalone_task(task_id="abc...", owners={"users": [123], "guests": [], "groups": []}) update_standalone_task(task_id="abc...", taskdata={"field_timeline_id": {"value": "new value"}}) Never call this without task_id. Do NOT pass a run_id — standalone tasks don't use one.

update_tag

ChatGPT
Update a tag's title or color. REQUIRED: 'tag_id'. Plus at least one optional field. Never call this without tag_id.

update_tag

ChatGPT
Update a tag's title or color. REQUIRED: 'tag_id'. Plus at least one optional field. Never call this without tag_id.

update_task

ChatGPT
Update task properties including deadline, assignees, title, or form field values. REQUIRED: 'run_id' (32-char hex process ID) and 'task_id' (32-char hex). Plus at least ONE optional field to update. CORRECT usage: update_task(run_id="abc...", task_id="def...", deadline="2026-03-01 17:00:00") update_task(run_id="abc...", task_id="def...", title="New title", summary="Updated description") update_task(run_id="abc...", task_id="def...", owners={"users": [123], "guests": []}) Never call this without run_id and task_id.

update_task

ChatGPT
Update task properties including deadline, assignees, title, or form field values. REQUIRED: 'run_id' (32-char hex process ID) and 'task_id' (32-char hex). Plus at least ONE optional field to update. CORRECT usage: update_task(run_id="abc...", task_id="def...", deadline="2026-03-01 17:00:00") update_task(run_id="abc...", task_id="def...", title="New title", summary="Updated description") update_task(run_id="abc...", task_id="def...", owners={"users": [123], "guests": []}) Never call this without run_id and task_id.

update_task_comment

ChatGPT
Update an existing comment on a task. REQUIRED: 'task_id' (32-char hex), 'comment_id', and 'content' (new text). Optional: 'run_id' (pass if available), 'label', 'state', 'sent_to' (list of user IDs to @mention and notify). Never call this without all three required parameters.

update_task_comment

ChatGPT
Update an existing comment on a task. REQUIRED: 'task_id' (32-char hex), 'comment_id', and 'content' (new text). Optional: 'run_id' (pass if available), 'label', 'state', 'sent_to' (list of user IDs to @mention and notify). Never call this without all three required parameters.

update_template

ChatGPT
Update a template's metadata (title, summary, settings). REQUIRED: 'template_id' (32-char hex) plus at least one property to update. Updatable fields: title, summary, guidance, icon, alias, webhook, is_public, is_featured, auto_naming, folderize_process, allow_launcher_change_name, is_pinned, default_folder, kickoff_title, kickoff_description. CORRECT usage: update_template(template_id="abc123...", title="New Template Name") update_template(template_id="abc123...", summary="Updated description", is_public=True) Never call this without template_id.

update_template

ChatGPT
Update a template's metadata (title, summary, settings). REQUIRED: 'template_id' (32-char hex) plus at least one property to update. Updatable fields: title, summary, guidance, icon, alias, webhook, is_public, is_featured, auto_naming, folderize_process, allow_launcher_change_name, is_pinned, default_folder, kickoff_title, kickoff_description. CORRECT usage: update_template(template_id="abc123...", title="New Template Name") update_template(template_id="abc123...", summary="Updated description", is_public=True) Never call this without template_id.

Capabilities

Writes

App Stats

226

Tools

ChatGPT

Platforms

Works with

ChatGPT

Data refreshed daily