Contract: 2.0.1
| Method | Path | Description |
|---|---|---|
| GET | /api/v2/frontend | Main frontend endpoint. |
| GET | /api/v2/frontend/doc | HTML docs. |
| GET | /api/v2/frontend/doc?format=json | JSON docs. |
{
"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"
}
{
"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"
}
}
{
"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"
}
}
[
{
"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"
}
]