Skip to main content

Set Up a Namespace

Every project starts with a namespace — the isolation boundary for all your resources. Use one per environment (dev, staging, prod) or per tenant.
That’s the whole managed create — namespace_name is the only required field. You don’t register extractors up front: creating a collection with features: [...] auto-provisions the pipelines the namespace needs (see Features). The old feature_extractors field is deprecated.

Standalone (bring your own vectors)

To upsert your own vectors instead of Mixpeek-managed extraction, declare the index shapes with vector_configs:
vector_configs is a list of { name, dimension, metric } objects (not a single object). name and dimension are required; metric defaults to cosine (also euclidean, dot_product). Passing vector_configs with no features/feature_extractors infers standalone mode — no mode field needed. Omit vector_configs entirely and indexes auto-create on first upsert.
Every subsequent request needs two headers: Authorization: Bearer mxp_sk_... and X-Namespace: ns_.... Namespace API →

Create a Bucket

Buckets are schema-validated containers for raw files. Define what blob types you accept (text, image, audio, video, json, binary).
Bucket API →

Storage class

Pass an optional storage_class on create/update to pick a cost tier for a bucket’s objects. It’s provider-agnostic — mapped to your object store:
storage_classGCSS3 / MinIOBest for
standard (default)STANDARDSTANDARDHot, frequently-read buckets
nearlineNEARLINESTANDARD_IAWarm / occasional access
coldlineCOLDLINEGLACIER_IRCold / rare access
archiveARCHIVEGLACIERLong-term retention
Applied on write for sync-based ingestion; broader rollout in progress. For buckets fed by a storage sync (S3, GCS, Drive, RSS, and other sources — the primary media path), the tier is set on each object at write time. Tiering for direct uploads (POST /objects) and presigned client uploads, plus retroactive re-tiering of existing objects, are a separate backend follow-up (in progress). Keep hot, retriever-source buckets on standard; reserve cheaper tiers for large write-once/read-occasionally media.

Connect External Storage

Sync files directly from your existing cloud storage instead of uploading manually. Mixpeek reads from your provider — no migration needed. This is a two-step flow: create a reusable connection (holds the credentials, lives at the organization level), then attach a sync to a bucket that references it. Step 1 — Create the connection (once per provider account):
The response includes a connection_id (conn_...). Credentials are encrypted at rest and reusable across buckets. Step 2 — Attach a sync to your bucket (flat body — no wrapper objects):
Then trigger the first sync:
After the initial sync, new files are picked up automatically at the configured polling interval. Use continuous mode (vs initial_only) to keep picking up new and changed files — only new or modified files since the last sync are processed, so existing files aren’t reprocessed.
ProviderAuth MethodS3-Compatible
AWS S3IAM User / RoleNative
Google Cloud StorageService Account KeyNo
Azure Blob StorageAccess Key / Managed IdentityNo
Cloudflare R2R2 API TokenYes
Backblaze B2Application KeyYes
WasabiAccess KeyYes
TigrisAccess KeyYes
BoxOAuthNo
MuxAPI TokenNo
SupabaseService KeyYes
See Object Storage providers for provider-specific setup guides. Sync API →

Register Objects

Objects are raw multimodal assets within a bucket. Two paths: URL references — point to files in your existing storage:
Direct uploads — upload to Mixpeek-managed storage via presigned URLs:
Then PUT the file to the returned presigned_url and confirm with POST /uploads/{id}/confirm. For bulk imports, use batch uploads or connect your object storage via sync configurations. Object API → · Upload API →

Process with Batches

Batches group objects for extraction. Create a batch, then submit it:

Batch Lifecycle

Poll GET /v1/buckets/{id}/batches/{id} until the status is terminal — COMPLETED, COMPLETED_WITH_ERRORS, FAILED, or CANCELED (a poller that waits only for COMPLETED hangs on partial success) — or use webhooks to get notified on batch.completed. Batch API →