GroupChatGroupChat Docs
API Reference

Workspace API

Manage projects, tasks, statuses, and members.

Authentication

You can authenticate with either a workspace API key (gck_) or a personal access token (gcp_):

# Workspace API key (from workspace settings)
curl -H "Authorization: Bearer gck_YOUR_KEY" \
     https://groupchat.ai/api/v1/tasks

# Personal access token (from account settings)
curl -H "Authorization: Bearer gcp_YOUR_TOKEN" \
     -H "X-Workspace-Id: YOUR_WORKSPACE_ID" \
     https://groupchat.ai/api/v1/tasks

Workspace API keys are scoped to a single workspace. Personal access tokens are scoped to your user account and require the X-Workspace-Id header.

/api/v1/projects

GET
/api/v1/projects

Authorization

bearerAuth
AuthorizationBearer <token>

Workspace API key (gck_...) passed as a Bearer token.

In: header

Query Parameters

id?string

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://loading/api/v1/projects"
[
  {
    "id": "string",
    "workspaceId": "string",
    "name": "string",
    "description": "string",
    "color": "string",
    "icon": "string",
    "emoji": "string",
    "order": 0,
    "widgetEnabled": true,
    "widgetVisibility": "string"
  }
]
{
  "error": "string"
}
{
  "error": "string"
}
{
  "error": "string"
}

/api/v1/projects

POST
/api/v1/projects

Authorization

bearerAuth
AuthorizationBearer <token>

Workspace API key (gck_...) passed as a Bearer token.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://loading/api/v1/projects" \  -H "Content-Type: application/json" \  -d '{    "name": "string"  }'
{
  "id": "string",
  "workspaceId": "string",
  "name": "string",
  "description": "string",
  "color": "string",
  "icon": "string",
  "emoji": "string",
  "order": 0,
  "widgetEnabled": true,
  "widgetVisibility": "string"
}
{
  "error": "string"
}
{
  "error": "string"
}
{
  "error": "string"
}

/api/v1/projects

PATCH
/api/v1/projects

Authorization

bearerAuth
AuthorizationBearer <token>

Workspace API key (gck_...) passed as a Bearer token.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

curl -X PATCH "https://loading/api/v1/projects" \  -H "Content-Type: application/json" \  -d '{    "id": "string"  }'
{
  "id": "string",
  "workspaceId": "string",
  "name": "string",
  "description": "string",
  "color": "string",
  "icon": "string",
  "emoji": "string",
  "order": 0,
  "widgetEnabled": true,
  "widgetVisibility": "string"
}
{
  "error": "string"
}
{
  "error": "string"
}
{
  "error": "string"
}

/api/v1/projects

DELETE
/api/v1/projects

Authorization

bearerAuth
AuthorizationBearer <token>

Workspace API key (gck_...) passed as a Bearer token.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

id*string

Response Body

application/json

application/json

application/json

application/json

curl -X DELETE "https://loading/api/v1/projects" \  -H "Content-Type: application/json" \  -d '{    "id": "string"  }'
{
  "ok": true
}
{
  "error": "string"
}
{
  "error": "string"
}
{
  "error": "string"
}

/api/v1/statuses

GET
/api/v1/statuses

Authorization

bearerAuth
AuthorizationBearer <token>

Workspace API key (gck_...) passed as a Bearer token.

In: header

Query Parameters

id?string
projectId?string

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://loading/api/v1/statuses"
[
  {
    "id": "string",
    "projectId": "string",
    "title": "string",
    "type": "todo",
    "order": 0
  }
]
{
  "error": "string"
}
{
  "error": "string"
}
{
  "error": "string"
}

/api/v1/statuses

POST
/api/v1/statuses

Authorization

bearerAuth
AuthorizationBearer <token>

Workspace API key (gck_...) passed as a Bearer token.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://loading/api/v1/statuses" \  -H "Content-Type: application/json" \  -d '{    "projectId": "string",    "title": "string",    "type": "todo"  }'
{
  "id": "string",
  "projectId": "string",
  "title": "string",
  "type": "todo",
  "order": 0
}
{
  "error": "string"
}
{
  "error": "string"
}
{
  "error": "string"
}

