API Reference

Knowledge Base API

The Versus Knowledge Base / Wiki — spaces, pages, content, and collaboration. Auto-generated from the platform OpenAPI schema so it matches the running API.

REST API for this feature — 249 operations across 175 resource paths, auto-generated from the platform's live OpenAPI schema (drf-spectacular).

Base URL https://<your-versus-host>/api · Auth Authorization: Bearer <JWT> (from POST /api/auth/token/) · 📄 Download the OpenAPI spec for Postman/Insomnia/Swagger · see the API overview for pagination, filtering, and errors.

Agents

GET /api/kb/agents/

CRUD + operations for Wiki Agents. Looked up by key (unique per tenant)

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedKbAgentList

POST /api/kb/agents/

CRUD + operations for Wiki Agents. Looked up by key (unique per tenant)

Request body (application/json): KbAgentRequest

Responses: 201 → KbAgent

GET /api/kb/agents/{key}/

CRUD + operations for Wiki Agents. Looked up by key (unique per tenant)

ParameterInRequiredTypeDescription
keypathyesstring

Responses: 200 → KbAgent

PUT /api/kb/agents/{key}/

CRUD + operations for Wiki Agents. Looked up by key (unique per tenant)

ParameterInRequiredTypeDescription
keypathyesstring

Request body (application/json): KbAgentRequest

Responses: 200 → KbAgent

PATCH /api/kb/agents/{key}/

CRUD + operations for Wiki Agents. Looked up by key (unique per tenant)

ParameterInRequiredTypeDescription
keypathyesstring

Request body (application/json): PatchedKbAgentRequest

Responses: 200 → KbAgent

DELETE /api/kb/agents/{key}/

CRUD + operations for Wiki Agents. Looked up by key (unique per tenant)

ParameterInRequiredTypeDescription
keypathyesstring

Responses: 204

POST /api/kb/agents/{key}/act/

CRUD + operations for Wiki Agents. Looked up by key (unique per tenant)

ParameterInRequiredTypeDescription
keypathyesstring

Request body (application/json): KbAgentRequest

Responses: 200 → KbAgent

GET /api/kb/agents/{key}/actions/

GET the agent's enabled actions, or POST to REPLACE them with a list of

ParameterInRequiredTypeDescription
keypathyesstring

Responses: 200 → KbAgent

POST /api/kb/agents/{key}/actions/

GET the agent's enabled actions, or POST to REPLACE them with a list of

ParameterInRequiredTypeDescription
keypathyesstring

Request body (application/json): KbAgentRequest

Responses: 200 → KbAgent

POST /api/kb/agents/{key}/ask/

CRUD + operations for Wiki Agents. Looked up by key (unique per tenant)

ParameterInRequiredTypeDescription
keypathyesstring

Request body (application/json): KbAgentRequest

Responses: 200 → KbAgent

GET /api/kb/agents/{key}/asks/

CRUD + operations for Wiki Agents. Looked up by key (unique per tenant)

ParameterInRequiredTypeDescription
keypathyesstring

Responses: 200 → KbAgent

POST /api/kb/agents/{key}/asks/{ask_id}/feedback/

CRUD + operations for Wiki Agents. Looked up by key (unique per tenant)

ParameterInRequiredTypeDescription
ask_idpathyesstring
keypathyesstring

Request body (application/json): KbAgentRequest

Responses: 200 → KbAgent

POST /api/kb/agents/{key}/chat/

CRUD + operations for Wiki Agents. Looked up by key (unique per tenant)

ParameterInRequiredTypeDescription
keypathyesstring

Request body (application/json): KbAgentRequest

Responses: 200 → KbAgent

POST /api/kb/agents/{key}/preview/

CRUD + operations for Wiki Agents. Looked up by key (unique per tenant)

ParameterInRequiredTypeDescription
keypathyesstring

Request body (application/json): KbAgentRequest

Responses: 200 → KbAgent

GET /api/kb/agents/{key}/scope/

GET the agent's scope rows, or POST to REPLACE them with a list of

ParameterInRequiredTypeDescription
keypathyesstring

Responses: 200 → KbAgent

POST /api/kb/agents/{key}/scope/

GET the agent's scope rows, or POST to REPLACE them with a list of

ParameterInRequiredTypeDescription
keypathyesstring

Request body (application/json): KbAgentRequest

Responses: 200 → KbAgent


Assist

POST /api/kb/assist/augment/

POST /api/kb/assist/augment/ — page-aware AI authoring. Grounds on the CURRENT

Responses: 200

POST /api/kb/assist/compose/

POST /api/kb/assist/compose — generate a whole page from a prompt

Responses: 200

GET /api/kb/assist/ops/

GET /api/kb/assist/ops — the reshape op catalog (server-driven menu).

Responses: 200

POST /api/kb/assist/reshape/

POST /api/kb/assist/reshape — transform a selection of blocks; returns

Responses: 200

GET /api/kb/assist/stream/{request_id}/

GET /api/kb/assist/stream/<request_id> — SSE stream for an in-flight

ParameterInRequiredTypeDescription
request_idpathyesstring

Responses: 200

POST /api/kb/assist/{request_id}/apply/

