Skip to content
LogoLogo

Projects

Workspace Projects and their workflow Statuses.

List access-filtered Project activity

GET/api/v1/projects/{project_id}/activity

Returns newest-first, cursor-bounded meaningful work changes inside one Project: its own changes plus its Tasks, comments, Documents and Milestones. It shares the Workspace Activity retention, redaction, grouping, and safe projection rules, and Project read access is re-evaluated for every request, so a private Project the caller cannot read returns 404 and no item, cursor, or has_more value can disclose inaccessible work. limit bounds the events examined, so a page may hold fewer items than limit; only has_more says whether history continues. Activity is immutable historical evidence and never determines which Tasks are in progress.

Path Parameters

project_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Query Parameters

cursor
string·min 1·max 2048

Opaque continuation cursor returned by the preceding page.

limit
integer·min 1·max 100·default 50

Maximum number of resources to return.

Responses

Read the optional Project lifecycle policy

GET/api/v1/workspaces/{workspace_id}/project-lifecycle

Returns the revisioned Workspace policy. The durable default is disabled at revision 1.

Path Parameters

workspace_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Responses

Enable or disable Project lifecycle states

PATCH/api/v1/workspaces/{workspace_id}/project-lifecycle

Requires workspace:manage. Disabling preserves state definitions and Project selections, but all catalog and Project-state mutations are refused until the capability is enabled again.

Path Parameters

workspace_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Header Parameters

X-CSRF-TokenRequired
string·min 43·max 43

Session-bound CSRF token. It must exactly match the __Host-assign_csrf cookie sent with the request.

Idempotency-KeyRequired
string·min 16·max 200

Opaque client-generated key for safely retrying this operation.

If-MatchRequired
string

Entity tag containing the resource version last observed by the client.

Request Body

application/json
enabledRequired
boolean

Responses

List Workspace Project states

GET/api/v1/workspaces/{workspace_id}/project-states

Returns a cursor-bounded ordered page. Active members may read retained definitions even while the optional capability is disabled.

Path Parameters

workspace_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Query Parameters

cursor
string·min 1·max 2048

Opaque continuation cursor returned by the preceding page.

limit
integer·min 1·max 100·default 50

Maximum number of resources to return.

include_archived
boolean·default false

Responses

Create a Project state

POST/api/v1/workspaces/{workspace_id}/project-states

Requires workspace:manage, an enabled lifecycle policy, and fewer than 100 retained definitions.

Path Parameters

workspace_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Header Parameters

X-CSRF-TokenRequired
string·min 43·max 43

Session-bound CSRF token. It must exactly match the __Host-assign_csrf cookie sent with the request.

Idempotency-KeyRequired
string·min 16·max 200

Opaque client-generated key for safely retrying this operation.

Request Body

application/json
labelRequired
string·min 1·max 80

Responses

Rename or restore a Project state

PATCH/api/v1/project-states/{state_id}

Changes exactly one field. Restore uses archived: false; the capability must be enabled.

Path Parameters

state_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Header Parameters

X-CSRF-TokenRequired
string·min 43·max 43

Session-bound CSRF token. It must exactly match the __Host-assign_csrf cookie sent with the request.

Idempotency-KeyRequired
string·min 16·max 200

Opaque client-generated key for safely retrying this operation.

If-MatchRequired
string

Entity tag containing the resource version last observed by the client.

Request Body

application/json
label
string·min 1·max 80
archived
boolean

Only false is accepted; the server rejects true.

Responses

Archive an unused Project state

DELETE/api/v1/project-states/{state_id}

Refuses an in-use state with 409 project_state_in_use; use the replacement command for that case.

Path Parameters

state_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Header Parameters

X-CSRF-TokenRequired
string·min 43·max 43

Session-bound CSRF token. It must exactly match the __Host-assign_csrf cookie sent with the request.

Idempotency-KeyRequired
string·min 16·max 200

Opaque client-generated key for safely retrying this operation.

If-MatchRequired
string

Entity tag containing the resource version last observed by the client.

Responses

204Project state archived

Replace an in-use Project state and archive it

POST/api/v1/project-states/{state_id}/archive-and-replace

Atomically moves active Projects to a different active same-Workspace state and archives the source.

Path Parameters

state_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Header Parameters

