Skip to main content
Syncs pull files from your existing storage providers into Mixpeek buckets on a schedule. No migration required — connect your cloud storage, configure what to sync, and Mixpeek keeps your bucket up to date.

How Syncs Work

  1. Poll — At each interval, Mixpeek lists files from your storage provider using the configured source_path and filters.
  2. Filter — Files are matched against glob patterns, size limits, MIME types, and provider-specific metadata filters.
  3. Create objects — Matching files are registered in the target bucket. Duplicates are skipped by default via source tracking.
  4. Submit batches — Objects are grouped into batches and submitted to the bucket’s collection pipeline for processing.
  5. Checkpoint — A resume cursor is saved so the next poll picks up where the last one left off.

Sync Modes

Create a Sync

1

Connect your storage

Create a storage connection with credentials for your provider.This step needs an API key with the admin permission, because connections hold credentials and sit behind organization administration. The key presets in Studio stop at read + write + delete; tick Admin in the key’s Edit dialog to grant it. Everything below (buckets, syncs, triggers) works with a write key.
2

Configure the sync

3

Trigger the first sync

After the initial run, continuous syncs poll automatically at the configured interval.

Configuration Reference

Core Settings

max_objects_per_run and description are accepted at create as well as on update. Both were previously settable only by PATCHing a sync after creating it.

File Filters

Narrow which files get synced. All filters combine with AND logic.

Metadata Filters

Filter on provider-specific metadata fields. Useful for syncing only assets that match certain tags, statuses, or custom fields in your storage system.
Supported operators: equals, not_equals, contains, not_contains, gt, lt, gte, lte, exists.

Schema Mapping

Map provider metadata to bucket schema fields during sync, so structured data arrives alongside your files.

Lifecycle Management

Pause and Resume

Temporarily stop a sync without losing progress:

Manual Trigger

Force a sync to run immediately, outside the polling schedule:

Monitoring

Check sync status and metrics:
Response includes:

Job timing

Each run is a sync job. List them at GET /v1/buckets/{bucket_id}/syncs/{sync_config_id}/jobs. A job has no pending status. It is created as RUNNING before it executes, so to find jobs that have not started yet, filter on started_at being null rather than on status. completed_at minus started_at is the execution time of the current attempt. started_at minus the job’s creation time covers dispatch, admission and setup, so it measures more than queue time.
Check metadata.started_at_source before you compute a duration. Jobs without it were recorded before September 14, 2026, and their started_at holds the time the record was created, so their execution time is unknown. Averaging durations across both kinds of job mixes measured times with creation times, and the result looks plausible.
metadata.prior_attempts only records attempts that carried started_at_source, so an older job without it may still have been retried. On those jobs resumed_via is the only retry signal, and its absence does not show that a job never retried.

Robustness

Syncs are designed for unattended, long-running operation:
  • Distributed locking prevents concurrent runs of the same sync
  • Resume cursors checkpoint progress so interrupted syncs pick up where they left off
  • Dead letter queue retries failed files up to 3 times before marking them as failed
  • Auto-suspend pauses syncs after consecutive failures to prevent runaway errors
  • Idempotent ingestion uses source tracking to never duplicate objects on retries
  • Reconciliation (the reconcile object) cascades source deletes (on_delete), propagates metadata updates (on_update), and drops objects that no longer match your filters (on_filter_drift) — all default true
If a sync gets stuck (e.g., a worker crashed mid-run), use the force unlock endpoint to release the distributed lock.
Sync API reference →