Vector Stores Quick Start

A Vector Store is a named, persistent knowledge base. You put text in (typed, uploaded, or pushed by a flow), HostWebhook splits it into chunks, turns each chunk into an embedding with your API key, and stores it. From then on you can ask it questions in plain language and get back the passages that actually answer them — from the dashboard, from the Vector Store node in a flow, or as a tool an AI Node can call on its own.

Everything on this page lives under Settings → Vector Stores in the dashboard. Nothing here requires the API or the CLI.

The five-minute path

1

Settings → Vector Stores → + New store

The button is disabled when your plan is at its store cap — the usage strip at the top of the list page tells you where you stand.

2

Name it

Company Docs, Support Playbook. The name is what an AI Node turns into a tool name later (query_company_docs), so pick something a model can read. The optional description is reused there too — it becomes the sentence the model reads to decide whether to search this store.

3

Pick an embedding provider and model

OpenAI text-embedding-3-small is preselected and is the right default: 1536 dimensions, $0.02 per million tokens. Each model tile shows its dimensions, input cap, and price.

4

Pick a credential

The picker filters to credentials of the matching provider, and lets you paste a key inline if you have none. Embeddings are billed to your key — on ingest and on every query. HostWebhook does not proxy through a shared key.

5

Pick a backend

HostWebhook (managed) needs no configuration and is the default. Choose your own MongoDB Atlas or Postgres cluster if you want the data to stay in your infrastructure — see Choosing a backend.

6

Leave chunking alone for now

Recursive / 500 / 50 works for prose. Read Chunking before changing it — the units are not what most people assume.

7

Create store → Ingest tab → paste or upload → Ingest

The toast reports how many chunks landed. Switch to the Query tab and ask a real question. If the top result is the passage you expected, the store works.


What each field on the store actually does

FieldWhat it controlsEditable later?
Name / DescriptionDisplay and search — and the AI-tool name and description generated from themYes
Embedding providerWhich API turns text into vectorsNo — immutable
Embedding modelQuality, price, and vector dimensionsNo — immutable
CredentialWhich API key gets billedYes — but only to another credential of the same provider
BackendWhere the chunks physically liveNo — immutable
ChunkingHow incoming text is split before embeddingYes — applies to future ingests only
Strict scan modeWhether file ingest waits for a clean malware verdictYes — takes effect immediately
Provider, model, dimensions, and backend carry an Immutable badge on the store detail page for a concrete reason: every chunk already in the store was vectorised under those settings. Vectors from two different models are not comparable, so changing them would silently poison retrieval instead of failing loudly. To switch models, create a second store and re-ingest.

Choosing a backend

BackendYou configureCounts against your quota?
HostWebhook (managed)Nothing. Indexing, scaling, and backups are ours.Yes — chunk count and managed storage both
MongoDB Atlas (your own)Credential, database, collection, vector index nameNo
PostgreSQL (pgvector)Credential, schema, table, dimensionsNo

Both bring-your-own backends show a Test connection button as soon as every required field is filled, and the result is actionable rather than a bare pass/fail:

  • MongoDB — reports the server version, whether the cluster supports vector search, and whether your named index exists. When it does not, it prints the exact JSON to paste into Atlas (Search → Create Search Index → JSON).
  • Postgres — reports the Postgres and pgvector versions. If the extension or the table is missing you get the SQL and a one-click Auto-setup button that runs it idempotently, then re-tests.

The same Re-test connection button lives in the Backend section of an existing store, which is the fastest way to find out that someone dropped the index or rotated the password. Full walkthroughs: Bring your own MongoDB and Bring your own PostgreSQL. For a cluster that is not reachable from the public internet, pair the credential with a reverse tunnel.

A model whose vector index has not been provisioned yet shows a Coming soon chip and cannot be selected. On the managed backend each embedding dimension needs its own Atlas Vector Search index (vsc_vec_1536, vsc_vec_3072, and so on) — the chip means that index does not exist yet, not that the model is unsupported in general. On your own cluster you create the index yourself, so the constraint does not apply.