X-CSRF-TokenRequired
string·min 43·max 43

Session-bound CSRF token. It must exactly match the __Host-assign_csrf cookie sent with the request.

Idempotency-KeyRequired
string·min 16·max 200

Opaque client-generated key for safely retrying this operation.

If-MatchRequired
string

Entity tag containing the resource version last observed by the client.

Request Body

application/json
replacement_state_idRequired
string <uuid>

Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.

Example0198ac5e-f9b7-7000-8000-000000000001

Responses

204Projects replaced and source state archived

Move a Project state

POST/api/v1/project-states/{state_id}/move

Reorders the bounded active catalog using immediate neighbour anchors.

Path Parameters

state_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Header Parameters

X-CSRF-TokenRequired
string·min 43·max 43

Session-bound CSRF token. It must exactly match the __Host-assign_csrf cookie sent with the request.

Idempotency-KeyRequired
string·min 16·max 200

Opaque client-generated key for safely retrying this operation.

Request Body

application/json
after_id
string <uuid>

Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.

Example0198ac5e-f9b7-7000-8000-000000000001
before_id
string <uuid>

Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.

Example0198ac5e-f9b7-7000-8000-000000000001
expected_revisionRequired
integer·min 1

Responses

List Workspace Projects

GET/api/v1/workspaces/{workspace_id}/projects

Returns one bounded page of authorized Workspace Projects in shared manual order. Every bearer caller resolves current membership for the requested Workspace; browser callers retain their current session behavior. A continuation binds the prior page's Workspace Project and authority revision. A reorder or permission change returns 409 catalog_changed with no items; restart the traversal from the first page.

Path Parameters

workspace_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Query Parameters

cursor
string·min 1·max 2048

Opaque continuation cursor returned by the preceding page.

limit
integer·min 1·max 100·default 50

Maximum number of resources to return.

Responses

Create a Project

POST/api/v1/workspaces/{workspace_id}/projects

Creates a Project with its default Backlog/Todo/In Progress/ Done workflow. key is the uppercase-normalized ticket prefix ([A-Z][A-Z0-9]{1,7}, unique per Workspace, immutable after creation); it is not a substitute for the opaque id. Accepts native mobile bearer credentials with live Workspace and Project authorization. Browser sessions still require CSRF; native callers omit it.

Path Parameters

workspace_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Header Parameters

X-CSRF-Token
string·min 1·max 200

Required when this operation uses browserSession; native bearer callers omit it because no ambient cookie is sent.

Idempotency-KeyRequired
string·min 16·max 200

Opaque client-generated key for safely retrying this operation.

Request Body

application/json
nameRequired
string·min 1·max 100
keyRequired
string

Uppercase-normalized ticket prefix used to form human-readable Task references (for example ASSIGN-42). Unique per Workspace and immutable after creation; not a substitute for the opaque id.

ExampleASSIGN
path
string·min 1·max 63

Optional Workspace-unique URL segment. When omitted, the server derives it from the Project name.

Responses

Read a Project

GET/api/v1/projects/{project_id}

Path Parameters

project_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Responses

Update Project metadata, planning dates, path, visual identity, or visibility

PATCH/api/v1/projects/{project_id}

Applies an optimistic compare-and-swap to exactly one of name, path, description, url, visual_identity, visibility, or owner_actor_id, or sends the complete nullable start_on/target_on date pair. If-Match must carry the revision last observed by the client. Send visual_identity: null to restore the default marker. Setting visibility to public requires the Workspace's public-publishing billing entitlement; denial returns 403 paid_workspace_required. Unpublishing remains available subject to normal authorization. Public reads return the existing privacy-safe 404 while that entitlement is absent, without changing stored visibility or content.

Path Parameters

project_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Header Parameters

X-CSRF-TokenRequired
string·min 43·max 43

Session-bound CSRF token. It must exactly match the __Host-assign_csrf cookie sent with the request.

Idempotency-KeyRequired
string·min 16·max 200

Opaque client-generated key for safely retrying this operation.

If-MatchRequired
string

Entity tag containing the resource version last observed by the client.

Request Body

application/json
show_cancelled_column
boolean

Project managers may persist whether cancelled-type Board columns are shown.

name
string·min 1·max 100
path
string·min 1·max 63
description
string·max 500

Send null or an empty string to clear the Project description.

