API Documentation
Build custom integrations with the Dashtrack REST API. Manage projects, tasks, time tracking, and more programmatically.
Authentication
All API requests require authentication using an API key. Include your API key in the request header:
Generate API keys from your account Settings → API Keys page. Keys are prefixed with dt_.
Base URL & Rate Limits
Base URL
Important: Do not use www. in API requests. The redirect will strip authentication headers.
Rate Limits
- Starter: 100 requests per hour
- Professional: 1,000 requests per hour
- Agency: 10,000 requests per hour
- Enterprise: Custom limits available
Rate limit headers are included in all responses: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
Endpoints
Projects
/projectsList all non-archived projects accessible with your API key
Optional Query Parameters:
id(string): Fetch a single project by ID
Response:
/projects/{projectId}Fetch a single project by ID
Response:
/projects/{projectId}Update a project (partial updates supported)
Request Body (all fields optional):
/projects/{projectId}Archive a project (soft delete)
/projects/{projectId}/statsGet aggregate statistics for a project including task counts, time logged, and team info
Response:
Tasks
/projects/{projectId}/tasksList all tasks for a project with optional filters
Query Parameters:
status(string): Filter by status (todo, in-progress, done)assigned_to(string): Filter by user IDtask_list(string): Filter by task list name
/projects/{projectId}/tasksCreate a new task for a project
Request Body:
Required: name (string)
status: todo (default), in-progress, done
priority: low, medium, high, or null. Values are case-insensitive and normalized to title case.
assigned_to: Array of user UUIDs or display names. UUIDs are automatically resolved to display names for consistency with UI-created tasks.
due_date, start_date: ISO 8601 datetime format
Response (201 Created):
/tasks/{taskId}Fetch a single task by ID
/tasks/{taskId}Update a task (partial updates supported)
Request Body (all fields optional):
/tasks/{taskId}Delete a task permanently
Leads (Business Development)
/leadsList all leads from the business development section
Query Parameters (optional):
status - Filter by status
rep - Filter by sales representative
/leadsCreate a new lead
Request Body:
Required: name, status
status: First Contact Made, Proposal Wanted, Proposal Sent, Chaser, Needs Closing, Closed, Dead Leads, No Response (case-insensitive)
tags: Proposal Sent, Chaser Sent, Deliberating, Create Proposal, Chase Up, Pending Development, Stuck, In Progress, On Hold, Waiting on Cai, Sent for Review, Won
/leads/{leadId}Fetch a single lead by ID
/leads/{leadId}Update a lead (partial updates supported)
Request Body (all fields optional):
/leads/{leadId}Delete a lead permanently
Time Tracking
/projects/{projectId}/timeGet time entries for a project with optional filters
Query Parameters:
from(string): Start date filter (YYYY-MM-DD)to(string): End date filter (YYYY-MM-DD)user_id(string): Filter by user ID
Response:
Meeting Notes
/projects/{projectId}/notesList meeting notes for a project
/projects/{projectId}/notesCreate a new meeting note for a project
Request Body:
Required: notes. All other fields are optional.
Team
/teamList all team members (useful for resolving user IDs)
Response:
Holidays
/holidaysGet holiday requests and stats for the authenticated user or team
Query Parameters:
scope(string):me(default) orteamfor all requestsstatus(string): Filter by status (pending, approved, declined)
Response:
Error Codes
200Success201Created - Resource successfully created400Bad Request - Invalid parameters or JSON body401Unauthorized - Invalid or missing API key403Forbidden - No access to this resource404Not Found - Resource does not exist429Too Many Requests - Rate limit exceeded500Internal Server ErrorExample Request
Create a new task: