Utter API Reference

Public REST API for Utter (utter.ae). All endpoints require a workspace-scoped bearer API key. Paths are nested under `/v1/workspaces/{slug}/…`.

Activity

GET /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/activity List issue activity.
Scope: issues:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Agents

GET /v1/workspaces/{slug}/agents List the workspace's connected agents (named coding agents like Claude Code, Codex, Cursor). Assign issues to an agent's agent_id like any member.
Scope: agents:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/agent-sessions List agent work sessions, newest activity first. Filter by state to see which agents are running, blocked (needs_input), or ready for review.
Scope: agents:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
state query string no Filter: running, needs_input, review, done, failed, cancelled.
issue_key query string no
agent_id query string no
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/agent-sessions Start an agent work session. Call this when you pick up an issue so the team can follow your progress on the ticket and the Agents hub.
Scope: agents:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.

Request body

object

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/agent-sessions/{id} Get one agent session.
Scope: agents:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/agent-sessions/{id} Update your session: heartbeat (any PATCH bumps last_activity_at), progress note, state change (needs_input when blocked, review when the PR is ready, done/failed to finish), or the PR link.
Scope: agents:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

object

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Attachments

GET /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/attachments List attachments.
Scope: attachments:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/attachments Create a pre-signed upload intent.
Scope: attachments:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).

Request body

AttachmentIntentInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/attachments/commit Finalize an upload after the R2 PUT.
Scope: attachments:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).

Request body

AttachmentCommitInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/attachments/{id} Delete an attachment.
Scope: attachments:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Automations

GET /v1/workspaces/{slug}/automations List automation rules.
Scope: automations:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/automations Create an automation rule (admin-tier scope; Pro/Business plans).
Scope: automations:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.

Request body

AutomationCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/automations/{id} Get an automation rule.
Scope: automations:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/automations/{id} Update or enable/disable an automation rule.
Scope: automations:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

AutomationPatchInput

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/automations/{id} Delete an automation rule.
Scope: automations:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/automations/{id}/runs List an automation's run history (newest first).
Scope: automations:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Chat

GET /v1/workspaces/{slug}/chat/channels List channels visible to the key's user (public + own private/DM).
Scope: chat:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/chat/channels Create a channel.
Scope: chat:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.

Request body

ChatChannelCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/chat/channels/{channelId} Get a channel.
Scope: chat:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
channelId path string yes Chat channel id.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/chat/channels/{channelId} Rename, set topic, or (un)archive a channel.
Scope: chat:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
channelId path string yes Chat channel id.

Request body

ChatChannelPatchInput

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/chat/channels/{channelId}/members List channel members.
Scope: chat:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
channelId path string yes Chat channel id.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/chat/channels/{channelId}/members Add a member (self-join on public channels).
Scope: chat:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
channelId path string yes Chat channel id.

Request body

object

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/chat/channels/{channelId}/members/{userId} Remove a member (self always; others need manage rights).
Scope: chat:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
channelId path string yes Chat channel id.
userId path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/chat/channels/{channelId}/messages List messages (newest first, cursor-paginated).
Scope: chat:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
channelId path string yes Chat channel id.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/chat/channels/{channelId}/messages Send a message (optionally as a thread reply).
Scope: chat:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
channelId path string yes Chat channel id.

Request body

ChatMessageCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/chat/channels/{channelId}/messages/stream Stream a message live (AGENT-COLLAB-01): omit message_id to open, then append deltas, then send done:true to finalize. Members watch it grow in real time.
Scope: chat:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
channelId path string yes Chat channel id.

Request body

object

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/chat/channels/{channelId}/messages/{messageId} Edit your own message.
Scope: chat:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
channelId path string yes Chat channel id.
messageId path string yes Chat message id.

Request body

