---
title: "Search knowledge nodes"
method: POST
path: "/v1/kb/nodes/search"
tags: ["kb"]
---

# Search knowledge nodes

`POST /v1/kb/nodes/search`

Paginated, filtered listing of knowledge nodes. Supports cursor-based keyset pagination and optional body inclusion.

## Query parameters

- `workspace_id` string, required — Workspace to query.

## Request body

- object
  - `filters` object
    - `entity_ids` string[] — Restrict to nodes scoped to any of these entities.
    - `source` 'google_drive' | 'notion' | 'airtable' | 'link' | 'pms' | 'ingest' | 'manual' — Filter by ingest source. `manual` for nodes created via the API, `pms` for nodes synced from a PMS, `ingest` for file uploads.
    - `source_type` 'pdf' | 'csv' | 'excel' | 'docx' | 'text' | 'html' — Filter by source format (e.g. `pdf`, `link`, `manual`, `notion`).
    - `source_id` string — Filter by upstream source identifier (e.g. PMS listing id, document hash).
    - `is_directory` boolean — `true` returns only folders, `false` only content nodes.
    - `enabled` boolean — Filter by agent-visibility state.
    - `parent_id` string — Restrict to direct children of this node. Omit to search across the whole workspace.
  - `pagination` object
    - `cursor` string
    - `page_size` integer — Defaults to 20. Max 100.
  - `include_body` boolean — Include full node bodies in the response. Off by default to keep payloads small.

## Response `200`

Knowledge nodes

- object
  - `data` object[], required
    - `id` string, required
    - `workspace_id` string, required
    - `title` string, required
    - `body` string, required
    - `chunk_body` boolean, required — True when the body is chunked and embedded for search.
    - `entity_ids` string[], required
    - `parent_id` string, nullable, required
    - `ancestors` string[], required — Ordered ancestor node ids from root to immediate parent.
    - `depth` number, required — Depth in the tree, 0 = root.
    - `source` 'google_drive' | 'notion' | 'airtable' | 'link' | 'pms' | 'ingest' | 'manual', required
    - `source_type` 'pdf' | 'csv' | 'excel' | 'docx' | 'text' | 'html', nullable, required
    - `source_id` string, nullable, required
    - `is_directory` boolean, required — True for folder nodes that group children.
    - `metadata` object, nullable, required
    - `enabled` boolean, required
    - `created_by` string, nullable, required
    - `embed_status` string, nullable, required — Embedding pipeline state (pending, ready, failed).
    - `chunk_count` number, nullable, required
    - `version` number, required
    - `tags` string[], required
    - `created_at` string, required
    - `updated_at` string, required
  - `next_cursor` string, nullable, required
  - `has_more` boolean, required
  - `total_count` number

## Other responses

- `400` — Invalid request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not found
- `429` — Rate limit exceeded
- `500` — Internal error
- `503` — Knowledge service temporarily unavailable

---

[API](https://skmtc.dev/conduit/apis/conduit-api.md) · [All operations](https://skmtc.dev/conduit/apis/conduit-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/conduit/conduit-api/revisions/3ad7e17f96ad/schema)
