BenOS API Reference

All endpoints live at https://os.bennovative.io. Skills write outputs here. Supabase is the source of truth. No authentication required (single-user).

GET/api/projects

List all projects ordered by created_at descending.

curl
curl https://os.bennovative.io/api/projects
POST/api/projects

Create a project. Returns 201 with full Project object.

Request Body
{
  "title": "string (required)",
  "venture": "sipp | wic | cc | bennovative | benos-ops (required)",
  "short_description": "string",
  "status": "backlogged | todo | planned | active | blocked | done",
  "deadline": "YYYY-MM-DD | null",
  "scope": {
    "background": "string",
    "in_scope": "string",
    "success_criteria": "string"
  }
}
curl
curl -X POST https://os.bennovative.io/api/projects \
  -H "Content-Type: application/json" \
  -d '{"title":"My project","venture":"wic","status":"todo"}'
GET/api/projects/[id]

Get a single project by ID.

curl
curl https://os.bennovative.io/api/projects/proj-abc123
PATCH/api/projects/[id]

Update any project field. Changing venture triggers atomic task ID reassignment and auto-posts an activity entry.

Request Body
{
  "title"?: "string",
  "status"?: "backlogged | todo | planned | active | blocked | done",
  "venture"?: "sipp | wic | cc | bennovative | benos-ops",
  "on_track"?: "on_track | at_risk | off_track | null",
  "deadline"?: "YYYY-MM-DD | null",
  "short_description"?: "string",
  "scope"?: { "background"?: "string", "in_scope"?: "string", "success_criteria"?: "string" }
}
curl
curl -X PATCH https://os.bennovative.io/api/projects/proj-abc123 \
  -H "Content-Type: application/json" \
  -d '{"status":"active","on_track":"on_track"}'
POST/api/projects/[id]/activity

Append an entry to a project activity log. Skills call this to record outputs. on_track is required.

Request Body
{
  "body": "string (required) — markdown supported",
  "on_track": "on_track | at_risk | off_track (required)",
  "source": "user | skill (default: user)"
}
curl
curl -X POST https://os.bennovative.io/api/projects/proj-abc123/activity \
  -H "Content-Type: application/json" \
  -d '{"body":"Draft complete.","on_track":"on_track","source":"skill"}'
GET/api/tasks

List all tasks across all ventures, ordered by created_at descending.

curl
curl https://os.bennovative.io/api/tasks
POST/api/tasks

Create a task. venture_id is auto-generated. Appends task ID to project.task_ids when project_id is provided. Returns 201.

Request Body
{
  "title": "string (required)",
  "venture": "sipp | wic | cc | bennovative | benos-ops (required)",
  "description": "string | null",
  "due_date": "YYYY-MM-DD | null",
  "project_id": "string | null",
  "skill_chain": [{ "skill": "string", "role": "string" }]
}
curl
curl -X POST https://os.bennovative.io/api/tasks \
  -H "Content-Type: application/json" \
  -d '{"title":"Write WIC emails","venture":"wic"}'
GET/api/tasks/[id]

Get a single task by ID.

curl
curl https://os.bennovative.io/api/tasks/task-001
PATCH/api/tasks/[id]

Update any task field. Changing venture triggers atomic venture_id reassignment.

Request Body
{
  "done"?: "boolean",
  "title"?: "string",
  "description"?: "string",
  "due_date"?: "YYYY-MM-DD | null",
  "venture"?: "sipp | wic | cc | bennovative | benos-ops",
  "project_id"?: "string | null"
}
curl
curl -X PATCH https://os.bennovative.io/api/tasks/task-001 \
  -H "Content-Type: application/json" \
  -d '{"done":true}'
GET/api/briefs

List the last 30 daily briefs, newest first.

curl
curl https://os.bennovative.io/api/briefs
GET/api/briefs/today

Get today's brief. Returns 404 if the EA skill has not run yet today.

curl
curl https://os.bennovative.io/api/briefs/today
POST/api/briefs

Create or update today's brief. Upserts on date — safe to call multiple times. EA skill calls this after generating the morning brief.

Request Body
{
  "content": "string (required) — full brief in markdown",
  "day_theme": "string | null",
  "venture_priorities": ["sipp","wic","cc","bennovative","benos-ops"],
  "source": "ea | user (default: ea)",
  "date": "YYYY-MM-DD (default: today)"
}
curl
curl -X POST https://os.bennovative.io/api/briefs \
  -H "Content-Type: application/json" \
  -d '{"content":"## Tuesday\n\nTop priorities...","day_theme":"Content Day","venture_priorities":["wic","cc"],"source":"ea"}'
Skill Integration Pattern

When a skill finishes, it writes output back to BenOS via these endpoints. Activity log entries → POST /api/projects/[id]/activity. Task completion → PATCH /api/tasks/[id] with {"done":true}. Daily brief → POST /api/briefs.