{"skill":{"slug":"dashtask-taskmanager-crm-dashboards-bots-humans","displayName":"Dashtask.ai - Task/Project manager and CRM built for AI Agents and Humans to work together.","summary":"Manage tasks, CRM leads, contacts, and settings via the DashTask REST API","description":"---\nname: dashtask\nversion: \"1.9.1\"\ndescription: Manage tasks, CRM leads, contacts, and settings via the DashTask REST API\nhomepage: https://dashtask.ai\nmetadata:\n  clawdbot:\n    emoji: \"✅\"\n    requires:\n      env:\n        - DASHTASK_API_KEY\n        - DASHTASK_ENDPOINT\n    primaryEnv: \"DASHTASK_API_KEY\"\n---\n\n> **Note:** This file is for **API Key (OpenClaw / custom bot)** setups only.\n> For the ChatGPT OAuth GPT Builder setup, see `/dashtask-gpt-oauth/`.\n\n# DashTask Agent API — Skills File (API Key Setup)\n\n## Overview\n\nDashTask is a collaborative task management and CRM platform. Each organization has its own tasks, projects, CRM leads, contacts, companies, activities, quotes, and configurable dimensions. AI agents interact with DashTask via a single REST endpoint.\n\n## Quick Start\n\n### 1. Get Organization Context (call ONCE per conversation — never repeat in the same session)\n```bash\ncurl -s -X POST \"$DASHTASK_ENDPOINT\" \\\n  -H \"X-API-Key: $DASHTASK_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"action\": \"get_org_context\"}'\n```\n\n### 2. List Tasks\n```bash\ncurl -s -X POST \"$DASHTASK_ENDPOINT\" \\\n  -H \"X-API-Key: $DASHTASK_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"action\": \"list_tasks\", \"filters\": {\"status\": \"open\", \"limit\": 20}}'\n```\n\n### 3. Create a Task\n```bash\ncurl -s -X POST \"$DASHTASK_ENDPOINT\" \\\n  -H \"X-API-Key: $DASHTASK_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"action\": \"create_task\", \"title\": \"Follow up with client\", \"urgency\": 7}'\n```\n\n### 4. Create a CRM Lead\n```bash\ncurl -s -X POST \"$DASHTASK_ENDPOINT\" \\\n  -H \"X-API-Key: $DASHTASK_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"action\": \"create_lead\", \"lead_name\": \"Acme Corp\", \"lead_status\": \"new_lead\", \"priority\": 5}'\n```\n\nSee the full [Actions Reference](#actions-reference) below for all 60+ available actions.\n\n## Authentication\n\nThis integration uses an **API Key** passed in the `X-API-Key` header. Set it once in your environment:\n\n```bash\nexport DASHTASK_API_KEY=\"your_key_here\"\nexport DASHTASK_ENDPOINT=\"https://fgkytboizxksqustdfuc.supabase.co/functions/v1/agent-api\"\n```\n\nAll requests must include:\n```\nPOST $DASHTASK_ENDPOINT\nContent-Type: application/json\nX-API-Key: $DASHTASK_API_KEY\n```\n\nGenerate your key in DashTask → **Settings → Team → Invite AI Agent**. The key is scoped to specific permissions at the time of creation.\n\n### Scopes\n\n- `tasks` — Tasks, projects, assignees, tags, discussions, notifications, team members\n- `crm` — Leads, contacts, companies, activities, quotes, lead discussions\n- `settings` — Dimension management (categories, entities, departments, types, tags, CRM dimensions)\n\n## Request Format\n\nAll requests are `POST` with a JSON body. All fields are **top-level** (no nesting under `params`):\n\n```json\n{\n  \"action\": \"<action_name>\",\n  \"title\": \"My task title\",\n  \"id\": \"<uuid>\",\n  \"filters\": { ... }\n}\n```\n\n- `action` (required): The operation to perform\n- All create/update fields go at the top level alongside `action`\n- `id`: UUID of the record for update/delete operations\n- `filters`: Optional filters for list operations\n\n## Response Format\n\n```json\n{\n  \"success\": true,\n  \"data\": { ... }\n}\n```\n\nOn error:\n```json\n{\n  \"success\": false,\n  \"error\": \"Description of what went wrong\"\n}\n```\n\n---\n\n## IMPORTANT: Discovery-First Pattern\n\n**Dimensions are dynamic.** Organizations can add, rename, and remove dimension options at any time. Before creating or updating tasks/leads, you must discover what values are valid for this organization.\n\n### Recommended: `get_org_context` (call ONCE per conversation session, never again)\n\nCall `get_org_context` **only on your very first message in a conversation**. Store the result in your memory for the entire session.\n\n> **RULE: If you have already called `get_org_context` at any point in this conversation, DO NOT call it again. Use the cached response you already have. This applies to every subsequent message in the same session.**\n\n**Decision logic (follow strictly):**\n1. Has `get_org_context` been called earlier in this conversation? → **Use cached data. Skip the call entirely.**\n2. Is this the very first message in the conversation? → **Call `get_org_context` once, then cache.**\n3. Did the API return an \"Invalid dimension\" error? → **Call `get_org_context` once to refresh, then stop.**\n\n**NEVER call `get_org_context`:**\n- Before every action or tool call\n- When the user asks a follow-up question\n- When checking task status or listing tasks\n- In the same conversation where it was already called\n\n**Only call `get_org_context` again if:**\n- You receive an \"Invalid dimension\" or \"Invalid entity\" error from the API\n- It has been more than 24 hours since the last call in a long-running session\n\nThe response includes:\n- `projects` — all active projects with IDs\n- `task_dimensions` — entity, category, department, type options\n- `custom_task_dimensions` — custom dimension types and their items\n- `crm_dimensions` — lead_source, industry, lead_quality, lead_action_status options\n- `lead_stages` — pipeline stages\n- `team_members` — IDs, names, emails\n- `tags` — tag IDs and names\n- `dimension_visibility` — which dimensions are visible/hidden\n- `fetched_at` — ISO timestamp for cache expiry tracking\n\n### Alternative: Individual Discovery Calls\n\nYou can still call individual discovery actions if you only need a specific subset:\n\nIf you provide an invalid dimension value, the API returns an error with the list of valid options so you can self-correct.\n\n---\n\n## Actions Reference\n\n### Discovery Actions\n\n#### `get_org_context`\n**Scope:** any (tasks, crm, or settings) — returns data scoped to your permissions\nReturns all organization context in a single call. **Recommended for first call — cache the result.**\n\n#### `list_task_dimensions`\n**Scope:** tasks\nLists the 4 fixed task dimensions (entity, category, department, type) with their current options.\n\n#### `list_custom_task_dimensions`\n**Scope:** tasks\nLists custom dimension types (max 4 per org) and their items.\n\n#### `list_crm_dimensions`\n**Scope:** crm\nLists CRM dimension types (lead_source, industry, lead_quality, lead_action_status) with options.\n\n#### `list_lead_stages`\n**Scope:** crm\nLists custom lead pipeline stages for the organization.\n\n#### `list_dimension_visibility`\n**Scope:** settings\nReturns which dimensions are visible/hidden for the organization.\n\n---\n\n### Task Actions\n\n#### `list_tasks`\n**Scope:** tasks | **Filters:** `status`, `project_id`, `limit`\n\n#### `create_task`\n**Scope:** tasks\n```json\n{\n  \"action\": \"create_task\",\n  \"title\": \"Follow up with client\",\n  \"description\": \"Send proposal draft\",\n  \"status\": \"open\",\n  \"urgency\": 7,\n  \"entity\": \"acme_corp\",\n  \"category\": \"marketing\",\n  \"department\": \"sales\",\n  \"task_type\": \"task\",\n  \"project_id\": \"uuid-or-null\",\n  \"parent_task_id\": \"uuid-or-null\",\n  \"due_date\": \"2026-03-01\",\n  \"start_date\": \"2026-02-15\",\n  \"estimated_cost\": 500,\n  \"sales\": 1000,\n  \"hours\": 4,\n  \"budget_hours\": 8\n}\n```\n\n**Fields:**\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| title | string | Yes | Task title |\n| description | string | No | Task description |\n| status | string | No | `open`, `in-progress`, `approval`, or `done` (default: `open`) |\n| urgency | integer | No | 1-10 scale, 10 = most urgent (default: 5) |\n| entity | string | No | Must be valid entity name (discover via `list_task_dimensions`) |\n| category | string | No | Must be valid category name |\n| department | string | No | Must be valid department name |\n| type | string | No | Must be valid type name |\n| project_id | uuid | No | Associate with a project |\n| parent_task_id | uuid | No | Parent task UUID — creates this as a subtask |\n| due_date | string | No | ISO date |\n| start_date | string | No | ISO date |\n| estimated_cost | number | No | Estimated cost |\n| sales | number | No | Sales value |\n| hours | number | No | Hours spent |\n| budget_hours | number | No | Budgeted hours |\n\n#### `update_task`\n**Scope:** tasks | **Requires:** `id`\nSame fields as create_task (including `parent_task_id`). Only include fields you want to change.\n\n#### `delete_task`\n**Scope:** tasks | **Requires:** `id`\n\n#### `list_subtasks`\n**Scope:** tasks | **Requires:** `parent_task_id` or `id` (parent task UUID)\nReturns all subtasks of a given parent task.\n```json\n{ \"action\": \"list_subtasks\", \"parent_task_id\": \"uuid\" }\n```\n\n#### `assign_task`\n**Scope:** tasks\n```json\n{ \"action\": \"assign_task\", \"task_id\": \"uuid\", \"team_member_id\": \"uuid\" }\n```\n\n#### `unassign_task`\n**Scope:** tasks\n```json\n{ \"action\": \"unassign_task\", \"task_id\": \"uuid\", \"team_member_id\": \"uuid\" }\n```\n\n#### `list_task_assignees`\n**Scope:** tasks | **Requires:** `id` (task id)\n\n#### `add_task_tag`\n**Scope:** tasks\n```json\n{ \"action\": \"add_task_tag\", \"task_id\": \"uuid\", \"tag_id\": \"uuid\" }\n```\n\n#### `remove_task_tag`\n**Scope:** tasks\n\n#### `add_task_discussion`\n**Scope:** tasks\n```json\n{ \"action\": \"add_task_discussion\", \"task_id\": \"uuid\", \"message\": \"Progress update: completed phase 1\" }\n```\n\n---\n\n### Project Actions\n\n#### `list_projects`\n**Scope:** tasks\n\n#### `create_project`\n**Scope:** tasks\n```json\n{ \"action\": \"create_project\", \"name\": \"Q1 Campaign\", \"description\": \"Marketing campaign\" }\n```\n\n#### `update_project`\n**Scope:** tasks | **Requires:** `id`\n\n#### `archive_project`\n**Scope:** tasks | **Requires:** `id`\n\n---\n\n### CRM Lead Actions\n\n#### `list_leads`\n**Scope:** crm | **Filters:** `lead_status`, `deal_status`, `lead_stage`, `limit`\n\n#### `create_lead`\n**Scope:** crm\n```json\n{\n  \"action\": \"create_lead\",\n  \"lead_name\": \"Acme Corp Deal\",\n  \"lead_status\": \"new_lead\",\n  \"lead_stage\": \"new_existing\",\n  \"deal_status\": \"active\",\n  \"priority\": 5,\n  \"email\": \"contact@acme.com\",\n  \"phone\": \"+1234567890\",\n  \"lead_source\": \"website\",\n  \"probability\": 50,\n  \"annual_deal_value\": 50000\n}\n```\n\n**Fixed enum fields:**\n| Field | Values |\n|-------|--------|\n| lead_status | `existing_customer`, `new_lead`, `attempted_contact`, `contacted`, `unqualified`, `qualified` |\n| lead_stage | `new_existing`, `demo_discovery`, `proposal_quote`, `negotiation_asks`, `closed_lost`, `closed_won` |\n| deal_status | `active`, `won`, `lost`, `stale` |\n\n**Dynamic fields (discover via `list_crm_dimensions`):**\n- `lead_source` — e.g., \"website\", \"referral\" (org-specific)\n- `lead_action_status` — org-specific action statuses\n\n| Field | Type | Description |\n|-------|------|-------------|\n| lead_name | string | Required. Lead/deal name |\n| priority | integer | 1-5 scale |\n| probability | integer | 0-100 win probability |\n| monthly_deal_value | number | Monthly recurring value |\n| annual_deal_value | number | Annual deal value |\n| one_time_deal_value | number | One-time payment value |\n| lifetime_deal_value | number | Total lifetime value |\n| next_steps | string | Next action description |\n| next_step_date | string | ISO date for next action |\n| company_id | uuid | Link to company |\n| primary_contact_id | uuid | Link to primary contact |\n| assignee_id | uuid | Team member UUID |\n| timezone | string | IANA timezone |\n\n#### `update_lead`\n**Scope:** crm | **Requires:** `id`\n\n#### `delete_lead`\n**Scope:** crm | **Requires:** `id`\n\n#### `assign_lead` / `unassign_lead`\n**Scope:** crm\n```json\n{ \"action\": \"assign_lead\", \"lead_id\": \"uuid\", \"team_member_id\": \"uuid\" }\n```\n\n#### `add_lead_party` / `remove_lead_party`\n**Scope:** crm\n\n#### `add_lead_discussion`\n**Scope:** crm\n```json\n{ \"action\": \"add_lead_discussion\", \"lead_id\": \"uuid\", \"message\": \"Client requested revised timeline\" }\n```\n\n---\n\n### CRM Company Actions\n\n#### `list_companies` / `create_company` / `update_company` / `delete_company`\n**Scope:** crm\n\n```json\n{\n  \"action\": \"create_company\",\n  \"company_name\": \"Acme Corp\",\n  \"website\": \"https://acme.com\",\n  \"industry\": \"Technology\",\n  \"employee_count\": 500,\n  \"headquarters\": \"New York, NY\"\n}\n```\n\n---\n\n### CRM Contact Actions\n\n#### `list_contacts` / `create_contact` / `update_contact` / `delete_contact`\n**Scope:** crm\n\n```json\n{\n  \"action\": \"create_contact\",\n  \"first_name\": \"Jane\",\n  \"last_name\": \"Doe\",\n  \"email\": \"jane@acme.com\",\n  \"phone\": \"+1234567890\",\n  \"title\": \"VP Sales\",\n  \"priority\": \"high\",\n  \"company_id\": \"uuid\"\n}\n```\n\n| Field | Values |\n|-------|--------|\n| priority | `low`, `medium`, `high` |\n\n---\n\n### CRM Activity Actions\n\n#### `list_activities`\n**Scope:** crm | **Filters:** `lead_id`, `contact_id`, `company_id`, `type`, `limit`\n\n#### `create_activity`\n**Scope:** crm\n```json\n{\n  \"action\": \"create_activity\",\n  \"activity_type\": \"call\",\n  \"direction\": \"outbound\",\n  \"subject\": \"Discovery call\",\n  \"content\": \"Discussed requirements and timeline\",\n  \"lead_id\": \"uuid\",\n  \"contact_id\": \"uuid\"\n}\n```\n\n| Field | Values |\n|-------|--------|\n| type | `email`, `call`, `text`, `demo`, `meeting`, `note` |\n| direction | `inbound`, `outbound` |\n\n---\n\n### CRM Quote Actions\n\n#### `list_quotes` / `create_quote` / `update_quote`\n**Scope:** crm\n\n```json\n{\n  \"action\": \"create_quote\",\n  \"lead_id\": \"uuid\",\n  \"plan\": \"Enterprise\",\n  \"seats\": 50,\n  \"billing_cycle\": \"annual\",\n  \"price\": 25000,\n  \"status\": \"draft\"\n}\n```\n\n| Field | Values |\n|-------|--------|\n| status | `draft`, `sent`, `accepted`, `rejected` |\n| billing_cycle | `monthly`, `annual`, `one-time` |\n\n---\n\n### Communication Actions\n\n#### `send_nudge`\n**Scope:** tasks\nSends a nudge email to a team member about a specific task.\n```json\n{\n  \"action\": \"send_nudge\",\n  \"task_id\": \"uuid\",\n  \"recipient_email\": \"john@example.com\",\n  \"recipient_name\": \"John Doe\",\n  \"sender_name\": \"Sales Bot\",\n  \"tone\": \"professional\"\n}\n```\n\n#### `send_crm_email`\n**Scope:** crm\nSends an email related to a CRM lead.\n```json\n{\n  \"action\": \"send_crm_email\",\n  \"lead_id\": \"uuid\",\n  \"recipient_email\": \"client@acme.com\",\n  \"subject\": \"Follow-up on our discussion\",\n  \"body\": \"Hi, just following up...\"\n}\n```\n\n---\n\n### Settings & Dimension Management Actions\n\n#### `list_tags` / `create_tag`\n**Scope:** settings\n\n#### `create_task_dimension_option`\n**Scope:** settings\nAdd a new option to entity, category, department, or type.\n```json\n{\n  \"action\": \"create_task_dimension_option\",\n  \"dimension\": \"entity\",\n  \"name\": \"new_client\",\n  \"label\": \"New Client\"\n}\n```\n\n#### `delete_task_dimension_option`\n**Scope:** settings | **Requires:** `id`, `dimension`\n\n#### `create_custom_task_dimension`\n**Scope:** settings (max 4 per org)\n```json\n{\n  \"action\": \"create_custom_task_dimension\",\n  \"name\": \"region\",\n  \"label\": \"Region\"\n}\n```\n\n#### `delete_custom_task_dimension`\n**Scope:** settings | **Requires:** `id`\n\n#### `create_custom_task_dimension_item` / `delete_custom_task_dimension_item`\n**Scope:** settings\n\n#### `create_crm_dimension_option`\n**Scope:** settings\n```json\n{\n  \"action\": \"create_crm_dimension_option\",\n  \"dimension_type\": \"lead_source\",\n  \"name\": \"linkedin\",\n  \"label\": \"LinkedIn\"\n}\n```\n\n#### `update_crm_dimension_option` / `delete_crm_dimension_option`\n**Scope:** settings (locked options cannot be deleted)\n\n---\n\n### Team & Notification Actions\n\n#### `list_team_members`\n**Scope:** tasks (read-only)\n\n#### `create_notification`\n**Scope:** tasks\n```json\n{\n  \"action\": \"create_notification\",\n  \"user_id\": \"uuid\",\n  \"title\": \"New task assigned\",\n  \"message\": \"You've been assigned to 'Follow up with client'\",\n  \"type\": \"info\"\n}\n```\n\n---\n\n## Restricted Actions (Bot Cannot)\n\n- Transfer admin privileges\n- Change member roles\n- Manage billing or subscriptions\n- Access platform admin operations\n- Delete the organization\n- Access data outside the authorized organization\n\n---\n\n## Error Handling\n\n**Invalid dimension value:**\n```json\n{\n  \"success\": false,\n  \"error\": \"Invalid entity 'xyz'. Valid values: [\\\"acme_corp\\\", \\\"beta_inc\\\"]\"\n}\n```\n\n**Missing scope:**\n```json\n{\n  \"success\": false,\n  \"error\": \"Missing scope: crm\"\n}\n```\n\n**Missing required field:**\n```json\n{\n  \"success\": false,\n  \"error\": \"title is required\"\n}\n```\n\n## Rate Limiting\n\nBe respectful of API usage. Recommended: max 60 requests per minute per key.\n\n## Workflow Examples\n\n### Full Lead Lifecycle\n1. `get_org_context` — **first message only** — discover all dimensions, stages, and team members (cache for entire session)\n2. `create_company` — create the company\n3. `create_contact` — create the primary contact\n4. `create_lead` — create the lead linked to company and contact\n5. `create_activity` — log a discovery call\n6. `update_lead` — update stage to `demo_discovery`\n7. `create_quote` — generate a quote\n8. `update_lead` — update stage to `proposal_quote`, set probability\n9. `add_lead_discussion` — add internal notes\n10. `send_crm_email` — send follow-up email\n\n### Task Management Pipeline\n1. `get_org_context` — **first message only** — discover all dimensions, projects, and team members (cache for entire session)\n2. `create_project` — create a project\n4. `create_task` — create tasks within the project\n5. `assign_task` — assign team members\n6. `send_nudge` — nudge assignees about overdue tasks\n7. `update_task` — mark as done\n","tags":{"latest":"1.9.1"},"stats":{"comments":0,"downloads":595,"installsAllTime":22,"installsCurrent":1,"stars":0,"versions":2},"createdAt":1772684055026,"updatedAt":1778491726627},"latestVersion":{"version":"1.9.1","createdAt":1772686674215,"changelog":"- Added a new README.md file with documentation and usage instructions.\n- No functional changes to the skill code; version remains at 1.9.1.","license":null},"metadata":{"setup":[{"key":"DASHTASK_API_KEY","required":true},{"key":"DASHTASK_ENDPOINT","required":true}],"os":null,"systems":null},"owner":{"handle":"sstrohl223","userId":"s176sza17tb4xkw1fkta7tv6ns8845hz","displayName":"sstrohl223","image":"https://avatars.githubusercontent.com/u/227885444?v=4"},"moderation":null}