url
string <uri>·max 2048

Send null or an empty string to clear the Project URL.

start_on
string <date>

Must be sent with target_on; the pair is revision-checked atomically.

target_on
string <date>

Must be sent with start_on; when both values are present, it cannot precede start_on.

visual_identity

A single allowlisted Lucide icon name or fully-qualified Unicode Emoji 17.0 sequence.

visibility
string

Publishing is permitted only for the Project owner or a Workspace administrator.

Values
workspaceprivatepublic
owner_actor_id
string <uuid>

Transfers the owner/lead to an active Workspace member. Only the current owner or a Workspace administrator may use it.

Example0198ac5e-f9b7-7000-8000-000000000001
project_state_id
string <uuid>

Selects one active Workspace Project state, or clears the selection with null. The optional Workspace lifecycle capability must be enabled.

Example0198ac5e-f9b7-7000-8000-000000000001

Responses

Archive a Project

DELETE/api/v1/projects/{project_id}

Archives a Project with optimistic concurrency. The current Project revision must be supplied in If-Match; retries with the same idempotency key replay the original response.

Path Parameters

project_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Header Parameters

X-CSRF-TokenRequired
string·min 43·max 43

Session-bound CSRF token. It must exactly match the __Host-assign_csrf cookie sent with the request.

If-MatchRequired
string

Entity tag containing the resource version last observed by the client.

Idempotency-KeyRequired
string·min 16·max 200

Opaque client-generated key for safely retrying this operation.

Responses

204The Project is archived.

Read the bounded Project overview projection

GET/api/v1/projects/{project_id}/overview

Returns one permission-filtered Project overview. Active Task counts, Status distribution, ongoing work, recent resources, milestone progress, member summaries, and freshness metadata are server-computed. Ongoing work is selected only through the immutable in_progress and in_review Status categories; clients must not infer it from labels or rebuild this response by fanning out over collection endpoints.

Path Parameters

project_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Responses

Move a Project in the Workspace's shared manual order

POST/api/v1/projects/{project_id}/move

Places the Project between its optional neighbour anchors. Clients never send or receive a mutable position or rank. expected_revision is the Project revision being moved; a stale revision returns 409 revision_conflict. A missing, archived, or out-of-Workspace anchor returns 409 anchor_not_found.

Path Parameters

project_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Header Parameters

X-CSRF-TokenRequired
string·min 43·max 43

Session-bound CSRF token. It must exactly match the __Host-assign_csrf cookie sent with the request.

Idempotency-KeyRequired
string·min 16·max 200

Opaque client-generated key for safely retrying this operation.

Request Body

application/json
after_id
string <uuid>

The Project that must immediately precede the moved Project.

Example0198ac5e-f9b7-7000-8000-000000000001
before_id
string <uuid>

The Project that must immediately follow the moved Project.

Example0198ac5e-f9b7-7000-8000-000000000001
expected_revisionRequired
integer·min 1

Responses

Read a Project's completion policy

GET/api/v1/projects/{project_id}/completion-policy

Path Parameters

project_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Responses

Configure whether completion requires review

PUT/api/v1/projects/{project_id}/completion-policy

An authorized Project manager may enable review-before-completion only while naming a Project-applicable default review Status and default done Status. Disabling it retains the configured defaults but makes completion direct. The backend validates Status categories and all authorization; clients cannot bypass the policy through Task patch.

Path Parameters

project_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Header Parameters

X-CSRF-TokenRequired
string·min 43·max 43

Session-bound CSRF token. It must exactly match the __Host-assign_csrf cookie sent with the request.

Idempotency-KeyRequired
string·min 16·max 200

Opaque client-generated key for safely retrying this operation.

If-MatchRequired
string

Entity tag containing the resource version last observed by the client.

Request Body

application/json
requires_reviewRequired
boolean·default false
default_active_status_idRequired
string <uuid>

Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.

Example0198ac5e-f9b7-7000-8000-000000000001
default_review_status_id
string <uuid>

Required when requires_review is true; must be a Project-applicable in_review Status.

Example0198ac5e-f9b7-7000-8000-000000000001
default_done_status_idRequired
string <uuid>

Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.

Example0198ac5e-f9b7-7000-8000-000000000001

Responses

List Project Statuses

