qdrant-rest-cli
A full-coverage CLI for the Qdrant vector database REST API. Every endpoint in Qdrant's OpenAPI spec, exposed as a typed command. Generated from Qdrant's official OpenAPI spec using openapi-cli-gen.
Why
Qdrant ships excellent client SDKs (Python, Rust, Go, JS), but no REST CLI. For shell scripting, Makefile targets, CI pipelines, and interactive ad-hoc queries, most people drop to raw curl and hand-build JSON payloads.
This CLI gives you the entire Qdrant REST API as flat shell commands with typed flags — collections, points, search, snapshots, distributed cluster ops — without writing any Python or curl boilerplate. When Qdrant adds endpoints, a regeneration picks them up.
Install
pipx install qdrant-rest-cli
# Or with uv
uv tool install qdrant-rest-cli
Setup
Point it at your Qdrant instance (default is http://localhost:6333):
export QDRANT_REST_CLI_BASE_URL=http://localhost:6333
If your instance uses an API key:
export QDRANT_REST_CLI_API_KEY=your-api-key
The CLI sends it as the api-key header automatically, matching Qdrant's security scheme.
HTTPS with Self-Signed Certs
If your Qdrant instance uses TLS with a self-signed or internal certificate:
# Skip certificate verification
export QDRANT_REST_CLI_VERIFY_SSL=false
# Or point to your CA bundle
export QDRANT_REST_CLI_CA_CERT=/path/to/ca-bundle.pem
Quick Start
All commands below have been verified against a live Qdrant instance.
# Server health
qdrant-rest-cli service root
qdrant-rest-cli service healthz
# List collections
qdrant-rest-cli collections get-collections
# Create a collection (4-dim vectors, cosine distance)
qdrant-rest-cli collections create \
--collection-name pets \
--vectors '{"size": 4, "distance": "Cosine"}'
# Upsert points with payloads (use --root for the full JSON request body)
qdrant-rest-cli points upsert --collection-name pets --root '{
"points": [
{"id": 1, "vector": [0.9, 0.1, 0.1, 0.1], "payload": {"name": "cat", "species": "mammal"}},
{"id": 2, "vector": [0.1, 0.9, 0.1, 0.1], "payload": {"name": "dog", "species": "mammal"}},
{"id": 3, "vector": [0.1, 0.1, 0.9, 0.1], "payload": {"name": "bird", "species": "avian"}}
]
}'
# Count points
qdrant-rest-cli points count --collection-name pets
# Semantic search — return results WITH their payloads
qdrant-rest-cli search points \
--collection-name pets \
--vector '[0.85, 0.15, 0.1, 0.1]' \
--limit 2 \
--with-payload true
# Scroll through all points
qdrant-rest-cli points scroll --collection-name pets --limit 10
# Get a collection's info
qdrant-rest-cli collections get-collection --collection-name pets
# Delete the collection
qdrant-rest-cli collections delete --collection-name pets
Discover All Commands
# Top-level groups
qdrant-rest-cli --help
# Commands in a group
qdrant-rest-cli collections --help
# Flags for a specific command
qdrant-rest-cli search points --help
Output Formats
Every command accepts --output-format:
qdrant-rest-cli collections get-collections --output-format table
qdrant-rest-cli collections get-collections --output-format yaml
qdrant-rest-cli collections get-collections --output-format raw
Command Groups
| Group | What it covers |
|---|---|
service |
Server root, health (healthz, livez, readyz), telemetry, metrics |
collections |
Full CRUD for collections + optimizations |
aliases |
Collection aliases |
points |
Upsert, get, delete, scroll, count, batch operations, payload/vector updates, facets |
search |
Query points, batch search, recommend, discover, point groups, matrices |
snapshots |
Create / list / delete / restore snapshots (collection + shard level) |
distributed |
Cluster status, peer management, shard keys |
indexes |
Payload index create/delete |
beta |
Issue tracking for the running instance |
Passing Complex JSON Bodies
Most Qdrant write endpoints take deeply nested request bodies (lists of points, complex filters, hybrid queries). For these, pass the entire body as a JSON string via --root:
qdrant-rest-cli points upsert --collection-name pets --root '{"points":[...]}'
qdrant-rest-cli search points --collection-name pets --root '{
"vector": [0.85, 0.15, 0.1, 0.1],
"limit": 5,
"with_payload": true,
"filter": {"must": [{"key": "species", "match": {"value": "mammal"}}]}
}'
Flat endpoints (like collections create) accept typed flags directly — use whichever is clearer for a given call.
Real Example: End-to-End Vector Search
$ qdrant-rest-cli collections create \
--collection-name movies \
--vectors '{"size": 4, "distance": "Cosine"}'
{"result": true, "status": "ok", "time": 0.012}
$ qdrant-rest-cli points upsert --collection-name movies --root '{
"points": [
{"id": 1, "vector": [0.9, 0.1, 0.1, 0.1], "payload": {"title": "The Matrix"}},
{"id": 2, "vector": [0.1, 0.9, 0.1, 0.1], "payload": {"title": "Titanic"}}
]
}'
{"result": {"operation_id": 0, "status": "completed"}, "status": "ok"}
$ qdrant-rest-cli search points --collection-name movies \
--vector '[0.85, 0.15, 0.1, 0.1]' \
--limit 2 \
--with-payload true
{
"result": [
{"id": 1, "score": 0.998, "payload": {"title": "The Matrix"}},
{"id": 2, "score": 0.299, "payload": {"title": "Titanic"}}
],
"status": "ok"
}
How It Works
This package is a thin wrapper:
- Embeds the Qdrant OpenAPI spec (
spec.yaml) - Delegates CLI generation to openapi-cli-gen at runtime
- Default base URL:
http://localhost:6333
Since it's spec-driven, new Qdrant endpoints show up automatically on regeneration — no manual wrapping to fall behind.
License
MIT. Not affiliated with Qdrant — this is an unofficial community CLI built on top of their public OpenAPI spec.
Metadata
Release files for qdrant-rest-cli 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| qdrant_rest_cli-0.1.4.tar.gz | 51.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| qdrant_rest_cli-0.1.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 105.6 kB
Release files / qdrant_rest_cli-0.1.4.tar.gz
| Download URL | qdrant_rest_cli-0.1.4.tar.gz |
|---|---|
| Size | 51.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bb423d339c2d3357493b13fcb2a49210123f9a06778ef4fe61463bcff555dafc
|
|
BLAKE2b-256 checksum How to use checksums |
3c287041ab6f9d9ac7df9009b867b2e11e82f7883087c5b0568a3e4279af831b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.9
|
Release files / qdrant_rest_cli-0.1.4-py3-none-any.whl
| Download URL | qdrant_rest_cli-0.1.4-py3-none-any.whl |
|---|---|
| Size | 54.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
020a0afc229d3d9f55db78bf385961aab939cbb5334f4a10d276e72246b48119
|
|
BLAKE2b-256 checksum How to use checksums |
c01e41c16168f2137da2ac631253934e752f1f42e07334e1d2fa876d3638ce85
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.9
|