{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/api-evangelist/pipeshub/main/json-schema/pipeshub-knowledge-hub-nodes-response-schema.json", "title": "KnowledgeHubNodesResponse", "description": "Response body for the Knowledge Hub nodes API. The deployed service\nserialises optional values as JSON `null` and always includes the keys\nlisted in `required` (Swagger / clients will see stable shapes, not\nomitted properties).\n", "x-generated": "2026-10-09", "x-method": "derived", "x-generator": "derive-json-schema.py", "x-source": "openapi/pipeshub-openapi.yml#/components/schemas/KnowledgeHubNodesResponse", "type": "object", "required": [ "success", "error", "id", "currentNode", "parentNode", "items", "pagination", "filters", "breadcrumbs", "counts", "permissions" ], "properties": { "success": { "type": "boolean", "enum": [ true ], "description": "Always `true` on HTTP 200. Failures use 4xx/5xx error envelopes, not this body shape." }, "error": { "type": [ "string", "null" ], "description": "Always `null` on HTTP 200." }, "id": { "type": [ "string", "null" ], "description": "Current parent node ID when browsing children; `null` at root." }, "currentNode": { "type": [ "object", "null" ], "description": "Node being browsed when `parentId` is in the path; `null` at root.", "required": [ "id", "name", "nodeType" ], "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "nodeType": { "type": "string", "description": "One of `app`, `recordGroup`, `folder`, `record`." }, "subType": { "type": [ "string", "null" ], "description": "Connector name or record type when applicable; otherwise `null`." } } }, "parentNode": { "type": [ "object", "null" ], "description": "Parent of `currentNode` when present; `null` when not applicable.", "required": [ "id", "name", "nodeType" ], "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "nodeType": { "type": "string", "description": "One of `app`, `recordGroup`, `folder`, `record`." }, "subType": { "type": [ "string", "null" ] } } }, "items": { "type": "array", "description": "Page of nodes for the current browse or search.", "items": { "$ref": "#/$defs/KnowledgeHubNode" } }, "pagination": { "type": "object", "required": [ "page", "limit", "totalItems", "totalPages", "hasNext", "hasPrev" ], "properties": { "page": { "type": "integer", "description": "Current page (1-indexed)." }, "limit": { "type": "integer", "description": "Page size." }, "totalItems": { "type": "integer" }, "totalPages": { "type": "integer" }, "hasNext": { "type": "boolean" }, "hasPrev": { "type": "boolean" } } }, "filters": { "type": "object", "required": [ "applied", "available" ], "properties": { "applied": { "type": "object", "description": "Echo of applied filters; unused slots are JSON `null`.", "required": [ "q", "nodeTypes", "recordTypes", "origins", "connectorIds", "indexingStatus", "createdAt", "updatedAt", "size", "sortBy", "sortOrder" ], "properties": { "q": { "type": [ "string", "null" ] }, "nodeTypes": { "type": [ "array", "null" ], "items": { "type": "string" } }, "recordTypes": { "type": [ "array", "null" ], "items": { "type": "string" } }, "origins": { "type": [ "array", "null" ], "items": { "type": "string" } }, "connectorIds": { "type": [ "array", "null" ], "items": { "type": "string" } }, "indexingStatus": { "type": [ "array", "null" ], "items": { "type": "string" } }, "createdAt": { "nullable": true, "allOf": [ { "$ref": "#/$defs/DateRangeFilter" } ] }, "updatedAt": { "nullable": true, "allOf": [ { "$ref": "#/$defs/DateRangeFilter" } ] }, "size": { "nullable": true, "allOf": [ { "$ref": "#/$defs/SizeRangeFilter" } ] }, "sortBy": { "type": "string", "description": "Effective sort field after server normalisation." }, "sortOrder": { "type": "string", "description": "Effective sort order after server normalisation." } } }, "available": { "type": [ "object", "null" ], "description": "Populated when `include=availableFilters`; otherwise `null`.", "required": [ "nodeTypes", "recordTypes", "origins", "connectors", "indexingStatus", "sortBy", "sortOrder" ], "properties": { "nodeTypes": { "type": "array", "items": { "$ref": "#/$defs/FilterOption" } }, "recordTypes": { "type": "array", "items": { "$ref": "#/$defs/FilterOption" } }, "origins": { "type": "array", "items": { "$ref": "#/$defs/FilterOption" } }, "connectors": { "type": "array", "items": { "$ref": "#/$defs/FilterOption" } }, "indexingStatus": { "type": "array", "items": { "$ref": "#/$defs/FilterOption" } }, "sortBy": { "type": "array", "items": { "$ref": "#/$defs/FilterOption" } }, "sortOrder": { "type": "array", "items": { "$ref": "#/$defs/FilterOption" } } } } } }, "breadcrumbs": { "type": [ "array", "null" ], "description": "Present when `include=breadcrumbs`; otherwise `null`.", "items": { "type": "object", "required": [ "id", "name", "nodeType" ], "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "nodeType": { "type": "string", "description": "One of `app`, `recordGroup`, `folder`, `record`." }, "subType": { "type": [ "string", "null" ] } } } }, "counts": { "type": [ "object", "null" ], "description": "Present when `include=counts`; otherwise `null`.", "required": [ "items", "total" ], "properties": { "items": { "type": "array", "items": { "type": "object", "required": [ "label", "count" ], "properties": { "label": { "type": "string" }, "count": { "type": "integer" } } } }, "total": { "type": "integer" } } }, "permissions": { "type": [ "object", "null" ], "description": "Present when `include=permissions`; otherwise `null`.", "required": [ "role", "canUpload", "canCreateFolders", "canEdit", "canDelete", "canManagePermissions" ], "properties": { "role": { "type": "string" }, "canUpload": { "type": "boolean" }, "canCreateFolders": { "type": "boolean" }, "canEdit": { "type": "boolean" }, "canDelete": { "type": "boolean" }, "canManagePermissions": { "type": "boolean" } } } }, "$defs": { "DateRangeFilter": { "type": "object", "description": "Date range filter with optional inclusive bounds (epoch ms).", "properties": { "gte": { "type": [ "integer", "null" ], "description": "Greater-than-or-equal bound (epoch ms)." }, "lte": { "type": [ "integer", "null" ], "description": "Less-than-or-equal bound (epoch ms)." } } }, "FilterOption": { "type": "object", "description": "A single filter option for knowledge hub filters.", "required": [ "id", "label" ], "properties": { "id": { "type": "string", "description": "Filter ID value to send in requests." }, "label": { "type": "string", "description": "Display label for the filter." }, "type": { "type": [ "string", "null" ], "description": "Additional type information (currently unused, may be null)." }, "connectorType": { "type": [ "string", "null" ], "description": "Connector type/name. Set only for entries in the `connectors` list." } } }, "KnowledgeHubNode": { "type": "object", "description": "One element of `items`. The live API keeps keys stable and sets\ninapplicable values to JSON `null` (not omitted).\n", "required": [ "id", "name", "nodeType", "parentId", "origin", "connector", "connectorId", "recordType", "recordGroupType", "indexingStatus", "reason", "createdAt", "updatedAt", "sizeInBytes", "mimeType", "extension", "webUrl", "hasChildren", "previewRenderable", "permission", "sharingStatus", "isInternal", "isPlaceholder" ], "properties": { "id": { "type": "string", "description": "Unique identifier for the node." }, "name": { "type": "string", "description": "Display name of the node." }, "nodeType": { "type": "string", "enum": [ "app", "recordGroup", "folder", "record" ], "description": "Type of the node (app, recordGroup, folder, or record)." }, "parentId": { "type": [ "string", "null" ], "description": "Parent node ID, or `null` at the root browse level." }, "origin": { "type": "string", "enum": [ "COLLECTION", "CONNECTOR" ], "description": "Origin type." }, "connector": { "type": [ "string", "null" ], "description": "Connector display name / key when applicable; otherwise `null`." }, "connectorId": { "type": [ "string", "null" ], "description": "Connector instance id for records and groups that come from a connector; otherwise `null` (Collections, and app nodes)." }, "recordType": { "type": [ "string", "null" ], "description": "Record type when `nodeType` is `record`; otherwise `null`." }, "recordGroupType": { "type": [ "string", "null" ], "description": "Record group type when `nodeType` is `recordGroup`; otherwise `null`." }, "indexingStatus": { "type": [ "string", "null" ], "description": "Indexing status when `nodeType` is `record`; otherwise `null`." }, "reason": { "type": [ "string", "null" ], "description": "Failure or status reason when set; otherwise `null`." }, "isInternal": { "type": "boolean", "description": "True for internal/system nodes that do not originate from a source." }, "isPlaceholder": { "type": "boolean", "description": "True for placeholder/stub nodes standing in for an out-of-scope ancestor (rendered read-only, no content actions; excluded from search and indexing)." }, "createdAt": { "type": "integer", "description": "Creation timestamp (epoch ms)." }, "updatedAt": { "type": "integer", "description": "Update timestamp (epoch ms)." }, "sizeInBytes": { "type": [ "integer", "null" ], "description": "File size in bytes for file records; otherwise `null`." }, "mimeType": { "type": [ "string", "null" ] }, "extension": { "type": [ "string", "null" ] }, "webUrl": { "type": [ "string", "null" ] }, "hasChildren": { "type": "boolean", "description": "Whether the node has children (sidebar / tree)." }, "previewRenderable": { "type": [ "boolean", "null" ] }, "permission": { "type": [ "object", "null" ], "description": "Per-item permission when `include=permissions` is requested; otherwise `null`.", "required": [ "role", "canEdit", "canDelete" ], "properties": { "role": { "type": "string" }, "canEdit": { "type": "boolean" }, "canDelete": { "type": "boolean" } } }, "sharingStatus": { "type": [ "string", "null" ], "description": "Sharing status (e.g. `private`, `shared`, `team`, `workspace`) when\napplicable; otherwise `null`.\n" } } }, "SizeRangeFilter": { "type": "object", "description": "Size range filter with optional inclusive bounds (bytes).", "properties": { "gte": { "type": [ "integer", "null" ], "description": "Greater-than-or-equal bound (bytes)." }, "lte": { "type": [ "integer", "null" ], "description": "Less-than-or-equal bound (bytes)." } } } } }