Skip to content
RSXDocs
RSX · API · Reference

projects v1

RSX's internal project and work management system: projects, work items, roadmaps, specifications, and the activity behind them.

Current
Base URL
https://api.rsx.group/projects/v1
Self-grantable scopes
None. Every endpoint here needs a key issued by a platform admin.
Machine readable
openapi.json
01

admin

5 operations under /projects/v1/admin.

POST/projects/v1/admin/projects/purge

Permanently delete an archived project

Destroys the project and every record under it: work, specifications and their revisions, documents, milestones, comments, references, memberships and the project's activity. This cannot be undone.

Two guards. The project must already be archived, so a purge is never the first thing that happens to live data, and confirm must repeat the project's slug, so it cannot be done by sending the wrong id.

The project's own activity goes with it rather than surviving it: a history of work nobody can open any more would be rows pointing at nothing. What survives is one row on the operator trail (admin/audit/list) saying the project was purged, by whom, and how much went with it.

Scope
projects:admin:projects:purge Admin-issued keys only.

Request bodyapplication/json

Request body of adminPurgeProject

  • idrequired
    Type
    string, uuid
    Description
  • confirmrequired
    Type
    string
    Description

Response 200What was destroyed, counted per table

Response of adminPurgeProject

  • datarequired
    Type
    PurgeResult
    Description
  • idrequired
    Type
    string, uuid
    Description
  • slugrequired
    Type
    string
    Description
  • deletedrequired
    Type
    map of integer
    Description
  • {key}
    Type
    integer
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/admin/projects/purge \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "confirm": "rsx-node"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "slug": "string",
    "deleted": {
      "work_items": 42,
      "specifications": 3,
      "activity": 118
    }
  }
}
POST/projects/v1/admin/labels/add

Create a platform-wide label

Attachable from every project. Names are lowercase and hyphenated, and are unique across the platform-wide set.

Scope
projects:admin:labels:add Admin-issued keys only.
Idempotency
Requires an Idempotency-Key header. Reusing the key within 24 hours returns the original response instead of creating a second record.

Request bodyapplication/json

Request body of adminAddLabel

  • namerequired
    Type
    string
    Description
    1 to 48 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$

Response 200Label created

Response of adminAddLabel

  • datarequired
    Type
    Label
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid, or null
    Description
  • namerequired
    Type
    string
    Description
  • createdAtrequired
    Type
    string, date-time
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/admin/labels/add \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Idempotency-Key: 5b8f2d1a-0c7e-4b1f-9a6d-3e2f1c0b9a8d" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "needs-review"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": null,
    "name": "security",
    "createdAt": "2026-09-08T12:00:00.000Z"
  }
}
POST/projects/v1/admin/labels/update

Rename a platform-wide label

Scope
projects:admin:labels:update Admin-issued keys only.

Request bodyapplication/json

Request body of adminUpdateLabel

  • idrequired
    Type
    string, uuid
    Description
  • namerequired
    Type
    string
    Description
    1 to 48 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$

Response 200Label renamed

Response of adminUpdateLabel

  • datarequired
    Type
    Label
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid, or null
    Description
  • namerequired
    Type
    string
    Description
  • createdAtrequired
    Type
    string, date-time
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/admin/labels/update \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "name": "needs-review"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": null,
    "name": "security",
    "createdAt": "2026-09-08T12:00:00.000Z"
  }
}
POST/projects/v1/admin/labels/remove

Delete a platform-wide label

Detaches it from every work item carrying it, in every project. A label is a filter rather than a record of something that happened, so there is nothing here for history to want.

Scope
projects:admin:labels:remove Admin-issued keys only.

Request bodyapplication/json

Request body of adminRemoveLabel

  • idrequired
    Type
    string, uuid
    Description

Response 200Label deleted

Response of adminRemoveLabel

  • datarequired
    Type
    object
    Description
  • idrequired
    Type
    string
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record

Example

curl
curl -X POST https://api.rsx.group/projects/v1/admin/labels/remove \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b"
}'
200 response
{
  "data": {
    "id": "string"
  }
}
GET/projects/v1/admin/audit/list

What the operator surface has done

Purges and platform-wide label changes, newest first, with the operator who made them. Kept apart from a project's own activity, which a purge deletes along with the project, so this is the one record that a purged project existed.

Scope
projects:admin:audit:list Admin-issued keys only.

Query parameters

Query parameters of adminListProjectsAudit

  • targetType
    Type
    string
    Description
    one of "project", "label"
  • targetId
    Type
    string
    Description
    up to 128 characters
  • actor
    Type
    string
    Description
    up to 320 characters
  • action
    Type
    string
    Description
    one of "project.purged", "label.added", "label.updated", "label.removed"
  • offset
    Type
    integer, or null
    Description
    at least 0 · default 0
  • limit
    Type
    integer
    Description
    1 to 100 · default 50

Response 200Audit events

Response of adminListProjectsAudit

  • datarequired
    Type
    array of ProjectsAdminAuditEvent
    Description
  • idrequired
    Type
    string
    Description
  • actorrequired
    Type
    string
    Description
  • actionrequired
    Type
    string
    Description
    one of "project.purged", "label.added", "label.updated", "label.removed"
  • targetTyperequired
    Type
    string
    Description
    one of "project", "label"
  • targetIdrequired
    Type
    string
    Description
  • targetLabelrequired
    Type
    string, or null
    Description
  • atrequired
    Type
    string, date-time
    Description
  • detailrequired
    Type
    string, or null
    Description
  • metarequired
    Type
    object
    Description
  • offsetrequired
    Type
    integer
    Description
  • limitrequired
    Type
    integer
    Description
  • morerequired
    Type
    boolean
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation

Example

curl
curl "https://api.rsx.group/projects/v1/admin/audit/list" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "id": "018f3b1c-9a2e-7c31-8f4d-2a6b5c7e9d12",
      "actor": "ops@rsx.group",
      "action": "project.purged",
      "targetType": "project",
      "targetId": "string",
      "targetLabel": "string",
      "at": "2026-09-12T10:16:30.000Z",
      "detail": "string"
    }
  ],
  "meta": {
    "offset": 1,
    "limit": 1,
    "more": true
  }
}
02

internal

2 operations under /projects/v1/internal.

GET/projects/v1/internal/docs/list

The published pages of the built-in docs project

Binding calls only. Every non-archived document in the built-in project that has a published revision and a collection, as that revision, ordered by collection, position and title. Never a working head, never an unpublished document.

Scope
projects:internal:docs:list Admin-issued keys only.

Query parameters

Query parameters of internalListPublishedDocuments

  • collection
    Type
    string
    Description
    Where a published page appears on docs.rsx.group. Read only for documents in the built-in docs project; recorded and ignored elsewhere.one of "guides", "products", "support"

Response 200Published pages

Response of internalListPublishedDocuments

  • datarequired
    Type
    array of PublishedDocument
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • collectionrequired
    Type
    string
    Description
    Where a published page appears on docs.rsx.group. Read only for documents in the built-in docs project; recorded and ignored elsewhere.one of "guides", "products", "support"
  • sectionrequired
    Type
    string, or null
    Description
  • positionrequired
    Type
    integer
    Description
  • titlerequired
    Type
    string
    Description
  • summaryrequired
    Type
    string, or null
    Description
  • contentrequired
    Type
    string
    Description
  • publishedVersionrequired
    Type
    integer
    Description
    more than 0
  • publishedAtrequired
    Type
    string, date-time
    Description
  • revisedAtrequired
    Type
    string, date-time
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 404No such record

Example

curl
curl "https://api.rsx.group/projects/v1/internal/docs/list" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "slug": "rsx-node",
      "collection": "guides",
      "section": "string",
      "position": 1,
      "title": "string",
      "summary": "string",
      "content": "string",
      "publishedVersion": 1,
      "publishedAt": "2026-10-10T12:00:00.000Z",
      "revisedAt": "2026-10-10T12:00:00.000Z"
    }
  ]
}
GET/projects/v1/internal/docs/get

One published page of the built-in docs project

Binding calls only. An unpublished or archived document is not found, whatever is asked.

Scope
projects:internal:docs:get Admin-issued keys only.

Query parameters

Query parameters of internalGetPublishedDocument

  • collectionrequired
    Type
    string
    Description
    Where a published page appears on docs.rsx.group. Read only for documents in the built-in docs project; recorded and ignored elsewhere.one of "guides", "products", "support"
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$

Response 200Published page

Response of internalGetPublishedDocument

  • datarequired
    Type
    PublishedDocument
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • collectionrequired
    Type
    string
    Description
    Where a published page appears on docs.rsx.group. Read only for documents in the built-in docs project; recorded and ignored elsewhere.one of "guides", "products", "support"
  • sectionrequired
    Type
    string, or null
    Description
  • positionrequired
    Type
    integer
    Description
  • titlerequired
    Type
    string
    Description
  • summaryrequired
    Type
    string, or null
    Description
  • contentrequired
    Type
    string
    Description
  • publishedVersionrequired
    Type
    integer
    Description
    more than 0
  • publishedAtrequired
    Type
    string, date-time
    Description
  • revisedAtrequired
    Type
    string, date-time
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 404No such record

Example

curl
curl "https://api.rsx.group/projects/v1/internal/docs/get?collection=guides&slug=rsx-node" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": {
    "slug": "rsx-node",
    "collection": "guides",
    "section": "string",
    "position": 1,
    "title": "string",
    "summary": "string",
    "content": "string",
    "publishedVersion": 1,
    "publishedAt": "2026-10-10T12:00:00.000Z",
    "revisedAt": "2026-10-10T12:00:00.000Z"
  }
}
03

projects

6 operations under /projects/v1/projects.

POST/projects/v1/projects/add

Create a project

The calling account becomes the project's owner and gets an 'owner' membership row in the same write. A key-authenticated caller cannot create a project: it holds no membership, so the project would have nobody answerable for it.

Scope
projects:projects:add Admin-issued keys only.
Idempotency
Requires an Idempotency-Key header. Reusing the key within 24 hours returns the original response instead of creating a second record.

Request bodyapplication/json

Request body of addProject

  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • namerequired
    Type
    string
    Description
    1 to 120 characters
  • description
    Type
    string
    Description
    up to 2000 characters
  • status
    Type
    string
    Description
    Defaults to 'active'.one of "active", "paused", "completed"

Response 200Project created

Response of addProject

  • datarequired
    Type
    Project
    Description
  • idrequired
    Type
    string, uuid
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • namerequired
    Type
    string
    Description
  • descriptionrequired
    Type
    string, or null
    Description
  • statusrequired
    Type
    string
    Description
    one of "active", "paused", "completed"
  • ownerIdrequired
    Type
    string, uuid
    Description
    The account answerable for the project. Also holds an 'owner' membership row.
  • builtinrequired
    Type
    boolean
    Description
    A platform project such as 'docs'. Cannot be archived or purged; every staff account may write in it.
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description
    Set when the project is archived. An archived project is read only.

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/projects/add \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Idempotency-Key: 5b8f2d1a-0c7e-4b1f-9a6d-3e2f1c0b9a8d" \
  -H "Content-Type: application/json" \
  -d '{
  "slug": "rsx-node",
  "name": "RSX Node",
  "description": "Control plane for RSX-managed compute.",
  "status": "active"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "slug": "rsx-node",
    "name": "RSX Node",
    "description": "Control plane for RSX-managed compute.",
    "status": "active",
    "ownerId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "builtin": false,
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "archivedAt": null
  }
}
GET/projects/v1/projects/list

List projects

Every project, not only the caller's: read access on this surface is the staff gate rather than project membership. Pass memberOf to narrow to one account's projects. Archived projects are excluded by default.

Scope
projects:projects:list Admin-issued keys only.

Query parameters

Query parameters of listProjects

  • cursor
    Type
    string
    Description
  • limit
    Type
    integer
    Description
    1 to 100 · default 20
  • status
    Type
    string
    Description
    one of "active", "paused", "completed"
  • archived
    Type
    string
    Description
    Whether archived projects appear.one of "exclude", "include", "only" · default "exclude"
  • memberOf
    Type
    string, uuid
    Description

Response 200Projects, newest first

Response of listProjects

  • datarequired
    Type
    array of Project
    Description
  • idrequired
    Type
    string, uuid
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • namerequired
    Type
    string
    Description
  • descriptionrequired
    Type
    string, or null
    Description
  • statusrequired
    Type
    string
    Description
    one of "active", "paused", "completed"
  • ownerIdrequired
    Type
    string, uuid
    Description
    The account answerable for the project. Also holds an 'owner' membership row.
  • builtinrequired
    Type
    boolean
    Description
    A platform project such as 'docs'. Cannot be archived or purged; every staff account may write in it.
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description
    Set when the project is archived. An archived project is read only.
  • metarequired
    Type
    ProjectsPageMeta
    Description
  • cursorrequired
    Type
    string, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation

Example

curl
curl "https://api.rsx.group/projects/v1/projects/list" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "slug": "rsx-node",
      "name": "RSX Node",
      "description": "Control plane for RSX-managed compute.",
      "status": "active",
      "ownerId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
      "builtin": false,
      "createdAt": "2026-09-08T12:00:00.000Z",
      "updatedAt": "2026-09-08T12:00:00.000Z",
      "archivedAt": null
    }
  ],
  "meta": {
    "cursor": null
  }
}
GET/projects/v1/projects/get

Fetch one project

By id or by slug, exactly one of the two. The application routes on slug; everything internal holds an id.

Scope
projects:projects:get Admin-issued keys only.

Query parameters

Query parameters of getProject

  • id
    Type
    string, uuid
    Description
  • slug
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$

Response 200Project

Response of getProject

  • datarequired
    Type
    Project
    Description
  • idrequired
    Type
    string, uuid
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • namerequired
    Type
    string
    Description
  • descriptionrequired
    Type
    string, or null
    Description
  • statusrequired
    Type
    string
    Description
    one of "active", "paused", "completed"
  • ownerIdrequired
    Type
    string, uuid
    Description
    The account answerable for the project. Also holds an 'owner' membership row.
  • builtinrequired
    Type
    boolean
    Description
    A platform project such as 'docs'. Cannot be archived or purged; every staff account may write in it.
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description
    Set when the project is archived. An archived project is read only.

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record

Example

curl
curl "https://api.rsx.group/projects/v1/projects/get" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "slug": "rsx-node",
    "name": "RSX Node",
    "description": "Control plane for RSX-managed compute.",
    "status": "active",
    "ownerId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "builtin": false,
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "archivedAt": null
  }
}
POST/projects/v1/projects/update

Update a project

Needs the maintainer role. An omitted field is left alone. There is deliberately no way to change a slug: it is the project's URL identity and renaming it would break every saved link.

Scope
projects:projects:update Admin-issued keys only.

Request bodyapplication/json

Request body of updateProject

  • idrequired
    Type
    string, uuid
    Description
  • name
    Type
    string
    Description
    1 to 120 characters
  • description
    Type
    string
    Description
    up to 2000 characters
  • status
    Type
    string
    Description
    one of "active", "paused", "completed"

Response 200Project updated

Response of updateProject

  • datarequired
    Type
    Project
    Description
  • idrequired
    Type
    string, uuid
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • namerequired
    Type
    string
    Description
  • descriptionrequired
    Type
    string, or null
    Description
  • statusrequired
    Type
    string
    Description
    one of "active", "paused", "completed"
  • ownerIdrequired
    Type
    string, uuid
    Description
    The account answerable for the project. Also holds an 'owner' membership row.
  • builtinrequired
    Type
    boolean
    Description
    A platform project such as 'docs'. Cannot be archived or purged; every staff account may write in it.
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description
    Set when the project is archived. An archived project is read only.

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/projects/update \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "name": "string",
  "description": "string",
  "status": "active"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "slug": "rsx-node",
    "name": "RSX Node",
    "description": "Control plane for RSX-managed compute.",
    "status": "active",
    "ownerId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "builtin": false,
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "archivedAt": null
  }
}
POST/projects/v1/projects/remove

Archive a project

Needs the owner role. This archives rather than deletes: the row stays, every reference to it keeps resolving, and an archived project is read only. Purging is an admin operation and is not on this surface.

Scope
projects:projects:remove Admin-issued keys only.

Request bodyapplication/json

Request body of removeProject

  • idrequired
    Type
    string, uuid
    Description

Response 200Project archived