object

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/chat/channels/{channelId}/messages/{messageId} Delete a message (own; owner/admin may delete any).
Scope: chat:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
channelId path string yes Chat channel id.
messageId path string yes Chat message id.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/chat/channels/{channelId}/messages/{messageId}/reactions Add a reaction (idempotent).
Scope: chat:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
channelId path string yes Chat channel id.
messageId path string yes Chat message id.

Request body

object

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/chat/channels/{channelId}/messages/{messageId}/reactions/{emoji} Remove your reaction.
Scope: chat:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
channelId path string yes Chat channel id.
messageId path string yes Chat message id.
emoji path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Comments

GET /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/comments List comments.
Scope: comments:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/comments Create a comment.
Scope: comments:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).

Request body

CommentCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/comments/bulk Bulk-create comments on one issue (1–50). Returns a per-item result array; 201 when all succeed, 207 when some fail.
Scope: comments:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).

Request body

BulkCommentsCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/comments/{id} Edit a comment.
Scope: comments:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).
id path string yes

Request body

CommentCreateInput

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/comments/{id} Delete a comment.
Scope: comments:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Custom fields

GET /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/custom-fields List custom-field values on an issue.
Scope: custom_fields:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PUT /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/custom-fields/{fieldId} Set a custom-field value.
Scope: custom_fields:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).
fieldId path string yes

Request body

CustomFieldValueInput

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/custom-fields/{fieldId} Clear a custom-field value.
Scope: custom_fields:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).
fieldId path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/projects/{key}/custom-field-defs List custom-field definitions.
Scope: custom_fields:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/projects/{key}/custom-field-defs Create a custom-field definition.
Scope: custom_fields:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.

Request body

CustomFieldDefCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/projects/{key}/custom-field-defs/{id} Update a custom-field definition.
Scope: custom_fields:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
id path string yes

Request body

object

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/projects/{key}/custom-field-defs/{id} Delete a custom-field definition.
Scope: custom_fields:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Developer

GET /v1/workspaces/{slug}/api-keys List API keys.
Scope: api_keys:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/api-keys Create an API key. Plaintext is returned exactly once.
Scope: api_keys:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.

Request body

ApiKeyCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/api-keys/{id} API key detail.
Scope: api_keys:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/api-keys/{id} Update API key rate limit.
Scope: api_keys:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

ApiKeyPatchInput

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/api-keys/{id} Revoke an API key.
Scope: api_keys:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/api-keys/{id}/usage Per-day request/error/latency rollup for a single API key (max 90-day window).
Scope: api_keys:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes
from query string no Start date (YYYY-MM-DD). Defaults to 30 days ago. Window capped at 90 days.
to query string no End date (YYYY-MM-DD). Defaults to today.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/webhooks List webhooks.
Scope: webhooks:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/webhooks Create a webhook. Signing secret is returned exactly once.
Scope: webhooks:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.

Request body

WebhookCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/webhooks/{id} Webhook detail.
Scope: webhooks:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/webhooks/{id} Update or re-enable a webhook.
Scope: webhooks:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

WebhookPatchInput

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/webhooks/{id} Delete a webhook.
Scope: webhooks:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/webhooks/{id}/deliveries List recent webhook delivery history.
Scope: webhooks:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/webhooks/{id}/rotate-secret Rotate webhook signing secret. New secret is returned exactly once.
Scope: webhooks:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/webhooks/{id}/test Send one signed webhook.test delivery to the endpoint.
Scope: webhooks:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

No JSON request body.

Responses

202 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/oauth-apps List OAuth apps.
Scope: oauth_apps:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/oauth-apps Register an OAuth app. client_secret is returned exactly once (null for public/PKCE clients).
Scope: oauth_apps:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.

Request body

OauthAppCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/oauth-apps/{clientId} OAuth app detail.
Scope: oauth_apps:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
clientId path string yes OAuth app client ID.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/oauth-apps/{clientId} Revoke an OAuth app.
Scope: oauth_apps:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
clientId path string yes OAuth app client ID.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Docs

