Skip to main content
Feather’s knowledge base pipeline accepts documents from virtually any source — local files, raw text, and third-party platforms like Notion, Google Drive, and S3. Once ingested, documents are chunked, embedded, and indexed so your assistants can perform semantic search at inference time. This guide covers the full ingestion lifecycle: uploading content, tracking job status, connecting external sources, and validating results with a live search query.

Ingest files and text

All file and text uploads go through a single unified endpoint that accepts multipart/form-data. You describe what you’re uploading with a JSON manifest and attach the actual file bytes separately. Endpoint: POST /v1/knowledge-base/knowledge-bases/{kb_id}/ingest The request has two parts: Manifest item formats:
Each item has a type of either text (inline content) or file (references an uploaded file part by its zero-based index). The title is stored with the document and surfaces in search results. Full example — uploading a file and a text snippet together:
Each item in the response reports either queued (accepted for processing) or duplicate (an identical document already exists in the knowledge base and was skipped). Save the ingestion_job_id to track progress.
Duplicate detection is hash-based. If you re-upload the same file after editing it, the content hash changes and it will be ingested as a new version.

Track ingestion status

Ingestion is asynchronous. Documents move through a pipeline — queued → processing → completed (or failed). Poll the job endpoint until status reaches a terminal state. Poll a specific job:
Check aggregate status across the whole knowledge base:
The aggregate counts documents by lifecycle state: pending, processing, active (indexed and live), draft, archived, failed, and quarantined, with total summing them. Use this endpoint on the dashboard or during health checks to confirm your knowledge base is fully indexed — i.e. all documents are active — before going live.
Retry failed documents without re-uploading them. Send a POST to /v1/knowledge-base/ingestion-jobs/{job_id}/retry and Feather will re-queue only the failed items from that job.

Connect external sources

For Notion pages, Google Drive folders, and S3 buckets, Feather syncs content automatically rather than requiring manual uploads. The flow is: create a connection → add the source → define roots → trigger a sync → optionally schedule recurring syncs.
External source integrations require an active integration connection for your provider. See Connect an Integration to set one up before continuing.
1

Add the source to your knowledge base

Supported values for provider: notion, google_drive, s3, and url (web pages). notion and google_drive require an active integration connection; s3 accepts inline credentials and url needs no connection.
2

Add roots

Roots define the top-level pages, folders, or prefixes that Feather will crawl. Everything nested beneath a root is included in the sync.
You can add multiple roots to the same source — for example, different top-level Notion pages for different product areas.
3

Trigger a manual sync

Track this job using the ingestion-jobs/{job_id} endpoint covered in the previous section.
4

Enable automatic recurring syncs

Keep your knowledge base fresh by scheduling periodic syncs. Set sync_interval_seconds to control how often Feather re-crawls the source.
The example above syncs the source every hour (3600 seconds). Set auto_sync_enabled: false to pause automatic syncing without deleting the schedule configuration.

Search your knowledge base

Before connecting a knowledge base to an assistant, validate that your content is indexed and returning relevant results.
A high score means the chunk is semantically similar to the query — not that it’s factually correct. Always review new knowledge bases manually before enabling them in production assistants.

What’s next?

Knowledge Base API Reference

Full endpoint reference for knowledge bases, ingestion jobs, sources, and search.