Response of removeProject

  • datarequired
    Type
    Project
    Description
  • idrequired
    Type
    string, uuid
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • namerequired
    Type
    string
    Description
  • descriptionrequired
    Type
    string, or null
    Description
  • statusrequired
    Type
    string
    Description
    one of "active", "paused", "completed"
  • ownerIdrequired
    Type
    string, uuid
    Description
    The account answerable for the project. Also holds an 'owner' membership row.
  • builtinrequired
    Type
    boolean
    Description
    A platform project such as 'docs'. Cannot be archived or purged; every staff account may write in it.
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description
    Set when the project is archived. An archived project is read only.

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/projects/remove \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "slug": "rsx-node",
    "name": "RSX Node",
    "description": "Control plane for RSX-managed compute.",
    "status": "active",
    "ownerId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "builtin": false,
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "archivedAt": null
  }
}
POST/projects/v1/projects/restore

Restore an archived project

Needs the owner role, matching what archiving it needed. Restoring something that is not archived succeeds and changes nothing: the caller named a state, and that is the state it is in.

Scope
projects:projects:restore Admin-issued keys only.

Request bodyapplication/json

Request body of restoreProject

  • idrequired
    Type
    string, uuid
    Description

Response 200Project restored

Response of restoreProject

  • datarequired
    Type
    Project
    Description
  • idrequired
    Type
    string, uuid
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • namerequired
    Type
    string
    Description
  • descriptionrequired
    Type
    string, or null
    Description
  • statusrequired
    Type
    string
    Description
    one of "active", "paused", "completed"
  • ownerIdrequired
    Type
    string, uuid
    Description
    The account answerable for the project. Also holds an 'owner' membership row.
  • builtinrequired
    Type
    boolean
    Description
    A platform project such as 'docs'. Cannot be archived or purged; every staff account may write in it.
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description
    Set when the project is archived. An archived project is read only.

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/projects/restore \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "slug": "rsx-node",
    "name": "RSX Node",
    "description": "Control plane for RSX-managed compute.",
    "status": "active",
    "ownerId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "builtin": false,
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "archivedAt": null
  }
}
04

members

5 operations under /projects/v1/members.

POST/projects/v1/members/add

Add a project member

Needs the maintainer role, and the owner role to grant 'owner'. Adding an account that is already a member changes its role.

Scope
projects:members:add Admin-issued keys only.
Idempotency
Requires an Idempotency-Key header. Reusing the key within 24 hours returns the original response instead of creating a second record.

Request bodyapplication/json

Request body of addProjectMember

  • projectIdrequired
    Type
    string, uuid
    Description
  • accountIdrequired
    Type
    string, uuid
    Description
  • rolerequired
    Type
    string
    Description
    owner: everything, including archiving and changing owners. maintainer: manage members, labels, milestones and lifecycle. contributor: create and edit content. reader: an explicit watcher, granting no writes.one of "owner", "maintainer", "contributor", "reader"

Response 200Member added

Response of addProjectMember

  • datarequired
    Type
    ProjectMember
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • accountIdrequired
    Type
    string, uuid
    Description
  • rolerequired
    Type
    string
    Description
    owner: everything, including archiving and changing owners. maintainer: manage members, labels, milestones and lifecycle. contributor: create and edit content. reader: an explicit watcher, granting no writes.one of "owner", "maintainer", "contributor", "reader"
  • createdAtrequired
    Type
    string, date-time
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/members/add \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Idempotency-Key: 5b8f2d1a-0c7e-4b1f-9a6d-3e2f1c0b9a8d" \
  -H "Content-Type: application/json" \
  -d '{
  "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "accountId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
  "role": "contributor"
}'
200 response
{
  "data": {
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "accountId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "role": "contributor",
    "createdAt": "2026-09-08T12:00:00.000Z"
  }
}
POST/projects/v1/members/update

Change a member's role

Needs the maintainer role, and the owner role to grant or revoke 'owner'. Demoting the last owner is refused.

Scope
projects:members:update Admin-issued keys only.

Request bodyapplication/json

Request body of updateProjectMember

  • projectIdrequired
    Type
    string, uuid
    Description
  • accountIdrequired
    Type
    string, uuid
    Description
  • rolerequired
    Type
    string
    Description
    owner: everything, including archiving and changing owners. maintainer: manage members, labels, milestones and lifecycle. contributor: create and edit content. reader: an explicit watcher, granting no writes.one of "owner", "maintainer", "contributor", "reader"

Response 200Member updated

Response of updateProjectMember

  • datarequired
    Type
    ProjectMember
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • accountIdrequired
    Type
    string, uuid
    Description
  • rolerequired
    Type
    string
    Description
    owner: everything, including archiving and changing owners. maintainer: manage members, labels, milestones and lifecycle. contributor: create and edit content. reader: an explicit watcher, granting no writes.one of "owner", "maintainer", "contributor", "reader"
  • createdAtrequired
    Type
    string, date-time
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/members/update \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "accountId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
  "role": "contributor"
}'
200 response
{
  "data": {
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "accountId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "role": "contributor",
    "createdAt": "2026-09-08T12:00:00.000Z"
  }
}
GET/projects/v1/members/list

List a project's members

Account ids, not names. Resolve them through RSX ID: this service never stores a handle or display name, because handles are mutable and a copy here would drift.

Scope
projects:members:list Admin-issued keys only.

Query parameters

Query parameters of listProjectMembers

  • cursor
    Type
    string
    Description
  • limit
    Type
    integer
    Description
    1 to 100 · default 20
  • projectIdrequired
    Type
    string, uuid
    Description
  • role
    Type
    string
    Description
    owner: everything, including archiving and changing owners. maintainer: manage members, labels, milestones and lifecycle. contributor: create and edit content. reader: an explicit watcher, granting no writes.one of "owner", "maintainer", "contributor", "reader"

Response 200Members, newest first

Response of listProjectMembers

  • datarequired
    Type
    array of ProjectMember
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • accountIdrequired
    Type
    string, uuid
    Description
  • rolerequired
    Type
    string
    Description
    owner: everything, including archiving and changing owners. maintainer: manage members, labels, milestones and lifecycle. contributor: create and edit content. reader: an explicit watcher, granting no writes.one of "owner", "maintainer", "contributor", "reader"
  • createdAtrequired
    Type
    string, date-time
    Description
  • metarequired
    Type
    ProjectsPageMeta
    Description
  • cursorrequired
    Type
    string, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record

Example

curl
curl "https://api.rsx.group/projects/v1/members/list?projectId=0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "accountId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
      "role": "contributor",
      "createdAt": "2026-09-08T12:00:00.000Z"
    }
  ],
  "meta": {
    "cursor": null
  }
}
GET/projects/v1/members/get

Fetch one membership

Scope
projects:members:get Admin-issued keys only.

Query parameters

Query parameters of getProjectMember

  • projectIdrequired
    Type
    string, uuid
    Description
  • accountIdrequired
    Type
    string, uuid
    Description

Response 200Membership

Response of getProjectMember

  • datarequired
    Type
    ProjectMember
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • accountIdrequired
    Type
    string, uuid
    Description
  • rolerequired
    Type
    string
    Description
    owner: everything, including archiving and changing owners. maintainer: manage members, labels, milestones and lifecycle. contributor: create and edit content. reader: an explicit watcher, granting no writes.one of "owner", "maintainer", "contributor", "reader"
  • createdAtrequired
    Type
    string, date-time
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record

Example

curl
curl "https://api.rsx.group/projects/v1/members/get?projectId=0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b&accountId=0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": {
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "accountId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "role": "contributor",
    "createdAt": "2026-09-08T12:00:00.000Z"
  }
}
POST/projects/v1/members/remove

Remove a project member

Needs the maintainer role, and the owner role to remove an owner. Removing the last owner is refused. This is a real delete rather than an archive, because a membership is a grant: the record of it being granted and revoked lives in activity, which is where it belongs.

Scope
projects:members:remove Admin-issued keys only.

Request bodyapplication/json

Request body of removeProjectMember

  • projectIdrequired
    Type
    string, uuid
    Description
  • accountIdrequired
    Type
    string, uuid
    Description

Response 200Member removed

Response of removeProjectMember

  • datarequired
    Type
    object
    Description
  • projectIdrequired
    Type
    string
    Description
  • accountIdrequired
    Type
    string
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/members/remove \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "accountId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d"
}'
200 response
{
  "data": {
    "projectId": "string",
    "accountId": "string"
  }
}
05

activity

2 operations under /projects/v1/activity.

GET/projects/v1/activity/list

List activity

Append-only audit history, newest first. Filterable by project, by entity, or by actor. Activity is not the source of truth for the record it describes: reconstructing current state by replaying it is not supported.

Scope
projects:activity:list Admin-issued keys only.

Query parameters

Query parameters of listProjectActivity

  • cursor
    Type
    string
    Description
  • limit
    Type
    integer
    Description
    1 to 100 · default 20
  • projectId
    Type
    string, uuid
    Description
  • entityType
    Type
    string
    Description
    one of "project", "work", "specification", "document", "milestone", "member", "comment"
  • entityId
    Type
    string
    Description
  • actorId
    Type
    string, uuid
    Description

Response 200Activity, newest first

Response of listProjectActivity

  • datarequired
    Type
    array of ProjectActivity
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • actorIdrequired
    Type
    string
    Description
    An RSX account id when actorType is 'account', an API key id when it is 'key'.
  • actorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • entityTyperequired
    Type
    string
    Description
    one of "project", "work", "specification", "document", "milestone", "member", "comment"
  • entityIdrequired
    Type
    string
    Description
  • actionrequired
    Type
    string
    Description
  • metadatarequired
    Type
    map of any, or null
    Description
  • {key}
    Type
    any
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • metarequired
    Type
    ProjectsPageMeta
    Description
  • cursorrequired
    Type
    string, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation

Example

curl
curl "https://api.rsx.group/projects/v1/activity/list" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "actorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
      "actorType": "account",
      "entityType": "work",
      "entityId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "action": "created",
      "metadata": null,
      "createdAt": "2026-09-08T12:00:00.000Z"
    }
  ],
  "meta": {
    "cursor": null
  }
}
GET/projects/v1/activity/get

Fetch one activity entry

Scope
projects:activity:get Admin-issued keys only.

Query parameters

Query parameters of getProjectActivity

  • idrequired
    Type
    string, uuid
    Description

Response 200Activity entry

Response of getProjectActivity

  • datarequired
    Type
    ProjectActivity
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • actorIdrequired
    Type
    string
    Description
    An RSX account id when actorType is 'account', an API key id when it is 'key'.
  • actorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • entityTyperequired
    Type
    string
    Description
    one of "project", "work", "specification", "document", "milestone", "member", "comment"
  • entityIdrequired
    Type
    string
    Description
  • actionrequired
    Type
    string
    Description
  • metadatarequired
    Type
    map of any, or null
    Description
  • {key}
    Type
    any
    Description
  • createdAtrequired
    Type
    string, date-time
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record

Example

curl
curl "https://api.rsx.group/projects/v1/activity/get?id=0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "actorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "actorType": "account",
    "entityType": "work",
    "entityId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "action": "created",
    "metadata": null,
    "createdAt": "2026-09-08T12:00:00.000Z"
  }
}
06

work

6 operations under /projects/v1/work.

POST/projects/v1/work/add

Create a work item

Needs the contributor role. The item's number is allocated by the service, per project, and is what a person cites as #142. Assignees and labels are set here rather than through groups of their own.

Scope
projects:work:add Admin-issued keys only.
Idempotency
Requires an Idempotency-Key header. Reusing the key within 24 hours returns the original response instead of creating a second record.

Request bodyapplication/json

Request body of addWork

  • projectIdrequired
    Type
    string, uuid
    Description
  • typerequired
    Type
    string
    Description
    one of "task", "bug", "work_order", "idea"
  • titlerequired
    Type
    string
    Description
    1 to 200 characters
  • description
    Type
    string
    Description
    up to 50000 characters
  • status
    Type
    string
    Description
    Defaults to 'backlog'.one of "backlog", "planned", "in_progress", "blocked", "review", "done", "cancelled"
  • priority
    Type
    string
    Description
    Defaults to 'none'.one of "none", "low", "normal", "high", "critical"
  • bucket
    Type
    string
    Description
    Defaults to 'none'.one of "none", "now", "next", "later", "someday"
  • assigneeIds
    Type
    array of string, uuid
    Description
    up to 20 items
  • labelIds
    Type
    array of string, uuid
    Description
    up to 50 items
  • specifications
    Type
    array of WorkSpecificationLink
    Description
    up to 20 items
  • specificationIdrequired
    Type
    string, uuid
    Description
  • relationshiprequired
    Type
    string
    Description
    one of "governed_by", "implements", "references"
  • milestoneId
    Type
    string, uuid
    Description
  • dueAt
    Type
    string, date-time
    Description

Response 200Work item created

Response of addWork

  • datarequired
    Type
    WorkItem
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • numberrequired
    Type
    integer
    Description
    more than 0
  • typerequired
    Type
    string
    Description
    one of "task", "bug", "work_order", "idea"
  • titlerequired
    Type
    string
    Description
  • descriptionrequired
    Type
    string, or null
    Description
  • statusrequired
    Type
    string
    Description
    one of "backlog", "planned", "in_progress", "blocked", "review", "done", "cancelled"
  • priorityrequired
    Type
    string
    Description
    Defaults to 'none'. The roadmap bucket expresses urgency.one of "none", "low", "normal", "high", "critical"
  • bucketrequired
    Type
    string
    Description
    Roadmap placement. 'none' is not on the roadmap.one of "none", "now", "next", "later", "someday"
  • creatorIdrequired
    Type
    string
    Description
    An RSX account id when creatorType is 'account', an API key id when it is 'key'.
  • creatorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • assigneeIdsrequired
    Type
    array of string, uuid
    Description
  • labelIdsrequired
    Type
    array of string, uuid
    Description
  • specificationsrequired
    Type
    array of WorkSpecificationLink
    Description
  • milestoneIdrequired
    Type
    string, uuid, or null
    Description
  • dueAtrequired
    Type
    string, date-time, or null
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • completedAtrequired
    Type
    string, date-time, or null
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this
  • 422Well-formed, but not a thing that can exist

Example

curl
curl -X POST https://api.rsx.group/projects/v1/work/add \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Idempotency-Key: 5b8f2d1a-0c7e-4b1f-9a6d-3e2f1c0b9a8d" \
  -H "Content-Type: application/json" \
  -d '{
  "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "type": "task",
  "title": "Implement container runtime",
  "description": "string",
  "status": "planned",
  "priority": "none",
  "bucket": "next",
  "assigneeIds": [
    "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d"
  ],
  "labelIds": [
    "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b"
  ],
  "specifications": [
    {
      "specificationId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "relationship": "governed_by"
    }
  ],
  "milestoneId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "dueAt": "2026-10-10T12:00:00.000Z"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "number": 142,
    "type": "task",
    "title": "Implement container runtime",
    "description": null,
    "status": "planned",
    "priority": "none",
    "bucket": "next",
    "creatorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "creatorType": "account",
    "assigneeIds": [],
    "labelIds": [],
    "specifications": [],
    "milestoneId": null,
    "dueAt": null,
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "completedAt": null,
    "archivedAt": null
  }
}
GET/projects/v1/work/list

List work items

Filterable by project, type, status, priority, roadmap bucket, milestone, assignee and label. Archived items are excluded by default. Reads need no project membership.

Scope
projects:work:list Admin-issued keys only.

Query parameters

Query parameters of listWork

  • cursor
    Type
    string
    Description
  • limit
    Type
    integer
    Description
    1 to 100 · default 20
  • projectId
    Type
    string, uuid
    Description
  • type
    Type
    string
    Description
    one of "task", "bug", "work_order", "idea"
  • status
    Type
    string
    Description
    one of "backlog", "planned", "in_progress", "blocked", "review", "done", "cancelled"
  • priority
    Type
    string
    Description
    Defaults to 'none'. The roadmap bucket expresses urgency.one of "none", "low", "normal", "high", "critical"
  • bucket
    Type
    string
    Description
    Roadmap placement. 'none' is not on the roadmap.one of "none", "now", "next", "later", "someday"
  • milestoneId
    Type
    string, uuid
    Description
  • assigneeId
    Type
    string, uuid
    Description
  • labelId
    Type
    string, uuid
    Description
  • specificationId
    Type
    string, uuid
    Description
  • archived
    Type
    string
    Description
    one of "exclude", "include", "only" · default "exclude"

Response 200Work items, newest first