GET/api/v1/projects/{project_id}/statuses

Returns one workflow-ordered page combining the Project's own Statuses and the Workspace-wide Statuses applicable to it.

Path Parameters

project_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Query Parameters

cursor
string·min 1·max 2048

Opaque continuation cursor returned by the preceding page.

limit
integer·min 1·max 100·default 50

Maximum number of resources to return.

Responses

Create a Project workflow Status

POST/api/v1/projects/{project_id}/statuses

Appends a Status to the Project-scoped workflow. The caller must have Project management access.

Path Parameters

project_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Header Parameters

X-CSRF-TokenRequired
string·min 43·max 43

Session-bound CSRF token. It must exactly match the __Host-assign_csrf cookie sent with the request.

Idempotency-KeyRequired
string·min 16·max 200

Opaque client-generated key for safely retrying this operation.

Request Body

application/json
labelRequired
string·min 1·max 100
categoryRequired
string
Values
backlogtodoin_progressin_reviewdone
status_type
string

Canonical lifecycle meaning. Custom labels remain presentation; completed and cancelled are terminal.

Values
backlogunstartedstartedcompletedcancelled
icon
string
color
string
positionRequired
integer·min 1

Responses

List the Project's explicit members

GET/api/v1/projects/{project_id}/members

Returns an owner-first, stable, cursor-bounded projection of active Project membership. It never substitutes the Workspace roster and is unavailable from public Project views.

Path Parameters

project_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Query Parameters

cursor
string·min 1·max 2048

Opaque continuation cursor returned by the preceding page.

limit
integer·min 1·max 100·default 50

Maximum number of resources to return.

Responses

Add an active Workspace member to the Project

POST/api/v1/projects/{project_id}/members

Path Parameters

project_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Header Parameters

X-CSRF-TokenRequired
string·min 43·max 43

Session-bound CSRF token. It must exactly match the __Host-assign_csrf cookie sent with the request.

Idempotency-KeyRequired
string·min 16·max 200

Opaque client-generated key for safely retrying this operation.

Request Body

application/json
actor_idRequired
string <uuid>

Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.

Example0198ac5e-f9b7-7000-8000-000000000001
roleRequired
string
Values
managercontributorviewer

Responses

Change a Project member's role

PATCH/api/v1/projects/{project_id}/members/{actor_id}

Path Parameters

project_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001
actor_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Header Parameters

X-CSRF-TokenRequired
string·min 43·max 43

Session-bound CSRF token. It must exactly match the __Host-assign_csrf cookie sent with the request.

Idempotency-KeyRequired
string·min 16·max 200

Opaque client-generated key for safely retrying this operation.

If-MatchRequired
string

Entity tag containing the resource version last observed by the client.

Request Body

application/json
roleRequired
string
Values
managercontributorviewer

Responses

Remove a Project member

DELETE/api/v1/projects/{project_id}/members/{actor_id}

The current owner cannot be removed. Owner transfer must complete first.

Path Parameters

project_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001
actor_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Header Parameters

X-CSRF-TokenRequired
string·min 43·max 43

Session-bound CSRF token. It must exactly match the __Host-assign_csrf cookie sent with the request.

Idempotency-KeyRequired
string·min 16·max 200

Opaque client-generated key for safely retrying this operation.

If-MatchRequired
string

Entity tag containing the resource version last observed by the client.

Responses

204The Project member was removed.

Read a workflow Status

GET/api/v1/statuses/{status_id}

Returns one Status, including an archived Status needed to render historical Tasks.

Path Parameters

status_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Responses

Update or restore a workflow Status

PATCH/api/v1/statuses/{status_id}

Updates supplied fields. Set archived: false to restore an archived Status.

Path Parameters

status_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Header Parameters

X-CSRF-TokenRequired
string·min 43·max 43

Session-bound CSRF token. It must exactly match the __Host-assign_csrf cookie sent with the request.

If-MatchRequired
string

Entity tag containing the resource version last observed by the client.

Idempotency-KeyRequired
string·min 16·max 200

Opaque client-generated key for safely retrying this operation.

Request Body

application/json
label
string·min 1·max 100
category
string
Values
backlogtodoin_progressin_reviewdone
status_type
string

Canonical lifecycle meaning. Custom labels remain presentation; completed and cancelled are terminal.

