Get knowledge hub root nodes
Changed onReturns root-level nodes (connector apps and Collection apps) or, when filters or search are applied, a flat list of matching nodes across the entire knowledge hub tree.
Overview
The Knowledge Hub provides a unified view across all knowledge sources:
- Collection — locally uploaded knowledge bases (origin: COLLECTION)
- Connector app — external connector instances such as Google Drive, Slack, Confluence, Jira (origin: CONNECTOR)
Use this endpoint to build file-browser UIs and sidebar navigation trees.
Browsing vs. searching
When no filters or search query are provided, only top-level app nodes are returned. Adding nodeTypes, q, or other filter params triggers a search across the full tree, returning matching nodes regardless of depth.
For children of a specific node, use GET /knowledgeBase/knowledge-hub/nodes/{parentType}/{parentId}.
Pagination and sorting
Results are always paginated. Default sort is updatedAt descending. The pagination object in the response contains hasNext / hasPrev flags suitable for infinite-scroll or page-based navigation.
Expanding the response
Use the include parameter to request additional sections:
- availableFilters — adds filters.available with all filter options
- counts — adds a counts summary broken down by node type
- breadcrumbs — adds the breadcrumb trail (empty at root level)
- permissions — adds the caller's permission flags
A connected app with a limit
A token that may see only some sources pages and counts only what its limit lets it see:
- Limited to whole sources (apps or collections) only: the listing and the search cover those, with exact totals and counts.
- Limited to any spaces, folders or files, alone or beside whole sources: the listing returns each whole source, space (record group), folder and file the limit names, one item each, to open by its id. totalItems counts those items, not what is inside them. A search reads forward only (prevCursor is always null), and takes a page number up to 5; for later pages, send nextCursor. Its totalItems counts the matches found so far and can grow from page to page; it is final once hasNext is false. counts is returned only when the whole result fits in the first page read, and is null otherwise.
- An item can sit in a folder the limit leaves out, as a file the limit names does. Its parentId and parent are then null: the item is returned, and the folder above it is not named.
- A nextCursor or prevCursor belongs to the limit it was read under. A token with a different limit that sends it gets a 400; start that listing again without a cursor.
Access control
Requires a valid bearer token. For OAuth tokens the kb:read scope must be present; regular JWT bearer tokens pass through without scope enforcement. Only nodes the caller can access are listed.
Request checking
This route has no request validator of its own; the query is passed on and checked by the connector service. Query parameters not listed here are ignored. A wrong type for page, limit, onlyContainers or flattened (or page below 1 or limit outside 1-200, or either sent more than once) is answered 422; a refused filter value is answered 400.
Request
- Base URLhttps://app.pipeshub.com/api/v1
- URLhttps://app.pipeshub.com/api/v1/knowledgeBase/knowledge-hub/nodes
- Auth
- HTTP bearer
- or OAuth 2Authorization code: /api/v1/oauth2/authorizeClient credentialsToken URL: /api/v1/oauth2/token scopes: kb:read
Query parameters
When true, only nodes that have children are returned (useful for building sidebar / tree navigation). Leaf nodes are excluded. yes/no, on/off and 1/0 are read as booleans too; anything else is answered 422.
Page number (1-indexed, at most 50). Combined with limit to paginate results. Prefer cursor: a page number is reached by reading the pages before it. A search by a connected app whose limit names any spaces, folders or files takes a page number of at most 5; for later pages, send nextCursor.
Opaque cursor from pagination.nextCursor or pagination.prevCursor of a previous response. It decides the listing mode, parent, filters and sort. include and limit come from this request. A next cursor returns the following page, and a previous cursor returns the page before. A cursor whose parent disagrees with the URL, or that was issued for another user, is refused with 400.
Maximum number of items to return per page.
Field to sort results by. Omitted → default updatedAt. Any other value is answered 400 ("Invalid sort_by: ...").
Sort direction. Omitted → default desc. Read case-insensitively; any other value is answered 400 ("Invalid sort_order: ...").
Full-text search query. Must be between 2 and 500 characters (inclusive) after surrounding whitespace is removed, otherwise 400. When provided, the endpoint searches across the entire node tree regardless of the current browse level. A repeated q is joined with commas into one query, and a q sent as an object (q[a]=b) is refused with 400 ("Search query must be text").
Comma-separated list of node types to include. An unknown value is answered 400 ("Invalid node_types value(s): ..."). Maximum 100 items.
Valid values: folder, app, recordGroup, record
Comma-separated list of record types to include. An unknown value is answered 400 ("Invalid record_types value(s): ..."). Maximum 100 items.
Valid values: FILE, DRIVE, WEBPAGE, DATABASE, DATASOURCE, MESSAGE, MAIL, GROUP_MAIL, TICKET, COMMENT, INLINE_COMMENT, CONFLUENCE_PAGE, CONFLUENCE_BLOGPOST, SHAREPOINT_PAGE, SHAREPOINT_LIST, SHAREPOINT_LIST_ITEM, SHAREPOINT_DOCUMENT_LIBRARY, LINK, PROJECT, PULL_REQUEST, MEETING, PRODUCT, DEAL, CASE, TASK, ARTIFACT, CODE_FILE, SQL_TABLE, SQL_VIEW, OTHERS
Comma-separated list of origin types to include. An unknown value is answered 400 ("Invalid origins value(s): ..."). Maximum 100 items.
Valid values: COLLECTION, CONNECTOR
Comma-separated list of connector instance IDs (UUIDs) to filter by. Maximum 100 items. No enum validation — any string is accepted, but non-existent IDs simply yield zero results.
Comma-separated list of indexing statuses to include. An unknown value is answered 400 ("Invalid indexing_status value(s): ..."). Maximum 100 items.
Valid values: NOT_STARTED, PAUSED, IN_PROGRESS, COMPLETED, FAILED, FILE_TYPE_NOT_SUPPORTED, AUTO_INDEX_OFF, EMPTY, ENABLE_MULTIMODAL_MODELS, QUEUED, SKIPPED, PASSWORD_PROTECTED
Created-date range filter. Format: gte:<epochMs>,lte:<epochMs>. Both bounds are optional (you may send just gte:... or just lte:...). Timestamps must be in the range 0 to 9999999999999 and gte must be less than or equal to lte when both are present; a bound that is not a whole number, is out of range, or an inverted range is answered 400. A value with no gte:/lte: part is ignored.
Updated-date range filter. Same format and constraints as createdAt.
File-size range filter in bytes. Format: gte:<bytes>,lte:<bytes>. Both bounds are optional. Values must be non-negative and at most 1099511627776 (1 TB). gte must be less than or equal to lte when both are present.
Force flattened/recursive search (true) or direct top-level listing (false). When omitted, it's computed from whether any of q, nodeTypes, recordTypes, origins, connectorIds, indexingStatus, createdAt, updatedAt, or size are present — if any are, results are flattened automatically; otherwise only top-level nodes are returned.
Comma-separated list of additional response sections to include. An unknown value is answered 400 ("Invalid include value(s): ..."). Maximum 100 items.
Valid values: breadcrumbs, counts, availableFilters, permissions
Response
Paginated list of root hub nodes (connector apps and Collections). HTTP 200 returns success: true and error: null. Field-level detail and required keys are defined on KnowledgeHubNodesResponse.
Use include for optional sections: availableFilters, counts, permissions — each stays JSON null when not asked for. breadcrumbs stays null at this route (no parent in the path), even if include lists breadcrumbs; use the child route for trails. id, currentNode, and parentNode are null here.
Changes
- breaking
the response property
/became nullable for the status - breaking
the response property
/became nullable for the status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
to the response with the status - info
added the optional property
to the response with the status - info
removed the
HTTP_BAD_REQUESTenum value from the/response property for the response status - info
removed the
HTTP_FORBIDDENenum value from the/response property for the response status - info
removed the
HTTP_INTERNAL_SERVER_ERRORenum value from the/response property for the response status - info
removed the
HTTP_UNAUTHORIZEDenum value from the/response property for the response status
- breaking
- info
added the non-success response with the status
- info
added the non-success response with the status
- info
added the optional property
//to the response with the status
- info