Skip to main content
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

wait
boolean
default:"true"
If true, wait for the operation to complete. If false, return immediately after accepting the request.
ordering
string
Ordering guarantees for the operation:
  • weak - No ordering guarantees
  • medium - Operations ordered within a node
  • strong - Operations ordered across all nodes
timeout
integer
Operation timeout in seconds.

Response Format

All update and delete operations return a similar response:
{
  "result": {
    "operation_id": 127,
    "status": "completed"
  },
  "status": "ok",
  "time": 0.003
}
result.operation_id
integer
Sequential number of the operation.
result.status
string
Operation status: completed or acknowledged (if wait=false).
status
string
Overall response status.
time
number
Time taken in seconds.

Atomic Operations

All update and delete operations in Qdrant are atomic:
Each individual operation (set_payload, delete, etc.) is atomic. Either all specified points are updated or none are.

Best Practices

  1. Test Filters First: Before deleting by filter, run a search with the same filter to preview affected points
  2. Use Set Payload: Prefer set_payload over overwrite_payload to avoid accidentally removing fields
  3. Batch Updates: Group multiple updates into batch operations for better performance
  4. Wait Parameter: Use wait=false for bulk operations to improve throughput
  5. Named Vectors: When updating vectors in multi-vector collections, only update the vectors that changed
  6. Backup: Consider backing up important data before large delete operations
  7. 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.