Import
Bulk import data into your knowledge base. The import endpoint accepts the same source configuration options as thekiwifs import CLI command.
Pages created or updated.
Rows unchanged since last import.
Pages tombstoned with
_archived_at during a full sync (when source rows disappear).Per-row error messages.
Source types
Source types
| Source | Config value | Description |
|---|---|---|
| PostgreSQL | postgres | Import from PostgreSQL queries |
| MySQL | mysql | Import from MySQL queries |
| MongoDB | mongodb | Import from MongoDB collections |
| SQLite | sqlite | Import from SQLite databases |
| CSV | csv | Import from CSV files |
| JSON | json | Import from JSON or JSONL files |
| Notion | notion | Import from Notion workspace |
| Airtable | airtable | Import from Airtable bases |
| Google Sheets | gsheets | Import from Google Sheets |
| Confluence | confluence | Import from Confluence spaces |
| Obsidian | obsidian | Import from Obsidian vaults |
| DynamoDB | dynamodb | Import from DynamoDB tables |
| Redis | redis | Import from Redis keys |
| Elasticsearch | elasticsearch | Import from Elasticsearch indices |
| Firestore | firestore | Import from Google Firestore |
| YAML | yaml | Import from YAML files |
| Excel | excel | Import from .xlsx spreadsheets |
| Markdown | markdown | Import from a folder of .md files |
Mapping template syntax
Mapping template syntax
Use double-brace templates to map source fields to KiwiFS file paths and frontmatter:
Upload file for import
Upload a file to the server for import processing.POST /import calls.
List supported sources
Import browse
List tables or collections for a source before you run a full import. Same base URL prefix:http://localhost:3333/api/kiwi.
from (same family as POST /import):
from | Required fields (typical) |
|---|---|
postgres | dsn |
mysql | dsn |
mongodb | uri (or dsn), database |
firestore | project, optional credentials JSON |
from values return 400 when browse is not implemented for that source.
Import preview
Fetch sample rows without writing pages. Uses the same JSON shape asPOST /import, plus optional limit (default 5, max 20).
Import connections
When a connection store is enabled, the server persists metadata only (never secrets). Re-runs require credentials in the request body.| Method | Path | Purpose |
|---|---|---|
GET | /import/connections | List saved connections (empty array if disabled). |
POST | /import/connections | Save or update metadata (from, name, dsn, uri, table, collection, database, database_id, base_id, table_id, project, prefix, id_column, columns, last-run stats, etc.). |
DELETE | /import/connections/:id | Remove a connection. 204. |
POST | /import/connections/:id/run | Run import again. Body may include credentials and/or api_key for that run only. Response matches POST /import: { "imported", "skipped", "archived", "errors" }. |
POST | /import/connections/:id/sync | Enable, pause, or change auto-sync interval. Body: { "enabled": true, "interval": "1h" }. |
Ingest from files
Convert supported office and document formats to markdown (MarkItDown pipeline).filemust use an extension the server accepts for MarkItDown.split_modedefaults tosingle.
Export
Export your knowledge base in structured formats.Output format:
jsonl, csv, or parquet.Scope export to a subdirectory (e.g.
concepts).Comma-separated frontmatter fields to include as columns.
Include the full markdown body in the export.
Include outgoing wiki links for each page.
Include vector embeddings (if available).
Maximum number of pages to export.
JSONL output
Each line is a JSON object representing one page:CSV output
Document export
Render markdown to PDF, HTML, slides, or a static site:Airbyte endpoints
| Method | Path |
|---|---|
POST | /import/airbyte/spec |
POST | /import/airbyte/check |
POST | /import/airbyte/discover |
POST | /import/airbyte-cloud/check |
POST | /import/airbyte-cloud/discover |
GET | /import/airbyte-cloud/connections |
POST | /import/airbyte-cloud/sync |
GET | /import/sync/status |