Qdrant is the integration named
qdrant on the wire, with integration_type knowledge_provider. It ships one auth schema of type custom (“Qdrant Connection”). Unlike managed knowledge (the modulexdb provider), ModuleX does not ingest, chunk, embed, or store documents for you in Qdrant — you own the collections, the points, and the embeddings. ModuleX only queries what is already in your Qdrant.How Qdrant fits in ModuleX
ModuleX treats a vector store one of two ways:Managed (modulexdb)
ModuleX hosts the vectors, ingests and embeds your documents, and bills retrieval and ingest in credits. See Managed knowledge.
BYOK (Qdrant, external)
You host the vectors in your own Qdrant. ModuleX queries them through an adapter using a credential you create. Retrieval is uncosted — no credits, no billing gate.
embedding_config; ModuleX raises a configuration error without one.
🎬 MEDIA PLACEHOLDER · MX-MEDIA-4130 · [IMAGE]
[IMAGE_DESCRIPTION]: Diagram of the BYOK Qdrant retrieval path inside a workflow run.
[IMAGE_DETAILS]: Show: workflow Knowledge node receives a query string, then “embed query” using the configured embedding model (e.g. OpenAI), producing a vector; the vector plus collection name go to the user’s Qdrant instance over its REST API (
POST /collections/{name}/points/search); matched points return to the node, which formats them as chunks or a context string into run state. Annotate “BYOK — runs on your Qdrant, no ModuleX credits”. Light theme, 16:9, left-to-right flow.Before you start
A reachable Qdrant instance
A Qdrant Cloud cluster or a self-hosted Qdrant that ModuleX can reach over HTTP(S), with at least one collection that already contains embedded points.
Owner or admin role
Creating and managing credentials, and browsing the integration catalog, require the owner or admin role in your organization. The retired
member role cannot do this. See Roles & permissions.Your auth headers
Every API call sends
Authorization: Bearer mx_live_… and X-Organization-ID. See Authentication.A matching embedding model
Know which embedding model and dimension produced the vectors in your collection, so you can configure the same model for query embedding.
Connect Qdrant
You connect Qdrant by creating acustom credential for the qdrant integration. The credential stores your Qdrant URL and (optionally) an API key. ModuleX encrypts the credential at rest and never returns the secret material in clear text.
Gather your Qdrant connection details
Note your Qdrant URL (including the port — Qdrant’s REST API listens on
6333 by default) and, for Qdrant Cloud, your API key. A local instance typically needs no API key.(Optional) validate the connection before saving
Call
POST /credentials/test-temporary to check the connection before persisting it. ModuleX runs Qdrant’s configured test — a GET {url}/collections with your api-key header — and reports is_valid. See Validate a connection before saving.Create the credential
Call
POST /credentials with integration_name: "qdrant", auth_type: "custom", and an auth_data object holding url and optional api_key. Set make_default: true to make it the default Qdrant credential for the organization.Reference it from a Knowledge node
Use the returned
credential_id (plus a collection_name and an embedding_config) in a workflow Knowledge node. See Configure a Knowledge node for Qdrant.🎬 MEDIA PLACEHOLDER · MX-MEDIA-4131 · [SCREENSHOT]
[SCREENSHOT_DESCRIPTION]: The ModuleX app credential dialog for connecting Qdrant.
[SCREENSHOT_DETAILS]: Capture the “Connect Qdrant” / “Qdrant Connection” credential form in the integrations/credentials area of the app. Show the Qdrant logo, the Qdrant URL field (placeholder
https://xyz-abc.aws.cloud.qdrant.io:6333), the optional API Key field (masked, marked optional, placeholder qdrant-api-key-...), the “Set as default” toggle, and the Test/Save buttons. Light theme, 16:9, crop to the dialog.Connection fields
The Qdrant auth schema is a singlecustom schema named “Qdrant Connection” with two fields. Send them inside auth_data.
The base URL of your Qdrant instance, including the port — for example
https://xyz-abc.aws.cloud.qdrant.io:6333. A trailing slash is stripped. When omitted at run time the adapter falls back to http://localhost:6333, but the field is required when you create a credential. Not sensitive.Your Qdrant Cloud API key. Optional — leave it unset for local or unauthenticated instances. Sent to Qdrant as the
api-key request header. Sensitive; stored encrypted and masked in responses.Create the credential
POST /credentials returns 201. For Qdrant you must send auth_type: "custom" because the connection is not an api_key-only schema (the URL is part of the connection). See the full credential model in Credentials & OAuth2.
Must be
qdrant.custom.The connection material —
{"url": "...", "api_key": "..."}. api_key may be omitted for instances that do not require one.A human-readable label. Defaults to the integration’s display name (
Qdrant) when omitted.Set this credential as the default Qdrant credential for the organization. Only one credential per integration can be the default.
201 Created (secret masked):
The credential’s UUID. Pass this as
credential_id in a Knowledge node to use this Qdrant connection.qdrant.knowledge_provider.custom.Whether this is the organization’s default Qdrant credential.
ISO-8601 timestamp of the last resolution, or
null if never used.Validate a connection before saving
POST /credentials/test-temporary validates the connection before you persist it. ModuleX runs Qdrant’s configured test endpoint — GET {url}/collections, sending the api-key header — and treats HTTP 200 with a result field present as success. The test is free (cost_level: "free").
qdrant.custom.{"url": "...", "api_key": "..."}.is_valid, a human-readable message, tested_at, the test_method, and the status_code returned by Qdrant.
Configure a Knowledge node for Qdrant
A workflow Knowledge node is the surface that retrieves from Qdrant during a run. For an external provider you setprovider_type to qdrant, point it at a collection_name, and supply an embedding_config so ModuleX can embed the query before searching. The full node configuration is below; fields marked (external) apply to Qdrant and the other external providers, and fields marked (native only) apply only to modulexdb.
The UUID of the Qdrant credential to use.
One of
modulexdb, qdrant, pinecone, weaviate, mongodb_atlas. Set it to qdrant.The search query. Supports
{{nodeId.path}} references so the query can come from an earlier node’s output. See Variables & references.When
true, use the workflow input as the query instead of the query field.(external) The Qdrant collection to search. Required for Qdrant — the node raises a configuration error without it.
(external) Namespace, used by Pinecone-style providers. Qdrant does not use namespaces; leave it unset.
(external) Required for Qdrant. The model ModuleX uses to embed the query into a vector before searching Qdrant. See The
embedding_config object.Number of results to retrieve. Range
1–50. Passed to Qdrant as the search limit.Minimum similarity-score floor,
0.0–1.0. When greater than 0, sent to Qdrant as score_threshold; Qdrant drops points below it.Maximum tokens in the formatted context string (used when
output_format is context or both). Range 100–10000.(external) A provider-specific filter, passed straight to Qdrant as its
filter clause. Use Qdrant’s filter syntax (for example must/should/must_not conditions on payload fields).(native only) Restrict retrieval to specific document IDs. Applies to modulexdb knowledge bases, not Qdrant.
How results are written into run state —
chunks (individual matches with metadata), context (one RAG-ready context string), or both.Include each match’s payload/metadata in the results. Maps to Qdrant’s
with_payload.Include source-document info in the formatted context string.
The embedding_config object
Qdrant stores vectors but does not embed text, so the Knowledge node embeds your query first. embedding_config selects the embedding model and is required for Qdrant.
The embedding provider integration, for example
openai. See LLM providers.The provider routing slug, for example
openai.The embedding model id, for example
text-embedding-3-small. Must match the model that produced the vectors in your collection.The credential for the embedding provider. When
null, ModuleX uses the organization’s default credential for integration_name.Knowledge node config (Qdrant)
The Knowledge node is configured on the canvas in the workflow builder, or programmatically as part of a workflow’s node graph. There is no standalone REST endpoint that queries an external provider directly — Qdrant retrieval happens inside a workflow run. The native knowledge-bases search API (
POST /knowledge-bases/{id}/search) targets modulexdb, not Qdrant.How BYOK retrieval works
When a Knowledge node withprovider_type: "qdrant" executes during a run, ModuleX:
Resolves and decrypts the credential
Loads your Qdrant credential for the current organization and decrypts the
url and api_key. A missing or wrong-org credential fails the node with a credential error. See Data security & encryption.Embeds the query
Because Qdrant requires a query vector, ModuleX embeds the resolved
query using your embedding_config. Without embedding_config, the node raises a configuration error.Searches your Qdrant collection
The Qdrant adapter calls
POST {url}/collections/{collection_name}/points/search with the query vector, limit (top_k), with_payload (include_metadata), with_vector, an optional score_threshold (min_score), and any filters. It sends the api-key header when an API key is set.Normalizes and formats results
Each Qdrant point becomes a standard match (
id, score, extracted text content, payload metadata). Text content is pulled from common payload fields (content, text, chunk_text, page_content, data, body, summary, document). The node then writes them into run state as chunks, a context string, or both per output_format. See Workflow engine & nodes.BYOK billing
Qdrant is bring-your-own. Retrieval runs against your Qdrant instance and is not metered in ModuleX credits. Only managed knowledge —modulexdb knowledge bases — is credit-billed for retrieval and ingest.
No ModuleX credit charge
Querying Qdrant draws down no plan allowance and no wallet balance. There is no per-retrieval credit cost.
No billing-gate denials
Because BYOK retrieval is uncosted, a Qdrant Knowledge node never produces the
402/403/429 DenialEnvelope that managed knowledge can. See Usage gating & limits.Embedding may still cost
The query-embedding step uses your
embedding_config. If that points at a BYOK model (for example OpenAI), the embedding is billed by that provider. If it points at a managed model, the embedding is credit-metered.Hosted by you
Storage, indexing, and query throughput for your Qdrant are governed by your Qdrant Cloud plan or self-hosted capacity, not by ModuleX.
Browse Qdrant in the catalog
The integration catalog is the read-only discovery surface. Use it to fetch Qdrant’s metadata, actions, and auth schema. These catalog endpoints authenticate with a Clerk JWT (the app token) rather than anmx_live_* API key, and still require X-Organization-ID and the owner/admin role.
qdrant.200 OK, an IntegrationDetail:
qdrant.Qdrant.knowledge_provider.["Vector Database", "semantic-search"].The catalog actions Qdrant declares —
query, list_collections, get_collection_info. See Catalog actions.The single
custom “Qdrant Connection” schema, with its fields (url, api_key) and a test_endpoint.null for Qdrant (the package/JSON manifest carries app_url https://qdrant.tech but no docs_url).The integration’s
extra_metadata. Note provider_type (external) is present in the source manifest but is dropped on sync and is not returned by the catalog API.Knowledge-provider auth schemas use a
fields array (not the setup_environment_variables array used by LLM/tool manifests). The catalog returns auth_schemas verbatim, so when you read a knowledge-provider detail, look for fields.Catalog actions
Qdrant declares three actions in its manifest. These describe the operations the provider exposes; in practice they are driven by the Knowledge node (query) and used for connection discovery (list_collections, get_collection_info).
Errors and edge cases
A Qdrant Knowledge node without
collection_name fails with a configuration error before any call to Qdrant.Qdrant requires a query vector. Without
embedding_config, the node fails with an error asking you to configure integration_name, provider_id, model_id, and optionally credential_id.If the
credential_id does not resolve in the current organization, the node fails with a credential-not-found error. Confirm the credential belongs to the org set in X-Organization-ID.Qdrant returning
401 surfaces as an authentication error (“Invalid API key”). Re-check the api_key in your credential.Qdrant returning
404 for the search surfaces as a query error (Collection not found: {name}). Verify the collection exists on that instance.If ModuleX cannot reach the Qdrant URL, the node fails with a connection error. Confirm the URL, port (
6333 by default), and that the instance is reachable from ModuleX.If the query vector’s dimension does not match the collection’s vector size, Qdrant rejects the search. Use an embedding model whose dimension matches the collection.
These errors arise inside a workflow run, so they appear as node/run errors in the run stream rather than as a top-level HTTP error envelope. For the error-envelope shapes on the REST surface, see Errors & status codes.
Managing the credential
Day-to-day operations use the standard credentials API. For Qdrant specifically:- Rotate the URL or key. Secrets are immutable through
PUT /credentials/{id}(that route updates onlydisplay_nameand metadata). To change the URL or API key, create a new Qdrant credential and delete the old one. - Set the default.
POST /credentials/{id}/set-defaultmakes one Qdrant credential the organization default, used when a node resolves to the default. - Test a saved connection.
POST /credentials/{id}/testre-runs Qdrant’s test endpoint against the stored URL and key. - Delete.
DELETE /credentials/{id}removes it and returns204. Knowledge nodes pointing at it will fail credential resolution until another valid Qdrant credential exists.
Where to go next
Knowledge providers
Compare Qdrant with modulexdb and the other external vector stores.
modulexdb (managed)
The credit-metered, ModuleX-hosted alternative that ingests and embeds for you.
Knowledge node
Configure retrieval inside a workflow, including external providers like Qdrant.
Knowledge & RAG
How ModuleX retrieves company knowledge — managed and BYOK.