Install
openclaw skills install dashtask-taskmanager-crm-dashboards-bots-humansManage tasks, CRM leads, contacts, and settings via the DashTask REST API
openclaw skills install dashtask-taskmanager-crm-dashboards-bots-humansNote: This file is for API Key (OpenClaw / custom bot) setups only. For the ChatGPT OAuth GPT Builder setup, see
/dashtask-gpt-oauth/.
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.
curl -s -X POST "$DASHTASK_ENDPOINT" \
-H "X-API-Key: $DASHTASK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action": "get_org_context"}'
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}}'
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}'
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.
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.
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)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 performactionid: UUID of the record for update/delete operationsfilters: Optional filters for list operations{
"success": true,
"data": { ... }
}
On error:
{
"success": false,
"error": "Description of what went wrong"
}
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.
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):
get_org_context been called earlier in this conversation? → Use cached data. Skip the call entirely.get_org_context once, then cache.get_org_context once to refresh, then stop.NEVER call get_org_context:
Only call get_org_context again if:
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 trackingYou 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.
get_org_contextScope: 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_dimensionsScope: tasks Lists the 4 fixed task dimensions (entity, category, department, type) with their current options.
list_custom_task_dimensionsScope: tasks Lists custom dimension types (max 4 per org) and their items.
list_crm_dimensionsScope: crm Lists CRM dimension types (lead_source, industry, lead_quality, lead_action_status) with options.
list_lead_stagesScope: crm Lists custom lead pipeline stages for the organization.
list_dimension_visibilityScope: settings Returns which dimensions are visible/hidden for the organization.
list_tasksScope: tasks | Filters: status, project_id, limit
create_taskScope: 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_taskScope: tasks | Requires: id
Same fields as create_task (including parent_task_id). Only include fields you want to change.
delete_taskScope: tasks | Requires: id
list_subtasksScope: 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_taskScope: tasks
{ "action": "assign_task", "task_id": "uuid", "team_member_id": "uuid" }
unassign_taskScope: tasks
{ "action": "unassign_task", "task_id": "uuid", "team_member_id": "uuid" }
list_task_assigneesScope: tasks | Requires: id (task id)
add_task_tagScope: tasks
{ "action": "add_task_tag", "task_id": "uuid", "tag_id": "uuid" }
remove_task_tagScope: tasks
add_task_discussionScope: tasks
{ "action": "add_task_discussion", "task_id": "uuid", "message": "Progress update: completed phase 1" }
list_projectsScope: tasks
create_projectScope: tasks
{ "action": "create_project", "name": "Q1 Campaign", "description": "Marketing campaign" }
update_projectScope: tasks | Requires: id
archive_projectScope: tasks | Requires: id
list_leadsScope: crm | Filters: lead_status, deal_status, lead_stage, limit
create_leadScope: 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_leadScope: crm | Requires: id
delete_leadScope: crm | Requires: id
assign_lead / unassign_leadScope: crm
{ "action": "assign_lead", "lead_id": "uuid", "team_member_id": "uuid" }
add_lead_party / remove_lead_partyScope: crm
add_lead_discussionScope: crm
{ "action": "add_lead_discussion", "lead_id": "uuid", "message": "Client requested revised timeline" }
list_companies / create_company / update_company / delete_companyScope: crm
{
"action": "create_company",
"company_name": "Acme Corp",
"website": "https://acme.com",
"industry": "Technology",
"employee_count": 500,
"headquarters": "New York, NY"
}
list_contacts / create_contact / update_contact / delete_contactScope: 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 |
list_activitiesScope: crm | Filters: lead_id, contact_id, company_id, type, limit
create_activityScope: 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 |
list_quotes / create_quote / update_quoteScope: 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 |
send_nudgeScope: 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_emailScope: 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..."
}
list_tags / create_tagScope: settings
create_task_dimension_optionScope: 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_optionScope: settings | Requires: id, dimension
create_custom_task_dimensionScope: settings (max 4 per org)
{
"action": "create_custom_task_dimension",
"name": "region",
"label": "Region"
}
delete_custom_task_dimensionScope: settings | Requires: id
create_custom_task_dimension_item / delete_custom_task_dimension_itemScope: settings
create_crm_dimension_optionScope: settings
{
"action": "create_crm_dimension_option",
"dimension_type": "lead_source",
"name": "linkedin",
"label": "LinkedIn"
}
update_crm_dimension_option / delete_crm_dimension_optionScope: settings (locked options cannot be deleted)
list_team_membersScope: tasks (read-only)
create_notificationScope: tasks
{
"action": "create_notification",
"user_id": "uuid",
"title": "New task assigned",
"message": "You've been assigned to 'Follow up with client'",
"type": "info"
}
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"
}
Be respectful of API usage. Recommended: max 60 requests per minute per key.
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 to demo_discoverycreate_quote — generate a quoteupdate_lead — update stage to proposal_quote, set probabilityadd_lead_discussion — add internal notessend_crm_email — send follow-up emailget_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