API Endpoints
Base URL: https://dash.vyvoj.dev · 56 endpoints
Projects (5)
| Method | Path | Description | Body | Response |
|---|---|---|---|---|
| GET | /api/projects/ | List all projects | -- | { data: Project[] } |
| POST | /api/projects/ | Create project | { id, name, repo, color? } | { data: Project } |
| GET | /api/projects/:id | Get project detail | -- | { data: Project } |
| PATCH | /api/projects/:id | Update project | { name?, cfWorkerName?, cfAccountId?, cfBindings? } | { data: Project } |
| GET | /api/projects/:id/bugs | List open bugs | -- | { data: Bug[], count } |
Sessions & Checklists (7)
| Method | Path | Description | Body | Response |
|---|---|---|---|---|
| GET | /api/sessions/ | List sessions | -- | { data: Session[] } |
| POST | /api/sessions/ | Create session | { projectId, branch, commit?, description? } | { data: Session } |
| PATCH | /api/sessions/:id | Update session status | { status } | { data: { id, status } } |
| GET | /api/checklists/ | List checklist items | -- | { data: ChecklistItem[] } |
| POST | /api/checklists/ | Create checklist items | { sessionId, items: { label, category? }[] } | { data: { sessionId, count } } |
| PUT | /api/checklists/ | Update item status | { id, status, note? } | { data: { id, status } } |
| PATCH | /api/checklists/:id | Update item by ID | { status, note?, createTask? } | { data: { id, status } } |
Tasks & Kanban (6)
| Method | Path | Description | Body | Response |
|---|---|---|---|---|
| GET | /api/tasks/ | List tasks (filters: projectId, status, priority, runId) | -- | { data: Task[] } |
| POST | /api/tasks/ | Create task | { projectId, title, description?, status?, priority?, labels?, runId? } | { data: Task } |
| GET | /api/tasks/:id | Get task detail | -- | { data: Task } |
| PATCH | /api/tasks/:id | Update task | { title?, status?, priority?, labels?, runId? } | { data: Task } |
| DELETE | /api/tasks/:id | Delete task | -- | { data: { id } } |
| PATCH | /api/tasks/bulk | Bulk update tasks | { ids: string[], status?, runId? } | { data: { updated } } |
Runs (4)
| Method | Path | Description | Body | Response |
|---|---|---|---|---|
| GET | /api/runs/ | List runs (filter: projectId, status) | -- | { data: Run[] } |
| POST | /api/runs/ | Create run | { projectId, name, goal?, status?, startDate?, endDate? } | { data: Run } |
| GET | /api/runs/:id | Get run detail | -- | { data: Run } |
| PATCH | /api/runs/:id | Update run | { name?, goal?, status?, endDate? } | { data: Run } |
Comments & Activity (3)
| Method | Path | Description | Body | Response |
|---|---|---|---|---|
| GET | /api/comments/ | List comments (filter: taskId) | -- | { data: Comment[] } |
| POST | /api/comments/ | Create comment | { taskId, body } | { data: Comment } |
| GET | /api/activity/ | Activity log (filters: projectId, entityType, action) | -- | { data: Activity[] } |
Attachments (3)
| Method | Path | Description | Body | Response |
|---|---|---|---|---|
| GET | /api/attachments/ | List attachments (filter: checklistItemId) | -- | { data: Attachment[] } |
| POST | /api/attachments/ | Upload attachment (multipart) | FormData { file, checklistItemId } | { data: Attachment } |
| DELETE | /api/attachments/:id | Delete attachment | -- | { data: { id } } |
CF Proxy — Workers & Analytics (7)
| Method | Path | Description | Body | Response |
|---|---|---|---|---|
| GET | /api/cf/workers | List CF workers | -- | { data: Worker[] } |
| GET | /api/cf/worker-bindings?scriptName= | Get worker bindings | -- | { bindings } |
| GET | /api/cf/analytics-workers?days= | Worker metrics (GraphQL) | -- | { data: Metrics[] } |
| GET | /api/cf/deployments?scriptName= | List deployments | -- | { deployments } |
| POST | /api/cf/deployments | Create deployment (redeploy) | { scriptName, versionId, message? } | { deployment } |
| POST | /api/cf/tail | Create tail session | { scriptName } | { id, url, expiresAt } |
| DELETE | /api/cf/tail?tailId=&scriptName= | Delete tail session | -- | {} |
CF Proxy — D1, KV, R2 (13)
| Method | Path | Description | Body | Response |
|---|---|---|---|---|
| GET | /api/cf/databases | List D1 databases | -- | { data: Database[] } |
| POST | /api/cf/d1-query | Execute read query | { databaseId, sql } | { data: QueryResult } |
| POST | /api/cf/d1-write | Execute write query | { databaseId, sql } | { data: QueryResult } |
| GET | /api/cf/d1-history?databaseId= | Get query history | -- | { data: string[] } |
| POST | /api/cf/d1-history | Save query to history | { databaseId, sql } | { data: string[] } |
| GET | /api/cf/kv-namespaces | List KV namespaces | -- | { data: Namespace[] } |
| GET | /api/cf/kv-keys?namespaceId= | List KV keys | -- | { data: Key[] } |
| GET | /api/cf/kv-value?namespaceId=&key= | Get KV value | -- | { data: { value } } |
| GET | /api/cf/r2-buckets | List R2 buckets | -- | { data: Bucket[] } |
| GET | /api/cf/r2-stats | R2 bucket stats (GraphQL) | -- | { data: BucketStats[] } |
| GET | /api/cf/r2-objects?bucket= | List R2 objects | -- | { data: { objects, truncated, cursor? } } |
| GET | /api/cf/r2-object?bucket=&key= | Get R2 object metadata | -- | { data: Object } |
| DELETE | /api/cf/r2-object?bucket=&key= | Delete R2 object | -- | {} |
CF Proxy — DNS (5)
| Method | Path | Description | Body | Response |
|---|---|---|---|---|
| GET | /api/cf/zones | List DNS zones | -- | { data: Zone[] } |
| GET | /api/cf/zone-records?zoneId= | List DNS records | -- | { data: Record[] } |
| POST | /api/cf/zone-records | Create DNS record | { zoneId, type, name, content, ttl?, proxied? } | { data: Record } |
| PATCH | /api/cf/zone-records | Update DNS record | { zoneId, recordId, type, name, content, ttl?, proxied? } | { data: Record } |
| DELETE | /api/cf/zone-records?zoneId=&recordId= | Delete DNS record | -- | {} |
Settings & Health (3)
| Method | Path | Description | Body | Response |
|---|---|---|---|---|
| GET | /api/settings/ | Get current settings | -- | { data: Settings } |
| POST | /api/settings/ | Save settings | { key, value } | { data: { key } } |
| GET | /api/health/ | Health check | -- | { status: "ok", timestamp } |
Error format
All errors return JSON with an error field:
{ "error": "Error message here" } 400 Validation 404 Not found 500 Internal