DTM Frontend API v2

Contract: 2.0.1

Endpoints

MethodPathDescription
GET/api/v2/frontendMain frontend endpoint.
GET/api/v2/frontend/docHTML docs.
GET/api/v2/frontend/doc?format=jsonJSON docs.

Field Status

{
  "entities": "implemented",
  "entities.tags[]": "reserved",
  "filters": "implemented",
  "meta": "implemented",
  "summary": "implemented",
  "tasks": "implemented",
  "tasks[].attachments": "implemented",
  "tasks[].hash": "reserved",
  "tasks[].links.sheetRowUrl": "reserved",
  "tasks[].milestones": "implemented",
  "tasks[].revision": "reserved"
}

Query Parameters

{
  "designer": {
    "default": "",
    "description": "Designer exact-name filter (case-insensitive).",
    "example": "Designer Name",
    "type": "string"
  },
  "include_people": {
    "accepted_values": [
      "1",
      "0",
      "true",
      "false",
      "yes",
      "no"
    ],
    "default": true,
    "description": "Include entities.people block.",
    "type": "bool"
  },
  "limit": {
    "default": 200,
    "description": "Maximum number of tasks in response.",
    "range": "1..1000",
    "type": "int"
  },
  "statuses": {
    "allowed_values": [
      "work",
      "pre_done",
      "wait",
      "done"
    ],
    "default": "work,pre_done",
    "description": "Comma-separated statuses list.",
    "example": "work,pre_done,wait",
    "type": "string"
  },
  "window_end": {
    "default": null,
    "description": "Window end date (inclusive).",
    "format": "YYYY-MM-DD",
    "type": "string"
  },
  "window_mode": {
    "allowed_values": [
      "intersects"
    ],
    "default": "intersects",
    "description": "Task enters window if start or end intersects.",
    "type": "string"
  },
  "window_start": {
    "default": null,
    "description": "Window start date (inclusive).",
    "format": "YYYY-MM-DD",
    "type": "string"
  }
}

Response Fields

{
  "entities": {
    "enums.status": "map<string,string>",
    "enums.statusGroups": "map<string,string[]>",
    "groups[]": {
      "id": "string",
      "links.self": "string",
      "name": "string"
    },
    "people[]": {
      "id": "string",
      "links.self": "string",
      "name": "string",
      "position": "string|null"
    },
    "tags[]": "string[]"
  },
  "filters": {
    "designer": "string",
    "include_people": "bool",
    "limit": "int",
    "statuses": "string[]",
    "window": {
      "enabled": "bool",
      "end": "YYYY-MM-DD|null",
      "mode": "string(intersects)",
      "start": "YYYY-MM-DD|null"
    }
  },
  "meta": {
    "artifact": "string (dtm_frontend_api_v2)",
    "contractVersion": "string (2.x.x)",
    "features": {
      "entities": "bool",
      "taskHash": "bool",
      "taskRevision": "bool"
    },
    "generatedAt": "ISO-8601 UTC datetime",
    "hash": "sha256 payload hash",
    "paging": {
      "limit": "int",
      "nextCursor": "string|null"
    },
    "source": {
      "env": "string (dev|test|prod)",
      "sheetName": "string|null",
      "sheetUrl": "string|null",
      "sourceId": "string"
    },
    "syncedAt": "ISO-8601 UTC datetime"
  },
  "summary": {
    "groupsTotal": "int",
    "milestonesTotal": "int",
    "peopleTotal": "int",
    "tasksReturned": "int",
    "tasksTotal": "int"
  },
  "tasks[]": {
    "attachments[]": {
      "filename": "string",
      "id": "string",
      "mime": "string",
      "preview": "string",
      "size": "int",
      "uploadedAt": "ISO-8601 UTC datetime",
      "uploadedBy": "string"
    },
    "brand": "string",
    "customer": "string",
    "date.end": "YYYY-MM-DD|null",
    "date.nextDue": "YYYY-MM-DD|null",
    "date.start": "YYYY-MM-DD|null",
    "format_": "string",
    "groupId": "string|null",
    "hash": "string|null (reserved, optional)",
    "history": "string (raw textual status from source)",
    "id": "string",
    "links.self": "string",
    "links.sheetRowUrl": "string|null (reserved, optional)",
    "milestones[]": {
      "actual": "YYYY-MM-DD|null",
      "planned": "YYYY-MM-DD|null",
      "status": "planned|done|unknown|skipped",
      "type": "string"
    },
    "ownerId": "string|null",
    "revision": "string|int|null (reserved, optional)",
    "status": "string",
    "tags": "string[]",
    "title": "string"
  }
}

Query Examples

[
  {
    "notes": "Equivalent to statuses=work,pre_done and include_people=true.",
    "request": "/api/v2/frontend",
    "title": "Default active queue (people included by default)"
  },
  {
    "notes": "Typical UI request for active tasks.",
    "request": "/api/v2/frontend?statuses=work,pre_done&include_people=true&limit=200",
    "title": "Limit and explicit people include"
  },
  {
    "notes": "Case-insensitive exact-name filter on designer.",
    "request": "/api/v2/frontend?statuses=work,pre_done&designer=Designer%20Name",
    "title": "Filter by designer"
  },
  {
    "notes": "Returns tasks intersecting the specified window.",
    "request": "/api/v2/frontend?statuses=work,pre_done&window_start=2026-03-01&window_end=2026-03-31&window_mode=intersects",
    "title": "Date window filter"
  }
]