API referenceProjects

Who is working on a project right now

Live scene claims (people and agents, with expiry), everyone who wrote in the last minutes (from the history ledger, with the legacy fallback), and the agent runs on this project (status, last tool, scenes touched).

Live scene claims (people and agents, with expiry), everyone who wrote in the last minutes (from the history ledger, with the legacy fallback), and the agent runs on this project (status, last tool, scenes touched). Presence (who has the editor open) is a browser-only Realtime channel and is NOT available server-side: the response says so. MCP: get_project_activity.

GET
/projects/{id}/activity

Authorization

bearerAuth
AuthorizationBearer <token>

Typecut API key. Generate one in app.typecut.ai → Settings → API keys. Send as Authorization: Bearer tc_live_….

In: header

Path Parameters

id*string
Formatuuid

Query Parameters

minutes?integer

Window for recent_writers and finished runs. Default 15.

Range1 <= value <= 1440

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/activity"
{
  "data": {
    "as_of": "string",
    "window_minutes": 0,
    "claims": {
      "available": true,
      "items": [
        {
          "scene_id": "861eef56-1159-4a95-802f-abab2d0cc192",
          "kind": "human",
          "label": "string",
          "since": "string",
          "expires_at": "string",
          "expires_in_s": 0,
          "mine": true,
          "scene_index": 0,
          "scene_title": "string"
        }
      ],
      "note": "string"
    },
    "recent_writers": [
      {
        "actor": {
          "kind": "person",
          "label": "string",
          "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5",
          "agent_run_id": "c3317f32-e28b-4af1-a584-86ac8c788dd8",
          "session": "string",
          "is_me": true
        },
        "events": 0,
        "first_at": "string",
        "last_at": "string",
        "scenes": [
          {
            "id": "string",
            "index": 0,
            "title": "string"
          }
        ],
        "kinds": [
          "string"
        ],
        "last_sentence": "string"
      }
    ],
    "agent_runs": {
      "available": true,
      "items": [
        {
          "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
          "label": "string",
          "status": "string",
          "brief": "string",
          "started_by": "string",
          "started_at": "string",
          "last_step_at": "string",
          "created_at": "string",
          "finished_at": "string",
          "steps": 0,
          "share_url": "string",
          "last_tool": {
            "name": "string",
            "at": "string",
            "is_error": true
          },
          "scenes_touched": [
            {
              "id": "string",
              "index": 0,
              "title": "string"
            }
          ],
          "scene_count": 0
        }
      ],
      "note": "string"
    },
    "presence": {
      "available": false,
      "note": "string"
    },
    "source": "project_events",
    "recording_since": "string",
    "notes": [
      "string"
    ],
    "viewer": {
      "user_id": "string",
      "role": "string"
    }
  }
}
{
  "error": {
    "type": "string",
    "code": "string",
    "message": "string"
  }
}
{
  "error": {
    "type": "string",
    "code": "string",
    "message": "string"
  }
}
{
  "error": {
    "type": "string",
    "code": "string",
    "message": "string"
  }
}
{
  "error": {
    "type": "string",
    "code": "string",
    "message": "string"
  }
}
{
  "error": {
    "type": "string",
    "code": "string",
    "message": "string"
  }
}