Senin yetkilerinle
Her anahtar bir kişiye ve bir çalışma alanına bağlı. Uygulamada göremediğin hiçbir şeyi API de göstermez.
Geliştiriciler
Basit bir REST API, imzalı webhook’lar ve uygulamadaki yetkilerin aynısı. Ata. Konuş. Bitir. Artık kodla da.
Her anahtar bir kişiye ve bir çalışma alanına bağlı. Uygulamada göremediğin hiçbir şeyi API de göstermez.
Görev oluşturuldu, güncellendi, tamamlandı; yorum yazıldı. İmzalı, yeniden denenen, kayıtlı teslimler.
Kısa ömürlü anahtarlar, izin kapsamları, dakikada 120 istek, idempotent POST, iç ağa istek yok.
Üç adımda ilk isteğin: anahtar oluştur, başlığa ekle, isteği gönder.
# 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"| İzin | Neye izin verir |
|---|---|
| tasks:read | Görevleri oku · Görevler, yorumlar, etiketler ve üyeler |
| tasks:write | Görev yaz · Oluştur, güncelle, tamamla, çöpe at, ata, etiketle |
| projects:read | Projeleri oku · Projeler ve bölümleri |
| projects:write | Proje yaz · Proje ve bölüm oluştur, güncelle |
| comments:write | Yorum yaz · Görev sohbetine yorum gönder |
| webhooks:manage | Webhook yönet · Yalnız yöneticiler için çalışır |
| mcp | Asistan bağlantısı (MCP) · Claude, ChatGPT gibi asistanlar için |
/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:manageHer istekte Todix-Signature: t=<zaman>, v1=<imza> başlığı gelir. İmza, “zaman.gövde” metninin imza anahtarınla HMAC-SHA256 özetidir. Ham gövdeyle hesapla, sabit zamanlı karşılaştır ve 5 dakikadan eski istekleri reddet.
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)
}Hayır. API ve webhook’lar her çalışma alanında ücretsiz; adil kullanım için anahtar başına dakikada 120 istek sınırı var.
Yalnızca uygulamada görebildiklerini. Anahtar senin yetkilerinle çalışır; yönetici değilsen webhook yönetemezsin.
Anahtarları biz de göremeyiz. Eskisini iptal et, yenisini oluştur.