Knowledge-base routes are nested under a doubled path:
/v1/knowledge-base/knowledge-bases/.... Semantic search is the exception —
it lives at /v1/knowledge-base/search.Creating a knowledge base
Create a KB withPOST /v1/knowledge-base/knowledge-bases. Only name is required; the embedding model, chunking, and retrieval settings all have sensible defaults.
Request
id, the resolved embedding_model and embedding_dimensions, document_count, and the default_sensitivity_level floor (defaults to 10 = internal).
Ingesting content
All ingestion goes through one unified endpoint:POST /v1/knowledge-base/knowledge-bases/{kb_id}/ingest. It accepts a multipart/form-data request with two parts:
manifest(required) — a JSON array describing each item to ingest.files(optional, repeatable) — file uploads, referenced from the manifest byfile_index.
manifest
document_id to ingest a new version of an existing document. To pull in web pages, use a connector (below) rather than the ingest endpoint — the manifest supports only file and text.
The endpoint returns 202 with an ingestion_job_id and a per-item result of queued or duplicate.
Tracking ingestion
Ingestion is asynchronous. Poll progress two ways:
A job moves through
queued → processing → a terminal state of completed, partial_failure, failed, duplicate, or quarantined. Retry a failed or partially failed job with POST /v1/knowledge-base/ingestion-jobs/{job_id}/retry.
ingestion-status returns counts of documents in each state
(pending, processing, active, draft, archived, failed,
quarantined, total) — not a per-document list. For per-document detail,
call GET .../ingestion-jobs/{job_id}/documents.Semantic search
Query a KB withPOST /v1/knowledge-base/search:
Request
Each result carries
content (the chunk text), a score, and the source document_id, document_title, and chunk_index. The response also includes an answerability verdict — a label of answerable, low_confidence, not_answerable, or unknown — so you can tell whether the KB actually covers the question rather than just returning the closest chunks.
Sensitivity and access control
Feather grades every document with a sensitivity level, and every assistant revision with a matching clearance. Retrieval only returns documents at or below the assistant’s clearance.
A document’s stamped
sensitivity_level is the maximum of three signals: the KB’s default_sensitivity_level floor, a PII-based floor, and an LLM classifier. An assistant revision’s kb_clearance_level (one of 0, 10, 20, 30) then gates retrieval: it sees any document whose sensitivity_level is less than or equal to its clearance. So a restricted (30) assistant sees everything, while a public (0) assistant sees only public documents.
Sensitivity is per document, not per knowledge base — a KB only sets a
default floor. New documents can enter a review queue
(
classification_status of pending_review); approve them with
POST .../documents/{doc_id}/classification/approve.Organization ACL
Beyond per-document sensitivity, an organization-level ACL maps your Clerk roles to clearance levels and audience groups (GET/PUT /v1/knowledge-base/acl/config). Enforcement is gated behind a rollout you control with a preflight check and explicit enable/disable (POST .../acl/rollout/preflight, .../enable, .../disable).
External sources (connectors)
Instead of uploading files, connect an external source and let Feather sync it. Sources live under a KB:POST /v1/knowledge-base/knowledge-bases/{kb_id}/sources. Supported providers:
Notion
Sync pages and databases. Requires an active Notion integration connection.
Google Drive
Sync files and folders. Requires an active Google Drive integration connection.
Amazon S3
Sync objects from a bucket. Provide access-key or role credentials inline.
Web (URL)
Crawl and index web pages. No connection required.
POST .../sources/{source_id}/sync, or schedule automatic syncs with PATCH .../sources/{source_id}/schedule by setting auto_sync_enabled and a sync_interval_seconds.
Attaching a KB to an assistant
Add a KB to an assistant revision via theknowledge_base_refs field. Each ref is { id, description?, clearance_level? }. The optional per-ref clearance_level can only lower the effective clearance for that KB below the revision’s kb_clearance_level — never raise it.
Next steps
Ingest documents
A hands-on guide to the unified ingest endpoint, polling jobs, and connecting external sources.
Knowledge base API reference
Full reference for KB, document, ingestion, search, and connector endpoints.