Work with this as data
Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/qdrant-distributed-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
OpenAPI Specification
openapi: 3.2.0
info:
title: Qdrant Aliases Distributed API
description: "API description for Qdrant vector search engine.\n\nThis document describes CRUD and search operations on collections of points (vectors with payload).\n\nQdrant supports any combinations of `should`, `min_should`, `must` and `must_not` conditions, which makes it possible to use in applications when object could not be described solely by vector. It could be location features, availability flags, and other custom properties businesses should take into account.\n## Examples\nThis examples cover the most basic use-cases - collection creation and basic vector search.\n### Create collection\nFirst - let's create a collection with dot-production metric.\n```\ncurl -X PUT 'http://localhost:6333/collections/test_collection' \\\n -H 'Content-Type: application/json' \\\n --data-raw '{\n \"vectors\": {\n \"size\": 4,\n \"distance\": \"Dot\"\n }\n }'\n\n```\nExpected response:\n```\n{\n \"result\": true,\n \"status\": \"ok\",\n \"time\": 0.031095451\n}\n```\nWe can ensure that collection was created:\n```\ncurl 'http://localhost:6333/collections/test_collection'\n```\nExpected response:\n```\n{\n \"result\": {\n \"status\": \"green\",\n \"segments_count\": 5,\n \"disk_data_size\": 0,\n \"ram_data_size\": 0,\n \"config\": {\n \"params\": {\n \"vectors\": {\n \"size\": 4,\n \"distance\": \"Dot\"\n }\n },\n \"hnsw_config\": {\n \"m\": 16,\n \"ef_construct\": 100,\n \"full_scan_threshold\": 10000\n },\n \"optimizer_config\": {\n \"deleted_threshold\": 0.2,\n \"vacuum_min_vector_number\": 1000,\n \"default_segment_number\": 2,\n \"max_segment_size\": null,\n \"memmap_threshold\": null,\n \"indexing_threshold\": 20000,\n \"flush_interval_sec\": 5,\n \"max_optimization_threads\": null\n },\n \"wal_config\": {\n \"wal_capacity_mb\": 32,\n \"wal_segments_ahead\": 0\n }\n }\n },\n \"status\": \"ok\",\n \"time\": 2.1199e-05\n}\n```\n\n### Add points\nLet's now add vectors with some payload:\n```\ncurl -L -X PUT 'http://localhost:6333/collections/test_collection/points?wait=true' \\ -H 'Content-Type: application/json' \\ --data-raw '{\n \"points\": [\n {\"id\": 1, \"vector\": [0.05, 0.61, 0.76, 0.74], \"payload\": {\"city\": \"Berlin\"}},\n {\"id\": 2, \"vector\": [0.19, 0.81, 0.75, 0.11], \"payload\": {\"city\": [\"Berlin\", \"London\"] }},\n {\"id\": 3, \"vector\": [0.36, 0.55, 0.47, 0.94], \"payload\": {\"city\": [\"Berlin\", \"Moscow\"] }},\n {\"id\": 4, \"vector\": [0.18, 0.01, 0.85, 0.80], \"payload\": {\"city\": [\"London\", \"Moscow\"] }},\n {\"id\": 5, \"vector\": [0.24, 0.18, 0.22, 0.44], \"payload\": {\"count\": [0]}},\n {\"id\": 6, \"vector\": [0.35, 0.08, 0.11, 0.44]}\n ]\n}'\n```\nExpected response:\n```\n{\n \"result\": {\n \"operation_id\": 0,\n \"status\": \"completed\"\n },\n \"status\": \"ok\",\n \"time\": 0.000206061\n}\n```\n### Search with filtering\nLet's start with a basic request:\n```\ncurl -L -X POST 'http://localhost:6333/collections/test_collection/points/search' \\ -H 'Content-Type: application/json' \\ --data-raw '{\n \"vector\": [0.2,0.1,0.9,0.7],\n \"top\": 3\n}'\n```\nExpected response:\n```\n{\n \"result\": [\n { \"id\": 4, \"score\": 1.362, \"payload\": null, \"version\": 0 },\n { \"id\": 1, \"score\": 1.273, \"payload\": null, \"version\": 0 },\n { \"id\": 3, \"score\": 1.208, \"payload\": null, \"version\": 0 }\n ],\n \"status\": \"ok\",\n \"time\": 0.000055785\n}\n```\nBut result is different if we add a filter:\n```\ncurl -L -X POST 'http://localhost:6333/collections/test_collection/points/search' \\ -H 'Content-Type: application/json' \\ --data-raw '{\n \"filter\": {\n \"should\": [\n {\n \"key\": \"city\",\n \"match\": {\n \"value\": \"London\"\n }\n }\n ]\n },\n \"vector\": [0.2, 0.1, 0.9, 0.7],\n \"top\": 3\n}'\n```\nExpected response:\n```\n{\n \"result\": [\n { \"id\": 4, \"score\": 1.362, \"payload\": null, \"version\": 0 },\n { \"id\": 2, \"score\": 0.871, \"payload\": null, \"version\": 0 }\n ],\n \"status\": \"ok\",\n \"time\": 0.000093972\n}\n```\n"
contact:
email: andrey@vasnetsov.com
license:
name: Apache 2.0
url: http://www.apache.org/licenses/LICENSE-2.0.html
version: master
servers:
- url: '{protocol}://{hostname}:{port}'
variables:
protocol:
enum:
- http
- https
default: http
hostname:
default: localhost
port:
default: '6333'
security:
- api-key: []
- bearerAuth: []
- {}
tags:
- name: Distributed
description: Service distributed setup.
paths:
/collections/{collection_name}/shards:
put:
tags:
- Distributed
summary: Create shard key
operationId: create_shard_key
requestBody:
description: Shard key configuration
content:
application/json:
schema:
$ref: '#/components/schemas/CreateShardingKey'
parameters:
- name: collection_name
in: path
description: Name of the collection to create shards for
required: true
schema:
type: string
- name: timeout
in: query
description: 'Wait for operation commit timeout in seconds.
If timeout is reached - request will return with service error.
'
schema:
type: integer
responses:
default:
description: error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
4XX:
description: error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'200':
description: successful operation
content:
application/json:
schema:
type: object
properties:
usage:
default: null
anyOf:
- $ref: '#/components/schemas/Usage'
- {}
time:
type: number
format: float
description: Time spent to process this request
example: 0.002
status:
type: string
example: ok
result:
type: boolean
get:
tags:
- Distributed
summary: List shard keys
operationId: list_shard_keys
parameters:
- name: collection_name
in: path
description: Name of the collection to list shard keys for
required: true
schema:
type: string
responses:
default:
description: error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
4XX:
description: error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'200':
description: successful operation
content:
application/json:
schema:
type: object
properties:
usage:
default: null
anyOf:
- $ref: '#/components/schemas/Usage'
- {}
time:
type: number
format: float
description: Time spent to process this request
example: 0.002
status:
type: string
example: ok
result:
$ref: '#/components/schemas/ShardKeysResponse'
/collections/{collection_name}/shards/delete:
post:
tags:
- Distributed
summary: Delete shard key
operationId: delete_shard_key
requestBody:
description: Select shard key to delete
content:
application/json:
schema:
$ref: '#/components/schemas/DropShardingKey'
parameters:
- name: collection_name
in: path
description: Name of the collection to create shards for
required: true
schema:
type: string
- name: timeout
in: query
description: 'Wait for operation commit timeout in seconds.
If timeout is reached - request will return with service error.
'
schema:
type: integer
responses:
default:
description: error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
4XX:
description: error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'200':
description: successful operation
content:
application/json:
schema:
type: object
properties:
usage:
default: null
anyOf:
- $ref: '#/components/schemas/Usage'
- {}
time:
type: number
format: float
description: Time spent to process this request
example: 0.002
status:
type: string
example: ok
result:
type: boolean
/cluster:
get:
tags:
- Distributed
summary: Get cluster status info
description: Get information about the current state and composition of the cluster
operationId: cluster_status
responses:
default:
description: error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
4XX:
description: error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'200':
description: successful operation
content:
application/json:
schema:
type: object
properties:
usage:
default: null
anyOf:
- $ref: '#/components/schemas/Usage'
- {}
time:
type: number
format: float
description: Time spent to process this request
example: 0.002
status:
type: string
example: ok
result:
$ref: '#/components/schemas/ClusterStatus'
/cluster/telemetry:
get:
tags:
- Distributed
summary: Collect cluster telemetry data
description: Get telemetry data, from the point of view of the cluster. This includes peers info, collections info, shard transfers, and resharding status
operationId: cluster_telemetry
parameters:
- name: details_level
in: query
description: The level of detail to include in the response
required: false
schema:
type: integer
- name: timeout
in: query
description: Timeout for this request
required: false
schema:
type: integer
minimum: 1
default: 60
responses:
default:
description: error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
4XX:
description: error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'200':
description: successful operation
content:
application/json:
schema:
type: object
properties:
usage:
default: null
anyOf:
- $ref: '#/components/schemas/Usage'
- {}
time:
type: number
format: float
description: Time spent to process this request
example: 0.002
status:
type: string
example: ok
result:
$ref: '#/components/schemas/DistributedTelemetryData'
/cluster/recover:
post:
tags:
- Distributed
summary: Tries to recover current peer Raft state.
operationId: recover_current_peer
responses:
default:
description: error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
4XX:
description: error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'200':
description: successful operation
content:
application/json:
schema:
type: object
properties:
usage:
default: null
anyOf:
- $ref: '#/components/schemas/Usage'
- {}
time:
type: number
format: float
description: Time spent to process this request
example: 0.002
status:
type: string
example: ok
result:
type: boolean
/cluster/peer/{peer_id}:
delete:
tags:
- Distributed
summary: Remove peer from the cluster
description: Tries to remove peer from the cluster. Will return an error if peer has shards on it.
operationId: remove_peer
parameters:
- name: peer_id
in: path
description: Id of the peer
required: true
schema:
type: integer
- name: timeout
in: query
description: 'Wait for operation commit timeout in seconds.
If timeout is reached - request will return with service error.
'
schema:
type: integer
- name: force
in: query
description: If true - removes peer even if it has shards/replicas on it.
schema:
type: boolean
default: false
responses:
default:
description: error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
4XX:
description: error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'200':
description: successful operation
content:
application/json:
schema:
type: object
properties:
usage:
default: null
anyOf:
- $ref: '#/components/schemas/Usage'
- {}
time:
type: number
format: float
description: Time spent to process this request
example: 0.002
status:
type: string
example: ok
result:
type: boolean
/collections/{collection_name}/cluster:
get:
tags:
- Distributed
summary: Collection cluster info
description: Get cluster information for a collection
operationId: collection_cluster_info
parameters:
- name: collection_name
in: path
description: Name of the collection to retrieve the cluster info for
required: true
schema:
type: string
responses:
default:
description: error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
4XX:
description: error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'200':
description: successful operation
content:
application/json:
schema:
type: object
properties:
usage:
default: null
anyOf:
- $ref: '#/components/schemas/Usage'
- {}
time:
type: number
format: float
description: Time spent to process this request
example: 0.002
status:
type: string
example: ok
result:
$ref: '#/components/schemas/CollectionClusterInfo'
post:
tags:
- Distributed
summary: Update collection cluster setup
operationId: update_collection_cluster
requestBody:
description: Collection cluster update operations
content:
application/json:
schema:
$ref: '#/components/schemas/ClusterOperations'
parameters:
- name: collection_name
in: path
description: Name of the collection on which to to apply the cluster update operation
required: true
schema:
type: string
- name: timeout
in: query
description: 'Wait for operation commit timeout in seconds.
If timeout is reached - request will return with service error.
'
schema:
type: integer
responses:
default:
description: error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
4XX:
description: error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'200':
description: successful operation
content:
application/json:
schema:
type: object
properties:
usage:
default: null
anyOf:
- $ref: '#/components/schemas/Usage'
- {}
time:
type: number
format: float
description: Time spent to process this request
example: 0.002
status:
type: string
example: ok
result:
type: boolean
components:
schemas:
MatchExcept:
description: Should have at least one value not matching the any given values
type: object
required:
- except
properties:
except:
$ref: '#/components/schemas/AnyVariants'
ModelUsage:
type: object
required:
- tokens
properties:
tokens:
type: integer
format: uint64
minimum: 0
StateRole:
description: Role of the peer in the consensus
type: string
enum:
- Follower
- Candidate
- Leader
- PreCandidate
ReplicaState:
description: State of the single shard within a replica set.
type: string
enum:
- Active
- Dead
- Partial
- Initializing
- Listener
- PartialSnapshot
- Recovery
- Resharding
- ReshardingScaleDown
- ActiveRead
- ManualRecovery
RangeInterface:
anyOf:
- $ref: '#/components/schemas/Range'
- $ref: '#/components/schemas/DatetimeRange'
ReplicateShardOperation:
type: object
required:
- replicate_shard
properties:
replicate_shard:
$ref: '#/components/schemas/ReplicateShard'
DistributedTelemetryData:
type: object
required:
- collections
properties:
collections:
type: object
additionalProperties:
$ref: '#/components/schemas/DistributedCollectionTelemetry'
cluster:
anyOf:
- $ref: '#/components/schemas/DistributedClusterTelemetry'
- {}
ShardKeysResponse:
type: object
properties:
shard_keys:
description: The existing shard keys. Only available when sharding method is `custom`
type:
- array
- 'null'
items:
$ref: '#/components/schemas/ShardKeyDescription'
ReplicateShard:
type: object
required:
- from_peer_id
- shard_id
- to_peer_id
properties:
shard_id:
type: integer
format: uint32
minimum: 0
to_peer_id:
type: integer
format: uint64
minimum: 0
from_peer_id:
type: integer
format: uint64
minimum: 0
method:
description: Method for transferring the shard from one node to another
anyOf:
- $ref: '#/components/schemas/ShardTransferMethod'
- {}
DatetimeRange:
description: Range filter request
type: object
properties:
lt:
description: point.key < range.lt
type:
- string
- 'null'
format: date-time
gt:
description: point.key > range.gt
type:
- string
- 'null'
format: date-time
gte:
description: point.key >= range.gte
type:
- string
- 'null'
format: date-time
lte:
description: point.key <= range.lte
type:
- string
- 'null'
format: date-time
ValueVariants:
anyOf:
- type: string
- type: integer
format: int64
- type: boolean
ClusterOperations:
anyOf:
- $ref: '#/components/schemas/MoveShardOperation'
- $ref: '#/components/schemas/ReplicateShardOperation'
- $ref: '#/components/schemas/AbortTransferOperation'
- $ref: '#/components/schemas/DropReplicaOperation'
- $ref: '#/components/schemas/CreateShardingKeyOperation'
- $ref: '#/components/schemas/DropShardingKeyOperation'
- $ref: '#/components/schemas/RestartTransferOperation'
- $ref: '#/components/schemas/StartReshardingOperation'
- $ref: '#/components/schemas/AbortReshardingOperation'
- $ref: '#/components/schemas/ReplicatePointsOperation'
Replica:
type: object
required:
- peer_id
- shard_id
properties:
shard_id:
type: integer
format: uint32
minimum: 0
peer_id:
type: integer
format: uint64
minimum: 0
ReshardingDirection:
description: 'Resharding direction, scale up or down in number of shards
- `up` - Scale up, add a new shard
- `down` - Scale down, remove a shard'
type: string
enum:
- up
- down
MatchAny:
description: Exact match on any of the given values
type: object
required:
- any
properties:
any:
$ref: '#/components/schemas/AnyVariants'
PeerInfo:
description: Information of a peer in the cluster
type: object
required:
- uri
properties:
uri:
type: string
Usage:
description: Usage of the hardware resources, spent to process the request
type: object
properties:
hardware:
anyOf:
- $ref: '#/components/schemas/HardwareUsage'
- {}
inference:
anyOf:
- $ref: '#/components/schemas/InferenceUsage'
- {}
RestartTransferOperation:
type: object
required:
- restart_transfer
properties:
restart_transfer:
$ref: '#/components/schemas/RestartTransfer'
AbortTransferOperation:
type: object
required:
- abort_transfer
properties:
abort_transfer:
$ref: '#/components/schemas/AbortShardTransfer'
ShardStatus:
description: 'Current state of the shard (supports same states as the collection)
`Green` - all good. `Yellow` - optimization is running, ''Grey'' - optimizations are possible but not triggered, `Red` - some operations failed and was not recovered'
type: string
enum:
- green
- yellow
- grey
- red
NestedCondition:
type: object
required:
- nested
properties:
nested:
$ref: '#/components/schemas/Nested'
RestartTransfer:
type: object
required:
- from_peer_id
- method
- shard_id
- to_peer_id
properties:
shard_id:
type: integer
format: uint32
minimum: 0
from_peer_id:
type: integer
format: uint64
minimum: 0
to_peer_id:
type: integer
format: uint64
minimum: 0
method:
$ref: '#/components/schemas/ShardTransferMethod'
RemoteShardInfo:
type: object
required:
- peer_id
- shard_id
- state
properties:
shard_id:
description: Remote shard id
type: integer
format: uint32
minimum: 0
shard_key:
description: User-defined sharding key
anyOf:
- $ref: '#/components/schemas/ShardKey'
- {}
peer_id:
description: Remote peer id
type: integer
format: uint64
minimum: 0
state:
$ref: '#/components/schemas/ReplicaState'
MessageSendErrors:
description: Message send failures for a particular peer
type: object
required:
- count
properties:
count:
type: integer
format: uint
minimum: 0
latest_error:
type:
- string
- 'null'
latest_error_timestamp:
description: Timestamp of the latest error
type:
- string
- 'null'
format: date-time
ShardTransferMethod:
description: 'Methods for transferring a shard from one node to another.
- `stream_records` - Stream all shard records in batches until the whole shard is transferred.
- `snapshot` - Snapshot the shard, transfer and restore it on the receiver.
- `wal_delta` - Attempt to transfer shard difference by WAL delta.
- `resharding_stream_records` - Shard transfer for resharding: stream all records in batches until all points are transferred.'
type: string
enum:
- stream_records
- snapshot
- wal_delta
- resharding_stream_records
ShardTransferInfo:
type: object
required:
- from
- shard_id
- sync
- to
properties:
shard_id:
type: integer
format: uint32
minimum: 0
to_shard_id:
description: 'Target shard ID if different than source shard ID
Used exclusively with `ReshardingStreamRecords` transfer method.'
type:
- integer
- 'null'
format: uint32
minimum: 0
from:
description: Source peer id
type: integer
format: uint64
minimum: 0
to:
description: Destination peer id
type: integer
format: uint64
minimum: 0
sync:
description: If `true` transfer is a synchronization of a replicas If `false` transfer is a moving of a shard from one peer to another
type: boolean
method:
anyOf:
- $ref: '#/components/schemas/ShardTransferMethod'
- {}
comment:
description: A human-readable report of the transfer progress. Available only on the source peer.
type:
- string
- 'null'
AnyVariants:
anyOf:
- type: array
items:
type: string
uniqueItems: true
- type: array
items:
type: integer
format: int64
uniqueItems: true
IsEmptyCondition:
description: Select points with empty payload for a specified field
type: object
required:
- is_empty
properties:
is_empty:
$ref: '#/components/schemas/PayloadField'
FieldCondition:
description: All possible payload filtering conditions
type: object
required:
- key
properties:
key:
description: Payload key
type: string
match:
description: Check if point has field with a given value
anyOf:
- $ref: '#/components/schemas/Match'
- {}
range:
description: Check if points value lies in a given range
anyOf:
- $ref: '#/components/schemas/RangeInterface'
- {}
geo_bounding_box:
description: Check if points geolocation lies in a given area
anyOf:
- $ref: '#/components/schemas/GeoBoundingBox'
- {}
geo_radius:
description: Check if geo point is within a given radius
anyOf:
- $ref: '#/components/schemas/GeoRadius'
- {}
geo_polygon:
description: Check if geo point is within a given polygon
anyOf:
- $ref: '#/components/schemas/GeoPolygon'
- {}
values_count:
description: Check number of values of the field
anyOf:
- $ref: '#/components/schemas/ValuesCount'
- {}
is_empty:
description: 'Check that the field is empty, alternative syntax for `is_empty: "field_name"`'
type:
- boolean
- 'null'
is_null:
description: 'Check that the field is null, alternative syntax for `is_null: "field_name"`'
type:
- boolean
- 'null'
CollectionClusterInfo:
description: Current clustering distribution for the collection
type: object
required:
- local_shards
- peer_id
- remote_shards
- shard_count
- shard_transfers
properties:
peer_id:
description: ID of this peer
type: integer
format: uint64
minimum: 0
shard_count:
description: Total number of shards
type: integer
format: uint
minimum: 0
local_shards:
description: Local shards
type: array
items:
$ref: '#/components/schemas/LocalShardInfo'
remote_shards:
description: Remote shards
type: array
items:
$ref: '#/components/schemas/RemoteShardInfo'
shard_transfers:
description: Shard transfers
type: array
items:
$ref: '#/components/schemas/ShardTransferInfo'
resharding_operations:
description: Resharding operations
type:
- array
- 'null'
items:
$ref: '#/components/schemas/ReshardingInfo'
AbortReshardingOperation:
type: object
required:
- abort_resharding
properties:
abort_resharding:
$ref: '#/components/schemas/AbortResharding'
Condition:
anyOf:
- $ref: '#/components/schemas/FieldCondition'
- $ref: '#/components/schemas/IsEmptyCondition'
- $ref: '#/components/schemas/IsNullCondition'
- $ref: '#/components/schemas/HasIdCondition'
# --- truncated at 32 KB (56 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/qdrant/refs/heads/main/openapi/qdrant-distributed-api-openapi.yml