Chunking — the part that decides whether retrieval works

Embeddings are computed per chunk, and a query returns chunks. Chunk size is therefore not a storage detail: it is the size of the answer you get back.

Size and overlap are measured in characters, not tokens. The default 500 is roughly 125 tokens. Advice written for other tools is almost always in tokens — if a guide tells you to use 800 tokens, type about 3200 here. This is the single most common cause of “the vector store never finds anything”: with the default, a 2000-character section is split into four fragments and none of them holds the whole thought.
SettingDefaultRangeNotes
Strategyrecursiverecursive · fixedRecursive splits on paragraph, then line, then sentence, then word — it cuts where the text already breaks. Fixed cuts deterministic N-character windows.
Size50050 – 8000Characters.
Overlap500 – 4000Characters repeated between neighbours so a sentence split across the seam still matches. Its ceiling is 4000 whatever the size is, and it also has to stay below the size — saving is blocked, and the field turns red, until both hold.

Content type changes how text is split

Pasted text and extracted files are sniffed, and each detected type gets a strategy that respects its structure instead of cutting blindly:

  • JSON — descends the structure: one array element or one object key per chunk, and plain text is cut only as a last resort.
  • CSV — grouped by rows, repeating the header on every chunk so each one is readable on its own.
  • Markdown — split on ## headings first.
  • Code — detected from language keywords, split with code-friendly separators.
  • Prose — the fallback, and what everything ambiguous becomes.
Two asymmetries worth knowing before you blame the model:
  • Uploaded files are typed by MIME, not sniffed. A .txt file is treated as prose even when it is full of Markdown headings — only text/markdown gets heading-aware splitting. The same content pasted into the text box is sniffed and chunks better. Upload .md, not .txt.
  • The JSON path ignores Size. It uses its own max-characters-per-chunk (4000 by default), which only the Vector Store node's Advanced tab can override. So if you change Size and the chunk count does not move at all, your content is going down the JSON path and that number never applied.
Changing chunking does not re-chunk what is already stored. Identical content is skipped by a content-hash dedup, so re-ingesting the same document leaves the old fragments in place and puts the new ones next to them. To genuinely re-chunk a document, delete its chunks first (Content tab, or a Vector Store node in delete mode by sourceDocId), then ingest again.

Putting content in by hand

