---
title: "Get a bulk import"
method: GET
path: "/collections/{collection_id}/imports/{import_id}"
tags: ["Bulk Imports"]
---

# Get a bulk import

`GET /collections/{collection_id}/imports/{import_id}`

## Request

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

Get a metadata import definition with one page of its run history (newest first).

## Path parameters

- `collection_id` string, uuid, required
- `import_id` string, uuid, required

## Query parameters

- `limit` integer
- `offset` integer

## Response `200`

The import with paged run history

- MetadataImportDetail: An import with one page of its run history (newest first). total_runs/limit/offset make truncation visible.
  - `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[]
    - `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'
  - `delete_missing` boolean
  - `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
  - `runs` MetadataImportRun[]: One page of run history, newest first
    - `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).
  - `total_runs` integer
  - `limit` integer
  - `offset` integer
  - `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.

## Other responses

- `404`: Collection or import 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 `import_type` to the response with the `200` status
  - added the optional property `runs/items/import_type` to the response with the `200` status
  - …1 more
- **2026-08-17** `b98a8a84c55f`: 4 info
  - added the optional property `enrich_metadata` to the response with the `200` status
  - added the optional property `filters/items/recursive` to the response with the `200` status
  - added the optional property `runs/items/enrich_metadata` to the response with the `200` status
  - added the optional property `runs/items/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/:import_id/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)