Values
backlogunstartedstartedcompletedcancelled
icon
string
color
string
archived
boolean

Only false is accepted to restore an archived Status.

Responses

Archive a workflow Status

DELETE/api/v1/statuses/{status_id}

Archives a Status without repointing Tasks. It returns 409 status_in_use with the live Task count when live Tasks still reference it, and 409 required_status when it is the last active todo, in_progress, or done Status in its own scope.

Path Parameters

status_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Header Parameters

X-CSRF-TokenRequired
string·min 43·max 43

Session-bound CSRF token. It must exactly match the __Host-assign_csrf cookie sent with the request.

If-MatchRequired
string

Entity tag containing the resource version last observed by the client.

Idempotency-KeyRequired
string·min 16·max 200

Opaque client-generated key for safely retrying this operation.

Responses

204The Status is archived.

Move a Status in its workflow order

POST/api/v1/statuses/{status_id}/move

Moves a Status between optional neighbour anchors within its own Workspace-wide or Project-scoped workflow. Cross-scope or stale anchors return 409 anchor_not_found; the server owns integer positions.

Path Parameters

status_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Header Parameters

X-CSRF-TokenRequired
string·min 43·max 43

Session-bound CSRF token. It must exactly match the __Host-assign_csrf cookie sent with the request.

Idempotency-KeyRequired
string·min 16·max 200

Opaque client-generated key for safely retrying this operation.

Request Body

application/json
after_id
string <uuid>

Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.

Example0198ac5e-f9b7-7000-8000-000000000001
before_id
string <uuid>

Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.

Example0198ac5e-f9b7-7000-8000-000000000001
expected_revisionRequired
integer·min 1

Responses

Preview a Status lifecycle migration

GET/api/v1/statuses/{status_id}/lifecycle-preview

Returns the authoritative number of Tasks whose Active/Resolved lifecycle fields would change. Synchronous migration is refused when the count exceeds the returned limit.

Path Parameters

status_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Query Parameters

status_typeRequired
string
Values
backlogunstartedstartedcompletedcancelled

Responses

Archive a workflow Status and replace its live Tasks

POST/api/v1/statuses/{status_id}/archive-and-replace

Atomically moves every non-archived Task that references this Status to an active replacement Status in the exact same Workspace-wide or Project-scoped workflow, then archives the source. The source revision is checked through If-Match; an archived, cross-scope, missing, or self-replacement returns 409 replacement_status_unavailable.

The operation is refused with 409 required_status when archiving the source would remove the final active todo, in_progress, or done Status in its scope. Historical archived Tasks keep their source Status unchanged.

Path Parameters

status_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Header Parameters

X-CSRF-TokenRequired
string·min 43·max 43

Session-bound CSRF token. It must exactly match the __Host-assign_csrf cookie sent with the request.

If-MatchRequired
string

Entity tag containing the resource version last observed by the client.

Idempotency-KeyRequired
string·min 16·max 200

Opaque client-generated key for safely retrying this operation.

Request Body

application/json
replacement_status_idRequired
string <uuid>

Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.

Example0198ac5e-f9b7-7000-8000-000000000001

Responses

List Project milestones

GET/api/v1/projects/{project_id}/milestones

Every returned milestone includes canonical progress for its non-archived, non-trashed Tasks, aggregated independently of loaded Task pages.

Path Parameters

project_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Query Parameters

cursor
string·min 1·max 2048

Opaque continuation cursor returned by the preceding page.

limit
integer·min 1·max 100·default 50

Maximum number of resources to return.

Responses

Create a Project milestone

POST/api/v1/projects/{project_id}/milestones

Path Parameters

project_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Header Parameters

X-CSRF-TokenRequired
string·min 43·max 43

Session-bound CSRF token. It must exactly match the __Host-assign_csrf cookie sent with the request.

Idempotency-KeyRequired
string·min 16·max 200

Opaque client-generated key for safely retrying this operation.

Request Body

application/json
stage_id
string | null·min 1·max 64

Optional stable Workspace Milestone stage ID. Must select an active stage whose category agrees with status; null clears the selection. An explicit legacy status update without stage_id clears a custom selection.

nameRequired
string·min 1·max 100
description
string·max 2000
due_on
string <date>
status
string·default planned
Values
plannedactivecompletedcancelled

