---
title: "Publish selected saved article revisions"
method: POST
path: "/products/help-desk/knowledge-base/publish"
tags: ["help-desk"]
---

# Publish selected saved article revisions

`POST /products/help-desk/knowledge-base/publish`

## Request

- Base URL: `https://api.sparkvault.com/v1`
- URL: `https://api.sparkvault.com/v1/products/help-desk/knowledge-base/publish`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/sparkvault/apis/sparkvault-api/docs/products/help-desk/knowledge-base/publish/post.ts> (a function with typed inputs; its response is checked against the schema)

Uses the organization administrator's own console session, never an API key or impersonated session. The help desk must be active. Management writes require an active admin with a Full License and a matching version; private content stays encrypted in the desk vault until explicitly published. Queues a complete immutable release and changes the edge pointer only after all files are ready. Select exact saved revision IDs; concurrent edits refuse publication. Poll the returned job using GET /products/help-desk/jobs/{job_id}.

## Request body

- object
  - `version` integer, required: The version last read; a stale version is refused with 409.
  - `articles` object[]
    - `article_id` string, required
    - `revision_id` string, required
  - `unpublish_article_ids` string[]
  - `enable` boolean

## Response `202`

The saved result.

- object
  - `data` KnowledgeBasePublicationOperation, required
    - `operation_id` string, required
    - `job_id` string, required
    - `state` string, required
  - `meta` ResponseMeta: Envelope metadata present on every successful response.
    - `api_version` string
    - `request_id` string
    - `response_ms` integer
    - `timestamp` integer: Unix seconds.
    - `pools` object: Storage and bandwidth capacity snapshot for the account.
    - `billing` object
      - `past_due` boolean
    - `quota` object: This minute of the account request budget. Present on authenticated success responses that passed the throttle; absent otherwise.
      - `limit` integer
      - `used` integer
      - `remaining` integer
      - `resets_at` integer: Unix seconds.

## Other responses

- `400`: VALIDATION_ERROR — the request contains an invalid or unsupported value.
- `401`: AUTHENTICATION_ERROR — a current organization session is required.
- `403`: FORBIDDEN — an organization administrator is required; management writes also require a Full License.
- `404`: NOT_FOUND — this account has no matching article, category, image, revision or operation.
- `409`: CONFLICT — a stale version, publication in progress, changed public release, or lifecycle fence. Reload before retrying.
- `429`: RATE_LIMIT_EXCEEDED — wait for the Retry-After interval.

## Changes

- **2026-10-28** `a9a10e328ba5`: 24 info
  - the response property `error/details` became required for the status `400`
  - the response property `error/details` became required for the status `401`
  - the response property `error/details` became required for the status `403`
  - the response property `error/details` became required for the status `404`
  - …20 more
- **2026-10-28** `56d7c265a77a`: 6 breaking
  - the response property `error/details` became nullable for the status `400`
  - the response property `error/details` became nullable for the status `401`
  - the response property `error/details` became nullable for the status `403`
  - the response property `error/details` became nullable for the status `404`
  - …2 more
- **2026-10-27** `ac44ec1f8cfa`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/sparkvault/apis/sparkvault-api/changes/products/help-desk/knowledge-base/publish/post.md)

---

[API](https://skmtc.dev/sparkvault/apis/sparkvault-api.md) - [All operations](https://skmtc.dev/sparkvault/apis/sparkvault-api/llms.txt) - [OpenAPI document](https://skmtc.dev/sparkvault/apis/sparkvault-api/revisions/97cfadccd0c0?raw)
