Skip to content

Rename an artifact (title), change its icon (null clears it), or move it: to space (a slug or id; private for your Private, yours only), under parent_id (a doc), before before_id among its new siblings.

PATCH/workspaces/{workspace}/artifacts/{artifact_id}

Moving changes who can open it when it follows its space or parent. Takes the edit role on it, and on where it goes. Returns the artifact.

Moving it into a space it follows (inherit) gives the space’s members its access. space set to private moves it to the top of your Private, which only its owner can do.

  • Authentication: Required. Send an access token as Authorization: Bearer.
  • MCP tool: artifact with action update, and the same inputs
  • Scope: An access token needs artifacts:write.
Name Type Required Description
workspace string Yes The workspace’s slug, e.g. “acme”.
artifact_id string Yes The artifact’s id (fol_…), or its address: /acme/-/artifacts/q4-roadmap-fol_…

Send a JSON object. Names are snake_case, as in responses; the camelCase spelling is accepted too.

Name Type Required Description
title string No Its new title.
icon string or null No An emoji; null clears it.
space string No Move it to the top of this space (slug or id), or private for your Private.
parent_id string No Move it under this doc: its id.
before_id string No Where it goes among its new siblings: before this one. Left out: last.
curl -X PATCH https://api.g1t.sh/workspaces/acme/artifacts/fol_01kq8d5f7h9k1n3q5s7u9w1y3a \
-H "Authorization: Bearer $G1T_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Release notes 2.4",
"space": "general"
}'

A successful request answers 200 with:

{
"id": "fol_01kq8d5f7h9k1n3q5s7u9w1y3a",
"kind": "doc",
"title": "Release notes 2.4",
"icon": null,
"slug": "release-notes-2-4-fol_01kq8d5f7h9k1n3q5s7u9w1y3a",
"space": {
"id": "spc_01kq1a3c5e7g9j1l3n5q7s9u1w",
"slug": "general",
"name": "General",
"kind": "workspace"
},
"parent_id": null,
"has_children": false,
"owner": {
"type": "user",
"id": "usr_01kkntcg1eeb98j62xjm7eh09q",
"username": "ana",
"display_name": "Ana Lima"
},
"created_by": {
"type": "user",
"id": "usr_01kkntcg1eeb98j62xjm7eh09q",
"username": "ana",
"display_name": "Ana Lima"
},
"created_at": "2026-10-09T10:00:00.000Z",
"updated_at": "2026-10-09T10:00:00.000Z",
"edited_by": null,
"edited_at": "2026-10-09T10:00:00.000Z",
"trashed_at": null,
"viewer_role": "manage",
"private": false,
"shared_count": 0,
"general_access": "none",
"general_role": null,
"inherit": true,
"agent_mode": null,
"excerpt": "What changed in 2.4.",
"source": null,
"stale": false,
"html_url": "https://g1t.sh/acme/-/artifacts/release-notes-2-4-fol_01kq8d5f7h9k1n3q5s7u9w1y3a"
}

A failed request answers with one of these statuses and a body like {"error": {"code": "not_found", "message": "Repository not found."}}. See errors.

Status Code When
401 unauthenticated A token is required, or the one sent is not valid.
403 forbidden The token is valid but not allowed to do this, such as a member-only change or an agent token outside its repository.
404 not_found It does not exist, or you cannot see it.
409 conflict The request conflicts with the current state.
422 invalid The input is not valid. message says which field and why.