Response of listWork

  • datarequired
    Type
    array of WorkItem
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • numberrequired
    Type
    integer
    Description
    more than 0
  • typerequired
    Type
    string
    Description
    one of "task", "bug", "work_order", "idea"
  • titlerequired
    Type
    string
    Description
  • descriptionrequired
    Type
    string, or null
    Description
  • statusrequired
    Type
    string
    Description
    one of "backlog", "planned", "in_progress", "blocked", "review", "done", "cancelled"
  • priorityrequired
    Type
    string
    Description
    Defaults to 'none'. The roadmap bucket expresses urgency.one of "none", "low", "normal", "high", "critical"
  • bucketrequired
    Type
    string
    Description
    Roadmap placement. 'none' is not on the roadmap.one of "none", "now", "next", "later", "someday"
  • creatorIdrequired
    Type
    string
    Description
    An RSX account id when creatorType is 'account', an API key id when it is 'key'.
  • creatorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • assigneeIdsrequired
    Type
    array of string, uuid
    Description
  • labelIdsrequired
    Type
    array of string, uuid
    Description
  • specificationsrequired
    Type
    array of WorkSpecificationLink
    Description
  • milestoneIdrequired
    Type
    string, uuid, or null
    Description
  • dueAtrequired
    Type
    string, date-time, or null
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • completedAtrequired
    Type
    string, date-time, or null
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description
  • metarequired
    Type
    ProjectsPageMeta
    Description
  • cursorrequired
    Type
    string, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation

Example

curl
curl "https://api.rsx.group/projects/v1/work/list" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "number": 142,
      "type": "task",
      "title": "Implement container runtime",
      "description": null,
      "status": "planned",
      "priority": "none",
      "bucket": "next",
      "creatorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
      "creatorType": "account",
      "assigneeIds": [],
      "labelIds": [],
      "specifications": [],
      "milestoneId": null,
      "dueAt": null,
      "createdAt": "2026-09-08T12:00:00.000Z",
      "updatedAt": "2026-09-08T12:00:00.000Z",
      "completedAt": null,
      "archivedAt": null
    }
  ],
  "meta": {
    "cursor": null
  }
}
GET/projects/v1/work/get

Fetch one work item

By id, or by the project and number a person cites. Numbers are per project, so #142 alone is ambiguous and projectId is required alongside it.

Scope
projects:work:get Admin-issued keys only.

Query parameters

Query parameters of getWork

  • id
    Type
    string, uuid
    Description
  • projectId
    Type
    string, uuid
    Description
  • number
    Type
    integer
    Description
    more than 0

Response 200Work item

Response of getWork

  • datarequired
    Type
    WorkItem
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • numberrequired
    Type
    integer
    Description
    more than 0
  • typerequired
    Type
    string
    Description
    one of "task", "bug", "work_order", "idea"
  • titlerequired
    Type
    string
    Description
  • descriptionrequired
    Type
    string, or null
    Description
  • statusrequired
    Type
    string
    Description
    one of "backlog", "planned", "in_progress", "blocked", "review", "done", "cancelled"
  • priorityrequired
    Type
    string
    Description
    Defaults to 'none'. The roadmap bucket expresses urgency.one of "none", "low", "normal", "high", "critical"
  • bucketrequired
    Type
    string
    Description
    Roadmap placement. 'none' is not on the roadmap.one of "none", "now", "next", "later", "someday"
  • creatorIdrequired
    Type
    string
    Description
    An RSX account id when creatorType is 'account', an API key id when it is 'key'.
  • creatorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • assigneeIdsrequired
    Type
    array of string, uuid
    Description
  • labelIdsrequired
    Type
    array of string, uuid
    Description
  • specificationsrequired
    Type
    array of WorkSpecificationLink
    Description
  • milestoneIdrequired
    Type
    string, uuid, or null
    Description
  • dueAtrequired
    Type
    string, date-time, or null
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • completedAtrequired
    Type
    string, date-time, or null
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record

Example

curl
curl "https://api.rsx.group/projects/v1/work/get" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "number": 142,
    "type": "task",
    "title": "Implement container runtime",
    "description": null,
    "status": "planned",
    "priority": "none",
    "bucket": "next",
    "creatorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "creatorType": "account",
    "assigneeIds": [],
    "labelIds": [],
    "specifications": [],
    "milestoneId": null,
    "dueAt": null,
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "completedAt": null,
    "archivedAt": null
  }
}
POST/projects/v1/work/update

Update a work item

Needs the contributor role. An omitted field is left alone; assigneeIds and labelIds are replacements, so sending an empty array clears them. completedAt is maintained by the service from status and is not settable.

Scope
projects:work:update Admin-issued keys only.

Request bodyapplication/json

Request body of updateWork

  • idrequired
    Type
    string, uuid
    Description
  • type
    Type
    string
    Description
    one of "task", "bug", "work_order", "idea"
  • title
    Type
    string
    Description
    1 to 200 characters
  • description
    Type
    string
    Description
    up to 50000 characters
  • status
    Type
    string
    Description
    one of "backlog", "planned", "in_progress", "blocked", "review", "done", "cancelled"
  • priority
    Type
    string
    Description
    Defaults to 'none'. The roadmap bucket expresses urgency.one of "none", "low", "normal", "high", "critical"
  • bucket
    Type
    string
    Description
    Roadmap placement. 'none' is not on the roadmap.one of "none", "now", "next", "later", "someday"
  • assigneeIds
    Type
    array of string, uuid
    Description
    up to 20 items
  • labelIds
    Type
    array of string, uuid
    Description
    up to 50 items
  • specifications
    Type
    array of WorkSpecificationLink
    Description
    up to 20 items
  • specificationIdrequired
    Type
    string, uuid
    Description
  • relationshiprequired
    Type
    string
    Description
    one of "governed_by", "implements", "references"
  • milestoneId
    Type
    string, uuid, or null
    Description
  • dueAt
    Type
    string, date-time, or null
    Description

Response 200Work item updated

Response of updateWork

  • datarequired
    Type
    WorkItem
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • numberrequired
    Type
    integer
    Description
    more than 0
  • typerequired
    Type
    string
    Description
    one of "task", "bug", "work_order", "idea"
  • titlerequired
    Type
    string
    Description
  • descriptionrequired
    Type
    string, or null
    Description
  • statusrequired
    Type
    string
    Description
    one of "backlog", "planned", "in_progress", "blocked", "review", "done", "cancelled"
  • priorityrequired
    Type
    string
    Description
    Defaults to 'none'. The roadmap bucket expresses urgency.one of "none", "low", "normal", "high", "critical"
  • bucketrequired
    Type
    string
    Description
    Roadmap placement. 'none' is not on the roadmap.one of "none", "now", "next", "later", "someday"
  • creatorIdrequired
    Type
    string
    Description
    An RSX account id when creatorType is 'account', an API key id when it is 'key'.
  • creatorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • assigneeIdsrequired
    Type
    array of string, uuid
    Description
  • labelIdsrequired
    Type
    array of string, uuid
    Description
  • specificationsrequired
    Type
    array of WorkSpecificationLink
    Description
  • milestoneIdrequired
    Type
    string, uuid, or null
    Description
  • dueAtrequired
    Type
    string, date-time, or null
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • completedAtrequired
    Type
    string, date-time, or null
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this
  • 422Well-formed, but not a thing that can exist

Example

curl
curl -X POST https://api.rsx.group/projects/v1/work/update \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "type": "task",
  "title": "string",
  "description": "string",
  "status": "planned",
  "priority": "none",
  "bucket": "next",
  "assigneeIds": [
    "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d"
  ],
  "labelIds": [
    "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b"
  ],
  "specifications": [
    {
      "specificationId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "relationship": "governed_by"
    }
  ],
  "milestoneId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "dueAt": "2026-10-10T12:00:00.000Z"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "number": 142,
    "type": "task",
    "title": "Implement container runtime",
    "description": null,
    "status": "planned",
    "priority": "none",
    "bucket": "next",
    "creatorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "creatorType": "account",
    "assigneeIds": [],
    "labelIds": [],
    "specifications": [],
    "milestoneId": null,
    "dueAt": null,
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "completedAt": null,
    "archivedAt": null
  }
}
POST/projects/v1/work/remove

Archive a work item

Needs the contributor role. Archives rather than deletes, so every reference to #142 keeps resolving. Its relationships are removed, because a dependency on something nobody is doing any more is a dependency that would block the wrong thing.

Scope
projects:work:remove Admin-issued keys only.

Request bodyapplication/json

Request body of removeWork

  • idrequired
    Type
    string, uuid
    Description

Response 200Work item archived

Response of removeWork

  • datarequired
    Type
    WorkItem
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • numberrequired
    Type
    integer
    Description
    more than 0
  • typerequired
    Type
    string
    Description
    one of "task", "bug", "work_order", "idea"
  • titlerequired
    Type
    string
    Description
  • descriptionrequired
    Type
    string, or null
    Description
  • statusrequired
    Type
    string
    Description
    one of "backlog", "planned", "in_progress", "blocked", "review", "done", "cancelled"
  • priorityrequired
    Type
    string
    Description
    Defaults to 'none'. The roadmap bucket expresses urgency.one of "none", "low", "normal", "high", "critical"
  • bucketrequired
    Type
    string
    Description
    Roadmap placement. 'none' is not on the roadmap.one of "none", "now", "next", "later", "someday"
  • creatorIdrequired
    Type
    string
    Description
    An RSX account id when creatorType is 'account', an API key id when it is 'key'.
  • creatorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • assigneeIdsrequired
    Type
    array of string, uuid
    Description
  • labelIdsrequired
    Type
    array of string, uuid
    Description
  • specificationsrequired
    Type
    array of WorkSpecificationLink
    Description
  • milestoneIdrequired
    Type
    string, uuid, or null
    Description
  • dueAtrequired
    Type
    string, date-time, or null
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • completedAtrequired
    Type
    string, date-time, or null
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/work/remove \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "number": 142,
    "type": "task",
    "title": "Implement container runtime",
    "description": null,
    "status": "planned",
    "priority": "none",
    "bucket": "next",
    "creatorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "creatorType": "account",
    "assigneeIds": [],
    "labelIds": [],
    "specifications": [],
    "milestoneId": null,
    "dueAt": null,
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "completedAt": null,
    "archivedAt": null
  }
}
POST/projects/v1/work/restore

Restore an archived work item

Needs the contributor role, matching what archiving it needed. Restoring something that is not archived succeeds and changes nothing: the caller named a state, and that is the state it is in.

Scope
projects:work:restore Admin-issued keys only.

Request bodyapplication/json

Request body of restoreWorkitem

  • idrequired
    Type
    string, uuid
    Description

Response 200Work item restored

Response of restoreWorkitem

  • datarequired
    Type
    WorkItem
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • numberrequired
    Type
    integer
    Description
    more than 0
  • typerequired
    Type
    string
    Description
    one of "task", "bug", "work_order", "idea"
  • titlerequired
    Type
    string
    Description
  • descriptionrequired
    Type
    string, or null
    Description
  • statusrequired
    Type
    string
    Description
    one of "backlog", "planned", "in_progress", "blocked", "review", "done", "cancelled"
  • priorityrequired
    Type
    string
    Description
    Defaults to 'none'. The roadmap bucket expresses urgency.one of "none", "low", "normal", "high", "critical"
  • bucketrequired
    Type
    string
    Description
    Roadmap placement. 'none' is not on the roadmap.one of "none", "now", "next", "later", "someday"
  • creatorIdrequired
    Type
    string
    Description
    An RSX account id when creatorType is 'account', an API key id when it is 'key'.
  • creatorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • assigneeIdsrequired
    Type
    array of string, uuid
    Description
  • labelIdsrequired
    Type
    array of string, uuid
    Description
  • specificationsrequired
    Type
    array of WorkSpecificationLink
    Description
  • milestoneIdrequired
    Type
    string, uuid, or null
    Description
  • dueAtrequired
    Type
    string, date-time, or null
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • completedAtrequired
    Type
    string, date-time, or null
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/work/restore \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "number": 142,
    "type": "task",
    "title": "Implement container runtime",
    "description": null,
    "status": "planned",
    "priority": "none",
    "bucket": "next",
    "creatorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "creatorType": "account",
    "assigneeIds": [],
    "labelIds": [],
    "specifications": [],
    "milestoneId": null,
    "dueAt": null,
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "completedAt": null,
    "archivedAt": null
  }
}
07

relationships

4 operations under /projects/v1/relationships.

POST/projects/v1/relationships/add

Connect two work items

Needs the contributor role on the project. Both items must be in the same project. depends_on is accepted and stored as a blocks row in the opposite direction, because they are the same fact; related_to and duplicates are symmetric and stored once, so adding one from either end finds the same row.

Scope
projects:relationships:add Admin-issued keys only.
Idempotency
Requires an Idempotency-Key header. Reusing the key within 24 hours returns the original response instead of creating a second record.

Request bodyapplication/json

Request body of addRelationship

  • sourceIdrequired
    Type
    string, uuid
    Description
  • targetIdrequired
    Type
    string, uuid
    Description
  • relationshiprequired
    Type
    string
    Description
    blocks and supersedes are directional. related_to and duplicates are symmetric and stored once. depends_on is accepted and normalised to a blocks row in the opposite direction.one of "blocks", "depends_on", "related_to", "duplicates", "supersedes"

Response 200Relationship recorded

Response of addRelationship

  • datarequired
    Type
    WorkRelationship
    Description
  • sourceIdrequired
    Type
    string, uuid
    Description
  • targetIdrequired
    Type
    string, uuid
    Description
  • relationshiprequired
    Type
    string
    Description
    one of "blocks", "related_to", "duplicates", "supersedes"
  • createdByrequired
    Type
    string, uuid
    Description
  • createdAtrequired
    Type
    string, date-time
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this
  • 422Well-formed, but not a thing that can exist

Example

curl
curl -X POST https://api.rsx.group/projects/v1/relationships/add \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Idempotency-Key: 5b8f2d1a-0c7e-4b1f-9a6d-3e2f1c0b9a8d" \
  -H "Content-Type: application/json" \
  -d '{
  "sourceId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "targetId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "relationship": "blocks"
}'
200 response
{
  "data": {
    "sourceId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "targetId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "relationship": "blocks",
    "createdBy": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "createdAt": "2026-09-08T12:00:00.000Z"
  }
}
GET/projects/v1/relationships/list

List a work item's relationships

Both directions: what this item blocks and what blocks it. Which column an id sits in is a storage detail rather than something the reader asked about.

Scope
projects:relationships:list Admin-issued keys only.

Query parameters

Query parameters of listRelationships

  • cursor
    Type
    string
    Description
  • limit
    Type
    integer
    Description
    1 to 100 · default 20
  • workIdrequired
    Type
    string, uuid
    Description
  • relationship
    Type
    string
    Description
    one of "blocks", "related_to", "duplicates", "supersedes"

Response 200Relationships

Response of listRelationships

  • datarequired
    Type
    array of WorkRelationship
    Description
  • sourceIdrequired
    Type
    string, uuid
    Description
  • targetIdrequired
    Type
    string, uuid
    Description
  • relationshiprequired
    Type
    string
    Description
    one of "blocks", "related_to", "duplicates", "supersedes"
  • createdByrequired
    Type
    string, uuid
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • metarequired
    Type
    ProjectsPageMeta
    Description
  • cursorrequired
    Type
    string, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record

Example

curl
curl "https://api.rsx.group/projects/v1/relationships/list?workId=0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "sourceId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "targetId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "relationship": "blocks",
      "createdBy": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
      "createdAt": "2026-09-08T12:00:00.000Z"
    }
  ],
  "meta": {
    "cursor": null
  }
}
GET/projects/v1/relationships/get

Fetch one relationship

Takes the same five names add does and normalises them the same way, so a relationship added as depends_on is found as depends_on.

Scope
projects:relationships:get Admin-issued keys only.

Query parameters

Query parameters of getRelationship

  • sourceIdrequired
    Type
    string, uuid
    Description
  • targetIdrequired
    Type
    string, uuid
    Description
  • relationshiprequired
    Type
    string
    Description
    blocks and supersedes are directional. related_to and duplicates are symmetric and stored once. depends_on is accepted and normalised to a blocks row in the opposite direction.one of "blocks", "depends_on", "related_to", "duplicates", "supersedes"

Response 200Relationship

Response of getRelationship

  • datarequired
    Type
    WorkRelationship
    Description
  • sourceIdrequired
    Type
    string, uuid
    Description
  • targetIdrequired
    Type
    string, uuid
    Description
  • relationshiprequired
    Type
    string
    Description
    one of "blocks", "related_to", "duplicates", "supersedes"
  • createdByrequired
    Type
    string, uuid
    Description
  • createdAtrequired
    Type
    string, date-time
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record

Example

curl
curl "https://api.rsx.group/projects/v1/relationships/get?sourceId=0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b&targetId=0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b&relationship=blocks" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": {
    "sourceId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "targetId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "relationship": "blocks",
    "createdBy": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "createdAt": "2026-09-08T12:00:00.000Z"
  }
}
POST/projects/v1/relationships/remove

Disconnect two work items

Needs the contributor role. Normalises the same way add does, so a relationship can be removed from whichever end the caller is looking at.

Scope
projects:relationships:remove Admin-issued keys only.