POST /api/kb/assist/<request_id>/apply — record that the client accepted &

ParameterInRequiredTypeDescription
request_idpathyesstring

Responses: 200

POST /api/kb/assist/{request_id}/discard/

POST /api/kb/assist/<request_id>/discard — user rejected the suggestion.

ParameterInRequiredTypeDescription
request_idpathyesstring

Responses: 200

POST /api/kb/assist/{request_id}/feedback/

POST /api/kb/assist/<request_id>/feedback — {rating, reason} (P2).

ParameterInRequiredTypeDescription
request_idpathyesstring

Responses: 200


Attachments

GET /api/kb/attachments/{attach_id}/

GET /api/kb/attachments/uuid:attach_id/ — proxy-stream the current bytes

ParameterInRequiredTypeDescription
attach_idpathyesstring

Responses: 200

DELETE /api/kb/attachments/{attach_id}/

GET /api/kb/attachments/uuid:attach_id/ — proxy-stream the current bytes

ParameterInRequiredTypeDescription
attach_idpathyesstring

Responses: 204

GET /api/kb/attachments/{attach_id}/preview/

GET /api/kb/attachments/uuid:attach_id/thumb/ | /preview/ — lazily

ParameterInRequiredTypeDescription
attach_idpathyesstring

Responses: 200

POST /api/kb/attachments/{attach_id}/restore/

POST /api/kb/attachments/uuid:attach_id/restore/ {number} — promote an old

ParameterInRequiredTypeDescription
attach_idpathyesstring

Responses: 200

GET /api/kb/attachments/{attach_id}/thumb/

GET /api/kb/attachments/uuid:attach_id/thumb/ | /preview/ — lazily

ParameterInRequiredTypeDescription
attach_idpathyesstring

Responses: 200

GET /api/kb/attachments/{attach_id}/versions/

GET /api/kb/attachments/uuid:attach_id/versions/ — list versions (spec §7).

ParameterInRequiredTypeDescription
attach_idpathyesstring

Responses: 200

GET /api/kb/attachments/{attach_id}/versions/{number}/

GET /api/kb/attachments/uuid:attach_id/versions/int:number/ — download

ParameterInRequiredTypeDescription
attach_idpathyesstring
numberpathyesinteger

Responses: 200


Clips

GET /api/kb/clips/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedKbClipList

POST /api/kb/clips/

POST /api/kb/clips/ — create a clip + open its resumable upload session

Responses: 201 → KbClip

POST /api/kb/clips/from-session/{session_id}/

POST /api/kb/clips/from-session/<session_id>/ — NEW seam: PSM RDP/HTTPS

ParameterInRequiredTypeDescription
session_idpathyesstring

Responses: 200 → KbClip

GET /api/kb/clips/{clip_id}/captions

GET /api/kb/clips/uuid:clip_id/captions — the transcript as text/vtt (spec §7).

ParameterInRequiredTypeDescription
clip_idpathyesstring

Responses: 200

GET /api/kb/clips/{clip_id}/poster

GET /api/kb/clips/uuid:clip_id/poster — the poster JPEG (DB blob).

ParameterInRequiredTypeDescription
clip_idpathyesstring

Responses: 200

GET /api/kb/clips/{clip_id}/stream

GET /api/kb/clips/uuid:clip_id/stream — range-aware byte serving (spec §7).

ParameterInRequiredTypeDescription
clip_idpathyesstring

Responses: 200

GET /api/kb/clips/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb clip.

Responses: 200 → KbClip

PUT /api/kb/clips/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb clip.

Responses: 200 → KbClip

PATCH /api/kb/clips/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb clip.

Responses: 200 → KbClip

DELETE /api/kb/clips/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb clip.

Responses: 204

POST /api/kb/clips/{id}/abort/

POST /api/kb/clips/<id>/abort/ — abort multipart, mark failed (spec §7).

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb clip.

Responses: 200 → KbClip

POST /api/kb/clips/{id}/complete/

POST /api/kb/clips/<id>/complete/ — finalise + flip to ready (spec §7).

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb clip.

Responses: 200 → KbClip

PUT /api/kb/clips/{id}/part/

PUT /api/kb/clips/<id>/part/?n=<k> — upload chunk k (raw body). Idempotent

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb clip.

Responses: 200 → KbClip

POST /api/kb/clips/{id}/poster/

POST /api/kb/clips/<id>/poster/ — store the client-captured JPEG poster

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb clip.

Responses: 200 → KbClip

POST /api/kb/clips/{id}/transcribe/

POST /api/kb/clips/<id>/transcribe/ — kick the optional AI transcript

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb clip.

Responses: 200 → KbClip


Comments

GET /api/kb/comments/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedKbPageCommentList

POST /api/kb/comments/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Request body (application/json): KbPageCommentRequest

Responses: 201 → KbPageComment

GET /api/kb/comments/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page comment.

Responses: 200 → KbPageComment

PUT /api/kb/comments/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page comment.

Request body (application/json): KbPageCommentRequest

Responses: 200 → KbPageComment

PATCH /api/kb/comments/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page comment.

Request body (application/json): PatchedKbPageCommentRequest

Responses: 200 → KbPageComment

DELETE /api/kb/comments/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page comment.

