API Documentation
Integrate your octo.do tasks with any tool, automation, or custom workflow.
Authentication
All requests require a personal API key. Generate one from Settings → API Keys in the app.
curl -H "Authorization: Bearer octodo_YOUR_KEY" \
https://ppekvytgzydiguargesi.supabase.co/functions/v1/public-api/v1/tasksBase URL
https://ppekvytgzydiguargesi.supabase.co/functions/v1/public-api/v1Tasks
/tasksList all tasks. Supports ?status=unchecked|in_progress|checked&category=UUID&limit=100&offset=0
curl -H "Authorization: Bearer octodo_YOUR_KEY" \
"https://ppekvytgzydiguargesi.supabase.co/functions/v1/public-api/v1/tasks?status=unchecked&limit=8"/tasks/:idGet a single task by ID.
/tasksCreate a new task.
curl -X POST \
-H "Authorization: Bearer octodo_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"title": "Ship feature X", "location": "backlog", "business_value": 8, "time_criticality": 5, "risk_reduction": 3, "job_size": 5}' \
https://ppekvytgzydiguargesi.supabase.co/functions/v1/public-api/v1/tasks| Field | Type | Required | Description |
|---|---|---|---|
title | string | required | Task title (max 500 chars) |
location | string | optional | today, next, someday, or backlog (default) |
description | string | optional | Task description (max 5000 chars) |
category | uuid | optional | Category ID |
business_value | number | optional | 1–10 (default 1) |
time_criticality | number | optional | 1–10 (default 1) |
risk_reduction | number | optional | 1–10 (default 1) |
job_size | number | optional | ≥1 (default 1) |
/tasks/:idUpdate a task. Send only the fields you want to change.
curl -X PATCH \
-H "Authorization: Bearer octodo_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"location": "done"}' \
https://ppekvytgzydiguargesi.supabase.co/functions/v1/public-api/v1/tasks/TASK_UUID/tasks/:idDelete a task permanently.
Categories
/categoriesList all categories.
/categoriesCreate a category.
curl -X POST \
-H "Authorization: Bearer octodo_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Work", "icon": "💼"}' \
https://ppekvytgzydiguargesi.supabase.co/functions/v1/public-api/v1/categories| Field | Type | Required | Description |
|---|---|---|---|
name | string | required | Category name (max 100 chars) |
icon | string | optional | Emoji icon |
parent_id | uuid | optional | Parent category for nesting |
/categories/:idUpdate a category.
/categories/:idDelete a category.
Profile
/profileGet your profile and preferences.
/profileUpdate preferences.
curl -X PATCH \
-H "Authorization: Bearer octodo_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"max_today": 6, "theme": "dark"}' \
https://ppekvytgzydiguargesi.supabase.co/functions/v1/public-api/v1/profileErrors
All errors return a JSON object with an error field.
| Status | Description | ||
|---|---|---|---|
401 | Invalid or missing API key | ||
400 | Invalid request body or parameters | ||
404 | Resource not found | ||
500 | Internal server error |
Rate Limits
The API is rate-limited to 100 requests per minute per API key. If you hit the limit, wait a moment and retry.