Stracker Public API
Reference organized by use case, with exact request/response expectations per endpoint.
Quickstart
Base URL
https://api.strackerapp.com/v1/
Auth Header (required)
Authorization: Bearer YOUR_API_KEY
Pages (CMS)
| Action | Endpoint | What you send | What you get |
|---|---|---|---|
| Add a page | POST /pages |
JSON body:title — required, string (1-255 chars)content — optional string, Markdown format supportedparent_id — optional integer page ID (use 0 for root)
|
201 with created page object (includes new id). |
| Search pages | GET /search?q=... |
Query param: q required (string, at least 1 non-space character). |
200 with array of matching pages. |
| List pages | GET /pages |
Optional query params: parent_id (integer page ID), status (active or inactive), visibility (public or private). |
200 with page array. |
| Get one page | GET /pages/{id} |
Path param: id (integer page ID). |
200 with single page object. |
| Update a page | PUT /pages/{id} |
Path param: id (integer page ID)JSON body accepts: title — string (1-255)content — string (Markdown supported)status — active or inactivevisibility — public or privateparent_id — integerappend — booleanseparator — string
|
200 with updated page object. |
| Delete a page | DELETE /pages/{id} |
Path param: id (integer page ID). |
200/204 delete confirmation / empty success. |
| Get tree structure | GET /pages/tree |
No body. | 200 with nested parent/child tree. |
| Get version history | GET /pages/{id}/versions |
Path param: id (integer page ID). |
200 with page versions array. |
Projects
| Action | Endpoint | What you send | What you get |
|---|---|---|---|
| List projects | GET /projects |
No body. | 200 with project array. |
| Add a project | POST /projects |
JSON body:name — required string (1-255 chars)description — optional string
|
201 with created project (includes default columns). |
| Get project details | GET /projects/{id} |
Path param: id (integer project ID). |
200 with project + columns array. |
| Rename / update project | PUT /projects/{id} or PATCH /projects/{id} |
Path param: id (integer project ID)JSON body: name — optional string (1-255 chars, cannot be empty)description — optional stringagent_team_active — optional integer (0 or 1, admin-gated)
|
200 with updated project object. |
| List columns | GET /projects/{id}/columns |
Path param: id (integer project ID). |
200 with columns array (id, name, sort_order). |
| Add column | POST /projects/{id}/columns |
Path param: id (integer project ID)JSON body: name — required string (1-255 chars)sort_order — optional integer (if omitted, next order is used)
|
201 with created column object. |
| Update column (rename/reorder) | PUT /projects/{id}/columns/{column_id} or PATCH /projects/{id}/columns/{column_id} |
Path params:id — integer project IDcolumn_id — integer column IDJSON body: name — optional string (1-255 chars, cannot be empty)sort_order — optional integer
|
200 with updated column object. |
| Delete column | DELETE /projects/{id}/columns/{column_id} |
Path params:id — integer project IDcolumn_id — integer column ID
|
200 delete success. Returns 400 if column still has tasks (move tasks first). |
Tasks
| Action | Endpoint | What you send | What you get |
|---|---|---|---|
| List tasks | GET /tasks |
Optional query params: project_id (integer), status_id (integer), assigned_to (integer user ID), limit (integer 1-200), offset (integer >= 0). |
200 with task array. |
| Add a task | POST /tasks |
JSON body:title — required string (1-255)project_id — optional integerstatus_id — optional integerassigned_to — optional integer user IDdescription — optional stringdue_date — optional date YYYY-MM-DD
|
201 with created task. |
| Get one task | GET /tasks/{id} |
Path param: id (integer task ID). |
200 with single task object. |
| Update task details | PUT /tasks/{id} |
Path param: id (integer task ID). JSON body accepts any editable fields: title (string), description (string), project_id (integer), status_id (integer), assigned_to (integer), due_date (YYYY-MM-DD). |
200 with updated task. |
| Move task status | PUT /tasks/{id}/status |
Path param: id (integer task ID). JSON body: { "status_id": NUMBER } where status_id is an integer valid for that project's status column. |
200 with updated status/task. |
| Delete task | DELETE /tasks/{id} |
Path param: id. |
200/204 delete confirmation / empty success. |
Users
| Action | Endpoint | What you send | What you get |
|---|---|---|---|
| List organization users | GET /users |
No body. | 200 with user array (for task assignment, etc). |
Agent Users
| Action | Endpoint | What you send | What you get |
|---|---|---|---|
| Create agent user | POST /agents |
JSON body: name (required), optional description. |
201 with created agent user. |
| Create credential | POST /agents/{id}/credentials |
Path param id; optional body: expires_at (ISO datetime). |
201 with created credential. |
| Rotate credential | POST/PUT /agents/{id}/credentials/rotate |
Path param id. |
200 with rotated/new credential. |
| Reveal credential | GET /agents/{id}/credentials/{key_id}/reveal |
Path params: id, key_id. Admin-gated. |
200 with revealed credential value. |
Recommended bootstrap payload for agent handoff: {"api_key":"...","api_docs_url":"https://strackerapp.com/main/pages/77"}
Comments
| Action | Endpoint | What you send | What you get |
|---|---|---|---|
| List comments | GET /comments |
Query params: entity_type (task|page, required), entity_id (integer, required), parent_comment_id (integer, optional). |
200 with comments array. |
| Create comment | POST /comments |
JSON body: entity_type, entity_id, body_markdown, optional parent_comment_id. |
200 with created comment id. |
| Update comment | PUT/PATCH /comments/{id} |
Path param id; JSON body: body_markdown. |
200 with updated comment. |
| Delete comment | DELETE /comments/{id} |
Path param id. |
200 delete/soft-delete confirmation. |
Examples: add a comment
To a task
curl -X POST "https://api.strackerapp.com/v1/comments" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"entity_type": "task",
"entity_id": 159,
"body_markdown": "Looks good — shipping this after QA."
}'
To a page
curl -X POST "https://api.strackerapp.com/v1/comments" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"entity_type": "page",
"entity_id": 167,
"body_markdown": "Updated docs with API examples."
}'
Note: nested route style like POST /tasks/{id}/comments is not supported yet. Use POST /comments with entity_type + entity_id.