/api/v1/projectsProject identity, cadence, status, and optional weekly focus budget.
Filters: status, updatedAfter, limitRead the work you own and automate explicit project or task commands without scraping the interface. Every write is replay-safe and follows the same ownership and lifecycle rules as the application.
Manage API keysCreate a named key in Settings. The secret is shown once.
Send the key as a bearer token. Keys are stored as hashes and can be revoked independently without signing out your account.
curl https://focused-work.wscm.eu/api/v1/projects \
-H "Authorization: Bearer fw_your_key"Keep keys in a secret manager. Never place them in browser code, URLs, screenshots, or a public repository.
Reads are capped at 200 rows; writes require replay protection.
/api/v1/projectsProject identity, cadence, status, and optional weekly focus budget.
Filters: status, updatedAfter, limit/api/v1/projectsCreate a project with cadence, color, focus budget, and optional client context.
Filters: Idempotency-Key header + JSON body/api/v1/tasksTasks with project context, civil schedule dates, recurrence, and completion state.
Filters: projectId, state, scheduledFrom, scheduledTo, updatedAfter, limit/api/v1/tasksCreate tasks, change details, move them across civil dates, or complete them through the same ownership-safe commands as the app.
Filters: Idempotency-Key header + JSON body/api/v1/focus-sessionsRecorded focus/rest counters and the real lifecycle state of each session.
Filters: projectId, status, from, to, limitA network retry must not create the same work twice.
Send a unique Idempotency-Key with every POST or PATCH. Repeating the same key and body within 24 hours returns the original result with Idempotency-Replayed: true. Reusing the key for a different body returns 409.
curl -X POST https://focused-work.wscm.eu/api/v1/tasks \
-H "Authorization: Bearer fw_your_key" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: import-2026-08-24-001" \
-d '{"projectId":"project_id","title":"Review release","scheduledDate":"2026-08-24"}'The API keeps calendar dates separate from instants.
scheduledDate and schedule filters use civil dates: yyyy-MM-dd.{ data, meta }; errors return { error: { code, message } }.Bulk writes preview first; outbound events are signed.
projectIdor projectName, title, optional description, scheduledDate, estimateMinutes, and priority. Task updates are atomic: use a separate idempotency key for scheduling, completion, and detail edits.{ id, type, occurredAt, data }and include X-Focused-Work-Event, X-Focused-Work-Delivery, and an HMAC-SHA256 X-Focused-Work-Timestamp and X-Focused-Work-Signature. Verify the v1 HMAC againsttimestamp + "." + rawBody, reject stale timestamps, and deduplicate the delivery ID.