Qdrant provides flexible APIs for updating and deleting points, including operations on payloads, vectors, and entire points.
Update Payloads
Update or add payload fields to existing points without modifying vectors.
Set Payload (Merge)
Add or update specific payload fields while keeping existing fields.
API Endpoint
POST /collections/{collection_name}/points/payload
curl -X POST http://localhost:6333/collections/my_collection/points/payload \
-H 'Content-Type: application/json' \
-d '{
"payload": {
"status": "active",
"last_updated": "2024-03-04"
},
"points": [1, 2, 3]
}'
Set Payload with Filter
Update payload for all points matching a filter.
curl -X POST http://localhost:6333/collections/my_collection/points/payload \
-H 'Content-Type: application/json' \
-d '{
"payload": {
"verified": true
},
"filter": {
"must": [
{
"key": "country",
"match": {"value": "Germany"}
}
]
}
}'
Overwrite Payload
Replace the entire payload, removing all existing fields.
API Endpoint
PUT /collections/{collection_name}/points/payload
curl -X PUT http://localhost:6333/collections/my_collection/points/payload \
-H 'Content-Type: application/json' \
-d '{
"payload": {
"city": "Berlin",
"country": "Germany"
},
"points": [1]
}'
overwrite_payload removes all existing payload fields. Use set_payload to merge fields instead.
Delete Payload Fields
Remove specific payload fields from points.
API Endpoint
POST /collections/{collection_name}/points/payload/delete
curl -X POST http://localhost:6333/collections/my_collection/points/payload/delete \
-H 'Content-Type: application/json' \
-d '{
"keys": ["status", "last_updated"],
"points": [1, 2, 3]
}'
Delete Nested Fields
Use dot notation to delete nested payload fields.
curl -X POST http://localhost:6333/collections/my_collection/points/payload/delete \
-H 'Content-Type: application/json' \
-d '{
"keys": ["metadata.internal.temp_flag"],
"points": [1, 2]
}'
Clear All Payload
Remove all payload from specified points, keeping vectors intact.
API Endpoint
POST /collections/{collection_name}/points/payload/clear
curl -X POST http://localhost:6333/collections/my_collection/points/payload/clear \
-H 'Content-Type: application/json' \
-d '{
"points": [1, 2, 3, 5, 8]
}'
Update Vectors
Update vectors for existing points without changing payloads.
API Endpoint
PUT /collections/{collection_name}/points/vectors
curl -X PUT http://localhost:6333/collections/my_collection/points/vectors \
-H 'Content-Type: application/json' \
-d '{
"points": [
{
"id": 1,
"vector": [0.11, 0.22, 0.33, 0.44]
},
{
"id": 2,
"vector": [0.55, 0.66, 0.77, 0.88]
}
]
}'
Update Named Vectors
For collections with multiple named vectors, update specific vectors.
curl -X PUT http://localhost:6333/collections/multi_vector_collection/points/vectors \
-H 'Content-Type: application/json' \
-d '{
"points": [
{
"id": 1,
"vector": {
"text": [0.1, 0.2, 0.3, 0.4]
}
}
]
}'
When updating named vectors, you only need to specify the vectors you want to update. Other vectors remain unchanged.
Delete Vectors
Delete specific named vectors from points while keeping other vectors and payloads.
API Endpoint
POST /collections/{collection_name}/points/vectors/delete
curl -X POST http://localhost:6333/collections/multi_vector_collection/points/vectors/delete \
-H 'Content-Type: application/json' \
-d '{
"vectors": ["image"],
"points": [1, 2, 3]
}'
Delete Points by ID
Delete entire points (vectors and payloads) by their IDs.
API Endpoint
POST /collections/{collection_name}/points/delete
curl -X POST http://localhost:6333/collections/my_collection/points/delete \
-H 'Content-Type: application/json' \
-d '{
"points": [1, 2, 3, 5, 8, 13]
}'
Delete Points by Filter
Delete all points matching specific filter conditions.
curl -X POST http://localhost:6333/collections/my_collection/points/delete \
-H 'Content-Type: application/json' \
-d '{
"filter": {
"must": [
{
"key": "status",
"match": {"value": "inactive"}
}
]
}
}'
Complex Delete Filters
curl -X POST http://localhost:6333/collections/my_collection/points/delete \
-H 'Content-Type: application/json' \
-d '{
"filter": {
"must": [
{
"key": "year",
"range": {
"lt": 2020
}
}
],
"must_not": [
{
"key": "important",
"match": {"value": true}
}
]
}
}'
Delete by filter can affect many points. Always test your filter with a search query first to verify which points will be deleted.
Query Parameters
If true, wait for the operation to complete. If false, return immediately after accepting the request.
Ordering guarantees for the operation:
weak - No ordering guarantees
medium - Operations ordered within a node
strong - Operations ordered across all nodes
Operation timeout in seconds.
All update and delete operations return a similar response:
{
"result": {
"operation_id": 127,
"status": "completed"
},
"status": "ok",
"time": 0.003
}
Sequential number of the operation.
Operation status: completed or acknowledged (if wait=false).
Atomic Operations
All update and delete operations in Qdrant are atomic:
Single Operation
Batch Operations
Consistency
Each individual operation (set_payload, delete, etc.) is atomic. Either all specified points are updated or none are.
When using the batch API (/points/batch), all operations in the batch are applied atomically.
Use the ordering parameter to control consistency guarantees across distributed deployments.
Best Practices
- Test Filters First: Before deleting by filter, run a search with the same filter to preview affected points
- Use Set Payload: Prefer
set_payload over overwrite_payload to avoid accidentally removing fields
- Batch Updates: Group multiple updates into batch operations for better performance
- Wait Parameter: Use
wait=false for bulk operations to improve throughput
- Named Vectors: When updating vectors in multi-vector collections, only update the vectors that changed
- Backup: Consider backing up important data before large delete operations
- Point IDs: Keep track of point IDs when performing updates to ensure you’re modifying the correct points
Update operations modify points in-place without creating new versions. The point’s version number is incremented with each update.