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 supported
parent_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)
statusactive or inactive
visibilitypublic or private
parent_id — integer
append — boolean
separator — 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

ActionEndpointWhat you sendWhat 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 string
agent_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 ID
column_id — integer column ID
JSON 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 ID
column_id — integer column ID
200 delete success. Returns 400 if column still has tasks (move tasks first).

Tasks

ActionEndpointWhat you sendWhat 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 integer
status_id — optional integer
assigned_to — optional integer user ID
description — optional string
due_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

ActionEndpointWhat you sendWhat you get
List organization users GET /users No body. 200 with user array (for task assignment, etc).

Agent Users

ActionEndpointWhat you sendWhat 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

ActionEndpointWhat you sendWhat 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.

API Docs Files

OpenAPI spec: /docs/openapi.json

Markdown (agent-friendly): /docs/api.md