Responses

Resolve a Milestone code within an authorized Project

GET/api/v1/projects/{project_id}/milestones/by-code/{milestone_code}

Resolves only Milestones in the selected Workspace and Project, including archived Milestones. ASCII input casing is normalized; canonical output is uppercase. Codes do not grant access or fall through to Tasks or Documents. Invalid syntax or signed-64-bit overflow is rejected. Existing UUID operations remain valid.

Path Parameters

project_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001
milestone_codeRequired
string·max 29

Project-key Milestone code with a positive signed-64-bit number, at most 9223372036854775807. No leading zeros or whitespace.

ExampleFRS-M1

Responses

Read a milestone with computed progress

GET/api/v1/milestones/{milestone_id}

Path Parameters

milestone_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Responses

Update a milestone

PATCH/api/v1/milestones/{milestone_id}

Path Parameters

milestone_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Header Parameters

X-CSRF-TokenRequired
string·min 43·max 43

Session-bound CSRF token. It must exactly match the __Host-assign_csrf cookie sent with the request.

If-MatchRequired
string

Entity tag containing the resource version last observed by the client.

Idempotency-KeyRequired
string·min 16·max 200

Opaque client-generated key for safely retrying this operation.

Request Body

application/json
stage_id
string | null·min 1·max 64

Optional stable Workspace Milestone stage ID. Must select an active stage whose category agrees with status; null clears the selection. An explicit legacy status update without stage_id clears a custom selection.

name
string·min 1·max 100
description
string·max 2000
due_on
string <date>
status
string
Values
plannedactivecompletedcancelled
archived
boolean
after_id
string <uuid>

Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.

Example0198ac5e-f9b7-7000-8000-000000000001
before_id
string <uuid>

Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.

Example0198ac5e-f9b7-7000-8000-000000000001

Responses

Archive a milestone

DELETE/api/v1/milestones/{milestone_id}

Path Parameters

milestone_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Header Parameters

X-CSRF-TokenRequired
string·min 43·max 43

Session-bound CSRF token. It must exactly match the __Host-assign_csrf cookie sent with the request.

If-MatchRequired
string

Entity tag containing the resource version last observed by the client.

Idempotency-KeyRequired
string·min 16·max 200

Opaque client-generated key for safely retrying this operation.

Responses

List Project attachments

GET/api/v1/projects/{project_id}/attachments

Returns the newest 100 linked files. Optional attachment_id values select up to 100 exact linked targets regardless of age; deleted, unlinked and private Discuss files are omitted after parent authorization.

Path Parameters

project_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Query Parameters

attachment_id
string <uuid>[]·min 1·max 100

Exact attachment targets linked to this authorized parent, independent of the newest-file window. Repeat the query key for multiple IDs. At most 100 values; invalid or empty values return 400. Omit for the ordinary newest-100 shelf.

Responses

Attach a completed upload to a Project

POST/api/v1/projects/{project_id}/attachments

Path Parameters

project_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Header Parameters

X-CSRF-TokenRequired
string·min 43·max 43

Session-bound CSRF token. It must exactly match the __Host-assign_csrf cookie sent with the request.

Idempotency-KeyRequired
string·min 16·max 200

Opaque client-generated key for safely retrying this operation.

Request Body

application/json
attachment_idRequired
string <uuid>

Opaque Assign-owned UUIDv7 identifier. Clients must not derive meaning from it.

Example0198ac5e-f9b7-7000-8000-000000000001

Responses

List attachments of the Project's Tasks

GET/api/v1/projects/{project_id}/task-attachments

Newest-first files attached to the Project's current Tasks. A Task moved to another Project takes its files with it.

Path Parameters

project_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Responses

Read a published Project status

GET/api/v1/public/projects/{public_id}

Public access requires the owning Workspace's public-publishing billing entitlement; absence returns the same privacy-safe 404 as an unavailable identifier. Returns a deliberately minimal read-only Project status: its name, optional visual marker, and ordered workflow Status labels with aggregate Task counts. The opaque identifier is revoked on unpublish or archive. Workspace identity, owner identity, Task content, members, Documents, attachments, labels, revisions, and audit data are omitted.

Path Parameters

public_idRequired
string <uuid>
Example0198ac5e-f9b7-7000-8000-000000000001

Responses