Request bodyapplication/json

Request body of removeRelationship

  • sourceIdrequired
    Type
    string, uuid
    Description
  • targetIdrequired
    Type
    string, uuid
    Description
  • relationshiprequired
    Type
    string
    Description
    blocks and supersedes are directional. related_to and duplicates are symmetric and stored once. depends_on is accepted and normalised to a blocks row in the opposite direction.one of "blocks", "depends_on", "related_to", "duplicates", "supersedes"

Response 200Relationship removed

Response of removeRelationship

  • datarequired
    Type
    object
    Description
  • sourceIdrequired
    Type
    string
    Description
  • targetIdrequired
    Type
    string
    Description
  • relationshiprequired
    Type
    string
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record

Example

curl
curl -X POST https://api.rsx.group/projects/v1/relationships/remove \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "sourceId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "targetId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "relationship": "blocks"
}'
200 response
{
  "data": {
    "sourceId": "string",
    "targetId": "string",
    "relationship": "string"
  }
}
08

labels

5 operations under /projects/v1/labels.

POST/projects/v1/labels/add

Create a label

With a projectId, needs the maintainer role on it. Without one the label is platform-wide, appears in every project's picker, and requires an RSX administrator. Names are lowercase and hyphenated so a label stays usable as a filter.

Scope
projects:labels:add Admin-issued keys only.
Idempotency
Requires an Idempotency-Key header. Reusing the key within 24 hours returns the original response instead of creating a second record.

Request bodyapplication/json

Request body of addLabel

  • projectId
    Type
    string, uuid
    Description
  • namerequired
    Type
    string
    Description
    1 to 48 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$

Response 200Label created

Response of addLabel

  • datarequired
    Type
    Label
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid, or null
    Description
  • namerequired
    Type
    string
    Description
  • createdAtrequired
    Type
    string, date-time
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/labels/add \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Idempotency-Key: 5b8f2d1a-0c7e-4b1f-9a6d-3e2f1c0b9a8d" \
  -H "Content-Type: application/json" \
  -d '{
  "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "name": "needs-review"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": null,
    "name": "security",
    "createdAt": "2026-09-08T12:00:00.000Z"
  }
}
GET/projects/v1/labels/list

List labels

With a projectId, returns that project's labels and every platform-wide one, because those are exactly the labels attachable from inside it. scope narrows to one or the other when managing rather than choosing.

Scope
projects:labels:list Admin-issued keys only.

Query parameters

Query parameters of listLabels

  • cursor
    Type
    string
    Description
  • limit
    Type
    integer
    Description
    1 to 100 · default 20
  • projectId
    Type
    string, uuid
    Description
  • scope
    Type
    string
    Description
    'project' excludes platform-wide labels; 'global' returns only those.one of "all", "project", "global" · default "all"

Response 200Labels

Response of listLabels

  • datarequired
    Type
    array of Label
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid, or null
    Description
  • namerequired
    Type
    string
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • metarequired
    Type
    ProjectsPageMeta
    Description
  • cursorrequired
    Type
    string, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation

Example

curl
curl "https://api.rsx.group/projects/v1/labels/list" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "projectId": null,
      "name": "security",
      "createdAt": "2026-09-08T12:00:00.000Z"
    }
  ],
  "meta": {
    "cursor": null
  }
}
GET/projects/v1/labels/get

Fetch one label

Scope
projects:labels:get Admin-issued keys only.

Query parameters

Query parameters of getLabel

  • idrequired
    Type
    string, uuid
    Description

Response 200Label

Response of getLabel

  • datarequired
    Type
    Label
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid, or null
    Description
  • namerequired
    Type
    string
    Description
  • createdAtrequired
    Type
    string, date-time
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record

Example

curl
curl "https://api.rsx.group/projects/v1/labels/get?id=0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": null,
    "name": "security",
    "createdAt": "2026-09-08T12:00:00.000Z"
  }
}
POST/projects/v1/labels/update

Rename a label

Only the name is mutable. A label cannot change scope: a project label becoming platform-wide would appear in pickers its author never saw, so that is a new label.

Scope
projects:labels:update Admin-issued keys only.

Request bodyapplication/json

Request body of updateLabel

  • idrequired
    Type
    string, uuid
    Description
  • namerequired
    Type
    string
    Description
    1 to 48 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$

Response 200Label renamed

Response of updateLabel

  • datarequired
    Type
    Label
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid, or null
    Description
  • namerequired
    Type
    string
    Description
  • createdAtrequired
    Type
    string, date-time
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/labels/update \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "name": "needs-review"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": null,
    "name": "security",
    "createdAt": "2026-09-08T12:00:00.000Z"
  }
}
POST/projects/v1/labels/remove

Delete a label

A real delete, not an archive, and it detaches the label from every work item carrying it. A label is a filter rather than a record of something that happened, so there is nothing here for history to want later.

Scope
projects:labels:remove Admin-issued keys only.

Request bodyapplication/json

Request body of removeLabel

  • idrequired
    Type
    string, uuid
    Description

Response 200Label deleted

Response of removeLabel

  • datarequired
    Type
    object
    Description
  • idrequired
    Type
    string
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record

Example

curl
curl -X POST https://api.rsx.group/projects/v1/labels/remove \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b"
}'
200 response
{
  "data": {
    "id": "string"
  }
}
09

milestones

6 operations under /projects/v1/milestones.

POST/projects/v1/milestones/add

Create a milestone

Needs the maintainer role. Carries a roadmap bucket like a work item does, because a roadmap entry may reference either.

Scope
projects:milestones:add Admin-issued keys only.
Idempotency
Requires an Idempotency-Key header. Reusing the key within 24 hours returns the original response instead of creating a second record.

Request bodyapplication/json

Request body of addMilestone

  • projectIdrequired
    Type
    string, uuid
    Description
  • namerequired
    Type
    string
    Description
    1 to 120 characters
  • description
    Type
    string
    Description
    up to 10000 characters
  • status
    Type
    string
    Description
    Defaults to 'planned'.one of "planned", "active", "completed", "cancelled"
  • bucket
    Type
    string
    Description
    Defaults to 'none'.one of "none", "now", "next", "later", "someday"
  • targetAt
    Type
    string, date-time
    Description

Response 200Milestone created

Response of addMilestone

  • datarequired
    Type
    Milestone
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • namerequired
    Type
    string
    Description
  • descriptionrequired
    Type
    string, or null
    Description
  • statusrequired
    Type
    string
    Description
    one of "planned", "active", "completed", "cancelled"
  • bucketrequired
    Type
    string
    Description
    Roadmap placement. 'none' is not on the roadmap.one of "none", "now", "next", "later", "someday"
  • targetAtrequired
    Type
    string, date-time, or null
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/milestones/add \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Idempotency-Key: 5b8f2d1a-0c7e-4b1f-9a6d-3e2f1c0b9a8d" \
  -H "Content-Type: application/json" \
  -d '{
  "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "name": "Container runtime",
  "description": "string",
  "status": "planned",
  "bucket": "next",
  "targetAt": "2026-10-10T12:00:00.000Z"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "name": "Container runtime",
    "description": null,
    "status": "planned",
    "bucket": "next",
    "targetAt": null,
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "archivedAt": null
  }
}
GET/projects/v1/milestones/list

List milestones

Scope
projects:milestones:list Admin-issued keys only.

Query parameters

Query parameters of listMilestones

  • cursor
    Type
    string
    Description
  • limit
    Type
    integer
    Description
    1 to 100 · default 20
  • projectId
    Type
    string, uuid
    Description
  • status
    Type
    string
    Description
    one of "planned", "active", "completed", "cancelled"
  • bucket
    Type
    string
    Description
    Roadmap placement. 'none' is not on the roadmap.one of "none", "now", "next", "later", "someday"
  • archived
    Type
    string
    Description
    one of "exclude", "include", "only" · default "exclude"

Response 200Milestones

Response of listMilestones

  • datarequired
    Type
    array of Milestone
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • namerequired
    Type
    string
    Description
  • descriptionrequired
    Type
    string, or null
    Description
  • statusrequired
    Type
    string
    Description
    one of "planned", "active", "completed", "cancelled"
  • bucketrequired
    Type
    string
    Description
    Roadmap placement. 'none' is not on the roadmap.one of "none", "now", "next", "later", "someday"
  • targetAtrequired
    Type
    string, date-time, or null
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description
  • metarequired
    Type
    ProjectsPageMeta
    Description
  • cursorrequired
    Type
    string, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation

Example

curl
curl "https://api.rsx.group/projects/v1/milestones/list" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "name": "Container runtime",
      "description": null,
      "status": "planned",
      "bucket": "next",
      "targetAt": null,
      "createdAt": "2026-09-08T12:00:00.000Z",
      "updatedAt": "2026-09-08T12:00:00.000Z",
      "archivedAt": null
    }
  ],
  "meta": {
    "cursor": null
  }
}
GET/projects/v1/milestones/get

Fetch one milestone

Scope
projects:milestones:get Admin-issued keys only.

Query parameters

Query parameters of getMilestone

  • idrequired
    Type
    string, uuid
    Description

Response 200Milestone

Response of getMilestone

  • datarequired
    Type
    Milestone
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • namerequired
    Type
    string
    Description
  • descriptionrequired
    Type
    string, or null
    Description
  • statusrequired
    Type
    string
    Description
    one of "planned", "active", "completed", "cancelled"
  • bucketrequired
    Type
    string
    Description
    Roadmap placement. 'none' is not on the roadmap.one of "none", "now", "next", "later", "someday"
  • targetAtrequired
    Type
    string, date-time, or null
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record

Example

curl
curl "https://api.rsx.group/projects/v1/milestones/get?id=0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "name": "Container runtime",
    "description": null,
    "status": "planned",
    "bucket": "next",
    "targetAt": null,
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "archivedAt": null
  }
}
POST/projects/v1/milestones/update

Update a milestone

Needs the maintainer role. An omitted field is left alone.

Scope
projects:milestones:update Admin-issued keys only.

Request bodyapplication/json

Request body of updateMilestone

  • idrequired
    Type
    string, uuid
    Description
  • name
    Type
    string
    Description
    1 to 120 characters
  • description
    Type
    string
    Description
    up to 10000 characters
  • status
    Type
    string
    Description
    one of "planned", "active", "completed", "cancelled"
  • bucket
    Type
    string
    Description
    Roadmap placement. 'none' is not on the roadmap.one of "none", "now", "next", "later", "someday"
  • targetAt
    Type
    string, date-time, or null
    Description

Response 200Milestone updated

Response of updateMilestone

  • datarequired
    Type
    Milestone
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • namerequired
    Type
    string
    Description
  • descriptionrequired
    Type
    string, or null
    Description
  • statusrequired
    Type
    string
    Description
    one of "planned", "active", "completed", "cancelled"
  • bucketrequired
    Type
    string
    Description
    Roadmap placement. 'none' is not on the roadmap.one of "none", "now", "next", "later", "someday"
  • targetAtrequired
    Type
    string, date-time, or null
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/milestones/update \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "name": "string",
  "description": "string",
  "status": "planned",
  "bucket": "next",
  "targetAt": "2026-10-10T12:00:00.000Z"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "name": "Container runtime",
    "description": null,
    "status": "planned",
    "bucket": "next",
    "targetAt": null,
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "archivedAt": null
  }
}
POST/projects/v1/milestones/remove

Archive a milestone

Needs the maintainer role. The work in it is detached rather than archived with it: a milestone is a grouping, and cascading would quietly archive items somebody is still doing.

Scope
projects:milestones:remove Admin-issued keys only.

Request bodyapplication/json

Request body of removeMilestone

  • idrequired
    Type
    string, uuid
    Description

Response 200Milestone archived

Response of removeMilestone

  • datarequired
    Type
    Milestone
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • namerequired
    Type
    string
    Description
  • descriptionrequired
    Type
    string, or null
    Description
  • statusrequired
    Type
    string
    Description
    one of "planned", "active", "completed", "cancelled"
  • bucketrequired
    Type
    string
    Description
    Roadmap placement. 'none' is not on the roadmap.one of "none", "now", "next", "later", "someday"
  • targetAtrequired
    Type
    string, date-time, or null
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/milestones/remove \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "name": "Container runtime",
    "description": null,
    "status": "planned",
    "bucket": "next",
    "targetAt": null,
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "archivedAt": null
  }
}
POST/projects/v1/milestones/restore

Restore an archived milestone

Needs the maintainer role, matching what archiving it needed. Restoring something that is not archived succeeds and changes nothing: the caller named a state, and that is the state it is in.

Scope
projects:milestones:restore Admin-issued keys only.

Request bodyapplication/json

Request body of restoreMilestone

  • idrequired
    Type
    string, uuid
    Description

Response 200Milestone restored

Response of restoreMilestone

  • datarequired
    Type
    Milestone
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • namerequired
    Type
    string
    Description
  • descriptionrequired
    Type
    string, or null
    Description
  • statusrequired
    Type
    string
    Description
    one of "planned", "active", "completed", "cancelled"
  • bucketrequired
    Type
    string
    Description
    Roadmap placement. 'none' is not on the roadmap.one of "none", "now", "next", "later", "someday"
  • targetAtrequired
    Type
    string, date-time, or null
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/milestones/restore \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "name": "Container runtime",
    "description": null,
    "status": "planned",
    "bucket": "next",
    "targetAt": null,
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "archivedAt": null
  }
}
10

specifications

7 operations under /projects/v1/specifications.

POST/projects/v1/specifications/add

Create a specification

Needs the contributor role. Created at version 1 with its first revision, written in the same batch. Content is Markdown and is stored and exported as Markdown.

Scope
projects:specifications:add Admin-issued keys only.
Idempotency
Requires an Idempotency-Key header. Reusing the key within 24 hours returns the original response instead of creating a second record.

Request bodyapplication/json

Request body of addSpecification

  • projectIdrequired
    Type
    string, uuid
    Description
  • titlerequired
    Type
    string
    Description
    1 to 200 characters
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • contentrequired
    Type
    string
    Description
    up to 500000 characters
  • status
    Type
    string
    Description
    Defaults to 'draft'.one of "draft", "review", "approved", "implemented", "superseded"
  • summary
    Type
    string
    Description
    Recorded on revision 1.up to 500 characters

Response 200Specification created

Response of addSpecification

  • datarequired
    Type
    Specification
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • titlerequired
    Type
    string
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • statusrequired
    Type
    string
    Description
    one of "draft", "review", "approved", "implemented", "superseded"
  • versionrequired
    Type
    integer
    Description
    more than 0
  • contentrequired
    Type
    string
    Description
  • creatorIdrequired
    Type
    string
    Description
  • creatorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • supersededAtrequired
    Type
    string, date-time, or null
    Description
  • supersededByrequired
    Type
    string, uuid, or null
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/specifications/add \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Idempotency-Key: 5b8f2d1a-0c7e-4b1f-9a6d-3e2f1c0b9a8d" \
  -H "Content-Type: application/json" \
  -d '{
  "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "title": "Container Applications",
  "slug": "rsx-node",
  "content": "# Container Applications\n\n...",
  "status": "draft",
  "summary": "string"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "title": "Container Applications",
    "slug": "rsx-node",
    "status": "draft",
    "version": 3,
    "content": "# Container Applications\n\n...",
    "creatorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "creatorType": "account",
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "supersededAt": null,
    "supersededBy": null,
    "archivedAt": null
  }
}
GET/projects/v1/specifications/list

List specifications

Scope
projects:specifications:list Admin-issued keys only.

Query parameters

Query parameters of listSpecifications

  • cursor
    Type
    string
    Description
  • limit
    Type
    integer
    Description
    1 to 100 · default 20
  • projectId
    Type
    string, uuid
    Description
  • status
    Type
    string
    Description
    one of "draft", "review", "approved", "implemented", "superseded"
  • archived
    Type
    string
    Description
    one of "exclude", "include", "only" · default "exclude"

Response 200Specifications

Response of listSpecifications

  • datarequired
    Type
    array of Specification
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • titlerequired
    Type
    string
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • statusrequired
    Type
    string
    Description
    one of "draft", "review", "approved", "implemented", "superseded"
  • versionrequired
    Type
    integer
    Description
    more than 0
  • contentrequired
    Type
    string
    Description
  • creatorIdrequired
    Type
    string
    Description
  • creatorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • supersededAtrequired
    Type
    string, date-time, or null
    Description
  • supersededByrequired
    Type
    string, uuid, or null
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description
  • metarequired
    Type
    ProjectsPageMeta
    Description
  • cursorrequired
    Type
    string, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation

Example

