x-api-key header — see Authentication.
The base URL is https://app.vern.so/api/v1.
1
Set up your sources and templates (one time, in the UI)
Before any API calls, set up your sources and templates in the Vern
dashboard — the target shape you want every customer’s data to land in.
There’s no import plan to author or freeze: the
managed agent builds and reuses
the mapping logic for you at run time. See Core concepts.
2
Discover sources and templates (optional)
To let your customer pick which system they’re migrating from and which
objects to import, list your sources and templates and render them in your own
UI. Skip this if you already know the names and slugs.Feed the chosen source name into
source and the chosen template
slugs into templates below. See List sources
and List templates.3
Create a migration for the customer
Create a migration, optionally naming the source the data comes from. You get
back the Use
id used by every later call.migration.id for every later call. See
Create a migration for every field.4
Upload the customer's files
Ask for one signed upload URL per file, then Then See Upload files for listing and limits.
PUT the bytes straight to
storage. Files are workbook-level — you don’t map them to templates.PUT each file to its signed_url:5
Generate a preview
Start a See Start a run for every
generate run. The agent authors the mapping logic and stops at a
preview. The call is async — it returns a run to poll.kind.6
Poll until the run is awaiting approval
Poll the run every couple of seconds until If it comes back
status is terminal for this
phase — for a generate run that’s awaiting_approval.blocked instead, the agent has a question — see the next
step. See Poll a run for every status shape.7
Answer the agent (only if it asks)
A The agent resumes — poll again until it’s
blocked poll response carries plain-language questions — render them in
your own UI, then send the answer to the run’s messages sub-resource:awaiting_approval (or it blocks
once more with a fresh question). See
Answer the agent.8
Review the preview
Fetch the proposed output, sheet-per-template, and show it to your customer.Not right yet? Refine it with an
update run ({ "kind": "update", "message": "Use the company domain for missing emails" }) or ask a read-only clarify
question — both produce a fresh preview / answer. See
Get the preview and
Start a run.9
Execute the import
Happy with the preview? Start an Poll until it’s A
execute run to import for real.completed:completed execute with invalidCellCount > 0 means that many rows still
have at least one cell that failed validation — the rest are clean. The default
CSV download (?filter=valid) excludes those rows. See
Poll a run.10
Deliver the clean data
Download a sheet’s validated rows as a CSV, addressed by template slug (valid
rows only, by default):See Export CSV for filters and streaming into
your own storage.