Authentication
Send `Authorization: Bearer dvc_your_token` with every request.
Use personal API tokens to read entries, logs, projects, and tasks from external tools like Slack workflows, n8n, Zapier, or your own scripts.
First request
curl https://your-devchrono-domain.com/api/v1/entries?limit=10 \
-H "Authorization: Bearer dvc_your_token"Personal tokens
Read scopes
JSON responses
The current v1 API is read-only. Every endpoint uses the same authentication, returns JSON, disables response caching, and accepts query parameters instead of request bodies.
Send `Authorization: Bearer dvc_your_token` with every request.
Successful list responses are shaped as `{ data: [...] }`.
Each endpoint requires its matching read scope.
The `limit` query parameter is validated from 1 to 100.
Each endpoint below includes request body rules, curl examples, success payloads, and the failure payloads you should handle.
/api/v1/entriesRead timeline entries with tags, attachment counts, project labels, and daily-log dates.
Required scope
entries:read| Name | Type | Rule |
|---|---|---|
| limit | number | Optional. 1-100. Defaults to 50. |
| date | YYYY-MM-DD | Optional. Filters entries to one daily log. |
| type | enum | Optional. One of NOTE, WORK, SNIPPET, LEARNING, LINK. |
| projectId | uuid | Optional. Filters entries to one project. |
No request body. Use query parameters.
Request example
curl "https://your-devchrono-domain.com/api/v1/entries?date=2026-08-13&type=WORK&limit=10" \
-H "Authorization: Bearer dvc_your_token"Success response
HTTP 200{
"data": [
{
"id": "9f143e8e-4bcb-4a93-9d50-cb1b1ac03b24",
"type": "WORK",
"title": "Ship storage usage meter",
"content": "Added 2GB early-access quota tracking.",
"contentJson": null,
"createdAt": "2026-08-13T09:24:00.000Z",
"updatedAt": "2026-08-13T09:28:12.000Z",
"projectId": "58c77f3a-d148-448d-a36b-34523e41e559",
"projectName": "DevChrono",
"logDate": "2026-08-13",
"tags": ["release"],
"attachmentCount": 1
}
]
}/api/v1/daily-logsRead recent daily logs with focus, generated summaries, and tomorrow plans.
Required scope
daily_logs:read| Name | Type | Rule |
|---|---|---|
| limit | number | Optional. 1-100. Defaults to 50. |
No request body. Use query parameters.
Request example
curl "https://your-devchrono-domain.com/api/v1/daily-logs?limit=7" \
-H "Authorization: Bearer dvc_your_token"Success response
HTTP 200{
"data": [
{
"id": "4f3e9e0a-f99e-4710-82e8-8403a89724ec",
"date": "2026-08-13",
"focus": "Finish API docs and storage tracking",
"summary": "Built the public API documentation page and quota UI.",
"summaryJson": null,
"tomorrowPlan": "Connect Slack reporting workflow.",
"createdAt": "2026-08-13T07:12:00.000Z",
"updatedAt": "2026-08-13T13:42:00.000Z"
}
]
}/api/v1/projectsRead projects with status, slug, color, icon, archived date, and timestamps.
Required scope
projects:read| Name | Type | Rule |
|---|---|---|
| limit | number | Optional. 1-100. Defaults to 50. |
No request body. Use query parameters.
Request example
curl "https://your-devchrono-domain.com/api/v1/projects?limit=25" \
-H "Authorization: Bearer dvc_your_token"Success response
HTTP 200{
"data": [
{
"id": "58c77f3a-d148-448d-a36b-34523e41e559",
"name": "DevChrono",
"slug": "devchrono",
"description": "Private engineering memory and reporting automation.",
"status": "ACTIVE",
"color": "mint",
"icon": "journal",
"archivedAt": null,
"createdAt": "2026-08-11T14:30:00.000Z",
"updatedAt": "2026-08-13T13:42:00.000Z"
}
]
}/api/v1/tasksRead tasks including type (TASK, ISSUE, DECISION), status, priority, progress, and project labels.
Required scope
tasks:read| Name | Type | Rule |
|---|---|---|
| limit | number | Optional. 1-100. Defaults to 50. |
No request body. Use query parameters.
Request example
curl "https://your-devchrono-domain.com/api/v1/tasks?limit=25" \
-H "Authorization: Bearer dvc_your_token"Success response
HTTP 200{
"data": [
{
"id": "2c1a7d44-0d3b-4e1a-9f11-5c6a0b8f1d22",
"title": "Ship storage usage meter",
"description": "Track quota usage in settings.",
"type": "TASK",
"status": "IN_PROGRESS",
"priority": "HIGH",
"progressPercent": 40,
"projectId": "58c77f3a-d148-448d-a36b-34523e41e559",
"projectName": "DevChrono"
}
]
}/api/v1/tasks/:taskIdRead one task by id for the authenticated token owner.
Required scope
tasks:readNone.
No request body.
Request example
curl "https://your-devchrono-domain.com/api/v1/tasks/2c1a7d44-0d3b-4e1a-9f11-5c6a0b8f1d22" \
-H "Authorization: Bearer dvc_your_token"Success response
HTTP 200{
"data": {
"id": "2c1a7d44-0d3b-4e1a-9f11-5c6a0b8f1d22",
"title": "Ship storage usage meter",
"type": "TASK",
"status": "IN_PROGRESS",
"priority": "HIGH",
"progressPercent": 40
}
}These responses apply across the v1 endpoints. Treat `401` as a token problem and `400` as a query-shape problem.
HTTP 400
{
"error": {
"message": "Invalid query parameters."
}
}Returned when `limit`, `date`, `type`, or `projectId` fails validation.
HTTP 401
{
"error": {
"message": "Missing bearer token."
}
}Returned when the `Authorization` header is absent or not formatted as `Bearer <token>`.
HTTP 401
{
"error": {
"message": "Invalid token or missing scope."
}
}Returned for revoked tokens, unknown tokens, expired tokens, or tokens without the endpoint scope.
HTTP 405
Method Not AllowedOnly `GET` is supported for the current v1 endpoints.
Fetch today’s entries, summarize them with your own worker, then post the result to Slack or another destination.
Today entries
const today = new Date().toISOString().slice(0, 10);
const response = await fetch(
`https://your-devchrono-domain.com/api/v1/entries?date=${today}&limit=50`,
{
headers: {
Authorization: `Bearer ${process.env.DEVCHRONO_API_TOKEN}`,
},
},
);
if (!response.ok) {
throw new Error(`DevChrono API failed: ${response.status}`);
}
const { data } = await response.json();