Qdrant REST API
Qdrant is a high-performance vector database purpose-built for storing, indexing, and querying high-dimensional embeddings. Its REST API (and parallel gRPC API) supports collection management, vector upsert with arbitrary JSON payloads, approximate nearest neighbor (ANN) search with payload filtering, named vectors for multi-modal data, and sparse vectors for hybrid dense+sparse search. Available as self-hosted (Docker/Kubernetes) or Qdrant Cloud.
Score Breakdown
⚙ Agent Friendliness
🔒 Security
Self-hosted Qdrant ships with no TLS and no auth — both must be explicitly configured, making misconfigured deployments a real risk. Qdrant Cloud enforces TLS and API key auth. API key scopes are binary (read-only vs. read-write) with no collection-level granularity. The Rust implementation has a strong memory safety profile and minimal CVE history. For production self-hosted: configure TLS termination at the load balancer, QDRANT__SERVICE__API_KEY env var, and network-level access restrictions. Read-only API keys should be used for agents that only need search, not upsert/delete.
⚡ Reliability
Best When
An agent needs semantic similarity search over embeddings with flexible payload filtering, especially in RAG pipelines or memory systems where results must be ranked by relevance AND filtered by metadata attributes simultaneously.
Avoid When
You only need exact-match retrieval, or your vector dimensionality and dataset size fit comfortably in an in-process library like FAISS without the operational overhead of a separate service.
Use Cases
- • RAG (Retrieval-Augmented Generation) memory: store document chunk embeddings and retrieve top-k by semantic similarity
- • Agent long-term memory: upsert conversation summaries as vectors and recall relevant past context at inference time
- • Semantic deduplication: find near-duplicate content by vector distance before inserting into a primary store
- • Hybrid search combining dense embedding similarity with BM25 sparse vectors for keyword relevance
- • Recommendation systems: query by example vector with payload filters (e.g., 'similar items in category=shoes, price<100')
- • Image and multi-modal search using named vector fields for different modality embeddings per point
- • Clustering and anomaly detection over agent-generated data using collection snapshots
Not For
- • General-purpose relational or document storage — Qdrant payloads are metadata, not a primary data store
- • Exact-match key-value lookups where a hash table is simpler and cheaper
- • ACID transactional workloads requiring rollback semantics
- • Real-time streaming ingestion at millions of vectors/second without careful batch sizing
Interface
Authentication
Self-hosted Qdrant has no auth by default — the API is open on port 6333. API key auth must be explicitly enabled via config (api_key field in config.yaml or QDRANT__SERVICE__API_KEY env var). Qdrant Cloud enforces API key auth with per-cluster keys; a read-only key variant is available. There are no fine-grained permission scopes beyond read-only vs. read-write. For production self-hosted deployments, TLS + API key + network-level isolation are all required because the API key is the only credential layer.
Pricing
Self-hosted Docker is the fastest path to zero-cost evaluation. Qdrant Cloud free cluster is useful for development without infrastructure management. Production HA requires at minimum 3-node cluster for replication factor >= 2.
Agent Metadata
Known Gotchas
- ⚠ Self-hosted Qdrant has NO authentication by default — any unauthenticated request succeeds; agents must verify API key is configured before treating the instance as secure
- ⚠ Vector dimensions must exactly match the collection's configured size at creation time; inserting a 1536-dim vector into a 768-dim collection returns a cryptic 'Wrong input: Vector inserting error' with no mention of dimensionality mismatch
- ⚠ HNSW index is built asynchronously after upsert — immediately searching after bulk upsert may return 0 results or incomplete results; agents should check collection 'indexed_vectors_count' before querying or use the 'wait=true' parameter on upsert
- ⚠ Payload filters use a different syntax from most query languages (match, range, geo_bounding_box objects) — agents generating filters from natural language frequently generate invalid filter objects that return 0 results instead of an error
- ⚠ Qdrant point IDs must be either unsigned 64-bit integers or UUIDs — string IDs like 'doc_abc' are not supported and cause a 400 error that is easy to encounter when porting from other vector stores
- ⚠ Scroll (full collection scan) vs. search (ANN query) are different endpoints with different pagination — agents that want to retrieve all points must use /collections/{name}/points/scroll, not /collections/{name}/points/search
Alternatives
Full Evaluation Report
Detailed scoring breakdown, competitive positioning, security analysis, and improvement recommendations for Qdrant REST API.
Scores are editorial opinions as of 2026-03-06.