KnowledgeHubNodesResponse
Response body for the Knowledge Hub nodes API. The deployed service serialises optional values as JSON `null` and always includes the keys listed in `required` (Swagger / clients will see stable shapes, not omitted properties).
Properties
| Name | Type | Description |
|---|---|---|
| success | boolean | Always `true` on HTTP 200. Failures use 4xx/5xx error envelopes, not this body shape. |
| error | stringnull | Always `null` on HTTP 200. |
| id | stringnull | Current parent node ID when browsing children; `null` at root. |
| currentNode | objectnull | Node being browsed when `parentId` is in the path; `null` at root. |
| parentNode | objectnull | Parent of `currentNode` when present; `null` when not applicable. |
| items | array | Page of nodes for the current browse or search. |
| pagination | object | |
| filters | object | |
| breadcrumbs | arraynull | Present when `include=breadcrumbs`; otherwise `null`. |
| counts | objectnull | Present when `include=counts`; otherwise `null`. |
| permissions | objectnull | Present when `include=permissions`; otherwise `null`. |
JSON Schema
{
"$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)."
}
}
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
curl "https://apis.io/api/v1/json-schemas/pipeshub-knowledge-hub-nodes-response"
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.