/api/v1/statuses

PATCH
/api/v1/statuses

Authorization

bearerAuth
AuthorizationBearer <token>

Workspace API key (gck_...) passed as a Bearer token.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

curl -X PATCH "https://loading/api/v1/statuses" \  -H "Content-Type: application/json" \  -d '{    "id": "string"  }'
{
  "id": "string",
  "projectId": "string",
  "title": "string",
  "type": "todo",
  "order": 0
}
{
  "error": "string"
}
{
  "error": "string"
}
{
  "error": "string"
}

/api/v1/statuses

DELETE
/api/v1/statuses

Authorization

bearerAuth
AuthorizationBearer <token>

Workspace API key (gck_...) passed as a Bearer token.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

curl -X DELETE "https://loading/api/v1/statuses" \  -H "Content-Type: application/json" \  -d '{    "id": "string",    "action": "move"  }'
{
  "ok": true
}
{
  "error": "string"
}
{
  "error": "string"
}
{
  "error": "string"
}

/api/v1/tasks

GET
/api/v1/tasks

Authorization

bearerAuth
AuthorizationBearer <token>

Workspace API key (gck_...) passed as a Bearer token.

In: header

Query Parameters

id?string
projectId?string

Response Body

application/json

application/json

application/json

curl -X GET "https://loading/api/v1/tasks"
[
  {
    "id": "string",
    "workspaceId": "string",
    "projectId": "string",
    "stageId": "string",
    "title": "string",
    "description": "string",
    "estimate": 0,
    "order": 0,
    "ownerId": "string",
    "creatorId": "string",
    "completedAt": 0,
    "dueDate": 0,
    "dueTime": 0,
    "source": "manual"
  }
]
{
  "error": "string"
}
{
  "error": "string"
}

/api/v1/tasks

POST
/api/v1/tasks

Authorization

bearerAuth
AuthorizationBearer <token>

Workspace API key (gck_...) passed as a Bearer token.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://loading/api/v1/tasks" \  -H "Content-Type: application/json" \  -d '{    "projectId": "string",    "stageId": "string",    "title": "string"  }'
{
  "id": "string",
  "workspaceId": "string",
  "projectId": "string",
  "stageId": "string",
  "title": "string",
  "description": "string",
  "estimate": 0,
  "order": 0,
  "ownerId": "string",
  "creatorId": "string",
  "completedAt": 0,
  "dueDate": 0,
  "dueTime": 0,
  "source": "manual"
}
{
  "error": "string"
}
{
  "error": "string"
}
{
  "error": "string"
}

/api/v1/tasks

PATCH
/api/v1/tasks

Authorization

bearerAuth
AuthorizationBearer <token>

Workspace API key (gck_...) passed as a Bearer token.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

curl -X PATCH "https://loading/api/v1/tasks" \  -H "Content-Type: application/json" \  -d '{    "id": "string"  }'
{
  "id": "string",
  "workspaceId": "string",
  "projectId": "string",
  "stageId": "string",
  "title": "string",
  "description": "string",
  "estimate": 0,
  "order": 0,
  "ownerId": "string",
  "creatorId": "string",
  "completedAt": 0,
  "dueDate": 0,
  "dueTime": 0,
  "source": "manual"
}
{
  "error": "string"
}
{
  "error": "string"
}
{
  "error": "string"
}

/api/v1/tasks

DELETE
/api/v1/tasks

Authorization

bearerAuth
AuthorizationBearer <token>

Workspace API key (gck_...) passed as a Bearer token.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

id*string

Response Body

application/json

application/json

application/json

application/json

curl -X DELETE "https://loading/api/v1/tasks" \  -H "Content-Type: application/json" \  -d '{    "id": "string"  }'
{
  "ok": true
}
{
  "error": "string"
}
{
  "error": "string"
}
{
  "error": "string"
}

/api/v1/members

GET
/api/v1/members

