Skip to content

Append a new version ​

PATCH/api/v2/workspaces/{slug}/artifacts/{artifact_id}/update/

Add a new HTML version to an existing artifact. The new version becomes current and current_version increments by one.

This is not a partial update in the usual v2 sense. It does not edit fields on the artifact: you cannot rename it, change its description, or move it between projects through this route. It accepts only new content.

Requires the Applets feature and the workspace admin or owner role. See Artifacts overview.

Note the /update/ segment

The path is PATCH …/artifacts/{artifact_id}/update/, not PATCH …/artifacts/{artifact_id}/. A PATCH to the bare detail route is not a defined operation.

Path parameters ​

slug:requiredstring

The workspace slug. It appears in your Plane URLs. In https://app.plane.so/my-team/projects/, the slug is my-team.

artifact_id:requiredstring (uuid)

The artifact to append a version to. UUID only.

Body parameters ​

html:requiredstring

The rendered HTML for the new version. An empty or missing value returns 400.

prompt:optionalstring

The prompt that produced this HTML, stored against the version for provenance. Not returned by any read endpoint.

Every call creates a version

Posting identical HTML still appends a version and increments current_version. Content is not de-duplicated, so a retry after a network timeout can leave the artifact one version ahead of what you expect. Read current_version from the response instead of tracking it locally.

Scopes ​

workspaces.artifacts:write

Errors ​

StatusCodeCause
400Nonehtml is missing or empty. Returns a bare {"detail": "…"} body. See below.
401unauthorizedMissing or invalid credentials.
402payment_requiredThe Applets feature isn't enabled on your plan.
403forbiddenYou are not a workspace admin or owner, or your token lacks the scope.
404not_foundNo such artifact in this workspace, or the workspace is outside your tenant.
406not_acceptableThe Accept header asks for a representation the API can't produce.
409conflictDeclared by the schema; no current condition produces it on this route.
413payload_too_largeThe request body is over the size limit. Large HTML can hit this.
415unsupported_media_typeThe Content-Type isn't one this endpoint accepts.
429rate_limitedThrottled. Honor the Retry-After header before retrying.

The 400 here is not problem+json

The missing-html failure returns a bare detail-only body with no type or code member, unlike the rest of v2:

json
{ "detail": "`html` is required." }

The 404 is a standard problem document. Code that branches on problem.code needs a fallback for the 400 shape.

Append a new version
bash
curl -X PATCH \
  "https://api.plane.so/api/v2/workspaces/my-team/artifacts/b7e42a19-3c5d-4f80-9a26-8d1c0f4e7b53/update/" \
  -H "X-Api-Key: $PLANE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "html": "<section><h1>Q1 velocity by squad</h1><p>Refreshed.</p></section>"
}'
Response200
json
{
  "id": "b7e42a19-3c5d-4f80-9a26-8d1c0f4e7b53",
  "current_version": 4,
  "data_mode": "snapshot"
}
Response404
json
{
  "type": "not_found",
  "code": "not_found",
  "detail": "Artifact not found."
}

Publishing and versions are independent ​

If the artifact is already published, its anchor serves the current version, so you publish once and append as often as you like. You do not need to publish again after an update, and you cannot point an anchor at an older version.

See Publish an artifact.