curl
curl "https://api.rsx.group/projects/v1/specifications/list" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "title": "Container Applications",
      "slug": "rsx-node",
      "status": "draft",
      "version": 3,
      "content": "# Container Applications\n\n...",
      "creatorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
      "creatorType": "account",
      "createdAt": "2026-09-08T12:00:00.000Z",
      "updatedAt": "2026-09-08T12:00:00.000Z",
      "supersededAt": null,
      "supersededBy": null,
      "archivedAt": null
    }
  ],
  "meta": {
    "cursor": null
  }
}
GET/projects/v1/specifications/get

Fetch one specification

By id, or by the project and slug pair a link carries.

Scope
projects:specifications:get Admin-issued keys only.

Query parameters

Query parameters of getSpecification

  • id
    Type
    string, uuid
    Description
  • projectId
    Type
    string, uuid
    Description
  • slug
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$

Response 200Specification

Response of getSpecification

  • datarequired
    Type
    Specification
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • titlerequired
    Type
    string
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • statusrequired
    Type
    string
    Description
    one of "draft", "review", "approved", "implemented", "superseded"
  • versionrequired
    Type
    integer
    Description
    more than 0
  • contentrequired
    Type
    string
    Description
  • creatorIdrequired
    Type
    string
    Description
  • creatorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • supersededAtrequired
    Type
    string, date-time, or null
    Description
  • supersededByrequired
    Type
    string, uuid, or null
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record

Example

curl
curl "https://api.rsx.group/projects/v1/specifications/get" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "title": "Container Applications",
    "slug": "rsx-node",
    "status": "draft",
    "version": 3,
    "content": "# Container Applications\n\n...",
    "creatorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "creatorType": "account",
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "supersededAt": null,
    "supersededBy": null,
    "archivedAt": null
  }
}
POST/projects/v1/specifications/update

Save a specification

Needs the contributor role, and the maintainer role to change the lifecycle status. Every save that changes the title, the content or the status writes a revision and bumps the version; a save that changes nothing writes neither.

Scope
projects:specifications:update Admin-issued keys only.

Request bodyapplication/json

Request body of updateSpecification

  • idrequired
    Type
    string, uuid
    Description
  • title
    Type
    string
    Description
    1 to 200 characters
  • content
    Type
    string
    Description
    up to 500000 characters
  • status
    Type
    string
    Description
    Use specifications/supersede to retire one.one of "draft", "review", "approved", "implemented"
  • summary
    Type
    string
    Description
    What changed, recorded on the revision this save creates.up to 500 characters

Response 200Specification saved

Response of updateSpecification

  • datarequired
    Type
    Specification
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • titlerequired
    Type
    string
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • statusrequired
    Type
    string
    Description
    one of "draft", "review", "approved", "implemented", "superseded"
  • versionrequired
    Type
    integer
    Description
    more than 0
  • contentrequired
    Type
    string
    Description
  • creatorIdrequired
    Type
    string
    Description
  • creatorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • supersededAtrequired
    Type
    string, date-time, or null
    Description
  • supersededByrequired
    Type
    string, uuid, or null
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/specifications/update \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "title": "string",
  "content": "string",
  "status": "draft",
  "summary": "string"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "title": "Container Applications",
    "slug": "rsx-node",
    "status": "draft",
    "version": 3,
    "content": "# Container Applications\n\n...",
    "creatorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "creatorType": "account",
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "supersededAt": null,
    "supersededBy": null,
    "archivedAt": null
  }
}
POST/projects/v1/specifications/supersede

Retire a specification in favour of another

Needs the maintainer role. Its own action rather than a status on update, because a specification is superseded by something: a bare status change would leave a dead end nobody can follow. Both must be in the same project. The retired one's content freezes and its history stays readable.

Scope
projects:specifications:supersede Admin-issued keys only.

Request bodyapplication/json

Request body of supersedeSpecification

  • idrequired
    Type
    string, uuid
    Description
  • supersededByrequired
    Type
    string, uuid
    Description
  • summary
    Type
    string
    Description
    up to 500 characters

Response 200Specification superseded

Response of supersedeSpecification

  • datarequired
    Type
    Specification
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • titlerequired
    Type
    string
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • statusrequired
    Type
    string
    Description
    one of "draft", "review", "approved", "implemented", "superseded"
  • versionrequired
    Type
    integer
    Description
    more than 0
  • contentrequired
    Type
    string
    Description
  • creatorIdrequired
    Type
    string
    Description
  • creatorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • supersededAtrequired
    Type
    string, date-time, or null
    Description
  • supersededByrequired
    Type
    string, uuid, or null
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this
  • 422Well-formed, but not a thing that can exist

Example

curl
curl -X POST https://api.rsx.group/projects/v1/specifications/supersede \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "supersededBy": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "summary": "string"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "title": "Container Applications",
    "slug": "rsx-node",
    "status": "draft",
    "version": 3,
    "content": "# Container Applications\n\n...",
    "creatorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "creatorType": "account",
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "supersededAt": null,
    "supersededBy": null,
    "archivedAt": null
  }
}
POST/projects/v1/specifications/remove

Archive a specification

Needs the maintainer role. Archives rather than deletes, so links to it keep resolving and its revision history stays readable.

Scope
projects:specifications:remove Admin-issued keys only.

Request bodyapplication/json

Request body of removeSpecification

  • idrequired
    Type
    string, uuid
    Description

Response 200Specification archived

Response of removeSpecification

  • datarequired
    Type
    Specification
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • titlerequired
    Type
    string
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • statusrequired
    Type
    string
    Description
    one of "draft", "review", "approved", "implemented", "superseded"
  • versionrequired
    Type
    integer
    Description
    more than 0
  • contentrequired
    Type
    string
    Description
  • creatorIdrequired
    Type
    string
    Description
  • creatorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • supersededAtrequired
    Type
    string, date-time, or null
    Description
  • supersededByrequired
    Type
    string, uuid, or null
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/specifications/remove \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "title": "Container Applications",
    "slug": "rsx-node",
    "status": "draft",
    "version": 3,
    "content": "# Container Applications\n\n...",
    "creatorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "creatorType": "account",
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "supersededAt": null,
    "supersededBy": null,
    "archivedAt": null
  }
}
POST/projects/v1/specifications/restore

Restore an archived specification

Needs the maintainer role, matching what archiving it needed. Restoring something that is not archived succeeds and changes nothing: the caller named a state, and that is the state it is in.

Scope
projects:specifications:restore Admin-issued keys only.

Request bodyapplication/json

Request body of restoreSpecification

  • idrequired
    Type
    string, uuid
    Description

Response 200Specification restored

Response of restoreSpecification

  • datarequired
    Type
    Specification
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • titlerequired
    Type
    string
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • statusrequired
    Type
    string
    Description
    one of "draft", "review", "approved", "implemented", "superseded"
  • versionrequired
    Type
    integer
    Description
    more than 0
  • contentrequired
    Type
    string
    Description
  • creatorIdrequired
    Type
    string
    Description
  • creatorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • supersededAtrequired
    Type
    string, date-time, or null
    Description
  • supersededByrequired
    Type
    string, uuid, or null
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/specifications/restore \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "title": "Container Applications",
    "slug": "rsx-node",
    "status": "draft",
    "version": 3,
    "content": "# Container Applications\n\n...",
    "creatorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "creatorType": "account",
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "supersededAt": null,
    "supersededBy": null,
    "archivedAt": null
  }
}
11

revisions

2 operations under /projects/v1/revisions.

GET/projects/v1/revisions/list

List a specification's revisions

Newest version first. Each revision carries the full title, content and lifecycle state as they were, so any two can be compared without reconstructing a chain of diffs.

Scope
projects:revisions:list Admin-issued keys only.

Query parameters

Query parameters of listRevisions

  • cursor
    Type
    string
    Description
  • limit
    Type
    integer
    Description
    1 to 100 · default 20
  • specificationIdrequired
    Type
    string, uuid
    Description

Response 200Revisions

Response of listRevisions

  • datarequired
    Type
    array of SpecificationRevision
    Description
  • idrequired
    Type
    string, uuid
    Description
  • specificationIdrequired
    Type
    string, uuid
    Description
  • versionrequired
    Type
    integer
    Description
    more than 0
  • titlerequired
    Type
    string
    Description
  • contentrequired
    Type
    string
    Description
  • statusrequired
    Type
    string
    Description
    one of "draft", "review", "approved", "implemented", "superseded"
  • summaryrequired
    Type
    string, or null
    Description
  • authorIdrequired
    Type
    string
    Description
  • authorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • createdAtrequired
    Type
    string, date-time
    Description
  • metarequired
    Type
    ProjectsPageMeta
    Description
  • cursorrequired
    Type
    string, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record

Example

curl
curl "https://api.rsx.group/projects/v1/revisions/list?specificationId=0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "specificationId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "version": 2,
      "title": "Container Applications",
      "content": "string",
      "status": "draft",
      "summary": "Added the storage section.",
      "authorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
      "authorType": "account",
      "createdAt": "2026-09-08T12:00:00.000Z"
    }
  ],
  "meta": {
    "cursor": null
  }
}
GET/projects/v1/revisions/get

Fetch one revision

The specification exactly as it was at that version.

Scope
projects:revisions:get Admin-issued keys only.

Query parameters

Query parameters of getRevision

  • specificationIdrequired
    Type
    string, uuid
    Description
  • versionrequired
    Type
    integer
    Description
    more than 0

Response 200Revision

Response of getRevision

  • datarequired
    Type
    SpecificationRevision
    Description
  • idrequired
    Type
    string, uuid
    Description
  • specificationIdrequired
    Type
    string, uuid
    Description
  • versionrequired
    Type
    integer
    Description
    more than 0
  • titlerequired
    Type
    string
    Description
  • contentrequired
    Type
    string
    Description
  • statusrequired
    Type
    string
    Description
    one of "draft", "review", "approved", "implemented", "superseded"
  • summaryrequired
    Type
    string, or null
    Description
  • authorIdrequired
    Type
    string
    Description
  • authorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • createdAtrequired
    Type
    string, date-time
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record

Example

curl
curl "https://api.rsx.group/projects/v1/revisions/get?specificationId=0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b&version=2" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "specificationId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "version": 2,
    "title": "Container Applications",
    "content": "string",
    "status": "draft",
    "summary": "Added the storage section.",
    "authorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "authorType": "account",
    "createdAt": "2026-09-08T12:00:00.000Z"
  }
}
12

documents

8 operations under /projects/v1/documents.

POST/projects/v1/documents/add

Create a document

Needs the contributor role. Created at version 1 with its first revision, written in the same batch. Content is Markdown and is stored and exported as Markdown. collection, section and position place the document on docs.rsx.group once it is published; they mean something only in the built-in docs project.

Scope
projects:documents:add Admin-issued keys only.
Idempotency
Requires an Idempotency-Key header. Reusing the key within 24 hours returns the original response instead of creating a second record.

Request bodyapplication/json

Request body of addDocument

  • projectIdrequired
    Type
    string, uuid
    Description
  • titlerequired
    Type
    string
    Description
    1 to 200 characters
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • typerequired
    Type
    string
    Description
    one of "rfc", "runbook", "note", "design"
  • contentrequired
    Type
    string
    Description
    up to 500000 characters
  • summary
    Type
    string
    Description
    One line, for registers and navigation. Not the first paragraph.up to 300 characters
  • collection
    Type
    string
    Description
    Where a published page appears on docs.rsx.group. Read only for documents in the built-in docs project; recorded and ignored elsewhere.one of "guides", "products", "support"
  • section
    Type
    string
    Description
    A group within the collection, by exact name. A product's documentation uses the product's name.1 to 80 characters
  • position
    Type
    integer
    Description
    Order within the section, lowest first. Ties fall back to the title.0 to 10000

Response 200Document created

Response of addDocument

  • datarequired
    Type
    Document
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • titlerequired
    Type
    string
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • typerequired
    Type
    string
    Description
    one of "rfc", "runbook", "note", "design"
  • summaryrequired
    Type
    string, or null
    Description
  • contentrequired
    Type
    string
    Description
  • versionrequired
    Type
    integer
    Description
    more than 0
  • collectionrequired
    Type
    string, or null
    Description
    Where a published page appears on docs.rsx.group. Read only for documents in the built-in docs project; recorded and ignored elsewhere.one of "guides", "products", "support"
  • sectionrequired
    Type
    string, or null
    Description
  • positionrequired
    Type
    integer
    Description
  • publishedVersionrequired
    Type
    integer, or null
    Description
    more than 0
  • publishedAtrequired
    Type
    string, date-time, or null
    Description
  • creatorIdrequired
    Type
    string
    Description
  • creatorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/documents/add \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Idempotency-Key: 5b8f2d1a-0c7e-4b1f-9a6d-3e2f1c0b9a8d" \
  -H "Content-Type: application/json" \
  -d '{
  "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "title": "Restoring a node",
  "slug": "rsx-node",
  "type": "runbook",
  "content": "string",
  "summary": "Auth, rate limits, errors, idempotency and pagination, once.",
  "collection": "guides",
  "section": "RSX Node",
  "position": 10
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "title": "Restoring a node",
    "slug": "rsx-node",
    "type": "runbook",
    "summary": null,
    "content": "string",
    "version": 3,
    "collection": null,
    "section": null,
    "position": 0,
    "publishedVersion": null,
    "publishedAt": null,
    "creatorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "creatorType": "account",
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "archivedAt": null
  }
}
GET/projects/v1/documents/list

List documents

Scope
projects:documents:list Admin-issued keys only.

Query parameters

Query parameters of listDocuments

  • cursor
    Type
    string
    Description
  • limit
    Type
    integer
    Description
    1 to 100 · default 20
  • projectId
    Type
    string, uuid
    Description
  • type
    Type
    string
    Description
    one of "rfc", "runbook", "note", "design"
  • collection
    Type
    string
    Description
    Where a published page appears on docs.rsx.group. Read only for documents in the built-in docs project; recorded and ignored elsewhere.one of "guides", "products", "support"
  • published
    Type
    string
    Description
    'yes' lists documents with a published revision, 'no' the rest.one of "any", "yes", "no" · default "any"
  • archived
    Type
    string
    Description
    one of "exclude", "include", "only" · default "exclude"

Response 200Documents

Response of listDocuments

  • datarequired
    Type
    array of Document
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • titlerequired
    Type
    string
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • typerequired
    Type
    string
    Description
    one of "rfc", "runbook", "note", "design"
  • summaryrequired
    Type
    string, or null
    Description
  • contentrequired
    Type
    string
    Description
  • versionrequired
    Type
    integer
    Description
    more than 0
  • collectionrequired
    Type
    string, or null
    Description
    Where a published page appears on docs.rsx.group. Read only for documents in the built-in docs project; recorded and ignored elsewhere.one of "guides", "products", "support"
  • sectionrequired
    Type
    string, or null
    Description
  • positionrequired
    Type
    integer
    Description
  • publishedVersionrequired
    Type
    integer, or null
    Description
    more than 0
  • publishedAtrequired
    Type
    string, date-time, or null
    Description
  • creatorIdrequired
    Type
    string
    Description
  • creatorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description
  • metarequired
    Type
    ProjectsPageMeta
    Description
  • cursorrequired
    Type
    string, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation

Example

curl
curl "https://api.rsx.group/projects/v1/documents/list" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "title": "Restoring a node",
      "slug": "rsx-node",
      "type": "runbook",
      "summary": null,
      "content": "string",
      "version": 3,
      "collection": null,
      "section": null,
      "position": 0,
      "publishedVersion": null,
      "publishedAt": null,
      "creatorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
      "creatorType": "account",
      "createdAt": "2026-09-08T12:00:00.000Z",
      "updatedAt": "2026-09-08T12:00:00.000Z",
      "archivedAt": null
    }
  ],
  "meta": {
    "cursor": null
  }
}
GET/projects/v1/documents/get

Fetch one document

By id, or by the project and slug pair a link carries. The working head; the published text is the revision publishedVersion names.

Scope
projects:documents:get Admin-issued keys only.

Query parameters

Query parameters of getDocument

  • id
    Type
    string, uuid
    Description
  • projectId
    Type
    string, uuid
    Description
  • slug
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$

Response 200Document

Response of getDocument

  • datarequired
    Type
    Document
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • titlerequired
    Type
    string
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • typerequired
    Type
    string
    Description
    one of "rfc", "runbook", "note", "design"
  • summaryrequired
    Type
    string, or null
    Description
  • contentrequired
    Type
    string
    Description
  • versionrequired
    Type
    integer
    Description
    more than 0
  • collectionrequired
    Type
    string, or null
    Description
    Where a published page appears on docs.rsx.group. Read only for documents in the built-in docs project; recorded and ignored elsewhere.one of "guides", "products", "support"
  • sectionrequired
    Type
    string, or null
    Description
  • positionrequired
    Type
    integer
    Description
  • publishedVersionrequired
    Type
    integer, or null
    Description
    more than 0
  • publishedAtrequired
    Type
    string, date-time, or null
    Description
  • creatorIdrequired
    Type
    string
    Description
  • creatorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record

