> For the complete documentation index, see [llms.txt](https://docs.ibexa.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ibexa.ai/developers/rest-api/knowledge-base/update-node.md).

# Update Node

Update a knowledge-base node's own attributes in the caller's organisation.

Only the node's name, summary and metadata are mutable here; tree position is changed via move and the document body via the document-content endpoint. Fields are applied with PATCH semantics: an omitted field is left unchanged, and a `null` summary or `metadata` clears it. A provided `metadata` replaces the stored object wholesale rather than merging into it. 404 if the node does not exist in the caller's organisation.

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"security":[{"OAuth2PasswordBearer":[]}],"components":{"securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"/api/v1/login/access-token"}}}},"schemas":{"UpdateNodePayloadSchema":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"summary":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Summary","description":"Free-text summary of the node. Omit to leave it unchanged, or pass null (or a blank string) to clear it."},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Free-form JSON object of the caller's own keys and values — anything the organisation wants to record against the node (owner, department, retention class, external ids). Must be an object, not an array or a scalar; at most 64 top-level keys and 16384 bytes once serialized. An empty object is stored as no metadata. Replaces the stored object wholesale rather than merging into it: keys absent from the value you send are removed. Omit to leave it unchanged, or pass null to clear it."}},"type":"object","title":"UpdateNodePayloadSchema","description":"Request schema for a node's own attributes (not the document body).\n\nPATCH semantics: an omitted field is left unchanged. A `null` summary or\n`metadata` clears it; `name` cannot be nulled (a node always has one) — omit\nit instead. At least one field must be present, so a payload that would change\nnothing is rejected rather than silently bumping the audit stamps.\n\n`None` therefore means two different things in this schema — the default for a\nfield the client omitted, and an explicit \"clear it\" — and only\n`model_fields_set` separates them. `to_dto` is what resolves that ambiguity, so\nthe two readings never escape this class."},"KnowledgeNodeResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"organisation_id":{"type":"integer","title":"Organisation Id"},"node_type":{"$ref":"#/components/schemas/NodeType"},"name":{"type":"string","title":"Name"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"parent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Id"},"path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"citation_count":{"type":"integer","title":"Citation Count"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"},"created_by":{"anyOf":[{"$ref":"#/components/schemas/KnowledgeNodeUserSchema"},{"type":"null"}]},"updated_by":{"anyOf":[{"$ref":"#/components/schemas/KnowledgeNodeUserSchema"},{"type":"null"}]},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"name_translations":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Name Translations","description":"Per-language display-name overrides (ISO 639-1 keys), for the two system-managed root folders only — null for every other node. `name` always stays the canonical English string; the caller decides which (if any) of these to show."}},"type":"object","required":["id","organisation_id","node_type","name","slug","parent_id","path","summary","citation_count","metadata","created_by","updated_by","created_at","updated_at"],"title":"KnowledgeNodeResponseSchema","description":"Response schema for a knowledge-base node (tree view, no document body)."},"NodeType":{"type":"string","enum":["folder","document"],"title":"NodeType","description":"The node-type discriminator — the single extension point for new types.\n\nOnly the local types exist today (`folder`, `document`); the CTI design\nkeeps adding types additive."},"KnowledgeNodeUserSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"KnowledgeNodeUserSchema","description":"Basic info about a node's creator/updater."}}},"paths":{"/api/v1/knowledge-base/nodes/{node_id}":{"patch":{"tags":["knowledge-base","public"],"summary":"Update Node","description":"Update a knowledge-base node's own attributes in the caller's organisation.\n\nOnly the node's name, summary and metadata are mutable here; tree position is\nchanged via move and the document body via the document-content endpoint.\nFields are applied with PATCH semantics: an omitted field is left unchanged,\nand a `null` summary or `metadata` clears it. A provided `metadata` replaces\nthe stored object wholesale rather than merging into it. 404 if the node does\nnot exist in the caller's organisation.","operationId":"knowledge-base-update_node","parameters":[{"name":"node_id","in":"path","required":true,"schema":{"type":"integer","title":"Node Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNodePayloadSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeNodeResponseSchema"}}}},"400":{"description":"Invalid request payload or parameters","content":{"application/json":{}}},"401":{"description":"User not authenticated","content":{"application/json":{}}},"403":{"description":"User lacks permission","content":{"application/json":{}}},"404":{"description":"Resource not found or user has no permission to access it","content":{"application/json":{}}}}}}}}
```
