---
title: "List bulk imports"
method: GET
path: "/collections/{collection_id}/imports"
tags: ["Bulk Imports"]
---

# List bulk imports

`GET /collections/{collection_id}/imports`

## Request

- Base URL: `https://api.cloudglue.dev/v1`
- URL: `https://api.cloudglue.dev/v1/collections/{collection_id}/imports`
- Auth: HTTP bearer

List a collection's metadata imports, newest first, each with its latest run inline.

## Path parameters

- `collection_id` string, uuid, required

## Query parameters

- `limit` integer
- `offset` integer

## Response `200`

Imports for the collection

- MetadataImportList
  - `object` 'list'
  - `data` MetadataImport[]
    - `object` 'metadata_import'
    - `id` string, uuid
    - `collection_id` string, uuid
    - `connector_id` string, uuid
    - `import_type` 'metadata' | 'media': Inferred from the collection's type at creation and fixed for the import's lifetime. metadata (metadata collections): source metadata is indexed, no media is downloaded, runs are free. media (every other collection type): each matching file is ingested and processed exactly like a manual add, billed per file.
    - `name` string
    - `filters` MetadataImportFilterSet[]: Listing passes; an empty array means one unfiltered pass. Overlapping passes are deduplicated on import.
      - `from` string, date: Only include source files from on/after this date (YYYY-MM-DD, UTC)
      - `to` string, date: Only include source files from on/before this date (YYYY-MM-DD, UTC)
      - `folder_id` string: Restrict listing to a folder's direct children (Google Drive only). Omit to list the entire corpus.
      - `path` string: Restrict listing to a folder path (Dropbox only). Dropbox listing is non-recursive: an import ingests only the direct children of this path (or of the root when omitted — typically all folders, i.e. nothing). Use one filter set per folder to cover a tree.
      - `title_search` string: Only include files whose title matches this search
      - `team` string: Restrict to a team (Grain only)
      - `meeting_type` string: Restrict to a meeting type (Grain only)
      - `recursive` 'true' | 'false': Dropbox only: 'true' imports the whole subtree under `path` (or the whole account when no `path` is given) instead of direct children.
    - `default_mode` 'append' | 'refresh': Mode used when a run does not specify one
    - `delete_missing` boolean: Default delete-missing behavior for refresh runs
    - `rate_limit` integer, nullable: Upstream list requests per second; null means the per-connector safe default. Clamped to a per-connector ceiling at run time.
    - `created_at` number: Unix timestamp in milliseconds
    - `latest_run` MetadataImportRun: One execution of a metadata import.
      - `object` 'metadata_import_run'
      - `id` string, uuid
      - `import_id` string, uuid
      - `import_type` 'metadata' | 'media': What this run ingests, inherited from the import definition: metadata indexes source metadata only (free); media ingests and processes the actual files (billed per file).
      - `mode` 'append' | 'refresh': append imports new files and retries previously-failed ones; refresh re-imports everything the filters match. For media imports, refresh re-syncs the source metadata of files it already imported — media bytes are never re-downloaded.
      - `delete_missing` boolean: Whether this run sweeps files this import previously brought in that the source no longer returns (refresh runs only)
      - `status` 'pending' | 'processing' | 'completed' | 'failed' | 'cancelled'
      - `progress` MetadataImportRunProgress: Best-effort progress counters for display. Run completion is decided from the actual per-file indexing state, never from these counters, so they can drift slightly under retries without affecting correctness.
        - `pages_listed` integer: Connector list pages fetched
        - `files_listed` integer: Source files seen across all filter sets
        - `files_created` integer: New Cloudglue files created
        - `files_updated` integer: Existing files re-imported (refresh mode)
        - `files_skipped` integer: Already-imported files left untouched (append mode)
        - `files_failed` integer: Files whose metadata indexing failed
        - `files_queued` integer: Files handed to indexing — the denominator for progress (indexed + failed settle against it)
        - `files_indexed` integer: Files whose metadata finished indexing (metadata imports)
        - `files_imported` integer: Files whose media was ingested and added to the collection (media imports)
        - `files_removed` integer: Files removed by the delete-missing sweep
        - `files_enriched` integer: Files whose source_metadata an enrichment batch backfilled (enrich_metadata runs only).
      - `error` string, nullable: User-facing failure reason when status is failed
      - `started_at` number, nullable: Unix timestamp in milliseconds
      - `completed_at` number, nullable: Unix timestamp in milliseconds
      - `created_at` number: Unix timestamp in milliseconds
      - `max_files` integer, nullable: The cap this run executed with; null means unbounded
      - `include_thumbnails` boolean: Whether this run copied poster thumbnails
      - `enrich_metadata` boolean: Whether this run backfills omitted source-metadata fields (see the import-level property).
    - `max_files` integer, nullable: Per-run ceiling on files processed from the listing; null means unbounded
    - `include_thumbnails` boolean: Whether runs copy connector poster images as default thumbnails for imported files (Grain and iconik today)
    - `enrich_metadata` boolean: Backfill source-metadata fields the connector's list endpoint omits, after each index batch settles: Gong parties + Call Spotlight content (batched - enriched docs are re-embedded so the content is searchable) and Dropbox media_info duration/dimensions (per-file). No-op for other connectors. Off by default: it spends upstream API budget and, for Gong, embedding work. Metadata imports only — setting it on a media import is a 400, since a media run ingests each file in full and has no metadata-only record to enrich.
  - `total` integer
  - `limit` integer
  - `offset` integer

## Other responses

- `404`: Collection not found
- `500`: An unexpected error occurred on the server

## Changes

- **2026-10-30** `23d3f240819f`: 2 info
  - added the optional property `code` to the response with the `404` status
  - added the optional property `code` to the response with the `500` status
- **2026-08-18** `e401e330a58f`: 5 info
  - api tag `Bulk Imports` added
  - api tag `Metadata Imports` removed
  - added the optional property `data/items/import_type` to the response with the `200` status
  - added the optional property `data/items/latest_run/allOf[#/components/schemas/MetadataImportRun]/import_type` to the response with the `200` status
  - …1 more
- **2026-08-17** `b98a8a84c55f`: 4 info
  - added the optional property `data/items/enrich_metadata` to the response with the `200` status
  - added the optional property `data/items/filters/items/recursive` to the response with the `200` status
  - added the optional property `data/items/latest_run/allOf[#/components/schemas/MetadataImportRun]/enrich_metadata` to the response with the `200` status
  - added the optional property `data/items/latest_run/allOf[#/components/schemas/MetadataImportRun]/progress/files_enriched` to the response with the `200` status
- **2026-08-13** `96a727e8d42d`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/cloudglue/apis/cloudglue-api/changes/collections/:collection_id/imports/get.md)

---

[API](https://skmtc.dev/cloudglue/apis/cloudglue-api.md) - [All operations](https://skmtc.dev/cloudglue/apis/cloudglue-api/llms.txt) - [OpenAPI document](https://skmtc.dev/cloudglue/apis/cloudglue-api/revisions/23d3f240819f?raw)
