With your permissions
Every token belongs to one person and one workspace. The API shows nothing you can’t see in the app.
Developers
A simple REST API, signed webhooks and the same permissions as in the app. Assign. Talk. Done. Now in code too.
Every token belongs to one person and one workspace. The API shows nothing you can’t see in the app.
Task created, updated, completed; comment posted. Signed, retried and logged deliveries.
Expiring tokens, scopes, 120 requests a minute, idempotent POSTs, no requests to internal networks.
Your first request in three steps: create a token, add the header, send the request.
# Your open tasks
curl https://todix.com.tr/api/v1/tasks?assignee=me \
-H "Authorization: Bearer $TODIX_TOKEN"
# Create a task (safe to retry with the same Idempotency-Key)
curl -X POST https://todix.com.tr/api/v1/tasks \
-H "Authorization: Bearer $TODIX_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-1042" \
-d '{"title":"Kargo etiketlerini yazdır","priority":"high","due_date":"2026-10-20"}'
# Smart filter: high priority, due today, assigned to me
curl -G https://todix.com.tr/api/v1/tasks \
-H "Authorization: Bearer $TODIX_TOKEN" \
--data-urlencode "filter=p1 & bugün & @ben"| Scope | What it allows |
|---|---|
| tasks:read | Read tasks · Tasks, comments, labels and members |
| tasks:write | Write tasks · Create, update, complete, trash, assign, label |
| projects:read | Read projects · Projects and their sections |
| projects:write | Write projects · Create and update projects and sections |
| comments:write | Write comments · Post comments in a task’s chat |
| webhooks:manage | Manage webhooks · Works for admins only |
| mcp | Assistant connection (MCP) · For assistants like Claude and ChatGPT |
/api/v1/me—/api/v1/workspaces—/api/v1/taskstasks:read/api/v1/taskstasks:write/api/v1/tasks/{ref}tasks:read/api/v1/tasks/{ref}tasks:write/api/v1/tasks/{ref}tasks:write/api/v1/tasks/{ref}/completetasks:write/api/v1/tasks/{ref}/reopentasks:write/api/v1/tasks/{ref}/assigneestasks:write/api/v1/tasks/{ref}/labelstasks:write/api/v1/tasks/{ref}/commentstasks:read/api/v1/tasks/{ref}/commentscomments:write/api/v1/projectsprojects:read/api/v1/projectsprojects:write/api/v1/projects/{id}projects:read/api/v1/projects/{id}projects:write/api/v1/projects/{id}/sectionsprojects:read/api/v1/projects/{id}/sectionsprojects:write/api/v1/labelstasks:read/api/v1/labelstasks:write/api/v1/memberstasks:read/api/v1/webhookswebhooks:manage/api/v1/webhookswebhooks:manage/api/v1/webhooks/{id}webhooks:manage/api/v1/webhooks/{id}webhooks:manage/api/v1/webhooks/{id}webhooks:manage/api/v1/webhooks/{id}/testwebhooks:manage/api/v1/webhooks/{id}/rotate-secretwebhooks:manage/api/v1/webhooks/{id}/deliverieswebhooks:manageEvery request carries Todix-Signature: t=<time>, v1=<signature>. The signature is the HMAC-SHA256 of “time.body” with your signing secret. Compute it over the raw body, compare in constant time and reject requests older than 5 minutes.
import { createHmac, timingSafeEqual } from 'node:crypto'
// Express: app.post('/todix', express.raw({ type: 'application/json' }), handler)
export function verifyTodix(rawBody, header, secret, toleranceSeconds = 300) {
const parts = Object.fromEntries(
String(header ?? '').split(',').map((p) => p.trim().split('=')),
)
const t = Number(parts.t)
if (!t || Math.abs(Date.now() / 1000 - t) > toleranceSeconds) return false
const expected = createHmac('sha256', secret).update(`${t}.${rawBody}`).digest()
const given = Buffer.from(parts.v1 ?? '', 'hex')
return given.length === expected.length && timingSafeEqual(given, expected)
}No. The API and webhooks are free in every workspace, with a fair-use limit of 120 requests a minute per token.
Only the ones you can see in the app. A token works with your permissions; only admins can manage webhooks.
We can’t see tokens either. Revoke the old one and create a new one.