Skip to main content
Once an account is connected, moving files takes three calls:
  1. Browse to let the user choose a folder
  2. Transfer to create the link and start a run
  3. Poll or subscribe to follow progress

Step 1: Browse the provider

Browse returns one level at a time. With no parameters you get the top-level containers—matters for Clio, My Drive and shared drives for Google Drive.
Endpoint
cURL
Response
To descend, pass back the browse_ref fields from the item the user picked:
cURL
Item kind is one of my_drive, shared_drive, matter, folder, or file. The enum also reserves site and document_library for providers that group drives under sites; neither current provider returns them, and the site query parameter is likewise unused.
browse_ref and import_ref are opaque references. Pass them back exactly as received.Never construct one from a provider id supplied by a browser, and never accept one as user input in your own API. These values are how the service decides what a caller is allowed to reach.
Some items are browsable but not importable, and some are the reverse. When an item carries an import_ref that differs from its browse_ref, use import_ref as the link’s remote.
Browsing needs a connection scope that permits server-side listing. If it does not, you get 403 provider_scope_insufficient—the user consented at a narrower tier than browsing requires.
Endpoint
cURL
Response (202)
A link’s identity is (connection_id, direction, remote, vault_id). The first call creates it and runs a full backfill. Every later call with the same four values runs an incremental diff against the ledger—so “Re-import” in your UI is this exact request again. If a run is already active, the existing run is returned instead of an error. Double-clicking is safe.

Exclude folders or files

For Clio and Google Drive document imports, include policy.filters.exclude_folder_ids and policy.filters.exclude_file_ids with stable provider IDs from browsing. Excluding a folder excludes its entire subtree. New files in included folders continue importing, while these exclusions apply to subsequent runs and full reconciliations. Existing vault copies are preserved. Exclusions require policy.deletes: "preserve" (the default); combining exclusions with deletes: "mirror" returns 400. For direction: "both", exclusions are stored on the import half only; the export half retains other policy settings. Each list accepts up to 1,000 IDs. The import root cannot be excluded. These filters do not apply to exports, Clio tasks, or Clio communications. Connections advertise support through import_exclusions_supported: true. An existing source link keeps its selection. Repeating a transfer with a different selection returns 409 import_selection_conflict; use the link policy update endpoint to deliberately change an existing link’s filters. PATCH /connectors/v1/links/{id} replaces the entire stored policy. Include every policy field you want to retain, including deletes, collisions, and existing size/MIME filters. Omitted fields return to their defaults; PATCH does not merge policy objects.

When a run does not start

run.started can be false with a reason. This is not an error: The link is created either way. Poll it and the run will begin.

Keeping a folder current

For a standing promise instead of a one-shot, use /sync-link. Same body, minus run_mode.
Endpoint
It backfills now, then stays current on a sweep cycle. Due links run incrementally about every 15 minutes. Once a day the sweep runs a full reconcile instead, which catches deletions and moved folders that per-file change feeds cannot report. An existing once link is upgraded in place, keeping its ledger and cursor. Nothing re-imports. To step back down or pause:
cURL
PATCH also accepts state (paused or ready) and a replacement policy.

Step 3: Follow progress

Endpoint
Response

Run statuses

running, completed, completed_with_errors, or failed. completed_with_errors means the run finished and some files failed—check the ledger for which.
counts.pending is the umbrella for everything not yet settled. queued and processing are subsets of it, so do not add them together.

Per-file results

Run stats tell you how many. The ledger tells you which.
Endpoint
cURL
Each row carries the provider item, the vault object it became, its path, its content version, its state, and an error when one applies. Filter by state and page with cursor.

Events instead of polling

For anything longer than a few seconds, subscribe rather than poll. These events carry connector progress: All connector events require the connectors scope on your webhook endpoint.
Endpoint
Deletes the link and its ledger. Vault documents are kept by default. Add ?vault_docs=delete to remove the documents an import link brought in. That cleanup runs as a durable background workflow and returns 202.
vault_docs=delete is not reversible. Confirm with the user before calling it.

Next steps

Errors & Recovery

What each failure means and which ones to retry

Providers

How Clio and Google Drive differ in hierarchy, change detection, and rate budget

Vault Search

Search the documents once they have been ingested