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).
/api/projectsList all projects ordered by created_at descending.
curl https://os.bennovative.io/api/projects
/api/projectsCreate a project. Returns 201 with full Project object.
{
"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 -X POST https://os.bennovative.io/api/projects \
-H "Content-Type: application/json" \
-d '{"title":"My project","venture":"wic","status":"todo"}'/api/projects/[id]Get a single project by ID.
curl https://os.bennovative.io/api/projects/proj-abc123
/api/projects/[id]Update any project field. Changing venture triggers atomic task ID reassignment and auto-posts an activity entry.
{
"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 -X PATCH https://os.bennovative.io/api/projects/proj-abc123 \
-H "Content-Type: application/json" \
-d '{"status":"active","on_track":"on_track"}'/api/projects/[id]/activityAppend an entry to a project activity log. Skills call this to record outputs. on_track is required.
{
"body": "string (required) — markdown supported",
"on_track": "on_track | at_risk | off_track (required)",
"source": "user | skill (default: user)"
}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"}'/api/tasksList all tasks across all ventures, ordered by created_at descending.
curl https://os.bennovative.io/api/tasks
/api/tasksCreate a task. venture_id is auto-generated. Appends task ID to project.task_ids when project_id is provided. Returns 201.
{
"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 -X POST https://os.bennovative.io/api/tasks \
-H "Content-Type: application/json" \
-d '{"title":"Write WIC emails","venture":"wic"}'/api/tasks/[id]Get a single task by ID.
curl https://os.bennovative.io/api/tasks/task-001
/api/tasks/[id]Update any task field. Changing venture triggers atomic venture_id reassignment.
{
"done"?: "boolean",
"title"?: "string",
"description"?: "string",
"due_date"?: "YYYY-MM-DD | null",
"venture"?: "sipp | wic | cc | bennovative | benos-ops",
"project_id"?: "string | null"
}curl -X PATCH https://os.bennovative.io/api/tasks/task-001 \
-H "Content-Type: application/json" \
-d '{"done":true}'/api/briefsList the last 30 daily briefs, newest first.
curl https://os.bennovative.io/api/briefs
/api/briefs/todayGet today's brief. Returns 404 if the EA skill has not run yet today.
curl https://os.bennovative.io/api/briefs/today
/api/briefsCreate or update today's brief. Upserts on date — safe to call multiple times. EA skill calls this after generating the morning brief.
{
"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 -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"}'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.