Collections

Create Collection

Changed on

Create a new processing collection linked to a namespace.

A collection defines the feature extraction pipeline that runs when objects are uploaded to a bucket. One feature extractor per collection.

Custom plugin collections:

When feature_extractor_name references a custom plugin, the collection's vector indexes are read from the plugin's manifest.py features list. The features entries must use these exact key names — wrong keys silently produce a collection with no vector indexes and 0 documents will be written:

{
  "feature_type": "embedding",
  "feature_name": "my_embedding",
  "embedding_dim": 768,
  "distance_metric": "cosine"
}

Common wrong keys (will be ignored): type, name, dimensions, distance.

Vector schema: Custom plugin vectors are automatically added to the namespace's vector store collection the first time a batch is processed, so there is no need to recreate the namespace when adding a plugin with new embedding types.

post/v1/collections

Request

  • Base URL: https://api.mixpeek.com
  • URL: https://api.mixpeek.com/v1/collections
  • Auth: HTTP bearer and API key in header X-Namespace

Request body

collection_namestring required

Name of the collection to create

descriptionstring nullable

Description of the collection

featuresstring[] nullable

What you want to search by: feature keys from GET /v1/collections/features (e.g. ['faces'] or ['custom:<plugin>']). Resolved to the processing pipeline server-side — the preferred alternative to feature_extractor. Provide one or the other.

enabledboolean

Whether the collection is enabled

metadataobject nullable

Additional metadata for the collection

embedding_taskstring nullable

Override the embedding task hint for instruction-aware models (E5, Gemini). Defaults to 'retrieval_document' for indexing pipelines. Values: retrieval_document, retrieval_query, semantic_similarity, classification, clustering. Only change this if your primary use case is not retrieval (e.g., clustering or classification). Applied to all task-aware embedding models in this collection's extractor pipeline.

Example request

{
  "collection_name": "product_embeddings",
  "description": "Generate image embeddings with passthrough fields",
  "enabled": true,
  "feature_extractor": {
    "feature_extractor_name": "image_extractor",
    "field_passthrough": [
      {
        "required": true,
        "source_path": "title"
      },
      {
        "source_path": "category"
      }
    ],
    "input_mappings": {
      "image": "product_image"
    },
    "parameters": {
      "model": "clip-vit-base-patch32"
    },
    "version": "v1"
  },
  "source": {
    "bucket_ids": [
      "bkt_products"
    ],
    "type": "bucket"
  }
}

Response

Successful Response

collection_idstring

NOT REQUIRED (auto-generated). Unique identifier for this collection. Used for: API paths, document queries, pipeline references. Format: 'col_' prefix + 10 random alphanumeric characters. Stable after creation - use for all collection references.

collection_namestring required

REQUIRED. Human-readable name for the collection. Must be unique within the namespace. Used for: Display, lookups (can query by name or ID), organization. Format: Alphanumeric with underscores/hyphens, 3-100 characters. Examples: 'product_embeddings', 'video_frames', 'customer_documents'.

descriptionstring nullable

NOT REQUIRED. Human-readable description of the collection's purpose. Use for: Documentation, team communication, UI display. Common pattern: Describe what the collection contains and what processing is applied.

source_bucket_schemasobject nullable

NOT REQUIRED (auto-computed). Snapshot of bucket schemas at collection creation. Only populated for multi-bucket collections (source.type='bucket' with multiple bucket_ids). Key: bucket_id, Value: BucketSchema at time of collection creation. Used for: Schema compatibility validation, document lineage, debugging. Schema snapshot is immutable - bucket schema changes after collection creation do not affect this. Single-bucket collections may omit this field (schema in input_schema is sufficient).

index_mapobject nullable

Which feature URI answers each URI a search names, for a collection that opted into feature URIs as its version contract. Null (the default) means not opted in: a search uses the URI it names. Each key is one of the collection's own feature URIs; each value is a URI the collection holds vectors for, listed in vector_indexes (its own, or one a completed reembed.target_feature_uri added). Switching to a new embedding model and rolling back are both PATCH /v1/collections/{collection_id} with a new map; neither rewrites a vector. Every search result reports the URI that scored it in feature_uri.

embedding_taskstring nullable

Override the embedding task hint for instruction-aware models (E5, Gemini). Defaults to 'retrieval_document' for indexing pipelines. Values: retrieval_document, retrieval_query, semantic_similarity, classification, clustering. Applied to all task-aware embedding models in this collection's extractor pipeline.

enabledboolean

NOT REQUIRED (defaults to True). Whether the collection accepts new documents. False: Collection exists but won't process new objects. True: Active and processing. Use for: Temporarily disabling collections without deletion.

metadataobject nullable

NOT REQUIRED. Additional user-defined metadata for the collection. Arbitrary key-value pairs for custom organization, tracking, configuration. Not used by the platform - purely for user purposes. Common uses: team ownership, project tags, deployment environment.

trigger_idstring nullable