GET /v1/workspaces/{slug}/docs List docs (workspace or project-scoped).
Scope: docs:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
project query string no Filter to a project key.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/docs Create a doc.
Scope: docs:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.

Request body

DocCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/docs/bulk Bulk-create docs (1–50). Returns a per-item result array; 201 when all succeed, 207 when some fail.
Scope: docs:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.

Request body

BulkDocsCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/docs/{id} Doc detail.
Scope: docs:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/docs/{id} Update a doc.
Scope: docs:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

object

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/docs/{id} Archive a doc (soft).
Scope: docs:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/docs/{id}/export Export a doc as md / html / pdf.
Scope: docs:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes
format query md | html | pdf no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/docs/{id}/comments List doc comments (oldest first).
Scope: docs:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes Doc id.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/docs/{id}/comments Add a doc comment (optionally threaded).
Scope: docs:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes Doc id.

Request body

object

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/docs/{id}/comments/{commentId} Edit a doc comment (author; owner/admin may edit any).
Scope: docs:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes Doc id.
commentId path string yes

Request body

object

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/docs/{id}/comments/{commentId} Delete a doc comment.
Scope: docs:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes Doc id.
commentId path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/docs/{id}/versions List doc version snapshots (newest first; no bodies).
Scope: docs:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes Doc id.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/docs/{id}/versions/{versionId} Get a full version snapshot.
Scope: docs:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes Doc id.
versionId path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/docs/{id}/versions/{versionId}/restore Restore the doc to this snapshot.
Scope: docs:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes Doc id.
versionId path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Forms

GET /v1/workspaces/{slug}/projects/{key}/forms List project forms.
Scope: forms:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/projects/{key}/forms Create a form (admin-tier scope).
Scope: forms:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.

Request body

FormCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/projects/{key}/forms/{id} Get a form with its ordered fields.
Scope: forms:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
id path string yes Form id.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/projects/{key}/forms/{id} Update form settings / publish / enable public sharing.
Scope: forms:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
id path string yes Form id.

Request body

FormPatchInput

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/projects/{key}/forms/{id} Soft-delete a form (disables public sharing).
Scope: forms:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
id path string yes Form id.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/projects/{key}/forms/{id}/fields List a form's fields in order.
Scope: forms:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
id path string yes Form id.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/projects/{key}/forms/{id}/submissions List form submissions.
Scope: forms:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
id path string yes Form id.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/projects/{key}/forms/{id}/submissions/{sid} Get a single submission.
Scope: forms:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
id path string yes Form id.
sid path string yes Submission id.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Goals

GET /v1/workspaces/{slug}/goals List goals (optionally filtered by portfolio or company scope).
Scope: goals:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
portfolio_id query string no Only goals grouped under this portfolio.
scope query company no scope=company returns only company goals (no portfolio). Mutually exclusive with portfolio_id.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/goals Create a goal (per-plan cap; acyclic parent).
Scope: goals:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.

Request body

GoalCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/goals/{goalId} Get a goal with its rolled-up progress, status, key results, and alignment.
Scope: goals:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
goalId path string yes Goal id.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/goals/{goalId} Update a goal.
Scope: goals:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
goalId path string yes Goal id.

Request body

GoalPatchInput

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/goals/{goalId} Delete a goal (soft). Child goals are orphaned (kept, unaligned).
Scope: goals:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
goalId path string yes Goal id.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Issues

GET /v1/workspaces/{slug}/projects/{key}/issues List issues.
Scope: issues:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
status query string no
assignee query string no user_id, email, or "me" (the calling key's own user).
reporter query string no user_id, email, or "me" (the calling key's own user).
label query string no
priority query string no
type query string no
sprint query string no Sprint id to filter by.
milestone query string no Milestone id to filter by.
parent query string no Issue id to list its subtasks. Pass "none" to return only top-level issues (no parent).
q query string no
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/projects/{key}/issues Create an issue.
Scope: issues:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.

Request body

IssueCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/projects/{key}/issues/{issueKey} Issue detail.
Scope: issues:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/projects/{key}/issues/{issueKey} Update an issue.
Scope: issues:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).

Request body

IssuePatchInput

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/projects/{key}/issues/{issueKey} Archive an issue (soft).
Scope: issues:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/restore Restore an archived issue.
Scope: issues:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/transition Transition status (board move).
Scope: issues:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).