The Ingest tab of a store takes a file, a block of text, or both at once.

  • Files — PDF, CSV, JSON, and anything text/*. Images and other binaries are rejected. DOCX and XLSX need converting first — do it with a File Transform node in a flow.
  • Text — pasted CSV or JSON is auto-detected and chunked accordingly. The counter under the box estimates how many chunks you are about to create.
  • Source doc name — a human label, and the filter you will use in the Content tab and in query results.
  • Source doc id — the logical identity of the document: a URL, a hash, a page id. This is what delete-by-document and the node's upsert toggle key on later.
Give every document a stable sourceDocId from the start. Without one, the only way to remove an outdated document is to delete its chunks one at a time in the Content tab, or flush the whole store.

The other tabs

  • Content — every chunk, paginated 50 at a time, filterable by source document name or by a substring of the chunk text. Click a row to read the full chunk; delete a chunk from its row. This is where you check what the chunker actually produced.
  • Query — a playground. Type a question, set Top K, and read the scores. Scores are cosine similarity: above 0.8 is a strong match, 0.6 to 0.8 is plausible, below that is usually noise.
  • Audit — the last 100 accesses (create, update, insert_chunks, query, delete, delete_chunks) with timestamp and source IP.

Pause, flush, delete

ActionWhat survivesUse when
PauseEverything. Reversible.You want to stop spending on embeddings without losing the corpus.
FlushThe store: name, embedding config, credential, backend. Every chunk is deleted.You changed chunking and want to re-ingest from scratch.
DeleteNothing.The store is obsolete — note that nodes and AI tools pointing at it break.

Quotas and what they measure

LimitFreeProEnterprise
Vector stores110unlimited
Chunks (managed backend)10,0001,000,000unlimited
Bring-your-own backends15unlimited
Managed storage (whole organization)5 MB5 MB5 MB
The managed-storage jar is shared across the whole organization and is the same on every plan. It counts the text — the characters of your chunks plus the AI Node's built-in memory — not the stored documents with their embeddings. Chunks kept in your own MongoDB or Postgres are not counted at all: that is exactly the escape hatch the “storage full” message points you to.

Security

  • Prompt-injection sanitising is always on. Every chunk is stripped of ChatML / Llama / FIM control tokens before it is embedded. There is no switch, because a poisoned chunk retrieved into an agent's context is indistinguishable from an instruction the user wrote.
  • Strict scan mode (on by default, per store) blocks file ingest until the malware scanner returns a clean verdict. Turning it off falls back to the platform-wide gate, which lets a file through while its scan is still pending. Leave it on for any store an AI agent can read.
  • Credentials are encrypted at rest and decrypted only for the duration of one call. Marking a credential sensitive hides host and database from API responses while keeping it functional.
  • Metadata filters are data, never query structure. A filter must render to a flat object of scalar values. Objects, arrays, and keys starting with $ are rejected, and a filter that fails to render aborts the operation instead of falling back to no filter — a filter nobody understands must never quietly widen into “everything”.

Using a store from a flow or an agent

The Vector Store node

Drop a Vector Store node on the canvas to insert, query, or delete chunks as part of a pipeline: scrape a page and index it, answer an incoming question with retrieved context, drop a document when the source system deletes it. Full reference: Vector Store node.

As a tool on an AI Node

On an AI Node, Tools → add a Vector Store turns each selected store into a callable tool named after it — a store called “Company Docs” becomes query_company_docs, described with the store's own description plus how many chunks it holds. The model decides when to search and with what phrasing; you keep control of the envelope:

  • Default Top K — how many passages come back. The model may raise it up to 20.
  • Min score — a floor the model cannot change. Matches below it never reach the context window.
  • Name and description — editable, and worth editing: they are the only thing the model reads when deciding whether this store is relevant.

The store binding itself is fixed once added — remove the tool and re-pick to point it somewhere else.


Troubleshooting

Queries return nothing, or nothing relevant

Work through it in this order. Open the Content tab and read a few chunks: if they end mid-sentence, your chunks are too small — raise Size (remember: characters), flush, and re-ingest. If the content looks right, run the same question in the Query tab with no min score and look at the raw scores; if the best is around 0.5 the store simply does not contain the answer. If a node returns nothing but the playground works, the difference is almost always a metadata filter or a min score set on the node.

Changing chunk size does not change the number of chunks

Your content is JSON, and the JSON path uses its own limit. Set Max chars/chunk under JSON in the Vector Store node's Advanced tab, or feed the store plain text instead.

A metadata filter errors on the managed backend

Atlas requires every field used in a vector-search filter to be declared in the index, and the managed index declares only the tenancy field. Filtering by chapter therefore fails — it does not return an empty result, which makes it look like a data problem. Options: use a bring-your-own Postgres store, where any metadata key filters with no setup; use your own Atlas cluster and declare the paths in your index; or split the distinction into separate stores.

“At the cap” — the New store button is disabled

Plan limit on the number of stores. Delete an unused store or upgrade. The chunk counter next to it is a separate limit: hitting that one blocks ingest, not creation.

A model shows “Coming soon” and cannot be picked

Its vector index has not been provisioned on the managed cluster. Pick another model, or use a bring-your-own backend where you create the index yourself.

Ingest fails with a scan status message

Strict scan mode is on and the file has not been cleared yet. Wait a few seconds and retry — a verdict of infected or scan_failed is blocked in every mode.

textA store that behaves — quick checklist
[x] sourceDocId set on every document you may want to remove later
[x] chunk Size in characters, sized to the shape of your content
[x] .md uploaded as .md, not .txt
[x] Query tab returns > 0.8 for a question you know the answer to
[x] min score set on the node or tool, not left to chance
[x] BYO backend re-tested after any cluster change