NOT REQUIRED. ID of the linked trigger for scheduled re-processing. Automatically set when a schedule is configured.

created_atstring date-time nullable

Timestamp when the collection was created. Automatically set by the system when the collection is first saved to the database.

updated_atstring date-time nullable

Timestamp when the collection was last updated. Automatically updated by the system whenever the collection is modified.

lifecycle_statestring

Storage lifecycle state: 'active' (vector store + S3), 'cold' (S3 only), 'archived' (metadata only). Managed via lifecycle API.

s3_vector_indexstring nullable

S3 Vectors index name for this collection (e.g. 'col_{collection_id}').

last_lifecycle_transitionstring date-time nullable

Timestamp of the most recent lifecycle state change.

document_countinteger nullable

Number of documents in the collection

schema_versioninteger

Version number for the output_schema. Increments automatically when schema is updated via document sampling. Used to track schema evolution and trigger downstream collection schema updates.

last_schema_syncstring date-time nullable

Timestamp of last automatic schema sync from document sampling. Used to debounce schema updates (prevents thrashing).

schema_sync_enabledboolean

Whether automatic schema discovery and sync is enabled for this collection. When True, schema is periodically updated by sampling documents. When False, schema remains fixed at creation time.

document_schemaobject nullable

NOT REQUIRED. JSON Schema for validating documents on create/update. When set with schema_validation='strict', non-conforming documents are rejected (422). When set with schema_validation='warn', violations are recorded but document is accepted. Schema follows JSON Schema draft-07 format. Only validates user-defined fields (system fields like _internal, collection_id, document_id are excluded from validation).

schema_validation'strict' | 'warn' | 'off'

Document schema validation mode. 'strict': reject non-conforming documents with 422. 'warn': accept but attach _schema_violations field to the document. 'off': no validation (default, preserves current behavior).

vector_countinteger nullable

Total number of vector entries across all documents in this collection. Computed as document_count * number_of_vector_indexes. Each document stores one vector per configured vector index (e.g. a collection with 1 embedding produces 1 vector per document).

taxonomy_countinteger nullable

Number of taxonomies connected to this collection

retriever_countinteger nullable

Number of retrievers connected to this collection

indexing_statusstring nullable

Whether every vector the vector store has accepted for this collection's namespace is searchable now. This is separate from the collection's own RUNNING/COMPLETED status: a collection can be COMPLETED while this reads 'indexing'. One of: 'quiesced' (everything the store has accepted for this namespace is searchable; documents still moving through extraction have not reached the store yet, so compare document_count with what you sent if you need completeness), 'indexing' (some accepted vectors are waiting to become searchable and will be shortly; a search run now may miss them), 'blocked' (indexing cannot proceed without intervention, and waiting will not resolve it), 'unknown' (the signal is unavailable, for example an older store build or a transient error; treat it as not confirmed ready). Null when this endpoint did not compute it, for example a list request whose store reading took too long.

indexing_status_scopedboolean nullable

True when indexing_status describes this collection's namespace alone. False when the store could only report the whole shard, which several namespaces can share, so an 'indexing' or 'blocked' value may come from another namespace's backlog. A 'quiesced' reading is always scoped.

warningsstring[] nullable

NOT REQUIRED. Non-fatal problems detected while creating the collection. The collection WAS created; these describe things that will make it produce nothing at run time. The case this exists for: input_mappings can name a field that is valid in the bucket SCHEMA and absent from the bucket's OBJECTS, because a sync with no schema_mapping writes its blob to the default property instead. Schema validation passes, the batch then finds nothing, and the batch error arrives long after the decision was made. A warning here reaches the caller while they can still change it.

Example response

{
  "collection_id": "col_a1b2c3d4e5",
  "collection_name": "article_embeddings",
  "description": "Simple text collection: News articles with text embeddings from bucket source",
  "enabled": true,
  "feature_extractor": {
    "feature_extractor_name": "text_extractor",
    "field_passthrough": [
      {
        "source_path": "title"
      }
    ],
    "input_mappings": {
      "text": "content"
    },
    "version": "v1"
  },
  "input_schema": {
    "properties": {
      "title": {
        "type": "string"
      },
      "content": {
        "type": "text"
      }
    }
  },
  "output_schema": {
    "properties": {
      "title": {
        "type": "string"
      },
      "text_extractor_v1_embedding": {
        "type": "array"
      }
    }
  },
  "source": {
    "bucket_id": "bkt_articles",
    "type": "bucket"
  }
}

Changes

    • warning

      added the new markdown enum value to the /// response property for the response status

    • warning

      added the new markdown enum value to the /// response property for the response status

    • warning

      added the new markdown enum value to the ///// response property for the response status

    • warning

      added the new markdown enum value to the ///// response property for the response status

    • info

      added the new optional request property /////

    • info

      added the new markdown enum value to the request property ////

    • info

      added the new markdown enum value to the request property ////

    • info

      added the optional property //// to the response with the status

    • info

      added the optional property ////// to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status