Request body

IssueTransitionInput

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/projects/{key}/issues/bulk Bulk-create issues (1–50). Returns a per-item result array; 201 when all succeed, 207 when some fail.
Scope: issues:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.

Request body

BulkIssuesCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/links List links for an issue (both directions).
Scope: issues:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/links Create a link between this issue and another (by KEY-NUM). Cross-project within the workspace is supported.
Scope: issues:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).

Request body

IssueLinkCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/links/{id} Remove a link.
Scope: issues:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/commits List git commit references associated with this issue (populated by the GitHub/GitLab integration).
Scope: issues:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Key results

GET /v1/workspaces/{slug}/goals/{goalId}/key-results List a goal's key results.
Scope: goals:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
goalId path string yes Goal id.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/goals/{goalId}/key-results Create a key result (manual metric or auto scope roll-up).
Scope: goals:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
goalId path string yes Goal id.

Request body

KeyResultCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/goals/{goalId}/key-results/{keyResultId} Update a key result.
Scope: goals:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
goalId path string yes Goal id.
keyResultId path string yes Key result id.

Request body

KeyResultPatchInput

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/goals/{goalId}/key-results/{keyResultId} Delete a key result (soft).
Scope: goals:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
goalId path string yes Goal id.
keyResultId path string yes Key result id.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Labels

GET /v1/workspaces/{slug}/projects/{key}/labels List labels.
Scope: labels:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/projects/{key}/labels Create a label.
Scope: labels:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.

Request body

LabelCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/projects/{key}/labels/{id} Update a label.
Scope: labels:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
id path string yes

Request body

LabelPatchInput

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/projects/{key}/labels/{id} Delete a label.
Scope: labels:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Members

GET /v1/workspaces/{slug}/members List members.
Scope: members:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/members/{userId} Update a member's role (admin-only scope).
Scope: members:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
userId path string yes

Request body

MemberPatchInput

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/members/{userId} Remove a member from the workspace (admin-only scope).
Scope: members:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
userId path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/invites List pending invites.
Scope: members:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/invites Send a workspace invite email (admin+). Revoke-and-replace if the email already has a live invite.
Scope: members:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.

Request body

InviteCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/invites/{id} Revoke a pending invite.
Scope: members:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Meta

GET /v1/me Identity for this API key.
Scope: valid API key OpenAPI JSON

Parameters

No parameters.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Milestones

GET /v1/workspaces/{slug}/projects/{key}/milestones List milestones for a project.
Scope: projects:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/projects/{key}/milestones Create a milestone.
Scope: projects:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.

Request body

MilestoneCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/projects/{key}/milestones/{id} Milestone detail.
Scope: projects:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/projects/{key}/milestones/{id} Update a milestone.
Scope: projects:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
id path string yes

Request body

MilestonePatchInput

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/projects/{key}/milestones/{id} Delete a milestone (soft). Issues are detached.
Scope: projects:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Notifications

GET /v1/workspaces/{slug}/notifications List notifications for the key's user.
Scope: notifications:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/notifications/{id} Mark a notification read.
Scope: notifications:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

object

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/notifications/mark-all-read Mark all unread notifications as read for the calling user in this workspace. Returns the count of rows updated.
Scope: notifications:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Portfolios

GET /v1/workspaces/{slug}/portfolios List portfolios.
Scope: portfolios:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/portfolios Create a portfolio (owner/admin-tier scope; per-plan cap).
Scope: portfolios:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.

Request body

PortfolioCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/portfolios/{portfolioId} Get a portfolio.
Scope: portfolios:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
portfolioId path string yes Portfolio id.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/portfolios/{portfolioId} Update a portfolio.
Scope: portfolios:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
portfolioId path string yes Portfolio id.

Request body

PortfolioPatchInput

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/portfolios/{portfolioId} Delete a portfolio (soft). Its goals become company goals; project links are removed.
Scope: portfolios:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
portfolioId path string yes Portfolio id.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/portfolios/{portfolioId}/projects List a portfolio's member projects.
Scope: portfolios:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
portfolioId path string yes Portfolio id.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/portfolios/{portfolioId}/projects Add a project to a portfolio. Idempotent.
Scope: portfolios:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
portfolioId path string yes Portfolio id.

Request body

PortfolioProjectAddInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/portfolios/{portfolioId}/projects/{projectId} Remove a project from a portfolio. Idempotent.
Scope: portfolios:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
portfolioId path string yes Portfolio id.
projectId path string yes Project id.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Projects

GET /v1/workspaces/{slug}/projects List projects.
Scope: projects:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/projects Create a project.
Scope: projects:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.

Request body

ProjectCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/projects/{key} Project detail.
Scope: projects:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/projects/{key} Update a project.
Scope: projects:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.

Request body

ProjectPatchInput

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/projects/{key} Archive a project (soft).
Scope: projects:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/projects/{key}/restore Restore an archived project.
Scope: projects:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/projects/{key}/members List project members (explicit access list for scoped projects).
Scope: projects:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/projects/{key}/members Add or update a project member. Idempotent — updates role if already a member. User must be a workspace member. Admin-only scope.
Scope: projects:admin OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.

Request body

ProjectMemberAddInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/projects/{key}/members/{userId} Remove a user from the project member list. Admin-only scope.
Scope: projects:admin OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
userId path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Releases

GET /v1/workspaces/{slug}/projects/{key}/releases List releases for a project.
Scope: projects:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/projects/{key}/releases Create a release. Attach issues by PATCHing issue release_id.
Scope: projects:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.

Request body

ReleaseCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/projects/{key}/releases/{id} Release detail.
Scope: projects:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/projects/{key}/releases/{id} Update a release. Setting status=released stamps released_at.
Scope: projects:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
id path string yes

Request body

ReleasePatchInput

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/projects/{key}/releases/{id} Delete a release (soft). Issues are detached.
Scope: projects:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Reports

GET /v1/workspaces/{slug}/projects/{key}/reports/{report} Get a project report (velocity, burndown, cycle-time, throughput, status/type breakdown, workload). Paid feature.
Scope: projects:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
report path string yes Report id: velocity | burndown | cycle-time | throughput | status-breakdown | type-breakdown | workload.
format query json | csv no Response format. `csv` returns a downloadable text/csv body; default is JSON.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Saved views

GET /v1/workspaces/{slug}/projects/{key}/saved-views List saved views.
Scope: saved_views:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/projects/{key}/saved-views Create a saved view.
Scope: saved_views:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.

Request body

SavedViewCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/projects/{key}/saved-views/{id} Update a saved view.
Scope: saved_views:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
id path string yes

Request body

object

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/projects/{key}/saved-views/{id} Delete a saved view.
Scope: saved_views:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Search

GET /v1/workspaces/{slug}/search Search issues + docs.
Scope: search:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
q query string yes
types query string no
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Sprints

GET /v1/workspaces/{slug}/projects/{key}/sprints List sprints for a project.
Scope: projects:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/projects/{key}/sprints Create a sprint. Attach issues by PATCHing issue sprint_id.
Scope: projects:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.

Request body

SprintCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/projects/{key}/sprints/{id} Sprint detail.
Scope: projects:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/projects/{key}/sprints/{id} Update a sprint. Setting status=active demotes any other active sprint.
Scope: projects:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
id path string yes

Request body

SprintPatchInput

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/projects/{key}/sprints/{id} Delete a sprint (soft). Issues are detached.
Scope: projects:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Statuses

