---
title: "Describe collection features"
method: GET
path: "/v1/collections/{collection_identifier}/features"
tags: ["Collections"]
---

# Describe collection features

`GET /v1/collections/{collection_identifier}/features`

List feature addresses and metadata available in this collection

## Path parameters

- `collection_identifier` string, required — The ID or name of the collection to describe

## Response `200`

Successful Response

- DescribeCollectionFeaturesResponse
  - `features` CollectionFeatureDescriptor[], required — Feature extractors and fields enabled on this collection
    - `feature_address` string, required — Fully qualified feature address
    - `feature_extractor_name` string, required — Extractor name
    - `version` string, required — Extractor version
    - `vector_index` VectorIndex, required — Configuration for a single vector index in Qdrant. Defines the fully-qualified vector index including storage name, dimensions, distance metric, and inference service. This is the actual index that gets created in Qdrant and used for vector similarity search. Key Concepts: - The `name` field is the FULL qualified name used as the Qdrant collection name - Format: {extractor}_{version}_{output} (e.g., "text_extractor_v1_embedding") - This ensures namespace isolation between extractors and versions - Different from VectorIndexDefinition.name which is the short user-facing name Use Cases: - Define vector storage configuration for feature extractors - Specify inference service and model parameters - Configure distance metrics for similarity search - Set storage optimization (on-disk for large vectors) Requirements: - name: REQUIRED - Must be unique across all extractors in namespace - description: REQUIRED - Explain what this vector represents - dimensions: REQUIRED for DENSE vectors, OPTIONAL for SPARSE - type: REQUIRED - Must match VectorType enum - inference_name: REQUIRED - Must reference a valid inference service
      - `name` string, nullable — OPTIONAL. Qdrant named vector identifier. If not provided, auto-derived from inference_service_id using the same conversion as inference_name (org/model -> org__model with hyphens as underscores). This enables cross-extractor compatibility: extractors using the same model will share the same named vector in Qdrant, allowing direct vector search across collections without fusion logic.
      - `description` string, required — REQUIRED. Human-readable description of what this vector index represents. Explain the content type, use cases, and search characteristics. Shown in API documentation and collection metadata. Be specific about what embeddings are stored here.
      - `dimensions` integer, nullable — Number of vector dimensions. REQUIRED for DENSE vectors (e.g., 1024 for E5-Large, 1408 for multimodal). NOT REQUIRED for SPARSE vectors (dimensions determined dynamically). Must match the output dimensions of the inference service. Cannot be changed after index creation without recreating the collection.
      - `type` 'dense' | 'sparse' | 'multi_dense', required — Vector types supported by the Mixpeek system. Defines the storage format and structure of embeddings in Qdrant. Values: DENSE: Traditional float array embeddings (e.g., [0.1, 0.2, 0.3]). Most common format. Used by: text_extractor, multimodal_extractor, image_extractor. Storage: ~4KB per 1024-dim vector. Fast cosine/dot similarity search. SPARSE: Index-value pairs for sparse embeddings (e.g., SPLADE, BM25). Only stores non-zero dimensions. Format: {indices: [1,5,9], values: [0.8,0.6,0.4]}. Storage: ~20KB. Keyword-based semantic search. MULTI_DENSE: List of dense vectors for late interaction models (e.g., ColBERT). Each document has multiple embeddings. Format: [[0.1,0.2], [0.3,0.4], ...]. Storage: ~500KB. High-precision retrieval. Examples: - DENSE for general semantic search (text_extractor, multimodal_extractor) - SPARSE for keyword expansion and explainability - MULTI_DENSE for maximum precision retrieval
      - `distance` string, nullable — Distance metric for similarity search. OPTIONAL - defaults to 'cosine' (normalized dot product). Options: 'cosine' (most common, normalized), 'dot' (raw dot product), 'euclidean' (L2 distance), 'manhattan' (L1 distance). Cosine recommended for most embeddings as it's scale-invariant. Must match the metric your model was trained with.
      - `datatype` 'float32' | 'uint8' — Vector data type.
      - `on_disk` boolean, nullable — OPTIONAL. If true, vectors stored on disk instead of RAM. Defaults to true for memory efficiency. Set to false for faster search with higher memory usage. Trade-off: on_disk=true saves ~95% RAM but ~10x slower search. Recommended to keep default (true) unless RAM is abundant and low latency critical.
      - `supported_inputs` BucketSchemaFieldType[], nullable — OPTIONAL. List of bucket schema field types this vector can process. Validates that input fields are compatible with this index. Examples: TEXT and STRING for text embeddings, VIDEO and IMAGE for multimodal embeddings, DOCUMENT for PDF extractors. Used for validation during collection creation.
      - `inference_name` string, nullable — DEPRECATED: Use inference_service_id instead. Identifier of the inference service to generate embeddings. Must reference a valid inference service registered in the system. Examples: 'multilingual_e5_large_instruct_v1' for text, 'vertex_multimodal_embedding' for video, 'laion_clip_vit_l_14_v1' for images. This determines which model creates the vectors during ingestion. Cannot be changed after collection creation.
      - `inference_service_id` string, nullable — RECOMMENDED. Service ID in org/name format (e.g., 'intfloat/e5-large'). When set, dimensions and distance are automatically derived from the registry. This is the canonical identifier for cross-plugin compatibility. Plugins using the same service_id can search across each other's vectors. Takes precedence over inference_name when both are set.
      - `purpose` 'text' | 'code' | 'image' | 'multimodal' | 'video' | 'audio' | 'sparse' — Semantic purpose of a vector index. Used by pipelines to look up vector configs by purpose without needing to know the specific inference_service_id.
      - `vector_name_override` string, nullable — OPTIONAL. Override for Qdrant named vector identifier. When set, this value is used as the Qdrant vector name instead of auto-deriving from inference_service_id. This enables multiple vectors from the same embedding model with different storage names. The inference_service_id is still used for cross-extractor compatibility checking, but storage uses this custom name. Use case: A single extractor producing N vectors (e.g., title_embedding, body_embedding) using the same model but needing separate storage.
      - `supports_multi_query` boolean — Whether this vector index supports multi-content queries at retrieval time. When True, the feature_search stage accepts input_mode='multi_content' — a list of URLs and/or text strings that are embedded together in one API call to produce a single query vector. Only set for extractors whose underlying model natively supports multi-file input (e.g., gemini_multifile_extractor using Gemini Embedding 2).
    - `primary` boolean — True if this is the primary output (short address allowed)

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `422` — Validation Error
- `500` — Internal Server Error

---

[API](https://skmtc.net/mixpeek/apis/mixpeek-api.md) · [All operations](https://skmtc.net/mixpeek/apis/mixpeek-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/mixpeek/mixpeek-api/revisions/220a3b263fda/schema)
