- Browse to let the user choose a folder
- Transfer to create the link and start a run
- 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
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.
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.Step 2: Create the link and run it
Endpoint
cURL
Response (202)
(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.
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
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
Link states
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
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.
Deleting a link
Endpoint
?vault_docs=delete to remove the documents an import link brought in. That cleanup runs as a durable background workflow and returns 202.
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