GET /v1/workspaces/{slug}/projects/{key}/statuses List a project's board statuses (ordered).
Scope: projects:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/projects/{key}/statuses Create a board status column (max 12 per project).
Scope: projects:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.

Request body

StatusCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/projects/{key}/statuses/{id} Update a board status. Changing category re-categorises all issues in the column.
Scope: projects:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
id path string yes

Request body

StatusPatchInput

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/projects/{key}/statuses/{id} Delete a board status (soft). All issues in the column are soft-deleted. Refuses if it is the last status.
Scope: projects:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Time

GET /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/time Get time tracking.
Scope: issues:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/time Update time tracking.
Scope: issues:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).

Request body

TimePatchInput

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Watchers

GET /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/watchers List watchers.
Scope: issues:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/watchers Watch the issue (current key's user).
Scope: issues:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/watchers/{userId} Unwatch the issue.
Scope: issues:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).
userId path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Workflows

GET /v1/workspaces/{slug}/workflows List workflows.
Scope: workflows:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/workflows Create a workflow (draft; admin-tier scope).
Scope: workflows:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.

Request body

WorkflowCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/workflows/{id} Get a workflow with its nodes and edges.
Scope: workflows:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/workflows/{id} Update name/description, or enable/disable (enabling enforces the plan cap and graph validity).
Scope: workflows:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

WorkflowPatchInput

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/workflows/{id} Soft-delete a workflow. Refuses while runs are in flight unless ?cancel_runs=true.
Scope: workflows:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PUT /v1/workspaces/{slug}/workflows/{id}/graph Replace a workflow's nodes and edges atomically (referential + acyclicity checked).
Scope: workflows:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

WorkflowGraphInput

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/workflows/{id}/runs List a workflow's runs (newest first).
Scope: workflows:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/workflow-runs/{id} Get a workflow run with its stage states.
Scope: workflows:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/workflow-runs/{id}/advance Force-advance a run's state machine.
Scope: workflows:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/workflow-runs/{id}/complete-stage Complete the current active stage(s) of a run (member-tier workflow.run).
Scope: issues:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

WorkflowCompleteStageInput

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/workflow Route an issue through an enabled workflow (member-tier workflow.run).
Scope: issues:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).

Request body

WorkflowStartInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/projects/{key}/issues/{issueKey}/workflow Cancel the issue's active workflow run (member-tier workflow.run).
Scope: issues:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
key path string yes Project key.
issueKey path string yes Issue key (KEY-N).

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Workspace views

GET /v1/workspaces/{slug}/views List cross-project workspace views (shared + own).
Scope: saved_views:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
POST /v1/workspaces/{slug}/views Create a workspace view.
Scope: saved_views:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.

Request body

WorkspaceViewCreateInput

Responses

201 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/views/{id} Get a workspace view.
Scope: saved_views:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug}/views/{id} Update a workspace view (creator or owner/admin).
Scope: saved_views:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

object

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
DELETE /v1/workspaces/{slug}/views/{id} Delete a workspace view.
Scope: saved_views:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.
id path string yes

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.

Workspaces

GET /v1/workspaces List workspaces this key can access.
Scope: workspaces:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
cursor query string no
limit query integer,null no

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug} Workspace detail.
Scope: workspaces:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
PATCH /v1/workspaces/{slug} Update workspace name.
Scope: workspaces:write OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.

Request body

WorkspacePatchInput

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.
GET /v1/workspaces/{slug}/usage Read-only plan, storage, and AI-credit usage for the workspace.
Scope: workspaces:read OpenAPI JSON

Parameters

NameLocationTypeRequiredDescription
slug path string yes Workspace slug.

Request body

No JSON request body.

Responses

200 Success.400 Validation error.401 Missing / invalid API key.403 Key lacks the required scope.404 Resource not found (or cross-workspace — never leaked).429 Rate limited.