Responses: 204


Datasets

GET /api/kb/datasets/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedKbDatasetList

POST /api/kb/datasets/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Request body (application/json): KbDatasetRequest

Responses: 201 → KbDataset

GET /api/kb/datasets/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb dataset.

Responses: 200 → KbDatasetDetail

PUT /api/kb/datasets/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb dataset.

Request body (application/json): KbDatasetRequest

Responses: 200 → KbDataset

PATCH /api/kb/datasets/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb dataset.

Request body (application/json): PatchedKbDatasetRequest

Responses: 200 → KbDataset

DELETE /api/kb/datasets/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb dataset.

Responses: 204

GET /api/kb/datasets/{id}/export/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb dataset.

Responses: 200 → KbDataset

GET /api/kb/datasets/{id}/fields/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb dataset.

Responses: 200 → KbDataset

POST /api/kb/datasets/{id}/fields/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb dataset.

Request body (application/json): KbDatasetRequest

Responses: 200 → KbDataset

POST /api/kb/datasets/{id}/fields/reorder/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb dataset.

Request body (application/json): KbDatasetRequest

Responses: 200 → KbDataset

PATCH /api/kb/datasets/{id}/fields/{field_id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
field_idpathyesstring
idpathyesstringA UUID string identifying this kb dataset.

Request body (application/json): PatchedKbDatasetRequest

Responses: 200 → KbDataset

DELETE /api/kb/datasets/{id}/fields/{field_id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
field_idpathyesstring
idpathyesstringA UUID string identifying this kb dataset.

Responses: 204

POST /api/kb/datasets/{id}/fields/{field_id}/retype/

Change a field's type and run a best-effort cell coercion pass (§4.4/§5#13).

ParameterInRequiredTypeDescription
field_idpathyesstring
idpathyesstringA UUID string identifying this kb dataset.

Request body (application/json): KbDatasetRequest

Responses: 200 → KbDataset

POST /api/kb/datasets/{id}/import/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb dataset.

Request body (application/json): KbDatasetRequest

Responses: 200 → KbDataset

GET /api/kb/datasets/{id}/resolve/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb dataset.

Responses: 200 → KbDataset

GET /api/kb/datasets/{id}/rows/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb dataset.

Responses: 200 → KbDataset

POST /api/kb/datasets/{id}/rows/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb dataset.

Request body (application/json): KbDatasetRequest

Responses: 200 → KbDataset

POST /api/kb/datasets/{id}/rows/bulk/

Batch upsert (import/paste). Items: {id?, cells, row_order?} —

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb dataset.

Request body (application/json): KbDatasetRequest

Responses: 200 → KbDataset

PATCH /api/kb/datasets/{id}/rows/{row_id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb dataset.
row_idpathyesstring

Request body (application/json): PatchedKbDatasetRequest

Responses: 200 → KbDataset

DELETE /api/kb/datasets/{id}/rows/{row_id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb dataset.
row_idpathyesstring

Responses: 204

POST /api/kb/datasets/{id}/subscribe/

Toggle a subscription to this dataset (spec §6.1) — reuses the KbWatch

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb dataset.

Request body (application/json): KbDatasetRequest

Responses: 200 → KbDataset

GET /api/kb/datasets/{id}/views/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb dataset.

Responses: 200 → KbDataset

POST /api/kb/datasets/{id}/views/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb dataset.

Request body (application/json): KbDatasetRequest

Responses: 200 → KbDataset

PATCH /api/kb/datasets/{id}/views/{view_id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb dataset.
view_idpathyesstring

Request body (application/json): PatchedKbDatasetRequest

Responses: 200 → KbDataset

DELETE /api/kb/datasets/{id}/views/{view_id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb dataset.
view_idpathyesstring

Responses: 204

POST /api/kb/datasets/{id}/views/{view_id}/duplicate/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb dataset.
view_idpathyesstring

Request body (application/json): KbDatasetRequest

Responses: 200 → KbDataset


Diagram sources

GET /api/kb/diagram-sources/

GET /api/kb/diagram-sources/?type=&q= — list selectable objects for the

Responses: 200


Events

GET /api/kb/events/

kb/events/<id>/ — PATCH/DELETE a native event; override a single

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedTimelineEventList

POST /api/kb/events/

kb/events/<id>/ — PATCH/DELETE a native event; override a single

Request body (application/json): TimelineEventRequest

Responses: 201 → TimelineEvent

GET /api/kb/events/{id}/

kb/events/<id>/ — PATCH/DELETE a native event; override a single

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this timeline event.

Responses: 200 → TimelineEvent

PUT /api/kb/events/{id}/

Optimistic concurrency (spec §7/§9): a stale base_updated_at returns 409

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this timeline event.

Request body (application/json): TimelineEventRequest

Responses: 200 → TimelineEvent

PATCH /api/kb/events/{id}/

kb/events/<id>/ — PATCH/DELETE a native event; override a single

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this timeline event.

Request body (application/json): PatchedTimelineEventRequest

Responses: 200 → TimelineEvent

DELETE /api/kb/events/{id}/

kb/events/<id>/ — PATCH/DELETE a native event; override a single

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this timeline event.

Responses: 204

POST /api/kb/events/{id}/override/

Create/patch/cancel a single recurrence occurrence (spec §7,

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this timeline event.

Request body (application/json): TimelineEventRequest

Responses: 200 → TimelineEvent

PATCH /api/kb/events/{id}/override/

Create/patch/cancel a single recurrence occurrence (spec §7,

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this timeline event.

Request body (application/json): PatchedTimelineEventRequest

Responses: 200 → TimelineEvent

DELETE /api/kb/events/{id}/override/

Create/patch/cancel a single recurrence occurrence (spec §7,

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this timeline event.

Responses: 204


Find

GET /api/kb/find/

GET /api/kb/find/ — ranked, faceted, snippeted search (spec §7).

Responses: 200

POST /api/kb/find/reindex/

POST /api/kb/find/reindex/ — rebuild the index for a space or the tenant

Responses: 200

GET /api/kb/find/suggest/

GET /api/kb/find/suggest/ — type-ahead titles, ≤8 rows (spec §3 #9).

Responses: 200


Inline comments

GET /api/kb/inline-comments/

/api/kb/inline-comments/ — create an anchored comment from a selection,

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedKbInlineCommentList

POST /api/kb/inline-comments/

Create a comment. When an anchor object is supplied on a root

Request body (application/json): KbInlineCommentRequest

Responses: 201 → KbInlineComment

POST /api/kb/inline-comments/reanchor/

Re-anchor every open root inline thread on a page against its CURRENT

Request body (application/json): KbInlineCommentRequest

Responses: 200 → KbInlineComment

GET /api/kb/inline-comments/{id}/

/api/kb/inline-comments/ — create an anchored comment from a selection,

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page comment.

Responses: 200 → KbInlineComment

PUT /api/kb/inline-comments/{id}/

/api/kb/inline-comments/ — create an anchored comment from a selection,

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page comment.

Request body (application/json): KbInlineCommentRequest

Responses: 200 → KbInlineComment

PATCH /api/kb/inline-comments/{id}/

/api/kb/inline-comments/ — create an anchored comment from a selection,

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page comment.

Request body (application/json): PatchedKbInlineCommentRequest

Responses: 200 → KbInlineComment

DELETE /api/kb/inline-comments/{id}/

/api/kb/inline-comments/ — create an anchored comment from a selection,

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page comment.

Responses: 204

POST /api/kb/inline-comments/{id}/convert_to_issue/

Promote an inline thread to a Desk Issue (§6). Body ``{project,

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page comment.

Request body (application/json): KbInlineCommentRequest

Responses: 200 → KbInlineComment

POST /api/kb/inline-comments/{id}/reopen/

/api/kb/inline-comments/ — create an anchored comment from a selection,

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page comment.

Request body (application/json): KbInlineCommentRequest

Responses: 200 → KbInlineComment

POST /api/kb/inline-comments/{id}/resolve/

/api/kb/inline-comments/ — create an anchored comment from a selection,

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page comment.

Request body (application/json): KbInlineCommentRequest

Responses: 200 → KbInlineComment


Insights

GET /api/kb/insights/overview/

GET /api/kb/insights/overview/ — tenant-wide rollup across spaces (admin)

Responses: 200

POST /api/kb/insights/rollup/

POST /api/kb/insights/rollup/ — run the analytics rollup + popularity

Responses: 200


Labels

GET /api/kb/labels/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedKbLabelList

POST /api/kb/labels/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Request body (application/json): KbLabelRequest

Responses: 201 → KbLabel

POST /api/kb/labels/merge/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Request body (application/json): KbLabelRequest

Responses: 200 → KbLabel

GET /api/kb/labels/popular/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Responses: 200 → KbLabel

GET /api/kb/labels/{slug}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
slugpathyesstring

Responses: 200 → KbLabel

PATCH /api/kb/labels/{slug}/

PATCH label metadata (description / color / kind / target_ref). Admin

ParameterInRequiredTypeDescription
slugpathyesstring

Request body (application/json): PatchedKbLabelRequest

Responses: 200 → KbLabel

DELETE /api/kb/labels/{slug}/

DELETE a label — strips it from every page that carries it, then removes

ParameterInRequiredTypeDescription
slugpathyesstring

Responses: 204

GET /api/kb/labels/{slug}/issues/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
slugpathyesstring

Responses: 200 → KbLabel

GET /api/kb/labels/{slug}/pages/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
slugpathyesstring

Responses: 200 → KbLabel

GET /api/kb/labels/{slug}/related/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
slugpathyesstring

Responses: 200 → KbLabel

POST /api/kb/labels/{slug}/rename/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
slugpathyesstring

Request body (application/json): KbLabelRequest

Responses: 200 → KbLabel


Oncall

GET /api/kb/oncall/rotations/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedOncallRotationList

POST /api/kb/oncall/rotations/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Request body (application/json): OncallRotationRequest

Responses: 201 → OncallRotation

GET /api/kb/oncall/rotations/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this oncall rotation.

Responses: 200 → OncallRotation

PUT /api/kb/oncall/rotations/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this oncall rotation.

Request body (application/json): OncallRotationRequest

Responses: 200 → OncallRotation

PATCH /api/kb/oncall/rotations/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this oncall rotation.

Request body (application/json): PatchedOncallRotationRequest

Responses: 200 → OncallRotation

DELETE /api/kb/oncall/rotations/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this oncall rotation.

Responses: 204

GET /api/kb/oncall/rotations/{id}/whois/

Current (or ?at=) on-call member for this rotation (spec §6).

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this oncall rotation.

Responses: 200 → OncallRotation


Pages

GET /api/kb/pages/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedKbPageList

POST /api/kb/pages/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Request body (application/json): KbPageRequest

Responses: 201 → KbPage

GET /api/kb/pages/for_issue/

Pages linking a given issue key — powers the issue's 'referenced in' panel.

Responses: 200 → KbPage

GET /api/kb/pages/search/

Full-text-ish search over title + rendered body (P1). Optional

Responses: 200 → KbPage

GET /api/kb/pages/templates/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Responses: 200 → KbPage

GET /api/kb/pages/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page.

Responses: 200 → KbPage

PUT /api/kb/pages/{id}/

Save a new version. Optimistic concurrency (§8): a stale base_version

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page.

Request body (application/json): KbPageRequest

Responses: 200 → KbPage

PATCH /api/kb/pages/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page.

Request body (application/json): PatchedKbPageRequest

Responses: 200 → KbPage

DELETE /api/kb/pages/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page.

Responses: 204

GET /api/kb/pages/{id}/attachments/

GET the page's attachments (metadata + download url), or POST a file

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page.

Responses: 200 → KbPage

POST /api/kb/pages/{id}/attachments/

GET the page's attachments (metadata + download url), or POST a file

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page.

Request body (application/json): KbPageRequest

Responses: 200 → KbPage

GET /api/kb/pages/{id}/backlinks/

Pages that link TO this page (VS-SPEC-WIKI-BACKLINKS) — powers the

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page.

Responses: 200 → KbPage

GET /api/kb/pages/{id}/diff/

Line-level diff between two versions (VS-SPEC-WIKI-VERSION-DIFF).

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page.

Responses: 200 → KbPage

PUT /api/kb/pages/{id}/draft/

Autosave (PUT) or discard (DELETE) the page's unpublished working copy.

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page.

Request body (application/json): KbPageRequest

Responses: 200 → KbPage

DELETE /api/kb/pages/{id}/draft/

Autosave (PUT) or discard (DELETE) the page's unpublished working copy.

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page.

Responses: 204

GET /api/kb/pages/{id}/export/

Export the page as Markdown or HTML (§7/§15). ?format=md|html.

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page.

Responses: 200 → KbPage

POST /api/kb/pages/{id}/link_issue/

Link a Desk issue to this page (validated); idempotent.

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page.

Request body (application/json): KbPageRequest

Responses: 200 → KbPage

POST /api/kb/pages/{id}/move/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page.

Request body (application/json): KbPageRequest

Responses: 200 → KbPage

POST /api/kb/pages/{id}/publish/

Promote the working copy (the posted body, else the stored draft) to a

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page.

Request body (application/json): KbPageRequest

Responses: 200 → KbPage

POST /api/kb/pages/{id}/restore/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page.

Request body (application/json): KbPageRequest

Responses: 200 → KbPage

GET /api/kb/pages/{id}/restrictions/

GET the page's restrictions, or POST to replace them:

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page.

Responses: 200 → KbPage

POST /api/kb/pages/{id}/restrictions/

GET the page's restrictions, or POST to replace them:

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page.

Request body (application/json): KbPageRequest

Responses: 200 → KbPage

POST /api/kb/pages/{id}/run_runbook/

Launch the page's runbook WorkflowDefinition (a documented runbook

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page.

Request body (application/json): KbPageRequest

Responses: 200 → KbPage

POST /api/kb/pages/{id}/set_labels/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page.

Request body (application/json): KbPageRequest

Responses: 200 → KbPage

GET /api/kb/pages/{id}/stats/

GET /api/kb/pages/<id>/stats/ — the page's rollup (spec §7).

ParameterInRequiredTypeDescription
idpathyesstring

Responses: 200

POST /api/kb/pages/{id}/unlink_issue/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page.

Request body (application/json): KbPageRequest

Responses: 200 → KbPage

GET /api/kb/pages/{id}/versions/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page.

Responses: 200 → KbPage

GET /api/kb/pages/{id}/versions/{number}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page.
numberpathyesstring

Responses: 200 → KbPage

POST /api/kb/pages/{id}/view/

POST /api/kb/pages/<id>/view/ — record a view (deduped per user/session/

ParameterInRequiredTypeDescription
idpathyesstring

Responses: 200

POST /api/kb/pages/{id}/watch/

Toggle watching this page (§3 #14) — watchers are notified on comments.

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb page.

Request body (application/json): KbPageRequest

Responses: 200 → KbPage

POST /api/kb/pages/{page_id}/ai-diagram/

POST /api/kb/pages/uuid:page_id/ai-diagram/ {prompt} — turn a natural-

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

GET /api/kb/pages/{page_id}/annotations/

GET /api/kb/pages/<id>/annotations/ → the active anchor set for the

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

PUT /api/kb/pages/{page_id}/canvas-draft/

PUT /api/kb/pages/uuid:page_id/canvas-draft/ — element-delta autosave (§7).

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

GET /api/kb/pages/{page_id}/canvas.png

GET /api/kb/pages/uuid:page_id/canvas.png (?fmt=pdf) — rasterised export (§7).

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

GET /api/kb/pages/{page_id}/canvas.svg

GET /api/kb/pages/uuid:page_id/canvas.svg — inert server-rendered SVG (§7).

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

GET /api/kb/pages/{page_id}/deck/

GET /api/kb/pages/<id>/deck/ → normalized deck payload (spec §7):

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

POST /api/kb/pages/{page_id}/deck/

GET /api/kb/pages/<id>/deck/ → normalized deck payload (spec §7):

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

GET /api/kb/pages/{page_id}/deck/export/

GET /api/kb/pages/<id>/deck/export/?fmt=html|pdf|png[&notes=1][&persist=1]

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

POST /api/kb/pages/{page_id}/deck/insert-diagram/

POST /api/kb/pages/uuid:page_id/deck/insert-diagram/

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

POST /api/kb/pages/{page_id}/deck/slides/reorder/

POST /api/kb/pages/<id>/deck/slides/reorder/ — body {order:[id,…]}.

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

POST /api/kb/pages/{page_id}/import-drawio/

POST /api/kb/pages/uuid:page_id/import-drawio/ {xml} — parse a draw.io /

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

GET /api/kb/pages/{page_id}/live-card/

GET /api/kb/pages/uuid:page_id/live-card/?kind=&id= — resolve one Live Card

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

POST /api/kb/pages/{page_id}/live/ai-suggest/

POST /api/kb/pages/<id>/live/ai-suggest/ — OPTIONAL: return an AI co-

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

POST /api/kb/pages/{page_id}/live/flush/

POST /api/kb/pages/<id>/live/flush/ — flush the converged CRDT into the

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

GET /api/kb/pages/{page_id}/live/journal/

GET /api/kb/pages/<id>/live/journal/?since=<seq>&verify=1 — the ordered,

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

GET /api/kb/pages/{page_id}/live/ops/

GET live/ops/?since=<seq> replay; POST live/ops/ submit a batch.

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

POST /api/kb/pages/{page_id}/live/ops/

GET live/ops/?since=<seq> replay; POST live/ops/ submit a batch.

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

POST /api/kb/pages/{page_id}/live/presence/

POST /api/kb/pages/<id>/live/presence/ — cursor/selection heartbeat

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

POST /api/kb/pages/{page_id}/live/publish/

POST /api/kb/pages/<id>/live/publish/ — flatten the CRDT and promote it

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

GET /api/kb/pages/{page_id}/live/session/

GET /api/kb/pages/<id>/live/session/?from_issue=<KEY>&site=<id> — join.

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

POST /api/kb/pages/{page_id}/live/session/

GET /api/kb/pages/<id>/live/session/?from_issue=<KEY>&site=<id> — join.

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

POST /api/kb/pages/{page_id}/live/snapshot/

POST /api/kb/pages/<id>/live/snapshot/ — force compaction (§7). Also run

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

GET /api/kb/pages/{page_id}/live/stream/

GET /api/kb/pages/<id>/live/stream/?since=<seq>&site=<id> — a bounded

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

GET /api/kb/pages/{page_id}/presence/

GET (roster) / PUT (heartbeat) /api/kb/pages/uuid:page_id/presence/ (§7).

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

PUT /api/kb/pages/{page_id}/presence/

GET (roster) / PUT (heartbeat) /api/kb/pages/uuid:page_id/presence/ (§7).

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

GET /api/kb/pages/{page_id}/present/

GET /api/kb/pages/<id>/present/ — the full-screen player bundle (spec

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

POST /api/kb/pages/{page_id}/promote-stickies/

POST /api/kb/pages/uuid:page_id/promote-stickies/ {node_ids,[project]} —

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

GET /api/kb/pages/{page_id}/render/

GET /api/kb/pages/<id>/render/?highlights=1 → rendered_html produced

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

POST /api/kb/pages/{page_id}/seed-object/

POST /api/kb/pages/uuid:page_id/seed-object/ {source_type, source_id} —

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

POST /api/kb/pages/{page_id}/seed-topology/

POST /api/kb/pages/uuid:page_id/seed-topology/ {ticket_number} — returns

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200

POST /api/kb/pages/{page_id}/uploads/

POST /api/kb/pages/uuid:page_id/uploads/ — init a resumable session.

ParameterInRequiredTypeDescription
page_idpathyesstring

Responses: 200


Pagetree

GET /api/kb/pagetree/audit/

GET kb/pagetree/audit/?space=<uuid|key> — the queryable structural

Responses: 200 → KbPage

POST /api/kb/pagetree/bulk_labels/

POST kb/pagetree/bulk_labels/ — {ids, labels: [...], mode: add|replace|remove}.

Request body (application/json): KbPageRequest

Responses: 200 → KbPage

POST /api/kb/pagetree/bulk_move/

POST kb/pagetree/bulk_move/ — {ids, parent|null, position?, space?}.

Request body (application/json): KbPageRequest

Responses: 200 → KbPage

POST /api/kb/pagetree/bulk_restrict/

POST kb/pagetree/bulk_restrict/ — {ids, mode: view|edit, role_slug?,

Request body (application/json): KbPageRequest

Responses: 200 → KbPage

POST /api/kb/pagetree/bulk_status/

POST kb/pagetree/bulk_status/ — {ids, status: archived|current,

Request body (application/json): KbPageRequest

Responses: 200 → KbPage

POST /api/kb/pagetree/move/

POST kb/pagetree/move/ — transactional single-node move (§5). Body:

Request body (application/json): KbPageRequest

Responses: 200 → KbPage

POST /api/kb/pagetree/move_undo/

POST kb/pagetree/move_undo/ — {audit_id}. Replays a KbTreeAudit.before

Request body (application/json): KbPageRequest

Responses: 200 → KbPage

GET /api/kb/pagetree/tree/

GET kb/pagetree/tree/?space=<uuid|key> — the extended node payload

Responses: 200 → KbPage

GET /api/kb/pagetree/tree_pref/

GET/PUT kb/pagetree/tree_pref/?space=<uuid> — the caller's per-space

Responses: 200 → KbPage

PUT /api/kb/pagetree/tree_pref/

GET/PUT kb/pagetree/tree_pref/?space=<uuid> — the caller's per-space

Request body (application/json): KbPageRequest

Responses: 200 → KbPage


Reactions

GET /api/kb/reactions/

GET ?target_type=&target_id= → the target's reaction aggregate.

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedKbReactionList

POST /api/kb/reactions/toggle/

POST {target_type, target_id, emoji} → create-or-remove the caller's

Request body (application/json): KbReactionRequest

Responses: 200 → KbReaction


Smartlinks

GET /api/kb/smartlinks/domain-rules/

CRUD the tenant's external allow/deny list (spec §7). Reads for any

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedSmartLinkDomainRuleList

POST /api/kb/smartlinks/domain-rules/

CRUD the tenant's external allow/deny list (spec §7). Reads for any

Request body (application/json): SmartLinkDomainRuleRequest

Responses: 201 → SmartLinkDomainRule

GET /api/kb/smartlinks/domain-rules/{id}/

CRUD the tenant's external allow/deny list (spec §7). Reads for any

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this smart link domain rule.

Responses: 200 → SmartLinkDomainRule

PUT /api/kb/smartlinks/domain-rules/{id}/

CRUD the tenant's external allow/deny list (spec §7). Reads for any

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this smart link domain rule.

Request body (application/json): SmartLinkDomainRuleRequest

Responses: 200 → SmartLinkDomainRule

PATCH /api/kb/smartlinks/domain-rules/{id}/

CRUD the tenant's external allow/deny list (spec §7). Reads for any

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this smart link domain rule.

Request body (application/json): PatchedSmartLinkDomainRuleRequest

Responses: 200 → SmartLinkDomainRule

DELETE /api/kb/smartlinks/domain-rules/{id}/

CRUD the tenant's external allow/deny list (spec §7). Reads for any

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this smart link domain rule.

Responses: 204

GET /api/kb/smartlinks/preview/

GET /api/kb/smartlinks/preview/?target= — metadata-only, no cache write.

Responses: 200

GET /api/kb/smartlinks/providers/

GET /api/kb/smartlinks/providers/ — registered providers for the insert menu.

Responses: 200

POST /api/kb/smartlinks/refresh/

POST /api/kb/smartlinks/refresh/ — force-revalidate one resolution.

Responses: 200

POST /api/kb/smartlinks/resolve/

POST /api/kb/smartlinks/resolve/ — cache-first resolve (paste path).

Responses: 200


Spaces

GET /api/kb/spaces/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedKbSpaceList

POST /api/kb/spaces/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Request body (application/json): KbSpaceRequest

Responses: 201 → KbSpace

GET /api/kb/spaces/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb space.

Responses: 200 → KbSpace

PUT /api/kb/spaces/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb space.

Request body (application/json): KbSpaceRequest

Responses: 200 → KbSpace

PATCH /api/kb/spaces/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb space.

Request body (application/json): PatchedKbSpaceRequest

Responses: 200 → KbSpace

DELETE /api/kb/spaces/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb space.

Responses: 204

GET /api/kb/spaces/{id}/tree/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb space.

Responses: 200 → KbSpace

GET /api/kb/spaces/{key}/activity/

GET /api/kb/spaces/<key>/activity/?limit= — merged recent-activity feed

ParameterInRequiredTypeDescription
keypathyesstring

Responses: 200

GET /api/kb/spaces/{key}/insights/

GET /api/kb/spaces/<key>/insights/?window=7d|30d|90d — dashboard payload

ParameterInRequiredTypeDescription
keypathyesstring

Responses: 200

GET /api/kb/spaces/{space_id}/access/

Read (GET) or set (PATCH) a space's access settings (spec §7). Switching

ParameterInRequiredTypeDescription
space_idpathyesstring

Responses: 200

PATCH /api/kb/spaces/{space_id}/access/

Read (GET) or set (PATCH) a space's access settings (spec §7). Switching

ParameterInRequiredTypeDescription
space_idpathyesstring

Responses: 200

GET /api/kb/spaces/{space_id}/members/

List (GET) or add/replace (POST) grants on a space. space_admin gated.

ParameterInRequiredTypeDescription
space_idpathyesstring

Responses: 200

POST /api/kb/spaces/{space_id}/members/

List (GET) or add/replace (POST) grants on a space. space_admin gated.

ParameterInRequiredTypeDescription
space_idpathyesstring

Responses: 200

DELETE /api/kb/spaces/{space_id}/members/{member_id}/

Revoke a single grant (DELETE). space_admin gated.

ParameterInRequiredTypeDescription
member_idpathyesstring
space_idpathyesstring

Responses: 204

GET /api/kb/spaces/{space_id}/perm-audit/

Paginated audit feed for a space (spec §7/§8). space_admin gated.

ParameterInRequiredTypeDescription
space_idpathyesstring

Responses: 200

GET /api/kb/spaces/{space_id}/permissions/

Effective-permission preview for the settings UI (spec §7):

ParameterInRequiredTypeDescription
space_idpathyesstring

Responses: 200


Stencils

GET /api/kb/stencils/

GET /api/kb/stencils/ — the vendor stencil library (label / brand colour /

Responses: 200


Templates

GET /api/kb/templates/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedKbTemplateList

POST /api/kb/templates/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Request body (application/json): KbTemplateRequest

Responses: 201 → KbTemplate

GET /api/kb/templates/field_types/

Template-variable type → App Builder FormField field type, so the

Responses: 200 → KbTemplate

POST /api/kb/templates/from_page/

Clone a page's current body into a new template, auto-extracting

Request body (application/json): KbTemplateRequest

Responses: 200 → KbTemplate

GET /api/kb/templates/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb template.

Responses: 200 → KbTemplate

PUT /api/kb/templates/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb template.

Request body (application/json): KbTemplateRequest

Responses: 200 → KbTemplate

PATCH /api/kb/templates/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb template.

Request body (application/json): PatchedKbTemplateRequest

Responses: 200 → KbTemplate

DELETE /api/kb/templates/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb template.

Responses: 204

POST /api/kb/templates/{id}/instantiate/

Substitute variables + create a page (or a scaffold tree). Body:

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb template.

Request body (application/json): KbTemplateRequest

Responses: 200 → KbTemplate

GET /api/kb/templates/{id}/preview/

Server-rendered read-only preview of the body with defaults/dynamic

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this kb template.

Responses: 200 → KbTemplate


Timelines

GET /api/kb/timelines/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedTimelineList

POST /api/kb/timelines/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Request body (application/json): TimelineRequest

Responses: 201 → Timeline

GET /api/kb/timelines/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this timeline.

Responses: 200 → Timeline

PUT /api/kb/timelines/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this timeline.

Request body (application/json): TimelineRequest

Responses: 200 → Timeline

PATCH /api/kb/timelines/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this timeline.

Request body (application/json): PatchedTimelineRequest

Responses: 200 → Timeline

DELETE /api/kb/timelines/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this timeline.

Responses: 204

GET /api/kb/timelines/{id}/events/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this timeline.

Responses: 200 → Timeline

POST /api/kb/timelines/{id}/events/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this timeline.

Request body (application/json): TimelineRequest

Responses: 200 → Timeline

GET /api/kb/timelines/{id}/export.ics/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this timeline.

Responses: 200 → Timeline

GET /api/kb/timelines/{id}/feed-url/

Return the caller's tokenized read-only feed URL (authenticated;

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this timeline.

Responses: 200 → Timeline

GET /api/kb/timelines/{id}/feed.ics

Unauthenticated but token-signed, READ-ONLY ICS feed for external calendar

ParameterInRequiredTypeDescription
idpathyesstring

Responses: 200

POST /api/kb/timelines/{id}/import/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this timeline.

Request body (application/json): TimelineRequest

Responses: 200 → Timeline

POST /api/kb/timelines/{id}/rotate-feed-token/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this timeline.

Request body (application/json): TimelineRequest

Responses: 200 → Timeline

POST /api/kb/timelines/{id}/subscribe/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this timeline.

Request body (application/json): TimelineRequest

Responses: 200 → Timeline

DELETE /api/kb/timelines/{id}/subscribe/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesstringA UUID string identifying this timeline.

Responses: 204


Uploads

DELETE /api/kb/uploads/{session_id}/

DELETE /api/kb/uploads/uuid:session_id/ — abort + GC staging.

ParameterInRequiredTypeDescription
session_idpathyesstring

Responses: 204

PUT /api/kb/uploads/{session_id}/chunk/{index}/

PUT /api/kb/uploads/uuid:session_id/chunk/int:index/ — upload chunk N.

ParameterInRequiredTypeDescription
indexpathyesinteger
session_idpathyesstring

Responses: 200

POST /api/kb/uploads/{session_id}/complete/

POST /api/kb/uploads/uuid:session_id/complete/ — assemble + publish.

ParameterInRequiredTypeDescription
session_idpathyesstring

Responses: 200


Auto-generated from drf-spectacular OpenAPI. Endpoint descriptions come from viewset docstrings/serializers; enriching those improves this page on the next generation.