Authorization

bearerAuth
AuthorizationBearer <token>

Workspace API key (gck_...) passed as a Bearer token.

In: header

Query Parameters

userId?string

Response Body

application/json

application/json

application/json

curl -X GET "https://loading/api/v1/members"
[
  {
    "id": "string",
    "userId": "string",
    "role": "string",
    "name": "string",
    "imageUrl": "string"
  }
]
{
  "error": "string"
}
{
  "error": "string"
}

List telemetry events for a task

GET
/api/v1/telemetry/tasks/{taskId}/events

Returns the full telemetry trace for a task. Can filter by category and paginate with afterTimestamp. Useful for debugging task history, understanding what happened, and correlating events.

Authorization

telemetryAuth
AuthorizationBearer <token>

Telemetry API token set via the TELEMETRY_API_TOKEN environment variable. For internal use by coding agents and debugging engineers.

In: header

Path Parameters

taskId*string

Task ID to get telemetry for.

Query Parameters

category?string

Filter by event category.

Value in"user_action" | "status_change" | "assignment" | "agent_event" | "webhook" | "github" | "api_call" | "system" | "error"
limit?string

Max events to return. Default 500.

afterTimestamp?string

Only return events after this Unix timestamp (ms).

Response Body

application/json

application/json

application/json

curl -X GET "https://loading/api/v1/telemetry/tasks/string/events"
{
  "events": [
    {
      "id": "string",
      "taskId": "string",
      "workspaceId": "string",
      "category": "user_action",
      "event": "string",
      "message": "string",
      "actor": "string",
      "actorType": "user",
      "metadata": "string",
      "severity": "info",
      "traceId": "string",
      "spanId": "string",
      "parentSpanId": "string",
      "durationMs": 0,
      "createdAt": 0
    }
  ],
  "count": 0
}
{
  "error": "string"
}
{
  "error": "string"
}

List telemetry events for a workspace

GET
/api/v1/telemetry/workspaces/{workspaceId}/events

Returns recent telemetry events across all tasks in a workspace. Useful for monitoring and debugging.

Authorization

telemetryAuth
AuthorizationBearer <token>

Telemetry API token set via the TELEMETRY_API_TOKEN environment variable. For internal use by coding agents and debugging engineers.

In: header

Path Parameters

workspaceId*string

Workspace ID.

Query Parameters

limit?string

Max events to return. Default 100.

afterTimestamp?string

Only return events after this Unix timestamp (ms).

Response Body

application/json

application/json

curl -X GET "https://loading/api/v1/telemetry/workspaces/string/events"
{
  "events": [
    {
      "id": "string",
      "taskId": "string",
      "workspaceId": "string",
      "category": "user_action",
      "event": "string",
      "message": "string",
      "actor": "string",
      "actorType": "user",
      "metadata": "string",
      "severity": "info",
      "traceId": "string",
      "spanId": "string",
      "parentSpanId": "string",
      "durationMs": 0,
      "createdAt": 0
    }
  ],
  "count": 0
}
{
  "error": "string"
}

Get events by trace ID

GET
/api/v1/telemetry/traces/{traceId}

Returns all telemetry events that share a trace ID. Useful for following a chain of related events across a workflow.

Authorization

telemetryAuth
AuthorizationBearer <token>

Telemetry API token set via the TELEMETRY_API_TOKEN environment variable. For internal use by coding agents and debugging engineers.

In: header

Path Parameters

traceId*string

Trace ID to look up.

Response Body

application/json

application/json

curl -X GET "https://loading/api/v1/telemetry/traces/string"
{
  "events": [
    {
      "id": "string",
      "taskId": "string",
      "workspaceId": "string",
      "category": "user_action",
      "event": "string",
      "message": "string",
      "actor": "string",
      "actorType": "user",
      "metadata": "string",
      "severity": "info",
      "traceId": "string",
      "spanId": "string",
      "parentSpanId": "string",
      "durationMs": 0,
      "createdAt": 0
    }
  ],
  "count": 0
}
{
  "error": "string"
}