Example

curl
curl "https://api.rsx.group/projects/v1/documents/get" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "title": "Restoring a node",
    "slug": "rsx-node",
    "type": "runbook",
    "summary": null,
    "content": "string",
    "version": 3,
    "collection": null,
    "section": null,
    "position": 0,
    "publishedVersion": null,
    "publishedAt": null,
    "creatorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "creatorType": "account",
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "archivedAt": null
  }
}
POST/projects/v1/documents/update

Update a document

Needs the contributor role. An omitted field is left alone. A change to title, summary or content writes a new revision (with note, if given) and bumps version; a change to type, collection, section or position moves the document without writing one. Nothing here changes what is published.

Scope
projects:documents:update Admin-issued keys only.

Request bodyapplication/json

Request body of updateDocument

  • idrequired
    Type
    string, uuid
    Description
  • title
    Type
    string
    Description
    1 to 200 characters
  • type
    Type
    string
    Description
    one of "rfc", "runbook", "note", "design"
  • content
    Type
    string
    Description
    up to 500000 characters
  • summary
    Type
    string, or null
    Description
    One line, for registers and navigation. Not the first paragraph.up to 300 characters
  • collection
    Type
    string, or null
    Description
    Where a published page appears on docs.rsx.group. Read only for documents in the built-in docs project; recorded and ignored elsewhere.one of "guides", "products", "support"
  • section
    Type
    string, or null
    Description
    A group within the collection, by exact name. A product's documentation uses the product's name.1 to 80 characters
  • position
    Type
    integer
    Description
    Order within the section, lowest first. Ties fall back to the title.0 to 10000
  • note
    Type
    string
    Description
    What changed, in the author's words. Stored on the revision.up to 300 characters

Response 200Document updated

Response of updateDocument

  • datarequired
    Type
    Document
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • titlerequired
    Type
    string
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • typerequired
    Type
    string
    Description
    one of "rfc", "runbook", "note", "design"
  • summaryrequired
    Type
    string, or null
    Description
  • contentrequired
    Type
    string
    Description
  • versionrequired
    Type
    integer
    Description
    more than 0
  • collectionrequired
    Type
    string, or null
    Description
    Where a published page appears on docs.rsx.group. Read only for documents in the built-in docs project; recorded and ignored elsewhere.one of "guides", "products", "support"
  • sectionrequired
    Type
    string, or null
    Description
  • positionrequired
    Type
    integer
    Description
  • publishedVersionrequired
    Type
    integer, or null
    Description
    more than 0
  • publishedAtrequired
    Type
    string, date-time, or null
    Description
  • creatorIdrequired
    Type
    string
    Description
  • creatorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/documents/update \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "title": "string",
  "type": "runbook",
  "content": "string",
  "summary": "Auth, rate limits, errors, idempotency and pagination, once.",
  "collection": "guides",
  "section": "RSX Node",
  "position": 10,
  "note": "Corrected the rate-limit figures."
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "title": "Restoring a node",
    "slug": "rsx-node",
    "type": "runbook",
    "summary": null,
    "content": "string",
    "version": 3,
    "collection": null,
    "section": null,
    "position": 0,
    "publishedVersion": null,
    "publishedAt": null,
    "creatorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "creatorType": "account",
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "archivedAt": null
  }
}
POST/projects/v1/documents/remove

Archive a document

Needs the contributor role. Archives rather than deletes, and takes the document off docs.rsx.group if it was published: an archived page must leave the site. Restoring it does not republish it.

Scope
projects:documents:remove Admin-issued keys only.

Request bodyapplication/json

Request body of removeDocument

  • idrequired
    Type
    string, uuid
    Description

Response 200Document archived

Response of removeDocument

  • datarequired
    Type
    Document
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • titlerequired
    Type
    string
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • typerequired
    Type
    string
    Description
    one of "rfc", "runbook", "note", "design"
  • summaryrequired
    Type
    string, or null
    Description
  • contentrequired
    Type
    string
    Description
  • versionrequired
    Type
    integer
    Description
    more than 0
  • collectionrequired
    Type
    string, or null
    Description
    Where a published page appears on docs.rsx.group. Read only for documents in the built-in docs project; recorded and ignored elsewhere.one of "guides", "products", "support"
  • sectionrequired
    Type
    string, or null
    Description
  • positionrequired
    Type
    integer
    Description
  • publishedVersionrequired
    Type
    integer, or null
    Description
    more than 0
  • publishedAtrequired
    Type
    string, date-time, or null
    Description
  • creatorIdrequired
    Type
    string
    Description
  • creatorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/documents/remove \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "title": "Restoring a node",
    "slug": "rsx-node",
    "type": "runbook",
    "summary": null,
    "content": "string",
    "version": 3,
    "collection": null,
    "section": null,
    "position": 0,
    "publishedVersion": null,
    "publishedAt": null,
    "creatorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "creatorType": "account",
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "archivedAt": null
  }
}
POST/projects/v1/documents/publish

Publish a document

Needs the maintainer role. Names the revision docs.rsx.group shows: the head when version is omitted, or an earlier revision, which is how a bad edit is undone. Changes no content. A document reaches the site only from the built-in docs project and only with a collection; publishing elsewhere records the intent and shows nothing.

Scope
projects:documents:publish Admin-issued keys only.

Request bodyapplication/json

Request body of publishDocument

  • idrequired
    Type
    string, uuid
    Description
  • version
    Type
    integer
    Description
    The revision to publish. Omitted means the current head.more than 0

Response 200Document published

Response of publishDocument

  • datarequired
    Type
    Document
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • titlerequired
    Type
    string
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • typerequired
    Type
    string
    Description
    one of "rfc", "runbook", "note", "design"
  • summaryrequired
    Type
    string, or null
    Description
  • contentrequired
    Type
    string
    Description
  • versionrequired
    Type
    integer
    Description
    more than 0
  • collectionrequired
    Type
    string, or null
    Description
    Where a published page appears on docs.rsx.group. Read only for documents in the built-in docs project; recorded and ignored elsewhere.one of "guides", "products", "support"
  • sectionrequired
    Type
    string, or null
    Description
  • positionrequired
    Type
    integer
    Description
  • publishedVersionrequired
    Type
    integer, or null
    Description
    more than 0
  • publishedAtrequired
    Type
    string, date-time, or null
    Description
  • creatorIdrequired
    Type
    string
    Description
  • creatorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/documents/publish \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "version": 2
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "title": "Restoring a node",
    "slug": "rsx-node",
    "type": "runbook",
    "summary": null,
    "content": "string",
    "version": 3,
    "collection": null,
    "section": null,
    "position": 0,
    "publishedVersion": null,
    "publishedAt": null,
    "creatorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "creatorType": "account",
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "archivedAt": null
  }
}
POST/projects/v1/documents/unpublish

Take a document off the site

Needs the maintainer role. Clears the published revision; the document and its history stay. Unpublishing something that is not published succeeds and changes nothing.

Scope
projects:documents:unpublish Admin-issued keys only.

Request bodyapplication/json

Request body of unpublishDocument

  • idrequired
    Type
    string, uuid
    Description

Response 200Document unpublished

Response of unpublishDocument

  • datarequired
    Type
    Document
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • titlerequired
    Type
    string
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • typerequired
    Type
    string
    Description
    one of "rfc", "runbook", "note", "design"
  • summaryrequired
    Type
    string, or null
    Description
  • contentrequired
    Type
    string
    Description
  • versionrequired
    Type
    integer
    Description
    more than 0
  • collectionrequired
    Type
    string, or null
    Description
    Where a published page appears on docs.rsx.group. Read only for documents in the built-in docs project; recorded and ignored elsewhere.one of "guides", "products", "support"
  • sectionrequired
    Type
    string, or null
    Description
  • positionrequired
    Type
    integer
    Description
  • publishedVersionrequired
    Type
    integer, or null
    Description
    more than 0
  • publishedAtrequired
    Type
    string, date-time, or null
    Description
  • creatorIdrequired
    Type
    string
    Description
  • creatorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/documents/unpublish \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "title": "Restoring a node",
    "slug": "rsx-node",
    "type": "runbook",
    "summary": null,
    "content": "string",
    "version": 3,
    "collection": null,
    "section": null,
    "position": 0,
    "publishedVersion": null,
    "publishedAt": null,
    "creatorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "creatorType": "account",
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "archivedAt": null
  }
}
POST/projects/v1/documents/restore

Restore an archived document

Needs the contributor role, matching what archiving it needed. Restoring something that is not archived succeeds and changes nothing: the caller named a state, and that is the state it is in.

Scope
projects:documents:restore Admin-issued keys only.

Request bodyapplication/json

Request body of restoreDocument

  • idrequired
    Type
    string, uuid
    Description

Response 200Document restored

Response of restoreDocument

  • datarequired
    Type
    Document
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • titlerequired
    Type
    string
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • typerequired
    Type
    string
    Description
    one of "rfc", "runbook", "note", "design"
  • summaryrequired
    Type
    string, or null
    Description
  • contentrequired
    Type
    string
    Description
  • versionrequired
    Type
    integer
    Description
    more than 0
  • collectionrequired
    Type
    string, or null
    Description
    Where a published page appears on docs.rsx.group. Read only for documents in the built-in docs project; recorded and ignored elsewhere.one of "guides", "products", "support"
  • sectionrequired
    Type
    string, or null
    Description
  • positionrequired
    Type
    integer
    Description
  • publishedVersionrequired
    Type
    integer, or null
    Description
    more than 0
  • publishedAtrequired
    Type
    string, date-time, or null
    Description
  • creatorIdrequired
    Type
    string
    Description
  • creatorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/documents/restore \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "title": "Restoring a node",
    "slug": "rsx-node",
    "type": "runbook",
    "summary": null,
    "content": "string",
    "version": 3,
    "collection": null,
    "section": null,
    "position": 0,
    "publishedVersion": null,
    "publishedAt": null,
    "creatorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "creatorType": "account",
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "archivedAt": null
  }
}
13

document-revisions

2 operations under /projects/v1/document-revisions.

GET/projects/v1/document-revisions/list

List a document's revisions

Newest first. Every version that has ever existed; nothing deletes one.

Scope
projects:document-revisions:list Admin-issued keys only.

Query parameters

Query parameters of listDocumentRevisions

  • cursor
    Type
    string
    Description
  • limit
    Type
    integer
    Description
    1 to 100 · default 20
  • documentIdrequired
    Type
    string, uuid
    Description

Response 200Revisions

Response of listDocumentRevisions

  • datarequired
    Type
    array of DocumentRevision
    Description
  • idrequired
    Type
    string, uuid
    Description
  • documentIdrequired
    Type
    string, uuid
    Description
  • versionrequired
    Type
    integer
    Description
    more than 0
  • titlerequired
    Type
    string
    Description
  • summaryrequired
    Type
    string, or null
    Description
  • contentrequired
    Type
    string
    Description
  • noterequired
    Type
    string, or null
    Description
  • authorIdrequired
    Type
    string
    Description
  • authorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • createdAtrequired
    Type
    string, date-time
    Description
  • metarequired
    Type
    ProjectsPageMeta
    Description
  • cursorrequired
    Type
    string, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record

Example

curl
curl "https://api.rsx.group/projects/v1/document-revisions/list?documentId=0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "documentId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "version": 2,
      "title": "Restoring a node",
      "summary": null,
      "content": "string",
      "note": "Corrected the rate-limit figures.",
      "authorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
      "authorType": "account",
      "createdAt": "2026-09-08T12:00:00.000Z"
    }
  ],
  "meta": {
    "cursor": null
  }
}
GET/projects/v1/document-revisions/get

Fetch one revision of a document

Scope
projects:document-revisions:get Admin-issued keys only.

Query parameters

Query parameters of getDocumentRevision

  • documentIdrequired
    Type
    string, uuid
    Description
  • versionrequired
    Type
    integer
    Description
    more than 0

Response 200Revision

Response of getDocumentRevision

  • datarequired
    Type
    DocumentRevision
    Description
  • idrequired
    Type
    string, uuid
    Description
  • documentIdrequired
    Type
    string, uuid
    Description
  • versionrequired
    Type
    integer
    Description
    more than 0
  • titlerequired
    Type
    string
    Description
  • summaryrequired
    Type
    string, or null
    Description
  • contentrequired
    Type
    string
    Description
  • noterequired
    Type
    string, or null
    Description
  • authorIdrequired
    Type
    string
    Description
  • authorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • createdAtrequired
    Type
    string, date-time
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record

Example

curl
curl "https://api.rsx.group/projects/v1/document-revisions/get?documentId=0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b&version=2" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "documentId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "version": 2,
    "title": "Restoring a node",
    "summary": null,
    "content": "string",
    "note": "Corrected the rate-limit figures.",
    "authorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "authorType": "account",
    "createdAt": "2026-09-08T12:00:00.000Z"
  }
}
14

comments

5 operations under /projects/v1/comments.

POST/projects/v1/comments/add

Comment on a work item, specification or document

Needs the contributor role on the target's project. Specifications are commentable because they are the point: review discussion belongs on the thing being argued about, not on a work item that links to it.

Scope
projects:comments:add Admin-issued keys only.
Idempotency
Requires an Idempotency-Key header. Reusing the key within 24 hours returns the original response instead of creating a second record.

Request bodyapplication/json

Request body of addComment

  • entityTyperequired
    Type
    string
    Description
    one of "work", "specification", "document"
  • entityIdrequired
    Type
    string, uuid
    Description
  • contentrequired
    Type
    string
    Description
    1 to 50000 characters

Response 200Comment added

Response of addComment

  • datarequired
    Type
    Comment
    Description
  • idrequired
    Type
    string, uuid
    Description
  • entityTyperequired
    Type
    string
    Description
    one of "work", "specification", "document"
  • entityIdrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • authorIdrequired
    Type
    string
    Description
  • authorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • contentrequired
    Type
    string
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • deletedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/comments/add \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Idempotency-Key: 5b8f2d1a-0c7e-4b1f-9a6d-3e2f1c0b9a8d" \
  -H "Content-Type: application/json" \
  -d '{
  "entityType": "specification",
  "entityId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "content": "string"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "entityType": "specification",
    "entityId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "authorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "authorType": "account",
    "content": "This needs a section on rollback.",
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "deletedAt": null
  }
}
GET/projects/v1/comments/list

Read a thread

Oldest first, which is the opposite of every other list here and deliberate: a conversation reads forwards. Deleted comments keep their place with an empty body unless excluded.

Scope
projects:comments:list Admin-issued keys only.

Query parameters

Query parameters of listComments

  • cursor
    Type
    string
    Description
  • limit
    Type
    integer
    Description
    1 to 100 · default 20
  • entityTyperequired
    Type
    string
    Description
    one of "work", "specification", "document"
  • entityIdrequired
    Type
    string, uuid
    Description
  • deleted
    Type
    string
    Description
    one of "include", "exclude" · default "include"

Response 200The thread

Response of listComments

  • datarequired
    Type
    array of Comment
    Description
  • idrequired
    Type
    string, uuid
    Description
  • entityTyperequired
    Type
    string
    Description
    one of "work", "specification", "document"
  • entityIdrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • authorIdrequired
    Type
    string
    Description
  • authorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • contentrequired
    Type
    string
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • deletedAtrequired
    Type
    string, date-time, or null
    Description
  • metarequired
    Type
    ProjectsPageMeta
    Description
  • cursorrequired
    Type
    string, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record

Example

curl
curl "https://api.rsx.group/projects/v1/comments/list?entityType=specification&entityId=0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "entityType": "specification",
      "entityId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "authorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
      "authorType": "account",
      "content": "This needs a section on rollback.",
      "createdAt": "2026-09-08T12:00:00.000Z",
      "updatedAt": "2026-09-08T12:00:00.000Z",
      "deletedAt": null
    }
  ],
  "meta": {
    "cursor": null
  }
}
GET/projects/v1/comments/get

Fetch one comment

Scope
projects:comments:get Admin-issued keys only.

Query parameters

Query parameters of getComment

  • idrequired
    Type
    string, uuid
    Description

Response 200Comment

Response of getComment

  • datarequired
    Type
    Comment
    Description
  • idrequired
    Type
    string, uuid
    Description
  • entityTyperequired
    Type
    string
    Description
    one of "work", "specification", "document"
  • entityIdrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • authorIdrequired
    Type
    string
    Description
  • authorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • contentrequired
    Type
    string
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • deletedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record

Example

curl
curl "https://api.rsx.group/projects/v1/comments/get?id=0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "entityType": "specification",
    "entityId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "authorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "authorType": "account",
    "content": "This needs a section on rollback.",
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "deletedAt": null
  }
}
POST/projects/v1/comments/update

