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