[Aug 14, 2026] Import Existing Liens from the Public Record
You can now bring liens you already hold on the public record into Baselayer, so their filing history lives alongside the filings you originate. Import one at a time, or upload a CSV to import in bulk.
Import a single filing. POST /lien_submissions/import claims one public record filing for your organization and returns the imported filing (201, or 200 if you had already imported it). Imported filings are read-only mirrors of the public record.
Import in bulk. POST /lien_submissions/import/batches accepts a CSV of liens to import (one lien per row) and always processes asynchronously, returning 202 with a batch id. Each row is a state and a filing_number (both required), with an optional filing_name. The file as a whole is validated on upload: type, encoding, size, headers, and row count; a row the importer cannot resolve is reported per row rather than failing the batch.
Track and collect results. Poll GET /lien_submissions/import/batches/{batch_id} for the batch's state and per-outcome counts (imported, already imported, not found, invalid), list your batches with GET /lien_submissions/import/batches, and download the per-row results as JSONL from GET /lien_submissions/import/batches/{batch_id}/download. To find the filings a batch produced, GET /lien_submissions now accepts origin and import_batch_id filters.
Get notified when a batch finishes. Two new webhook events report the terminal outcome of a bulk import, each carrying the batch's final counts: LienFilingImportBatch.completed and LienFilingImportBatch.failed. A bulk import reports counts once at the end rather than emitting a per-row event.
Notes. Only consensual UCC filings can be imported; tax, judicial, and statutory liens are rejected. Imports run on production applications only: a sandbox application cannot claim filings from the public record.
No integration changes required - every endpoint, filter, and webhook event is additive.