Edit a comment

The author, or a maintainer. Only the body is mutable.

Scope
projects:comments:update Admin-issued keys only.

Request bodyapplication/json

Request body of updateComment

  • idrequired
    Type
    string, uuid
    Description
  • contentrequired
    Type
    string
    Description
    1 to 50000 characters

Response 200Comment edited

Response of updateComment

  • datarequired
    Type
    Comment
    Description
  • idrequired
    Type
    string, uuid
    Description
  • entityTyperequired
    Type
    string
    Description
    one of "work", "specification", "document"
  • entityIdrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • authorIdrequired
    Type
    string
    Description
  • authorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • contentrequired
    Type
    string
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • deletedAtrequired
    Type
    string, date-time, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/comments/update \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "content": "string"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "entityType": "specification",
    "entityId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "authorId": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "authorType": "account",
    "content": "This needs a section on rollback.",
    "createdAt": "2026-09-08T12:00:00.000Z",
    "updatedAt": "2026-09-08T12:00:00.000Z",
    "deletedAt": null
  }
}
POST/projects/v1/comments/remove

Delete a comment

The author, or a maintainer. The row stays and the body goes, so a thread does not lose its shape. The text is cleared at rest rather than hidden on read.

Scope
projects:comments:remove Admin-issued keys only.

Request bodyapplication/json

Request body of removeComment

  • idrequired
    Type
    string, uuid
    Description

Response 200Comment deleted

Response of removeComment

  • datarequired
    Type
    object
    Description
  • idrequired
    Type
    string
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/comments/remove \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b"
}'
200 response
{
  "data": {
    "id": "string"
  }
}
15

references

4 operations under /projects/v1/references.

POST/projects/v1/references/add

Link a record to something outside Projects

Needs the contributor role. A GitHub PR, a deployment, a status page, an RSX CDN share link. Nothing here copies the other system's data: the far side stays authoritative for itself. http and https only.

Scope
projects:references:add Admin-issued keys only.
Idempotency
Requires an Idempotency-Key header. Reusing the key within 24 hours returns the original response instead of creating a second record.

Request bodyapplication/json

Request body of addReference

  • entityTyperequired
    Type
    string
    Description
    one of "project", "work", "specification", "document", "milestone"
  • entityIdrequired
    Type
    string, uuid
    Description
  • labelrequired
    Type
    string
    Description
    1 to 200 characters
  • urlrequired
    Type
    string, uri
    Description
    up to 2000 characters

Response 200Reference added

Response of addReference

  • datarequired
    Type
    ExternalReference
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • entityTyperequired
    Type
    string
    Description
    one of "project", "work", "specification", "document", "milestone", "member", "comment"
  • entityIdrequired
    Type
    string, uuid
    Description
  • labelrequired
    Type
    string
    Description
  • urlrequired
    Type
    string, uri
    Description
  • createdByrequired
    Type
    string
    Description
  • createdAtrequired
    Type
    string, date-time
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this

Example

curl
curl -X POST https://api.rsx.group/projects/v1/references/add \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Idempotency-Key: 5b8f2d1a-0c7e-4b1f-9a6d-3e2f1c0b9a8d" \
  -H "Content-Type: application/json" \
  -d '{
  "entityType": "work",
  "entityId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "label": "Pull request #482",
  "url": "https://github.com/rsx/node/pull/482"
}'
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "entityType": "work",
    "entityId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "label": "Pull request #482",
    "url": "https://github.com/rsx/node/pull/482",
    "createdBy": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "createdAt": "2026-09-08T12:00:00.000Z"
  }
}
GET/projects/v1/references/list

List external references

Scope
projects:references:list Admin-issued keys only.

Query parameters

Query parameters of listReferences

  • cursor
    Type
    string
    Description
  • limit
    Type
    integer
    Description
    1 to 100 · default 20
  • projectId
    Type
    string, uuid
    Description
  • entityType
    Type
    string
    Description
    one of "project", "work", "specification", "document", "milestone"
  • entityId
    Type
    string, uuid
    Description

Response 200References

Response of listReferences

  • datarequired
    Type
    array of ExternalReference
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • entityTyperequired
    Type
    string
    Description
    one of "project", "work", "specification", "document", "milestone", "member", "comment"
  • entityIdrequired
    Type
    string, uuid
    Description
  • labelrequired
    Type
    string
    Description
  • urlrequired
    Type
    string, uri
    Description
  • createdByrequired
    Type
    string
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • metarequired
    Type
    ProjectsPageMeta
    Description
  • cursorrequired
    Type
    string, or null
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation

Example

curl
curl "https://api.rsx.group/projects/v1/references/list" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": [
    {
      "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "entityType": "work",
      "entityId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
      "label": "Pull request #482",
      "url": "https://github.com/rsx/node/pull/482",
      "createdBy": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
      "createdAt": "2026-09-08T12:00:00.000Z"
    }
  ],
  "meta": {
    "cursor": null
  }
}
GET/projects/v1/references/get

Fetch one external reference

Scope
projects:references:get Admin-issued keys only.

Query parameters

Query parameters of getReference

  • idrequired
    Type
    string, uuid
    Description

Response 200Reference

Response of getReference

  • datarequired
    Type
    ExternalReference
    Description
  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • entityTyperequired
    Type
    string
    Description
    one of "project", "work", "specification", "document", "milestone", "member", "comment"
  • entityIdrequired
    Type
    string, uuid
    Description
  • labelrequired
    Type
    string
    Description
  • urlrequired
    Type
    string, uri
    Description
  • createdByrequired
    Type
    string
    Description
  • createdAtrequired
    Type
    string, date-time
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record

Example

curl
curl "https://api.rsx.group/projects/v1/references/get?id=0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": {
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "entityType": "work",
    "entityId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "label": "Pull request #482",
    "url": "https://github.com/rsx/node/pull/482",
    "createdBy": "0198f2b1-6c2a-7c9e-9d3a-1e2f3a4b5c6d",
    "createdAt": "2026-09-08T12:00:00.000Z"
  }
}
POST/projects/v1/references/remove

Remove an external reference

Needs the contributor role. A real delete: a reference is a link rather than a record of something that happened, and the thing it points at is unaffected either way.

Scope
projects:references:remove Admin-issued keys only.

Request bodyapplication/json

Request body of removeReference

  • idrequired
    Type
    string, uuid
    Description

Response 200Reference removed

Response of removeReference

  • datarequired
    Type
    object
    Description
  • idrequired
    Type
    string
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record

Example

curl
curl -X POST https://api.rsx.group/projects/v1/references/remove \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b"
}'
200 response
{
  "data": {
    "id": "string"
  }
}
17

export

1 operation under /projects/v1/export.

GET/projects/v1/export/get

Export a record as Markdown

A specification or document exports as front matter plus its content, and re-imports byte-identically. A project exports as an index of its milestones and open work, and a roadmap as the four buckets with the work under each; those two are documents Projects writes about its records rather than documents it stores, so they are readable outside Projects but are not importable.

Scope
projects:export:get Admin-issued keys only.

Query parameters

Query parameters of exportMarkdown

  • kindrequired
    Type
    string
    Description
    project: an index with milestones and open work. specification and document: front matter plus content. roadmap: the four buckets with the work under each.one of "project", "specification", "document", "roadmap"
  • idrequired
    Type
    string, uuid
    Description
  • version
    Type
    integer
    Description
    more than 0

Response 200The exported file

Response of exportMarkdown

  • datarequired
    Type
    ExportResult
    Description
  • filenamerequired
    Type
    string
    Description
  • contentTyperequired
    Type
    string
    Description
    one of "text/markdown"
  • contentrequired
    Type
    string
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record

Example

curl
curl "https://api.rsx.group/projects/v1/export/get?kind=specification&id=0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b" \
  -H "Authorization: Bearer rsx_live_..."
200 response
{
  "data": {
    "filename": "container-applications.md",
    "contentType": "text/markdown",
    "content": "---\ntitle: Container Applications\n---\n\n# ..."
  }
}
18

import

1 operation under /projects/v1/import.

POST/projects/v1/import/add

Import a Markdown file

Needs the contributor role. Creates a real specification or document, never an opaque attachment. Front matter supplies the title, slug, status and type; anything given in the request overrides it, so a file exported from one project can land in another without being edited first.

A file with no front matter is fine as long as a title and slug are supplied here.

Scope
projects:import:add Admin-issued keys only.
Idempotency
Requires an Idempotency-Key header. Reusing the key within 24 hours returns the original response instead of creating a second record.

Request bodyapplication/json

Request body of importMarkdown

  • projectIdrequired
    Type
    string, uuid
    Description
  • kindrequired
    Type
    string
    Description
    one of "specification", "document"
  • contentrequired
    Type
    string
    Description
    1 to 500000 characters
  • title
    Type
    string
    Description
    1 to 200 characters
  • slug
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • status
    Type
    string
    Description
    Specifications only.one of "draft", "review", "approved", "implemented", "superseded"
  • type
    Type
    string
    Description
    Documents only.one of "rfc", "runbook", "note", "design"

Response 200Imported

Response of importMarkdown

  • datarequired
    Type
    ImportResult
    Description
  • kindrequired
    Type
    string
    Description
    one of "specification", "document"
  • idrequired
    Type
    string, uuid
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • titlerequired
    Type
    string
    Description
  • hadFrontMatterrequired
    Type
    boolean
    Description

Errors

Each is an RFC 7807 problem document whose type URL is a page in the error reference.

  • 400The request did not match the endpoint's schema
  • 401Missing credential, or a token this application will not accept
  • 403Admitted to Projects, but not permitted this operation
  • 404No such record
  • 409The record's state does not permit this
  • 422Well-formed, but not a thing that can exist

Example

curl
curl -X POST https://api.rsx.group/projects/v1/import/add \
  -H "Authorization: Bearer rsx_live_..." \
  -H "Idempotency-Key: 5b8f2d1a-0c7e-4b1f-9a6d-3e2f1c0b9a8d" \
  -H "Content-Type: application/json" \
  -d '{
  "projectId": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
  "kind": "specification",
  "content": "string",
  "title": "string",
  "slug": "rsx-node",
  "status": "draft",
  "type": "runbook"
}'
200 response
{
  "data": {
    "kind": "specification",
    "id": "0198f3c4-7d2b-7e1f-8a2b-3c4d5e6f7a8b",
    "slug": "rsx-node",
    "title": "string",
    "hadFrontMatter": true
  }
}
19

Schemas

Every named shape in this reference, as the operations above refer to it.

PurgeResult

PurgeResult

  • idrequired
    Type
    string, uuid
    Description
  • slugrequired
    Type
    string
    Description
  • deletedrequired
    Type
    map of integer
    Description
  • {key}
    Type
    integer
    Description

Problem

Problem

  • typerequired
    Type
    string
    Description
  • titlerequired
    Type
    string
    Description
  • statusrequired
    Type
    integer
    Description
  • detail
    Type
    string
    Description
  • instance
    Type
    string
    Description
  • requestId
    Type
    string
    Description

PurgeProject

PurgeProject

  • idrequired
    Type
    string, uuid
    Description
  • confirmrequired
    Type
    string
    Description

Label

Label

  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid, or null
    Description
  • namerequired
    Type
    string
    Description
  • createdAtrequired
    Type
    string, date-time
    Description

AdminCreateLabel

AdminCreateLabel

  • namerequired
    Type
    string
    Description
    1 to 48 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$

UpdateLabel

UpdateLabel

  • idrequired
    Type
    string, uuid
    Description
  • namerequired
    Type
    string
    Description
    1 to 48 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$

RemoveLabel

RemoveLabel

  • idrequired
    Type
    string, uuid
    Description

ProjectsAdminAuditEvent

ProjectsAdminAuditEvent

  • idrequired
    Type
    string
    Description
  • actorrequired
    Type
    string
    Description
  • actionrequired
    Type
    string
    Description
    one of "project.purged", "label.added", "label.updated", "label.removed"
  • targetTyperequired
    Type
    string
    Description
    one of "project", "label"
  • targetIdrequired
    Type
    string
    Description
  • targetLabelrequired
    Type
    string, or null
    Description
  • atrequired
    Type
    string, date-time
    Description
  • detailrequired
    Type
    string, or null
    Description

PublishedDocument

PublishedDocument

  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • collectionrequired
    Type
    string
    Description
    Where a published page appears on docs.rsx.group. Read only for documents in the built-in docs project; recorded and ignored elsewhere.one of "guides", "products", "support"
  • sectionrequired
    Type
    string, or null
    Description
  • positionrequired
    Type
    integer
    Description
  • titlerequired
    Type
    string
    Description
  • summaryrequired
    Type
    string, or null
    Description
  • contentrequired
    Type
    string
    Description
  • publishedVersionrequired
    Type
    integer
    Description
    more than 0
  • publishedAtrequired
    Type
    string, date-time
    Description
  • revisedAtrequired
    Type
    string, date-time
    Description

Project

Project

  • idrequired
    Type
    string, uuid
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • namerequired
    Type
    string
    Description
  • descriptionrequired
    Type
    string, or null
    Description
  • statusrequired
    Type
    string
    Description
    one of "active", "paused", "completed"
  • ownerIdrequired
    Type
    string, uuid
    Description
    The account answerable for the project. Also holds an 'owner' membership row.
  • builtinrequired
    Type
    boolean
    Description
    A platform project such as 'docs'. Cannot be archived or purged; every staff account may write in it.
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description
    Set when the project is archived. An archived project is read only.

CreateProject

CreateProject

  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • namerequired
    Type
    string
    Description
    1 to 120 characters
  • description
    Type
    string
    Description
    up to 2000 characters
  • status
    Type
    string
    Description
    Defaults to 'active'.one of "active", "paused", "completed"

ProjectsPageMeta

ProjectsPageMeta

  • cursorrequired
    Type
    string, or null
    Description

UpdateProject

UpdateProject

  • idrequired
    Type
    string, uuid
    Description
  • name
    Type
    string
    Description
    1 to 120 characters
  • description
    Type
    string
    Description
    up to 2000 characters
  • status
    Type
    string
    Description
    one of "active", "paused", "completed"

RemoveProject

RemoveProject

  • idrequired
    Type
    string, uuid
    Description

ProjectMember

ProjectMember

  • projectIdrequired
    Type
    string, uuid
    Description
  • accountIdrequired
    Type
    string, uuid
    Description
  • rolerequired
    Type
    string
    Description
    owner: everything, including archiving and changing owners. maintainer: manage members, labels, milestones and lifecycle. contributor: create and edit content. reader: an explicit watcher, granting no writes.one of "owner", "maintainer", "contributor", "reader"
  • createdAtrequired
    Type
    string, date-time
    Description

AddProjectMember

AddProjectMember

  • projectIdrequired
    Type
    string, uuid
    Description
  • accountIdrequired
    Type
    string, uuid
    Description
  • rolerequired
    Type
    string
    Description
    owner: everything, including archiving and changing owners. maintainer: manage members, labels, milestones and lifecycle. contributor: create and edit content. reader: an explicit watcher, granting no writes.one of "owner", "maintainer", "contributor", "reader"

UpdateProjectMember

UpdateProjectMember

  • projectIdrequired
    Type
    string, uuid
    Description
  • accountIdrequired
    Type
    string, uuid
    Description
  • rolerequired
    Type
    string
    Description
    owner: everything, including archiving and changing owners. maintainer: manage members, labels, milestones and lifecycle. contributor: create and edit content. reader: an explicit watcher, granting no writes.one of "owner", "maintainer", "contributor", "reader"

RemoveProjectMember

RemoveProjectMember

  • projectIdrequired
    Type
    string, uuid
    Description
  • accountIdrequired
    Type
    string, uuid
    Description

ProjectActivity

ProjectActivity

  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • actorIdrequired
    Type
    string
    Description
    An RSX account id when actorType is 'account', an API key id when it is 'key'.
  • actorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • entityTyperequired
    Type
    string
    Description
    one of "project", "work", "specification", "document", "milestone", "member", "comment"
  • entityIdrequired
    Type
    string
    Description
  • actionrequired
    Type
    string
    Description
  • metadatarequired
    Type
    map of any, or null
    Description
  • {key}
    Type
    any
    Description
  • createdAtrequired
    Type
    string, date-time
    Description

WorkItem

WorkItem

  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • numberrequired
    Type
    integer
    Description
    more than 0
  • typerequired
    Type
    string
    Description
    one of "task", "bug", "work_order", "idea"
  • titlerequired
    Type
    string
    Description
  • descriptionrequired
    Type
    string, or null
    Description
  • statusrequired
    Type
    string
    Description
    one of "backlog", "planned", "in_progress", "blocked", "review", "done", "cancelled"
  • priorityrequired
    Type
    string
    Description
    Defaults to 'none'. The roadmap bucket expresses urgency.one of "none", "low", "normal", "high", "critical"
  • bucketrequired
    Type
    string
    Description
    Roadmap placement. 'none' is not on the roadmap.one of "none", "now", "next", "later", "someday"
  • creatorIdrequired
    Type
    string
    Description
    An RSX account id when creatorType is 'account', an API key id when it is 'key'.
  • creatorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • assigneeIdsrequired
    Type
    array of string, uuid
    Description
  • labelIdsrequired
    Type
    array of string, uuid
    Description
  • specificationsrequired
    Type
    array of WorkSpecificationLink
    Description
  • specificationIdrequired
    Type
    string, uuid
    Description
  • relationshiprequired
    Type
    string
    Description
    one of "governed_by", "implements", "references"
  • milestoneIdrequired
    Type
    string, uuid, or null
    Description
  • dueAtrequired
    Type
    string, date-time, or null
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • completedAtrequired
    Type
    string, date-time, or null
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

CreateWorkItem

CreateWorkItem

  • projectIdrequired
    Type
    string, uuid
    Description
  • typerequired
    Type
    string
    Description
    one of "task", "bug", "work_order", "idea"
  • titlerequired
    Type
    string
    Description
    1 to 200 characters
  • description
    Type
    string
    Description
    up to 50000 characters
  • status
    Type
    string
    Description
    Defaults to 'backlog'.one of "backlog", "planned", "in_progress", "blocked", "review", "done", "cancelled"
  • priority
    Type
    string
    Description
    Defaults to 'none'.one of "none", "low", "normal", "high", "critical"
  • bucket
    Type
    string
    Description
    Defaults to 'none'.one of "none", "now", "next", "later", "someday"
  • assigneeIds
    Type
    array of string, uuid
    Description
    up to 20 items
  • labelIds
    Type
    array of string, uuid
    Description
    up to 50 items
  • specifications
    Type
    array of WorkSpecificationLink
    Description
    up to 20 items
  • specificationIdrequired
    Type
    string, uuid
    Description
  • relationshiprequired
    Type
    string
    Description
    one of "governed_by", "implements", "references"
  • milestoneId
    Type
    string, uuid
    Description
  • dueAt
    Type
    string, date-time
    Description

UpdateWorkItem

UpdateWorkItem

  • idrequired
    Type
    string, uuid
    Description
  • type
    Type
    string
    Description
    one of "task", "bug", "work_order", "idea"
  • title
    Type
    string
    Description
    1 to 200 characters
  • description
    Type
    string
    Description
    up to 50000 characters
  • status
    Type
    string
    Description
    one of "backlog", "planned", "in_progress", "blocked", "review", "done", "cancelled"
  • priority
    Type
    string
    Description
    Defaults to 'none'. The roadmap bucket expresses urgency.one of "none", "low", "normal", "high", "critical"
  • bucket
    Type
    string
    Description
    Roadmap placement. 'none' is not on the roadmap.one of "none", "now", "next", "later", "someday"
  • assigneeIds
    Type
    array of string, uuid
    Description
    up to 20 items
  • labelIds
    Type
    array of string, uuid
    Description
    up to 50 items
  • specifications
    Type
    array of WorkSpecificationLink
    Description
    up to 20 items
  • specificationIdrequired
    Type
    string, uuid
    Description
  • relationshiprequired
    Type
    string
    Description
    one of "governed_by", "implements", "references"
  • milestoneId
    Type
    string, uuid, or null
    Description
  • dueAt
    Type
    string, date-time, or null
    Description

RemoveWorkItem

RemoveWorkItem

  • idrequired
    Type
    string, uuid
    Description

WorkRelationship

WorkRelationship

  • sourceIdrequired
    Type
    string, uuid
    Description
  • targetIdrequired
    Type
    string, uuid
    Description
  • relationshiprequired
    Type
    string
    Description
    one of "blocks", "related_to", "duplicates", "supersedes"
  • createdByrequired
    Type
    string, uuid
    Description
  • createdAtrequired
    Type
    string, date-time
    Description

AddWorkRelationship

AddWorkRelationship

  • sourceIdrequired
    Type
    string, uuid
    Description
  • targetIdrequired
    Type
    string, uuid
    Description
  • relationshiprequired
    Type
    string
    Description
    blocks and supersedes are directional. related_to and duplicates are symmetric and stored once. depends_on is accepted and normalised to a blocks row in the opposite direction.one of "blocks", "depends_on", "related_to", "duplicates", "supersedes"

RemoveWorkRelationship

RemoveWorkRelationship

  • sourceIdrequired
    Type
    string, uuid
    Description
  • targetIdrequired
    Type
    string, uuid
    Description
  • relationshiprequired
    Type
    string
    Description
    blocks and supersedes are directional. related_to and duplicates are symmetric and stored once. depends_on is accepted and normalised to a blocks row in the opposite direction.one of "blocks", "depends_on", "related_to", "duplicates", "supersedes"

CreateLabel

CreateLabel

  • projectId
    Type
    string, uuid
    Description
  • namerequired
    Type
    string
    Description
    1 to 48 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$

Milestone

Milestone

  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • namerequired
    Type
    string
    Description
  • descriptionrequired
    Type
    string, or null
    Description
  • statusrequired
    Type
    string
    Description
    one of "planned", "active", "completed", "cancelled"
  • bucketrequired
    Type
    string
    Description
    Roadmap placement. 'none' is not on the roadmap.one of "none", "now", "next", "later", "someday"
  • targetAtrequired
    Type
    string, date-time, or null
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

CreateMilestone

CreateMilestone

  • projectIdrequired
    Type
    string, uuid
    Description
  • namerequired
    Type
    string
    Description
    1 to 120 characters
  • description
    Type
    string
    Description
    up to 10000 characters
  • status
    Type
    string
    Description
    Defaults to 'planned'.one of "planned", "active", "completed", "cancelled"
  • bucket
    Type
    string
    Description
    Defaults to 'none'.one of "none", "now", "next", "later", "someday"
  • targetAt
    Type
    string, date-time
    Description

UpdateMilestone

UpdateMilestone

  • idrequired
    Type
    string, uuid
    Description
  • name
    Type
    string
    Description
    1 to 120 characters
  • description
    Type
    string
    Description
    up to 10000 characters
  • status
    Type
    string
    Description
    one of "planned", "active", "completed", "cancelled"
  • bucket
    Type
    string
    Description
    Roadmap placement. 'none' is not on the roadmap.one of "none", "now", "next", "later", "someday"
  • targetAt
    Type
    string, date-time, or null
    Description

RemoveMilestone

RemoveMilestone

  • idrequired
    Type
    string, uuid
    Description

Specification

Specification

  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • titlerequired
    Type
    string
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • statusrequired
    Type
    string
    Description
    one of "draft", "review", "approved", "implemented", "superseded"
  • versionrequired
    Type
    integer
    Description
    more than 0
  • contentrequired
    Type
    string
    Description
  • creatorIdrequired
    Type
    string
    Description
  • creatorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • supersededAtrequired
    Type
    string, date-time, or null
    Description
  • supersededByrequired
    Type
    string, uuid, or null
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

CreateSpecification

CreateSpecification

  • projectIdrequired
    Type
    string, uuid
    Description
  • titlerequired
    Type
    string
    Description
    1 to 200 characters
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • contentrequired
    Type
    string
    Description
    up to 500000 characters
  • status
    Type
    string
    Description
    Defaults to 'draft'.one of "draft", "review", "approved", "implemented", "superseded"
  • summary
    Type
    string
    Description
    Recorded on revision 1.up to 500 characters

UpdateSpecification

UpdateSpecification

  • idrequired
    Type
    string, uuid
    Description
  • title
    Type
    string
    Description
    1 to 200 characters
  • content
    Type
    string
    Description
    up to 500000 characters
  • status
    Type
    string
    Description
    Use specifications/supersede to retire one.one of "draft", "review", "approved", "implemented"
  • summary
    Type
    string
    Description
    What changed, recorded on the revision this save creates.up to 500 characters

SupersedeSpecification

SupersedeSpecification

  • idrequired
    Type
    string, uuid
    Description
  • supersededByrequired
    Type
    string, uuid
    Description
  • summary
    Type
    string
    Description
    up to 500 characters

RemoveSpecification

RemoveSpecification

  • idrequired
    Type
    string, uuid
    Description

SpecificationRevision

SpecificationRevision

  • idrequired
    Type
    string, uuid
    Description
  • specificationIdrequired
    Type
    string, uuid
    Description
  • versionrequired
    Type
    integer
    Description
    more than 0
  • titlerequired
    Type
    string
    Description
  • contentrequired
    Type
    string
    Description
  • statusrequired
    Type
    string
    Description
    one of "draft", "review", "approved", "implemented", "superseded"
  • summaryrequired
    Type
    string, or null
    Description
  • authorIdrequired
    Type
    string
    Description
  • authorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • createdAtrequired
    Type
    string, date-time
    Description

Document

Document

  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • titlerequired
    Type
    string
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • typerequired
    Type
    string
    Description
    one of "rfc", "runbook", "note", "design"
  • summaryrequired
    Type
    string, or null
    Description
  • contentrequired
    Type
    string
    Description
  • versionrequired
    Type
    integer
    Description
    more than 0
  • collectionrequired
    Type
    string, or null
    Description
    Where a published page appears on docs.rsx.group. Read only for documents in the built-in docs project; recorded and ignored elsewhere.one of "guides", "products", "support"
  • sectionrequired
    Type
    string, or null
    Description
  • positionrequired
    Type
    integer
    Description
  • publishedVersionrequired
    Type
    integer, or null
    Description
    more than 0
  • publishedAtrequired
    Type
    string, date-time, or null
    Description
  • creatorIdrequired
    Type
    string
    Description
  • creatorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • archivedAtrequired
    Type
    string, date-time, or null
    Description

CreateDocument

CreateDocument

  • projectIdrequired
    Type
    string, uuid
    Description
  • titlerequired
    Type
    string
    Description
    1 to 200 characters
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • typerequired
    Type
    string
    Description
    one of "rfc", "runbook", "note", "design"
  • contentrequired
    Type
    string
    Description
    up to 500000 characters
  • summary
    Type
    string
    Description
    One line, for registers and navigation. Not the first paragraph.up to 300 characters
  • collection
    Type
    string
    Description
    Where a published page appears on docs.rsx.group. Read only for documents in the built-in docs project; recorded and ignored elsewhere.one of "guides", "products", "support"
  • section
    Type
    string
    Description
    A group within the collection, by exact name. A product's documentation uses the product's name.1 to 80 characters
  • position
    Type
    integer
    Description
    Order within the section, lowest first. Ties fall back to the title.0 to 10000

UpdateDocument

UpdateDocument

  • idrequired
    Type
    string, uuid
    Description
  • title
    Type
    string
    Description
    1 to 200 characters
  • type
    Type
    string
    Description
    one of "rfc", "runbook", "note", "design"
  • content
    Type
    string
    Description
    up to 500000 characters
  • summary
    Type
    string, or null
    Description
    One line, for registers and navigation. Not the first paragraph.up to 300 characters
  • collection
    Type
    string, or null
    Description
    Where a published page appears on docs.rsx.group. Read only for documents in the built-in docs project; recorded and ignored elsewhere.one of "guides", "products", "support"
  • section
    Type
    string, or null
    Description
    A group within the collection, by exact name. A product's documentation uses the product's name.1 to 80 characters
  • position
    Type
    integer
    Description
    Order within the section, lowest first. Ties fall back to the title.0 to 10000
  • note
    Type
    string
    Description
    What changed, in the author's words. Stored on the revision.up to 300 characters

RemoveDocument

RemoveDocument

  • idrequired
    Type
    string, uuid
    Description

PublishDocument

PublishDocument

  • idrequired
    Type
    string, uuid
    Description
  • version
    Type
    integer
    Description
    The revision to publish. Omitted means the current head.more than 0

UnpublishDocument

UnpublishDocument

  • idrequired
    Type
    string, uuid
    Description

DocumentRevision

DocumentRevision

  • idrequired
    Type
    string, uuid
    Description
  • documentIdrequired
    Type
    string, uuid
    Description
  • versionrequired
    Type
    integer
    Description
    more than 0
  • titlerequired
    Type
    string
    Description
  • summaryrequired
    Type
    string, or null
    Description
  • contentrequired
    Type
    string
    Description
  • noterequired
    Type
    string, or null
    Description
  • authorIdrequired
    Type
    string
    Description
  • authorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • createdAtrequired
    Type
    string, date-time
    Description

Comment

Comment

  • idrequired
    Type
    string, uuid
    Description
  • entityTyperequired
    Type
    string
    Description
    one of "work", "specification", "document"
  • entityIdrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • authorIdrequired
    Type
    string
    Description
  • authorTyperequired
    Type
    string
    Description
    one of "account", "key"
  • contentrequired
    Type
    string
    Description
  • createdAtrequired
    Type
    string, date-time
    Description
  • updatedAtrequired
    Type
    string, date-time
    Description
  • deletedAtrequired
    Type
    string, date-time, or null
    Description

AddComment

AddComment

  • entityTyperequired
    Type
    string
    Description
    one of "work", "specification", "document"
  • entityIdrequired
    Type
    string, uuid
    Description
  • contentrequired
    Type
    string
    Description
    1 to 50000 characters

UpdateComment

UpdateComment

  • idrequired
    Type
    string, uuid
    Description
  • contentrequired
    Type
    string
    Description
    1 to 50000 characters

RemoveComment

RemoveComment

  • idrequired
    Type
    string, uuid
    Description

ExternalReference

ExternalReference

  • idrequired
    Type
    string, uuid
    Description
  • projectIdrequired
    Type
    string, uuid
    Description
  • entityTyperequired
    Type
    string
    Description
    one of "project", "work", "specification", "document", "milestone", "member", "comment"
  • entityIdrequired
    Type
    string, uuid
    Description
  • labelrequired
    Type
    string
    Description
  • urlrequired
    Type
    string, uri
    Description
  • createdByrequired
    Type
    string
    Description
  • createdAtrequired
    Type
    string, date-time
    Description

AddExternalReference

AddExternalReference

  • entityTyperequired
    Type
    string
    Description
    one of "project", "work", "specification", "document", "milestone"
  • entityIdrequired
    Type
    string, uuid
    Description
  • labelrequired
    Type
    string
    Description
    1 to 200 characters
  • urlrequired
    Type
    string, uri
    Description
    up to 2000 characters

RemoveExternalReference

RemoveExternalReference

  • idrequired
    Type
    string, uuid
    Description

SearchHit

SearchHit

  • kindrequired
    Type
    string
    Description
    one of "project", "work", "specification", "document", "comment"
  • projectIdrequired
    Type
    string, uuid
    Description
  • projectSlugrequired
    Type
    string
    Description
  • entityIdrequired
    Type
    string, uuid
    Description
  • titlerequired
    Type
    string
    Description
  • snippetrequired
    Type
    string
    Description
  • numberrequired
    Type
    integer, or null
    Description
  • slugrequired
    Type
    string, or null
    Description
  • parentTyperequired
    Type
    string, or null
    Description
  • parentIdrequired
    Type
    string, uuid, or null
    Description

SearchMeta

SearchMeta

  • queryrequired
    Type
    string
    Description
  • countrequired
    Type
    integer
    Description
  • truncatedrequired
    Type
    boolean
    Description

ExportResult

ExportResult

  • filenamerequired
    Type
    string
    Description
  • contentTyperequired
    Type
    string
    Description
    one of "text/markdown"
  • contentrequired
    Type
    string
    Description

ImportResult

ImportResult

  • kindrequired
    Type
    string
    Description
    one of "specification", "document"
  • idrequired
    Type
    string, uuid
    Description
  • slugrequired
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • titlerequired
    Type
    string
    Description
  • hadFrontMatterrequired
    Type
    boolean
    Description

ImportMarkdown

ImportMarkdown

  • projectIdrequired
    Type
    string, uuid
    Description
  • kindrequired
    Type
    string
    Description
    one of "specification", "document"
  • contentrequired
    Type
    string
    Description
    1 to 500000 characters
  • title
    Type
    string
    Description
    1 to 200 characters
  • slug
    Type
    string
    Description
    1 to 64 characters · matches ^[a-z0-9]+(?:-[a-z0-9]+)*$
  • status
    Type
    string
    Description
    Specifications only.one of "draft", "review", "approved", "implemented", "superseded"
  • type
    Type
    string
    Description
    Documents only.one of "rfc", "runbook", "note", "design"

RestoreRecord

RestoreRecord

  • idrequired
    Type
    string, uuid
    Description